eai-cli 0.0.0-bootstrap.0

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 (690) hide show
  1. package/LICENSE +183 -0
  2. package/NOTICE +4 -0
  3. package/README.md +14 -0
  4. package/dist/commands/agent.d.ts +3 -0
  5. package/dist/commands/agent.d.ts.map +1 -0
  6. package/dist/commands/agent.js +69 -0
  7. package/dist/commands/agent.js.map +1 -0
  8. package/dist/commands/blocks.d.ts +3 -0
  9. package/dist/commands/blocks.d.ts.map +1 -0
  10. package/dist/commands/blocks.js +249 -0
  11. package/dist/commands/blocks.js.map +1 -0
  12. package/dist/commands/chat.d.ts +6 -0
  13. package/dist/commands/chat.d.ts.map +1 -0
  14. package/dist/commands/chat.js +105 -0
  15. package/dist/commands/chat.js.map +1 -0
  16. package/dist/commands/deploy.d.ts +36 -0
  17. package/dist/commands/deploy.d.ts.map +1 -0
  18. package/dist/commands/deploy.js +712 -0
  19. package/dist/commands/deploy.js.map +1 -0
  20. package/dist/commands/dev.d.ts +15 -0
  21. package/dist/commands/dev.d.ts.map +1 -0
  22. package/dist/commands/dev.js +133 -0
  23. package/dist/commands/dev.js.map +1 -0
  24. package/dist/commands/docs.d.ts +6 -0
  25. package/dist/commands/docs.d.ts.map +1 -0
  26. package/dist/commands/docs.js +118 -0
  27. package/dist/commands/docs.js.map +1 -0
  28. package/dist/commands/env.d.ts +10 -0
  29. package/dist/commands/env.d.ts.map +1 -0
  30. package/dist/commands/env.js +200 -0
  31. package/dist/commands/env.js.map +1 -0
  32. package/dist/commands/errors.d.ts +3 -0
  33. package/dist/commands/errors.d.ts.map +1 -0
  34. package/dist/commands/errors.js +72 -0
  35. package/dist/commands/errors.js.map +1 -0
  36. package/dist/commands/gofer.d.ts +3 -0
  37. package/dist/commands/gofer.d.ts.map +1 -0
  38. package/dist/commands/gofer.js +134 -0
  39. package/dist/commands/gofer.js.map +1 -0
  40. package/dist/commands/init.d.ts +14 -0
  41. package/dist/commands/init.d.ts.map +1 -0
  42. package/dist/commands/init.js +1437 -0
  43. package/dist/commands/init.js.map +1 -0
  44. package/dist/commands/login.d.ts +7 -0
  45. package/dist/commands/login.d.ts.map +1 -0
  46. package/dist/commands/login.js +117 -0
  47. package/dist/commands/login.js.map +1 -0
  48. package/dist/commands/provision.d.ts +6 -0
  49. package/dist/commands/provision.d.ts.map +1 -0
  50. package/dist/commands/provision.js +855 -0
  51. package/dist/commands/provision.js.map +1 -0
  52. package/dist/commands/publicapi.d.ts +6 -0
  53. package/dist/commands/publicapi.d.ts.map +1 -0
  54. package/dist/commands/publicapi.js +184 -0
  55. package/dist/commands/publicapi.js.map +1 -0
  56. package/dist/commands/resources.d.ts +38 -0
  57. package/dist/commands/resources.d.ts.map +1 -0
  58. package/dist/commands/resources.js +1010 -0
  59. package/dist/commands/resources.js.map +1 -0
  60. package/dist/commands/runtime.d.ts +3 -0
  61. package/dist/commands/runtime.d.ts.map +1 -0
  62. package/dist/commands/runtime.js +78 -0
  63. package/dist/commands/runtime.js.map +1 -0
  64. package/dist/commands/template.d.ts +3 -0
  65. package/dist/commands/template.d.ts.map +1 -0
  66. package/dist/commands/template.js +365 -0
  67. package/dist/commands/template.js.map +1 -0
  68. package/dist/commands/tenant.d.ts +45 -0
  69. package/dist/commands/tenant.d.ts.map +1 -0
  70. package/dist/commands/tenant.js +1036 -0
  71. package/dist/commands/tenant.js.map +1 -0
  72. package/dist/commands/types.d.ts +130 -0
  73. package/dist/commands/types.d.ts.map +1 -0
  74. package/dist/commands/types.js +1636 -0
  75. package/dist/commands/types.js.map +1 -0
  76. package/dist/commands/update.d.ts +13 -0
  77. package/dist/commands/update.d.ts.map +1 -0
  78. package/dist/commands/update.js +163 -0
  79. package/dist/commands/update.js.map +1 -0
  80. package/dist/commands/user.d.ts +6 -0
  81. package/dist/commands/user.d.ts.map +1 -0
  82. package/dist/commands/user.js +359 -0
  83. package/dist/commands/user.js.map +1 -0
  84. package/dist/commands/verify.d.ts +40 -0
  85. package/dist/commands/verify.d.ts.map +1 -0
  86. package/dist/commands/verify.js +1442 -0
  87. package/dist/commands/verify.js.map +1 -0
  88. package/dist/commands/vertical.d.ts +24 -0
  89. package/dist/commands/vertical.d.ts.map +1 -0
  90. package/dist/commands/vertical.js +301 -0
  91. package/dist/commands/vertical.js.map +1 -0
  92. package/dist/commands/whoami.d.ts +6 -0
  93. package/dist/commands/whoami.d.ts.map +1 -0
  94. package/dist/commands/whoami.js +73 -0
  95. package/dist/commands/whoami.js.map +1 -0
  96. package/dist/commands/workflow.d.ts +6 -0
  97. package/dist/commands/workflow.d.ts.map +1 -0
  98. package/dist/commands/workflow.js +400 -0
  99. package/dist/commands/workflow.js.map +1 -0
  100. package/dist/index.d.ts +10 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +272 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/lib/agent-guide.d.ts +24 -0
  105. package/dist/lib/agent-guide.d.ts.map +1 -0
  106. package/dist/lib/agent-guide.js +155 -0
  107. package/dist/lib/agent-guide.js.map +1 -0
  108. package/dist/lib/api.d.ts +338 -0
  109. package/dist/lib/api.d.ts.map +1 -0
  110. package/dist/lib/api.js +991 -0
  111. package/dist/lib/api.js.map +1 -0
  112. package/dist/lib/auth.d.ts +65 -0
  113. package/dist/lib/auth.d.ts.map +1 -0
  114. package/dist/lib/auth.js +592 -0
  115. package/dist/lib/auth.js.map +1 -0
  116. package/dist/lib/azure-cli.d.ts +6 -0
  117. package/dist/lib/azure-cli.d.ts.map +1 -0
  118. package/dist/lib/azure-cli.js +13 -0
  119. package/dist/lib/azure-cli.js.map +1 -0
  120. package/dist/lib/block-catalog-normalize.d.ts +47 -0
  121. package/dist/lib/block-catalog-normalize.d.ts.map +1 -0
  122. package/dist/lib/block-catalog-normalize.js +355 -0
  123. package/dist/lib/block-catalog-normalize.js.map +1 -0
  124. package/dist/lib/block-catalog-types.d.ts +111 -0
  125. package/dist/lib/block-catalog-types.d.ts.map +1 -0
  126. package/dist/lib/block-catalog-types.js +41 -0
  127. package/dist/lib/block-catalog-types.js.map +1 -0
  128. package/dist/lib/block-catalog-utils.d.ts +7 -0
  129. package/dist/lib/block-catalog-utils.d.ts.map +1 -0
  130. package/dist/lib/block-catalog-utils.js +47 -0
  131. package/dist/lib/block-catalog-utils.js.map +1 -0
  132. package/dist/lib/block-catalog-validation.d.ts +5 -0
  133. package/dist/lib/block-catalog-validation.d.ts.map +1 -0
  134. package/dist/lib/block-catalog-validation.js +112 -0
  135. package/dist/lib/block-catalog-validation.js.map +1 -0
  136. package/dist/lib/block-catalog.d.ts +3 -0
  137. package/dist/lib/block-catalog.d.ts.map +1 -0
  138. package/dist/lib/block-catalog.js +284 -0
  139. package/dist/lib/block-catalog.js.map +1 -0
  140. package/dist/lib/cloud-env.d.ts +25 -0
  141. package/dist/lib/cloud-env.d.ts.map +1 -0
  142. package/dist/lib/cloud-env.js +79 -0
  143. package/dist/lib/cloud-env.js.map +1 -0
  144. package/dist/lib/config.d.ts +116 -0
  145. package/dist/lib/config.d.ts.map +1 -0
  146. package/dist/lib/config.js +195 -0
  147. package/dist/lib/config.js.map +1 -0
  148. package/dist/lib/context.d.ts +43 -0
  149. package/dist/lib/context.d.ts.map +1 -0
  150. package/dist/lib/context.js +68 -0
  151. package/dist/lib/context.js.map +1 -0
  152. package/dist/lib/error-codes.d.ts +56 -0
  153. package/dist/lib/error-codes.d.ts.map +1 -0
  154. package/dist/lib/error-codes.js +211 -0
  155. package/dist/lib/error-codes.js.map +1 -0
  156. package/dist/lib/error-guidance/catalog.d.ts +648 -0
  157. package/dist/lib/error-guidance/catalog.d.ts.map +1 -0
  158. package/dist/lib/error-guidance/catalog.js +940 -0
  159. package/dist/lib/error-guidance/catalog.js.map +1 -0
  160. package/dist/lib/error-guidance/match.d.ts +3 -0
  161. package/dist/lib/error-guidance/match.d.ts.map +1 -0
  162. package/dist/lib/error-guidance/match.js +46 -0
  163. package/dist/lib/error-guidance/match.js.map +1 -0
  164. package/dist/lib/error-guidance/render.d.ts +5 -0
  165. package/dist/lib/error-guidance/render.d.ts.map +1 -0
  166. package/dist/lib/error-guidance/render.js +92 -0
  167. package/dist/lib/error-guidance/render.js.map +1 -0
  168. package/dist/lib/error-guidance/types.d.ts +76 -0
  169. package/dist/lib/error-guidance/types.d.ts.map +1 -0
  170. package/dist/lib/error-guidance/types.js +2 -0
  171. package/dist/lib/error-guidance/types.js.map +1 -0
  172. package/dist/lib/error-guidance/validate.d.ts +3 -0
  173. package/dist/lib/error-guidance/validate.d.ts.map +1 -0
  174. package/dist/lib/error-guidance/validate.js +59 -0
  175. package/dist/lib/error-guidance/validate.js.map +1 -0
  176. package/dist/lib/gofer-installer.d.ts +32 -0
  177. package/dist/lib/gofer-installer.d.ts.map +1 -0
  178. package/dist/lib/gofer-installer.js +589 -0
  179. package/dist/lib/gofer-installer.js.map +1 -0
  180. package/dist/lib/gofer-refresh.d.ts +46 -0
  181. package/dist/lib/gofer-refresh.d.ts.map +1 -0
  182. package/dist/lib/gofer-refresh.js +536 -0
  183. package/dist/lib/gofer-refresh.js.map +1 -0
  184. package/dist/lib/next-route-exports.d.ts +6 -0
  185. package/dist/lib/next-route-exports.d.ts.map +1 -0
  186. package/dist/lib/next-route-exports.js +127 -0
  187. package/dist/lib/next-route-exports.js.map +1 -0
  188. package/dist/lib/npm.d.ts +2 -0
  189. package/dist/lib/npm.d.ts.map +1 -0
  190. package/dist/lib/npm.js +4 -0
  191. package/dist/lib/npm.js.map +1 -0
  192. package/dist/lib/object-type-defaults.d.ts +4 -0
  193. package/dist/lib/object-type-defaults.d.ts.map +1 -0
  194. package/dist/lib/object-type-defaults.js +72 -0
  195. package/dist/lib/object-type-defaults.js.map +1 -0
  196. package/dist/lib/output.d.ts +35 -0
  197. package/dist/lib/output.d.ts.map +1 -0
  198. package/dist/lib/output.js +166 -0
  199. package/dist/lib/output.js.map +1 -0
  200. package/dist/lib/profile.d.ts +52 -0
  201. package/dist/lib/profile.d.ts.map +1 -0
  202. package/dist/lib/profile.js +116 -0
  203. package/dist/lib/profile.js.map +1 -0
  204. package/dist/lib/project-manifest.d.ts +42 -0
  205. package/dist/lib/project-manifest.d.ts.map +1 -0
  206. package/dist/lib/project-manifest.js +191 -0
  207. package/dist/lib/project-manifest.js.map +1 -0
  208. package/dist/lib/resourceapi-bundle.d.ts +33 -0
  209. package/dist/lib/resourceapi-bundle.d.ts.map +1 -0
  210. package/dist/lib/resourceapi-bundle.js +79 -0
  211. package/dist/lib/resourceapi-bundle.js.map +1 -0
  212. package/dist/lib/runtime-contract.d.ts +84 -0
  213. package/dist/lib/runtime-contract.d.ts.map +1 -0
  214. package/dist/lib/runtime-contract.js +318 -0
  215. package/dist/lib/runtime-contract.js.map +1 -0
  216. package/dist/lib/schema-builder.d.ts +28 -0
  217. package/dist/lib/schema-builder.d.ts.map +1 -0
  218. package/dist/lib/schema-builder.js +69 -0
  219. package/dist/lib/schema-builder.js.map +1 -0
  220. package/dist/lib/tenant-context.d.ts +127 -0
  221. package/dist/lib/tenant-context.d.ts.map +1 -0
  222. package/dist/lib/tenant-context.js +573 -0
  223. package/dist/lib/tenant-context.js.map +1 -0
  224. package/dist/lib/update-check.d.ts +52 -0
  225. package/dist/lib/update-check.d.ts.map +1 -0
  226. package/dist/lib/update-check.js +271 -0
  227. package/dist/lib/update-check.js.map +1 -0
  228. package/dist/lib/update-maintenance.d.ts +15 -0
  229. package/dist/lib/update-maintenance.d.ts.map +1 -0
  230. package/dist/lib/update-maintenance.js +187 -0
  231. package/dist/lib/update-maintenance.js.map +1 -0
  232. package/dist/lib/utils.d.ts +23 -0
  233. package/dist/lib/utils.d.ts.map +1 -0
  234. package/dist/lib/utils.js +48 -0
  235. package/dist/lib/utils.js.map +1 -0
  236. package/dist/lib/workflow-provisioning.d.ts +54 -0
  237. package/dist/lib/workflow-provisioning.d.ts.map +1 -0
  238. package/dist/lib/workflow-provisioning.js +281 -0
  239. package/dist/lib/workflow-provisioning.js.map +1 -0
  240. package/package.json +51 -0
  241. package/resources/gofer/.gofer-version +7 -0
  242. package/resources/gofer/agents-skills/0_gofer_start/SKILL.md +1287 -0
  243. package/resources/gofer/agents-skills/0a_problem_validation/SKILL.md +429 -0
  244. package/resources/gofer/agents-skills/10_gofer_cloud/SKILL.md +635 -0
  245. package/resources/gofer/agents-skills/1_gofer_research/SKILL.md +1159 -0
  246. package/resources/gofer/agents-skills/2_gofer_specify/SKILL.md +860 -0
  247. package/resources/gofer/agents-skills/3_gofer_plan/SKILL.md +886 -0
  248. package/resources/gofer/agents-skills/4_gofer_tasks/SKILL.md +748 -0
  249. package/resources/gofer/agents-skills/5_gofer_implement/SKILL.md +924 -0
  250. package/resources/gofer/agents-skills/6_gofer_validate/SKILL.md +2269 -0
  251. package/resources/gofer/agents-skills/7_gofer_save/SKILL.md +423 -0
  252. package/resources/gofer/agents-skills/7a_stakeholder_comms/SKILL.md +508 -0
  253. package/resources/gofer/agents-skills/8_gofer_branding/SKILL.md +315 -0
  254. package/resources/gofer/agents-skills/9_gofer_tests/SKILL.md +558 -0
  255. package/resources/gofer/agents-skills/gofer_bootstrap_workspace/SKILL.md +148 -0
  256. package/resources/gofer/agents-skills/gofer_check_workspace/SKILL.md +119 -0
  257. package/resources/gofer/agents-skills/gofer_constitution/SKILL.md +612 -0
  258. package/resources/gofer/agents-skills/gofer_diagnose/SKILL.md +114 -0
  259. package/resources/gofer/agents-skills/gofer_eai_first_run/SKILL.md +397 -0
  260. package/resources/gofer/agents-skills/gofer_hydrate/SKILL.md +561 -0
  261. package/resources/gofer/agents-skills/gofer_personality/SKILL.md +44 -0
  262. package/resources/gofer/agents-skills/gofer_plan/SKILL.md +40 -0
  263. package/resources/gofer/agents-skills/gofer_side/SKILL.md +45 -0
  264. package/resources/gofer/agents-skills/gofer_spec_summary/SKILL.md +112 -0
  265. package/resources/gofer/agents-skills/gofer_tdd/SKILL.md +112 -0
  266. package/resources/gofer/agents-skills/gofer_vocabulary/SKILL.md +112 -0
  267. package/resources/gofer/agents-skills/gofer_zoom_out/SKILL.md +112 -0
  268. package/resources/gofer/bash-scripts/check-context-health.sh +365 -0
  269. package/resources/gofer/bash-scripts/check-persona-pack.sh +81 -0
  270. package/resources/gofer/bash-scripts/check-prerequisites.sh +168 -0
  271. package/resources/gofer/bash-scripts/common.sh +192 -0
  272. package/resources/gofer/bash-scripts/create-new-feature.sh +260 -0
  273. package/resources/gofer/bash-scripts/install-optional-tools.sh +270 -0
  274. package/resources/gofer/bash-scripts/log-stage.sh +224 -0
  275. package/resources/gofer/bash-scripts/mark-task-complete.sh +74 -0
  276. package/resources/gofer/bash-scripts/pipeline-state.sh +306 -0
  277. package/resources/gofer/bash-scripts/read-failed-approaches.sh +114 -0
  278. package/resources/gofer/bash-scripts/read-session-memories.sh +96 -0
  279. package/resources/gofer/bash-scripts/save-checkpoint.sh +407 -0
  280. package/resources/gofer/bash-scripts/setup-plan.sh +62 -0
  281. package/resources/gofer/bash-scripts/sync-implementation-status.sh +47 -0
  282. package/resources/gofer/bash-scripts/update-agent-context.sh +772 -0
  283. package/resources/gofer/bash-scripts/validate-artifact.sh +335 -0
  284. package/resources/gofer/bash-scripts/verify-task.sh +384 -0
  285. package/resources/gofer/bash-scripts/write-failed-approach.sh +110 -0
  286. package/resources/gofer/bash-scripts/write-periodic-checkpoint.sh +128 -0
  287. package/resources/gofer/bash-scripts/write-session-memory.sh +118 -0
  288. package/resources/gofer/claude-agents/assumption-tracker.md +168 -0
  289. package/resources/gofer/claude-agents/business-metrics-analyzer.md +169 -0
  290. package/resources/gofer/claude-agents/business-problem-validator.md +168 -0
  291. package/resources/gofer/claude-agents/codebase-analyzer.md +124 -0
  292. package/resources/gofer/claude-agents/codebase-locator.md +95 -0
  293. package/resources/gofer/claude-agents/codebase-pattern-finder.md +180 -0
  294. package/resources/gofer/claude-agents/comms-writer.md +158 -0
  295. package/resources/gofer/claude-agents/engineer-review.md +169 -0
  296. package/resources/gofer/claude-agents/implement-bug-triangulator.md +94 -0
  297. package/resources/gofer/claude-agents/implement-code-review-council.md +89 -0
  298. package/resources/gofer/claude-agents/implement-doc-writer.md +89 -0
  299. package/resources/gofer/claude-agents/implement-error-hardener.md +84 -0
  300. package/resources/gofer/claude-agents/implement-performance-explorer.md +95 -0
  301. package/resources/gofer/claude-agents/implement-test-diversifier.md +82 -0
  302. package/resources/gofer/claude-agents/implement-variant-generator.md +80 -0
  303. package/resources/gofer/claude-agents/multi-perspective-judge.md +114 -0
  304. package/resources/gofer/claude-agents/plan-api-comparator.md +90 -0
  305. package/resources/gofer/claude-agents/plan-architecture-diverger.md +100 -0
  306. package/resources/gofer/claude-agents/plan-data-model-stress-tester.md +95 -0
  307. package/resources/gofer/claude-agents/plan-migration-path-finder.md +95 -0
  308. package/resources/gofer/claude-agents/plan-refactor-rewrite-advisor.md +97 -0
  309. package/resources/gofer/claude-agents/research-dependency-evaluator.md +106 -0
  310. package/resources/gofer/claude-agents/research-horizon-scanner.md +100 -0
  311. package/resources/gofer/claude-agents/research-market-scanner.md +137 -0
  312. package/resources/gofer/claude-agents/research-perspective-multiplier.md +102 -0
  313. package/resources/gofer/claude-agents/scope-creep-detector.md +152 -0
  314. package/resources/gofer/claude-agents/specify-ambiguity-detector.md +95 -0
  315. package/resources/gofer/claude-agents/specify-journey-stress-tester.md +92 -0
  316. package/resources/gofer/claude-agents/tasks-cross-cutting-scanner.md +91 -0
  317. package/resources/gofer/claude-agents/tasks-rollback-planner.md +89 -0
  318. package/resources/gofer/claude-agents/validate-security-red-team.md +102 -0
  319. package/resources/gofer/claude-agents/validation-correctness.md +103 -0
  320. package/resources/gofer/claude-agents/validation-integration.md +129 -0
  321. package/resources/gofer/claude-agents/validation-performance.md +120 -0
  322. package/resources/gofer/claude-agents/validation-security.md +115 -0
  323. package/resources/gofer/claude-agents/validation-standards.md +151 -0
  324. package/resources/gofer/claude-agents/validation-test-quality.md +146 -0
  325. package/resources/gofer/claude-agents/visual-bounded-context-writer.md +40 -0
  326. package/resources/gofer/claude-agents/visual-c4-writer.md +45 -0
  327. package/resources/gofer/claude-agents/visual-erd-writer.md +34 -0
  328. package/resources/gofer/claude-agents/visual-heatmap-writer.md +63 -0
  329. package/resources/gofer/claude-agents/visual-risk-writer.md +64 -0
  330. package/resources/gofer/claude-commands/0_gofer_start.md +1282 -0
  331. package/resources/gofer/claude-commands/0a_problem_validation.md +424 -0
  332. package/resources/gofer/claude-commands/10_gofer_cloud.md +630 -0
  333. package/resources/gofer/claude-commands/1_gofer_research.md +1154 -0
  334. package/resources/gofer/claude-commands/2_gofer_specify.md +855 -0
  335. package/resources/gofer/claude-commands/3_gofer_plan.md +881 -0
  336. package/resources/gofer/claude-commands/4_gofer_tasks.md +743 -0
  337. package/resources/gofer/claude-commands/5_gofer_implement.md +919 -0
  338. package/resources/gofer/claude-commands/6_gofer_validate.md +2264 -0
  339. package/resources/gofer/claude-commands/7_gofer_save.md +418 -0
  340. package/resources/gofer/claude-commands/7a_stakeholder_comms.md +503 -0
  341. package/resources/gofer/claude-commands/8_gofer_branding.md +310 -0
  342. package/resources/gofer/claude-commands/9_gofer_tests.md +553 -0
  343. package/resources/gofer/claude-commands/gofer_bootstrap_workspace.md +143 -0
  344. package/resources/gofer/claude-commands/gofer_check_workspace.md +114 -0
  345. package/resources/gofer/claude-commands/gofer_constitution.md +607 -0
  346. package/resources/gofer/claude-commands/gofer_diagnose.md +109 -0
  347. package/resources/gofer/claude-commands/gofer_eai_first_run.md +392 -0
  348. package/resources/gofer/claude-commands/gofer_hydrate.md +556 -0
  349. package/resources/gofer/claude-commands/gofer_personality.md +39 -0
  350. package/resources/gofer/claude-commands/gofer_plan.md +35 -0
  351. package/resources/gofer/claude-commands/gofer_side.md +40 -0
  352. package/resources/gofer/claude-commands/gofer_spec_summary.md +107 -0
  353. package/resources/gofer/claude-commands/gofer_tdd.md +107 -0
  354. package/resources/gofer/claude-commands/gofer_vocabulary.md +107 -0
  355. package/resources/gofer/claude-commands/gofer_zoom_out.md +107 -0
  356. package/resources/gofer/claude-skills/eai-gofer/SKILL.md +56 -0
  357. package/resources/gofer/commands/.gitkeep +0 -0
  358. package/resources/gofer/commands/0_gofer_start.md +1299 -0
  359. package/resources/gofer/commands/0a_problem_validation.md +405 -0
  360. package/resources/gofer/commands/10_gofer_cloud.md +611 -0
  361. package/resources/gofer/commands/1_gofer_research.md +1135 -0
  362. package/resources/gofer/commands/2_gofer_specify.md +836 -0
  363. package/resources/gofer/commands/3_gofer_plan.md +862 -0
  364. package/resources/gofer/commands/4_gofer_tasks.md +724 -0
  365. package/resources/gofer/commands/5_gofer_implement.md +900 -0
  366. package/resources/gofer/commands/6_gofer_validate.md +2245 -0
  367. package/resources/gofer/commands/7_gofer_save.md +399 -0
  368. package/resources/gofer/commands/7a_stakeholder_comms.md +484 -0
  369. package/resources/gofer/commands/8_gofer_branding.md +291 -0
  370. package/resources/gofer/commands/9_gofer_tests.md +534 -0
  371. package/resources/gofer/commands/gofer_bootstrap_workspace.md +159 -0
  372. package/resources/gofer/commands/gofer_check_workspace.md +130 -0
  373. package/resources/gofer/commands/gofer_constitution.md +588 -0
  374. package/resources/gofer/commands/gofer_diagnose.md +89 -0
  375. package/resources/gofer/commands/gofer_eai_first_run.md +392 -0
  376. package/resources/gofer/commands/gofer_hydrate.md +537 -0
  377. package/resources/gofer/commands/gofer_personality.md +61 -0
  378. package/resources/gofer/commands/gofer_plan.md +51 -0
  379. package/resources/gofer/commands/gofer_side.md +56 -0
  380. package/resources/gofer/commands/gofer_spec_summary.md +87 -0
  381. package/resources/gofer/commands/gofer_tdd.md +87 -0
  382. package/resources/gofer/commands/gofer_vocabulary.md +87 -0
  383. package/resources/gofer/commands/gofer_zoom_out.md +87 -0
  384. package/resources/gofer/copilot-instructions/gofer-cost.instructions.md +13 -0
  385. package/resources/gofer/copilot-instructions/language-server.instructions.md +49 -0
  386. package/resources/gofer/copilot-instructions/typescript.instructions.md +47 -0
  387. package/resources/gofer/copilot-instructions/vscode-extension.instructions.md +46 -0
  388. package/resources/gofer/copilot-prompts/0_gofer_start.prompt.md +1308 -0
  389. package/resources/gofer/copilot-prompts/0a_problem_validation.prompt.md +429 -0
  390. package/resources/gofer/copilot-prompts/10_gofer_cloud.prompt.md +644 -0
  391. package/resources/gofer/copilot-prompts/1_gofer_research.prompt.md +1177 -0
  392. package/resources/gofer/copilot-prompts/2_gofer_specify.prompt.md +878 -0
  393. package/resources/gofer/copilot-prompts/3_gofer_plan.prompt.md +904 -0
  394. package/resources/gofer/copilot-prompts/4_gofer_tasks.prompt.md +766 -0
  395. package/resources/gofer/copilot-prompts/5_gofer_implement.prompt.md +942 -0
  396. package/resources/gofer/copilot-prompts/6_gofer_validate.prompt.md +2277 -0
  397. package/resources/gofer/copilot-prompts/7_gofer_save.prompt.md +433 -0
  398. package/resources/gofer/copilot-prompts/7a_stakeholder_comms.prompt.md +516 -0
  399. package/resources/gofer/copilot-prompts/8_gofer_branding.prompt.md +323 -0
  400. package/resources/gofer/copilot-prompts/9_gofer_tests.prompt.md +566 -0
  401. package/resources/gofer/copilot-prompts/gofer_bootstrap_workspace.prompt.md +161 -0
  402. package/resources/gofer/copilot-prompts/gofer_check_workspace.prompt.md +132 -0
  403. package/resources/gofer/copilot-prompts/gofer_constitution.prompt.md +621 -0
  404. package/resources/gofer/copilot-prompts/gofer_diagnose.prompt.md +127 -0
  405. package/resources/gofer/copilot-prompts/gofer_eai_first_run.prompt.md +410 -0
  406. package/resources/gofer/copilot-prompts/gofer_hydrate.prompt.md +571 -0
  407. package/resources/gofer/copilot-prompts/gofer_personality.prompt.md +57 -0
  408. package/resources/gofer/copilot-prompts/gofer_plan.prompt.md +53 -0
  409. package/resources/gofer/copilot-prompts/gofer_side.prompt.md +58 -0
  410. package/resources/gofer/copilot-prompts/gofer_spec_summary.prompt.md +125 -0
  411. package/resources/gofer/copilot-prompts/gofer_tdd.prompt.md +125 -0
  412. package/resources/gofer/copilot-prompts/gofer_vocabulary.prompt.md +125 -0
  413. package/resources/gofer/copilot-prompts/gofer_zoom_out.prompt.md +125 -0
  414. package/resources/gofer/gemini/agents/assumption-tracker.md +171 -0
  415. package/resources/gofer/gemini/agents/business-metrics-analyzer.md +172 -0
  416. package/resources/gofer/gemini/agents/business-problem-validator.md +171 -0
  417. package/resources/gofer/gemini/agents/codebase-analyzer.md +127 -0
  418. package/resources/gofer/gemini/agents/codebase-locator.md +98 -0
  419. package/resources/gofer/gemini/agents/codebase-pattern-finder.md +183 -0
  420. package/resources/gofer/gemini/agents/comms-writer.md +161 -0
  421. package/resources/gofer/gemini/agents/engineer-review.md +172 -0
  422. package/resources/gofer/gemini/agents/implement-bug-triangulator.md +97 -0
  423. package/resources/gofer/gemini/agents/implement-code-review-council.md +92 -0
  424. package/resources/gofer/gemini/agents/implement-doc-writer.md +92 -0
  425. package/resources/gofer/gemini/agents/implement-error-hardener.md +87 -0
  426. package/resources/gofer/gemini/agents/implement-performance-explorer.md +98 -0
  427. package/resources/gofer/gemini/agents/implement-test-diversifier.md +85 -0
  428. package/resources/gofer/gemini/agents/implement-variant-generator.md +83 -0
  429. package/resources/gofer/gemini/agents/multi-perspective-judge.md +117 -0
  430. package/resources/gofer/gemini/agents/plan-api-comparator.md +93 -0
  431. package/resources/gofer/gemini/agents/plan-architecture-diverger.md +103 -0
  432. package/resources/gofer/gemini/agents/plan-data-model-stress-tester.md +98 -0
  433. package/resources/gofer/gemini/agents/plan-migration-path-finder.md +98 -0
  434. package/resources/gofer/gemini/agents/plan-refactor-rewrite-advisor.md +100 -0
  435. package/resources/gofer/gemini/agents/research-dependency-evaluator.md +109 -0
  436. package/resources/gofer/gemini/agents/research-horizon-scanner.md +103 -0
  437. package/resources/gofer/gemini/agents/research-market-scanner.md +140 -0
  438. package/resources/gofer/gemini/agents/research-perspective-multiplier.md +105 -0
  439. package/resources/gofer/gemini/agents/scope-creep-detector.md +155 -0
  440. package/resources/gofer/gemini/agents/specify-ambiguity-detector.md +98 -0
  441. package/resources/gofer/gemini/agents/specify-journey-stress-tester.md +95 -0
  442. package/resources/gofer/gemini/agents/tasks-cross-cutting-scanner.md +94 -0
  443. package/resources/gofer/gemini/agents/tasks-rollback-planner.md +92 -0
  444. package/resources/gofer/gemini/agents/validate-security-red-team.md +105 -0
  445. package/resources/gofer/gemini/agents/validation-correctness.md +106 -0
  446. package/resources/gofer/gemini/agents/validation-integration.md +132 -0
  447. package/resources/gofer/gemini/agents/validation-performance.md +123 -0
  448. package/resources/gofer/gemini/agents/validation-security.md +118 -0
  449. package/resources/gofer/gemini/agents/validation-standards.md +154 -0
  450. package/resources/gofer/gemini/agents/validation-test-quality.md +149 -0
  451. package/resources/gofer/gemini/agents/visual-bounded-context-writer.md +40 -0
  452. package/resources/gofer/gemini/agents/visual-c4-writer.md +44 -0
  453. package/resources/gofer/gemini/agents/visual-erd-writer.md +36 -0
  454. package/resources/gofer/gemini/agents/visual-heatmap-writer.md +63 -0
  455. package/resources/gofer/gemini/agents/visual-risk-writer.md +64 -0
  456. package/resources/gofer/gemini/commands/gofer/.gitkeep +0 -0
  457. package/resources/gofer/gemini/commands/gofer/0_gofer_start.md +1282 -0
  458. package/resources/gofer/gemini/commands/gofer/0_gofer_start.toml +2 -0
  459. package/resources/gofer/gemini/commands/gofer/0a_problem_validation.md +424 -0
  460. package/resources/gofer/gemini/commands/gofer/0a_problem_validation.toml +2 -0
  461. package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.md +630 -0
  462. package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.toml +2 -0
  463. package/resources/gofer/gemini/commands/gofer/1_gofer_research.md +1154 -0
  464. package/resources/gofer/gemini/commands/gofer/1_gofer_research.toml +2 -0
  465. package/resources/gofer/gemini/commands/gofer/2_gofer_specify.md +855 -0
  466. package/resources/gofer/gemini/commands/gofer/2_gofer_specify.toml +2 -0
  467. package/resources/gofer/gemini/commands/gofer/3_gofer_plan.md +881 -0
  468. package/resources/gofer/gemini/commands/gofer/3_gofer_plan.toml +2 -0
  469. package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.md +743 -0
  470. package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.toml +2 -0
  471. package/resources/gofer/gemini/commands/gofer/5_gofer_implement.md +919 -0
  472. package/resources/gofer/gemini/commands/gofer/5_gofer_implement.toml +2 -0
  473. package/resources/gofer/gemini/commands/gofer/6_gofer_validate.md +2264 -0
  474. package/resources/gofer/gemini/commands/gofer/6_gofer_validate.toml +2 -0
  475. package/resources/gofer/gemini/commands/gofer/7_gofer_save.md +418 -0
  476. package/resources/gofer/gemini/commands/gofer/7_gofer_save.toml +2 -0
  477. package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.md +503 -0
  478. package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.toml +2 -0
  479. package/resources/gofer/gemini/commands/gofer/8_gofer_branding.md +310 -0
  480. package/resources/gofer/gemini/commands/gofer/8_gofer_branding.toml +2 -0
  481. package/resources/gofer/gemini/commands/gofer/9_gofer_tests.md +553 -0
  482. package/resources/gofer/gemini/commands/gofer/9_gofer_tests.toml +2 -0
  483. package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.md +143 -0
  484. package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.toml +2 -0
  485. package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.md +114 -0
  486. package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.toml +2 -0
  487. package/resources/gofer/gemini/commands/gofer/gofer_constitution.md +607 -0
  488. package/resources/gofer/gemini/commands/gofer/gofer_constitution.toml +2 -0
  489. package/resources/gofer/gemini/commands/gofer/gofer_diagnose.md +109 -0
  490. package/resources/gofer/gemini/commands/gofer/gofer_diagnose.toml +2 -0
  491. package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.md +392 -0
  492. package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.toml +2 -0
  493. package/resources/gofer/gemini/commands/gofer/gofer_hydrate.md +556 -0
  494. package/resources/gofer/gemini/commands/gofer/gofer_hydrate.toml +2 -0
  495. package/resources/gofer/gemini/commands/gofer/gofer_personality.md +39 -0
  496. package/resources/gofer/gemini/commands/gofer/gofer_personality.toml +2 -0
  497. package/resources/gofer/gemini/commands/gofer/gofer_plan.md +35 -0
  498. package/resources/gofer/gemini/commands/gofer/gofer_plan.toml +2 -0
  499. package/resources/gofer/gemini/commands/gofer/gofer_side.md +40 -0
  500. package/resources/gofer/gemini/commands/gofer/gofer_side.toml +2 -0
  501. package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.md +107 -0
  502. package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.toml +2 -0
  503. package/resources/gofer/gemini/commands/gofer/gofer_tdd.md +107 -0
  504. package/resources/gofer/gemini/commands/gofer/gofer_tdd.toml +2 -0
  505. package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.md +107 -0
  506. package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.toml +2 -0
  507. package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.md +107 -0
  508. package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.toml +2 -0
  509. package/resources/gofer/gemini/commands/gofer/manifest.json +32 -0
  510. package/resources/gofer/gemini/extension.json +16 -0
  511. package/resources/gofer/github-agents/gofer-business.agent.md +20 -0
  512. package/resources/gofer/github-agents/gofer-implement.agent.md +15 -0
  513. package/resources/gofer/github-agents/gofer-plan.agent.md +15 -0
  514. package/resources/gofer/github-agents/gofer-research.agent.md +15 -0
  515. package/resources/gofer/github-agents/gofer-validate.agent.md +10 -0
  516. package/resources/gofer/github-skills/eai-gofer/SKILL.md +56 -0
  517. package/resources/gofer/hook-scripts/agent-stop.mjs +655 -0
  518. package/resources/gofer/hook-scripts/log-stage-launch-time.mjs +77 -0
  519. package/resources/gofer/hook-scripts/post-tool-use.mjs +333 -0
  520. package/resources/gofer/hook-scripts/queued-input.mjs +188 -0
  521. package/resources/gofer/hook-scripts/session-lifecycle.mjs +93 -0
  522. package/resources/gofer/hook-scripts/user-prompt-submit.mjs +228 -0
  523. package/resources/gofer/instruction-templates/base/agents-base.md +37 -0
  524. package/resources/gofer/instruction-templates/base/claude-base.md +7 -0
  525. package/resources/gofer/instruction-templates/base/copilot-base.md +26 -0
  526. package/resources/gofer/instruction-templates/gofer/gofer-claude.md +5 -0
  527. package/resources/gofer/instruction-templates/gofer/gofer-copilot.md +9 -0
  528. package/resources/gofer/instruction-templates/languages/generic.md +7 -0
  529. package/resources/gofer/instruction-templates/languages/go.md +8 -0
  530. package/resources/gofer/instruction-templates/languages/java.md +8 -0
  531. package/resources/gofer/instruction-templates/languages/python.md +9 -0
  532. package/resources/gofer/instruction-templates/languages/rust.md +9 -0
  533. package/resources/gofer/instruction-templates/languages/typescript.md +19 -0
  534. package/resources/gofer/instruction-templates/workflow/principles.md +52 -0
  535. package/resources/gofer/memory/constitution.md +391 -0
  536. package/resources/gofer/memory/context-profiles.yaml +74 -0
  537. package/resources/gofer/memory/decisions/000-use-adr-for-decisions.md +67 -0
  538. package/resources/gofer/memory/decisions/001-di-framework.md +190 -0
  539. package/resources/gofer/memory/decisions/002-module-extraction.md +305 -0
  540. package/resources/gofer/memory/decisions/003-error-handling.md +368 -0
  541. package/resources/gofer/memory/decisions/004-cache-eviction.md +436 -0
  542. package/resources/gofer/memory/decisions/005-constants-management.md +520 -0
  543. package/resources/gofer/memory/decisions/README.md +129 -0
  544. package/resources/gofer/memory/diagrams/di-container.mmd +321 -0
  545. package/resources/gofer/memory/diagrams/extension-activation.mmd +184 -0
  546. package/resources/gofer/memory/diagrams/module-dependencies.mmd +264 -0
  547. package/resources/gofer/memory/gofer-model-policy.yaml +97 -0
  548. package/resources/gofer/memory/lessons.md +46 -0
  549. package/resources/gofer/node-scripts/canonical-descriptions.mjs +86 -0
  550. package/resources/gofer/node-scripts/check-version-alignment.mjs +131 -0
  551. package/resources/gofer/node-scripts/codex-doctor.mjs +425 -0
  552. package/resources/gofer/node-scripts/generate-commands.mjs +1366 -0
  553. package/resources/gofer/node-scripts/generate-issues.js +563 -0
  554. package/resources/gofer/node-scripts/gofer-closed-loop-audit.mjs +893 -0
  555. package/resources/gofer/node-scripts/gofer-loop-audit.mjs +541 -0
  556. package/resources/gofer/node-scripts/gofer-performance-report.mjs +306 -0
  557. package/resources/gofer/node-scripts/gofer-workspace-bootstrap.mjs +56 -0
  558. package/resources/gofer/node-scripts/gofer-workspace-check.mjs +56 -0
  559. package/resources/gofer/node-scripts/lib/ai-leverage-tagger.mjs +103 -0
  560. package/resources/gofer/node-scripts/lib/assemble-stakeholder-pack.mjs +114 -0
  561. package/resources/gofer/node-scripts/lib/marp-deck.mjs +87 -0
  562. package/resources/gofer/node-scripts/lib/mermaid-tabular-fallback.mjs +264 -0
  563. package/resources/gofer/node-scripts/lib/render-visual.mjs +54 -0
  564. package/resources/gofer/node-scripts/lib/validate-aliases.mjs +85 -0
  565. package/resources/gofer/node-scripts/lib/visual-counts.mjs +44 -0
  566. package/resources/gofer/node-scripts/lib/visual-pass-pipeline.mjs +134 -0
  567. package/resources/gofer/node-scripts/mermaid-export.mjs +72 -0
  568. package/resources/gofer/node-scripts/package-agent-plugin.mjs +940 -0
  569. package/resources/gofer/node-scripts/parse-stage-command.mjs +211 -0
  570. package/resources/gofer/node-scripts/schemas/.gitkeep +0 -0
  571. package/resources/gofer/node-scripts/schemas/stage-command.schema.json +72 -0
  572. package/resources/gofer/node-scripts/sync-extension-resources.mjs +110 -0
  573. package/resources/gofer/node-scripts/workspace-bootstrap-lib.mjs +1166 -0
  574. package/resources/gofer/powershell-scripts/install-optional-tools.ps1 +214 -0
  575. package/resources/gofer/references/platform/README.md +17 -0
  576. package/resources/gofer/references/platform/deployment-repo.md +9 -0
  577. package/resources/gofer/references/platform/eai-app-template.md +45 -0
  578. package/resources/gofer/references/platform/eai-config-driven-ui.md +156 -0
  579. package/resources/gofer/references/platform/eai-error-catalog.yaml +197 -0
  580. package/resources/gofer/references/platform/eai-repo-contract.md +134 -0
  581. package/resources/gofer/references/platform/eai-service-patterns.md +56 -0
  582. package/resources/gofer/references/platform/eai.md +85 -0
  583. package/resources/gofer/references/platform/vertical-template.md +49 -0
  584. package/resources/gofer/specify-commands/.gitkeep +0 -0
  585. package/resources/gofer/specify-commands/0_gofer_start.md +1299 -0
  586. package/resources/gofer/specify-commands/0a_problem_validation.md +405 -0
  587. package/resources/gofer/specify-commands/10_gofer_cloud.md +611 -0
  588. package/resources/gofer/specify-commands/1_gofer_research.md +1135 -0
  589. package/resources/gofer/specify-commands/2_gofer_specify.md +836 -0
  590. package/resources/gofer/specify-commands/3_gofer_plan.md +862 -0
  591. package/resources/gofer/specify-commands/4_gofer_tasks.md +724 -0
  592. package/resources/gofer/specify-commands/5_gofer_implement.md +900 -0
  593. package/resources/gofer/specify-commands/6_gofer_validate.md +2245 -0
  594. package/resources/gofer/specify-commands/7_gofer_save.md +399 -0
  595. package/resources/gofer/specify-commands/7a_stakeholder_comms.md +484 -0
  596. package/resources/gofer/specify-commands/8_gofer_branding.md +291 -0
  597. package/resources/gofer/specify-commands/9_gofer_tests.md +534 -0
  598. package/resources/gofer/specify-commands/gofer_bootstrap_workspace.md +159 -0
  599. package/resources/gofer/specify-commands/gofer_check_workspace.md +130 -0
  600. package/resources/gofer/specify-commands/gofer_constitution.md +588 -0
  601. package/resources/gofer/specify-commands/gofer_diagnose.md +89 -0
  602. package/resources/gofer/specify-commands/gofer_eai_first_run.md +392 -0
  603. package/resources/gofer/specify-commands/gofer_hydrate.md +537 -0
  604. package/resources/gofer/specify-commands/gofer_personality.md +61 -0
  605. package/resources/gofer/specify-commands/gofer_plan.md +51 -0
  606. package/resources/gofer/specify-commands/gofer_side.md +56 -0
  607. package/resources/gofer/specify-commands/gofer_spec_summary.md +87 -0
  608. package/resources/gofer/specify-commands/gofer_tdd.md +87 -0
  609. package/resources/gofer/specify-commands/gofer_vocabulary.md +87 -0
  610. package/resources/gofer/specify-commands/gofer_zoom_out.md +87 -0
  611. package/resources/gofer/system-skills/0_gofer_start/SKILL.md +1287 -0
  612. package/resources/gofer/system-skills/0a_problem_validation/SKILL.md +429 -0
  613. package/resources/gofer/system-skills/10_gofer_cloud/SKILL.md +635 -0
  614. package/resources/gofer/system-skills/1_gofer_research/SKILL.md +1159 -0
  615. package/resources/gofer/system-skills/2_gofer_specify/SKILL.md +860 -0
  616. package/resources/gofer/system-skills/3_gofer_plan/SKILL.md +886 -0
  617. package/resources/gofer/system-skills/4_gofer_tasks/SKILL.md +748 -0
  618. package/resources/gofer/system-skills/5_gofer_implement/SKILL.md +924 -0
  619. package/resources/gofer/system-skills/6_gofer_validate/SKILL.md +2269 -0
  620. package/resources/gofer/system-skills/7_gofer_save/SKILL.md +423 -0
  621. package/resources/gofer/system-skills/7a_stakeholder_comms/SKILL.md +508 -0
  622. package/resources/gofer/system-skills/8_gofer_branding/SKILL.md +315 -0
  623. package/resources/gofer/system-skills/9_gofer_tests/SKILL.md +558 -0
  624. package/resources/gofer/system-skills/gofer_bootstrap_workspace/SKILL.md +148 -0
  625. package/resources/gofer/system-skills/gofer_check_workspace/SKILL.md +119 -0
  626. package/resources/gofer/system-skills/gofer_constitution/SKILL.md +612 -0
  627. package/resources/gofer/system-skills/gofer_diagnose/SKILL.md +114 -0
  628. package/resources/gofer/system-skills/gofer_eai_first_run/SKILL.md +397 -0
  629. package/resources/gofer/system-skills/gofer_hydrate/SKILL.md +561 -0
  630. package/resources/gofer/system-skills/gofer_personality/SKILL.md +44 -0
  631. package/resources/gofer/system-skills/gofer_plan/SKILL.md +40 -0
  632. package/resources/gofer/system-skills/gofer_side/SKILL.md +45 -0
  633. package/resources/gofer/system-skills/gofer_spec_summary/SKILL.md +112 -0
  634. package/resources/gofer/system-skills/gofer_tdd/SKILL.md +112 -0
  635. package/resources/gofer/system-skills/gofer_vocabulary/SKILL.md +112 -0
  636. package/resources/gofer/system-skills/gofer_zoom_out/SKILL.md +112 -0
  637. package/resources/gofer/templates/agent-file-template.md +28 -0
  638. package/resources/gofer/templates/assumptions-template.md +94 -0
  639. package/resources/gofer/templates/audit-history-template.md +35 -0
  640. package/resources/gofer/templates/brand/brand-profile-template.json +45 -0
  641. package/resources/gofer/templates/brand/document-style-template.md +50 -0
  642. package/resources/gofer/templates/brand/marp-theme-template.css +58 -0
  643. package/resources/gofer/templates/brownfield-analysis.md +44 -0
  644. package/resources/gofer/templates/business-metrics-template.md +120 -0
  645. package/resources/gofer/templates/business-owner-summary-template.md +83 -0
  646. package/resources/gofer/templates/checklist-template.md +40 -0
  647. package/resources/gofer/templates/ciso-security-summary-template.md +70 -0
  648. package/resources/gofer/templates/context-bundle-template.md +76 -0
  649. package/resources/gofer/templates/contract-pack-template.md +109 -0
  650. package/resources/gofer/templates/cto-architecture-summary-template.md +83 -0
  651. package/resources/gofer/templates/discovery-template.md +92 -0
  652. package/resources/gofer/templates/eai-preflight-template.md +144 -0
  653. package/resources/gofer/templates/goal-ledger-template.json +69 -0
  654. package/resources/gofer/templates/gofer-model-policy.yaml +97 -0
  655. package/resources/gofer/templates/issues-template.md +106 -0
  656. package/resources/gofer/templates/journey/base-journey.md +95 -0
  657. package/resources/gofer/templates/journey/industry-variants.yaml +277 -0
  658. package/resources/gofer/templates/loop-contract-template.json +68 -0
  659. package/resources/gofer/templates/plan-template.md +215 -0
  660. package/resources/gofer/templates/problem-brief-template.md +85 -0
  661. package/resources/gofer/templates/proposal-review-template.md +79 -0
  662. package/resources/gofer/templates/research-template.md +222 -0
  663. package/resources/gofer/templates/reuse-scan-template.md +43 -0
  664. package/resources/gofer/templates/sequence-diagrams/option-spectrum.yaml +178 -0
  665. package/resources/gofer/templates/service-fit-matrix-template.md +29 -0
  666. package/resources/gofer/templates/session-handoff-template.md +172 -0
  667. package/resources/gofer/templates/spec-summary-template.md +118 -0
  668. package/resources/gofer/templates/spec-template.md +196 -0
  669. package/resources/gofer/templates/stakeholder-comms-template.md +330 -0
  670. package/resources/gofer/templates/stakeholder-review-index-template.md +54 -0
  671. package/resources/gofer/templates/tasks-template.md +323 -0
  672. package/resources/gofer/templates/ui-approval-template.md +32 -0
  673. package/resources/gofer/templates/ui-preview-brief-template.md +65 -0
  674. package/resources/gofer/templates/ui-review-log-template.md +11 -0
  675. package/resources/gofer/templates/visuals/.gitkeep +0 -0
  676. package/resources/gofer/templates/visuals/bounded-context-map.md +19 -0
  677. package/resources/gofer/templates/visuals/bounded-context-template.md +47 -0
  678. package/resources/gofer/templates/visuals/c4-container-template.md +38 -0
  679. package/resources/gofer/templates/visuals/c4-container.md +20 -0
  680. package/resources/gofer/templates/visuals/c4-context-template.md +46 -0
  681. package/resources/gofer/templates/visuals/capability-heatmap-template.md +54 -0
  682. package/resources/gofer/templates/visuals/data-model-erd-template.md +41 -0
  683. package/resources/gofer/templates/visuals/erd.md +19 -0
  684. package/resources/gofer/templates/visuals/impact-canvas.md +40 -0
  685. package/resources/gofer/templates/visuals/risk-heatmap-template.md +51 -0
  686. package/resources/gofer/templates/visuals/roi-projection.md +17 -0
  687. package/resources/gofer/templates/visuals/value-stream-asis.md +16 -0
  688. package/resources/gofer/templates/visuals/value-stream-tobe.md +18 -0
  689. package/resources/gofer/templates/working-backwards-prfaq-template.md +165 -0
  690. package/resources/linked-sources.json +25 -0
