@opengsd/gsd-path 1.0.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 (398) hide show
  1. package/AGENTS.md +397 -0
  2. package/DOCS.md +341 -0
  3. package/FULL.md +475 -0
  4. package/GUIDE.md +23 -0
  5. package/HOOKS.md +273 -0
  6. package/LICENSE +21 -0
  7. package/MIGRATE.md +100 -0
  8. package/QUICK.md +146 -0
  9. package/README.md +280 -0
  10. package/RUNTIME.md +229 -0
  11. package/UPDATE.md +196 -0
  12. package/WORKFLOW.md +683 -0
  13. package/package.json +80 -0
  14. package/platforms/claude/dispatch.md +63 -0
  15. package/platforms/copilot/dispatch.md +61 -0
  16. package/platforms/cursor/agent.md +17 -0
  17. package/platforms/cursor/dispatch.md +63 -0
  18. package/platforms/grok/dispatch.md +61 -0
  19. package/platforms/kimi/dispatch.md +64 -0
  20. package/platforms/kiro/dispatch.md +58 -0
  21. package/platforms/opencode/dispatch.md +62 -0
  22. package/platforms/qwen/dispatch.md +60 -0
  23. package/platforms/shared-agents/dispatch.md +131 -0
  24. package/plugin.json +14 -0
  25. package/scripts/_common.py +180 -0
  26. package/scripts/archive_milestone.py +2265 -0
  27. package/scripts/bootstrap_repository.py +710 -0
  28. package/scripts/build_state.py +854 -0
  29. package/scripts/check_docs_audit.py +463 -0
  30. package/scripts/check_handoffs.py +1855 -0
  31. package/scripts/check_task_briefs.py +376 -0
  32. package/scripts/check_update.py +93 -0
  33. package/scripts/core_hook_gate.py +34 -0
  34. package/scripts/core_hook_settings.py +119 -0
  35. package/scripts/detect_project.py +1517 -0
  36. package/scripts/discussion_records.py +619 -0
  37. package/scripts/discussion_validate.py +1321 -0
  38. package/scripts/dispatch_driver.py +1812 -0
  39. package/scripts/git_guard.py +759 -0
  40. package/scripts/guard_hook.py +2124 -0
  41. package/scripts/install.mjs +3239 -0
  42. package/scripts/install.py +3008 -0
  43. package/scripts/integration.py +1433 -0
  44. package/scripts/isolation.py +3538 -0
  45. package/scripts/lean_verification.py +256 -0
  46. package/scripts/loop_run.py +837 -0
  47. package/scripts/migrate_core.py +169 -0
  48. package/scripts/pipeline_diagnose.py +715 -0
  49. package/scripts/pipeline_git.py +940 -0
  50. package/scripts/pipeline_state.py +2291 -0
  51. package/scripts/pipeline_undo.py +1039 -0
  52. package/scripts/promote_lookahead.py +415 -0
  53. package/scripts/review_findings.py +714 -0
  54. package/scripts/review_panel.py +553 -0
  55. package/scripts/skill-resources.json +340 -0
  56. package/scripts/state_checkpoint.py +1039 -0
  57. package/scripts/state_promote.py +743 -0
  58. package/scripts/status_runtime.py +122 -0
  59. package/scripts/sync_skill_resources.py +259 -0
  60. package/scripts/token_budget.py +146 -0
  61. package/scripts/wizard.mjs +179 -0
  62. package/scripts/workflow_run.py +117 -0
  63. package/skills/gsd-path/BUILD.md +700 -0
  64. package/skills/gsd-path/DECIDE.md +115 -0
  65. package/skills/gsd-path/DEFINE.md +297 -0
  66. package/skills/gsd-path/DOCS-AUDIT.md +190 -0
  67. package/skills/gsd-path/INSPECT.md +167 -0
  68. package/skills/gsd-path/PLAN.md +411 -0
  69. package/skills/gsd-path/RESEARCH.md +159 -0
  70. package/skills/gsd-path/ROADMAP.md +215 -0
  71. package/skills/gsd-path/SHIP.md +412 -0
  72. package/skills/gsd-path/SKILL.md +471 -0
  73. package/skills/gsd-path/agents/openai.yaml +6 -0
  74. package/skills/gsd-path/references/codebase-mapper.md +52 -0
  75. package/skills/gsd-path/references/coder.md +90 -0
  76. package/skills/gsd-path/references/decider.md +36 -0
  77. package/skills/gsd-path/references/dispatch.md +131 -0
  78. package/skills/gsd-path/references/docs-auditor.md +60 -0
  79. package/skills/gsd-path/references/planner.md +104 -0
  80. package/skills/gsd-path/references/researcher.md +42 -0
  81. package/skills/gsd-path/references/reviewer.md +188 -0
  82. package/skills/gsd-path/references/roadmapper.md +48 -0
  83. package/skills/gsd-path/scripts/_common.py +180 -0
  84. package/skills/gsd-path/scripts/archive_milestone.py +2265 -0
  85. package/skills/gsd-path/scripts/bootstrap_repository.py +710 -0
  86. package/skills/gsd-path/scripts/build_state.py +854 -0
  87. package/skills/gsd-path/scripts/check_docs_audit.py +463 -0
  88. package/skills/gsd-path/scripts/check_handoffs.py +1855 -0
  89. package/skills/gsd-path/scripts/check_task_briefs.py +376 -0
  90. package/skills/gsd-path/scripts/check_update.py +93 -0
  91. package/skills/gsd-path/scripts/detect_project.py +1517 -0
  92. package/skills/gsd-path/scripts/discussion_records.py +619 -0
  93. package/skills/gsd-path/scripts/discussion_validate.py +1321 -0
  94. package/skills/gsd-path/scripts/dispatch_driver.py +1812 -0
  95. package/skills/gsd-path/scripts/integration.py +1433 -0
  96. package/skills/gsd-path/scripts/isolation.py +3538 -0
  97. package/skills/gsd-path/scripts/lean_verification.py +256 -0
  98. package/skills/gsd-path/scripts/loop_run.py +837 -0
  99. package/skills/gsd-path/scripts/pipeline_git.py +940 -0
  100. package/skills/gsd-path/scripts/pipeline_state.py +2291 -0
  101. package/skills/gsd-path/scripts/promote_lookahead.py +415 -0
  102. package/skills/gsd-path/scripts/review_findings.py +714 -0
  103. package/skills/gsd-path/scripts/review_panel.py +553 -0
  104. package/skills/gsd-path/scripts/state_checkpoint.py +1039 -0
  105. package/skills/gsd-path/scripts/state_promote.py +743 -0
  106. package/skills/gsd-path/scripts/token_budget.py +146 -0
  107. package/skills/gsd-path/scripts/workflow_run.py +117 -0
  108. package/skills/gsd-path/templates/answers.md +29 -0
  109. package/skills/gsd-path/templates/archive-manifest.md +37 -0
  110. package/skills/gsd-path/templates/charter.md +50 -0
  111. package/skills/gsd-path/templates/codebase.md +46 -0
  112. package/skills/gsd-path/templates/dialogue.md +21 -0
  113. package/skills/gsd-path/templates/docs-audit.md +69 -0
  114. package/skills/gsd-path/templates/evidence.md +24 -0
  115. package/skills/gsd-path/templates/final-review.md +27 -0
  116. package/skills/gsd-path/templates/gap-review.md +20 -0
  117. package/skills/gsd-path/templates/intent.md +98 -0
  118. package/skills/gsd-path/templates/loop.md +59 -0
  119. package/skills/gsd-path/templates/patch-findings.md +16 -0
  120. package/skills/gsd-path/templates/plan-panel.md +25 -0
  121. package/skills/gsd-path/templates/plan.md +89 -0
  122. package/skills/gsd-path/templates/repository.md +16 -0
  123. package/skills/gsd-path/templates/research-handoff.md +25 -0
  124. package/skills/gsd-path/templates/roadmap.md +38 -0
  125. package/skills/gsd-path/templates/skeptic.md +36 -0
  126. package/skills/gsd-path/templates/state.md +27 -0
  127. package/skills/gsd-path/templates/synthesis.md +36 -0
  128. package/skills/gsd-path/templates/task.md +74 -0
  129. package/skills/gsd-path/templates/wave-panel.md +25 -0
  130. package/skills/gsd-path/templates/wave-review.md +64 -0
  131. package/skills/gsd-path-build/SKILL.md +700 -0
  132. package/skills/gsd-path-build/agents/openai.yaml +6 -0
  133. package/skills/gsd-path-build/references/coder.md +90 -0
  134. package/skills/gsd-path-build/references/dispatch.md +131 -0
  135. package/skills/gsd-path-build/references/reviewer.md +188 -0
  136. package/skills/gsd-path-build/scripts/_common.py +180 -0
  137. package/skills/gsd-path-build/scripts/archive_milestone.py +2265 -0
  138. package/skills/gsd-path-build/scripts/build_state.py +854 -0
  139. package/skills/gsd-path-build/scripts/check_handoffs.py +1855 -0
  140. package/skills/gsd-path-build/scripts/check_task_briefs.py +376 -0
  141. package/skills/gsd-path-build/scripts/discussion_records.py +619 -0
  142. package/skills/gsd-path-build/scripts/discussion_validate.py +1321 -0
  143. package/skills/gsd-path-build/scripts/dispatch_driver.py +1812 -0
  144. package/skills/gsd-path-build/scripts/integration.py +1433 -0
  145. package/skills/gsd-path-build/scripts/isolation.py +3538 -0
  146. package/skills/gsd-path-build/scripts/loop_run.py +837 -0
  147. package/skills/gsd-path-build/scripts/pipeline_git.py +940 -0
  148. package/skills/gsd-path-build/scripts/pipeline_state.py +2291 -0
  149. package/skills/gsd-path-build/scripts/review_findings.py +714 -0
  150. package/skills/gsd-path-build/scripts/review_panel.py +553 -0
  151. package/skills/gsd-path-build/scripts/state_checkpoint.py +1039 -0
  152. package/skills/gsd-path-build/scripts/state_promote.py +743 -0
  153. package/skills/gsd-path-build/scripts/token_budget.py +146 -0
  154. package/skills/gsd-path-build/scripts/workflow_run.py +117 -0
  155. package/skills/gsd-path-build/templates/skeptic.md +36 -0
  156. package/skills/gsd-path-build/templates/task.md +74 -0
  157. package/skills/gsd-path-build/templates/wave-panel.md +25 -0
  158. package/skills/gsd-path-build/templates/wave-review.md +64 -0
  159. package/skills/gsd-path-decide/SKILL.md +115 -0
  160. package/skills/gsd-path-decide/agents/openai.yaml +6 -0
  161. package/skills/gsd-path-decide/references/decider.md +36 -0
  162. package/skills/gsd-path-decide/references/dispatch.md +131 -0
  163. package/skills/gsd-path-decide/scripts/_common.py +180 -0
  164. package/skills/gsd-path-decide/scripts/check_handoffs.py +1855 -0
  165. package/skills/gsd-path-decide/scripts/check_task_briefs.py +376 -0
  166. package/skills/gsd-path-decide/scripts/discussion_records.py +619 -0
  167. package/skills/gsd-path-decide/scripts/isolation.py +3538 -0
  168. package/skills/gsd-path-decide/scripts/pipeline_git.py +940 -0
  169. package/skills/gsd-path-decide/scripts/pipeline_state.py +2291 -0
  170. package/skills/gsd-path-decide/scripts/state_checkpoint.py +1039 -0
  171. package/skills/gsd-path-decide/scripts/state_promote.py +743 -0
  172. package/skills/gsd-path-decide/templates/synthesis.md +36 -0
  173. package/skills/gsd-path-define/SKILL.md +297 -0
  174. package/skills/gsd-path-define/agents/openai.yaml +6 -0
  175. package/skills/gsd-path-define/scripts/_common.py +180 -0
  176. package/skills/gsd-path-define/scripts/check_handoffs.py +1855 -0
  177. package/skills/gsd-path-define/scripts/check_task_briefs.py +376 -0
  178. package/skills/gsd-path-define/scripts/detect_project.py +1517 -0
  179. package/skills/gsd-path-define/scripts/discussion_records.py +619 -0
  180. package/skills/gsd-path-define/scripts/isolation.py +3538 -0
  181. package/skills/gsd-path-define/scripts/pipeline_git.py +940 -0
  182. package/skills/gsd-path-define/scripts/pipeline_state.py +2291 -0
  183. package/skills/gsd-path-define/scripts/state_checkpoint.py +1039 -0
  184. package/skills/gsd-path-define/scripts/state_promote.py +743 -0
  185. package/skills/gsd-path-define/templates/charter.md +50 -0
  186. package/skills/gsd-path-define/templates/intent.md +98 -0
  187. package/skills/gsd-path-define/templates/state.md +27 -0
  188. package/skills/gsd-path-discuss/SKILL.md +162 -0
  189. package/skills/gsd-path-discuss/agents/openai.yaml +6 -0
  190. package/skills/gsd-path-discuss/scripts/_common.py +180 -0
  191. package/skills/gsd-path-discuss/scripts/discussion_records.py +619 -0
  192. package/skills/gsd-path-discuss/templates/answers.md +29 -0
  193. package/skills/gsd-path-discuss/templates/dialogue.md +21 -0
  194. package/skills/gsd-path-docs-audit/SKILL.md +190 -0
  195. package/skills/gsd-path-docs-audit/agents/openai.yaml +6 -0
  196. package/skills/gsd-path-docs-audit/references/dispatch.md +131 -0
  197. package/skills/gsd-path-docs-audit/references/docs-auditor.md +60 -0
  198. package/skills/gsd-path-docs-audit/scripts/_common.py +180 -0
  199. package/skills/gsd-path-docs-audit/scripts/check_docs_audit.py +463 -0
  200. package/skills/gsd-path-docs-audit/scripts/check_handoffs.py +1855 -0
  201. package/skills/gsd-path-docs-audit/scripts/check_task_briefs.py +376 -0
  202. package/skills/gsd-path-docs-audit/scripts/discussion_records.py +619 -0
  203. package/skills/gsd-path-docs-audit/scripts/isolation.py +3538 -0
  204. package/skills/gsd-path-docs-audit/scripts/pipeline_git.py +940 -0
  205. package/skills/gsd-path-docs-audit/scripts/pipeline_state.py +2291 -0
  206. package/skills/gsd-path-docs-audit/scripts/state_checkpoint.py +1039 -0
  207. package/skills/gsd-path-docs-audit/scripts/state_promote.py +743 -0
  208. package/skills/gsd-path-docs-audit/templates/docs-audit.md +69 -0
  209. package/skills/gsd-path-forensics/SKILL.md +39 -0
  210. package/skills/gsd-path-forensics/agents/openai.yaml +6 -0
  211. package/skills/gsd-path-forensics/scripts/_common.py +180 -0
  212. package/skills/gsd-path-forensics/scripts/discussion_records.py +619 -0
  213. package/skills/gsd-path-forensics/scripts/pipeline_diagnose.py +715 -0
  214. package/skills/gsd-path-forensics/scripts/pipeline_undo.py +1039 -0
  215. package/skills/gsd-path-inspect/SKILL.md +167 -0
  216. package/skills/gsd-path-inspect/agents/openai.yaml +6 -0
  217. package/skills/gsd-path-inspect/references/codebase-mapper.md +52 -0
  218. package/skills/gsd-path-inspect/references/dispatch.md +131 -0
  219. package/skills/gsd-path-inspect/references/docs-auditor.md +60 -0
  220. package/skills/gsd-path-inspect/scripts/_common.py +180 -0
  221. package/skills/gsd-path-inspect/scripts/check_docs_audit.py +463 -0
  222. package/skills/gsd-path-inspect/scripts/check_handoffs.py +1855 -0
  223. package/skills/gsd-path-inspect/scripts/check_task_briefs.py +376 -0
  224. package/skills/gsd-path-inspect/scripts/detect_project.py +1517 -0
  225. package/skills/gsd-path-inspect/scripts/discussion_records.py +619 -0
  226. package/skills/gsd-path-inspect/scripts/isolation.py +3538 -0
  227. package/skills/gsd-path-inspect/scripts/pipeline_git.py +940 -0
  228. package/skills/gsd-path-inspect/scripts/pipeline_state.py +2291 -0
  229. package/skills/gsd-path-inspect/scripts/state_checkpoint.py +1039 -0
  230. package/skills/gsd-path-inspect/scripts/state_promote.py +743 -0
  231. package/skills/gsd-path-inspect/templates/codebase.md +46 -0
  232. package/skills/gsd-path-inspect/templates/docs-audit.md +69 -0
  233. package/skills/gsd-path-inspect/templates/state.md +27 -0
  234. package/skills/gsd-path-loop/SKILL.md +98 -0
  235. package/skills/gsd-path-loop/agents/openai.yaml +6 -0
  236. package/skills/gsd-path-loop/examples/ci-repair.LOOP.md +61 -0
  237. package/skills/gsd-path-loop/scripts/_common.py +180 -0
  238. package/skills/gsd-path-loop/scripts/discussion_records.py +619 -0
  239. package/skills/gsd-path-loop/scripts/loop_run.py +837 -0
  240. package/skills/gsd-path-loop/templates/loop.md +59 -0
  241. package/skills/gsd-path-migrate/SKILL.md +134 -0
  242. package/skills/gsd-path-migrate/agents/openai.yaml +6 -0
  243. package/skills/gsd-path-migrate/scripts/core_hook_gate.py +34 -0
  244. package/skills/gsd-path-migrate/scripts/core_hook_settings.py +119 -0
  245. package/skills/gsd-path-migrate/scripts/discussion_records.py +619 -0
  246. package/skills/gsd-path-migrate/scripts/migrate_core.py +169 -0
  247. package/skills/gsd-path-plan/SKILL.md +411 -0
  248. package/skills/gsd-path-plan/agents/openai.yaml +6 -0
  249. package/skills/gsd-path-plan/references/dispatch.md +131 -0
  250. package/skills/gsd-path-plan/references/planner.md +104 -0
  251. package/skills/gsd-path-plan/scripts/_common.py +180 -0
  252. package/skills/gsd-path-plan/scripts/check_handoffs.py +1855 -0
  253. package/skills/gsd-path-plan/scripts/check_task_briefs.py +376 -0
  254. package/skills/gsd-path-plan/scripts/discussion_records.py +619 -0
  255. package/skills/gsd-path-plan/scripts/isolation.py +3538 -0
  256. package/skills/gsd-path-plan/scripts/pipeline_git.py +940 -0
  257. package/skills/gsd-path-plan/scripts/pipeline_state.py +2291 -0
  258. package/skills/gsd-path-plan/scripts/review_panel.py +553 -0
  259. package/skills/gsd-path-plan/scripts/state_checkpoint.py +1039 -0
  260. package/skills/gsd-path-plan/scripts/state_promote.py +743 -0
  261. package/skills/gsd-path-plan/scripts/workflow_run.py +117 -0
  262. package/skills/gsd-path-plan/templates/patch-findings.md +16 -0
  263. package/skills/gsd-path-plan/templates/plan-panel.md +25 -0
  264. package/skills/gsd-path-plan/templates/plan.md +89 -0
  265. package/skills/gsd-path-plan/templates/task.md +74 -0
  266. package/skills/gsd-path-research/SKILL.md +159 -0
  267. package/skills/gsd-path-research/agents/openai.yaml +6 -0
  268. package/skills/gsd-path-research/references/dispatch.md +131 -0
  269. package/skills/gsd-path-research/references/researcher.md +42 -0
  270. package/skills/gsd-path-research/scripts/_common.py +180 -0
  271. package/skills/gsd-path-research/scripts/check_handoffs.py +1855 -0
  272. package/skills/gsd-path-research/scripts/check_task_briefs.py +376 -0
  273. package/skills/gsd-path-research/scripts/discussion_records.py +619 -0
  274. package/skills/gsd-path-research/scripts/isolation.py +3538 -0
  275. package/skills/gsd-path-research/scripts/pipeline_git.py +940 -0
  276. package/skills/gsd-path-research/scripts/pipeline_state.py +2291 -0
  277. package/skills/gsd-path-research/scripts/state_checkpoint.py +1039 -0
  278. package/skills/gsd-path-research/scripts/state_promote.py +743 -0
  279. package/skills/gsd-path-research/templates/evidence.md +24 -0
  280. package/skills/gsd-path-research/templates/research-handoff.md +25 -0
  281. package/skills/gsd-path-roadmap/SKILL.md +215 -0
  282. package/skills/gsd-path-roadmap/agents/openai.yaml +6 -0
  283. package/skills/gsd-path-roadmap/references/dispatch.md +131 -0
  284. package/skills/gsd-path-roadmap/references/roadmapper.md +48 -0
  285. package/skills/gsd-path-roadmap/scripts/_common.py +180 -0
  286. package/skills/gsd-path-roadmap/scripts/archive_milestone.py +2265 -0
  287. package/skills/gsd-path-roadmap/scripts/check_handoffs.py +1855 -0
  288. package/skills/gsd-path-roadmap/scripts/check_task_briefs.py +376 -0
  289. package/skills/gsd-path-roadmap/scripts/detect_project.py +1517 -0
  290. package/skills/gsd-path-roadmap/scripts/discussion_records.py +619 -0
  291. package/skills/gsd-path-roadmap/scripts/discussion_validate.py +1321 -0
  292. package/skills/gsd-path-roadmap/scripts/integration.py +1433 -0
  293. package/skills/gsd-path-roadmap/scripts/isolation.py +3538 -0
  294. package/skills/gsd-path-roadmap/scripts/pipeline_git.py +940 -0
  295. package/skills/gsd-path-roadmap/scripts/pipeline_state.py +2291 -0
  296. package/skills/gsd-path-roadmap/scripts/promote_lookahead.py +415 -0
  297. package/skills/gsd-path-roadmap/scripts/review_panel.py +553 -0
  298. package/skills/gsd-path-roadmap/scripts/state_checkpoint.py +1039 -0
  299. package/skills/gsd-path-roadmap/scripts/state_promote.py +743 -0
  300. package/skills/gsd-path-roadmap/templates/roadmap.md +38 -0
  301. package/skills/gsd-path-ship/SKILL.md +412 -0
  302. package/skills/gsd-path-ship/agents/openai.yaml +6 -0
  303. package/skills/gsd-path-ship/references/dispatch.md +131 -0
  304. package/skills/gsd-path-ship/references/reviewer.md +188 -0
  305. package/skills/gsd-path-ship/scripts/_common.py +180 -0
  306. package/skills/gsd-path-ship/scripts/archive_milestone.py +2265 -0
  307. package/skills/gsd-path-ship/scripts/build_state.py +854 -0
  308. package/skills/gsd-path-ship/scripts/check_handoffs.py +1855 -0
  309. package/skills/gsd-path-ship/scripts/check_task_briefs.py +376 -0
  310. package/skills/gsd-path-ship/scripts/discussion_records.py +619 -0
  311. package/skills/gsd-path-ship/scripts/discussion_validate.py +1321 -0
  312. package/skills/gsd-path-ship/scripts/integration.py +1433 -0
  313. package/skills/gsd-path-ship/scripts/isolation.py +3538 -0
  314. package/skills/gsd-path-ship/scripts/lean_verification.py +256 -0
  315. package/skills/gsd-path-ship/scripts/pipeline_git.py +940 -0
  316. package/skills/gsd-path-ship/scripts/pipeline_state.py +2291 -0
  317. package/skills/gsd-path-ship/scripts/review_panel.py +553 -0
  318. package/skills/gsd-path-ship/scripts/state_checkpoint.py +1039 -0
  319. package/skills/gsd-path-ship/scripts/state_promote.py +743 -0
  320. package/skills/gsd-path-ship/scripts/workflow_run.py +117 -0
  321. package/skills/gsd-path-ship/templates/archive-manifest.md +37 -0
  322. package/skills/gsd-path-ship/templates/final-review.md +27 -0
  323. package/skills/gsd-path-ship/templates/gap-review.md +20 -0
  324. package/skills/gsd-path-ship/templates/patch-findings.md +16 -0
  325. package/skills/gsd-path-ship/templates/wave-review.md +64 -0
  326. package/skills/gsd-path-undo/SKILL.md +45 -0
  327. package/skills/gsd-path-undo/agents/openai.yaml +6 -0
  328. package/skills/gsd-path-undo/scripts/_common.py +180 -0
  329. package/skills/gsd-path-undo/scripts/discussion_records.py +619 -0
  330. package/skills/gsd-path-undo/scripts/pipeline_undo.py +1039 -0
  331. package/skills/path/BUILD.md +700 -0
  332. package/skills/path/DECIDE.md +115 -0
  333. package/skills/path/DEFINE.md +297 -0
  334. package/skills/path/DOCS-AUDIT.md +190 -0
  335. package/skills/path/INSPECT.md +167 -0
  336. package/skills/path/PLAN.md +411 -0
  337. package/skills/path/RESEARCH.md +159 -0
  338. package/skills/path/ROADMAP.md +215 -0
  339. package/skills/path/SHIP.md +412 -0
  340. package/skills/path/SKILL.md +471 -0
  341. package/skills/path/agents/openai.yaml +6 -0
  342. package/skills/path/references/codebase-mapper.md +52 -0
  343. package/skills/path/references/coder.md +90 -0
  344. package/skills/path/references/decider.md +36 -0
  345. package/skills/path/references/dispatch.md +131 -0
  346. package/skills/path/references/docs-auditor.md +60 -0
  347. package/skills/path/references/planner.md +104 -0
  348. package/skills/path/references/researcher.md +42 -0
  349. package/skills/path/references/reviewer.md +188 -0
  350. package/skills/path/references/roadmapper.md +48 -0
  351. package/skills/path/scripts/_common.py +180 -0
  352. package/skills/path/scripts/archive_milestone.py +2265 -0
  353. package/skills/path/scripts/bootstrap_repository.py +710 -0
  354. package/skills/path/scripts/build_state.py +854 -0
  355. package/skills/path/scripts/check_docs_audit.py +463 -0
  356. package/skills/path/scripts/check_handoffs.py +1855 -0
  357. package/skills/path/scripts/check_task_briefs.py +376 -0
  358. package/skills/path/scripts/check_update.py +93 -0
  359. package/skills/path/scripts/detect_project.py +1517 -0
  360. package/skills/path/scripts/discussion_records.py +619 -0
  361. package/skills/path/scripts/discussion_validate.py +1321 -0
  362. package/skills/path/scripts/dispatch_driver.py +1812 -0
  363. package/skills/path/scripts/integration.py +1433 -0
  364. package/skills/path/scripts/isolation.py +3538 -0
  365. package/skills/path/scripts/lean_verification.py +256 -0
  366. package/skills/path/scripts/loop_run.py +837 -0
  367. package/skills/path/scripts/pipeline_git.py +940 -0
  368. package/skills/path/scripts/pipeline_state.py +2291 -0
  369. package/skills/path/scripts/promote_lookahead.py +415 -0
  370. package/skills/path/scripts/review_findings.py +714 -0
  371. package/skills/path/scripts/review_panel.py +553 -0
  372. package/skills/path/scripts/state_checkpoint.py +1039 -0
  373. package/skills/path/scripts/state_promote.py +743 -0
  374. package/skills/path/scripts/token_budget.py +146 -0
  375. package/skills/path/scripts/workflow_run.py +117 -0
  376. package/skills/path/templates/answers.md +29 -0
  377. package/skills/path/templates/archive-manifest.md +37 -0
  378. package/skills/path/templates/charter.md +50 -0
  379. package/skills/path/templates/codebase.md +46 -0
  380. package/skills/path/templates/dialogue.md +21 -0
  381. package/skills/path/templates/docs-audit.md +69 -0
  382. package/skills/path/templates/evidence.md +24 -0
  383. package/skills/path/templates/final-review.md +27 -0
  384. package/skills/path/templates/gap-review.md +20 -0
  385. package/skills/path/templates/intent.md +98 -0
  386. package/skills/path/templates/loop.md +59 -0
  387. package/skills/path/templates/patch-findings.md +16 -0
  388. package/skills/path/templates/plan-panel.md +25 -0
  389. package/skills/path/templates/plan.md +89 -0
  390. package/skills/path/templates/repository.md +16 -0
  391. package/skills/path/templates/research-handoff.md +25 -0
  392. package/skills/path/templates/roadmap.md +38 -0
  393. package/skills/path/templates/skeptic.md +36 -0
  394. package/skills/path/templates/state.md +27 -0
  395. package/skills/path/templates/synthesis.md +36 -0
  396. package/skills/path/templates/task.md +74 -0
  397. package/skills/path/templates/wave-panel.md +25 -0
  398. package/skills/path/templates/wave-review.md +64 -0
