@mastra/code-sdk 0.0.0-mastracode-cloud-20260706153555

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 (456) hide show
  1. package/CHANGELOG.md +22 -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/install.d.ts +20 -0
  305. package/dist/plugins/install.d.ts.map +1 -0
  306. package/dist/plugins/install.js +179 -0
  307. package/dist/plugins/install.js.map +1 -0
  308. package/dist/plugins/loader.d.ts +15 -0
  309. package/dist/plugins/loader.d.ts.map +1 -0
  310. package/dist/plugins/loader.js +221 -0
  311. package/dist/plugins/loader.js.map +1 -0
  312. package/dist/plugins/manager.d.ts +60 -0
  313. package/dist/plugins/manager.d.ts.map +1 -0
  314. package/dist/plugins/manager.js +369 -0
  315. package/dist/plugins/manager.js.map +1 -0
  316. package/dist/plugins/manifest.d.ts +14 -0
  317. package/dist/plugins/manifest.d.ts.map +1 -0
  318. package/dist/plugins/manifest.js +75 -0
  319. package/dist/plugins/manifest.js.map +1 -0
  320. package/dist/plugins/package-link.d.ts +2 -0
  321. package/dist/plugins/package-link.d.ts.map +1 -0
  322. package/dist/plugins/package-link.js +20 -0
  323. package/dist/plugins/package-link.js.map +1 -0
  324. package/dist/plugins/paths.d.ts +10 -0
  325. package/dist/plugins/paths.d.ts.map +1 -0
  326. package/dist/plugins/paths.js +26 -0
  327. package/dist/plugins/paths.js.map +1 -0
  328. package/dist/plugins/registry.d.ts +8 -0
  329. package/dist/plugins/registry.d.ts.map +1 -0
  330. package/dist/plugins/registry.js +96 -0
  331. package/dist/plugins/registry.js.map +1 -0
  332. package/dist/plugins/scaffold.d.ts +10 -0
  333. package/dist/plugins/scaffold.d.ts.map +1 -0
  334. package/dist/plugins/scaffold.js +152 -0
  335. package/dist/plugins/scaffold.js.map +1 -0
  336. package/dist/plugins/types.d.ts +45 -0
  337. package/dist/plugins/types.d.ts.map +1 -0
  338. package/dist/plugins/types.js +1 -0
  339. package/dist/plugins/types.js.map +1 -0
  340. package/dist/processors/plan-rejection-abort.d.ts +12 -0
  341. package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
  342. package/dist/processors/plan-rejection-abort.js +53 -0
  343. package/dist/processors/plan-rejection-abort.js.map +1 -0
  344. package/dist/providers/amazon-bedrock-gateway.d.ts +40 -0
  345. package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
  346. package/dist/providers/amazon-bedrock-gateway.js +79 -0
  347. package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
  348. package/dist/providers/amazon-bedrock.d.ts +28 -0
  349. package/dist/providers/amazon-bedrock.d.ts.map +1 -0
  350. package/dist/providers/amazon-bedrock.js +62 -0
  351. package/dist/providers/amazon-bedrock.js.map +1 -0
  352. package/dist/providers/claude-max.d.ts +50 -0
  353. package/dist/providers/claude-max.d.ts.map +1 -0
  354. package/dist/providers/claude-max.js +151 -0
  355. package/dist/providers/claude-max.js.map +1 -0
  356. package/dist/providers/github-copilot.d.ts +58 -0
  357. package/dist/providers/github-copilot.d.ts.map +1 -0
  358. package/dist/providers/github-copilot.js +263 -0
  359. package/dist/providers/github-copilot.js.map +1 -0
  360. package/dist/providers/openai-codex.d.ts +70 -0
  361. package/dist/providers/openai-codex.d.ts.map +1 -0
  362. package/dist/providers/openai-codex.js +291 -0
  363. package/dist/providers/openai-codex.js.map +1 -0
  364. package/dist/schema.d.ts +167 -0
  365. package/dist/schema.d.ts.map +1 -0
  366. package/dist/schema.js +92 -0
  367. package/dist/schema.js.map +1 -0
  368. package/dist/theme-palette.d.ts +17 -0
  369. package/dist/theme-palette.d.ts.map +1 -0
  370. package/dist/theme-palette.js +17 -0
  371. package/dist/theme-palette.js.map +1 -0
  372. package/dist/tool-names.d.ts +73 -0
  373. package/dist/tool-names.d.ts.map +1 -0
  374. package/dist/tool-names.js +43 -0
  375. package/dist/tool-names.js.map +1 -0
  376. package/dist/tools/index.d.ts +6 -0
  377. package/dist/tools/index.d.ts.map +1 -0
  378. package/dist/tools/index.js +9 -0
  379. package/dist/tools/index.js.map +1 -0
  380. package/dist/tools/request-sandbox-access.d.ts +6 -0
  381. package/dist/tools/request-sandbox-access.d.ts.map +1 -0
  382. package/dist/tools/request-sandbox-access.js +88 -0
  383. package/dist/tools/request-sandbox-access.js.map +1 -0
  384. package/dist/tools/utils.d.ts +20 -0
  385. package/dist/tools/utils.d.ts.map +1 -0
  386. package/dist/tools/utils.js +22 -0
  387. package/dist/tools/utils.js.map +1 -0
  388. package/dist/tools/web-search.d.ts +35 -0
  389. package/dist/tools/web-search.d.ts.map +1 -0
  390. package/dist/tools/web-search.js +65 -0
  391. package/dist/tools/web-search.js.map +1 -0
  392. package/dist/utils/binaries.d.ts +7 -0
  393. package/dist/utils/binaries.d.ts.map +1 -0
  394. package/dist/utils/binaries.js +74 -0
  395. package/dist/utils/binaries.js.map +1 -0
  396. package/dist/utils/debug-log.d.ts +12 -0
  397. package/dist/utils/debug-log.d.ts.map +1 -0
  398. package/dist/utils/debug-log.js +55 -0
  399. package/dist/utils/debug-log.js.map +1 -0
  400. package/dist/utils/errors.d.ts +36 -0
  401. package/dist/utils/errors.d.ts.map +1 -0
  402. package/dist/utils/errors.js +207 -0
  403. package/dist/utils/errors.js.map +1 -0
  404. package/dist/utils/gateway-sync.d.ts +26 -0
  405. package/dist/utils/gateway-sync.d.ts.map +1 -0
  406. package/dist/utils/gateway-sync.js +49 -0
  407. package/dist/utils/gateway-sync.js.map +1 -0
  408. package/dist/utils/plan-diff.d.ts +25 -0
  409. package/dist/utils/plan-diff.d.ts.map +1 -0
  410. package/dist/utils/plan-diff.js +43 -0
  411. package/dist/utils/plan-diff.js.map +1 -0
  412. package/dist/utils/plans.d.ts +56 -0
  413. package/dist/utils/plans.d.ts.map +1 -0
  414. package/dist/utils/plans.js +99 -0
  415. package/dist/utils/plans.js.map +1 -0
  416. package/dist/utils/project.d.ts +161 -0
  417. package/dist/utils/project.d.ts.map +1 -0
  418. package/dist/utils/project.js +302 -0
  419. package/dist/utils/project.js.map +1 -0
  420. package/dist/utils/signals-pubsub.d.ts +41 -0
  421. package/dist/utils/signals-pubsub.d.ts.map +1 -0
  422. package/dist/utils/signals-pubsub.js +104 -0
  423. package/dist/utils/signals-pubsub.js.map +1 -0
  424. package/dist/utils/slash-command-loader.d.ts +48 -0
  425. package/dist/utils/slash-command-loader.d.ts.map +1 -0
  426. package/dist/utils/slash-command-loader.js +155 -0
  427. package/dist/utils/slash-command-loader.js.map +1 -0
  428. package/dist/utils/slash-command-processor.d.ts +14 -0
  429. package/dist/utils/slash-command-processor.d.ts.map +1 -0
  430. package/dist/utils/slash-command-processor.js +96 -0
  431. package/dist/utils/slash-command-processor.js.map +1 -0
  432. package/dist/utils/stdin-pipe.d.ts +33 -0
  433. package/dist/utils/stdin-pipe.d.ts.map +1 -0
  434. package/dist/utils/stdin-pipe.js +72 -0
  435. package/dist/utils/stdin-pipe.js.map +1 -0
  436. package/dist/utils/storage-factory.d.ts +50 -0
  437. package/dist/utils/storage-factory.d.ts.map +1 -0
  438. package/dist/utils/storage-factory.js +98 -0
  439. package/dist/utils/storage-factory.js.map +1 -0
  440. package/dist/utils/thread-lock.d.ts +26 -0
  441. package/dist/utils/thread-lock.d.ts.map +1 -0
  442. package/dist/utils/thread-lock.js +108 -0
  443. package/dist/utils/thread-lock.js.map +1 -0
  444. package/dist/utils/token-estimator.d.ts +3 -0
  445. package/dist/utils/token-estimator.d.ts.map +1 -0
  446. package/dist/utils/token-estimator.js +21 -0
  447. package/dist/utils/token-estimator.js.map +1 -0
  448. package/dist/utils/update-check.d.ts +52 -0
  449. package/dist/utils/update-check.d.ts.map +1 -0
  450. package/dist/utils/update-check.js +177 -0
  451. package/dist/utils/update-check.js.map +1 -0
  452. package/dist/voice/stt-registry.d.ts +64 -0
  453. package/dist/voice/stt-registry.d.ts.map +1 -0
  454. package/dist/voice/stt-registry.js +126 -0
  455. package/dist/voice/stt-registry.js.map +1 -0
  456. package/package.json +92 -0
