@mastra/code-sdk 0.0.0-livekit-beta-v3-20260709031728

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 (460) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE.md +30 -0
  3. package/README.md +50 -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 +173 -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 +166 -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 +54 -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 +34 -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 +5 -0
  23. package/dist/acp.js.map +1 -0
  24. package/dist/agents/instructions.d.ts +6 -0
  25. package/dist/agents/instructions.d.ts.map +1 -0
  26. package/dist/agents/instructions.js +41 -0
  27. package/dist/agents/instructions.js.map +1 -0
  28. package/dist/agents/mastracode-gateway.d.ts +65 -0
  29. package/dist/agents/mastracode-gateway.d.ts.map +1 -0
  30. package/dist/agents/mastracode-gateway.js +442 -0
  31. package/dist/agents/mastracode-gateway.js.map +1 -0
  32. package/dist/agents/memory.d.ts +13 -0
  33. package/dist/agents/memory.d.ts.map +1 -0
  34. package/dist/agents/memory.js +107 -0
  35. package/dist/agents/memory.js.map +1 -0
  36. package/dist/agents/model.d.ts +55 -0
  37. package/dist/agents/model.d.ts.map +1 -0
  38. package/dist/agents/model.js +115 -0
  39. package/dist/agents/model.js.map +1 -0
  40. package/dist/agents/modes/build.d.ts +10 -0
  41. package/dist/agents/modes/build.d.ts.map +1 -0
  42. package/dist/agents/modes/build.js +45 -0
  43. package/dist/agents/modes/build.js.map +1 -0
  44. package/dist/agents/modes/explore.d.ts +10 -0
  45. package/dist/agents/modes/explore.d.ts.map +1 -0
  46. package/dist/agents/modes/explore.js +38 -0
  47. package/dist/agents/modes/explore.js.map +1 -0
  48. package/dist/agents/modes/plan.d.ts +6 -0
  49. package/dist/agents/modes/plan.d.ts.map +1 -0
  50. package/dist/agents/modes/plan.js +38 -0
  51. package/dist/agents/modes/plan.js.map +1 -0
  52. package/dist/agents/prompts/agent-instructions.d.ts +20 -0
  53. package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
  54. package/dist/agents/prompts/agent-instructions.js +82 -0
  55. package/dist/agents/prompts/agent-instructions.js.map +1 -0
  56. package/dist/agents/prompts/build.d.ts +12 -0
  57. package/dist/agents/prompts/build.d.ts.map +1 -0
  58. package/dist/agents/prompts/build.js +73 -0
  59. package/dist/agents/prompts/build.js.map +1 -0
  60. package/dist/agents/prompts/fast.d.ts +5 -0
  61. package/dist/agents/prompts/fast.d.ts.map +1 -0
  62. package/dist/agents/prompts/fast.js +22 -0
  63. package/dist/agents/prompts/fast.js.map +1 -0
  64. package/dist/agents/prompts/index.d.ts +19 -0
  65. package/dist/agents/prompts/index.d.ts.map +1 -0
  66. package/dist/agents/prompts/index.js +57 -0
  67. package/dist/agents/prompts/index.js.map +1 -0
  68. package/dist/agents/prompts/model.d.ts +5 -0
  69. package/dist/agents/prompts/model.d.ts.map +1 -0
  70. package/dist/agents/prompts/model.js +22 -0
  71. package/dist/agents/prompts/model.js.map +1 -0
  72. package/dist/agents/prompts/plan.d.ts +6 -0
  73. package/dist/agents/prompts/plan.d.ts.map +1 -0
  74. package/dist/agents/prompts/plan.js +107 -0
  75. package/dist/agents/prompts/plan.js.map +1 -0
  76. package/dist/agents/prompts/tool-guidance.d.ts +13 -0
  77. package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
  78. package/dist/agents/prompts/tool-guidance.js +181 -0
  79. package/dist/agents/prompts/tool-guidance.js.map +1 -0
  80. package/dist/agents/sandbox-filesystem.d.ts +89 -0
  81. package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
  82. package/dist/agents/sandbox-filesystem.js +268 -0
  83. package/dist/agents/sandbox-filesystem.js.map +1 -0
  84. package/dist/agents/sandbox-reattach.d.ts +19 -0
  85. package/dist/agents/sandbox-reattach.d.ts.map +1 -0
  86. package/dist/agents/sandbox-reattach.js +17 -0
  87. package/dist/agents/sandbox-reattach.js.map +1 -0
  88. package/dist/agents/thread-caveman-state.d.ts +17 -0
  89. package/dist/agents/thread-caveman-state.d.ts.map +1 -0
  90. package/dist/agents/thread-caveman-state.js +96 -0
  91. package/dist/agents/thread-caveman-state.js.map +1 -0
  92. package/dist/agents/tool-availability.d.ts +10 -0
  93. package/dist/agents/tool-availability.d.ts.map +1 -0
  94. package/dist/agents/tool-availability.js +105 -0
  95. package/dist/agents/tool-availability.js.map +1 -0
  96. package/dist/agents/tools.d.ts +18 -0
  97. package/dist/agents/tools.d.ts.map +1 -0
  98. package/dist/agents/tools.js +126 -0
  99. package/dist/agents/tools.js.map +1 -0
  100. package/dist/agents/workspace.d.ts +22 -0
  101. package/dist/agents/workspace.d.ts.map +1 -0
  102. package/dist/agents/workspace.js +194 -0
  103. package/dist/agents/workspace.js.map +1 -0
  104. package/dist/analytics.d.ts +18 -0
  105. package/dist/analytics.d.ts.map +1 -0
  106. package/dist/analytics.js +152 -0
  107. package/dist/analytics.js.map +1 -0
  108. package/dist/auth/index.d.ts +9 -0
  109. package/dist/auth/index.d.ts.map +1 -0
  110. package/dist/auth/index.js +11 -0
  111. package/dist/auth/index.js.map +1 -0
  112. package/dist/auth/pkce.d.ts +13 -0
  113. package/dist/auth/pkce.d.ts.map +1 -0
  114. package/dist/auth/pkce.js +21 -0
  115. package/dist/auth/pkce.js.map +1 -0
  116. package/dist/auth/providers/anthropic.d.ts +17 -0
  117. package/dist/auth/providers/anthropic.d.ts.map +1 -0
  118. package/dist/auth/providers/anthropic.js +94 -0
  119. package/dist/auth/providers/anthropic.js.map +1 -0
  120. package/dist/auth/providers/github-copilot.d.ts +100 -0
  121. package/dist/auth/providers/github-copilot.d.ts.map +1 -0
  122. package/dist/auth/providers/github-copilot.js +302 -0
  123. package/dist/auth/providers/github-copilot.js.map +1 -0
  124. package/dist/auth/providers/openai-codex.d.ts +95 -0
  125. package/dist/auth/providers/openai-codex.d.ts.map +1 -0
  126. package/dist/auth/providers/openai-codex.js +527 -0
  127. package/dist/auth/providers/openai-codex.js.map +1 -0
  128. package/dist/auth/storage.d.ts +91 -0
  129. package/dist/auth/storage.d.ts.map +1 -0
  130. package/dist/auth/storage.js +187 -0
  131. package/dist/auth/storage.js.map +1 -0
  132. package/dist/auth/types.d.ts +68 -0
  133. package/dist/auth/types.d.ts.map +1 -0
  134. package/dist/auth/types.js +1 -0
  135. package/dist/auth/types.js.map +1 -0
  136. package/dist/clipboard/index.d.ts +26 -0
  137. package/dist/clipboard/index.d.ts.map +1 -0
  138. package/dist/clipboard/index.js +192 -0
  139. package/dist/clipboard/index.js.map +1 -0
  140. package/dist/constants.d.ts +10 -0
  141. package/dist/constants.d.ts.map +1 -0
  142. package/dist/constants.js +23 -0
  143. package/dist/constants.js.map +1 -0
  144. package/dist/error-classification.d.ts +10 -0
  145. package/dist/error-classification.d.ts.map +1 -0
  146. package/dist/error-classification.js +14 -0
  147. package/dist/error-classification.js.map +1 -0
  148. package/dist/evals/context-builder.d.ts +41 -0
  149. package/dist/evals/context-builder.d.ts.map +1 -0
  150. package/dist/evals/context-builder.js +120 -0
  151. package/dist/evals/context-builder.js.map +1 -0
  152. package/dist/evals/index.d.ts +4 -0
  153. package/dist/evals/index.d.ts.map +1 -0
  154. package/dist/evals/index.js +8 -0
  155. package/dist/evals/index.js.map +1 -0
  156. package/dist/evals/scorers/classify-command.d.ts +31 -0
  157. package/dist/evals/scorers/classify-command.d.ts.map +1 -0
  158. package/dist/evals/scorers/classify-command.js +52 -0
  159. package/dist/evals/scorers/classify-command.js.map +1 -0
  160. package/dist/evals/scorers/efficiency.d.ts +44 -0
  161. package/dist/evals/scorers/efficiency.d.ts.map +1 -0
  162. package/dist/evals/scorers/efficiency.js +201 -0
  163. package/dist/evals/scorers/efficiency.js.map +1 -0
  164. package/dist/evals/scorers/extract-tools.d.ts +25 -0
  165. package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
  166. package/dist/evals/scorers/extract-tools.js +56 -0
  167. package/dist/evals/scorers/extract-tools.js.map +1 -0
  168. package/dist/evals/scorers/index.d.ts +3 -0
  169. package/dist/evals/scorers/index.d.ts.map +1 -0
  170. package/dist/evals/scorers/index.js +7 -0
  171. package/dist/evals/scorers/index.js.map +1 -0
  172. package/dist/evals/scorers/outcome.d.ts +49 -0
  173. package/dist/evals/scorers/outcome.d.ts.map +1 -0
  174. package/dist/evals/scorers/outcome.js +238 -0
  175. package/dist/evals/scorers/outcome.js.map +1 -0
  176. package/dist/headless/cli.d.ts +42 -0
  177. package/dist/headless/cli.d.ts.map +1 -0
  178. package/dist/headless/cli.js +196 -0
  179. package/dist/headless/cli.js.map +1 -0
  180. package/dist/headless/flags.d.ts +33 -0
  181. package/dist/headless/flags.d.ts.map +1 -0
  182. package/dist/headless/flags.js +188 -0
  183. package/dist/headless/flags.js.map +1 -0
  184. package/dist/headless/format.d.ts +38 -0
  185. package/dist/headless/format.d.ts.map +1 -0
  186. package/dist/headless/format.js +85 -0
  187. package/dist/headless/format.js.map +1 -0
  188. package/dist/headless/index.d.ts +25 -0
  189. package/dist/headless/index.d.ts.map +1 -0
  190. package/dist/headless/index.js +32 -0
  191. package/dist/headless/index.js.map +1 -0
  192. package/dist/headless/policy.d.ts +17 -0
  193. package/dist/headless/policy.d.ts.map +1 -0
  194. package/dist/headless/policy.js +38 -0
  195. package/dist/headless/policy.js.map +1 -0
  196. package/dist/headless/run-mc.d.ts +7 -0
  197. package/dist/headless/run-mc.d.ts.map +1 -0
  198. package/dist/headless/run-mc.js +296 -0
  199. package/dist/headless/run-mc.js.map +1 -0
  200. package/dist/headless/types.d.ts +134 -0
  201. package/dist/headless/types.d.ts.map +1 -0
  202. package/dist/headless/types.js +9 -0
  203. package/dist/headless/types.js.map +1 -0
  204. package/dist/hooks/config.d.ts +11 -0
  205. package/dist/hooks/config.d.ts.map +1 -0
  206. package/dist/hooks/config.js +78 -0
  207. package/dist/hooks/config.js.map +1 -0
  208. package/dist/hooks/executor.d.ts +13 -0
  209. package/dist/hooks/executor.d.ts.map +1 -0
  210. package/dist/hooks/executor.js +125 -0
  211. package/dist/hooks/executor.js.map +1 -0
  212. package/dist/hooks/index.d.ts +6 -0
  213. package/dist/hooks/index.d.ts.map +1 -0
  214. package/dist/hooks/index.js +16 -0
  215. package/dist/hooks/index.js.map +1 -0
  216. package/dist/hooks/manager.d.ts +47 -0
  217. package/dist/hooks/manager.d.ts.map +1 -0
  218. package/dist/hooks/manager.js +284 -0
  219. package/dist/hooks/manager.js.map +1 -0
  220. package/dist/hooks/types.d.ts +152 -0
  221. package/dist/hooks/types.d.ts.map +1 -0
  222. package/dist/hooks/types.js +7 -0
  223. package/dist/hooks/types.js.map +1 -0
  224. package/dist/index.d.ts +241 -0
  225. package/dist/index.d.ts.map +1 -0
  226. package/dist/index.js +712 -0
  227. package/dist/index.js.map +1 -0
  228. package/dist/ipc/ipc-reporter.d.ts +14 -0
  229. package/dist/ipc/ipc-reporter.d.ts.map +1 -0
  230. package/dist/ipc/ipc-reporter.js +24 -0
  231. package/dist/ipc/ipc-reporter.js.map +1 -0
  232. package/dist/lsp/client.d.ts +56 -0
  233. package/dist/lsp/client.d.ts.map +1 -0
  234. package/dist/lsp/client.js +309 -0
  235. package/dist/lsp/client.js.map +1 -0
  236. package/dist/lsp/index.d.ts +4 -0
  237. package/dist/lsp/index.d.ts.map +1 -0
  238. package/dist/lsp/index.js +9 -0
  239. package/dist/lsp/index.js.map +1 -0
  240. package/dist/lsp/language.d.ts +9 -0
  241. package/dist/lsp/language.d.ts.map +1 -0
  242. package/dist/lsp/language.js +48 -0
  243. package/dist/lsp/language.js.map +1 -0
  244. package/dist/lsp/manager.d.ts +34 -0
  245. package/dist/lsp/manager.d.ts.map +1 -0
  246. package/dist/lsp/manager.js +97 -0
  247. package/dist/lsp/manager.js.map +1 -0
  248. package/dist/lsp/server.d.ts +27 -0
  249. package/dist/lsp/server.d.ts.map +1 -0
  250. package/dist/lsp/server.js +128 -0
  251. package/dist/lsp/server.js.map +1 -0
  252. package/dist/lsp/workspace.d.ts +9 -0
  253. package/dist/lsp/workspace.d.ts.map +1 -0
  254. package/dist/lsp/workspace.js +52 -0
  255. package/dist/lsp/workspace.js.map +1 -0
  256. package/dist/mcp/config.d.ts +34 -0
  257. package/dist/mcp/config.d.ts.map +1 -0
  258. package/dist/mcp/config.js +205 -0
  259. package/dist/mcp/config.js.map +1 -0
  260. package/dist/mcp/index.d.ts +5 -0
  261. package/dist/mcp/index.d.ts.map +1 -0
  262. package/dist/mcp/index.js +10 -0
  263. package/dist/mcp/index.js.map +1 -0
  264. package/dist/mcp/manager.d.ts +49 -0
  265. package/dist/mcp/manager.d.ts.map +1 -0
  266. package/dist/mcp/manager.js +374 -0
  267. package/dist/mcp/manager.js.map +1 -0
  268. package/dist/mcp/types.d.ts +85 -0
  269. package/dist/mcp/types.d.ts.map +1 -0
  270. package/dist/mcp/types.js +1 -0
  271. package/dist/mcp/types.js.map +1 -0
  272. package/dist/onboarding/custom-packs.d.ts +7 -0
  273. package/dist/onboarding/custom-packs.d.ts.map +1 -0
  274. package/dist/onboarding/custom-packs.js +20 -0
  275. package/dist/onboarding/custom-packs.js.map +1 -0
  276. package/dist/onboarding/custom-providers.d.ts +4 -0
  277. package/dist/onboarding/custom-providers.d.ts.map +1 -0
  278. package/dist/onboarding/custom-providers.js +28 -0
  279. package/dist/onboarding/custom-providers.js.map +1 -0
  280. package/dist/onboarding/index.d.ts +5 -0
  281. package/dist/onboarding/index.d.ts.map +1 -0
  282. package/dist/onboarding/index.js +21 -0
  283. package/dist/onboarding/index.js.map +1 -0
  284. package/dist/onboarding/om-settings.d.ts +20 -0
  285. package/dist/onboarding/om-settings.d.ts.map +1 -0
  286. package/dist/onboarding/om-settings.js +26 -0
  287. package/dist/onboarding/om-settings.js.map +1 -0
  288. package/dist/onboarding/packs.d.ts +48 -0
  289. package/dist/onboarding/packs.d.ts.map +1 -0
  290. package/dist/onboarding/packs.js +111 -0
  291. package/dist/onboarding/packs.js.map +1 -0
  292. package/dist/onboarding/settings.d.ts +323 -0
  293. package/dist/onboarding/settings.d.ts.map +1 -0
  294. package/dist/onboarding/settings.js +594 -0
  295. package/dist/onboarding/settings.js.map +1 -0
  296. package/dist/permissions.d.ts +55 -0
  297. package/dist/permissions.d.ts.map +1 -0
  298. package/dist/permissions.js +119 -0
  299. package/dist/permissions.js.map +1 -0
  300. package/dist/plugin.d.ts +81 -0
  301. package/dist/plugin.d.ts.map +1 -0
  302. package/dist/plugin.js +30 -0
  303. package/dist/plugin.js.map +1 -0
  304. package/dist/plugins/dependencies.d.ts +9 -0
  305. package/dist/plugins/dependencies.d.ts.map +1 -0
  306. package/dist/plugins/dependencies.js +141 -0
  307. package/dist/plugins/dependencies.js.map +1 -0
  308. package/dist/plugins/install.d.ts +21 -0
  309. package/dist/plugins/install.d.ts.map +1 -0
  310. package/dist/plugins/install.js +200 -0
  311. package/dist/plugins/install.js.map +1 -0
  312. package/dist/plugins/loader.d.ts +15 -0
  313. package/dist/plugins/loader.d.ts.map +1 -0
  314. package/dist/plugins/loader.js +221 -0
  315. package/dist/plugins/loader.js.map +1 -0
  316. package/dist/plugins/manager.d.ts +60 -0
  317. package/dist/plugins/manager.d.ts.map +1 -0
  318. package/dist/plugins/manager.js +378 -0
  319. package/dist/plugins/manager.js.map +1 -0
  320. package/dist/plugins/manifest.d.ts +14 -0
  321. package/dist/plugins/manifest.d.ts.map +1 -0
  322. package/dist/plugins/manifest.js +75 -0
  323. package/dist/plugins/manifest.js.map +1 -0
  324. package/dist/plugins/package-link.d.ts +3 -0
  325. package/dist/plugins/package-link.d.ts.map +1 -0
  326. package/dist/plugins/package-link.js +77 -0
  327. package/dist/plugins/package-link.js.map +1 -0
  328. package/dist/plugins/paths.d.ts +10 -0
  329. package/dist/plugins/paths.d.ts.map +1 -0
  330. package/dist/plugins/paths.js +26 -0
  331. package/dist/plugins/paths.js.map +1 -0
  332. package/dist/plugins/registry.d.ts +8 -0
  333. package/dist/plugins/registry.d.ts.map +1 -0
  334. package/dist/plugins/registry.js +96 -0
  335. package/dist/plugins/registry.js.map +1 -0
  336. package/dist/plugins/scaffold.d.ts +10 -0
  337. package/dist/plugins/scaffold.d.ts.map +1 -0
  338. package/dist/plugins/scaffold.js +152 -0
  339. package/dist/plugins/scaffold.js.map +1 -0
  340. package/dist/plugins/types.d.ts +45 -0
  341. package/dist/plugins/types.d.ts.map +1 -0
  342. package/dist/plugins/types.js +1 -0
  343. package/dist/plugins/types.js.map +1 -0
  344. package/dist/processors/plan-rejection-abort.d.ts +12 -0
  345. package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
  346. package/dist/processors/plan-rejection-abort.js +53 -0
  347. package/dist/processors/plan-rejection-abort.js.map +1 -0
  348. package/dist/providers/amazon-bedrock-gateway.d.ts +40 -0
  349. package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
  350. package/dist/providers/amazon-bedrock-gateway.js +79 -0
  351. package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
  352. package/dist/providers/amazon-bedrock.d.ts +28 -0
  353. package/dist/providers/amazon-bedrock.d.ts.map +1 -0
  354. package/dist/providers/amazon-bedrock.js +62 -0
  355. package/dist/providers/amazon-bedrock.js.map +1 -0
  356. package/dist/providers/claude-max.d.ts +50 -0
  357. package/dist/providers/claude-max.d.ts.map +1 -0
  358. package/dist/providers/claude-max.js +151 -0
  359. package/dist/providers/claude-max.js.map +1 -0
  360. package/dist/providers/github-copilot.d.ts +58 -0
  361. package/dist/providers/github-copilot.d.ts.map +1 -0
  362. package/dist/providers/github-copilot.js +263 -0
  363. package/dist/providers/github-copilot.js.map +1 -0
  364. package/dist/providers/openai-codex.d.ts +70 -0
  365. package/dist/providers/openai-codex.d.ts.map +1 -0
  366. package/dist/providers/openai-codex.js +291 -0
  367. package/dist/providers/openai-codex.js.map +1 -0
  368. package/dist/schema.d.ts +167 -0
  369. package/dist/schema.d.ts.map +1 -0
  370. package/dist/schema.js +92 -0
  371. package/dist/schema.js.map +1 -0
  372. package/dist/theme-palette.d.ts +17 -0
  373. package/dist/theme-palette.d.ts.map +1 -0
  374. package/dist/theme-palette.js +17 -0
  375. package/dist/theme-palette.js.map +1 -0
  376. package/dist/tool-names.d.ts +73 -0
  377. package/dist/tool-names.d.ts.map +1 -0
  378. package/dist/tool-names.js +43 -0
  379. package/dist/tool-names.js.map +1 -0
  380. package/dist/tools/index.d.ts +6 -0
  381. package/dist/tools/index.d.ts.map +1 -0
  382. package/dist/tools/index.js +9 -0
  383. package/dist/tools/index.js.map +1 -0
  384. package/dist/tools/request-sandbox-access.d.ts +6 -0
  385. package/dist/tools/request-sandbox-access.d.ts.map +1 -0
  386. package/dist/tools/request-sandbox-access.js +88 -0
  387. package/dist/tools/request-sandbox-access.js.map +1 -0
  388. package/dist/tools/utils.d.ts +20 -0
  389. package/dist/tools/utils.d.ts.map +1 -0
  390. package/dist/tools/utils.js +22 -0
  391. package/dist/tools/utils.js.map +1 -0
  392. package/dist/tools/web-search.d.ts +35 -0
  393. package/dist/tools/web-search.d.ts.map +1 -0
  394. package/dist/tools/web-search.js +65 -0
  395. package/dist/tools/web-search.js.map +1 -0
  396. package/dist/utils/binaries.d.ts +7 -0
  397. package/dist/utils/binaries.d.ts.map +1 -0
  398. package/dist/utils/binaries.js +74 -0
  399. package/dist/utils/binaries.js.map +1 -0
  400. package/dist/utils/debug-log.d.ts +12 -0
  401. package/dist/utils/debug-log.d.ts.map +1 -0
  402. package/dist/utils/debug-log.js +55 -0
  403. package/dist/utils/debug-log.js.map +1 -0
  404. package/dist/utils/errors.d.ts +36 -0
  405. package/dist/utils/errors.d.ts.map +1 -0
  406. package/dist/utils/errors.js +207 -0
  407. package/dist/utils/errors.js.map +1 -0
  408. package/dist/utils/gateway-sync.d.ts +26 -0
  409. package/dist/utils/gateway-sync.d.ts.map +1 -0
  410. package/dist/utils/gateway-sync.js +49 -0
  411. package/dist/utils/gateway-sync.js.map +1 -0
  412. package/dist/utils/plan-diff.d.ts +25 -0
  413. package/dist/utils/plan-diff.d.ts.map +1 -0
  414. package/dist/utils/plan-diff.js +43 -0
  415. package/dist/utils/plan-diff.js.map +1 -0
  416. package/dist/utils/plans.d.ts +56 -0
  417. package/dist/utils/plans.d.ts.map +1 -0
  418. package/dist/utils/plans.js +99 -0
  419. package/dist/utils/plans.js.map +1 -0
  420. package/dist/utils/project.d.ts +161 -0
  421. package/dist/utils/project.d.ts.map +1 -0
  422. package/dist/utils/project.js +302 -0
  423. package/dist/utils/project.js.map +1 -0
  424. package/dist/utils/signals-pubsub.d.ts +41 -0
  425. package/dist/utils/signals-pubsub.d.ts.map +1 -0
  426. package/dist/utils/signals-pubsub.js +104 -0
  427. package/dist/utils/signals-pubsub.js.map +1 -0
  428. package/dist/utils/slash-command-loader.d.ts +48 -0
  429. package/dist/utils/slash-command-loader.d.ts.map +1 -0
  430. package/dist/utils/slash-command-loader.js +155 -0
  431. package/dist/utils/slash-command-loader.js.map +1 -0
  432. package/dist/utils/slash-command-processor.d.ts +14 -0
  433. package/dist/utils/slash-command-processor.d.ts.map +1 -0
  434. package/dist/utils/slash-command-processor.js +96 -0
  435. package/dist/utils/slash-command-processor.js.map +1 -0
  436. package/dist/utils/stdin-pipe.d.ts +33 -0
  437. package/dist/utils/stdin-pipe.d.ts.map +1 -0
  438. package/dist/utils/stdin-pipe.js +72 -0
  439. package/dist/utils/stdin-pipe.js.map +1 -0
  440. package/dist/utils/storage-factory.d.ts +50 -0
  441. package/dist/utils/storage-factory.d.ts.map +1 -0
  442. package/dist/utils/storage-factory.js +98 -0
  443. package/dist/utils/storage-factory.js.map +1 -0
  444. package/dist/utils/thread-lock.d.ts +26 -0
  445. package/dist/utils/thread-lock.d.ts.map +1 -0
  446. package/dist/utils/thread-lock.js +108 -0
  447. package/dist/utils/thread-lock.js.map +1 -0
  448. package/dist/utils/token-estimator.d.ts +3 -0
  449. package/dist/utils/token-estimator.d.ts.map +1 -0
  450. package/dist/utils/token-estimator.js +21 -0
  451. package/dist/utils/token-estimator.js.map +1 -0
  452. package/dist/utils/update-check.d.ts +52 -0
  453. package/dist/utils/update-check.d.ts.map +1 -0
  454. package/dist/utils/update-check.js +177 -0
  455. package/dist/utils/update-check.js.map +1 -0
  456. package/dist/voice/stt-registry.d.ts +64 -0
  457. package/dist/voice/stt-registry.d.ts.map +1 -0
  458. package/dist/voice/stt-registry.js +126 -0
  459. package/dist/voice/stt-registry.js.map +1 -0
  460. package/package.json +92 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,41 @@
