Repository navigation
Conversation
Setup wrote the memory_extraction task class with privacy restricted_remote for every provider. The router infers remote_ok for a remote openrouter or openai-compatible target and blocks it because remote_ok ranks below restricted_remote, so a fresh install with a remote extraction model could never run Dreaming. Choosing a remote provider in setup is the operator's decision to send memory to it. Record that the way dashboard onboarding and the Settings consent prompt already do, with privacy remote_ok on the task class. Local targets and ACPX keep restricted_remote, so the dashboard still asks before they are switched to a remote provider. Assisted-by: Claude-Code:claude-opus-5-5
Installs set up before the previous commit keep a memory_extraction task class that their remote target can never satisfy. The daemon reports runtime healthy and account ready, and status only says to connect a provider, so nothing names the privacy gate. signet doctor now resolves the memory_extraction route from agent.yaml with every target treated as healthy. When the route fails on the privacy gate it warns with the blocked target and the two ways to fix it. It does not change the config: allowing remote extraction stays an explicit operator choice. Assisted-by: Claude-Code:claude-opus-5-5
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 52 minutes. View limit detailsLimit details: You’ve used all 2 included reviews currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (6)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Assisted-by: Claude-Code:claude-opus-5-5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #2015.
signet setupgave thememory_extractiontask classprivacy: restricted_remotefor every extraction provider. The router (platform/core/src/routing.ts) infersremote_okfor a remoteopenrouteroropenai-compatibletarget.remote_okranks belowrestricted_remote, so the router blocked the only candidate. Fresh installs with a remote extraction model could never routememory_extraction, so Dreaming never ran.The router's behavior is correct; the setup output is not. Per #1258 / #1265, the dashboard records an operator's decision to send memory to a remote provider as
privacy: remote_okon the task class. Dashboard onboarding writes it when a remote provider is picked, and Settings → Inference writes it on "Use remotely". This PR makes CLI setup follow the same contract. Router defaults are unchanged.Changes
surfaces/cli/src/features/setup-pipeline.ts: setup writesprivacy: remote_okonmemory_extractionwhen the operator picksopenrouter, oropenai-compatiblewith a non-loopback endpoint. Locality is checked with the router's ownisLocalInferenceEndpoint. Neither provider is ever auto-detected, so either one is an explicit choice. Ollama, llama.cpp, loopbackopenai-compatible, and ACPX keeprestricted_remote, so the dashboard still asks before any of them is moved to a remote provider. ACPX can be auto-detected, so setup does not record consent for it; Settings → Inference already treats an ACPX target as remote and asks for it directly. The route resolves either way, because the router infersrestricted_remotefor ACPX targets.isGeneratedSetupTaskClassalso recognizes theremote_okvariant, so switching setup to--extraction-provider nonestill removes it.surfaces/cli/src/features/health.ts: for existing installs,signet doctorresolves thememory_extractionroute fromagent.yamlwithresolveRoutingDecision, treating every target as healthy. If the route fails on the privacy gate, doctor warns (memory_extraction_privacy_blocked). The warning names the blocked target and gives the fix: "Use remotely" in Settings → Inference, orprivacy: remote_okinagent.yaml.web/docs/src/content/docs/cli/getting-started.mddescribes the setup behavior, including the dashboard's ACPX consent prompt.web/docs/src/content/docs/benchmarking.mdnow says why the bench still sets target privacy (it swaps the executor after setup).Type
feat— new user-facing feature (bumps minor)fix— bug fixrefactor— restructure without behavior changechore— build, deps, config, docsperf— performance improvementtest— test coveragePackages affected
@signet/core@signet/daemon@signet/cli/ dashboard@signet/sdk@signet/connector-*@signet/webpredictorScreenshots
N/A, no UI changes.
Migration Notes (if applicable)
No config migration, on purpose. A migration that rewrites existing
restricted_remotetask classes toremote_okcannot tell a setup-written route from one where the operator later pointed a local target at a remote endpoint by hand. Rewriting the second kind would grant remote-extraction consent the operator never gave. Existing installs get the doctor warning, and the Settings → Inference consent prompt already appears for them when the dashboard opens.Testing
bun testpasses:surfaces/cli/src/features/setup-pipeline.test.ts,health.test.ts,setup.test.tsbun run typecheckpasses:@signet/clihas no typecheck script. A scopedtsc --noEmitover the touched files found no errors on changed lines.bun run lintpasses:bunx biome checkon changed files,bun run comments:checkNew tests send each setup-generated route (OpenRouter, remote and loopback OpenAI-compatible, Ollama, llama.cpp, ACPX) through
parseRoutingConfigandresolveRoutingDecision. The remote cases fail onmainwithprivacy gate (restricted_remote). The doctor test fails without thehealth.tschange.Manual reproduction with a temp
HOMEonmain:signet setup --non-interactive --extraction-provider openai-compatible --extraction-model glm-5.3-flash --extraction-endpoint https://open.bigmodel.cn/api/coding/paas/v4wroterestricted_remote, and resolving the route offline returnedblockedBy: ["privacy gate (restricted_remote)"]. On this branch the same command writesremote_okand the route resolves tobackground/default. The same holds foropenrouter. Loopbackopenai-compatibleandollamastill writerestricted_remoteand still resolve. Runningsignet doctor --jsonon the workspace frommainreportsmemory_extraction_privacy_blocked, and on the new workspace it reports nothing.Live verification: I ran two isolated daemons from source, one from
mainand one from this branch, each with its own tempHOMEandSIGNET_PATH. A local OpenAI-compatible stub stood in for the provider. It listened on this machine's LAN IP (http://10.0.0.142:<port>/v1), so the router treated the endpoint as remote.signet setup --non-interactive --extraction-provider openai-compatible --extraction-model glm-test --extraction-endpoint http://10.0.0.142:…/v1.main's CLI wroteprivacy: restricted_remote, and this branch's CLI wroteprivacy: remote_ok. The rest of the inference block was identical.openai-compatibleendpoint. Without one, the router also blocks the target withmissing credential:mainreported that next to the privacy gate, and this branch reported onlymissing credential. To match the issue (runtime healthy,account ready), I added anapiaccount with acredentialRefpointing at a dummy env var to both workspaces.main.POST /api/inference/explain {"operation":"memory_extraction"}andPOST /api/inference/execute {"workload":"memoryExtraction"}returnedblockedBy: ["privacy gate (restricted_remote)"]withruntime healthy, account ready; execute returned HTTP 502. The Dreaming scheduler reportedblocked / inference_unavailable, andPOST /api/dream/triggerreturned 503 "No inference provider is connected". The stub received no completion requests.background/default(blockedBy: []), and execute returned the stub's reply. The Dreaming scheduler reportedidle. After one/api/memory/remember,POST /api/dream/triggerreturned 202. The pass completed, and the stub logged a 56 KB streamed/v1/chat/completionsrequest forglm-test.signet doctor --jsonagainst themain-created workspace reportedmemory_extraction_privacy_blocked(warn, exit 0); the human output showed the same text. Against this branch's workspace it reported no such finding.openai-compatible(http://127.0.0.1:…/v1) andollamasetups still wroterestricted_remote. Each route resolved live against a loopback stub, with execute returning 200, and doctor reported no warning for either./health. Shutdown logged only the same benign lines asmain.AI disclosure
Assisted-bytags in commits)Notes
scripts/bench-memory.tsstill setsprivacy: restricted_remoteon its target. The bench now needs it only when setup ran against a loopback endpoint and the bench then swaps in a remote executor. I left it unchanged.warn, noterror, so it does not change doctor's exit status.signet statusstill prints "Memory is paused until you connect a provider" when Dreaming's scheduler reportsinference_unavailable, and that is misleading for a privacy block. Fixing it means passing the router'sblockedBythrough the Dreaming scheduler status, which belongs in a separate change.