dodo-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +425 -0
- package/dist/auth/adapter.js +43 -0
- package/dist/auth/adapter.js.map +1 -0
- package/dist/auth/clientDeletion.js +45 -0
- package/dist/auth/clientDeletion.js.map +1 -0
- package/dist/auth/clients.js +55 -0
- package/dist/auth/clients.js.map +1 -0
- package/dist/auth/constants.js +10 -0
- package/dist/auth/constants.js.map +1 -0
- package/dist/auth/interactions.js +184 -0
- package/dist/auth/interactions.js.map +1 -0
- package/dist/auth/keys.js +56 -0
- package/dist/auth/keys.js.map +1 -0
- package/dist/auth/provider.js +131 -0
- package/dist/auth/provider.js.map +1 -0
- package/dist/auth/verifier.js +74 -0
- package/dist/auth/verifier.js.map +1 -0
- package/dist/cli/kill.js +124 -0
- package/dist/cli/kill.js.map +1 -0
- package/dist/cli/main.js +1393 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/menu.js +127 -0
- package/dist/cli/menu.js.map +1 -0
- package/dist/cli/terminal.js +30 -0
- package/dist/cli/terminal.js.map +1 -0
- package/dist/config/globalConfig.js +144 -0
- package/dist/config/globalConfig.js.map +1 -0
- package/dist/config/limits.js +42 -0
- package/dist/config/limits.js.map +1 -0
- package/dist/config/paths.js +94 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/projectConfig.js +63 -0
- package/dist/config/projectConfig.js.map +1 -0
- package/dist/config/stateImport.js +306 -0
- package/dist/config/stateImport.js.map +1 -0
- package/dist/config/tunnelConfig.js +23 -0
- package/dist/config/tunnelConfig.js.map +1 -0
- package/dist/errors.js +82 -0
- package/dist/errors.js.map +1 -0
- package/dist/evaluation/contracts.js +86 -0
- package/dist/evaluation/contracts.js.map +1 -0
- package/dist/evaluation/dodoBench.js +69 -0
- package/dist/evaluation/dodoBench.js.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/authentication.js +117 -0
- package/dist/ipc/authentication.js.map +1 -0
- package/dist/ipc/client.js +86 -0
- package/dist/ipc/client.js.map +1 -0
- package/dist/ipc/installationClient.js +83 -0
- package/dist/ipc/installationClient.js.map +1 -0
- package/dist/ipc/ownerControl.js +46 -0
- package/dist/ipc/ownerControl.js.map +1 -0
- package/dist/ipc/protocol.js +2 -0
- package/dist/ipc/protocol.js.map +1 -0
- package/dist/ipc/server.js +108 -0
- package/dist/ipc/server.js.map +1 -0
- package/dist/platform/execResolve.js +64 -0
- package/dist/platform/execResolve.js.map +1 -0
- package/dist/platform/fileIdentity.js +26 -0
- package/dist/platform/fileIdentity.js.map +1 -0
- package/dist/platform/fsRetry.js +22 -0
- package/dist/platform/fsRetry.js.map +1 -0
- package/dist/platform/pathPolicy.js +29 -0
- package/dist/platform/pathPolicy.js.map +1 -0
- package/dist/platform/privateFs.js +116 -0
- package/dist/platform/privateFs.js.map +1 -0
- package/dist/platform/processTree.js +31 -0
- package/dist/platform/processTree.js.map +1 -0
- package/dist/platform/shell.js +74 -0
- package/dist/platform/shell.js.map +1 -0
- package/dist/platform/speech.js +94 -0
- package/dist/platform/speech.js.map +1 -0
- package/dist/platform/system.js +28 -0
- package/dist/platform/system.js.map +1 -0
- package/dist/platform/windowsSandbox.js +129 -0
- package/dist/platform/windowsSandbox.js.map +1 -0
- package/dist/projects/federation.js +312 -0
- package/dist/projects/federation.js.map +1 -0
- package/dist/projects/registry.js +291 -0
- package/dist/projects/registry.js.map +1 -0
- package/dist/security/accessMode.js +19 -0
- package/dist/security/accessMode.js.map +1 -0
- package/dist/security/approvals.js +56 -0
- package/dist/security/approvals.js.map +1 -0
- package/dist/security/env.js +57 -0
- package/dist/security/env.js.map +1 -0
- package/dist/security/mutationQueue.js +78 -0
- package/dist/security/mutationQueue.js.map +1 -0
- package/dist/security/policy.js +22 -0
- package/dist/security/policy.js.map +1 -0
- package/dist/security/projectAuthority.js +22 -0
- package/dist/security/projectAuthority.js.map +1 -0
- package/dist/security/redact.js +30 -0
- package/dist/security/redact.js.map +1 -0
- package/dist/server/aiAdmin.js +201 -0
- package/dist/server/aiAdmin.js.map +1 -0
- package/dist/server/appServer.js +461 -0
- package/dist/server/appServer.js.map +1 -0
- package/dist/server/bootstrap.js +185 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/configUi/app.css +347 -0
- package/dist/server/configUi/app.js +958 -0
- package/dist/server/configUi/index.html +379 -0
- package/dist/server/configUi/ui/alerts.js +92 -0
- package/dist/server/configUi/ui/dom.js +19 -0
- package/dist/server/configUi/ui/tooltips.js +115 -0
- package/dist/server/configUi/vendor/VERSION.txt +1 -0
- package/dist/server/configUi/vendor/sweetalert2.min.css +1 -0
- package/dist/server/configUi/vendor/sweetalert2.min.js +5 -0
- package/dist/server/configUi/workbench.css +62 -0
- package/dist/server/configUi/workbench.js +394 -0
- package/dist/server/installationRuntime.js +155 -0
- package/dist/server/installationRuntime.js.map +1 -0
- package/dist/server/instructions.js +17 -0
- package/dist/server/instructions.js.map +1 -0
- package/dist/server/ipcDispatch.js +225 -0
- package/dist/server/ipcDispatch.js.map +1 -0
- package/dist/server/localConfig.js +561 -0
- package/dist/server/localConfig.js.map +1 -0
- package/dist/server/optionalServices.js +30 -0
- package/dist/server/optionalServices.js.map +1 -0
- package/dist/server/projectLease.js +46 -0
- package/dist/server/projectLease.js.map +1 -0
- package/dist/server/stdioServer.js +75 -0
- package/dist/server/stdioServer.js.map +1 -0
- package/dist/server/version.js +13 -0
- package/dist/server/version.js.map +1 -0
- package/dist/server/workspaceHost.js +194 -0
- package/dist/server/workspaceHost.js.map +1 -0
- package/dist/services/agent/agentService.js +598 -0
- package/dist/services/agent/agentService.js.map +1 -0
- package/dist/services/agent/contracts.js +102 -0
- package/dist/services/agent/contracts.js.map +1 -0
- package/dist/services/ai/adapters.js +287 -0
- package/dist/services/ai/adapters.js.map +1 -0
- package/dist/services/ai/contracts.js +39 -0
- package/dist/services/ai/contracts.js.map +1 -0
- package/dist/services/ai/credentials.js +77 -0
- package/dist/services/ai/credentials.js.map +1 -0
- package/dist/services/ai/network.js +113 -0
- package/dist/services/ai/network.js.map +1 -0
- package/dist/services/ai/settings.js +178 -0
- package/dist/services/ai/settings.js.map +1 -0
- package/dist/services/ai/subagents.js +468 -0
- package/dist/services/ai/subagents.js.map +1 -0
- package/dist/services/assistance/analysis.js +352 -0
- package/dist/services/assistance/analysis.js.map +1 -0
- package/dist/services/assistance/contracts.js +54 -0
- package/dist/services/assistance/contracts.js.map +1 -0
- package/dist/services/assistance/verification.js +274 -0
- package/dist/services/assistance/verification.js.map +1 -0
- package/dist/services/brain/brainParser.js +97 -0
- package/dist/services/brain/brainParser.js.map +1 -0
- package/dist/services/brain/brainService.js +733 -0
- package/dist/services/brain/brainService.js.map +1 -0
- package/dist/services/brain/brainWorker.js +212 -0
- package/dist/services/brain/brainWorker.js.map +1 -0
- package/dist/services/brain/contracts.js +154 -0
- package/dist/services/brain/contracts.js.map +1 -0
- package/dist/services/brain/protocol.js +2 -0
- package/dist/services/brain/protocol.js.map +1 -0
- package/dist/services/changes/applier.js +544 -0
- package/dist/services/changes/applier.js.map +1 -0
- package/dist/services/changes/contentBudget.js +11 -0
- package/dist/services/changes/contentBudget.js.map +1 -0
- package/dist/services/changes/planner.js +284 -0
- package/dist/services/changes/planner.js.map +1 -0
- package/dist/services/changes/types.js +3 -0
- package/dist/services/changes/types.js.map +1 -0
- package/dist/services/context/contextEngine.js +746 -0
- package/dist/services/context/contextEngine.js.map +1 -0
- package/dist/services/context/contracts.js +88 -0
- package/dist/services/context/contracts.js.map +1 -0
- package/dist/services/desktop/desktopPolicy.js +76 -0
- package/dist/services/desktop/desktopPolicy.js.map +1 -0
- package/dist/services/desktop/desktopService.js +130 -0
- package/dist/services/desktop/desktopService.js.map +1 -0
- package/dist/services/desktop/nativeBackend.js +174 -0
- package/dist/services/desktop/nativeBackend.js.map +1 -0
- package/dist/services/desktop/protocol.js +32 -0
- package/dist/services/desktop/protocol.js.map +1 -0
- package/dist/services/files/readService.js +136 -0
- package/dist/services/files/readService.js.map +1 -0
- package/dist/services/git/gitService.js +369 -0
- package/dist/services/git/gitService.js.map +1 -0
- package/dist/services/intelligence/intelService.js +136 -0
- package/dist/services/intelligence/intelService.js.map +1 -0
- package/dist/services/intelligence/protocol.js +2 -0
- package/dist/services/intelligence/protocol.js.map +1 -0
- package/dist/services/intelligence/tsWorker.js +419 -0
- package/dist/services/intelligence/tsWorker.js.map +1 -0
- package/dist/services/jobs/commandInput.js +34 -0
- package/dist/services/jobs/commandInput.js.map +1 -0
- package/dist/services/jobs/jobManager.js +398 -0
- package/dist/services/jobs/jobManager.js.map +1 -0
- package/dist/services/jobs/sandbox.js +156 -0
- package/dist/services/jobs/sandbox.js.map +1 -0
- package/dist/services/jobs/sandboxWiring.js +37 -0
- package/dist/services/jobs/sandboxWiring.js.map +1 -0
- package/dist/services/jobs/spool.js +112 -0
- package/dist/services/jobs/spool.js.map +1 -0
- package/dist/services/jobs/windowsSandboxChild.js +24 -0
- package/dist/services/jobs/windowsSandboxChild.js.map +1 -0
- package/dist/services/jobs/windowsSandboxWorker.js +155 -0
- package/dist/services/jobs/windowsSandboxWorker.js.map +1 -0
- package/dist/services/lsp/documentUri.js +16 -0
- package/dist/services/lsp/documentUri.js.map +1 -0
- package/dist/services/lsp/jsonrpc.js +382 -0
- package/dist/services/lsp/jsonrpc.js.map +1 -0
- package/dist/services/lsp/lspService.js +1051 -0
- package/dist/services/lsp/lspService.js.map +1 -0
- package/dist/services/memory/contracts.js +94 -0
- package/dist/services/memory/contracts.js.map +1 -0
- package/dist/services/memory/memoryService.js +683 -0
- package/dist/services/memory/memoryService.js.map +1 -0
- package/dist/services/multimodal/browserService.js +407 -0
- package/dist/services/multimodal/browserService.js.map +1 -0
- package/dist/services/multimodal/byteRange.js +31 -0
- package/dist/services/multimodal/byteRange.js.map +1 -0
- package/dist/services/multimodal/contracts.js +59 -0
- package/dist/services/multimodal/contracts.js.map +1 -0
- package/dist/services/multimodal/gameService.js +95 -0
- package/dist/services/multimodal/gameService.js.map +1 -0
- package/dist/services/multimodal/images.js +107 -0
- package/dist/services/multimodal/images.js.map +1 -0
- package/dist/services/multimodal/mediaService.js +279 -0
- package/dist/services/multimodal/mediaService.js.map +1 -0
- package/dist/services/multimodal/mediaWorker.js +143 -0
- package/dist/services/multimodal/mediaWorker.js.map +1 -0
- package/dist/services/multimodal/multimodalService.js +51 -0
- package/dist/services/multimodal/multimodalService.js.map +1 -0
- package/dist/services/multimodal/network.js +69 -0
- package/dist/services/multimodal/network.js.map +1 -0
- package/dist/services/multimodal/operations.js +40 -0
- package/dist/services/multimodal/operations.js.map +1 -0
- package/dist/services/multimodal/storage.js +160 -0
- package/dist/services/multimodal/storage.js.map +1 -0
- package/dist/services/multimodal/workflowService.js +179 -0
- package/dist/services/multimodal/workflowService.js.map +1 -0
- package/dist/services/overview.js +284 -0
- package/dist/services/overview.js.map +1 -0
- package/dist/services/resources/casStore.js +304 -0
- package/dist/services/resources/casStore.js.map +1 -0
- package/dist/services/resources/contracts.js +75 -0
- package/dist/services/resources/contracts.js.map +1 -0
- package/dist/services/resources/mime.js +77 -0
- package/dist/services/resources/mime.js.map +1 -0
- package/dist/services/resources/providerRegistry.js +22 -0
- package/dist/services/resources/providerRegistry.js.map +1 -0
- package/dist/services/resources/providers.js +120 -0
- package/dist/services/resources/providers.js.map +1 -0
- package/dist/services/resources/resourceService.js +282 -0
- package/dist/services/resources/resourceService.js.map +1 -0
- package/dist/services/runtime/contracts.js +65 -0
- package/dist/services/runtime/contracts.js.map +1 -0
- package/dist/services/runtime/runtimeService.js +364 -0
- package/dist/services/runtime/runtimeService.js.map +1 -0
- package/dist/services/schedules/scheduleService.js +198 -0
- package/dist/services/schedules/scheduleService.js.map +1 -0
- package/dist/services/search/searchService.js +434 -0
- package/dist/services/search/searchService.js.map +1 -0
- package/dist/services/search/searchWorker.js +58 -0
- package/dist/services/search/searchWorker.js.map +1 -0
- package/dist/setup/componentProbes.js +259 -0
- package/dist/setup/componentProbes.js.map +1 -0
- package/dist/setup/download.js +139 -0
- package/dist/setup/download.js.map +1 -0
- package/dist/setup/managedTools.js +118 -0
- package/dist/setup/managedTools.js.map +1 -0
- package/dist/setup/sandboxProbe.js +172 -0
- package/dist/setup/sandboxProbe.js.map +1 -0
- package/dist/setup/setup.js +522 -0
- package/dist/setup/setup.js.map +1 -0
- package/dist/setup/windowsChromiumAcl.js +56 -0
- package/dist/setup/windowsChromiumAcl.js.map +1 -0
- package/dist/setup/windowsSandboxInstall.js +94 -0
- package/dist/setup/windowsSandboxInstall.js.map +1 -0
- package/dist/setup/windowsSpeechInstall.js +86 -0
- package/dist/setup/windowsSpeechInstall.js.map +1 -0
- package/dist/store/db.js +711 -0
- package/dist/store/db.js.map +1 -0
- package/dist/store/scopeEncoding.js +15 -0
- package/dist/store/scopeEncoding.js.map +1 -0
- package/dist/store/store.js +467 -0
- package/dist/store/store.js.map +1 -0
- package/dist/tools/agentRuntimeTools.js +216 -0
- package/dist/tools/agentRuntimeTools.js.map +1 -0
- package/dist/tools/agentTools.js +317 -0
- package/dist/tools/agentTools.js.map +1 -0
- package/dist/tools/assistanceTools.js +126 -0
- package/dist/tools/assistanceTools.js.map +1 -0
- package/dist/tools/brainTools.js +130 -0
- package/dist/tools/brainTools.js.map +1 -0
- package/dist/tools/catalog.js +30 -0
- package/dist/tools/catalog.js.map +1 -0
- package/dist/tools/changeTools.js +188 -0
- package/dist/tools/changeTools.js.map +1 -0
- package/dist/tools/context.js +243 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/contextTools.js +57 -0
- package/dist/tools/contextTools.js.map +1 -0
- package/dist/tools/coreCatalog.js +82 -0
- package/dist/tools/coreCatalog.js.map +1 -0
- package/dist/tools/desktopTools.js +41 -0
- package/dist/tools/desktopTools.js.map +1 -0
- package/dist/tools/directTools.js +273 -0
- package/dist/tools/directTools.js.map +1 -0
- package/dist/tools/envelope.js +71 -0
- package/dist/tools/envelope.js.map +1 -0
- package/dist/tools/extraTools.js +298 -0
- package/dist/tools/extraTools.js.map +1 -0
- package/dist/tools/gitTools.js +93 -0
- package/dist/tools/gitTools.js.map +1 -0
- package/dist/tools/jobTools.js +454 -0
- package/dist/tools/jobTools.js.map +1 -0
- package/dist/tools/memoryTools.js +102 -0
- package/dist/tools/memoryTools.js.map +1 -0
- package/dist/tools/metaTools.js +153 -0
- package/dist/tools/metaTools.js.map +1 -0
- package/dist/tools/multimodalTools.js +262 -0
- package/dist/tools/multimodalTools.js.map +1 -0
- package/dist/tools/projectTools.js +261 -0
- package/dist/tools/projectTools.js.map +1 -0
- package/dist/tools/resourceTools.js +81 -0
- package/dist/tools/resourceTools.js.map +1 -0
- package/dist/tools/runtimeTools.js +137 -0
- package/dist/tools/runtimeTools.js.map +1 -0
- package/dist/tools/scheduleTools.js +10 -0
- package/dist/tools/scheduleTools.js.map +1 -0
- package/dist/tools/semanticTools.js +141 -0
- package/dist/tools/semanticTools.js.map +1 -0
- package/dist/tools/subagentTools.js +32 -0
- package/dist/tools/subagentTools.js.map +1 -0
- package/dist/tools/surface.js +644 -0
- package/dist/tools/surface.js.map +1 -0
- package/dist/tunnel/control.js +113 -0
- package/dist/tunnel/control.js.map +1 -0
- package/dist/tunnel/credentials.js +392 -0
- package/dist/tunnel/credentials.js.map +1 -0
- package/dist/tunnel/log.js +84 -0
- package/dist/tunnel/log.js.map +1 -0
- package/dist/tunnel/runtime.js +55 -0
- package/dist/tunnel/runtime.js.map +1 -0
- package/dist/tunnel/supervisor.js +280 -0
- package/dist/tunnel/supervisor.js.map +1 -0
- package/dist/util/bytes.js +53 -0
- package/dist/util/bytes.js.map +1 -0
- package/dist/util/hash.js +53 -0
- package/dist/util/hash.js.map +1 -0
- package/dist/workspace/fs.js +305 -0
- package/dist/workspace/fs.js.map +1 -0
- package/dist/workspace/identity.js +17 -0
- package/dist/workspace/identity.js.map +1 -0
- package/dist/workspace/ignores.js +173 -0
- package/dist/workspace/ignores.js.map +1 -0
- package/dist/workspace/root.js +59 -0
- package/dist/workspace/root.js.map +1 -0
- package/docs/AGENT_RUNTIME.md +154 -0
- package/docs/AI_PROVIDERS.md +110 -0
- package/docs/ARCHITECTURE.md +331 -0
- package/docs/ASSISTANCE.md +31 -0
- package/docs/AUTH.md +59 -0
- package/docs/BRAIN.md +92 -0
- package/docs/COMPATIBILITY.md +92 -0
- package/docs/CONFIRMATION.md +13 -0
- package/docs/CONTEXT.md +87 -0
- package/docs/DESKTOP.md +35 -0
- package/docs/EVALUATION.md +86 -0
- package/docs/LARGE_INPUTS.md +21 -0
- package/docs/LSP.md +21 -0
- package/docs/MANUAL_ACCEPTANCE.md +283 -0
- package/docs/MEMORY.md +128 -0
- package/docs/MULTIMODAL.md +32 -0
- package/docs/PROJECTS.md +146 -0
- package/docs/RELEASE_1.0.0.md +111 -0
- package/docs/RELEASE_NOTES.md +92 -0
- package/docs/RESOURCES.md +83 -0
- package/docs/RUNTIME.md +125 -0
- package/docs/SCHEDULES.md +23 -0
- package/docs/SECURITY.md +250 -0
- package/docs/TEST_REPORT.md +312 -0
- package/docs/TUNNEL.md +86 -0
- package/docs/WEB_CLIENTS.md +43 -0
- package/docs/WINDOWS.md +79 -0
- package/docs/adr/001-one-process-one-workspace.md +22 -0
- package/docs/adr/002-external-tunnel.md +19 -0
- package/docs/adr/003-sdk-v2-legacy-stateless.md +20 -0
- package/docs/adr/004-embedded-oauth-provider.md +19 -0
- package/docs/adr/005-static-client-baseline.md +19 -0
- package/docs/adr/006-guarded-fs-explicit-exec.md +16 -0
- package/docs/adr/007-preview-hash-journal.md +18 -0
- package/docs/adr/008-ts-js-semantics-first.md +17 -0
- package/docs/adr/009-jobs-polling.md +18 -0
- package/docs/adr/010-sqlite-better-sqlite3.md +18 -0
- package/docs/adr/011-env-example-secure-default.md +19 -0
- package/docs/adr/012-workspace-scope-grant.md +24 -0
- package/docs/adr/013-loopback-proxy-trust.md +18 -0
- package/docs/adr/014-direct-coding-tier.md +48 -0
- package/docs/adr/015-coding-agent-parity.md +56 -0
- package/docs/adr/016-oidc-openid-consent.md +15 -0
- package/docs/adr/017-installation-identity-local-config.md +44 -0
- package/docs/adr/018-access-scope-encoding.md +11 -0
- package/docs/adr/019-runtime-workspace-switch.md +59 -0
- package/docs/adr/020-desktop-access.md +50 -0
- package/docs/adr/021-persistent-desktop-consent.md +39 -0
- package/docs/adr/022-owner-kill-preserves-login.md +30 -0
- package/docs/adr/023-large-coding-inputs.md +49 -0
- package/docs/adr/024-usage-rounds-and-schedules.md +72 -0
- package/docs/adr/025-owner-chat-whitelist.md +53 -0
- package/docs/adr/026-remove-conversation-confirmation.md +35 -0
- package/docs/adr/027-workspace-client-list.md +20 -0
- package/docs/adr/028-owner-client-deletion.md +25 -0
- package/docs/adr/029-compact-tool-surface.md +121 -0
- package/docs/adr/030-windows-native-candidate.md +71 -0
- package/docs/adr/031-owner-selected-tunnel-supervision.md +13 -0
- package/docs/adr/032-owner-project-registry.md +43 -0
- package/docs/adr/033-read-only-project-federation.md +61 -0
- package/docs/adr/034-universal-resource-cas.md +60 -0
- package/docs/adr/035-project-brain-incremental-index.md +51 -0
- package/docs/adr/036-context-engine-evidence.md +53 -0
- package/docs/adr/037-owner-reviewed-memory.md +46 -0
- package/docs/adr/038-runtime-intelligence.md +46 -0
- package/docs/adr/039-advanced-agent-runtime.md +57 -0
- package/docs/adr/040-dodobench-release-gate.md +43 -0
- package/docs/adr/041-local-macos-docker-linux-gates.md +32 -0
- package/docs/adr/042-project-directory-generation-identity.md +36 -0
- package/docs/adr/043-trusted-self-hosted-platform-gates.md +38 -0
- package/docs/adr/044-global-launcher-and-cli-menu.md +43 -0
- package/docs/adr/045-ai-providers-multiproject.md +56 -0
- package/docs/adr/046-personal-access-mode.md +32 -0
- package/docs/adr/README.md +64 -0
- package/examples/.dodo.json.example +20 -0
- package/examples/cloudflared.yml +23 -0
- package/examples/reverse-proxy-fixture.mjs +37 -0
- package/native/desktop-linux.py +387 -0
- package/native/desktop-windows.cs +180 -0
- package/native/desktop.swift +212 -0
- package/package.json +145 -0
- package/schemas/global-config.schema.json +497 -0
- package/schemas/project-config.schema.json +75 -0
- package/schemas/tools.compact.json +3236 -0
- package/schemas/tools.hybrid.json +8194 -0
- package/schemas/tools.json +34518 -0
- package/scripts/guard-publish.mjs +12 -0
- package/scripts/setup-multimodal.mjs +70 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# ADR-030: Windows native candidate and authenticated owner IPC
|
|
2
|
+
|
|
3
|
+
Date: 2026-09-10
|
|
4
|
+
Status: Implemented candidate; native Windows validation and support claim pending
|
|
5
|
+
Target source version: Windows native work
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
The Windows proposal identifies independent blockers in Unix-only IPC, POSIX
|
|
10
|
+
shell/execute-bit assumptions, process-group cancellation, executable search,
|
|
11
|
+
NTFS aliases and private-state permissions. Extending platform support must
|
|
12
|
+
not turn a missing sandbox, private ACL or trusted executable into an implicit
|
|
13
|
+
permission grant. Existing dirty working-tree changes must be preserved.
|
|
14
|
+
|
|
15
|
+
## Decision
|
|
16
|
+
|
|
17
|
+
Introduce shared platform helpers under `src/platform` and route jobs, git,
|
|
18
|
+
search, LSP and media execution through the relevant helpers. Resolve implicit
|
|
19
|
+
executables using absolute canonical paths outside the workspace; sanitize
|
|
20
|
+
Windows PATH/PATHEXT and environment keys. Prefer Git for Windows Bash, with
|
|
21
|
+
an explicit cmd.exe fallback and restricted batch arguments. Use bounded
|
|
22
|
+
UTF-16 argv and cmd-line budgets. Windows cancellation targets live owned
|
|
23
|
+
children through the absolute system taskkill executable, with hard-kill-only
|
|
24
|
+
semantics; it is not Job Object containment.
|
|
25
|
+
|
|
26
|
+
Use an owner-private per-listener credential on every OS. Windows transport
|
|
27
|
+
uses a fresh named pipe; POSIX retains Unix sockets. Both peers authenticate
|
|
28
|
+
using fresh nonce challenges and domain-separated HMAC over exact payloads.
|
|
29
|
+
Credentials never travel on the IPC connection, and privileged requests are
|
|
30
|
+
not sent until server authentication succeeds. Invalid/replayed proofs fail
|
|
31
|
+
before owner command dispatch. Socket/descriptor cleanup is generation-bound.
|
|
32
|
+
|
|
33
|
+
Windows state uses LOCALAPPDATA/dodo and checked DACLs; POSIX retains owner/mode
|
|
34
|
+
checks. The Windows ACL code permits the current SID, SYSTEM and Administrators.
|
|
35
|
+
Same-user processes and administrators remain inside the trust boundary.
|
|
36
|
+
ACL failure is fatal rather than silently substituting ineffective chmod.
|
|
37
|
+
|
|
38
|
+
Reject ambiguous NTFS lexical paths and recheck canonical components against
|
|
39
|
+
containment and secret/protected guards. Do not claim elimination of same-user
|
|
40
|
+
check/use races. Retry transient Windows sharing locks only within a bounded
|
|
41
|
+
budget, never deleting a destination or clearing read-only attributes to force
|
|
42
|
+
a write. Preserve BOM and CRLF bytes in source edits.
|
|
43
|
+
|
|
44
|
+
OAuth, workspace/client ACLs, trust modes, per-action approvals, journals and
|
|
45
|
+
compact/hybrid/full exposure retain their existing authority. Windows has no
|
|
46
|
+
DODO command sandbox; requested sandboxing fails closed. Schedules require an
|
|
47
|
+
explicit unsandboxed specification and separate local owner approval. Desktop
|
|
48
|
+
and macOS speech remain unsupported on Windows; no silent privilege downgrade.
|
|
49
|
+
|
|
50
|
+
## Compatibility and rollout
|
|
51
|
+
|
|
52
|
+
The project keeps its current baseline while the Windows support status remains
|
|
53
|
+
EXPERIMENTAL until the proposal's native gates pass. Add an allow-failure
|
|
54
|
+
Windows Node 22/24 CI evidence job first; do not skip entire legacy suites to
|
|
55
|
+
produce green results. Only after native tests and Windows 11 manual acceptance
|
|
56
|
+
may that job become required and documentation say supported.
|
|
57
|
+
|
|
58
|
+
The IPC protocol intentionally has no unauthenticated fallback. Owners
|
|
59
|
+
must stop running servers from the existing installation or terminal before
|
|
60
|
+
replacing the installation. OAuth/state is not cleared. Building a checkout
|
|
61
|
+
never replaces a running server or a global installation by itself.
|
|
62
|
+
|
|
63
|
+
## Evidence and outstanding gates
|
|
64
|
+
|
|
65
|
+
Portable contracts exercise actual filesystem, processes and IPC on the local
|
|
66
|
+
host. Windows-only tests remain skipped on POSIX and are not native evidence.
|
|
67
|
+
Actual 8.3 aliases, DACL isolation from a second OS user, Defender/OneDrive,
|
|
68
|
+
Windows full-suite portability and a real external Windows MCP client remain
|
|
69
|
+
native/manual gates. See `docs/WINDOWS.md`, `docs/TEST_REPORT.md` and
|
|
70
|
+
`release-evidence/Windows native work/verification.json`. No npm publication, git tag or
|
|
71
|
+
production deployment is implied by this ADR.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# ADR-031 — Owner-selected Cloudflare Tunnel supervision
|
|
2
|
+
|
|
3
|
+
**Status:** accepted (implemented)
|
|
4
|
+
|
|
5
|
+
**Decision.** DODO starts only an owner-selected, trusted `cloudflared` executable owned by the current HTTP process. `dodo start` can attach it immediately; the authenticated Local Config can start or stop the same process-owned runtime. The owner still creates the remotely-managed Tunnel, public hostname and DNS in Cloudflare.
|
|
6
|
+
|
|
7
|
+
The default flow uses a run-scoped token entered through a hidden terminal prompt or the authenticated loopback Local Config. The token is never persisted in global config or an OS credential store. A process-owned `TunnelRuntime` forwards it through the managed child's dedicated environment and stops that child with DODO; it is absent from argv, logs, MCP, audit and job environments. Explicit secure credential references remain supported only by advanced standalone tunnel commands for compatibility.
|
|
8
|
+
|
|
9
|
+
The supervisor uses a separate authenticated singleton owner IPC endpoint, loopback readiness, bounded restarts, private bounded/redacted logs and live child handles for termination. It never signals a saved PID or searches by process name. Local Config and the metrics listener remain loopback-only and are not part of the public route.
|
|
10
|
+
|
|
11
|
+
**Trade-off.** Foreground supervision is easier to inspect and stop safely, but the terminal must remain open. Native service installation is left to the owner. A readiness success proves a Cloudflare connection, not that an AI client is connected.
|
|
12
|
+
|
|
13
|
+
**Evidence.** `tests/security/tunnelCredentials.test.ts`, `tests/integration/tunnelSupervisor.test.ts`, authenticated IPC tests, setup tests and packaging tests exercise credential boundaries, argv non-disclosure, exact redaction, singleton ownership, readiness, bounded restart and owned stop without using a real Cloudflare credential or network tunnel. Real macOS/Windows/Linux Tunnel validation remains a manual gate in `docs/MANUAL_ACCEPTANCE.md`.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ADR-032: Owner-only durable project registry
|
|
2
|
+
|
|
3
|
+
Status: Accepted
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
Workspace identity เดิมเหมาะกับการ enforce authority ของ active root แต่ถูกสร้าง
|
|
8
|
+
จาก installation secret และ canonical path จึงไม่ใช่ stable product identity เมื่อ
|
|
9
|
+
เจ้าของ rename โปรเจกต์ และไม่สามารถใช้เป็นรายการหลายโปรเจกต์ที่ตรวจ readiness ได้
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
เพิ่ม installation-level SQLite `project_registry` ที่ใช้ opaque random `projectId`
|
|
14
|
+
แยกจาก path-derived `workspaceId` Registry เก็บ canonical root, directory identity,
|
|
15
|
+
display name, metadata version และ timestamps พร้อม soft removal
|
|
16
|
+
|
|
17
|
+
CLI และ Local Config เท่านั้นที่เข้าถึง registry ไม่มี MCP tool หรือ public admin
|
|
18
|
+
route การ add/remove ไม่เปลี่ยน trust, OAuth, ACL, jobs, plans หรือ history
|
|
19
|
+
|
|
20
|
+
การ add path ใหม่ที่ path เดิมหายและ directory identity ตรงกับรายการเดิมถือเป็น
|
|
21
|
+
relocation: projectId คงเดิม แต่ workspaceId เปลี่ยนตาม canonical path ใหม่ จึงไม่มี
|
|
22
|
+
authority ไหลตาม project identity หาก path เดิมถูกแทนด้วย identity อื่น ระบบ fail
|
|
23
|
+
closed และต้องให้เจ้าของ remove/add หลัง review
|
|
24
|
+
|
|
25
|
+
รายละเอียดการเพิ่ม birth-time generation marker หลังพบ inode reuse บน Linux อยู่ใน
|
|
26
|
+
[ADR-042](042-project-directory-generation-identity.md)
|
|
27
|
+
|
|
28
|
+
Registry mutation และ scrubbed audit commit ใน SQLite transaction เดียวกัน
|
|
29
|
+
metadata ที่ผิดรุ่นถูกแสดงเป็น `invalid` และไม่ถือว่า ready แต่ยังนำออกแบบ reviewed
|
|
30
|
+
removal ได้
|
|
31
|
+
|
|
32
|
+
## Consequences
|
|
33
|
+
|
|
34
|
+
process หนึ่งยังมี active workspace เดียว Registry เป็น foundation สำหรับ federation
|
|
35
|
+
ภายหลังและไม่เปลี่ยน MCP catalog การนำรายการออกไม่ลบ workspace authority/history
|
|
36
|
+
เพื่อหลีกเลี่ยง destructive side effects
|
|
37
|
+
|
|
38
|
+
## Evidence
|
|
39
|
+
|
|
40
|
+
`tests/unit/projectRegistry.test.ts`, `tests/security/projectRegistry.test.ts`,
|
|
41
|
+
`tests/integration/projectRegistry.test.ts`, Local Config/workspace switch regression
|
|
42
|
+
tests และ packaging smoke ครอบคลุม migration, duplicate/concurrent add, relocation,
|
|
43
|
+
identity replacement, corruption recovery, ACL isolation และ owner boundary
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# ADR-033: Read-only project federation before effectful multi-project runtime
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Accepted — DODO MCP 1.0.0 development baseline.
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
The owner Project Registry provides stable project IDs and readiness metadata,
|
|
10
|
+
but registry membership is deliberately not authority. DODO needs bounded
|
|
11
|
+
cross-project retrieval without changing the active workspace or weakening the
|
|
12
|
+
existing OAuth, workspace ACL, path, secret and audit boundaries.
|
|
13
|
+
|
|
14
|
+
Bootstrapping every target as another full runtime would also start or recover
|
|
15
|
+
jobs, schedules, planners, workers and mutable resources. That would introduce
|
|
16
|
+
effectful behavior before per-project locking and ownership contracts exist.
|
|
17
|
+
|
|
18
|
+
## Decision
|
|
19
|
+
|
|
20
|
+
DODO adds an isolated `FederationService` for read-only retrieval:
|
|
21
|
+
|
|
22
|
+
- targets are selected only by opaque IDs already in the owner registry;
|
|
23
|
+
- remote access requires a live installation identity grant, `dodo:read` in the
|
|
24
|
+
grant/current principal, and `dodo:read` in the target workspace ACL;
|
|
25
|
+
- local STDIO is the owner principal and may read owner-registered targets;
|
|
26
|
+
- target canonical path and directory identity are checked before each access;
|
|
27
|
+
- each cached target has its own workspace filesystem policy, read/list/search/
|
|
28
|
+
overview services and process-local federation epoch; the runtime cache is
|
|
29
|
+
bounded to 16 least-recently-used targets;
|
|
30
|
+
- cross-project search is capped at eight projects and one shared result budget;
|
|
31
|
+
- authorized unavailable targets are explicit partial failures; an unauthorized
|
|
32
|
+
target rejects the whole request before any result is returned;
|
|
33
|
+
- source hashes and target identity accompany results, while MCP envelope context
|
|
34
|
+
remains the active workspace;
|
|
35
|
+
- target-scoped audit rows are written in addition to the outer tool audit.
|
|
36
|
+
|
|
37
|
+
The existing tool names are retained. `project_overview`, `list_files` and
|
|
38
|
+
`read_files` accept optional `projectId`; `search_code` accepts `projectId` or
|
|
39
|
+
`projectIds`. Compact and Hybrid clients reach the same contract through
|
|
40
|
+
`dodo_read`, so the Phase 03 surfaces remained 74/19/49 tools. ADR-034 later adds
|
|
41
|
+
six full resource operations through the existing `dodo_media` gateway, making the
|
|
42
|
+
current surfaces 80/19/49 without changing federation behavior.
|
|
43
|
+
|
|
44
|
+
## Security consequences
|
|
45
|
+
|
|
46
|
+
Registry metadata, search results, workflows and source hashes never become
|
|
47
|
+
authority. The implementation does not change `process.cwd()`, active workspace,
|
|
48
|
+
trust or ACL. Unknown/unauthorized project IDs return a generic refusal without
|
|
49
|
+
paths. The target uses the same shared path/secret policy as an active workspace.
|
|
50
|
+
|
|
51
|
+
Write, exec, jobs, plans, approvals, desktop and resource handles remain limited
|
|
52
|
+
to the one active `BootstrappedWorkspace`. Clients must ask the owner to switch,
|
|
53
|
+
call `project_overview` again and re-read current source before an effect.
|
|
54
|
+
|
|
55
|
+
## Follow-up gate
|
|
56
|
+
|
|
57
|
+
Effectful federation requires a separate ADR and evidence for per-project intent
|
|
58
|
+
locks, stale-context binding, approval digests, journal/rollback recovery, job
|
|
59
|
+
ownership/cancellation and bounded service shutdown. It must route target tools
|
|
60
|
+
through the common invocation pipeline and may not infer permission from this
|
|
61
|
+
read-only federation.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# ADR-034 — Universal Resource Layer and private content-addressed storage
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted for DODO 1.0.0 Phase 04
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
File tools, runtime media assets and generated previews previously used different
|
|
8
|
+
identities and lifetimes. Large binary data also had no generic resumable contract;
|
|
9
|
+
clients either needed a type-specific tool or risked loading a complete payload.
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
Add six individual full-surface operations:
|
|
14
|
+
`resource_inspect`, `resource_read`, `resource_read_range`, `resource_preview`,
|
|
15
|
+
`resource_extract`, and `resource_transform`. Compact and Hybrid expose the same
|
|
16
|
+
operations through the existing `dodo_media` gateway, so their catalog budgets stay
|
|
17
|
+
19 and 49 while Full grows from 74 to 80.
|
|
18
|
+
|
|
19
|
+
Resource bytes use an installation-private SHA-256 CAS. SQLite stores immutable
|
|
20
|
+
object metadata and opaque references separately. A reference is scoped to the
|
|
21
|
+
active workspace and a digest of `grantId` + `clientId`; it expires after 24 hours.
|
|
22
|
+
Identical bytes share one object, but no reference, URI, hash, or resume token grants
|
|
23
|
+
access by itself.
|
|
24
|
+
|
|
25
|
+
Workspace ingest must pass the shared `WorkspaceFS` secret/protected/link policy,
|
|
26
|
+
explicit private-state exclusion, regular-file identity checks before and after a
|
|
27
|
+
streaming copy, size/quota limits, SHA-256 verification and optional expected
|
|
28
|
+
hash/MIME checks. Owned runtime media assets may enter CAS only after their existing
|
|
29
|
+
`MediaStorage` owner and live exec-scope checks pass.
|
|
30
|
+
|
|
31
|
+
Every read verifies live OAuth/client/grant/workspace ACL, workspace context,
|
|
32
|
+
principal ownership, private object identity, byte size and SHA-256. Range responses
|
|
33
|
+
are at most 256 KiB. Resume tokens are HMAC-signed, expire after ten minutes and bind
|
|
34
|
+
the object/hash/offset/workspace/principal, but still require all live authorization.
|
|
35
|
+
|
|
36
|
+
Raster previews are bounded JPEG MCP image blocks. Small audio can be returned as an
|
|
37
|
+
MCP audio block. SVG remains untrusted text. ZIP extraction reads bounded central
|
|
38
|
+
directory metadata only and never inflates entries. Unsupported PDF/OCR/media text
|
|
39
|
+
extraction returns an explicit unsupported result rather than inventing content or
|
|
40
|
+
executing an external decoder. Transform is currently one bounded raster thumbnail
|
|
41
|
+
and retains the existing exec/trust/owner-approval policy.
|
|
42
|
+
|
|
43
|
+
CAS publication links one complete fsynced staging inode into its hash path with
|
|
44
|
+
create-if-absent semantics, so a concurrent writer cannot overwrite the winner. A
|
|
45
|
+
SQLite trigger is the authoritative aggregate 2 GiB quota check across processes.
|
|
46
|
+
GC deletes expired references and then removes only objects with no remaining
|
|
47
|
+
references while holding the SQLite write transaction. Newly created or freshly
|
|
48
|
+
verified objects receive a one-hour orphan grace period so GC cannot race reference
|
|
49
|
+
creation. Staging and unregistered crash leftovers older than that grace are removed
|
|
50
|
+
on startup.
|
|
51
|
+
|
|
52
|
+
## Consequences
|
|
53
|
+
|
|
54
|
+
- All supported bytes now have one immutable identity and range contract.
|
|
55
|
+
- CAS dedup does not merge ownership or workspace authority.
|
|
56
|
+
- Full clients receive six new definitions; remote Compact/Hybrid clients retain
|
|
57
|
+
their established tool counts and discover the operations dynamically.
|
|
58
|
+
- Full-hash verification before a range favors integrity over first-byte latency.
|
|
59
|
+
- PDF text, OCR, archive inflation and general media transcoding remain provider work
|
|
60
|
+
for later phases; current providers do not silently claim those capabilities.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# ADR-035 — Incremental Project Brain with source-verified graph evidence
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Accepted for DODO MCP 1.0.0.
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
Per-request AST/LSP calls answer a focused question but do not preserve a bounded project
|
|
10
|
+
map. A persistent graph can reduce repeated work, yet cached code metadata creates a
|
|
11
|
+
security and correctness risk if clients treat it as authority or current source.
|
|
12
|
+
|
|
13
|
+
## Decision
|
|
14
|
+
|
|
15
|
+
DODO keeps one regenerable Project Brain per workspace in installation SQLite. A bounded
|
|
16
|
+
worker parses TypeScript/JavaScript with DODO's pinned TypeScript package and parses
|
|
17
|
+
`package.json` as data. It never loads repository plugins or runs repository code.
|
|
18
|
+
|
|
19
|
+
The cache key includes source SHA-256, parser version, graph schema version and relevant
|
|
20
|
+
configuration. Incremental runs preserve unchanged parsed payloads, calculate affected
|
|
21
|
+
sources from import and symbol-reference evidence, and commit cache plus graph atomically.
|
|
22
|
+
An opaque file identity survives one unambiguous exact-content move, so semantic
|
|
23
|
+
`symbol://` identifiers can survive path changes.
|
|
24
|
+
|
|
25
|
+
Index records are evidence, not capabilities. Every public query rechecks the live grant,
|
|
26
|
+
workspace ACL, workspace context, guarded path and current source hash. Stale records are
|
|
27
|
+
omitted by default. HMAC cursors are bound to principal, workspace and query. Maintenance
|
|
28
|
+
operations require `dodo:exec` and target-specific trust approval.
|
|
29
|
+
|
|
30
|
+
## Consequences
|
|
31
|
+
|
|
32
|
+
- Full grows to 86 operations; Compact remains 19 and Hybrid remains 49 by routing the six
|
|
33
|
+
brain operations through existing assistance gateways.
|
|
34
|
+
- TypeScript/JavaScript and package dependency graphs are available immediately; other
|
|
35
|
+
language graph providers require an explicit later contract.
|
|
36
|
+
- File-system metadata avoids hashing unchanged files on each poll, while final query
|
|
37
|
+
freshness still depends on SHA-256.
|
|
38
|
+
- Exact-content copies get new identity; ambiguous multiple removals do not reuse identity.
|
|
39
|
+
- Route/test/reference relations are labelled syntax evidence and do not claim runtime truth.
|
|
40
|
+
- Interrupted or corrupt state queues a full rebuild while retaining the last committed graph.
|
|
41
|
+
|
|
42
|
+
## Rejected alternatives
|
|
43
|
+
|
|
44
|
+
- Treat graph IDs as authorization: rejected because copied/stale metadata must not bypass
|
|
45
|
+
direct source policy.
|
|
46
|
+
- Load repository TypeScript plugins or execute build scripts: rejected because repository
|
|
47
|
+
configuration has no authority.
|
|
48
|
+
- Rebuild the entire repository for every file change: rejected because the feature requires
|
|
49
|
+
measurable incremental work.
|
|
50
|
+
- Use embeddings as the sole source of truth: rejected because results need source location,
|
|
51
|
+
hash, parser version and deterministic freshness evidence.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# ADR-036 — Goal-driven Context Engine and source-verifying evidence
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted for DODO 1.0.0 Phase 06
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
Low-level search, Project Brain and read-only federation expose useful evidence, but
|
|
8
|
+
an AI client still had to select and merge each source itself. A raw repository dump
|
|
9
|
+
would exceed context budgets, obscure omissions and make stale or inferred data look
|
|
10
|
+
equivalent to verified source.
|
|
11
|
+
|
|
12
|
+
## Decision
|
|
13
|
+
|
|
14
|
+
Add `context_query`, `context_evidence` and `context_status` to Full. Compact and
|
|
15
|
+
Hybrid route all three through the existing `dodo_assist_read` gateway, keeping their
|
|
16
|
+
catalog sizes at 19 and 49 while Full grows from 86 to 89.
|
|
17
|
+
|
|
18
|
+
`context_query` accepts a goal, optional terms, up to eight authorized project
|
|
19
|
+
selectors, an evidence byte budget and pagination. It combines bounded literal
|
|
20
|
+
search, active Project Brain entities/relations, active Git metadata and federated
|
|
21
|
+
read search. Ranking is deterministic and includes reasons. Output always separates
|
|
22
|
+
FACT, OBSERVATION, MEMORY, INFERENCE and HYPOTHESIS; unavailable Phase 07 memory and
|
|
23
|
+
Phase 08 runtime sources remain explicit empty/unavailable data.
|
|
24
|
+
|
|
25
|
+
Evidence records carry project/workspace identity, source type, opaque source URI,
|
|
26
|
+
relative path, SHA-256, location, optional commit, confidence, generation/verification
|
|
27
|
+
times, freshness and limitations. All retrieved content is marked untrusted.
|
|
28
|
+
`context_evidence` resolves only records owned by the same principal/request workspace
|
|
29
|
+
and rechecks live authorization and the current source dependency.
|
|
30
|
+
|
|
31
|
+
SQLite stores caller-scoped context cache levels L0–L6, evidence records and aggregate
|
|
32
|
+
metrics. Derived levels include dependency path/hash sets. Every L6 reuse first
|
|
33
|
+
rechecks active and target ACL plus all dependencies; mismatch marks prior evidence
|
|
34
|
+
stale and invalidates L1–L6. Cache/evidence have TTL and per-principal row caps. HMAC
|
|
35
|
+
cursors bind query, source index version, active workspace and principal.
|
|
36
|
+
|
|
37
|
+
## Security consequences
|
|
38
|
+
|
|
39
|
+
Retrieval uses `dodo:read` and cannot call write/exec handlers. Project selectors are
|
|
40
|
+
resolved only from the caller's authorized federation view; unauthorized targets fail
|
|
41
|
+
without returning path metadata. Active and target `WorkspaceFS` policy remains the
|
|
42
|
+
source/path/secret authority. Evidence IDs, hashes, source URIs, cache rows and cursor
|
|
43
|
+
tokens grant no access. Repository instructions and retrieved text never alter OAuth,
|
|
44
|
+
ACL, trust, approvals, command sandbox or tool policy.
|
|
45
|
+
|
|
46
|
+
## Consequences
|
|
47
|
+
|
|
48
|
+
- An AI can request bounded context by goal while seeing omissions and unavailable
|
|
49
|
+
providers explicitly.
|
|
50
|
+
- Stale evidence is inspectable as stale and is never silently presented as current.
|
|
51
|
+
- Full clients receive three additional definitions; remote catalog budgets remain
|
|
52
|
+
unchanged.
|
|
53
|
+
- Federated semantic graph, durable memory and runtime evidence remain later phases.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# ADR-037 — Evidence-backed owner-reviewed memory
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted for DODO 1.0.0 Phase 07
|
|
4
|
+
|
|
5
|
+
## Decision
|
|
6
|
+
|
|
7
|
+
DODO แยก durable memory ออกจาก Context cache และ Project Brain โดยมี seven explicit
|
|
8
|
+
kinds, source evidence snapshot, confidence, retention, CURRENT/STALE lifecycle และ
|
|
9
|
+
project visibility แยกต่อ record
|
|
10
|
+
|
|
11
|
+
MCP caller สร้างได้เฉพาะ non-permanent proposal จาก current `context_evidence` ของ
|
|
12
|
+
principal เดียวกัน Permanent memory เกิดได้ผ่าน authenticated private owner IPC เมื่อ
|
|
13
|
+
proposal ID และ digest ตรงกัน และเมื่อ source/conflict set ยังตรงกับตอนเสนอ
|
|
14
|
+
|
|
15
|
+
Cross-project visibility ต้องระบุ project IDs ตอน owner approval และไม่ grant client
|
|
16
|
+
ACL Learning proposal ต้องอ้าง current reviewed memory อย่างน้อยสองรายการ การ review
|
|
17
|
+
learning ไม่ติดตั้ง ไม่ execute และไม่สร้าง authority
|
|
18
|
+
|
|
19
|
+
Memory search ใช้ target tool pipeline, live OAuth/grant/ACL, bounded scan/budget และ
|
|
20
|
+
principal/workspace/query-bound HMAC cursor Context Engine ใช้ memory เป็น evidence class
|
|
21
|
+
`MEMORY` และผูก memory content hash/manifest เป็น cache dependency
|
|
22
|
+
|
|
23
|
+
## Why
|
|
24
|
+
|
|
25
|
+
Cache ลดงานซ้ำในช่วงสั้น แต่ไม่เหมาะกับการเก็บ decision หรือ successful fix ข้าม
|
|
26
|
+
conversation ส่วน graph อธิบายโครงสร้าง code มากกว่าประสบการณ์ การมี store แยกทำให้
|
|
27
|
+
owner ตรวจ provenance, conflict, freshness และ retention ได้โดยไม่ยอมให้ repository
|
|
28
|
+
content กลายเป็น policy
|
|
29
|
+
|
|
30
|
+
## Consequences
|
|
31
|
+
|
|
32
|
+
- Full surface เพิ่มห้า memory operations; catalog หลัง Phase 08 เป็น 104 tools; Phase 09 เพิ่มเป็น 121 tools;
|
|
33
|
+
Compact/Hybrid คง 19/49 และ route
|
|
34
|
+
ผ่าน assistance gateways
|
|
35
|
+
- SQLite migration เพิ่ม proposal, memory, visibility และ learning-review tables
|
|
36
|
+
- source ที่เปลี่ยนหรือ retention หมดทำให้ memory stale และ Context cache ที่พึ่งพา
|
|
37
|
+
memory นั้นใช้ต่อไม่ได้
|
|
38
|
+
- owner approval/prune/review มี scrubbed audit และไม่อยู่บน public MCP listener
|
|
39
|
+
- v1 ไม่มี autonomous skill installation, self-modifying policy หรือ cross-user sharing
|
|
40
|
+
|
|
41
|
+
## Verification
|
|
42
|
+
|
|
43
|
+
Unit, HTTP+OAuth integration และ security fixtures ครอบคลุม proposal/approval digest,
|
|
44
|
+
retrieval, Context integration, source staleness, client/ACL/project isolation,
|
|
45
|
+
duplicate/conflict, retention/prune, credential-shaped input, prompt injection,
|
|
46
|
+
learning review และ owner audit
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# ADR-038 — Caller-scoped Runtime Intelligence
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted for DODO 1.0.0 Phase 08
|
|
4
|
+
|
|
5
|
+
## Decision
|
|
6
|
+
|
|
7
|
+
DODO เพิ่ม durable runtime session, task reference และ immutable evidence store ต่อ
|
|
8
|
+
active workspace Session/evidence ผูก digest ของ `grantId + clientId`, workspace และ
|
|
9
|
+
expiration และตรวจ live OAuth/client/workspace ACL ซ้ำทุก access
|
|
10
|
+
|
|
11
|
+
Runtime task ใช้ `JobManager` และ invocation pipeline เดิมเท่านั้น: explicit
|
|
12
|
+
program+argv, policy approval, idempotency, environment allowlist, timeout และ
|
|
13
|
+
owner-selected command sandbox Browser collector ใช้ owned `BrowserService` session
|
|
14
|
+
เดิมและไม่มี operation เปิด browser/web/permission เอง
|
|
15
|
+
|
|
16
|
+
Persist เฉพาะ safe structured metadata, aggregate counts และ hashes ไม่ persist raw
|
|
17
|
+
stdout/stderr, DOM/console text, request headers, cookies, credentials หรือ environment
|
|
18
|
+
values Evidence เปลี่ยนเป็น STALE เมื่อ source recheck ไม่ตรง Snapshot เป็น metadata
|
|
19
|
+
manifest และ rollback candidates; rollback จริงยังใช้ change journal เดิม
|
|
20
|
+
|
|
21
|
+
Context Engine รับ current caller-owned runtime evidence เป็น `OBSERVATION` และใช้
|
|
22
|
+
evidence content hash + caller-specific runtime manifest เป็น dependency Runtime
|
|
23
|
+
diagnosis แยก FACT/OBSERVATION/INFERENCE และไม่มี effectful handler
|
|
24
|
+
|
|
25
|
+
## Why
|
|
26
|
+
|
|
27
|
+
JobManager ทำให้งานอยู่รอดข้าม protocol reconnect อยู่แล้ว แต่ไม่มี task grouping,
|
|
28
|
+
bounded evidence provenance หรือ safe path เข้า Context Engine การสร้าง runtime layer
|
|
29
|
+
บน service เดิมรักษา execution authority หนึ่งชุดและป้องกัน divergence ระหว่าง job,
|
|
30
|
+
browser, sandbox และ gateway policy
|
|
31
|
+
|
|
32
|
+
## Consequences
|
|
33
|
+
|
|
34
|
+
- Full surface เพิ่ม 10 operations เป็น 104 ณ Phase 08; Phase 09 เพิ่มเป็น 121 โดย Compact/Hybrid คง 19/49
|
|
35
|
+
- SQLite migration เพิ่ม runtime sessions/tasks/evidence พร้อม FK, quota และ expiry
|
|
36
|
+
- server restart รักษา completed task/evidence metadata แต่ไม่ reattach หรือ signal PID
|
|
37
|
+
- raw debugging output ยังใช้ bounded `job_output`; runtime evidence ไม่ทำสำเนา
|
|
38
|
+
- v1 ไม่มี autonomous watcher, permission grant, hidden-input capture หรือ automatic fix
|
|
39
|
+
|
|
40
|
+
## Verification
|
|
41
|
+
|
|
42
|
+
HTTP+OAuth fixtures ครอบคลุม start/observe/cancel/timeout/idempotent retry,
|
|
43
|
+
disconnect/restart reconnect, snapshot staleness, Context retrieval, browser image
|
|
44
|
+
passthrough, raw-output non-retention, live ACL revoke, principal isolation,
|
|
45
|
+
secret/traversal path guards, inspect approval และ evidence quotas Packaging fixture
|
|
46
|
+
ยืนยัน runtime code/docs และ compact dispatch จาก tarball ที่ติดตั้งใหม่
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# ADR-039 — Capability-narrowing Advanced Agent Runtime
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted for DODO 1.0.0 Phase 09
|
|
4
|
+
|
|
5
|
+
## Decision
|
|
6
|
+
|
|
7
|
+
DODO เพิ่ม durable Agent Runtime สำหรับ goal, immutable plan revisions, bounded parallel
|
|
8
|
+
hypotheses, path/symbol/resource intents, metadata snapshots, evidence-backed judgement,
|
|
9
|
+
restart recovery และ owner-reviewed reusable guidance
|
|
10
|
+
|
|
11
|
+
Run เป็น coordination state ที่ผูก principal, workspace และ epoch และมี capabilities
|
|
12
|
+
ที่ลดขอบเขตจาก authority เดิมเท่านั้น Managed read/write/exec ต้อง dispatch target จาก
|
|
13
|
+
Core catalog ผ่าน `invokeToolDefinition`; target scope, live ACL, trust approval,
|
|
14
|
+
WorkspaceFS, expected hash, command sandbox, idempotency และ audit ยังคง authoritative
|
|
15
|
+
|
|
16
|
+
Effectful path operation ต้องอยู่ใน run `writablePaths` และถือ path intent ที่ครอบ path
|
|
17
|
+
นั้น Intent overlap ระหว่าง hypotheses ถูกปฏิเสธ Snapshot ไม่เก็บ contents และ rollback
|
|
18
|
+
ได้เฉพาะ exact caller-owned post-snapshot changeset ผ่าน original rollback pipeline
|
|
19
|
+
|
|
20
|
+
Skill proposal เป็น immutable untrusted guidance ที่ไม่ปรากฏใน search จน owner ตรวจ
|
|
21
|
+
exact digest ผ่าน authenticated private IPC Approved version ไม่ executable และไม่เป็น
|
|
22
|
+
permission Coordinator pause/cancel ไม่ kill jobs
|
|
23
|
+
|
|
24
|
+
## Why
|
|
25
|
+
|
|
26
|
+
Runtime Intelligence มี task/evidence ที่ตรวจสอบย้อนกลับได้ แต่ยังไม่มี contract สำหรับ
|
|
27
|
+
แบ่ง hypothesis, ป้องกัน candidate เขียนชนกัน, ผูก completion กับ current evidence หรือ
|
|
28
|
+
กู้ coordinator state หลัง restart การเพิ่ม service ที่เก็บ metadata และเรียก target
|
|
29
|
+
pipeline เดิมช่วยเพิ่มการประสานงานโดยไม่สร้าง execution authority ชุดที่สอง
|
|
30
|
+
|
|
31
|
+
## Consequences
|
|
32
|
+
|
|
33
|
+
- Full surface เพิ่ม 17 operations เป็น 121; Compact/Hybrid คง 19/49
|
|
34
|
+
- Core 104 definitions คงชื่อ ลำดับ schema และ behavior เดิม
|
|
35
|
+
- SQLite migration เพิ่ม runs/plans/hypotheses/intents/actions/snapshots/judgements และ
|
|
36
|
+
versioned skill proposal/skill tables
|
|
37
|
+
- managed exec ใช้ explicit argv/owned handles และมี program/feature/job quotas เพิ่ม
|
|
38
|
+
- restart ไม่ replay action; run เก่าเข้า `RECOVERY_REQUIRED`
|
|
39
|
+
- owner review มีเฉพาะ private IPC/CLI ไม่มี MCP approval operation
|
|
40
|
+
|
|
41
|
+
## Rejected alternatives
|
|
42
|
+
|
|
43
|
+
- generic autonomous super-tool: authority กว้างและ audit target ไม่ชัด
|
|
44
|
+
- plan/skill เป็น permission: ทำให้ untrusted stored content เพิ่มสิทธิ์ได้
|
|
45
|
+
- automatic rollback/retry หลัง uncertain effect: เสี่ยงทำ side effect ซ้ำ
|
|
46
|
+
- cancel coordinator แล้ว kill ทุก job: ละเมิด ownership และอาจหยุดงานอื่น
|
|
47
|
+
|
|
48
|
+
## Verification
|
|
49
|
+
|
|
50
|
+
HTTP+OAuth integration fixtures ครอบคลุม immutable plan, conflicting hypotheses,
|
|
51
|
+
managed file change, metadata snapshot compare/rollback, current Runtime evidence,
|
|
52
|
+
deterministic judgement, exact completion criteria, explicit argv และ restart recovery
|
|
53
|
+
|
|
54
|
+
Security fixtures ครอบคลุม anonymous/read-only, principal isolation, live ACL revoke,
|
|
55
|
+
stale epoch, writable-path + intent checks, secret/traversal/nested-context rejection,
|
|
56
|
+
program allowlist, target-bound inspect approval, hostile skill rejection และยืนยันว่า
|
|
57
|
+
cancel run ไม่ kill owned job
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ADR-040: Revision-bound DodoBench and release evidence
|
|
2
|
+
|
|
3
|
+
Status: Accepted
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
DODO มีหลาย capability ที่ทำงานร่วมกัน การนับ tool หรือทดสอบ handler แยกไม่พิสูจน์
|
|
8
|
+
ว่า HTTP/OAuth, gateway, workspace security, durable state และ package artifact ยังทำงาน
|
|
9
|
+
ร่วมกัน การประเมินด้วย AI เพียงครั้งเดียวก็ทำซ้ำยากและไม่ทราบ model/token baseline
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
ใช้ DodoBench แบบ deterministic กับ isolated fixtures และ real HTTP/OAuth เป็น
|
|
14
|
+
regression gate เก็บ baseline แบบ versioned และผูก report กับ source revision,
|
|
15
|
+
dependency lock, dataset, configuration และ host environment ไม่สร้าง model-token
|
|
16
|
+
estimate เมื่อไม่มี model call
|
|
17
|
+
|
|
18
|
+
Release candidate ต้องผ่าน build/type/lint/test, DodoBench, production audit,
|
|
19
|
+
manifest policy, immutable tarball checksum และ fresh exact-tarball install ซึ่งตรวจ
|
|
20
|
+
ทั้ง STDIO Full และ HTTP Compact Candidate automation กับ release readiness เป็นคนละค่า:
|
|
21
|
+
platform/manual/registry evidence ที่ยังไม่ได้รันต้องแสดงตามจริง
|
|
22
|
+
|
|
23
|
+
Evidence directory เป็น local ignored output และไม่ถูก pack สคริปต์ release gate ไม่
|
|
24
|
+
publish package และไม่รับ authority จาก benchmark result
|
|
25
|
+
|
|
26
|
+
## Consequences
|
|
27
|
+
|
|
28
|
+
Regression หลักตรวจซ้ำได้และชี้ revision ชัดเจน แต่ local fixture latency ไม่ใช่ SLA,
|
|
29
|
+
browser case ขึ้นกับ Chromium และ external AI/Windows hardware ยังต้องมี separate gate
|
|
30
|
+
การเปลี่ยน baseline ต้อง review dataset และ threshold พร้อมกัน
|
|
31
|
+
|
|
32
|
+
## Addendum — local macOS and Docker Linux evidence
|
|
33
|
+
|
|
34
|
+
ช่วงก่อนเริ่ม Windows phase ใช้ macOS local และ Linux Docker เป็น required automated
|
|
35
|
+
platforms ไม่ใช้ GitHub Actions Docker image ติดตั้ง Chromium และสร้าง package/fresh
|
|
36
|
+
install evidence จาก source copy แยก report ต้องตรงกับ host Git revision และ lock digest
|
|
37
|
+
Windows แสดงเป็น `DEFERRED_MANUAL_NOT_RUN`; Linux Docker ไม่ใช่ Windows evidence
|
|
38
|
+
|
|
39
|
+
## Addendum — trusted self-hosted runners
|
|
40
|
+
|
|
41
|
+
ADR-043 เปิด GitHub Actions กลับมาหลัง dedicated Linux/Windows runners พร้อมใช้งาน
|
|
42
|
+
Linux ยังคงรัน Docker gate เดิมและ Windows รัน native candidate gate ส่วน macOS เป็น
|
|
43
|
+
local release gate Report ระบุ runner origin และ automated Windows ไม่แทน manual gate
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# ADR-041: Local macOS and Docker Linux release gates
|
|
2
|
+
|
|
3
|
+
Status: Superseded by ADR-043
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
GitHub-hosted jobs ไม่ได้เริ่มทำงานจริงและจึงไม่ใช่หลักฐานทดสอบ การแสดง workflow
|
|
8
|
+
สีเขียวจาก allow-failure อาจทำให้เข้าใจผิด ขณะเดียวกันทีมต้องการพัฒนา core ต่อบน
|
|
9
|
+
macOS และตรวจ portability บน Linux ก่อน โดยเลื่อน Windows native ไปช่วงสุดท้าย
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
ลบ GitHub Actions test workflows ใช้ macOS checkout เป็น platform แรก และสร้าง Linux
|
|
14
|
+
Docker image จาก checkout เป็น platform ที่สอง Image ใช้ Node 22, ติดตั้ง Chromium,
|
|
15
|
+
รัน build/typecheck/lint/full tests/DodoBench/audit/package/fresh-install smoke
|
|
16
|
+
เหมือน release gate หลัก
|
|
17
|
+
|
|
18
|
+
Docker build context ตัด Git metadata, credentials, local state, models, release evidence
|
|
19
|
+
และ private development documents ออก Runner อ่าน revision/dirty state จาก host Git,
|
|
20
|
+
ส่งเข้า container เป็น source attestation และตรวจ report กลับกับ package-lock digest
|
|
21
|
+
|
|
22
|
+
Strict gate ต้องมี `AUTOMATED_PASS` จาก macOS และ Linux บน revision/lock เดียวกัน
|
|
23
|
+
Linux report ต้องมาจาก clean source ที่มี `docker-host-git` provenance และผ่าน fresh
|
|
24
|
+
tarball install จึงไม่สามารถนำ dirty candidate หรือ evidence จาก runner อื่นมาแทนได้
|
|
25
|
+
Windows มีสถานะ `DEFERRED_MANUAL_NOT_RUN` และไม่อยู่ใน required platform set จนกว่า
|
|
26
|
+
native Windows phase จะถูกเปิดอย่างชัดเจน
|
|
27
|
+
|
|
28
|
+
## Consequences
|
|
29
|
+
|
|
30
|
+
ผล Linux ทำซ้ำได้โดยไม่พึ่งสถานะ GitHub account และ browser fixture รันใน container
|
|
31
|
+
จริง แต่ Docker Linux ยังใช้ kernel/architecture ของ Docker Desktop และไม่แทนเครื่อง
|
|
32
|
+
Windows หรือ manual external-AI acceptance ไม่มีสคริปต์ใด publish npm
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# ADR-042: Bind registered projects to a directory generation
|
|
2
|
+
|
|
3
|
+
Status: Accepted
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
Project Registry เดิมระบุ directory ด้วย canonical path, device และ inode การรัน
|
|
8
|
+
Linux gate ใน Docker พบว่า filesystem สามารถนำ inode เดิมกลับมาใช้ทันทีหลังลบแล้ว
|
|
9
|
+
สร้าง directory ใหม่ที่ path เดิม ทำให้ tuple เดิมไม่พอพิสูจน์ว่าเป็น directory
|
|
10
|
+
generation เดิม ความคลาดเคลื่อนนี้อาจทำให้ registry รายงาน replacement ว่า ready
|
|
11
|
+
|
|
12
|
+
## Decision
|
|
13
|
+
|
|
14
|
+
Project Registry metadata v2 เก็บ `root_birthtime_ns` เพิ่มจาก canonical realpath,
|
|
15
|
+
device และ inode ทุก readiness check และ federation cache key ต้องตรวจ marker นี้ด้วย
|
|
16
|
+
การ relocate รักษา opaque project ID ได้ต่อเมื่อทั้งสามค่าตรงกับรายการเดิม
|
|
17
|
+
|
|
18
|
+
Migration เพิ่ม column ใหม่แต่ไม่ auto-upgrade row v1 เพราะไม่มี birth time เดิมให้
|
|
19
|
+
เปรียบเทียบ และการเห็น device/inode เดิมในปัจจุบันยังแยก inode reuse ไม่ได้ Row นั้น
|
|
20
|
+
จึงคง metadata v1 และถูกอ่านเป็น `invalid` จนเจ้าของ review, remove และ add path ใหม่
|
|
21
|
+
|
|
22
|
+
การเพิ่มโปรเจกต์ใหม่บน filesystem ที่ไม่มี stable directory birth time จะได้
|
|
23
|
+
`NOT_SUPPORTED` พร้อมคำแนะนำให้ย้ายไป local filesystem ที่รองรับ ข้อจำกัดนี้ไม่เพิ่ม
|
|
24
|
+
สิทธิ์และไม่เปลี่ยน active-workspace ACL, OAuth, trust หรือ path guards
|
|
25
|
+
|
|
26
|
+
## Consequences
|
|
27
|
+
|
|
28
|
+
Directory replacement ถูกปฏิเสธแม้ numeric inode ถูก reuse และ federation context
|
|
29
|
+
ไม่ reuse cache ข้าม directory generation แลกกับการไม่รองรับ durable Project Registry
|
|
30
|
+
บน filesystem บางชนิดที่รายงาน birth time ไม่ได้
|
|
31
|
+
|
|
32
|
+
## Evidence
|
|
33
|
+
|
|
34
|
+
`tests/unit/projectRegistry.test.ts` จำลอง inode reuse แบบ deterministic และทดสอบ
|
|
35
|
+
v1-to-v2 migration ส่วน Linux Docker gate รัน Project Registry, federation,
|
|
36
|
+
security และ packaging suites บน Linux จริง
|