@@ -0,0 +1,56 @@
1
+ /** Global plans directory for approved-plan archives. */
2
+ export declare function getPlansDir(): string;
3
+ /** Local (project-scoped) plans directory where the agent writes named plan files. */
4
+ export declare function getLocalPlansDir(projectPath: string): string;
5
+ /** Workspace-relative directory the agent writes plan files into. */
6
+ export declare function getLocalPlansRelativeDir(): string;
7
+ /** Derive a plan filename from a title (e.g. `add-dark-mode.md`). */
8
+ export declare function getPlanFilename(title: string): string;
9
+ /**
10
+ * Suggested workspace-relative path for a new plan file, shown in plan-mode prompts.
11
+ * Without a title we fall back to a generic name the agent can rename later.
12
+ */
13
+ export declare function getSuggestedPlanRelativePath(title?: string): string;
14
+ /**
15
+ * Resolve a plan path submitted by the agent (absolute or project-relative) to an
16
+ * absolute path. Returns `undefined` when no usable path was provided.
17
+ */
18
+ export declare function resolvePlanPath(projectPath: string, submittedPath: string): string | undefined;
19
+ /**
20
+ * Whether `targetPath` (absolute or project-relative) is a valid plan file: a `.md`
21
+ * file located directly inside the project's `.mastracode/plans/` directory. Used by the
22
+ * plan-mode write guard so the agent can write any named plan file there, but nothing
23
+ * outside that directory.
24
+ */
25
+ export declare function isPlanFilePath(projectPath: string, targetPath: string): boolean;
26
+ export declare function savePlanToDisk(opts: {
27
+ title: string;
28
+ plan: string;
29
+ resourceId: string;
30
+ plansDir?: string;
31
+ }): Promise<void>;
32
+ /**
33
+ * Read a plan markdown file by absolute path.
34
+ *
35
+ * The leading `# <title>` heading (if present) is parsed as the title and the remaining
36
+ * content is returned as the plan body. Returns `undefined` when the file does not exist.
37
+ */
38
+ export declare function readPlanFile(absPath: string): Promise<{
39
+ title: string;
40
+ plan: string;
41
+ } | undefined>;
42
+ /**
43
+ * Approve the plan file at `planPath`: write a timestamped copy to the global plans
44
+ * archive so approved plans are findable later. The local named plan file is left in
45
+ * place so the user can review every plan made over time.
46
+ *
47
+ * Returns the local plan filename (e.g. `add-dark-mode.md`), or `undefined` when there
48
+ * was no plan file to approve.
49
+ */
50
+ export declare function approvePlanFile(opts: {
51
+ planPath: string;
52
+ title: string;
53
+ resourceId: string;
54
+ plansDir?: string;
55
+ }): Promise<string | undefined>;
56
+ //# sourceMappingURL=plans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../src/utils/plans.ts"],"names":[],"mappings":"AAKA,yDAAyD;AACzD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,qEAAqE;AACrE,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAUD,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAU/E;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAsBxG;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAc9B"}
@@ -0,0 +1,99 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { DEFAULT_CONFIG_DIR } from "../constants.js";
4
+ import { getAppDataDir } from "./project.js";
5
+ function getPlansDir() {
6
+ return process.env.MASTRA_PLANS_DIR ?? path.join(getAppDataDir(), "plans");
7
+ }
8
+ function getLocalPlansDir(projectPath) {
9
+ return path.join(projectPath, DEFAULT_CONFIG_DIR, "plans");
10
+ }
11
+ function getLocalPlansRelativeDir() {
12
+ return path.join(DEFAULT_CONFIG_DIR, "plans");
13
+ }
14
+ function slugify(str) {
15
+ const slug = str.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
16
+ return slug || "untitled";
17
+ }
18
+ function getPlanFilename(title) {
19
+ return `${slugify(title)}.md`;
20
+ }
21
+ function getSuggestedPlanRelativePath(title) {
22
+ const filename = title ? getPlanFilename(title) : "plan.md";
23
+ return path.join(getLocalPlansRelativeDir(), filename);
24
+ }
25
+ function resolvePlanPath(projectPath, submittedPath) {
26
+ if (!submittedPath) return void 0;
27
+ return path.isAbsolute(submittedPath) ? submittedPath : path.resolve(projectPath, submittedPath);
28
+ }
29
+ function isPlanFilePath(projectPath, targetPath) {
30
+ const abs = resolvePlanPath(projectPath, targetPath);
31
+ if (!abs) return false;
32
+ if (path.extname(abs).toLowerCase() !== ".md") return false;
33
+ const plansDir = path.resolve(getLocalPlansDir(projectPath));
34
+ const rel = path.relative(plansDir, abs);
35
+ if (rel === "" || rel.startsWith("..") || path.isAbsolute(rel)) return false;
36
+ return !rel.includes(path.sep);
37
+ }
38
+ async function savePlanToDisk(opts) {
39
+ const { title, plan, resourceId } = opts;
40
+ const plansDir = opts.plansDir ?? getPlansDir();
41
+ const baseDir = path.resolve(plansDir);
42
+ const dir = path.resolve(baseDir, resourceId);
43
+ const rel = path.relative(baseDir, dir);
44
+ if (rel.startsWith("..") || path.isAbsolute(rel)) {
45
+ throw new Error(`Invalid resourceId: ${resourceId}`);
46
+ }
47
+ await fs.mkdir(dir, { recursive: true });
48
+ const now = /* @__PURE__ */ new Date();
49
+ const timestamp = now.toISOString().replace(/:/g, "-");
50
+ const slug = slugify(title);
51
+ const filename = `${timestamp}-${slug}.md`;
52
+ const content = `# ${title}
53
+
54
+ Approved: ${now.toISOString()}
55
+
56
+ ${plan}
57
+ `;
58
+ await fs.writeFile(path.join(dir, filename), content, "utf-8");
59
+ }
60
+ async function readPlanFile(absPath) {
61
+ let raw;
62
+ try {
63
+ raw = await fs.readFile(absPath, "utf-8");
64
+ } catch {
65
+ return void 0;
66
+ }
67
+ const lines = raw.split(/\r?\n/);
68
+ const headingIndex = lines.findIndex((line) => line.trim().length > 0);
69
+ const heading = headingIndex >= 0 ? lines[headingIndex] : void 0;
70
+ if (heading?.startsWith("# ")) {
71
+ const title = heading.slice(2).trim();
72
+ const plan = lines.slice(headingIndex + 1).join("\n").replace(/^\n+/, "").trimEnd();
73
+ return { title, plan };
74
+ }
75
+ return { title: "", plan: raw.trimEnd() };
76
+ }
77
+ async function approvePlanFile(opts) {
78
+ const { planPath, title, resourceId, plansDir } = opts;
79
+ const current = await readPlanFile(planPath);
80
+ if (!current) {
81
+ return void 0;
82
+ }
83
+ const resolvedTitle = title || current.title || "Implementation Plan";
84
+ await savePlanToDisk({ title: resolvedTitle, plan: current.plan, resourceId, plansDir });
85
+ return path.basename(planPath);
86
+ }
87
+ export {
88
+ approvePlanFile,
89
+ getLocalPlansDir,
90
+ getLocalPlansRelativeDir,
91
+ getPlanFilename,
92
+ getPlansDir,
93
+ getSuggestedPlanRelativePath,
94
+ isPlanFilePath,
95
+ readPlanFile,
96
+ resolvePlanPath,
97
+ savePlanToDisk
98
+ };
99
+ //# sourceMappingURL=plans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/plans.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\nimport { getAppDataDir } from './project.js';\n\n/** Global plans directory for approved-plan archives. */\nexport function getPlansDir(): string {\n return process.env.MASTRA_PLANS_DIR ?? path.join(getAppDataDir(), 'plans');\n}\n\n/** Local (project-scoped) plans directory where the agent writes named plan files. */\nexport function getLocalPlansDir(projectPath: string): string {\n return path.join(projectPath, DEFAULT_CONFIG_DIR, 'plans');\n}\n\n/** Workspace-relative directory the agent writes plan files into. */\nexport function getLocalPlansRelativeDir(): string {\n return path.join(DEFAULT_CONFIG_DIR, 'plans');\n}\n\nfunction slugify(str: string): string {\n const slug = str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n return slug || 'untitled';\n}\n\n/** Derive a plan filename from a title (e.g. `add-dark-mode.md`). */\nexport function getPlanFilename(title: string): string {\n return `${slugify(title)}.md`;\n}\n\n/**\n * Suggested workspace-relative path for a new plan file, shown in plan-mode prompts.\n * Without a title we fall back to a generic name the agent can rename later.\n */\nexport function getSuggestedPlanRelativePath(title?: string): string {\n const filename = title ? getPlanFilename(title) : 'plan.md';\n return path.join(getLocalPlansRelativeDir(), filename);\n}\n\n/**\n * Resolve a plan path submitted by the agent (absolute or project-relative) to an\n * absolute path. Returns `undefined` when no usable path was provided.\n */\nexport function resolvePlanPath(projectPath: string, submittedPath: string): string | undefined {\n if (!submittedPath) return undefined;\n return path.isAbsolute(submittedPath) ? submittedPath : path.resolve(projectPath, submittedPath);\n}\n\n/**\n * Whether `targetPath` (absolute or project-relative) is a valid plan file: a `.md`\n * file located directly inside the project's `.mastracode/plans/` directory. Used by the\n * plan-mode write guard so the agent can write any named plan file there, but nothing\n * outside that directory.\n */\nexport function isPlanFilePath(projectPath: string, targetPath: string): boolean {\n const abs = resolvePlanPath(projectPath, targetPath);\n if (!abs) return false;\n if (path.extname(abs).toLowerCase() !== '.md') return false;\n\n const plansDir = path.resolve(getLocalPlansDir(projectPath));\n const rel = path.relative(plansDir, abs);\n // Must be directly inside the plans dir (no nested subdirectories, no escaping it).\n if (rel === '' || rel.startsWith('..') || path.isAbsolute(rel)) return false;\n return !rel.includes(path.sep);\n}\n\nexport async function savePlanToDisk(opts: {\n title: string;\n plan: string;\n resourceId: string;\n plansDir?: string;\n}): Promise<void> {\n const { title, plan, resourceId } = opts;\n const plansDir = opts.plansDir ?? getPlansDir();\n const baseDir = path.resolve(plansDir);\n const dir = path.resolve(baseDir, resourceId);\n const rel = path.relative(baseDir, dir);\n if (rel.startsWith('..') || path.isAbsolute(rel)) {\n throw new Error(`Invalid resourceId: ${resourceId}`);\n }\n\n await fs.mkdir(dir, { recursive: true });\n\n const now = new Date();\n const timestamp = now.toISOString().replace(/:/g, '-');\n const slug = slugify(title);\n const filename = `${timestamp}-${slug}.md`;\n\n const content = `# ${title}\\n\\nApproved: ${now.toISOString()}\\n\\n${plan}\\n`;\n\n await fs.writeFile(path.join(dir, filename), content, 'utf-8');\n}\n\n/**\n * Read a plan markdown file by absolute path.\n *\n * The leading `# <title>` heading (if present) is parsed as the title and the remaining\n * content is returned as the plan body. Returns `undefined` when the file does not exist.\n */\nexport async function readPlanFile(absPath: string): Promise<{ title: string; plan: string } | undefined> {\n let raw: string;\n try {\n raw = await fs.readFile(absPath, 'utf-8');\n } catch {\n return undefined;\n }\n\n const lines = raw.split(/\\r?\\n/);\n const headingIndex = lines.findIndex(line => line.trim().length > 0);\n const heading = headingIndex >= 0 ? lines[headingIndex] : undefined;\n if (heading?.startsWith('# ')) {\n const title = heading.slice(2).trim();\n const plan = lines\n .slice(headingIndex + 1)\n .join('\\n')\n .replace(/^\\n+/, '')\n .trimEnd();\n return { title, plan };\n }\n\n return { title: '', plan: raw.trimEnd() };\n}\n\n/**\n * Approve the plan file at `planPath`: write a timestamped copy to the global plans\n * archive so approved plans are findable later. The local named plan file is left in\n * place so the user can review every plan made over time.\n *\n * Returns the local plan filename (e.g. `add-dark-mode.md`), or `undefined` when there\n * was no plan file to approve.\n */\nexport async function approvePlanFile(opts: {\n planPath: string;\n title: string;\n resourceId: string;\n plansDir?: string;\n}): Promise<string | undefined> {\n const { planPath, title, resourceId, plansDir } = opts;\n\n const current = await readPlanFile(planPath);\n if (!current) {\n return undefined;\n }\n\n const resolvedTitle = title || current.title || 'Implementation Plan';\n\n // Global archive (timestamped, never overwritten) so approved plans are findable later.\n await savePlanToDisk({ title: resolvedTitle, plan: current.plan, resourceId, plansDir });\n\n return path.basename(planPath);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Project detection utilities
3
+ *
4
+ * Detects project identity from git repo or filesystem path.
5
+ * Handles git worktrees by finding the main repository.
6
+ */
7
+ export interface ProjectInfo {
8
+ /** Unique resource ID for this project (used for thread grouping) */
9
+ resourceId: string;
10
+ /** Human-readable project name */
11
+ name: string;
12
+ /** Absolute path to the project root */
13
+ rootPath: string;
14
+ /** Git remote URL if available */
15
+ gitUrl?: string;
16
+ /** Current git branch */
17
+ gitBranch?: string;
18
+ /** Whether this is a git worktree */
19
+ isWorktree: boolean;
20
+ /** Path to main git repo (different from rootPath if worktree) */
21
+ mainRepoPath?: string;
22
+ /** Whether the resourceId was explicitly overridden (env var or config) */
23
+ resourceIdOverride?: boolean;
24
+ }
25
+ /**
26
+ * Detect project info from a directory path
27
+ */
28
+ export declare function detectProject(projectPath: string): ProjectInfo;
29
+ /**
30
+ * Get the current git branch for a given directory.
31
+ * Lightweight alternative to detectProject() for refreshing just the branch.
32
+ */
33
+ export declare function getCurrentGitBranch(cwd: string): string | undefined;
34
+ /**
35
+ * Async version of getCurrentGitBranch — avoids blocking the event loop
36
+ * with execSync. Falls back to undefined on any failure.
37
+ */
38
+ export declare function getCurrentGitBranchAsync(cwd: string): Promise<string | undefined>;
39
+ /**
40
+ * Get the application data directory for mastracode
41
+ * - macOS: ~/Library/Application Support/mastracode
42
+ * - Linux: ~/.local/share/mastracode
43
+ * - Windows: %APPDATA%/mastracode
44
+ */
45
+ export declare function getAppDataDir(): string;
46
+ /**
47
+ * Get the database path for mastracode
48
+ * Can be overridden with the MASTRA_DB_PATH environment variable for debugging.
49
+ */
50
+ export declare function getDatabasePath(): string;
51
+ /**
52
+ * Get the vector database path for mastracode.
53
+ * Separate from the main DB to avoid bloating it with embedding data.
54
+ */
55
+ export declare function getVectorDatabasePath(): string;
56
+ /**
57
+ * Get the observability DuckDB database path for mastracode.
58
+ * Separate from the main DB — DuckDB is used for OLAP-style trace/score/feedback queries.
59
+ * Can be overridden with the MASTRA_OBSERVABILITY_DB_PATH environment variable.
60
+ */
61
+ export declare function getObservabilityDatabasePath(): string;
62
+ import type { StorageSettings } from '../onboarding/settings.js';
63
+ /**
64
+ * LibSQL storage configuration.
65
+ */
66
+ export interface LibSQLStorageConfig {
67
+ backend: 'libsql';
68
+ url: string;
69
+ authToken?: string;
70
+ isRemote: boolean;
71
+ /**
72
+ * Optional explicit url for the recall vector DB. When omitted, the factory
73
+ * uses the shared default vector file. Per-tenant storage sets this so each
74
+ * tenant's recall vectors live in their own isolated DB, not a shared file.
75
+ */
76
+ vectorUrl?: string;
77
+ /** Auth token for the vector DB when `vectorUrl` points at a remote libSQL. */
78
+ vectorAuthToken?: string;
79
+ }
80
+ /**
81
+ * PostgreSQL storage configuration.
82
+ */
83
+ export interface PgStorageConfig {
84
+ backend: 'pg';
85
+ connectionString?: string;
86
+ host?: string;
87
+ port?: number;
88
+ database?: string;
89
+ user?: string;
90
+ password?: string;
91
+ schemaName?: string;
92
+ disableInit?: boolean;
93
+ skipDefaultIndexes?: boolean;
94
+ }
95
+ /**
96
+ * Resolved storage configuration for either backend.
97
+ */
98
+ export type StorageConfig = LibSQLStorageConfig | PgStorageConfig;
99
+ /**
100
+ * Get the resolved storage configuration.
101
+ *
102
+ * Priority (highest to lowest):
103
+ * 1. Environment variables: MASTRA_STORAGE_BACKEND + backend-specific vars
104
+ * 2. Global settings (from /settings): settings.storage
105
+ * 3. Legacy config files: .mastracode/database.json (LibSQL only)
106
+ * 4. Local file database (LibSQL default)
107
+ *
108
+ * For PG, the env vars are:
109
+ * MASTRA_STORAGE_BACKEND=pg
110
+ * MASTRA_PG_CONNECTION_STRING or MASTRA_PG_HOST/PORT/DATABASE/USER/PASSWORD
111
+ * MASTRA_PG_SCHEMA_NAME (optional)
112
+ *
113
+ * For LibSQL, the legacy env vars still work:
114
+ * MASTRA_DB_URL + MASTRA_DB_AUTH_TOKEN
115
+ */
116
+ export declare function getStorageConfig(projectDir?: string, storageSettings?: StorageSettings, configDirName?: string): StorageConfig;
117
+ /**
118
+ * Get the current user identity.
119
+ *
120
+ * Priority:
121
+ * 1. MASTRA_USER_ID environment variable
122
+ * 2. git config user.email (from project dir or global)
123
+ * 3. OS username as fallback
124
+ */
125
+ export declare function getUserId(projectDir?: string): string;
126
+ /**
127
+ * Get the current user's display name.
128
+ *
129
+ * Priority:
130
+ * 1. git config user.name
131
+ * 2. OS username as fallback
132
+ */
133
+ export declare function getUserName(projectDir?: string): string;
134
+ /**
135
+ * Observational memory scope: "thread" (per-conversation) or "resource" (shared across threads).
136
+ */
137
+ export type OmScope = 'thread' | 'resource';
138
+ /**
139
+ * Get the configured observational memory scope.
140
+ *
141
+ * Priority:
142
+ * 1. MASTRA_OM_SCOPE environment variable ("thread" or "resource")
143
+ * 2. Project config: .mastracode/database.json → omScope
144
+ * 3. Global config: ~/.mastracode/database.json → omScope
145
+ * 4. Default: "thread"
146
+ */
147
+ export declare function getOmScope(projectDir?: string, configDirName?: string): OmScope;
148
+ /**
149
+ * Get an explicit resource ID override, if configured.
150
+ *
151
+ * Resource IDs act as shared tags — two users who set the same resourceId
152
+ * will share threads and observations for that resource.
153
+ *
154
+ * Priority:
155
+ * 1. MASTRA_RESOURCE_ID environment variable
156
+ * 2. Project config: .mastracode/database.json → resourceId
157
+ * 3. Global config: ~/.mastracode/database.json → resourceId
158
+ * 4. null (use auto-detected value)
159
+ */
160
+ export declare function getResourceIdOverride(projectDir?: string, configDirName?: string): string | null;
161
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,302 @@
1
+ import { execFile, execSync } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import fs from "node:fs";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import { DEFAULT_CONFIG_DIR } from "../constants.js";
7
+ function git(args, cwd) {
8
+ try {
9
+ return execSync(`git ${args}`, {
10
+ cwd,
11
+ encoding: "utf-8",
12
+ stdio: ["pipe", "pipe", "pipe"]
13
+ }).trim();
14
+ } catch {
15
+ return void 0;
16
+ }
17
+ }
18
+ function slugify(str) {
19
+ return str.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
20
+ }
21
+ function shortHash(str) {
22
+ return createHash("sha256").update(str).digest("hex").slice(0, 12);
23
+ }
24
+ function normalizeGitUrl(url) {
25
+ return url.replace(/\.git$/, "").replace(/^git@([^:]+):/, "https://$1/").replace(/^ssh:\/\/git@/, "https://").toLowerCase();
26
+ }
27
+ function detectProject(projectPath) {
28
+ const absolutePath = path.resolve(projectPath);
29
+ const gitDir = git("rev-parse --git-dir", absolutePath);
30
+ const isGitRepo = gitDir !== void 0;
31
+ let rootPath = absolutePath;
32
+ let gitUrl;
33
+ let gitBranch;
34
+ let isWorktree = false;
35
+ let mainRepoPath;
36
+ if (isGitRepo) {
37
+ rootPath = git("rev-parse --show-toplevel", absolutePath) || absolutePath;
38
+ const commonDir = git("rev-parse --git-common-dir", absolutePath);
39
+ if (commonDir && commonDir !== ".git" && commonDir !== gitDir) {
40
+ isWorktree = true;
41
+ mainRepoPath = path.dirname(path.resolve(rootPath, commonDir));
42
+ }
43
+ gitUrl = git("remote get-url origin", absolutePath);
44
+ if (!gitUrl) {
45
+ const remotes = git("remote", absolutePath);
46
+ if (remotes) {
47
+ const firstRemote = remotes.split("\n")[0];
48
+ if (firstRemote) {
49
+ gitUrl = git(`remote get-url ${firstRemote}`, absolutePath);
50
+ }
51
+ }
52
+ }
53
+ gitBranch = git("rev-parse --abbrev-ref HEAD", absolutePath);
54
+ }
55
+ let resourceIdSource;
56
+ if (gitUrl) {
57
+ resourceIdSource = normalizeGitUrl(gitUrl);
58
+ } else if (mainRepoPath) {
59
+ resourceIdSource = mainRepoPath;
60
+ } else {
61
+ resourceIdSource = rootPath;
62
+ }
63
+ const baseName = gitUrl ? gitUrl.split("/").pop()?.replace(/\.git$/, "") || "project" : path.basename(rootPath);
64
+ const resourceId = `${slugify(baseName)}-${shortHash(resourceIdSource)}`;
65
+ return {
66
+ resourceId,
67
+ name: baseName,
68
+ rootPath,
69
+ gitUrl,
70
+ gitBranch,
71
+ isWorktree,
72
+ mainRepoPath
73
+ };
74
+ }
75
+ function getCurrentGitBranch(cwd) {
76
+ return git("rev-parse --abbrev-ref HEAD", cwd);
77
+ }
78
+ function getCurrentGitBranchAsync(cwd) {
79
+ return new Promise((resolve) => {
80
+ execFile("git", ["rev-parse", "--abbrev-ref", "HEAD"], { cwd, encoding: "utf-8" }, (err, stdout) => {
81
+ if (err) {
82
+ resolve(void 0);
83
+ return;
84
+ }
85
+ const branch = stdout.trim();
86
+ resolve(branch || void 0);
87
+ });
88
+ });
89
+ }
90
+ function getAppDataDir() {
91
+ if (process.env.MASTRA_APP_DATA_DIR) {
92
+ fs.mkdirSync(process.env.MASTRA_APP_DATA_DIR, { recursive: true });
93
+ return process.env.MASTRA_APP_DATA_DIR;
94
+ }
95
+ const platform = os.platform();
96
+ let baseDir;
97
+ if (platform === "darwin") {
98
+ baseDir = path.join(os.homedir(), "Library", "Application Support");
99
+ } else if (platform === "win32") {
100
+ baseDir = process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming");
101
+ } else {
102
+ baseDir = process.env.XDG_DATA_HOME || path.join(os.homedir(), ".local", "share");
103
+ }
104
+ const appDir = path.join(baseDir, "mastracode");
105
+ if (!fs.existsSync(appDir)) {
106
+ fs.mkdirSync(appDir, { recursive: true });
107
+ }
108
+ return appDir;
109
+ }
110
+ function getDatabasePath() {
111
+ if (process.env.MASTRA_DB_PATH) {
112
+ return process.env.MASTRA_DB_PATH;
113
+ }
114
+ return path.join(getAppDataDir(), "mastra.db");
115
+ }
116
+ function getVectorDatabasePath() {
117
+ return path.join(getAppDataDir(), "mastra-vectors.db");
118
+ }
119
+ function getObservabilityDatabasePath() {
120
+ if (process.env.MASTRA_OBSERVABILITY_DB_PATH) {
121
+ return process.env.MASTRA_OBSERVABILITY_DB_PATH;
122
+ }
123
+ return path.join(getAppDataDir(), "observability.duckdb");
124
+ }
125
+ function getStorageConfig(projectDir, storageSettings, configDirName = DEFAULT_CONFIG_DIR) {
126
+ const envBackend = process.env.MASTRA_STORAGE_BACKEND;
127
+ if (envBackend === "pg") {
128
+ return resolvePgFromEnv();
129
+ }
130
+ if (envBackend === "libsql" || process.env.MASTRA_DB_URL) {
131
+ return resolveLibSQLFromEnv();
132
+ }
133
+ if (storageSettings && storageSettings.backend === "pg") {
134
+ return resolvePgFromSettings(storageSettings);
135
+ }
136
+ if (storageSettings && storageSettings.backend === "libsql" && storageSettings.libsql.url) {
137
+ return {
138
+ backend: "libsql",
139
+ url: storageSettings.libsql.url,
140
+ authToken: storageSettings.libsql.authToken,
141
+ isRemote: !storageSettings.libsql.url.startsWith("file:")
142
+ };
143
+ }
144
+ if (projectDir) {
145
+ const projectConfig = loadDatabaseConfig(path.join(projectDir, configDirName, "database.json"));
146
+ if (projectConfig) return projectConfig;
147
+ }
148
+ const globalConfig = loadDatabaseConfig(path.join(os.homedir(), configDirName, "database.json"));
149
+ if (globalConfig) return globalConfig;
150
+ return {
151
+ backend: "libsql",
152
+ url: `file:${getDatabasePath()}`,
153
+ isRemote: false
154
+ };
155
+ }
156
+ function resolveLibSQLFromEnv() {
157
+ const url = process.env.MASTRA_DB_URL;
158
+ return {
159
+ backend: "libsql",
160
+ url,
161
+ authToken: process.env.MASTRA_DB_AUTH_TOKEN,
162
+ isRemote: !url.startsWith("file:")
163
+ };
164
+ }
165
+ function resolvePgFromEnv() {
166
+ const connectionString = process.env.MASTRA_PG_CONNECTION_STRING;
167
+ if (connectionString) {
168
+ return {
169
+ backend: "pg",
170
+ connectionString,
171
+ schemaName: process.env.MASTRA_PG_SCHEMA_NAME
172
+ };
173
+ }
174
+ return {
175
+ backend: "pg",
176
+ host: process.env.MASTRA_PG_HOST,
177
+ port: process.env.MASTRA_PG_PORT ? parseInt(process.env.MASTRA_PG_PORT, 10) : void 0,
178
+ database: process.env.MASTRA_PG_DATABASE,
179
+ user: process.env.MASTRA_PG_USER,
180
+ password: process.env.MASTRA_PG_PASSWORD,
181
+ schemaName: process.env.MASTRA_PG_SCHEMA_NAME
182
+ };
183
+ }
184
+ function resolvePgFromSettings(settings) {
185
+ const pg = settings.pg;
186
+ return {
187
+ backend: "pg",
188
+ connectionString: pg.connectionString,
189
+ host: pg.host,
190
+ port: pg.port,
191
+ database: pg.database,
192
+ user: pg.user,
193
+ password: pg.password,
194
+ schemaName: pg.schemaName,
195
+ disableInit: pg.disableInit,
196
+ skipDefaultIndexes: pg.skipDefaultIndexes
197
+ };
198
+ }
199
+ function loadDatabaseConfig(filePath) {
200
+ try {
201
+ if (!fs.existsSync(filePath)) return null;
202
+ const raw = fs.readFileSync(filePath, "utf-8");
203
+ const parsed = JSON.parse(raw);
204
+ if (typeof parsed?.url === "string" && parsed.url) {
205
+ return {
206
+ backend: "libsql",
207
+ url: parsed.url,
208
+ authToken: typeof parsed.authToken === "string" ? parsed.authToken : void 0,
209
+ isRemote: !parsed.url.startsWith("file:")
210
+ };
211
+ }
212
+ return null;
213
+ } catch {
214
+ return null;
215
+ }
216
+ }
217
+ function getUserId(projectDir) {
218
+ if (process.env.MASTRA_USER_ID) {
219
+ return process.env.MASTRA_USER_ID;
220
+ }
221
+ const cwd = projectDir || process.cwd();
222
+ const email = git("config user.email", cwd);
223
+ if (email) {
224
+ return email;
225
+ }
226
+ return os.userInfo().username || "unknown";
227
+ }
228
+ function getUserName(projectDir) {
229
+ const cwd = projectDir || process.cwd();
230
+ const name = git("config user.name", cwd);
231
+ if (name) {
232
+ return name;
233
+ }
234
+ return os.userInfo().username || "unknown";
235
+ }
236
+ function getOmScope(projectDir, configDirName = DEFAULT_CONFIG_DIR) {
237
+ const envScope = process.env.MASTRA_OM_SCOPE;
238
+ if (envScope === "thread" || envScope === "resource") {
239
+ return envScope;
240
+ }
241
+ if (projectDir) {
242
+ const scope2 = loadOmScopeFromConfig(path.join(projectDir, configDirName, "database.json"));
243
+ if (scope2) return scope2;
244
+ }
245
+ const scope = loadOmScopeFromConfig(path.join(os.homedir(), configDirName, "database.json"));
246
+ if (scope) return scope;
247
+ return "thread";
248
+ }
249
+ function loadOmScopeFromConfig(filePath) {
250
+ try {
251
+ if (!fs.existsSync(filePath)) return null;
252
+ const raw = fs.readFileSync(filePath, "utf-8");
253
+ const parsed = JSON.parse(raw);
254
+ if (parsed?.omScope === "thread" || parsed?.omScope === "resource") {
255
+ return parsed.omScope;
256
+ }
257
+ return null;
258
+ } catch {
259
+ return null;
260
+ }
261
+ }
262
+ function getResourceIdOverride(projectDir, configDirName = DEFAULT_CONFIG_DIR) {
263
+ if (process.env.MASTRA_RESOURCE_ID) {
264
+ return process.env.MASTRA_RESOURCE_ID;
265
+ }
266
+ if (projectDir) {
267
+ const rid2 = loadStringField(path.join(projectDir, configDirName, "database.json"), "resourceId");
268
+ if (rid2) return rid2;
269
+ }
270
+ const rid = loadStringField(path.join(os.homedir(), configDirName, "database.json"), "resourceId");
271
+ if (rid) return rid;
272
+ return null;
273
+ }
274
+ function loadStringField(filePath, field) {
275
+ try {
276
+ if (!fs.existsSync(filePath)) return null;
277
+ const raw = fs.readFileSync(filePath, "utf-8");
278
+ const parsed = JSON.parse(raw);
279
+ const value = parsed?.[field];
280
+ if (typeof value === "string" && value) {
281
+ return value;
282
+ }
283
+ return null;
284
+ } catch {
285
+ return null;
286
+ }
287
+ }
288
+ export {
289
+ detectProject,
290
+ getAppDataDir,
291
+ getCurrentGitBranch,
292
+ getCurrentGitBranchAsync,
293
+ getDatabasePath,
294
+ getObservabilityDatabasePath,
295
+ getOmScope,
296
+ getResourceIdOverride,
297
+ getStorageConfig,
298
+ getUserId,
299
+ getUserName,
300
+ getVectorDatabasePath
301
+ };
302
+ //# sourceMappingURL=project.js.map