@mastra/code-sdk 0.0.0-aggregate-trace-20261015182851

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 (749) hide show
  1. package/LICENSE.md +32 -0
  2. package/README.md +284 -0
  3. package/dist/acp/agent.d.ts +48 -0
  4. package/dist/acp/agent.d.ts.map +1 -0
  5. package/dist/acp/agent.js +416 -0
  6. package/dist/acp/agent.js.map +1 -0
  7. package/dist/acp/errors.d.ts +3 -0
  8. package/dist/acp/errors.d.ts.map +1 -0
  9. package/dist/acp/errors.js +14 -0
  10. package/dist/acp/errors.js.map +1 -0
  11. package/dist/acp/event-mapper.d.ts +28 -0
  12. package/dist/acp/event-mapper.d.ts.map +1 -0
  13. package/dist/acp/event-mapper.js +279 -0
  14. package/dist/acp/event-mapper.js.map +1 -0
  15. package/dist/acp/index.d.ts +9 -0
  16. package/dist/acp/index.d.ts.map +1 -0
  17. package/dist/acp/index.js +24 -0
  18. package/dist/acp/index.js.map +1 -0
  19. package/dist/acp/runtime.d.ts +5 -0
  20. package/dist/acp/runtime.d.ts.map +1 -0
  21. package/dist/acp/runtime.js +91 -0
  22. package/dist/acp/runtime.js.map +1 -0
  23. package/dist/acp/server.d.ts +4 -0
  24. package/dist/acp/server.d.ts.map +1 -0
  25. package/dist/acp/server.js +38 -0
  26. package/dist/acp/server.js.map +1 -0
  27. package/dist/acp/skills.d.ts +6 -0
  28. package/dist/acp/skills.d.ts.map +1 -0
  29. package/dist/acp/skills.js +33 -0
  30. package/dist/acp/skills.js.map +1 -0
  31. package/dist/acp.d.ts +2 -0
  32. package/dist/acp.d.ts.map +1 -0
  33. package/dist/acp.js +2 -0
  34. package/dist/agent-connections/messaging-processor.d.ts +17 -0
  35. package/dist/agent-connections/messaging-processor.d.ts.map +1 -0
  36. package/dist/agent-connections/messaging-processor.js +134 -0
  37. package/dist/agent-connections/messaging-processor.js.map +1 -0
  38. package/dist/agent-connections/ownership.d.ts +24 -0
  39. package/dist/agent-connections/ownership.d.ts.map +1 -0
  40. package/dist/agent-connections/ownership.js +99 -0
  41. package/dist/agent-connections/ownership.js.map +1 -0
  42. package/dist/agent-connections/registry.d.ts +20 -0
  43. package/dist/agent-connections/registry.d.ts.map +1 -0
  44. package/dist/agent-connections/registry.js +170 -0
  45. package/dist/agent-connections/registry.js.map +1 -0
  46. package/dist/agent-connections/session-advertisement.d.ts +27 -0
  47. package/dist/agent-connections/session-advertisement.d.ts.map +1 -0
  48. package/dist/agent-connections/session-advertisement.js +89 -0
  49. package/dist/agent-connections/session-advertisement.js.map +1 -0
  50. package/dist/agent-connections/signal-provider.d.ts +141 -0
  51. package/dist/agent-connections/signal-provider.d.ts.map +1 -0
  52. package/dist/agent-connections/signal-provider.js +38 -0
  53. package/dist/agent-connections/signal-provider.js.map +1 -0
  54. package/dist/agent-connections/state-processor.d.ts +23 -0
  55. package/dist/agent-connections/state-processor.d.ts.map +1 -0
  56. package/dist/agent-connections/state-processor.js +273 -0
  57. package/dist/agent-connections/state-processor.js.map +1 -0
  58. package/dist/agent-connections/thread-state.d.ts +41 -0
  59. package/dist/agent-connections/thread-state.d.ts.map +1 -0
  60. package/dist/agent-connections/thread-state.js +160 -0
  61. package/dist/agent-connections/thread-state.js.map +1 -0
  62. package/dist/agent-connections/tools.d.ts +133 -0
  63. package/dist/agent-connections/tools.d.ts.map +1 -0
  64. package/dist/agent-connections/tools.js +552 -0
  65. package/dist/agent-connections/tools.js.map +1 -0
  66. package/dist/agent-connections/types.d.ts +99 -0
  67. package/dist/agent-connections/types.d.ts.map +1 -0
  68. package/dist/agent-connections/types.js +7 -0
  69. package/dist/agent-connections/types.js.map +1 -0
  70. package/dist/agent-connections/untrusted-text.d.ts +5 -0
  71. package/dist/agent-connections/untrusted-text.d.ts.map +1 -0
  72. package/dist/agent-connections/untrusted-text.js +22 -0
  73. package/dist/agent-connections/untrusted-text.js.map +1 -0
  74. package/dist/agents/background-completion-events.d.ts +16 -0
  75. package/dist/agents/background-completion-events.d.ts.map +1 -0
  76. package/dist/agents/background-completion-events.js +19 -0
  77. package/dist/agents/background-completion-events.js.map +1 -0
  78. package/dist/agents/background-completion.d.ts +9 -0
  79. package/dist/agents/background-completion.d.ts.map +1 -0
  80. package/dist/agents/background-completion.js +59 -0
  81. package/dist/agents/background-completion.js.map +1 -0
  82. package/dist/agents/context-audit.d.ts +84 -0
  83. package/dist/agents/context-audit.d.ts.map +1 -0
  84. package/dist/agents/context-audit.js +118 -0
  85. package/dist/agents/context-audit.js.map +1 -0
  86. package/dist/agents/credential-resolver.d.ts +67 -0
  87. package/dist/agents/credential-resolver.d.ts.map +1 -0
  88. package/dist/agents/credential-resolver.js +136 -0
  89. package/dist/agents/credential-resolver.js.map +1 -0
  90. package/dist/agents/custom-provider-source.d.ts +35 -0
  91. package/dist/agents/custom-provider-source.d.ts.map +1 -0
  92. package/dist/agents/custom-provider-source.js +25 -0
  93. package/dist/agents/custom-provider-source.js.map +1 -0
  94. package/dist/agents/instructions.d.ts +40 -0
  95. package/dist/agents/instructions.d.ts.map +1 -0
  96. package/dist/agents/instructions.js +63 -0
  97. package/dist/agents/instructions.js.map +1 -0
  98. package/dist/agents/mastracode-gateway.d.ts +76 -0
  99. package/dist/agents/mastracode-gateway.d.ts.map +1 -0
  100. package/dist/agents/mastracode-gateway.js +434 -0
  101. package/dist/agents/mastracode-gateway.js.map +1 -0
  102. package/dist/agents/memory.d.ts +39 -0
  103. package/dist/agents/memory.d.ts.map +1 -0
  104. package/dist/agents/memory.js +266 -0
  105. package/dist/agents/memory.js.map +1 -0
  106. package/dist/agents/model.d.ts +123 -0
  107. package/dist/agents/model.d.ts.map +1 -0
  108. package/dist/agents/model.js +295 -0
  109. package/dist/agents/model.js.map +1 -0
  110. package/dist/agents/modes/build.d.ts +12 -0
  111. package/dist/agents/modes/build.d.ts.map +1 -0
  112. package/dist/agents/modes/build.js +36 -0
  113. package/dist/agents/modes/build.js.map +1 -0
  114. package/dist/agents/modes/explore.d.ts +10 -0
  115. package/dist/agents/modes/explore.d.ts.map +1 -0
  116. package/dist/agents/modes/explore.js +28 -0
  117. package/dist/agents/modes/explore.js.map +1 -0
  118. package/dist/agents/modes/plan.d.ts +8 -0
  119. package/dist/agents/modes/plan.d.ts.map +1 -0
  120. package/dist/agents/modes/plan.js +46 -0
  121. package/dist/agents/modes/plan.js.map +1 -0
  122. package/dist/agents/prompts/agent-instructions.d.ts +99 -0
  123. package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
  124. package/dist/agents/prompts/agent-instructions.js +275 -0
  125. package/dist/agents/prompts/agent-instructions.js.map +1 -0
  126. package/dist/agents/prompts/build.d.ts +12 -0
  127. package/dist/agents/prompts/build.d.ts.map +1 -0
  128. package/dist/agents/prompts/build.js +76 -0
  129. package/dist/agents/prompts/build.js.map +1 -0
  130. package/dist/agents/prompts/fast.d.ts +5 -0
  131. package/dist/agents/prompts/fast.d.ts.map +1 -0
  132. package/dist/agents/prompts/fast.js +26 -0
  133. package/dist/agents/prompts/fast.js.map +1 -0
  134. package/dist/agents/prompts/index.d.ts +54 -0
  135. package/dist/agents/prompts/index.d.ts.map +1 -0
  136. package/dist/agents/prompts/index.js +127 -0
  137. package/dist/agents/prompts/index.js.map +1 -0
  138. package/dist/agents/prompts/model.d.ts +5 -0
  139. package/dist/agents/prompts/model.d.ts.map +1 -0
  140. package/dist/agents/prompts/model.js +23 -0
  141. package/dist/agents/prompts/model.js.map +1 -0
  142. package/dist/agents/prompts/plan.d.ts +8 -0
  143. package/dist/agents/prompts/plan.d.ts.map +1 -0
  144. package/dist/agents/prompts/plan.js +129 -0
  145. package/dist/agents/prompts/plan.js.map +1 -0
  146. package/dist/agents/prompts/tool-guidance.d.ts +18 -0
  147. package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
  148. package/dist/agents/prompts/tool-guidance.js +181 -0
  149. package/dist/agents/prompts/tool-guidance.js.map +1 -0
  150. package/dist/agents/sandbox-filesystem.d.ts +151 -0
  151. package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
  152. package/dist/agents/sandbox-filesystem.js +581 -0
  153. package/dist/agents/sandbox-filesystem.js.map +1 -0
  154. package/dist/agents/subagents/execute.d.ts +3 -0
  155. package/dist/agents/subagents/execute.d.ts.map +1 -0
  156. package/dist/agents/subagents/execute.js +27 -0
  157. package/dist/agents/subagents/execute.js.map +1 -0
  158. package/dist/agents/subagents/explore.d.ts +3 -0
  159. package/dist/agents/subagents/explore.d.ts.map +1 -0
  160. package/dist/agents/subagents/explore.js +18 -0
  161. package/dist/agents/subagents/explore.js.map +1 -0
  162. package/dist/agents/subagents/plan.d.ts +3 -0
  163. package/dist/agents/subagents/plan.d.ts.map +1 -0
  164. package/dist/agents/subagents/plan.js +18 -0
  165. package/dist/agents/subagents/plan.js.map +1 -0
  166. package/dist/agents/thread-caveman-state.d.ts +17 -0
  167. package/dist/agents/thread-caveman-state.d.ts.map +1 -0
  168. package/dist/agents/thread-caveman-state.js +107 -0
  169. package/dist/agents/thread-caveman-state.js.map +1 -0
  170. package/dist/agents/tool-availability.d.ts +12 -0
  171. package/dist/agents/tool-availability.d.ts.map +1 -0
  172. package/dist/agents/tool-availability.js +129 -0
  173. package/dist/agents/tool-availability.js.map +1 -0
  174. package/dist/agents/tools.d.ts +37 -0
  175. package/dist/agents/tools.d.ts.map +1 -0
  176. package/dist/agents/tools.js +131 -0
  177. package/dist/agents/tools.js.map +1 -0
  178. package/dist/agents/workflow-builder-agent.d.ts +2 -0
  179. package/dist/agents/workflow-builder-agent.d.ts.map +1 -0
  180. package/dist/agents/workflow-builder-agent.js +82 -0
  181. package/dist/agents/workflow-builder-agent.js.map +1 -0
  182. package/dist/agents/workspace.d.ts +33 -0
  183. package/dist/agents/workspace.d.ts.map +1 -0
  184. package/dist/agents/workspace.js +208 -0
  185. package/dist/agents/workspace.js.map +1 -0
  186. package/dist/analytics.d.ts +18 -0
  187. package/dist/analytics.d.ts.map +1 -0
  188. package/dist/analytics.js +162 -0
  189. package/dist/analytics.js.map +1 -0
  190. package/dist/auth/account-rotation-processor.d.ts +182 -0
  191. package/dist/auth/account-rotation-processor.d.ts.map +1 -0
  192. package/dist/auth/account-rotation-processor.js +609 -0
  193. package/dist/auth/account-rotation-processor.js.map +1 -0
  194. package/dist/auth/account-routing-context.d.ts +13 -0
  195. package/dist/auth/account-routing-context.d.ts.map +1 -0
  196. package/dist/auth/account-routing-context.js +41 -0
  197. package/dist/auth/account-routing-context.js.map +1 -0
  198. package/dist/auth/authorization-input.d.ts +16 -0
  199. package/dist/auth/authorization-input.d.ts.map +1 -0
  200. package/dist/auth/authorization-input.js +42 -0
  201. package/dist/auth/authorization-input.js.map +1 -0
  202. package/dist/auth/device-code.d.ts +93 -0
  203. package/dist/auth/device-code.d.ts.map +1 -0
  204. package/dist/auth/device-code.js +129 -0
  205. package/dist/auth/device-code.js.map +1 -0
  206. package/dist/auth/index.d.ts +13 -0
  207. package/dist/auth/index.d.ts.map +1 -0
  208. package/dist/auth/index.js +9 -0
  209. package/dist/auth/pkce.d.ts +13 -0
  210. package/dist/auth/pkce.d.ts.map +1 -0
  211. package/dist/auth/pkce.js +32 -0
  212. package/dist/auth/pkce.js.map +1 -0
  213. package/dist/auth/provider-auth-error.d.ts +12 -0
  214. package/dist/auth/provider-auth-error.d.ts.map +1 -0
  215. package/dist/auth/provider-auth-error.js +16 -0
  216. package/dist/auth/provider-auth-error.js.map +1 -0
  217. package/dist/auth/providers/anthropic.d.ts +40 -0
  218. package/dist/auth/providers/anthropic.d.ts.map +1 -0
  219. package/dist/auth/providers/anthropic.js +120 -0
  220. package/dist/auth/providers/anthropic.js.map +1 -0
  221. package/dist/auth/providers/github-copilot.d.ts +154 -0
  222. package/dist/auth/providers/github-copilot.d.ts.map +1 -0
  223. package/dist/auth/providers/github-copilot.js +362 -0
  224. package/dist/auth/providers/github-copilot.js.map +1 -0
  225. package/dist/auth/providers/kimi-coding.d.ts +38 -0
  226. package/dist/auth/providers/kimi-coding.d.ts.map +1 -0
  227. package/dist/auth/providers/kimi-coding.js +228 -0
  228. package/dist/auth/providers/kimi-coding.js.map +1 -0
  229. package/dist/auth/providers/openai-codex.d.ts +141 -0
  230. package/dist/auth/providers/openai-codex.d.ts.map +1 -0
  231. package/dist/auth/providers/openai-codex.js +533 -0
  232. package/dist/auth/providers/openai-codex.js.map +1 -0
  233. package/dist/auth/providers/xai.d.ts +64 -0
  234. package/dist/auth/providers/xai.d.ts.map +1 -0
  235. package/dist/auth/providers/xai.js +226 -0
  236. package/dist/auth/providers/xai.js.map +1 -0
  237. package/dist/auth/storage.d.ts +214 -0
  238. package/dist/auth/storage.d.ts.map +1 -0
  239. package/dist/auth/storage.js +774 -0
  240. package/dist/auth/storage.js.map +1 -0
  241. package/dist/auth/types.d.ts +164 -0
  242. package/dist/auth/types.d.ts.map +1 -0
  243. package/dist/auth/types.js +1 -0
  244. package/dist/clipboard/index.d.ts +26 -0
  245. package/dist/clipboard/index.d.ts.map +1 -0
  246. package/dist/clipboard/index.js +226 -0
  247. package/dist/clipboard/index.js.map +1 -0
  248. package/dist/constants.d.ts +12 -0
  249. package/dist/constants.d.ts.map +1 -0
  250. package/dist/constants.js +20 -0
  251. package/dist/constants.js.map +1 -0
  252. package/dist/error-classification.d.ts +10 -0
  253. package/dist/error-classification.d.ts.map +1 -0
  254. package/dist/error-classification.js +22 -0
  255. package/dist/error-classification.js.map +1 -0
  256. package/dist/evals/context-builder.d.ts +41 -0
  257. package/dist/evals/context-builder.d.ts.map +1 -0
  258. package/dist/evals/context-builder.js +161 -0
  259. package/dist/evals/context-builder.js.map +1 -0
  260. package/dist/evals/index.d.ts +4 -0
  261. package/dist/evals/index.d.ts.map +1 -0
  262. package/dist/evals/index.js +5 -0
  263. package/dist/evals/scorers/classify-command.d.ts +31 -0
  264. package/dist/evals/scorers/classify-command.d.ts.map +1 -0
  265. package/dist/evals/scorers/classify-command.js +73 -0
  266. package/dist/evals/scorers/classify-command.js.map +1 -0
  267. package/dist/evals/scorers/efficiency.d.ts +44 -0
  268. package/dist/evals/scorers/efficiency.d.ts.map +1 -0
  269. package/dist/evals/scorers/efficiency.js +259 -0
  270. package/dist/evals/scorers/efficiency.js.map +1 -0
  271. package/dist/evals/scorers/extract-tools.d.ts +25 -0
  272. package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
  273. package/dist/evals/scorers/extract-tools.js +60 -0
  274. package/dist/evals/scorers/extract-tools.js.map +1 -0
  275. package/dist/evals/scorers/index.d.ts +3 -0
  276. package/dist/evals/scorers/index.d.ts.map +1 -0
  277. package/dist/evals/scorers/index.js +3 -0
  278. package/dist/evals/scorers/outcome.d.ts +49 -0
  279. package/dist/evals/scorers/outcome.d.ts.map +1 -0
  280. package/dist/evals/scorers/outcome.js +347 -0
  281. package/dist/evals/scorers/outcome.js.map +1 -0
  282. package/dist/experimental-agent.d.ts +11 -0
  283. package/dist/experimental-agent.d.ts.map +1 -0
  284. package/dist/experimental-agent.js +36 -0
  285. package/dist/experimental-agent.js.map +1 -0
  286. package/dist/goal-manager.d.ts +114 -0
  287. package/dist/goal-manager.d.ts.map +1 -0
  288. package/dist/goal-manager.js +354 -0
  289. package/dist/goal-manager.js.map +1 -0
  290. package/dist/goal-signal.d.ts +14 -0
  291. package/dist/goal-signal.d.ts.map +1 -0
  292. package/dist/goal-signal.js +17 -0
  293. package/dist/goal-signal.js.map +1 -0
  294. package/dist/headless/cli.d.ts +48 -0
  295. package/dist/headless/cli.d.ts.map +1 -0
  296. package/dist/headless/cli.js +239 -0
  297. package/dist/headless/cli.js.map +1 -0
  298. package/dist/headless/flags.d.ts +33 -0
  299. package/dist/headless/flags.d.ts.map +1 -0
  300. package/dist/headless/flags.js +203 -0
  301. package/dist/headless/flags.js.map +1 -0
  302. package/dist/headless/format.d.ts +39 -0
  303. package/dist/headless/format.d.ts.map +1 -0
  304. package/dist/headless/format.js +85 -0
  305. package/dist/headless/format.js.map +1 -0
  306. package/dist/headless/index.d.ts +25 -0
  307. package/dist/headless/index.d.ts.map +1 -0
  308. package/dist/headless/index.js +6 -0
  309. package/dist/headless/policy.d.ts +17 -0
  310. package/dist/headless/policy.d.ts.map +1 -0
  311. package/dist/headless/policy.js +42 -0
  312. package/dist/headless/policy.js.map +1 -0
  313. package/dist/headless/run-mc.d.ts +7 -0
  314. package/dist/headless/run-mc.d.ts.map +1 -0
  315. package/dist/headless/run-mc.js +408 -0
  316. package/dist/headless/run-mc.js.map +1 -0
  317. package/dist/headless/types.d.ts +174 -0
  318. package/dist/headless/types.d.ts.map +1 -0
  319. package/dist/headless/types.js +19 -0
  320. package/dist/headless/types.js.map +1 -0
  321. package/dist/hooks/config.d.ts +11 -0
  322. package/dist/hooks/config.d.ts.map +1 -0
  323. package/dist/hooks/config.js +80 -0
  324. package/dist/hooks/config.js.map +1 -0
  325. package/dist/hooks/executor.d.ts +13 -0
  326. package/dist/hooks/executor.d.ts.map +1 -0
  327. package/dist/hooks/executor.js +129 -0
  328. package/dist/hooks/executor.js.map +1 -0
  329. package/dist/hooks/index.d.ts +6 -0
  330. package/dist/hooks/index.d.ts.map +1 -0
  331. package/dist/hooks/index.js +5 -0
  332. package/dist/hooks/manager.d.ts +54 -0
  333. package/dist/hooks/manager.d.ts.map +1 -0
  334. package/dist/hooks/manager.js +241 -0
  335. package/dist/hooks/manager.js.map +1 -0
  336. package/dist/hooks/types.d.ts +172 -0
  337. package/dist/hooks/types.d.ts.map +1 -0
  338. package/dist/hooks/types.js +8 -0
  339. package/dist/hooks/types.js.map +1 -0
  340. package/dist/index.d.ts +463 -0
  341. package/dist/index.d.ts.map +1 -0
  342. package/dist/index.js +1305 -0
  343. package/dist/index.js.map +1 -0
  344. package/dist/ipc/ipc-reporter.d.ts +14 -0
  345. package/dist/ipc/ipc-reporter.d.ts.map +1 -0
  346. package/dist/ipc/ipc-reporter.js +21 -0
  347. package/dist/ipc/ipc-reporter.js.map +1 -0
  348. package/dist/knowledge-inspector.d.ts +123 -0
  349. package/dist/knowledge-inspector.d.ts.map +1 -0
  350. package/dist/knowledge-inspector.js +516 -0
  351. package/dist/knowledge-inspector.js.map +1 -0
  352. package/dist/knowledge-scope.d.ts +35 -0
  353. package/dist/knowledge-scope.d.ts.map +1 -0
  354. package/dist/knowledge-scope.js +47 -0
  355. package/dist/knowledge-scope.js.map +1 -0
  356. package/dist/lsp/client.d.ts +56 -0
  357. package/dist/lsp/client.d.ts.map +1 -0
  358. package/dist/lsp/client.js +251 -0
  359. package/dist/lsp/client.js.map +1 -0
  360. package/dist/lsp/index.d.ts +4 -0
  361. package/dist/lsp/index.d.ts.map +1 -0
  362. package/dist/lsp/index.js +4 -0
  363. package/dist/lsp/language.d.ts +9 -0
  364. package/dist/lsp/language.d.ts.map +1 -0
  365. package/dist/lsp/language.js +44 -0
  366. package/dist/lsp/language.js.map +1 -0
  367. package/dist/lsp/manager.d.ts +34 -0
  368. package/dist/lsp/manager.d.ts.map +1 -0
  369. package/dist/lsp/manager.js +82 -0
  370. package/dist/lsp/manager.js.map +1 -0
  371. package/dist/lsp/server.d.ts +27 -0
  372. package/dist/lsp/server.d.ts.map +1 -0
  373. package/dist/lsp/server.js +159 -0
  374. package/dist/lsp/server.js.map +1 -0
  375. package/dist/lsp/workspace.d.ts +9 -0
  376. package/dist/lsp/workspace.d.ts.map +1 -0
  377. package/dist/lsp/workspace.js +55 -0
  378. package/dist/lsp/workspace.js.map +1 -0
  379. package/dist/mcp/config.d.ts +77 -0
  380. package/dist/mcp/config.d.ts.map +1 -0
  381. package/dist/mcp/config.js +316 -0
  382. package/dist/mcp/config.js.map +1 -0
  383. package/dist/mcp/index.d.ts +6 -0
  384. package/dist/mcp/index.d.ts.map +1 -0
  385. package/dist/mcp/index.js +3 -0
  386. package/dist/mcp/manager.d.ts +102 -0
  387. package/dist/mcp/manager.d.ts.map +1 -0
  388. package/dist/mcp/manager.js +650 -0
  389. package/dist/mcp/manager.js.map +1 -0
  390. package/dist/mcp/state.d.ts +35 -0
  391. package/dist/mcp/state.d.ts.map +1 -0
  392. package/dist/mcp/state.js +97 -0
  393. package/dist/mcp/state.js.map +1 -0
  394. package/dist/mcp/types.d.ts +139 -0
  395. package/dist/mcp/types.d.ts.map +1 -0
  396. package/dist/mcp/types.js +1 -0
  397. package/dist/onboarding/custom-packs.d.ts +7 -0
  398. package/dist/onboarding/custom-packs.d.ts.map +1 -0
  399. package/dist/onboarding/custom-packs.js +20 -0
  400. package/dist/onboarding/custom-packs.js.map +1 -0
  401. package/dist/onboarding/custom-providers.d.ts +4 -0
  402. package/dist/onboarding/custom-providers.d.ts.map +1 -0
  403. package/dist/onboarding/custom-providers.js +30 -0
  404. package/dist/onboarding/custom-providers.js.map +1 -0
  405. package/dist/onboarding/index.d.ts +5 -0
  406. package/dist/onboarding/index.d.ts.map +1 -0
  407. package/dist/onboarding/index.js +3 -0
  408. package/dist/onboarding/om-settings.d.ts +47 -0
  409. package/dist/onboarding/om-settings.d.ts.map +1 -0
  410. package/dist/onboarding/om-settings.js +83 -0
  411. package/dist/onboarding/om-settings.js.map +1 -0
  412. package/dist/onboarding/pack-activation.d.ts +52 -0
  413. package/dist/onboarding/pack-activation.d.ts.map +1 -0
  414. package/dist/onboarding/pack-activation.js +108 -0
  415. package/dist/onboarding/pack-activation.js.map +1 -0
  416. package/dist/onboarding/packs.d.ts +102 -0
  417. package/dist/onboarding/packs.d.ts.map +1 -0
  418. package/dist/onboarding/packs.js +278 -0
  419. package/dist/onboarding/packs.js.map +1 -0
  420. package/dist/onboarding/settings.d.ts +538 -0
  421. package/dist/onboarding/settings.d.ts.map +1 -0
  422. package/dist/onboarding/settings.js +1060 -0
  423. package/dist/onboarding/settings.js.map +1 -0
  424. package/dist/permissions.d.ts +55 -0
  425. package/dist/permissions.d.ts.map +1 -0
  426. package/dist/permissions.js +142 -0
  427. package/dist/permissions.js.map +1 -0
  428. package/dist/plugin.d.ts +156 -0
  429. package/dist/plugin.d.ts.map +1 -0
  430. package/dist/plugin.js +30 -0
  431. package/dist/plugin.js.map +1 -0
  432. package/dist/plugins/dependencies.d.ts +9 -0
  433. package/dist/plugins/dependencies.d.ts.map +1 -0
  434. package/dist/plugins/dependencies.js +87 -0
  435. package/dist/plugins/dependencies.js.map +1 -0
  436. package/dist/plugins/install.d.ts +21 -0
  437. package/dist/plugins/install.d.ts.map +1 -0
  438. package/dist/plugins/install.js +190 -0
  439. package/dist/plugins/install.js.map +1 -0
  440. package/dist/plugins/loader.d.ts +19 -0
  441. package/dist/plugins/loader.d.ts.map +1 -0
  442. package/dist/plugins/loader.js +260 -0
  443. package/dist/plugins/loader.js.map +1 -0
  444. package/dist/plugins/manager.d.ts +98 -0
  445. package/dist/plugins/manager.d.ts.map +1 -0
  446. package/dist/plugins/manager.js +456 -0
  447. package/dist/plugins/manager.js.map +1 -0
  448. package/dist/plugins/manifest.d.ts +14 -0
  449. package/dist/plugins/manifest.d.ts.map +1 -0
  450. package/dist/plugins/manifest.js +50 -0
  451. package/dist/plugins/manifest.js.map +1 -0
  452. package/dist/plugins/package-link.d.ts +3 -0
  453. package/dist/plugins/package-link.d.ts.map +1 -0
  454. package/dist/plugins/package-link.js +61 -0
  455. package/dist/plugins/package-link.js.map +1 -0
  456. package/dist/plugins/paths.d.ts +10 -0
  457. package/dist/plugins/paths.d.ts.map +1 -0
  458. package/dist/plugins/paths.js +25 -0
  459. package/dist/plugins/paths.js.map +1 -0
  460. package/dist/plugins/registry.d.ts +8 -0
  461. package/dist/plugins/registry.d.ts.map +1 -0
  462. package/dist/plugins/registry.js +112 -0
  463. package/dist/plugins/registry.js.map +1 -0
  464. package/dist/plugins/scaffold.d.ts +10 -0
  465. package/dist/plugins/scaffold.d.ts.map +1 -0
  466. package/dist/plugins/scaffold.js +116 -0
  467. package/dist/plugins/scaffold.js.map +1 -0
  468. package/dist/plugins/signal-lane.d.ts +58 -0
  469. package/dist/plugins/signal-lane.d.ts.map +1 -0
  470. package/dist/plugins/signal-lane.js +166 -0
  471. package/dist/plugins/signal-lane.js.map +1 -0
  472. package/dist/plugins/types.d.ts +81 -0
  473. package/dist/plugins/types.d.ts.map +1 -0
  474. package/dist/plugins/types.js +1 -0
  475. package/dist/process-memory-diagnostics.d.ts +135 -0
  476. package/dist/process-memory-diagnostics.d.ts.map +1 -0
  477. package/dist/process-memory-diagnostics.js +499 -0
  478. package/dist/process-memory-diagnostics.js.map +1 -0
  479. package/dist/processors/plan-rejection-abort.d.ts +12 -0
  480. package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
  481. package/dist/processors/plan-rejection-abort.js +54 -0
  482. package/dist/processors/plan-rejection-abort.js.map +1 -0
  483. package/dist/providers/amazon-bedrock-gateway.d.ts +47 -0
  484. package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
  485. package/dist/providers/amazon-bedrock-gateway.js +144 -0
  486. package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
  487. package/dist/providers/amazon-bedrock.d.ts +28 -0
  488. package/dist/providers/amazon-bedrock.d.ts.map +1 -0
  489. package/dist/providers/amazon-bedrock.js +102 -0
  490. package/dist/providers/amazon-bedrock.js.map +1 -0
  491. package/dist/providers/anthropic-prompt-cache.d.ts +19 -0
  492. package/dist/providers/anthropic-prompt-cache.d.ts.map +1 -0
  493. package/dist/providers/anthropic-prompt-cache.js +11 -0
  494. package/dist/providers/anthropic-prompt-cache.js.map +1 -0
  495. package/dist/providers/anthropic-thinking.d.ts +5 -0
  496. package/dist/providers/anthropic-thinking.d.ts.map +1 -0
  497. package/dist/providers/anthropic-thinking.js +25 -0
  498. package/dist/providers/anthropic-thinking.js.map +1 -0
  499. package/dist/providers/claude-max.d.ts +67 -0
  500. package/dist/providers/claude-max.d.ts.map +1 -0
  501. package/dist/providers/claude-max.js +226 -0
  502. package/dist/providers/claude-max.js.map +1 -0
  503. package/dist/providers/github-copilot-gateway.d.ts +35 -0
  504. package/dist/providers/github-copilot-gateway.d.ts.map +1 -0
  505. package/dist/providers/github-copilot-gateway.js +61 -0
  506. package/dist/providers/github-copilot-gateway.js.map +1 -0
  507. package/dist/providers/github-copilot.d.ts +60 -0
  508. package/dist/providers/github-copilot.d.ts.map +1 -0
  509. package/dist/providers/github-copilot.js +318 -0
  510. package/dist/providers/github-copilot.js.map +1 -0
  511. package/dist/providers/google-thinking.d.ts +31 -0
  512. package/dist/providers/google-thinking.d.ts.map +1 -0
  513. package/dist/providers/google-thinking.js +67 -0
  514. package/dist/providers/google-thinking.js.map +1 -0
  515. package/dist/providers/kimi-coding.d.ts +14 -0
  516. package/dist/providers/kimi-coding.d.ts.map +1 -0
  517. package/dist/providers/kimi-coding.js +78 -0
  518. package/dist/providers/kimi-coding.js.map +1 -0
  519. package/dist/providers/model-ids.d.ts +30 -0
  520. package/dist/providers/model-ids.d.ts.map +1 -0
  521. package/dist/providers/model-ids.js +79 -0
  522. package/dist/providers/model-ids.js.map +1 -0
  523. package/dist/providers/openai-codex.d.ts +84 -0
  524. package/dist/providers/openai-codex.d.ts.map +1 -0
  525. package/dist/providers/openai-codex.js +347 -0
  526. package/dist/providers/openai-codex.js.map +1 -0
  527. package/dist/providers/provider-thinking.d.ts +23 -0
  528. package/dist/providers/provider-thinking.d.ts.map +1 -0
  529. package/dist/providers/provider-thinking.js +64 -0
  530. package/dist/providers/provider-thinking.js.map +1 -0
  531. package/dist/providers/thinking-request.d.ts +14 -0
  532. package/dist/providers/thinking-request.d.ts.map +1 -0
  533. package/dist/providers/thinking-request.js +90 -0
  534. package/dist/providers/thinking-request.js.map +1 -0
  535. package/dist/providers/xai.d.ts +33 -0
  536. package/dist/providers/xai.d.ts.map +1 -0
  537. package/dist/providers/xai.js +71 -0
  538. package/dist/providers/xai.js.map +1 -0
  539. package/dist/schedules/index.d.ts +10 -0
  540. package/dist/schedules/index.d.ts.map +1 -0
  541. package/dist/schedules/index.js +6 -0
  542. package/dist/schedules/interval.d.ts +49 -0
  543. package/dist/schedules/interval.d.ts.map +1 -0
  544. package/dist/schedules/interval.js +215 -0
  545. package/dist/schedules/interval.js.map +1 -0
  546. package/dist/schedules/prompt.d.ts +36 -0
  547. package/dist/schedules/prompt.d.ts.map +1 -0
  548. package/dist/schedules/prompt.js +39 -0
  549. package/dist/schedules/prompt.js.map +1 -0
  550. package/dist/schedules/run-script.d.ts +8 -0
  551. package/dist/schedules/run-script.d.ts.map +1 -0
  552. package/dist/schedules/run-script.js +83 -0
  553. package/dist/schedules/run-script.js.map +1 -0
  554. package/dist/schedules/scheduler.d.ts +101 -0
  555. package/dist/schedules/scheduler.d.ts.map +1 -0
  556. package/dist/schedules/scheduler.js +169 -0
  557. package/dist/schedules/scheduler.js.map +1 -0
  558. package/dist/schedules/tools.d.ts +57 -0
  559. package/dist/schedules/tools.d.ts.map +1 -0
  560. package/dist/schedules/tools.js +220 -0
  561. package/dist/schedules/tools.js.map +1 -0
  562. package/dist/schema.d.ts +499 -0
  563. package/dist/schema.d.ts.map +1 -0
  564. package/dist/schema.js +134 -0
  565. package/dist/schema.js.map +1 -0
  566. package/dist/theme-palette.d.ts +17 -0
  567. package/dist/theme-palette.d.ts.map +1 -0
  568. package/dist/theme-palette.js +21 -0
  569. package/dist/theme-palette.js.map +1 -0
  570. package/dist/thinking-catalog.d.ts +4 -0
  571. package/dist/thinking-catalog.d.ts.map +1 -0
  572. package/dist/thinking-catalog.js +13 -0
  573. package/dist/thinking-catalog.js.map +1 -0
  574. package/dist/thinking.d.ts +37 -0
  575. package/dist/thinking.d.ts.map +1 -0
  576. package/dist/thinking.js +137 -0
  577. package/dist/thinking.js.map +1 -0
  578. package/dist/tool-names.d.ts +77 -0
  579. package/dist/tool-names.d.ts.map +1 -0
  580. package/dist/tool-names.js +56 -0
  581. package/dist/tool-names.js.map +1 -0
  582. package/dist/tools/index.d.ts +6 -0
  583. package/dist/tools/index.d.ts.map +1 -0
  584. package/dist/tools/index.js +3 -0
  585. package/dist/tools/request-sandbox-access.d.ts +6 -0
  586. package/dist/tools/request-sandbox-access.d.ts.map +1 -0
  587. package/dist/tools/request-sandbox-access.js +80 -0
  588. package/dist/tools/request-sandbox-access.js.map +1 -0
  589. package/dist/tools/utils.d.ts +20 -0
  590. package/dist/tools/utils.d.ts.map +1 -0
  591. package/dist/tools/utils.js +32 -0
  592. package/dist/tools/utils.js.map +1 -0
  593. package/dist/tools/web-search.d.ts +114 -0
  594. package/dist/tools/web-search.d.ts.map +1 -0
  595. package/dist/tools/web-search.js +155 -0
  596. package/dist/tools/web-search.js.map +1 -0
  597. package/dist/tools/workflows/create-workflow.d.ts +7 -0
  598. package/dist/tools/workflows/create-workflow.d.ts.map +1 -0
  599. package/dist/tools/workflows/create-workflow.js +81 -0
  600. package/dist/tools/workflows/create-workflow.js.map +1 -0
  601. package/dist/tools/workflows/delete-workflow.d.ts +7 -0
  602. package/dist/tools/workflows/delete-workflow.d.ts.map +1 -0
  603. package/dist/tools/workflows/delete-workflow.js +21 -0
  604. package/dist/tools/workflows/delete-workflow.js.map +1 -0
  605. package/dist/tools/workflows/ephemeral-memory.d.ts +28 -0
  606. package/dist/tools/workflows/ephemeral-memory.d.ts.map +1 -0
  607. package/dist/tools/workflows/ephemeral-memory.js +44 -0
  608. package/dist/tools/workflows/ephemeral-memory.js.map +1 -0
  609. package/dist/tools/workflows/extract-json-schema.d.ts +12 -0
  610. package/dist/tools/workflows/extract-json-schema.d.ts.map +1 -0
  611. package/dist/tools/workflows/extract-json-schema.js +22 -0
  612. package/dist/tools/workflows/extract-json-schema.js.map +1 -0
  613. package/dist/tools/workflows/get-workflow.d.ts +11 -0
  614. package/dist/tools/workflows/get-workflow.d.ts.map +1 -0
  615. package/dist/tools/workflows/get-workflow.js +34 -0
  616. package/dist/tools/workflows/get-workflow.js.map +1 -0
  617. package/dist/tools/workflows/list-available-agents.d.ts +8 -0
  618. package/dist/tools/workflows/list-available-agents.d.ts.map +1 -0
  619. package/dist/tools/workflows/list-available-agents.js +32 -0
  620. package/dist/tools/workflows/list-available-agents.js.map +1 -0
  621. package/dist/tools/workflows/list-available-classifiers.d.ts +19 -0
  622. package/dist/tools/workflows/list-available-classifiers.d.ts.map +1 -0
  623. package/dist/tools/workflows/list-available-classifiers.js +56 -0
  624. package/dist/tools/workflows/list-available-classifiers.js.map +1 -0
  625. package/dist/tools/workflows/list-available-tools.d.ts +9 -0
  626. package/dist/tools/workflows/list-available-tools.d.ts.map +1 -0
  627. package/dist/tools/workflows/list-available-tools.js +40 -0
  628. package/dist/tools/workflows/list-available-tools.js.map +1 -0
  629. package/dist/tools/workflows/list-available-workflows.d.ts +9 -0
  630. package/dist/tools/workflows/list-available-workflows.d.ts.map +1 -0
  631. package/dist/tools/workflows/list-available-workflows.js +32 -0
  632. package/dist/tools/workflows/list-available-workflows.js.map +1 -0
  633. package/dist/tools/workflows/list-workflows.d.ts +9 -0
  634. package/dist/tools/workflows/list-workflows.d.ts.map +1 -0
  635. package/dist/tools/workflows/list-workflows.js +33 -0
  636. package/dist/tools/workflows/list-workflows.js.map +1 -0
  637. package/dist/tools/workflows/run-workflow.d.ts +9 -0
  638. package/dist/tools/workflows/run-workflow.d.ts.map +1 -0
  639. package/dist/tools/workflows/run-workflow.js +52 -0
  640. package/dist/tools/workflows/run-workflow.js.map +1 -0
  641. package/dist/tools/workflows/save-workflow.d.ts +1125 -0
  642. package/dist/tools/workflows/save-workflow.d.ts.map +1 -0
  643. package/dist/tools/workflows/save-workflow.js +28 -0
  644. package/dist/tools/workflows/save-workflow.js.map +1 -0
  645. package/dist/tools/workflows/tool-ids.d.ts +16 -0
  646. package/dist/tools/workflows/tool-ids.d.ts.map +1 -0
  647. package/dist/tools/workflows/tool-ids.js +20 -0
  648. package/dist/tools/workflows/tool-ids.js.map +1 -0
  649. package/dist/utils/binaries.d.ts +7 -0
  650. package/dist/utils/binaries.d.ts.map +1 -0
  651. package/dist/utils/binaries.js +78 -0
  652. package/dist/utils/binaries.js.map +1 -0
  653. package/dist/utils/debug-log.d.ts +12 -0
  654. package/dist/utils/debug-log.d.ts.map +1 -0
  655. package/dist/utils/debug-log.js +59 -0
  656. package/dist/utils/debug-log.js.map +1 -0
  657. package/dist/utils/discarding-scores-storage.d.ts +33 -0
  658. package/dist/utils/discarding-scores-storage.d.ts.map +1 -0
  659. package/dist/utils/discarding-scores-storage.js +54 -0
  660. package/dist/utils/discarding-scores-storage.js.map +1 -0
  661. package/dist/utils/errors.d.ts +36 -0
  662. package/dist/utils/errors.d.ts.map +1 -0
  663. package/dist/utils/errors.js +196 -0
  664. package/dist/utils/errors.js.map +1 -0
  665. package/dist/utils/gateway-sync.d.ts +26 -0
  666. package/dist/utils/gateway-sync.d.ts.map +1 -0
  667. package/dist/utils/gateway-sync.js +61 -0
  668. package/dist/utils/gateway-sync.js.map +1 -0
  669. package/dist/utils/maintenance-lock.d.ts +42 -0
  670. package/dist/utils/maintenance-lock.d.ts.map +1 -0
  671. package/dist/utils/maintenance-lock.js +199 -0
  672. package/dist/utils/maintenance-lock.js.map +1 -0
  673. package/dist/utils/notification-dispatch.d.ts +59 -0
  674. package/dist/utils/notification-dispatch.d.ts.map +1 -0
  675. package/dist/utils/notification-dispatch.js +109 -0
  676. package/dist/utils/notification-dispatch.js.map +1 -0
  677. package/dist/utils/open-url.d.ts +10 -0
  678. package/dist/utils/open-url.d.ts.map +1 -0
  679. package/dist/utils/open-url.js +30 -0
  680. package/dist/utils/open-url.js.map +1 -0
  681. package/dist/utils/path-security.d.ts +2 -0
  682. package/dist/utils/path-security.d.ts.map +1 -0
  683. package/dist/utils/path-security.js +10 -0
  684. package/dist/utils/path-security.js.map +1 -0
  685. package/dist/utils/plan-diff.d.ts +25 -0
  686. package/dist/utils/plan-diff.d.ts.map +1 -0
  687. package/dist/utils/plan-diff.js +62 -0
  688. package/dist/utils/plan-diff.js.map +1 -0
  689. package/dist/utils/plans.d.ts +59 -0
  690. package/dist/utils/plans.d.ts.map +1 -0
  691. package/dist/utils/plans.js +117 -0
  692. package/dist/utils/plans.js.map +1 -0
  693. package/dist/utils/project.d.ts +160 -0
  694. package/dist/utils/project.d.ts.map +1 -0
  695. package/dist/utils/project.js +364 -0
  696. package/dist/utils/project.js.map +1 -0
  697. package/dist/utils/prune-cli.d.ts +24 -0
  698. package/dist/utils/prune-cli.d.ts.map +1 -0
  699. package/dist/utils/prune-cli.js +125 -0
  700. package/dist/utils/prune-cli.js.map +1 -0
  701. package/dist/utils/signals-pubsub.d.ts +101 -0
  702. package/dist/utils/signals-pubsub.d.ts.map +1 -0
  703. package/dist/utils/signals-pubsub.js +410 -0
  704. package/dist/utils/signals-pubsub.js.map +1 -0
  705. package/dist/utils/slash-command-loader.d.ts +52 -0
  706. package/dist/utils/slash-command-loader.d.ts.map +1 -0
  707. package/dist/utils/slash-command-loader.js +142 -0
  708. package/dist/utils/slash-command-loader.js.map +1 -0
  709. package/dist/utils/slash-command-processor.d.ts +14 -0
  710. package/dist/utils/slash-command-processor.d.ts.map +1 -0
  711. package/dist/utils/slash-command-processor.js +109 -0
  712. package/dist/utils/slash-command-processor.js.map +1 -0
  713. package/dist/utils/stdin-pipe.d.ts +33 -0
  714. package/dist/utils/stdin-pipe.d.ts.map +1 -0
  715. package/dist/utils/stdin-pipe.js +96 -0
  716. package/dist/utils/stdin-pipe.js.map +1 -0
  717. package/dist/utils/storage-factory.d.ts +50 -0
  718. package/dist/utils/storage-factory.d.ts.map +1 -0
  719. package/dist/utils/storage-factory.js +121 -0
  720. package/dist/utils/storage-factory.js.map +1 -0
  721. package/dist/utils/storage-maintenance.d.ts +121 -0
  722. package/dist/utils/storage-maintenance.d.ts.map +1 -0
  723. package/dist/utils/storage-maintenance.js +355 -0
  724. package/dist/utils/storage-maintenance.js.map +1 -0
  725. package/dist/utils/thread-lock.d.ts +26 -0
  726. package/dist/utils/thread-lock.d.ts.map +1 -0
  727. package/dist/utils/thread-lock.js +112 -0
  728. package/dist/utils/thread-lock.js.map +1 -0
  729. package/dist/utils/token-estimator.d.ts +3 -0
  730. package/dist/utils/token-estimator.d.ts.map +1 -0
  731. package/dist/utils/token-estimator.js +21 -0
  732. package/dist/utils/token-estimator.js.map +1 -0
  733. package/dist/utils/update-check.d.ts +151 -0
  734. package/dist/utils/update-check.d.ts.map +1 -0
  735. package/dist/utils/update-check.js +432 -0
  736. package/dist/utils/update-check.js.map +1 -0
  737. package/dist/voice/stt-registry.d.ts +64 -0
  738. package/dist/voice/stt-registry.d.ts.map +1 -0
  739. package/dist/voice/stt-registry.js +144 -0
  740. package/dist/voice/stt-registry.js.map +1 -0
  741. package/dist/workflows/register-primitives.d.ts +52 -0
  742. package/dist/workflows/register-primitives.d.ts.map +1 -0
  743. package/dist/workflows/register-primitives.js +40 -0
  744. package/dist/workflows/register-primitives.js.map +1 -0
  745. package/dist/workflows/service.d.ts +64 -0
  746. package/dist/workflows/service.d.ts.map +1 -0
  747. package/dist/workflows/service.js +53 -0
  748. package/dist/workflows/service.js.map +1 -0
  749. package/package.json +107 -0