@@ -0,0 +1,179 @@
1
+ // Interactive OpenGSD installer wizard. Dependency-free (node:readline raw mode).
2
+ // Produces an argv for install.mjs main(); it never writes files itself.
3
+
4
+ import { emitKeypressEvents } from "node:readline";
5
+
6
+ export const HOST_LABELS = {
7
+ codex: "Codex",
8
+ claude: "Claude Code",
9
+ grok: "Grok",
10
+ opencode: "OpenCode",
11
+ copilot: "GitHub Copilot CLI",
12
+ qwen: "Qwen Code",
13
+ antigravity: "Antigravity",
14
+ cursor: "Cursor",
15
+ zed: "Zed",
16
+ kiro: "Kiro",
17
+ kimi: "Kimi Code",
18
+ };
19
+
20
+ // ponytail: hand-drawn block letters; no figlet dependency.
21
+ const WORDMARK = [
22
+ " ██████╗ ██████╗ ███████╗███╗ ██╗ ██████╗ ███████╗██████╗ ",
23
+ "██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ██╔════╝ ██╔════╝██╔══██╗",
24
+ "██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██║ ███╗███████╗██║ ██║",
25
+ "██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██║╚════██║██║ ██║",
26
+ "╚██████╔╝██║ ███████╗██║ ╚████║ ╚██████╔╝███████║██████╔╝",
27
+ " ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚═════╝ ",
28
+ ];
29
+
30
+ export function makeTheme(colored) {
31
+ const esc = (code) => (text) => (colored ? `\u001b[${code}m${text}\u001b[0m` : text);
32
+ const gradient = [51, 45, 39, 215, 209, 202]; // opengsd.net brand: cyan #00e5ff → orange #ff4500
33
+ return {
34
+ dim: esc("2"),
35
+ bold: esc("1"),
36
+ accent: esc("38;5;45"), // brand cyan #00c4ff
37
+ flame: esc("38;5;202"), // brand orange #ff5b37
38
+ ok: esc("38;5;84"),
39
+ warn: esc("38;5;214"),
40
+ err: esc("38;5;203"),
41
+ inverse: esc("7"),
42
+ gradientLine: (line, index) => (colored ? `\u001b[38;5;${gradient[index % gradient.length]}m${line}\u001b[0m` : line),
43
+ };
44
+ }
45
+
46
+ export function banner(theme, version) {
47
+ const lines = WORDMARK.map((line, index) => " " + theme.gradientLine(line, index));
48
+ lines.push("");
49
+ lines.push(
50
+ ` ${theme.bold("GSD Path")} ${theme.dim(`installer${version ? ` v${version}` : ""}`)} ${theme.dim("·")} ${theme.dim("a disk-backed pipeline for AI coding agents")}`
51
+ );
52
+ lines.push(` ${theme.dim("↑/↓ move · space toggle · a all · enter confirm · q quit")}`);
53
+ return lines.join("\n") + "\n";
54
+ }
55
+
56
+ // Reads single keypresses from `input`; resolves with {name, ctrl}.
57
+ function keyReader(input) {
58
+ emitKeypressEvents(input);
59
+ if (input.isTTY) input.setRawMode(true);
60
+ input.resume();
61
+ const queue = [];
62
+ const waiters = [];
63
+ const onKey = (_, key) => {
64
+ if (waiters.length) waiters.shift()(key);
65
+ else queue.push(key);
66
+ };
67
+ input.on("keypress", onKey);
68
+ return {
69
+ next: () => (queue.length ? Promise.resolve(queue.shift()) : new Promise((resolve) => waiters.push(resolve))),
70
+ close() {
71
+ input.off("keypress", onKey);
72
+ if (input.isTTY) input.setRawMode(false);
73
+ input.pause();
74
+ },
75
+ };
76
+ }
77
+
78
+ class Cancelled extends Error {}
79
+
80
+ function render(output, frame, previousLines) {
81
+ if (previousLines) output.write(`\u001b[${previousLines}A\u001b[0J`);
82
+ output.write(frame);
83
+ return frame.split("\n").length - 1;
84
+ }
85
+
86
+ async function select(io, theme, title, items, { multi = false } = {}) {
87
+ const { keys, output } = io;
88
+ let cursor = 0;
89
+ const chosen = new Set(items.filter((item) => item.checked).map((item) => item.value));
90
+ let drawn = 0;
91
+ const draw = () => {
92
+ const rows = items.map((item, index) => {
93
+ const active = index === cursor;
94
+ const mark = multi ? (chosen.has(item.value) ? theme.accent("◉") : theme.dim("○")) : active ? theme.flame("›") : " ";
95
+ const label = active ? theme.bold(item.label) : item.label;
96
+ const note = item.note ? ` ${theme.dim(item.note)}` : "";
97
+ return ` ${mark} ${label}${note}`;
98
+ });
99
+ drawn = render(output, `\n ${theme.accent("?")} ${theme.bold(title)}\n${rows.join("\n")}\n`, drawn);
100
+ };
101
+ for (;;) {
102
+ draw();
103
+ const key = await keys.next();
104
+ if (!key) continue;
105
+ const current = items[cursor].value;
106
+ if (key.name === "q" || key.name === "escape" || (key.ctrl && key.name === "c")) throw new Cancelled();
107
+ if (key.name === "up" || key.name === "k") cursor = (cursor - 1 + items.length) % items.length;
108
+ else if (key.name === "down" || key.name === "j" || key.name === "tab") cursor = (cursor + 1) % items.length;
109
+ else if (multi && key.name === "space") chosen.has(current) ? chosen.delete(current) : chosen.add(current);
110
+ else if (multi && key.name === "a") {
111
+ if (chosen.size === items.length) chosen.clear();
112
+ else items.forEach((item) => chosen.add(item.value));
113
+ } else if (key.name === "return") {
114
+ if (!multi) return current;
115
+ if (chosen.size) return items.filter((item) => chosen.has(item.value)).map((item) => item.value);
116
+ }
117
+ }
118
+ }
119
+
120
+ const confirm = (io, theme, title, yes = "Yes", no = "No") =>
121
+ select(io, theme, title, [
122
+ { label: yes, value: true },
123
+ { label: no, value: false },
124
+ ]);
125
+
126
+ // Pure: runs the question flow and returns install.mjs argv (or null if cancelled).
127
+ // `installed(target, local)` reports whether a managed install already exists for that host in that scope.
128
+ export async function wizard({ input, output, colored = true, version = "", cwd = process.cwd(), installed = () => false, targets }) {
129
+ const theme = makeTheme(colored);
130
+ const keys = keyReader(input);
131
+ const io = { keys, output };
132
+ output.write(banner(theme, version));
133
+ try {
134
+ const scope = await select(io, theme, "Where should skills live?", [
135
+ { label: "Global", value: "global", note: "per-host home directories" },
136
+ { label: "This project", value: "local", note: cwd },
137
+ ]);
138
+ const local = scope === "local";
139
+
140
+ const hostItems = targets.map((target) => {
141
+ const checked = installed(target, local);
142
+ return { label: HOST_LABELS[target] || target, value: target, checked, note: checked ? "installed" : "" };
143
+ });
144
+ const hosts = await select(io, theme, "Which agents should get GSD Path?", hostItems, { multi: true });
145
+
146
+ const update =
147
+ hostItems.some((item) => item.checked && hosts.includes(item.value)) &&
148
+ (await confirm(io, theme, "Existing installs found. What do you want to do?", "Update in place", "Fresh install"));
149
+
150
+ const project = await confirm(io, theme, "Write AGENTS.md + WORKFLOW.md contracts into this repo?", `Yes — ${cwd}`, "Not now");
151
+ const hooks = project && (await confirm(io, theme, "Install guard hooks (archive immutability, ship-commit purity)?"));
152
+
153
+ const argv = [];
154
+ if (hosts.length === targets.length) argv.push("--all");
155
+ else for (const host of hosts) argv.push(`--${host}`);
156
+ if (update) argv.push("--update");
157
+ if (local) argv.push("--local");
158
+ if (project) argv.push("--project", cwd);
159
+ if (hooks) argv.push("--hooks");
160
+
161
+ output.write(`\n ${theme.dim("Equivalent command:")}\n ${theme.accent("$")} gsd-path ${argv.join(" ")}\n`);
162
+ const go = await select(io, theme, "Ready?", [
163
+ { label: "Install", value: "install" },
164
+ { label: "Dry run first", value: "dry", note: "preview, write nothing" },
165
+ { label: "Quit", value: "quit" },
166
+ ]);
167
+ if (go === "quit") return null;
168
+ if (go === "dry") argv.push("--dry-run");
169
+ return argv;
170
+ } catch (error) {
171
+ if (error instanceof Cancelled) {
172
+ output.write(`\n ${theme.dim("Cancelled.")}\n`);
173
+ return null;
174
+ }
175
+ throw error;
176
+ } finally {
177
+ keys.close();
178
+ }
179
+ }
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env python3
2
+ """Run canonical workflow helpers with fixed arguments and fail-stop receipts."""
3
+
4
+ import argparse
5
+ import json
6
+ import subprocess
7
+ import sys
8
+ from pathlib import Path
9
+
10
+ try:
11
+ from scripts import _common
12
+ except ImportError: # bundled copy inside a skill's scripts directory
13
+ import _common
14
+
15
+
16
+ class StepFailed(RuntimeError):
17
+ pass
18
+
19
+
20
+ def run_workflow(repo: Path, action: str, project_dir: str, expected_head: str = None,
21
+ task_id: str = None, round_size: int = None) -> dict:
22
+ steps = []
23
+ scripts = Path(__file__).resolve().parent
24
+
25
+ def step(script, *arguments):
26
+ command = [sys.executable, "-B", str(scripts / script), *arguments]
27
+ completed = subprocess.run(command, cwd=repo, capture_output=True, text=True)
28
+ receipt = {"script": script, "command": command, "exit_code": completed.returncode,
29
+ "stdout": completed.stdout, "stderr": completed.stderr}
30
+ steps.append(receipt)
31
+ if completed.stderr:
32
+ sys.stderr.write(completed.stderr)
33
+ if completed.returncode:
34
+ raise StepFailed(script)
35
+ try:
36
+ receipt["result"] = json.loads(completed.stdout)
37
+ except json.JSONDecodeError as error:
38
+ raise StepFailed(f"{script} did not return JSON") from error
39
+ return receipt["result"]
40
+
41
+ common = ["--repo", str(repo), "--project-dir", project_dir]
42
+ try:
43
+ if action == "route":
44
+ step("pipeline_state.py", "route", *common)
45
+ elif action == "lint-round":
46
+ head = subprocess.run(["git", "rev-parse", "--verify", "HEAD"],
47
+ cwd=repo, capture_output=True, text=True, check=True).stdout.strip()
48
+ step("check_task_briefs.py", "--repo", str(repo), "--base", head,
49
+ "--tasks-dir", f"{project_dir}/tasks")
50
+ step("check_handoffs.py", "plan", *common)
51
+ elif action == "prepare-task":
52
+ task = step("isolation.py", "isolate-task", "--repo", str(repo),
53
+ "--base", expected_head, "--task-id", task_id,
54
+ "--round-size", str(round_size))
55
+ if task["mode"] == "serial":
56
+ step("isolation.py", "isolate-verify", "--repo", str(repo),
57
+ "--base", expected_head, "--name", f"task-{task_id.lower()}-verify")
58
+ elif action == "build-evidence":
59
+ proof = step("build_state.py", "verify-landed", *common, "--head", expected_head)
60
+ # The landing proof has one canonical home; lean final-review reuse allows only this path.
61
+ evidence = repo / project_dir / "build" / "evidence.json"
62
+ _common.atomic_write(evidence, json.dumps(proof, indent=2, sort_keys=True) + "\n")
63
+ steps.append({"script": "workflow_run.py", "evidence": str(evidence)})
64
+ elif action == "prepare-final":
65
+ if project_dir != ".project":
66
+ raise StepFailed("final review requires the active milestone")
67
+ pending = step("discussion_records.py", "pending", "--repo", str(repo))
68
+ if pending["pending"]:
69
+ raise StepFailed("pending discussion requires its owner disposition")
70
+ step("build_state.py", "verify-landed", *common, "--head", expected_head)
71
+ step("lean_verification.py", "--repo", str(repo), "--expected-head", expected_head)
72
+ else:
73
+ pending = step("discussion_records.py", "pending", "--repo", str(repo))
74
+ if pending["pending"]:
75
+ raise StepFailed("pending discussion requires its owner disposition")
76
+ step("check_handoffs.py", "plan", *common)
77
+ head = subprocess.run(["git", "rev-parse", "--verify", "HEAD"],
78
+ cwd=repo, capture_output=True, text=True, check=True).stdout.strip()
79
+ step("check_task_briefs.py", "--repo", str(repo), "--base", head,
80
+ "--tasks-dir", f"{project_dir}/tasks")
81
+ panel = ["validate-plan", "--plan", str(repo / project_dir / "plan/PLAN.md"),
82
+ "--intent", str(repo / project_dir / "intent/INTENT.md")]
83
+ charter = repo / ".project/CHARTER.md"
84
+ if charter.exists():
85
+ panel += ["--charter", str(charter)]
86
+ step("review_panel.py", *panel)
87
+ if action == "approve-plan":
88
+ step("pipeline_state.py", "approve", *common, "--kind", "plan",
89
+ "--expected-head", expected_head)
90
+ except (StepFailed, OSError, subprocess.CalledProcessError) as error:
91
+ return {"status": "blocked", "reason": str(error), "steps": steps,
92
+ "next": "$gsd-path-forensics"}
93
+ return {"status": "complete", "steps": steps}
94
+
95
+
96
+ def main(argv=None):
97
+ parser = argparse.ArgumentParser(description=__doc__)
98
+ parser.add_argument("action", choices=("route", "gate-plan", "approve-plan", "build-evidence", "lint-round", "prepare-task", "prepare-final"))
99
+ parser.add_argument("--repo", type=Path, required=True)
100
+ parser.add_argument("--project-dir", choices=(".project", ".project/next"), default=".project")
101
+ parser.add_argument("--expected-head")
102
+ parser.add_argument("--task-id")
103
+ parser.add_argument("--round-size", type=int)
104
+ arguments = parser.parse_args(argv)
105
+ if arguments.action in {"approve-plan", "build-evidence", "prepare-task", "prepare-final"} and not arguments.expected_head:
106
+ parser.error(f"{arguments.action} requires --expected-head")
107
+ if arguments.action == "prepare-task" and (not arguments.task_id or arguments.round_size is None):
108
+ parser.error("prepare-task requires --task-id and --round-size")
109
+ result = run_workflow(arguments.repo.resolve(), arguments.action,
110
+ arguments.project_dir, arguments.expected_head,
111
+ arguments.task_id, arguments.round_size)
112
+ print(json.dumps(result, sort_keys=True))
113
+ return 0 if result["status"] == "complete" else 1
114
+
115
+
116
+ if __name__ == "__main__":
117
+ raise SystemExit(main())