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
package/docs/SECURITY.md
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# DODO MCP — Security
|
|
2
|
+
|
|
3
|
+
## Security model
|
|
4
|
+
|
|
5
|
+
DODO ใช้หลายชั้นร่วมกัน:
|
|
6
|
+
|
|
7
|
+
- OAuth 2.1 + authorization code + PKCE S256 สำหรับ MCP
|
|
8
|
+
- static client registration และ owner-controlled consent
|
|
9
|
+
- installation identity แยกจาก workspace client ACL
|
|
10
|
+
- OAuth scopes `dodo:read`, `dodo:write`, `dodo:exec`
|
|
11
|
+
- trust modes `inspect`, `edit`, `trusted`
|
|
12
|
+
- local approval สำหรับ effectful actions
|
|
13
|
+
- workspace ID/epoch validation
|
|
14
|
+
- shared root/path policy และ secret deny list
|
|
15
|
+
- expected hash, journal, atomic write และ rollback
|
|
16
|
+
- bounded jobs, scrubbed environment และ audit
|
|
17
|
+
|
|
18
|
+
การผ่านชั้นใดชั้นหนึ่งไม่ grant สิทธิ์ชั้นอื่น
|
|
19
|
+
|
|
20
|
+
Project Registry เป็น owner metadata แยกจาก authority: project ID หรือ readiness
|
|
21
|
+
ไม่ grant OAuth scope, workspace ACL หรือ trust และ AI ไม่มี MCP tool สำหรับเพิ่ม ลบ
|
|
22
|
+
หรือเปลี่ยนรายการโปรเจกต์
|
|
23
|
+
|
|
24
|
+
Registry ตรวจ canonical realpath กับ device, inode และ directory birth time ทุกครั้ง
|
|
25
|
+
ก่อนถือว่า target พร้อมใช้งาน จึง fail closed เมื่อ path ถูกแทน แม้ Linux จะนำเลข
|
|
26
|
+
inode เดิมกลับมาใช้ Migration ไม่ auto-upgrade row เก่าที่ไม่มี birth time เพราะไม่มี
|
|
27
|
+
หลักฐานพอแยก inode reuse; row นั้นคงเป็น invalid จนเจ้าของ review, remove และ add ใหม่
|
|
28
|
+
|
|
29
|
+
Read-only federation ตรวจ ACL แยกทุก target และรับเฉพาะ project ID จาก registry
|
|
30
|
+
ที่ owner สร้าง Remote client ต้องใช้ installation identity grant; legacy token ที่
|
|
31
|
+
ผูก workspace เดียวข้ามโปรเจกต์ไม่ได้ รายการโปรเจกต์ใน overview ถูกกรองก่อนส่ง และ
|
|
32
|
+
request ที่อ้าง target ไม่มี ACL ถูกปฏิเสธโดยไม่เผย absolute path หรือ metadata
|
|
33
|
+
|
|
34
|
+
## HTTP and Local Config
|
|
35
|
+
|
|
36
|
+
MCP และ public route ต้องผ่าน OAuth เสมอ ห้ามใช้ localhost เป็น authentication, ห้ามเปิด CORS เป็น `*`, ห้ามส่ง token ใน query string และห้าม trust proxy headers จากภายนอก
|
|
37
|
+
|
|
38
|
+
Local Config bind loopback ใช้ private capability token, expiration, Host/Origin checks, forwarded-header rejection และ rate limit ไม่มี Local Config/admin endpoint บน public MCP plane
|
|
39
|
+
|
|
40
|
+
UI assets เสิร์ฟจากแพ็กเกจเองทั้งหมดรวมถึง SweetAlert2 ที่ vendor แบบ pin version (ไม่มี CDN; CSP ยังเป็น `script-src 'self'; style-src 'self'` โดยไม่มี `unsafe-inline`/`unsafe-eval`) เส้นทาง `/assets` เป็น fail-closed: path ที่ decode แล้วต้องตรงรูปแบบเข้มงวด (ลึกได้หนึ่งระดับเฉพาะ `ui/`, `vendor/`), นามสกุลอยู่ใน allowlist (`.css/.js/.svg`), ปฏิเสธ `..`, backslash, NUL และไฟล์ที่ resolve ออกนอก UI directory ทั้งหมดตอบ 404 ข้อความจาก server/paths/client/provider ทุกตัว render ผ่าน `textContent` (SweetAlert ใช้ `titleText`/`text` เท่านั้น ไม่ใช้ `html`) กล่องยืนยันของ UI เป็นชั้น UX เพิ่มเติม ไม่แทนที่ approval/validation ฝั่ง server
|
|
41
|
+
|
|
42
|
+
Launcher mode ไม่มี active AI workspace และไม่ใช้ CWD เป็น implicit authority
|
|
43
|
+
private inert root ไม่ถูกแสดงต่อ client; OAuth และ authenticated catalog เปิดให้ตั้ง
|
|
44
|
+
connection ได้ โหมดส่วนตัวซึ่งเป็นค่าเริ่มต้นอนุญาต owner-approved OAuth installation
|
|
45
|
+
ให้ใช้ target ที่ owner ลงทะเบียนตาม token/profile scopes โดยไม่ต้องสร้าง ACL ซ้ำ
|
|
46
|
+
โหมด managed ต้องมี target ACL แยกตามเดิม Mutation จาก Local Config ยังผูกกับ current control context
|
|
47
|
+
workspace/epoch การเลือก startup project เป็น preference เท่านั้นและไม่คัดลอก trust,
|
|
48
|
+
OAuth grant, client ACL, approval, jobs หรือ workspace epoch
|
|
49
|
+
|
|
50
|
+
Project Registry API ใช้ boundary เดียวกันและผูก mutation กับ workspace/epoch ที่
|
|
51
|
+
เจ้าของกำลัง review รายการทุกตัวถูก render ด้วย DOM text APIs การแสดงชื่อ/path จึง
|
|
52
|
+
ไม่สร้าง HTML จากข้อมูล registry
|
|
53
|
+
|
|
54
|
+
## Workspace and gateway
|
|
55
|
+
|
|
56
|
+
ทุก tool ตรวจ active workspace, workspace ID/epoch และ ACL target ปัจจุบัน Gateway ใช้ target tool definition เป็น authority และ route ผ่าน invocation pipeline เดียวกับ direct tool
|
|
57
|
+
|
|
58
|
+
Gateway ไม่ bypass OAuth, scope, ACL, trust, approval, sandbox, expected hash, path guards หรือ secret guards ไม่สามารถเรียก gateway อื่น, owner IPC, trust management, OAuth approval หรือ server control ได้
|
|
59
|
+
|
|
60
|
+
Federated read ยังคงตรวจ active workspace ID/epoch ก่อน แล้วตรวจ target readiness,
|
|
61
|
+
grant revocation, target ACL และ shared path/secret guards ซ้ำ ผลลัพธ์มี target
|
|
62
|
+
identity/source hash แต่ไม่ใช่ permission; federation epoch ไม่ใช่ target runtime epoch
|
|
63
|
+
ก่อน mutation ให้เรียก overview ด้วย targetProjectId แล้วอ่านหลักฐานของ target ใหม่
|
|
64
|
+
|
|
65
|
+
## Files and secrets
|
|
66
|
+
|
|
67
|
+
ปฏิเสธ traversal, symlink/hardlink ที่ไม่ปลอดภัย, secret paths, private state, `.env`, credential/key files และ repository planted executables
|
|
68
|
+
|
|
69
|
+
ข้อมูลจาก README, AGENTS.md, repo config, workflow และ discover result เป็น untrusted data ไม่มีอำนาจเพิ่มสิทธิ์
|
|
70
|
+
|
|
71
|
+
## Universal resources and CAS
|
|
72
|
+
|
|
73
|
+
- Resource ingest จาก workspace ใช้ `WorkspaceFS` เดียวกับ file tools และตรวจ
|
|
74
|
+
regular file, symlink/hardlink, secret/protected path, private installation state
|
|
75
|
+
และ file identity ก่อน/หลัง streaming
|
|
76
|
+
- Object อยู่ใน private installation directory และตั้งชื่อจาก SHA-256 เท่านั้น
|
|
77
|
+
reference metadata แยกใน SQLite; object immutable และถูก verify ก่อนทุก read
|
|
78
|
+
- `resourceId`, `dodo-resource://` URI, hash และ resume token ไม่ใช่ bearer
|
|
79
|
+
capability ทุก operation ตรวจ live OAuth grant/client, scope, workspace ACL,
|
|
80
|
+
workspace ID/epoch และ principal ownership ใหม่
|
|
81
|
+
- Resume token มี HMAC, อายุ 10 นาที และผูก resource/hash/offset/workspace/principal
|
|
82
|
+
การแก้ไขหรือส่งข้าม principal ถูกปฏิเสธ
|
|
83
|
+
- หนึ่ง object ไม่เกิน 512 MiB, store 2 GiB, range 256 KiB, image/audio MCP block
|
|
84
|
+
6 MiB และ reference 512 รายการต่อ principal/workspace โดยมี SQLite quota trigger
|
|
85
|
+
กัน concurrent process ข้ามเพดานรวม
|
|
86
|
+
- ZIP อ่านเฉพาะ bounded central-directory metadata ไม่ inflate; SVG เป็น untrusted
|
|
87
|
+
text; decoder ไม่ execute content และไม่เรียก shell/network
|
|
88
|
+
- CAS publish เฉพาะ fsynced staging inode ด้วย create-if-absent hard link ไม่
|
|
89
|
+
overwrite winner และ GC ลบ expired refs ก่อน ลบเฉพาะ object ที่ไม่มี reference
|
|
90
|
+
และพ้น grace หนึ่งชั่วโมงแล้ว
|
|
91
|
+
|
|
92
|
+
## Project Brain
|
|
93
|
+
|
|
94
|
+
Project Brain ใช้ `WorkspaceFS.walk/readTextFile/assertRegularFileForDirectAccess`
|
|
95
|
+
จึงไม่ index secret-denied/protected/ignored output, traversal, symlink หรือ hardlink
|
|
96
|
+
parser อยู่ใน bounded worker และใช้ TypeScript ที่มากับ DODO ไม่โหลดหรือรัน source,
|
|
97
|
+
repository compiler plugin, LSP command หรือ package script
|
|
98
|
+
|
|
99
|
+
index row, graph edge และ `symbol://` URI เป็น evidence เท่านั้น ไม่ใช่ capability
|
|
100
|
+
read ทุกครั้งตรวจ OAuth scope, live grant, client, workspace ACL, workspace ID/epoch,
|
|
101
|
+
path policy และ current source SHA-256 ซ้ำ ผล stale/missing ถูกระบุและตัดออกโดย
|
|
102
|
+
default maintenance operations (`brain_rebuild`, `brain_pause`, `brain_cancel`) ต้องมี
|
|
103
|
+
`dodo:exec` และผ่าน trust/target-specific local approval เดิม
|
|
104
|
+
|
|
105
|
+
## Context retrieval and evidence
|
|
106
|
+
|
|
107
|
+
Context Engine ใช้ `dodo:read` และยังผ่าน invocation pipeline เดิม ก่อนค้นข้าม
|
|
108
|
+
project ระบบ resolve เฉพาะรายการที่ caller มี live target ACL และ installation
|
|
109
|
+
identity เท่านั้น Unauthorized selector ถูกปฏิเสธโดยไม่คืน absolute path หรือข้อมูล
|
|
110
|
+
project Cache hit ไม่ข้ามการตรวจ ACL และ source hash ทุก dependency
|
|
111
|
+
|
|
112
|
+
Evidence ID, source URI, hash และ signed cursor ไม่ใช่ capability และผูกกับ principal,
|
|
113
|
+
request workspace, query/index version และ expiry ตามชนิด Source เปลี่ยนจะ mark stale
|
|
114
|
+
และ invalidate derived cache ข้อมูลจาก source, docs, repository instruction, tool
|
|
115
|
+
output หรือ index เป็น `untrusted_content` เสมอ ไม่สามารถ grant scope/ACL/trust,
|
|
116
|
+
approve action, ปิด sandbox หรือข้าม path/secret guard ได้ Diagnostics ไม่คืน query,
|
|
117
|
+
path, content, token หรือ private owner state
|
|
118
|
+
|
|
119
|
+
## Memory and reviewed learning
|
|
120
|
+
|
|
121
|
+
Memory proposal ต้องอ้าง current Context evidence ของ principal เดียวกันและเก็บเฉพาะ
|
|
122
|
+
non-secret summary/provenance ไม่มี MCP tool สำหรับ approve, reject, prune หรือ learning
|
|
123
|
+
review Owner control ใช้ private authenticated IPC และ exact digest; ก่อนอนุมัติจะตรวจ
|
|
124
|
+
source hash, conflicts และ target project readiness ซ้ำ
|
|
125
|
+
|
|
126
|
+
Approved memory มี `authority: evidence_only` และ `trust: untrusted_content` เสมอ
|
|
127
|
+
Memory ID/digest/cursor ไม่ใช่ capability การค้นข้าม project ต้องผ่าน live installation
|
|
128
|
+
identity + target ACL และ explicit owner visibility ทุกครั้ง Source เปลี่ยนหรือ retention
|
|
129
|
+
หมดจะถูก mark stale Learning approval ไม่ติดตั้ง ไม่ execute และไม่ grant scope, ACL,
|
|
130
|
+
trust, approval, sandbox exception หรือ executable policy
|
|
131
|
+
|
|
132
|
+
## Runtime Intelligence
|
|
133
|
+
|
|
134
|
+
Runtime session, task และ evidence ผูก digest ของ `grantId + clientId`, active
|
|
135
|
+
workspace และ expiry Opaque IDs ไม่ใช่สิทธิ์ ทุก operation ตรวจ live grant/client/ACL
|
|
136
|
+
และ target scope ใหม่ งาน process/test/container ใช้ `JobManager` เดิมด้วย explicit
|
|
137
|
+
program+argv, execution approval, caller idempotency, environment allowlist, timeout
|
|
138
|
+
และ command sandbox ที่เจ้าของตั้งไว้ Runtime ไม่มี generic shell หรือ owner control
|
|
139
|
+
|
|
140
|
+
Runtime tables เก็บเฉพาะ status/exit/timestamps, byte counts, aggregate test counts และ
|
|
141
|
+
SHA-256 ไม่เก็บ raw stdout/stderr, DOM/console text, cookies, authorization headers,
|
|
142
|
+
input values หรือ environment secrets Browser evidence ใช้ owned browser session เดิม;
|
|
143
|
+
collector เปิด browser/web/desktop/microphone/system audio ไม่ได้ Snapshot เก็บ metadata
|
|
144
|
+
manifest และ rollback candidate IDs เท่านั้น การ rollback ยังต้องผ่าน
|
|
145
|
+
`rollback_changes` พร้อม journal/hash conflict checks
|
|
146
|
+
|
|
147
|
+
Source เปลี่ยนหรือ recheck ไม่ได้จะ mark evidence เดิม stale โดยไม่เขียนทับ hash
|
|
148
|
+
Context Engine อ่านเฉพาะ current caller/workspace evidence และถือเป็น untrusted data
|
|
149
|
+
Runtime diagnosis ไม่มี side effect และไม่สามารถ grant scope/trust/approval
|
|
150
|
+
|
|
151
|
+
## Advanced Agent Runtime
|
|
152
|
+
|
|
153
|
+
Agent run, plan, hypothesis, intent, snapshot, judgement และ skill ID ไม่ใช่ capability
|
|
154
|
+
ทุก request ตรวจ principal, live grant/client/workspace ACL, target scope และ active
|
|
155
|
+
workspace epoch ใหม่ Run capabilities ลดสิทธิ์เท่านั้น: project ต้องอ่านได้อยู่แล้ว,
|
|
156
|
+
writable path ผ่าน WorkspaceFS policy, executable ผ่าน allowlist/resolver และ optional
|
|
157
|
+
network/browser/desktop/media/workflow ปิดเป็นค่าเริ่มต้น `secretAccess` เป็น false เสมอ
|
|
158
|
+
|
|
159
|
+
Managed dispatcher เรียก target definition ผ่าน invocation pipeline เดิม Target-bound
|
|
160
|
+
trust approval, strict schema, expected hash, path/secret/symlink/hardlink guards,
|
|
161
|
+
command sandbox, idempotency และ audit จึงยังมีผล Coordinator ไม่มี owner control,
|
|
162
|
+
ไม่มี unrestricted shell, ไม่ approve action และ pause/cancel run ไม่ kill jobs
|
|
163
|
+
|
|
164
|
+
Intent เป็น coordination lock ไม่ใช่ filesystem permission Snapshot ไม่เก็บ contents
|
|
165
|
+
และ rollback ได้เฉพาะ caller-owned changeset หลัง exact snapshot ผ่าน journal/conflict
|
|
166
|
+
checks เดิม Judgement/completion ต้องอ้าง current Runtime evidence ของ caller Skill
|
|
167
|
+
proposal ถูกซ่อนจน private owner review exact digest; approved skill เป็น versioned
|
|
168
|
+
`untrusted_guidance`, ไม่ execute และไม่ grant authority
|
|
169
|
+
|
|
170
|
+
## Commands and jobs
|
|
171
|
+
|
|
172
|
+
child environment เป็น allowlist ไม่ inherit OAuth state, private config tokens, signing keys หรือทั้ง parent environment โดยอัตโนมัติ command sandbox ใช้ตาม owner config และระบบรายงาน unsupported เมื่อ platform ไม่มี adapter
|
|
173
|
+
|
|
174
|
+
trusted command ใช้สิทธิ์ OS ของผู้ใช้จริงและอาจเข้าถึงสิ่งที่ user เข้าถึงได้ ควรใช้กับ workspace ที่เชื่อถือได้เท่านั้น
|
|
175
|
+
|
|
176
|
+
## Logging and packaging
|
|
177
|
+
|
|
178
|
+
ห้าม log access token, refresh token, client secret, OAuth code, private config token หรือ secret file content audit เก็บเฉพาะ metadata ที่ scrubbed
|
|
179
|
+
|
|
180
|
+
package tarball ต้องไม่มี state DB, private keys, credentials, models, media fixtures หรือ temporary release files
|
|
181
|
+
|
|
182
|
+
## Evaluation boundary
|
|
183
|
+
|
|
184
|
+
DodoBench ใช้ OAuth, workspace ACL, scope, epoch, trust, approval และ path/secret guards
|
|
185
|
+
ชุดเดียวกับ runtime จริง ไม่มี benchmark bypass หรือ privileged principal ผลและ release
|
|
186
|
+
evidence ไม่มี token, OAuth code, client secret, private config capability, source content
|
|
187
|
+
หรือ state database และถูก ignore จาก Git/npm Release gate บล็อก high/critical
|
|
188
|
+
production dependency findings แต่ไม่ publish package หรือเปลี่ยน owner configuration
|
|
189
|
+
|
|
190
|
+
### Optional Sub-agent MCP exposure
|
|
191
|
+
|
|
192
|
+
`exposeSubagentsToMcp` ปิดเป็นค่าเริ่มต้นและควบคุมเฉพาะ tool catalog ของ MCP เมื่อปิด
|
|
193
|
+
Full จะไม่ register สี่ Sub-agent definitions และ Compact/Hybrid จะไม่ใส่ operations
|
|
194
|
+
เหล่านี้ใน gateway enum, server instructions หรือ `dodo_discover` หน้าเว็บ owner-only
|
|
195
|
+
ยังสร้างและจัดการ agent ได้ การเปิดสวิตช์ไม่ grant `dodo:exec`, ไม่เพิ่ม project ACL,
|
|
196
|
+
ไม่เปลี่ยน trust/profile policy และไม่ข้าม approvals, sandbox, path/secret guards หรือ
|
|
197
|
+
workspace context ทุก call ที่เปิดให้เห็นยังผ่าน invocation pipeline เดิมทั้งหมด
|
|
198
|
+
|
|
199
|
+
## Cloudflare Tunnel
|
|
200
|
+
|
|
201
|
+
เจ้าของเป็นผู้สร้าง remotely-managed Tunnel, hostname และ DNS DODO ไม่ใช้ Cloudflare API เมื่อรัน `dodo start` ใน terminal ระบบถาม Tunnel token แบบซ่อนและ supervise เฉพาะ live `cloudflared` child ของ process นั้น หรือเจ้าของเริ่ม/หยุดรอบเดียวกันจาก Local Config ที่ผ่าน owner authentication
|
|
202
|
+
|
|
203
|
+
เส้นทางหลักใช้ token แบบ run-scoped เท่านั้น: token อยู่ในหน่วยความจำของ DODO และ environment ของ child `cloudflared` ระหว่างรอบ ไม่ถูกบันทึกใน config, Keychain, Credential Manager, Secret Service, CLI argv, child arguments, logs, MCP catalog/response, audit หรือ setup receipt ค่า `TUNNEL_TOKEN` และ `TUNNEL_TOKEN_FILE` ถูกปฏิเสธจาก environment ของ MCP jobs เสมอ Local Config รับ token ผ่าน private loopback capability, ล้าง request field หลังส่ง และตอบกลับเพียง `tokenStored:false`
|
|
204
|
+
|
|
205
|
+
Local Config รับ token เฉพาะ POST ที่ผ่าน private capability, Host/Origin/proxy checks,
|
|
206
|
+
rate limit และ control-context headers แล้วส่งให้ process-owned runtime โดยตรง
|
|
207
|
+
Response/config/audit เก็บเฉพาะสถานะที่ไม่มี secret ไม่มี MCP tool สำหรับส่ง token หรือ
|
|
208
|
+
ควบคุม tunnel หน้าเว็บเริ่ม network process เฉพาะเมื่อ owner กด “เปิด Tunnel รอบนี้”
|
|
209
|
+
และการตั้ง startup preference ไม่เริ่ม network process
|
|
210
|
+
|
|
211
|
+
Tunnel route ต้องชี้ทุก public path ไป MCP/OAuth listener `127.0.0.1:21730` เท่านั้น Local Config `21731`, metrics `21732` และ private IPC ไม่ถูก expose readiness บอกสถานะ Cloudflare connection เท่านั้น ไม่ใช่หลักฐานว่า AI client กำลังเชื่อมต่อ
|
|
212
|
+
|
|
213
|
+
## Setup and existing-state import
|
|
214
|
+
|
|
215
|
+
`dodo setup --check` และ `dodo setup --plan` เป็น read-only การติดตั้ง dependency ที่ยังขาดต้องมี `--yes` จาก local owner ก่อนเริ่ม installer โดย flag นี้ไม่ข้าม OS elevation, Desktop consent หรือ policy อื่น
|
|
216
|
+
|
|
217
|
+
`dodo setup --import-state` นำเข้าได้เฉพาะ preference allowlist จาก private `config.json`: config version, MCP/config ports, bounded limits, search backend, log retention และ tool surface เท่านั้น ระบบไม่ copy database, OAuth signing keys, cookies, clients, grants, authorization codes, tokens, workspace ACL, trust, approvals, schedules, public URL/Host/Origin allowlists, web/desktop permissions, LSP commands, environment allowlist หรือ sandbox writable paths
|
|
218
|
+
|
|
219
|
+
ก่อน commit ระบบตรวจ file type, ownership/ACL, link count, symlink, runtime markers, size และ SHA-256 ซ้ำ หาก source เปลี่ยน, schema ไม่ตรง, มี unknown field หรือมี DODO process ใช้งาน state นั้นอยู่ การนำเข้าจะ fail closed และรักษา source/target เดิมไว้
|
|
220
|
+
|
|
221
|
+
## AI providers และ target projects
|
|
222
|
+
|
|
223
|
+
Owner-registered `targetProjectId` เลือก runtime ก่อนคำนวณ scope/ACL; token ของ default
|
|
224
|
+
project ไม่เป็น authority ของ target Legacy root-bound grant ยังข้ามไม่ได้ ทุก model
|
|
225
|
+
operation ผ่าน wrapper เดิมพร้อม live checks หลังรอ queue Profile ทำได้เพียงลดสิทธิ์
|
|
226
|
+
และ child run ถูกจำกัดให้ project เดียว ไม่ spawn ต่อหรือเข้าถึง owner controls
|
|
227
|
+
Approved workflow, memory, skill, model output และ repository content ไม่เป็น permission
|
|
228
|
+
|
|
229
|
+
Provider access เป็น egress permission แยกจาก `allowWebFetch` และแยกต่อ project/profile/
|
|
230
|
+
client ในโหมด managed ส่วนโหมดส่วนตัวถือว่าการเลือก remote profile เพื่อเริ่ม run เป็น
|
|
231
|
+
owner consent สำหรับส่ง bounded context ของ project นั้น ไม่ส่งทั้ง repo/ภาพ/binary อัตโนมัติ
|
|
232
|
+
Loopback Ollama ไม่ใช่หลักฐาน local inference ต้องตรวจ metadata ของ model ก่อนใช้
|
|
233
|
+
ใน project ที่ไม่อนุญาต source egress; endpoint ของเจ้าของยังเป็น trust boundary
|
|
234
|
+
|
|
235
|
+
Keys ใช้ session memory หรือ macOS Keychain ผ่าน stdin (ไม่ใส่ argv) State เก็บ ref
|
|
236
|
+
เท่านั้น UI ไม่อ่าน key กลับและไม่เก็บใน browser storage Endpoint เปลี่ยนต้องป้อน key
|
|
237
|
+
ใหม่และ connection ที่ใช้งานถูกล็อกไม่ให้แก้กลาง run Public endpoint ต้อง HTTPS
|
|
238
|
+
Private/LAN ต้อง opt-in; DNS ตรวจทุก address แล้ว pin, metadata/admin endpoint ถูกปฏิเสธ
|
|
239
|
+
และ credentials ไม่ตาม redirect Known key echoes ถูกปฏิเสธก่อนบันทึก result/continuation
|
|
240
|
+
|
|
241
|
+
Run history/continuation อยู่ใน private state แยก workspace/caller ไม่ export reasoning
|
|
242
|
+
ให้ UI ไม่มี raw access/refresh token ใน delegation ก่อนแต่ละ model/tool action ตรวจ
|
|
243
|
+
lease/grant/ACL/profile ใหม่; revoke หยุดขั้นถัดไปและ resume ไม่เปลี่ยน caller เป็น owner
|
|
244
|
+
Unknown outcomes ไม่ auto-retry Queue ไม่แทน expected hash หรือ OS sandbox; shell job
|
|
245
|
+
รันด้วยสิทธิ์ OS-user ภายใต้ sandbox/trust ที่เจ้าของตั้งเดิม
|
|
246
|
+
|
|
247
|
+
Local Config ยังคง loopback, token expiry, Host/Origin/proxy-header/rate checks และ CSP
|
|
248
|
+
Admin API ไม่อยู่บน public MCP Events ใช้ authenticated fetch/cursor ไม่ใส่ token ใน URL
|
|
249
|
+
ใช้ textContent แสดง path/model/error และไม่ render HTML จากโมเดล Tunnel credential
|
|
250
|
+
ยัง run-scoped ตามเดิม การเริ่ม DODO/Keychain/macOS permissions ต้องผ่านเจ้าของ
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# DODO MCP — Test Report
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
รายงานนี้ใช้กับ DODO MCP 1.0.0 source และแยกผล automated กับ manual อย่างชัดเจน
|
|
6
|
+
|
|
7
|
+
## Optional Sub-agent MCP exposure — 2026-09-14
|
|
8
|
+
|
|
9
|
+
เพิ่ม owner-only switch ที่ Local Config → Settings ค่าเริ่มต้นปิด โดยหน้าเว็บ Chat &
|
|
10
|
+
Tasks ยังใช้ agent ได้ Full live catalog เปลี่ยนจาก complete 125 เป็น 121 ขณะที่
|
|
11
|
+
Compact/Hybrid คง 19/49 tool names แต่กรอง operation enum, discover, overview note และ
|
|
12
|
+
server instructions ให้ตรงกับ runtime ผลเปิดสวิตช์ต้อง restart/rescan และไม่ได้เพิ่ม
|
|
13
|
+
OAuth scope, ACL, trust, profile authority, approval หรือข้าม guards ใด ๆ
|
|
14
|
+
|
|
15
|
+
- `npm run build`, typecheck, lint — **AUTOMATED_PASS**
|
|
16
|
+
- catalog/default/config/auth tests — **AUTOMATED_PASS**: default false, Full 121,
|
|
17
|
+
opt-in Full 125, Compact/Hybrid 19/49, hidden operation `NOT_FOUND`, stale/unauthorized
|
|
18
|
+
Local Config writes ถูกปฏิเสธ
|
|
19
|
+
- Chromium UI-04 — **AUTOMATED_PASS**: switch, SweetAlert confirmation, persisted config,
|
|
20
|
+
restart notice และ Chat & Tasks ยังเข้าถึงได้; console/CSP errors = 0
|
|
21
|
+
- `npm run test:all` — **AUTOMATED_PASS**: 649 passed / 31 skipped / 0 failed ใน
|
|
22
|
+
94 files ผ่าน, 2 files ข้ามตาม platform และ packaging 16/16
|
|
23
|
+
- exact tarball smoke — **AUTOMATED_PASS**: fixture เปิด option โดยชัดแจ้ง, STDIO 125,
|
|
24
|
+
HTTP Compact 19, OAuth, write/edit/read-back, target routing และ Sub-agent receipt ผ่าน
|
|
25
|
+
- `npm audit --omit=dev` — **AUTOMATED_PASS**: 0 vulnerabilities
|
|
26
|
+
- owner server restart + external ChatGPT rescan — **MANUAL_NOT_RUN**
|
|
27
|
+
|
|
28
|
+
## Local Config UI redesign — 2026-09-14 (macOS, Node 22.23.2)
|
|
29
|
+
|
|
30
|
+
ปรับ Information Architecture เป็น dashboard 8 หน้า, เพิ่มระบบ tooltip ที่เข้าถึงได้, vendor SweetAlert2 11.26.25 (same-origin, CSP `'self'` เดิม ไม่มี `unsafe-inline`/`unsafe-eval`), provider action lifecycle, personal-mode UX และ hardened `/assets` route (normalize + extension allowlist + traversal fail-closed) ผลรันจริง:
|
|
31
|
+
|
|
32
|
+
- `npm run build` / `npm run typecheck` / `npm run lint` — **AUTOMATED_PASS** (exit 0)
|
|
33
|
+
- `npx vitest run tests/security/localConfig.test.ts` — **AUTOMATED_PASS** 9/9 (รวม CSP ไม่มี CDN, asset traversal/encoded/NUL/deep-path → 404, ไฟล์ first-party ไม่มี `innerHTML`, vendored assets เสิร์ฟจาก same origin)
|
|
34
|
+
- `npx vitest run tests/integration/aiWorkbench.test.ts` — **AUTOMATED_PASS** 1/1 ใน Chromium จริง (nav ใหม่, SweetAlert confirm ก่อน probe, ผลทดสอบมี connection/model/เวลา, XSS ใน model output ไม่ทำงาน, ไม่มี secret ใน storage, 390px ไม่มี horizontal scroll, dark/light, keyboard focus, `pageerror` = 0)
|
|
35
|
+
- `npx vitest run tests/integration/configUiComponents.test.ts` (UI-01..04) — **AUTOMATED_PASS** 4/4 ใน Chromium จริง: tooltip, SweetAlert, double-submit, text-only hostile names, personal/managed controls, theme/reduced motion, 320px และ Sub-agent MCP switch พร้อม restart notice/Chat & Tasks continuity; console error/CSP violation = 0
|
|
36
|
+
- `npm run test:pack` — **AUTOMATED_PASS** 16/16 (PACK-07 ตรวจ ui/ + vendor/ อยู่ใน tarball, ไม่มี URL ภายนอกใน index.html, vendored SweetAlert2 ตรง byte กับ devDependency ที่ pin)
|
|
37
|
+
- `npm run test:all` — **AUTOMATED_PASS**: 649 passed / 31 skipped (Windows-only บน macOS) / 0 failed ใน 94 ไฟล์ + packaging 16/16
|
|
38
|
+
- Screenshot จาก Chromium fixture: `release-evidence/ai-workbench/{providers-desktop,task-desktop,task-mobile,history-mobile-light,overview-320}.png`
|
|
39
|
+
- **MANUAL_NOT_RUN**: การแตะ tooltip บนอุปกรณ์ touch จริง (ทดสอบผ่าน Chromium click-as-tap แล้วเท่านั้น), screen reader จริง (VoiceOver/NVDA), และการใช้งานบนเบราว์เซอร์อื่นนอกจาก Chromium
|
|
40
|
+
|
|
41
|
+
### Visual pass (theme tokens)
|
|
42
|
+
|
|
43
|
+
ใช้พื้น charcoal/slate แบบเรียบใน dark mode และ warm neutral ใน light mode แยกชั้นด้วย surface, border และ spacing พร้อม accent ม่วงเฉพาะ control/สถานะสำคัญ ไม่มี gradient, ambient glow หรือ asset ตกแต่งจากภายนอก ส่วน sticky navigation ใช้ `backdrop-filter` เฉพาะเมื่อ browser รองรับ ตรวจด้วย Chromium fixture ว่า dark/light สลับค่าจริง และ `PACK-07` ล็อกข้อกำหนดว่า first-party CSS ต้องไม่มี `linear-gradient`, `radial-gradient` หรือ `conic-gradient` เทสต์ทั้งหมดข้างต้นรันซ้ำผ่านหลังปรับสี (AUTOMATED_PASS ทั้งชุด)
|
|
44
|
+
|
|
45
|
+
### Layout tidy pass (spacing/grid system)
|
|
46
|
+
|
|
47
|
+
จัดระเบียบตามหลัก 2026 (8px spacing scale, law of proximity, one shared shell width): เพิ่ม token ระยะ `--s1..--s8` + `--shell`/`--card-pad`, ลบการซ้อน card-in-card (`#workbench` เป็น layout container ไม่ใช่ card แล้ว, `.wb-section` ใช้ chrome เดียวกับ `.card` ทุกหน้า), รวมทุกหน้าให้กว้างเท่ากันและจัดกึ่งกลาง, form field กริด 2 คอลัมน์ระยะสม่ำเสมอ, ปุ่ม action เป็นแถวระยะเท่ากันแทน margin เฉพาะจุด, ยุบ `#wb-notice` ที่ว่างและทำเป็นกล่องเมื่อมีข้อความ ผลรัน gate เต็มล่าสุดหลังจัด layout และเพิ่ม Sub-agent exposure switch: **649 passed / 31 skipped / 0 failed + packaging 16/16** (รวม assertion viewport 320/390 ไม่มี horizontal scroll, personal-mode visibility, dark/light) — AUTOMATED_PASS
|
|
48
|
+
|
|
49
|
+
## AI Providers / Multi-project — current source verification
|
|
50
|
+
|
|
51
|
+
วันที่ 2026-09-14 บน macOS, Node 22.23.2; source v1.0.0 ที่ยังไม่ publish
|
|
52
|
+
|
|
53
|
+
| Gate | ผล |
|
|
54
|
+
|---|---|
|
|
55
|
+
| Build, typecheck, lint | AUTOMATED_PASS |
|
|
56
|
+
| Unit/integration/security/compatibility | AUTOMATED_PASS — 94 files, 649 tests; skipped 2 files / 31 tests ตาม platform/prerequisite |
|
|
57
|
+
| Packaging suite | AUTOMATED_PASS — 16 tests |
|
|
58
|
+
| Production npm audit | AUTOMATED_PASS — 0 vulnerabilities |
|
|
59
|
+
| Chromium owner UI | AUTOMATED_PASS — 1440px/390px, dark/light, keyboard, safe model text, explicit resource image attachment, create file in B and history reconnect without replay |
|
|
60
|
+
| macOS Keychain | AUTOMATED_PASS — synthetic set/get/delete round-trip; fixture item deleted |
|
|
61
|
+
| Exact tarball fresh install | AUTOMATED_PASS — explicit Sub-agent opt-in: Full 125, Compact HTTP 19 + OAuth, write/edit/read-back, target B, provider fixture agent write + receipt; cleanup passed |
|
|
62
|
+
| Linux Docker | NOT_RUN — runner command stops at docker info; local Engine socket unavailable |
|
|
63
|
+
| Live OpenAI, Gemini, Claude, MiniMax, GLM, Kimi, Ollama | MANUAL_NOT_RUN — no live credentials/model inference used |
|
|
64
|
+
| Native Windows for this feature | MANUAL_NOT_RUN — outside this task |
|
|
65
|
+
|
|
66
|
+
Protocol fixtures exercise all seven presets / five adapters, fragmented streams, tool
|
|
67
|
+
call IDs and continuation/signatures, 429, abort/interruption, credential-echo rejection,
|
|
68
|
+
DNS/private/metadata policy and redirect refusal. These results do not establish live
|
|
69
|
+
model compatibility or provider billing behavior.
|
|
70
|
+
|
|
71
|
+
Personal-mode regressions prove an owner-approved OAuth token can list/read/write an
|
|
72
|
+
owner-registered Project B with no duplicate workspace ACL, while read-only scope still
|
|
73
|
+
cannot write. Enabled remote profiles are discoverable without a ProjectAI allowlist;
|
|
74
|
+
managed mode remains explicit and retains existing ACL/trust/egress tests. Persistent
|
|
75
|
+
Desktop consent is reused across workspace epochs/projects, temporary consent remains
|
|
76
|
+
workspace-bound, snapshots remain stale across epochs, and installation disable revokes it.
|
|
77
|
+
|
|
78
|
+
Real HTTP + OAuth fixtures prove parallel A/B jobs and writes, no-default-ACL project
|
|
79
|
+
selection, target scope/context rejection, secret/hash guards and isolated changesets.
|
|
80
|
+
Agent fixtures verify write/read/edit/exec/read, actual stdout receipts, inspect approvals,
|
|
81
|
+
queued revocation/conflict, owned-job cancellation, no recursive spawn, idempotency,
|
|
82
|
+
explicit process-crash recovery and uncertain-outcome refusal. Runtime teardown tests
|
|
83
|
+
prove new requests cannot acquire a closing target while the default remains usable.
|
|
84
|
+
|
|
85
|
+
Private non-secret evidence is retained under release-evidence/ai-workbench (ignored and
|
|
86
|
+
not packaged): gate log, audit, artifact manifest/checksum, fresh-install report and five
|
|
87
|
+
actual UI screenshots. The npm manifest includes all 11 UI assets, AI runtime modules,
|
|
88
|
+
Full/Compact/Hybrid schemas and the AI provider guide; development docs, conversations,
|
|
89
|
+
state databases, media/model files and credentials are absent.
|
|
90
|
+
|
|
91
|
+
No live provider or external ChatGPT acceptance is reported as MANUAL_PASS. No publish,
|
|
92
|
+
global reinstall, existing-server restart or tunnel/DNS change is part of this work.
|
|
93
|
+
|
|
94
|
+
## Baseline gates before AI Providers / Multi-project
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npm run build
|
|
99
|
+
npm run typecheck
|
|
100
|
+
npm run lint
|
|
101
|
+
npm run test:all
|
|
102
|
+
npm audit --omit=dev
|
|
103
|
+
npm pack
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
ผล local gate วันที่ 2026-09-14 (macOS, source checkout):
|
|
107
|
+
|
|
108
|
+
- build: PASS — full 121, compact 19, hybrid 49 และ config schemas ถูกสร้างสำเร็จ
|
|
109
|
+
- typecheck: PASS
|
|
110
|
+
- lint: PASS
|
|
111
|
+
- core/integration/security/compatibility: 84 files PASS, 2 files platform-skipped; 605 tests PASS, 31 tests platform/prerequisite-skipped
|
|
112
|
+
- packaging: 16 tests PASS
|
|
113
|
+
- `npm audit --omit=dev`: 0 vulnerabilities (0 low/moderate/high/critical)
|
|
114
|
+
- `npm pack`: PASS — required runtime/schemas/docs present and forbidden private state/development artifacts absent; exact final artifact metadata is reported separately so the packaged report does not contain a self-referential checksum
|
|
115
|
+
- fresh exact-tarball install: PASS — `dodo --version` = `1.0.0`, Full = 121,
|
|
116
|
+
Compact = 19 และ installed Compact `dodo_assist_read → memory_status`,
|
|
117
|
+
`dodo_assist_change → runtime_session_open` และ `agent_run_open` คืน schemaVersion 1
|
|
118
|
+
จาก fresh state สำเร็จ โดย agent run มี `authority=coordination_only`
|
|
119
|
+
|
|
120
|
+
macOS owner-flow verification เพิ่มเติมหลังเปลี่ยน Tunnel lifecycle:
|
|
121
|
+
|
|
122
|
+
- headless Chromium แสดง Local Config จริงที่ 1440px และ 390px; temporary token
|
|
123
|
+
เป็น masked input, ไม่มี external asset และ state มาจาก runtime
|
|
124
|
+
- pseudo-terminal fixture เรียก CLI จริงและพิสูจน์ hidden prompt → child environment,
|
|
125
|
+
token ไม่อยู่ใน terminal output/argv/config และ `SIGINT` ปิด owned child พร้อม DODO
|
|
126
|
+
- exact tarball fresh install และ global reinstall รายงาน `dodo 1.0.0`; package 408 files
|
|
127
|
+
ไม่มี development docs, state DB, `.env`, model หรือ release evidence
|
|
128
|
+
- `dodo setup --check --components all` บน macOS arm64: Git, ripgrep,
|
|
129
|
+
cloudflared, ffmpeg, Whisper/model, Chromium, LSP, speech และ sandbox พร้อม;
|
|
130
|
+
Desktop permission และ outbound web consent ยังไม่เปิดตาม security default
|
|
131
|
+
|
|
132
|
+
ชุดทดสอบครอบคลุม transport, OAuth, Local Config, workspace switching, ACL, stale context, path/secret guards, changes, jobs, Git, semantic tools, assistance, multimodal, browser, workflow, surface catalog และ packaging
|
|
133
|
+
|
|
134
|
+
Native candidate regression เพิ่ม lossless NTFS file IDs ผ่าน JSON/SQLite และ
|
|
135
|
+
replaced-root checks, LSP drive/URI normalization, portable mid-write rollback,
|
|
136
|
+
Windows private-fixture ACL และ writable CAS flush handle ผล local ข้างต้นไม่ใช้
|
|
137
|
+
แทนผล native Windows CI; ต้องตรวจ Node 22/24 บน runner `windows-ci 02` แยกกัน
|
|
138
|
+
|
|
139
|
+
IPC shutdown regression จำลอง endpoint ที่หายไประหว่างตรวจ identity และยืนยันว่า
|
|
140
|
+
descriptor ปลอมหรือ ACL ที่เปิดกว้างซึ่งยังอยู่ยังถูกปฏิเสธ Packaging ล้างเฉพาะ
|
|
141
|
+
temporary directory ของ suite หลังจบ รวมถึงกรณี test fail เพื่อไม่สะสม native
|
|
142
|
+
dependencies และ private fixture state บนเครื่องที่รันทดสอบซ้ำ
|
|
143
|
+
|
|
144
|
+
Fresh-install smoke รัน installed package ใน process ลูก และให้ parent ลบ fixture
|
|
145
|
+
หลังลูก exit เพื่อให้ Windows ปลด native DLL ก่อน cleanup รายงาน `PASS` ถูกเขียน
|
|
146
|
+
หลัง verification และ cleanup สำเร็จทั้งคู่เท่านั้น
|
|
147
|
+
|
|
148
|
+
Setup foundation tests เพิ่มหลักฐานว่า setup plan/check ไม่เขียน state, installer ไม่เริ่มหากไม่มี `--yes`, setup receipt มี schema/kind ที่กำหนด, state import ใช้ allowlist, ตรวจ source hash ซ้ำ, ไม่ merge target เดิม และไม่คัดลอก DB/keys/OAuth/ACL/trust/permission state รวมถึง fail closed ต่อ malformed/unknown config, links และ live IPC markers
|
|
149
|
+
|
|
150
|
+
Tunnel tests ใช้ fake `cloudflared` และ loopback readiness fixture พิสูจน์ว่า run-scoped token จาก runtime ไม่อยู่ใน config/argv/log/status, child รับผ่าน dedicated environment, job environment ไม่ inherit tunnel variables, owner IPC เป็น singleton ที่ authenticated, readiness มาจาก `/ready`, restart มีเพดาน และ runtime close หยุดเฉพาะ live owned child ไม่มีการใช้ Cloudflare credential, API, DNS หรือ public network จริง
|
|
151
|
+
|
|
152
|
+
Global launcher และ interactive CLI tests พิสูจน์ว่า `dodo --cli` แสดง/เลือก/เพิ่ม
|
|
153
|
+
โปรเจกต์ได้, setup menu ระบุ cloudflared, launcher ไม่ใช้ invocation CWD หรือเผย
|
|
154
|
+
private inert root, anonymous MCP ยังได้ 401, OAuth installation login และ authenticated
|
|
155
|
+
catalog ใช้ได้ก่อนเลือก target แต่ tool invocation ไม่มี ACL, invalid target ไม่เปิดสิทธิ์
|
|
156
|
+
และ successful switch ใช้ real canonical root พร้อมบันทึก registry
|
|
157
|
+
preference Local Config Tunnel fixture พิสูจน์ซ้ำว่า unauthenticated request ถูกปฏิเสธ,
|
|
158
|
+
config endpoint ปฏิเสธ raw token, session endpoint ตอบ `tokenStored:false`, raw token
|
|
159
|
+
ไม่อยู่ใน response/config/audit และ owner เริ่ม/หยุด process-owned runtime ได้
|
|
160
|
+
|
|
161
|
+
Project Registry tests ครอบคลุม schema migration, Unicode/spaced canonical paths,
|
|
162
|
+
duplicate และ concurrent add, stable project ID, directory relocation, missing/
|
|
163
|
+
symlink/replaced readiness, corrupt metadata recovery, transactional audit, reviewed
|
|
164
|
+
soft removal, Local Config authentication/XSS boundary, ACL/trust isolation, runtime
|
|
165
|
+
workspace switch, Linux inode reuse, fail-closed v1 birth-time migration และ fresh
|
|
166
|
+
tarball CLI
|
|
167
|
+
|
|
168
|
+
Multi-project federation tests ใช้ HTTP + OAuth fixture จริงกับ Project A/B และ
|
|
169
|
+
พิสูจน์ concurrent overview/read/search โดย active root/epoch ไม่เปลี่ยน, target
|
|
170
|
+
identity/source hash, target-scoped audit, bounded partial failure, installation
|
|
171
|
+
identity + per-project ACL, live ACL revocation, stale active epoch, legacy grant
|
|
172
|
+
refusal, secret/traversal/replaced-root guards และ strict rejection เมื่อพยายามส่ง
|
|
173
|
+
`projectId` เข้า write operation Universal Resource, Project Brain และ Context Engine
|
|
174
|
+
operations และ Advanced Agent Runtime ทำให้ complete catalog เป็น 125; live default
|
|
175
|
+
เป็น Full 121 / Compact 19 / Hybrid 49 เพราะซ่อน Sub-agent operations จนกว่า owner จะเปิด
|
|
176
|
+
|
|
177
|
+
Universal Resource tests ใช้ HTTP + OAuth และ Compact gateway จริง ครอบคลุม text,
|
|
178
|
+
binary range/resume, image/audio MCP blocks, raster transform, PDF/ZIP metadata,
|
|
179
|
+
content hash dedup, concurrent ingest, restart persistence, expired-reference GC,
|
|
180
|
+
old crash-object recovery, disk/reference quotas, expected hash/MIME, corrupt
|
|
181
|
+
decoder input/CAS bytes, anonymous/read-only/revoked ACL, principal ownership,
|
|
182
|
+
stale epoch, private config state, secret/traversal/symlink/hardlink และ target-specific
|
|
183
|
+
inspect approval รวมถึง SQLite aggregate-quota trigger และ orphan grace ที่กัน GC
|
|
184
|
+
ชนกับการสร้าง reference
|
|
185
|
+
|
|
186
|
+
Project Brain tests ใช้ HTTP + OAuth, Full และ Compact gateway จริง ครอบคลุม bundled
|
|
187
|
+
TypeScript AST parser, symbols/references/imports/routes/tests/dependencies, incremental
|
|
188
|
+
one-file parse, affected relations, exact-content move ที่รักษา `symbol://` identity,
|
|
189
|
+
syntax error, deleted/generated/secret/private files, pagination, cancel/concurrent run,
|
|
190
|
+
restart/corruption recovery, source-hash freshness, anonymous/read-only/revoked ACL,
|
|
191
|
+
workspace epoch, traversal/symlink/hardlink, principal-bound cursor และ target-specific
|
|
192
|
+
inspect approval โดยไม่ execute source หรือ repository plugin
|
|
193
|
+
|
|
194
|
+
Context Engine tests ใช้ HTTP + OAuth, direct Full และ Compact gateway จริง ครอบคลุม
|
|
195
|
+
goal/Thai+identifier terms, deterministic ranking/evidence IDs, byte budget, cursor,
|
|
196
|
+
L0–L6 cache hit/metrics, source-hash freshness transition, evidence recheck, active และ
|
|
197
|
+
federated A/B retrieval by ID/name, unavailable target partial result, anonymous/live
|
|
198
|
+
ACL/revocation, principal/workspace/cursor binding, secret/private-state/symlink guards,
|
|
199
|
+
repository instruction เป็น untrusted content, canonical signed cursor, cache corruption
|
|
200
|
+
recovery, Memory dependency freshness และ Runtime dependency freshness Fixture
|
|
201
|
+
baseline มี precision=1 และ recall=1 สำหรับ source/test/docs ที่กำหนด พร้อม term
|
|
202
|
+
coverage=1 และ latency ต่ำกว่า 5 วินาทีใน isolated local fixture (ไม่ใช่ production SLA)
|
|
203
|
+
|
|
204
|
+
Memory tests ใช้ HTTP + OAuth, Full/Compact assistance gateways และ authenticated
|
|
205
|
+
private owner IPC จริง ครอบคลุม evidence-bound proposal, exact digest approval,
|
|
206
|
+
CURRENT/STALE retrieval, Context `MEMORY` evidence, source change ก่อน/หลัง approval,
|
|
207
|
+
cross-client evidence isolation, live per-project ACL, explicit cross-project visibility,
|
|
208
|
+
duplicate/conflict review, credential-shaped text, repository prompt injection,
|
|
209
|
+
principal/workspace-bound canonical cursor, retention/prune ที่ไม่ลบ current record หรือ
|
|
210
|
+
project file, learning proposal จาก current reviewed memory, non-executable owner review
|
|
211
|
+
และ scrubbed owner audit
|
|
212
|
+
|
|
213
|
+
Runtime Intelligence tests ใช้ HTTP + OAuth และ Compact gateways จริง ครอบคลุม
|
|
214
|
+
durable session, nonblocking task start, completed-task reconnect หลัง server restart,
|
|
215
|
+
idempotent retry ที่ไม่สร้าง job ซ้ำ, cancel, wall timeout, close refusal ขณะ running,
|
|
216
|
+
process/test aggregate evidence, raw-output non-retention, guarded test-report counts,
|
|
217
|
+
snapshot staleness, Context `OBSERVATION`, deterministic diagnosis, anonymous/read-only/
|
|
218
|
+
revoked ACL, principal isolation, stale epoch, secret/traversal report path และ quota
|
|
219
|
+
Headless Chromium fixture พิสูจน์ existing-session-only collection, MCP image passthrough
|
|
220
|
+
persisted hashes/counts/bounded navigation timing, WebSocket-blocked policy และการ mark
|
|
221
|
+
หลักฐานเดิมเป็น stale หลังหน้าเปลี่ยน โดยไม่มี DOM/console/password/header text
|
|
222
|
+
|
|
223
|
+
Advanced Agent Runtime tests ใช้ HTTP + OAuth และ Compact gateways จริง ครอบคลุม
|
|
224
|
+
immutable plan revision, bounded hypotheses, overlapping intent refusal, managed
|
|
225
|
+
write/exec/read, metadata snapshot compare + original-journal rollback, current Runtime
|
|
226
|
+
evidence judgement, exact completion criteria, durable restart recovery และ private
|
|
227
|
+
owner skill review Security fixtures ครอบคลุม anonymous/read-only, principal isolation,
|
|
228
|
+
live ACL revoke, stale epoch, path capability + intent, secret/traversal/nested context,
|
|
229
|
+
program allowlist, target-bound inspect approval, hostile skill rejection และยืนยันว่า
|
|
230
|
+
cancel coordinator ไม่ kill owned job
|
|
231
|
+
|
|
232
|
+
Resource และ Project Brain cursor tests ตรวจ canonical Base64URL + HMAC ซ้ำ โดย token
|
|
233
|
+
ที่เปลี่ยนอักขระท้ายต้องได้ `INVALID_INPUT` แม้ decoder จะถอด non-canonical text เป็น
|
|
234
|
+
byte sequence เดียวกันได้
|
|
235
|
+
|
|
236
|
+
Headless Chromium fixture เปิด Local Config จริงที่ ephemeral loopback ports เพิ่ม
|
|
237
|
+
Project B ผ่าน UI, แสดงผลที่ desktop และ 390px, กดเปิดรายการ และตรวจว่า active
|
|
238
|
+
workspace เปลี่ยนเป็น canonical root B สำเร็จ ภาพอยู่ใน local ignored artifacts และ
|
|
239
|
+
ไม่ถูก pack การตรวจบน owner browser/config จริงยังคง `MANUAL_NOT_RUN`
|
|
240
|
+
|
|
241
|
+
## Surface evidence
|
|
242
|
+
|
|
243
|
+
- Complete Full capability schema: 125 tools
|
|
244
|
+
- Full live default: 121 tools; owner opt-in Sub-agent exposure: 125
|
|
245
|
+
- Compact surface: 19 tools
|
|
246
|
+
- Hybrid surface: 49 tools
|
|
247
|
+
- generated schema metric: Full 443,030; Compact 52,317; Hybrid 124,657 bytes
|
|
248
|
+
- Compact schema เป็น catalog แยกและลด schema load ตอนเชื่อมต่อ
|
|
249
|
+
- Full schema อยู่ใน `schemas/tools.json`
|
|
250
|
+
- Compact schema อยู่ใน `schemas/tools.compact.json`
|
|
251
|
+
- Hybrid schema อยู่ใน `schemas/tools.hybrid.json`
|
|
252
|
+
|
|
253
|
+
## DodoBench / release gate
|
|
254
|
+
|
|
255
|
+
DodoBench core v1 ใช้ isolated real HTTP + OAuth fixtures ประเมิน 7 เคสบนเครื่องที่มี
|
|
256
|
+
Chromium: retrieval A/B, safe edit, runtime diagnosis, image resource, restart recovery,
|
|
257
|
+
security boundaries และ browser image block ผลแต่ละรอบบันทึก revision/lock/config/OS,
|
|
258
|
+
tool calls, serialized bytes, p50/p95, precision/recall, wrong-file rate, cache hit และ
|
|
259
|
+
security violations โดย `modelTokens=null` เพราะไม่มี model call
|
|
260
|
+
|
|
261
|
+
Fresh release smoke ติดตั้ง exact tarball ใน temporary prefix เปิด Sub-agent exposure
|
|
262
|
+
แบบ explicit แล้วตรวจ CLI 1.0.0, STDIO Full 125, HTTP Streamable + OAuth Compact 19,
|
|
263
|
+
write/edit read-back และ Sub-agent receipt จริง ค่า default-off ถูกตรวจแยกใน STDIO/HTTP/
|
|
264
|
+
packaging regressions
|
|
265
|
+
Release policy ใช้ macOS local และ Linux Docker โดย report ต้องมี revision/lock digest
|
|
266
|
+
ตรงกันก่อน strict gate จะผ่าน Linux Docker image ติดตั้ง Playwright Chromium
|
|
267
|
+
Dedicated self-hosted GitHub Actions รัน Linux X64 Docker และ Windows X64 native
|
|
268
|
+
candidate บน Node 22/24 โดยไม่รับ untrusted pull requests Windows manual acceptance
|
|
269
|
+
ยังคง `MANUAL_NOT_RUN`
|
|
270
|
+
|
|
271
|
+
## Required security scenarios
|
|
272
|
+
|
|
273
|
+
- anonymous HTTP request ได้ 401
|
|
274
|
+
- read-only scope เรียก write/exec ไม่ได้
|
|
275
|
+
- managed mode: token ที่ไม่มี workspace ACL ถูกปฏิเสธ; personal mode ยังต้องมี owner-registered target และ live scope
|
|
276
|
+
- workspace mismatch และ stale epoch ถูกปฏิเสธ
|
|
277
|
+
- secret, traversal, symlink และ hardlink guard fail closed
|
|
278
|
+
- inspect mode ยังคง target approval
|
|
279
|
+
- expected hash conflict ไม่ overwrite ไฟล์
|
|
280
|
+
- running jobs block workspace switch
|
|
281
|
+
- switch failure ทำให้ workspace เดิมใช้งานต่อได้
|
|
282
|
+
- gateway ไม่เรียก gateway อื่นหรือ owner controls
|
|
283
|
+
- federated target ที่ไม่มี ACL/installation identity ถูกปฏิเสธโดยไม่เผย path
|
|
284
|
+
- federated secret/traversal/replaced root fail closed และ write/exec federation ยังปิด
|
|
285
|
+
- memory proposal ใช้ evidence ID ข้าม client ไม่ได้และ source-changed proposal fail closed
|
|
286
|
+
- AI ไม่มี MCP operation สำหรับ memory approval/prune/learning review; owner action ใช้ private authenticated IPC + digest
|
|
287
|
+
- current memory ไม่ถูก prune และ learning approval ไม่ติดตั้ง/execute หรือ grant authority
|
|
288
|
+
- runtime handle ข้าม principal/workspace ไม่ได้, revoke มีผลทันที และ inspect exec ยังต้อง target-bound approval
|
|
289
|
+
- runtime evidence ไม่เก็บ raw process/browser secret และ changed source ถูก mark stale
|
|
290
|
+
- agent run ไม่เพิ่ม authority, managed target ตรวจ live ACL/epoch/scope/policy ซ้ำ และ path write ต้องมี capability + intent
|
|
291
|
+
- agent skill ที่ยังไม่ผ่าน exact private owner review ถูกซ่อนและไม่ executable
|
|
292
|
+
- agent coordinator cancel/pause ไม่ kill job และ restart ไม่ replay action
|
|
293
|
+
|
|
294
|
+
## Packaging
|
|
295
|
+
|
|
296
|
+
ตรวจว่า tarball มี `dist`, `schemas`, `docs`, `README.md`, setup scripts และ native sources ตาม package policy และไม่มี state DB, OAuth credentials, tokens, models หรือ release temp files
|
|
297
|
+
|
|
298
|
+
## Manual gates
|
|
299
|
+
|
|
300
|
+
การทดสอบผ่าน ChatGPT, Claude หรือเครื่อง Windows จริงต้องทำใน environment ของผู้ใช้และรายงานแยกเป็น `MANUAL_PASS` หรือ `MANUAL_NOT_RUN` ห้ามสรุปจาก catalog, macOS หรือ Linux Docker เพียงอย่างเดียว
|
|
301
|
+
|
|
302
|
+
สถานะ manual setup/import บน owner state จริง: `MANUAL_NOT_RUN` การตรวจรับใช้ isolated fixtures และ temporary package เท่านั้น ไม่มีการเปลี่ยน owner config, OAuth state, tunnel, DNS หรือ global installation
|
|
303
|
+
|
|
304
|
+
สถานะ real Cloudflare Tunnel บน macOS/Windows/Linux: `MANUAL_NOT_RUN`
|
|
305
|
+
|
|
306
|
+
สถานะ multi-project federation ผ่าน external AI และ owner project จริง: `MANUAL_NOT_RUN`
|
|
307
|
+
|
|
308
|
+
สถานะ owner-reviewed Memory ผ่าน external AI และ owner repository จริง: `MANUAL_NOT_RUN`
|
|
309
|
+
|
|
310
|
+
สถานะ Runtime Intelligence ผ่าน external AI และ owner repository จริง: `MANUAL_NOT_RUN`
|
|
311
|
+
|
|
312
|
+
สถานะ Advanced Agent Runtime ผ่าน external AI และ owner repository จริง: `MANUAL_NOT_RUN`
|