@mastra/code-sdk 0.0.0-esbuild-bundle-worker-20260807173433

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 (491) hide show
  1. package/CHANGELOG.md +1349 -0
  2. package/LICENSE.md +30 -0
  3. package/README.md +70 -0
  4. package/dist/acp/agent.d.ts +35 -0
  5. package/dist/acp/agent.d.ts.map +1 -0
  6. package/dist/acp/agent.js +161 -0
  7. package/dist/acp/agent.js.map +1 -0
  8. package/dist/acp/event-mapper.d.ts +22 -0
  9. package/dist/acp/event-mapper.d.ts.map +1 -0
  10. package/dist/acp/event-mapper.js +214 -0
  11. package/dist/acp/event-mapper.js.map +1 -0
  12. package/dist/acp/index.d.ts +8 -0
  13. package/dist/acp/index.d.ts.map +1 -0
  14. package/dist/acp/index.js +65 -0
  15. package/dist/acp/index.js.map +1 -0
  16. package/dist/acp/server.d.ts +7 -0
  17. package/dist/acp/server.d.ts.map +1 -0
  18. package/dist/acp/server.js +35 -0
  19. package/dist/acp/server.js.map +1 -0
  20. package/dist/acp.d.ts +2 -0
  21. package/dist/acp.d.ts.map +1 -0
  22. package/dist/acp.js +2 -0
  23. package/dist/agents/credential-resolver.d.ts +51 -0
  24. package/dist/agents/credential-resolver.d.ts.map +1 -0
  25. package/dist/agents/credential-resolver.js +52 -0
  26. package/dist/agents/credential-resolver.js.map +1 -0
  27. package/dist/agents/custom-provider-source.d.ts +35 -0
  28. package/dist/agents/custom-provider-source.d.ts.map +1 -0
  29. package/dist/agents/custom-provider-source.js +25 -0
  30. package/dist/agents/custom-provider-source.js.map +1 -0
  31. package/dist/agents/instructions.d.ts +6 -0
  32. package/dist/agents/instructions.d.ts.map +1 -0
  33. package/dist/agents/instructions.js +32 -0
  34. package/dist/agents/instructions.js.map +1 -0
  35. package/dist/agents/mastracode-gateway.d.ts +74 -0
  36. package/dist/agents/mastracode-gateway.d.ts.map +1 -0
  37. package/dist/agents/mastracode-gateway.js +400 -0
  38. package/dist/agents/mastracode-gateway.js.map +1 -0
  39. package/dist/agents/memory.d.ts +13 -0
  40. package/dist/agents/memory.d.ts.map +1 -0
  41. package/dist/agents/memory.js +116 -0
  42. package/dist/agents/memory.js.map +1 -0
  43. package/dist/agents/model.d.ts +59 -0
  44. package/dist/agents/model.d.ts.map +1 -0
  45. package/dist/agents/model.js +132 -0
  46. package/dist/agents/model.js.map +1 -0
  47. package/dist/agents/modes/build.d.ts +10 -0
  48. package/dist/agents/modes/build.d.ts.map +1 -0
  49. package/dist/agents/modes/build.js +44 -0
  50. package/dist/agents/modes/build.js.map +1 -0
  51. package/dist/agents/modes/explore.d.ts +10 -0
  52. package/dist/agents/modes/explore.d.ts.map +1 -0
  53. package/dist/agents/modes/explore.js +39 -0
  54. package/dist/agents/modes/explore.js.map +1 -0
  55. package/dist/agents/modes/plan.d.ts +6 -0
  56. package/dist/agents/modes/plan.d.ts.map +1 -0
  57. package/dist/agents/modes/plan.js +37 -0
  58. package/dist/agents/modes/plan.js.map +1 -0
  59. package/dist/agents/prompts/agent-instructions.d.ts +61 -0
  60. package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
  61. package/dist/agents/prompts/agent-instructions.js +201 -0
  62. package/dist/agents/prompts/agent-instructions.js.map +1 -0
  63. package/dist/agents/prompts/build.d.ts +12 -0
  64. package/dist/agents/prompts/build.d.ts.map +1 -0
  65. package/dist/agents/prompts/build.js +76 -0
  66. package/dist/agents/prompts/build.js.map +1 -0
  67. package/dist/agents/prompts/fast.d.ts +5 -0
  68. package/dist/agents/prompts/fast.d.ts.map +1 -0
  69. package/dist/agents/prompts/fast.js +26 -0
  70. package/dist/agents/prompts/fast.js.map +1 -0
  71. package/dist/agents/prompts/index.d.ts +19 -0
  72. package/dist/agents/prompts/index.d.ts.map +1 -0
  73. package/dist/agents/prompts/index.js +65 -0
  74. package/dist/agents/prompts/index.js.map +1 -0
  75. package/dist/agents/prompts/model.d.ts +5 -0
  76. package/dist/agents/prompts/model.d.ts.map +1 -0
  77. package/dist/agents/prompts/model.js +23 -0
  78. package/dist/agents/prompts/model.js.map +1 -0
  79. package/dist/agents/prompts/plan.d.ts +6 -0
  80. package/dist/agents/prompts/plan.d.ts.map +1 -0
  81. package/dist/agents/prompts/plan.js +111 -0
  82. package/dist/agents/prompts/plan.js.map +1 -0
  83. package/dist/agents/prompts/tool-guidance.d.ts +13 -0
  84. package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
  85. package/dist/agents/prompts/tool-guidance.js +149 -0
  86. package/dist/agents/prompts/tool-guidance.js.map +1 -0
  87. package/dist/agents/sandbox-filesystem.d.ts +99 -0
  88. package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
  89. package/dist/agents/sandbox-filesystem.js +328 -0
  90. package/dist/agents/sandbox-filesystem.js.map +1 -0
  91. package/dist/agents/sandbox-reattach.d.ts +19 -0
  92. package/dist/agents/sandbox-reattach.d.ts.map +1 -0
  93. package/dist/agents/sandbox-reattach.js +15 -0
  94. package/dist/agents/sandbox-reattach.js.map +1 -0
  95. package/dist/agents/thread-caveman-state.d.ts +17 -0
  96. package/dist/agents/thread-caveman-state.d.ts.map +1 -0
  97. package/dist/agents/thread-caveman-state.js +107 -0
  98. package/dist/agents/thread-caveman-state.js.map +1 -0
  99. package/dist/agents/tool-availability.d.ts +10 -0
  100. package/dist/agents/tool-availability.d.ts.map +1 -0
  101. package/dist/agents/tool-availability.js +87 -0
  102. package/dist/agents/tool-availability.js.map +1 -0
  103. package/dist/agents/tools.d.ts +19 -0
  104. package/dist/agents/tools.d.ts.map +1 -0
  105. package/dist/agents/tools.js +105 -0
  106. package/dist/agents/tools.js.map +1 -0
  107. package/dist/agents/workspace.d.ts +32 -0
  108. package/dist/agents/workspace.d.ts.map +1 -0
  109. package/dist/agents/workspace.js +251 -0
  110. package/dist/agents/workspace.js.map +1 -0
  111. package/dist/analytics.d.ts +18 -0
  112. package/dist/analytics.d.ts.map +1 -0
  113. package/dist/analytics.js +163 -0
  114. package/dist/analytics.js.map +1 -0
  115. package/dist/auth/authorization-input.d.ts +16 -0
  116. package/dist/auth/authorization-input.d.ts.map +1 -0
  117. package/dist/auth/authorization-input.js +42 -0
  118. package/dist/auth/authorization-input.js.map +1 -0
  119. package/dist/auth/device-code.d.ts +93 -0
  120. package/dist/auth/device-code.d.ts.map +1 -0
  121. package/dist/auth/device-code.js +129 -0
  122. package/dist/auth/device-code.js.map +1 -0
  123. package/dist/auth/index.d.ts +10 -0
  124. package/dist/auth/index.d.ts.map +1 -0
  125. package/dist/auth/index.js +6 -0
  126. package/dist/auth/pkce.d.ts +13 -0
  127. package/dist/auth/pkce.d.ts.map +1 -0
  128. package/dist/auth/pkce.js +32 -0
  129. package/dist/auth/pkce.js.map +1 -0
  130. package/dist/auth/providers/anthropic.d.ts +40 -0
  131. package/dist/auth/providers/anthropic.d.ts.map +1 -0
  132. package/dist/auth/providers/anthropic.js +126 -0
  133. package/dist/auth/providers/anthropic.js.map +1 -0
  134. package/dist/auth/providers/github-copilot.d.ts +154 -0
  135. package/dist/auth/providers/github-copilot.d.ts.map +1 -0
  136. package/dist/auth/providers/github-copilot.js +340 -0
  137. package/dist/auth/providers/github-copilot.js.map +1 -0
  138. package/dist/auth/providers/openai-codex.d.ts +139 -0
  139. package/dist/auth/providers/openai-codex.d.ts.map +1 -0
  140. package/dist/auth/providers/openai-codex.js +519 -0
  141. package/dist/auth/providers/openai-codex.js.map +1 -0
  142. package/dist/auth/providers/xai.d.ts +64 -0
  143. package/dist/auth/providers/xai.d.ts.map +1 -0
  144. package/dist/auth/providers/xai.js +205 -0
  145. package/dist/auth/providers/xai.js.map +1 -0
  146. package/dist/auth/storage.d.ts +91 -0
  147. package/dist/auth/storage.d.ts.map +1 -0
  148. package/dist/auth/storage.js +197 -0
  149. package/dist/auth/storage.js.map +1 -0
  150. package/dist/auth/types.d.ts +89 -0
  151. package/dist/auth/types.d.ts.map +1 -0
  152. package/dist/auth/types.js +1 -0
  153. package/dist/clipboard/index.d.ts +26 -0
  154. package/dist/clipboard/index.d.ts.map +1 -0
  155. package/dist/clipboard/index.js +226 -0
  156. package/dist/clipboard/index.js.map +1 -0
  157. package/dist/constants.d.ts +10 -0
  158. package/dist/constants.d.ts.map +1 -0
  159. package/dist/constants.js +18 -0
  160. package/dist/constants.js.map +1 -0
  161. package/dist/error-classification.d.ts +10 -0
  162. package/dist/error-classification.d.ts.map +1 -0
  163. package/dist/error-classification.js +22 -0
  164. package/dist/error-classification.js.map +1 -0
  165. package/dist/evals/context-builder.d.ts +41 -0
  166. package/dist/evals/context-builder.d.ts.map +1 -0
  167. package/dist/evals/context-builder.js +161 -0
  168. package/dist/evals/context-builder.js.map +1 -0
  169. package/dist/evals/index.d.ts +4 -0
  170. package/dist/evals/index.d.ts.map +1 -0
  171. package/dist/evals/index.js +5 -0
  172. package/dist/evals/scorers/classify-command.d.ts +31 -0
  173. package/dist/evals/scorers/classify-command.d.ts.map +1 -0
  174. package/dist/evals/scorers/classify-command.js +73 -0
  175. package/dist/evals/scorers/classify-command.js.map +1 -0
  176. package/dist/evals/scorers/efficiency.d.ts +44 -0
  177. package/dist/evals/scorers/efficiency.d.ts.map +1 -0
  178. package/dist/evals/scorers/efficiency.js +259 -0
  179. package/dist/evals/scorers/efficiency.js.map +1 -0
  180. package/dist/evals/scorers/extract-tools.d.ts +25 -0
  181. package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
  182. package/dist/evals/scorers/extract-tools.js +60 -0
  183. package/dist/evals/scorers/extract-tools.js.map +1 -0
  184. package/dist/evals/scorers/index.d.ts +3 -0
  185. package/dist/evals/scorers/index.d.ts.map +1 -0
  186. package/dist/evals/scorers/index.js +3 -0
  187. package/dist/evals/scorers/outcome.d.ts +49 -0
  188. package/dist/evals/scorers/outcome.d.ts.map +1 -0
  189. package/dist/evals/scorers/outcome.js +347 -0
  190. package/dist/evals/scorers/outcome.js.map +1 -0
  191. package/dist/goal-manager.d.ts +78 -0
  192. package/dist/goal-manager.d.ts.map +1 -0
  193. package/dist/goal-manager.js +273 -0
  194. package/dist/goal-manager.js.map +1 -0
  195. package/dist/goal-signal.d.ts +14 -0
  196. package/dist/goal-signal.d.ts.map +1 -0
  197. package/dist/goal-signal.js +17 -0
  198. package/dist/goal-signal.js.map +1 -0
  199. package/dist/headless/cli.d.ts +42 -0
  200. package/dist/headless/cli.d.ts.map +1 -0
  201. package/dist/headless/cli.js +195 -0
  202. package/dist/headless/cli.js.map +1 -0
  203. package/dist/headless/flags.d.ts +33 -0
  204. package/dist/headless/flags.d.ts.map +1 -0
  205. package/dist/headless/flags.js +190 -0
  206. package/dist/headless/flags.js.map +1 -0
  207. package/dist/headless/format.d.ts +38 -0
  208. package/dist/headless/format.d.ts.map +1 -0
  209. package/dist/headless/format.js +89 -0
  210. package/dist/headless/format.js.map +1 -0
  211. package/dist/headless/index.d.ts +25 -0
  212. package/dist/headless/index.d.ts.map +1 -0
  213. package/dist/headless/index.js +6 -0
  214. package/dist/headless/policy.d.ts +17 -0
  215. package/dist/headless/policy.d.ts.map +1 -0
  216. package/dist/headless/policy.js +42 -0
  217. package/dist/headless/policy.js.map +1 -0
  218. package/dist/headless/run-mc.d.ts +7 -0
  219. package/dist/headless/run-mc.d.ts.map +1 -0
  220. package/dist/headless/run-mc.js +346 -0
  221. package/dist/headless/run-mc.js.map +1 -0
  222. package/dist/headless/types.d.ts +158 -0
  223. package/dist/headless/types.d.ts.map +1 -0
  224. package/dist/headless/types.js +18 -0
  225. package/dist/headless/types.js.map +1 -0
  226. package/dist/hooks/config.d.ts +11 -0
  227. package/dist/hooks/config.d.ts.map +1 -0
  228. package/dist/hooks/config.js +73 -0
  229. package/dist/hooks/config.js.map +1 -0
  230. package/dist/hooks/executor.d.ts +13 -0
  231. package/dist/hooks/executor.d.ts.map +1 -0
  232. package/dist/hooks/executor.js +128 -0
  233. package/dist/hooks/executor.js.map +1 -0
  234. package/dist/hooks/index.d.ts +6 -0
  235. package/dist/hooks/index.d.ts.map +1 -0
  236. package/dist/hooks/index.js +5 -0
  237. package/dist/hooks/manager.d.ts +47 -0
  238. package/dist/hooks/manager.d.ts.map +1 -0
  239. package/dist/hooks/manager.js +225 -0
  240. package/dist/hooks/manager.js.map +1 -0
  241. package/dist/hooks/types.d.ts +152 -0
  242. package/dist/hooks/types.d.ts.map +1 -0
  243. package/dist/hooks/types.js +8 -0
  244. package/dist/hooks/types.js.map +1 -0
  245. package/dist/index.d.ts +258 -0
  246. package/dist/index.d.ts.map +1 -0
  247. package/dist/index.js +740 -0
  248. package/dist/index.js.map +1 -0
  249. package/dist/ipc/ipc-reporter.d.ts +14 -0
  250. package/dist/ipc/ipc-reporter.d.ts.map +1 -0
  251. package/dist/ipc/ipc-reporter.js +21 -0
  252. package/dist/ipc/ipc-reporter.js.map +1 -0
  253. package/dist/lsp/client.d.ts +56 -0
  254. package/dist/lsp/client.d.ts.map +1 -0
  255. package/dist/lsp/client.js +251 -0
  256. package/dist/lsp/client.js.map +1 -0
  257. package/dist/lsp/index.d.ts +4 -0
  258. package/dist/lsp/index.d.ts.map +1 -0
  259. package/dist/lsp/index.js +4 -0
  260. package/dist/lsp/language.d.ts +9 -0
  261. package/dist/lsp/language.d.ts.map +1 -0
  262. package/dist/lsp/language.js +44 -0
  263. package/dist/lsp/language.js.map +1 -0
  264. package/dist/lsp/manager.d.ts +34 -0
  265. package/dist/lsp/manager.d.ts.map +1 -0
  266. package/dist/lsp/manager.js +82 -0
  267. package/dist/lsp/manager.js.map +1 -0
  268. package/dist/lsp/server.d.ts +27 -0
  269. package/dist/lsp/server.d.ts.map +1 -0
  270. package/dist/lsp/server.js +159 -0
  271. package/dist/lsp/server.js.map +1 -0
  272. package/dist/lsp/workspace.d.ts +9 -0
  273. package/dist/lsp/workspace.d.ts.map +1 -0
  274. package/dist/lsp/workspace.js +55 -0
  275. package/dist/lsp/workspace.js.map +1 -0
  276. package/dist/mcp/config.d.ts +54 -0
  277. package/dist/mcp/config.d.ts.map +1 -0
  278. package/dist/mcp/config.js +240 -0
  279. package/dist/mcp/config.js.map +1 -0
  280. package/dist/mcp/index.d.ts +5 -0
  281. package/dist/mcp/index.d.ts.map +1 -0
  282. package/dist/mcp/index.js +3 -0
  283. package/dist/mcp/manager.d.ts +98 -0
  284. package/dist/mcp/manager.d.ts.map +1 -0
  285. package/dist/mcp/manager.js +612 -0
  286. package/dist/mcp/manager.js.map +1 -0
  287. package/dist/mcp/state.d.ts +33 -0
  288. package/dist/mcp/state.d.ts.map +1 -0
  289. package/dist/mcp/state.js +88 -0
  290. package/dist/mcp/state.js.map +1 -0
  291. package/dist/mcp/types.d.ts +120 -0
  292. package/dist/mcp/types.d.ts.map +1 -0
  293. package/dist/mcp/types.js +1 -0
  294. package/dist/onboarding/custom-packs.d.ts +7 -0
  295. package/dist/onboarding/custom-packs.d.ts.map +1 -0
  296. package/dist/onboarding/custom-packs.js +17 -0
  297. package/dist/onboarding/custom-packs.js.map +1 -0
  298. package/dist/onboarding/custom-providers.d.ts +4 -0
  299. package/dist/onboarding/custom-providers.d.ts.map +1 -0
  300. package/dist/onboarding/custom-providers.js +30 -0
  301. package/dist/onboarding/custom-providers.js.map +1 -0
  302. package/dist/onboarding/index.d.ts +5 -0
  303. package/dist/onboarding/index.d.ts.map +1 -0
  304. package/dist/onboarding/index.js +3 -0
  305. package/dist/onboarding/om-settings.d.ts +25 -0
  306. package/dist/onboarding/om-settings.d.ts.map +1 -0
  307. package/dist/onboarding/om-settings.js +47 -0
  308. package/dist/onboarding/om-settings.js.map +1 -0
  309. package/dist/onboarding/packs.d.ts +46 -0
  310. package/dist/onboarding/packs.d.ts.map +1 -0
  311. package/dist/onboarding/packs.js +160 -0
  312. package/dist/onboarding/packs.js.map +1 -0
  313. package/dist/onboarding/settings.d.ts +338 -0
  314. package/dist/onboarding/settings.d.ts.map +1 -0
  315. package/dist/onboarding/settings.js +673 -0
  316. package/dist/onboarding/settings.js.map +1 -0
  317. package/dist/permissions.d.ts +55 -0
  318. package/dist/permissions.d.ts.map +1 -0
  319. package/dist/permissions.js +132 -0
  320. package/dist/permissions.js.map +1 -0
  321. package/dist/plugin.d.ts +81 -0
  322. package/dist/plugin.d.ts.map +1 -0
  323. package/dist/plugin.js +28 -0
  324. package/dist/plugin.js.map +1 -0
  325. package/dist/plugins/dependencies.d.ts +9 -0
  326. package/dist/plugins/dependencies.d.ts.map +1 -0
  327. package/dist/plugins/dependencies.js +88 -0
  328. package/dist/plugins/dependencies.js.map +1 -0
  329. package/dist/plugins/install.d.ts +21 -0
  330. package/dist/plugins/install.d.ts.map +1 -0
  331. package/dist/plugins/install.js +190 -0
  332. package/dist/plugins/install.js.map +1 -0
  333. package/dist/plugins/loader.d.ts +15 -0
  334. package/dist/plugins/loader.d.ts.map +1 -0
  335. package/dist/plugins/loader.js +206 -0
  336. package/dist/plugins/loader.js.map +1 -0
  337. package/dist/plugins/manager.d.ts +64 -0
  338. package/dist/plugins/manager.d.ts.map +1 -0
  339. package/dist/plugins/manager.js +384 -0
  340. package/dist/plugins/manager.js.map +1 -0
  341. package/dist/plugins/manifest.d.ts +14 -0
  342. package/dist/plugins/manifest.d.ts.map +1 -0
  343. package/dist/plugins/manifest.js +50 -0
  344. package/dist/plugins/manifest.js.map +1 -0
  345. package/dist/plugins/package-link.d.ts +3 -0
  346. package/dist/plugins/package-link.d.ts.map +1 -0
  347. package/dist/plugins/package-link.js +61 -0
  348. package/dist/plugins/package-link.js.map +1 -0
  349. package/dist/plugins/paths.d.ts +10 -0
  350. package/dist/plugins/paths.d.ts.map +1 -0
  351. package/dist/plugins/paths.js +25 -0
  352. package/dist/plugins/paths.js.map +1 -0
  353. package/dist/plugins/registry.d.ts +8 -0
  354. package/dist/plugins/registry.d.ts.map +1 -0
  355. package/dist/plugins/registry.js +112 -0
  356. package/dist/plugins/registry.js.map +1 -0
  357. package/dist/plugins/scaffold.d.ts +10 -0
  358. package/dist/plugins/scaffold.d.ts.map +1 -0
  359. package/dist/plugins/scaffold.js +116 -0
  360. package/dist/plugins/scaffold.js.map +1 -0
  361. package/dist/plugins/types.d.ts +45 -0
  362. package/dist/plugins/types.d.ts.map +1 -0
  363. package/dist/plugins/types.js +1 -0
  364. package/dist/processors/plan-rejection-abort.d.ts +12 -0
  365. package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
  366. package/dist/processors/plan-rejection-abort.js +54 -0
  367. package/dist/processors/plan-rejection-abort.js.map +1 -0
  368. package/dist/providers/amazon-bedrock-gateway.d.ts +47 -0
  369. package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
  370. package/dist/providers/amazon-bedrock-gateway.js +152 -0
  371. package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
  372. package/dist/providers/amazon-bedrock.d.ts +28 -0
  373. package/dist/providers/amazon-bedrock.d.ts.map +1 -0
  374. package/dist/providers/amazon-bedrock.js +83 -0
  375. package/dist/providers/amazon-bedrock.js.map +1 -0
  376. package/dist/providers/claude-max.d.ts +52 -0
  377. package/dist/providers/claude-max.d.ts.map +1 -0
  378. package/dist/providers/claude-max.js +171 -0
  379. package/dist/providers/claude-max.js.map +1 -0
  380. package/dist/providers/github-copilot.d.ts +60 -0
  381. package/dist/providers/github-copilot.d.ts.map +1 -0
  382. package/dist/providers/github-copilot.js +265 -0
  383. package/dist/providers/github-copilot.js.map +1 -0
  384. package/dist/providers/openai-codex.d.ts +72 -0
  385. package/dist/providers/openai-codex.d.ts.map +1 -0
  386. package/dist/providers/openai-codex.js +302 -0
  387. package/dist/providers/openai-codex.js.map +1 -0
  388. package/dist/providers/xai.d.ts +33 -0
  389. package/dist/providers/xai.d.ts.map +1 -0
  390. package/dist/providers/xai.js +70 -0
  391. package/dist/providers/xai.js.map +1 -0
  392. package/dist/schema.d.ts +192 -0
  393. package/dist/schema.d.ts.map +1 -0
  394. package/dist/schema.js +98 -0
  395. package/dist/schema.js.map +1 -0
  396. package/dist/theme-palette.d.ts +17 -0
  397. package/dist/theme-palette.d.ts.map +1 -0
  398. package/dist/theme-palette.js +21 -0
  399. package/dist/theme-palette.js.map +1 -0
  400. package/dist/tool-names.d.ts +73 -0
  401. package/dist/tool-names.d.ts.map +1 -0
  402. package/dist/tool-names.js +52 -0
  403. package/dist/tool-names.js.map +1 -0
  404. package/dist/tools/index.d.ts +6 -0
  405. package/dist/tools/index.d.ts.map +1 -0
  406. package/dist/tools/index.js +3 -0
  407. package/dist/tools/request-sandbox-access.d.ts +6 -0
  408. package/dist/tools/request-sandbox-access.d.ts.map +1 -0
  409. package/dist/tools/request-sandbox-access.js +79 -0
  410. package/dist/tools/request-sandbox-access.js.map +1 -0
  411. package/dist/tools/utils.d.ts +20 -0
  412. package/dist/tools/utils.d.ts.map +1 -0
  413. package/dist/tools/utils.js +32 -0
  414. package/dist/tools/utils.js.map +1 -0
  415. package/dist/tools/web-search.d.ts +35 -0
  416. package/dist/tools/web-search.d.ts.map +1 -0
  417. package/dist/tools/web-search.js +61 -0
  418. package/dist/tools/web-search.js.map +1 -0
  419. package/dist/utils/binaries.d.ts +7 -0
  420. package/dist/utils/binaries.d.ts.map +1 -0
  421. package/dist/utils/binaries.js +78 -0
  422. package/dist/utils/binaries.js.map +1 -0
  423. package/dist/utils/debug-log.d.ts +12 -0
  424. package/dist/utils/debug-log.d.ts.map +1 -0
  425. package/dist/utils/debug-log.js +59 -0
  426. package/dist/utils/debug-log.js.map +1 -0
  427. package/dist/utils/errors.d.ts +36 -0
  428. package/dist/utils/errors.d.ts.map +1 -0
  429. package/dist/utils/errors.js +172 -0
  430. package/dist/utils/errors.js.map +1 -0
  431. package/dist/utils/gateway-sync.d.ts +26 -0
  432. package/dist/utils/gateway-sync.d.ts.map +1 -0
  433. package/dist/utils/gateway-sync.js +61 -0
  434. package/dist/utils/gateway-sync.js.map +1 -0
  435. package/dist/utils/path-security.d.ts +2 -0
  436. package/dist/utils/path-security.d.ts.map +1 -0
  437. package/dist/utils/path-security.js +10 -0
  438. package/dist/utils/path-security.js.map +1 -0
  439. package/dist/utils/plan-diff.d.ts +25 -0
  440. package/dist/utils/plan-diff.d.ts.map +1 -0
  441. package/dist/utils/plan-diff.js +62 -0
  442. package/dist/utils/plan-diff.js.map +1 -0
  443. package/dist/utils/plans.d.ts +56 -0
  444. package/dist/utils/plans.d.ts.map +1 -0
  445. package/dist/utils/plans.js +117 -0
  446. package/dist/utils/plans.js.map +1 -0
  447. package/dist/utils/project.d.ts +160 -0
  448. package/dist/utils/project.d.ts.map +1 -0
  449. package/dist/utils/project.js +364 -0
  450. package/dist/utils/project.js.map +1 -0
  451. package/dist/utils/signals-pubsub.d.ts +41 -0
  452. package/dist/utils/signals-pubsub.d.ts.map +1 -0
  453. package/dist/utils/signals-pubsub.js +122 -0
  454. package/dist/utils/signals-pubsub.js.map +1 -0
  455. package/dist/utils/slash-command-loader.d.ts +52 -0
  456. package/dist/utils/slash-command-loader.d.ts.map +1 -0
  457. package/dist/utils/slash-command-loader.js +141 -0
  458. package/dist/utils/slash-command-loader.js.map +1 -0
  459. package/dist/utils/slash-command-processor.d.ts +14 -0
  460. package/dist/utils/slash-command-processor.d.ts.map +1 -0
  461. package/dist/utils/slash-command-processor.js +105 -0
  462. package/dist/utils/slash-command-processor.js.map +1 -0
  463. package/dist/utils/stdin-pipe.d.ts +33 -0
  464. package/dist/utils/stdin-pipe.d.ts.map +1 -0
  465. package/dist/utils/stdin-pipe.js +96 -0
  466. package/dist/utils/stdin-pipe.js.map +1 -0
  467. package/dist/utils/storage-factory.d.ts +50 -0
  468. package/dist/utils/storage-factory.d.ts.map +1 -0
  469. package/dist/utils/storage-factory.js +121 -0
  470. package/dist/utils/storage-factory.js.map +1 -0
  471. package/dist/utils/storage-maintenance.d.ts +103 -0
  472. package/dist/utils/storage-maintenance.d.ts.map +1 -0
  473. package/dist/utils/storage-maintenance.js +274 -0
  474. package/dist/utils/storage-maintenance.js.map +1 -0
  475. package/dist/utils/thread-lock.d.ts +26 -0
  476. package/dist/utils/thread-lock.d.ts.map +1 -0
  477. package/dist/utils/thread-lock.js +112 -0
  478. package/dist/utils/thread-lock.js.map +1 -0
  479. package/dist/utils/token-estimator.d.ts +3 -0
  480. package/dist/utils/token-estimator.d.ts.map +1 -0
  481. package/dist/utils/token-estimator.js +21 -0
  482. package/dist/utils/token-estimator.js.map +1 -0
  483. package/dist/utils/update-check.d.ts +101 -0
  484. package/dist/utils/update-check.d.ts.map +1 -0
  485. package/dist/utils/update-check.js +383 -0
  486. package/dist/utils/update-check.js.map +1 -0
  487. package/dist/voice/stt-registry.d.ts +64 -0
  488. package/dist/voice/stt-registry.d.ts.map +1 -0
  489. package/dist/voice/stt-registry.js +144 -0
  490. package/dist/voice/stt-registry.js.map +1 -0
  491. package/package.json +96 -0
