@evalops/maestro 0.10.8 → 0.10.11

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 (1009) hide show
  1. package/README.md +3 -1
  2. package/dist/agent/action-approval.d.ts +6 -0
  3. package/dist/agent/action-approval.d.ts.map +1 -1
  4. package/dist/agent/action-approval.js.map +1 -1
  5. package/dist/agent/agent.d.ts +13 -1
  6. package/dist/agent/agent.d.ts.map +1 -1
  7. package/dist/agent/agent.js +368 -1
  8. package/dist/agent/agent.js.map +1 -1
  9. package/dist/agent/auto-compaction.d.ts +4 -4
  10. package/dist/agent/auto-compaction.d.ts.map +1 -1
  11. package/dist/agent/auto-compaction.js.map +1 -1
  12. package/dist/agent/compaction-cleanup.d.ts +2 -0
  13. package/dist/agent/compaction-cleanup.d.ts.map +1 -1
  14. package/dist/agent/compaction-cleanup.js +17 -2
  15. package/dist/agent/compaction-cleanup.js.map +1 -1
  16. package/dist/agent/compaction.d.ts +3 -1
  17. package/dist/agent/compaction.d.ts.map +1 -1
  18. package/dist/agent/compaction.js +10 -2
  19. package/dist/agent/compaction.js.map +1 -1
  20. package/dist/agent/context-manager.d.ts +4 -0
  21. package/dist/agent/context-manager.d.ts.map +1 -1
  22. package/dist/agent/context-manager.js +8 -0
  23. package/dist/agent/context-manager.js.map +1 -1
  24. package/dist/agent/context-providers.d.ts +2 -0
  25. package/dist/agent/context-providers.d.ts.map +1 -1
  26. package/dist/agent/context-providers.js +3 -2
  27. package/dist/agent/context-providers.js.map +1 -1
  28. package/dist/agent/providers/google-gemini-cli.js +17 -5
  29. package/dist/agent/providers/google.js +174 -144
  30. package/dist/agent/providers/openai-codex-responses.d.ts +4 -0
  31. package/dist/agent/providers/openai-codex-responses.d.ts.map +1 -0
  32. package/dist/agent/providers/openai-codex-responses.js +637 -0
  33. package/dist/agent/providers/openai-codex-responses.js.map +1 -0
  34. package/dist/agent/providers/openai-codex-session.d.ts +18 -0
  35. package/dist/agent/providers/openai-codex-session.d.ts.map +1 -0
  36. package/dist/agent/providers/openai-codex-session.js +53 -0
  37. package/dist/agent/providers/openai-codex-session.js.map +1 -0
  38. package/dist/agent/providers/openai-responses-sdk.d.ts.map +1 -1
  39. package/dist/agent/providers/openai-responses-sdk.js +16 -6
  40. package/dist/agent/providers/openai-responses-sdk.js.map +1 -1
  41. package/dist/agent/providers/openai-shared.d.ts +12 -5
  42. package/dist/agent/providers/openai-shared.d.ts.map +1 -1
  43. package/dist/agent/providers/openai-shared.js +291 -2
  44. package/dist/agent/providers/openai-shared.js.map +1 -1
  45. package/dist/agent/providers/openai.d.ts +1 -1
  46. package/dist/agent/providers/openai.d.ts.map +1 -1
  47. package/dist/agent/providers/openai.js +48 -20
  48. package/dist/agent/providers/openai.js.map +1 -1
  49. package/dist/agent/providers/vertex.js +7 -0
  50. package/dist/agent/tracing.d.ts +16 -5
  51. package/dist/agent/tracing.d.ts.map +1 -1
  52. package/dist/agent/tracing.js +44 -2
  53. package/dist/agent/tracing.js.map +1 -1
  54. package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
  55. package/dist/agent/transport/create-provider-stream.js +9 -0
  56. package/dist/agent/transport/create-provider-stream.js.map +1 -1
  57. package/dist/agent/transport/tool-execution-bridge.d.ts +86 -0
  58. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -0
  59. package/dist/agent/transport/tool-execution-bridge.js +665 -0
  60. package/dist/agent/transport/tool-execution-bridge.js.map +1 -0
  61. package/dist/agent/transport/tool-execution.d.ts +3 -0
  62. package/dist/agent/transport/tool-execution.d.ts.map +1 -1
  63. package/dist/agent/transport/tool-execution.js +16 -1
  64. package/dist/agent/transport/tool-execution.js.map +1 -1
  65. package/dist/agent/transport/tool-safety-pipeline.d.ts +7 -1
  66. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  67. package/dist/agent/transport/tool-safety-pipeline.js +207 -40
  68. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  69. package/dist/agent/transport/tool-update-queue.d.ts +2 -0
  70. package/dist/agent/transport/tool-update-queue.d.ts.map +1 -1
  71. package/dist/agent/transport/tool-update-queue.js.map +1 -1
  72. package/dist/agent/transport.d.ts +3 -0
  73. package/dist/agent/transport.d.ts.map +1 -1
  74. package/dist/agent/transport.js +96 -16
  75. package/dist/agent/transport.js.map +1 -1
  76. package/dist/agent/types.d.ts +50 -2
  77. package/dist/agent/types.d.ts.map +1 -1
  78. package/dist/agent/types.js.map +1 -1
  79. package/dist/approvals/platform-action-approval.d.ts +32 -0
  80. package/dist/approvals/platform-action-approval.d.ts.map +1 -0
  81. package/dist/approvals/platform-action-approval.js +210 -0
  82. package/dist/approvals/platform-action-approval.js.map +1 -0
  83. package/dist/approvals/service-client.d.ts +56 -0
  84. package/dist/approvals/service-client.d.ts.map +1 -0
  85. package/dist/approvals/service-client.js +316 -0
  86. package/dist/approvals/service-client.js.map +1 -0
  87. package/dist/audit/logger.d.ts +4 -4
  88. package/dist/bootstrap/auth-setup.d.ts +2 -2
  89. package/dist/bootstrap/auth-setup.d.ts.map +1 -1
  90. package/dist/bootstrap/auth-setup.js +4 -7
  91. package/dist/bootstrap/auth-setup.js.map +1 -1
  92. package/dist/cli/args.d.ts +2 -0
  93. package/dist/cli/args.d.ts.map +1 -1
  94. package/dist/cli/args.js +29 -0
  95. package/dist/cli/args.js.map +1 -1
  96. package/dist/cli/commands/codex.d.ts +2 -0
  97. package/dist/cli/commands/codex.d.ts.map +1 -0
  98. package/dist/cli/commands/codex.js +65 -0
  99. package/dist/cli/commands/codex.js.map +1 -0
  100. package/dist/cli/commands/config.js +1 -1
  101. package/dist/cli/commands/config.js.map +1 -1
  102. package/dist/cli/commands/evalops.d.ts +2 -0
  103. package/dist/cli/commands/evalops.d.ts.map +1 -0
  104. package/dist/cli/commands/evalops.js +74 -0
  105. package/dist/cli/commands/evalops.js.map +1 -0
  106. package/dist/cli/commands/hosted-runner.d.ts +23 -0
  107. package/dist/cli/commands/hosted-runner.d.ts.map +1 -0
  108. package/dist/cli/commands/hosted-runner.js +241 -0
  109. package/dist/cli/commands/hosted-runner.js.map +1 -0
  110. package/dist/cli/commands/init.d.ts +4 -0
  111. package/dist/cli/commands/init.d.ts.map +1 -0
  112. package/dist/cli/commands/init.js +140 -0
  113. package/dist/cli/commands/init.js.map +1 -0
  114. package/dist/cli/commands/memory.d.ts.map +1 -1
  115. package/dist/cli/commands/memory.js +23 -30
  116. package/dist/cli/commands/memory.js.map +1 -1
  117. package/dist/cli/commands/remote.d.ts +3 -0
  118. package/dist/cli/commands/remote.d.ts.map +1 -0
  119. package/dist/cli/commands/remote.js +631 -0
  120. package/dist/cli/commands/remote.js.map +1 -0
  121. package/dist/cli/commands/stats.d.ts +7 -0
  122. package/dist/cli/commands/stats.d.ts.map +1 -0
  123. package/dist/cli/commands/stats.js +167 -0
  124. package/dist/cli/commands/stats.js.map +1 -0
  125. package/dist/cli/headless-protocol.d.ts +16 -1
  126. package/dist/cli/headless-protocol.d.ts.map +1 -1
  127. package/dist/cli/headless-protocol.js +60 -4
  128. package/dist/cli/headless-protocol.js.map +1 -1
  129. package/dist/cli/headless.d.ts.map +1 -1
  130. package/dist/cli/headless.js +1 -0
  131. package/dist/cli/headless.js.map +1 -1
  132. package/dist/cli/help.d.ts.map +1 -1
  133. package/dist/cli/help.js +44 -1
  134. package/dist/cli/help.js.map +1 -1
  135. package/dist/cli/jsonl-writer.d.ts.map +1 -1
  136. package/dist/cli/jsonl-writer.js +19 -6
  137. package/dist/cli/jsonl-writer.js.map +1 -1
  138. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
  139. package/dist/cli-tui/client-tools/client-tool-controller.js +17 -1
  140. package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
  141. package/dist/cli-tui/commands/access-command.js +1 -1
  142. package/dist/cli-tui/commands/access-command.js.map +1 -1
  143. package/dist/cli-tui/commands/audit-command.js +1 -1
  144. package/dist/cli-tui/commands/audit-command.js.map +1 -1
  145. package/dist/cli-tui/commands/command-catalog.d.ts +29 -0
  146. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -0
  147. package/dist/cli-tui/commands/command-catalog.js +645 -0
  148. package/dist/cli-tui/commands/command-catalog.js.map +1 -0
  149. package/dist/cli-tui/commands/command-registry-adapter.d.ts +12 -0
  150. package/dist/cli-tui/commands/command-registry-adapter.d.ts.map +1 -0
  151. package/dist/cli-tui/commands/command-registry-adapter.js +120 -0
  152. package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -0
  153. package/dist/cli-tui/commands/command-suite-catalog.d.ts +14 -0
  154. package/dist/cli-tui/commands/command-suite-catalog.d.ts.map +1 -0
  155. package/dist/cli-tui/commands/command-suite-catalog.js +147 -0
  156. package/dist/cli-tui/commands/command-suite-catalog.js.map +1 -0
  157. package/dist/cli-tui/commands/{grouped-command-handlers.d.ts → command-suite-handlers.d.ts} +27 -26
  158. package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -0
  159. package/dist/cli-tui/commands/command-suite-handlers.js +110 -0
  160. package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -0
  161. package/dist/cli-tui/commands/hotkeys-command.d.ts +1 -1
  162. package/dist/cli-tui/commands/hotkeys-command.d.ts.map +1 -1
  163. package/dist/cli-tui/commands/hotkeys-command.js +2 -2
  164. package/dist/cli-tui/commands/hotkeys-command.js.map +1 -1
  165. package/dist/cli-tui/commands/limits-command.js +1 -1
  166. package/dist/cli-tui/commands/limits-command.js.map +1 -1
  167. package/dist/cli-tui/commands/pii-command.js +1 -1
  168. package/dist/cli-tui/commands/pii-command.js.map +1 -1
  169. package/dist/cli-tui/commands/registry.d.ts +1 -1
  170. package/dist/cli-tui/commands/registry.d.ts.map +1 -1
  171. package/dist/cli-tui/commands/registry.js +29 -921
  172. package/dist/cli-tui/commands/registry.js.map +1 -1
  173. package/dist/cli-tui/commands/{grouped → subcommands}/auth-commands.d.ts +2 -1
  174. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -0
  175. package/dist/cli-tui/commands/{grouped → subcommands}/auth-commands.js +22 -6
  176. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -0
  177. package/dist/cli-tui/commands/{grouped → subcommands}/config-commands.d.ts +0 -1
  178. package/dist/cli-tui/commands/subcommands/config-commands.d.ts.map +1 -0
  179. package/dist/cli-tui/commands/{grouped → subcommands}/config-commands.js +2 -2
  180. package/dist/cli-tui/commands/subcommands/config-commands.js.map +1 -0
  181. package/dist/cli-tui/commands/{grouped → subcommands}/diag-commands.d.ts +1 -2
  182. package/dist/cli-tui/commands/subcommands/diag-commands.d.ts.map +1 -0
  183. package/dist/cli-tui/commands/{grouped → subcommands}/diag-commands.js +5 -7
  184. package/dist/cli-tui/commands/subcommands/diag-commands.js.map +1 -0
  185. package/dist/cli-tui/commands/{grouped → subcommands}/git-commands.d.ts +0 -2
  186. package/dist/cli-tui/commands/subcommands/git-commands.d.ts.map +1 -0
  187. package/dist/cli-tui/commands/{grouped → subcommands}/git-commands.js +2 -2
  188. package/dist/cli-tui/commands/subcommands/git-commands.js.map +1 -0
  189. package/dist/cli-tui/commands/{grouped → subcommands}/index.d.ts +2 -2
  190. package/dist/cli-tui/commands/subcommands/index.d.ts.map +1 -0
  191. package/dist/cli-tui/commands/{grouped → subcommands}/index.js +2 -2
  192. package/dist/cli-tui/commands/subcommands/index.js.map +1 -0
  193. package/dist/cli-tui/commands/{grouped → subcommands}/safety-commands.d.ts +0 -1
  194. package/dist/cli-tui/commands/subcommands/safety-commands.d.ts.map +1 -0
  195. package/dist/cli-tui/commands/{grouped → subcommands}/safety-commands.js +12 -12
  196. package/dist/cli-tui/commands/subcommands/safety-commands.js.map +1 -0
  197. package/dist/cli-tui/commands/{grouped → subcommands}/session-commands.d.ts +1 -2
  198. package/dist/cli-tui/commands/subcommands/session-commands.d.ts.map +1 -0
  199. package/dist/cli-tui/commands/{grouped → subcommands}/session-commands.js +3 -3
  200. package/dist/cli-tui/commands/subcommands/session-commands.js.map +1 -0
  201. package/dist/cli-tui/commands/{grouped → subcommands}/tools-commands.d.ts +0 -1
  202. package/dist/cli-tui/commands/subcommands/tools-commands.d.ts.map +1 -0
  203. package/dist/cli-tui/commands/{grouped → subcommands}/tools-commands.js +2 -2
  204. package/dist/cli-tui/commands/subcommands/tools-commands.js.map +1 -0
  205. package/dist/cli-tui/commands/{grouped → subcommands}/ui-commands.d.ts +0 -1
  206. package/dist/cli-tui/commands/subcommands/ui-commands.d.ts.map +1 -0
  207. package/dist/cli-tui/commands/{grouped → subcommands}/ui-commands.js +5 -5
  208. package/dist/cli-tui/commands/subcommands/ui-commands.js.map +1 -0
  209. package/dist/cli-tui/commands/{grouped → subcommands}/undo-commands.d.ts +1 -2
  210. package/dist/cli-tui/commands/subcommands/undo-commands.d.ts.map +1 -0
  211. package/dist/cli-tui/commands/{grouped → subcommands}/undo-commands.js +6 -6
  212. package/dist/cli-tui/commands/subcommands/undo-commands.js.map +1 -0
  213. package/dist/cli-tui/commands/subcommands/usage-commands.d.ts.map +1 -0
  214. package/dist/cli-tui/commands/{grouped → subcommands}/usage-commands.js +2 -2
  215. package/dist/cli-tui/commands/subcommands/usage-commands.js.map +1 -0
  216. package/dist/cli-tui/commands/{grouped → subcommands}/utils.d.ts +15 -15
  217. package/dist/cli-tui/commands/subcommands/utils.d.ts.map +1 -0
  218. package/dist/cli-tui/commands/{grouped → subcommands}/utils.js +13 -8
  219. package/dist/cli-tui/commands/subcommands/utils.js.map +1 -0
  220. package/dist/cli-tui/commands/types.d.ts +3 -3
  221. package/dist/cli-tui/commands/types.d.ts.map +1 -1
  222. package/dist/cli-tui/commands/types.js.map +1 -1
  223. package/dist/cli-tui/editor-view.d.ts +1 -1
  224. package/dist/cli-tui/editor-view.d.ts.map +1 -1
  225. package/dist/cli-tui/editor-view.js +1 -1
  226. package/dist/cli-tui/editor-view.js.map +1 -1
  227. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts +4 -0
  228. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
  229. package/dist/cli-tui/oauth/oauth-flow-controller.js +76 -5
  230. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
  231. package/dist/cli-tui/run/run-controller.d.ts +2 -2
  232. package/dist/cli-tui/run/run-controller.d.ts.map +1 -1
  233. package/dist/cli-tui/run/run-controller.js +3 -2
  234. package/dist/cli-tui/run/run-controller.js.map +1 -1
  235. package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
  236. package/dist/cli-tui/run/run-shell-command.js +11 -3
  237. package/dist/cli-tui/run/run-shell-command.js.map +1 -1
  238. package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
  239. package/dist/cli-tui/run/streaming-shell-command.js +11 -3
  240. package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
  241. package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
  242. package/dist/cli-tui/selectors/model-selector.js +1 -0
  243. package/dist/cli-tui/selectors/model-selector.js.map +1 -1
  244. package/dist/cli-tui/tui-renderer/agent-event-bridge.d.ts +8 -0
  245. package/dist/cli-tui/tui-renderer/agent-event-bridge.d.ts.map +1 -1
  246. package/dist/cli-tui/tui-renderer/agent-event-bridge.js +23 -2
  247. package/dist/cli-tui/tui-renderer/agent-event-bridge.js.map +1 -1
  248. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts +3 -3
  249. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
  250. package/dist/cli-tui/tui-renderer/command-registry-options.js +12 -2
  251. package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
  252. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +32 -0
  253. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -0
  254. package/dist/cli-tui/tui-renderer/command-suite-wiring.js +108 -0
  255. package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -0
  256. package/dist/cli-tui/tui-renderer/input-controller.d.ts +2 -2
  257. package/dist/cli-tui/tui-renderer/input-controller.d.ts.map +1 -1
  258. package/dist/cli-tui/tui-renderer/input-controller.js +2 -2
  259. package/dist/cli-tui/tui-renderer/input-controller.js.map +1 -1
  260. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts +1 -1
  261. package/dist/cli-tui/tui-renderer/ui-state-controller.js +1 -1
  262. package/dist/cli-tui/tui-renderer/ui-state-controller.js.map +1 -1
  263. package/dist/cli-tui/tui-renderer.d.ts +1 -3
  264. package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
  265. package/dist/cli-tui/tui-renderer.js +37 -83
  266. package/dist/cli-tui/tui-renderer.js.map +1 -1
  267. package/dist/cli-tui/utils/runtime-badges.d.ts +8 -0
  268. package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
  269. package/dist/cli-tui/utils/runtime-badges.js +58 -0
  270. package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
  271. package/dist/cli.js +42555 -23133
  272. package/dist/cli.js.map +1 -1
  273. package/dist/config/env-vars.d.ts +4 -0
  274. package/dist/config/env-vars.d.ts.map +1 -1
  275. package/dist/config/env-vars.js +4 -0
  276. package/dist/config/env-vars.js.map +1 -1
  277. package/dist/config/feature-flags.d.ts +44 -0
  278. package/dist/config/feature-flags.d.ts.map +1 -1
  279. package/dist/config/feature-flags.js +214 -0
  280. package/dist/config/feature-flags.js.map +1 -1
  281. package/dist/connectors/service-client.d.ts +98 -0
  282. package/dist/connectors/service-client.d.ts.map +1 -0
  283. package/dist/connectors/service-client.js +459 -0
  284. package/dist/connectors/service-client.js.map +1 -0
  285. package/dist/conversation/render-model.d.ts.map +1 -1
  286. package/dist/conversation/render-model.js +53 -3
  287. package/dist/conversation/render-model.js.map +1 -1
  288. package/dist/db/health.d.ts +8 -0
  289. package/dist/db/health.d.ts.map +1 -0
  290. package/dist/db/health.js +64 -0
  291. package/dist/db/health.js.map +1 -0
  292. package/dist/db/migrate.d.ts +301 -0
  293. package/dist/db/migrate.d.ts.map +1 -1
  294. package/dist/db/migrate.js +186 -0
  295. package/dist/db/migrate.js.map +1 -1
  296. package/dist/db/migrations/0000_initial.sql +308 -0
  297. package/dist/db/migrations/0001_shared_sessions.sql +18 -0
  298. package/dist/db/migrations/0002_usage_metrics.sql +28 -0
  299. package/dist/db/migrations/0003_execution_traces.sql +18 -0
  300. package/dist/db/migrations/0004_workspace_config.sql +11 -0
  301. package/dist/db/migrations/0005_revenue_attribution.sql +31 -0
  302. package/dist/db/migrations/0006_hosted_session_storage.sql +51 -0
  303. package/dist/db/migrations/0007_reconcile_legacy_audit_hash_cache.sql +24 -0
  304. package/dist/db/migrations/0008_reconcile_legacy_webhook_deliveries.sql +290 -0
  305. package/dist/db/migrations/meta/0000_snapshot.json +2438 -0
  306. package/dist/db/migrations/meta/_journal.json +69 -0
  307. package/dist/db/schema.d.ts +2232 -844
  308. package/dist/db/schema.d.ts.map +1 -1
  309. package/dist/db/schema.js +187 -1
  310. package/dist/db/schema.js.map +1 -1
  311. package/dist/evalops/agent-bootstrap.d.ts +73 -0
  312. package/dist/evalops/agent-bootstrap.d.ts.map +1 -0
  313. package/dist/evalops/agent-bootstrap.js +380 -0
  314. package/dist/evalops/agent-bootstrap.js.map +1 -0
  315. package/dist/export-html.d.ts.map +1 -1
  316. package/dist/export-html.js +7 -4
  317. package/dist/export-html.js.map +1 -1
  318. package/dist/headless/utility-command-manager.d.ts +2 -1
  319. package/dist/headless/utility-command-manager.d.ts.map +1 -1
  320. package/dist/headless/utility-command-manager.js +12 -6
  321. package/dist/headless/utility-command-manager.js.map +1 -1
  322. package/dist/headless/utility-file-read.d.ts +1 -0
  323. package/dist/headless/utility-file-read.d.ts.map +1 -1
  324. package/dist/headless/utility-file-read.js +5 -1
  325. package/dist/headless/utility-file-read.js.map +1 -1
  326. package/dist/headless/utility-file-search.d.ts +1 -0
  327. package/dist/headless/utility-file-search.d.ts.map +1 -1
  328. package/dist/headless/utility-file-search.js +4 -1
  329. package/dist/headless/utility-file-search.js.map +1 -1
  330. package/dist/headless/utility-file-watch-manager.d.ts +2 -1
  331. package/dist/headless/utility-file-watch-manager.d.ts.map +1 -1
  332. package/dist/headless/utility-file-watch-manager.js +6 -2
  333. package/dist/headless/utility-file-watch-manager.js.map +1 -1
  334. package/dist/headless/workspace-root.d.ts +8 -0
  335. package/dist/headless/workspace-root.d.ts.map +1 -0
  336. package/dist/headless/workspace-root.js +74 -0
  337. package/dist/headless/workspace-root.js.map +1 -0
  338. package/dist/hooks/notification-hooks.d.ts +5 -0
  339. package/dist/hooks/notification-hooks.d.ts.map +1 -1
  340. package/dist/hooks/notification-hooks.js +4 -0
  341. package/dist/hooks/notification-hooks.js.map +1 -1
  342. package/dist/lsp/diagnostic-deltas.d.ts +20 -0
  343. package/dist/lsp/diagnostic-deltas.d.ts.map +1 -0
  344. package/dist/lsp/diagnostic-deltas.js +92 -0
  345. package/dist/lsp/diagnostic-deltas.js.map +1 -0
  346. package/dist/lsp/diagnostic-repair.d.ts +48 -0
  347. package/dist/lsp/diagnostic-repair.d.ts.map +1 -0
  348. package/dist/lsp/diagnostic-repair.js +143 -0
  349. package/dist/lsp/diagnostic-repair.js.map +1 -0
  350. package/dist/main.d.ts.map +1 -1
  351. package/dist/main.js +127 -37
  352. package/dist/main.js.map +1 -1
  353. package/dist/mcp/config.d.ts +4 -2
  354. package/dist/mcp/config.d.ts.map +1 -1
  355. package/dist/mcp/config.js +58 -14
  356. package/dist/mcp/config.js.map +1 -1
  357. package/dist/mcp/index.d.ts +1 -0
  358. package/dist/mcp/index.d.ts.map +1 -1
  359. package/dist/mcp/index.js +1 -0
  360. package/dist/mcp/index.js.map +1 -1
  361. package/dist/mcp/manager.d.ts +1 -0
  362. package/dist/mcp/manager.d.ts.map +1 -1
  363. package/dist/mcp/manager.js +1 -0
  364. package/dist/mcp/manager.js.map +1 -1
  365. package/dist/mcp/platform-plugin.d.ts +3 -0
  366. package/dist/mcp/platform-plugin.d.ts.map +1 -0
  367. package/dist/mcp/platform-plugin.js +117 -0
  368. package/dist/mcp/platform-plugin.js.map +1 -0
  369. package/dist/mcp/tool-bridge.d.ts +15 -0
  370. package/dist/mcp/tool-bridge.d.ts.map +1 -1
  371. package/dist/mcp/tool-bridge.js +194 -6
  372. package/dist/mcp/tool-bridge.js.map +1 -1
  373. package/dist/memory/platform-memory-client.d.ts +130 -0
  374. package/dist/memory/platform-memory-client.d.ts.map +1 -0
  375. package/dist/memory/platform-memory-client.js +330 -0
  376. package/dist/memory/platform-memory-client.js.map +1 -0
  377. package/dist/memory/service-client.d.ts.map +1 -1
  378. package/dist/memory/service-client.js +1 -2
  379. package/dist/memory/service-client.js.map +1 -1
  380. package/dist/models/builtin.d.ts.map +1 -1
  381. package/dist/models/builtin.js +137 -0
  382. package/dist/models/builtin.js.map +1 -1
  383. package/dist/models/config-loader.d.ts +10 -10
  384. package/dist/models/config-loader.d.ts.map +1 -1
  385. package/dist/models/config-loader.js +1 -0
  386. package/dist/models/config-loader.js.map +1 -1
  387. package/dist/models/registry.d.ts +1 -0
  388. package/dist/models/registry.d.ts.map +1 -1
  389. package/dist/models/registry.js +1 -0
  390. package/dist/models/registry.js.map +1 -1
  391. package/dist/oauth/connectors.d.ts +25 -0
  392. package/dist/oauth/connectors.d.ts.map +1 -0
  393. package/dist/oauth/connectors.js +253 -0
  394. package/dist/oauth/connectors.js.map +1 -0
  395. package/dist/oauth/device-identity.d.ts +18 -0
  396. package/dist/oauth/device-identity.d.ts.map +1 -0
  397. package/dist/oauth/device-identity.js +193 -0
  398. package/dist/oauth/device-identity.js.map +1 -0
  399. package/dist/oauth/evalops.d.ts.map +1 -1
  400. package/dist/oauth/evalops.js +74 -15
  401. package/dist/oauth/evalops.js.map +1 -1
  402. package/dist/oauth/index.d.ts +1 -1
  403. package/dist/oauth/index.d.ts.map +1 -1
  404. package/dist/oauth/index.js +31 -1
  405. package/dist/oauth/index.js.map +1 -1
  406. package/dist/oauth/openai-codex.d.ts +16 -0
  407. package/dist/oauth/openai-codex.d.ts.map +1 -0
  408. package/dist/oauth/openai-codex.js +300 -0
  409. package/dist/oauth/openai-codex.js.map +1 -0
  410. package/dist/opentelemetry.d.ts.map +1 -1
  411. package/dist/opentelemetry.js +9 -2
  412. package/dist/opentelemetry.js.map +1 -1
  413. package/dist/platform/agent-runtime-client.d.ts +279 -0
  414. package/dist/platform/agent-runtime-client.d.ts.map +1 -0
  415. package/dist/platform/agent-runtime-client.js +515 -0
  416. package/dist/platform/agent-runtime-client.js.map +1 -0
  417. package/dist/platform/cerebro-facts-client.d.ts +56 -0
  418. package/dist/platform/cerebro-facts-client.d.ts.map +1 -0
  419. package/dist/platform/cerebro-facts-client.js +297 -0
  420. package/dist/platform/cerebro-facts-client.js.map +1 -0
  421. package/dist/platform/client.d.ts +2 -1
  422. package/dist/platform/client.d.ts.map +1 -1
  423. package/dist/platform/client.js +9 -26
  424. package/dist/platform/client.js.map +1 -1
  425. package/dist/platform/core-services.d.ts +128 -0
  426. package/dist/platform/core-services.d.ts.map +1 -1
  427. package/dist/platform/core-services.js +128 -0
  428. package/dist/platform/core-services.js.map +1 -1
  429. package/dist/platform/maestro-timeline-client.d.ts +22 -0
  430. package/dist/platform/maestro-timeline-client.d.ts.map +1 -0
  431. package/dist/platform/maestro-timeline-client.js +373 -0
  432. package/dist/platform/maestro-timeline-client.js.map +1 -0
  433. package/dist/platform/tool-execution-client.d.ts +104 -0
  434. package/dist/platform/tool-execution-client.d.ts.map +1 -0
  435. package/dist/platform/tool-execution-client.js +284 -0
  436. package/dist/platform/tool-execution-client.js.map +1 -0
  437. package/dist/prompts/service-client.d.ts.map +1 -1
  438. package/dist/prompts/service-client.js +5 -2
  439. package/dist/prompts/service-client.js.map +1 -1
  440. package/dist/providers/anthropic-auth.d.ts.map +1 -1
  441. package/dist/providers/anthropic-auth.js +8 -6
  442. package/dist/providers/anthropic-auth.js.map +1 -1
  443. package/dist/providers/api-keys.d.ts +1 -0
  444. package/dist/providers/api-keys.d.ts.map +1 -1
  445. package/dist/providers/api-keys.js +5 -0
  446. package/dist/providers/api-keys.js.map +1 -1
  447. package/dist/providers/auth.d.ts +2 -1
  448. package/dist/providers/auth.d.ts.map +1 -1
  449. package/dist/providers/auth.js +26 -3
  450. package/dist/providers/auth.js.map +1 -1
  451. package/dist/remote-runner/attach-client.d.ts +41 -0
  452. package/dist/remote-runner/attach-client.d.ts.map +1 -0
  453. package/dist/remote-runner/attach-client.js +692 -0
  454. package/dist/remote-runner/attach-client.js.map +1 -0
  455. package/dist/remote-runner/client.d.ts +205 -0
  456. package/dist/remote-runner/client.d.ts.map +1 -0
  457. package/dist/remote-runner/client.js +633 -0
  458. package/dist/remote-runner/client.js.map +1 -0
  459. package/dist/safety/action-firewall.d.ts +6 -1
  460. package/dist/safety/action-firewall.d.ts.map +1 -1
  461. package/dist/safety/action-firewall.js +62 -26
  462. package/dist/safety/action-firewall.js.map +1 -1
  463. package/dist/safety/governance-service-client.d.ts +36 -0
  464. package/dist/safety/governance-service-client.d.ts.map +1 -0
  465. package/dist/safety/governance-service-client.js +279 -0
  466. package/dist/safety/governance-service-client.js.map +1 -0
  467. package/dist/safety/policy.d.ts +13 -2
  468. package/dist/safety/policy.d.ts.map +1 -1
  469. package/dist/safety/policy.js +474 -52
  470. package/dist/safety/policy.js.map +1 -1
  471. package/dist/sdk-tools.d.ts +21 -0
  472. package/dist/sdk-tools.d.ts.map +1 -1
  473. package/dist/sdk-tools.js +16 -0
  474. package/dist/sdk-tools.js.map +1 -1
  475. package/dist/server/app-context.d.ts +25 -0
  476. package/dist/server/app-context.d.ts.map +1 -1
  477. package/dist/server/app-context.js.map +1 -1
  478. package/dist/server/approval-service.d.ts +7 -8
  479. package/dist/server/approval-service.d.ts.map +1 -1
  480. package/dist/server/approval-service.js +12 -24
  481. package/dist/server/approval-service.js.map +1 -1
  482. package/dist/server/authz.d.ts +23 -2
  483. package/dist/server/authz.d.ts.map +1 -1
  484. package/dist/server/authz.js +153 -17
  485. package/dist/server/authz.js.map +1 -1
  486. package/dist/server/handlers/approvals.d.ts.map +1 -1
  487. package/dist/server/handlers/approvals.js +3 -10
  488. package/dist/server/handlers/approvals.js.map +1 -1
  489. package/dist/server/handlers/branch.d.ts.map +1 -1
  490. package/dist/server/handlers/branch.js +29 -20
  491. package/dist/server/handlers/branch.js.map +1 -1
  492. package/dist/server/handlers/bridge.d.ts.map +1 -1
  493. package/dist/server/handlers/bridge.js +3 -2
  494. package/dist/server/handlers/bridge.js.map +1 -1
  495. package/dist/server/handlers/chat-ws.d.ts.map +1 -1
  496. package/dist/server/handlers/chat-ws.js +23 -31
  497. package/dist/server/handlers/chat-ws.js.map +1 -1
  498. package/dist/server/handlers/chat.d.ts.map +1 -1
  499. package/dist/server/handlers/chat.js +105 -46
  500. package/dist/server/handlers/chat.js.map +1 -1
  501. package/dist/server/handlers/compliance.d.ts +3 -0
  502. package/dist/server/handlers/compliance.d.ts.map +1 -0
  503. package/dist/server/handlers/compliance.js +53 -0
  504. package/dist/server/handlers/compliance.js.map +1 -0
  505. package/dist/server/handlers/context.d.ts.map +1 -1
  506. package/dist/server/handlers/context.js +3 -8
  507. package/dist/server/handlers/context.js.map +1 -1
  508. package/dist/server/handlers/fleet.d.ts +4 -0
  509. package/dist/server/handlers/fleet.d.ts.map +1 -0
  510. package/dist/server/handlers/fleet.js +9 -0
  511. package/dist/server/handlers/fleet.js.map +1 -0
  512. package/dist/server/handlers/headless-sessions.d.ts +4 -0
  513. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  514. package/dist/server/handlers/headless-sessions.js +168 -3
  515. package/dist/server/handlers/headless-sessions.js.map +1 -1
  516. package/dist/server/handlers/health.d.ts +31 -2
  517. package/dist/server/handlers/health.d.ts.map +1 -1
  518. package/dist/server/handlers/health.js +82 -8
  519. package/dist/server/handlers/health.js.map +1 -1
  520. package/dist/server/handlers/hosted-runner-drain.d.ts +128 -0
  521. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -0
  522. package/dist/server/handlers/hosted-runner-drain.js +373 -0
  523. package/dist/server/handlers/hosted-runner-drain.js.map +1 -0
  524. package/dist/server/handlers/hosted-runner-identity.d.ts +17 -0
  525. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -0
  526. package/dist/server/handlers/hosted-runner-identity.js +39 -0
  527. package/dist/server/handlers/hosted-runner-identity.js.map +1 -0
  528. package/dist/server/handlers/intelligent-router.d.ts +3 -0
  529. package/dist/server/handlers/intelligent-router.d.ts.map +1 -0
  530. package/dist/server/handlers/intelligent-router.js +141 -0
  531. package/dist/server/handlers/intelligent-router.js.map +1 -0
  532. package/dist/server/handlers/models.d.ts.map +1 -1
  533. package/dist/server/handlers/models.js +14 -0
  534. package/dist/server/handlers/models.js.map +1 -1
  535. package/dist/server/handlers/pending-requests.d.ts +8 -0
  536. package/dist/server/handlers/pending-requests.d.ts.map +1 -0
  537. package/dist/server/handlers/pending-requests.js +149 -0
  538. package/dist/server/handlers/pending-requests.js.map +1 -0
  539. package/dist/server/handlers/revenue-attribution.d.ts +3 -0
  540. package/dist/server/handlers/revenue-attribution.d.ts.map +1 -0
  541. package/dist/server/handlers/revenue-attribution.js +45 -0
  542. package/dist/server/handlers/revenue-attribution.js.map +1 -0
  543. package/dist/server/handlers/runtime-app-server-ws.d.ts +10 -0
  544. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -0
  545. package/dist/server/handlers/runtime-app-server-ws.js +206 -0
  546. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -0
  547. package/dist/server/handlers/session-artifacts.js +2 -2
  548. package/dist/server/handlers/session-artifacts.js.map +1 -1
  549. package/dist/server/handlers/session-attachments.js +3 -3
  550. package/dist/server/handlers/session-attachments.js.map +1 -1
  551. package/dist/server/handlers/session-timeline.d.ts +11 -0
  552. package/dist/server/handlers/session-timeline.d.ts.map +1 -0
  553. package/dist/server/handlers/session-timeline.js +77 -0
  554. package/dist/server/handlers/session-timeline.js.map +1 -0
  555. package/dist/server/handlers/sessions.d.ts +11 -0
  556. package/dist/server/handlers/sessions.d.ts.map +1 -1
  557. package/dist/server/handlers/sessions.js +68 -100
  558. package/dist/server/handlers/sessions.js.map +1 -1
  559. package/dist/server/handlers/traces.d.ts +3 -0
  560. package/dist/server/handlers/traces.d.ts.map +1 -0
  561. package/dist/server/handlers/traces.js +60 -0
  562. package/dist/server/handlers/traces.js.map +1 -0
  563. package/dist/server/handlers/usage-analytics.d.ts +3 -0
  564. package/dist/server/handlers/usage-analytics.d.ts.map +1 -0
  565. package/dist/server/handlers/usage-analytics.js +40 -0
  566. package/dist/server/handlers/usage-analytics.js.map +1 -0
  567. package/dist/server/handlers/workspace-config.d.ts +3 -0
  568. package/dist/server/handlers/workspace-config.d.ts.map +1 -0
  569. package/dist/server/handlers/workspace-config.js +62 -0
  570. package/dist/server/handlers/workspace-config.js.map +1 -0
  571. package/dist/server/headless-in-process-host.d.ts +8 -1
  572. package/dist/server/headless-in-process-host.d.ts.map +1 -1
  573. package/dist/server/headless-in-process-host.js +6 -0
  574. package/dist/server/headless-in-process-host.js.map +1 -1
  575. package/dist/server/headless-runtime-service.d.ts +99 -1
  576. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  577. package/dist/server/headless-runtime-service.js +286 -23
  578. package/dist/server/headless-runtime-service.js.map +1 -1
  579. package/dist/server/hosted-session-manager.d.ts +103 -0
  580. package/dist/server/hosted-session-manager.d.ts.map +1 -0
  581. package/dist/server/hosted-session-manager.js +629 -0
  582. package/dist/server/hosted-session-manager.js.map +1 -0
  583. package/dist/server/pending-request-payload.d.ts +4 -0
  584. package/dist/server/pending-request-payload.d.ts.map +1 -0
  585. package/dist/server/pending-request-payload.js +107 -0
  586. package/dist/server/pending-request-payload.js.map +1 -0
  587. package/dist/server/request-context.d.ts +4 -0
  588. package/dist/server/request-context.d.ts.map +1 -1
  589. package/dist/server/request-context.js +9 -0
  590. package/dist/server/request-context.js.map +1 -1
  591. package/dist/server/routes.d.ts.map +1 -1
  592. package/dist/server/routes.js +149 -1
  593. package/dist/server/routes.js.map +1 -1
  594. package/dist/server/runtime-ws-access.d.ts +16 -0
  595. package/dist/server/runtime-ws-access.d.ts.map +1 -0
  596. package/dist/server/runtime-ws-access.js +21 -0
  597. package/dist/server/runtime-ws-access.js.map +1 -0
  598. package/dist/server/server-middlewares.d.ts +1 -1
  599. package/dist/server/server-middlewares.d.ts.map +1 -1
  600. package/dist/server/server-middlewares.js +35 -27
  601. package/dist/server/server-middlewares.js.map +1 -1
  602. package/dist/server/server-request-manager.d.ts +8 -27
  603. package/dist/server/server-request-manager.d.ts.map +1 -1
  604. package/dist/server/server-request-manager.js +7 -0
  605. package/dist/server/server-request-manager.js.map +1 -1
  606. package/dist/server/server-utils.d.ts +2 -1
  607. package/dist/server/server-utils.d.ts.map +1 -1
  608. package/dist/server/server-utils.js +11 -1
  609. package/dist/server/server-utils.js.map +1 -1
  610. package/dist/server/session-event-env.d.ts +2 -0
  611. package/dist/server/session-event-env.d.ts.map +1 -0
  612. package/dist/server/session-event-env.js +8 -0
  613. package/dist/server/session-event-env.js.map +1 -0
  614. package/dist/server/session-initialization.d.ts +25 -4
  615. package/dist/server/session-initialization.d.ts.map +1 -1
  616. package/dist/server/session-initialization.js +22 -5
  617. package/dist/server/session-initialization.js.map +1 -1
  618. package/dist/server/session-scope.d.ts +4 -0
  619. package/dist/server/session-scope.d.ts.map +1 -1
  620. package/dist/server/session-scope.js +44 -4
  621. package/dist/server/session-scope.js.map +1 -1
  622. package/dist/server/session-timeline.d.ts +13 -0
  623. package/dist/server/session-timeline.d.ts.map +1 -0
  624. package/dist/server/session-timeline.js +566 -0
  625. package/dist/server/session-timeline.js.map +1 -0
  626. package/dist/services/compliance/controls.d.ts +6 -0
  627. package/dist/services/compliance/controls.d.ts.map +1 -0
  628. package/dist/services/compliance/controls.js +113 -0
  629. package/dist/services/compliance/controls.js.map +1 -0
  630. package/dist/services/compliance/index.d.ts +6 -0
  631. package/dist/services/compliance/index.d.ts.map +1 -0
  632. package/dist/services/compliance/index.js +5 -0
  633. package/dist/services/compliance/index.js.map +1 -0
  634. package/dist/services/compliance/normalize.d.ts +23 -0
  635. package/dist/services/compliance/normalize.d.ts.map +1 -0
  636. package/dist/services/compliance/normalize.js +226 -0
  637. package/dist/services/compliance/normalize.js.map +1 -0
  638. package/dist/services/compliance/recorder.d.ts +22 -0
  639. package/dist/services/compliance/recorder.d.ts.map +1 -0
  640. package/dist/services/compliance/recorder.js +89 -0
  641. package/dist/services/compliance/recorder.js.map +1 -0
  642. package/dist/services/compliance/service.d.ts +24 -0
  643. package/dist/services/compliance/service.d.ts.map +1 -0
  644. package/dist/services/compliance/service.js +426 -0
  645. package/dist/services/compliance/service.js.map +1 -0
  646. package/dist/services/compliance/types.d.ts +185 -0
  647. package/dist/services/compliance/types.d.ts.map +1 -0
  648. package/dist/services/compliance/types.js +2 -0
  649. package/dist/services/compliance/types.js.map +1 -0
  650. package/dist/services/intelligent-router/index.d.ts +5 -0
  651. package/dist/services/intelligent-router/index.d.ts.map +1 -0
  652. package/dist/services/intelligent-router/index.js +5 -0
  653. package/dist/services/intelligent-router/index.js.map +1 -0
  654. package/dist/services/intelligent-router/normalize.d.ts +9 -0
  655. package/dist/services/intelligent-router/normalize.d.ts.map +1 -0
  656. package/dist/services/intelligent-router/normalize.js +169 -0
  657. package/dist/services/intelligent-router/normalize.js.map +1 -0
  658. package/dist/services/intelligent-router/recorder.d.ts +24 -0
  659. package/dist/services/intelligent-router/recorder.d.ts.map +1 -0
  660. package/dist/services/intelligent-router/recorder.js +98 -0
  661. package/dist/services/intelligent-router/recorder.js.map +1 -0
  662. package/dist/services/intelligent-router/service.d.ts +22 -0
  663. package/dist/services/intelligent-router/service.d.ts.map +1 -0
  664. package/dist/services/intelligent-router/service.js +328 -0
  665. package/dist/services/intelligent-router/service.js.map +1 -0
  666. package/dist/services/intelligent-router/types.d.ts +98 -0
  667. package/dist/services/intelligent-router/types.d.ts.map +1 -0
  668. package/dist/services/intelligent-router/types.js +7 -0
  669. package/dist/services/intelligent-router/types.js.map +1 -0
  670. package/dist/services/revenue-attribution/index.d.ts +4 -0
  671. package/dist/services/revenue-attribution/index.d.ts.map +1 -0
  672. package/dist/services/revenue-attribution/index.js +4 -0
  673. package/dist/services/revenue-attribution/index.js.map +1 -0
  674. package/dist/services/revenue-attribution/normalize.d.ts +13 -0
  675. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -0
  676. package/dist/services/revenue-attribution/normalize.js +155 -0
  677. package/dist/services/revenue-attribution/normalize.js.map +1 -0
  678. package/dist/services/revenue-attribution/service.d.ts +21 -0
  679. package/dist/services/revenue-attribution/service.d.ts.map +1 -0
  680. package/dist/services/revenue-attribution/service.js +248 -0
  681. package/dist/services/revenue-attribution/service.js.map +1 -0
  682. package/dist/services/revenue-attribution/types.d.ts +96 -0
  683. package/dist/services/revenue-attribution/types.d.ts.map +1 -0
  684. package/dist/services/revenue-attribution/types.js +7 -0
  685. package/dist/services/revenue-attribution/types.js.map +1 -0
  686. package/dist/services/traces/index.d.ts +5 -0
  687. package/dist/services/traces/index.d.ts.map +1 -0
  688. package/dist/services/traces/index.js +4 -0
  689. package/dist/services/traces/index.js.map +1 -0
  690. package/dist/services/traces/normalize.d.ts +20 -0
  691. package/dist/services/traces/normalize.d.ts.map +1 -0
  692. package/dist/services/traces/normalize.js +261 -0
  693. package/dist/services/traces/normalize.js.map +1 -0
  694. package/dist/services/traces/otel.d.ts +3 -0
  695. package/dist/services/traces/otel.d.ts.map +1 -0
  696. package/dist/services/traces/otel.js +173 -0
  697. package/dist/services/traces/otel.js.map +1 -0
  698. package/dist/services/traces/service.d.ts +17 -0
  699. package/dist/services/traces/service.d.ts.map +1 -0
  700. package/dist/services/traces/service.js +197 -0
  701. package/dist/services/traces/service.js.map +1 -0
  702. package/dist/services/traces/types.d.ts +130 -0
  703. package/dist/services/traces/types.d.ts.map +1 -0
  704. package/dist/services/traces/types.js +8 -0
  705. package/dist/services/traces/types.js.map +1 -0
  706. package/dist/services/usage-analytics/aggregation.d.ts +18 -0
  707. package/dist/services/usage-analytics/aggregation.d.ts.map +1 -0
  708. package/dist/services/usage-analytics/aggregation.js +130 -0
  709. package/dist/services/usage-analytics/aggregation.js.map +1 -0
  710. package/dist/services/usage-analytics/index.d.ts +5 -0
  711. package/dist/services/usage-analytics/index.d.ts.map +1 -0
  712. package/dist/services/usage-analytics/index.js +4 -0
  713. package/dist/services/usage-analytics/index.js.map +1 -0
  714. package/dist/services/usage-analytics/recorder.d.ts +16 -0
  715. package/dist/services/usage-analytics/recorder.d.ts.map +1 -0
  716. package/dist/services/usage-analytics/recorder.js +128 -0
  717. package/dist/services/usage-analytics/recorder.js.map +1 -0
  718. package/dist/services/usage-analytics/service.d.ts +15 -0
  719. package/dist/services/usage-analytics/service.d.ts.map +1 -0
  720. package/dist/services/usage-analytics/service.js +210 -0
  721. package/dist/services/usage-analytics/service.js.map +1 -0
  722. package/dist/services/usage-analytics/types.d.ts +80 -0
  723. package/dist/services/usage-analytics/types.d.ts.map +1 -0
  724. package/dist/services/usage-analytics/types.js +2 -0
  725. package/dist/services/usage-analytics/types.js.map +1 -0
  726. package/dist/services/workspace-config/index.d.ts +6 -0
  727. package/dist/services/workspace-config/index.d.ts.map +1 -0
  728. package/dist/services/workspace-config/index.js +5 -0
  729. package/dist/services/workspace-config/index.js.map +1 -0
  730. package/dist/services/workspace-config/middleware.d.ts +5 -0
  731. package/dist/services/workspace-config/middleware.d.ts.map +1 -0
  732. package/dist/services/workspace-config/middleware.js +98 -0
  733. package/dist/services/workspace-config/middleware.js.map +1 -0
  734. package/dist/services/workspace-config/normalize.d.ts +17 -0
  735. package/dist/services/workspace-config/normalize.d.ts.map +1 -0
  736. package/dist/services/workspace-config/normalize.js +148 -0
  737. package/dist/services/workspace-config/normalize.js.map +1 -0
  738. package/dist/services/workspace-config/policy.d.ts +16 -0
  739. package/dist/services/workspace-config/policy.d.ts.map +1 -0
  740. package/dist/services/workspace-config/policy.js +77 -0
  741. package/dist/services/workspace-config/policy.js.map +1 -0
  742. package/dist/services/workspace-config/service.d.ts +20 -0
  743. package/dist/services/workspace-config/service.d.ts.map +1 -0
  744. package/dist/services/workspace-config/service.js +162 -0
  745. package/dist/services/workspace-config/service.js.map +1 -0
  746. package/dist/services/workspace-config/types.d.ts +71 -0
  747. package/dist/services/workspace-config/types.d.ts.map +1 -0
  748. package/dist/services/workspace-config/types.js +2 -0
  749. package/dist/services/workspace-config/types.js.map +1 -0
  750. package/dist/session/manager.d.ts.map +1 -1
  751. package/dist/session/manager.js +10 -0
  752. package/dist/session/manager.js.map +1 -1
  753. package/dist/session/migration.d.ts.map +1 -1
  754. package/dist/session/migration.js +2 -1
  755. package/dist/session/migration.js.map +1 -1
  756. package/dist/session/session-memory.d.ts.map +1 -1
  757. package/dist/session/session-memory.js +7 -1
  758. package/dist/session/session-memory.js.map +1 -1
  759. package/dist/session/types.d.ts +1 -2
  760. package/dist/session/types.d.ts.map +1 -1
  761. package/dist/session/types.js +1 -22
  762. package/dist/session/types.js.map +1 -1
  763. package/dist/session/wire-format.d.ts +7 -0
  764. package/dist/session/wire-format.d.ts.map +1 -0
  765. package/dist/session/wire-format.generated.d.ts +95 -0
  766. package/dist/session/wire-format.generated.d.ts.map +1 -0
  767. package/dist/session/wire-format.generated.js +111 -0
  768. package/dist/session/wire-format.generated.js.map +1 -0
  769. package/dist/session/wire-format.js +145 -0
  770. package/dist/session/wire-format.js.map +1 -0
  771. package/dist/shared-memory/client.d.ts.map +1 -1
  772. package/dist/shared-memory/client.js +22 -22
  773. package/dist/shared-memory/client.js.map +1 -1
  774. package/dist/skills/artifact-metadata.d.ts +16 -0
  775. package/dist/skills/artifact-metadata.d.ts.map +1 -0
  776. package/dist/skills/artifact-metadata.js +86 -0
  777. package/dist/skills/artifact-metadata.js.map +1 -0
  778. package/dist/skills/loader.d.ts +2 -2
  779. package/dist/skills/loader.d.ts.map +1 -1
  780. package/dist/skills/loader.js +1 -0
  781. package/dist/skills/loader.js.map +1 -1
  782. package/dist/skills/service-client.d.ts +42 -0
  783. package/dist/skills/service-client.d.ts.map +1 -0
  784. package/dist/skills/service-client.js +258 -0
  785. package/dist/skills/service-client.js.map +1 -0
  786. package/dist/skills/tool.d.ts +3 -0
  787. package/dist/skills/tool.d.ts.map +1 -1
  788. package/dist/skills/tool.js +67 -5
  789. package/dist/skills/tool.js.map +1 -1
  790. package/dist/telemetry/index.d.ts +4 -0
  791. package/dist/telemetry/index.d.ts.map +1 -1
  792. package/dist/telemetry/index.js +5 -0
  793. package/dist/telemetry/index.js.map +1 -1
  794. package/dist/telemetry/maestro-event-bus.d.ts +440 -0
  795. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -0
  796. package/dist/telemetry/maestro-event-bus.js +784 -0
  797. package/dist/telemetry/maestro-event-bus.js.map +1 -0
  798. package/dist/telemetry/maestro-event-catalog.d.ts +48 -0
  799. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -0
  800. package/dist/telemetry/maestro-event-catalog.js +69 -0
  801. package/dist/telemetry/maestro-event-catalog.js.map +1 -0
  802. package/dist/telemetry/maestro-platform-replay-fixture.d.ts +24 -0
  803. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -0
  804. package/dist/telemetry/maestro-platform-replay-fixture.js +400 -0
  805. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -0
  806. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +29 -0
  807. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -0
  808. package/dist/telemetry/maestro-publisher-conformance-fixture.js +240 -0
  809. package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -0
  810. package/dist/telemetry/meter-service-client.d.ts +0 -33
  811. package/dist/telemetry/meter-service-client.d.ts.map +1 -1
  812. package/dist/telemetry/meter-service-client.js +22 -50
  813. package/dist/telemetry/meter-service-client.js.map +1 -1
  814. package/dist/telemetry/turn-tracker.d.ts.map +1 -1
  815. package/dist/telemetry/turn-tracker.js +5 -5
  816. package/dist/telemetry/turn-tracker.js.map +1 -1
  817. package/dist/telemetry/wide-events.d.ts +8 -0
  818. package/dist/telemetry/wide-events.d.ts.map +1 -1
  819. package/dist/telemetry/wide-events.js +28 -0
  820. package/dist/telemetry/wide-events.js.map +1 -1
  821. package/dist/telemetry.d.ts +1 -1
  822. package/dist/telemetry.d.ts.map +1 -1
  823. package/dist/telemetry.js +14 -4
  824. package/dist/telemetry.js.map +1 -1
  825. package/dist/timeline/redaction.d.ts +5 -0
  826. package/dist/timeline/redaction.d.ts.map +1 -0
  827. package/dist/timeline/redaction.js +119 -0
  828. package/dist/timeline/redaction.js.map +1 -0
  829. package/dist/tools/ask-user.d.ts +26 -0
  830. package/dist/tools/ask-user.d.ts.map +1 -1
  831. package/dist/tools/ask-user.js +33 -1
  832. package/dist/tools/ask-user.js.map +1 -1
  833. package/dist/tools/background/task-types.d.ts +1 -1
  834. package/dist/tools/edit.d.ts +2 -0
  835. package/dist/tools/edit.d.ts.map +1 -1
  836. package/dist/tools/edit.js +27 -7
  837. package/dist/tools/edit.js.map +1 -1
  838. package/dist/tools/index.d.ts +9 -0
  839. package/dist/tools/index.d.ts.map +1 -1
  840. package/dist/tools/pipeline.d.ts.map +1 -1
  841. package/dist/tools/pipeline.js +16 -7
  842. package/dist/tools/pipeline.js.map +1 -1
  843. package/dist/tools/write.d.ts +2 -0
  844. package/dist/tools/write.d.ts.map +1 -1
  845. package/dist/tools/write.js +24 -6
  846. package/dist/tools/write.js.map +1 -1
  847. package/dist/tracking/cost-tracker.d.ts +15 -12
  848. package/dist/tracking/cost-tracker.d.ts.map +1 -1
  849. package/dist/tracking/cost-tracker.js +29 -40
  850. package/dist/tracking/cost-tracker.js.map +1 -1
  851. package/dist/utils/checkpoint-profiler.d.ts +29 -0
  852. package/dist/utils/checkpoint-profiler.d.ts.map +1 -0
  853. package/dist/utils/checkpoint-profiler.js +118 -0
  854. package/dist/utils/checkpoint-profiler.js.map +1 -0
  855. package/dist/utils/downstream-http.d.ts +21 -0
  856. package/dist/utils/downstream-http.d.ts.map +1 -0
  857. package/dist/utils/downstream-http.js +151 -0
  858. package/dist/utils/downstream-http.js.map +1 -0
  859. package/dist/utils/downstream.d.ts +18 -0
  860. package/dist/utils/downstream.d.ts.map +1 -0
  861. package/dist/utils/downstream.js +47 -0
  862. package/dist/utils/downstream.js.map +1 -0
  863. package/dist/utils/logger.d.ts +3 -1
  864. package/dist/utils/logger.d.ts.map +1 -1
  865. package/dist/utils/logger.js +12 -1
  866. package/dist/utils/logger.js.map +1 -1
  867. package/dist/utils/oauth-http.d.ts +8 -0
  868. package/dist/utils/oauth-http.d.ts.map +1 -0
  869. package/dist/utils/oauth-http.js +41 -0
  870. package/dist/utils/oauth-http.js.map +1 -0
  871. package/dist/utils/path-utils.d.ts +2 -0
  872. package/dist/utils/path-utils.d.ts.map +1 -0
  873. package/dist/utils/path-utils.js +12 -0
  874. package/dist/utils/path-utils.js.map +1 -0
  875. package/dist/utils/path-validation.d.ts +1 -1
  876. package/dist/utils/path-validation.d.ts.map +1 -1
  877. package/dist/utils/path-validation.js +3 -3
  878. package/dist/utils/path-validation.js.map +1 -1
  879. package/dist/version.json +2 -2
  880. package/dist/web-server.d.ts +7 -1
  881. package/dist/web-server.d.ts.map +1 -1
  882. package/dist/web-server.js +117 -15
  883. package/dist/web-server.js.map +1 -1
  884. package/dist/webhooks/delivery.d.ts.map +1 -1
  885. package/dist/webhooks/delivery.js +9 -12
  886. package/dist/webhooks/delivery.js.map +1 -1
  887. package/node_modules/@bufbuild/protobuf/dist/cjs/descriptors.d.ts +12 -5
  888. package/node_modules/@bufbuild/protobuf/dist/cjs/from-binary.js +7 -7
  889. package/node_modules/@bufbuild/protobuf/dist/cjs/from-json.d.ts +1 -1
  890. package/node_modules/@bufbuild/protobuf/dist/cjs/from-json.js +1 -1
  891. package/node_modules/@bufbuild/protobuf/dist/cjs/reflect/path.d.ts +1 -1
  892. package/node_modules/@bufbuild/protobuf/dist/cjs/registry.js +24 -1
  893. package/node_modules/@bufbuild/protobuf/dist/cjs/to-json.d.ts +1 -1
  894. package/node_modules/@bufbuild/protobuf/dist/cjs/to-json.js +9 -10
  895. package/node_modules/@bufbuild/protobuf/dist/cjs/types.d.ts +1 -1
  896. package/node_modules/@bufbuild/protobuf/dist/cjs/wire/binary-encoding.d.ts +9 -7
  897. package/node_modules/@bufbuild/protobuf/dist/cjs/wire/binary-encoding.js +18 -8
  898. package/node_modules/@bufbuild/protobuf/dist/cjs/wire/text-encoding.d.ts +4 -2
  899. package/node_modules/@bufbuild/protobuf/dist/cjs/wire/text-encoding.js +8 -1
  900. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +1 -1
  901. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +2 -2
  902. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +37 -23
  903. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
  904. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +32 -36
  905. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/go_features_pb.d.ts +65 -0
  906. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/go_features_pb.js +38 -2
  907. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +5 -5
  908. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +3 -3
  909. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/wrappers.d.ts +10 -0
  910. package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/wrappers.js +24 -0
  911. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.d.ts +12 -5
  912. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +7 -7
  913. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.d.ts +1 -1
  914. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +2 -2
  915. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.d.ts +1 -1
  916. package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +24 -1
  917. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.d.ts +1 -1
  918. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +10 -11
  919. package/node_modules/@bufbuild/protobuf/dist/esm/types.d.ts +1 -1
  920. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +9 -7
  921. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +18 -8
  922. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +4 -2
  923. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +8 -1
  924. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +1 -1
  925. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +2 -2
  926. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +37 -23
  927. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
  928. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +32 -36
  929. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.d.ts +65 -0
  930. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.js +37 -1
  931. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +5 -5
  932. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +3 -3
  933. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.d.ts +10 -0
  934. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +23 -0
  935. package/node_modules/@bufbuild/protobuf/package.json +1 -1
  936. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +305 -2
  937. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
  938. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +34 -4
  939. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
  940. package/node_modules/@evalops/contracts/dist/index.d.ts +88 -0
  941. package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  942. package/node_modules/@evalops/contracts/dist/index.js +2 -0
  943. package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  944. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +77 -77
  945. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
  946. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +1 -1
  947. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
  948. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +182 -0
  949. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -0
  950. package/node_modules/@evalops/contracts/dist/runtime-app-server.js +83 -0
  951. package/node_modules/@evalops/contracts/dist/runtime-app-server.js.map +1 -0
  952. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +133 -0
  953. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -0
  954. package/node_modules/@evalops/contracts/dist/runtime-server-request.js +68 -0
  955. package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -0
  956. package/node_modules/@evalops/contracts/dist/schemas.d.ts +178 -0
  957. package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
  958. package/node_modules/@evalops/contracts/dist/schemas.js +165 -0
  959. package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
  960. package/node_modules/@evalops/contracts/dist/typebox-utils.d.ts +2 -0
  961. package/node_modules/@evalops/contracts/dist/typebox-utils.d.ts.map +1 -0
  962. package/node_modules/@evalops/contracts/dist/typebox-utils.js +5 -0
  963. package/node_modules/@evalops/contracts/dist/typebox-utils.js.map +1 -0
  964. package/node_modules/@evalops/contracts/dist/validators.d.ts +4 -1
  965. package/node_modules/@evalops/contracts/dist/validators.d.ts.map +1 -1
  966. package/node_modules/@evalops/contracts/dist/validators.js +4 -1
  967. package/node_modules/@evalops/contracts/dist/validators.js.map +1 -1
  968. package/node_modules/@evalops/contracts/package.json +1 -1
  969. package/node_modules/@evalops/tui/package.json +1 -1
  970. package/node_modules/string-width/index.js +93 -9
  971. package/node_modules/string-width/package.json +1 -1
  972. package/package.json +32 -25
  973. package/dist/cli-tui/commands/grouped/auth-commands.d.ts.map +0 -1
  974. package/dist/cli-tui/commands/grouped/auth-commands.js.map +0 -1
  975. package/dist/cli-tui/commands/grouped/config-commands.d.ts.map +0 -1
  976. package/dist/cli-tui/commands/grouped/config-commands.js.map +0 -1
  977. package/dist/cli-tui/commands/grouped/diag-commands.d.ts.map +0 -1
  978. package/dist/cli-tui/commands/grouped/diag-commands.js.map +0 -1
  979. package/dist/cli-tui/commands/grouped/git-commands.d.ts.map +0 -1
  980. package/dist/cli-tui/commands/grouped/git-commands.js.map +0 -1
  981. package/dist/cli-tui/commands/grouped/index.d.ts.map +0 -1
  982. package/dist/cli-tui/commands/grouped/index.js.map +0 -1
  983. package/dist/cli-tui/commands/grouped/safety-commands.d.ts.map +0 -1
  984. package/dist/cli-tui/commands/grouped/safety-commands.js.map +0 -1
  985. package/dist/cli-tui/commands/grouped/session-commands.d.ts.map +0 -1
  986. package/dist/cli-tui/commands/grouped/session-commands.js.map +0 -1
  987. package/dist/cli-tui/commands/grouped/tools-commands.d.ts.map +0 -1
  988. package/dist/cli-tui/commands/grouped/tools-commands.js.map +0 -1
  989. package/dist/cli-tui/commands/grouped/ui-commands.d.ts.map +0 -1
  990. package/dist/cli-tui/commands/grouped/ui-commands.js.map +0 -1
  991. package/dist/cli-tui/commands/grouped/undo-commands.d.ts.map +0 -1
  992. package/dist/cli-tui/commands/grouped/undo-commands.js.map +0 -1
  993. package/dist/cli-tui/commands/grouped/usage-commands.d.ts.map +0 -1
  994. package/dist/cli-tui/commands/grouped/usage-commands.js.map +0 -1
  995. package/dist/cli-tui/commands/grouped/utils.d.ts.map +0 -1
  996. package/dist/cli-tui/commands/grouped/utils.js.map +0 -1
  997. package/dist/cli-tui/commands/grouped-command-handlers.d.ts.map +0 -1
  998. package/dist/cli-tui/commands/grouped-command-handlers.js +0 -135
  999. package/dist/cli-tui/commands/grouped-command-handlers.js.map +0 -1
  1000. package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.d.ts +0 -78
  1001. package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.d.ts.map +0 -1
  1002. package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.js +0 -129
  1003. package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.js.map +0 -1
  1004. package/node_modules/@evalops/memory/dist/client.d.ts +0 -94
  1005. package/node_modules/@evalops/memory/dist/client.js +0 -503
  1006. package/node_modules/@evalops/memory/gen/proto/dist/memory/v1/memory_pb.d.ts +0 -608
  1007. package/node_modules/@evalops/memory/gen/proto/dist/memory/v1/memory_pb.js +0 -187
  1008. package/node_modules/@evalops/memory/package.json +0 -26
  1009. /package/dist/cli-tui/commands/{grouped → subcommands}/usage-commands.d.ts +0 -0
