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,31 @@
|
|
|
1
|
+
# DODO Task Assistance
|
|
2
|
+
|
|
3
|
+
DODO มี tools สำหรับช่วยทำความเข้าใจงานก่อนแก้ไข code และตรวจผลหลังแก้ โดยทุก operation ยังอยู่ภายใต้ workspace, scope, trust และ approval policy
|
|
4
|
+
|
|
5
|
+
## Capabilities
|
|
6
|
+
|
|
7
|
+
- `context_for_task`: รวบรวมไฟล์และสัญลักษณ์ที่เกี่ยวข้องแบบ bounded
|
|
8
|
+
- `analyze_impact`: วิเคราะห์ references และผลกระทบที่คาดได้
|
|
9
|
+
- `read_symbol`: อ่าน definition และ context ของ symbol
|
|
10
|
+
- `preview_refactor`: สร้างแผน refactor แบบ preview-only
|
|
11
|
+
- `verify_changes`: ตรวจ diff, diagnostics, tests และ recipe ตาม policy
|
|
12
|
+
|
|
13
|
+
## Compact usage
|
|
14
|
+
|
|
15
|
+
ใช้ `dodo_discover` ค้น operation แล้วเรียก `dodo_assist_read` หรือ `dodo_assist_change` โดยใส่ args ตาม schema ที่ discover คืนมา
|
|
16
|
+
|
|
17
|
+
Preview ไม่ apply เอง และ verify ที่รัน command ยังคงใช้ exec scope, trust, sandbox และ approval ของ target operation
|
|
18
|
+
|
|
19
|
+
## Safe workflow
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
project_overview
|
|
23
|
+
→ context_for_task
|
|
24
|
+
→ analyze_impact
|
|
25
|
+
→ read_symbol
|
|
26
|
+
→ preview_refactor
|
|
27
|
+
→ owner reviews changes
|
|
28
|
+
→ verify_changes
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
ผล assistance เป็นข้อมูลประกอบการตัดสินใจ ไม่ใช่ permission และไม่สามารถขยาย workspace scope ได้
|
package/docs/AUTH.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# DODO MCP — Authentication
|
|
2
|
+
|
|
3
|
+
## MCP OAuth
|
|
4
|
+
|
|
5
|
+
MCP HTTP ใช้ OAuth 2.1 authorization code + PKCE S256:
|
|
6
|
+
|
|
7
|
+
1. client discover protected resource metadata
|
|
8
|
+
2. client discover authorization server metadata
|
|
9
|
+
3. owner registers static client ใน Local Config/CLI
|
|
10
|
+
4. client เริ่ม authorize พร้อม exact redirect URI และ PKCE
|
|
11
|
+
5. owner ตรวจ interaction และ approve ผ่าน `dodo auth approve` จาก directory ใดก็ได้
|
|
12
|
+
6. client แลก code เป็น access token
|
|
13
|
+
7. login สร้าง installation identity และ scope ceiling
|
|
14
|
+
8. โหมดส่วนตัวใช้ scope นี้กับทุกโปรเจกต์ที่ owner ลงทะเบียน; โหมด managed ให้ owner เพิ่ม client access แยกต่อโปรเจกต์
|
|
15
|
+
9. ทุก MCP request ตรวจ token, scope, resource audience, installation identity, access mode และ target policy ปัจจุบัน
|
|
16
|
+
|
|
17
|
+
ไม่มี dynamic client registration เป็นค่าเริ่มต้น และไม่มี client-credentials flow สำหรับ owner tools
|
|
18
|
+
|
|
19
|
+
## Scopes และ access mode
|
|
20
|
+
|
|
21
|
+
OAuth scope เป็นเพดานความสามารถระดับกว้าง:
|
|
22
|
+
|
|
23
|
+
- `dodo:read` อ่าน/วิเคราะห์
|
|
24
|
+
- `dodo:write` แก้ resource ที่ policy อนุญาต
|
|
25
|
+
- `dodo:exec` รัน command/job หรือ effectful operation ที่ policy อนุญาต
|
|
26
|
+
|
|
27
|
+
ค่าเริ่มต้น `personal` เหมาะกับเครื่องเจ้าของคนเดียว: client ที่ owner อนุมัติใช้
|
|
28
|
+
โปรเจกต์ที่ owner ลงทะเบียนได้ตาม scopes โดยไม่ต้องสร้าง workspace ACL ซ้ำ และ
|
|
29
|
+
effective trust เป็น `trusted` ส่วน `managed` ใช้ intersection ของ OAuth scope,
|
|
30
|
+
workspace ACL และ trust ต่อโปรเจกต์ Profile ลด scopes ได้เสมอและเพิ่มสิทธิ์ไม่ได้
|
|
31
|
+
|
|
32
|
+
ทั้งสองโหมดยังคงตรวจ workspace ID/epoch, path/secret/link guards, expected hash,
|
|
33
|
+
idempotency, live grant/revocation และ command sandbox การ revoke grant ทำให้ request
|
|
34
|
+
ใหม่ถูกปฏิเสธ และ resource handle ที่ sensitive ต้อง re-check ตาม service contract
|
|
35
|
+
|
|
36
|
+
OAuth client registration, pending consent, approve, deny และ revoke เป็นระดับ installation
|
|
37
|
+
ไม่ขึ้นกับ CWD หรือโปรเจกต์ที่หน้าเว็บกำลังเลือก `tools/list` จึงใช้เชื่อมต่อและ scan
|
|
38
|
+
catalog ได้ก่อนเลือก default project ใน personal mode โปรเจกต์พร้อมใช้ทันทีหลัง owner
|
|
39
|
+
ลงทะเบียน path; managed mode จะได้ `WORKSPACE_ACCESS_REQUIRED` จนกว่า owner ให้ ACL
|
|
40
|
+
|
|
41
|
+
## Local Config owner auth
|
|
42
|
+
|
|
43
|
+
Local Config ใช้ capability token ที่ส่งผ่าน fragment/secure local flow ไม่ส่ง token ให้ server ใน query string ระบบตรวจ loopback bind, Host/Origin, forwarded headers, expiration และ rate limit
|
|
44
|
+
|
|
45
|
+
อย่าใส่ URL ที่มี token ใน chat, issue, log หรือ screenshot
|
|
46
|
+
|
|
47
|
+
## Workspace switch
|
|
48
|
+
|
|
49
|
+
OAuth login และ installation identity คงอยู่ได้ แต่ target authority และ workspace
|
|
50
|
+
context ถูกประเมินใหม่เมื่อ active/default workspace เปลี่ยน Client ต้องเรียก
|
|
51
|
+
`project_overview` เพื่อรับ ID/epoch ใหม่
|
|
52
|
+
|
|
53
|
+
## Troubleshooting
|
|
54
|
+
|
|
55
|
+
- 401: ตรวจ OAuth discovery และ token
|
|
56
|
+
- workspace access required: เพิ่ม target ลง Project Registry; ถ้าใช้ managed mode ให้ owner เพิ่ม client ACL ด้วย
|
|
57
|
+
- stale workspace: เรียก overview ใหม่หลัง restart/switch
|
|
58
|
+
- approval required: ตรวจ pending approval และอนุมัติ exact digest จาก terminal
|
|
59
|
+
- redirect mismatch: ลงทะเบียน callback แบบ exact string
|
package/docs/BRAIN.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# DODO Project Brain
|
|
2
|
+
|
|
3
|
+
Project Brain เป็น index โครงสร้าง project ที่สร้างใหม่ได้จาก source ปัจจุบัน เพื่อให้
|
|
4
|
+
AI ค้น symbols, references, imports/exports, routes, tests และ dependencies ได้โดยไม่
|
|
5
|
+
ต้องอ่านทุกไฟล์ใหม่ทุกครั้ง รุ่น 1 รองรับ TypeScript, TSX, JavaScript, JSX และ
|
|
6
|
+
dependency metadata ใน `package.json`
|
|
7
|
+
|
|
8
|
+
## การใช้งาน
|
|
9
|
+
|
|
10
|
+
Full surface เรียก operation รายตัว:
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
project_overview()
|
|
14
|
+
brain_status(workspaceId=..., workspaceEpoch=...)
|
|
15
|
+
brain_query(workspaceId=..., workspaceEpoch=..., query="UserService", nodeTypes=["symbol"])
|
|
16
|
+
brain_symbol(workspaceId=..., workspaceEpoch=..., uri="symbol://...")
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Compact/Hybrid ใช้ gateway เดิม:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
dodo_discover(operation="brain_query")
|
|
23
|
+
dodo_assist_read(operation="brain_query", args={query:"UserService"})
|
|
24
|
+
dodo_assist_change(operation="brain_rebuild", args={mode:"incremental",waitMs:10000})
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Maintenance operations มี `brain_rebuild`, `brain_pause` และ `brain_cancel` ทั้งหมด
|
|
28
|
+
ต้องใช้ `dodo:exec` และยังผ่าน trust/approval policy ของ target operation
|
|
29
|
+
|
|
30
|
+
## Incremental model
|
|
31
|
+
|
|
32
|
+
Indexer ทำงานหลัง bootstrap และ refresh เป็นช่วงแบบ bounded:
|
|
33
|
+
|
|
34
|
+
1. เดินไฟล์ผ่าน shared ignore/path policy
|
|
35
|
+
2. เทียบ size, mtime และ ctime กับ cache
|
|
36
|
+
3. snapshot UTF-8 source พร้อมตรวจ file identity และ SHA-256
|
|
37
|
+
4. parse เฉพาะ content ที่ cache key ไม่ตรง
|
|
38
|
+
5. คำนวณ source ที่ได้รับผลจาก imports และ symbol references
|
|
39
|
+
6. commit cache, nodes, edges, run metrics และ freshness ใน transaction เดียว
|
|
40
|
+
|
|
41
|
+
cache key ประกอบด้วย content SHA-256, parser version, graph schema version และ config
|
|
42
|
+
hash การย้ายไฟล์แบบ exact-content ใช้ stable file identity เดิม ทำให้ symbol URI คงเดิม
|
|
43
|
+
แม้ path เปลี่ยน แต่ copy ที่ยังมี source เดิมอยู่จะได้ identity ใหม่
|
|
44
|
+
|
|
45
|
+
ไฟล์ใหญ่เกิน 512 KiB, generated/ignored output และไฟล์เกิน bounded semantic file
|
|
46
|
+
limit จะไม่ถูก parse สถานะและ metrics บอกจำนวน scanned, parsed, reused, moved,
|
|
47
|
+
removed, skipped และ affected files ตาม run ล่าสุด
|
|
48
|
+
|
|
49
|
+
## Graph contract
|
|
50
|
+
|
|
51
|
+
Node types:
|
|
52
|
+
|
|
53
|
+
- `file`
|
|
54
|
+
- `symbol`
|
|
55
|
+
- `route` — syntax heuristic พร้อม evidence label
|
|
56
|
+
- `test` — `describe`/`it`/`test` syntax heuristic
|
|
57
|
+
- `dependency`
|
|
58
|
+
|
|
59
|
+
Edge types:
|
|
60
|
+
|
|
61
|
+
- `contains`
|
|
62
|
+
- `imports`, `exports`, `dynamic_import`
|
|
63
|
+
- `references`
|
|
64
|
+
- `depends_on`
|
|
65
|
+
|
|
66
|
+
ทุก node/edge มี source path, source SHA-256, parser/schema version และ freshness
|
|
67
|
+
route/reference ที่เป็น heuristic จะระบุใน details และไม่ถูกยกระดับเป็นข้อสรุป runtime
|
|
68
|
+
|
|
69
|
+
## Freshness และ recovery
|
|
70
|
+
|
|
71
|
+
`brain_query` ตัด stale/missing row ออกโดย default ใช้ `includeStale:true` เมื่อ
|
|
72
|
+
ต้องการวิเคราะห์ drift โดยผลจะระบุ `freshness` ชัดเจน `brain_symbol` รับ URI เฉพาะ
|
|
73
|
+
namespace ของ project ปัจจุบัน
|
|
74
|
+
|
|
75
|
+
เมื่อพบ interrupted run, parser/schema/config mismatch หรือ row ที่ parse ไม่ได้ ระบบ
|
|
76
|
+
mark state ตามจริงและ queue full rebuild committed index เดิมไม่ถูกลบก่อน graph ใหม่
|
|
77
|
+
พร้อม การ cancel จะยกเลิก worker/run ก่อน transaction commit
|
|
78
|
+
|
|
79
|
+
## Security contract
|
|
80
|
+
|
|
81
|
+
- ไม่มี source, plugin, package script หรือ LSP executable จาก repository ถูก execute
|
|
82
|
+
- `.env`, credential/private DODO state, traversal, symlink และ hardlink ถูก shared
|
|
83
|
+
WorkspaceFS policy ปฏิเสธ
|
|
84
|
+
- index/URI ไม่ให้สิทธิ์ ทุก query ตรวจ live OAuth grant, client, workspace ACL, scope,
|
|
85
|
+
workspace ID/epoch และ current source hash ซ้ำ
|
|
86
|
+
- cursor ใช้ HMAC และผูก query, workspace กับ principal; หมดอายุใน 10 นาที
|
|
87
|
+
- graph ไม่คัดลอกข้าม workspace และ service ถูกปิดเมื่อ runtime workspace เปลี่ยน
|
|
88
|
+
- repository config และ AGENTS.md ไม่สามารถเพิ่ม permission หรือเปิด parser provider
|
|
89
|
+
|
|
90
|
+
Project Brain ไม่ใช่ OS sandbox และไม่ได้สรุป architectural decision หรือ execute
|
|
91
|
+
refactor เอง การแก้ source ยังต้องใช้ file/change tools พร้อม expected hash, journal,
|
|
92
|
+
approval และ rollback ตามเดิม
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# DODO MCP — Compatibility
|
|
2
|
+
|
|
3
|
+
## Supported baseline
|
|
4
|
+
|
|
5
|
+
| Area | Contract |
|
|
6
|
+
|---|---|
|
|
7
|
+
| Node.js | ใช้เวอร์ชันที่ package ระบุใน `engines` |
|
|
8
|
+
| macOS | รองรับ coding, HTTP, STDIO, Local Config และ optional native integrations ตาม permission |
|
|
9
|
+
| Linux | รองรับ coding, HTTP, STDIO, Local Config และ optional integrations ตาม desktop/runtime environment |
|
|
10
|
+
| Windows | Deferred — มี candidate code/tests แต่ยังไม่ประกาศ native support จนกว่าจะผ่าน Windows 11 จริง |
|
|
11
|
+
| MCP HTTP | OAuth protected MCP endpoint ที่ `/mcp` |
|
|
12
|
+
| MCP STDIO | Full surface เป็นค่าเริ่มต้น |
|
|
13
|
+
| Local Config | loopback owner control เท่านั้น |
|
|
14
|
+
| Cloudflare Tunnel | `dodo start`/Local Config ใช้ run-scoped token และ child `cloudflared`; Tunnel จริงยังเป็น manual gate |
|
|
15
|
+
| Package | `dodo-mcp` |
|
|
16
|
+
| CLI | `dodo` |
|
|
17
|
+
|
|
18
|
+
Project Registry ใช้ได้ผ่าน `dodo project add/list/info/remove` และ private Local
|
|
19
|
+
Config โดยไม่เปลี่ยนพฤติกรรม `dodo start --root PATH` หรือ single-workspace STDIO
|
|
20
|
+
|
|
21
|
+
Read-only multi-project federation ใช้ tools เดิมโดยเพิ่ม optional `projectId` ใน
|
|
22
|
+
overview/list/read/search และ `projectIds` สูงสุด 8 รายการใน search จึงไม่เปลี่ยน
|
|
23
|
+
จำนวนหรือชื่อ tool ของ Full/Compact/Hybrid HTTP remote client ต้องมี installation
|
|
24
|
+
identity และ `dodo:read` ACL ในทุก target; STDIO local owner ใช้ registry เดียวกัน
|
|
25
|
+
Effectful tools และ jobs ยังทำงานใน active workspace เดียว
|
|
26
|
+
|
|
27
|
+
## Tool surfaces
|
|
28
|
+
|
|
29
|
+
- HTTP default: Compact 19 tools
|
|
30
|
+
- STDIO default: Full 121 tools; เปิด Sub-agent MCP exposure แล้วเป็น 125
|
|
31
|
+
- explicit Hybrid: 49 tools
|
|
32
|
+
|
|
33
|
+
Complete capability schema มี 125 operations ค่าเริ่มต้น `exposeSubagentsToMcp=false`
|
|
34
|
+
ซ่อน `subagent_spawn/status/result/control` จาก MCP เท่านั้น หน้าเว็บ Chat & Tasks ยัง
|
|
35
|
+
ใช้ได้ Compact/Hybrid คงจำนวน 19/49 tool names แต่กรอง operation enum, instructions
|
|
36
|
+
และ discover index ให้ตรงกับ live runtime หลังเปลี่ยนค่าต้อง restart และให้ client
|
|
37
|
+
โหลด catalog ใหม่
|
|
38
|
+
- explicit override: `--tools compact|full|hybrid`
|
|
39
|
+
|
|
40
|
+
Surface เปลี่ยนจำนวน tools ที่ expose เท่านั้น ไม่เปลี่ยน permission หรือ security policy
|
|
41
|
+
|
|
42
|
+
Project Brain รุ่นแรกใช้ bundled TypeScript 5.9 AST provider สำหรับ TypeScript,
|
|
43
|
+
TSX, JavaScript และ JSX พร้อมอ่าน dependency metadata จาก `package.json` ภาษาอื่น
|
|
44
|
+
ยังใช้ semantic/LSP tools เดิม และ Project Brain จะไม่อ้างว่ามี parser graph หากยัง
|
|
45
|
+
ไม่มี provider ที่ประกาศรองรับ
|
|
46
|
+
|
|
47
|
+
Context Engine ใช้ lexical/Project Brain/Git สำหรับ active workspace, guarded lexical
|
|
48
|
+
federation สำหรับ project อื่น, owner-reviewed current Memory และ caller-scoped current
|
|
49
|
+
Runtime Intelligence evidence ตาม live ACL Runtime process ใช้ executable/sandbox
|
|
50
|
+
support ของ JobManager ปัจจุบัน ส่วน browser evidence ต้องมี Playwright Chromium และ
|
|
51
|
+
owned browser session เดิม Compact/Hybrid ยังคง 19/49 tools
|
|
52
|
+
|
|
53
|
+
Advanced Agent Runtime ใช้ SQLite และ invocation pipeline เดิมทุก platform Managed
|
|
54
|
+
exec ต้องใช้ explicit argv และ executable ที่ JobManager รองรับ ส่วน browser/desktop/
|
|
55
|
+
media/workflow ขึ้นกับ optional capability ของ platform เช่นเดิม
|
|
56
|
+
|
|
57
|
+
## Optional capabilities
|
|
58
|
+
|
|
59
|
+
Desktop, browser, media, speech, LSP และ OS sandbox ต้องตรวจ dependency และ OS permission ด้วย `dodo setup --check` หรือ `dodo doctor` ระบบจะรายงาน `NOT_SUPPORTED` เมื่อ environment ยังไม่พร้อม และจะไม่เปิด permission หรือดาวน์โหลด model โดยอัตโนมัติ
|
|
60
|
+
|
|
61
|
+
`dodo setup --plan` ใช้ตรวจขั้นตอนติดตั้งแบบ read-only ส่วน installer ต้องมี `--yes` การใช้ `--import-state` รองรับเฉพาะ config ตำแหน่งมาตรฐานและนำเข้า non-authority preferences เท่านั้น custom `DODO_CONFIG_DIR` ไม่ถูกค้นหรือ merge อัตโนมัติ
|
|
62
|
+
|
|
63
|
+
`dodo setup --components cloudflared` ตรวจ executable ได้ทุก OS การติดตั้งอัตโนมัติในรุ่นนี้รองรับ Homebrew บน macOS ส่วน Linux/Windows ใช้ signed official package ที่เจ้าของติดตั้งเอง เส้นทางหลักรับ run-scoped token จาก hidden terminal prompt หรือ owner-only Local Config และไม่ใช้ credential store; env/file/OS references คงอยู่เฉพาะ advanced compatibility commands
|
|
64
|
+
|
|
65
|
+
## Client behavior
|
|
66
|
+
|
|
67
|
+
Remote clients อาจ cache tool catalog ต้องใช้ refresh หรือ recreate connection ตามพฤติกรรมของ client หลังเปลี่ยน surface หรือ schema
|
|
68
|
+
|
|
69
|
+
## Security boundary
|
|
70
|
+
|
|
71
|
+
Directory guard ไม่ใช่ OS sandbox, repository instructions ไม่มีอำนาจเพิ่มสิทธิ์ และ trusted commands ใช้สิทธิ์ OS ของผู้ใช้จริง
|
|
72
|
+
|
|
73
|
+
## Evaluation evidence
|
|
74
|
+
|
|
75
|
+
DodoBench local fixture ใช้ยืนยัน contract บน platform/revision ที่ report ระบุเท่านั้น
|
|
76
|
+
ผลของ macOS ไม่แทน Linux และ Linux Docker ไม่แทน Windows native Release gate ต้องมี
|
|
77
|
+
หลักฐาน macOS local และ Linux Docker ที่ revision/lock digest ตรงกัน Docker image
|
|
78
|
+
ติดตั้ง Playwright Chromium เพื่อรัน browser case จริง Dedicated self-hosted GitHub
|
|
79
|
+
Actions รัน Linux Docker และ Windows native candidate เฉพาะ trusted main/manual
|
|
80
|
+
Windows manual acceptance ยังคง `MANUAL_NOT_RUN` จนกว่าจะทดสอบบน Windows 11 จริง
|
|
81
|
+
|
|
82
|
+
## AI Providers / Multi-project
|
|
83
|
+
|
|
84
|
+
Full เพิ่ม `subagent_spawn/status/result/control` เป็น 125 tools Compact ยังคง 19 และ
|
|
85
|
+
Hybrid 49 โดยใช้ assist gateways เดิม Full/Compact รองรับ optional `targetProjectId`
|
|
86
|
+
STDIO default ยัง Full; HTTP default ยัง Compact Refresh/recreate MCP app ตาม client
|
|
87
|
+
เพื่อรับ schema ใหม่ รัน `project_overview` ใหม่ก่อนใช้ epoch หลัง restart
|
|
88
|
+
|
|
89
|
+
Protocol fixtures ครอบคลุม Responses, Gemini Interactions, Anthropic, Chat Completions
|
|
90
|
+
และ Ollama Native ทั้งเจ็ด presets ซึ่งไม่เท่ากับ live API/model compatibility ของแต่ละ
|
|
91
|
+
account Session credentials ใช้ได้โดยไม่ต้อง Keychain; persistent Keychain ตรวจบน macOS
|
|
92
|
+
Linux Docker และ live providers ต้องดูผลแยกใน TEST_REPORT ไม่ใช้ผล macOS แทน
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# DODO Confirmation and Approvals
|
|
2
|
+
|
|
3
|
+
DODO ใช้ permission จาก OAuth connection, workspace ACL, trust mode และ local approval ของ owner เป็นหลัก ไม่มี approval แบบรวมที่ทำให้ทุก operation ผ่านได้
|
|
4
|
+
|
|
5
|
+
Effectful operations ใน `inspect` ต้องสร้าง pending approval ที่ผูกกับ target tool, action, workspace, epoch, policy version, digest และ expiration เจ้าของต้องตรวจรายการและ approve exact request ผ่าน Local Config หรือ CLI
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
dodo pending
|
|
9
|
+
dodo approve REQUEST_ID
|
|
10
|
+
dodo deny REQUEST_ID
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Gateway ใช้ approval ของ target operation ไม่ใช่ approval เดียวของ gateway และการเปลี่ยน workspace/revoke access ทำให้ approval เก่าถูกปฏิเสธ
|
package/docs/CONTEXT.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# DODO Context Engine
|
|
2
|
+
|
|
3
|
+
Context Engine ช่วยให้ AI ขอข้อมูลตามเป้าหมายและ byte budget โดยไม่ต้องเลือก
|
|
4
|
+
เครื่องมือค้นหาระดับล่างทุกตัวเอง ระบบรวม lexical search, Project Brain, Git,
|
|
5
|
+
owner-reviewed Memory และ read-only project federation แล้วคืนหลักฐานที่ตรวจย้อนกลับได้
|
|
6
|
+
|
|
7
|
+
## เริ่มใช้งาน
|
|
8
|
+
|
|
9
|
+
Full surface:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
context_query(
|
|
13
|
+
goal="Fix login callback",
|
|
14
|
+
terms=["loginCallback", "OAuth"],
|
|
15
|
+
projects=["Frontend", "Backend"],
|
|
16
|
+
budget=24000,
|
|
17
|
+
maxItems=24
|
|
18
|
+
)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Compact/Hybrid surface:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
dodo_discover(operation="context_query")
|
|
25
|
+
dodo_assist_read(operation="context_query", args={...})
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`projects` รับ project ID, workspace ID, exact display name หรือ `active` ได้สูงสุด
|
|
29
|
+
8 รายการ รายการว่างหมายถึง active workspace เท่านั้น Project Registry ไม่ได้ให้
|
|
30
|
+
สิทธิ์เอง ทุก target ต้องมี live `dodo:read` ACL ของ client ก่อน
|
|
31
|
+
|
|
32
|
+
## Evidence contract
|
|
33
|
+
|
|
34
|
+
ผลลัพธ์แยกข้อมูลเป็นห้ากลุ่มเสมอ:
|
|
35
|
+
|
|
36
|
+
- `FACT` — โครงสร้างที่ parser ระบุและตรวจ source hash แล้ว
|
|
37
|
+
- `OBSERVATION` — ข้อความ source/test/docs/config หรือ Git metadata ที่อ่านโดยตรง
|
|
38
|
+
- `MEMORY` — owner-reviewed memory ที่ยัง current และ source evidence ยังตรวจได้
|
|
39
|
+
- `INFERENCE` — ความสัมพันธ์หรือ syntax heuristic ที่ยังต้องยืนยัน
|
|
40
|
+
- `HYPOTHESIS` — ว่างจนกว่าจะมีระบบสร้างสมมติฐานโดยมีหลักฐานรองรับ
|
|
41
|
+
|
|
42
|
+
แต่ละ record มี project/workspace identity, source kind, opaque resource URI,
|
|
43
|
+
relative path, SHA-256, line, commit (ถ้ามี), confidence, ranking reasons,
|
|
44
|
+
`generatedAt`, `lastVerifiedAt`, freshness และข้อจำกัด Source text ทุกชนิดมี
|
|
45
|
+
`trust: untrusted_content`; README, repository instruction, tool output หรือผลค้นหา
|
|
46
|
+
ไม่สามารถเพิ่ม permission หรือเปลี่ยน policy ได้
|
|
47
|
+
|
|
48
|
+
ใช้ `context_evidence(evidenceId=...)` เพื่อตรวจหลักฐานชิ้นเดิมอีกครั้ง ระบบตรวจ
|
|
49
|
+
OAuth/grant/client ACL และ source hash ปัจจุบันใหม่ทุกครั้ง หาก source เปลี่ยนจะคืน
|
|
50
|
+
`freshness: stale` โดยไม่อ้างว่าเนื้อหาเดิมยังเป็นปัจจุบัน Evidence ID, source URI,
|
|
51
|
+
hash และ cursor ไม่ใช่ bearer capability
|
|
52
|
+
|
|
53
|
+
## Ranking, budget และ cursor
|
|
54
|
+
|
|
55
|
+
Ranking เป็น deterministic ภายใต้ query, ACL และ source/index version เดียวกัน
|
|
56
|
+
โดยให้เหตุผลต่อ record เช่น parsed graph entity, source/test/docs category และ
|
|
57
|
+
literal term match ระบบส่งเฉพาะ evidence ที่พอดีกับ budget, จำกัด candidate/result,
|
|
58
|
+
ตัด excerpt แบบ UTF-8 safe และคืน signed cursor เมื่อยังมีผลต่อ Cursor ผูก query,
|
|
59
|
+
index version, active workspace และ principal และหมดอายุภายใน 10 นาที
|
|
60
|
+
|
|
61
|
+
ระบบไม่ dump repository ทั้งก้อน Runtime provider อ่านเฉพาะ current bounded evidence
|
|
62
|
+
ของ caller ใน active workspace ส่วน graph/runtime ของ federated project ที่ยังไม่เปิด
|
|
63
|
+
จะแสดง `unavailable`/`partial` และ limitation ตามจริง
|
|
64
|
+
|
|
65
|
+
## Cache L0–L6
|
|
66
|
+
|
|
67
|
+
Context cache แยกขั้นตั้งแต่ normalized plan (`L0`) ถึง ranked final context (`L6`)
|
|
68
|
+
และผูก active workspace, principal และ query hash ทุกชั้นที่อาศัย source เก็บ
|
|
69
|
+
dependency path/hash ก่อนใช้ `L6` ซ้ำ ระบบ re-authorize target และตรวจ hash ทุก
|
|
70
|
+
dependency หากเปลี่ยนจะลบ derived cache `L1–L6`, mark evidence เดิมเป็น stale และ
|
|
71
|
+
สร้างผลใหม่ `L0` ไม่เก็บ source content ที่เป็น authority
|
|
72
|
+
|
|
73
|
+
Cache มีอายุ 10 นาทีและจำกัด 140 rows ต่อ principal/workspace Evidence มีอายุ
|
|
74
|
+
24 ชั่วโมงและจำกัด 1,000 rows `context_status` แสดงจำนวน cache/evidence, hit rate,
|
|
75
|
+
latency และ source availability แบบไม่มี query text, path, content, token หรือ owner
|
|
76
|
+
state ผล query แสดง term coverage และจำนวน source kinds เพื่อให้วัด retrieval quality
|
|
77
|
+
ของ fixture เดิมซ้ำได้
|
|
78
|
+
|
|
79
|
+
## ขอบเขตปัจจุบัน
|
|
80
|
+
|
|
81
|
+
- semantic graph ใช้ Project Brain ของ active workspace; project อื่นใช้ guarded
|
|
82
|
+
lexical federation และระบุ graph ว่า partial
|
|
83
|
+
- Git history ใช้ active workspace เท่านั้น
|
|
84
|
+
- memory retrieval รับเฉพาะ owner-reviewed CURRENT records และตรวจ source/retention;
|
|
85
|
+
runtime evidence ไม่มี current row หรือ source recheck ไม่ผ่าน และไม่ถูกสร้างขึ้นแทน
|
|
86
|
+
- context เป็นข้อมูลช่วยตัดสินใจ ไม่ใช่สิทธิ์เขียน/รันคำสั่ง การแก้ไขยังต้องผ่าน
|
|
87
|
+
target tool, workspace ID/epoch, scope, trust, approval, hash และ path/secret guard
|
package/docs/DESKTOP.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# DODO Desktop Access
|
|
2
|
+
|
|
3
|
+
Desktop tools ทำงานกับ application ที่เจ้าของอนุญาตแบบ explicit เท่านั้น ระบบไม่เปิด Screen Recording, Accessibility, microphone หรือ system audio permission เอง
|
|
4
|
+
|
|
5
|
+
## Operations
|
|
6
|
+
|
|
7
|
+
- `desktop_status`
|
|
8
|
+
- `desktop_windows`
|
|
9
|
+
- `desktop_capture`
|
|
10
|
+
- `desktop_accessibility`
|
|
11
|
+
- `desktop_action`
|
|
12
|
+
|
|
13
|
+
ใน Compact surface ใช้ `dodo_desktop_view` และ `dodo_desktop_control`
|
|
14
|
+
|
|
15
|
+
## Permission flow
|
|
16
|
+
|
|
17
|
+
1. ตรวจด้วย `dodo setup --check`
|
|
18
|
+
2. ให้ OS permission เองตาม platform
|
|
19
|
+
3. เพิ่ม app identifier แบบ exact ผ่าน Local Config หรือ CLI หากใช้ `--persist` จะจำครั้งเดียวระดับ DODO installation และใช้ต่อได้ทุกโปรเจกต์
|
|
20
|
+
4. เรียก status/view ก่อน action
|
|
21
|
+
5. ทุก action ต้องใช้ target scope, owner permission, trust และ approval ตาม policy
|
|
22
|
+
|
|
23
|
+
Desktop action เป็น effectful operation ใช้ idempotency และ observation freshness เพื่อป้องกัน action กับหน้าต่างที่เปลี่ยนไปแล้ว หากผลลัพธ์ไม่แน่นอน ระบบไม่ retry เอง
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
dodo desktop allow --app com.google.Chrome --mode control --persist --yes
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
คำสั่งนี้รันจาก path ใดก็ได้ สิทธิ์ Screen Recording/Accessibility ของ macOS ยังเป็น
|
|
30
|
+
สิทธิ์ระดับ OS ที่เจ้าของต้องอนุญาตเอง Persistent consent ไม่ข้าม OAuth `dodo:exec`,
|
|
31
|
+
workspace ID/epoch, current snapshot, idempotency หรือ app allowlist
|
|
32
|
+
|
|
33
|
+
## Limitations
|
|
34
|
+
|
|
35
|
+
ถ้า backend หรือ permission ไม่พร้อม ระบบตอบ `NOT_SUPPORTED`/permission error ตามจริง ไม่รายงานว่าควบคุม desktop ได้เพียงเพราะมี executable ติดตั้งอยู่
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# DodoBench และ Release Gate
|
|
2
|
+
|
|
3
|
+
DodoBench เป็นชุดประเมินแบบ deterministic สำหรับ source checkout ของ DODO MCP
|
|
4
|
+
ใช้ fixture แยกและเรียก HTTP + OAuth + Compact gateways จริง โดยไม่จำลองชั้น
|
|
5
|
+
authorization หรือ policy ผลจึงบอกได้ว่า contract หลักยังทำงานร่วมกัน แต่ไม่ใช่
|
|
6
|
+
คะแนนความสามารถของโมเดล AI และไม่ใช่ production latency SLA
|
|
7
|
+
|
|
8
|
+
## สิ่งที่วัด
|
|
9
|
+
|
|
10
|
+
Baseline `benchmarks/dodobench-core-v1.json` ครอบคลุม:
|
|
11
|
+
|
|
12
|
+
- retrieval ข้ามโปรเจกต์ที่ client มี ACL และ context cache hit
|
|
13
|
+
- diagnosis/edit ที่แก้เฉพาะไฟล์เป้าหมายด้วย expected hash
|
|
14
|
+
- runtime task, test-report evidence และ diagnosis
|
|
15
|
+
- binary resource และ MCP image content block
|
|
16
|
+
- durable Agent Runtime หลัง server restart
|
|
17
|
+
- anonymous OAuth, read-only scope, secret path, stale epoch และ inspect approval
|
|
18
|
+
- browser screenshot แบบ optional เมื่อมี Playwright Chromium
|
|
19
|
+
|
|
20
|
+
รายงานมี success rate, wrong-file edit rate, context precision/recall, cache hit,
|
|
21
|
+
จำนวน tool calls, serialized request/response bytes, latency, human intervention และ
|
|
22
|
+
security violations ค่า `modelTokens` เป็น `null` เสมอ เพราะ suite นี้ไม่เรียกโมเดล
|
|
23
|
+
และไม่เดาจำนวน token
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm run bench
|
|
27
|
+
node scripts/dodo-bench.mjs --output release-evidence/1.0.0/dodobench.json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
ทุก report ผูกกับ Git revision, dirty state, dataset version/digest, Node/OS/arch,
|
|
31
|
+
`package-lock.json` digest และ configuration digest ผลจาก revision หรือ lock คนละชุด
|
|
32
|
+
จึงไม่ควรนำมาเทียบเป็น baseline เดียวกันโดยไม่ตรวจ metadata
|
|
33
|
+
|
|
34
|
+
## Candidate release gate
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm run release:gate
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
คำสั่งนี้รัน build, typecheck, lint, test suite, DodoBench, production dependency
|
|
41
|
+
audit, immutable `npm pack` manifest/checksum และ fresh exact-tarball smoke ซึ่งตรวจ
|
|
42
|
+
`dodo --version`, STDIO Full 125 tools, Streamable HTTP + OAuth Compact 19 tools และ
|
|
43
|
+
write → read → edit → read-back ผ่าน Compact gateway
|
|
44
|
+
|
|
45
|
+
หลักฐาน non-secret ถูกเขียนใต้ `release-evidence/<version>/` ซึ่งถูก ignore ทั้ง Git
|
|
46
|
+
และ npm package สคริปต์ไม่ publish npm, ไม่แก้ tunnel/DNS และไม่แตะ owner state จริง
|
|
47
|
+
|
|
48
|
+
## Platform gates
|
|
49
|
+
|
|
50
|
+
macOS รันจาก owner checkout ส่วน Linux gate เดียวกันรันได้ทั้ง local Docker และ
|
|
51
|
+
dedicated self-hosted GitHub Actions runner:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# macOS บน checkout ปัจจุบัน
|
|
55
|
+
npm run release:gate
|
|
56
|
+
|
|
57
|
+
# Linux จริงใน Docker image แยก พร้อม Playwright Chromium
|
|
58
|
+
npm run test:linux:docker
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Docker build ไม่รับ `.git`, `.npmrc`, `.env`, model, release evidence หรือเอกสารพัฒนา
|
|
62
|
+
private เข้า build context ตัว runner ส่งเฉพาะ revision/dirty state ที่อ่านจาก host Git
|
|
63
|
+
เข้า release gate และ DodoBench ผ่าน environment attestation ที่รับได้เฉพาะใน Linux
|
|
64
|
+
container จากนั้นตรวจ report กลับว่าตรงกับ revision และ lock digest เดิม
|
|
65
|
+
|
|
66
|
+
`.github/workflows/platform-gates.yml` ใช้ self-hosted labels `linux-ci` และ
|
|
67
|
+
`windows-ci 02` ทดสอบ Node 22/24 เฉพาะ push ที่ `main` กับ manual dispatch ไม่มี
|
|
68
|
+
`pull_request` trigger เพราะ repository เป็น public และ untrusted PR ต้องไม่ execute
|
|
69
|
+
บนเครื่อง runner ของเจ้าของ Actions dependencies ถูก pin ด้วย commit SHA และ token
|
|
70
|
+
มีเพียง `contents: read`
|
|
71
|
+
|
|
72
|
+
`npm run release:gate:strict` ต้องใช้ source ที่ clean และมี macOS/Linux evidence จาก
|
|
73
|
+
revision กับ `package-lock.json` เดียวกัน Windows ถูกระบุเป็น
|
|
74
|
+
`DEFERRED_MANUAL_NOT_RUN` และไม่ถูกนับเป็น supported release platform ในช่วงนี้
|
|
75
|
+
Manual external-AI, owner workspace และ Windows 11 อยู่แยกเป็น `MANUAL_NOT_RUN`
|
|
76
|
+
Strict gate รับ Linux evidence เฉพาะ `docker-host-git` จาก clean checkout พร้อม
|
|
77
|
+
fresh-install PASS จึงไม่รับ candidate ที่มี uncommitted source หรือ report จาก runner
|
|
78
|
+
ชนิดอื่น Report บันทึก origin ว่ามาจาก local หรือ GitHub Actions ตามจริง ไม่มีคำสั่ง
|
|
79
|
+
เหล่านี้ publish npm
|
|
80
|
+
|
|
81
|
+
## Security invariants
|
|
82
|
+
|
|
83
|
+
Benchmark และ release gate ไม่มีสิทธิ์พิเศษ ไม่มีทาง approve action, เพิ่ม ACL/trust,
|
|
84
|
+
ปิด sandbox, เปิด network/desktop หรืออ่าน secret paths ทุก operation ผ่าน target tool
|
|
85
|
+
definition และ security pipeline เดิม ผล benchmark ที่ผ่านไม่สามารถลด policy หรือ
|
|
86
|
+
แทน manual/platform evidence ได้
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# DODO Large Coding Inputs
|
|
2
|
+
|
|
3
|
+
DODO รองรับคำสั่ง, patch และไฟล์ที่มีขนาดใหญ่ขึ้นด้วย bounded budgets และ temporary files ที่อยู่ภายใต้ workspace policy
|
|
4
|
+
|
|
5
|
+
## Configuration
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
dodo limits --profile large
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
การเปลี่ยน limits มีผลหลัง restart process และไม่เปลี่ยน OAuth, ACL, trust, sandbox หรือ secret policy
|
|
12
|
+
|
|
13
|
+
## Safety
|
|
14
|
+
|
|
15
|
+
- input และ output มี byte budget แยกกัน
|
|
16
|
+
- command ใช้ argv ที่ผ่าน length checks
|
|
17
|
+
- file write ใช้ expected hash และ journal
|
|
18
|
+
- temporary content ไม่ถูกแสดงใน audit โดยอัตโนมัติ
|
|
19
|
+
- repository config และ AGENTS.md ตั้ง limit หรือ grant สิทธิ์เพิ่มไม่ได้
|
|
20
|
+
|
|
21
|
+
ใช้ limits สูงเมื่อจำเป็นและตรวจ diff ก่อน apply ทุกครั้ง
|
package/docs/LSP.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# DODO Language Server Integration
|
|
2
|
+
|
|
3
|
+
DODO มี TypeScript/JavaScript intelligence ในตัวและรองรับ language server เพิ่มเติมที่เจ้าของติดตั้งเอง
|
|
4
|
+
|
|
5
|
+
## Register a server
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
dodo lsp add python --command pyright-langserver --args --stdio --ext .py --ext .pyi
|
|
9
|
+
dodo lsp list
|
|
10
|
+
dodo lsp remove python
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
DODO start process ของ language server ด้วย argv ที่ระบุ, environment ที่ scrubbed และ workspace root ที่ตรวจแล้ว ไม่มี shell expansion จาก input ของ AI
|
|
14
|
+
|
|
15
|
+
## Lifecycle
|
|
16
|
+
|
|
17
|
+
LSP เปิดเมื่อ operation ต้องใช้และปิดเมื่อ workspace shutdown/switch ระบบมี initialization/progress gate และทำลาย child process/resource อย่างถูกต้อง
|
|
18
|
+
|
|
19
|
+
## Unsupported languages
|
|
20
|
+
|
|
21
|
+
ถ้าไม่มี registry entry ระบบคืน `UNSUPPORTED_LANGUAGE` พร้อมคำแนะนำให้ owner เพิ่ม server เอง ไม่ดาวน์โหลดหรือรัน server ที่ไม่ได้ลงทะเบียนโดยอัตโนมัติ
|