package/LICENSE.md ADDED
@@ -0,0 +1,30 @@
1
+ Portions of this software are licensed as follows:
2
+
3
+ - All content that resides under any directory named "ee/" within this
4
+ repository, including but not limited to:
5
+ - `packages/core/src/auth/ee/`
6
+ - `packages/server/src/server/auth/ee/`
7
+ is licensed under the license defined in `ee/LICENSE`.
8
+
9
+ - All third-party components incorporated into the Mastra Software are
10
+ licensed under the original license provided by the owner of the
11
+ applicable component.
12
+
13
+ - Content outside of the above-mentioned directories or restrictions is
14
+ available under the "Apache License 2.0" as defined below.
15
+
16
+ # Apache License 2.0
17
+
18
+ Copyright (c) 2025 Kepler Software, Inc.
19
+
20
+ Licensed under the Apache License, Version 2.0 (the "License");
21
+ you may not use this file except in compliance with the License.
22
+ You may obtain a copy of the License at
23
+
24
+ http://www.apache.org/licenses/LICENSE-2.0
25
+
26
+ Unless required by applicable law or agreed to in writing, software
27
+ distributed under the License is distributed on an "AS IS" BASIS,
28
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29
+ See the License for the specific language governing permissions and
30
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # @mastra/code-sdk
2
+
3
+ The agent core behind [Mastra Code](https://mastra.ai) — everything except the terminal UI. Use it to build your own UIs and surfaces (web apps, editors, bots) on top of the Mastra Code coding agent.
4
+
5
+ The published [`mastracode`](https://www.npmjs.com/package/mastracode) CLI/TUI and the Mastra Code web surface are both built on this SDK.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install @mastra/code-sdk
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ Mount the Mastra Code agent controller on a Mastra instance:
16
+
17
+ ```ts
18
+ import { mountAgentControllerOnMastra } from '@mastra/code-sdk';
19
+
20
+ // Creates a Mastra instance that hosts the Mastra Code agent controller
21
+ // (thread management, modes, tools, memory) and starts its workers.
22
+ const { mastra, controller } = await mountAgentControllerOnMastra({
23
+ cwd: process.cwd(),
24
+ });
25
+ ```
26
+
27
+ To construct the `Mastra` instance yourself (e.g. in a deployable `mastra` entry file), use `prepareAgentControllerMount`:
28
+
29
+ ```ts
30
+ import { Mastra } from '@mastra/core/mastra';
31
+ import { prepareAgentControllerMount } from '@mastra/code-sdk';
32
+
33
+ const prepared = await prepareAgentControllerMount({ cwd: process.cwd() });
34
+
35
+ export const mastra = new Mastra(prepared.mastraArgs);
36
+
37
+ await prepared.finalize();
38
+ ```
39
+
40
+ ### Add input processors
41
+
42
+ Embedding surfaces can prepend stateless input processors without replacing Mastra Code's required policy and compatibility processors:
43
+
44
+ ```ts
45
+ const phaseProcessor = {
46
+ id: 'current-phase',
47
+ async processInputStep({ messages }) {
48
+ await reconcileCompletedTools(messages);
49
+ },
50
+ };
51
+
52
+ const prepared = await prepareAgentControllerMount({
53
+ cwd: process.cwd(),
54
+ inputProcessors: [phaseProcessor],
55
+ });
56
+ ```
57
+
58
+ Configured processors run before Mastra Code's built-in input processors. Keep processor instances stateless because the mounted agent shares them across sessions and runs.
59
+
60
+ Deep modules are available as subpath imports, e.g.:
61
+
62
+ ```ts
63
+ import { loadSettings } from '@mastra/code-sdk/onboarding/settings';
64
+ ```
65
+
66
+ > The subpath API surface is still evolving and may change between minor releases while the package is pre-1.0.
67
+
68
+ ## License
69
+
70
+ Apache-2.0
@@ -0,0 +1,35 @@
1
+ import type { Agent, AgentSideConnection, InitializeRequest, InitializeResponse, NewSessionRequest, NewSessionResponse, PromptRequest, PromptResponse, CancelNotification, ContentBlock } from '@agentclientprotocol/sdk';
2
+ import type { AgentController, AgentControllerMode, Session } from '@mastra/core/agent-controller';
3
+ /**
4
+ * ACP Agent implementation that wraps a mastracode Controller.
5
+ * Each instance represents one ACP connection from a client.
6
+ */
7
+ export declare class MastraCodeAcpAgent implements Agent {
8
+ private readonly connection;
9
+ private readonly controller;
10
+ private readonly session;
11
+ private readonly modes;
12
+ private readonly unsubscribeSessionEvents;
13
+ private readonly sessionMap;
14
+ private currentPromptState;
15
+ private promptMutex;
16
+ private getThreadIdOrThrow;
17
+ constructor(connection: AgentSideConnection, controller: AgentController, session: Session, modes: AgentControllerMode[]);
18
+ dispose(): void;
19
+ initialize(_request: InitializeRequest): Promise<InitializeResponse>;
20
+ authenticate(): Promise<void>;
21
+ newSession(_request: NewSessionRequest): Promise<NewSessionResponse>;
22
+ prompt(request: PromptRequest): Promise<PromptResponse>;
23
+ cancel(_notification: CancelNotification): Promise<void>;
24
+ setSessionMode(params: {
25
+ sessionId: string;
26
+ modeId: string;
27
+ }): Promise<void>;
28
+ unstable_setSessionModel(params: {
29
+ sessionId: string;
30
+ modelId: string;
31
+ }): Promise<void>;
32
+ }
33
+ export declare function extractTextFromContentBlocks(blocks: ContentBlock[]): string;
34
+ export declare function mapStopReason(reason: 'complete' | 'aborted' | 'error' | 'suspended'): 'end_turn' | 'cancelled' | 'max_tokens' | 'max_turn_requests' | 'refusal';
35
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/acp/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAInG;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,KAAK;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAoC;IAEvD,OAAO,CAAC,kBAAkB;gBASxB,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,mBAAmB,EAAE;IAa9B,OAAO,IAAI,IAAI;IAIT,UAAU,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAcpE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,UAAU,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0CpE,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAsEvD,MAAM,CAAC,aAAa,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,cAAc,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5E,wBAAwB,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAK9F;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAY3E;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GACrD,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,mBAAmB,GAAG,SAAS,CAW3E"}
@@ -0,0 +1,161 @@
1
+ import { handleAgentControllerEvent } from "./event-mapper.js";
2
+ import { PROTOCOL_VERSION } from "@agentclientprotocol/sdk";
3
+ //#region src/acp/agent.ts
4
+ /**
5
+ * ACP Agent implementation that wraps a mastracode Controller.
6
+ * Each instance represents one ACP connection from a client.
7
+ */
8
+ var MastraCodeAcpAgent = class {
9
+ connection;
10
+ controller;
11
+ session;
12
+ modes;
13
+ unsubscribeSessionEvents;
14
+ sessionMap = /* @__PURE__ */ new Map();
15
+ currentPromptState = null;
16
+ promptMutex = Promise.resolve();
17
+ getThreadIdOrThrow(sessionId) {
18
+ const threadId = this.sessionMap.get(sessionId);
19
+ if (!threadId) throw new Error(`Unknown ACP sessionId: ${sessionId}`);
20
+ return threadId;
21
+ }
22
+ constructor(connection, controller, session, modes) {
23
+ this.connection = connection;
24
+ this.controller = controller;
25
+ this.session = session;
26
+ this.modes = modes;
27
+ this.unsubscribeSessionEvents = this.session.subscribe((event) => {
28
+ handleAgentControllerEvent(event, this.currentPromptState, this.connection, this.session);
29
+ });
30
+ }
31
+ dispose() {
32
+ this.unsubscribeSessionEvents();
33
+ }
34
+ async initialize(_request) {
35
+ return {
36
+ protocolVersion: PROTOCOL_VERSION,
37
+ agentInfo: {
38
+ name: "mastracode",
39
+ title: "Mastra Code",
40
+ version: "0.1.0"
41
+ },
42
+ agentCapabilities: { loadSession: false }
43
+ };
44
+ }
45
+ async authenticate() {}
46
+ async newSession(_request) {
47
+ const thread = await this.session.thread.create();
48
+ const sessionId = thread.id;
49
+ this.sessionMap.set(sessionId, thread.id);
50
+ await this.session.thread.switch({ threadId: thread.id });
51
+ const availableModes = this.modes.map((m) => ({
52
+ id: m.id,
53
+ name: m.name ?? m.id
54
+ }));
55
+ const currentModeId = this.session.mode.get();
56
+ let models;
57
+ try {
58
+ const availableModels = await this.controller.listAvailableModels();
59
+ models = {
60
+ currentModelId: this.session.model.get() ?? "",
61
+ availableModels: availableModels.map((m) => ({
62
+ modelId: m.id,
63
+ name: m.modelName
64
+ }))
65
+ };
66
+ } catch {}
67
+ return {
68
+ sessionId,
69
+ modes: {
70
+ currentModeId,
71
+ availableModes
72
+ },
73
+ models
74
+ };
75
+ }
76
+ async prompt(request) {
77
+ const { sessionId, prompt: contentBlocks } = request;
78
+ const text = extractTextFromContentBlocks(contentBlocks);
79
+ const threadId = this.getThreadIdOrThrow(sessionId);
80
+ const prevMutex = this.promptMutex;
81
+ let resolveMutex;
82
+ this.promptMutex = new Promise((resolve) => {
83
+ resolveMutex = resolve;
84
+ });
85
+ await prevMutex;
86
+ try {
87
+ await this.session.thread.switch({ threadId });
88
+ const result = new Promise((resolve) => {
89
+ const usage = {
90
+ promptTokens: 0,
91
+ completionTokens: 0,
92
+ totalTokens: 0
93
+ };
94
+ this.currentPromptState = {
95
+ sessionId,
96
+ lastTextLength: 0,
97
+ usage,
98
+ resolve: (reason) => {
99
+ resolve({
100
+ reason,
101
+ usage
102
+ });
103
+ this.currentPromptState = null;
104
+ }
105
+ };
106
+ });
107
+ try {
108
+ await this.session.sendMessage({ content: text });
109
+ } catch (error) {
110
+ this.currentPromptState = null;
111
+ throw error;
112
+ }
113
+ const { reason, usage } = await result;
114
+ return {
115
+ stopReason: mapStopReason(reason),
116
+ usage: {
117
+ inputTokens: usage.promptTokens,
118
+ outputTokens: usage.completionTokens,
119
+ totalTokens: usage.totalTokens,
120
+ thoughtTokens: usage.reasoningTokens,
121
+ cachedReadTokens: usage.cachedInputTokens,
122
+ cachedWriteTokens: usage.cacheCreationInputTokens
123
+ }
124
+ };
125
+ } finally {
126
+ resolveMutex();
127
+ }
128
+ }
129
+ async cancel(_notification) {
130
+ this.session.abort();
131
+ }
132
+ async setSessionMode(params) {
133
+ const threadId = this.getThreadIdOrThrow(params.sessionId);
134
+ await this.session.thread.switch({ threadId });
135
+ this.session.mode.set({ modeId: params.modeId });
136
+ }
137
+ async unstable_setSessionModel(params) {
138
+ const threadId = this.getThreadIdOrThrow(params.sessionId);
139
+ await this.session.thread.switch({ threadId });
140
+ this.session.model.set({ modelId: params.modelId });
141
+ }
142
+ };
143
+ function extractTextFromContentBlocks(blocks) {
144
+ const parts = [];
145
+ for (const block of blocks) if (block.type === "text") parts.push(block.text);
146
+ else if (block.type === "resource_link") parts.push(`[resource: ${block.uri}]`);
147
+ else if (block.type === "resource") parts.push(`[resource: ${block.resource.uri}]`);
148
+ return parts.join("\n");
149
+ }
150
+ function mapStopReason(reason) {
151
+ switch (reason) {
152
+ case "complete": return "end_turn";
153
+ case "aborted": return "cancelled";
154
+ case "error": return "end_turn";
155
+ case "suspended": return "end_turn";
156
+ }
157
+ }
158
+ //#endregion
159
+ export { MastraCodeAcpAgent, extractTextFromContentBlocks, mapStopReason };
160
+
161
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","names":[],"sources":["../../src/acp/agent.ts"],"sourcesContent":["import type {\n Agent,\n AgentSideConnection,\n InitializeRequest,\n InitializeResponse,\n NewSessionRequest,\n NewSessionResponse,\n PromptRequest,\n PromptResponse,\n CancelNotification,\n ContentBlock,\n} from '@agentclientprotocol/sdk';\nimport { PROTOCOL_VERSION } from '@agentclientprotocol/sdk';\nimport type { AgentController, AgentControllerMode, Session } from '@mastra/core/agent-controller';\nimport { handleAgentControllerEvent } from './event-mapper.js';\nimport type { PromptState } from './event-mapper.js';\n\n/**\n * ACP Agent implementation that wraps a mastracode Controller.\n * Each instance represents one ACP connection from a client.\n */\nexport class MastraCodeAcpAgent implements Agent {\n private readonly connection: AgentSideConnection;\n private readonly controller: AgentController;\n private readonly session: Session;\n private readonly modes: AgentControllerMode[];\n private readonly unsubscribeSessionEvents: () => void;\n private readonly sessionMap = new Map<string, string>(); // sessionId -> threadId\n private currentPromptState: PromptState | null = null;\n private promptMutex: Promise<void> = Promise.resolve();\n\n private getThreadIdOrThrow(sessionId: string): string {\n const threadId = this.sessionMap.get(sessionId);\n if (!threadId) {\n throw new Error(`Unknown ACP sessionId: ${sessionId}`);\n }\n return threadId;\n }\n\n constructor(\n connection: AgentSideConnection,\n controller: AgentController,\n session: Session,\n modes: AgentControllerMode[],\n ) {\n this.connection = connection;\n this.controller = controller;\n this.session = session;\n this.modes = modes;\n\n // Register persistent event listener\n this.unsubscribeSessionEvents = this.session.subscribe(event => {\n handleAgentControllerEvent(event, this.currentPromptState, this.connection, this.session);\n });\n }\n\n dispose(): void {\n this.unsubscribeSessionEvents();\n }\n\n async initialize(_request: InitializeRequest): Promise<InitializeResponse> {\n return {\n protocolVersion: PROTOCOL_VERSION,\n agentInfo: {\n name: 'mastracode',\n title: 'Mastra Code',\n version: '0.1.0',\n },\n agentCapabilities: {\n loadSession: false,\n },\n };\n }\n\n async authenticate(): Promise<void> {\n // No-op: mastracode handles its own auth\n }\n\n async newSession(_request: NewSessionRequest): Promise<NewSessionResponse> {\n const thread = await this.session.thread.create();\n const sessionId = thread.id;\n this.sessionMap.set(sessionId, thread.id);\n\n // Switch to the new thread\n await this.session.thread.switch({ threadId: thread.id });\n\n // Build modes list from constructor param\n const availableModes = this.modes.map((m: AgentControllerMode) => ({\n id: m.id,\n name: m.name ?? m.id,\n }));\n\n const currentModeId = this.session.mode.get();\n\n // Build models list (best-effort)\n let models: NewSessionResponse['models'];\n try {\n const availableModels = await this.controller.listAvailableModels();\n const currentModelId = this.session.model.get();\n models = {\n currentModelId: currentModelId ?? '',\n availableModels: availableModels.map(m => ({\n modelId: m.id,\n name: m.modelName,\n })),\n };\n } catch {\n // Model listing may fail if no providers are configured\n }\n\n return {\n sessionId,\n modes: {\n currentModeId,\n availableModes,\n },\n models,\n };\n }\n\n async prompt(request: PromptRequest): Promise<PromptResponse> {\n const { sessionId, prompt: contentBlocks } = request;\n\n // Extract text from content blocks\n const text = extractTextFromContentBlocks(contentBlocks);\n\n const threadId = this.getThreadIdOrThrow(sessionId);\n\n // Serialize prompts via mutex\n const prevMutex = this.promptMutex;\n let resolveMutex: () => void;\n this.promptMutex = new Promise<void>(resolve => {\n resolveMutex = resolve;\n });\n\n await prevMutex;\n\n try {\n // Ensure we're on the right thread while prompts are serialized\n await this.session.thread.switch({ threadId });\n\n // Create prompt state that will be resolved when agent_end fires\n const result = new Promise<{\n reason: 'complete' | 'aborted' | 'error' | 'suspended';\n usage: PromptState['usage'];\n }>(resolve => {\n const usage: PromptState['usage'] = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n };\n\n this.currentPromptState = {\n sessionId,\n lastTextLength: 0,\n usage,\n resolve: reason => {\n resolve({ reason, usage });\n this.currentPromptState = null;\n },\n };\n });\n\n // Send the message to the session\n try {\n await this.session.sendMessage({ content: text });\n } catch (error) {\n this.currentPromptState = null;\n throw error;\n }\n\n // Wait for agent_end to resolve\n const { reason, usage } = await result;\n\n return {\n stopReason: mapStopReason(reason),\n usage: {\n inputTokens: usage.promptTokens,\n outputTokens: usage.completionTokens,\n totalTokens: usage.totalTokens,\n thoughtTokens: usage.reasoningTokens,\n cachedReadTokens: usage.cachedInputTokens,\n cachedWriteTokens: usage.cacheCreationInputTokens,\n },\n };\n } finally {\n resolveMutex!();\n }\n }\n\n async cancel(_notification: CancelNotification): Promise<void> {\n this.session.abort();\n }\n\n async setSessionMode(params: { sessionId: string; modeId: string }): Promise<void> {\n const threadId = this.getThreadIdOrThrow(params.sessionId);\n await this.session.thread.switch({ threadId });\n this.session.mode.set({ modeId: params.modeId });\n }\n\n async unstable_setSessionModel(params: { sessionId: string; modelId: string }): Promise<void> {\n const threadId = this.getThreadIdOrThrow(params.sessionId);\n await this.session.thread.switch({ threadId });\n this.session.model.set({ modelId: params.modelId });\n }\n}\n\nexport function extractTextFromContentBlocks(blocks: ContentBlock[]): string {\n const parts: string[] = [];\n for (const block of blocks) {\n if (block.type === 'text') {\n parts.push(block.text);\n } else if (block.type === 'resource_link') {\n parts.push(`[resource: ${block.uri}]`);\n } else if (block.type === 'resource') {\n parts.push(`[resource: ${block.resource.uri}]`);\n }\n }\n return parts.join('\\n');\n}\n\nexport function mapStopReason(\n reason: 'complete' | 'aborted' | 'error' | 'suspended',\n): 'end_turn' | 'cancelled' | 'max_tokens' | 'max_turn_requests' | 'refusal' {\n switch (reason) {\n case 'complete':\n return 'end_turn';\n case 'aborted':\n return 'cancelled';\n case 'error':\n return 'end_turn';\n case 'suspended':\n return 'end_turn';\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { AgentSideConnection } from '@agentclientprotocol/sdk';
2
+ import type { AgentControllerEvent, Session, TokenUsage } from '@mastra/core/agent-controller';
3
+ /**
4
+ * Enable or disable automatic tool approval (set via --dangerous-auto-approve CLI flag).
5
+ */
6
+ export declare function setAutoApprove(value: boolean): void;
7
+ /**
8
+ * Accumulated state for an active prompt turn.
9
+ */
10
+ export interface PromptState {
11
+ sessionId: string;
12
+ lastTextLength: number;
13
+ usage: TokenUsage;
14
+ resolve: (reason: 'complete' | 'aborted' | 'error' | 'suspended') => void;
15
+ }
16
+ /**
17
+ * Translate an AgentControllerEvent into an ACP SessionNotification and send it
18
+ * via the provided connection. Returns null for events that don't produce
19
+ * a session update.
20
+ */
21
+ export declare function handleAgentControllerEvent(event: AgentControllerEvent, state: PromptState | null, connection: AgentSideConnection, session: Session): void;
22
+ //# sourceMappingURL=event-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-mapper.d.ts","sourceRoot":"","sources":["../../src/acp/event-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiD,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACnH,OAAO,KAAK,EAAE,oBAAoB,EAAmB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAyBhH;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEnD;AA4BD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,KAAK,IAAI,CAAC;CAC3E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE,OAAO,GACf,IAAI,CAkFN"}
@@ -0,0 +1,214 @@
1
+ import { mastraDBMessageToSignal } from "@mastra/core/signals";
2
+ //#region src/acp/event-mapper.ts
3
+ /** Concatenate the text of all `text` parts on a DB-native assistant message. */
4
+ function getMessageText(message) {
5
+ const content = message.content;
6
+ if (typeof content === "string" || !content?.parts) return "";
7
+ return content.parts.filter((part) => part.type === "text").map((part) => part.text).join("");
8
+ }
9
+ function getSignalText(message) {
10
+ const contents = mastraDBMessageToSignal(message).contents;
11
+ if (typeof contents === "string") return contents;
12
+ if (!Array.isArray(contents)) return "";
13
+ return contents.filter((part) => part.type === "text").map((part) => part.text).join("\n");
14
+ }
15
+ let autoApprove = false;
16
+ /**
17
+ * Enable or disable automatic tool approval (set via --dangerous-auto-approve CLI flag).
18
+ */
19
+ function setAutoApprove(value) {
20
+ autoApprove = value;
21
+ }
22
+ /**
23
+ * Map a mastracode tool name to an ACP ToolKind.
24
+ */
25
+ function mapToolKind(toolName) {
26
+ const name = toolName.toLowerCase();
27
+ if (name.includes("edit") || name.includes("write") || name.includes("replace") || name.includes("patch")) return "edit";
28
+ if (name.includes("read") || name.includes("view") || name.includes("list") || name.includes("find")) return "read";
29
+ if (name.includes("delete") || name.includes("remove")) return "delete";
30
+ if (name.includes("search") || name.includes("grep") || name.includes("query")) return "search";
31
+ if (name.includes("execute") || name.includes("run") || name.includes("command") || name.includes("shell")) return "execute";
32
+ if (name.includes("fetch") || name.includes("curl") || name.includes("http") || name.includes("browse") || name.includes("navigate")) return "fetch";
33
+ if (name.includes("think") || name.includes("reason")) return "think";
34
+ return "other";
35
+ }
36
+ /**
37
+ * Translate an AgentControllerEvent into an ACP SessionNotification and send it
38
+ * via the provided connection. Returns null for events that don't produce
39
+ * a session update.
40
+ */
41
+ function handleAgentControllerEvent(event, state, connection, session) {
42
+ if (!state) return;
43
+ switch (event.type) {
44
+ case "agent_start":
45
+ state.lastTextLength = 0;
46
+ break;
47
+ case "message_start": {
48
+ if (event.message.role !== "signal") break;
49
+ const text = getSignalText(event.message);
50
+ if (text) sendUpdate(connection, state.sessionId, {
51
+ sessionUpdate: "agent_message_chunk",
52
+ content: {
53
+ type: "text",
54
+ text
55
+ }
56
+ });
57
+ break;
58
+ }
59
+ case "message_update": {
60
+ if (event.message.role !== "assistant") break;
61
+ const fullText = getMessageText(event.message);
62
+ if (fullText.length > state.lastTextLength) {
63
+ const delta = fullText.slice(state.lastTextLength);
64
+ state.lastTextLength = fullText.length;
65
+ sendUpdate(connection, state.sessionId, {
66
+ sessionUpdate: "agent_message_chunk",
67
+ content: {
68
+ type: "text",
69
+ text: delta
70
+ }
71
+ });
72
+ }
73
+ break;
74
+ }
75
+ case "message_end":
76
+ if (event.message.role === "assistant") state.lastTextLength = 0;
77
+ break;
78
+ case "tool_start":
79
+ sendUpdate(connection, state.sessionId, {
80
+ sessionUpdate: "tool_call",
81
+ toolCallId: event.toolCallId,
82
+ title: event.toolName,
83
+ kind: mapToolKind(event.toolName),
84
+ status: "in_progress",
85
+ rawInput: JSON.stringify(event.args)
86
+ });
87
+ break;
88
+ case "tool_end":
89
+ sendUpdate(connection, state.sessionId, {
90
+ sessionUpdate: "tool_call_update",
91
+ toolCallId: event.toolCallId,
92
+ status: event.isError ? "failed" : "completed",
93
+ rawOutput: typeof event.result === "string" ? event.result : JSON.stringify(event.result)
94
+ });
95
+ break;
96
+ case "tool_approval_required":
97
+ handleToolApproval(state, connection, session, event).catch((err) => {
98
+ process.stderr.write(`[acp] handleToolApproval error: ${err}\n`);
99
+ });
100
+ break;
101
+ case "tool_suspended":
102
+ handleToolSuspended(state, connection, session, event).catch((err) => {
103
+ process.stderr.write(`[acp] handleToolSuspended error: ${err}\n`);
104
+ });
105
+ break;
106
+ case "usage_update":
107
+ accumulateUsage(state.usage, event.usage);
108
+ break;
109
+ case "agent_end":
110
+ state.resolve(event.reason ?? "complete");
111
+ break;
112
+ default: break;
113
+ }
114
+ }
115
+ function sendUpdate(connection, sessionId, update) {
116
+ connection.sessionUpdate({
117
+ sessionId,
118
+ update
119
+ }).catch((err) => {
120
+ process.stderr.write(`[acp] sessionUpdate error: ${err}\n`);
121
+ });
122
+ }
123
+ async function handleToolApproval(state, connection, session, event) {
124
+ if (autoApprove) {
125
+ session.respondToToolApproval({ decision: "approve" });
126
+ return;
127
+ }
128
+ const req = {
129
+ sessionId: state.sessionId,
130
+ toolCall: {
131
+ toolCallId: event.toolCallId,
132
+ title: event.toolName,
133
+ rawInput: JSON.stringify(event.args)
134
+ },
135
+ options: [{
136
+ optionId: "approve",
137
+ name: "Allow",
138
+ kind: "allow_once"
139
+ }, {
140
+ optionId: "reject",
141
+ name: "Reject",
142
+ kind: "reject_once"
143
+ }]
144
+ };
145
+ try {
146
+ const resp = await connection.requestPermission(req);
147
+ if (resp.outcome.outcome === "selected") {
148
+ const decision = resp.outcome.optionId === "approve" ? "approve" : "decline";
149
+ session.respondToToolApproval({ decision });
150
+ } else session.respondToToolApproval({ decision: "decline" });
151
+ } catch (err) {
152
+ process.stderr.write(`[acp] requestPermission error: ${err}\n`);
153
+ session.respondToToolApproval({ decision: "decline" });
154
+ }
155
+ }
156
+ async function handleToolSuspended(state, connection, session, event) {
157
+ const { toolCallId, toolName, args, suspendPayload } = event;
158
+ if (toolName === "request_access" || suspendPayload?.kind === "sandbox_access_request") {
159
+ session.respondToToolSuspension({
160
+ toolCallId,
161
+ resumeData: "Yes"
162
+ });
163
+ return;
164
+ }
165
+ if (toolName === "submit_plan") {
166
+ const req = {
167
+ sessionId: state.sessionId,
168
+ toolCall: {
169
+ toolCallId,
170
+ title: toolName,
171
+ rawInput: JSON.stringify(args)
172
+ },
173
+ options: [{
174
+ optionId: "approve",
175
+ name: "Approve Plan",
176
+ kind: "allow_once"
177
+ }, {
178
+ optionId: "reject",
179
+ name: "Reject Plan",
180
+ kind: "reject_once"
181
+ }]
182
+ };
183
+ try {
184
+ const resp = await connection.requestPermission(req);
185
+ const action = resp.outcome.outcome === "selected" && resp.outcome.optionId === "approve" ? "approved" : "rejected";
186
+ session.respondToToolSuspension({
187
+ toolCallId,
188
+ resumeData: { action }
189
+ });
190
+ } catch {
191
+ session.respondToToolSuspension({
192
+ toolCallId,
193
+ resumeData: { action: "rejected" }
194
+ });
195
+ }
196
+ return;
197
+ }
198
+ session.respondToToolSuspension({
199
+ toolCallId,
200
+ resumeData: "Proceed with your best judgment. Do not ask further questions."
201
+ });
202
+ }
203
+ function accumulateUsage(target, usage) {
204
+ target.promptTokens += usage.promptTokens;
205
+ target.completionTokens += usage.completionTokens;
206
+ target.totalTokens += usage.totalTokens;
207
+ if (usage.reasoningTokens) target.reasoningTokens = (target.reasoningTokens ?? 0) + usage.reasoningTokens;
208
+ if (usage.cachedInputTokens) target.cachedInputTokens = (target.cachedInputTokens ?? 0) + usage.cachedInputTokens;
209
+ if (usage.cacheCreationInputTokens) target.cacheCreationInputTokens = (target.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;
210
+ }
211
+ //#endregion
212
+ export { handleAgentControllerEvent, setAutoApprove };
213
+
214
+ //# sourceMappingURL=event-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-mapper.js","names":[],"sources":["../../src/acp/event-mapper.ts"],"sourcesContent":["import type { SessionNotification, RequestPermissionRequest, AgentSideConnection } from '@agentclientprotocol/sdk';\nimport type { AgentControllerEvent, MastraDBMessage, Session, TokenUsage } from '@mastra/core/agent-controller';\nimport { mastraDBMessageToSignal } from '@mastra/core/signals';\n\n/** Concatenate the text of all `text` parts on a DB-native assistant message. */\nfunction getMessageText(message: MastraDBMessage): string {\n const content = message.content;\n if (typeof content === 'string' || !content?.parts) return '';\n return content.parts\n .filter((part): part is Extract<(typeof content.parts)[number], { type: 'text' }> => part.type === 'text')\n .map(part => part.text)\n .join('');\n}\n\nfunction getSignalText(message: MastraDBMessage): string {\n const contents = mastraDBMessageToSignal(message).contents;\n if (typeof contents === 'string') return contents;\n if (!Array.isArray(contents)) return '';\n return contents\n .filter((part): part is Extract<(typeof contents)[number], { type: 'text' }> => part.type === 'text')\n .map(part => part.text)\n .join('\\n');\n}\n\nlet autoApprove = false;\n\n/**\n * Enable or disable automatic tool approval (set via --dangerous-auto-approve CLI flag).\n */\nexport function setAutoApprove(value: boolean): void {\n autoApprove = value;\n}\n\n/**\n * Map a mastracode tool name to an ACP ToolKind.\n */\nfunction mapToolKind(\n toolName: string,\n): 'read' | 'edit' | 'delete' | 'move' | 'search' | 'execute' | 'think' | 'fetch' | 'other' {\n const name = toolName.toLowerCase();\n if (name.includes('edit') || name.includes('write') || name.includes('replace') || name.includes('patch'))\n return 'edit';\n if (name.includes('read') || name.includes('view') || name.includes('list') || name.includes('find')) return 'read';\n if (name.includes('delete') || name.includes('remove')) return 'delete';\n if (name.includes('search') || name.includes('grep') || name.includes('query')) return 'search';\n if (name.includes('execute') || name.includes('run') || name.includes('command') || name.includes('shell'))\n return 'execute';\n if (\n name.includes('fetch') ||\n name.includes('curl') ||\n name.includes('http') ||\n name.includes('browse') ||\n name.includes('navigate')\n )\n return 'fetch';\n if (name.includes('think') || name.includes('reason')) return 'think';\n return 'other';\n}\n\n/**\n * Accumulated state for an active prompt turn.\n */\nexport interface PromptState {\n sessionId: string;\n lastTextLength: number;\n usage: TokenUsage;\n resolve: (reason: 'complete' | 'aborted' | 'error' | 'suspended') => void;\n}\n\n/**\n * Translate an AgentControllerEvent into an ACP SessionNotification and send it\n * via the provided connection. Returns null for events that don't produce\n * a session update.\n */\nexport function handleAgentControllerEvent(\n event: AgentControllerEvent,\n state: PromptState | null,\n connection: AgentSideConnection,\n session: Session,\n): void {\n if (!state) return;\n\n switch (event.type) {\n case 'agent_start':\n state.lastTextLength = 0;\n break;\n\n case 'message_start': {\n if (event.message.role !== 'signal') break;\n const text = getSignalText(event.message);\n if (text) {\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'agent_message_chunk',\n content: { type: 'text', text },\n });\n }\n break;\n }\n\n case 'message_update': {\n if (event.message.role !== 'assistant') break;\n const fullText = getMessageText(event.message);\n if (fullText.length > state.lastTextLength) {\n const delta = fullText.slice(state.lastTextLength);\n state.lastTextLength = fullText.length;\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'agent_message_chunk',\n content: { type: 'text', text: delta },\n });\n }\n break;\n }\n\n case 'message_end':\n if (event.message.role === 'assistant') state.lastTextLength = 0;\n break;\n\n case 'tool_start':\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'tool_call',\n toolCallId: event.toolCallId,\n title: event.toolName,\n kind: mapToolKind(event.toolName),\n status: 'in_progress',\n rawInput: JSON.stringify(event.args),\n });\n break;\n\n case 'tool_end':\n sendUpdate(connection, state.sessionId, {\n sessionUpdate: 'tool_call_update',\n toolCallId: event.toolCallId,\n status: event.isError ? 'failed' : 'completed',\n rawOutput: typeof event.result === 'string' ? event.result : JSON.stringify(event.result),\n });\n break;\n\n case 'tool_approval_required':\n void handleToolApproval(state, connection, session, event).catch(err => {\n process.stderr.write(`[acp] handleToolApproval error: ${err}\\n`);\n });\n break;\n\n case 'tool_suspended':\n void handleToolSuspended(state, connection, session, event).catch(err => {\n process.stderr.write(`[acp] handleToolSuspended error: ${err}\\n`);\n });\n break;\n\n case 'usage_update':\n accumulateUsage(state.usage, event.usage);\n break;\n\n case 'agent_end':\n state.resolve(event.reason ?? 'complete');\n break;\n\n // Ignored in v1: om_*, subagent_*, workspace_*, task_updated, etc.\n default:\n break;\n }\n}\n\nfunction sendUpdate(connection: AgentSideConnection, sessionId: string, update: SessionNotification['update']): void {\n connection.sessionUpdate({ sessionId, update }).catch(err => {\n process.stderr.write(`[acp] sessionUpdate error: ${err}\\n`);\n });\n}\n\nasync function handleToolApproval(\n state: PromptState,\n connection: AgentSideConnection,\n session: Session,\n event: Extract<AgentControllerEvent, { type: 'tool_approval_required' }>,\n): Promise<void> {\n // Auto-approve if --dangerous-auto-approve flag is set\n if (autoApprove) {\n session.respondToToolApproval({ decision: 'approve' });\n return;\n }\n\n const req: RequestPermissionRequest = {\n sessionId: state.sessionId,\n toolCall: {\n toolCallId: event.toolCallId,\n title: event.toolName,\n rawInput: JSON.stringify(event.args),\n },\n options: [\n { optionId: 'approve', name: 'Allow', kind: 'allow_once' },\n { optionId: 'reject', name: 'Reject', kind: 'reject_once' },\n ],\n };\n\n try {\n const resp = await connection.requestPermission(req);\n if (resp.outcome.outcome === 'selected') {\n const decision = resp.outcome.optionId === 'approve' ? 'approve' : 'decline';\n session.respondToToolApproval({ decision });\n } else {\n session.respondToToolApproval({ decision: 'decline' });\n }\n } catch (err) {\n process.stderr.write(`[acp] requestPermission error: ${err}\\n`);\n session.respondToToolApproval({ decision: 'decline' });\n }\n}\n\nasync function handleToolSuspended(\n state: PromptState,\n connection: AgentSideConnection,\n session: Session,\n event: Extract<AgentControllerEvent, { type: 'tool_suspended' }>,\n): Promise<void> {\n const { toolCallId, toolName, args, suspendPayload } = event;\n\n // Auto-resolve certain suspensions (mirrors headless.ts autoResolve)\n if (toolName === 'request_access' || (suspendPayload as any)?.kind === 'sandbox_access_request') {\n void session.respondToToolSuspension({ toolCallId, resumeData: 'Yes' });\n return;\n }\n\n if (toolName === 'submit_plan') {\n // Request permission for plan approval\n const req: RequestPermissionRequest = {\n sessionId: state.sessionId,\n toolCall: {\n toolCallId,\n title: toolName,\n rawInput: JSON.stringify(args),\n },\n options: [\n { optionId: 'approve', name: 'Approve Plan', kind: 'allow_once' },\n { optionId: 'reject', name: 'Reject Plan', kind: 'reject_once' },\n ],\n };\n\n try {\n const resp = await connection.requestPermission(req);\n const action =\n resp.outcome.outcome === 'selected' && resp.outcome.optionId === 'approve' ? 'approved' : 'rejected';\n void session.respondToToolSuspension({ toolCallId, resumeData: { action } });\n } catch {\n void session.respondToToolSuspension({ toolCallId, resumeData: { action: 'rejected' } });\n }\n return;\n }\n\n // For ask_user and other suspensions, auto-resolve\n void session.respondToToolSuspension({\n toolCallId,\n resumeData: 'Proceed with your best judgment. Do not ask further questions.',\n });\n}\n\nfunction accumulateUsage(target: TokenUsage, usage: TokenUsage): void {\n target.promptTokens += usage.promptTokens;\n target.completionTokens += usage.completionTokens;\n target.totalTokens += usage.totalTokens;\n if (usage.reasoningTokens) target.reasoningTokens = (target.reasoningTokens ?? 0) + usage.reasoningTokens;\n if (usage.cachedInputTokens) target.cachedInputTokens = (target.cachedInputTokens ?? 0) + usage.cachedInputTokens;\n if (usage.cacheCreationInputTokens) {\n target.cacheCreationInputTokens = (target.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Entry point for ACP server mode.
3
+ * Initializes mastracode and runs the ACP protocol over stdio.
4
+ */
5
+ export declare function acpMain(options?: {
6
+ dangerousAutoApprove?: boolean;
7
+ }): Promise<void>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/acp/index.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DzF"}