@@ -0,0 +1,86 @@
1
+ import { createHash } from "node:crypto";
2
+ function hashSkillContent(content) {
3
+ return createHash("sha256").update(content).digest("hex");
4
+ }
5
+ function readMetadataValue(metadata, key) {
6
+ const value = metadata?.[key]?.trim();
7
+ return value ? value : undefined;
8
+ }
9
+ function normalizeSkillArtifactMetadata(value) {
10
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
11
+ return undefined;
12
+ }
13
+ const candidate = value;
14
+ if (typeof candidate.name !== "string" ||
15
+ candidate.name.trim().length === 0 ||
16
+ typeof candidate.hash !== "string" ||
17
+ candidate.hash.trim().length === 0 ||
18
+ typeof candidate.source !== "string" ||
19
+ candidate.source.trim().length === 0) {
20
+ return undefined;
21
+ }
22
+ return {
23
+ name: candidate.name.trim(),
24
+ hash: candidate.hash.trim(),
25
+ source: candidate.source.trim(),
26
+ ...(typeof candidate.artifactId === "string" &&
27
+ candidate.artifactId.trim().length > 0
28
+ ? { artifactId: candidate.artifactId.trim() }
29
+ : {}),
30
+ ...(typeof candidate.version === "string" &&
31
+ candidate.version.trim().length > 0
32
+ ? { version: candidate.version.trim() }
33
+ : {}),
34
+ ...(typeof candidate.sourcePath === "string" &&
35
+ candidate.sourcePath.trim().length > 0
36
+ ? { sourcePath: candidate.sourcePath.trim() }
37
+ : {}),
38
+ ...(typeof candidate.scope === "string" && candidate.scope.trim().length > 0
39
+ ? { scope: candidate.scope.trim() }
40
+ : {}),
41
+ ...(typeof candidate.workspaceId === "string" &&
42
+ candidate.workspaceId.trim().length > 0
43
+ ? { workspaceId: candidate.workspaceId.trim() }
44
+ : {}),
45
+ ...(typeof candidate.ownerId === "string" &&
46
+ candidate.ownerId.trim().length > 0
47
+ ? { ownerId: candidate.ownerId.trim() }
48
+ : {}),
49
+ };
50
+ }
51
+ export function buildSkillArtifactMetadata(skill) {
52
+ return {
53
+ name: skill.name,
54
+ hash: hashSkillContent(skill.content),
55
+ source: skill.sourceType,
56
+ ...(readMetadataValue(skill.metadata, "skillServiceId")
57
+ ? { artifactId: readMetadataValue(skill.metadata, "skillServiceId") }
58
+ : {}),
59
+ ...((readMetadataValue(skill.metadata, "currentVersion") ??
60
+ readMetadataValue(skill.metadata, "version") ??
61
+ skill.version)
62
+ ? {
63
+ version: readMetadataValue(skill.metadata, "currentVersion") ??
64
+ readMetadataValue(skill.metadata, "version") ??
65
+ skill.version,
66
+ }
67
+ : {}),
68
+ ...(skill.sourcePath ? { sourcePath: skill.sourcePath } : {}),
69
+ ...(readMetadataValue(skill.metadata, "scope")
70
+ ? { scope: readMetadataValue(skill.metadata, "scope") }
71
+ : {}),
72
+ ...(readMetadataValue(skill.metadata, "workspaceId")
73
+ ? { workspaceId: readMetadataValue(skill.metadata, "workspaceId") }
74
+ : {}),
75
+ ...(readMetadataValue(skill.metadata, "ownerId")
76
+ ? { ownerId: readMetadataValue(skill.metadata, "ownerId") }
77
+ : {}),
78
+ };
79
+ }
80
+ export function getSkillArtifactMetadataFromDetails(details) {
81
+ if (!details || typeof details !== "object" || Array.isArray(details)) {
82
+ return undefined;
83
+ }
84
+ return normalizeSkillArtifactMetadata(details.skillMetadata);
85
+ }
86
+ //# sourceMappingURL=artifact-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-metadata.js","sourceRoot":"","sources":["../../src/skills/artifact-metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { LoadedSkill } from \"./loader.js\";\n\nexport type SkillArtifactSource = LoadedSkill[\"sourceType\"];\n\nexport interface SkillArtifactMetadata {\n\tname: string;\n\thash: string;\n\tsource: SkillArtifactSource;\n\tartifactId?: string;\n\tversion?: string;\n\tsourcePath?: string;\n\tscope?: string;\n\tworkspaceId?: string;\n\townerId?: string;\n}\n\nfunction hashSkillContent(content: string): string {\n\treturn createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nfunction readMetadataValue(\n\tmetadata: Record<string, string> | undefined,\n\tkey: string,\n): string | undefined {\n\tconst value = metadata?.[key]?.trim();\n\treturn value ? value : undefined;\n}\n\nfunction normalizeSkillArtifactMetadata(\n\tvalue: unknown,\n): SkillArtifactMetadata | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst candidate = value as Record<string, unknown>;\n\tif (\n\t\ttypeof candidate.name !== \"string\" ||\n\t\tcandidate.name.trim().length === 0 ||\n\t\ttypeof candidate.hash !== \"string\" ||\n\t\tcandidate.hash.trim().length === 0 ||\n\t\ttypeof candidate.source !== \"string\" ||\n\t\tcandidate.source.trim().length === 0\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tname: candidate.name.trim(),\n\t\thash: candidate.hash.trim(),\n\t\tsource: candidate.source.trim() as SkillArtifactSource,\n\t\t...(typeof candidate.artifactId === \"string\" &&\n\t\tcandidate.artifactId.trim().length > 0\n\t\t\t? { artifactId: candidate.artifactId.trim() }\n\t\t\t: {}),\n\t\t...(typeof candidate.version === \"string\" &&\n\t\tcandidate.version.trim().length > 0\n\t\t\t? { version: candidate.version.trim() }\n\t\t\t: {}),\n\t\t...(typeof candidate.sourcePath === \"string\" &&\n\t\tcandidate.sourcePath.trim().length > 0\n\t\t\t? { sourcePath: candidate.sourcePath.trim() }\n\t\t\t: {}),\n\t\t...(typeof candidate.scope === \"string\" && candidate.scope.trim().length > 0\n\t\t\t? { scope: candidate.scope.trim() }\n\t\t\t: {}),\n\t\t...(typeof candidate.workspaceId === \"string\" &&\n\t\tcandidate.workspaceId.trim().length > 0\n\t\t\t? { workspaceId: candidate.workspaceId.trim() }\n\t\t\t: {}),\n\t\t...(typeof candidate.ownerId === \"string\" &&\n\t\tcandidate.ownerId.trim().length > 0\n\t\t\t? { ownerId: candidate.ownerId.trim() }\n\t\t\t: {}),\n\t};\n}\n\nexport function buildSkillArtifactMetadata(\n\tskill: LoadedSkill,\n): SkillArtifactMetadata {\n\treturn {\n\t\tname: skill.name,\n\t\thash: hashSkillContent(skill.content),\n\t\tsource: skill.sourceType,\n\t\t...(readMetadataValue(skill.metadata, \"skillServiceId\")\n\t\t\t? { artifactId: readMetadataValue(skill.metadata, \"skillServiceId\") }\n\t\t\t: {}),\n\t\t...((readMetadataValue(skill.metadata, \"currentVersion\") ??\n\t\treadMetadataValue(skill.metadata, \"version\") ??\n\t\tskill.version)\n\t\t\t? {\n\t\t\t\t\tversion:\n\t\t\t\t\t\treadMetadataValue(skill.metadata, \"currentVersion\") ??\n\t\t\t\t\t\treadMetadataValue(skill.metadata, \"version\") ??\n\t\t\t\t\t\tskill.version,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(skill.sourcePath ? { sourcePath: skill.sourcePath } : {}),\n\t\t...(readMetadataValue(skill.metadata, \"scope\")\n\t\t\t? { scope: readMetadataValue(skill.metadata, \"scope\") }\n\t\t\t: {}),\n\t\t...(readMetadataValue(skill.metadata, \"workspaceId\")\n\t\t\t? { workspaceId: readMetadataValue(skill.metadata, \"workspaceId\") }\n\t\t\t: {}),\n\t\t...(readMetadataValue(skill.metadata, \"ownerId\")\n\t\t\t? { ownerId: readMetadataValue(skill.metadata, \"ownerId\") }\n\t\t\t: {}),\n\t};\n}\n\nexport function getSkillArtifactMetadataFromDetails(\n\tdetails: unknown,\n): SkillArtifactMetadata | undefined {\n\tif (!details || typeof details !== \"object\" || Array.isArray(details)) {\n\t\treturn undefined;\n\t}\n\treturn normalizeSkillArtifactMetadata(\n\t\t(details as { skillMetadata?: unknown }).skillMetadata,\n\t);\n}\n"]}
@@ -47,8 +47,8 @@ export interface SkillDefinition {
47
47
  export interface LoadedSkill extends SkillDefinition {
48
48
  /** Source directory path */
49
49
  sourcePath: string;
50
- /** Source type: 'user', 'project', or 'system' */
51
- sourceType: "user" | "project" | "system";
50
+ /** Source type: 'user', 'project', 'system', or 'service' */
51
+ sourceType: "user" | "project" | "system" | "service";
52
52
  /** Full markdown content (without frontmatter) */
53
53
  content: string;
54
54
  /** List of bundled resource files */
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
@@ -602,6 +602,7 @@ export function skillsToPrompt(skills) {
602
602
  */
603
603
  export function formatSkillListItem(skill) {
604
604
  const sourceLabels = {
605
+ service: "(service)",
605
606
  system: "(system)",
606
607
  user: "(user)",
607
608
  project: "(project)",
@@ -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', or 'system' */\n\tsourceType: \"user\" | \"project\" | \"system\";\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\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 { 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"]}
@@ -0,0 +1,42 @@
1
+ import { type DownstreamFailureMode as DownstreamHttpFailureMode } from "../utils/downstream-http.js";
2
+ import type { LoadedSkill } from "./loader.js";
3
+ export declare const SKILLS_CALL_FAILURE_MODES: {
4
+ readonly listSkills: {
5
+ readonly optional: "fail-open";
6
+ readonly required: "fail-closed";
7
+ };
8
+ };
9
+ export interface SkillsServiceConfig {
10
+ baseUrl?: string;
11
+ token?: string;
12
+ workspaceId?: string;
13
+ surface?: string;
14
+ entityId?: string;
15
+ limit?: number;
16
+ timeoutMs?: number;
17
+ maxAttempts?: number;
18
+ circuitFailureThreshold?: number;
19
+ circuitResetTimeoutMs?: number;
20
+ circuitSuccessThreshold?: number;
21
+ required?: boolean;
22
+ }
23
+ export interface ResolvedSkillsServiceConfig {
24
+ baseUrl: string;
25
+ token?: string;
26
+ workspaceId: string;
27
+ surface: string;
28
+ entityId?: string;
29
+ limit: number;
30
+ timeoutMs: number;
31
+ maxAttempts: number;
32
+ circuitFailureThreshold: number;
33
+ circuitResetTimeoutMs: number;
34
+ circuitSuccessThreshold: number;
35
+ failureMode: DownstreamHttpFailureMode;
36
+ }
37
+ export declare function resolveSkillsServiceConfig(config: SkillsServiceConfig | false | undefined): ResolvedSkillsServiceConfig | null;
38
+ export declare function loadSkillsFromService(config: ResolvedSkillsServiceConfig, options?: {
39
+ signal?: AbortSignal;
40
+ }): Promise<LoadedSkill[]>;
41
+ export declare function resetSkillsDownstreamForTests(): void;
42
+ //# sourceMappingURL=service-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-client.d.ts","sourceRoot":"","sources":["../../src/skills/service-client.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,qBAAqB,IAAI,yBAAyB,EAEvD,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C,eAAO,MAAM,yBAAyB;;;;;CAK5B,CAAC;AAIX,MAAM,WAAW,mBAAmB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,WAAW,EAAE,yBAAyB,CAAC;CACvC;AA8ED,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,mBAAmB,GAAG,KAAK,GAAG,SAAS,GAC7C,2BAA2B,GAAG,IAAI,CAkGpC;AAmHD,wBAAsB,qBAAqB,CAC1C,MAAM,EAAE,2BAA2B,EACnC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAChC,OAAO,CAAC,WAAW,EAAE,CAAC,CAyCxB;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}