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.
Files changed (447) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +425 -0
  3. package/dist/auth/adapter.js +43 -0
  4. package/dist/auth/adapter.js.map +1 -0
  5. package/dist/auth/clientDeletion.js +45 -0
  6. package/dist/auth/clientDeletion.js.map +1 -0
  7. package/dist/auth/clients.js +55 -0
  8. package/dist/auth/clients.js.map +1 -0
  9. package/dist/auth/constants.js +10 -0
  10. package/dist/auth/constants.js.map +1 -0
  11. package/dist/auth/interactions.js +184 -0
  12. package/dist/auth/interactions.js.map +1 -0
  13. package/dist/auth/keys.js +56 -0
  14. package/dist/auth/keys.js.map +1 -0
  15. package/dist/auth/provider.js +131 -0
  16. package/dist/auth/provider.js.map +1 -0
  17. package/dist/auth/verifier.js +74 -0
  18. package/dist/auth/verifier.js.map +1 -0
  19. package/dist/cli/kill.js +124 -0
  20. package/dist/cli/kill.js.map +1 -0
  21. package/dist/cli/main.js +1393 -0
  22. package/dist/cli/main.js.map +1 -0
  23. package/dist/cli/menu.js +127 -0
  24. package/dist/cli/menu.js.map +1 -0
  25. package/dist/cli/terminal.js +30 -0
  26. package/dist/cli/terminal.js.map +1 -0
  27. package/dist/config/globalConfig.js +144 -0
  28. package/dist/config/globalConfig.js.map +1 -0
  29. package/dist/config/limits.js +42 -0
  30. package/dist/config/limits.js.map +1 -0
  31. package/dist/config/paths.js +94 -0
  32. package/dist/config/paths.js.map +1 -0
  33. package/dist/config/projectConfig.js +63 -0
  34. package/dist/config/projectConfig.js.map +1 -0
  35. package/dist/config/stateImport.js +306 -0
  36. package/dist/config/stateImport.js.map +1 -0
  37. package/dist/config/tunnelConfig.js +23 -0
  38. package/dist/config/tunnelConfig.js.map +1 -0
  39. package/dist/errors.js +82 -0
  40. package/dist/errors.js.map +1 -0
  41. package/dist/evaluation/contracts.js +86 -0
  42. package/dist/evaluation/contracts.js.map +1 -0
  43. package/dist/evaluation/dodoBench.js +69 -0
  44. package/dist/evaluation/dodoBench.js.map +1 -0
  45. package/dist/index.js +26 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/ipc/authentication.js +117 -0
  48. package/dist/ipc/authentication.js.map +1 -0
  49. package/dist/ipc/client.js +86 -0
  50. package/dist/ipc/client.js.map +1 -0
  51. package/dist/ipc/installationClient.js +83 -0
  52. package/dist/ipc/installationClient.js.map +1 -0
  53. package/dist/ipc/ownerControl.js +46 -0
  54. package/dist/ipc/ownerControl.js.map +1 -0
  55. package/dist/ipc/protocol.js +2 -0
  56. package/dist/ipc/protocol.js.map +1 -0
  57. package/dist/ipc/server.js +108 -0
  58. package/dist/ipc/server.js.map +1 -0
  59. package/dist/platform/execResolve.js +64 -0
  60. package/dist/platform/execResolve.js.map +1 -0
  61. package/dist/platform/fileIdentity.js +26 -0
  62. package/dist/platform/fileIdentity.js.map +1 -0
  63. package/dist/platform/fsRetry.js +22 -0
  64. package/dist/platform/fsRetry.js.map +1 -0
  65. package/dist/platform/pathPolicy.js +29 -0
  66. package/dist/platform/pathPolicy.js.map +1 -0
  67. package/dist/platform/privateFs.js +116 -0
  68. package/dist/platform/privateFs.js.map +1 -0
  69. package/dist/platform/processTree.js +31 -0
  70. package/dist/platform/processTree.js.map +1 -0
  71. package/dist/platform/shell.js +74 -0
  72. package/dist/platform/shell.js.map +1 -0
  73. package/dist/platform/speech.js +94 -0
  74. package/dist/platform/speech.js.map +1 -0
  75. package/dist/platform/system.js +28 -0
  76. package/dist/platform/system.js.map +1 -0
  77. package/dist/platform/windowsSandbox.js +129 -0
  78. package/dist/platform/windowsSandbox.js.map +1 -0
  79. package/dist/projects/federation.js +312 -0
  80. package/dist/projects/federation.js.map +1 -0
  81. package/dist/projects/registry.js +291 -0
  82. package/dist/projects/registry.js.map +1 -0
  83. package/dist/security/accessMode.js +19 -0
  84. package/dist/security/accessMode.js.map +1 -0
  85. package/dist/security/approvals.js +56 -0
  86. package/dist/security/approvals.js.map +1 -0
  87. package/dist/security/env.js +57 -0
  88. package/dist/security/env.js.map +1 -0
  89. package/dist/security/mutationQueue.js +78 -0
  90. package/dist/security/mutationQueue.js.map +1 -0
  91. package/dist/security/policy.js +22 -0
  92. package/dist/security/policy.js.map +1 -0
  93. package/dist/security/projectAuthority.js +22 -0
  94. package/dist/security/projectAuthority.js.map +1 -0
  95. package/dist/security/redact.js +30 -0
  96. package/dist/security/redact.js.map +1 -0
  97. package/dist/server/aiAdmin.js +201 -0
  98. package/dist/server/aiAdmin.js.map +1 -0
  99. package/dist/server/appServer.js +461 -0
  100. package/dist/server/appServer.js.map +1 -0
  101. package/dist/server/bootstrap.js +185 -0
  102. package/dist/server/bootstrap.js.map +1 -0
  103. package/dist/server/configUi/app.css +347 -0
  104. package/dist/server/configUi/app.js +958 -0
  105. package/dist/server/configUi/index.html +379 -0
  106. package/dist/server/configUi/ui/alerts.js +92 -0
  107. package/dist/server/configUi/ui/dom.js +19 -0
  108. package/dist/server/configUi/ui/tooltips.js +115 -0
  109. package/dist/server/configUi/vendor/VERSION.txt +1 -0
  110. package/dist/server/configUi/vendor/sweetalert2.min.css +1 -0
  111. package/dist/server/configUi/vendor/sweetalert2.min.js +5 -0
  112. package/dist/server/configUi/workbench.css +62 -0
  113. package/dist/server/configUi/workbench.js +394 -0
  114. package/dist/server/installationRuntime.js +155 -0
  115. package/dist/server/installationRuntime.js.map +1 -0
  116. package/dist/server/instructions.js +17 -0
  117. package/dist/server/instructions.js.map +1 -0
  118. package/dist/server/ipcDispatch.js +225 -0
  119. package/dist/server/ipcDispatch.js.map +1 -0
  120. package/dist/server/localConfig.js +561 -0
  121. package/dist/server/localConfig.js.map +1 -0
  122. package/dist/server/optionalServices.js +30 -0
  123. package/dist/server/optionalServices.js.map +1 -0
  124. package/dist/server/projectLease.js +46 -0
  125. package/dist/server/projectLease.js.map +1 -0
  126. package/dist/server/stdioServer.js +75 -0
  127. package/dist/server/stdioServer.js.map +1 -0
  128. package/dist/server/version.js +13 -0
  129. package/dist/server/version.js.map +1 -0
  130. package/dist/server/workspaceHost.js +194 -0
  131. package/dist/server/workspaceHost.js.map +1 -0
  132. package/dist/services/agent/agentService.js +598 -0
  133. package/dist/services/agent/agentService.js.map +1 -0
  134. package/dist/services/agent/contracts.js +102 -0
  135. package/dist/services/agent/contracts.js.map +1 -0
  136. package/dist/services/ai/adapters.js +287 -0
  137. package/dist/services/ai/adapters.js.map +1 -0
  138. package/dist/services/ai/contracts.js +39 -0
  139. package/dist/services/ai/contracts.js.map +1 -0
  140. package/dist/services/ai/credentials.js +77 -0
  141. package/dist/services/ai/credentials.js.map +1 -0
  142. package/dist/services/ai/network.js +113 -0
  143. package/dist/services/ai/network.js.map +1 -0
  144. package/dist/services/ai/settings.js +178 -0
  145. package/dist/services/ai/settings.js.map +1 -0
  146. package/dist/services/ai/subagents.js +468 -0
  147. package/dist/services/ai/subagents.js.map +1 -0
  148. package/dist/services/assistance/analysis.js +352 -0
  149. package/dist/services/assistance/analysis.js.map +1 -0
  150. package/dist/services/assistance/contracts.js +54 -0
  151. package/dist/services/assistance/contracts.js.map +1 -0
  152. package/dist/services/assistance/verification.js +274 -0
  153. package/dist/services/assistance/verification.js.map +1 -0
  154. package/dist/services/brain/brainParser.js +97 -0
  155. package/dist/services/brain/brainParser.js.map +1 -0
  156. package/dist/services/brain/brainService.js +733 -0
  157. package/dist/services/brain/brainService.js.map +1 -0
  158. package/dist/services/brain/brainWorker.js +212 -0
  159. package/dist/services/brain/brainWorker.js.map +1 -0
  160. package/dist/services/brain/contracts.js +154 -0
  161. package/dist/services/brain/contracts.js.map +1 -0
  162. package/dist/services/brain/protocol.js +2 -0
  163. package/dist/services/brain/protocol.js.map +1 -0
  164. package/dist/services/changes/applier.js +544 -0
  165. package/dist/services/changes/applier.js.map +1 -0
  166. package/dist/services/changes/contentBudget.js +11 -0
  167. package/dist/services/changes/contentBudget.js.map +1 -0
  168. package/dist/services/changes/planner.js +284 -0
  169. package/dist/services/changes/planner.js.map +1 -0
  170. package/dist/services/changes/types.js +3 -0
  171. package/dist/services/changes/types.js.map +1 -0
  172. package/dist/services/context/contextEngine.js +746 -0
  173. package/dist/services/context/contextEngine.js.map +1 -0
  174. package/dist/services/context/contracts.js +88 -0
  175. package/dist/services/context/contracts.js.map +1 -0
  176. package/dist/services/desktop/desktopPolicy.js +76 -0
  177. package/dist/services/desktop/desktopPolicy.js.map +1 -0
  178. package/dist/services/desktop/desktopService.js +130 -0
  179. package/dist/services/desktop/desktopService.js.map +1 -0
  180. package/dist/services/desktop/nativeBackend.js +174 -0
  181. package/dist/services/desktop/nativeBackend.js.map +1 -0
  182. package/dist/services/desktop/protocol.js +32 -0
  183. package/dist/services/desktop/protocol.js.map +1 -0
  184. package/dist/services/files/readService.js +136 -0
  185. package/dist/services/files/readService.js.map +1 -0
  186. package/dist/services/git/gitService.js +369 -0
  187. package/dist/services/git/gitService.js.map +1 -0
  188. package/dist/services/intelligence/intelService.js +136 -0
  189. package/dist/services/intelligence/intelService.js.map +1 -0
  190. package/dist/services/intelligence/protocol.js +2 -0
  191. package/dist/services/intelligence/protocol.js.map +1 -0
  192. package/dist/services/intelligence/tsWorker.js +419 -0
  193. package/dist/services/intelligence/tsWorker.js.map +1 -0
  194. package/dist/services/jobs/commandInput.js +34 -0
  195. package/dist/services/jobs/commandInput.js.map +1 -0
  196. package/dist/services/jobs/jobManager.js +398 -0
  197. package/dist/services/jobs/jobManager.js.map +1 -0
  198. package/dist/services/jobs/sandbox.js +156 -0
  199. package/dist/services/jobs/sandbox.js.map +1 -0
  200. package/dist/services/jobs/sandboxWiring.js +37 -0
  201. package/dist/services/jobs/sandboxWiring.js.map +1 -0
  202. package/dist/services/jobs/spool.js +112 -0
  203. package/dist/services/jobs/spool.js.map +1 -0
  204. package/dist/services/jobs/windowsSandboxChild.js +24 -0
  205. package/dist/services/jobs/windowsSandboxChild.js.map +1 -0
  206. package/dist/services/jobs/windowsSandboxWorker.js +155 -0
  207. package/dist/services/jobs/windowsSandboxWorker.js.map +1 -0
  208. package/dist/services/lsp/documentUri.js +16 -0
  209. package/dist/services/lsp/documentUri.js.map +1 -0
  210. package/dist/services/lsp/jsonrpc.js +382 -0
  211. package/dist/services/lsp/jsonrpc.js.map +1 -0
  212. package/dist/services/lsp/lspService.js +1051 -0
  213. package/dist/services/lsp/lspService.js.map +1 -0
  214. package/dist/services/memory/contracts.js +94 -0
  215. package/dist/services/memory/contracts.js.map +1 -0
  216. package/dist/services/memory/memoryService.js +683 -0
  217. package/dist/services/memory/memoryService.js.map +1 -0
  218. package/dist/services/multimodal/browserService.js +407 -0
  219. package/dist/services/multimodal/browserService.js.map +1 -0
  220. package/dist/services/multimodal/byteRange.js +31 -0
  221. package/dist/services/multimodal/byteRange.js.map +1 -0
  222. package/dist/services/multimodal/contracts.js +59 -0
  223. package/dist/services/multimodal/contracts.js.map +1 -0
  224. package/dist/services/multimodal/gameService.js +95 -0
  225. package/dist/services/multimodal/gameService.js.map +1 -0
  226. package/dist/services/multimodal/images.js +107 -0
  227. package/dist/services/multimodal/images.js.map +1 -0
  228. package/dist/services/multimodal/mediaService.js +279 -0
  229. package/dist/services/multimodal/mediaService.js.map +1 -0
  230. package/dist/services/multimodal/mediaWorker.js +143 -0
  231. package/dist/services/multimodal/mediaWorker.js.map +1 -0
  232. package/dist/services/multimodal/multimodalService.js +51 -0
  233. package/dist/services/multimodal/multimodalService.js.map +1 -0
  234. package/dist/services/multimodal/network.js +69 -0
  235. package/dist/services/multimodal/network.js.map +1 -0
  236. package/dist/services/multimodal/operations.js +40 -0
  237. package/dist/services/multimodal/operations.js.map +1 -0
  238. package/dist/services/multimodal/storage.js +160 -0
  239. package/dist/services/multimodal/storage.js.map +1 -0
  240. package/dist/services/multimodal/workflowService.js +179 -0
  241. package/dist/services/multimodal/workflowService.js.map +1 -0
  242. package/dist/services/overview.js +284 -0
  243. package/dist/services/overview.js.map +1 -0
  244. package/dist/services/resources/casStore.js +304 -0
  245. package/dist/services/resources/casStore.js.map +1 -0
  246. package/dist/services/resources/contracts.js +75 -0
  247. package/dist/services/resources/contracts.js.map +1 -0
  248. package/dist/services/resources/mime.js +77 -0
  249. package/dist/services/resources/mime.js.map +1 -0
  250. package/dist/services/resources/providerRegistry.js +22 -0
  251. package/dist/services/resources/providerRegistry.js.map +1 -0
  252. package/dist/services/resources/providers.js +120 -0
  253. package/dist/services/resources/providers.js.map +1 -0
  254. package/dist/services/resources/resourceService.js +282 -0
  255. package/dist/services/resources/resourceService.js.map +1 -0
  256. package/dist/services/runtime/contracts.js +65 -0
  257. package/dist/services/runtime/contracts.js.map +1 -0
  258. package/dist/services/runtime/runtimeService.js +364 -0
  259. package/dist/services/runtime/runtimeService.js.map +1 -0
  260. package/dist/services/schedules/scheduleService.js +198 -0
  261. package/dist/services/schedules/scheduleService.js.map +1 -0
  262. package/dist/services/search/searchService.js +434 -0
  263. package/dist/services/search/searchService.js.map +1 -0
  264. package/dist/services/search/searchWorker.js +58 -0
  265. package/dist/services/search/searchWorker.js.map +1 -0
  266. package/dist/setup/componentProbes.js +259 -0
  267. package/dist/setup/componentProbes.js.map +1 -0
  268. package/dist/setup/download.js +139 -0
  269. package/dist/setup/download.js.map +1 -0
  270. package/dist/setup/managedTools.js +118 -0
  271. package/dist/setup/managedTools.js.map +1 -0
  272. package/dist/setup/sandboxProbe.js +172 -0
  273. package/dist/setup/sandboxProbe.js.map +1 -0
  274. package/dist/setup/setup.js +522 -0
  275. package/dist/setup/setup.js.map +1 -0
  276. package/dist/setup/windowsChromiumAcl.js +56 -0
  277. package/dist/setup/windowsChromiumAcl.js.map +1 -0
  278. package/dist/setup/windowsSandboxInstall.js +94 -0
  279. package/dist/setup/windowsSandboxInstall.js.map +1 -0
  280. package/dist/setup/windowsSpeechInstall.js +86 -0
  281. package/dist/setup/windowsSpeechInstall.js.map +1 -0
  282. package/dist/store/db.js +711 -0
  283. package/dist/store/db.js.map +1 -0
  284. package/dist/store/scopeEncoding.js +15 -0
  285. package/dist/store/scopeEncoding.js.map +1 -0
  286. package/dist/store/store.js +467 -0
  287. package/dist/store/store.js.map +1 -0
  288. package/dist/tools/agentRuntimeTools.js +216 -0
  289. package/dist/tools/agentRuntimeTools.js.map +1 -0
  290. package/dist/tools/agentTools.js +317 -0
  291. package/dist/tools/agentTools.js.map +1 -0
  292. package/dist/tools/assistanceTools.js +126 -0
  293. package/dist/tools/assistanceTools.js.map +1 -0
  294. package/dist/tools/brainTools.js +130 -0
  295. package/dist/tools/brainTools.js.map +1 -0
  296. package/dist/tools/catalog.js +30 -0
  297. package/dist/tools/catalog.js.map +1 -0
  298. package/dist/tools/changeTools.js +188 -0
  299. package/dist/tools/changeTools.js.map +1 -0
  300. package/dist/tools/context.js +243 -0
  301. package/dist/tools/context.js.map +1 -0
  302. package/dist/tools/contextTools.js +57 -0
  303. package/dist/tools/contextTools.js.map +1 -0
  304. package/dist/tools/coreCatalog.js +82 -0
  305. package/dist/tools/coreCatalog.js.map +1 -0
  306. package/dist/tools/desktopTools.js +41 -0
  307. package/dist/tools/desktopTools.js.map +1 -0
  308. package/dist/tools/directTools.js +273 -0
  309. package/dist/tools/directTools.js.map +1 -0
  310. package/dist/tools/envelope.js +71 -0
  311. package/dist/tools/envelope.js.map +1 -0
  312. package/dist/tools/extraTools.js +298 -0
  313. package/dist/tools/extraTools.js.map +1 -0
  314. package/dist/tools/gitTools.js +93 -0
  315. package/dist/tools/gitTools.js.map +1 -0
  316. package/dist/tools/jobTools.js +454 -0
  317. package/dist/tools/jobTools.js.map +1 -0
  318. package/dist/tools/memoryTools.js +102 -0
  319. package/dist/tools/memoryTools.js.map +1 -0
  320. package/dist/tools/metaTools.js +153 -0
  321. package/dist/tools/metaTools.js.map +1 -0
  322. package/dist/tools/multimodalTools.js +262 -0
  323. package/dist/tools/multimodalTools.js.map +1 -0
  324. package/dist/tools/projectTools.js +261 -0
  325. package/dist/tools/projectTools.js.map +1 -0
  326. package/dist/tools/resourceTools.js +81 -0
  327. package/dist/tools/resourceTools.js.map +1 -0
  328. package/dist/tools/runtimeTools.js +137 -0
  329. package/dist/tools/runtimeTools.js.map +1 -0
  330. package/dist/tools/scheduleTools.js +10 -0
  331. package/dist/tools/scheduleTools.js.map +1 -0
  332. package/dist/tools/semanticTools.js +141 -0
  333. package/dist/tools/semanticTools.js.map +1 -0
  334. package/dist/tools/subagentTools.js +32 -0
  335. package/dist/tools/subagentTools.js.map +1 -0
  336. package/dist/tools/surface.js +644 -0
  337. package/dist/tools/surface.js.map +1 -0
  338. package/dist/tunnel/control.js +113 -0
  339. package/dist/tunnel/control.js.map +1 -0
  340. package/dist/tunnel/credentials.js +392 -0
  341. package/dist/tunnel/credentials.js.map +1 -0
  342. package/dist/tunnel/log.js +84 -0
  343. package/dist/tunnel/log.js.map +1 -0
  344. package/dist/tunnel/runtime.js +55 -0
  345. package/dist/tunnel/runtime.js.map +1 -0
  346. package/dist/tunnel/supervisor.js +280 -0
  347. package/dist/tunnel/supervisor.js.map +1 -0
  348. package/dist/util/bytes.js +53 -0
  349. package/dist/util/bytes.js.map +1 -0
  350. package/dist/util/hash.js +53 -0
  351. package/dist/util/hash.js.map +1 -0
  352. package/dist/workspace/fs.js +305 -0
  353. package/dist/workspace/fs.js.map +1 -0
  354. package/dist/workspace/identity.js +17 -0
  355. package/dist/workspace/identity.js.map +1 -0
  356. package/dist/workspace/ignores.js +173 -0
  357. package/dist/workspace/ignores.js.map +1 -0
  358. package/dist/workspace/root.js +59 -0
  359. package/dist/workspace/root.js.map +1 -0
  360. package/docs/AGENT_RUNTIME.md +154 -0
  361. package/docs/AI_PROVIDERS.md +110 -0
  362. package/docs/ARCHITECTURE.md +331 -0
  363. package/docs/ASSISTANCE.md +31 -0
  364. package/docs/AUTH.md +59 -0
  365. package/docs/BRAIN.md +92 -0
  366. package/docs/COMPATIBILITY.md +92 -0
  367. package/docs/CONFIRMATION.md +13 -0
  368. package/docs/CONTEXT.md +87 -0
  369. package/docs/DESKTOP.md +35 -0
  370. package/docs/EVALUATION.md +86 -0
  371. package/docs/LARGE_INPUTS.md +21 -0
  372. package/docs/LSP.md +21 -0
  373. package/docs/MANUAL_ACCEPTANCE.md +283 -0
  374. package/docs/MEMORY.md +128 -0
  375. package/docs/MULTIMODAL.md +32 -0
  376. package/docs/PROJECTS.md +146 -0
  377. package/docs/RELEASE_1.0.0.md +111 -0
  378. package/docs/RELEASE_NOTES.md +92 -0
  379. package/docs/RESOURCES.md +83 -0
  380. package/docs/RUNTIME.md +125 -0
  381. package/docs/SCHEDULES.md +23 -0
  382. package/docs/SECURITY.md +250 -0
  383. package/docs/TEST_REPORT.md +312 -0
  384. package/docs/TUNNEL.md +86 -0
  385. package/docs/WEB_CLIENTS.md +43 -0
  386. package/docs/WINDOWS.md +79 -0
  387. package/docs/adr/001-one-process-one-workspace.md +22 -0
  388. package/docs/adr/002-external-tunnel.md +19 -0
  389. package/docs/adr/003-sdk-v2-legacy-stateless.md +20 -0
  390. package/docs/adr/004-embedded-oauth-provider.md +19 -0
  391. package/docs/adr/005-static-client-baseline.md +19 -0
  392. package/docs/adr/006-guarded-fs-explicit-exec.md +16 -0
  393. package/docs/adr/007-preview-hash-journal.md +18 -0
  394. package/docs/adr/008-ts-js-semantics-first.md +17 -0
  395. package/docs/adr/009-jobs-polling.md +18 -0
  396. package/docs/adr/010-sqlite-better-sqlite3.md +18 -0
  397. package/docs/adr/011-env-example-secure-default.md +19 -0
  398. package/docs/adr/012-workspace-scope-grant.md +24 -0
  399. package/docs/adr/013-loopback-proxy-trust.md +18 -0
  400. package/docs/adr/014-direct-coding-tier.md +48 -0
  401. package/docs/adr/015-coding-agent-parity.md +56 -0
  402. package/docs/adr/016-oidc-openid-consent.md +15 -0
  403. package/docs/adr/017-installation-identity-local-config.md +44 -0
  404. package/docs/adr/018-access-scope-encoding.md +11 -0
  405. package/docs/adr/019-runtime-workspace-switch.md +59 -0
  406. package/docs/adr/020-desktop-access.md +50 -0
  407. package/docs/adr/021-persistent-desktop-consent.md +39 -0
  408. package/docs/adr/022-owner-kill-preserves-login.md +30 -0
  409. package/docs/adr/023-large-coding-inputs.md +49 -0
  410. package/docs/adr/024-usage-rounds-and-schedules.md +72 -0
  411. package/docs/adr/025-owner-chat-whitelist.md +53 -0
  412. package/docs/adr/026-remove-conversation-confirmation.md +35 -0
  413. package/docs/adr/027-workspace-client-list.md +20 -0
  414. package/docs/adr/028-owner-client-deletion.md +25 -0
  415. package/docs/adr/029-compact-tool-surface.md +121 -0
  416. package/docs/adr/030-windows-native-candidate.md +71 -0
  417. package/docs/adr/031-owner-selected-tunnel-supervision.md +13 -0
  418. package/docs/adr/032-owner-project-registry.md +43 -0
  419. package/docs/adr/033-read-only-project-federation.md +61 -0
  420. package/docs/adr/034-universal-resource-cas.md +60 -0
  421. package/docs/adr/035-project-brain-incremental-index.md +51 -0
  422. package/docs/adr/036-context-engine-evidence.md +53 -0
  423. package/docs/adr/037-owner-reviewed-memory.md +46 -0
  424. package/docs/adr/038-runtime-intelligence.md +46 -0
  425. package/docs/adr/039-advanced-agent-runtime.md +57 -0
  426. package/docs/adr/040-dodobench-release-gate.md +43 -0
  427. package/docs/adr/041-local-macos-docker-linux-gates.md +32 -0
  428. package/docs/adr/042-project-directory-generation-identity.md +36 -0
  429. package/docs/adr/043-trusted-self-hosted-platform-gates.md +38 -0
  430. package/docs/adr/044-global-launcher-and-cli-menu.md +43 -0
  431. package/docs/adr/045-ai-providers-multiproject.md +56 -0
  432. package/docs/adr/046-personal-access-mode.md +32 -0
  433. package/docs/adr/README.md +64 -0
  434. package/examples/.dodo.json.example +20 -0
  435. package/examples/cloudflared.yml +23 -0
  436. package/examples/reverse-proxy-fixture.mjs +37 -0
  437. package/native/desktop-linux.py +387 -0
  438. package/native/desktop-windows.cs +180 -0
  439. package/native/desktop.swift +212 -0
  440. package/package.json +145 -0
  441. package/schemas/global-config.schema.json +497 -0
  442. package/schemas/project-config.schema.json +75 -0
  443. package/schemas/tools.compact.json +3236 -0
  444. package/schemas/tools.hybrid.json +8194 -0
  445. package/schemas/tools.json +34518 -0
  446. package/scripts/guard-publish.mjs +12 -0
  447. package/scripts/setup-multimodal.mjs +70 -0
