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