@@ -0,0 +1,456 @@
1
+ import { getEntryPackageRoot, installPluginDependenciesForEntry } from "./dependencies.js";
2
+ import { getPluginScopePaths } from "./paths.js";
3
+ import { loadPluginRegistry, removePluginRecord, savePluginRegistry, setPluginRecord } from "./registry.js";
4
+ import { collectActivePluginTools, isInsideDirectory, loadPlugins, resolvePluginEntryPath } from "./loader.js";
5
+ import { ensureMastraCodePackageLink } from "./package-link.js";
6
+ import { NON_INTERACTIVE_GIT_ENV, discoverLocalPlugins, installGithubPlugin, installLocalPlugin } from "./install.js";
7
+ import path from "path";
8
+ import fs from "fs";
9
+ import { execa } from "execa";
10
+ //#region src/plugins/manager.ts
11
+ const GITHUB_PLUGIN_POLL_INTERVAL_MS = 6e4;
12
+ function gitExecOptions(cwd) {
13
+ return {
14
+ cwd,
15
+ env: NON_INTERACTIVE_GIT_ENV
16
+ };
17
+ }
18
+ function getEntryVersion(entryPath) {
19
+ const stat = fs.statSync(entryPath, { bigint: true });
20
+ return `${stat.mtimeNs}:${stat.size}`;
21
+ }
22
+ var PluginManager = class {
23
+ options;
24
+ loadedPlugins = [];
25
+ pluginTools = {};
26
+ rawPluginTools = {};
27
+ toolRenderConfigs = /* @__PURE__ */ new Map();
28
+ watchedLocalEntries = /* @__PURE__ */ new Set();
29
+ localEntryVersions = /* @__PURE__ */ new Map();
30
+ /** Last known git HEAD per GitHub checkout, kept current by the poller. */
31
+ githubCheckoutHeads = /* @__PURE__ */ new Map();
32
+ githubPollTimer;
33
+ githubPollInFlight;
34
+ reloadInFlight;
35
+ reloadListeners = /* @__PURE__ */ new Set();
36
+ githubUpdateListeners = /* @__PURE__ */ new Set();
37
+ runtime;
38
+ constructor(options) {
39
+ this.options = options;
40
+ this.runtime = options.runtime;
41
+ }
42
+ /**
43
+ * Publish (or replace) the runtime accessors handed to plugin field resolvers.
44
+ * Takes effect on the next load or reload. `createMastraCode` calls this for
45
+ * every manager it uses — including an injected one — so a manager constructed
46
+ * without a runtime still exposes `getController`/`getActiveSession` to plugins.
47
+ * A manager shared across controllers sees the most recent controller's accessors.
48
+ */
49
+ setRuntime(runtime) {
50
+ this.runtime = runtime;
51
+ }
52
+ onReload(listener) {
53
+ this.reloadListeners.add(listener);
54
+ return () => this.reloadListeners.delete(listener);
55
+ }
56
+ /** Notified with the display names of GitHub plugins that were updated by the background poll. */
57
+ onGithubPluginsUpdated(listener) {
58
+ this.githubUpdateListeners.add(listener);
59
+ return () => this.githubUpdateListeners.delete(listener);
60
+ }
61
+ async reload() {
62
+ if (this.reloadInFlight) return this.reloadInFlight;
63
+ this.reloadInFlight = (async () => {
64
+ this.loadedPlugins = await loadPlugins({
65
+ ...this.options,
66
+ runtime: this.runtime
67
+ });
68
+ await this.stampLoadedPlugins(this.loadedPlugins);
69
+ this.updateLocalEntryWatchers(this.loadedPlugins);
70
+ this.updateGithubPoller(this.loadedPlugins);
71
+ this.updatePluginRenderConfigs(this.loadedPlugins);
72
+ this.updatePluginTools(collectActivePluginTools(this.loadedPlugins));
73
+ await this.notifyReloadListeners(this.loadedPlugins);
74
+ return this.loadedPlugins;
75
+ })().finally(() => {
76
+ this.reloadInFlight = void 0;
77
+ });
78
+ return this.reloadInFlight;
79
+ }
80
+ async listPlugins() {
81
+ if (this.loadedPlugins.length === 0) await this.reload();
82
+ return this.loadedPlugins;
83
+ }
84
+ getLoadedPlugins() {
85
+ return this.loadedPlugins;
86
+ }
87
+ getPluginTools() {
88
+ return this.pluginTools;
89
+ }
90
+ getToolRenderConfig(toolName) {
91
+ return this.toolRenderConfigs.get(toolName);
92
+ }
93
+ getPluginSkillPaths() {
94
+ return this.loadedPlugins.flatMap((plugin) => plugin.status === "active" ? plugin.skillPaths ?? [] : []);
95
+ }
96
+ getPluginCommandPaths() {
97
+ return this.loadedPlugins.flatMap((plugin) => plugin.status === "active" ? plugin.commandPaths ?? [] : []);
98
+ }
99
+ getPluginInstructions() {
100
+ return this.loadedPlugins.flatMap((plugin) => plugin.status === "active" && plugin.instructions ? [plugin.instructions] : []);
101
+ }
102
+ /**
103
+ * Processors contributed by active plugins, tagged with the plugin that owns
104
+ * each one. Reads already-resolved state — no filesystem access — because the
105
+ * agent's processor lanes call this before every request.
106
+ */
107
+ getPluginProcessors() {
108
+ return {
109
+ input: this.collectActive((plugin) => plugin.processors?.input ?? []),
110
+ output: this.collectActive((plugin) => plugin.processors?.output ?? [])
111
+ };
112
+ }
113
+ /** Signal providers contributed by active plugins, tagged with their owning plugin. */
114
+ getPluginSignalProviders() {
115
+ return this.collectActive((plugin) => plugin.signalProviders ?? []);
116
+ }
117
+ collectActive(select) {
118
+ return this.loadedPlugins.flatMap((plugin) => plugin.status === "active" ? select(plugin).map((value) => ({
119
+ pluginId: plugin.id,
120
+ versionStamp: plugin.versionStamp ?? "",
121
+ value
122
+ })) : []);
123
+ }
124
+ async notifyReloadListeners(plugins) {
125
+ await Promise.all([...this.reloadListeners].map((listener) => Promise.resolve(listener(plugins))));
126
+ }
127
+ /**
128
+ * Stamps each plugin with a value that changes when its contributions should
129
+ * be rebuilt. Runs on every reload, so it stays off the network: GitHub heads
130
+ * come from the cache the poller keeps current and cost one `git rev-parse`
131
+ * per checkout the first time it is seen.
132
+ */
133
+ async stampLoadedPlugins(plugins) {
134
+ for (const plugin of plugins) plugin.versionStamp = [
135
+ plugin.status,
136
+ await this.readSourceStamp(plugin),
137
+ JSON.stringify(plugin.configValues ?? {})
138
+ ].join("|");
139
+ }
140
+ async readSourceStamp(plugin) {
141
+ try {
142
+ if (plugin.source === "github") {
143
+ const checkoutPath = this.resolvePluginSourcePath(plugin);
144
+ let head = this.githubCheckoutHeads.get(checkoutPath);
145
+ if (head === void 0) {
146
+ head = await this.readGitHead(checkoutPath);
147
+ this.githubCheckoutHeads.set(checkoutPath, head);
148
+ }
149
+ return head;
150
+ }
151
+ return getEntryVersion(resolvePluginEntryPath(plugin, this.options));
152
+ } catch {
153
+ return "";
154
+ }
155
+ }
156
+ updatePluginRenderConfigs(plugins) {
157
+ this.toolRenderConfigs.clear();
158
+ for (const plugin of plugins) {
159
+ if (plugin.status !== "active") continue;
160
+ for (const [toolName, renderConfig] of Object.entries(plugin.renderConfigs ?? {})) if (!this.toolRenderConfigs.has(toolName)) this.toolRenderConfigs.set(toolName, renderConfig);
161
+ }
162
+ }
163
+ updatePluginTools(nextTools) {
164
+ for (const name of Object.keys(this.rawPluginTools)) if (!(name in nextTools)) {
165
+ delete this.rawPluginTools[name];
166
+ delete this.pluginTools[name];
167
+ }
168
+ for (const [name, tool] of Object.entries(nextTools)) {
169
+ this.rawPluginTools[name] = tool;
170
+ if (!this.pluginTools[name]) this.pluginTools[name] = this.createLiveToolProxy(name);
171
+ this.syncLiveToolProxy(name, tool);
172
+ }
173
+ }
174
+ createLiveToolProxy(toolName) {
175
+ return { execute: async (...args) => {
176
+ await this.reloadChangedLocalPlugins();
177
+ const latestTool = this.rawPluginTools[toolName];
178
+ if (!latestTool?.execute) throw new Error(`Plugin tool "${toolName}" is no longer available`);
179
+ return latestTool.execute(...args);
180
+ } };
181
+ }
182
+ syncLiveToolProxy(toolName, tool) {
183
+ const proxy = this.pluginTools[toolName];
184
+ if (!proxy) return;
185
+ const mutableProxy = proxy;
186
+ for (const key of Object.keys(mutableProxy)) delete mutableProxy[key];
187
+ Object.assign(proxy, tool);
188
+ proxy.execute = this.createLiveToolProxy(toolName).execute;
189
+ }
190
+ async reloadChangedLocalPlugins() {
191
+ for (const plugin of this.loadedPlugins) {
192
+ if (plugin.source !== "local" || plugin.status !== "active") continue;
193
+ const entryPath = resolvePluginEntryPath(plugin, this.options);
194
+ const currentVersion = getEntryVersion(entryPath);
195
+ if (this.localEntryVersions.get(entryPath) !== currentVersion) {
196
+ await this.reload();
197
+ return;
198
+ }
199
+ }
200
+ }
201
+ updateLocalEntryWatchers(plugins) {
202
+ const nextEntries = /* @__PURE__ */ new Set();
203
+ for (const plugin of plugins) {
204
+ if (plugin.source !== "local" || plugin.status !== "active") continue;
205
+ let entryPath;
206
+ let entryVersion;
207
+ try {
208
+ entryPath = resolvePluginEntryPath(plugin, this.options);
209
+ entryVersion = getEntryVersion(entryPath);
210
+ } catch {
211
+ continue;
212
+ }
213
+ nextEntries.add(entryPath);
214
+ this.localEntryVersions.set(entryPath, entryVersion);
215
+ if (this.watchedLocalEntries.has(entryPath)) continue;
216
+ fs.watchFile(entryPath, { interval: 500 }, (current, previous) => {
217
+ if (current.mtimeMs === previous.mtimeMs) return;
218
+ this.reload().catch(() => void 0);
219
+ }).unref?.();
220
+ this.watchedLocalEntries.add(entryPath);
221
+ }
222
+ for (const entryPath of this.watchedLocalEntries) {
223
+ if (nextEntries.has(entryPath)) continue;
224
+ fs.unwatchFile(entryPath);
225
+ this.watchedLocalEntries.delete(entryPath);
226
+ this.localEntryVersions.delete(entryPath);
227
+ }
228
+ }
229
+ updateGithubPoller(plugins) {
230
+ const hasGithubPlugin = plugins.some((plugin) => plugin.source === "github" && plugin.status !== "inactive" && plugin.status !== "blocked");
231
+ if (hasGithubPlugin && !this.githubPollTimer) {
232
+ this.githubPollTimer = setInterval(() => {
233
+ this.pollGithubSourcesForUpdates().catch(() => void 0);
234
+ }, GITHUB_PLUGIN_POLL_INTERVAL_MS);
235
+ this.githubPollTimer.unref?.();
236
+ }
237
+ if (!hasGithubPlugin && this.githubPollTimer) {
238
+ clearInterval(this.githubPollTimer);
239
+ this.githubPollTimer = void 0;
240
+ }
241
+ }
242
+ async pollGithubSourcesForUpdates() {
243
+ if (this.githubPollInFlight) return this.githubPollInFlight;
244
+ this.githubPollInFlight = this.pollGithubSourcesForUpdatesOnce().finally(() => {
245
+ this.githubPollInFlight = void 0;
246
+ });
247
+ return this.githubPollInFlight;
248
+ }
249
+ async pollGithubSourcesForUpdatesOnce() {
250
+ const changedCheckouts = /* @__PURE__ */ new Set();
251
+ const seen = /* @__PURE__ */ new Set();
252
+ for (const plugin of this.loadedPlugins) {
253
+ if (plugin.source !== "github" || plugin.status === "inactive" || plugin.status === "blocked") continue;
254
+ const checkoutPath = this.resolvePluginSourcePath(plugin);
255
+ if (seen.has(checkoutPath) || !fs.existsSync(path.join(checkoutPath, ".git"))) continue;
256
+ seen.add(checkoutPath);
257
+ const before = await this.readGitHead(checkoutPath);
258
+ const checkoutChanged = await this.refreshGithubCheckout(plugin, checkoutPath, before);
259
+ const after = await this.readGitHead(checkoutPath);
260
+ this.githubCheckoutHeads.set(checkoutPath, after);
261
+ if (checkoutChanged || before !== after) changedCheckouts.add(checkoutPath);
262
+ }
263
+ if (changedCheckouts.size === 0) return false;
264
+ await this.reload();
265
+ const updatedPluginNames = this.loadedPlugins.filter((plugin) => plugin.source === "github" && plugin.status !== "inactive" && plugin.status !== "blocked" && changedCheckouts.has(this.resolvePluginSourcePath(plugin))).map((plugin) => plugin.name ?? plugin.id);
266
+ await this.notifyGithubUpdateListeners(updatedPluginNames);
267
+ return true;
268
+ }
269
+ async notifyGithubUpdateListeners(pluginNames) {
270
+ await Promise.all([...this.githubUpdateListeners].map((listener) => Promise.resolve(listener(pluginNames))));
271
+ }
272
+ async refreshGithubCheckout(plugin, checkoutPath, currentHead) {
273
+ await execa("git", ["fetch", "origin"], gitExecOptions(checkoutPath));
274
+ const upstream = await this.resolveGitUpstream(checkoutPath, plugin.ref);
275
+ if (!upstream) return false;
276
+ const [localOnly, remoteOnly] = await this.readGitAheadBehind(checkoutPath, upstream);
277
+ const hasLocalChanges = await this.hasGitWorkingTreeChanges(checkoutPath);
278
+ if (localOnly > 0 || hasLocalChanges) await this.backupGitCheckout(checkoutPath, currentHead, hasLocalChanges);
279
+ if (remoteOnly > 0 || localOnly > 0 || hasLocalChanges) {
280
+ await execa("git", [
281
+ "reset",
282
+ "--hard",
283
+ upstream
284
+ ], gitExecOptions(checkoutPath));
285
+ try {
286
+ await installPluginDependenciesForEntry(checkoutPath, plugin.entry);
287
+ ensureMastraCodePackageLink(getEntryPackageRoot(checkoutPath, plugin.entry));
288
+ } catch (error) {
289
+ await execa("git", [
290
+ "reset",
291
+ "--hard",
292
+ currentHead
293
+ ], gitExecOptions(checkoutPath));
294
+ throw error;
295
+ }
296
+ return true;
297
+ }
298
+ return false;
299
+ }
300
+ async backupGitCheckout(checkoutPath, currentHead, includeWorkingTree) {
301
+ const backupBranch = this.createGitBackupBranchName(currentHead);
302
+ if (includeWorkingTree) {
303
+ const currentBranch = await this.readGitCurrentBranch(checkoutPath);
304
+ await execa("git", [
305
+ "switch",
306
+ "-c",
307
+ backupBranch
308
+ ], gitExecOptions(checkoutPath));
309
+ await execa("git", ["add", "-A"], gitExecOptions(checkoutPath));
310
+ if (await this.hasGitStagedChanges(checkoutPath)) await execa("git", [
311
+ "-c",
312
+ "user.name=Mastra Code",
313
+ "-c",
314
+ "user.email=noreply@mastra.ai",
315
+ "commit",
316
+ "-m",
317
+ "chore: backup local plugin checkout changes"
318
+ ], gitExecOptions(checkoutPath));
319
+ await this.restoreGitCheckout(checkoutPath, currentBranch, currentHead);
320
+ return;
321
+ }
322
+ await execa("git", [
323
+ "branch",
324
+ backupBranch,
325
+ "HEAD"
326
+ ], gitExecOptions(checkoutPath));
327
+ }
328
+ async resolveGitUpstream(cwd, installedRef) {
329
+ try {
330
+ const { stdout } = await execa("git", [
331
+ "rev-parse",
332
+ "--abbrev-ref",
333
+ "--symbolic-full-name",
334
+ "@{u}"
335
+ ], gitExecOptions(cwd));
336
+ return stdout.trim();
337
+ } catch {
338
+ return installedRef ? void 0 : "origin/main";
339
+ }
340
+ }
341
+ async readGitAheadBehind(cwd, upstream) {
342
+ const { stdout } = await execa("git", [
343
+ "rev-list",
344
+ "--left-right",
345
+ "--count",
346
+ `HEAD...${upstream}`
347
+ ], gitExecOptions(cwd));
348
+ const [ahead = "0", behind = "0"] = stdout.trim().split(/\s+/);
349
+ return [Number(ahead) || 0, Number(behind) || 0];
350
+ }
351
+ async hasGitWorkingTreeChanges(cwd) {
352
+ const { stdout } = await execa("git", ["status", "--porcelain"], gitExecOptions(cwd));
353
+ return stdout.trim().length > 0;
354
+ }
355
+ async hasGitStagedChanges(cwd) {
356
+ try {
357
+ await execa("git", [
358
+ "diff",
359
+ "--cached",
360
+ "--quiet"
361
+ ], gitExecOptions(cwd));
362
+ return false;
363
+ } catch {
364
+ return true;
365
+ }
366
+ }
367
+ async restoreGitCheckout(cwd, branch, fallbackHead) {
368
+ if (branch) {
369
+ await execa("git", ["switch", branch], gitExecOptions(cwd));
370
+ return;
371
+ }
372
+ await execa("git", ["checkout", fallbackHead], gitExecOptions(cwd));
373
+ }
374
+ async readGitCurrentBranch(cwd) {
375
+ const { stdout } = await execa("git", ["branch", "--show-current"], gitExecOptions(cwd));
376
+ const branch = stdout.trim();
377
+ return branch.length > 0 ? branch : void 0;
378
+ }
379
+ createGitBackupBranchName(currentHead) {
380
+ return `mastracode/plugin-backup/${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}-${currentHead.slice(0, 8)}`;
381
+ }
382
+ resolvePluginSourcePath(plugin) {
383
+ const paths = getPluginScopePaths(plugin.scope, this.options);
384
+ return path.resolve(path.isAbsolute(plugin.path) ? plugin.path : path.join(paths.root, plugin.path));
385
+ }
386
+ async readGitHead(cwd) {
387
+ const { stdout } = await execa("git", ["rev-parse", "HEAD"], gitExecOptions(cwd));
388
+ return stdout.trim();
389
+ }
390
+ discoverLocal(searchRoot = ".") {
391
+ return discoverLocalPlugins(searchRoot, this.options);
392
+ }
393
+ async installLocal(localPath, scope, options = {}) {
394
+ const id = await installLocalPlugin(localPath, scope, {
395
+ ...this.options,
396
+ ...options
397
+ });
398
+ await this.reload();
399
+ return id;
400
+ }
401
+ async installGithub(url, scope, options = {}) {
402
+ const id = await installGithubPlugin(url, scope, {
403
+ ...this.options,
404
+ ...options
405
+ });
406
+ this.githubCheckoutHeads.clear();
407
+ await this.reload();
408
+ return id;
409
+ }
410
+ async setEnabled(pluginId, scope, enabled) {
411
+ const paths = getPluginScopePaths(scope, this.options);
412
+ const registry = loadPluginRegistry(paths.registryPath);
413
+ const record = registry.plugins[pluginId];
414
+ if (!record) throw new Error(`Plugin "${pluginId}" is not installed in ${scope} scope`);
415
+ savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, {
416
+ ...record,
417
+ enabled
418
+ }));
419
+ await this.reload();
420
+ }
421
+ async setConfigValue(pluginId, scope, key, value) {
422
+ const paths = getPluginScopePaths(scope, this.options);
423
+ const registry = loadPluginRegistry(paths.registryPath);
424
+ const record = registry.plugins[pluginId];
425
+ if (!record) throw new Error(`Plugin "${pluginId}" is not installed in ${scope} scope`);
426
+ const config = { ...record.config ?? {} };
427
+ if (value === void 0 || value === "") delete config[key];
428
+ else config[key] = value;
429
+ const nextRecord = {
430
+ ...record,
431
+ config: Object.keys(config).length > 0 ? config : void 0
432
+ };
433
+ savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, nextRecord));
434
+ await this.reload();
435
+ }
436
+ async uninstall(pluginId, scope) {
437
+ const paths = getPluginScopePaths(scope, this.options);
438
+ const registry = loadPluginRegistry(paths.registryPath);
439
+ const record = registry.plugins[pluginId];
440
+ if (!record) throw new Error(`Plugin "${pluginId}" is not installed in ${scope} scope`);
441
+ savePluginRegistry(paths.registryPath, removePluginRecord(registry, pluginId));
442
+ if (record.source === "github") {
443
+ const checkoutPath = path.resolve(path.isAbsolute(record.path) ? record.path : path.join(paths.root, record.path));
444
+ if (isInsideDirectory(checkoutPath, path.resolve(paths.sourcesPath, "github"))) fs.rmSync(checkoutPath, {
445
+ recursive: true,
446
+ force: true
447
+ });
448
+ this.githubCheckoutHeads.delete(checkoutPath);
449
+ }
450
+ await this.reload();
451
+ }
452
+ };
453
+ //#endregion
454
+ export { PluginManager };
455
+
456
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","names":[],"sources":["../../src/plugins/manager.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { SignalProvider } from '@mastra/core/signals';\nimport { execa } from 'execa';\n\nimport type { MastraCodePluginConfigValue, MastraCodePluginRuntime } from '../plugin.js';\nimport { getEntryPackageRoot, installPluginDependenciesForEntry } from './dependencies.js';\nimport { discoverLocalPlugins, installGithubPlugin, installLocalPlugin, NON_INTERACTIVE_GIT_ENV } from './install.js';\nimport type { InstallPluginOptions } from './install.js';\nimport { collectActivePluginTools, isInsideDirectory, loadPlugins, resolvePluginEntryPath } from './loader.js';\nimport { ensureMastraCodePackageLink } from './package-link.js';\nimport { getPluginScopePaths } from './paths.js';\nimport type { PluginPathOptions } from './paths.js';\nimport { loadPluginRegistry, removePluginRecord, savePluginRegistry, setPluginRecord } from './registry.js';\nimport type { LoadedPlugin, PluginContribution, PluginProcessorEntries, PluginScope } from './types.js';\n\nconst GITHUB_PLUGIN_POLL_INTERVAL_MS = 60_000;\n\nfunction gitExecOptions(cwd: string) {\n return { cwd, env: NON_INTERACTIVE_GIT_ENV };\n}\n\nfunction getEntryVersion(entryPath: string): string {\n const stat = fs.statSync(entryPath, { bigint: true });\n return `${stat.mtimeNs}:${stat.size}`;\n}\n\ntype PluginManagerOptions = PluginPathOptions & {\n githubCliPath?: string;\n /**\n * Lazy accessors for Mastra Code's runtime, handed to plugin field resolvers on\n * every load and reload.\n */\n runtime?: MastraCodePluginRuntime;\n};\n\nexport class PluginManager {\n private loadedPlugins: LoadedPlugin[] = [];\n private readonly pluginTools: ReturnType<typeof collectActivePluginTools> = {};\n private readonly rawPluginTools: ReturnType<typeof collectActivePluginTools> = {};\n private readonly toolRenderConfigs = new Map<string, NonNullable<LoadedPlugin['renderConfigs']>[string]>();\n private readonly watchedLocalEntries = new Set<string>();\n private readonly localEntryVersions = new Map<string, string>();\n /** Last known git HEAD per GitHub checkout, kept current by the poller. */\n private readonly githubCheckoutHeads = new Map<string, string>();\n private githubPollTimer: ReturnType<typeof setInterval> | undefined;\n private githubPollInFlight: Promise<boolean> | undefined;\n private reloadInFlight: Promise<LoadedPlugin[]> | undefined;\n private readonly reloadListeners = new Set<(plugins: LoadedPlugin[]) => void | Promise<void>>();\n private readonly githubUpdateListeners = new Set<(pluginNames: string[]) => void | Promise<void>>();\n private runtime: MastraCodePluginRuntime | undefined;\n\n constructor(private readonly options: PluginManagerOptions) {\n this.runtime = options.runtime;\n }\n\n /**\n * Publish (or replace) the runtime accessors handed to plugin field resolvers.\n * Takes effect on the next load or reload. `createMastraCode` calls this for\n * every manager it uses — including an injected one — so a manager constructed\n * without a runtime still exposes `getController`/`getActiveSession` to plugins.\n * A manager shared across controllers sees the most recent controller's accessors.\n */\n setRuntime(runtime: MastraCodePluginRuntime): void {\n this.runtime = runtime;\n }\n\n onReload(listener: (plugins: LoadedPlugin[]) => void | Promise<void>): () => void {\n this.reloadListeners.add(listener);\n return () => this.reloadListeners.delete(listener);\n }\n\n /** Notified with the display names of GitHub plugins that were updated by the background poll. */\n onGithubPluginsUpdated(listener: (pluginNames: string[]) => void | Promise<void>): () => void {\n this.githubUpdateListeners.add(listener);\n return () => this.githubUpdateListeners.delete(listener);\n }\n\n async reload(): Promise<LoadedPlugin[]> {\n if (this.reloadInFlight) return this.reloadInFlight;\n\n this.reloadInFlight = (async () => {\n this.loadedPlugins = await loadPlugins({ ...this.options, runtime: this.runtime });\n await this.stampLoadedPlugins(this.loadedPlugins);\n this.updateLocalEntryWatchers(this.loadedPlugins);\n this.updateGithubPoller(this.loadedPlugins);\n this.updatePluginRenderConfigs(this.loadedPlugins);\n this.updatePluginTools(collectActivePluginTools(this.loadedPlugins));\n await this.notifyReloadListeners(this.loadedPlugins);\n return this.loadedPlugins;\n })().finally(() => {\n this.reloadInFlight = undefined;\n });\n\n return this.reloadInFlight;\n }\n\n async listPlugins(): Promise<LoadedPlugin[]> {\n if (this.loadedPlugins.length === 0) {\n await this.reload();\n }\n return this.loadedPlugins;\n }\n\n getLoadedPlugins(): LoadedPlugin[] {\n return this.loadedPlugins;\n }\n\n getPluginTools() {\n return this.pluginTools;\n }\n\n getToolRenderConfig(toolName: string) {\n return this.toolRenderConfigs.get(toolName);\n }\n\n getPluginSkillPaths(): string[] {\n return this.loadedPlugins.flatMap(plugin => (plugin.status === 'active' ? (plugin.skillPaths ?? []) : []));\n }\n\n getPluginCommandPaths(): string[] {\n return this.loadedPlugins.flatMap(plugin => (plugin.status === 'active' ? (plugin.commandPaths ?? []) : []));\n }\n\n getPluginInstructions(): string[] {\n return this.loadedPlugins.flatMap(plugin =>\n plugin.status === 'active' && plugin.instructions ? [plugin.instructions] : [],\n );\n }\n\n /**\n * Processors contributed by active plugins, tagged with the plugin that owns\n * each one. Reads already-resolved state — no filesystem access — because the\n * agent's processor lanes call this before every request.\n */\n getPluginProcessors(): PluginProcessorEntries {\n return {\n input: this.collectActive(plugin => plugin.processors?.input ?? []),\n output: this.collectActive(plugin => plugin.processors?.output ?? []),\n };\n }\n\n /** Signal providers contributed by active plugins, tagged with their owning plugin. */\n getPluginSignalProviders(): PluginContribution<SignalProvider<string>>[] {\n return this.collectActive(plugin => plugin.signalProviders ?? []);\n }\n\n private collectActive<TValue>(select: (plugin: LoadedPlugin) => TValue[]): PluginContribution<TValue>[] {\n return this.loadedPlugins.flatMap(plugin =>\n plugin.status === 'active'\n ? select(plugin).map(value => ({ pluginId: plugin.id, versionStamp: plugin.versionStamp ?? '', value }))\n : [],\n );\n }\n\n private async notifyReloadListeners(plugins: LoadedPlugin[]): Promise<void> {\n await Promise.all([...this.reloadListeners].map(listener => Promise.resolve(listener(plugins))));\n }\n\n /**\n * Stamps each plugin with a value that changes when its contributions should\n * be rebuilt. Runs on every reload, so it stays off the network: GitHub heads\n * come from the cache the poller keeps current and cost one `git rev-parse`\n * per checkout the first time it is seen.\n */\n private async stampLoadedPlugins(plugins: LoadedPlugin[]): Promise<void> {\n for (const plugin of plugins) {\n plugin.versionStamp = [\n plugin.status,\n await this.readSourceStamp(plugin),\n JSON.stringify(plugin.configValues ?? {}),\n ].join('|');\n }\n }\n\n private async readSourceStamp(plugin: LoadedPlugin): Promise<string> {\n try {\n if (plugin.source === 'github') {\n const checkoutPath = this.resolvePluginSourcePath(plugin);\n let head = this.githubCheckoutHeads.get(checkoutPath);\n if (head === undefined) {\n head = await this.readGitHead(checkoutPath);\n this.githubCheckoutHeads.set(checkoutPath, head);\n }\n return head;\n }\n return getEntryVersion(resolvePluginEntryPath(plugin, this.options));\n } catch {\n // A plugin that failed to load has no readable source. Its stamp is then\n // status + config, which is enough to notice when it starts working.\n return '';\n }\n }\n\n private updatePluginRenderConfigs(plugins: LoadedPlugin[]): void {\n this.toolRenderConfigs.clear();\n for (const plugin of plugins) {\n if (plugin.status !== 'active') continue;\n for (const [toolName, renderConfig] of Object.entries(plugin.renderConfigs ?? {})) {\n if (!this.toolRenderConfigs.has(toolName)) {\n this.toolRenderConfigs.set(toolName, renderConfig);\n }\n }\n }\n }\n\n private updatePluginTools(nextTools: ReturnType<typeof collectActivePluginTools>): void {\n for (const name of Object.keys(this.rawPluginTools)) {\n if (!(name in nextTools)) {\n delete this.rawPluginTools[name];\n delete this.pluginTools[name];\n }\n }\n\n for (const [name, tool] of Object.entries(nextTools)) {\n this.rawPluginTools[name] = tool;\n if (!this.pluginTools[name]) {\n this.pluginTools[name] = this.createLiveToolProxy(name);\n }\n this.syncLiveToolProxy(name, tool);\n }\n }\n\n private createLiveToolProxy(toolName: string) {\n return {\n execute: async (...args: any[]) => {\n await this.reloadChangedLocalPlugins();\n const latestTool = this.rawPluginTools[toolName];\n if (!latestTool?.execute) {\n throw new Error(`Plugin tool \"${toolName}\" is no longer available`);\n }\n return (latestTool.execute as (...args: any[]) => unknown)(...args);\n },\n } as LoadedPlugin['tools'][string];\n }\n\n private syncLiveToolProxy(toolName: string, tool: LoadedPlugin['tools'][string]): void {\n const proxy = this.pluginTools[toolName];\n if (!proxy) return;\n const mutableProxy = proxy as unknown as Record<string, unknown>;\n for (const key of Object.keys(mutableProxy)) {\n delete mutableProxy[key];\n }\n Object.assign(proxy, tool);\n proxy.execute = this.createLiveToolProxy(toolName).execute;\n }\n\n private async reloadChangedLocalPlugins(): Promise<void> {\n for (const plugin of this.loadedPlugins) {\n if (plugin.source !== 'local' || plugin.status !== 'active') continue;\n const entryPath = resolvePluginEntryPath(plugin, this.options);\n const currentVersion = getEntryVersion(entryPath);\n if (this.localEntryVersions.get(entryPath) !== currentVersion) {\n await this.reload();\n return;\n }\n }\n }\n\n private updateLocalEntryWatchers(plugins: LoadedPlugin[]): void {\n const nextEntries = new Set<string>();\n for (const plugin of plugins) {\n if (plugin.source !== 'local' || plugin.status !== 'active') continue;\n let entryPath: string;\n let entryVersion: string;\n try {\n entryPath = resolvePluginEntryPath(plugin, this.options);\n entryVersion = getEntryVersion(entryPath);\n } catch {\n continue;\n }\n nextEntries.add(entryPath);\n this.localEntryVersions.set(entryPath, entryVersion);\n if (this.watchedLocalEntries.has(entryPath)) continue;\n\n const watcher = fs.watchFile(entryPath, { interval: 500 }, (current, previous) => {\n if (current.mtimeMs === previous.mtimeMs) return;\n void this.reload().catch(() => undefined);\n });\n watcher.unref?.();\n this.watchedLocalEntries.add(entryPath);\n }\n\n for (const entryPath of this.watchedLocalEntries) {\n if (nextEntries.has(entryPath)) continue;\n fs.unwatchFile(entryPath);\n this.watchedLocalEntries.delete(entryPath);\n this.localEntryVersions.delete(entryPath);\n }\n }\n\n private updateGithubPoller(plugins: LoadedPlugin[]): void {\n const hasGithubPlugin = plugins.some(\n plugin => plugin.source === 'github' && plugin.status !== 'inactive' && plugin.status !== 'blocked',\n );\n if (hasGithubPlugin && !this.githubPollTimer) {\n this.githubPollTimer = setInterval(() => {\n void this.pollGithubSourcesForUpdates().catch(() => undefined);\n }, GITHUB_PLUGIN_POLL_INTERVAL_MS);\n this.githubPollTimer.unref?.();\n }\n if (!hasGithubPlugin && this.githubPollTimer) {\n clearInterval(this.githubPollTimer);\n this.githubPollTimer = undefined;\n }\n }\n\n async pollGithubSourcesForUpdates(): Promise<boolean> {\n if (this.githubPollInFlight) return this.githubPollInFlight;\n this.githubPollInFlight = this.pollGithubSourcesForUpdatesOnce().finally(() => {\n this.githubPollInFlight = undefined;\n });\n return this.githubPollInFlight;\n }\n\n private async pollGithubSourcesForUpdatesOnce(): Promise<boolean> {\n const changedCheckouts = new Set<string>();\n const seen = new Set<string>();\n for (const plugin of this.loadedPlugins) {\n if (plugin.source !== 'github' || plugin.status === 'inactive' || plugin.status === 'blocked') continue;\n const checkoutPath = this.resolvePluginSourcePath(plugin);\n if (seen.has(checkoutPath) || !fs.existsSync(path.join(checkoutPath, '.git'))) continue;\n seen.add(checkoutPath);\n\n const before = await this.readGitHead(checkoutPath);\n const checkoutChanged = await this.refreshGithubCheckout(plugin, checkoutPath, before);\n const after = await this.readGitHead(checkoutPath);\n // Feed the cache before reloading: the stamp is computed during reload and\n // has to see the new head, or a real update would look unchanged.\n this.githubCheckoutHeads.set(checkoutPath, after);\n if (checkoutChanged || before !== after) changedCheckouts.add(checkoutPath);\n }\n\n if (changedCheckouts.size === 0) return false;\n\n await this.reload();\n // Derive names from the reloaded state so a manifest display-name change reports the new name.\n // Multiple plugins can share one checkout — report every plugin whose source changed.\n const updatedPluginNames = this.loadedPlugins\n .filter(\n plugin =>\n plugin.source === 'github' &&\n plugin.status !== 'inactive' &&\n plugin.status !== 'blocked' &&\n changedCheckouts.has(this.resolvePluginSourcePath(plugin)),\n )\n .map(plugin => plugin.name ?? plugin.id);\n await this.notifyGithubUpdateListeners(updatedPluginNames);\n return true;\n }\n\n private async notifyGithubUpdateListeners(pluginNames: string[]): Promise<void> {\n await Promise.all([...this.githubUpdateListeners].map(listener => Promise.resolve(listener(pluginNames))));\n }\n\n private async refreshGithubCheckout(\n plugin: LoadedPlugin,\n checkoutPath: string,\n currentHead: string,\n ): Promise<boolean> {\n await execa('git', ['fetch', 'origin'], gitExecOptions(checkoutPath));\n const upstream = await this.resolveGitUpstream(checkoutPath, plugin.ref);\n if (!upstream) return false;\n const [localOnly, remoteOnly] = await this.readGitAheadBehind(checkoutPath, upstream);\n const hasLocalChanges = await this.hasGitWorkingTreeChanges(checkoutPath);\n\n if (localOnly > 0 || hasLocalChanges) {\n await this.backupGitCheckout(checkoutPath, currentHead, hasLocalChanges);\n }\n\n if (remoteOnly > 0 || localOnly > 0 || hasLocalChanges) {\n await execa('git', ['reset', '--hard', upstream], gitExecOptions(checkoutPath));\n try {\n await installPluginDependenciesForEntry(checkoutPath, plugin.entry);\n ensureMastraCodePackageLink(getEntryPackageRoot(checkoutPath, plugin.entry));\n } catch (error) {\n await execa('git', ['reset', '--hard', currentHead], gitExecOptions(checkoutPath));\n throw error;\n }\n return true;\n }\n\n return false;\n }\n\n private async backupGitCheckout(\n checkoutPath: string,\n currentHead: string,\n includeWorkingTree: boolean,\n ): Promise<void> {\n const backupBranch = this.createGitBackupBranchName(currentHead);\n\n if (includeWorkingTree) {\n const currentBranch = await this.readGitCurrentBranch(checkoutPath);\n await execa('git', ['switch', '-c', backupBranch], gitExecOptions(checkoutPath));\n await execa('git', ['add', '-A'], gitExecOptions(checkoutPath));\n const hasStagedChanges = await this.hasGitStagedChanges(checkoutPath);\n if (hasStagedChanges) {\n await execa(\n 'git',\n [\n '-c',\n 'user.name=Mastra Code',\n '-c',\n 'user.email=noreply@mastra.ai',\n 'commit',\n '-m',\n 'chore: backup local plugin checkout changes',\n ],\n gitExecOptions(checkoutPath),\n );\n }\n await this.restoreGitCheckout(checkoutPath, currentBranch, currentHead);\n return;\n }\n\n await execa('git', ['branch', backupBranch, 'HEAD'], gitExecOptions(checkoutPath));\n }\n\n private async resolveGitUpstream(cwd: string, installedRef?: string): Promise<string | undefined> {\n try {\n const { stdout } = await execa(\n 'git',\n ['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}'],\n gitExecOptions(cwd),\n );\n return stdout.trim();\n } catch {\n return installedRef ? undefined : 'origin/main';\n }\n }\n\n private async readGitAheadBehind(cwd: string, upstream: string): Promise<[number, number]> {\n const { stdout } = await execa(\n 'git',\n ['rev-list', '--left-right', '--count', `HEAD...${upstream}`],\n gitExecOptions(cwd),\n );\n const [ahead = '0', behind = '0'] = stdout.trim().split(/\\s+/);\n return [Number(ahead) || 0, Number(behind) || 0];\n }\n\n private async hasGitWorkingTreeChanges(cwd: string): Promise<boolean> {\n const { stdout } = await execa('git', ['status', '--porcelain'], gitExecOptions(cwd));\n return stdout.trim().length > 0;\n }\n\n private async hasGitStagedChanges(cwd: string): Promise<boolean> {\n try {\n await execa('git', ['diff', '--cached', '--quiet'], gitExecOptions(cwd));\n return false;\n } catch {\n return true;\n }\n }\n\n private async restoreGitCheckout(cwd: string, branch: string | undefined, fallbackHead: string): Promise<void> {\n if (branch) {\n await execa('git', ['switch', branch], gitExecOptions(cwd));\n return;\n }\n await execa('git', ['checkout', fallbackHead], gitExecOptions(cwd));\n }\n\n private async readGitCurrentBranch(cwd: string): Promise<string | undefined> {\n const { stdout } = await execa('git', ['branch', '--show-current'], gitExecOptions(cwd));\n const branch = stdout.trim();\n return branch.length > 0 ? branch : undefined;\n }\n\n private createGitBackupBranchName(currentHead: string): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n return `mastracode/plugin-backup/${timestamp}-${currentHead.slice(0, 8)}`;\n }\n\n private resolvePluginSourcePath(plugin: LoadedPlugin): string {\n const paths = getPluginScopePaths(plugin.scope, this.options);\n // Normalized so cache keys derived here match the `path.resolve`-normalized\n // key that `uninstall` deletes with.\n return path.resolve(path.isAbsolute(plugin.path) ? plugin.path : path.join(paths.root, plugin.path));\n }\n\n private async readGitHead(cwd: string): Promise<string> {\n const { stdout } = await execa('git', ['rev-parse', 'HEAD'], gitExecOptions(cwd));\n return stdout.trim();\n }\n\n discoverLocal(searchRoot = '.'): ReturnType<typeof discoverLocalPlugins> {\n return discoverLocalPlugins(searchRoot, this.options);\n }\n\n async installLocal(\n localPath: string,\n scope: PluginScope,\n options: Pick<InstallPluginOptions, 'entry'> = {},\n ): Promise<string> {\n const id = await installLocalPlugin(localPath, scope, { ...this.options, ...options });\n await this.reload();\n return id;\n }\n\n async installGithub(\n url: string,\n scope: PluginScope,\n options: Pick<InstallPluginOptions, 'entry' | 'ref' | 'onOutput' | 'signal'> = {},\n ): Promise<string> {\n const id = await installGithubPlugin(url, scope, { ...this.options, ...options });\n // Installing over an existing checkout replaces it at the same path, so the\n // cached head would make a genuinely different commit stamp as unchanged and\n // leave the previous signal providers running.\n this.githubCheckoutHeads.clear();\n await this.reload();\n return id;\n }\n\n async setEnabled(pluginId: string, scope: PluginScope, enabled: boolean): Promise<void> {\n const paths = getPluginScopePaths(scope, this.options);\n const registry = loadPluginRegistry(paths.registryPath);\n const record = registry.plugins[pluginId];\n if (!record) {\n throw new Error(`Plugin \"${pluginId}\" is not installed in ${scope} scope`);\n }\n savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, { ...record, enabled }));\n await this.reload();\n }\n\n async setConfigValue(\n pluginId: string,\n scope: PluginScope,\n key: string,\n value: MastraCodePluginConfigValue,\n ): Promise<void> {\n const paths = getPluginScopePaths(scope, this.options);\n const registry = loadPluginRegistry(paths.registryPath);\n const record = registry.plugins[pluginId];\n if (!record) {\n throw new Error(`Plugin \"${pluginId}\" is not installed in ${scope} scope`);\n }\n const config = { ...(record.config ?? {}) };\n if (value === undefined || value === '') {\n delete config[key];\n } else {\n config[key] = value;\n }\n const nextRecord = { ...record, config: Object.keys(config).length > 0 ? config : undefined };\n savePluginRegistry(paths.registryPath, setPluginRecord(registry, pluginId, nextRecord));\n await this.reload();\n }\n\n async uninstall(pluginId: string, scope: PluginScope): Promise<void> {\n const paths = getPluginScopePaths(scope, this.options);\n const registry = loadPluginRegistry(paths.registryPath);\n const record = registry.plugins[pluginId];\n if (!record) {\n throw new Error(`Plugin \"${pluginId}\" is not installed in ${scope} scope`);\n }\n\n savePluginRegistry(paths.registryPath, removePluginRecord(registry, pluginId));\n if (record.source === 'github') {\n const checkoutPath = path.resolve(\n path.isAbsolute(record.path) ? record.path : path.join(paths.root, record.path),\n );\n const githubSourcesPath = path.resolve(paths.sourcesPath, 'github');\n if (isInsideDirectory(checkoutPath, githubSourcesPath)) {\n fs.rmSync(checkoutPath, { recursive: true, force: true });\n }\n this.githubCheckoutHeads.delete(checkoutPath);\n }\n await this.reload();\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare const PLUGIN_MANIFEST_FILE = ".mastracode-plugin.json";
2
+ export type PluginManifestEntry = {
3
+ id: string;
4
+ name?: string;
5
+ entry: string;
6
+ };
7
+ export type PluginManifest = {
8
+ plugins: PluginManifestEntry[];
9
+ };
10
+ export declare function loadPluginManifest(rootDir: string): PluginManifest | undefined;
11
+ export declare function savePluginManifest(rootDir: string, manifest: PluginManifest): void;
12
+ export declare function upsertPluginManifestEntry(rootDir: string, entry: PluginManifestEntry): void;
13
+ export declare function getSingleManifestPlugin(rootDir: string): PluginManifestEntry | undefined;
14
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/plugins/manifest.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAE9D,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAoB9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAElF;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAU3F;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAYxF"}
@@ -0,0 +1,50 @@
1
+ import path from "path";
2
+ import fs from "fs";
3
+ //#region src/plugins/manifest.ts
4
+ const PLUGIN_MANIFEST_FILE = ".mastracode-plugin.json";
5
+ function loadPluginManifest(rootDir) {
6
+ const manifestPath = path.join(rootDir, PLUGIN_MANIFEST_FILE);
7
+ if (!fs.existsSync(manifestPath)) return void 0;
8
+ let parsed;
9
+ try {
10
+ parsed = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
11
+ } catch (error) {
12
+ throw new Error(`Could not parse ${PLUGIN_MANIFEST_FILE}: ${error instanceof Error ? error.message : String(error)}`);
13
+ }
14
+ if (!parsed || typeof parsed !== "object" || !Array.isArray(parsed.plugins)) throw new Error(`${PLUGIN_MANIFEST_FILE} must contain a plugins array`);
15
+ return { plugins: parsed.plugins.map((entry, index) => validateManifestEntry(entry, index)) };
16
+ }
17
+ function savePluginManifest(rootDir, manifest) {
18
+ fs.writeFileSync(path.join(rootDir, PLUGIN_MANIFEST_FILE), `${JSON.stringify(manifest, null, 2)}\n`);
19
+ }
20
+ function upsertPluginManifestEntry(rootDir, entry) {
21
+ const manifest = loadPluginManifest(rootDir) ?? { plugins: [] };
22
+ const validatedEntry = validateManifestEntry(entry, manifest.plugins.length);
23
+ const existingIndex = manifest.plugins.findIndex((plugin) => plugin.id === validatedEntry.id);
24
+ if (existingIndex >= 0) manifest.plugins[existingIndex] = validateManifestEntry(validatedEntry, existingIndex);
25
+ else manifest.plugins.push(validatedEntry);
26
+ savePluginManifest(rootDir, manifest);
27
+ }
28
+ function getSingleManifestPlugin(rootDir) {
29
+ const manifest = loadPluginManifest(rootDir);
30
+ if (!manifest) return void 0;
31
+ if (manifest.plugins.length === 0) return void 0;
32
+ if (manifest.plugins.length > 1) throw new Error(`${PLUGIN_MANIFEST_FILE} contains multiple plugins. Provide an entry path for one of: ${manifest.plugins.map((plugin) => `${plugin.id} (${plugin.entry})`).join(", ")}`);
33
+ return manifest.plugins[0];
34
+ }
35
+ function validateManifestEntry(entry, index) {
36
+ if (!entry || typeof entry !== "object") throw new Error(`${PLUGIN_MANIFEST_FILE} plugin at index ${index} must be an object`);
37
+ const candidate = entry;
38
+ if (typeof candidate.id !== "string" || candidate.id.length === 0) throw new Error(`${PLUGIN_MANIFEST_FILE} plugin at index ${index} must include an id`);
39
+ if (typeof candidate.entry !== "string" || candidate.entry.length === 0) throw new Error(`${PLUGIN_MANIFEST_FILE} plugin ${candidate.id} must include an entry`);
40
+ if (candidate.name !== void 0 && typeof candidate.name !== "string") throw new Error(`${PLUGIN_MANIFEST_FILE} plugin ${candidate.id} name must be a string`);
41
+ return {
42
+ id: candidate.id,
43
+ entry: candidate.entry,
44
+ ...candidate.name ? { name: candidate.name } : {}
45
+ };
46
+ }
47
+ //#endregion
48
+ export { PLUGIN_MANIFEST_FILE, getSingleManifestPlugin, loadPluginManifest, savePluginManifest, upsertPluginManifestEntry };
49
+
50
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","names":[],"sources":["../../src/plugins/manifest.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nexport const PLUGIN_MANIFEST_FILE = '.mastracode-plugin.json';\n\nexport type PluginManifestEntry = {\n id: string;\n name?: string;\n entry: string;\n};\n\nexport type PluginManifest = {\n plugins: PluginManifestEntry[];\n};\n\nexport function loadPluginManifest(rootDir: string): PluginManifest | undefined {\n const manifestPath = path.join(rootDir, PLUGIN_MANIFEST_FILE);\n if (!fs.existsSync(manifestPath)) return undefined;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));\n } catch (error) {\n throw new Error(\n `Could not parse ${PLUGIN_MANIFEST_FILE}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n if (!parsed || typeof parsed !== 'object' || !Array.isArray((parsed as { plugins?: unknown }).plugins)) {\n throw new Error(`${PLUGIN_MANIFEST_FILE} must contain a plugins array`);\n }\n\n return {\n plugins: (parsed as { plugins: unknown[] }).plugins.map((entry, index) => validateManifestEntry(entry, index)),\n };\n}\n\nexport function savePluginManifest(rootDir: string, manifest: PluginManifest): void {\n fs.writeFileSync(path.join(rootDir, PLUGIN_MANIFEST_FILE), `${JSON.stringify(manifest, null, 2)}\\n`);\n}\n\nexport function upsertPluginManifestEntry(rootDir: string, entry: PluginManifestEntry): void {\n const manifest = loadPluginManifest(rootDir) ?? { plugins: [] };\n const validatedEntry = validateManifestEntry(entry, manifest.plugins.length);\n const existingIndex = manifest.plugins.findIndex(plugin => plugin.id === validatedEntry.id);\n if (existingIndex >= 0) {\n manifest.plugins[existingIndex] = validateManifestEntry(validatedEntry, existingIndex);\n } else {\n manifest.plugins.push(validatedEntry);\n }\n savePluginManifest(rootDir, manifest);\n}\n\nexport function getSingleManifestPlugin(rootDir: string): PluginManifestEntry | undefined {\n const manifest = loadPluginManifest(rootDir);\n if (!manifest) return undefined;\n if (manifest.plugins.length === 0) return undefined;\n if (manifest.plugins.length > 1) {\n throw new Error(\n `${PLUGIN_MANIFEST_FILE} contains multiple plugins. Provide an entry path for one of: ${manifest.plugins\n .map(plugin => `${plugin.id} (${plugin.entry})`)\n .join(', ')}`,\n );\n }\n return manifest.plugins[0];\n}\n\nfunction validateManifestEntry(entry: unknown, index: number): PluginManifestEntry {\n if (!entry || typeof entry !== 'object') {\n throw new Error(`${PLUGIN_MANIFEST_FILE} plugin at index ${index} must be an object`);\n }\n const candidate = entry as { id?: unknown; name?: unknown; entry?: unknown };\n if (typeof candidate.id !== 'string' || candidate.id.length === 0) {\n throw new Error(`${PLUGIN_MANIFEST_FILE} plugin at index ${index} must include an id`);\n }\n if (typeof candidate.entry !== 'string' || candidate.entry.length === 0) {\n throw new Error(`${PLUGIN_MANIFEST_FILE} plugin ${candidate.id} must include an entry`);\n }\n if (candidate.name !== undefined && typeof candidate.name !== 'string') {\n throw new Error(`${PLUGIN_MANIFEST_FILE} plugin ${candidate.id} name must be a string`);\n }\n return {\n id: candidate.id,\n entry: candidate.entry,\n ...(candidate.name ? { name: candidate.name } : {}),\n };\n}\n"],"mappings":";;;AAGA,MAAa,uBAAuB;AAYpC,SAAgB,mBAAmB,SAA6C;CAC9E,MAAM,eAAe,KAAK,KAAK,SAAS,oBAAoB;CAC5D,IAAI,CAAC,GAAG,WAAW,YAAY,GAAG,OAAO,KAAA;CAEzC,IAAI;CACJ,IAAI;EACF,SAAS,KAAK,MAAM,GAAG,aAAa,cAAc,MAAM,CAAC;CAC3D,SAAS,OAAO;EACd,MAAM,IAAI,MACR,mBAAmB,qBAAqB,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACnG;CACF;CAEA,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAS,OAAiC,OAAO,GACnG,MAAM,IAAI,MAAM,GAAG,qBAAqB,8BAA8B;CAGxE,OAAO,EACL,SAAU,OAAkC,QAAQ,KAAK,OAAO,UAAU,sBAAsB,OAAO,KAAK,CAAC,EAC/G;AACF;AAEA,SAAgB,mBAAmB,SAAiB,UAAgC;CAClF,GAAG,cAAc,KAAK,KAAK,SAAS,oBAAoB,GAAG,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,EAAE,GAAG;AACrG;AAEA,SAAgB,0BAA0B,SAAiB,OAAkC;CAC3F,MAAM,WAAW,mBAAmB,OAAO,KAAK,EAAE,SAAS,CAAC,EAAE;CAC9D,MAAM,iBAAiB,sBAAsB,OAAO,SAAS,QAAQ,MAAM;CAC3E,MAAM,gBAAgB,SAAS,QAAQ,WAAU,WAAU,OAAO,OAAO,eAAe,EAAE;CAC1F,IAAI,iBAAiB,GACnB,SAAS,QAAQ,iBAAiB,sBAAsB,gBAAgB,aAAa;MAErF,SAAS,QAAQ,KAAK,cAAc;CAEtC,mBAAmB,SAAS,QAAQ;AACtC;AAEA,SAAgB,wBAAwB,SAAkD;CACxF,MAAM,WAAW,mBAAmB,OAAO;CAC3C,IAAI,CAAC,UAAU,OAAO,KAAA;CACtB,IAAI,SAAS,QAAQ,WAAW,GAAG,OAAO,KAAA;CAC1C,IAAI,SAAS,QAAQ,SAAS,GAC5B,MAAM,IAAI,MACR,GAAG,qBAAqB,gEAAgE,SAAS,QAC9F,KAAI,WAAU,GAAG,OAAO,GAAG,IAAI,OAAO,MAAM,EAAE,CAAC,CAC/C,KAAK,IAAI,GACd;CAEF,OAAO,SAAS,QAAQ;AAC1B;AAEA,SAAS,sBAAsB,OAAgB,OAAoC;CACjF,IAAI,CAAC,SAAS,OAAO,UAAU,UAC7B,MAAM,IAAI,MAAM,GAAG,qBAAqB,mBAAmB,MAAM,mBAAmB;CAEtF,MAAM,YAAY;CAClB,IAAI,OAAO,UAAU,OAAO,YAAY,UAAU,GAAG,WAAW,GAC9D,MAAM,IAAI,MAAM,GAAG,qBAAqB,mBAAmB,MAAM,oBAAoB;CAEvF,IAAI,OAAO,UAAU,UAAU,YAAY,UAAU,MAAM,WAAW,GACpE,MAAM,IAAI,MAAM,GAAG,qBAAqB,UAAU,UAAU,GAAG,uBAAuB;CAExF,IAAI,UAAU,SAAS,KAAA,KAAa,OAAO,UAAU,SAAS,UAC5D,MAAM,IAAI,MAAM,GAAG,qBAAqB,UAAU,UAAU,GAAG,uBAAuB;CAExF,OAAO;EACL,IAAI,UAAU;EACd,OAAO,UAAU;EACjB,GAAI,UAAU,OAAO,EAAE,MAAM,UAAU,KAAK,IAAI,CAAC;CACnD;AACF"}
@@ -0,0 +1,3 @@
1
+ export declare function findMastraCodePackageRoot(startDir: string): string;
2
+ export declare function ensureMastraCodePackageLink(pluginDir: string): void;
3
+ //# sourceMappingURL=package-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-link.d.ts","sourceRoot":"","sources":["../../src/plugins/package-link.ts"],"names":[],"mappings":"AA+BA,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA4BlE;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAmBnE"}