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,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Best-effort credential redaction for logs and error text (spec §8.5).
|
|
3
|
+
* Never a substitute for not logging tokens in the first place — DODO never
|
|
4
|
+
* logs Authorization headers or token values by design; this catches
|
|
5
|
+
* accidental inclusion in free-form messages.
|
|
6
|
+
*/
|
|
7
|
+
const PATTERNS = [
|
|
8
|
+
/(authorization\s*:\s*)bearer\s+[a-z0-9._~+/=-]{8,}/gi,
|
|
9
|
+
/\beyJ[a-zA-Z0-9_-]{10,}\.[a-zA-Z0-9._-]{10,}/g, // JWT-ish
|
|
10
|
+
/\b(gh[pousr]|xox[baprs]|sk|pk|rk)[-_][a-zA-Z0-9_-]{16,}\b/g, // common API key shapes
|
|
11
|
+
/(client_secret|refresh_token|access_token|password|api[_-]?key)(["']?\s*[:=]\s*["']?)[^\s"'&]{6,}/gi,
|
|
12
|
+
];
|
|
13
|
+
export function redact(text) {
|
|
14
|
+
let out = text;
|
|
15
|
+
out = out.replace(PATTERNS[0], '$1Bearer [REDACTED]');
|
|
16
|
+
out = out.replace(PATTERNS[1], '[REDACTED_JWT]');
|
|
17
|
+
out = out.replace(PATTERNS[2], '[REDACTED_KEY]');
|
|
18
|
+
out = out.replace(PATTERNS[3], '$1$2[REDACTED]');
|
|
19
|
+
return out;
|
|
20
|
+
}
|
|
21
|
+
/** One-line, redacted, length-capped log formatting helper. */
|
|
22
|
+
export function logLine(...parts) {
|
|
23
|
+
const joined = parts
|
|
24
|
+
.map((p) => (typeof p === 'string' ? p : JSON.stringify(p)))
|
|
25
|
+
.join(' ')
|
|
26
|
+
.replace(/[\r\n]+/g, ' ');
|
|
27
|
+
const red = redact(joined);
|
|
28
|
+
return red.length > 2000 ? `${red.slice(0, 2000)}…` : red;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/security/redact.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,QAAQ,GAAa;IACzB,sDAAsD;IACtD,+CAA+C,EAAE,UAAU;IAC3D,4DAA4D,EAAE,wBAAwB;IACtF,qGAAqG;CACtG,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAW,EAAE,qBAAqB,CAAC,CAAC;IAChE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAW,EAAE,gBAAgB,CAAC,CAAC;IAC3D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAW,EAAE,gBAAgB,CAAC,CAAC;IAC3D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAW,EAAE,gBAAgB,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,GAAG,KAAgB;IACzC,MAAM,MAAM,GAAG,KAAK;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { DodoError, toDodoError } from '../errors.js';
|
|
3
|
+
import { createIpcDispatcher } from './ipcDispatch.js';
|
|
4
|
+
import { GlobalConfigSchema, loadGlobalConfig, saveGlobalConfig } from '../config/globalConfig.js';
|
|
5
|
+
import { inspectSetup, runSetup, COMPONENTS } from '../setup/setup.js';
|
|
6
|
+
import { ProjectRegistry } from '../projects/registry.js';
|
|
7
|
+
import { invokeToolDefinition } from '../tools/context.js';
|
|
8
|
+
import { CORE_TOOL_CATALOG } from '../tools/coreCatalog.js';
|
|
9
|
+
import { AGENT_RUNTIME_TOOLS } from '../tools/agentRuntimeTools.js';
|
|
10
|
+
import { accessMode, setAccessMode } from '../security/accessMode.js';
|
|
11
|
+
const ACTIONS = ['status', 'trust.set', 'schedule.list', 'schedule.propose', 'schedule.show', 'schedule.history', 'schedule.approve', 'schedule.revoke', 'memory.pending', 'memory.show', 'memory.list', 'memory.approve', 'memory.reject', 'memory.reverify', 'memory.prune', 'memory.learning.pending', 'memory.learning.show', 'memory.learning.review', 'agent.skill.pending', 'agent.skill.show', 'agent.skill.review', 'desktop.status', 'desktop.policy', 'approvals.pending', 'approvals.approve', 'approvals.deny', 'auth.pending', 'auth.approve', 'auth.deny', 'auth.addClient', 'auth.listClients', 'auth.grants', 'auth.revoke', 'audit.recent', 'recover.list', 'recover.resolve'];
|
|
12
|
+
/** Mounted only after Local Config's owner auth + origin checks, never on public MCP. */
|
|
13
|
+
export function registerAIAdmin(app, host, info, expiresAt) {
|
|
14
|
+
const manager = () => { const m = host.current().services.installation; if (!m)
|
|
15
|
+
throw new DodoError('NOT_SUPPORTED', 'installation runtime is unavailable'); return m; };
|
|
16
|
+
const owner = () => ({ ...manager().owner(), expiresAt: expiresAt / 1000 });
|
|
17
|
+
const route = (method, url, fn) => app[method](url, async (req, res) => {
|
|
18
|
+
try {
|
|
19
|
+
const data = await fn(req, res);
|
|
20
|
+
if (!res.headersSent)
|
|
21
|
+
res.json({ ok: true, data });
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const e = error instanceof z.ZodError ? new DodoError('INVALID_INPUT', 'invalid request fields') : toDodoError(error);
|
|
25
|
+
if (!res.headersSent)
|
|
26
|
+
res.status(e.code === 'FORBIDDEN' ? 403 : e.code === 'AUTH_REQUIRED' ? 401 : e.code === 'CONFLICT' || e.code === 'STALE_WORKSPACE' ? 409 : 400).json({ ok: false, error: e.message, code: e.code });
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
const reviewed = (req, workspaceId = host.current().workspaceId, epoch = host.current().epoch) => {
|
|
30
|
+
if (req.headers['x-dodo-workspace'] !== workspaceId || req.headers['x-dodo-epoch'] !== epoch)
|
|
31
|
+
throw new DodoError('STALE_WORKSPACE', 'refresh the selected project before making changes');
|
|
32
|
+
};
|
|
33
|
+
route('get', '/api/ai/state', () => ({ ...manager().ai.settings.state(), accessMode: accessMode(manager().store), projects: new ProjectRegistry(manager().store).list(), runtimes: manager().status(), runs: manager().ai.list(owner()), controlContext: { workspaceId: host.current().workspaceId, workspaceEpoch: host.current().epoch }, ownerActions: ACTIONS }));
|
|
34
|
+
route('post', '/api/ai/knowledge', async (req) => {
|
|
35
|
+
const b = z.object({ projectId: z.string(), operation: z.enum(['brain_status', 'context_status', 'memory_status', 'memory_search', 'agent_skill_search']), query: z.string().min(1).max(1000).optional() }).strict().parse(req.body);
|
|
36
|
+
const lease = await manager().acquire(b.projectId, owner());
|
|
37
|
+
try {
|
|
38
|
+
reviewed(req, lease.services.workspaceId, lease.services.epoch);
|
|
39
|
+
const def = [...CORE_TOOL_CATALOG, ...AGENT_RUNTIME_TOOLS].find(t => t.name === b.operation);
|
|
40
|
+
const result = await invokeToolDefinition({ def, services: lease.services, principal: owner, args: { workspaceId: lease.services.workspaceId, workspaceEpoch: lease.services.epoch, ...(b.query ? { query: b.query } : {}) } });
|
|
41
|
+
return result.envelope;
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
lease.release();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
route('post', '/api/ai/limits', req => { reviewed(req); return manager().ai.settings.saveLimits(req.body); });
|
|
48
|
+
route('post', '/api/ai/access-mode', req => {
|
|
49
|
+
reviewed(req);
|
|
50
|
+
const { mode } = z.object({ mode: z.enum(['personal', 'managed']) }).strict().parse(req.body);
|
|
51
|
+
const current = host.current();
|
|
52
|
+
const config = loadGlobalConfig(current.paths.configFile);
|
|
53
|
+
saveGlobalConfig(current.paths.configFile, GlobalConfigSchema.parse({ ...config, accessMode: mode }));
|
|
54
|
+
setAccessMode(manager().store, mode);
|
|
55
|
+
manager().store.audit({ principal: 'local-config-owner', workspaceId: current.workspaceId, tool: 'web.access-mode', result: mode });
|
|
56
|
+
return { mode, effectiveImmediately: true };
|
|
57
|
+
});
|
|
58
|
+
route('post', '/api/ai/prune', req => { reviewed(req); return { removed: manager().ai.pruneHistory() }; });
|
|
59
|
+
route('post', '/api/ai/connection', async (req) => {
|
|
60
|
+
reviewed(req);
|
|
61
|
+
const body = z.object({ connection: z.unknown(), apiKey: z.string().max(4096).optional() }).strict().parse(req.body);
|
|
62
|
+
return manager().ai.settings.saveConnection(body.connection, body.apiKey);
|
|
63
|
+
});
|
|
64
|
+
route('post', '/api/ai/profile', req => { reviewed(req); return manager().ai.settings.saveProfile(req.body); });
|
|
65
|
+
route('post', '/api/ai/permission', req => {
|
|
66
|
+
reviewed(req);
|
|
67
|
+
const b = z.object({ projectId: z.string(), profileIds: z.array(z.string()), allowSourceEgress: z.boolean(), allowedClientIds: z.array(z.string()) }).strict().parse(req.body);
|
|
68
|
+
if (!new ProjectRegistry(manager().store).list().some(p => p.projectId === b.projectId && p.available))
|
|
69
|
+
throw new DodoError('PATH_DENIED', 'project is not ready');
|
|
70
|
+
return manager().ai.settings.savePermission(b);
|
|
71
|
+
});
|
|
72
|
+
route('post', '/api/ai/remove', async (req) => { reviewed(req); const b = z.object({ kind: z.enum(['connection', 'profile']), id: z.string(), confirmId: z.string() }).strict().parse(req.body); if (b.id !== b.confirmId)
|
|
73
|
+
throw new DodoError('INVALID_INPUT', 'confirmation does not match'); await manager().ai.settings.remove(b.kind, b.id); return { removed: true }; });
|
|
74
|
+
route('post', '/api/ai/models', req => { reviewed(req); return manager().ai.settings.models(z.object({ connectionId: z.string() }).strict().parse(req.body).connectionId); });
|
|
75
|
+
route('post', '/api/ai/metadata', req => { reviewed(req); return manager().ai.settings.inspectModel(z.object({ profileId: z.string() }).strict().parse(req.body).profileId); });
|
|
76
|
+
route('post', '/api/ai/probe', req => { reviewed(req); const b = z.object({ profileId: z.string(), mode: z.enum(['inference', 'tools']), confirmUsage: z.literal(true) }).strict().parse(req.body); return manager().ai.settings.probe(b.profileId, b.mode); });
|
|
77
|
+
route('post', '/api/ai/project', async (req) => {
|
|
78
|
+
reviewed(req);
|
|
79
|
+
const b = z.object({ projectId: z.string(), action: z.enum(['open', 'close']).default('open') }).strict().parse(req.body);
|
|
80
|
+
if (b.action === 'close')
|
|
81
|
+
return { closed: await manager().closeProject(b.projectId) };
|
|
82
|
+
const lease = await manager().acquire(b.projectId, owner());
|
|
83
|
+
try {
|
|
84
|
+
return { projectId: b.projectId, workspaceId: lease.services.workspaceId, workspaceEpoch: lease.services.epoch, root: lease.services.wfs.root, savedTrust: lease.services.store.trustMode(lease.services.workspaceId), effectiveTrust: lease.services.trustMode(), jobs: lease.services.jobs.list(lease.services.workspaceId, 50) };
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
lease.release();
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
route('post', '/api/ai/project/access', async (req) => {
|
|
91
|
+
const b = z.object({ projectId: z.string(), clientId: z.string().min(1).max(128), scopes: z.array(z.enum(['dodo:read', 'dodo:write', 'dodo:exec'])).max(3), confirmRevoke: z.boolean().default(false) }).strict().parse(req.body);
|
|
92
|
+
const lease = await manager().acquire(b.projectId, owner());
|
|
93
|
+
try {
|
|
94
|
+
reviewed(req, lease.services.workspaceId, lease.services.epoch);
|
|
95
|
+
const store = manager().store;
|
|
96
|
+
if (!store.getOAuthClient(b.clientId))
|
|
97
|
+
throw new DodoError('NOT_FOUND', 'unknown client');
|
|
98
|
+
if (!b.scopes.length && !b.confirmRevoke)
|
|
99
|
+
throw new DodoError('FORBIDDEN', 'confirm revoking this client first');
|
|
100
|
+
store.setClientAccess(lease.services.workspaceId, b.clientId, b.scopes);
|
|
101
|
+
store.audit({ principal: 'local-config-owner', workspaceId: lease.services.workspaceId, tool: 'local.access', refId: b.clientId, result: b.scopes.length ? 'allowed' : 'revoked' });
|
|
102
|
+
return { scopes: store.clientAccess(lease.services.workspaceId, b.clientId) };
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
lease.release();
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
route('post', '/api/ai/project/clients', async (req) => {
|
|
109
|
+
reviewed(req);
|
|
110
|
+
const b = z.object({ projectId: z.string() }).strict().parse(req.body), lease = await manager().acquire(b.projectId, owner());
|
|
111
|
+
try {
|
|
112
|
+
return manager().store.listOAuthClients().slice(0, 100).map(c => ({ clientId: c.clientId, name: typeof c.payload.client_name === 'string' ? c.payload.client_name : c.clientId, scopes: manager().store.clientAccess(lease.services.workspaceId, c.clientId) }));
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
lease.release();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
route('post', '/api/ai/runs', async (req) => {
|
|
119
|
+
const b = z.object({ projectId: z.string(), profileId: z.string(), task: z.string(), idempotencyKey: z.string(), parentRunId: z.string().optional(), images: z.array(z.object({ path: z.string() }).strict()).max(4).optional() }).strict().parse(req.body);
|
|
120
|
+
const lease = await manager().acquire(b.projectId, owner());
|
|
121
|
+
try {
|
|
122
|
+
reviewed(req, lease.services.workspaceId, lease.services.epoch);
|
|
123
|
+
return await manager().ai.spawn(b, owner(), lease.services);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
lease.release();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
route('get', '/api/ai/runs', req => manager().ai.list(owner(), String(req.query.search ?? '').slice(0, 100)));
|
|
130
|
+
route('get', '/api/ai/runs/:id', req => manager().ai.status(String(req.params.id), owner()));
|
|
131
|
+
route('post', '/api/ai/runs/:id/control', req => { reviewed(req); const b = z.object({ action: z.enum(['pause', 'resume', 'cancel', 'delete']) }).strict().parse(req.body); return manager().ai.control(String(req.params.id), b.action, owner()); });
|
|
132
|
+
route('get', '/api/ai/runs/:id/events', (req, res) => {
|
|
133
|
+
const id = String(req.params.id);
|
|
134
|
+
let cursor = Number(req.query.after ?? 0);
|
|
135
|
+
if (!Number.isSafeInteger(cursor) || cursor < 0)
|
|
136
|
+
throw new DodoError('INVALID_INPUT', 'invalid event cursor');
|
|
137
|
+
manager().ai.status(id, owner());
|
|
138
|
+
res.setHeader('content-type', 'text/event-stream');
|
|
139
|
+
res.setHeader('connection', 'keep-alive');
|
|
140
|
+
res.flushHeaders();
|
|
141
|
+
const send = () => {
|
|
142
|
+
if (Date.now() >= expiresAt) {
|
|
143
|
+
res.end();
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const events = manager().ai.events(id, owner(), cursor);
|
|
148
|
+
for (const event of events) {
|
|
149
|
+
cursor = event.seq;
|
|
150
|
+
if (!res.write(`id: ${event.seq}\ndata: ${JSON.stringify(event)}\n\n`)) {
|
|
151
|
+
res.end();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
res.write(': keepalive\n\n');
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
res.end();
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
send();
|
|
162
|
+
const timer = setInterval(send, 1000);
|
|
163
|
+
res.on('close', () => clearInterval(timer));
|
|
164
|
+
});
|
|
165
|
+
route('post', '/api/admin/action', async (req) => {
|
|
166
|
+
const b = z.object({ projectId: z.string(), operation: z.enum(ACTIONS), args: z.record(z.string(), z.unknown()).default({}) }).strict().parse(req.body);
|
|
167
|
+
const lease = await manager().acquire(b.projectId, owner());
|
|
168
|
+
try {
|
|
169
|
+
reviewed(req, lease.services.workspaceId, lease.services.epoch);
|
|
170
|
+
const dispatch = createIpcDispatcher({ ws: lease.workspace, transport: { kind: 'http', port: info.transport?.port ?? 0, locked: info.transport?.locked ?? true, publicUrl: info.transport?.publicUrl ?? null }, requestStop: () => undefined });
|
|
171
|
+
const result = await dispatch(b.operation, b.args);
|
|
172
|
+
manager().store.audit({ principal: 'local-config-owner', workspaceId: lease.services.workspaceId, tool: `web.${b.operation}`, result: 'ok' });
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
lease.release();
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
route('get', '/api/admin/config', () => {
|
|
180
|
+
const c = loadGlobalConfig(host.current().paths.configFile);
|
|
181
|
+
return { limits: c.limits, accessMode: c.accessMode, commandSandbox: c.commandSandbox, sandboxWritablePaths: c.sandboxWritablePaths, allowWebFetch: c.allowWebFetch, lsp: c.lsp, logRetentionDays: c.logRetentionDays, toolSurface: c.toolSurface, exposeSubagentsToMcp: c.exposeSubagentsToMcp, envAllowlist: c.envAllowlist, secretDeny: c.secretDeny, secretAllow: c.secretAllow };
|
|
182
|
+
});
|
|
183
|
+
route('post', '/api/admin/config', req => {
|
|
184
|
+
reviewed(req);
|
|
185
|
+
const patch = GlobalConfigSchema.pick({ limits: true, accessMode: true, commandSandbox: true, sandboxWritablePaths: true, allowWebFetch: true, lsp: true, logRetentionDays: true, toolSurface: true, exposeSubagentsToMcp: true, envAllowlist: true, secretDeny: true, secretAllow: true }).partial().strict().parse(req.body);
|
|
186
|
+
const file = host.current().paths.configFile;
|
|
187
|
+
saveGlobalConfig(file, GlobalConfigSchema.parse({ ...loadGlobalConfig(file), ...patch }));
|
|
188
|
+
if (patch.accessMode)
|
|
189
|
+
setAccessMode(manager().store, patch.accessMode);
|
|
190
|
+
return { saved: true, restartRequired: Object.keys(patch).some(key => key !== 'accessMode') };
|
|
191
|
+
});
|
|
192
|
+
route('post', '/api/admin/setup', async (req) => {
|
|
193
|
+
reviewed(req);
|
|
194
|
+
const b = z.object({ mode: z.enum(['check', 'plan', 'install']), components: z.array(z.enum(COMPONENTS)).min(1), confirmInstall: z.boolean().default(false) }).strict().parse(req.body);
|
|
195
|
+
const options = { cwd: host.current().rootInfo.root, configDir: host.current().configDir, components: b.components };
|
|
196
|
+
if (b.mode === 'install' && !b.confirmInstall)
|
|
197
|
+
throw new DodoError('FORBIDDEN', 'review and confirm the installation plan');
|
|
198
|
+
return b.mode === 'check' ? inspectSetup({ ...options, check: true }) : runSetup({ ...options, plan: b.mode === 'plan', yes: b.confirmInstall }, () => undefined);
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=aiAdmin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiAdmin.js","sourceRoot":"","sources":["../../src/server/aiAdmin.ts"],"names":[],"mappings":"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"}
|