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,111 @@
1
+ # DODO MCP 1.0.0
2
+
3
+ นี่คือ release แรกของ DODO MCP ในชื่อ package `dodo-mcp` และ CLI `dodo`
4
+
5
+ ## การติดตั้ง
6
+
7
+ ```bash
8
+ npm install -g dodo-mcp@1.0.0
9
+ dodo --version
10
+ ```
11
+
12
+ ## ความสามารถหลัก
13
+
14
+ - MCP HTTP + OAuth และ Local Config แบบ loopback
15
+ - `dodo --cli` interactive owner menu และ global launcher ที่ไม่ใช้ CWD เป็น workspace
16
+ - startup project จาก owner registry; OAuth installation login และ catalog ใช้ได้ก่อน
17
+ เลือกโปรเจกต์ Personal mode พร้อมใช้หลัง owner เพิ่ม path ส่วน managed mode เพิ่ม ACL
18
+ - Compact HTTP surface 19 tools
19
+ - Complete capability catalog 125 tools; Full STDIO ค่าเริ่มต้นแสดง 121 และ owner เปิด Sub-agent MCP exposure แล้วเป็น 125
20
+ - Hybrid surface 49 tools
21
+ - direct coding tools, gateway dispatch และ operation discovery
22
+ - workspace switching จาก Local Config พร้อม readiness และ rollback
23
+ - Personal mode แบบเพิ่มแล้วใช้ได้ทันที และ managed mode สำหรับ workspace ACL/trust แบบละเอียด
24
+ - OAuth scopes, workspace context, approval, path/secret guards และ audit
25
+ - file changes แบบ hash-verified, journaled และ rollback ได้
26
+ - jobs, Git, semantic tools, LSP และ task assistance
27
+ - multimodal, browser, game, workflow และ schedule tools ตาม prerequisite
28
+ - setup แบบ plan-first: installer ที่ยังขาดต้องยืนยันด้วย `--yes`
29
+ - existing-state import ที่นำเข้าเฉพาะ non-authority preferences และสร้าง security identity ใหม่
30
+ - Cloudflare Tunnel แบบ process-owned พร้อม run-scoped token จาก hidden terminal prompt หรือ Local Config, authenticated control IPC, bounded retry/readiness และ redacted diagnostics
31
+ - `dodo start` เปิด tunnel พร้อม MCP ในรอบเดียว; `--no-tunnel` เปิด local-only และ token ไม่ถูกบันทึกลงเครื่อง
32
+ - owner-curated multi-project read federation สำหรับ overview/list/read/search สูงสุด 8 โปรเจกต์ พร้อม live target authority, readiness, source hash และ target-scoped audit
33
+ - Universal Resource Layer + private SHA-256 CAS พร้อม bounded range/resume,
34
+ deterministic extraction และ MCP image/audio preview
35
+ - Project Brain แบบ incremental พร้อม AST symbols/references/import graph,
36
+ routes/tests/dependencies, stable semantic URI และ current-source verification
37
+ - Context Engine แบบ goal-driven พร้อม evidence provenance/confidence/freshness,
38
+ deterministic budget/cursor และ caller-scoped L0–L6 dependency cache
39
+ - owner-reviewed Memory พร้อม source evidence, confidence, retention, CURRENT/STALE,
40
+ explicit cross-project visibility และ non-executable workflow/skill proposals
41
+ - Runtime Intelligence พร้อม durable/reconnectable tasks, bounded process/test/browser
42
+ evidence, guarded snapshot, source revalidation และ fact/observation/inference diagnosis
43
+ - Advanced Agent Runtime พร้อม immutable plans, bounded parallel hypotheses, path intents,
44
+ managed target dispatch, snapshot rollback, evidence-backed completion, restart recovery
45
+ และ owner-reviewed non-executable skills
46
+ - DodoBench แบบ revision-bound และ release gate ที่ตรวจ real HTTP/OAuth Compact,
47
+ STDIO Full, security regressions, immutable package checksum และ fresh tarball install
48
+ - platform evidence ใช้ macOS local, Linux Docker และ dedicated self-hosted GitHub
49
+ Actions สำหรับ Linux/Windows trusted main; Windows manual gate ยังเป็น
50
+ `MANUAL_NOT_RUN`
51
+ - Project Registry ผูก directory generation ด้วย device/inode/birthtimeNs เพื่อกัน
52
+ inode reuse บน Linux โดย state v1 ที่พิสูจน์ generation ไม่ได้ต้องให้เจ้าของ review
53
+
54
+ ## ลำดับการใช้ Compact
55
+
56
+ ```text
57
+ project_overview
58
+ → dodo_discover
59
+ → selected gateway
60
+ ```
61
+
62
+ Compact ลด schema load ตอนเชื่อมต่อ แต่ยังใช้ target authorization และ policy เดิมทุกข้อ
63
+
64
+ ## Setup ที่ปลอดภัย
65
+
66
+ ```bash
67
+ dodo setup --check
68
+ dodo setup --plan --components git,ripgrep,ffmpeg
69
+ dodo setup --yes --components git,ripgrep,ffmpeg
70
+ ```
71
+
72
+ `--check` และ `--plan` ไม่เขียน config หรือเริ่ม installer การใช้ `--import-state` จะเก็บ source เดิมและไม่คัดลอก OAuth, token, database, ACL, trust หรือ permission-bearing configuration
73
+
74
+ ## Tunnel
75
+
76
+ ```bash
77
+ dodo setup --check --components cloudflared
78
+ dodo init --public-url https://mcp.example.com
79
+ dodo start
80
+ # กรอก token แบบชั่วคราว หรือกด Enter เพื่อใช้ local-only
81
+ ```
82
+
83
+ DODO ไม่สร้าง Tunnel/DNS และไม่ใช้ Cloudflare API Token ค่า Tunnel token ไม่ถูกบันทึกใน config/credential store หรือส่งเป็น process argument หน้า Local Config เริ่ม/หยุด tunnel ของ process ปัจจุบันได้โดยตอบกลับ `tokenStored:false`
84
+
85
+ ## Security
86
+
87
+ Gateway ไม่ grant สิทธิ์, ไม่ bypass OAuth, ACL, workspace ID/epoch, trust, approval, path guard, secret guard หรือ command sandbox การเรียก operation ทุกครั้งถูกตรวจโดย target tool definition
88
+
89
+ Memory เป็น untrusted evidence เท่านั้น AI approve/prune เองไม่ได้ และ reviewed
90
+ learning ไม่ถูกติดตั้งหรือ execute อัตโนมัติ
91
+
92
+ Runtime task ใช้ execution approval และ command sandbox เดิม Evidence IDs ไม่ใช่
93
+ สิทธิ์ และ runtime store ไม่เก็บ raw stdout/stderr, browser DOM/console, cookies,
94
+ authorization headers หรือ environment secrets
95
+
96
+ Advanced Agent Runtime เป็น coordination-only และจำกัด authority เพิ่มจาก caller ทุก
97
+ managed operation ยังผ่าน target scope/ACL/epoch/trust/approval/path/secret/hash/sandbox
98
+ เดิม Skill ที่ owner review แล้วยังเป็น untrusted guidance และ cancel run ไม่ kill job
99
+
100
+ ## ตรวจรับ
101
+
102
+ ```bash
103
+ npm run build
104
+ npm run typecheck
105
+ npm run lint
106
+ npm run test:all
107
+ npm run test:linux:docker
108
+ npm pack
109
+ ```
110
+
111
+ การเชื่อมต่อ ChatGPT, Claude หรือ client ภายนอกต้องทำ manual scan/rescan และยืนยัน write/edit ด้วย workspace fixture แยกต่างหาก ผลที่ยังไม่ได้ทำต้องรายงานเป็น `MANUAL_NOT_RUN`
@@ -0,0 +1,92 @@
1
+ # DODO MCP — Release Notes
2
+
3
+ ## 1.0.0
4
+
5
+ ### Global launcher และ interactive CLI
6
+
7
+ - เพิ่ม `dodo --cli` เป็นเมนู owner สำหรับเลือก/เพิ่มโปรเจกต์ เปิด server + Tunnel
8
+ ด้วย token ชั่วคราว และ setup dependencies รวม cloudflared
9
+ - `dodo`/`dodo start` ใช้โปรเจกต์ที่ owner เลือกล่าสุด หรือเปิด launcher mode ที่ไม่มี
10
+ active AI workspace แทนการใช้ CWD โดยอัตโนมัติ; `--root` เลือกและจำ root แบบ explicit
11
+ - Local Config เพิ่มโปรเจกต์แล้วเปิดได้ทันที และรองรับสถานะก่อนเลือก workspace
12
+ - `dodo start` และ Local Config รับ Cloudflare token แบบ run-scoped ไม่บันทึกลงเครื่อง และหยุด child พร้อม DODO
13
+ - เพิ่ม personal mode เป็นค่าเริ่มต้น: owner เพิ่ม project, connection และ profile แล้วใช้
14
+ ได้ทันทีตาม OAuth/profile scopes โดยไม่ตั้ง ACL/trust/egress ซ้ำ; managed mode เดิมยังมี
15
+ - persistent Desktop/Chrome named-app consent เป็นระดับ installation อนุญาตครั้งเดียว
16
+ จาก directory ใดก็ได้ ขณะที่ OS permission, scopes, snapshots และ app allowlist ยังตรวจครบ
17
+ - เพิ่มสวิตช์ Settings สำหรับ expose Sub-agent operations ให้ MCP โดยค่าเริ่มต้นปิด;
18
+ หน้าเว็บ Chat & Tasks ยังใช้ agent ได้ และการเปิดสวิตช์ไม่เพิ่มสิทธิ์ใด ๆ
19
+
20
+ ### DodoBench และ release evidence
21
+
22
+ - เพิ่ม deterministic DodoBench baseline ครอบคลุม cross-project retrieval, safe edit,
23
+ runtime diagnosis, resource image, durable recovery, authorization และ optional browser
24
+ - เพิ่ม candidate/strict release gate พร้อม audit, manifest policy, checksum และ fresh
25
+ exact-tarball smoke ของ CLI, STDIO Full และ HTTP/OAuth Compact
26
+ - รายงานผูกกับ Git revision, dataset, dependency lock, configuration และ platform;
27
+ model token เป็น `null` เมื่อไม่มี model call และ manual/platform status ไม่ถูกแต่งขึ้น
28
+ - ใช้ macOS local + Linux Docker เป็น release gate และเพิ่ม dedicated self-hosted
29
+ GitHub Actions สำหรับ Linux/Windows Node 22/24 เฉพาะ trusted main/manual โดย
30
+ Windows manual gate ยังคง `MANUAL_NOT_RUN`
31
+ - Project Registry metadata v2 ผูก canonical path กับ device/inode/birthtimeNs เพื่อ
32
+ ปฏิเสธ directory replacement แม้ Linux reuse inode โดย row v1 ที่ไม่มี birth time
33
+ จะไม่ถูก auto-upgrade และต้องให้เจ้าของ review/remove/add ใหม่
34
+
35
+ - เปิดตัว package `dodo-mcp` และ CLI `dodo`
36
+ - เพิ่ม config foundation ที่ใช้ `DODO_CONFIG_DIR` และ safe existing-state preference import แบบ explicit
37
+ - เพิ่ม `dodo tunnel configure/status/start/stop/restart/doctor/logs` สำหรับ external และ managed Cloudflare Tunnel โดยไม่จัดการ Cloudflare account/DNS
38
+ - เส้นทางหลักใช้ temporary Tunnel token ที่ไม่อยู่ใน config/credential store/argv/logs/MCP jobs; secure references คงไว้เฉพาะ advanced compatibility commands
39
+ - `dodo setup --check/--plan` เป็น read-only และ dependency installer ต้องได้รับ `--yes` ก่อนเริ่ม
40
+ - state import ไม่คัดลอก OAuth material, database, client/workspace authority หรือ permission-bearing config
41
+ - เพิ่ม Compact, Full และ Hybrid MCP tool surfaces
42
+ - เพิ่ม operation discovery และ gateway dispatch ผ่าน policy pipeline เดียวกับ direct tools
43
+ - คง workspace ID/epoch, ACL, trust, approval, expected hash และ secret/path guards
44
+ - รองรับ Local Config workspace switching พร้อม drain, readiness และ rollback
45
+ - รวม coding, jobs, Git, intelligence, assistance, multimodal, browser, game, workflow และ schedule capabilities
46
+ - เพิ่ม Windows compatibility plan และ setup diagnostics
47
+ - เพิ่ม owner-only Project Registry พร้อม stable project ID, path readiness, CLI CRUD และ Local Config UI
48
+ - Project relocation รักษา project ID เฉพาะเมื่อ directory identity เดิมตรวจได้ และไม่คัดลอก trust/client ACL
49
+ - เพิ่ม read-only multi-project federation ผ่าน overview/list/read/search สูงสุด 8 โปรเจกต์ โดยตรวจ installation identity, target ACL/readiness, source hash และ target-scoped audit
50
+ - เพิ่ม `resource_inspect`, `resource_read`, `resource_read_range`,
51
+ `resource_preview`, `resource_extract` และ `resource_transform`
52
+ - เพิ่ม installation-private immutable SHA-256 CAS, workspace/principal-scoped
53
+ references, bounded range/resume, expected hash/MIME, MCP image/audio preview,
54
+ safe ZIP metadata และ transactional reference-aware GC
55
+ - เพิ่ม Project Brain แบบ incremental สำหรับ TypeScript/JavaScript AST,
56
+ symbols/references/imports/routes/tests/dependencies, stable `symbol://` identity,
57
+ source freshness, rebuild/pause/cancel และ corruption/restart recovery; Full เป็น
58
+ 86 tools ส่วน Compact/Hybrid คง 19/49 และ route ผ่าน assistance gateways
59
+ - เพิ่ม `context_query`, `context_evidence`, `context_status` สำหรับ goal-driven
60
+ retrieval, evidence 5 classes, provenance/confidence/freshness, deterministic
61
+ ranking, budget/cursor และ dependency-aware L0–L6 cache ทำให้ Full เป็น 89 tools
62
+ โดย Compact/Hybrid คง 19/49 ผ่าน `dodo_assist_read`
63
+ - เพิ่ม `memory_search`, `memory_inspect`, `memory_status`, `memory_propose` และ
64
+ `memory_learning_propose`; catalog หลัง Phase 08 เป็น
65
+ Full 104 tools ส่วน Compact/Hybrid คง 19/49
66
+ ผ่าน assistance gateways Permanent memory ต้องผ่าน private owner review + exact
67
+ digest, ตรวจ source/retention/ACL ซ้ำ และ learning review ไม่ติดตั้งหรือ execute เอง
68
+ - เพิ่ม Runtime Intelligence 10 operations สำหรับ durable session, reconnectable
69
+ process/test/container task, bounded task/browser evidence, guarded snapshot,
70
+ evidence revalidation และ deterministic diagnosis ทำให้ Full ณ Phase 08 เป็น 104 tools
71
+ ขณะที่ Compact/Hybrid คง 19/49 ผ่าน gateways เดิม
72
+ - Runtime task ใช้ JobManager, execution approval, idempotency, environment allowlist,
73
+ timeout และ command sandbox เดิม Runtime store ไม่เก็บ raw stdout/stderr, DOM,
74
+ console, cookie, authorization header หรือ environment secret
75
+ - เพิ่ม Advanced Agent Runtime 17 operations สำหรับ immutable plan, bounded parallel
76
+ hypotheses, intent locks, managed read/write/exec, metadata snapshot compare/rollback,
77
+ Runtime-evidence judgement, restart recovery และ reviewed skills ทำให้ Full เป็น 121
78
+ tools ขณะที่ Compact/Hybrid คง 19/49
79
+ - Agent capabilities ลดสิทธิ์จาก caller เท่านั้น Managed target ยังผ่าน invocation
80
+ pipeline เดิม Skill proposal ต้องผ่าน private owner review exact digest และยังเป็น
81
+ non-executable untrusted guidance; coordinator cancel/pause ไม่ kill jobs
82
+ - บังคับ canonical Base64URL ก่อนตรวจ HMAC ของ Resource และ Project Brain cursors
83
+ เพื่อไม่ให้ token string ที่ถูกแก้ไข alias เป็น byte sequence เดิมจาก decoder ที่ permissive
84
+
85
+ ## วิธีอัปเดต
86
+
87
+ ```bash
88
+ npm install -g dodo-mcp@1.0.0
89
+ dodo --version
90
+ ```
91
+
92
+ หลังติดตั้งให้ restart DODO process และ rescan MCP connection ตามข้อกำหนดของ client
@@ -0,0 +1,83 @@
1
+ # Universal Resources and CAS
2
+
3
+ DODO maps guarded workspace files and owned runtime media assets to one immutable
4
+ resource contract. The content-addressed store (CAS) is local to the installation;
5
+ no resource is uploaded and no listener is added.
6
+
7
+ ## Operations
8
+
9
+ | Operation | Purpose | Scope/policy |
10
+ |---|---|---|
11
+ | `resource_inspect` | Ingest a workspace path or owned `assetId`, or inspect a `resourceId` | `dodo:read`; asset ingest also rechecks `dodo:exec` |
12
+ | `resource_read` | Read the first bounded chunk | `dodo:read` |
13
+ | `resource_read_range` | Read/resume a byte range, maximum 256 KiB | `dodo:read` |
14
+ | `resource_preview` | Bounded text/image/audio/metadata preview | `dodo:read` |
15
+ | `resource_extract` | UTF-8 text, metadata, or ZIP central-directory entries | `dodo:read` |
16
+ | `resource_transform` | Create one bounded raster thumbnail resource | `dodo:exec` plus trust/owner approval policy |
17
+
18
+ Full STDIO exposes these names directly. HTTP Compact and Hybrid use:
19
+
20
+ ```text
21
+ dodo_discover(operation="resource_inspect")
22
+ dodo_media(operation="resource_inspect", args={"path":"assets/example.png"})
23
+ ```
24
+
25
+ Keep `workspaceId` and `workspaceEpoch` at the gateway top level. Never put them in
26
+ `args`.
27
+
28
+ ## Identity and ranges
29
+
30
+ `resource_inspect` returns an opaque `resourceId`, a `dodo-resource://` URI, detected
31
+ MIME, size, `sha256:...`, safe source label, capabilities and expiry. The URI is for
32
+ identity/display only. It is not an HTTP URL and not a bearer credential.
33
+
34
+ `resource_read_range` returns Base64 for one bounded byte range, a hash of that
35
+ chunk, the immutable object hash, offsets and a signed `resumeToken`. Continue with:
36
+
37
+ ```text
38
+ resource_read_range(cursor="<resumeToken>", length=65536)
39
+ ```
40
+
41
+ Do not combine a cursor with resourceId/offset/expectedSha256. Tokens expire after
42
+ ten minutes and are bound to the original principal, workspace, resource, hash and
43
+ next offset. DODO still performs live authorization on resume.
44
+
45
+ ## Supported detection and providers
46
+
47
+ Content signatures detect PNG, JPEG, GIF, WebP, WAV, MP3, MP4, WebM, PDF, ZIP and
48
+ WASM. Valid UTF-8 supports plain text, common source formats, JSON, XML, SVG, YAML and
49
+ TOML. Extensions refine UTF-8 text only; they never make arbitrary bytes trusted.
50
+
51
+ - Raster image: metadata, bounded JPEG preview and thumbnail transform.
52
+ - Audio: bounded original MCP audio block when at most 6 MiB.
53
+ - Text/JSON/XML/SVG: bounded UTF-8 read/extract; SVG is never rendered as active content.
54
+ - PDF/video/WASM/opaque binary: identity, metadata and bounded range access.
55
+ - ZIP: bounded central-directory names and sizes only; no entry is inflated.
56
+
57
+ PDF text extraction, OCR and general transcoding are not claimed by this phase.
58
+
59
+ ## Limits and retention
60
+
61
+ - object: 512 MiB
62
+ - installation CAS objects: 2 GiB
63
+ - one range: 256 KiB
64
+ - one image/audio MCP block: 6 MiB
65
+ - active references: 512 per principal/workspace
66
+ - reference lifetime: 24 hours
67
+ - resume token lifetime: 10 minutes
68
+
69
+ Expired references are collected automatically. An object is removed only after no
70
+ reference points to it. Newly created or freshly verified orphan objects receive a
71
+ one-hour grace period so GC cannot race the reference-creation step. The aggregate
72
+ 2 GiB ceiling is enforced again by SQLite for concurrent DODO processes.
73
+
74
+ ## Security
75
+
76
+ Every operation passes the normal invocation pipeline and then rechecks live
77
+ grant/client/workspace access and reference ownership. Workspace ingest also checks
78
+ secret/protected/private-state paths, traversal, symlinks, hardlinks, regular-file
79
+ identity and expected hash/MIME. Object bytes live below the owner-private DODO config
80
+ directory and are SHA-256 verified before reads. Resource content and decoder output
81
+ remain untrusted data. A complete fsynced staging inode is published with
82
+ create-if-absent hard-link semantics, so concurrent writers cannot replace a CAS
83
+ winner with partial bytes.
@@ -0,0 +1,125 @@
1
+ # DODO Runtime Intelligence
2
+
3
+ Runtime Intelligence เก็บหลักฐานจากสิ่งที่เกิดขึ้นจริงใน active workspace โดยคง
4
+ security model เดิม ไม่ใช่ agent ที่เฝ้าระบบเองและไม่ใช่ช่องทางรัน command ใหม่
5
+
6
+ ## สิ่งที่รองรับ
7
+
8
+ - runtime session ที่คงอยู่ข้าม MCP reconnect และ server restart
9
+ - process, test และ container-labelled task ผ่าน `JobManager`
10
+ - task observation ที่เก็บ status, exit metadata, byte counts และ SHA-256 เท่านั้น
11
+ - optional JSON test report ที่ลดเหลือ aggregate counts และ source hash
12
+ - browser evidence จาก owned `browser_session` พร้อม bounded MCP image/DOM response
13
+ - guarded workspace snapshot และ changeset rollback candidates
14
+ - evidence revalidation และ diagnosis ที่แยก fact, observation และ inference
15
+ - current runtime evidence เป็น `OBSERVATION` source ใน Context Engine
16
+
17
+ Full surface มี operations ต่อไปนี้:
18
+
19
+ ```text
20
+ runtime_session_open
21
+ runtime_session_status
22
+ runtime_session_close
23
+ runtime_task_start
24
+ runtime_task_observe
25
+ runtime_task_cancel
26
+ runtime_browser_collect
27
+ runtime_snapshot
28
+ runtime_evidence
29
+ runtime_diagnose
30
+ ```
31
+
32
+ Compact/Hybrid route ผ่าน `dodo_assist_read`, `dodo_assist_change`, `dodo_exec` และ
33
+ `dodo_browser`; ใช้ `dodo_discover(operation="runtime_task_start")` เพื่ออ่าน schema
34
+ ล่าสุด
35
+
36
+ ## Lifecycle
37
+
38
+ ```text
39
+ runtime_session_open
40
+ → runtime_task_start หรือ runtime_browser_collect/runtime_snapshot
41
+ → runtime_task_observe
42
+ → runtime_evidence (revalidate)
43
+ → runtime_diagnose / context_query
44
+ → runtime_session_close
45
+ ```
46
+
47
+ Session default 60 นาทีและตั้งได้สูงสุด 24 ชั่วโมง Evidence เก็บ 24 ชั่วโมง
48
+ มีเพดาน 32 open sessions และ 128 retained sessions ต่อ caller/workspace, 32 tasks ต่อ session, 500 evidence
49
+ ต่อ session และ 2,000 evidence ต่อ caller/workspace Session หมดอายุไม่ kill job
50
+ งานยังอยู่ใน JobManager และดูได้ด้วย job ID ตาม policy เดิม การ close จะปฏิเสธหาก
51
+ attached task ยัง running
52
+
53
+ ## Runtime task
54
+
55
+ `runtime_task_start` รับ explicit `program` และ `args` เท่านั้น ไม่มี shell command
56
+ string ก่อน spawn ระบบตรวจ:
57
+
58
+ 1. OAuth `dodo:exec`, installation grant และ active workspace ACL
59
+ 2. workspace ID/epoch และ principal ownership
60
+ 3. trusted executable หรือ guarded workspace-relative executable
61
+ 4. trust-mode execution approval ที่ bind กับ session/kind/program/args/options
62
+ 5. caller idempotency key; retry key+payload เดิมคืน receipt เดิม
63
+ 6. owner-configured command sandbox และ network option
64
+ 7. environment allowlist, argv budget, concurrency และ wall timeout ของ JobManager
65
+
66
+ `kind=container` เป็น evidence label ไม่ใช่ container daemon หรือ privilege bypass
67
+ caller ยังต้องระบุ executable ที่ติดตั้งแล้ว เช่น container CLI และ command นั้นผ่าน
68
+ policy เหมือน process อื่น
69
+
70
+ ## Evidence ที่จัดเก็บ
71
+
72
+ Process/test/container row เก็บเฉพาะ:
73
+
74
+ - task/job opaque IDs, kind และ bounded duration
75
+ - status, exit code, signal, start/end/timeout timestamps
76
+ - stdout/stderr total bytes, truncated flag และ SHA-256 ของ bounded sample
77
+ - optional test report path/hash และ total/passed/failed/skipped/success
78
+
79
+ ไม่เก็บ raw stdout/stderr หรือ command output ลง runtime table Raw output ที่มีอยู่ใน
80
+ bounded JobManager spool ยังเข้าถึงผ่าน `job_output` ตาม permission เดิมและ retention
81
+ ของ jobs
82
+
83
+ Browser collector เก็บ safe URL ที่ตัด query/fragment, observation ID, title/DOM/image
84
+ hash, navigation timing และจำนวน elements/media/console/network/blocked requests
85
+ เท่านั้น WebSocket policy ถูกบันทึกว่า blocked ตาม browser isolation ไม่เก็บ DOM
86
+ text, console text, request headers, cookies, authorization, input/password values หรือ
87
+ page storage ภาพและ bounded observation ถูกส่งเฉพาะ response ปัจจุบันจาก
88
+ `BrowserService` ซึ่งยังตรวจ owner, expiry, fresh observation และ web setting
89
+
90
+ Snapshot เก็บ manifest hash จาก path/size/mtime/ctime metadata ที่ผ่าน `WorkspaceFS`
91
+ พร้อม file count/truncated และ caller-owned committed changeset IDs + summary hash
92
+ ไม่มี file contents การ snapshot ไม่ apply หรือ rollback สิ่งใด
93
+
94
+ ## Freshness และ Context Engine
95
+
96
+ Evidence เป็น immutable observation เมื่อ `runtime_evidence(refresh=true)` พบว่า job,
97
+ browser observation, test report หรือ workspace manifest เปลี่ยน จะ mark record เดิม
98
+ `STALE` โดยไม่เขียนทับ source/content hash การ collect/observe/snapshot ใหม่สร้าง
99
+ evidence ใหม่
100
+
101
+ Context Engine อ่านเฉพาะ `CURRENT`, unexpired evidence ของ caller และ active workspace
102
+ แล้วสร้าง `dodo-runtime://runtimeev_...` source โดยผูก content hash และ
103
+ caller-specific runtime manifest เป็น cache dependency Runtime text เป็น
104
+ `untrusted_runtime_evidence` และไม่สามารถเพิ่ม scope, trust, ACL หรือ approval
105
+
106
+ ## Security boundaries
107
+
108
+ - session/task/evidence ผูก hash ของ `grantId + clientId`, workspace และ expiry
109
+ - ทุก operation re-check live client, grant, scope และ workspace ACL
110
+ - opaque ID ไม่ใช่ capability และต่าง principal/workspace ได้ `NOT_FOUND`
111
+ - repository config และ saved workflow ไม่ให้ authority แก่ collector
112
+ - runtime ไม่เปิด browser, web fetch, desktop, microphone หรือ system audio เอง
113
+ - browser collector ใช้เฉพาะ session ที่ caller เปิดและยังเป็นเจ้าของ
114
+ - cancel ส่งสัญญาณเฉพาะ live process tree ที่ JobManager เป็นเจ้าของ ไม่ kill stored PID
115
+ - Runtime diagnosis เป็น deterministic interpretation ของ bounded metadata ไม่ apply fix
116
+
117
+ ## ข้อจำกัด
118
+
119
+ - ไม่มี autonomous monitoring หรือ background browser watcher
120
+ - มีเฉพาะ task duration และ browser navigation timing ไม่มี raw performance trace
121
+ หรือ WebSocket payload retention; WebSocket ถูก browser isolation ปิดตาม policy เดิม
122
+ - container task ไม่มี container-specific API; ใช้ explicit installed CLI ภายใต้ policy
123
+ - process exit code 0 ไม่พิสูจน์ user-visible behavior ต้องตรวจ source/UI evidence เพิ่ม
124
+ - restart ระหว่าง job running ทำให้ JobManager mark งานเป็น `interrupted_on_restart`
125
+ และไม่ส่ง signal ไป stored PID เพื่อป้องกัน PID reuse
@@ -0,0 +1,23 @@
1
+ # DODO Schedules
2
+
3
+ DODO รองรับการสร้าง schedule proposal สำหรับคำสั่งที่เจ้าของตรวจและ approve เอง
4
+
5
+ ## Flow
6
+
7
+ ```text
8
+ schedule_propose
9
+ → owner reviews exact digest
10
+ → dodo schedule approve ID
11
+ → bounded job runs under current workspace policy
12
+ ```
13
+
14
+ proposal ไม่ใช่ permission และไม่สามารถขยาย scope, trust, workspace หรือ command sandbox ได้ การเปลี่ยน workspace หรือ revoke access ทำให้ proposal/resource ที่ไม่ valid ถูกปฏิเสธ
15
+
16
+ ตรวจ proposal ที่ค้างอยู่ด้วย:
17
+
18
+ ```bash
19
+ dodo schedule show ID
20
+ dodo approve ID
21
+ ```
22
+
23
+ ระบบไม่ execute proposal ที่ยังไม่ผ่าน owner approval และไม่ kill jobs เดิมอย่างเงียบ ๆ