@evalops/maestro 0.10.17 → 0.10.20

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 (930) hide show
  1. package/README.md +56 -1
  2. package/dist/agent/action-approval.d.ts +12 -2
  3. package/dist/agent/action-approval.d.ts.map +1 -1
  4. package/dist/agent/action-approval.js +19 -32
  5. package/dist/agent/action-approval.js.map +1 -1
  6. package/dist/agent/agent.d.ts +1 -0
  7. package/dist/agent/agent.d.ts.map +1 -1
  8. package/dist/agent/agent.js +26 -0
  9. package/dist/agent/agent.js.map +1 -1
  10. package/dist/agent/compaction.d.ts +2 -0
  11. package/dist/agent/compaction.d.ts.map +1 -1
  12. package/dist/agent/compaction.js +4 -2
  13. package/dist/agent/compaction.js.map +1 -1
  14. package/dist/agent/index.d.ts +1 -1
  15. package/dist/agent/index.d.ts.map +1 -1
  16. package/dist/agent/index.js +1 -1
  17. package/dist/agent/index.js.map +1 -1
  18. package/dist/agent/modes.d.ts +56 -4
  19. package/dist/agent/modes.d.ts.map +1 -1
  20. package/dist/agent/modes.js +163 -2
  21. package/dist/agent/modes.js.map +1 -1
  22. package/dist/agent/prompt-recovery.d.ts.map +1 -1
  23. package/dist/agent/prompt-recovery.js +1 -3
  24. package/dist/agent/prompt-recovery.js.map +1 -1
  25. package/dist/agent/providers/anthropic.d.ts.map +1 -1
  26. package/dist/agent/providers/anthropic.js +9 -1
  27. package/dist/agent/providers/anthropic.js.map +1 -1
  28. package/dist/agent/providers/codex-app-server.d.ts +12 -0
  29. package/dist/agent/providers/codex-app-server.d.ts.map +1 -0
  30. package/dist/agent/providers/codex-app-server.js +788 -0
  31. package/dist/agent/providers/codex-app-server.js.map +1 -0
  32. package/dist/agent/providers/google-gemini-cli.js +14 -3
  33. package/dist/agent/providers/google.js +22 -3
  34. package/dist/agent/providers/scripted.d.ts +11 -0
  35. package/dist/agent/providers/scripted.d.ts.map +1 -0
  36. package/dist/agent/providers/scripted.js +399 -0
  37. package/dist/agent/providers/scripted.js.map +1 -0
  38. package/dist/agent/providers/vertex.js +14 -3
  39. package/dist/agent/scenario-source.d.ts +19 -0
  40. package/dist/agent/scenario-source.d.ts.map +1 -0
  41. package/dist/agent/scenario-source.js +112 -0
  42. package/dist/agent/scenario-source.js.map +1 -0
  43. package/dist/agent/subagent-specs.d.ts +1 -1
  44. package/dist/agent/subagent-specs.js +1 -1
  45. package/dist/agent/subagent-specs.js.map +1 -1
  46. package/dist/agent/swarm/executor.d.ts +25 -0
  47. package/dist/agent/swarm/executor.d.ts.map +1 -1
  48. package/dist/agent/swarm/executor.js +795 -20
  49. package/dist/agent/swarm/executor.js.map +1 -1
  50. package/dist/agent/swarm/runtime-events.d.ts +11 -0
  51. package/dist/agent/swarm/runtime-events.d.ts.map +1 -0
  52. package/dist/agent/swarm/runtime-events.js +26 -0
  53. package/dist/agent/swarm/runtime-events.js.map +1 -0
  54. package/dist/agent/swarm/types.d.ts +78 -0
  55. package/dist/agent/swarm/types.d.ts.map +1 -1
  56. package/dist/agent/swarm/types.js.map +1 -1
  57. package/dist/agent/tracing.d.ts +1 -1
  58. package/dist/agent/tracing.d.ts.map +1 -1
  59. package/dist/agent/tracing.js +17 -9
  60. package/dist/agent/tracing.js.map +1 -1
  61. package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
  62. package/dist/agent/transport/create-provider-stream.js +14 -0
  63. package/dist/agent/transport/create-provider-stream.js.map +1 -1
  64. package/dist/agent/transport/stable-stringify.d.ts +2 -0
  65. package/dist/agent/transport/stable-stringify.d.ts.map +1 -0
  66. package/dist/agent/transport/stable-stringify.js +14 -0
  67. package/dist/agent/transport/stable-stringify.js.map +1 -0
  68. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  69. package/dist/agent/transport/tool-execution-bridge.js +2 -15
  70. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  71. package/dist/agent/transport/tool-safety-pipeline.d.ts +5 -1
  72. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  73. package/dist/agent/transport/tool-safety-pipeline.js +184 -36
  74. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  75. package/dist/agent/transport.d.ts +8 -0
  76. package/dist/agent/transport.d.ts.map +1 -1
  77. package/dist/agent/transport.js +1613 -68
  78. package/dist/agent/transport.js.map +1 -1
  79. package/dist/agent/types.d.ts +170 -2
  80. package/dist/agent/types.d.ts.map +1 -1
  81. package/dist/agent/types.js.map +1 -1
  82. package/dist/api/enterprise-routes.d.ts.map +1 -1
  83. package/dist/api/enterprise-routes.js +34 -3
  84. package/dist/api/enterprise-routes.js.map +1 -1
  85. package/dist/app-server/in-process-client.d.ts +32 -0
  86. package/dist/app-server/in-process-client.d.ts.map +1 -0
  87. package/dist/app-server/in-process-client.js +73 -0
  88. package/dist/app-server/in-process-client.js.map +1 -0
  89. package/dist/app-server/session-api.d.ts +36 -0
  90. package/dist/app-server/session-api.d.ts.map +1 -0
  91. package/dist/app-server/session-api.js +713 -0
  92. package/dist/app-server/session-api.js.map +1 -0
  93. package/dist/approvals/platform-action-approval.d.ts +3 -1
  94. package/dist/approvals/platform-action-approval.d.ts.map +1 -1
  95. package/dist/approvals/platform-action-approval.js +16 -9
  96. package/dist/approvals/platform-action-approval.js.map +1 -1
  97. package/dist/approvals/service-client.d.ts.map +1 -1
  98. package/dist/approvals/service-client.js +7 -7
  99. package/dist/approvals/service-client.js.map +1 -1
  100. package/dist/audit/logger.d.ts +4 -4
  101. package/dist/bootstrap/agent-creation-setup.d.ts +4 -0
  102. package/dist/bootstrap/agent-creation-setup.d.ts.map +1 -1
  103. package/dist/bootstrap/agent-creation-setup.js +3 -1
  104. package/dist/bootstrap/agent-creation-setup.js.map +1 -1
  105. package/dist/bootstrap/auth-setup.js +1 -1
  106. package/dist/bootstrap/auth-setup.js.map +1 -1
  107. package/dist/bootstrap/event-subscriptions-setup.d.ts +6 -0
  108. package/dist/bootstrap/event-subscriptions-setup.d.ts.map +1 -1
  109. package/dist/bootstrap/event-subscriptions-setup.js +26 -2
  110. package/dist/bootstrap/event-subscriptions-setup.js.map +1 -1
  111. package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
  112. package/dist/bootstrap/model-resolution-setup.js +4 -1
  113. package/dist/bootstrap/model-resolution-setup.js.map +1 -1
  114. package/dist/bootstrap/tools-setup.d.ts +2 -1
  115. package/dist/bootstrap/tools-setup.d.ts.map +1 -1
  116. package/dist/bootstrap/tools-setup.js +5 -1
  117. package/dist/bootstrap/tools-setup.js.map +1 -1
  118. package/dist/cli/args.d.ts +9 -1
  119. package/dist/cli/args.d.ts.map +1 -1
  120. package/dist/cli/args.js +130 -5
  121. package/dist/cli/args.js.map +1 -1
  122. package/dist/cli/commands/a2a.d.ts +9 -0
  123. package/dist/cli/commands/a2a.d.ts.map +1 -0
  124. package/dist/cli/commands/a2a.js +1714 -0
  125. package/dist/cli/commands/a2a.js.map +1 -0
  126. package/dist/cli/commands/agents.d.ts +16 -2
  127. package/dist/cli/commands/agents.d.ts.map +1 -1
  128. package/dist/cli/commands/agents.js +223 -35
  129. package/dist/cli/commands/agents.js.map +1 -1
  130. package/dist/cli/commands/codex.d.ts +1 -1
  131. package/dist/cli/commands/codex.d.ts.map +1 -1
  132. package/dist/cli/commands/codex.js +145 -39
  133. package/dist/cli/commands/codex.js.map +1 -1
  134. package/dist/cli/commands/context.d.ts +10 -0
  135. package/dist/cli/commands/context.d.ts.map +1 -0
  136. package/dist/cli/commands/context.js +176 -0
  137. package/dist/cli/commands/context.js.map +1 -0
  138. package/dist/cli/commands/hosted-runner.d.ts +1 -0
  139. package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
  140. package/dist/cli/commands/hosted-runner.js +9 -1
  141. package/dist/cli/commands/hosted-runner.js.map +1 -1
  142. package/dist/cli/commands/init.d.ts.map +1 -1
  143. package/dist/cli/commands/init.js +6 -0
  144. package/dist/cli/commands/init.js.map +1 -1
  145. package/dist/cli/commands/modes.d.ts +8 -0
  146. package/dist/cli/commands/modes.d.ts.map +1 -0
  147. package/dist/cli/commands/modes.js +151 -0
  148. package/dist/cli/commands/modes.js.map +1 -0
  149. package/dist/cli/commands/operating-plane.d.ts +14 -0
  150. package/dist/cli/commands/operating-plane.d.ts.map +1 -0
  151. package/dist/cli/commands/operating-plane.js +160 -0
  152. package/dist/cli/commands/operating-plane.js.map +1 -0
  153. package/dist/cli/commands/run.d.ts +87 -0
  154. package/dist/cli/commands/run.d.ts.map +1 -0
  155. package/dist/cli/commands/run.js +356 -0
  156. package/dist/cli/commands/run.js.map +1 -0
  157. package/dist/cli/commands/scenario.d.ts +7 -0
  158. package/dist/cli/commands/scenario.d.ts.map +1 -0
  159. package/dist/cli/commands/scenario.js +195 -0
  160. package/dist/cli/commands/scenario.js.map +1 -0
  161. package/dist/cli/commands/skill.d.ts +7 -0
  162. package/dist/cli/commands/skill.d.ts.map +1 -0
  163. package/dist/cli/commands/skill.js +286 -0
  164. package/dist/cli/commands/skill.js.map +1 -0
  165. package/dist/cli/headless-protocol.d.ts +55 -1
  166. package/dist/cli/headless-protocol.d.ts.map +1 -1
  167. package/dist/cli/headless-protocol.js +446 -7
  168. package/dist/cli/headless-protocol.js.map +1 -1
  169. package/dist/cli/headless-runtime-selection.d.ts +38 -0
  170. package/dist/cli/headless-runtime-selection.d.ts.map +1 -0
  171. package/dist/cli/headless-runtime-selection.js +48 -0
  172. package/dist/cli/headless-runtime-selection.js.map +1 -0
  173. package/dist/cli/headless.d.ts +5 -1
  174. package/dist/cli/headless.d.ts.map +1 -1
  175. package/dist/cli/headless.js +11 -1
  176. package/dist/cli/headless.js.map +1 -1
  177. package/dist/cli/help.d.ts +3 -1
  178. package/dist/cli/help.d.ts.map +1 -1
  179. package/dist/cli/help.js +136 -30
  180. package/dist/cli/help.js.map +1 -1
  181. package/dist/cli/system-prompt.d.ts +22 -4
  182. package/dist/cli/system-prompt.d.ts.map +1 -1
  183. package/dist/cli/system-prompt.js +224 -127
  184. package/dist/cli/system-prompt.js.map +1 -1
  185. package/dist/cli-tui/commands/a2a-handlers.d.ts +7 -0
  186. package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -0
  187. package/dist/cli-tui/commands/a2a-handlers.js +160 -0
  188. package/dist/cli-tui/commands/a2a-handlers.js.map +1 -0
  189. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  190. package/dist/cli-tui/commands/command-catalog.js +15 -0
  191. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  192. package/dist/cli-tui/commands/command-registry-adapter.js +10 -1
  193. package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -1
  194. package/dist/cli-tui/commands/handlers/mode-handler.d.ts.map +1 -1
  195. package/dist/cli-tui/commands/handlers/mode-handler.js +22 -10
  196. package/dist/cli-tui/commands/handlers/mode-handler.js.map +1 -1
  197. package/dist/cli-tui/commands/mcp-handlers.d.ts.map +1 -1
  198. package/dist/cli-tui/commands/mcp-handlers.js +6 -5
  199. package/dist/cli-tui/commands/mcp-handlers.js.map +1 -1
  200. package/dist/cli-tui/commands/types.d.ts +1 -0
  201. package/dist/cli-tui/commands/types.d.ts.map +1 -1
  202. package/dist/cli-tui/commands/types.js.map +1 -1
  203. package/dist/cli-tui/commands/utility-handlers.d.ts +4 -0
  204. package/dist/cli-tui/commands/utility-handlers.d.ts.map +1 -1
  205. package/dist/cli-tui/commands/utility-handlers.js +45 -6
  206. package/dist/cli-tui/commands/utility-handlers.js.map +1 -1
  207. package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
  208. package/dist/cli-tui/run/run-shell-command.js +14 -5
  209. package/dist/cli-tui/run/run-shell-command.js.map +1 -1
  210. package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
  211. package/dist/cli-tui/run/streaming-shell-command.js +14 -5
  212. package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
  213. package/dist/cli-tui/selectors/model-selector.d.ts +1 -0
  214. package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
  215. package/dist/cli-tui/selectors/model-selector.js +6 -2
  216. package/dist/cli-tui/selectors/model-selector.js.map +1 -1
  217. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
  218. package/dist/cli-tui/tui-renderer/command-registry-options.js +5 -0
  219. package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
  220. package/dist/cli-tui/utils/commands/review-prompt.d.ts +1 -1
  221. package/dist/cli-tui/utils/commands/review-prompt.d.ts.map +1 -1
  222. package/dist/cli-tui/utils/commands/review-prompt.js +8 -3
  223. package/dist/cli-tui/utils/commands/review-prompt.js.map +1 -1
  224. package/dist/cli-tui/utils/runtime-badges.d.ts +1 -0
  225. package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
  226. package/dist/cli-tui/utils/runtime-badges.js +7 -0
  227. package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
  228. package/dist/cli-tui/utils/text-formatting.d.ts +1 -0
  229. package/dist/cli-tui/utils/text-formatting.d.ts.map +1 -1
  230. package/dist/cli-tui/utils/text-formatting.js +5 -0
  231. package/dist/cli-tui/utils/text-formatting.js.map +1 -1
  232. package/dist/cli.js +49209 -26165
  233. package/dist/cli.js.map +1 -1
  234. package/dist/codex/app-server-client.d.ts +139 -0
  235. package/dist/codex/app-server-client.d.ts.map +1 -0
  236. package/dist/codex/app-server-client.js +352 -0
  237. package/dist/codex/app-server-client.js.map +1 -0
  238. package/dist/codex/compatibility.d.ts +48 -0
  239. package/dist/codex/compatibility.d.ts.map +1 -0
  240. package/dist/codex/compatibility.js +344 -0
  241. package/dist/codex/compatibility.js.map +1 -0
  242. package/dist/codex/subagent-dispatch-table.d.ts +66 -0
  243. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -0
  244. package/dist/codex/subagent-dispatch-table.js +127 -0
  245. package/dist/codex/subagent-dispatch-table.js.map +1 -0
  246. package/dist/codex/subagent-workgraph.d.ts +56 -0
  247. package/dist/codex/subagent-workgraph.d.ts.map +1 -0
  248. package/dist/codex/subagent-workgraph.js +89 -0
  249. package/dist/codex/subagent-workgraph.js.map +1 -0
  250. package/dist/config/constants.d.ts +3 -1
  251. package/dist/config/constants.d.ts.map +1 -1
  252. package/dist/config/constants.js +9 -0
  253. package/dist/config/constants.js.map +1 -1
  254. package/dist/config/feature-flags.d.ts +10 -1
  255. package/dist/config/feature-flags.d.ts.map +1 -1
  256. package/dist/config/feature-flags.js +17 -6
  257. package/dist/config/feature-flags.js.map +1 -1
  258. package/dist/config/index.d.ts +1 -1
  259. package/dist/config/index.d.ts.map +1 -1
  260. package/dist/config/index.js +1 -1
  261. package/dist/config/index.js.map +1 -1
  262. package/dist/config/toml-config.d.ts +32 -0
  263. package/dist/config/toml-config.d.ts.map +1 -1
  264. package/dist/config/toml-config.js +152 -43
  265. package/dist/config/toml-config.js.map +1 -1
  266. package/dist/connectors/service-client.d.ts.map +1 -1
  267. package/dist/connectors/service-client.js +4 -7
  268. package/dist/connectors/service-client.js.map +1 -1
  269. package/dist/context/manifest-types.d.ts +59 -0
  270. package/dist/context/manifest-types.d.ts.map +1 -0
  271. package/dist/context/manifest-types.js +2 -0
  272. package/dist/context/manifest-types.js.map +1 -0
  273. package/dist/context/manifest.d.ts +16 -0
  274. package/dist/context/manifest.d.ts.map +1 -0
  275. package/dist/context/manifest.js +503 -0
  276. package/dist/context/manifest.js.map +1 -0
  277. package/dist/db/schema.d.ts +10 -1
  278. package/dist/db/schema.d.ts.map +1 -1
  279. package/dist/db/schema.js.map +1 -1
  280. package/dist/evalops/agent-bootstrap.d.ts +1 -0
  281. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  282. package/dist/evalops/agent-bootstrap.js +41 -1
  283. package/dist/evalops/agent-bootstrap.js.map +1 -1
  284. package/dist/evalops/env-aliases.d.ts +13 -0
  285. package/dist/evalops/env-aliases.d.ts.map +1 -0
  286. package/dist/evalops/env-aliases.js +60 -0
  287. package/dist/evalops/env-aliases.js.map +1 -0
  288. package/dist/evalops/managed-context.d.ts.map +1 -1
  289. package/dist/evalops/managed-context.js +28 -62
  290. package/dist/evalops/managed-context.js.map +1 -1
  291. package/dist/guardian/config.d.ts.map +1 -1
  292. package/dist/guardian/config.js +1 -0
  293. package/dist/guardian/config.js.map +1 -1
  294. package/dist/guardian/runner.d.ts +2 -0
  295. package/dist/guardian/runner.d.ts.map +1 -1
  296. package/dist/guardian/runner.js +105 -2
  297. package/dist/guardian/runner.js.map +1 -1
  298. package/dist/guardian/types.d.ts +1 -0
  299. package/dist/guardian/types.d.ts.map +1 -1
  300. package/dist/guardian/types.js.map +1 -1
  301. package/dist/index.d.ts +6 -1
  302. package/dist/index.d.ts.map +1 -1
  303. package/dist/index.js +6 -1
  304. package/dist/index.js.map +1 -1
  305. package/dist/main.d.ts.map +1 -1
  306. package/dist/main.js +267 -55
  307. package/dist/main.js.map +1 -1
  308. package/dist/mcp/config.d.ts.map +1 -1
  309. package/dist/mcp/config.js +89 -7
  310. package/dist/mcp/config.js.map +1 -1
  311. package/dist/mcp/manager.d.ts +5 -1
  312. package/dist/mcp/manager.d.ts.map +1 -1
  313. package/dist/mcp/manager.js +159 -4
  314. package/dist/mcp/manager.js.map +1 -1
  315. package/dist/mcp/platform-plugin.d.ts.map +1 -1
  316. package/dist/mcp/platform-plugin.js +9 -26
  317. package/dist/mcp/platform-plugin.js.map +1 -1
  318. package/dist/mcp/schema.d.ts +15 -0
  319. package/dist/mcp/schema.d.ts.map +1 -1
  320. package/dist/mcp/schema.js +24 -0
  321. package/dist/mcp/schema.js.map +1 -1
  322. package/dist/mcp/tool-bridge.d.ts +39 -10
  323. package/dist/mcp/tool-bridge.d.ts.map +1 -1
  324. package/dist/mcp/tool-bridge.js +101 -24
  325. package/dist/mcp/tool-bridge.js.map +1 -1
  326. package/dist/mcp/types.d.ts +27 -0
  327. package/dist/mcp/types.d.ts.map +1 -1
  328. package/dist/mcp/types.js.map +1 -1
  329. package/dist/mcp/workspace-trust.d.ts +10 -0
  330. package/dist/mcp/workspace-trust.d.ts.map +1 -0
  331. package/dist/mcp/workspace-trust.js +295 -0
  332. package/dist/mcp/workspace-trust.js.map +1 -0
  333. package/dist/memory/service-client.d.ts +1 -0
  334. package/dist/memory/service-client.d.ts.map +1 -1
  335. package/dist/memory/service-client.js +194 -9
  336. package/dist/memory/service-client.js.map +1 -1
  337. package/dist/models/builtin.d.ts.map +1 -1
  338. package/dist/models/builtin.js +66 -25
  339. package/dist/models/builtin.js.map +1 -1
  340. package/dist/models/config-loader.d.ts +10 -10
  341. package/dist/models/config-loader.d.ts.map +1 -1
  342. package/dist/models/config-loader.js +2 -0
  343. package/dist/models/config-loader.js.map +1 -1
  344. package/dist/models/registry.d.ts +1 -0
  345. package/dist/models/registry.d.ts.map +1 -1
  346. package/dist/models/registry.js +1 -0
  347. package/dist/models/registry.js.map +1 -1
  348. package/dist/oauth/device-identity.d.ts.map +1 -1
  349. package/dist/oauth/device-identity.js +1 -3
  350. package/dist/oauth/device-identity.js.map +1 -1
  351. package/dist/oauth/evalops.d.ts.map +1 -1
  352. package/dist/oauth/evalops.js +2 -5
  353. package/dist/oauth/evalops.js.map +1 -1
  354. package/dist/opentelemetry.d.ts.map +1 -1
  355. package/dist/opentelemetry.js +12 -12
  356. package/dist/opentelemetry.js.map +1 -1
  357. package/dist/package-version.d.ts +2 -0
  358. package/dist/package-version.d.ts.map +1 -0
  359. package/dist/package-version.js +11 -0
  360. package/dist/package-version.js.map +1 -0
  361. package/dist/packages/constants.d.ts +3 -0
  362. package/dist/packages/constants.d.ts.map +1 -0
  363. package/dist/packages/constants.js +3 -0
  364. package/dist/packages/constants.js.map +1 -0
  365. package/dist/packages/inspection.d.ts.map +1 -1
  366. package/dist/packages/inspection.js +2 -1
  367. package/dist/packages/inspection.js.map +1 -1
  368. package/dist/packages/search.d.ts.map +1 -1
  369. package/dist/packages/search.js +1 -1
  370. package/dist/packages/search.js.map +1 -1
  371. package/dist/platform/a2a-capability-market.d.ts +21 -0
  372. package/dist/platform/a2a-capability-market.d.ts.map +1 -0
  373. package/dist/platform/a2a-capability-market.js +176 -0
  374. package/dist/platform/a2a-capability-market.js.map +1 -0
  375. package/dist/platform/a2a-client.d.ts +217 -0
  376. package/dist/platform/a2a-client.d.ts.map +1 -0
  377. package/dist/platform/a2a-client.js +589 -0
  378. package/dist/platform/a2a-client.js.map +1 -0
  379. package/dist/platform/a2a-fleet.d.ts +41 -0
  380. package/dist/platform/a2a-fleet.d.ts.map +1 -0
  381. package/dist/platform/a2a-fleet.js +109 -0
  382. package/dist/platform/a2a-fleet.js.map +1 -0
  383. package/dist/platform/a2a-maestro-peer.d.ts +20 -0
  384. package/dist/platform/a2a-maestro-peer.d.ts.map +1 -0
  385. package/dist/platform/a2a-maestro-peer.js +176 -0
  386. package/dist/platform/a2a-maestro-peer.js.map +1 -0
  387. package/dist/platform/a2a-peer-pairing.d.ts +107 -0
  388. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -0
  389. package/dist/platform/a2a-peer-pairing.js +489 -0
  390. package/dist/platform/a2a-peer-pairing.js.map +1 -0
  391. package/dist/platform/a2a-peer-registry.d.ts +68 -0
  392. package/dist/platform/a2a-peer-registry.d.ts.map +1 -0
  393. package/dist/platform/a2a-peer-registry.js +320 -0
  394. package/dist/platform/a2a-peer-registry.js.map +1 -0
  395. package/dist/platform/a2a-task-ledger.d.ts +86 -0
  396. package/dist/platform/a2a-task-ledger.d.ts.map +1 -0
  397. package/dist/platform/a2a-task-ledger.js +546 -0
  398. package/dist/platform/a2a-task-ledger.js.map +1 -0
  399. package/dist/platform/a2a-work-graph.d.ts +43 -0
  400. package/dist/platform/a2a-work-graph.d.ts.map +1 -0
  401. package/dist/platform/a2a-work-graph.js +267 -0
  402. package/dist/platform/a2a-work-graph.js.map +1 -0
  403. package/dist/platform/agent-registry-client.d.ts +327 -0
  404. package/dist/platform/agent-registry-client.d.ts.map +1 -0
  405. package/dist/platform/agent-registry-client.js +803 -0
  406. package/dist/platform/agent-registry-client.js.map +1 -0
  407. package/dist/platform/agent-runtime-client.d.ts +135 -1
  408. package/dist/platform/agent-runtime-client.d.ts.map +1 -1
  409. package/dist/platform/agent-runtime-client.js +467 -10
  410. package/dist/platform/agent-runtime-client.js.map +1 -1
  411. package/dist/platform/cerebro-facts-client.d.ts.map +1 -1
  412. package/dist/platform/cerebro-facts-client.js +4 -7
  413. package/dist/platform/cerebro-facts-client.js.map +1 -1
  414. package/dist/platform/client.d.ts +2 -0
  415. package/dist/platform/client.d.ts.map +1 -1
  416. package/dist/platform/client.js +7 -14
  417. package/dist/platform/client.js.map +1 -1
  418. package/dist/platform/core-services.d.ts +68 -0
  419. package/dist/platform/core-services.d.ts.map +1 -1
  420. package/dist/platform/core-services.js +68 -0
  421. package/dist/platform/core-services.js.map +1 -1
  422. package/dist/platform/fermata-eval-client.d.ts +195 -0
  423. package/dist/platform/fermata-eval-client.d.ts.map +1 -0
  424. package/dist/platform/fermata-eval-client.js +146 -0
  425. package/dist/platform/fermata-eval-client.js.map +1 -0
  426. package/dist/platform/fermata-scenario-suite.d.ts +99 -0
  427. package/dist/platform/fermata-scenario-suite.d.ts.map +1 -0
  428. package/dist/platform/fermata-scenario-suite.js +459 -0
  429. package/dist/platform/fermata-scenario-suite.js.map +1 -0
  430. package/dist/platform/maestro-timeline-client.d.ts.map +1 -1
  431. package/dist/platform/maestro-timeline-client.js +5 -11
  432. package/dist/platform/maestro-timeline-client.js.map +1 -1
  433. package/dist/platform/operating-plane-client.d.ts +156 -0
  434. package/dist/platform/operating-plane-client.d.ts.map +1 -0
  435. package/dist/platform/operating-plane-client.js +131 -0
  436. package/dist/platform/operating-plane-client.js.map +1 -0
  437. package/dist/platform/operating-plane-summary.d.ts +47 -0
  438. package/dist/platform/operating-plane-summary.d.ts.map +1 -0
  439. package/dist/platform/operating-plane-summary.js +209 -0
  440. package/dist/platform/operating-plane-summary.js.map +1 -0
  441. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  442. package/dist/platform/tool-execution-client.js +4 -11
  443. package/dist/platform/tool-execution-client.js.map +1 -1
  444. package/dist/prompts/service-client.d.ts.map +1 -1
  445. package/dist/prompts/service-client.js +3 -5
  446. package/dist/prompts/service-client.js.map +1 -1
  447. package/dist/prompts/system-prompt.d.ts +3 -0
  448. package/dist/prompts/system-prompt.d.ts.map +1 -1
  449. package/dist/prompts/system-prompt.js +13 -3
  450. package/dist/prompts/system-prompt.js.map +1 -1
  451. package/dist/prompts/types.d.ts +2 -0
  452. package/dist/prompts/types.d.ts.map +1 -1
  453. package/dist/prompts/types.js.map +1 -1
  454. package/dist/providers/api-keys.d.ts +1 -1
  455. package/dist/providers/api-keys.d.ts.map +1 -1
  456. package/dist/providers/api-keys.js +2 -1
  457. package/dist/providers/api-keys.js.map +1 -1
  458. package/dist/providers/auth.d.ts.map +1 -1
  459. package/dist/providers/auth.js +48 -25
  460. package/dist/providers/auth.js.map +1 -1
  461. package/dist/remote-runner/attach-client.d.ts.map +1 -1
  462. package/dist/remote-runner/attach-client.js +1 -0
  463. package/dist/remote-runner/attach-client.js.map +1 -1
  464. package/dist/remote-runner/client.d.ts.map +1 -1
  465. package/dist/remote-runner/client.js +4 -7
  466. package/dist/remote-runner/client.js.map +1 -1
  467. package/dist/rpc/rpc-types.d.ts.map +1 -1
  468. package/dist/rpc/rpc-types.js +1 -0
  469. package/dist/rpc/rpc-types.js.map +1 -1
  470. package/dist/safety/action-firewall.d.ts.map +1 -1
  471. package/dist/safety/action-firewall.js +69 -6
  472. package/dist/safety/action-firewall.js.map +1 -1
  473. package/dist/safety/attack-patterns.d.ts.map +1 -1
  474. package/dist/safety/attack-patterns.js +31 -14
  475. package/dist/safety/attack-patterns.js.map +1 -1
  476. package/dist/safety/bash-parser.d.ts.map +1 -1
  477. package/dist/safety/bash-parser.js +4 -3
  478. package/dist/safety/bash-parser.js.map +1 -1
  479. package/dist/safety/execpolicy.d.ts +15 -3
  480. package/dist/safety/execpolicy.d.ts.map +1 -1
  481. package/dist/safety/execpolicy.js +248 -37
  482. package/dist/safety/execpolicy.js.map +1 -1
  483. package/dist/safety/governance-service-client.d.ts.map +1 -1
  484. package/dist/safety/governance-service-client.js +4 -7
  485. package/dist/safety/governance-service-client.js.map +1 -1
  486. package/dist/safety/guarded-files.d.ts +34 -0
  487. package/dist/safety/guarded-files.d.ts.map +1 -0
  488. package/dist/safety/guarded-files.js +372 -0
  489. package/dist/safety/guarded-files.js.map +1 -0
  490. package/dist/safety/loop-detector.d.ts.map +1 -1
  491. package/dist/safety/loop-detector.js +6 -1
  492. package/dist/safety/loop-detector.js.map +1 -1
  493. package/dist/safety/permission-profile.d.ts +47 -0
  494. package/dist/safety/permission-profile.d.ts.map +1 -0
  495. package/dist/safety/permission-profile.js +349 -0
  496. package/dist/safety/permission-profile.js.map +1 -0
  497. package/dist/safety/safety-middleware.d.ts +5 -1
  498. package/dist/safety/safety-middleware.d.ts.map +1 -1
  499. package/dist/safety/safety-middleware.js +3 -2
  500. package/dist/safety/safety-middleware.js.map +1 -1
  501. package/dist/safety/suspicious-patterns.d.ts.map +1 -1
  502. package/dist/safety/suspicious-patterns.js +12 -7
  503. package/dist/safety/suspicious-patterns.js.map +1 -1
  504. package/dist/safety/tool-categorization.js +1 -1
  505. package/dist/safety/tool-categorization.js.map +1 -1
  506. package/dist/safety/validators/path-policy-validator.d.ts.map +1 -1
  507. package/dist/safety/validators/path-policy-validator.js +7 -0
  508. package/dist/safety/validators/path-policy-validator.js.map +1 -1
  509. package/dist/sandbox/index.d.ts +6 -1
  510. package/dist/sandbox/index.d.ts.map +1 -1
  511. package/dist/sandbox/index.js +30 -4
  512. package/dist/sandbox/index.js.map +1 -1
  513. package/dist/sandbox/native-sandbox.d.ts +3 -0
  514. package/dist/sandbox/native-sandbox.d.ts.map +1 -1
  515. package/dist/sandbox/native-sandbox.js +139 -18
  516. package/dist/sandbox/native-sandbox.js.map +1 -1
  517. package/dist/sentry.d.ts +17 -0
  518. package/dist/sentry.d.ts.map +1 -0
  519. package/dist/sentry.js +91 -0
  520. package/dist/sentry.js.map +1 -0
  521. package/dist/server/agent-runtime-ledger.d.ts +141 -0
  522. package/dist/server/agent-runtime-ledger.d.ts.map +1 -0
  523. package/dist/server/agent-runtime-ledger.js +334 -0
  524. package/dist/server/agent-runtime-ledger.js.map +1 -0
  525. package/dist/server/agent-trajectory-inspection.d.ts +104 -0
  526. package/dist/server/agent-trajectory-inspection.d.ts.map +1 -0
  527. package/dist/server/agent-trajectory-inspection.js +168 -0
  528. package/dist/server/agent-trajectory-inspection.js.map +1 -0
  529. package/dist/server/agent-trajectory-replay.d.ts +56 -0
  530. package/dist/server/agent-trajectory-replay.d.ts.map +1 -0
  531. package/dist/server/agent-trajectory-replay.js +214 -0
  532. package/dist/server/agent-trajectory-replay.js.map +1 -0
  533. package/dist/server/agent-trajectory-scenarios.d.ts +109 -0
  534. package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -0
  535. package/dist/server/agent-trajectory-scenarios.js +822 -0
  536. package/dist/server/agent-trajectory-scenarios.js.map +1 -0
  537. package/dist/server/agent-trajectory-scorers.d.ts +61 -0
  538. package/dist/server/agent-trajectory-scorers.d.ts.map +1 -0
  539. package/dist/server/agent-trajectory-scorers.js +162 -0
  540. package/dist/server/agent-trajectory-scorers.js.map +1 -0
  541. package/dist/server/agent-trajectory-validation.d.ts +7 -0
  542. package/dist/server/agent-trajectory-validation.d.ts.map +1 -0
  543. package/dist/server/agent-trajectory-validation.js +101 -0
  544. package/dist/server/agent-trajectory-validation.js.map +1 -0
  545. package/dist/server/agent-trajectory.d.ts +50 -0
  546. package/dist/server/agent-trajectory.d.ts.map +1 -0
  547. package/dist/server/agent-trajectory.js +159 -0
  548. package/dist/server/agent-trajectory.js.map +1 -0
  549. package/dist/server/app-context.d.ts +18 -0
  550. package/dist/server/app-context.d.ts.map +1 -1
  551. package/dist/server/app-context.js.map +1 -1
  552. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  553. package/dist/server/handlers/headless-sessions.js +64 -27
  554. package/dist/server/handlers/headless-sessions.js.map +1 -1
  555. package/dist/server/handlers/health.d.ts +6 -0
  556. package/dist/server/handlers/health.d.ts.map +1 -1
  557. package/dist/server/handlers/health.js +6 -0
  558. package/dist/server/handlers/health.js.map +1 -1
  559. package/dist/server/handlers/hosted-runner-drain.d.ts +69 -1
  560. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  561. package/dist/server/handlers/hosted-runner-drain.js +309 -18
  562. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  563. package/dist/server/handlers/hosted-runner-identity.d.ts +16 -0
  564. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  565. package/dist/server/handlers/hosted-runner-identity.js +43 -0
  566. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  567. package/dist/server/handlers/mode.d.ts.map +1 -1
  568. package/dist/server/handlers/mode.js +3 -1
  569. package/dist/server/handlers/mode.js.map +1 -1
  570. package/dist/server/handlers/pending-requests.d.ts.map +1 -1
  571. package/dist/server/handlers/pending-requests.js +336 -51
  572. package/dist/server/handlers/pending-requests.js.map +1 -1
  573. package/dist/server/handlers/platform-a2a-push.d.ts +6 -0
  574. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -0
  575. package/dist/server/handlers/platform-a2a-push.js +136 -0
  576. package/dist/server/handlers/platform-a2a-push.js.map +1 -0
  577. package/dist/server/handlers/sessions.d.ts.map +1 -1
  578. package/dist/server/handlers/sessions.js +21 -1
  579. package/dist/server/handlers/sessions.js.map +1 -1
  580. package/dist/server/headless-runtime-service.d.ts +9 -2
  581. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  582. package/dist/server/headless-runtime-service.js +39 -0
  583. package/dist/server/headless-runtime-service.js.map +1 -1
  584. package/dist/server/hosted-agent-runtime-progress.d.ts +144 -0
  585. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -0
  586. package/dist/server/hosted-agent-runtime-progress.js +1650 -0
  587. package/dist/server/hosted-agent-runtime-progress.js.map +1 -0
  588. package/dist/server/hosted-runner-lease.d.ts +41 -0
  589. package/dist/server/hosted-runner-lease.d.ts.map +1 -0
  590. package/dist/server/hosted-runner-lease.js +140 -0
  591. package/dist/server/hosted-runner-lease.js.map +1 -0
  592. package/dist/server/hosted-session-manager.d.ts +16 -8
  593. package/dist/server/hosted-session-manager.d.ts.map +1 -1
  594. package/dist/server/hosted-session-manager.js +98 -76
  595. package/dist/server/hosted-session-manager.js.map +1 -1
  596. package/dist/server/junit-xml.d.ts +2 -0
  597. package/dist/server/junit-xml.d.ts.map +1 -0
  598. package/dist/server/junit-xml.js +9 -0
  599. package/dist/server/junit-xml.js.map +1 -0
  600. package/dist/server/routes.d.ts.map +1 -1
  601. package/dist/server/routes.js +6 -0
  602. package/dist/server/routes.js.map +1 -1
  603. package/dist/server/scenario-recorder.d.ts +56 -0
  604. package/dist/server/scenario-recorder.d.ts.map +1 -0
  605. package/dist/server/scenario-recorder.js +109 -0
  606. package/dist/server/scenario-recorder.js.map +1 -0
  607. package/dist/server/scripted-scenario-runner.d.ts +46 -0
  608. package/dist/server/scripted-scenario-runner.d.ts.map +1 -0
  609. package/dist/server/scripted-scenario-runner.js +190 -0
  610. package/dist/server/scripted-scenario-runner.js.map +1 -0
  611. package/dist/server/server-middlewares.d.ts +6 -2
  612. package/dist/server/server-middlewares.d.ts.map +1 -1
  613. package/dist/server/server-middlewares.js +8 -2
  614. package/dist/server/server-middlewares.js.map +1 -1
  615. package/dist/server/server-request-manager.d.ts +9 -1
  616. package/dist/server/server-request-manager.d.ts.map +1 -1
  617. package/dist/server/server-request-manager.js +49 -4
  618. package/dist/server/server-request-manager.js.map +1 -1
  619. package/dist/services/intelligent-router/service.d.ts +2 -0
  620. package/dist/services/intelligent-router/service.d.ts.map +1 -1
  621. package/dist/services/intelligent-router/service.js +4 -0
  622. package/dist/services/intelligent-router/service.js.map +1 -1
  623. package/dist/services/service-authority.d.ts +25 -0
  624. package/dist/services/service-authority.d.ts.map +1 -0
  625. package/dist/services/service-authority.js +143 -0
  626. package/dist/services/service-authority.js.map +1 -0
  627. package/dist/services/workspace-config/service.d.ts +2 -0
  628. package/dist/services/workspace-config/service.d.ts.map +1 -1
  629. package/dist/services/workspace-config/service.js +4 -0
  630. package/dist/services/workspace-config/service.js.map +1 -1
  631. package/dist/session/manager.d.ts +8 -2
  632. package/dist/session/manager.d.ts.map +1 -1
  633. package/dist/session/manager.js +19 -4
  634. package/dist/session/manager.js.map +1 -1
  635. package/dist/session/session-branch.d.ts.map +1 -1
  636. package/dist/session/session-branch.js +5 -1
  637. package/dist/session/session-branch.js.map +1 -1
  638. package/dist/session/session-catalog.d.ts +7 -2
  639. package/dist/session/session-catalog.d.ts.map +1 -1
  640. package/dist/session/session-catalog.js +13 -2
  641. package/dist/session/session-catalog.js.map +1 -1
  642. package/dist/session/session-context.d.ts +6 -2
  643. package/dist/session/session-context.d.ts.map +1 -1
  644. package/dist/session/session-context.js +44 -4
  645. package/dist/session/session-context.js.map +1 -1
  646. package/dist/session/session-graph-projection.d.ts +32 -0
  647. package/dist/session/session-graph-projection.d.ts.map +1 -0
  648. package/dist/session/session-graph-projection.js +133 -0
  649. package/dist/session/session-graph-projection.js.map +1 -0
  650. package/dist/session/types.d.ts +18 -0
  651. package/dist/session/types.d.ts.map +1 -1
  652. package/dist/session/types.js +8 -0
  653. package/dist/session/types.js.map +1 -1
  654. package/dist/session/wire-format.generated.d.ts +3 -0
  655. package/dist/session/wire-format.generated.d.ts.map +1 -1
  656. package/dist/session/wire-format.generated.js +20 -0
  657. package/dist/session/wire-format.generated.js.map +1 -1
  658. package/dist/skills/eval-harness.d.ts +38 -0
  659. package/dist/skills/eval-harness.d.ts.map +1 -0
  660. package/dist/skills/eval-harness.js +112 -0
  661. package/dist/skills/eval-harness.js.map +1 -0
  662. package/dist/skills/index.d.ts +5 -1
  663. package/dist/skills/index.d.ts.map +1 -1
  664. package/dist/skills/index.js +5 -1
  665. package/dist/skills/index.js.map +1 -1
  666. package/dist/skills/linter.d.ts +36 -0
  667. package/dist/skills/linter.d.ts.map +1 -0
  668. package/dist/skills/linter.js +398 -0
  669. package/dist/skills/linter.js.map +1 -0
  670. package/dist/skills/loader.d.ts +36 -6
  671. package/dist/skills/loader.d.ts.map +1 -1
  672. package/dist/skills/loader.js +169 -86
  673. package/dist/skills/loader.js.map +1 -1
  674. package/dist/skills/package-contract.d.ts +45 -0
  675. package/dist/skills/package-contract.d.ts.map +1 -0
  676. package/dist/skills/package-contract.js +153 -0
  677. package/dist/skills/package-contract.js.map +1 -0
  678. package/dist/skills/runtime-activation.d.ts +68 -0
  679. package/dist/skills/runtime-activation.d.ts.map +1 -0
  680. package/dist/skills/runtime-activation.js +228 -0
  681. package/dist/skills/runtime-activation.js.map +1 -0
  682. package/dist/skills/service-client.d.ts.map +1 -1
  683. package/dist/skills/service-client.js +3 -4
  684. package/dist/skills/service-client.js.map +1 -1
  685. package/dist/skills/tool.d.ts.map +1 -1
  686. package/dist/skills/tool.js +2 -0
  687. package/dist/skills/tool.js.map +1 -1
  688. package/dist/skills/types.d.ts +14 -0
  689. package/dist/skills/types.d.ts.map +1 -1
  690. package/dist/skills/types.js.map +1 -1
  691. package/dist/telemetry/agent-operating-plane-context.d.ts +24 -0
  692. package/dist/telemetry/agent-operating-plane-context.d.ts.map +1 -0
  693. package/dist/telemetry/agent-operating-plane-context.js +54 -0
  694. package/dist/telemetry/agent-operating-plane-context.js.map +1 -0
  695. package/dist/telemetry/beacon.d.ts +24 -0
  696. package/dist/telemetry/beacon.d.ts.map +1 -0
  697. package/dist/telemetry/beacon.js +115 -0
  698. package/dist/telemetry/beacon.js.map +1 -0
  699. package/dist/telemetry/cli-command-aggregator.d.ts +36 -0
  700. package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -0
  701. package/dist/telemetry/cli-command-aggregator.js +251 -0
  702. package/dist/telemetry/cli-command-aggregator.js.map +1 -0
  703. package/dist/telemetry/cli-startup.d.ts +21 -0
  704. package/dist/telemetry/cli-startup.d.ts.map +1 -0
  705. package/dist/telemetry/cli-startup.js +83 -0
  706. package/dist/telemetry/cli-startup.js.map +1 -0
  707. package/dist/telemetry/disablement.d.ts +13 -0
  708. package/dist/telemetry/disablement.d.ts.map +1 -0
  709. package/dist/telemetry/disablement.js +19 -0
  710. package/dist/telemetry/disablement.js.map +1 -0
  711. package/dist/telemetry/index.d.ts +6 -2
  712. package/dist/telemetry/index.d.ts.map +1 -1
  713. package/dist/telemetry/index.js +6 -2
  714. package/dist/telemetry/index.js.map +1 -1
  715. package/dist/telemetry/maestro-event-bus.d.ts +52 -0
  716. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  717. package/dist/telemetry/maestro-event-bus.js +179 -3
  718. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  719. package/dist/telemetry/maestro-event-catalog.d.ts +3 -1
  720. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  721. package/dist/telemetry/maestro-event-catalog.js +2 -0
  722. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  723. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  724. package/dist/telemetry/maestro-platform-replay-fixture.js +74 -9
  725. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  726. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +1 -1
  727. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -1
  728. package/dist/telemetry/maestro-publisher-conformance-fixture.js +46 -11
  729. package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -1
  730. package/dist/telemetry/mcp-beacon.d.ts +20 -0
  731. package/dist/telemetry/mcp-beacon.d.ts.map +1 -0
  732. package/dist/telemetry/mcp-beacon.js +54 -0
  733. package/dist/telemetry/mcp-beacon.js.map +1 -0
  734. package/dist/telemetry/metadata-normalization.d.ts +7 -0
  735. package/dist/telemetry/metadata-normalization.d.ts.map +1 -0
  736. package/dist/telemetry/metadata-normalization.js +189 -0
  737. package/dist/telemetry/metadata-normalization.js.map +1 -0
  738. package/dist/telemetry/meter-service-client.d.ts.map +1 -1
  739. package/dist/telemetry/meter-service-client.js +5 -10
  740. package/dist/telemetry/meter-service-client.js.map +1 -1
  741. package/dist/telemetry/metrics.d.ts +123 -0
  742. package/dist/telemetry/metrics.d.ts.map +1 -0
  743. package/dist/telemetry/metrics.js +184 -0
  744. package/dist/telemetry/metrics.js.map +1 -0
  745. package/dist/telemetry/turn-tracker.d.ts +1 -0
  746. package/dist/telemetry/turn-tracker.d.ts.map +1 -1
  747. package/dist/telemetry/turn-tracker.js +22 -1
  748. package/dist/telemetry/turn-tracker.js.map +1 -1
  749. package/dist/telemetry/wide-events.d.ts +31 -1
  750. package/dist/telemetry/wide-events.d.ts.map +1 -1
  751. package/dist/telemetry/wide-events.js +229 -1
  752. package/dist/telemetry/wide-events.js.map +1 -1
  753. package/dist/telemetry.d.ts +39 -3
  754. package/dist/telemetry.d.ts.map +1 -1
  755. package/dist/telemetry.js +160 -3
  756. package/dist/telemetry.js.map +1 -1
  757. package/dist/testing/test-verification-hook.d.ts.map +1 -1
  758. package/dist/testing/test-verification-hook.js +34 -21
  759. package/dist/testing/test-verification-hook.js.map +1 -1
  760. package/dist/tools/apply-patch-parser.d.ts +26 -0
  761. package/dist/tools/apply-patch-parser.d.ts.map +1 -0
  762. package/dist/tools/apply-patch-parser.js +146 -0
  763. package/dist/tools/apply-patch-parser.js.map +1 -0
  764. package/dist/tools/apply-patch.d.ts +42 -0
  765. package/dist/tools/apply-patch.d.ts.map +1 -0
  766. package/dist/tools/apply-patch.js +648 -0
  767. package/dist/tools/apply-patch.js.map +1 -0
  768. package/dist/tools/ask-user.d.ts +1 -0
  769. package/dist/tools/ask-user.d.ts.map +1 -1
  770. package/dist/tools/background/tool-handler.d.ts +1 -0
  771. package/dist/tools/background/tool-handler.d.ts.map +1 -1
  772. package/dist/tools/bash.d.ts +1 -0
  773. package/dist/tools/bash.d.ts.map +1 -1
  774. package/dist/tools/codesearch.d.ts +1 -0
  775. package/dist/tools/codesearch.d.ts.map +1 -1
  776. package/dist/tools/conductor-client.d.ts +1 -0
  777. package/dist/tools/conductor-client.d.ts.map +1 -1
  778. package/dist/tools/conductor-client.js +63 -0
  779. package/dist/tools/conductor-client.js.map +1 -1
  780. package/dist/tools/diff.d.ts +1 -0
  781. package/dist/tools/diff.d.ts.map +1 -1
  782. package/dist/tools/edit.d.ts +1 -0
  783. package/dist/tools/edit.d.ts.map +1 -1
  784. package/dist/tools/extract-document.d.ts +1 -0
  785. package/dist/tools/extract-document.d.ts.map +1 -1
  786. package/dist/tools/find.d.ts +10 -0
  787. package/dist/tools/find.d.ts.map +1 -1
  788. package/dist/tools/find.js +236 -27
  789. package/dist/tools/find.js.map +1 -1
  790. package/dist/tools/gh.d.ts +3 -0
  791. package/dist/tools/gh.d.ts.map +1 -1
  792. package/dist/tools/index.d.ts +50 -0
  793. package/dist/tools/index.d.ts.map +1 -1
  794. package/dist/tools/index.js +4 -0
  795. package/dist/tools/index.js.map +1 -1
  796. package/dist/tools/list.d.ts +1 -0
  797. package/dist/tools/list.d.ts.map +1 -1
  798. package/dist/tools/notebook.d.ts +1 -0
  799. package/dist/tools/notebook.d.ts.map +1 -1
  800. package/dist/tools/oracle.d.ts +1 -0
  801. package/dist/tools/oracle.d.ts.map +1 -1
  802. package/dist/tools/oracle.js +17 -32
  803. package/dist/tools/oracle.js.map +1 -1
  804. package/dist/tools/parallel-execution.d.ts +13 -2
  805. package/dist/tools/parallel-execution.d.ts.map +1 -1
  806. package/dist/tools/parallel-execution.js +178 -7
  807. package/dist/tools/parallel-execution.js.map +1 -1
  808. package/dist/tools/parallel-ripgrep.d.ts +1 -0
  809. package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
  810. package/dist/tools/pipeline.d.ts +4 -0
  811. package/dist/tools/pipeline.d.ts.map +1 -1
  812. package/dist/tools/read.d.ts +1 -0
  813. package/dist/tools/read.d.ts.map +1 -1
  814. package/dist/tools/search.d.ts +1 -0
  815. package/dist/tools/search.d.ts.map +1 -1
  816. package/dist/tools/status.d.ts +1 -0
  817. package/dist/tools/status.d.ts.map +1 -1
  818. package/dist/tools/todo.d.ts +1 -0
  819. package/dist/tools/todo.d.ts.map +1 -1
  820. package/dist/tools/tool-dsl.d.ts +5 -1
  821. package/dist/tools/tool-dsl.d.ts.map +1 -1
  822. package/dist/tools/tool-dsl.js +1 -0
  823. package/dist/tools/tool-dsl.js.map +1 -1
  824. package/dist/tools/tool-result-cache.d.ts.map +1 -1
  825. package/dist/tools/tool-result-cache.js +1 -0
  826. package/dist/tools/tool-result-cache.js.map +1 -1
  827. package/dist/tools/typebox-tool.d.ts.map +1 -1
  828. package/dist/tools/typebox-tool.js +3 -0
  829. package/dist/tools/typebox-tool.js.map +1 -1
  830. package/dist/tools/webfetch.d.ts +1 -0
  831. package/dist/tools/webfetch.d.ts.map +1 -1
  832. package/dist/tools/websearch.d.ts +1 -0
  833. package/dist/tools/websearch.d.ts.map +1 -1
  834. package/dist/tools/write.d.ts +1 -0
  835. package/dist/tools/write.d.ts.map +1 -1
  836. package/dist/utils/abort-error.d.ts +2 -0
  837. package/dist/utils/abort-error.d.ts.map +1 -0
  838. package/dist/utils/abort-error.js +7 -0
  839. package/dist/utils/abort-error.js.map +1 -0
  840. package/dist/utils/downstream.d.ts.map +1 -1
  841. package/dist/utils/downstream.js +4 -0
  842. package/dist/utils/downstream.js.map +1 -1
  843. package/dist/utils/logger.d.ts +3 -0
  844. package/dist/utils/logger.d.ts.map +1 -1
  845. package/dist/utils/logger.js +14 -3
  846. package/dist/utils/logger.js.map +1 -1
  847. package/dist/utils/path-containment.d.ts +2 -0
  848. package/dist/utils/path-containment.d.ts.map +1 -0
  849. package/dist/utils/path-containment.js +14 -0
  850. package/dist/utils/path-containment.js.map +1 -0
  851. package/dist/utils/prompt-safe-text.d.ts +7 -0
  852. package/dist/utils/prompt-safe-text.d.ts.map +1 -0
  853. package/dist/utils/prompt-safe-text.js +44 -0
  854. package/dist/utils/prompt-safe-text.js.map +1 -0
  855. package/dist/version.json +2 -2
  856. package/dist/web-server.d.ts.map +1 -1
  857. package/dist/web-server.js +32 -7
  858. package/dist/web-server.js.map +1 -1
  859. package/dist/workspace/root-resolver.d.ts +4 -1
  860. package/dist/workspace/root-resolver.d.ts.map +1 -1
  861. package/dist/workspace/root-resolver.js +16 -6
  862. package/dist/workspace/root-resolver.js.map +1 -1
  863. package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts +8 -0
  864. package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts.map +1 -0
  865. package/node_modules/@evalops/contracts/dist/advisor-effort.js +35 -0
  866. package/node_modules/@evalops/contracts/dist/advisor-effort.js.map +1 -0
  867. package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts +10 -0
  868. package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts.map +1 -0
  869. package/node_modules/@evalops/contracts/dist/delegation-prompt.js +48 -0
  870. package/node_modules/@evalops/contracts/dist/delegation-prompt.js.map +1 -0
  871. package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts +20 -0
  872. package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts.map +1 -0
  873. package/node_modules/@evalops/contracts/dist/guarded-files-settings.js +147 -0
  874. package/node_modules/@evalops/contracts/dist/guarded-files-settings.js.map +1 -0
  875. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts +2 -0
  876. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts.map +1 -1
  877. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js +1 -0
  878. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js.map +1 -1
  879. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +280 -5
  880. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
  881. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +36 -1
  882. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
  883. package/node_modules/@evalops/contracts/dist/index.d.ts +15 -1
  884. package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  885. package/node_modules/@evalops/contracts/dist/index.js +6 -0
  886. package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  887. package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +593 -0
  888. package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -0
  889. package/node_modules/@evalops/contracts/dist/maestro-app-server.js +218 -0
  890. package/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -0
  891. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +91 -0
  892. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
  893. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +92 -61
  894. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
  895. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +3 -0
  896. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -1
  897. package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts +28 -0
  898. package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts.map +1 -0
  899. package/node_modules/@evalops/contracts/dist/runtime-constraints.js +71 -0
  900. package/node_modules/@evalops/contracts/dist/runtime-constraints.js.map +1 -0
  901. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +7 -0
  902. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -1
  903. package/node_modules/@evalops/contracts/dist/runtime-server-request.js +2 -0
  904. package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -1
  905. package/node_modules/@evalops/contracts/dist/scenario.d.ts +191 -0
  906. package/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -0
  907. package/node_modules/@evalops/contracts/dist/scenario.js +4 -0
  908. package/node_modules/@evalops/contracts/dist/scenario.js.map +1 -0
  909. package/node_modules/@evalops/contracts/dist/schemas.d.ts +17 -3
  910. package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
  911. package/node_modules/@evalops/contracts/dist/schemas.js +16 -0
  912. package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
  913. package/node_modules/@evalops/contracts/package.json +1 -1
  914. package/node_modules/@evalops/tui/package.json +1 -1
  915. package/package.json +41 -7
  916. package/skills/incident-triage/SKILL.md +40 -0
  917. package/skills/incident-triage/mcp.json +14 -0
  918. package/skills/incident-triage/reference/triage.md +20 -0
  919. package/skills/incident-triage/toolbox/incident-timeline +22 -0
  920. package/skills/incident-triage/toolbox/incident-timeline.cmd +16 -0
  921. package/skills/pr-review/SKILL.md +40 -0
  922. package/skills/pr-review/mcp.json +14 -0
  923. package/skills/pr-review/reference/rubric.md +20 -0
  924. package/skills/pr-review/toolbox/review-summary +20 -0
  925. package/skills/pr-review/toolbox/review-summary.cmd +14 -0
  926. package/skills/release-verification/SKILL.md +40 -0
  927. package/skills/release-verification/mcp.json +15 -0
  928. package/skills/release-verification/reference/checklist.md +21 -0
  929. package/skills/release-verification/toolbox/release-readiness +18 -0
  930. package/skills/release-verification/toolbox/release-readiness.cmd +12 -0
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Skills Loader - Dynamic skill discovery and loading system.\n *\n * Implements the Agent Skills specification (https://agentskills.io/specification).\n *\n * Skills are domain-specific instruction sets that provide:\n * - Detailed workflows and procedures\n * - Access to bundled resources (scripts, templates, references)\n * - Domain expertise for specialized tasks\n *\n * Skills are discovered from:\n * - ~/.maestro/skills/ (user skills)\n * - .maestro/skills/ (project skills)\n *\n * Each skill is a directory containing:\n * - SKILL.md or skill.md - Main skill file with YAML frontmatter\n * - Optional: scripts/, references/, assets/ directories\n */\n\nimport { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { PATHS } from \"../config/constants.js\";\nimport { loadConfiguredPackageResources } from \"../packages/runtime.js\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"skills:loader\");\n\n/** Maximum lengths per Agent Skills spec */\nconst MAX_NAME_LENGTH = 64;\nconst MAX_DESCRIPTION_LENGTH = 1024;\nconst MAX_COMPATIBILITY_LENGTH = 500;\n\n/** Allowed frontmatter fields per Agent Skills spec */\nconst ALLOWED_FIELDS = new Set([\n\t\"name\",\n\t\"description\",\n\t\"license\",\n\t\"compatibility\",\n\t\"allowed-tools\",\n\t\"metadata\",\n\t// Legacy fields (deprecated but supported for backwards compatibility)\n\t\"tags\",\n\t\"author\",\n\t\"version\",\n\t\"triggers\",\n]);\n\n/**\n * Skill definition from SKILL.md frontmatter (per Agent Skills spec).\n */\nexport interface SkillDefinition {\n\t/** Skill name (1-64 chars, lowercase alphanumeric + hyphens) */\n\tname: string;\n\t/** Description of what the skill does (1-1024 chars) */\n\tdescription: string;\n\t/** License identifier */\n\tlicense?: string;\n\t/** Compatibility/environment requirements (max 500 chars) */\n\tcompatibility?: string;\n\t/** Space-delimited list of pre-approved tools */\n\tallowedTools?: string;\n\t/** Additional key-value metadata */\n\tmetadata?: Record<string, string>;\n\t/** @deprecated Use metadata instead */\n\ttags?: string[];\n\t/** @deprecated Use metadata.author instead */\n\tauthor?: string;\n\t/** @deprecated Use metadata.version instead */\n\tversion?: string;\n\t/** @deprecated Use description for trigger keywords instead */\n\ttriggers?: string[];\n}\n\n/**\n * Loaded skill with full content.\n */\nexport interface LoadedSkill extends SkillDefinition {\n\t/** Source directory path */\n\tsourcePath: string;\n\t/** Source type: 'user', 'project', 'system', or 'service' */\n\tsourceType: \"user\" | \"project\" | \"system\" | \"service\";\n\t/** Full markdown content (without frontmatter) */\n\tcontent: string;\n\t/** List of bundled resource files */\n\tresources: SkillResource[];\n\t/** Resource directories */\n\tresourceDirs: SkillResourceDirs;\n}\n\n/**\n * Resource directories per Agent Skills spec.\n */\nexport interface SkillResourceDirs {\n\t/** Path to scripts directory if it exists */\n\tscriptsDir?: string;\n\t/** Path to references directory if it exists */\n\treferencesDir?: string;\n\t/** Path to assets directory if it exists */\n\tassetsDir?: string;\n}\n\n/**\n * A bundled resource file within a skill.\n */\nexport interface SkillResource {\n\t/** Resource file name */\n\tname: string;\n\t/** Full path to the resource */\n\tpath: string;\n\t/** Resource type based on extension */\n\ttype: \"script\" | \"template\" | \"reference\" | \"other\";\n}\n\n/**\n * Skill loading error.\n */\nexport class SkillLoadError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly path: string,\n\t\tpublic readonly code:\n\t\t\t| \"MISSING_FRONTMATTER\"\n\t\t\t| \"INVALID_YAML\"\n\t\t\t| \"INVALID_NAME\"\n\t\t\t| \"INVALID_DESCRIPTION\"\n\t\t\t| \"INVALID_COMPATIBILITY\"\n\t\t\t| \"UNEXPECTED_FIELDS\"\n\t\t\t| \"NAME_MISMATCH\"\n\t\t\t| \"READ_ERROR\",\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"SkillLoadError\";\n\t}\n}\n\n/**\n * Validate skill name per Agent Skills spec.\n */\nfunction validateName(name: string, dirName: string): string | null {\n\tif (!name || typeof name !== \"string\") {\n\t\treturn \"Name must be a non-empty string\";\n\t}\n\n\tif (name.length > MAX_NAME_LENGTH) {\n\t\treturn `Name exceeds ${MAX_NAME_LENGTH} characters (got ${name.length})`;\n\t}\n\n\tif (name !== name.toLowerCase()) {\n\t\treturn \"Name must be lowercase\";\n\t}\n\n\tif (name.startsWith(\"-\") || name.endsWith(\"-\")) {\n\t\treturn \"Name cannot start or end with a hyphen\";\n\t}\n\n\tif (name.includes(\"--\")) {\n\t\treturn \"Name cannot contain consecutive hyphens\";\n\t}\n\n\tif (!/^[a-z0-9-]+$/.test(name)) {\n\t\treturn \"Name can only contain lowercase letters, numbers, and hyphens\";\n\t}\n\n\t// Directory name must match skill name (skip for 'skills' root dir)\n\tif (dirName !== \"skills\" && dirName !== name) {\n\t\treturn `Directory name '${dirName}' must match skill name '${name}'`;\n\t}\n\n\treturn null;\n}\n\n/**\n * Validate description per Agent Skills spec.\n */\nfunction validateDescription(description: string): string | null {\n\tif (!description || typeof description !== \"string\") {\n\t\treturn \"Description must be a non-empty string\";\n\t}\n\n\tif (description.length > MAX_DESCRIPTION_LENGTH) {\n\t\treturn `Description exceeds ${MAX_DESCRIPTION_LENGTH} characters (got ${description.length})`;\n\t}\n\n\treturn null;\n}\n\n/**\n * Validate compatibility per Agent Skills spec.\n */\nfunction validateCompatibility(compatibility: string): string | null {\n\tif (typeof compatibility !== \"string\") {\n\t\treturn \"Compatibility must be a string\";\n\t}\n\n\tif (compatibility.length > MAX_COMPATIBILITY_LENGTH) {\n\t\treturn `Compatibility exceeds ${MAX_COMPATIBILITY_LENGTH} characters (got ${compatibility.length})`;\n\t}\n\n\treturn null;\n}\n\n/**\n * Check for unexpected fields in frontmatter.\n */\nfunction validateFields(frontmatter: Record<string, unknown>): string[] {\n\tconst unexpected: string[] = [];\n\n\tfor (const key of Object.keys(frontmatter)) {\n\t\tif (!ALLOWED_FIELDS.has(key)) {\n\t\t\tunexpected.push(key);\n\t\t}\n\t}\n\n\treturn unexpected;\n}\n\n/**\n * Find SKILL.md file (case-insensitive per spec).\n */\nfunction findSkillMd(dir: string): string | null {\n\t// Prefer uppercase\n\tconst uppercase = join(dir, \"SKILL.md\");\n\tif (existsSync(uppercase)) {\n\t\treturn uppercase;\n\t}\n\n\t// Fall back to lowercase\n\tconst lowercase = join(dir, \"skill.md\");\n\tif (existsSync(lowercase)) {\n\t\treturn lowercase;\n\t}\n\n\treturn null;\n}\n\n/**\n * Parse YAML frontmatter from markdown content.\n */\nfunction parseFrontmatter(content: string): {\n\tfrontmatter: Record<string, unknown>;\n\tbody: string;\n} {\n\tif (!content.trimStart().startsWith(\"---\")) {\n\t\tthrow new Error(\"Missing frontmatter delimiters\");\n\t}\n\n\tconst frontmatterRegex = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)$/;\n\tconst match = content.match(frontmatterRegex);\n\n\tif (!match) {\n\t\tthrow new Error(\"Frontmatter not properly closed\");\n\t}\n\n\tconst [, yamlContent, body] = match;\n\n\t// Simple YAML parser for common patterns\n\tconst frontmatter: Record<string, unknown> = {};\n\tconst lines = yamlContent!.split(\"\\n\");\n\tlet currentKey: string | null = null;\n\tlet currentArray: string[] | null = null;\n\tlet inMetadata = false;\n\tlet metadataObj: Record<string, string> = {};\n\n\tfor (const line of lines) {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n\t\t// Check for array item\n\t\tif (trimmed.startsWith(\"- \") && currentKey && currentArray) {\n\t\t\tcurrentArray.push(trimmed.slice(2).trim());\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for metadata nested key\n\t\tif (inMetadata && line.startsWith(\" \") && !trimmed.startsWith(\"-\")) {\n\t\t\tconst colonIndex = trimmed.indexOf(\":\");\n\t\t\tif (colonIndex > 0) {\n\t\t\t\tconst key = trimmed.slice(0, colonIndex).trim();\n\t\t\t\tconst value = trimmed\n\t\t\t\t\t.slice(colonIndex + 1)\n\t\t\t\t\t.trim()\n\t\t\t\t\t.replace(/^[\"']|[\"']$/g, \"\");\n\t\t\t\tmetadataObj[key] = value;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// Save previous array if exists\n\t\tif (currentKey && currentArray) {\n\t\t\tfrontmatter[currentKey] = currentArray;\n\t\t\tcurrentArray = null;\n\t\t}\n\n\t\t// End metadata block\n\t\tif (inMetadata && !line.startsWith(\" \")) {\n\t\t\tfrontmatter.metadata = metadataObj;\n\t\t\tinMetadata = false;\n\t\t\tmetadataObj = {};\n\t\t}\n\n\t\t// Parse key: value\n\t\tconst colonIndex = trimmed.indexOf(\":\");\n\t\tif (colonIndex > 0) {\n\t\t\tconst key = trimmed.slice(0, colonIndex).trim();\n\t\t\tconst value = trimmed.slice(colonIndex + 1).trim();\n\n\t\t\tif (key === \"metadata\" && value === \"\") {\n\t\t\t\tinMetadata = true;\n\t\t\t\tcurrentKey = null;\n\t\t\t} else if (value === \"\") {\n\t\t\t\t// Start of array\n\t\t\t\tcurrentKey = key;\n\t\t\t\tcurrentArray = [];\n\t\t\t} else {\n\t\t\t\t// Simple value - remove quotes if present\n\t\t\t\tfrontmatter[key] = value.replace(/^[\"']|[\"']$/g, \"\");\n\t\t\t\tcurrentKey = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Save final array if exists\n\tif (currentKey && currentArray) {\n\t\tfrontmatter[currentKey] = currentArray;\n\t}\n\n\t// Save metadata if still in block\n\tif (inMetadata && Object.keys(metadataObj).length > 0) {\n\t\tfrontmatter.metadata = metadataObj;\n\t}\n\n\treturn { frontmatter, body: body! };\n}\n\n/**\n * Determine resource type from file extension.\n */\nfunction getResourceType(\n\tfilename: string,\n): \"script\" | \"template\" | \"reference\" | \"other\" {\n\tconst ext = filename.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n\tconst scriptExtensions = [\"sh\", \"bash\", \"py\", \"js\", \"ts\", \"rb\", \"pl\"];\n\tconst templateExtensions = [\"hbs\", \"ejs\", \"mustache\", \"j2\", \"jinja\", \"tmpl\"];\n\tconst referenceExtensions = [\"md\", \"txt\", \"json\", \"yaml\", \"yml\", \"toml\"];\n\n\tif (scriptExtensions.includes(ext)) return \"script\";\n\tif (templateExtensions.includes(ext)) return \"template\";\n\tif (referenceExtensions.includes(ext)) return \"reference\";\n\treturn \"other\";\n}\n\n/**\n * Load a single skill from a directory.\n */\nfunction loadSkillFromDirectory(\n\tskillDir: string,\n\tsourceType: \"user\" | \"project\" | \"system\",\n): LoadedSkill | SkillLoadError {\n\tconst skillFile = findSkillMd(skillDir);\n\tconst dirName = basename(skillDir);\n\n\tif (!skillFile) {\n\t\treturn new SkillLoadError(\n\t\t\t`No SKILL.md found in ${skillDir}`,\n\t\t\tskillDir,\n\t\t\t\"READ_ERROR\",\n\t\t);\n\t}\n\n\ttry {\n\t\tconst rawContent = readFileSync(skillFile, \"utf-8\");\n\t\tlet frontmatter: Record<string, unknown>;\n\t\tlet body: string;\n\n\t\ttry {\n\t\t\t({ frontmatter, body } = parseFrontmatter(rawContent));\n\t\t} catch (err) {\n\t\t\treturn new SkillLoadError(\n\t\t\t\t`Invalid frontmatter: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\tskillFile,\n\t\t\t\t\"INVALID_YAML\",\n\t\t\t);\n\t\t}\n\n\t\t// Check for unexpected fields (per Agent Skills spec)\n\t\tconst unexpectedFields = validateFields(frontmatter);\n\t\tif (unexpectedFields.length > 0) {\n\t\t\treturn new SkillLoadError(\n\t\t\t\t`Unexpected fields: ${unexpectedFields.join(\", \")}. Only ${Array.from(ALLOWED_FIELDS).join(\", \")} are allowed.`,\n\t\t\t\tskillFile,\n\t\t\t\t\"UNEXPECTED_FIELDS\",\n\t\t\t);\n\t\t}\n\n\t\t// Validate name\n\t\tconst name = frontmatter.name as string;\n\t\tconst nameError = validateName(name, dirName);\n\t\tif (nameError) {\n\t\t\treturn new SkillLoadError(nameError, skillFile, \"INVALID_NAME\");\n\t\t}\n\n\t\t// Validate description\n\t\tconst description = frontmatter.description as string;\n\t\tconst descError = validateDescription(description);\n\t\tif (descError) {\n\t\t\treturn new SkillLoadError(descError, skillFile, \"INVALID_DESCRIPTION\");\n\t\t}\n\n\t\t// Validate compatibility if present\n\t\tif (frontmatter.compatibility) {\n\t\t\tconst compatError = validateCompatibility(\n\t\t\t\tfrontmatter.compatibility as string,\n\t\t\t);\n\t\t\tif (compatError) {\n\t\t\t\treturn new SkillLoadError(\n\t\t\t\t\tcompatError,\n\t\t\t\t\tskillFile,\n\t\t\t\t\t\"INVALID_COMPATIBILITY\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Discover resource directories\n\t\tconst resourceDirs: SkillResourceDirs = {};\n\t\tconst scriptsDir = join(skillDir, \"scripts\");\n\t\tconst referencesDir = join(skillDir, \"references\");\n\t\tconst assetsDir = join(skillDir, \"assets\");\n\n\t\tif (existsSync(scriptsDir) && statSync(scriptsDir).isDirectory()) {\n\t\t\tresourceDirs.scriptsDir = scriptsDir;\n\t\t}\n\t\tif (existsSync(referencesDir) && statSync(referencesDir).isDirectory()) {\n\t\t\tresourceDirs.referencesDir = referencesDir;\n\t\t}\n\t\tif (existsSync(assetsDir) && statSync(assetsDir).isDirectory()) {\n\t\t\tresourceDirs.assetsDir = assetsDir;\n\t\t}\n\n\t\t// Discover bundled resources (legacy flat structure)\n\t\tconst resources: SkillResource[] = [];\n\t\ttry {\n\t\t\tconst files = readdirSync(skillDir);\n\t\t\tfor (const file of files) {\n\t\t\t\tif (file.toLowerCase() === \"skill.md\") continue;\n\t\t\t\tif ([\"scripts\", \"references\", \"assets\"].includes(file)) continue;\n\t\t\t\tconst filePath = join(skillDir, file);\n\t\t\t\tconst stat = statSync(filePath);\n\t\t\t\tif (stat.isFile()) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tname: file,\n\t\t\t\t\t\tpath: filePath,\n\t\t\t\t\t\ttype: getResourceType(file),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tlogger.debug(\"Error scanning skill resources\", {\n\t\t\t\tskillDir,\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t});\n\t\t}\n\n\t\tconst skill: LoadedSkill = {\n\t\t\tname,\n\t\t\tdescription,\n\t\t\tlicense: frontmatter.license as string | undefined,\n\t\t\tcompatibility: frontmatter.compatibility as string | undefined,\n\t\t\tallowedTools: frontmatter[\"allowed-tools\"] as string | undefined,\n\t\t\tmetadata: frontmatter.metadata as Record<string, string> | undefined,\n\t\t\t// Legacy fields for backwards compatibility\n\t\t\ttags: Array.isArray(frontmatter.tags)\n\t\t\t\t? (frontmatter.tags as string[])\n\t\t\t\t: undefined,\n\t\t\tauthor:\n\t\t\t\ttypeof frontmatter.author === \"string\" ? frontmatter.author : undefined,\n\t\t\tversion:\n\t\t\t\ttypeof frontmatter.version === \"string\"\n\t\t\t\t\t? frontmatter.version\n\t\t\t\t\t: undefined,\n\t\t\ttriggers: Array.isArray(frontmatter.triggers)\n\t\t\t\t? (frontmatter.triggers as string[])\n\t\t\t\t: undefined,\n\t\t\tsourcePath: skillDir,\n\t\t\tsourceType,\n\t\t\tcontent: body.trim(),\n\t\t\tresources,\n\t\t\tresourceDirs,\n\t\t};\n\n\t\tlogger.debug(\"Loaded skill\", {\n\t\t\tname: skill.name,\n\t\t\tsourceType,\n\t\t\tresourceCount: resources.length,\n\t\t});\n\n\t\treturn skill;\n\t} catch (err) {\n\t\treturn new SkillLoadError(\n\t\t\t`Error loading skill: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\tskillDir,\n\t\t\t\"READ_ERROR\",\n\t\t);\n\t}\n}\n\n/**\n * Scan a directory for skill subdirectories.\n */\nfunction scanSkillsDirectory(\n\tdir: string,\n\tsourceType: \"user\" | \"project\" | \"system\",\n): { skills: LoadedSkill[]; errors: SkillLoadError[] } {\n\tif (!existsSync(dir)) {\n\t\treturn { skills: [], errors: [] };\n\t}\n\n\tconst skills: LoadedSkill[] = [];\n\tconst errors: SkillLoadError[] = [];\n\n\ttry {\n\t\t// Check for SKILL.md in root (single skill in skills dir)\n\t\tconst rootSkillFile = findSkillMd(dir);\n\t\tif (rootSkillFile) {\n\t\t\tconst result = loadSkillFromDirectory(dir, sourceType);\n\t\t\tif (result instanceof SkillLoadError) {\n\t\t\t\terrors.push(result);\n\t\t\t} else {\n\t\t\t\tskills.push(result);\n\t\t\t}\n\t\t}\n\n\t\t// Check subdirectories\n\t\tconst entries = readdirSync(dir);\n\t\tfor (const entry of entries) {\n\t\t\tconst entryPath = join(dir, entry);\n\t\t\tconst stat = statSync(entryPath);\n\n\t\t\tif (stat.isDirectory()) {\n\t\t\t\tconst result = loadSkillFromDirectory(entryPath, sourceType);\n\t\t\t\tif (result instanceof SkillLoadError) {\n\t\t\t\t\terrors.push(result);\n\t\t\t\t} else {\n\t\t\t\t\tskills.push(result);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\tlogger.warn(\"Error scanning skills directory\", {\n\t\t\tdir,\n\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t});\n\t}\n\n\treturn { skills, errors };\n}\n\n/**\n * Get the system skills directory bundled with the package.\n *\n * Resolves the `skills/` directory relative to the package root,\n * which works whether running from source (repo) or installed via npm.\n */\nfunction getSystemSkillsDir(): string {\n\t// Allow explicit override for non-standard packaging layouts\n\tconst override = process.env.MAESTRO_SYSTEM_SKILLS_DIR;\n\tif (override && existsSync(override)) {\n\t\treturn override;\n\t}\n\n\t// import.meta.url points to this file — either src/skills/loader.ts (dev)\n\t// or dist/cli.js (bundled). Walk up to find the package root by looking\n\t// for a directory that contains both package.json and skills/.\n\tconst thisFile = fileURLToPath(import.meta.url);\n\tlet dir = dirname(thisFile);\n\tfor (let i = 0; i < 5; i++) {\n\t\tconst skillsDir = join(dir, \"skills\");\n\t\tif (existsSync(join(dir, \"package.json\")) && existsSync(skillsDir)) {\n\t\t\treturn skillsDir;\n\t\t}\n\t\tconst parent = dirname(dir);\n\t\tif (parent === dir) break;\n\t\tdir = parent;\n\t}\n\t// Fallback: assume 3 levels up (src/skills/loader.ts layout)\n\tconst packageRoot = dirname(dirname(dirname(thisFile)));\n\treturn join(packageRoot, \"skills\");\n}\n\n/**\n * Load all available skills from system, user, and project directories.\n *\n * Priority (highest wins): project > user > system.\n * System skills are bundled with the package and provide default capabilities.\n *\n * @param workspaceDir - The current workspace/project directory\n * @returns Object with loaded skills and any errors\n */\nexport function loadSkills(\n\tworkspaceDir: string,\n\toptions?: { includeSystem?: boolean },\n): {\n\tskills: LoadedSkill[];\n\terrors: SkillLoadError[];\n} {\n\tconst includeSystem = options?.includeSystem ?? true;\n\tconst systemSkillsDir = includeSystem ? getSystemSkillsDir() : null;\n\tconst userSkillsDir = join(PATHS.MAESTRO_HOME, \"skills\");\n\tconst projectSkillsDir = join(workspaceDir, \".maestro\", \"skills\");\n\tconst packageResources = loadConfiguredPackageResources(workspaceDir);\n\tconst userPackageSkillDirs = packageResources.skills.user;\n\tconst projectPackageSkillDirs = packageResources.skills.project;\n\n\tlogger.debug(\"Scanning for skills\", {\n\t\tsystemSkillsDir: systemSkillsDir ?? \"(disabled)\",\n\t\tuserSkillsDir,\n\t\tprojectSkillsDir,\n\t\tuserPackageSkillDirs,\n\t\tprojectPackageSkillDirs,\n\t});\n\n\tconst systemResult = systemSkillsDir\n\t\t? scanSkillsDirectory(systemSkillsDir, \"system\")\n\t\t: { skills: [], errors: [] };\n\tconst userResult = [...userPackageSkillDirs, userSkillsDir].reduce(\n\t\t(result, dir) => {\n\t\t\tconst next = scanSkillsDirectory(dir, \"user\");\n\t\t\tresult.skills.push(...next.skills);\n\t\t\tresult.errors.push(...next.errors);\n\t\t\treturn result;\n\t\t},\n\t\t{ skills: [] as LoadedSkill[], errors: [] as SkillLoadError[] },\n\t);\n\tconst projectResult = [...projectPackageSkillDirs, projectSkillsDir].reduce(\n\t\t(result, dir) => {\n\t\t\tconst next = scanSkillsDirectory(dir, \"project\");\n\t\t\tresult.skills.push(...next.skills);\n\t\t\tresult.errors.push(...next.errors);\n\t\t\treturn result;\n\t\t},\n\t\t{ skills: [] as LoadedSkill[], errors: [] as SkillLoadError[] },\n\t);\n\n\t// Priority: project > user > system (last writer wins)\n\tconst skillMap = new Map<string, LoadedSkill>();\n\n\tfor (const skill of systemResult.skills) {\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\n\tfor (const skill of userResult.skills) {\n\t\tconst existing = skillMap.get(skill.name.toLowerCase());\n\t\tif (existing) {\n\t\t\tlogger.debug(\"User skill overrides system skill\", {\n\t\t\t\tname: skill.name,\n\t\t\t});\n\t\t}\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\n\tfor (const skill of projectResult.skills) {\n\t\tconst existing = skillMap.get(skill.name.toLowerCase());\n\t\tif (existing) {\n\t\t\tlogger.debug(\"Project skill overrides existing skill\", {\n\t\t\t\tname: skill.name,\n\t\t\t\toverridden: existing.sourceType,\n\t\t\t});\n\t\t}\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\n\tconst allSkills = Array.from(skillMap.values());\n\tconst allErrors = [\n\t\t...systemResult.errors,\n\t\t...userResult.errors,\n\t\t...projectResult.errors,\n\t];\n\n\tlogger.info(\"Finished loading skills\", {\n\t\ttotal: allSkills.length,\n\t\terrors: allErrors.length,\n\t\tsystem: systemResult.skills.length,\n\t\tuser: userResult.skills.length,\n\t\tproject: projectResult.skills.length,\n\t\tuserPackages: userPackageSkillDirs.length,\n\t\tprojectPackages: projectPackageSkillDirs.length,\n\t});\n\n\treturn { skills: allSkills, errors: allErrors };\n}\n\n/**\n * Find a skill by name (case-insensitive).\n */\nexport function findSkill(\n\tskills: LoadedSkill[],\n\tname: string,\n): LoadedSkill | undefined {\n\tconst normalizedName = name.toLowerCase();\n\treturn skills.find((s) => s.name.toLowerCase() === normalizedName);\n}\n\n/**\n * Find skills that match a given query (checks name, description, tags, triggers).\n */\nexport function searchSkills(\n\tskills: LoadedSkill[],\n\tquery: string,\n): LoadedSkill[] {\n\tconst normalizedQuery = query.toLowerCase();\n\n\treturn skills.filter((skill) => {\n\t\t// Check name\n\t\tif (skill.name.toLowerCase().includes(normalizedQuery)) return true;\n\n\t\t// Check description\n\t\tif (skill.description.toLowerCase().includes(normalizedQuery)) return true;\n\n\t\t// Check tags\n\t\tif (skill.tags?.some((t) => t.toLowerCase().includes(normalizedQuery))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Check triggers\n\t\tif (\n\t\t\tskill.triggers?.some((t) => t.toLowerCase().includes(normalizedQuery))\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t});\n}\n\n/**\n * Convert skill to dictionary (per Agent Skills SDK).\n * Excludes undefined values.\n */\nexport function skillToDict(\n\tskill: LoadedSkill,\n): Record<string, string | Record<string, string>> {\n\tconst result: Record<string, string | Record<string, string>> = {\n\t\tname: skill.name,\n\t\tdescription: skill.description,\n\t};\n\n\tif (skill.license) {\n\t\tresult.license = skill.license;\n\t}\n\n\tif (skill.compatibility) {\n\t\tresult.compatibility = skill.compatibility;\n\t}\n\n\tif (skill.allowedTools) {\n\t\tresult[\"allowed-tools\"] = skill.allowedTools;\n\t}\n\n\tif (skill.metadata && Object.keys(skill.metadata).length > 0) {\n\t\tresult.metadata = skill.metadata;\n\t}\n\n\treturn result;\n}\n\n/**\n * Convert skill to JSON string.\n */\nexport function skillToJson(skill: LoadedSkill): string {\n\treturn JSON.stringify(skillToDict(skill), null, 2);\n}\n\n/**\n * Escape XML special characters.\n */\nfunction escapeXml(str: string): string {\n\treturn str\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\")\n\t\t.replace(/'/g, \"&#39;\");\n}\n\n/**\n * Generate XML prompt block for available skills (per Agent Skills SDK).\n *\n * This generates the <available_skills> XML block that should be included\n * in system prompts to make skills discoverable by the agent.\n */\nexport function skillsToPrompt(skills: LoadedSkill[]): string {\n\tif (skills.length === 0) {\n\t\treturn \"<available_skills>\\n</available_skills>\";\n\t}\n\n\tconst lines: string[] = [\"<available_skills>\"];\n\n\tfor (const skill of skills) {\n\t\tlines.push(\"<skill>\");\n\t\tlines.push(` <name>${escapeXml(skill.name)}</name>`);\n\t\tlines.push(` <description>${escapeXml(skill.description)}</description>`);\n\t\tlines.push(\n\t\t\t` <location>${escapeXml(join(skill.sourcePath, \"SKILL.md\"))}</location>`,\n\t\t);\n\t\tlines.push(\"</skill>\");\n\t}\n\n\tlines.push(\"</available_skills>\");\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Format skill for display in a list.\n */\nexport function formatSkillListItem(skill: LoadedSkill): string {\n\tconst sourceLabels: Record<LoadedSkill[\"sourceType\"], string> = {\n\t\tservice: \"(service)\",\n\t\tsystem: \"(system)\",\n\t\tuser: \"(user)\",\n\t\tproject: \"(project)\",\n\t};\n\tconst source = sourceLabels[skill.sourceType];\n\tconst tags = skill.tags?.length ? ` [${skill.tags.join(\", \")}]` : \"\";\n\treturn `${skill.name} ${source}${tags} - ${skill.description}`;\n}\n\n/**\n * Format skill content for injection into conversation.\n */\nexport function formatSkillForInjection(skill: LoadedSkill): string {\n\tconst lines: string[] = [];\n\n\tlines.push(`# Skill: ${skill.name}`);\n\tlines.push(\"\");\n\tlines.push(`> ${skill.description}`);\n\tlines.push(\"\");\n\n\tif (skill.tags?.length) {\n\t\tlines.push(`**Tags:** ${skill.tags.join(\", \")}`);\n\t\tlines.push(\"\");\n\t}\n\n\tif (skill.resources.length > 0) {\n\t\tlines.push(\"## Bundled Resources\");\n\t\tlines.push(\"\");\n\t\tlines.push(\"You can access these bundled resources using the Read tool:\");\n\t\tlines.push(\"\");\n\t\tfor (const resource of skill.resources) {\n\t\t\tlines.push(`- \\`${resource.path}\\` (${resource.type})`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"## Instructions\");\n\tlines.push(\"\");\n\tlines.push(skill.content);\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Get skill summary for system prompt (lists available skills).\n * @deprecated Use skillsToPrompt for XML format per Agent Skills SDK\n */\nexport function getSkillsSummary(skills: LoadedSkill[]): string {\n\tif (skills.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines: string[] = [];\n\tlines.push(\"## Available Skills\");\n\tlines.push(\"\");\n\tlines.push(\n\t\t\"When you recognize that a task matches one of the available skills listed below, \" +\n\t\t\t\"use the Skill tool to load the full skill instructions.\",\n\t);\n\tlines.push(\"\");\n\n\tfor (const skill of skills) {\n\t\tconst tags = skill.tags?.length ? ` [${skill.tags.join(\", \")}]` : \"\";\n\t\tlines.push(`- **${skill.name}**${tags}: ${skill.description}`);\n\t\tif (skill.triggers?.length) {\n\t\t\tlines.push(` - Triggers: ${skill.triggers.join(\", \")}`);\n\t\t}\n\t}\n\n\tlines.push(\"\");\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Progressive Skill Disclosure (#857)\n *\n * Format skill metadata only (name + description) for system prompt injection.\n * The agent can then use the `read` tool to load full SKILL.md content on-demand.\n *\n * Benefits:\n * - Context efficiency: ~10 tokens per skill vs ~500+ for full content\n * - Scalability: 20 skills use ~200 tokens instead of ~10,000\n * - Self-directed: Agent loads what it needs when it needs it\n */\n\n/**\n * Format a single skill's metadata for system prompt (XML format).\n *\n * Returns only name and description in a self-closing XML tag.\n * Follows the Agent Skills specification's progressive disclosure pattern.\n *\n * @param skill - The loaded skill\n * @returns XML-formatted skill metadata\n *\n * @example\n * ```xml\n * <skill name=\"test-runner\" description=\"Run and debug test suites\" />\n * <!-- source: ~/.maestro/skills/test-runner -->\n * ```\n */\nexport function formatSkillMetadataOnly(skill: LoadedSkill): string {\n\t// Escape XML special characters\n\tconst escapeName = skill.name\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\");\n\n\t// Truncate description to max length per spec, escape XML\n\tlet description = skill.description;\n\tif (description.length > MAX_DESCRIPTION_LENGTH) {\n\t\tdescription = `${description.slice(0, MAX_DESCRIPTION_LENGTH - 3)}...`;\n\t}\n\tconst escapeDesc = description\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\");\n\n\t// Include source path as XML comment for debugging\n\treturn `<skill name=\"${escapeName}\" description=\"${escapeDesc}\" />\\n<!-- source: ${skill.sourcePath} -->`;\n}\n\n/**\n * Format multiple skills for system prompt with on-demand loading instructions.\n *\n * Returns XML list of skill metadata plus instructions for the agent to load\n * full skill content using the `read` tool when needed.\n *\n * This is the primary function for progressive skill disclosure.\n *\n * @param skills - Array of loaded skills\n * @returns XML-formatted skills list with loading instructions, or empty string if no skills\n *\n * @example\n * ```xml\n * <available_skills>\n * <skill name=\"test-runner\" description=\"...\" />\n * <skill name=\"git-workflow\" description=\"...\" />\n * </available_skills>\n *\n * When a skill is relevant to the user's request, use the `read` tool to load\n * the full skill instructions from the source path shown in the comment.\n * ```\n */\nexport function formatSkillsForSystemPrompt(skills: LoadedSkill[]): string {\n\tif (skills.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines: string[] = [];\n\n\tlines.push(\"<available_skills>\");\n\tfor (const skill of skills) {\n\t\tlines.push(` ${formatSkillMetadataOnly(skill)}`);\n\t}\n\tlines.push(\"</available_skills>\");\n\tlines.push(\"\");\n\tlines.push(\n\t\t\"When a skill is relevant to the user's request, use the `read` tool to load \" +\n\t\t\t\"the full SKILL.md from the skill's source directory (shown in comments above). \" +\n\t\t\t\"For example: `read ~/.maestro/skills/test-runner/SKILL.md` or \" +\n\t\t\t\"`read .maestro/skills/custom-skill/SKILL.md`. \" +\n\t\t\t\"This progressive loading keeps the system prompt lean while making all skill \" +\n\t\t\t\"capabilities available on-demand.\",\n\t);\n\n\treturn lines.join(\"\\n\");\n}\n"]}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Skills Loader - Dynamic skill discovery and loading system.\n *\n * Implements the Agent Skills specification (https://agentskills.io/specification).\n *\n * Skills are domain-specific instruction sets that provide:\n * - Detailed workflows and procedures\n * - Access to bundled resources (scripts, templates, references)\n * - Domain expertise for specialized tasks\n *\n * Skills are discovered from:\n * - ~/.maestro/skills/ (user skills)\n * - .maestro/skills/ (project skills)\n *\n * Each skill is a directory containing:\n * - SKILL.md or skill.md - Main skill file with YAML frontmatter\n * - Optional: scripts/, references/, assets/ directories\n */\n\nimport { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { load as loadYaml } from \"js-yaml\";\nimport { PATHS } from \"../config/constants.js\";\nimport { loadConfiguredPackageResources } from \"../packages/runtime.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { promptSafeText } from \"../utils/prompt-safe-text.js\";\n\nconst logger = createLogger(\"skills:loader\");\nconst LEGACY_FLAT_RESOURCE_EXCLUDES = new Set([\n\t\"scripts\",\n\t\"reference\",\n\t\"references\",\n\t\"assets\",\n\t\"toolbox\",\n\t\"mcp.json\",\n\t\"mcp.json.example\",\n]);\n\n/** Maximum lengths per Agent Skills spec */\nconst MAX_NAME_LENGTH = 64;\nconst MAX_DESCRIPTION_LENGTH = 1024;\nconst MAX_COMPATIBILITY_LENGTH = 500;\n\n/** Allowed frontmatter fields per Agent Skills spec */\nexport const SKILL_FRONTMATTER_FIELDS = [\n\t\"name\",\n\t\"description\",\n\t\"license\",\n\t\"compatibility\",\n\t\"allowed-tools\",\n\t\"argument-hint\",\n\t\"builtin-tools\",\n\t\"model\",\n\t\"mode\",\n\t\"isolatedContext\",\n\t\"metadata\",\n\t// Legacy fields (deprecated but supported for backwards compatibility)\n\t\"tags\",\n\t\"author\",\n\t\"version\",\n\t\"triggers\",\n] as const;\n\n/** Allowed frontmatter fields per Agent Skills spec plus Maestro package hints. */\nconst ALLOWED_FIELDS = new Set<string>(SKILL_FRONTMATTER_FIELDS);\n\n/**\n * Skill definition from SKILL.md frontmatter (per Agent Skills spec).\n */\nexport interface SkillDefinition {\n\t/** Skill name (1-64 chars, lowercase alphanumeric + hyphens) */\n\tname: string;\n\t/** Description of what the skill does (1-1024 chars) */\n\tdescription: string;\n\t/** License identifier */\n\tlicense?: string;\n\t/** Compatibility/environment requirements (max 500 chars) */\n\tcompatibility?: string;\n\t/** Pre-approved MCP/toolbox tools this skill can use */\n\tallowedTools?: string[];\n\t/** Built-in Maestro tools this skill needs */\n\tbuiltinTools?: string[];\n\t/** Argument hint shown by authoring surfaces */\n\targumentHint?: string;\n\t/** Preferred model while this skill is active */\n\tmodel?: string;\n\t/** Preferred agent mode while this skill is active */\n\tmode?: string;\n\t/** Whether the skill should run in isolated context when supported */\n\tisolatedContext?: boolean;\n\t/** Additional key-value metadata */\n\tmetadata?: Record<string, string>;\n\t/** @deprecated Use metadata instead */\n\ttags?: string[];\n\t/** @deprecated Use metadata.author instead */\n\tauthor?: string;\n\t/** @deprecated Use metadata.version instead */\n\tversion?: string;\n\t/** @deprecated Use description for trigger keywords instead */\n\ttriggers?: string[];\n}\n\n/**\n * Loaded skill with full content.\n */\nexport interface LoadedSkill extends SkillDefinition {\n\t/** Source directory path */\n\tsourcePath: string;\n\t/** Source type: 'user', 'project', 'system', or 'service' */\n\tsourceType: \"user\" | \"project\" | \"system\" | \"service\";\n\t/** Full markdown content (without frontmatter) */\n\tcontent: string;\n\t/** List of bundled resource files */\n\tresources: SkillResource[];\n\t/** Resource directories */\n\tresourceDirs: SkillResourceDirs;\n}\n\n/**\n * Resource directories per Agent Skills spec.\n */\nexport interface SkillResourceDirs {\n\t/** Path to scripts directory if it exists */\n\tscriptsDir?: string;\n\t/** Path to Sourcegraph/Amp-style singular reference directory if it exists */\n\treferenceDir?: string;\n\t/** Path to legacy/plural references directory if it exists */\n\treferencesDir?: string;\n\t/** Path to assets directory if it exists */\n\tassetsDir?: string;\n\t/** Path to toolbox executable directory if it exists */\n\ttoolboxDir?: string;\n\t/** Path to bundled MCP config if it exists */\n\tmcpJsonPath?: string;\n}\n\n/**\n * A bundled resource file within a skill.\n */\nexport interface SkillResource {\n\t/** Resource file name */\n\tname: string;\n\t/** Full path to the resource */\n\tpath: string;\n\t/** Resource type based on extension */\n\ttype: \"script\" | \"template\" | \"reference\" | \"other\";\n}\n\n/**\n * Skill loading error.\n */\nexport class SkillLoadError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly path: string,\n\t\tpublic readonly code:\n\t\t\t| \"MISSING_FRONTMATTER\"\n\t\t\t| \"INVALID_YAML\"\n\t\t\t| \"INVALID_NAME\"\n\t\t\t| \"INVALID_DESCRIPTION\"\n\t\t\t| \"INVALID_COMPATIBILITY\"\n\t\t\t| \"INVALID_TOOL_LIST\"\n\t\t\t| \"UNEXPECTED_FIELDS\"\n\t\t\t| \"NAME_MISMATCH\"\n\t\t\t| \"READ_ERROR\",\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"SkillLoadError\";\n\t}\n}\n\nfunction stringValue(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nexport function stringArrayValue(value: unknown): string[] | undefined {\n\tif (Array.isArray(value)) {\n\t\tif (\n\t\t\tvalue.length === 0 ||\n\t\t\tvalue.some((entry) => typeof entry !== \"string\" || entry.trim() === \"\")\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst values = value\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.filter((entry) => entry.length > 0);\n\t\treturn values.length > 0 ? values : undefined;\n\t}\n\tif (typeof value === \"string\") {\n\t\tconst values = value\n\t\t\t.split(/[,\\s]+/)\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.filter((entry) => entry.length > 0);\n\t\treturn values.length > 0 ? values : undefined;\n\t}\n\treturn undefined;\n}\n\nfunction validateStringArrayField(\n\tvalue: unknown,\n\tfield: string,\n): string | null {\n\tif (value === undefined) {\n\t\treturn null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn stringArrayValue(value)\n\t\t\t? null\n\t\t\t: `${field} must be a non-empty string or list of non-empty strings`;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn stringArrayValue(value)\n\t\t\t? null\n\t\t\t: `${field} entries must all be non-empty strings`;\n\t}\n\treturn `${field} must be a non-empty string or list of non-empty strings`;\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n\tif (typeof value === \"boolean\") return value;\n\tif (typeof value === \"string\") {\n\t\tconst normalized = value.toLowerCase();\n\t\tif (normalized === \"true\") return true;\n\t\tif (normalized === \"false\") return false;\n\t}\n\treturn undefined;\n}\n\nfunction metadataRecordValue(\n\tvalue: unknown,\n): Record<string, string> | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\n\tconst metadata: Record<string, string> = {};\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\tif (\n\t\t\ttypeof entry !== \"string\" &&\n\t\t\ttypeof entry !== \"number\" &&\n\t\t\ttypeof entry !== \"boolean\"\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst normalized = String(entry).trim();\n\t\tif (normalized.length > 0) {\n\t\t\tmetadata[key] = normalized;\n\t\t}\n\t}\n\treturn Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\n/**\n * Validate skill name per Agent Skills spec.\n */\nfunction validateName(name: string, dirName: string): string | null {\n\tif (!name || typeof name !== \"string\") {\n\t\treturn \"Name must be a non-empty string\";\n\t}\n\n\tif (name.length > MAX_NAME_LENGTH) {\n\t\treturn `Name exceeds ${MAX_NAME_LENGTH} characters (got ${name.length})`;\n\t}\n\n\tif (name !== name.toLowerCase()) {\n\t\treturn \"Name must be lowercase\";\n\t}\n\n\tif (name.startsWith(\"-\") || name.endsWith(\"-\")) {\n\t\treturn \"Name cannot start or end with a hyphen\";\n\t}\n\n\tif (name.includes(\"--\")) {\n\t\treturn \"Name cannot contain consecutive hyphens\";\n\t}\n\n\tif (!/^[a-z0-9-]+$/.test(name)) {\n\t\treturn \"Name can only contain lowercase letters, numbers, and hyphens\";\n\t}\n\n\t// Directory name must match skill name (skip for 'skills' root dir)\n\tif (dirName !== \"skills\" && dirName !== name) {\n\t\treturn `Directory name '${dirName}' must match skill name '${name}'`;\n\t}\n\n\treturn null;\n}\n\n/**\n * Validate description per Agent Skills spec.\n */\nfunction validateDescription(description: string): string | null {\n\tif (!description || typeof description !== \"string\") {\n\t\treturn \"Description must be a non-empty string\";\n\t}\n\n\tif (description.length > MAX_DESCRIPTION_LENGTH) {\n\t\treturn `Description exceeds ${MAX_DESCRIPTION_LENGTH} characters (got ${description.length})`;\n\t}\n\n\treturn null;\n}\n\n/**\n * Validate compatibility per Agent Skills spec.\n */\nfunction validateCompatibility(compatibility: unknown): string | null {\n\tif (typeof compatibility !== \"string\") {\n\t\treturn \"Compatibility must be a string\";\n\t}\n\n\tif (compatibility.length > MAX_COMPATIBILITY_LENGTH) {\n\t\treturn `Compatibility exceeds ${MAX_COMPATIBILITY_LENGTH} characters (got ${compatibility.length})`;\n\t}\n\n\treturn null;\n}\n\n/**\n * Check for unexpected fields in frontmatter.\n */\nfunction validateFields(frontmatter: Record<string, unknown>): string[] {\n\tconst unexpected: string[] = [];\n\n\tfor (const key of Object.keys(frontmatter)) {\n\t\tif (!ALLOWED_FIELDS.has(key)) {\n\t\t\tunexpected.push(key);\n\t\t}\n\t}\n\n\treturn unexpected;\n}\n\n/**\n * Find SKILL.md file (case-insensitive per spec).\n */\nexport function findSkillMd(dir: string): string | null {\n\t// Prefer uppercase\n\tconst uppercase = join(dir, \"SKILL.md\");\n\tif (existsSync(uppercase)) {\n\t\treturn uppercase;\n\t}\n\n\t// Fall back to lowercase\n\tconst lowercase = join(dir, \"skill.md\");\n\tif (existsSync(lowercase)) {\n\t\treturn lowercase;\n\t}\n\n\treturn null;\n}\n\n/**\n * Parse YAML frontmatter from markdown content.\n */\nexport function parseFrontmatter(content: string): {\n\tfrontmatter: Record<string, unknown>;\n\tbody: string;\n} {\n\tif (!content.trimStart().startsWith(\"---\")) {\n\t\tthrow new Error(\"Missing frontmatter delimiters\");\n\t}\n\n\tconst frontmatterRegex = /^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)$/;\n\tconst match = content.match(frontmatterRegex);\n\n\tif (!match) {\n\t\tthrow new Error(\"Frontmatter not properly closed\");\n\t}\n\n\tconst [, yamlContent, body] = match;\n\tconst parsed = loadYaml(yamlContent ?? \"\") ?? {};\n\tif (typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(\"Frontmatter must be a YAML object\");\n\t}\n\tconst frontmatter = parsed as Record<string, unknown>;\n\n\treturn { frontmatter, body: body! };\n}\n\n/**\n * Determine resource type from file extension.\n */\nfunction getResourceType(\n\tfilename: string,\n): \"script\" | \"template\" | \"reference\" | \"other\" {\n\tconst ext = filename.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n\tconst scriptExtensions = [\"sh\", \"bash\", \"py\", \"js\", \"ts\", \"rb\", \"pl\"];\n\tconst templateExtensions = [\"hbs\", \"ejs\", \"mustache\", \"j2\", \"jinja\", \"tmpl\"];\n\tconst referenceExtensions = [\"md\", \"txt\", \"json\", \"yaml\", \"yml\", \"toml\"];\n\n\tif (scriptExtensions.includes(ext)) return \"script\";\n\tif (templateExtensions.includes(ext)) return \"template\";\n\tif (referenceExtensions.includes(ext)) return \"reference\";\n\treturn \"other\";\n}\n\n/**\n * Load a single skill from a directory.\n */\nfunction loadSkillFromDirectory(\n\tskillDir: string,\n\tsourceType: \"user\" | \"project\" | \"system\",\n): LoadedSkill | SkillLoadError {\n\tconst skillFile = findSkillMd(skillDir);\n\tconst dirName = basename(skillDir);\n\n\tif (!skillFile) {\n\t\treturn new SkillLoadError(\n\t\t\t`No SKILL.md found in ${skillDir}`,\n\t\t\tskillDir,\n\t\t\t\"READ_ERROR\",\n\t\t);\n\t}\n\n\ttry {\n\t\tconst rawContent = readFileSync(skillFile, \"utf-8\");\n\t\tlet frontmatter: Record<string, unknown>;\n\t\tlet body: string;\n\n\t\ttry {\n\t\t\t({ frontmatter, body } = parseFrontmatter(rawContent));\n\t\t} catch (err) {\n\t\t\treturn new SkillLoadError(\n\t\t\t\t`Invalid frontmatter: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\tskillFile,\n\t\t\t\t\"INVALID_YAML\",\n\t\t\t);\n\t\t}\n\n\t\t// Check for unexpected fields (per Agent Skills spec)\n\t\tconst unexpectedFields = validateFields(frontmatter);\n\t\tif (unexpectedFields.length > 0) {\n\t\t\treturn new SkillLoadError(\n\t\t\t\t`Unexpected fields: ${unexpectedFields.join(\", \")}. Only ${Array.from(ALLOWED_FIELDS).join(\", \")} are allowed.`,\n\t\t\t\tskillFile,\n\t\t\t\t\"UNEXPECTED_FIELDS\",\n\t\t\t);\n\t\t}\n\n\t\t// Validate name\n\t\tconst name = frontmatter.name as string;\n\t\tconst nameError = validateName(name, dirName);\n\t\tif (nameError) {\n\t\t\treturn new SkillLoadError(nameError, skillFile, \"INVALID_NAME\");\n\t\t}\n\n\t\t// Validate description\n\t\tconst description = frontmatter.description as string;\n\t\tconst descError = validateDescription(description);\n\t\tif (descError) {\n\t\t\treturn new SkillLoadError(descError, skillFile, \"INVALID_DESCRIPTION\");\n\t\t}\n\n\t\t// Validate compatibility if present\n\t\tif (frontmatter.compatibility !== undefined) {\n\t\t\tconst compatError = validateCompatibility(frontmatter.compatibility);\n\t\t\tif (compatError) {\n\t\t\t\treturn new SkillLoadError(\n\t\t\t\t\tcompatError,\n\t\t\t\t\tskillFile,\n\t\t\t\t\t\"INVALID_COMPATIBILITY\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const field of [\"allowed-tools\", \"builtin-tools\"]) {\n\t\t\tconst toolListError = validateStringArrayField(frontmatter[field], field);\n\t\t\tif (toolListError) {\n\t\t\t\treturn new SkillLoadError(\n\t\t\t\t\ttoolListError,\n\t\t\t\t\tskillFile,\n\t\t\t\t\t\"INVALID_TOOL_LIST\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Discover resource directories\n\t\tconst resourceDirs: SkillResourceDirs = {};\n\t\tconst scriptsDir = join(skillDir, \"scripts\");\n\t\tconst referenceDir = join(skillDir, \"reference\");\n\t\tconst referencesDir = join(skillDir, \"references\");\n\t\tconst assetsDir = join(skillDir, \"assets\");\n\t\tconst toolboxDir = join(skillDir, \"toolbox\");\n\t\tconst mcpJsonPath = join(skillDir, \"mcp.json\");\n\n\t\tif (existsSync(scriptsDir) && statSync(scriptsDir).isDirectory()) {\n\t\t\tresourceDirs.scriptsDir = scriptsDir;\n\t\t}\n\t\tif (existsSync(referenceDir) && statSync(referenceDir).isDirectory()) {\n\t\t\tresourceDirs.referenceDir = referenceDir;\n\t\t}\n\t\tif (existsSync(referencesDir) && statSync(referencesDir).isDirectory()) {\n\t\t\tresourceDirs.referencesDir = referencesDir;\n\t\t}\n\t\tif (existsSync(assetsDir) && statSync(assetsDir).isDirectory()) {\n\t\t\tresourceDirs.assetsDir = assetsDir;\n\t\t}\n\t\tif (existsSync(toolboxDir) && statSync(toolboxDir).isDirectory()) {\n\t\t\tresourceDirs.toolboxDir = toolboxDir;\n\t\t}\n\t\tif (existsSync(mcpJsonPath) && statSync(mcpJsonPath).isFile()) {\n\t\t\tresourceDirs.mcpJsonPath = mcpJsonPath;\n\t\t}\n\n\t\t// Discover bundled resources (legacy flat structure)\n\t\tconst resources: SkillResource[] = [];\n\t\ttry {\n\t\t\tconst files = readdirSync(skillDir);\n\t\t\tfor (const file of files) {\n\t\t\t\tif (file.toLowerCase() === \"skill.md\") continue;\n\t\t\t\tif (LEGACY_FLAT_RESOURCE_EXCLUDES.has(file.toLowerCase())) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst filePath = join(skillDir, file);\n\t\t\t\tconst stat = statSync(filePath);\n\t\t\t\tif (stat.isFile()) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tname: file,\n\t\t\t\t\t\tpath: filePath,\n\t\t\t\t\t\ttype: getResourceType(file),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tlogger.debug(\"Error scanning skill resources\", {\n\t\t\t\tskillDir,\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t});\n\t\t}\n\n\t\tconst skill: LoadedSkill = {\n\t\t\tname,\n\t\t\tdescription,\n\t\t\tlicense: stringValue(frontmatter.license),\n\t\t\tcompatibility: stringValue(frontmatter.compatibility),\n\t\t\tallowedTools: stringArrayValue(frontmatter[\"allowed-tools\"]),\n\t\t\tbuiltinTools: stringArrayValue(frontmatter[\"builtin-tools\"]),\n\t\t\targumentHint: stringValue(frontmatter[\"argument-hint\"]),\n\t\t\tmodel: stringValue(frontmatter.model),\n\t\t\tmode: stringValue(frontmatter.mode),\n\t\t\tisolatedContext: booleanValue(frontmatter.isolatedContext),\n\t\t\tmetadata: metadataRecordValue(frontmatter.metadata),\n\t\t\t// Legacy fields for backwards compatibility\n\t\t\ttags: Array.isArray(frontmatter.tags)\n\t\t\t\t? (frontmatter.tags as string[])\n\t\t\t\t: undefined,\n\t\t\tauthor:\n\t\t\t\ttypeof frontmatter.author === \"string\" ? frontmatter.author : undefined,\n\t\t\tversion:\n\t\t\t\ttypeof frontmatter.version === \"string\"\n\t\t\t\t\t? frontmatter.version\n\t\t\t\t\t: undefined,\n\t\t\ttriggers: Array.isArray(frontmatter.triggers)\n\t\t\t\t? (frontmatter.triggers as string[])\n\t\t\t\t: undefined,\n\t\t\tsourcePath: skillDir,\n\t\t\tsourceType,\n\t\t\tcontent: body.trim(),\n\t\t\tresources,\n\t\t\tresourceDirs,\n\t\t};\n\n\t\tlogger.debug(\"Loaded skill\", {\n\t\t\tname: skill.name,\n\t\t\tsourceType,\n\t\t\tresourceCount: resources.length,\n\t\t});\n\n\t\treturn skill;\n\t} catch (err) {\n\t\treturn new SkillLoadError(\n\t\t\t`Error loading skill: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\tskillDir,\n\t\t\t\"READ_ERROR\",\n\t\t);\n\t}\n}\n\n/**\n * Scan a directory for skill subdirectories.\n */\nfunction scanSkillsDirectory(\n\tdir: string,\n\tsourceType: \"user\" | \"project\" | \"system\",\n): { skills: LoadedSkill[]; errors: SkillLoadError[] } {\n\tif (!existsSync(dir)) {\n\t\treturn { skills: [], errors: [] };\n\t}\n\n\tconst skills: LoadedSkill[] = [];\n\tconst errors: SkillLoadError[] = [];\n\n\ttry {\n\t\t// Check for SKILL.md in root (single skill in skills dir)\n\t\tconst rootSkillFile = findSkillMd(dir);\n\t\tif (rootSkillFile) {\n\t\t\tconst result = loadSkillFromDirectory(dir, sourceType);\n\t\t\tif (result instanceof SkillLoadError) {\n\t\t\t\terrors.push(result);\n\t\t\t} else {\n\t\t\t\tskills.push(result);\n\t\t\t}\n\t\t}\n\n\t\t// Check subdirectories\n\t\tconst entries = readdirSync(dir);\n\t\tfor (const entry of entries) {\n\t\t\tconst entryPath = join(dir, entry);\n\t\t\tconst stat = statSync(entryPath);\n\n\t\t\tif (stat.isDirectory()) {\n\t\t\t\tconst result = loadSkillFromDirectory(entryPath, sourceType);\n\t\t\t\tif (result instanceof SkillLoadError) {\n\t\t\t\t\terrors.push(result);\n\t\t\t\t} else {\n\t\t\t\t\tskills.push(result);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\tlogger.warn(\"Error scanning skills directory\", {\n\t\t\tdir,\n\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t});\n\t}\n\n\treturn { skills, errors };\n}\n\n/**\n * Get the system skills directory bundled with the package.\n *\n * Resolves the `skills/` directory relative to the package root,\n * which works whether running from source (repo) or installed via npm.\n */\nfunction getSystemSkillsDir(): string {\n\t// Allow explicit override for non-standard packaging layouts\n\tconst override = process.env.MAESTRO_SYSTEM_SKILLS_DIR;\n\tif (override && existsSync(override)) {\n\t\treturn override;\n\t}\n\n\t// import.meta.url points to this file — either src/skills/loader.ts (dev)\n\t// or dist/cli.js (bundled). Walk up to find the package root by looking\n\t// for a directory that contains both package.json and skills/.\n\tconst thisFile = fileURLToPath(import.meta.url);\n\tlet dir = dirname(thisFile);\n\tfor (let i = 0; i < 5; i++) {\n\t\tconst skillsDir = join(dir, \"skills\");\n\t\tif (existsSync(join(dir, \"package.json\")) && existsSync(skillsDir)) {\n\t\t\treturn skillsDir;\n\t\t}\n\t\tconst parent = dirname(dir);\n\t\tif (parent === dir) break;\n\t\tdir = parent;\n\t}\n\t// Fallback: assume 3 levels up (src/skills/loader.ts layout)\n\tconst packageRoot = dirname(dirname(dirname(thisFile)));\n\treturn join(packageRoot, \"skills\");\n}\n\n/**\n * Load all available skills from system, user, and project directories.\n *\n * Priority (highest wins): project > user > system.\n * System skills are bundled with the package and provide default capabilities.\n *\n * @param workspaceDir - The current workspace/project directory\n * @returns Object with loaded skills and any errors\n */\nexport function loadSkills(\n\tworkspaceDir: string,\n\toptions?: { includeSystem?: boolean },\n): {\n\tskills: LoadedSkill[];\n\terrors: SkillLoadError[];\n} {\n\tconst includeSystem = options?.includeSystem ?? true;\n\tconst systemSkillsDir = includeSystem ? getSystemSkillsDir() : null;\n\tconst userSkillsDir = join(PATHS.MAESTRO_HOME, \"skills\");\n\tconst projectSkillsDir = join(workspaceDir, \".maestro\", \"skills\");\n\tconst packageResources = loadConfiguredPackageResources(workspaceDir);\n\tconst userPackageSkillDirs = packageResources.skills.user;\n\tconst projectPackageSkillDirs = packageResources.skills.project;\n\n\tlogger.debug(\"Scanning for skills\", {\n\t\tsystemSkillsDir: systemSkillsDir ?? \"(disabled)\",\n\t\tuserSkillsDir,\n\t\tprojectSkillsDir,\n\t\tuserPackageSkillDirs,\n\t\tprojectPackageSkillDirs,\n\t});\n\n\tconst systemResult = systemSkillsDir\n\t\t? scanSkillsDirectory(systemSkillsDir, \"system\")\n\t\t: { skills: [], errors: [] };\n\tconst userResult = [...userPackageSkillDirs, userSkillsDir].reduce(\n\t\t(result, dir) => {\n\t\t\tconst next = scanSkillsDirectory(dir, \"user\");\n\t\t\tresult.skills.push(...next.skills);\n\t\t\tresult.errors.push(...next.errors);\n\t\t\treturn result;\n\t\t},\n\t\t{ skills: [] as LoadedSkill[], errors: [] as SkillLoadError[] },\n\t);\n\tconst projectResult = [...projectPackageSkillDirs, projectSkillsDir].reduce(\n\t\t(result, dir) => {\n\t\t\tconst next = scanSkillsDirectory(dir, \"project\");\n\t\t\tresult.skills.push(...next.skills);\n\t\t\tresult.errors.push(...next.errors);\n\t\t\treturn result;\n\t\t},\n\t\t{ skills: [] as LoadedSkill[], errors: [] as SkillLoadError[] },\n\t);\n\n\t// Priority: project > user > system (last writer wins)\n\tconst skillMap = new Map<string, LoadedSkill>();\n\n\tfor (const skill of systemResult.skills) {\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\n\tfor (const skill of userResult.skills) {\n\t\tconst existing = skillMap.get(skill.name.toLowerCase());\n\t\tif (existing) {\n\t\t\tlogger.debug(\"User skill overrides system skill\", {\n\t\t\t\tname: skill.name,\n\t\t\t});\n\t\t}\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\n\tfor (const skill of projectResult.skills) {\n\t\tconst existing = skillMap.get(skill.name.toLowerCase());\n\t\tif (existing) {\n\t\t\tlogger.debug(\"Project skill overrides existing skill\", {\n\t\t\t\tname: skill.name,\n\t\t\t\toverridden: existing.sourceType,\n\t\t\t});\n\t\t}\n\t\tskillMap.set(skill.name.toLowerCase(), skill);\n\t}\n\n\tconst allSkills = Array.from(skillMap.values());\n\tconst allErrors = [\n\t\t...systemResult.errors,\n\t\t...userResult.errors,\n\t\t...projectResult.errors,\n\t];\n\n\tlogger.info(\"Finished loading skills\", {\n\t\ttotal: allSkills.length,\n\t\terrors: allErrors.length,\n\t\tsystem: systemResult.skills.length,\n\t\tuser: userResult.skills.length,\n\t\tproject: projectResult.skills.length,\n\t\tuserPackages: userPackageSkillDirs.length,\n\t\tprojectPackages: projectPackageSkillDirs.length,\n\t});\n\n\treturn { skills: allSkills, errors: allErrors };\n}\n\n/**\n * Find a skill by name (case-insensitive).\n */\nexport function findSkill(\n\tskills: LoadedSkill[],\n\tname: string,\n): LoadedSkill | undefined {\n\tconst normalizedName = name.toLowerCase();\n\treturn skills.find((s) => s.name.toLowerCase() === normalizedName);\n}\n\n/**\n * Find skills that match a given query (checks name, description, tags, triggers).\n */\nexport function searchSkills(\n\tskills: LoadedSkill[],\n\tquery: string,\n): LoadedSkill[] {\n\tconst normalizedQuery = query.toLowerCase();\n\n\treturn skills.filter((skill) => {\n\t\t// Check name\n\t\tif (skill.name.toLowerCase().includes(normalizedQuery)) return true;\n\n\t\t// Check description\n\t\tif (skill.description.toLowerCase().includes(normalizedQuery)) return true;\n\n\t\t// Check tags\n\t\tif (skill.tags?.some((t) => t.toLowerCase().includes(normalizedQuery))) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Check triggers\n\t\tif (\n\t\t\tskill.triggers?.some((t) => t.toLowerCase().includes(normalizedQuery))\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t});\n}\n\n/**\n * Convert skill to dictionary (per Agent Skills SDK).\n * Excludes undefined values.\n */\nexport function skillToDict(\n\tskill: LoadedSkill,\n): Record<string, string | string[] | boolean | Record<string, string>> {\n\tconst result: Record<\n\t\tstring,\n\t\tstring | string[] | boolean | Record<string, string>\n\t> = {\n\t\tname: skill.name,\n\t\tdescription: skill.description,\n\t};\n\n\tif (skill.license) {\n\t\tresult.license = skill.license;\n\t}\n\n\tif (skill.compatibility) {\n\t\tresult.compatibility = skill.compatibility;\n\t}\n\n\tif (skill.allowedTools) {\n\t\tresult[\"allowed-tools\"] = skill.allowedTools;\n\t}\n\tif (skill.builtinTools) {\n\t\tresult[\"builtin-tools\"] = skill.builtinTools;\n\t}\n\tif (skill.argumentHint) {\n\t\tresult[\"argument-hint\"] = skill.argumentHint;\n\t}\n\tif (skill.model) {\n\t\tresult.model = skill.model;\n\t}\n\tif (skill.mode) {\n\t\tresult.mode = skill.mode;\n\t}\n\tif (skill.isolatedContext !== undefined) {\n\t\tresult.isolatedContext = skill.isolatedContext;\n\t}\n\n\tif (skill.metadata && Object.keys(skill.metadata).length > 0) {\n\t\tresult.metadata = skill.metadata;\n\t}\n\n\treturn result;\n}\n\n/**\n * Convert skill to JSON string.\n */\nexport function skillToJson(skill: LoadedSkill): string {\n\treturn JSON.stringify(skillToDict(skill), null, 2);\n}\n\n/**\n * Escape XML special characters.\n */\nfunction escapeXml(str: string): string {\n\treturn str\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\")\n\t\t.replace(/'/g, \"&#39;\");\n}\n\n/**\n * Generate XML prompt block for available skills (per Agent Skills SDK).\n *\n * This generates the <available_skills> XML block that should be included\n * in system prompts to make skills discoverable by the agent.\n */\nexport function skillsToPrompt(skills: LoadedSkill[]): string {\n\tif (skills.length === 0) {\n\t\treturn \"<available_skills>\\n</available_skills>\";\n\t}\n\n\tconst lines: string[] = [\"<available_skills>\"];\n\n\tfor (const skill of skills) {\n\t\tconst description = promptSafeText(\n\t\t\tskill.description,\n\t\t\tMAX_DESCRIPTION_LENGTH,\n\t\t);\n\t\tlines.push(\"<skill>\");\n\t\tlines.push(` <name>${escapeXml(skill.name)}</name>`);\n\t\tlines.push(` <description>${escapeXml(description ?? \"\")}</description>`);\n\t\tlines.push(\n\t\t\t` <location>${escapeXml(join(skill.sourcePath, \"SKILL.md\"))}</location>`,\n\t\t);\n\t\tlines.push(\"</skill>\");\n\t}\n\n\tlines.push(\"</available_skills>\");\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Format skill for display in a list.\n */\nexport function formatSkillListItem(skill: LoadedSkill): string {\n\tconst sourceLabels: Record<LoadedSkill[\"sourceType\"], string> = {\n\t\tservice: \"(service)\",\n\t\tsystem: \"(system)\",\n\t\tuser: \"(user)\",\n\t\tproject: \"(project)\",\n\t};\n\tconst source = sourceLabels[skill.sourceType];\n\tconst tags = skill.tags?.length ? ` [${skill.tags.join(\", \")}]` : \"\";\n\treturn `${skill.name} ${source}${tags} - ${skill.description}`;\n}\n\n/**\n * Format skill content for injection into conversation.\n */\nexport function formatSkillForInjection(skill: LoadedSkill): string {\n\tconst lines: string[] = [];\n\n\tlines.push(`# Skill: ${skill.name}`);\n\tlines.push(\"\");\n\tlines.push(`> ${skill.description}`);\n\tlines.push(\"\");\n\n\tif (skill.tags?.length) {\n\t\tlines.push(`**Tags:** ${skill.tags.join(\", \")}`);\n\t\tlines.push(\"\");\n\t}\n\n\tif (skill.resources.length > 0) {\n\t\tlines.push(\"## Bundled Resources\");\n\t\tlines.push(\"\");\n\t\tlines.push(\"You can access these bundled resources using the Read tool:\");\n\t\tlines.push(\"\");\n\t\tfor (const resource of skill.resources) {\n\t\t\tlines.push(`- \\`${resource.path}\\` (${resource.type})`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\tif (skill.resourceDirs.referenceDir || skill.resourceDirs.referencesDir) {\n\t\tlines.push(\"## Reference Resources\");\n\t\tlines.push(\"\");\n\t\tlines.push(\"Load detailed references only when needed:\");\n\t\tif (skill.resourceDirs.referenceDir) {\n\t\t\tlines.push(`- \\`${skill.resourceDirs.referenceDir}\\``);\n\t\t}\n\t\tif (skill.resourceDirs.referencesDir) {\n\t\t\tlines.push(`- \\`${skill.resourceDirs.referencesDir}\\``);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\tif (skill.resourceDirs.toolboxDir || skill.resourceDirs.mcpJsonPath) {\n\t\tlines.push(\"## Tool Package\");\n\t\tlines.push(\"\");\n\t\tif (skill.resourceDirs.toolboxDir) {\n\t\t\tlines.push(\n\t\t\t\t`- Toolbox executables are bundled under \\`${skill.resourceDirs.toolboxDir}\\`.`,\n\t\t\t);\n\t\t}\n\t\tif (skill.resourceDirs.mcpJsonPath) {\n\t\t\tlines.push(\n\t\t\t\t`- Bundled MCP config: \\`${skill.resourceDirs.mcpJsonPath}\\`.`,\n\t\t\t);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"## Instructions\");\n\tlines.push(\"\");\n\tlines.push(skill.content);\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Get skill summary for system prompt (lists available skills).\n * @deprecated Use skillsToPrompt for XML format per Agent Skills SDK\n */\nexport function getSkillsSummary(skills: LoadedSkill[]): string {\n\tif (skills.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines: string[] = [];\n\tlines.push(\"## Available Skills\");\n\tlines.push(\"\");\n\tlines.push(\n\t\t\"When you recognize that a task matches one of the available skills listed below, \" +\n\t\t\t\"use the Skill tool to load the full skill instructions.\",\n\t);\n\tlines.push(\"\");\n\n\tfor (const skill of skills) {\n\t\tconst tags = skill.tags?.length ? ` [${skill.tags.join(\", \")}]` : \"\";\n\t\tconst description =\n\t\t\tpromptSafeText(skill.description, MAX_DESCRIPTION_LENGTH) ?? \"\";\n\t\tlines.push(`- **${skill.name}**${tags}: ${description}`);\n\t\tif (skill.triggers?.length) {\n\t\t\tlines.push(` - Triggers: ${skill.triggers.join(\", \")}`);\n\t\t}\n\t}\n\n\tlines.push(\"\");\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Progressive Skill Disclosure (#857)\n *\n * Format skill metadata only (name + description) for system prompt injection.\n * The agent can then use the `read` tool to load full SKILL.md content on-demand.\n *\n * Benefits:\n * - Context efficiency: ~10 tokens per skill vs ~500+ for full content\n * - Scalability: 20 skills use ~200 tokens instead of ~10,000\n * - Self-directed: Agent loads what it needs when it needs it\n */\n\n/**\n * Format a single skill's metadata for system prompt (XML format).\n *\n * Returns only name and description in a self-closing XML tag.\n * Follows the Agent Skills specification's progressive disclosure pattern.\n *\n * @param skill - The loaded skill\n * @returns XML-formatted skill metadata\n *\n * @example\n * ```xml\n * <skill name=\"test-runner\" description=\"Run and debug test suites\" />\n * <!-- source: ~/.maestro/skills/test-runner -->\n * ```\n */\nexport function formatSkillMetadataOnly(skill: LoadedSkill): string {\n\t// Escape XML special characters\n\tconst escapeName = skill.name\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\");\n\n\tconst description = promptSafeText(skill.description, MAX_DESCRIPTION_LENGTH);\n\tconst escapeDesc = (description ?? \"\")\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\");\n\n\t// Include source path as XML comment for debugging\n\treturn `<skill name=\"${escapeName}\" description=\"${escapeDesc}\" />\\n<!-- source: ${skill.sourcePath} -->`;\n}\n\n/**\n * Format multiple skills for system prompt with on-demand loading instructions.\n *\n * Returns XML list of skill metadata plus instructions for the agent to load\n * full skill content using the `read` tool when needed.\n *\n * This is the primary function for progressive skill disclosure.\n *\n * @param skills - Array of loaded skills\n * @returns XML-formatted skills list with loading instructions, or empty string if no skills\n *\n * @example\n * ```xml\n * <available_skills>\n * <skill name=\"test-runner\" description=\"...\" />\n * <skill name=\"git-workflow\" description=\"...\" />\n * </available_skills>\n *\n * When a skill is relevant to the user's request, use the `read` tool to load\n * the full skill instructions from the source path shown in the comment.\n * ```\n */\nexport function formatSkillsForSystemPrompt(skills: LoadedSkill[]): string {\n\tif (skills.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines: string[] = [];\n\n\tlines.push(\"<available_skills>\");\n\tfor (const skill of skills) {\n\t\tlines.push(` ${formatSkillMetadataOnly(skill)}`);\n\t}\n\tlines.push(\"</available_skills>\");\n\tlines.push(\"\");\n\tlines.push(\n\t\t\"When a skill is relevant to the user's request, use the `read` tool to load \" +\n\t\t\t\"the full SKILL.md from the skill's source directory (shown in comments above). \" +\n\t\t\t\"For example: `read ~/.maestro/skills/test-runner/SKILL.md` or \" +\n\t\t\t\"`read .maestro/skills/custom-skill/SKILL.md`. \" +\n\t\t\t\"This progressive loading keeps the system prompt lean while making all skill \" +\n\t\t\t\"capabilities available on-demand.\",\n\t);\n\n\treturn lines.join(\"\\n\");\n}\n"]}
@@ -0,0 +1,45 @@
1
+ import type { PackageSource } from "../packages/types.js";
2
+ import { type SkillEvalReport } from "./eval-harness.js";
3
+ export declare const SKILL_PACKAGE_CONTRACT_SCHEMA = "evalops.maestro.skill-package-publish-contract.v1";
4
+ export { MAESTRO_PACKAGE_KEYWORD } from "../packages/constants.js";
5
+ export declare const MAESTRO_SKILL_PACKAGE_KEYWORD = "maestro-skill-package";
6
+ export interface SkillPackageContractIssue {
7
+ code: string;
8
+ message: string;
9
+ }
10
+ export interface SkillPackageInstallCommandSet {
11
+ source: string;
12
+ local?: string;
13
+ git?: string;
14
+ npm?: string;
15
+ }
16
+ export interface SkillPackagePublishContract {
17
+ schemaVersion: typeof SKILL_PACKAGE_CONTRACT_SCHEMA;
18
+ sourceSpec: string;
19
+ resolvedSource: string;
20
+ resolvedPath: string;
21
+ package: {
22
+ name: string | null;
23
+ version: string | null;
24
+ keywords: string[];
25
+ };
26
+ resources: {
27
+ skills: string[];
28
+ prompts: string[];
29
+ extensions: string[];
30
+ themes: string[];
31
+ };
32
+ install: SkillPackageInstallCommandSet;
33
+ evalReport: SkillEvalReport | null;
34
+ issues: SkillPackageContractIssue[];
35
+ }
36
+ export interface BuildSkillPackagePublishContractOptions {
37
+ cwd?: string;
38
+ describeToolbox?: boolean;
39
+ platform?: NodeJS.Platform;
40
+ }
41
+ export declare function quoteSkillPackageInstallSourceArg(value: string, platform?: NodeJS.Platform): string;
42
+ export declare function formatSkillPackageInstallSource(source: PackageSource, cwd: string): string;
43
+ export declare function buildSkillPackagePublishContract(sourceSpec: string, options?: BuildSkillPackagePublishContractOptions): Promise<SkillPackagePublishContract>;
44
+ export declare function formatSkillPackagePublishContract(contract: SkillPackagePublishContract): string;
45
+ //# sourceMappingURL=package-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-contract.d.ts","sourceRoot":"","sources":["../../src/skills/package-contract.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAqB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EACN,KAAK,eAAe,EAIpB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,6BAA6B,sDACU,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,eAAO,MAAM,6BAA6B,0BAA0B,CAAC;AAErE,MAAM,WAAW,yBAAyB;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,2BAA2B;IAC3C,aAAa,EAAE,OAAO,6BAA6B,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE;QACR,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,SAAS,EAAE;QACV,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,6BAA6B,CAAC;IACvC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,uCAAuC;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC3B;AA2BD,wBAAgB,iCAAiC,CAChD,KAAK,EAAE,MAAM,EACb,QAAQ,kBAAmB,GACzB,MAAM,CAQR;AAsBD,wBAAgB,+BAA+B,CAC9C,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,GACT,MAAM,CAkBR;AAqCD,wBAAsB,gCAAgC,CACrD,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,uCAA4C,GACnD,OAAO,CAAC,2BAA2B,CAAC,CA+CtC;AAED,wBAAgB,iCAAiC,CAChD,QAAQ,EAAE,2BAA2B,GACnC,MAAM,CA6BR"}
@@ -0,0 +1,153 @@
1
+ import { isAbsolute, relative } from "node:path";
2
+ import { MISSING_MAESTRO_PACKAGE_KEYWORD_MESSAGE } from "../packages/constants.js";
3
+ import { collectPackageValidationIssues, inspectPackageSource, } from "../packages/inspection.js";
4
+ import { formatPackageSource } from "../packages/sources.js";
5
+ import { evaluateSkillPackages, formatSkillEvalText, hasSkillEvalFailures, } from "./eval-harness.js";
6
+ export const SKILL_PACKAGE_CONTRACT_SCHEMA = "evalops.maestro.skill-package-publish-contract.v1";
7
+ export { MAESTRO_PACKAGE_KEYWORD } from "../packages/constants.js";
8
+ export const MAESTRO_SKILL_PACKAGE_KEYWORD = "maestro-skill-package";
9
+ const WINDOWS_DRIVE_PATH_REGEX = /^[A-Za-z]:[\\/]/;
10
+ const SHELL_SAFE_INSTALL_SOURCE_REGEX = /^[A-Za-z0-9_@%+=:,./\\-]+$/;
11
+ function windowsDriveLetter(path) {
12
+ return WINDOWS_DRIVE_PATH_REGEX.test(path)
13
+ ? path.slice(0, 1).toLowerCase()
14
+ : null;
15
+ }
16
+ function packageKeywords(discovered) {
17
+ return Array.isArray(discovered?.packageJson.keywords)
18
+ ? discovered.packageJson.keywords
19
+ : [];
20
+ }
21
+ function issue(code, message) {
22
+ return { code, message };
23
+ }
24
+ function mapValidationIssue(message) {
25
+ return message === MISSING_MAESTRO_PACKAGE_KEYWORD_MESSAGE
26
+ ? issue("missing_maestro_package_keyword", message)
27
+ : issue("package_validation", message);
28
+ }
29
+ export function quoteSkillPackageInstallSourceArg(value, platform = process.platform) {
30
+ if (SHELL_SAFE_INSTALL_SOURCE_REGEX.test(value)) {
31
+ return value;
32
+ }
33
+ if (platform === "win32") {
34
+ return `"${value.replace(/"/g, '\\"')}"`;
35
+ }
36
+ return `'${value.replace(/'/g, "'\\''")}'`;
37
+ }
38
+ function buildInstallCommands(input) {
39
+ const installSource = formatSkillPackageInstallSource(input.source, input.cwd);
40
+ const command = `maestro skill install ${quoteSkillPackageInstallSourceArg(installSource, input.platform)}`;
41
+ switch (input.source.type) {
42
+ case "local":
43
+ return { source: command, local: command };
44
+ case "git":
45
+ return { source: command, git: command };
46
+ case "npm":
47
+ return { source: command, npm: command };
48
+ }
49
+ }
50
+ export function formatSkillPackageInstallSource(source, cwd) {
51
+ if (source.type !== "local") {
52
+ return formatPackageSource(source);
53
+ }
54
+ const sourceDrive = windowsDriveLetter(source.path);
55
+ const cwdDrive = windowsDriveLetter(cwd);
56
+ if (sourceDrive && cwdDrive && sourceDrive !== cwdDrive) {
57
+ return `local:${source.path}`;
58
+ }
59
+ const relativePath = relative(cwd, source.path) || ".";
60
+ if (isAbsolute(relativePath) || WINDOWS_DRIVE_PATH_REGEX.test(relativePath)) {
61
+ return `local:${relativePath}`;
62
+ }
63
+ const localPath = relativePath.startsWith(".")
64
+ ? relativePath
65
+ : `./${relativePath}`;
66
+ return `local:${localPath}`;
67
+ }
68
+ function collectContractIssues(input) {
69
+ const issues = input.validationIssues.map(mapValidationIssue);
70
+ const keywords = packageKeywords(input.discovered);
71
+ if (input.discovered && !keywords.includes(MAESTRO_SKILL_PACKAGE_KEYWORD)) {
72
+ issues.push(issue("missing_maestro_skill_package_keyword", `package.json keywords must include "${MAESTRO_SKILL_PACKAGE_KEYWORD}" for OSS skill registry discovery.`));
73
+ }
74
+ if (input.validationIssues.length === 0 && input.skillCount === 0) {
75
+ issues.push(issue("missing_skill_resources", "package.json maestro.skills must expose at least one skill directory."));
76
+ }
77
+ if (input.evalReport && hasSkillEvalFailures(input.evalReport)) {
78
+ issues.push(issue("skill_package_eval_failed", "One or more bundled skills failed the Agent Core package eval contract."));
79
+ }
80
+ return issues;
81
+ }
82
+ export async function buildSkillPackagePublishContract(sourceSpec, options = {}) {
83
+ const cwd = options.cwd ?? process.cwd();
84
+ const inspected = await inspectPackageSource(sourceSpec, cwd);
85
+ const resources = inspected.resources ?? {
86
+ extensions: [],
87
+ skills: [],
88
+ prompts: [],
89
+ themes: [],
90
+ };
91
+ const evalReport = resources.skills.length > 0
92
+ ? await evaluateSkillPackages(resources.skills.map((path) => ({ path })), { describeToolbox: options.describeToolbox })
93
+ : null;
94
+ const issues = collectContractIssues({
95
+ discovered: inspected.discovered,
96
+ validationIssues: collectPackageValidationIssues(inspected),
97
+ skillCount: resources.skills.length,
98
+ evalReport,
99
+ });
100
+ return {
101
+ schemaVersion: SKILL_PACKAGE_CONTRACT_SCHEMA,
102
+ sourceSpec,
103
+ resolvedSource: formatPackageSource(inspected.source),
104
+ resolvedPath: inspected.resolvedPath,
105
+ package: {
106
+ name: inspected.discovered?.packageJson.name ?? null,
107
+ version: inspected.discovered?.packageJson.version ?? null,
108
+ keywords: packageKeywords(inspected.discovered),
109
+ },
110
+ resources: {
111
+ skills: resources.skills,
112
+ prompts: resources.prompts,
113
+ extensions: resources.extensions,
114
+ themes: resources.themes,
115
+ },
116
+ install: buildInstallCommands({
117
+ cwd,
118
+ platform: options.platform ?? process.platform,
119
+ source: inspected.source,
120
+ }),
121
+ evalReport,
122
+ issues,
123
+ };
124
+ }
125
+ export function formatSkillPackagePublishContract(contract) {
126
+ const installCommands = [
127
+ contract.install.source,
128
+ contract.install.local,
129
+ contract.install.git,
130
+ contract.install.npm,
131
+ ].filter((command, index, commands) => typeof command === "string" && commands.indexOf(command) === index);
132
+ const lines = [
133
+ `Skill package: ${contract.package.name ?? "(unknown)"}${contract.package.version ? `@${contract.package.version}` : ""}`,
134
+ `Source: ${contract.resolvedSource}`,
135
+ `Skills: ${contract.resources.skills.length}`,
136
+ "Install:",
137
+ ];
138
+ lines.push(...installCommands.map((command) => ` ${command}`));
139
+ if (contract.evalReport) {
140
+ lines.push("", "Eval:", formatSkillEvalText(contract.evalReport));
141
+ }
142
+ if (contract.issues.length > 0) {
143
+ lines.push("", "Issues:");
144
+ for (const item of contract.issues) {
145
+ lines.push(`- ${item.code}: ${item.message}`);
146
+ }
147
+ }
148
+ else {
149
+ lines.push("", "Result: publish/install contract passed.");
150
+ }
151
+ return lines.join("\n");
152
+ }
153
+ //# sourceMappingURL=package-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-contract.js","sourceRoot":"","sources":["../../src/skills/package-contract.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute, relative } from \"node:path\";\nimport { MISSING_MAESTRO_PACKAGE_KEYWORD_MESSAGE } from \"../packages/constants.js\";\nimport {\n\tcollectPackageValidationIssues,\n\tinspectPackageSource,\n} from \"../packages/inspection.js\";\nimport { formatPackageSource } from \"../packages/sources.js\";\nimport type { DiscoveredPackage, PackageSource } from \"../packages/types.js\";\nimport {\n\ttype SkillEvalReport,\n\tevaluateSkillPackages,\n\tformatSkillEvalText,\n\thasSkillEvalFailures,\n} from \"./eval-harness.js\";\n\nexport const SKILL_PACKAGE_CONTRACT_SCHEMA =\n\t\"evalops.maestro.skill-package-publish-contract.v1\";\nexport { MAESTRO_PACKAGE_KEYWORD } from \"../packages/constants.js\";\nexport const MAESTRO_SKILL_PACKAGE_KEYWORD = \"maestro-skill-package\";\n\nexport interface SkillPackageContractIssue {\n\tcode: string;\n\tmessage: string;\n}\n\nexport interface SkillPackageInstallCommandSet {\n\tsource: string;\n\tlocal?: string;\n\tgit?: string;\n\tnpm?: string;\n}\n\nexport interface SkillPackagePublishContract {\n\tschemaVersion: typeof SKILL_PACKAGE_CONTRACT_SCHEMA;\n\tsourceSpec: string;\n\tresolvedSource: string;\n\tresolvedPath: string;\n\tpackage: {\n\t\tname: string | null;\n\t\tversion: string | null;\n\t\tkeywords: string[];\n\t};\n\tresources: {\n\t\tskills: string[];\n\t\tprompts: string[];\n\t\textensions: string[];\n\t\tthemes: string[];\n\t};\n\tinstall: SkillPackageInstallCommandSet;\n\tevalReport: SkillEvalReport | null;\n\tissues: SkillPackageContractIssue[];\n}\n\nexport interface BuildSkillPackagePublishContractOptions {\n\tcwd?: string;\n\tdescribeToolbox?: boolean;\n\tplatform?: NodeJS.Platform;\n}\n\nconst WINDOWS_DRIVE_PATH_REGEX = /^[A-Za-z]:[\\\\/]/;\nconst SHELL_SAFE_INSTALL_SOURCE_REGEX = /^[A-Za-z0-9_@%+=:,./\\\\-]+$/;\n\nfunction windowsDriveLetter(path: string): string | null {\n\treturn WINDOWS_DRIVE_PATH_REGEX.test(path)\n\t\t? path.slice(0, 1).toLowerCase()\n\t\t: null;\n}\n\nfunction packageKeywords(discovered: DiscoveredPackage | null): string[] {\n\treturn Array.isArray(discovered?.packageJson.keywords)\n\t\t? discovered.packageJson.keywords\n\t\t: [];\n}\n\nfunction issue(code: string, message: string): SkillPackageContractIssue {\n\treturn { code, message };\n}\n\nfunction mapValidationIssue(message: string): SkillPackageContractIssue {\n\treturn message === MISSING_MAESTRO_PACKAGE_KEYWORD_MESSAGE\n\t\t? issue(\"missing_maestro_package_keyword\", message)\n\t\t: issue(\"package_validation\", message);\n}\n\nexport function quoteSkillPackageInstallSourceArg(\n\tvalue: string,\n\tplatform = process.platform,\n): string {\n\tif (SHELL_SAFE_INSTALL_SOURCE_REGEX.test(value)) {\n\t\treturn value;\n\t}\n\tif (platform === \"win32\") {\n\t\treturn `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n\t}\n\treturn `'${value.replace(/'/g, \"'\\\\''\")}'`;\n}\n\nfunction buildInstallCommands(input: {\n\tcwd: string;\n\tplatform: NodeJS.Platform;\n\tsource: PackageSource;\n}): SkillPackageInstallCommandSet {\n\tconst installSource = formatSkillPackageInstallSource(\n\t\tinput.source,\n\t\tinput.cwd,\n\t);\n\tconst command = `maestro skill install ${quoteSkillPackageInstallSourceArg(installSource, input.platform)}`;\n\tswitch (input.source.type) {\n\t\tcase \"local\":\n\t\t\treturn { source: command, local: command };\n\t\tcase \"git\":\n\t\t\treturn { source: command, git: command };\n\t\tcase \"npm\":\n\t\t\treturn { source: command, npm: command };\n\t}\n}\n\nexport function formatSkillPackageInstallSource(\n\tsource: PackageSource,\n\tcwd: string,\n): string {\n\tif (source.type !== \"local\") {\n\t\treturn formatPackageSource(source);\n\t}\n\tconst sourceDrive = windowsDriveLetter(source.path);\n\tconst cwdDrive = windowsDriveLetter(cwd);\n\tif (sourceDrive && cwdDrive && sourceDrive !== cwdDrive) {\n\t\treturn `local:${source.path}`;\n\t}\n\n\tconst relativePath = relative(cwd, source.path) || \".\";\n\tif (isAbsolute(relativePath) || WINDOWS_DRIVE_PATH_REGEX.test(relativePath)) {\n\t\treturn `local:${relativePath}`;\n\t}\n\tconst localPath = relativePath.startsWith(\".\")\n\t\t? relativePath\n\t\t: `./${relativePath}`;\n\treturn `local:${localPath}`;\n}\n\nfunction collectContractIssues(input: {\n\tdiscovered: DiscoveredPackage | null;\n\tvalidationIssues: string[];\n\tskillCount: number;\n\tevalReport: SkillEvalReport | null;\n}): SkillPackageContractIssue[] {\n\tconst issues = input.validationIssues.map(mapValidationIssue);\n\tconst keywords = packageKeywords(input.discovered);\n\tif (input.discovered && !keywords.includes(MAESTRO_SKILL_PACKAGE_KEYWORD)) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"missing_maestro_skill_package_keyword\",\n\t\t\t\t`package.json keywords must include \"${MAESTRO_SKILL_PACKAGE_KEYWORD}\" for OSS skill registry discovery.`,\n\t\t\t),\n\t\t);\n\t}\n\tif (input.validationIssues.length === 0 && input.skillCount === 0) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"missing_skill_resources\",\n\t\t\t\t\"package.json maestro.skills must expose at least one skill directory.\",\n\t\t\t),\n\t\t);\n\t}\n\tif (input.evalReport && hasSkillEvalFailures(input.evalReport)) {\n\t\tissues.push(\n\t\t\tissue(\n\t\t\t\t\"skill_package_eval_failed\",\n\t\t\t\t\"One or more bundled skills failed the Agent Core package eval contract.\",\n\t\t\t),\n\t\t);\n\t}\n\treturn issues;\n}\n\nexport async function buildSkillPackagePublishContract(\n\tsourceSpec: string,\n\toptions: BuildSkillPackagePublishContractOptions = {},\n): Promise<SkillPackagePublishContract> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst inspected = await inspectPackageSource(sourceSpec, cwd);\n\tconst resources = inspected.resources ?? {\n\t\textensions: [],\n\t\tskills: [],\n\t\tprompts: [],\n\t\tthemes: [],\n\t};\n\tconst evalReport =\n\t\tresources.skills.length > 0\n\t\t\t? await evaluateSkillPackages(\n\t\t\t\t\tresources.skills.map((path) => ({ path })),\n\t\t\t\t\t{ describeToolbox: options.describeToolbox },\n\t\t\t\t)\n\t\t\t: null;\n\tconst issues = collectContractIssues({\n\t\tdiscovered: inspected.discovered,\n\t\tvalidationIssues: collectPackageValidationIssues(inspected),\n\t\tskillCount: resources.skills.length,\n\t\tevalReport,\n\t});\n\n\treturn {\n\t\tschemaVersion: SKILL_PACKAGE_CONTRACT_SCHEMA,\n\t\tsourceSpec,\n\t\tresolvedSource: formatPackageSource(inspected.source),\n\t\tresolvedPath: inspected.resolvedPath,\n\t\tpackage: {\n\t\t\tname: inspected.discovered?.packageJson.name ?? null,\n\t\t\tversion: inspected.discovered?.packageJson.version ?? null,\n\t\t\tkeywords: packageKeywords(inspected.discovered),\n\t\t},\n\t\tresources: {\n\t\t\tskills: resources.skills,\n\t\t\tprompts: resources.prompts,\n\t\t\textensions: resources.extensions,\n\t\t\tthemes: resources.themes,\n\t\t},\n\t\tinstall: buildInstallCommands({\n\t\t\tcwd,\n\t\t\tplatform: options.platform ?? process.platform,\n\t\t\tsource: inspected.source,\n\t\t}),\n\t\tevalReport,\n\t\tissues,\n\t};\n}\n\nexport function formatSkillPackagePublishContract(\n\tcontract: SkillPackagePublishContract,\n): string {\n\tconst installCommands = [\n\t\tcontract.install.source,\n\t\tcontract.install.local,\n\t\tcontract.install.git,\n\t\tcontract.install.npm,\n\t].filter(\n\t\t(command, index, commands): command is string =>\n\t\t\ttypeof command === \"string\" && commands.indexOf(command) === index,\n\t);\n\tconst lines = [\n\t\t`Skill package: ${contract.package.name ?? \"(unknown)\"}${contract.package.version ? `@${contract.package.version}` : \"\"}`,\n\t\t`Source: ${contract.resolvedSource}`,\n\t\t`Skills: ${contract.resources.skills.length}`,\n\t\t\"Install:\",\n\t];\n\tlines.push(...installCommands.map((command) => ` ${command}`));\n\tif (contract.evalReport) {\n\t\tlines.push(\"\", \"Eval:\", formatSkillEvalText(contract.evalReport));\n\t}\n\tif (contract.issues.length > 0) {\n\t\tlines.push(\"\", \"Issues:\");\n\t\tfor (const item of contract.issues) {\n\t\t\tlines.push(`- ${item.code}: ${item.message}`);\n\t\t}\n\t} else {\n\t\tlines.push(\"\", \"Result: publish/install contract passed.\");\n\t}\n\treturn lines.join(\"\\n\");\n}\n"]}
@@ -0,0 +1,68 @@
1
+ import type { LoadedSkill, SkillResource } from "./loader.js";
2
+ export interface SkillRuntimeActivation {
3
+ name: string;
4
+ source: LoadedSkill["sourceType"];
5
+ sourcePath?: string;
6
+ profile: {
7
+ argumentHint?: string;
8
+ compatibility?: string;
9
+ isolatedContext?: boolean;
10
+ mode?: string;
11
+ model?: string;
12
+ };
13
+ tools: {
14
+ allowed: string[];
15
+ builtin: string[];
16
+ };
17
+ resources: {
18
+ files: SkillRuntimeResource[];
19
+ directories: SkillRuntimeResourceDirectories;
20
+ };
21
+ toolPackage: {
22
+ toolbox?: SkillRuntimeToolboxActivation;
23
+ mcp?: SkillRuntimeMcpActivation;
24
+ };
25
+ }
26
+ export interface SkillRuntimeResource {
27
+ name: string;
28
+ path: string;
29
+ type: SkillResource["type"];
30
+ }
31
+ export interface SkillRuntimeResourceDirectories {
32
+ scripts?: string;
33
+ reference?: string;
34
+ references?: string;
35
+ assets?: string;
36
+ toolbox?: string;
37
+ }
38
+ export interface SkillRuntimeToolboxActivation {
39
+ directory: string;
40
+ entries: SkillRuntimeToolboxEntry[];
41
+ warnings?: string[];
42
+ }
43
+ export interface SkillRuntimeToolboxEntry {
44
+ name: string;
45
+ path: string;
46
+ }
47
+ export interface SkillRuntimeMcpActivation {
48
+ configPath: string;
49
+ servers: SkillRuntimeMcpServer[];
50
+ warnings?: string[];
51
+ }
52
+ export interface SkillRuntimeMcpServer {
53
+ name: string;
54
+ command: string;
55
+ includeTools: string[];
56
+ }
57
+ export interface SkillRuntimeActivationOptions {
58
+ platform?: NodeJS.Platform;
59
+ }
60
+ /**
61
+ * Build the runtime-facing activation contract for a loaded skill.
62
+ *
63
+ * This intentionally exposes only scoped resource paths and MCP tool bounds. The
64
+ * raw MCP config remains on disk so runtimes can activate it without copying env
65
+ * values or credentials into agent-visible telemetry.
66
+ */
67
+ export declare function buildSkillRuntimeActivation(skill: LoadedSkill, options?: SkillRuntimeActivationOptions): SkillRuntimeActivation;
68
+ //# sourceMappingURL=runtime-activation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-activation.d.ts","sourceRoot":"","sources":["../../src/skills/runtime-activation.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI9D,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,EAAE;QACN,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,SAAS,EAAE;QACV,KAAK,EAAE,oBAAoB,EAAE,CAAC;QAC9B,WAAW,EAAE,+BAA+B,CAAC;KAC7C,CAAC;IACF,WAAW,EAAE;QACZ,OAAO,CAAC,EAAE,6BAA6B,CAAC;QACxC,GAAG,CAAC,EAAE,yBAAyB,CAAC;KAChC,CAAC;CACF;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,+BAA+B;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC3B;AAgOD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,6BAAkC,GACzC,sBAAsB,CAqCxB"}