@@ -0,0 +1,940 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Builds the installable Gofer plugin bundle for supported AI coding apps.
4
+ *
5
+ * Canonical command sources live in `.specify/commands/`. This script stages a
6
+ * portable plugin under `dist/` and, when requested, refreshes the repo-local
7
+ * marketplace plugin under `plugins/eai-gofer/`.
8
+ */
9
+
10
+ import { execFile } from 'node:child_process';
11
+ import { promises as fs } from 'node:fs';
12
+ import path from 'node:path';
13
+ import { promisify } from 'node:util';
14
+ import { parseStageCommand } from './parse-stage-command.mjs';
15
+
16
+ const execFileAsync = promisify(execFile);
17
+
18
+ const GENERATED_MARKER = 'generated-by-eai-gofer';
19
+ const PLUGIN_NAME = 'eai-gofer';
20
+ const PLUGIN_DISPLAY_NAME = 'Gofer';
21
+ const UMBRELLA_SKILLS_DIR = 'plugin-skills';
22
+ const PLUGIN_ICON_SOURCE = 'extension/icon.png';
23
+ const PLUGIN_ICON_TARGET = 'assets/eai-gofer-icon.png';
24
+ const REPOSITORY_URL = 'https://github.com/eai-tools/eai-gofer';
25
+ const PUBLIC_SITE_URL = 'https://eai-tools.github.io/eai-gofer';
26
+ const PUBLIC_RELEASES_URL = `${PUBLIC_SITE_URL}/releases`;
27
+ const PUBLIC_PLUGIN_URL = `${PUBLIC_RELEASES_URL}/plugins/${PLUGIN_NAME}`;
28
+ const CLAUDE_MARKETPLACE_URL = `${PUBLIC_PLUGIN_URL}/claude-marketplace.json`;
29
+ const CODEX_PLUGIN_MANIFEST_URL = `${PUBLIC_PLUGIN_URL}/codex-plugin.json`;
30
+ const COPILOT_MARKETPLACE_URL = `${PUBLIC_PLUGIN_URL}/copilot-marketplace.json`;
31
+ const GEMINI_EXTENSION_URL = `${PUBLIC_PLUGIN_URL}/gemini-extension.json`;
32
+ const WINDOWS_FORBIDDEN_SEGMENT_CHARS = new Set(['<', '>', ':', '"', '\\', '|', '?', '*']);
33
+ const WINDOWS_RESERVED_BASENAME = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i;
34
+ const WINDOWS_SAFE_RELATIVE_PATH_LIMIT = 240;
35
+ const PERSONAL_PATH_PATTERN =
36
+ /(^|[\s"'])(\/Users\/[^/\s"']+|\/home\/[^/\s"']+|[A-Za-z]:\\Users\\[^\\\s"']+)/;
37
+ const WORKSPACE_PREFLIGHT_EXCLUDED_COMMANDS = new Set([
38
+ 'gofer:plan',
39
+ 'gofer:side',
40
+ 'gofer:personality',
41
+ 'gofer:check-workspace',
42
+ 'gofer:bootstrap-workspace',
43
+ 'gofer:eai-first-run',
44
+ ]);
45
+
46
+ function parseArgs(argv) {
47
+ const args = {
48
+ root: process.cwd(),
49
+ outDir: 'dist',
50
+ version: null,
51
+ syncRepo: false,
52
+ };
53
+
54
+ for (let i = 0; i < argv.length; i++) {
55
+ const arg = argv[i];
56
+ if (arg === '--root' && argv[i + 1]) {
57
+ args.root = argv[++i];
58
+ } else if (arg === '--out-dir' && argv[i + 1]) {
59
+ args.outDir = argv[++i];
60
+ } else if (arg === '--version' && argv[i + 1]) {
61
+ args.version = argv[++i].replace(/^v/, '');
62
+ } else if (arg === '--sync-repo') {
63
+ args.syncRepo = true;
64
+ } else if (arg === '--help' || arg === '-h') {
65
+ args.help = true;
66
+ }
67
+ }
68
+
69
+ return args;
70
+ }
71
+
72
+ function usage() {
73
+ return [
74
+ 'Usage: node .specify/scripts/node/package-agent-plugin.mjs --version <x.y.z>',
75
+ '',
76
+ 'Options:',
77
+ ' --version <x.y.z> Release/package version to stamp into plugin manifests.',
78
+ ' --out-dir <dir> Output directory for the staged folder and zip. Default: dist',
79
+ ' --root <dir> Gofer repository root. Default: current working directory',
80
+ ' --sync-repo Refresh root manifests and plugins/eai-gofer marketplace bundle.',
81
+ ].join('\n');
82
+ }
83
+
84
+ function assertSemver(version) {
85
+ if (!/^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?$/.test(version ?? '')) {
86
+ throw new Error(`Plugin version must look like 3.4.0; got '${version ?? ''}'.`);
87
+ }
88
+ }
89
+
90
+ async function readJson(filePath) {
91
+ return JSON.parse(await fs.readFile(filePath, 'utf8'));
92
+ }
93
+
94
+ async function loadStages(root) {
95
+ const commandsDir = path.join(root, '.specify', 'commands');
96
+ const entries = (await fs.readdir(commandsDir))
97
+ .filter((entry) => entry.endsWith('.md') && entry !== '.gitkeep')
98
+ .sort((left, right) => left.localeCompare(right, undefined, { numeric: true }));
99
+
100
+ const stages = [];
101
+ for (const entry of entries) {
102
+ const filePath = path.join(commandsDir, entry);
103
+ const parsed = await parseStageCommand(filePath);
104
+ stages.push({
105
+ stem: path.basename(entry, '.md'),
106
+ sourceFile: entry,
107
+ filePath,
108
+ ...parsed,
109
+ });
110
+ }
111
+
112
+ return stages;
113
+ }
114
+
115
+ function yamlString(value) {
116
+ return JSON.stringify(String(value));
117
+ }
118
+
119
+ function stageNames(stages) {
120
+ return stages.map((stage) => String(stage.frontmatter.name));
121
+ }
122
+
123
+ function buildPublicVsixUrl(version) {
124
+ return `${PUBLIC_RELEASES_URL}/eai-gofer-${version}.vsix`;
125
+ }
126
+
127
+ function buildPublicAgentPluginZipUrl(version) {
128
+ return `${PUBLIC_RELEASES_URL}/eai-gofer-agent-plugin-${version}.zip`;
129
+ }
130
+
131
+ function buildLatestPublicVsixUrl() {
132
+ return `${PUBLIC_RELEASES_URL}/eai-gofer-latest.vsix`;
133
+ }
134
+
135
+ function buildLatestPublicAgentPluginZipUrl() {
136
+ return `${PUBLIC_RELEASES_URL}/eai-gofer-agent-plugin-latest.zip`;
137
+ }
138
+
139
+ function buildCodexManifest(version, stages, paths = {}) {
140
+ return {
141
+ name: PLUGIN_NAME,
142
+ version,
143
+ description:
144
+ 'Gofer core pipeline and helper commands for Claude, Codex, Copilot, Gemini, and VS Code.',
145
+ author: {
146
+ name: 'EAI Tools',
147
+ url: REPOSITORY_URL,
148
+ },
149
+ homepage: REPOSITORY_URL,
150
+ repository: REPOSITORY_URL,
151
+ license: 'Apache-2.0',
152
+ keywords: [
153
+ 'eai-gofer',
154
+ 'gofer',
155
+ 'codex',
156
+ 'claude',
157
+ 'copilot',
158
+ 'gemini',
159
+ 'spec-driven-development',
160
+ ],
161
+ skills: paths.skills ?? `./${UMBRELLA_SKILLS_DIR}/`,
162
+ interface: {
163
+ displayName: PLUGIN_DISPLAY_NAME,
164
+ shortDescription: 'Spec-driven delivery workflow for agentic coding',
165
+ longDescription:
166
+ 'Run Gofer’s core /0_gofer_start → /6_gofer_validate workflow, with optional bootstrap, save/resume, testing, and communications helpers.',
167
+ developerName: 'EAI Tools',
168
+ category: 'Coding',
169
+ capabilities: ['Interactive', 'Write'],
170
+ websiteURL: REPOSITORY_URL,
171
+ defaultPrompt: [
172
+ 'Set up my first EAI Platform app with Gofer',
173
+ 'Run Gofer research for this feature',
174
+ 'Create a Gofer implementation plan',
175
+ 'Validate this branch with Gofer',
176
+ ],
177
+ brandColor: '#145DA0',
178
+ composerIcon: paths.icon ?? `./${PLUGIN_ICON_TARGET}`,
179
+ logo: paths.icon ?? `./${PLUGIN_ICON_TARGET}`,
180
+ },
181
+ gofer: {
182
+ stages: stageNames(stages),
183
+ marketplacePath: PUBLIC_PLUGIN_URL,
184
+ releaseAsset: buildPublicAgentPluginZipUrl(version),
185
+ vsixAsset: buildPublicVsixUrl(version),
186
+ },
187
+ };
188
+ }
189
+
190
+ function buildGeminiManifest(version, paths = {}) {
191
+ return {
192
+ name: PLUGIN_NAME,
193
+ version,
194
+ description: 'Gofer core pipeline and helper commands as a Gemini CLI extension',
195
+ license: 'Apache-2.0',
196
+ commands: paths.commands ?? '.gemini/commands/gofer/',
197
+ gofer: {
198
+ bundle_url: PUBLIC_PLUGIN_URL,
199
+ manifest_url: `${PUBLIC_PLUGIN_URL}/gemini-extension.json`,
200
+ commands_manifest_url: `${PUBLIC_PLUGIN_URL}/gemini-commands-manifest.json`,
201
+ download_url: buildPublicAgentPluginZipUrl(version),
202
+ latest_download_url: buildLatestPublicAgentPluginZipUrl(),
203
+ vsix_url: buildPublicVsixUrl(version),
204
+ latest_vsix_url: buildLatestPublicVsixUrl(),
205
+ },
206
+ };
207
+ }
208
+
209
+ function buildPluginManifest(version, paths = {}) {
210
+ return {
211
+ name: PLUGIN_NAME,
212
+ version,
213
+ description:
214
+ 'Gofer core pipeline and helper commands for Claude, Gemini, Codex, Copilot, and VS Code.',
215
+ author: {
216
+ name: 'EAI Tools',
217
+ url: REPOSITORY_URL,
218
+ },
219
+ homepage: REPOSITORY_URL,
220
+ repository: REPOSITORY_URL,
221
+ license: 'Apache-2.0',
222
+ keywords: [
223
+ 'eai-gofer',
224
+ 'gofer',
225
+ 'claude-code',
226
+ 'codex',
227
+ 'copilot',
228
+ 'gemini',
229
+ 'spec-driven-development',
230
+ ],
231
+ skills: paths.skills ?? `./${UMBRELLA_SKILLS_DIR}/`,
232
+ agents: paths.agents ?? './agents/',
233
+ commands: paths.commands ?? './commands/',
234
+ };
235
+ }
236
+
237
+ function buildClaudeManifest(version, paths = {}) {
238
+ return {
239
+ name: PLUGIN_NAME,
240
+ version,
241
+ description:
242
+ 'Gofer core pipeline: /0_gofer_start through /6_gofer_validate, plus optional helper commands.',
243
+ author: {
244
+ name: 'EAI Tools',
245
+ url: REPOSITORY_URL,
246
+ },
247
+ homepage: REPOSITORY_URL,
248
+ repository: REPOSITORY_URL,
249
+ license: 'Apache-2.0',
250
+ keywords: ['eai-gofer', 'gofer', 'claude-code', 'spec-driven-development'],
251
+ skills: paths.skills ?? './skills/',
252
+ };
253
+ }
254
+
255
+ function buildBundleMarketplace(version) {
256
+ return {
257
+ name: 'eai-gofer',
258
+ owner: {
259
+ name: 'EAI Tools',
260
+ url: REPOSITORY_URL,
261
+ },
262
+ metadata: {
263
+ description:
264
+ 'Public Gofer bundle for Claude Code, Gemini CLI, Codex, and Copilot workflows.',
265
+ version,
266
+ },
267
+ plugins: [
268
+ {
269
+ name: PLUGIN_NAME,
270
+ source: './plugins/eai-gofer',
271
+ description:
272
+ 'Gofer core pipeline from /0_gofer_start through /6_gofer_validate, with optional helper commands.',
273
+ version,
274
+ author: {
275
+ name: 'EAI Tools',
276
+ url: REPOSITORY_URL,
277
+ },
278
+ homepage: REPOSITORY_URL,
279
+ repository: REPOSITORY_URL,
280
+ category: 'Coding',
281
+ tags: [
282
+ 'eai-gofer',
283
+ 'gofer',
284
+ 'claude',
285
+ 'codex',
286
+ 'copilot',
287
+ 'gemini',
288
+ 'spec-driven-development',
289
+ ],
290
+ },
291
+ ],
292
+ };
293
+ }
294
+
295
+ function buildRepoMarketplace(version) {
296
+ return {
297
+ name: 'eai-gofer',
298
+ owner: {
299
+ name: 'EAI Tools',
300
+ url: REPOSITORY_URL,
301
+ },
302
+ metadata: {
303
+ description:
304
+ 'Install the Gofer repo marketplace for Claude Code, Gemini CLI, Codex, or Copilot CLI from the public GitHub repository.',
305
+ version,
306
+ },
307
+ plugins: [
308
+ {
309
+ name: PLUGIN_NAME,
310
+ source: './plugins/eai-gofer',
311
+ description:
312
+ 'Gofer core pipeline from /0_gofer_start through /6_gofer_validate, with optional helper commands.',
313
+ version,
314
+ author: {
315
+ name: 'EAI Tools',
316
+ url: REPOSITORY_URL,
317
+ },
318
+ homepage: REPOSITORY_URL,
319
+ repository: REPOSITORY_URL,
320
+ license: 'Apache-2.0',
321
+ category: 'Coding',
322
+ tags: [
323
+ 'eai-gofer',
324
+ 'gofer',
325
+ 'claude',
326
+ 'codex',
327
+ 'copilot',
328
+ 'gemini',
329
+ 'spec-driven-development',
330
+ ],
331
+ },
332
+ ],
333
+ };
334
+ }
335
+
336
+ function buildRepoCodexMarketplace(version) {
337
+ return {
338
+ name: 'eai-gofer',
339
+ interface: {
340
+ displayName: 'Gofer',
341
+ },
342
+ plugins: [
343
+ {
344
+ name: PLUGIN_NAME,
345
+ source: {
346
+ source: 'local',
347
+ path: './plugins/eai-gofer',
348
+ },
349
+ policy: {
350
+ installation: 'AVAILABLE',
351
+ authentication: 'ON_INSTALL',
352
+ },
353
+ category: 'Coding',
354
+ version,
355
+ },
356
+ ],
357
+ };
358
+ }
359
+
360
+ function buildBundleCodexMarketplace(version) {
361
+ return {
362
+ name: 'eai-gofer',
363
+ interface: {
364
+ displayName: 'Gofer',
365
+ },
366
+ plugins: [
367
+ {
368
+ name: PLUGIN_NAME,
369
+ source: {
370
+ source: 'local',
371
+ path: './plugins/eai-gofer',
372
+ },
373
+ policy: {
374
+ installation: 'AVAILABLE',
375
+ authentication: 'ON_INSTALL',
376
+ },
377
+ category: 'Coding',
378
+ version,
379
+ },
380
+ ],
381
+ };
382
+ }
383
+
384
+ function buildUmbrellaSkill(version, stages) {
385
+ const stageList = stages
386
+ .map((stage) => `- \`${stage.frontmatter.name}\` - ${stage.frontmatter.description}`)
387
+ .join('\n');
388
+
389
+ return `---\nname: eai-gofer\ndescription: "Run the public Gofer core pipeline and helper commands in Claude, Gemini, Codex, or Copilot."\n---\n\n# Gofer\n\nVersion: ${version}\n\nUse this skill when the user asks to run, install, update, or understand Gofer without the VS Code extension UI.\n\n## Workspace First\n\nBefore stage work, resolve the repository root and run \`node .specify/scripts/node/gofer-workspace-check.mjs --host auto --json\` when available. If the repo is missing or stale, ask before running \`node .specify/scripts/node/gofer-workspace-bootstrap.mjs --host auto --include-mirrors\`, then resume the original command.\n\n## First EAI Platform App\n\nIf the user is starting a first EAI Platform app, run \`/gofer:eai-first-run\` before \`/0_gofer_start\`. It is allowed to run before \`.specify/\` exists and checks Git, Node.js, npm, the scoped EAI registry, EAI CLI, login, tenant, \`eai init\`, and Gofer scaffold readiness with user approval gates.\n\n## EAI CLI Discovery And Recovery\n\n- Run \`eai whoami\` before Gofer pipeline work and require a valid login plus an active tenant.\n- Run \`eai update --check\` before first EAI platform work when the CLI may be stale.\n- Run \`eai --describe\` before assuming command syntax.\n- If advertised, run \`eai agent guide --format json\` before planning or fixing EAI workflows.\n- After any \`eai\` error, run \`eai errors explain <code-or-reason> --format json\` before guessing remediation.\n- If \`eai errors explain\` is unavailable, match \`.specify/references/platform/eai-error-catalog.yaml\`, run read-only diagnostics before mutating fixes, and stop at the retry or escalation condition.\n- For \`eai user invite\` 5xx or \`EXTERNAL_SERVICE_ERROR\`, check existing members with \`eai user list --tenant <tenant-id> --search <email> --format json\`; use \`eai user role set --tenant <tenant-id> --member-id <member-id> --role tenant-admin --format json\` only after verification and user approval, then tell the app user to sign out and sign back in.\n- Use \`eai publicapi\` only for authorized PublicAPI \`/v4/...\` routes.\n\n## Token And Cost Policy\n\n- Treat \`.specify/memory/gofer-model-policy.yaml\` as the repo-owned source of truth for simple, medium, hard, and arbiter model routing. Run \`/gofer:bootstrap-workspace\` if it is missing.\n- Use the cheapest capable model first. Escalate only when a cheaper pass is low-confidence, contradictory, security-sensitive, release-critical, or blocking quality.\n- Keep raw search, build, and test output out of the main chat context. Write stable findings to \`.specify/specs/{feature}/context-bundle.md\` and continue from summaries.\n- Prefer provider prompt/context caching for stable non-secret prefixes: Gofer scaffold, repository instructions, constitution, repo map, stage contracts, and validation rubric.\n- After large research, planning, implementation, or validation bursts, checkpoint artifacts and compact/clear/resume context when the host supports it.\n\n## Core Pipeline And Helpers\n\n${stageList}\n\n## Stable Local Install Path\n\nInstall or update this plugin by replacing the stable local folder:\n\n\`\`\`text\n~/plugins/eai-gofer\n\`\`\`\n\nThe public release feed is available at:\n\n\`\`\`text\n${PUBLIC_SITE_URL}/releases.json\n\`\`\`\n\nGemini CLI users can also copy the bundled \`.gemini/\` directory into a repository root to activate the same command set there.\n`;
390
+ }
391
+
392
+ function buildWorkspacePreflightSection() {
393
+ return `
394
+ ## Workspace Preflight
395
+
396
+ Before doing stage/helper work:
397
+
398
+ 1. Resolve the repository root.
399
+ 2. Check the core Gofer sentinels:
400
+ - \`.specify/.gofer-version\`
401
+ - \`.specify/commands/0_gofer_start.md\`
402
+ - \`.specify/templates/spec-template.md\`
403
+ - \`.specify/templates/loop-contract-template.json\`
404
+ - \`.specify/templates/working-backwards-prfaq-template.md\`
405
+ - \`.specify/scripts/node/gofer-workspace-check.mjs\`
406
+ - \`.specify/scripts/node/gofer-workspace-bootstrap.mjs\`
407
+ - \`.specify/specs/\`
408
+ - \`.specify/memory/\`
409
+ 3. If the repo has the workspace checker script, prefer running:
410
+ - \`node .specify/scripts/node/gofer-workspace-check.mjs --host auto --json\`
411
+ 4. If the workspace is missing or stale, ask exactly:
412
+ - **"This repo is missing or stale for Gofer. Initialize/update it now?"**
413
+ 5. If the user says yes, run the Gofer workspace bootstrap helper and then resume this command from the top.
414
+ 6. If the user says no, stop and explain that Gofer stage/helper work depends on the repo-owned scaffold.
415
+ `.trim();
416
+ }
417
+
418
+ function injectWorkspacePreflight(stage, body) {
419
+ if (WORKSPACE_PREFLIGHT_EXCLUDED_COMMANDS.has(String(stage.frontmatter.name))) {
420
+ return body;
421
+ }
422
+ if (body.includes('## Workspace Preflight')) {
423
+ return body;
424
+ }
425
+
426
+ const headingMatch = body.match(/^# [^\n]+\n*/);
427
+ if (!headingMatch) {
428
+ return `${buildWorkspacePreflightSection()}\n\n${body}`;
429
+ }
430
+
431
+ const insertAt = headingMatch[0].length;
432
+ return `${body.slice(0, insertAt).trimEnd()}\n\n${buildWorkspacePreflightSection()}\n\n${body
433
+ .slice(insertAt)
434
+ .replace(/^\n+/, '')}`;
435
+ }
436
+
437
+ function buildStageSkill(stage) {
438
+ const body = injectWorkspacePreflight(stage, stage.body.trim());
439
+ return `---\nname: ${stage.frontmatter.name}\ndescription: ${yamlString(stage.frontmatter.description)}\n---\n\n${body}\n`;
440
+ }
441
+
442
+ function buildPluginReadmeBase(version) {
443
+ return `# Gofer Agent Plugin
444
+
445
+ Version: ${version}
446
+
447
+ This package is the portable Claude, Gemini, Codex, and Copilot workflow layer for Gofer. It is released beside the VS Code extension, but it does not replace the VSIX UI, status views, updater, or language-server features.
448
+
449
+ ## Public Sources
450
+
451
+ Use the public GitHub repository as the install source for Claude Code, Codex, Copilot CLI, and Gemini CLI:
452
+
453
+ \`\`\`text
454
+ ${REPOSITORY_URL}
455
+ \`\`\`
456
+
457
+ Use the public release host for downloadable artifacts:
458
+
459
+ \`\`\`text
460
+ ${PUBLIC_RELEASES_URL}
461
+ \`\`\`
462
+
463
+ That host publishes:
464
+
465
+ - Latest VS Code extension: \`${buildLatestPublicVsixUrl()}\`
466
+ - Latest agent bundle zip: \`${buildLatestPublicAgentPluginZipUrl()}\`
467
+ - This release VS Code extension: \`${buildPublicVsixUrl(version)}\`
468
+ - This release agent bundle zip: \`${buildPublicAgentPluginZipUrl(version)}\`
469
+ - Claude marketplace manifest: \`${CLAUDE_MARKETPLACE_URL}\`
470
+ - Codex manifest: \`${CODEX_PLUGIN_MANIFEST_URL}\`
471
+ - Copilot marketplace manifest: \`${COPILOT_MARKETPLACE_URL}\`
472
+ - Gemini extension manifest: \`${GEMINI_EXTENSION_URL}\`
473
+
474
+ ## First EAI Platform App
475
+
476
+ Run \`/gofer:eai-first-run\` before \`/0_gofer_start\` when a new user, machine, repo, tenant, or EAI app template is not ready. The command is allowed to run before \`.specify/\` exists. It checks Git, Node.js, npm, EAI CLI, registry, \`eai update --check\`, \`eai --describe\`, \`eai agent guide --format json\` when advertised, login, tenant, \`eai init <project-name> --skip-prompts --company-tenant <active-tenant-id>\`, Gofer scaffold readiness, and \`eai errors explain <code-or-reason> --format json\` for recovery across macOS, Linux, Windows, and GitHub Codespaces.
477
+
478
+ For EAI errors, Gofer expects agents to run live EAI guidance first, use \`.specify/references/platform/eai-error-catalog.yaml\` as fallback, run read-only diagnostics before mutating fixes, and stop at the retry/escalation condition. For \`eai user invite\` 5xx or \`EXTERNAL_SERVICE_ERROR\`, check existing members with \`eai user list --tenant <tenant-id> --search <email> --format json\`; use \`eai user role set --tenant <tenant-id> --member-id <member-id> --role tenant-admin --format json\` only after verification and user approval.
479
+
480
+ If \`/0_gofer_start\` is unknown in a new repo, install or update this plugin first, then run \`/gofer:eai-first-run\`.
481
+
482
+ ## App-Native Surfaces And Repo Scripts
483
+
484
+ Gofer keeps repo-owned scripts and canonical command files as the source of truth. App plugins, skills, agents, and MCP tools are thin entry points that call or explain those repo scripts.
485
+
486
+ | Surface | Best entry point | Repo-owned files used |
487
+ | ------- | ---------------- | --------------------- |
488
+ | Codex App / Codex IDE | Umbrella \`eai-gofer\` plugin skill plus repo \`.agents/skills\` when a workspace is open | \`AGENTS.md\`, \`.agents/skills/\`, \`.specify/scripts/\`, \`.vscode/mcp.json\` |
489
+ | GitHub Copilot app / VS Code agent mode | Custom Gofer agents and one umbrella skill, not a duplicate slash-command list | \`.github/agents/\`, \`.github/skills/\`, \`.github/prompts/\`, \`.github/instructions/\`, \`.vscode/mcp.json\` |
490
+ | Claude Code app | Plugin umbrella skill for discovery; repo slash commands remain the fast command path | \`.claude/skills/\`, \`.claude/commands/\`, \`.claude/agents/\`, \`.specify/scripts/\` |
491
+ | Gemini CLI / Gemini Code Assist | Gemini extension commands and workspace MCP/customization when available | \`.gemini/\`, \`.specify/scripts/\`, \`.vscode/mcp.json\` |
492
+
493
+ The clean UX rule is: use plain numbered stage commands in initialized repos, and use app/plugin skills for setup, diagnostics, and routing when those stage commands are not loaded yet.
494
+
495
+ ## Core Pipeline
496
+
497
+ | Stage | Command | Main output |
498
+ | ----- | ------- | ----------- |
499
+ | Gofer Start | \`/0_gofer_start\` | Full pipeline kickoff |
500
+ | Research | \`/1_gofer_research\` | \`research.md\` |
501
+ | Specify | \`/2_gofer_specify\` | \`spec.md\` |
502
+ | Plan | \`/3_gofer_plan\` | \`plan.md\`, \`data-model.md\`, \`contracts/\` |
503
+ | Tasks | \`/4_gofer_tasks\` | \`tasks.md\`, \`traceability.md\`, \`issues.md\` |
504
+ | Implement | \`/5_gofer_implement\` | Code and doc changes |
505
+ | Validate | \`/6_gofer_validate\` | Validation artifacts and final review evidence |
506
+
507
+ \`/6_gofer_validate\` is the terminal quality gate. It includes the final engineering review loop and replaces the old standalone review stage in the core pipeline.
508
+
509
+ Optional helpers like \`/0a_problem_validation\`, \`/7_gofer_save\`, \`/8_gofer_branding\`, \`/9_gofer_tests\`, \`/7a_stakeholder_comms\`, \`/gofer:check-workspace\`, \`/gofer:bootstrap-workspace\`, and \`/gofer:eai-first-run\` remain available outside the core 0-6 stage sequence.
510
+
511
+ ## Distribution Modes
512
+
513
+ | Surface | Public install / update path | Stable local path |
514
+ | ------- | ---------------------------- | ----------------- |
515
+ | Claude Code | \`claude plugin marketplace add ${REPOSITORY_URL} --scope user --sparse .claude-plugin --sparse plugins/eai-gofer\` then \`claude plugin install eai-gofer@eai-gofer --scope user\` | Unzip to \`~/plugins/eai-gofer\`, then \`claude plugin marketplace add ~/plugins/eai-gofer --scope user\` |
516
+ | Codex | \`codex plugin marketplace add ${REPOSITORY_URL} --sparse .agents/plugins --sparse plugins/eai-gofer\` then \`codex plugin add eai-gofer@eai-gofer\` | Unzip to \`~/plugins/eai-gofer\`, then \`codex plugin marketplace add ~/plugins/eai-gofer\` |
517
+ | GitHub Copilot CLI | \`copilot plugin marketplace add ${REPOSITORY_URL}\` then \`copilot plugin install eai-gofer@eai-gofer\` | Unzip to \`~/plugins/eai-gofer\`, then \`copilot plugin marketplace add ~/plugins/eai-gofer\` |
518
+ | Gemini CLI | \`gemini extensions install ${REPOSITORY_URL} --auto-update\` | Unzip to \`~/plugins/eai-gofer\`, then \`gemini extensions install ~/plugins/eai-gofer\` |
519
+
520
+ ## Download And Replace The Local Bundle Folder
521
+
522
+ Keep the downloaded bundle path stable:
523
+
524
+ \`\`\`text
525
+ ~/plugins/eai-gofer
526
+ \`\`\`
527
+
528
+ Download the public release asset, remove the old folder, unzip the package into \`~/plugins\`.
529
+
530
+ \`\`\`bash
531
+ curl -fsSL ${buildLatestPublicAgentPluginZipUrl()} -o /tmp/eai-gofer-agent-plugin-latest.zip
532
+
533
+ rm -rf ~/plugins/eai-gofer
534
+ unzip /tmp/eai-gofer-agent-plugin-latest.zip -d ~/plugins
535
+ \`\`\`
536
+
537
+ ## Claude Code
538
+
539
+ Recommended public install:
540
+
541
+ \`\`\`bash
542
+ claude plugin marketplace add ${REPOSITORY_URL} --scope user --sparse .claude-plugin --sparse plugins/eai-gofer
543
+ claude plugin install eai-gofer@eai-gofer --scope user
544
+ \`\`\`
545
+
546
+ Downloaded bundle install:
547
+
548
+ \`\`\`bash
549
+ claude plugin marketplace add ~/plugins/eai-gofer --scope user
550
+ claude plugin install eai-gofer@eai-gofer --scope user
551
+ \`\`\`
552
+
553
+ ## Codex
554
+
555
+ Recommended public install:
556
+
557
+ \`\`\`bash
558
+ codex plugin marketplace add ${REPOSITORY_URL} --sparse .agents/plugins --sparse plugins/eai-gofer
559
+ codex plugin add eai-gofer@eai-gofer
560
+ \`\`\`
561
+
562
+ Downloaded bundle install:
563
+
564
+ \`\`\`bash
565
+ codex plugin marketplace add ~/plugins/eai-gofer
566
+ codex plugin add eai-gofer@eai-gofer
567
+ \`\`\`
568
+
569
+ The Codex plugin keeps the slash-command stage entrypoints as the primary user surface. The plugin skill registry only exposes the umbrella \`eai-gofer\` skill so Codex does not show both \`/0_gofer_start\` and \`eai-gofer:0_gofer_start\` for every stage.
570
+
571
+ ## Copilot CLI
572
+
573
+ Recommended public install:
574
+
575
+ \`\`\`bash
576
+ copilot plugin marketplace add ${REPOSITORY_URL}
577
+ copilot plugin install eai-gofer@eai-gofer
578
+ \`\`\`
579
+
580
+ Downloaded bundle install:
581
+
582
+ \`\`\`bash
583
+ copilot plugin marketplace add ~/plugins/eai-gofer
584
+ copilot plugin install eai-gofer@eai-gofer
585
+ \`\`\`
586
+
587
+ ## Gemini CLI
588
+
589
+ Recommended public install:
590
+
591
+ \`\`\`bash
592
+ gemini extensions install ${REPOSITORY_URL} --auto-update
593
+ \`\`\`
594
+
595
+ Downloaded bundle install:
596
+
597
+ \`\`\`bash
598
+ gemini extensions install ~/plugins/eai-gofer
599
+ \`\`\`
600
+ `;
601
+ }
602
+
603
+ function buildPluginReadme(version) {
604
+ return `${buildPluginReadmeBase(version).trimEnd()}
605
+
606
+ ## Model Policy
607
+
608
+ After bootstrap, each repository gets a user-owned model policy at:
609
+
610
+ \`\`\`text
611
+ .specify/memory/gofer-model-policy.yaml
612
+ \`\`\`
613
+
614
+ The shipped default is copied from \`.specify/templates/gofer-model-policy.yaml\`
615
+ and is not overwritten by bootstrap. Use it to tune simple, medium, hard, and
616
+ arbiter model routes for Claude, Codex/OpenAI, Gemini, and Copilot. Copilot
617
+ defaults to \`Auto\` for simple/default work because exact model availability is
618
+ controlled by the Copilot client, plan, and organization policy.
619
+ `;
620
+ }
621
+
622
+ async function writeJson(filePath, payload) {
623
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
624
+ await fs.writeFile(filePath, `${JSON.stringify(payload, null, 2)}\n`, 'utf8');
625
+ }
626
+
627
+ async function writeText(filePath, content) {
628
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
629
+ await fs.writeFile(filePath, content, 'utf8');
630
+ }
631
+
632
+ async function copyIfExists(root, relativePath, pluginRoot) {
633
+ const source = path.join(root, relativePath);
634
+ const target = path.join(pluginRoot, relativePath);
635
+ try {
636
+ await fs.cp(source, target, { recursive: true, force: true, dereference: false });
637
+ } catch (error) {
638
+ if (error?.code !== 'ENOENT') {
639
+ throw error;
640
+ }
641
+ }
642
+ }
643
+
644
+ async function copyIfExistsAs(root, sourceRelativePath, targetRelativePath, pluginRoot) {
645
+ const source = path.join(root, sourceRelativePath);
646
+ const target = path.join(pluginRoot, targetRelativePath);
647
+ try {
648
+ await fs.cp(source, target, { recursive: true, force: true, dereference: false });
649
+ } catch (error) {
650
+ if (error?.code !== 'ENOENT') {
651
+ throw error;
652
+ }
653
+ }
654
+ }
655
+
656
+ async function copyPluginAssets(root, pluginRoot) {
657
+ const source = path.join(root, PLUGIN_ICON_SOURCE);
658
+ const target = path.join(pluginRoot, PLUGIN_ICON_TARGET);
659
+ await fs.mkdir(path.dirname(target), { recursive: true });
660
+ await fs.copyFile(source, target);
661
+ }
662
+
663
+ async function walkFiles(root) {
664
+ const files = [];
665
+
666
+ async function visit(current) {
667
+ const entries = await fs.readdir(current, { withFileTypes: true });
668
+ for (const entry of entries) {
669
+ const fullPath = path.join(current, entry.name);
670
+ if (entry.isDirectory()) {
671
+ await visit(fullPath);
672
+ } else if (entry.isFile()) {
673
+ files.push(fullPath);
674
+ }
675
+ }
676
+ }
677
+
678
+ await visit(root);
679
+ return files;
680
+ }
681
+
682
+ async function walkRelativePaths(root) {
683
+ const relativePaths = [];
684
+
685
+ async function visit(current) {
686
+ const entries = await fs.readdir(current, { withFileTypes: true });
687
+ for (const entry of entries) {
688
+ const fullPath = path.join(current, entry.name);
689
+ relativePaths.push(path.relative(root, fullPath).split(path.sep).join('/'));
690
+ if (entry.isDirectory()) {
691
+ await visit(fullPath);
692
+ }
693
+ }
694
+ }
695
+
696
+ await visit(root);
697
+ return relativePaths;
698
+ }
699
+
700
+ function describeWindowsUnsafePath(relativePath) {
701
+ if (relativePath.length > WINDOWS_SAFE_RELATIVE_PATH_LIMIT) {
702
+ return `longer than ${WINDOWS_SAFE_RELATIVE_PATH_LIMIT} characters`;
703
+ }
704
+
705
+ const segments = relativePath.split('/').filter(Boolean);
706
+ for (const segment of segments) {
707
+ if (hasWindowsForbiddenSegmentChar(segment)) {
708
+ return `segment "${segment}" contains a Windows-forbidden character`;
709
+ }
710
+ if (/[ .]$/.test(segment)) {
711
+ return `segment "${segment}" ends with a dot or space`;
712
+ }
713
+ if (WINDOWS_RESERVED_BASENAME.test(segment)) {
714
+ return `segment "${segment}" is a Windows reserved device name`;
715
+ }
716
+ }
717
+
718
+ return null;
719
+ }
720
+
721
+ function hasWindowsForbiddenSegmentChar(segment) {
722
+ for (const char of segment) {
723
+ if (WINDOWS_FORBIDDEN_SEGMENT_CHARS.has(char) || char.charCodeAt(0) < 32) {
724
+ return true;
725
+ }
726
+ }
727
+
728
+ return false;
729
+ }
730
+
731
+ async function assertWindowsPortablePaths(pluginRoot) {
732
+ const offenders = [];
733
+ for (const relativePath of await walkRelativePaths(pluginRoot)) {
734
+ const reason = describeWindowsUnsafePath(relativePath);
735
+ if (reason) {
736
+ offenders.push(`${relativePath} (${reason})`);
737
+ }
738
+ }
739
+
740
+ if (offenders.length > 0) {
741
+ throw new Error(`Plugin package contains Windows-unsafe paths: ${offenders.join(', ')}`);
742
+ }
743
+ }
744
+
745
+ async function assertNoPersonalPaths(pluginRoot) {
746
+ const files = await walkFiles(pluginRoot);
747
+ const offenders = [];
748
+ for (const file of files) {
749
+ let content;
750
+ try {
751
+ content = await fs.readFile(file, 'utf8');
752
+ } catch {
753
+ continue;
754
+ }
755
+
756
+ if (PERSONAL_PATH_PATTERN.test(content)) {
757
+ offenders.push(path.relative(pluginRoot, file));
758
+ }
759
+ }
760
+
761
+ if (offenders.length > 0) {
762
+ throw new Error(`Plugin package contains personal absolute paths: ${offenders.join(', ')}`);
763
+ }
764
+ }
765
+
766
+ async function writePluginFolder(pluginRoot, root, version, stages) {
767
+ await fs.rm(pluginRoot, { recursive: true, force: true });
768
+ await fs.mkdir(pluginRoot, { recursive: true });
769
+
770
+ const pluginManifest = buildPluginManifest(version);
771
+ const claudeManifest = buildClaudeManifest(version);
772
+ const codexManifest = buildCodexManifest(version, stages);
773
+ const geminiManifest = buildGeminiManifest(version);
774
+ const bundleMarketplace = buildBundleMarketplace(version);
775
+
776
+ await writeJson(path.join(pluginRoot, 'plugin.json'), pluginManifest);
777
+ await writeJson(path.join(pluginRoot, '.github', 'plugin', 'plugin.json'), pluginManifest);
778
+ await writeJson(
779
+ path.join(pluginRoot, '.github', 'plugin', 'marketplace.json'),
780
+ bundleMarketplace
781
+ );
782
+ await writeJson(path.join(pluginRoot, '.codex-plugin', 'plugin.json'), codexManifest);
783
+ await writeJson(path.join(pluginRoot, '.claude-plugin', 'plugin.json'), claudeManifest);
784
+ await writeJson(path.join(pluginRoot, '.claude-plugin', 'marketplace.json'), bundleMarketplace);
785
+ await writeJson(path.join(pluginRoot, '.gemini', 'extension.json'), geminiManifest);
786
+ await writeJson(path.join(pluginRoot, 'gemini-extension.json'), geminiManifest);
787
+ await writeJson(
788
+ path.join(pluginRoot, '.agents', 'plugins', 'marketplace.json'),
789
+ buildBundleCodexMarketplace(version)
790
+ );
791
+
792
+ await writeText(path.join(pluginRoot, 'skills', 'eai-gofer', 'SKILL.md'), buildUmbrellaSkill(version, stages));
793
+ await writeText(
794
+ path.join(pluginRoot, UMBRELLA_SKILLS_DIR, 'eai-gofer', 'SKILL.md'),
795
+ buildUmbrellaSkill(version, stages)
796
+ );
797
+ for (const stage of stages) {
798
+ await writeText(path.join(pluginRoot, 'skills', stage.stem, 'SKILL.md'), buildStageSkill(stage));
799
+ }
800
+
801
+ await writeText(path.join(pluginRoot, 'README.md'), buildPluginReadme(version));
802
+ await writeText(path.join(pluginRoot, '.eai-gofer-plugin-version'), `${version}\n${GENERATED_MARKER}\n`);
803
+
804
+ const copiedResources = [
805
+ '.specify/commands',
806
+ '.specify/references',
807
+ '.specify/templates',
808
+ '.specify/scripts/bash',
809
+ '.specify/scripts/node',
810
+ '.specify/scripts/hooks',
811
+ '.specify/scripts/powershell',
812
+ '.github/prompts',
813
+ '.github/agents',
814
+ '.github/skills',
815
+ '.claude/skills',
816
+ '.gemini',
817
+ '.vscode/mcp.json',
818
+ 'AGENTS.md',
819
+ 'LICENSE',
820
+ 'NOTICE',
821
+ 'TRADEMARKS.md',
822
+ 'codex-config.toml',
823
+ ];
824
+ for (const relativePath of copiedResources) {
825
+ await copyIfExists(root, relativePath, pluginRoot);
826
+ }
827
+ await writeJson(path.join(pluginRoot, '.gemini', 'extension.json'), geminiManifest);
828
+ await copyIfExistsAs(root, '.claude/commands', 'commands', pluginRoot);
829
+ await copyIfExistsAs(root, '.claude/agents', 'agents', pluginRoot);
830
+ await copyPluginAssets(root, pluginRoot);
831
+
832
+ const nestedPluginRoot = path.join(pluginRoot, 'plugins', PLUGIN_NAME);
833
+ await fs.rm(nestedPluginRoot, { recursive: true, force: true });
834
+ await fs.mkdir(nestedPluginRoot, { recursive: true });
835
+ for (const entry of await fs.readdir(pluginRoot)) {
836
+ if (entry === 'plugins') {
837
+ continue;
838
+ }
839
+
840
+ const source = path.join(pluginRoot, entry);
841
+ const target = path.join(nestedPluginRoot, entry);
842
+ await fs.cp(source, target, { recursive: true, force: true, dereference: false });
843
+ }
844
+ }
845
+
846
+ async function syncRepoManifests(root, version, stages, stagedPluginRoot) {
847
+ await writeJson(
848
+ path.join(root, '.codex-plugin', 'plugin.json'),
849
+ buildCodexManifest(version, stages, {
850
+ skills: `./${UMBRELLA_SKILLS_DIR}/`,
851
+ icon: './assets/eai-gofer-icon.png',
852
+ })
853
+ );
854
+ await writeJson(
855
+ path.join(root, 'plugin.json'),
856
+ buildPluginManifest(version, {
857
+ skills: `./${UMBRELLA_SKILLS_DIR}/`,
858
+ agents: './.claude/agents/',
859
+ commands: './.claude/commands/',
860
+ })
861
+ );
862
+ await writeJson(
863
+ path.join(root, '.github', 'plugin', 'plugin.json'),
864
+ buildPluginManifest(version, {
865
+ skills: `./${UMBRELLA_SKILLS_DIR}/`,
866
+ agents: './.claude/agents/',
867
+ commands: './.claude/commands/',
868
+ })
869
+ );
870
+ await writeJson(path.join(root, '.github', 'plugin', 'marketplace.json'), buildRepoMarketplace(version));
871
+ await writeJson(
872
+ path.join(root, '.agents', 'plugins', 'marketplace.json'),
873
+ buildRepoCodexMarketplace(version)
874
+ );
875
+ await writeJson(
876
+ path.join(root, '.claude-plugin', 'plugin.json'),
877
+ buildClaudeManifest(version, {
878
+ skills: './.agents/skills/',
879
+ })
880
+ );
881
+ await writeJson(path.join(root, '.claude-plugin', 'marketplace.json'), buildRepoMarketplace(version));
882
+ await writeJson(path.join(root, '.gemini', 'extension.json'), buildGeminiManifest(version));
883
+ await writeJson(path.join(root, 'gemini-extension.json'), buildGeminiManifest(version));
884
+ await writeText(
885
+ path.join(root, UMBRELLA_SKILLS_DIR, 'eai-gofer', 'SKILL.md'),
886
+ buildUmbrellaSkill(version, stages)
887
+ );
888
+
889
+ const iconSource = path.join(root, PLUGIN_ICON_SOURCE);
890
+ const iconTarget = path.join(root, PLUGIN_ICON_TARGET);
891
+ await fs.mkdir(path.dirname(iconTarget), { recursive: true });
892
+ await fs.copyFile(iconSource, iconTarget);
893
+
894
+ const repoPluginDir = path.join(root, 'plugins', PLUGIN_NAME);
895
+ await fs.rm(repoPluginDir, { recursive: true, force: true });
896
+ await fs.mkdir(path.dirname(repoPluginDir), { recursive: true });
897
+ await fs.cp(stagedPluginRoot, repoPluginDir, { recursive: true, force: true, dereference: false });
898
+ }
899
+
900
+ async function main() {
901
+ const args = parseArgs(process.argv.slice(2));
902
+ if (args.help) {
903
+ console.log(usage());
904
+ return;
905
+ }
906
+
907
+ const root = path.resolve(args.root);
908
+ const extensionPackage = await readJson(path.join(root, 'extension', 'package.json'));
909
+ const version = args.version ?? extensionPackage.version;
910
+ assertSemver(version);
911
+
912
+ const stages = await loadStages(root);
913
+ const outDir = path.resolve(root, args.outDir);
914
+ const packageName = `eai-gofer-agent-plugin-${version}`;
915
+ const stageParent = path.join(outDir, packageName);
916
+ const pluginRoot = path.join(stageParent, PLUGIN_NAME);
917
+ const zipPath = path.join(outDir, `${packageName}.zip`);
918
+
919
+ await fs.rm(stageParent, { recursive: true, force: true });
920
+ await fs.rm(zipPath, { force: true });
921
+ await writePluginFolder(pluginRoot, root, version, stages);
922
+ await assertWindowsPortablePaths(pluginRoot);
923
+ await assertNoPersonalPaths(pluginRoot);
924
+ await execFileAsync('zip', ['-qr', zipPath, PLUGIN_NAME], { cwd: stageParent });
925
+
926
+ if (args.syncRepo) {
927
+ await syncRepoManifests(root, version, stages, pluginRoot);
928
+ }
929
+
930
+ console.log(`plugin: staged ${pluginRoot}`);
931
+ console.log(`plugin: wrote ${zipPath}`);
932
+ if (args.syncRepo) {
933
+ console.log(`plugin: synced ${path.join(root, 'plugins', PLUGIN_NAME)}`);
934
+ }
935
+ }
936
+
937
+ main().catch((error) => {
938
+ console.error(error instanceof Error ? error.message : String(error));
939
+ process.exit(1);
940
+ });