@josstei/maestro 1.6.4-rc.1

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 (655) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/CHANGELOG.md +485 -0
  3. package/EXAMPLES.md +255 -0
  4. package/GEMINI.md +231 -0
  5. package/LICENSE +201 -0
  6. package/QWEN.md +241 -0
  7. package/README.md +220 -0
  8. package/agents/accessibility_specialist.md +20 -0
  9. package/agents/analytics_engineer.md +22 -0
  10. package/agents/api_designer.md +19 -0
  11. package/agents/architect.md +19 -0
  12. package/agents/cloud_architect.md +19 -0
  13. package/agents/cobol_engineer.md +22 -0
  14. package/agents/code_reviewer.md +17 -0
  15. package/agents/coder.md +22 -0
  16. package/agents/compliance_reviewer.md +19 -0
  17. package/agents/content_strategist.md +19 -0
  18. package/agents/copywriter.md +19 -0
  19. package/agents/data_engineer.md +22 -0
  20. package/agents/database_administrator.md +21 -0
  21. package/agents/db2_dba.md +21 -0
  22. package/agents/debugger.md +19 -0
  23. package/agents/design_system_engineer.md +22 -0
  24. package/agents/devops_engineer.md +23 -0
  25. package/agents/hlasm_assembler_specialist.md +22 -0
  26. package/agents/i18n_specialist.md +21 -0
  27. package/agents/ibm_i_specialist.md +22 -0
  28. package/agents/integration_engineer.md +23 -0
  29. package/agents/ml_engineer.md +23 -0
  30. package/agents/mlops_engineer.md +23 -0
  31. package/agents/mobile_engineer.md +23 -0
  32. package/agents/observability_engineer.md +23 -0
  33. package/agents/performance_engineer.md +21 -0
  34. package/agents/platform_engineer.md +24 -0
  35. package/agents/product_manager.md +20 -0
  36. package/agents/prompt_engineer.md +22 -0
  37. package/agents/refactor.md +22 -0
  38. package/agents/release_manager.md +22 -0
  39. package/agents/security_engineer.md +21 -0
  40. package/agents/seo_specialist.md +21 -0
  41. package/agents/site_reliability_engineer.md +21 -0
  42. package/agents/solutions_architect.md +19 -0
  43. package/agents/technical_writer.md +21 -0
  44. package/agents/tester.md +23 -0
  45. package/agents/ux_designer.md +20 -0
  46. package/agents/zos_sysprog.md +21 -0
  47. package/bin/maestro-mcp-server.js +10 -0
  48. package/claude/.claude-plugin/plugin.json +21 -0
  49. package/claude/.mcp.json +11 -0
  50. package/claude/README.md +191 -0
  51. package/claude/agents/accessibility-specialist.md +36 -0
  52. package/claude/agents/analytics-engineer.md +38 -0
  53. package/claude/agents/api-designer.md +33 -0
  54. package/claude/agents/architect.md +33 -0
  55. package/claude/agents/cloud-architect.md +33 -0
  56. package/claude/agents/cobol-engineer.md +38 -0
  57. package/claude/agents/code-reviewer.md +31 -0
  58. package/claude/agents/coder.md +38 -0
  59. package/claude/agents/compliance-reviewer.md +33 -0
  60. package/claude/agents/content-strategist.md +33 -0
  61. package/claude/agents/copywriter.md +33 -0
  62. package/claude/agents/data-engineer.md +37 -0
  63. package/claude/agents/database-administrator.md +37 -0
  64. package/claude/agents/db2-dba.md +37 -0
  65. package/claude/agents/debugger.md +32 -0
  66. package/claude/agents/design-system-engineer.md +38 -0
  67. package/claude/agents/devops-engineer.md +39 -0
  68. package/claude/agents/hlasm-assembler-specialist.md +38 -0
  69. package/claude/agents/i18n-specialist.md +37 -0
  70. package/claude/agents/ibm-i-specialist.md +38 -0
  71. package/claude/agents/integration-engineer.md +39 -0
  72. package/claude/agents/ml-engineer.md +39 -0
  73. package/claude/agents/mlops-engineer.md +39 -0
  74. package/claude/agents/mobile-engineer.md +39 -0
  75. package/claude/agents/observability-engineer.md +39 -0
  76. package/claude/agents/performance-engineer.md +34 -0
  77. package/claude/agents/platform-engineer.md +40 -0
  78. package/claude/agents/product-manager.md +34 -0
  79. package/claude/agents/prompt-engineer.md +38 -0
  80. package/claude/agents/refactor.md +38 -0
  81. package/claude/agents/release-manager.md +38 -0
  82. package/claude/agents/security-engineer.md +37 -0
  83. package/claude/agents/seo-specialist.md +37 -0
  84. package/claude/agents/site-reliability-engineer.md +37 -0
  85. package/claude/agents/solutions-architect.md +33 -0
  86. package/claude/agents/technical-writer.md +37 -0
  87. package/claude/agents/tester.md +39 -0
  88. package/claude/agents/ux-designer.md +34 -0
  89. package/claude/agents/zos-sysprog.md +37 -0
  90. package/claude/hooks/claude-hooks.json +48 -0
  91. package/claude/mcp/maestro-server.js +9 -0
  92. package/claude/mcp-config.example.json +9 -0
  93. package/claude/scripts/adapters/claude-adapter.js +7 -0
  94. package/claude/scripts/hook-runner.js +8 -0
  95. package/claude/scripts/policy-enforcer.js +294 -0
  96. package/claude/skills/a11y-audit/SKILL.md +26 -0
  97. package/claude/skills/archive/SKILL.md +24 -0
  98. package/claude/skills/code-review/SKILL.md +7 -0
  99. package/claude/skills/compliance-check/SKILL.md +26 -0
  100. package/claude/skills/debug-workflow/SKILL.md +27 -0
  101. package/claude/skills/delegation/SKILL.md +7 -0
  102. package/claude/skills/design-dialogue/SKILL.md +7 -0
  103. package/claude/skills/execute/SKILL.md +38 -0
  104. package/claude/skills/execution/SKILL.md +7 -0
  105. package/claude/skills/implementation-planning/SKILL.md +7 -0
  106. package/claude/skills/orchestrate/SKILL.md +38 -0
  107. package/claude/skills/perf-check/SKILL.md +26 -0
  108. package/claude/skills/resume-session/SKILL.md +38 -0
  109. package/claude/skills/review-code/SKILL.md +27 -0
  110. package/claude/skills/security-audit/SKILL.md +28 -0
  111. package/claude/skills/seo-audit/SKILL.md +26 -0
  112. package/claude/skills/session-management/SKILL.md +7 -0
  113. package/claude/skills/status/SKILL.md +22 -0
  114. package/claude/skills/validation/SKILL.md +7 -0
  115. package/claude/src/agents/accessibility-specialist.md +163 -0
  116. package/claude/src/agents/analytics-engineer.md +182 -0
  117. package/claude/src/agents/api-designer.md +124 -0
  118. package/claude/src/agents/architect.md +120 -0
  119. package/claude/src/agents/cloud-architect.md +134 -0
  120. package/claude/src/agents/cobol-engineer.md +127 -0
  121. package/claude/src/agents/code-reviewer.md +123 -0
  122. package/claude/src/agents/coder.md +132 -0
  123. package/claude/src/agents/compliance-reviewer.md +219 -0
  124. package/claude/src/agents/content-strategist.md +111 -0
  125. package/claude/src/agents/copywriter.md +113 -0
  126. package/claude/src/agents/data-engineer.md +130 -0
  127. package/claude/src/agents/database-administrator.md +126 -0
  128. package/claude/src/agents/db2-dba.md +124 -0
  129. package/claude/src/agents/debugger.md +133 -0
  130. package/claude/src/agents/design-system-engineer.md +258 -0
  131. package/claude/src/agents/devops-engineer.md +138 -0
  132. package/claude/src/agents/hlasm-assembler-specialist.md +134 -0
  133. package/claude/src/agents/i18n-specialist.md +241 -0
  134. package/claude/src/agents/ibm-i-specialist.md +132 -0
  135. package/claude/src/agents/integration-engineer.md +133 -0
  136. package/claude/src/agents/ml-engineer.md +115 -0
  137. package/claude/src/agents/mlops-engineer.md +116 -0
  138. package/claude/src/agents/mobile-engineer.md +115 -0
  139. package/claude/src/agents/observability-engineer.md +133 -0
  140. package/claude/src/agents/performance-engineer.md +139 -0
  141. package/claude/src/agents/platform-engineer.md +129 -0
  142. package/claude/src/agents/product-manager.md +170 -0
  143. package/claude/src/agents/prompt-engineer.md +129 -0
  144. package/claude/src/agents/refactor.md +138 -0
  145. package/claude/src/agents/release-manager.md +132 -0
  146. package/claude/src/agents/security-engineer.md +143 -0
  147. package/claude/src/agents/seo-specialist.md +129 -0
  148. package/claude/src/agents/site-reliability-engineer.md +131 -0
  149. package/claude/src/agents/solutions-architect.md +137 -0
  150. package/claude/src/agents/technical-writer.md +129 -0
  151. package/claude/src/agents/tester.md +135 -0
  152. package/claude/src/agents/ux-designer.md +168 -0
  153. package/claude/src/agents/zos-sysprog.md +134 -0
  154. package/claude/src/config/setting-resolver.js +32 -0
  155. package/claude/src/core/agent-registry.js +67 -0
  156. package/claude/src/core/canonical-source.js +39 -0
  157. package/claude/src/core/env-file-parser.js +82 -0
  158. package/claude/src/core/feature-blocks.js +34 -0
  159. package/claude/src/core/logger.js +12 -0
  160. package/claude/src/core/markdown-state.js +36 -0
  161. package/claude/src/core/policy-rules.js +32 -0
  162. package/claude/src/core/project-root-resolver.js +184 -0
  163. package/claude/src/core/stdin-reader.js +77 -0
  164. package/claude/src/core/version.js +50 -0
  165. package/claude/src/entry-points/core-command-registry.js +37 -0
  166. package/claude/src/entry-points/preamble-builders.js +54 -0
  167. package/claude/src/entry-points/registry.js +199 -0
  168. package/claude/src/entry-points/templates/claude-core-command.md.tmpl +38 -0
  169. package/claude/src/entry-points/templates/claude-skill.md.tmpl +18 -0
  170. package/claude/src/entry-points/templates/codex-core-command.md.tmpl +16 -0
  171. package/claude/src/entry-points/templates/codex-skill.md.tmpl +11 -0
  172. package/claude/src/entry-points/templates/gemini-command.toml.tmpl +17 -0
  173. package/claude/src/entry-points/templates/gemini-core-command.toml.tmpl +30 -0
  174. package/claude/src/generated/agent-registry.json +630 -0
  175. package/claude/src/generated/hook-registry.json +18 -0
  176. package/claude/src/generated/resource-registry.json +16 -0
  177. package/claude/src/hooks/logic/after-agent-logic.js +54 -0
  178. package/claude/src/hooks/logic/before-agent-logic.js +57 -0
  179. package/claude/src/hooks/logic/hook-state.js +127 -0
  180. package/claude/src/hooks/logic/session-end-logic.js +17 -0
  181. package/claude/src/hooks/logic/session-start-logic.js +25 -0
  182. package/claude/src/lib/discovery/index.js +172 -0
  183. package/claude/src/lib/errors/index.js +104 -0
  184. package/claude/src/lib/framework-detection.js +50 -0
  185. package/claude/src/lib/frontmatter/index.js +262 -0
  186. package/claude/src/lib/io/index.js +96 -0
  187. package/claude/src/lib/naming/index.js +94 -0
  188. package/claude/src/lib/validation/index.js +124 -0
  189. package/claude/src/lib/yaml-emit.js +38 -0
  190. package/claude/src/mcp/content/provider.js +68 -0
  191. package/claude/src/mcp/content/runtime-content.js +188 -0
  192. package/claude/src/mcp/contracts/cache-path-rejector.js +39 -0
  193. package/claude/src/mcp/contracts/downstream-context.js +106 -0
  194. package/claude/src/mcp/contracts/plan-schema.js +148 -0
  195. package/claude/src/mcp/contracts/workspace-marker.js +61 -0
  196. package/claude/src/mcp/core/create-server.js +76 -0
  197. package/claude/src/mcp/core/line-reader.js +35 -0
  198. package/claude/src/mcp/core/project-root-cache.js +120 -0
  199. package/claude/src/mcp/core/protocol-dispatcher.js +274 -0
  200. package/claude/src/mcp/core/recovery-hints.js +43 -0
  201. package/claude/src/mcp/core/tool-outcome.js +77 -0
  202. package/claude/src/mcp/core/tool-registry.js +82 -0
  203. package/claude/src/mcp/handlers/assess-task-complexity.js +108 -0
  204. package/claude/src/mcp/handlers/blocker-parser.js +34 -0
  205. package/claude/src/mcp/handlers/design-gate.js +393 -0
  206. package/claude/src/mcp/handlers/get-agent.js +54 -0
  207. package/claude/src/mcp/handlers/get-runtime-context.js +49 -0
  208. package/claude/src/mcp/handlers/get-skill-content.js +51 -0
  209. package/claude/src/mcp/handlers/initialize-workspace.js +45 -0
  210. package/claude/src/mcp/handlers/reconciliation.js +224 -0
  211. package/claude/src/mcp/handlers/resolve-settings.js +39 -0
  212. package/claude/src/mcp/handlers/session-state-core.js +108 -0
  213. package/claude/src/mcp/handlers/session-state-tools.js +562 -0
  214. package/claude/src/mcp/handlers/validate-plan.js +76 -0
  215. package/claude/src/mcp/maestro-server.js +122 -0
  216. package/claude/src/mcp/runtime/runtime-config-map.js +70 -0
  217. package/claude/src/mcp/tool-packs/content/index.js +80 -0
  218. package/claude/src/mcp/tool-packs/contracts.js +30 -0
  219. package/claude/src/mcp/tool-packs/index.js +15 -0
  220. package/claude/src/mcp/tool-packs/session/index.js +243 -0
  221. package/claude/src/mcp/tool-packs/workspace/index.js +98 -0
  222. package/claude/src/mcp/utils/extension-root.js +31 -0
  223. package/claude/src/mcp/validation/agent-checker.js +81 -0
  224. package/claude/src/mcp/validation/dag-checker.js +214 -0
  225. package/claude/src/mcp/validation/file-overlap-checker.js +63 -0
  226. package/claude/src/mcp/validation/schema-checker.js +108 -0
  227. package/claude/src/platforms/claude/runtime-config.js +60 -0
  228. package/claude/src/platforms/shared/adapters/claude-adapter.js +36 -0
  229. package/claude/src/platforms/shared/adapters/conventions.js +29 -0
  230. package/claude/src/platforms/shared/adapters/exit-codes.js +6 -0
  231. package/claude/src/platforms/shared/adapters/factory.js +40 -0
  232. package/claude/src/platforms/shared/agent-names.js +10 -0
  233. package/claude/src/platforms/shared/hook-runner.js +52 -0
  234. package/claude/src/references/architecture.md +139 -0
  235. package/claude/src/references/orchestration-steps.md +193 -0
  236. package/claude/src/skills/shared/code-review/SKILL.md +145 -0
  237. package/claude/src/skills/shared/delegation/SKILL.md +370 -0
  238. package/claude/src/skills/shared/delegation/protocols/agent-base-protocol.md +145 -0
  239. package/claude/src/skills/shared/delegation/protocols/filesystem-safety-protocol.md +31 -0
  240. package/claude/src/skills/shared/design-dialogue/SKILL.md +284 -0
  241. package/claude/src/skills/shared/execution/SKILL.md +258 -0
  242. package/claude/src/skills/shared/implementation-planning/SKILL.md +303 -0
  243. package/claude/src/skills/shared/session-management/SKILL.md +314 -0
  244. package/claude/src/skills/shared/validation/SKILL.md +204 -0
  245. package/claude/src/state/session-state.js +113 -0
  246. package/claude/src/templates/design-document.md +95 -0
  247. package/claude/src/templates/implementation-plan.md +86 -0
  248. package/claude/src/templates/session-state.md +68 -0
  249. package/claude/src/version.json +3 -0
  250. package/commands/maestro/a11y-audit.toml +22 -0
  251. package/commands/maestro/archive.toml +23 -0
  252. package/commands/maestro/compliance-check.toml +22 -0
  253. package/commands/maestro/debug.toml +23 -0
  254. package/commands/maestro/execute.toml +30 -0
  255. package/commands/maestro/orchestrate.toml +30 -0
  256. package/commands/maestro/perf-check.toml +22 -0
  257. package/commands/maestro/resume.toml +38 -0
  258. package/commands/maestro/review.toml +23 -0
  259. package/commands/maestro/security-audit.toml +24 -0
  260. package/commands/maestro/seo-audit.toml +22 -0
  261. package/commands/maestro/status.toml +21 -0
  262. package/docs/architecture.md +310 -0
  263. package/docs/cicd.md +647 -0
  264. package/docs/flow.md +255 -0
  265. package/docs/maestro-cheatsheet.md +199 -0
  266. package/docs/overview.md +141 -0
  267. package/docs/runtime-claude.md +190 -0
  268. package/docs/runtime-codex.md +197 -0
  269. package/docs/runtime-gemini.md +170 -0
  270. package/docs/runtime-qwen.md +147 -0
  271. package/docs/usage.md +312 -0
  272. package/gemini-extension.json +55 -0
  273. package/hooks/adapters/gemini-adapter.js +2 -0
  274. package/hooks/adapters/qwen-adapter.js +2 -0
  275. package/hooks/hook-runner.js +3 -0
  276. package/hooks/hooks.json +56 -0
  277. package/mcp/maestro-server.js +4 -0
  278. package/package.json +93 -0
  279. package/plugins/maestro/.app.json +3 -0
  280. package/plugins/maestro/.codex-plugin/plugin.json +41 -0
  281. package/plugins/maestro/.mcp.json +16 -0
  282. package/plugins/maestro/README.md +57 -0
  283. package/plugins/maestro/references/runtime-guide.md +125 -0
  284. package/plugins/maestro/skills/a11y-audit/SKILL.md +16 -0
  285. package/plugins/maestro/skills/archive/SKILL.md +16 -0
  286. package/plugins/maestro/skills/code-review/SKILL.md +6 -0
  287. package/plugins/maestro/skills/compliance-check/SKILL.md +16 -0
  288. package/plugins/maestro/skills/debug-workflow/SKILL.md +16 -0
  289. package/plugins/maestro/skills/delegation/SKILL.md +6 -0
  290. package/plugins/maestro/skills/design-dialogue/SKILL.md +6 -0
  291. package/plugins/maestro/skills/execute/SKILL.md +16 -0
  292. package/plugins/maestro/skills/execution/SKILL.md +6 -0
  293. package/plugins/maestro/skills/implementation-planning/SKILL.md +6 -0
  294. package/plugins/maestro/skills/orchestrate/SKILL.md +16 -0
  295. package/plugins/maestro/skills/perf-check/SKILL.md +16 -0
  296. package/plugins/maestro/skills/resume-session/SKILL.md +16 -0
  297. package/plugins/maestro/skills/review-code/SKILL.md +16 -0
  298. package/plugins/maestro/skills/security-audit/SKILL.md +16 -0
  299. package/plugins/maestro/skills/seo-audit/SKILL.md +16 -0
  300. package/plugins/maestro/skills/session-management/SKILL.md +6 -0
  301. package/plugins/maestro/skills/status/SKILL.md +14 -0
  302. package/plugins/maestro/skills/validation/SKILL.md +6 -0
  303. package/plugins/maestro/src/agents/accessibility-specialist.md +163 -0
  304. package/plugins/maestro/src/agents/analytics-engineer.md +182 -0
  305. package/plugins/maestro/src/agents/api-designer.md +124 -0
  306. package/plugins/maestro/src/agents/architect.md +120 -0
  307. package/plugins/maestro/src/agents/cloud-architect.md +134 -0
  308. package/plugins/maestro/src/agents/cobol-engineer.md +127 -0
  309. package/plugins/maestro/src/agents/code-reviewer.md +123 -0
  310. package/plugins/maestro/src/agents/coder.md +132 -0
  311. package/plugins/maestro/src/agents/compliance-reviewer.md +219 -0
  312. package/plugins/maestro/src/agents/content-strategist.md +111 -0
  313. package/plugins/maestro/src/agents/copywriter.md +113 -0
  314. package/plugins/maestro/src/agents/data-engineer.md +130 -0
  315. package/plugins/maestro/src/agents/database-administrator.md +126 -0
  316. package/plugins/maestro/src/agents/db2-dba.md +124 -0
  317. package/plugins/maestro/src/agents/debugger.md +133 -0
  318. package/plugins/maestro/src/agents/design-system-engineer.md +258 -0
  319. package/plugins/maestro/src/agents/devops-engineer.md +138 -0
  320. package/plugins/maestro/src/agents/hlasm-assembler-specialist.md +134 -0
  321. package/plugins/maestro/src/agents/i18n-specialist.md +241 -0
  322. package/plugins/maestro/src/agents/ibm-i-specialist.md +132 -0
  323. package/plugins/maestro/src/agents/integration-engineer.md +133 -0
  324. package/plugins/maestro/src/agents/ml-engineer.md +115 -0
  325. package/plugins/maestro/src/agents/mlops-engineer.md +116 -0
  326. package/plugins/maestro/src/agents/mobile-engineer.md +115 -0
  327. package/plugins/maestro/src/agents/observability-engineer.md +133 -0
  328. package/plugins/maestro/src/agents/performance-engineer.md +139 -0
  329. package/plugins/maestro/src/agents/platform-engineer.md +129 -0
  330. package/plugins/maestro/src/agents/product-manager.md +170 -0
  331. package/plugins/maestro/src/agents/prompt-engineer.md +129 -0
  332. package/plugins/maestro/src/agents/refactor.md +138 -0
  333. package/plugins/maestro/src/agents/release-manager.md +132 -0
  334. package/plugins/maestro/src/agents/security-engineer.md +143 -0
  335. package/plugins/maestro/src/agents/seo-specialist.md +129 -0
  336. package/plugins/maestro/src/agents/site-reliability-engineer.md +131 -0
  337. package/plugins/maestro/src/agents/solutions-architect.md +137 -0
  338. package/plugins/maestro/src/agents/technical-writer.md +129 -0
  339. package/plugins/maestro/src/agents/tester.md +135 -0
  340. package/plugins/maestro/src/agents/ux-designer.md +168 -0
  341. package/plugins/maestro/src/agents/zos-sysprog.md +134 -0
  342. package/plugins/maestro/src/config/setting-resolver.js +32 -0
  343. package/plugins/maestro/src/core/agent-registry.js +67 -0
  344. package/plugins/maestro/src/core/canonical-source.js +39 -0
  345. package/plugins/maestro/src/core/env-file-parser.js +82 -0
  346. package/plugins/maestro/src/core/feature-blocks.js +34 -0
  347. package/plugins/maestro/src/core/logger.js +12 -0
  348. package/plugins/maestro/src/core/markdown-state.js +36 -0
  349. package/plugins/maestro/src/core/policy-rules.js +32 -0
  350. package/plugins/maestro/src/core/project-root-resolver.js +184 -0
  351. package/plugins/maestro/src/core/stdin-reader.js +77 -0
  352. package/plugins/maestro/src/core/version.js +50 -0
  353. package/plugins/maestro/src/entry-points/core-command-registry.js +37 -0
  354. package/plugins/maestro/src/entry-points/preamble-builders.js +54 -0
  355. package/plugins/maestro/src/entry-points/registry.js +199 -0
  356. package/plugins/maestro/src/entry-points/templates/claude-core-command.md.tmpl +38 -0
  357. package/plugins/maestro/src/entry-points/templates/claude-skill.md.tmpl +18 -0
  358. package/plugins/maestro/src/entry-points/templates/codex-core-command.md.tmpl +16 -0
  359. package/plugins/maestro/src/entry-points/templates/codex-skill.md.tmpl +11 -0
  360. package/plugins/maestro/src/entry-points/templates/gemini-command.toml.tmpl +17 -0
  361. package/plugins/maestro/src/entry-points/templates/gemini-core-command.toml.tmpl +30 -0
  362. package/plugins/maestro/src/generated/agent-registry.json +630 -0
  363. package/plugins/maestro/src/generated/hook-registry.json +18 -0
  364. package/plugins/maestro/src/generated/resource-registry.json +16 -0
  365. package/plugins/maestro/src/hooks/logic/after-agent-logic.js +54 -0
  366. package/plugins/maestro/src/hooks/logic/before-agent-logic.js +57 -0
  367. package/plugins/maestro/src/hooks/logic/hook-state.js +127 -0
  368. package/plugins/maestro/src/hooks/logic/session-end-logic.js +17 -0
  369. package/plugins/maestro/src/hooks/logic/session-start-logic.js +25 -0
  370. package/plugins/maestro/src/lib/discovery/index.js +172 -0
  371. package/plugins/maestro/src/lib/errors/index.js +104 -0
  372. package/plugins/maestro/src/lib/framework-detection.js +50 -0
  373. package/plugins/maestro/src/lib/frontmatter/index.js +262 -0
  374. package/plugins/maestro/src/lib/io/index.js +96 -0
  375. package/plugins/maestro/src/lib/naming/index.js +94 -0
  376. package/plugins/maestro/src/lib/validation/index.js +124 -0
  377. package/plugins/maestro/src/lib/yaml-emit.js +38 -0
  378. package/plugins/maestro/src/mcp/content/provider.js +68 -0
  379. package/plugins/maestro/src/mcp/content/runtime-content.js +188 -0
  380. package/plugins/maestro/src/mcp/contracts/cache-path-rejector.js +39 -0
  381. package/plugins/maestro/src/mcp/contracts/downstream-context.js +106 -0
  382. package/plugins/maestro/src/mcp/contracts/plan-schema.js +148 -0
  383. package/plugins/maestro/src/mcp/contracts/workspace-marker.js +61 -0
  384. package/plugins/maestro/src/mcp/core/create-server.js +76 -0
  385. package/plugins/maestro/src/mcp/core/line-reader.js +35 -0
  386. package/plugins/maestro/src/mcp/core/project-root-cache.js +120 -0
  387. package/plugins/maestro/src/mcp/core/protocol-dispatcher.js +274 -0
  388. package/plugins/maestro/src/mcp/core/recovery-hints.js +43 -0
  389. package/plugins/maestro/src/mcp/core/tool-outcome.js +77 -0
  390. package/plugins/maestro/src/mcp/core/tool-registry.js +82 -0
  391. package/plugins/maestro/src/mcp/handlers/assess-task-complexity.js +108 -0
  392. package/plugins/maestro/src/mcp/handlers/blocker-parser.js +34 -0
  393. package/plugins/maestro/src/mcp/handlers/design-gate.js +393 -0
  394. package/plugins/maestro/src/mcp/handlers/get-agent.js +54 -0
  395. package/plugins/maestro/src/mcp/handlers/get-runtime-context.js +49 -0
  396. package/plugins/maestro/src/mcp/handlers/get-skill-content.js +51 -0
  397. package/plugins/maestro/src/mcp/handlers/initialize-workspace.js +45 -0
  398. package/plugins/maestro/src/mcp/handlers/reconciliation.js +224 -0
  399. package/plugins/maestro/src/mcp/handlers/resolve-settings.js +39 -0
  400. package/plugins/maestro/src/mcp/handlers/session-state-core.js +108 -0
  401. package/plugins/maestro/src/mcp/handlers/session-state-tools.js +562 -0
  402. package/plugins/maestro/src/mcp/handlers/validate-plan.js +76 -0
  403. package/plugins/maestro/src/mcp/maestro-server.js +122 -0
  404. package/plugins/maestro/src/mcp/runtime/runtime-config-map.js +70 -0
  405. package/plugins/maestro/src/mcp/tool-packs/content/index.js +80 -0
  406. package/plugins/maestro/src/mcp/tool-packs/contracts.js +30 -0
  407. package/plugins/maestro/src/mcp/tool-packs/index.js +15 -0
  408. package/plugins/maestro/src/mcp/tool-packs/session/index.js +243 -0
  409. package/plugins/maestro/src/mcp/tool-packs/workspace/index.js +98 -0
  410. package/plugins/maestro/src/mcp/utils/extension-root.js +31 -0
  411. package/plugins/maestro/src/mcp/validation/agent-checker.js +81 -0
  412. package/plugins/maestro/src/mcp/validation/dag-checker.js +214 -0
  413. package/plugins/maestro/src/mcp/validation/file-overlap-checker.js +63 -0
  414. package/plugins/maestro/src/mcp/validation/schema-checker.js +108 -0
  415. package/plugins/maestro/src/platforms/codex/runtime-config.js +58 -0
  416. package/plugins/maestro/src/platforms/shared/adapters/conventions.js +29 -0
  417. package/plugins/maestro/src/platforms/shared/adapters/exit-codes.js +6 -0
  418. package/plugins/maestro/src/platforms/shared/adapters/factory.js +40 -0
  419. package/plugins/maestro/src/platforms/shared/agent-names.js +10 -0
  420. package/plugins/maestro/src/platforms/shared/hook-runner.js +52 -0
  421. package/plugins/maestro/src/references/architecture.md +139 -0
  422. package/plugins/maestro/src/references/orchestration-steps.md +193 -0
  423. package/plugins/maestro/src/skills/shared/code-review/SKILL.md +145 -0
  424. package/plugins/maestro/src/skills/shared/delegation/SKILL.md +370 -0
  425. package/plugins/maestro/src/skills/shared/delegation/protocols/agent-base-protocol.md +145 -0
  426. package/plugins/maestro/src/skills/shared/delegation/protocols/filesystem-safety-protocol.md +31 -0
  427. package/plugins/maestro/src/skills/shared/design-dialogue/SKILL.md +284 -0
  428. package/plugins/maestro/src/skills/shared/execution/SKILL.md +258 -0
  429. package/plugins/maestro/src/skills/shared/implementation-planning/SKILL.md +303 -0
  430. package/plugins/maestro/src/skills/shared/session-management/SKILL.md +314 -0
  431. package/plugins/maestro/src/skills/shared/validation/SKILL.md +204 -0
  432. package/plugins/maestro/src/state/session-state.js +113 -0
  433. package/plugins/maestro/src/templates/design-document.md +95 -0
  434. package/plugins/maestro/src/templates/implementation-plan.md +86 -0
  435. package/plugins/maestro/src/templates/session-state.md +68 -0
  436. package/plugins/maestro/src/version.json +3 -0
  437. package/policies/maestro.toml +44 -0
  438. package/qwen/agents/accessibility_specialist.md +18 -0
  439. package/qwen/agents/analytics_engineer.md +20 -0
  440. package/qwen/agents/api_designer.md +17 -0
  441. package/qwen/agents/architect.md +17 -0
  442. package/qwen/agents/cloud_architect.md +17 -0
  443. package/qwen/agents/cobol_engineer.md +20 -0
  444. package/qwen/agents/code_reviewer.md +15 -0
  445. package/qwen/agents/coder.md +20 -0
  446. package/qwen/agents/compliance_reviewer.md +17 -0
  447. package/qwen/agents/content_strategist.md +17 -0
  448. package/qwen/agents/copywriter.md +17 -0
  449. package/qwen/agents/data_engineer.md +20 -0
  450. package/qwen/agents/database_administrator.md +19 -0
  451. package/qwen/agents/db2_dba.md +19 -0
  452. package/qwen/agents/debugger.md +17 -0
  453. package/qwen/agents/design_system_engineer.md +20 -0
  454. package/qwen/agents/devops_engineer.md +21 -0
  455. package/qwen/agents/hlasm_assembler_specialist.md +20 -0
  456. package/qwen/agents/i18n_specialist.md +19 -0
  457. package/qwen/agents/ibm_i_specialist.md +20 -0
  458. package/qwen/agents/integration_engineer.md +21 -0
  459. package/qwen/agents/ml_engineer.md +21 -0
  460. package/qwen/agents/mlops_engineer.md +21 -0
  461. package/qwen/agents/mobile_engineer.md +21 -0
  462. package/qwen/agents/observability_engineer.md +21 -0
  463. package/qwen/agents/performance_engineer.md +19 -0
  464. package/qwen/agents/platform_engineer.md +22 -0
  465. package/qwen/agents/product_manager.md +18 -0
  466. package/qwen/agents/prompt_engineer.md +20 -0
  467. package/qwen/agents/refactor.md +20 -0
  468. package/qwen/agents/release_manager.md +20 -0
  469. package/qwen/agents/security_engineer.md +19 -0
  470. package/qwen/agents/seo_specialist.md +19 -0
  471. package/qwen/agents/site_reliability_engineer.md +19 -0
  472. package/qwen/agents/solutions_architect.md +17 -0
  473. package/qwen/agents/technical_writer.md +19 -0
  474. package/qwen/agents/tester.md +21 -0
  475. package/qwen/agents/ux_designer.md +18 -0
  476. package/qwen/agents/zos_sysprog.md +19 -0
  477. package/qwen/hooks.json +56 -0
  478. package/qwen-extension.json +55 -0
  479. package/scripts/check-layer-boundaries.js +74 -0
  480. package/scripts/generate.js +155 -0
  481. package/scripts/install-codex-plugin.js +167 -0
  482. package/scripts/install-git-hooks.js +43 -0
  483. package/scripts/npm-publish-idempotent.js +150 -0
  484. package/scripts/package-release-artifacts.js +156 -0
  485. package/scripts/release-artifact-manifest.js +378 -0
  486. package/scripts/release-version-metadata.js +129 -0
  487. package/scripts/update-versions.js +33 -0
  488. package/scripts/verify-npm-pack.js +85 -0
  489. package/scripts/verify-release-artifacts.js +95 -0
  490. package/src/agents/accessibility-specialist.md +163 -0
  491. package/src/agents/analytics-engineer.md +182 -0
  492. package/src/agents/api-designer.md +124 -0
  493. package/src/agents/architect.md +120 -0
  494. package/src/agents/cloud-architect.md +134 -0
  495. package/src/agents/cobol-engineer.md +127 -0
  496. package/src/agents/code-reviewer.md +123 -0
  497. package/src/agents/coder.md +132 -0
  498. package/src/agents/compliance-reviewer.md +219 -0
  499. package/src/agents/content-strategist.md +111 -0
  500. package/src/agents/copywriter.md +113 -0
  501. package/src/agents/data-engineer.md +130 -0
  502. package/src/agents/database-administrator.md +126 -0
  503. package/src/agents/db2-dba.md +124 -0
  504. package/src/agents/debugger.md +133 -0
  505. package/src/agents/design-system-engineer.md +258 -0
  506. package/src/agents/devops-engineer.md +138 -0
  507. package/src/agents/hlasm-assembler-specialist.md +134 -0
  508. package/src/agents/i18n-specialist.md +241 -0
  509. package/src/agents/ibm-i-specialist.md +132 -0
  510. package/src/agents/integration-engineer.md +133 -0
  511. package/src/agents/ml-engineer.md +115 -0
  512. package/src/agents/mlops-engineer.md +116 -0
  513. package/src/agents/mobile-engineer.md +115 -0
  514. package/src/agents/observability-engineer.md +133 -0
  515. package/src/agents/performance-engineer.md +139 -0
  516. package/src/agents/platform-engineer.md +129 -0
  517. package/src/agents/product-manager.md +170 -0
  518. package/src/agents/prompt-engineer.md +129 -0
  519. package/src/agents/refactor.md +138 -0
  520. package/src/agents/release-manager.md +132 -0
  521. package/src/agents/security-engineer.md +143 -0
  522. package/src/agents/seo-specialist.md +129 -0
  523. package/src/agents/site-reliability-engineer.md +131 -0
  524. package/src/agents/solutions-architect.md +137 -0
  525. package/src/agents/technical-writer.md +129 -0
  526. package/src/agents/tester.md +135 -0
  527. package/src/agents/ux-designer.md +168 -0
  528. package/src/agents/zos-sysprog.md +134 -0
  529. package/src/config/setting-resolver.js +32 -0
  530. package/src/core/agent-registry.js +67 -0
  531. package/src/core/canonical-source.js +39 -0
  532. package/src/core/env-file-parser.js +82 -0
  533. package/src/core/feature-blocks.js +34 -0
  534. package/src/core/logger.js +12 -0
  535. package/src/core/markdown-state.js +36 -0
  536. package/src/core/policy-rules.js +32 -0
  537. package/src/core/project-root-resolver.js +184 -0
  538. package/src/core/stdin-reader.js +77 -0
  539. package/src/core/version.js +50 -0
  540. package/src/entry-points/core-command-registry.js +37 -0
  541. package/src/entry-points/preamble-builders.js +54 -0
  542. package/src/entry-points/registry.js +199 -0
  543. package/src/entry-points/templates/claude-core-command.md.tmpl +38 -0
  544. package/src/entry-points/templates/claude-skill.md.tmpl +18 -0
  545. package/src/entry-points/templates/codex-core-command.md.tmpl +16 -0
  546. package/src/entry-points/templates/codex-skill.md.tmpl +11 -0
  547. package/src/entry-points/templates/gemini-command.toml.tmpl +17 -0
  548. package/src/entry-points/templates/gemini-core-command.toml.tmpl +30 -0
  549. package/src/generated/agent-registry.json +630 -0
  550. package/src/generated/hook-registry.json +18 -0
  551. package/src/generated/resource-registry.json +16 -0
  552. package/src/generator/entry-point-expander.js +182 -0
  553. package/src/generator/file-writer.js +167 -0
  554. package/src/generator/generation-session.js +62 -0
  555. package/src/generator/manifest-curator.js +31 -0
  556. package/src/generator/manifest-expander.js +256 -0
  557. package/src/generator/payload-builder.js +217 -0
  558. package/src/generator/registry-scanner.js +130 -0
  559. package/src/generator/stale-pruner.js +101 -0
  560. package/src/hooks/logic/after-agent-logic.js +54 -0
  561. package/src/hooks/logic/before-agent-logic.js +57 -0
  562. package/src/hooks/logic/hook-state.js +127 -0
  563. package/src/hooks/logic/session-end-logic.js +17 -0
  564. package/src/hooks/logic/session-start-logic.js +25 -0
  565. package/src/lib/discovery/index.js +172 -0
  566. package/src/lib/errors/index.js +104 -0
  567. package/src/lib/framework-detection.js +50 -0
  568. package/src/lib/frontmatter/index.js +262 -0
  569. package/src/lib/io/index.js +96 -0
  570. package/src/lib/naming/index.js +94 -0
  571. package/src/lib/validation/index.js +124 -0
  572. package/src/lib/yaml-emit.js +38 -0
  573. package/src/manifest.js +11 -0
  574. package/src/mcp/content/provider.js +68 -0
  575. package/src/mcp/content/runtime-content.js +188 -0
  576. package/src/mcp/contracts/cache-path-rejector.js +39 -0
  577. package/src/mcp/contracts/downstream-context.js +106 -0
  578. package/src/mcp/contracts/plan-schema.js +148 -0
  579. package/src/mcp/contracts/workspace-marker.js +61 -0
  580. package/src/mcp/core/create-server.js +76 -0
  581. package/src/mcp/core/line-reader.js +35 -0
  582. package/src/mcp/core/project-root-cache.js +120 -0
  583. package/src/mcp/core/protocol-dispatcher.js +274 -0
  584. package/src/mcp/core/recovery-hints.js +43 -0
  585. package/src/mcp/core/tool-outcome.js +77 -0
  586. package/src/mcp/core/tool-registry.js +82 -0
  587. package/src/mcp/handlers/assess-task-complexity.js +108 -0
  588. package/src/mcp/handlers/blocker-parser.js +34 -0
  589. package/src/mcp/handlers/design-gate.js +393 -0
  590. package/src/mcp/handlers/get-agent.js +54 -0
  591. package/src/mcp/handlers/get-runtime-context.js +49 -0
  592. package/src/mcp/handlers/get-skill-content.js +51 -0
  593. package/src/mcp/handlers/initialize-workspace.js +45 -0
  594. package/src/mcp/handlers/reconciliation.js +224 -0
  595. package/src/mcp/handlers/resolve-settings.js +39 -0
  596. package/src/mcp/handlers/session-state-core.js +108 -0
  597. package/src/mcp/handlers/session-state-tools.js +562 -0
  598. package/src/mcp/handlers/validate-plan.js +76 -0
  599. package/src/mcp/maestro-server.js +122 -0
  600. package/src/mcp/runtime/runtime-config-map.js +70 -0
  601. package/src/mcp/tool-packs/content/index.js +80 -0
  602. package/src/mcp/tool-packs/contracts.js +30 -0
  603. package/src/mcp/tool-packs/index.js +15 -0
  604. package/src/mcp/tool-packs/session/index.js +243 -0
  605. package/src/mcp/tool-packs/workspace/index.js +98 -0
  606. package/src/mcp/utils/extension-root.js +31 -0
  607. package/src/mcp/validation/agent-checker.js +81 -0
  608. package/src/mcp/validation/dag-checker.js +214 -0
  609. package/src/mcp/validation/file-overlap-checker.js +63 -0
  610. package/src/mcp/validation/schema-checker.js +108 -0
  611. package/src/platforms/claude/metadata.js +96 -0
  612. package/src/platforms/claude/runtime-config.js +60 -0
  613. package/src/platforms/codex/metadata.js +107 -0
  614. package/src/platforms/codex/runtime-config.js +58 -0
  615. package/src/platforms/gemini/metadata.js +27 -0
  616. package/src/platforms/gemini/runtime-config.js +62 -0
  617. package/src/platforms/metadata-shared.js +131 -0
  618. package/src/platforms/metadata.js +29 -0
  619. package/src/platforms/qwen/metadata.js +27 -0
  620. package/src/platforms/qwen/runtime-config.js +62 -0
  621. package/src/platforms/shared/adapters/claude-adapter.js +36 -0
  622. package/src/platforms/shared/adapters/conventions.js +29 -0
  623. package/src/platforms/shared/adapters/exit-codes.js +6 -0
  624. package/src/platforms/shared/adapters/factory.js +40 -0
  625. package/src/platforms/shared/adapters/gemini-adapter.js +34 -0
  626. package/src/platforms/shared/adapters/qwen-adapter.js +93 -0
  627. package/src/platforms/shared/agent-names.js +10 -0
  628. package/src/platforms/shared/hook-runner.js +52 -0
  629. package/src/references/architecture.md +139 -0
  630. package/src/references/orchestration-steps.md +193 -0
  631. package/src/scripts/ensure-workspace.js +14 -0
  632. package/src/scripts/read-active-session.js +26 -0
  633. package/src/scripts/read-setting.js +18 -0
  634. package/src/scripts/read-state.js +17 -0
  635. package/src/scripts/write-state.js +22 -0
  636. package/src/skills/shared/code-review/SKILL.md +145 -0
  637. package/src/skills/shared/delegation/SKILL.md +370 -0
  638. package/src/skills/shared/delegation/protocols/agent-base-protocol.md +145 -0
  639. package/src/skills/shared/delegation/protocols/filesystem-safety-protocol.md +31 -0
  640. package/src/skills/shared/design-dialogue/SKILL.md +284 -0
  641. package/src/skills/shared/execution/SKILL.md +258 -0
  642. package/src/skills/shared/implementation-planning/SKILL.md +303 -0
  643. package/src/skills/shared/session-management/SKILL.md +314 -0
  644. package/src/skills/shared/validation/SKILL.md +204 -0
  645. package/src/state/session-state.js +113 -0
  646. package/src/templates/design-document.md +95 -0
  647. package/src/templates/implementation-plan.md +86 -0
  648. package/src/templates/session-state.md +68 -0
  649. package/src/transforms/agent-stub.js +29 -0
  650. package/src/transforms/extract-examples.js +63 -0
  651. package/src/transforms/index.js +35 -0
  652. package/src/transforms/parse-frontmatter.js +23 -0
  653. package/src/transforms/rebuild-frontmatter.js +147 -0
  654. package/src/transforms/skill-discovery-stub.js +27 -0
  655. package/src/transforms/skill-metadata.js +14 -0
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const fs = require('node:fs');
5
+ const path = require('node:path');
6
+ const { execFileSync } = require('node:child_process');
7
+
8
+ const ROOT = path.resolve(__dirname, '..');
9
+
10
+ function printHelp() {
11
+ console.log(`Publish a Maestro npm package if the exact version is absent.
12
+
13
+ Usage:
14
+ node scripts/npm-publish-idempotent.js [--tag TAG] [--access public]
15
+ `);
16
+ }
17
+
18
+ function parseArgs(argv) {
19
+ const options = {
20
+ access: 'public',
21
+ tag: null,
22
+ };
23
+
24
+ for (let index = 0; index < argv.length; index += 1) {
25
+ const arg = argv[index];
26
+
27
+ if (arg === '--help' || arg === '-h') {
28
+ printHelp();
29
+ process.exit(0);
30
+ }
31
+
32
+ if (arg === '--access') {
33
+ options.access = argv[index + 1];
34
+ index += 1;
35
+ continue;
36
+ }
37
+
38
+ if (arg === '--tag') {
39
+ options.tag = argv[index + 1];
40
+ index += 1;
41
+ continue;
42
+ }
43
+
44
+ throw new Error(`Unknown argument: ${arg}`);
45
+ }
46
+
47
+ if (!options.access) {
48
+ throw new Error('Missing value for --access');
49
+ }
50
+
51
+ if (options.tag === undefined) {
52
+ throw new Error('Missing value for --tag');
53
+ }
54
+
55
+ return options;
56
+ }
57
+
58
+ function readPackage(root) {
59
+ const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
60
+
61
+ if (typeof pkg.name !== 'string' || pkg.name.length === 0) {
62
+ throw new Error('package.json missing package name');
63
+ }
64
+
65
+ if (typeof pkg.version !== 'string' || pkg.version.length === 0) {
66
+ throw new Error('package.json missing package version');
67
+ }
68
+
69
+ return pkg;
70
+ }
71
+
72
+ function isNpmNotFoundError(error) {
73
+ const text = [
74
+ error && error.message,
75
+ error && error.stdout && error.stdout.toString(),
76
+ error && error.stderr && error.stderr.toString(),
77
+ ].filter(Boolean).join('\n');
78
+
79
+ return /\bE404\b|404 Not Found|is not in this registry/i.test(text);
80
+ }
81
+
82
+ function packageVersionExists(packageSpec, runner) {
83
+ try {
84
+ const stdout = runner('npm', ['view', packageSpec, 'version'], {
85
+ encoding: 'utf8',
86
+ stdio: ['ignore', 'pipe', 'pipe'],
87
+ });
88
+ return stdout.toString().trim().length > 0;
89
+ } catch (error) {
90
+ if (isNpmNotFoundError(error)) {
91
+ return false;
92
+ }
93
+
94
+ throw error;
95
+ }
96
+ }
97
+
98
+ function publishIfNeeded(options = {}) {
99
+ const root = options.root || ROOT;
100
+ const runner = options.execFileSync || execFileSync;
101
+ const pkg = readPackage(root);
102
+ const packageSpec = `${pkg.name}@${pkg.version}`;
103
+
104
+ if (packageVersionExists(packageSpec, runner)) {
105
+ return {
106
+ packageSpec,
107
+ published: false,
108
+ };
109
+ }
110
+
111
+ const publishArgs = ['publish'];
112
+ if (options.tag) {
113
+ publishArgs.push('--tag', options.tag);
114
+ }
115
+ publishArgs.push('--access', options.access || 'public');
116
+
117
+ runner('npm', publishArgs, {
118
+ cwd: root,
119
+ stdio: 'inherit',
120
+ });
121
+
122
+ return {
123
+ packageSpec,
124
+ published: true,
125
+ };
126
+ }
127
+
128
+ if (require.main === module) {
129
+ try {
130
+ const options = parseArgs(process.argv.slice(2));
131
+ const result = publishIfNeeded(options);
132
+
133
+ if (result.published) {
134
+ console.log(`Published ${result.packageSpec}`);
135
+ } else {
136
+ console.log(`Skipping npm publish; ${result.packageSpec} already exists`);
137
+ }
138
+ } catch (error) {
139
+ console.error(`npm publish failed: ${error.message}`);
140
+ process.exit(1);
141
+ }
142
+ }
143
+
144
+ module.exports = {
145
+ isNpmNotFoundError,
146
+ packageVersionExists,
147
+ parseArgs,
148
+ publishIfNeeded,
149
+ readPackage,
150
+ };
@@ -0,0 +1,156 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const fs = require('node:fs');
5
+ const os = require('node:os');
6
+ const path = require('node:path');
7
+ const { execFileSync } = require('node:child_process');
8
+ const {
9
+ RELEASE_ARTIFACT_PATHS,
10
+ assertRequiredArtifactPaths,
11
+ assertRuntimeManifestShape,
12
+ isDeniedPath,
13
+ readJson,
14
+ toPosixPath,
15
+ } = require('./release-artifact-manifest');
16
+
17
+ const ROOT = path.resolve(__dirname, '..');
18
+
19
+ function printHelp() {
20
+ console.log(`Package Maestro release artifacts.
21
+
22
+ Usage:
23
+ node scripts/package-release-artifacts.js [--version X.Y.Z] [--out-dir dist/release]
24
+
25
+ Options:
26
+ --version Version to package. Defaults to package.json version.
27
+ --out-dir Directory for the generated archive. Defaults to dist/release.
28
+ --help Show this help text.
29
+ `);
30
+ }
31
+
32
+ function parseArgs(argv) {
33
+ const options = {
34
+ version: null,
35
+ outDir: 'dist/release',
36
+ };
37
+
38
+ for (let index = 0; index < argv.length; index += 1) {
39
+ const arg = argv[index];
40
+
41
+ if (arg === '--help' || arg === '-h') {
42
+ printHelp();
43
+ process.exit(0);
44
+ }
45
+
46
+ if (arg === '--version') {
47
+ options.version = argv[index + 1];
48
+ index += 1;
49
+ continue;
50
+ }
51
+
52
+ if (arg === '--out-dir') {
53
+ options.outDir = argv[index + 1];
54
+ index += 1;
55
+ continue;
56
+ }
57
+
58
+ throw new Error(`Unknown argument: ${arg}`);
59
+ }
60
+
61
+ if (options.version === undefined || options.outDir === undefined) {
62
+ throw new Error('Missing value for release artifact option');
63
+ }
64
+
65
+ return options;
66
+ }
67
+
68
+ function resolveVersion(root, requestedVersion) {
69
+ const packageVersion = readJson(root, 'package.json').version;
70
+ const version = requestedVersion || packageVersion;
71
+
72
+ if (typeof version !== 'string' || !/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(version)) {
73
+ throw new Error(`Invalid release artifact version: ${version}`);
74
+ }
75
+
76
+ return version;
77
+ }
78
+
79
+ function copyPath(root, stagingRoot, relativePath) {
80
+ if (isDeniedPath(relativePath)) {
81
+ throw new Error(`Refusing to package denied path: ${relativePath}`);
82
+ }
83
+
84
+ const sourcePath = path.join(root, relativePath);
85
+ const targetPath = path.join(stagingRoot, relativePath);
86
+ const sourceStat = fs.statSync(sourcePath);
87
+
88
+ if (sourceStat.isDirectory()) {
89
+ fs.cpSync(sourcePath, targetPath, {
90
+ recursive: true,
91
+ filter: (source) => {
92
+ const sourceRelativePath = toPosixPath(path.relative(root, source));
93
+ return !sourceRelativePath || !isDeniedPath(sourceRelativePath);
94
+ },
95
+ });
96
+ return;
97
+ }
98
+
99
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
100
+ fs.copyFileSync(sourcePath, targetPath);
101
+ fs.chmodSync(targetPath, sourceStat.mode);
102
+ }
103
+
104
+ function createTarball(stagingRoot, archivePath) {
105
+ fs.mkdirSync(path.dirname(archivePath), { recursive: true });
106
+ fs.rmSync(archivePath, { force: true });
107
+
108
+ execFileSync('tar', ['-czf', archivePath, '-C', stagingRoot, '.'], {
109
+ stdio: 'inherit',
110
+ });
111
+ }
112
+
113
+ function packageReleaseArtifacts(options = {}) {
114
+ const root = options.root || ROOT;
115
+ const version = resolveVersion(root, options.version || null);
116
+ const outDir = path.resolve(root, options.outDir || 'dist/release');
117
+ const archivePath = path.join(outDir, `maestro-v${version}-extension.tar.gz`);
118
+ const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'maestro-release-artifact-'));
119
+ const stagingRoot = path.join(tempRoot, 'maestro');
120
+
121
+ try {
122
+ assertRequiredArtifactPaths(root);
123
+ assertRuntimeManifestShape(root, version);
124
+ fs.mkdirSync(stagingRoot, { recursive: true });
125
+
126
+ for (const relativePath of RELEASE_ARTIFACT_PATHS) {
127
+ copyPath(root, stagingRoot, relativePath);
128
+ }
129
+
130
+ assertRuntimeManifestShape(stagingRoot, version);
131
+ createTarball(stagingRoot, archivePath);
132
+
133
+ return {
134
+ archivePath,
135
+ version,
136
+ };
137
+ } finally {
138
+ fs.rmSync(tempRoot, { recursive: true, force: true });
139
+ }
140
+ }
141
+
142
+ if (require.main === module) {
143
+ try {
144
+ const result = packageReleaseArtifacts(parseArgs(process.argv.slice(2)));
145
+ console.log(`Created release artifact: ${path.relative(ROOT, result.archivePath)}`);
146
+ } catch (error) {
147
+ console.error(`release artifact packaging failed: ${error.message}`);
148
+ process.exit(1);
149
+ }
150
+ }
151
+
152
+ module.exports = {
153
+ packageReleaseArtifacts,
154
+ parseArgs,
155
+ resolveVersion,
156
+ };
@@ -0,0 +1,378 @@
1
+ 'use strict';
2
+
3
+ const fs = require('node:fs');
4
+ const path = require('node:path');
5
+
6
+ const RELEASE_ARTIFACT_PATHS = [
7
+ '.agents/plugins/marketplace.json',
8
+ '.claude-plugin/marketplace.json',
9
+ 'CHANGELOG.md',
10
+ 'EXAMPLES.md',
11
+ 'GEMINI.md',
12
+ 'LICENSE',
13
+ 'QWEN.md',
14
+ 'README.md',
15
+ 'agents',
16
+ 'bin',
17
+ 'claude',
18
+ 'commands',
19
+ 'docs/runtime-gemini.md',
20
+ 'docs/runtime-claude.md',
21
+ 'docs/runtime-codex.md',
22
+ 'docs/runtime-qwen.md',
23
+ 'docs/usage.md',
24
+ 'gemini-extension.json',
25
+ 'hooks',
26
+ 'mcp',
27
+ 'package-lock.json',
28
+ 'package.json',
29
+ 'plugins/maestro',
30
+ 'policies',
31
+ 'qwen',
32
+ 'qwen-extension.json',
33
+ 'src',
34
+ ];
35
+
36
+ const DENIED_ARTIFACT_PATHS = [
37
+ '.git',
38
+ '.github',
39
+ '.gemini',
40
+ '.gemini_security',
41
+ '.claude',
42
+ '.worktrees',
43
+ '.serena',
44
+ '.superpowers',
45
+ 'coverage',
46
+ 'dist',
47
+ 'docs/maestro',
48
+ 'docs/superpowers',
49
+ 'node_modules',
50
+ 'tests',
51
+ 'tmp',
52
+ 'temp',
53
+ 'hooks/permissions.json',
54
+ ];
55
+
56
+ const DENIED_ARTIFACT_PATTERNS = [
57
+ /(^|\/)__tests__(\/|$)/,
58
+ /\.spec\.[cm]?js$/,
59
+ /\.test\.[cm]?js$/,
60
+ ];
61
+
62
+ const REQUIRED_PACKAGE_FILES = [
63
+ 'bin/maestro-mcp-server.js',
64
+ 'claude/.claude-plugin/plugin.json',
65
+ 'gemini-extension.json',
66
+ 'plugins/maestro/.codex-plugin/plugin.json',
67
+ 'qwen-extension.json',
68
+ 'src/mcp/maestro-server.js',
69
+ ];
70
+
71
+ function toPosixPath(filePath) {
72
+ return filePath.split(path.sep).join('/');
73
+ }
74
+
75
+ function normalizeArtifactPath(relativePath) {
76
+ const normalized = toPosixPath(relativePath).replace(/\/+$/, '');
77
+ return normalized === '.' ? '' : normalized.replace(/^\.\//, '');
78
+ }
79
+
80
+ function isDeniedPath(relativePath) {
81
+ const normalized = normalizeArtifactPath(relativePath);
82
+ const deniedByPath = DENIED_ARTIFACT_PATHS.some((denied) => {
83
+ return normalized === denied || normalized.startsWith(`${denied}/`);
84
+ });
85
+
86
+ return deniedByPath || DENIED_ARTIFACT_PATTERNS.some((pattern) => pattern.test(normalized));
87
+ }
88
+
89
+ function isReleaseArtifactPathAllowed(relativePath) {
90
+ const normalized = normalizeArtifactPath(relativePath);
91
+
92
+ if (!normalized) {
93
+ return true;
94
+ }
95
+
96
+ return RELEASE_ARTIFACT_PATHS.some((allowed) => {
97
+ return (
98
+ normalized === allowed ||
99
+ normalized.startsWith(`${allowed}/`) ||
100
+ allowed.startsWith(`${normalized}/`)
101
+ );
102
+ });
103
+ }
104
+
105
+ function ensureInsideRoot(root, targetPath) {
106
+ const resolvedRoot = path.resolve(root);
107
+ const resolvedTarget = path.resolve(targetPath);
108
+ const relative = path.relative(resolvedRoot, resolvedTarget);
109
+
110
+ if (relative.startsWith('..') || path.isAbsolute(relative)) {
111
+ throw new Error(`Path escapes repository root: ${targetPath}`);
112
+ }
113
+ }
114
+
115
+ function assertRequiredArtifactPaths(root) {
116
+ const missing = [];
117
+
118
+ for (const relativePath of RELEASE_ARTIFACT_PATHS) {
119
+ if (isDeniedPath(relativePath)) {
120
+ throw new Error(`Release artifact allowlist contains denied path: ${relativePath}`);
121
+ }
122
+
123
+ const sourcePath = path.join(root, relativePath);
124
+ ensureInsideRoot(root, sourcePath);
125
+
126
+ if (!fs.existsSync(sourcePath)) {
127
+ missing.push(relativePath);
128
+ }
129
+ }
130
+
131
+ if (missing.length > 0) {
132
+ throw new Error(`Required release artifact paths are missing: ${missing.join(', ')}`);
133
+ }
134
+ }
135
+
136
+ function walkArtifactFiles(root) {
137
+ const files = [];
138
+ const queue = ['.'];
139
+
140
+ while (queue.length > 0) {
141
+ const relativeDir = queue.pop();
142
+ const absoluteDir = path.join(root, relativeDir);
143
+
144
+ for (const entry of fs.readdirSync(absoluteDir, { withFileTypes: true })) {
145
+ const relativePath = normalizeArtifactPath(path.posix.join(relativeDir, entry.name));
146
+ files.push(relativePath);
147
+
148
+ if (entry.isDirectory()) {
149
+ queue.push(relativePath);
150
+ }
151
+ }
152
+ }
153
+
154
+ return files.sort();
155
+ }
156
+
157
+ function assertReleaseArtifactContents(root) {
158
+ const denied = [];
159
+ const unexpected = [];
160
+
161
+ for (const relativePath of walkArtifactFiles(root)) {
162
+ if (isDeniedPath(relativePath)) {
163
+ denied.push(relativePath);
164
+ continue;
165
+ }
166
+
167
+ if (!isReleaseArtifactPathAllowed(relativePath)) {
168
+ unexpected.push(relativePath);
169
+ }
170
+ }
171
+
172
+ if (denied.length > 0) {
173
+ throw new Error(`Release artifact contains denied paths: ${denied.join(', ')}`);
174
+ }
175
+
176
+ if (unexpected.length > 0) {
177
+ throw new Error(`Release artifact contains unallowlisted paths: ${unexpected.join(', ')}`);
178
+ }
179
+ }
180
+
181
+ function readJson(root, relativePath) {
182
+ const filePath = path.join(root, relativePath);
183
+ let parsed;
184
+
185
+ try {
186
+ parsed = JSON.parse(fs.readFileSync(filePath, 'utf8'));
187
+ } catch (error) {
188
+ throw new Error(`Invalid JSON in ${relativePath}: ${error.message}`);
189
+ }
190
+
191
+ return parsed;
192
+ }
193
+
194
+ function requireVersion(value, label) {
195
+ if (typeof value !== 'string' || value.length === 0) {
196
+ throw new Error(`Missing version value for ${label}`);
197
+ }
198
+
199
+ return value;
200
+ }
201
+
202
+ function requireString(value, label) {
203
+ if (typeof value !== 'string' || value.length === 0) {
204
+ throw new Error(`Missing string value for ${label}`);
205
+ }
206
+
207
+ return value;
208
+ }
209
+
210
+ function findNamedPlugin(marketplace, name, relativePath) {
211
+ if (!Array.isArray(marketplace.plugins)) {
212
+ throw new Error(`${relativePath} must contain a plugins array`);
213
+ }
214
+
215
+ const plugin = marketplace.plugins.find((entry) => entry && entry.name === name);
216
+ if (!plugin) {
217
+ throw new Error(`${relativePath} missing plugin entry "${name}"`);
218
+ }
219
+
220
+ return plugin;
221
+ }
222
+
223
+ function getVersionEntries(root) {
224
+ const pkg = readJson(root, 'package.json');
225
+ const gemini = readJson(root, 'gemini-extension.json');
226
+ const qwen = readJson(root, 'qwen-extension.json');
227
+ const claudePlugin = readJson(root, 'claude/.claude-plugin/plugin.json');
228
+ const codexPlugin = readJson(root, 'plugins/maestro/.codex-plugin/plugin.json');
229
+ const claudeMarketplace = readJson(root, '.claude-plugin/marketplace.json');
230
+ const claudeSrcVersion = readJson(root, 'claude/src/version.json');
231
+ const codexSrcVersion = readJson(root, 'plugins/maestro/src/version.json');
232
+ const claudeMarketplacePlugin = findNamedPlugin(
233
+ claudeMarketplace,
234
+ 'maestro',
235
+ '.claude-plugin/marketplace.json'
236
+ );
237
+
238
+ return [
239
+ ['package.json', requireVersion(pkg.version, 'package.json')],
240
+ ['gemini-extension.json', requireVersion(gemini.version, 'gemini-extension.json')],
241
+ ['qwen-extension.json', requireVersion(qwen.version, 'qwen-extension.json')],
242
+ ['claude/.claude-plugin/plugin.json', requireVersion(claudePlugin.version, 'claude plugin')],
243
+ ['plugins/maestro/.codex-plugin/plugin.json', requireVersion(codexPlugin.version, 'Codex plugin')],
244
+ ['.claude-plugin/marketplace.json metadata.version', requireVersion(claudeMarketplace.metadata && claudeMarketplace.metadata.version, 'Claude marketplace metadata')],
245
+ ['.claude-plugin/marketplace.json plugins.maestro.version', requireVersion(claudeMarketplacePlugin.version, 'Claude marketplace plugin')],
246
+ ['claude/src/version.json', requireVersion(claudeSrcVersion.version, 'Claude detached payload')],
247
+ ['plugins/maestro/src/version.json', requireVersion(codexSrcVersion.version, 'Codex detached payload')],
248
+ ];
249
+ }
250
+
251
+ function assertVersionConsistency(root, expectedVersion = null) {
252
+ const entries = getVersionEntries(root);
253
+ const baseline = expectedVersion || entries[0][1];
254
+ const mismatches = entries.filter(([, version]) => version !== baseline);
255
+
256
+ if (mismatches.length > 0) {
257
+ const details = mismatches.map(([label, version]) => `${label}=${version}`).join(', ');
258
+ throw new Error(`Release manifest version mismatch; expected ${baseline}: ${details}`);
259
+ }
260
+
261
+ return baseline;
262
+ }
263
+
264
+ function assertRuntimeManifestShape(root, expectedVersion = null) {
265
+ const version = assertVersionConsistency(root, expectedVersion);
266
+ const pkg = readJson(root, 'package.json');
267
+ const gemini = readJson(root, 'gemini-extension.json');
268
+ const qwen = readJson(root, 'qwen-extension.json');
269
+ const claudeMarketplace = readJson(root, '.claude-plugin/marketplace.json');
270
+ const codexMarketplace = readJson(root, '.agents/plugins/marketplace.json');
271
+ const claudePlugin = readJson(root, 'claude/.claude-plugin/plugin.json');
272
+ const codexPlugin = readJson(root, 'plugins/maestro/.codex-plugin/plugin.json');
273
+ const claudeMcp = readJson(root, 'claude/.mcp.json');
274
+ const codexMcp = readJson(root, 'plugins/maestro/.mcp.json');
275
+
276
+ const packageName = requireString(pkg.name, 'package.json name');
277
+
278
+ const claudeMarketplacePlugin = findNamedPlugin(
279
+ claudeMarketplace,
280
+ 'maestro',
281
+ '.claude-plugin/marketplace.json'
282
+ );
283
+ if (claudeMarketplacePlugin.source !== './claude') {
284
+ throw new Error('.claude-plugin/marketplace.json maestro source must be ./claude');
285
+ }
286
+
287
+ const codexMarketplacePlugin = findNamedPlugin(
288
+ codexMarketplace,
289
+ 'maestro',
290
+ '.agents/plugins/marketplace.json'
291
+ );
292
+ if (
293
+ !codexMarketplacePlugin.source ||
294
+ codexMarketplacePlugin.source.source !== 'local' ||
295
+ codexMarketplacePlugin.source.path !== './plugins/maestro'
296
+ ) {
297
+ throw new Error('.agents/plugins/marketplace.json maestro source must be local ./plugins/maestro');
298
+ }
299
+
300
+ if (gemini.contextFileName !== 'GEMINI.md' || !gemini.mcpServers || !gemini.mcpServers.maestro) {
301
+ throw new Error('gemini-extension.json must define GEMINI.md and maestro MCP server');
302
+ }
303
+
304
+ if (qwen.contextFileName !== 'QWEN.md' || !qwen.mcpServers || !qwen.mcpServers.maestro) {
305
+ throw new Error('qwen-extension.json must define QWEN.md and maestro MCP server');
306
+ }
307
+
308
+ if (claudePlugin.hooks !== './hooks/claude-hooks.json') {
309
+ throw new Error('claude plugin manifest must reference ./hooks/claude-hooks.json');
310
+ }
311
+
312
+ if (
313
+ codexPlugin.skills !== './skills/' ||
314
+ codexPlugin.mcpServers !== './.mcp.json' ||
315
+ codexPlugin.apps !== './.app.json'
316
+ ) {
317
+ throw new Error('Codex plugin manifest must reference skills, MCP, and app config files');
318
+ }
319
+
320
+ const claudeServer = claudeMcp.mcpServers && claudeMcp.mcpServers.maestro;
321
+ if (
322
+ !claudeServer ||
323
+ claudeServer.command !== 'node' ||
324
+ !Array.isArray(claudeServer.args) ||
325
+ !claudeServer.args.includes('${CLAUDE_PLUGIN_ROOT}/mcp/maestro-server.js')
326
+ ) {
327
+ throw new Error('claude/.mcp.json must launch the bundled Maestro MCP server');
328
+ }
329
+
330
+ const codexServer = codexMcp.mcpServers && codexMcp.mcpServers.maestro;
331
+ const expectedPackageSpec = `${packageName}@${version}`;
332
+ if (
333
+ !codexServer ||
334
+ codexServer.command !== 'npx' ||
335
+ !Array.isArray(codexServer.args) ||
336
+ !codexServer.args.includes('-p') ||
337
+ !codexServer.args.includes(expectedPackageSpec) ||
338
+ !codexServer.args.includes('maestro-mcp-server')
339
+ ) {
340
+ throw new Error(`plugins/maestro/.mcp.json must launch ${expectedPackageSpec}`);
341
+ }
342
+
343
+ const requiredRuntimeFiles = [
344
+ 'bin/maestro-mcp-server.js',
345
+ 'claude/src/mcp/maestro-server.js',
346
+ 'plugins/maestro/src/mcp/maestro-server.js',
347
+ ];
348
+
349
+ for (const relativePath of requiredRuntimeFiles) {
350
+ if (!fs.existsSync(path.join(root, relativePath))) {
351
+ throw new Error(`Required runtime file missing: ${relativePath}`);
352
+ }
353
+ }
354
+
355
+ const binMode = fs.statSync(path.join(root, 'bin/maestro-mcp-server.js')).mode;
356
+ if ((binMode & 0o111) === 0) {
357
+ throw new Error('bin/maestro-mcp-server.js must be executable');
358
+ }
359
+
360
+ return version;
361
+ }
362
+
363
+ module.exports = {
364
+ DENIED_ARTIFACT_PATHS,
365
+ DENIED_ARTIFACT_PATTERNS,
366
+ RELEASE_ARTIFACT_PATHS,
367
+ REQUIRED_PACKAGE_FILES,
368
+ assertReleaseArtifactContents,
369
+ assertRequiredArtifactPaths,
370
+ assertRuntimeManifestShape,
371
+ assertVersionConsistency,
372
+ getVersionEntries,
373
+ isDeniedPath,
374
+ isReleaseArtifactPathAllowed,
375
+ requireString,
376
+ readJson,
377
+ toPosixPath,
378
+ };