1
+ # @mastra/code-sdk
2
+
3
+ ## 0.0.0-livekit-beta-v3-20260709031728
4
+
5
+ ### Minor Changes
6
+
7
+ - Publish the Mastra Code agent core as `@mastra/code-sdk` (previously the internal `@internal/mastracode` package), so third parties can build their own UIs and surfaces on top of the Mastra Code coding agent. The `mastracode` CLI now consumes it as a regular runtime dependency instead of bundling it into its published output. ([#18986](https://github.com/mastra-ai/mastra/pull/18986))
8
+
9
+ ### Patch Changes
10
+
11
+ - Removed invalid CommonJS export entries from @mastra/code-sdk so package resolution matches the published ESM output. ([#19127](https://github.com/mastra-ai/mastra/pull/19127))
12
+
13
+ - Updated dependencies [[`fe1bda0`](https://github.com/mastra-ai/mastra/commit/fe1bda06f6af92a694a51712db747cda1e7185f0), [`aac3e5a`](https://github.com/mastra-ai/mastra/commit/aac3e5a098b08077c7d5020d782d6353b217797c), [`6789ab4`](https://github.com/mastra-ai/mastra/commit/6789ab4191ddcd32a932898b360b191e80cee1a9), [`1b6e676`](https://github.com/mastra-ai/mastra/commit/1b6e67613c2a019df5920d4273d79bed09555807)]:
14
+ - @mastra/core@0.0.0-livekit-beta-v3-20260709031728
15
+ - @mastra/memory@0.0.0-livekit-beta-v3-20260709031728
16
+ - @mastra/schema-compat@0.0.0-livekit-beta-v3-20260709031728
17
+ - @mastra/observability@0.0.0-livekit-beta-v3-20260709031728
18
+ - @mastra/agent-browser@0.0.0-livekit-beta-v3-20260709031728
19
+ - @mastra/stagehand@0.0.0-livekit-beta-v3-20260709031728
20
+ - @mastra/tavily@0.0.0-livekit-beta-v3-20260709031728
21
+ - @mastra/mcp@0.0.0-livekit-beta-v3-20260709031728
22
+ - @mastra/github-signals@0.0.0-livekit-beta-v3-20260709031728
23
+ - @mastra/duckdb@0.0.0-livekit-beta-v3-20260709031728
24
+ - @mastra/libsql@0.0.0-livekit-beta-v3-20260709031728
25
+ - @mastra/pg@0.0.0-livekit-beta-v3-20260709031728
26
+
27
+ ## 0.1.0-alpha.0
28
+
29
+ ### Minor Changes
30
+
31
+ - Publish the Mastra Code agent core as `@mastra/code-sdk` (previously the internal `@internal/mastracode` package), so third parties can build their own UIs and surfaces on top of the Mastra Code coding agent. The `mastracode` CLI now consumes it as a regular runtime dependency instead of bundling it into its published output. ([#18986](https://github.com/mastra-ai/mastra/pull/18986))
32
+
33
+ ### Patch Changes
34
+
35
+ - Removed invalid CommonJS export entries from @mastra/code-sdk so package resolution matches the published ESM output. ([#19127](https://github.com/mastra-ai/mastra/pull/19127))
36
+
37
+ - Updated dependencies [[`6789ab4`](https://github.com/mastra-ai/mastra/commit/6789ab4191ddcd32a932898b360b191e80cee1a9)]:
38
+ - @mastra/schema-compat@1.3.4-alpha.0
39
+ - @mastra/core@1.50.2-alpha.1
40
+ - @mastra/mcp@1.13.1
41
+ - @mastra/memory@1.22.3-alpha.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,50 @@
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
+ Deep modules are available as subpath imports, e.g.:
41
+
42
+ ```ts
43
+ import { loadSettings } from '@mastra/code-sdk/onboarding/settings';
44
+ ```
45
+
46
+ > The subpath API surface is still evolving and may change between minor releases while the package is pre-1.0.
47
+
48
+ ## License
49
+
50
+ 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,173 @@
1
+ import { PROTOCOL_VERSION } from "@agentclientprotocol/sdk";
2
+ import { handleAgentControllerEvent } from "./event-mapper.js";
3
+ class MastraCodeAcpAgent {
4
+ connection;
5
+ controller;
6
+ session;
7
+ modes;
8
+ unsubscribeSessionEvents;
9
+ sessionMap = /* @__PURE__ */ new Map();
10
+ // sessionId -> threadId
11
+ currentPromptState = null;
12
+ promptMutex = Promise.resolve();
13
+ getThreadIdOrThrow(sessionId) {
14
+ const threadId = this.sessionMap.get(sessionId);
15
+ if (!threadId) {
16
+ throw new Error(`Unknown ACP sessionId: ${sessionId}`);
17
+ }
18
+ return threadId;
19
+ }
20
+ constructor(connection, controller, session, modes) {
21
+ this.connection = connection;
22
+ this.controller = controller;
23
+ this.session = session;
24
+ this.modes = modes;
25
+ this.unsubscribeSessionEvents = this.session.subscribe((event) => {
26
+ handleAgentControllerEvent(event, this.currentPromptState, this.connection, this.session);
27
+ });
28
+ }
29
+ dispose() {
30
+ this.unsubscribeSessionEvents();
31
+ }
32
+ async initialize(_request) {
33
+ return {
34
+ protocolVersion: PROTOCOL_VERSION,
35
+ agentInfo: {
36
+ name: "mastracode",
37
+ title: "Mastra Code",
38
+ version: "0.1.0"
39
+ },
40
+ agentCapabilities: {
41
+ loadSession: false
42
+ }
43
+ };
44
+ }
45
+ async authenticate() {
46
+ }
47
+ async newSession(_request) {
48
+ const thread = await this.session.thread.create();
49
+ const sessionId = thread.id;
50
+ this.sessionMap.set(sessionId, thread.id);
51
+ await this.session.thread.switch({ threadId: thread.id });
52
+ const availableModes = this.modes.map((m) => ({
53
+ id: m.id,
54
+ name: m.name ?? m.id
55
+ }));
56
+ const currentModeId = this.session.mode.get();
57
+ let models;
58
+ try {
59
+ const availableModels = await this.controller.listAvailableModels();
60
+ const currentModelId = this.session.model.get();
61
+ models = {
62
+ currentModelId: currentModelId ?? "",
63
+ availableModels: availableModels.map((m) => ({
64
+ modelId: m.id,
65
+ name: m.modelName
66
+ }))
67
+ };
68
+ } catch {
69
+ }
70
+ return {
71
+ sessionId,
72
+ modes: {
73
+ currentModeId,
74
+ availableModes
75
+ },
76
+ models
77
+ };
78
+ }
79
+ async prompt(request) {
80
+ const { sessionId, prompt: contentBlocks } = request;
81
+ const text = extractTextFromContentBlocks(contentBlocks);
82
+ const threadId = this.getThreadIdOrThrow(sessionId);
83
+ const prevMutex = this.promptMutex;
84
+ let resolveMutex;
85
+ this.promptMutex = new Promise((resolve) => {
86
+ resolveMutex = resolve;
87
+ });
88
+ await prevMutex;
89
+ try {
90
+ await this.session.thread.switch({ threadId });
91
+ const result = new Promise((resolve) => {
92
+ const usage2 = {
93
+ promptTokens: 0,
94
+ completionTokens: 0,
95
+ totalTokens: 0
96
+ };
97
+ this.currentPromptState = {
98
+ sessionId,
99
+ lastTextLength: 0,
100
+ usage: usage2,
101
+ resolve: (reason2) => {
102
+ resolve({ reason: reason2, usage: usage2 });
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) {
146
+ if (block.type === "text") {
147
+ parts.push(block.text);
148
+ } else if (block.type === "resource_link") {
149
+ parts.push(`[resource: ${block.uri}]`);
150
+ } else if (block.type === "resource") {
151
+ parts.push(`[resource: ${block.resource.uri}]`);
152
+ }
153
+ }
154
+ return parts.join("\n");
155
+ }
156
+ function mapStopReason(reason) {
157
+ switch (reason) {
158
+ case "complete":
159
+ return "end_turn";
160
+ case "aborted":
161
+ return "cancelled";
162
+ case "error":
163
+ return "end_turn";
164
+ case "suspended":
165
+ return "end_turn";
166
+ }
167
+ }
168
+ export {
169
+ MastraCodeAcpAgent,
170
+ extractTextFromContentBlocks,
171
+ mapStopReason
172
+ };
173
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"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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","names":["usage","reason"]}
@@ -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,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI/F;;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,CAyEN"}
@@ -0,0 +1,166 @@
1
+ let autoApprove = false;
2
+ function setAutoApprove(value) {
3
+ autoApprove = value;
4
+ }
5
+ function mapToolKind(toolName) {
6
+ const name = toolName.toLowerCase();
7
+ if (name.includes("edit") || name.includes("write") || name.includes("replace") || name.includes("patch"))
8
+ return "edit";
9
+ if (name.includes("read") || name.includes("view") || name.includes("list") || name.includes("find")) return "read";
10
+ if (name.includes("delete") || name.includes("remove")) return "delete";
11
+ if (name.includes("search") || name.includes("grep") || name.includes("query")) return "search";
12
+ if (name.includes("execute") || name.includes("run") || name.includes("command") || name.includes("shell"))
13
+ return "execute";
14
+ if (name.includes("fetch") || name.includes("curl") || name.includes("http") || name.includes("browse") || name.includes("navigate"))
15
+ return "fetch";
16
+ if (name.includes("think") || name.includes("reason")) return "think";
17
+ return "other";
18
+ }
19
+ function handleAgentControllerEvent(event, state, connection, session) {
20
+ if (!state) return;
21
+ switch (event.type) {
22
+ case "agent_start":
23
+ state.lastTextLength = 0;
24
+ break;
25
+ case "message_update": {
26
+ if (event.message.role !== "assistant") break;
27
+ const fullText = event.message.content.filter((c) => c.type === "text").map((p) => p.text).join("");
28
+ if (fullText.length > state.lastTextLength) {
29
+ const delta = fullText.slice(state.lastTextLength);
30
+ state.lastTextLength = fullText.length;
31
+ sendUpdate(connection, state.sessionId, {
32
+ sessionUpdate: "agent_message_chunk",
33
+ content: { type: "text", text: delta }
34
+ });
35
+ }
36
+ break;
37
+ }
38
+ case "message_end":
39
+ state.lastTextLength = 0;
40
+ break;
41
+ case "tool_start":
42
+ sendUpdate(connection, state.sessionId, {
43
+ sessionUpdate: "tool_call",
44
+ toolCallId: event.toolCallId,
45
+ title: event.toolName,
46
+ kind: mapToolKind(event.toolName),
47
+ status: "in_progress",
48
+ rawInput: JSON.stringify(event.args)
49
+ });
50
+ break;
51
+ case "tool_end":
52
+ sendUpdate(connection, state.sessionId, {
53
+ sessionUpdate: "tool_call_update",
54
+ toolCallId: event.toolCallId,
55
+ status: event.isError ? "failed" : "completed",
56
+ rawOutput: typeof event.result === "string" ? event.result : JSON.stringify(event.result)
57
+ });
58
+ break;
59
+ case "tool_approval_required":
60
+ void handleToolApproval(state, connection, session, event).catch((err) => {
61
+ process.stderr.write(`[acp] handleToolApproval error: ${err}
62
+ `);
63
+ });
64
+ break;
65
+ case "tool_suspended":
66
+ void handleToolSuspended(state, connection, session, event).catch((err) => {
67
+ process.stderr.write(`[acp] handleToolSuspended error: ${err}
68
+ `);
69
+ });
70
+ break;
71
+ case "usage_update":
72
+ accumulateUsage(state.usage, event.usage);
73
+ break;
74
+ case "agent_end":
75
+ state.resolve(event.reason ?? "complete");
76
+ break;
77
+ // Ignored in v1: om_*, subagent_*, workspace_*, task_updated, etc.
78
+ default:
79
+ break;
80
+ }
81
+ }
82
+ function sendUpdate(connection, sessionId, update) {
83
+ connection.sessionUpdate({ sessionId, update }).catch((err) => {
84
+ process.stderr.write(`[acp] sessionUpdate error: ${err}
85
+ `);
86
+ });
87
+ }
88
+ async function handleToolApproval(state, connection, session, event) {
89
+ if (autoApprove) {
90
+ session.respondToToolApproval({ decision: "approve" });
91
+ return;
92
+ }
93
+ const req = {
94
+ sessionId: state.sessionId,
95
+ toolCall: {
96
+ toolCallId: event.toolCallId,
97
+ title: event.toolName,
98
+ rawInput: JSON.stringify(event.args)
99
+ },
100
+ options: [
101
+ { optionId: "approve", name: "Allow", kind: "allow_once" },
102
+ { optionId: "reject", name: "Reject", kind: "reject_once" }
103
+ ]
104
+ };
105
+ try {
106
+ const resp = await connection.requestPermission(req);
107
+ if (resp.outcome.outcome === "selected") {
108
+ const decision = resp.outcome.optionId === "approve" ? "approve" : "decline";
109
+ session.respondToToolApproval({ decision });
110
+ } else {
111
+ session.respondToToolApproval({ decision: "decline" });
112
+ }
113
+ } catch (err) {
114
+ process.stderr.write(`[acp] requestPermission error: ${err}
115
+ `);
116
+ session.respondToToolApproval({ decision: "decline" });
117
+ }
118
+ }
119
+ async function handleToolSuspended(state, connection, session, event) {
120
+ const { toolCallId, toolName, args, suspendPayload } = event;
121
+ if (toolName === "request_access" || suspendPayload?.kind === "sandbox_access_request") {
122
+ void session.respondToToolSuspension({ toolCallId, resumeData: "Yes" });
123
+ return;
124
+ }
125
+ if (toolName === "submit_plan") {
126
+ const req = {
127
+ sessionId: state.sessionId,
128
+ toolCall: {
129
+ toolCallId,
130
+ title: toolName,
131
+ rawInput: JSON.stringify(args)
132
+ },
133
+ options: [
134
+ { optionId: "approve", name: "Approve Plan", kind: "allow_once" },
135
+ { optionId: "reject", name: "Reject Plan", kind: "reject_once" }
136
+ ]
137
+ };
138
+ try {
139
+ const resp = await connection.requestPermission(req);
140
+ const action = resp.outcome.outcome === "selected" && resp.outcome.optionId === "approve" ? "approved" : "rejected";
141
+ void session.respondToToolSuspension({ toolCallId, resumeData: { action } });
142
+ } catch {
143
+ void session.respondToToolSuspension({ toolCallId, resumeData: { action: "rejected" } });
144
+ }
145
+ return;
146
+ }
147
+ void session.respondToToolSuspension({
148
+ toolCallId,
149
+ resumeData: "Proceed with your best judgment. Do not ask further questions."
150
+ });
151
+ }
152
+ function accumulateUsage(target, usage) {
153
+ target.promptTokens += usage.promptTokens;
154
+ target.completionTokens += usage.completionTokens;
155
+ target.totalTokens += usage.totalTokens;
156
+ if (usage.reasoningTokens) target.reasoningTokens = (target.reasoningTokens ?? 0) + usage.reasoningTokens;
157
+ if (usage.cachedInputTokens) target.cachedInputTokens = (target.cachedInputTokens ?? 0) + usage.cachedInputTokens;
158
+ if (usage.cacheCreationInputTokens) {
159
+ target.cacheCreationInputTokens = (target.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;
160
+ }
161
+ }
162
+ export {
163
+ handleAgentControllerEvent,
164
+ setAutoApprove
165
+ };
166
+ //# sourceMappingURL=event-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/acp/event-mapper.ts"],"sourcesContent":["import type { SessionNotification, RequestPermissionRequest, AgentSideConnection } from '@agentclientprotocol/sdk';\nimport type { AgentControllerEvent, Session, TokenUsage } from '@mastra/core/agent-controller';\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_update': {\n if (event.message.role !== 'assistant') break;\n const fullText = event.message.content\n .filter((c): c is { type: 'text'; text: string } => c.type === 'text')\n .map(p => p.text)\n .join('');\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 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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","names":[]}
@@ -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"}
@@ -0,0 +1,54 @@
1
+ import { createMastraCode } from "../index.js";
2
+ import { releaseAllThreadLocks } from "../utils/thread-lock.js";
3
+ import { setAutoApprove } from "./event-mapper.js";
4
+ import { runAcpServer } from "./server.js";
5
+ async function acpMain(options) {
6
+ if (options?.dangerousAutoApprove) {
7
+ setAutoApprove(true);
8
+ }
9
+ const originalConsoleLog = console.log;
10
+ console.log = (...args) => {
11
+ process.stderr.write(args.map(String).join(" ") + "\n");
12
+ };
13
+ let result;
14
+ try {
15
+ result = await createMastraCode({
16
+ unixSocketPubSub: false,
17
+ disableMcp: false,
18
+ disableHooks: false
19
+ });
20
+ const { controller, mcpManager, signalsPubSub } = result;
21
+ const modes = [
22
+ { id: "build", name: "Build" },
23
+ { id: "plan", name: "Plan" },
24
+ { id: "fast", name: "Fast" }
25
+ ];
26
+ const cleanup = async () => {
27
+ releaseAllThreadLocks();
28
+ const closeSignalsPubSub = signalsPubSub?.close;
29
+ await Promise.allSettled([
30
+ mcpManager?.disconnect(),
31
+ controller?.getMastra()?.stopWorkers(),
32
+ controller?.stopIntervals(),
33
+ closeSignalsPubSub?.()
34
+ ]);
35
+ console.log = originalConsoleLog;
36
+ };
37
+ const handleSignal = async () => {
38
+ await cleanup();
39
+ process.exit(0);
40
+ };
41
+ process.on("SIGINT", handleSignal);
42
+ process.on("SIGTERM", handleSignal);
43
+ await runAcpServer(controller, modes, cleanup);
44
+ } catch (error) {
45
+ process.stderr.write(`[acp] Fatal error: ${error}
46
+ `);
47
+ console.log = originalConsoleLog;
48
+ process.exit(1);
49
+ }
50
+ }
51
+ export {
52
+ acpMain
53
+ };
54
+ //# sourceMappingURL=index.js.map