@@ -0,0 +1,38 @@
1
+ # ADR-043: Trusted self-hosted platform gates
2
+
3
+ Status: Accepted
4
+
5
+ ## Context
6
+
7
+ หลัง ADR-041 เจ้าของติดตั้ง dedicated GitHub Actions runners บน Linux X64 และ
8
+ Windows X64 สำเร็จ จึงสามารถเก็บ platform evidence จากเครื่องที่ควบคุมได้โดยตรง
9
+ Repository เป็น public ทำให้ workflow ที่ execute pull-request code บน persistent
10
+ self-hosted runner มีความเสี่ยงต่อเครื่อง, network และ credentials ของเจ้าของ
11
+
12
+ ## Decision
13
+
14
+ เปิด workflow `platform-gates` สำหรับ `push` ที่ branch `main` และ
15
+ `workflow_dispatch` เท่านั้น ไม่มี `pull_request` หรือ `pull_request_target` trigger
16
+ ทุก job ใช้ `contents: read`, checkout ไม่ persist credentials และ action dependency
17
+ ถูก pin ด้วย full commit SHA
18
+
19
+ Linux runner label `linux-ci` รัน release gate ภายใน Docker image เดิมบน Node 22/24
20
+ Windows runner label `windows-ci 02` รัน native candidate release gate บน Node 22/24
21
+ พร้อมตรวจ enabled Administrator token สำหรับ ACL tests ทั้งสอง job upload เฉพาะ
22
+ non-secret ignored evidence และไม่มีขั้น publish npm
23
+
24
+ macOS ยังคงเป็น local release gate Strict release readiness ต้องมี macOS กับ Linux
25
+ evidence จาก clean revision และ dependency lock เดียวกัน Windows automated result
26
+ ไม่เปลี่ยน manual Windows 11 acceptance และไม่ประกาศ support เอง
27
+
28
+ ## Consequences
29
+
30
+ Platform regression ทำซ้ำบน dedicated machines และ failure ไม่ถูกซ่อนด้วย
31
+ `continue-on-error` แลกกับการไม่รัน untrusted PR บน self-hosted hardware หากต้องการ
32
+ PR checks ภายหลังต้องใช้ disposable isolated runner boundary แยกต่างหาก
33
+
34
+ ## Evidence
35
+
36
+ `.github/workflows/platform-gates.yml`, `scripts/test-linux-docker.mjs` และ
37
+ `scripts/release-gate.mjs` บันทึก platform, runner origin, revision, lock digest,
38
+ test/package/audit/fresh-install results โดยไม่เก็บ token
@@ -0,0 +1,43 @@
1
+ # ADR-044: Global launcher and interactive owner menu
2
+
3
+ Status: accepted for DODO 1.0.0
4
+
5
+ ## Context
6
+
7
+ การเปิด HTTP server จาก CWD ทำให้คำสั่งเดียวกันมี authority ต่างกันตาม terminal
8
+ directory และทำให้เจ้าของต้องปิด/เปิด process เพื่อเลือกโปรเจกต์แรก ทั้งที่ DODO มี
9
+ owner-only Project Registry และ runtime workspace switch ที่ตรวจ readiness อยู่แล้ว
10
+
11
+ ## Decision
12
+
13
+ `dodo` และ `dodo start` ที่ไม่มี `--root` resolve `startupProjectId` จาก owner registry
14
+ หาก entry พร้อมจึงเปิด root นั้น หากไม่มี target ที่พิสูจน์ได้ process เปิด launcher
15
+ mode และใช้ private inert directory ใต้ config directory เฉพาะ resource bootstrap
16
+
17
+ ระหว่าง launcher mode:
18
+
19
+ - ไม่มี active AI workspace
20
+ - `/healthz` รายงาน `workspaceSelected=false`
21
+ - OAuth installation login และ authenticated tool catalog ใช้ได้ก่อนเลือก workspace;
22
+ tool operation ไม่มี authority จน owner เพิ่ม real project; managed mode ต้องมี ACL เพิ่ม
23
+ - Local Config ยัง bind loopback และให้ owner เพิ่ม/เลือก absolute path
24
+ - private launcher root ไม่ปรากฏใน UI หรือ client response
25
+
26
+ การ switch แรกใช้ WorkspaceHost pipeline เดิม: shared root policy, prepare/readiness,
27
+ in-flight drain, running-job refusal, resource teardown และ fresh workspaceId/epoch
28
+ เมื่อสำเร็จจึงบันทึก registry project ID เป็น startup preference เริ่ม schedules และเปิด
29
+ data plane หากล้มเหลว launcher ยังคงปิด data plane ไม่มี half-switched state
30
+
31
+ `dodo --cli` เป็น terminal menu ที่เรียก owner operations เดิม ไม่ใช่ MCP tool
32
+ เมนูไม่เปลี่ยน OAuth grant, access mode หรือ OS permission เมนูเริ่มปกติเรียก hidden
33
+ run-scoped Tunnel prompt เดียวกับ `dodo start` ส่วนเมนู local-only ส่ง override สำหรับ
34
+ รอบนั้น Token ไม่ผ่าน readline menu, argv, config หรือ OS credential provider
35
+
36
+ STDIO คง contract `dodo stdio --root PATH` เพราะ client เป็นเจ้าของ subprocess
37
+ lifecycle และต้องกำหนด root อย่างชัดเจน
38
+
39
+ ## Consequences
40
+
41
+ การเปิด DODO จาก Home, Desktop หรือ directory อื่นไม่กลายเป็น workspace โดยบังเอิญ
42
+ เจ้าของต้องเลือก project ครั้งแรก แต่หน้า Local Config ยังพร้อม การจำ project เป็น
43
+ ความสะดวกเท่านั้น; registry readiness และ security policy ทุกชั้นยัง authoritative
@@ -0,0 +1,56 @@
1
+ # ADR-045: Explicit project runtimes and provider-backed sub-agents
2
+
3
+ Status: Implemented in source; live-provider/platform acceptance is tracked separately.
4
+
5
+ DODO needs simultaneous projects and bounded model execution while preserving the
6
+ existing MCP authority pipeline. Default workspace switching alone serializes unrelated
7
+ projects; a generic model executor with direct handler access would bypass policy.
8
+
9
+ We introduce an installation runtime manager backed by the existing project registry.
10
+ Only the owner adds roots. Optional top-level targetProjectId selects a leased, ready
11
+ runtime before principal/target-authority/context validation. Default selection and read-only
12
+ projectId/projectIds federation retain distinct contracts. Nested routing overrides and
13
+ ambiguous combinations fail closed. Each runtime retains its own epoch/services/jobs;
14
+ close refuses active users. Root recovery occurs once under the project lease.
15
+
16
+ A reentrant FIFO mutation queue is shared by direct MCP, agents and schedules. Jobs retain
17
+ queue ownership until actual process exit. Reads remain concurrent. Hashes are validated
18
+ when work reaches the queue; external programs are outside this synchronization boundary.
19
+
20
+ Five adapters implement seven provider presets plus custom connections. Protocol-native
21
+ continuation is private, including signatures and encrypted reasoning. Streaming parsing
22
+ is bounded and handles split frames/JSON. No provider fallback or uncertain automatic retry.
23
+ Credentials are session-only or macOS Keychain; metadata contains references, never keys.
24
+ Requests validate DNS addresses and pin sockets, reject redirects and metadata/admin
25
+ endpoints, and re-check delegation before sending. Local Ollama model metadata, not URL
26
+ alone, is required for projects that forbid egress; this is not an OS sandbox guarantee.
27
+
28
+ Sub-agents reuse invokeToolDefinition and a limited coding/context/reviewed-skill catalog.
29
+ Profile scopes intersect the original caller; a project restriction prevents child reads
30
+ in other projects. Every turn/action revalidates live authority and immutable profile digest.
31
+ No recursive spawn, owner tool, blanket approval, or implicit permission activation.
32
+ Four public operations use existing assist gateways, preserving Compact 19 / Hybrid 49;
33
+ Full becomes 125. Same spawn idempotency key returns the same owned run.
34
+
35
+ Private SQLite stores bounded run continuation, events, delegation references and usage.
36
+ No raw OAuth tokens are retained. Restart marks interrupted runs; explicit Resume binds
37
+ fresh epoch/authentication to the original caller. Uncertain inference/actions require
38
+ review instead of replay. Pending jobs are observed and their real results feed the model.
39
+
40
+ The web uses existing loopback owner auth/CSP and authenticated fetch event cursors.
41
+ Project screen selection is independent from default switching. Advanced owner forms reuse
42
+ IPC/config/setup validation. Provider tests with synthetic prompts are explicit paid actions.
43
+
44
+ Consequences: profiles/models need owner configuration; 16 secondary runtimes have a
45
+ bounded resource ceiling. Budgets use conservative UTF-8 input accounting, not exact
46
+ provider tokenization. Queue and project isolation are not filesystem/OS sandboxes.
47
+ Live provider calls, OS permission dialogs and Linux Docker are separate acceptance gates;
48
+ protocol fixture success is not a claim that every hosted model was exercised.
49
+
50
+ Personal mode is the single-owner default. Registering a project and selecting an enabled
51
+ profile is explicit owner consent to use that profile there, including bounded remote source
52
+ egress. The approved OAuth grant and profile scopes remain ceilings. Managed mode retains
53
+ per-project client/profile/egress allowlists. Both modes re-check live grants, epochs,
54
+ filesystem guards, hashes, idempotency and sandbox policy before each model action.
55
+
56
+ See [AI guide](../AI_PROVIDERS.md), [security](../SECURITY.md), and [test report](../TEST_REPORT.md).
@@ -0,0 +1,32 @@
1
+ # ADR-046: Personal add-and-use mode
2
+
3
+ Status: accepted for the single-owner default.
4
+
5
+ DODO is commonly run by one owner on one machine. Requiring the same owner to approve an
6
+ OAuth client, then repeat client ACL, trust, Agent Profile, source-egress and native-app
7
+ consent for every registered path creates ceremony without adding a second trust principal.
8
+
9
+ Global `accessMode` therefore defaults to `personal`. An owner-approved installation OAuth
10
+ grant can use every owner-registered, ready project according to its live grant/token scopes.
11
+ Enabled Agent Profiles are available to those projects; selecting a remote profile is owner
12
+ consent for its bounded source/context egress. Effective trust is `trusted`. Provider and
13
+ profile setup remains explicit because the owner must choose the endpoint, model, credential
14
+ storage and scope ceiling.
15
+
16
+ `managed` remains available from authenticated Local Config. It restores per-project client
17
+ ACL, saved trust, profile/client allowlist and source-egress decisions. Switching modes changes
18
+ new authorization decisions immediately and never copies managed rows between projects.
19
+
20
+ Persistent Desktop/Chrome named-app consent is installation-scoped and can be set once from
21
+ any directory. Temporary consent stays workspace/epoch-bound. OS Screen Recording,
22
+ Accessibility or platform prompts still require the real user, and every operation still
23
+ checks `dodo:exec`, target context, exact app allowlist, fresh principal-bound snapshot,
24
+ idempotency and action policy.
25
+
26
+ Neither mode disables OAuth, registered-target readiness, live revocation, workspace ID/epoch,
27
+ path/secret/symlink/hardlink guards, expected hashes, journals, idempotency or the configured
28
+ command sandbox. Repository configuration, model output, workflows and memory cannot change
29
+ the mode or grant authority.
30
+
31
+ Evidence: `tests/security/personalMode.test.ts`, `tests/unit/desktop.test.ts`,
32
+ `tests/security/desktop.test.ts`, managed-mode security suites and packaging smoke.
@@ -0,0 +1,64 @@
1
+ # Architecture Decision Records
2
+
3
+ - [022 — Owner kill preserves login](022-owner-kill-preserves-login.md)
4
+
5
+ - [021 — Persistent desktop consent](021-persistent-desktop-consent.md)
6
+
7
+ Short records of load-bearing decisions, each with the trade-off and the
8
+ evidence (source and test) that settled it. ADR-001..010 capture the foundational
9
+ decisions; ADR-011+ resolve implementation ambiguities without reducing security.
10
+
11
+ | ADR | Decision |
12
+ |---|---|
13
+ | [001](001-one-process-one-workspace.md) | One process = one CWD workspace = one endpoint profile |
14
+ | [002](002-external-tunnel.md) | External named tunnel mode (partly superseded by ADR-031) |
15
+ | [003](003-sdk-v2-legacy-stateless.md) | Official MCP SDK v2 + legacy stateless fallback |
16
+ | [004](004-embedded-oauth-provider.md) | Embedded `oidc-provider` authorization server |
17
+ | [005](005-static-client-baseline.md) | Static client registration baseline; DCR off, CIMD deferred |
18
+ | [006](006-guarded-fs-explicit-exec.md) | Guarded file tools + explicit native execution (no OS sandbox) |
19
+ | [007](007-preview-hash-journal.md) | Preview / hash / idempotency / journal for changes |
20
+ | [008](008-ts-js-semantics-first.md) | TypeScript/JavaScript semantics first, in a guarded worker |
21
+ | [009](009-jobs-polling.md) | Jobs + polling as the execution baseline |
22
+ | [010](010-sqlite-better-sqlite3.md) | `better-sqlite3` durable store, chosen in M0 |
23
+ | [011](011-env-example-secure-default.md) | `.env.example` denied by default (secure default) |
24
+ | [012](012-workspace-scope-grant.md) | OAuth grants at both OIDC and resource scope; first-party auto-consent |
25
+ | [013](013-loopback-proxy-trust.md) | `trust proxy = loopback`; issuer from explicit config only |
26
+ | [014](014-direct-coding-tier.md) | Direct coding-agent tool tier (write/edit/glob/run_command/git_commit), 33 tools |
27
+ | [015](015-coding-agent-parity.md) | Coding-agent parity: parallel/background commands, OS sandbox, apply_patch, LSP adapter, stdio transport (43 tools) |
28
+
29
+
30
+ - [016 — OpenID consent correction](016-oidc-openid-consent.md)
31
+ - [017 — Installation identity and local config](017-installation-identity-local-config.md)
32
+ - [018 — ACL scope encoding contract](018-access-scope-encoding.md)
33
+ - [019 — Runtime workspace switch from Local Config](019-runtime-workspace-switch.md)
34
+ - [020 — Local macOS desktop access](020-desktop-access.md)
35
+
36
+ - [023 — Large coding inputs and private shell scripts](023-large-coding-inputs.md)
37
+
38
+ - [024 — Usage rounds and separately approved schedules](024-usage-rounds-and-schedules.md)
39
+
40
+ - [025 — Owner-first chat whitelist and reset](025-owner-chat-whitelist.md)
41
+
42
+ - [026 — Remove conversation confirmation; retain existing access policy](026-remove-conversation-confirmation.md)
43
+
44
+ - [027 — Current-workspace client list and explicit add picker](027-workspace-client-list.md)
45
+
46
+ - [028 — Reviewed owner deletion of selected OAuth clients](028-owner-client-deletion.md)
47
+ - [029 — Compact MCP tool surface with capability gateways](029-compact-tool-surface.md)
48
+ - [030 — Windows native candidate and authenticated owner IPC](030-windows-native-candidate.md)
49
+ - [031 — Owner-selected Cloudflare Tunnel supervision](031-owner-selected-tunnel-supervision.md)
50
+ - [032 — Owner-only durable project registry](032-owner-project-registry.md)
51
+ - [033 — Read-only multi-project federation](033-read-only-project-federation.md)
52
+ - [034 — Universal resource identity and private SHA-256 CAS](034-universal-resource-cas.md)
53
+ - [035 — Incremental Project Brain with source-verified graph evidence](035-project-brain-incremental-index.md)
54
+ - [036 — Goal-driven Context Engine and source-verifying evidence](036-context-engine-evidence.md)
55
+ - [037 — Evidence-backed owner-reviewed memory](037-owner-reviewed-memory.md)
56
+ - [038 — Caller-scoped Runtime Intelligence](038-runtime-intelligence.md)
57
+ - [039 — Advanced Agent Runtime](039-advanced-agent-runtime.md)
58
+ - [040 — Revision-bound DodoBench and release evidence](040-dodobench-release-gate.md)
59
+ - [041 — Local macOS and Docker Linux release gates](041-local-macos-docker-linux-gates.md)
60
+ - [042 — Project directory generation identity](042-project-directory-generation-identity.md)
61
+ - [043 — Trusted self-hosted platform gates](043-trusted-self-hosted-platform-gates.md)
62
+ - [044 — Global launcher and interactive owner menu](044-global-launcher-and-cli-menu.md)
63
+ - [045 — Explicit project runtimes and provider-backed sub-agents](045-ai-providers-multiproject.md)
64
+ - [046 — Personal add-and-use mode](046-personal-access-mode.md)
@@ -0,0 +1,20 @@
1
+ {
2
+ "$comment": "Optional repo-local hints. This file has NO authority over security or permissions (spec §5): unknown keys are rejected, and it cannot widen file access, change auth, or disable logging. Copy to .dodo.json in your project root.",
3
+ "name": "my-app",
4
+ "description": "Example project hints for DODO.",
5
+ "exclude": ["fixtures/large-corpus/**"],
6
+ "tasks": [
7
+ {
8
+ "id": "unit",
9
+ "title": "Unit tests",
10
+ "program": "npm",
11
+ "args": ["run", "test:unit"]
12
+ },
13
+ {
14
+ "id": "typecheck",
15
+ "title": "Typecheck",
16
+ "program": "npm",
17
+ "args": ["run", "typecheck"]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,23 @@
1
+ # Example Cloudflare named-tunnel config (spec §17.1).
2
+ #
3
+ # DODO does NOT create tunnels, DNS, or credentials — you run cloudflared
4
+ # yourself. This file assumes cloudflared runs on the SAME machine as DODO.
5
+ #
6
+ # CRITICAL: route ALL paths of the hostname to DODO, not just /mcp. OAuth
7
+ # discovery (/.well-known/...), authorization, token, revocation and the
8
+ # consent interaction pages must all reach the server, or sign-in breaks.
9
+ #
10
+ # Replace the tunnel id / hostname with your own. Create the tunnel and DNS
11
+ # with the cloudflared CLI (see docs/TUNNEL.md).
12
+
13
+ tunnel: <YOUR_TUNNEL_ID>
14
+ credentials-file: /home/you/.cloudflared/<YOUR_TUNNEL_ID>.json
15
+
16
+ ingress:
17
+ - hostname: dodo.example.com
18
+ service: http://127.0.0.1:21730
19
+ # Final catch-all (required by cloudflared).
20
+ - service: http_status:404
21
+
22
+ # Do NOT add ingress rules that expose any other local port (no MCP Inspector,
23
+ # no debug endpoints). DODO binds only 127.0.0.1:21730.
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Local reverse-proxy fixture (spec §H): stands in for the user-managed
4
+ * Cloudflare named tunnel so the full OAuth + MCP flow can be exercised
5
+ * end-to-end WITHOUT any real domain or Cloudflare account. It forwards ALL
6
+ * paths (not just /mcp) to DODO, exactly as the runbook requires.
7
+ *
8
+ * Usage:
9
+ * 1. dodo init --public-url http://127.0.0.1:8788 --dangerously-allow-insecure-http
10
+ * 2. dodo start # binds 127.0.0.1:21730
11
+ * 3. node examples/reverse-proxy-fixture.mjs 8788 21730
12
+ *
13
+ * This is a TEST fixture (plain HTTP). A real deployment uses HTTPS via your
14
+ * own tunnel; DODO never manages the tunnel.
15
+ */
16
+ import http from 'node:http';
17
+
18
+ const listenPort = Number(process.argv[2] ?? 8788);
19
+ const targetPort = Number(process.argv[3] ?? 21730);
20
+
21
+ const server = http.createServer((req, res) => {
22
+ const proxyReq = http.request(
23
+ { host: '127.0.0.1', port: targetPort, method: req.method, path: req.url, headers: { ...req.headers, 'x-forwarded-proto': 'http', 'x-forwarded-host': req.headers.host } },
24
+ (proxyRes) => {
25
+ res.writeHead(proxyRes.statusCode ?? 502, proxyRes.headers);
26
+ proxyRes.pipe(res);
27
+ },
28
+ );
29
+ proxyReq.on('error', () => {
30
+ res.writeHead(502).end('bad gateway (is dodo running?)');
31
+ });
32
+ req.pipe(proxyReq);
33
+ });
34
+
35
+ server.listen(listenPort, '127.0.0.1', () => {
36
+ console.log(`reverse-proxy fixture: http://127.0.0.1:${listenPort} → 127.0.0.1:${targetPort} (all paths)`);
37
+ });