dsh-pstack 0.1.0 → 0.2.0-beta.3

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 (406) hide show
  1. package/LICENSE +2 -3
  2. package/README.md +174 -148
  3. package/README.zh.md +185 -0
  4. package/assets/logo.png +0 -0
  5. package/cordis.patch.yml +103 -14
  6. package/dist/host-contract-CUPSpeNk.d.mts +22 -0
  7. package/dist/index.d.mts +87 -14
  8. package/dist/index.mjs +370 -143
  9. package/dist/models.d.mts +44 -0
  10. package/dist/models.mjs +201 -0
  11. package/dist/paths-BT77khwm.mjs +48 -0
  12. package/dist/{LICENSE → pstack/LICENSE} +1 -2
  13. package/dist/pstack/README.md +291 -0
  14. package/{assets → dist/pstack}/agents/comment-sicko.md +1 -1
  15. package/dist/pstack/agents/poteto-agent.md +9 -0
  16. package/{assets → dist/pstack}/docs/guide/01-setup.md +11 -9
  17. package/dist/{assets → pstack}/docs/guide/02-poteto-mode.md +2 -2
  18. package/{assets → dist/pstack}/docs/guide/04-design.md +4 -4
  19. package/dist/{assets → pstack}/docs/guide/05-build-and-clean.md +3 -3
  20. package/dist/{assets → pstack}/docs/guide/06-verify-and-ship.md +11 -1
  21. package/{assets → dist/pstack}/docs/guide/07-overnight.md +10 -10
  22. package/dist/{assets → pstack}/docs/guide/09-make-it-yours.md +4 -4
  23. package/{assets → dist/pstack}/docs/guide/10-recipes-and-pitfalls.md +6 -4
  24. package/dist/pstack/docs/guide/images/design.jpg +0 -0
  25. package/dist/pstack/docs/guide/images/overnight.jpg +0 -0
  26. package/dist/pstack/docs/guide/images/recipes.jpg +0 -0
  27. package/dist/pstack/docs/guide/images/router.jpg +0 -0
  28. package/dist/pstack/docs/guide/images/understanding.jpg +0 -0
  29. package/dist/pstack/docs/guide/images/verification.jpg +0 -0
  30. package/dist/pstack/docs/harness/dsh.md +98 -0
  31. package/{assets → dist/pstack}/skills/architect/SKILL.md +5 -5
  32. package/dist/pstack/skills/arena/SKILL.md +50 -0
  33. package/{assets → dist/pstack}/skills/automate-me/SKILL.md +14 -13
  34. package/dist/{assets → pstack}/skills/benchmark-checklist/SKILL.md +1 -3
  35. package/dist/{assets → pstack}/skills/blast-radius/SKILL.md +1 -3
  36. package/{assets → dist/pstack}/skills/bro/SKILL.md +0 -2
  37. package/dist/{assets → pstack}/skills/correct/SKILL.md +1 -3
  38. package/{assets → dist/pstack}/skills/create-formal-verification-skill/SKILL.md +5 -3
  39. package/{assets → dist/pstack}/skills/create-verification-skill/SKILL.md +6 -6
  40. package/{assets → dist/pstack}/skills/figure-it-out/SKILL.md +4 -4
  41. package/dist/{assets → pstack}/skills/how/SKILL.md +4 -4
  42. package/{assets → dist/pstack}/skills/how/references/explainer-prompt.md +1 -1
  43. package/dist/pstack/skills/in-your-own-words/SKILL.md +7 -0
  44. package/dist/pstack/skills/interrogate/SKILL.md +33 -0
  45. package/{assets → dist/pstack}/skills/ketchup/SKILL.md +1 -3
  46. package/dist/pstack/skills/ketchup-video/SKILL.md +29 -0
  47. package/{assets → dist/pstack}/skills/maintain-formal-verification-skill/SKILL.md +2 -2
  48. package/dist/{assets → pstack}/skills/maintain-verification-skill/SKILL.md +3 -3
  49. package/dist/pstack/skills/make-bot-ui/SKILL.md +117 -0
  50. package/{assets → dist/pstack}/skills/no-comments/SKILL.md +4 -4
  51. package/{assets → dist/pstack}/skills/poteto-help/SKILL.md +21 -17
  52. package/dist/{assets → pstack}/skills/poteto-help/references/prompting.md +1 -1
  53. package/dist/{assets → pstack}/skills/poteto-help/references/recipes.md +3 -3
  54. package/{assets → dist/pstack}/skills/poteto-mode/SKILL.md +20 -21
  55. package/dist/{assets → pstack}/skills/poteto-mode/playbooks/authoring-a-skill.md +1 -1
  56. package/dist/{assets → pstack}/skills/poteto-mode/playbooks/autonomous-run.md +2 -2
  57. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/autopilot-full.md +7 -7
  58. package/dist/pstack/skills/poteto-mode/playbooks/autopilot-stack.md +8 -0
  59. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/babysit.md +3 -3
  60. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/bug-fix.md +3 -3
  61. package/dist/{assets → pstack}/skills/poteto-mode/playbooks/eval.md +1 -1
  62. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/feature.md +1 -1
  63. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/hillclimb.md +1 -1
  64. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/multi-phase-plan.md +13 -13
  65. package/dist/{assets → pstack}/skills/poteto-mode/playbooks/opening-a-pr.md +3 -3
  66. package/dist/pstack/skills/poteto-mode/playbooks/orchestrate.md +25 -0
  67. package/dist/{assets → pstack}/skills/poteto-mode/playbooks/perf-issue.md +2 -2
  68. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/prototype.md +1 -1
  69. package/dist/{assets → pstack}/skills/poteto-mode/playbooks/refactoring.md +2 -2
  70. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/runtime-forensics.md +1 -1
  71. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/session-pickup.md +1 -1
  72. package/dist/{assets → pstack}/skills/poteto-mode/playbooks/shipping.md +2 -2
  73. package/{assets → dist/pstack}/skills/poteto-mode/playbooks/visual-parity.md +1 -1
  74. package/dist/{assets → pstack}/skills/poteto-mode/playbooks/worktree-cleanup.md +2 -2
  75. package/{assets → dist/pstack}/skills/poteto-mode/scripts/check-plan.mjs +83 -70
  76. package/dist/{assets/skills/poteto-mode/scripts/check-plan.test.ts → pstack/skills/poteto-mode/scripts/check-plan.test.mjs} +53 -21
  77. package/dist/pstack/skills/poteto-mode/scripts/expect.mjs +254 -0
  78. package/dist/pstack/skills/poteto-mode/scripts/support.mjs +93 -0
  79. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/cli.mjs +123 -0
  80. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/cli.test.mjs +217 -0
  81. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.mjs +119 -0
  82. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/github.mjs +626 -0
  83. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/github.test.mjs +521 -0
  84. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/policy.mjs +657 -0
  85. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/policy.test.mjs +523 -0
  86. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/render.mjs +106 -0
  87. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/types.mjs +9 -0
  88. package/dist/pstack/skills/poteto-mode/scripts/watch-pr/watch-pr.mjs +5 -0
  89. package/dist/pstack/skills/poteto-mode/scripts/worktree-audit.mjs +668 -0
  90. package/dist/pstack/skills/poteto-mode/scripts/worktree-audit.test.mjs +134 -0
  91. package/{assets → dist/pstack}/skills/principle-attack-the-premise/SKILL.md +1 -3
  92. package/{assets → dist/pstack}/skills/principle-boundary-discipline/SKILL.md +1 -3
  93. package/{assets → dist/pstack}/skills/principle-build-the-lever/SKILL.md +0 -3
  94. package/dist/pstack/skills/principle-encode-lessons-in-structure/SKILL.md +11 -0
  95. package/dist/pstack/skills/principle-exhaust-the-design-space/SKILL.md +9 -0
  96. package/{assets → dist/pstack}/skills/principle-experience-first/SKILL.md +1 -3
  97. package/dist/{assets → pstack}/skills/principle-explain-the-number/SKILL.md +3 -4
  98. package/dist/{assets → pstack}/skills/principle-fix-root-causes/SKILL.md +1 -3
  99. package/{assets → dist/pstack}/skills/principle-foundational-thinking/SKILL.md +0 -2
  100. package/dist/{assets → pstack}/skills/principle-guard-the-context-window/SKILL.md +0 -2
  101. package/dist/{assets → pstack}/skills/principle-laziness-protocol/SKILL.md +1 -3
  102. package/dist/{assets → pstack}/skills/principle-make-operations-idempotent/SKILL.md +1 -3
  103. package/dist/{assets → pstack}/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +1 -3
  104. package/{assets → dist/pstack}/skills/principle-minimize-reader-load/SKILL.md +1 -3
  105. package/{assets → dist/pstack}/skills/principle-model-the-domain/SKILL.md +1 -3
  106. package/{assets → dist/pstack}/skills/principle-never-block-on-the-human/SKILL.md +1 -3
  107. package/dist/{assets → pstack}/skills/principle-outcome-oriented-execution/SKILL.md +1 -3
  108. package/{assets → dist/pstack}/skills/principle-prove-it-works/SKILL.md +3 -3
  109. package/dist/{assets → pstack}/skills/principle-redesign-from-first-principles/SKILL.md +1 -3
  110. package/{assets → dist/pstack}/skills/principle-separate-before-serializing-shared-state/SKILL.md +1 -3
  111. package/dist/{assets → pstack}/skills/principle-sequence-verifiable-units/SKILL.md +1 -3
  112. package/dist/{assets → pstack}/skills/principle-subtract-before-you-add/SKILL.md +1 -3
  113. package/{assets → dist/pstack}/skills/principle-test-behavior-not-implementation/SKILL.md +1 -3
  114. package/{assets → dist/pstack}/skills/principle-type-system-discipline/SKILL.md +1 -3
  115. package/dist/{assets → pstack}/skills/recall/SKILL.md +4 -4
  116. package/dist/pstack/skills/reflect/SKILL.md +71 -0
  117. package/{assets → dist/pstack}/skills/reflect/references/divergent-reviewer.md +1 -1
  118. package/{assets → dist/pstack}/skills/reflect/references/judgment-reviewer.md +1 -1
  119. package/{assets → dist/pstack}/skills/reflect/references/synthesizer.md +3 -3
  120. package/dist/{assets → pstack}/skills/reflect/references/tooling-reviewer.md +1 -1
  121. package/dist/pstack/skills/setup-pstack/SKILL.md +80 -0
  122. package/{assets → dist/pstack}/skills/sharpen/SKILL.md +1 -3
  123. package/{assets → dist/pstack}/skills/show-me-your-work/SKILL.md +3 -3
  124. package/dist/pstack/skills/show-me-your-work/scripts/log.mjs +106 -0
  125. package/dist/pstack/skills/show-me-your-work/scripts/log.test.mjs +56 -0
  126. package/dist/pstack/skills/statechart/SKILL.md +82 -0
  127. package/dist/pstack/skills/statechart/references/render.md +93 -0
  128. package/dist/pstack/skills/statechart/scripts/backends/cfg.mjs +31 -0
  129. package/dist/pstack/skills/statechart/scripts/backends/mermaid.mjs +186 -0
  130. package/dist/pstack/skills/statechart/scripts/backends/plain-text.mjs +62 -0
  131. package/dist/pstack/skills/statechart/scripts/backends/report.mjs +84 -0
  132. package/dist/pstack/skills/statechart/scripts/frontends/config.mjs +268 -0
  133. package/dist/pstack/skills/statechart/scripts/frontends/dot.mjs +67 -0
  134. package/dist/pstack/skills/statechart/scripts/frontends/marks.mjs +94 -0
  135. package/dist/pstack/skills/statechart/scripts/frontends/messages.mjs +48 -0
  136. package/dist/pstack/skills/statechart/scripts/frontends/spec.mjs +101 -0
  137. package/dist/pstack/skills/statechart/scripts/frontends/trace.mjs +39 -0
  138. package/dist/pstack/skills/statechart/scripts/frontends/value.mjs +180 -0
  139. package/dist/pstack/skills/statechart/scripts/frontends/verdict.mjs +40 -0
  140. package/dist/pstack/skills/statechart/scripts/frontends/view.mjs +99 -0
  141. package/dist/pstack/skills/statechart/scripts/ir.mjs +277 -0
  142. package/dist/pstack/skills/statechart/scripts/passes/annotate.mjs +92 -0
  143. package/dist/pstack/skills/statechart/scripts/passes/label.mjs +210 -0
  144. package/dist/pstack/skills/statechart/scripts/passes/lift.mjs +84 -0
  145. package/dist/pstack/skills/statechart/scripts/passes/loop-check.mjs +47 -0
  146. package/dist/pstack/skills/statechart/scripts/passes/paths.mjs +72 -0
  147. package/dist/pstack/skills/statechart/scripts/passes/reach.mjs +135 -0
  148. package/dist/pstack/skills/statechart/scripts/passes/region-check.mjs +82 -0
  149. package/dist/pstack/skills/statechart/scripts/passes/regions.mjs +268 -0
  150. package/dist/pstack/skills/statechart/scripts/pipeline.mjs +72 -0
  151. package/dist/pstack/skills/statechart/scripts/run.mjs +440 -0
  152. package/dist/pstack/skills/statechart/scripts/statechart.mjs +155 -0
  153. package/dist/pstack/skills/statechart/scripts/statechart.test.mjs +198 -0
  154. package/dist/pstack/skills/statechart/scripts/worker.mjs +31 -0
  155. package/dist/pstack/skills/swarm/SKILL.md +43 -0
  156. package/{assets → dist/pstack}/skills/tdd/SKILL.md +1 -3
  157. package/{assets → dist/pstack}/skills/teach/SKILL.md +3 -3
  158. package/{assets → dist/pstack}/skills/technical-writing/SKILL.md +2 -2
  159. package/{assets → dist/pstack}/skills/typescript-best-practices/SKILL.md +1 -2
  160. package/{assets → dist/pstack}/skills/unslop/SKILL.md +0 -2
  161. package/dist/{assets → pstack}/skills/why/SKILL.md +9 -9
  162. package/dist/script.d.mts +91 -0
  163. package/dist/script.mjs +485 -0
  164. package/dist/skill.d.mts +38 -0
  165. package/dist/skill.mjs +183 -0
  166. package/dist/skills/authored/decision-audit/SKILL.md +99 -0
  167. package/dist/skills/authored/decision-audit/SKILL.zh.md +99 -0
  168. package/dist/skills/authored/decision-audit/references/recover-commit.md +17 -0
  169. package/dist/skills/authored/decision-audit/references/recover-commit.zh.md +17 -0
  170. package/dist/skills/authored/decision-write/SKILL.md +131 -0
  171. package/dist/skills/authored/decision-write/SKILL.zh.md +131 -0
  172. package/dist/skills/authored/decision-write/references/land.md +48 -0
  173. package/dist/skills/authored/decision-write/references/land.zh.md +48 -0
  174. package/dist/skills/authored/setup-project-docs/SKILL.md +58 -0
  175. package/dist/skills/authored/setup-project-docs/SKILL.zh.md +58 -0
  176. package/dist/skills/authored/setup-project-docs/references/decision-conventions.md +11 -0
  177. package/dist/skills/authored/setup-project-docs/references/decision-conventions.zh.md +11 -0
  178. package/dist/skills/vendored/retro/SKILL.md +44 -0
  179. package/dist/skills/vendored/retro/agents/openai.yaml +5 -0
  180. package/dist/skills/vendored/writing-for-agents/SKILL-MECHANICS.md +22 -0
  181. package/dist/skills/vendored/writing-for-agents/SKILL.md +81 -0
  182. package/dist/skills/vendored/writing-for-agents/agents/openai.yaml +3 -0
  183. package/dist/subagent.d.mts +175 -106
  184. package/dist/subagent.mjs +1012 -344
  185. package/locale/en.json +7 -0
  186. package/locale/zh.json +7 -0
  187. package/package.json +61 -50
  188. package/assets/agents/poteto-agent.md +0 -8
  189. package/assets/docs/guide/02-poteto-mode.md +0 -139
  190. package/assets/docs/guide/05-build-and-clean.md +0 -83
  191. package/assets/docs/guide/06-verify-and-ship.md +0 -152
  192. package/assets/docs/guide/09-make-it-yours.md +0 -100
  193. package/assets/docs/harness/dsh.md +0 -65
  194. package/assets/docs/pstack-models.example.md +0 -23
  195. package/assets/skills/arena/SKILL.md +0 -50
  196. package/assets/skills/benchmark-checklist/SKILL.md +0 -41
  197. package/assets/skills/blast-radius/SKILL.md +0 -52
  198. package/assets/skills/correct/SKILL.md +0 -34
  199. package/assets/skills/how/SKILL.md +0 -38
  200. package/assets/skills/in-your-own-words/SKILL.md +0 -9
  201. package/assets/skills/interrogate/SKILL.md +0 -69
  202. package/assets/skills/interrogate/references/code-quality-review.md +0 -47
  203. package/assets/skills/interrogate/references/lead-judgment.md +0 -39
  204. package/assets/skills/interrogate/references/reviewer-prompt.md +0 -62
  205. package/assets/skills/interrogate/references/rubric.md +0 -77
  206. package/assets/skills/maintain-verification-skill/SKILL.md +0 -41
  207. package/assets/skills/poteto-help/references/prompting.md +0 -51
  208. package/assets/skills/poteto-help/references/recipes.md +0 -51
  209. package/assets/skills/poteto-mode/playbooks/authoring-a-skill.md +0 -12
  210. package/assets/skills/poteto-mode/playbooks/autonomous-run.md +0 -13
  211. package/assets/skills/poteto-mode/playbooks/autopilot-stack.md +0 -12
  212. package/assets/skills/poteto-mode/playbooks/eval.md +0 -25
  213. package/assets/skills/poteto-mode/playbooks/opening-a-pr.md +0 -34
  214. package/assets/skills/poteto-mode/playbooks/orchestrate.md +0 -112
  215. package/assets/skills/poteto-mode/playbooks/perf-issue.md +0 -25
  216. package/assets/skills/poteto-mode/playbooks/refactoring.md +0 -16
  217. package/assets/skills/poteto-mode/playbooks/shipping.md +0 -12
  218. package/assets/skills/poteto-mode/playbooks/worktree-cleanup.md +0 -12
  219. package/assets/skills/poteto-mode/scripts/bootstrap.ts +0 -62
  220. package/assets/skills/poteto-mode/scripts/bun.lock +0 -67
  221. package/assets/skills/poteto-mode/scripts/check-plan.test.ts +0 -96
  222. package/assets/skills/poteto-mode/scripts/orch/orch.test.ts +0 -761
  223. package/assets/skills/poteto-mode/scripts/orch/orch.ts +0 -590
  224. package/assets/skills/poteto-mode/scripts/orch/store.ts +0 -1677
  225. package/assets/skills/poteto-mode/scripts/package.json +0 -16
  226. package/assets/skills/poteto-mode/scripts/watch-pr/cli.test.ts +0 -224
  227. package/assets/skills/poteto-mode/scripts/watch-pr/cli.ts +0 -223
  228. package/assets/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.ts +0 -129
  229. package/assets/skills/poteto-mode/scripts/watch-pr/github.test.ts +0 -436
  230. package/assets/skills/poteto-mode/scripts/watch-pr/github.ts +0 -718
  231. package/assets/skills/poteto-mode/scripts/watch-pr/policy.test.ts +0 -420
  232. package/assets/skills/poteto-mode/scripts/watch-pr/policy.ts +0 -836
  233. package/assets/skills/poteto-mode/scripts/watch-pr/render.ts +0 -169
  234. package/assets/skills/poteto-mode/scripts/watch-pr/tsconfig.json +0 -13
  235. package/assets/skills/poteto-mode/scripts/watch-pr/types.compile.ts +0 -93
  236. package/assets/skills/poteto-mode/scripts/watch-pr/types.ts +0 -413
  237. package/assets/skills/poteto-mode/scripts/watch-pr/watch-pr +0 -6
  238. package/assets/skills/poteto-mode/scripts/worktree-audit.sh +0 -127
  239. package/assets/skills/principle-encode-lessons-in-structure/SKILL.md +0 -13
  240. package/assets/skills/principle-exhaust-the-design-space/SKILL.md +0 -11
  241. package/assets/skills/principle-explain-the-number/SKILL.md +0 -19
  242. package/assets/skills/principle-fix-root-causes/SKILL.md +0 -23
  243. package/assets/skills/principle-guard-the-context-window/SKILL.md +0 -14
  244. package/assets/skills/principle-laziness-protocol/SKILL.md +0 -12
  245. package/assets/skills/principle-make-operations-idempotent/SKILL.md +0 -24
  246. package/assets/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +0 -16
  247. package/assets/skills/principle-outcome-oriented-execution/SKILL.md +0 -23
  248. package/assets/skills/principle-redesign-from-first-principles/SKILL.md +0 -18
  249. package/assets/skills/principle-sequence-verifiable-units/SKILL.md +0 -19
  250. package/assets/skills/principle-subtract-before-you-add/SKILL.md +0 -20
  251. package/assets/skills/recall/SKILL.md +0 -37
  252. package/assets/skills/reflect/SKILL.md +0 -70
  253. package/assets/skills/reflect/references/tooling-reviewer.md +0 -48
  254. package/assets/skills/setup-pstack/SKILL.md +0 -76
  255. package/assets/skills/show-me-your-work/scripts/log.sh +0 -42
  256. package/assets/skills/swarm/SKILL.md +0 -41
  257. package/assets/skills/why/SKILL.md +0 -100
  258. package/dist/README.md +0 -159
  259. package/dist/assets/agents/comment-sicko.md +0 -32
  260. package/dist/assets/agents/poteto-agent.md +0 -8
  261. package/dist/assets/docs/guide/01-setup.md +0 -64
  262. package/dist/assets/docs/guide/03-understand.md +0 -79
  263. package/dist/assets/docs/guide/04-design.md +0 -133
  264. package/dist/assets/docs/guide/07-overnight.md +0 -122
  265. package/dist/assets/docs/guide/08-principles.md +0 -72
  266. package/dist/assets/docs/guide/10-recipes-and-pitfalls.md +0 -180
  267. package/dist/assets/docs/guide/README.md +0 -38
  268. package/dist/assets/docs/harness/dsh.md +0 -65
  269. package/dist/assets/docs/pstack-models.example.md +0 -23
  270. package/dist/assets/skills/architect/SKILL.md +0 -81
  271. package/dist/assets/skills/architect/references/design-red-flags.md +0 -57
  272. package/dist/assets/skills/architect/references/rationale-template.md +0 -35
  273. package/dist/assets/skills/architect/references/runner-prompt.md +0 -20
  274. package/dist/assets/skills/arena/SKILL.md +0 -50
  275. package/dist/assets/skills/automate-me/SKILL.md +0 -105
  276. package/dist/assets/skills/bro/SKILL.md +0 -9
  277. package/dist/assets/skills/create-formal-verification-skill/SKILL.md +0 -43
  278. package/dist/assets/skills/create-verification-skill/SKILL.md +0 -46
  279. package/dist/assets/skills/create-verification-skill/references/feature-map-example/README.md +0 -47
  280. package/dist/assets/skills/create-verification-skill/references/feature-map-example/create-note.md +0 -39
  281. package/dist/assets/skills/create-verification-skill/references/feature-map-example/search.md +0 -45
  282. package/dist/assets/skills/figure-it-out/SKILL.md +0 -54
  283. package/dist/assets/skills/how/references/explainer-prompt.md +0 -55
  284. package/dist/assets/skills/how/references/explorer-prompt.md +0 -35
  285. package/dist/assets/skills/in-your-own-words/SKILL.md +0 -9
  286. package/dist/assets/skills/interrogate/SKILL.md +0 -69
  287. package/dist/assets/skills/interrogate/references/code-quality-review.md +0 -47
  288. package/dist/assets/skills/interrogate/references/lead-judgment.md +0 -39
  289. package/dist/assets/skills/interrogate/references/reviewer-prompt.md +0 -62
  290. package/dist/assets/skills/interrogate/references/rubric.md +0 -77
  291. package/dist/assets/skills/ketchup/SKILL.md +0 -45
  292. package/dist/assets/skills/maintain-formal-verification-skill/SKILL.md +0 -60
  293. package/dist/assets/skills/no-comments/SKILL.md +0 -26
  294. package/dist/assets/skills/poteto-help/SKILL.md +0 -161
  295. package/dist/assets/skills/poteto-mode/SKILL.md +0 -153
  296. package/dist/assets/skills/poteto-mode/playbooks/autopilot-full.md +0 -25
  297. package/dist/assets/skills/poteto-mode/playbooks/autopilot-stack.md +0 -12
  298. package/dist/assets/skills/poteto-mode/playbooks/babysit.md +0 -23
  299. package/dist/assets/skills/poteto-mode/playbooks/bug-fix.md +0 -15
  300. package/dist/assets/skills/poteto-mode/playbooks/feature.md +0 -21
  301. package/dist/assets/skills/poteto-mode/playbooks/hillclimb.md +0 -21
  302. package/dist/assets/skills/poteto-mode/playbooks/investigation.md +0 -14
  303. package/dist/assets/skills/poteto-mode/playbooks/multi-phase-plan.md +0 -155
  304. package/dist/assets/skills/poteto-mode/playbooks/orchestrate.md +0 -112
  305. package/dist/assets/skills/poteto-mode/playbooks/pause-safely.md +0 -10
  306. package/dist/assets/skills/poteto-mode/playbooks/prototype.md +0 -14
  307. package/dist/assets/skills/poteto-mode/playbooks/runtime-forensics.md +0 -11
  308. package/dist/assets/skills/poteto-mode/playbooks/session-pickup.md +0 -11
  309. package/dist/assets/skills/poteto-mode/playbooks/trace-forensics.md +0 -14
  310. package/dist/assets/skills/poteto-mode/playbooks/visual-parity.md +0 -11
  311. package/dist/assets/skills/poteto-mode/references/bugbot-triage.md +0 -142
  312. package/dist/assets/skills/poteto-mode/scripts/bootstrap.ts +0 -62
  313. package/dist/assets/skills/poteto-mode/scripts/bun.lock +0 -67
  314. package/dist/assets/skills/poteto-mode/scripts/check-plan.mjs +0 -205
  315. package/dist/assets/skills/poteto-mode/scripts/orch/orch.test.ts +0 -761
  316. package/dist/assets/skills/poteto-mode/scripts/orch/orch.ts +0 -590
  317. package/dist/assets/skills/poteto-mode/scripts/orch/store.ts +0 -1677
  318. package/dist/assets/skills/poteto-mode/scripts/package.json +0 -16
  319. package/dist/assets/skills/poteto-mode/scripts/watch-pr/cli.test.ts +0 -224
  320. package/dist/assets/skills/poteto-mode/scripts/watch-pr/cli.ts +0 -223
  321. package/dist/assets/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.ts +0 -129
  322. package/dist/assets/skills/poteto-mode/scripts/watch-pr/github.test.ts +0 -436
  323. package/dist/assets/skills/poteto-mode/scripts/watch-pr/github.ts +0 -718
  324. package/dist/assets/skills/poteto-mode/scripts/watch-pr/policy.test.ts +0 -420
  325. package/dist/assets/skills/poteto-mode/scripts/watch-pr/policy.ts +0 -836
  326. package/dist/assets/skills/poteto-mode/scripts/watch-pr/render.ts +0 -169
  327. package/dist/assets/skills/poteto-mode/scripts/watch-pr/tsconfig.json +0 -13
  328. package/dist/assets/skills/poteto-mode/scripts/watch-pr/types.compile.ts +0 -93
  329. package/dist/assets/skills/poteto-mode/scripts/watch-pr/types.ts +0 -413
  330. package/dist/assets/skills/poteto-mode/scripts/watch-pr/watch-pr +0 -6
  331. package/dist/assets/skills/poteto-mode/scripts/worktree-audit.sh +0 -127
  332. package/dist/assets/skills/principle-attack-the-premise/SKILL.md +0 -23
  333. package/dist/assets/skills/principle-boundary-discipline/SKILL.md +0 -36
  334. package/dist/assets/skills/principle-build-the-lever/SKILL.md +0 -26
  335. package/dist/assets/skills/principle-encode-lessons-in-structure/SKILL.md +0 -13
  336. package/dist/assets/skills/principle-exhaust-the-design-space/SKILL.md +0 -11
  337. package/dist/assets/skills/principle-experience-first/SKILL.md +0 -21
  338. package/dist/assets/skills/principle-foundational-thinking/SKILL.md +0 -23
  339. package/dist/assets/skills/principle-minimize-reader-load/SKILL.md +0 -20
  340. package/dist/assets/skills/principle-model-the-domain/SKILL.md +0 -26
  341. package/dist/assets/skills/principle-never-block-on-the-human/SKILL.md +0 -17
  342. package/dist/assets/skills/principle-prove-it-works/SKILL.md +0 -24
  343. package/dist/assets/skills/principle-separate-before-serializing-shared-state/SKILL.md +0 -18
  344. package/dist/assets/skills/principle-test-behavior-not-implementation/SKILL.md +0 -22
  345. package/dist/assets/skills/principle-type-system-discipline/SKILL.md +0 -15
  346. package/dist/assets/skills/reflect/SKILL.md +0 -70
  347. package/dist/assets/skills/reflect/references/divergent-reviewer.md +0 -38
  348. package/dist/assets/skills/reflect/references/judgment-reviewer.md +0 -37
  349. package/dist/assets/skills/reflect/references/synthesizer.md +0 -56
  350. package/dist/assets/skills/setup-pstack/SKILL.md +0 -76
  351. package/dist/assets/skills/sharpen/SKILL.md +0 -18
  352. package/dist/assets/skills/show-me-your-work/SKILL.md +0 -84
  353. package/dist/assets/skills/show-me-your-work/references/decision-log-template.tsv +0 -1
  354. package/dist/assets/skills/show-me-your-work/scripts/log.sh +0 -42
  355. package/dist/assets/skills/swarm/SKILL.md +0 -41
  356. package/dist/assets/skills/tdd/SKILL.md +0 -44
  357. package/dist/assets/skills/teach/SKILL.md +0 -23
  358. package/dist/assets/skills/technical-writing/SKILL.md +0 -108
  359. package/dist/assets/skills/typescript-best-practices/SKILL.md +0 -32
  360. package/dist/assets/skills/typescript-best-practices/references/patterns.md +0 -328
  361. package/dist/assets/skills/unslop/SKILL.md +0 -64
  362. package/dist/assets/skills/why/references/epistemics.md +0 -71
  363. package/dist/assets/skills/why/references/investigator-prompt.md +0 -84
  364. package/dist/assets/skills/why/references/source-playbook.md +0 -17
  365. package/dist/assets/skills/why/references/sources/code-archaeology.md +0 -51
  366. package/dist/assets/skills/why/references/sources/databricks.md +0 -70
  367. package/dist/assets/skills/why/references/sources/datadog.md +0 -97
  368. package/dist/assets/skills/why/references/sources/incident-postmortem.md +0 -5
  369. package/dist/assets/skills/why/references/sources/linear.md +0 -48
  370. package/dist/assets/skills/why/references/sources/notion.md +0 -55
  371. package/dist/assets/skills/why/references/sources/sentry.md +0 -66
  372. package/dist/assets/skills/why/references/sources/slack.md +0 -17
  373. package/dist/assets/skills/why/references/synthesizer-prompt.md +0 -129
  374. package/dist/cordis.patch.yml +0 -20
  375. package/dist/index.mjs.map +0 -1
  376. package/dist/paths-Bbai4CaT.mjs +0 -16
  377. package/dist/paths-Bbai4CaT.mjs.map +0 -1
  378. package/dist/subagent.mjs.map +0 -1
  379. /package/{assets → dist/pstack}/docs/guide/03-understand.md +0 -0
  380. /package/{assets → dist/pstack}/docs/guide/08-principles.md +0 -0
  381. /package/{assets → dist/pstack}/docs/guide/README.md +0 -0
  382. /package/{assets → dist/pstack}/skills/architect/references/design-red-flags.md +0 -0
  383. /package/{assets → dist/pstack}/skills/architect/references/rationale-template.md +0 -0
  384. /package/{assets → dist/pstack}/skills/architect/references/runner-prompt.md +0 -0
  385. /package/{assets → dist/pstack}/skills/create-verification-skill/references/feature-map-example/README.md +0 -0
  386. /package/{assets → dist/pstack}/skills/create-verification-skill/references/feature-map-example/create-note.md +0 -0
  387. /package/{assets → dist/pstack}/skills/create-verification-skill/references/feature-map-example/search.md +0 -0
  388. /package/{assets → dist/pstack}/skills/how/references/explorer-prompt.md +0 -0
  389. /package/{assets → dist/pstack}/skills/poteto-mode/playbooks/investigation.md +0 -0
  390. /package/{assets → dist/pstack}/skills/poteto-mode/playbooks/pause-safely.md +0 -0
  391. /package/{assets → dist/pstack}/skills/poteto-mode/playbooks/trace-forensics.md +0 -0
  392. /package/{assets → dist/pstack}/skills/poteto-mode/references/bugbot-triage.md +0 -0
  393. /package/{assets → dist/pstack}/skills/show-me-your-work/references/decision-log-template.tsv +0 -0
  394. /package/{assets → dist/pstack}/skills/typescript-best-practices/references/patterns.md +0 -0
  395. /package/{assets → dist/pstack}/skills/why/references/epistemics.md +0 -0
  396. /package/{assets → dist/pstack}/skills/why/references/investigator-prompt.md +0 -0
  397. /package/{assets → dist/pstack}/skills/why/references/source-playbook.md +0 -0
  398. /package/{assets → dist/pstack}/skills/why/references/sources/code-archaeology.md +0 -0
  399. /package/{assets → dist/pstack}/skills/why/references/sources/databricks.md +0 -0
  400. /package/{assets → dist/pstack}/skills/why/references/sources/datadog.md +0 -0
  401. /package/{assets → dist/pstack}/skills/why/references/sources/incident-postmortem.md +0 -0
  402. /package/{assets → dist/pstack}/skills/why/references/sources/linear.md +0 -0
  403. /package/{assets → dist/pstack}/skills/why/references/sources/notion.md +0 -0
  404. /package/{assets → dist/pstack}/skills/why/references/sources/sentry.md +0 -0
  405. /package/{assets → dist/pstack}/skills/why/references/sources/slack.md +0 -0
  406. /package/{assets → dist/pstack}/skills/why/references/synthesizer-prompt.md +0 -0
@@ -1,590 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { ensureDependenciesInstalled } from "../bootstrap.ts";
4
- import {
5
- NotFoundError,
6
- UsageError,
7
- openStore,
8
- parseVerdict,
9
- type Counts,
10
- type Forge,
11
- type Frontier,
12
- type InboxPointer,
13
- type OpenGate,
14
- type StandingLine,
15
- type StatusReport,
16
- type Store,
17
- type Unit,
18
- type Verdict,
19
- } from "./store.ts";
20
-
21
- ensureDependenciesInstalled();
22
- const {
23
- Command: CommanderCommand,
24
- CommanderError,
25
- InvalidArgumentError,
26
- Option,
27
- } = await import("commander");
28
- type Command = InstanceType<typeof CommanderCommand>;
29
-
30
- const DISPLAY_LIMIT = 4;
31
-
32
- interface Io {
33
- readonly stdout: (value: string) => void;
34
- readonly stderr: (value: string) => void;
35
- }
36
-
37
- interface GlobalOptions {
38
- readonly store?: string;
39
- readonly json: boolean;
40
- readonly force: boolean;
41
- }
42
-
43
- interface UnitAddOptions {
44
- readonly track: string;
45
- readonly brief?: string;
46
- }
47
-
48
- interface UnitSetOptions {
49
- readonly state: string;
50
- readonly branch?: string;
51
- readonly pr?: number;
52
- readonly sha?: string;
53
- }
54
-
55
- interface UnitListOptions {
56
- readonly state?: string;
57
- readonly track?: string;
58
- }
59
-
60
- interface LedgerRecordOptions {
61
- readonly evidence: string;
62
- readonly verifier?: string;
63
- }
64
-
65
- interface InboxPushOptions {
66
- readonly report?: string;
67
- }
68
-
69
- interface InboxDrainOptions {
70
- readonly peek: boolean;
71
- }
72
-
73
- interface GateParkOptions {
74
- readonly question: string;
75
- readonly options: string;
76
- readonly default: string;
77
- }
78
-
79
- interface GateResolveOptions {
80
- readonly answer: string;
81
- }
82
-
83
- interface FrontierSetOptions {
84
- readonly repo?: string;
85
- readonly forge: Forge;
86
- readonly prs?: readonly number[];
87
- }
88
-
89
- function message(error: unknown): string {
90
- return error instanceof Error ? error.message : String(error);
91
- }
92
-
93
- function positiveInteger(value: string): number {
94
- const parsed = Number(value);
95
- if (!/^[1-9]\d*$/.test(value) || !Number.isSafeInteger(parsed)) {
96
- throw new InvalidArgumentError("must be a positive integer");
97
- }
98
- return parsed;
99
- }
100
-
101
- function prList(value: string): readonly number[] {
102
- const parts = value.split(",");
103
- if (parts.some((part) => part.length === 0)) {
104
- throw new InvalidArgumentError("requires a comma-separated PR list");
105
- }
106
- return parts.map(positiveInteger);
107
- }
108
-
109
- function countLine(value: Counts): string {
110
- const entries = Object.entries(value);
111
- return entries.length === 0
112
- ? "none"
113
- : entries.map(([name, count]) => `${name}=${count}`).join(", ");
114
- }
115
-
116
- function unitLine(unit: Unit): string {
117
- return [
118
- unit.id,
119
- unit.track,
120
- unit.state,
121
- unit.branch,
122
- unit.pr,
123
- unit.sha,
124
- unit.brief,
125
- ].join("\t");
126
- }
127
-
128
- function pointerLine(pointer: InboxPointer): string {
129
- return [
130
- pointer.ts,
131
- pointer.agent,
132
- pointer.unit,
133
- pointer.status,
134
- pointer.report,
135
- ].join("\t");
136
- }
137
-
138
- function gateLine(gate: OpenGate): string {
139
- return [
140
- gate.id,
141
- gate.question,
142
- gate.options,
143
- gate.defaultAnswer,
144
- ].join("\t");
145
- }
146
-
147
- function compactRows<T>(
148
- rows: readonly T[],
149
- format: (row: T) => string,
150
- empty: string,
151
- limit: number | null = DISPLAY_LIMIT
152
- ): string {
153
- if (rows.length === 0) {
154
- return empty;
155
- }
156
- const visible = limit === null ? rows : rows.slice(0, limit);
157
- const lines = visible.map(format);
158
- if (limit !== null && rows.length > limit) {
159
- lines.push(`... ${rows.length - limit} more; use --json`);
160
- }
161
- return lines.join("\n");
162
- }
163
-
164
- function frontierLine(value: Frontier): string {
165
- const prs =
166
- value.prs.length === 0
167
- ? "none"
168
- : value.prs
169
- .map(
170
- (row) =>
171
- `${row.branches}#${row.pr}@${row.sha}:${row.state}`
172
- )
173
- .join(",");
174
- return `generation=${value.generation} prs=${prs} lowest-unmerged=${value.lowestUnmerged ?? "none"}`;
175
- }
176
-
177
- function statusLines(report: StatusReport): string {
178
- const visible = report.summary.openGateIds.slice(0, DISPLAY_LIMIT);
179
- const more =
180
- report.summary.openGateIds.length > DISPLAY_LIMIT
181
- ? `,+${report.summary.openGateIds.length - DISPLAY_LIMIT} more`
182
- : "";
183
- return [
184
- `counts: units=${report.units.length}; states=${countLine(report.summary.unitStates)}; ledger=${countLine(report.summary.ledgerVerdicts)}`,
185
- `changed: ${report.changed}`,
186
- `gates open: ${report.summary.openGateIds.length}${
187
- visible.length > 0 ? `; ids=${visible.join(",")}${more}` : ""
188
- }`,
189
- ].join("\n");
190
- }
191
-
192
- function emit<T>(
193
- io: Io,
194
- json: boolean,
195
- value: T,
196
- compact: (result: T) => string,
197
- jsonValue: (result: T) => unknown = (result) => result
198
- ): void {
199
- const rendered = json
200
- ? JSON.stringify(jsonValue(value), null, 2)
201
- : compact(value);
202
- io.stdout(rendered.endsWith("\n") ? rendered : `${rendered}\n`);
203
- }
204
-
205
- function storeDirectory(program: Command): string {
206
- const value = program.opts<GlobalOptions>().store;
207
- if (value === undefined || value.trim().length === 0) {
208
- throw new UsageError("set --store <dir> or ORCH_STORE");
209
- }
210
- return value;
211
- }
212
-
213
- function frontierRepo(options: FrontierSetOptions): string {
214
- const value = options.repo;
215
- if (value === undefined || value.trim().length === 0) {
216
- throw new UsageError("set --repo <dir> or ORCH_REPO");
217
- }
218
- return value;
219
- }
220
-
221
- async function runStore<T>(
222
- program: Command,
223
- io: Io,
224
- operation: (store: Store) => Promise<T>,
225
- compact: (result: T) => string,
226
- jsonValue?: (result: T) => unknown
227
- ): Promise<void> {
228
- const options = program.opts<GlobalOptions>();
229
- const store = openStore(storeDirectory(program), {
230
- force: options.force,
231
- onLockStolen: (holder) =>
232
- io.stderr(`stealing store lock held by pid ${holder}\n`),
233
- onStaleLock: (holder) =>
234
- io.stderr(`replacing stale store lock (pid ${holder} is dead)\n`),
235
- });
236
- try {
237
- const result = await operation(store);
238
- emit(io, options.json, result, compact, jsonValue);
239
- } finally {
240
- await store.close();
241
- }
242
- }
243
-
244
- function leaf(parent: Command, name: string, description: string): Command {
245
- return parent
246
- .command(name)
247
- .description(description)
248
- .allowExcessArguments(false);
249
- }
250
-
251
- function requireSubcommand(program: Command): never {
252
- storeDirectory(program);
253
- throw new UsageError("a valid command is required");
254
- }
255
-
256
- function createProgram(io: Io): Command {
257
- const program = new CommanderCommand("orch")
258
- .description("Plain-file orchestrate bookkeeping")
259
- .usage("[--store <dir>] [--json] [--force] <command>")
260
- .configureOutput({ writeOut: io.stdout, writeErr: io.stderr })
261
- .exitOverride()
262
- .showHelpAfterError()
263
- .allowExcessArguments(false)
264
- .addOption(
265
- new Option("--store <dir>", "store directory (or ORCH_STORE)").env(
266
- "ORCH_STORE"
267
- )
268
- )
269
- .option("--json", "print complete rows as JSON", false)
270
- .option("--force", "steal an existing store lock", false);
271
-
272
- leaf(program, "init", "initialize the store").action(() =>
273
- runStore(
274
- program,
275
- io,
276
- (store) => store.init(),
277
- (result) => `initialized ${result.store}`
278
- )
279
- );
280
-
281
- const unit = program
282
- .command("unit")
283
- .description("manage work units")
284
- .action(() => requireSubcommand(program));
285
- leaf(unit, "add <id>", "add a unit")
286
- .requiredOption("--track <track>", "unit track")
287
- .option("--brief <path>", "brief path")
288
- .action((id: string, options: UnitAddOptions) =>
289
- runStore(
290
- program,
291
- io,
292
- (store) =>
293
- store.units.add({
294
- id,
295
- track: options.track,
296
- brief: options.brief,
297
- }),
298
- unitLine
299
- )
300
- );
301
- leaf(unit, "set <id>", "update a unit")
302
- .requiredOption("--state <state>", "unit state")
303
- .option("--branch <branch>", "branch name")
304
- .option("--pr <number>", "pull request number", positiveInteger)
305
- .option("--sha <sha>", "commit SHA")
306
- .action((id: string, options: UnitSetOptions) =>
307
- runStore(
308
- program,
309
- io,
310
- (store) =>
311
- store.units.set({
312
- id,
313
- state: options.state,
314
- branch: options.branch,
315
- pr: options.pr,
316
- sha: options.sha,
317
- }),
318
- unitLine
319
- )
320
- );
321
- leaf(unit, "get <id>", "get a unit").action((id: string) =>
322
- runStore(program, io, (store) => store.units.get(id), unitLine)
323
- );
324
- leaf(unit, "list", "list units")
325
- .option("--state <state>", "filter by state")
326
- .option("--track <track>", "filter by track")
327
- .action((options: UnitListOptions) =>
328
- runStore(
329
- program,
330
- io,
331
- (store) => store.units.list(options),
332
- (rows) => compactRows(rows, unitLine, "(no units)")
333
- )
334
- );
335
- leaf(unit, "counts", "count units by state").action(() =>
336
- runStore(program, io, (store) => store.units.counts(), countLine)
337
- );
338
-
339
- const ledger = program
340
- .command("ledger")
341
- .description("manage verification records")
342
- .action(() => requireSubcommand(program));
343
- leaf(ledger, "record", "record a verification verdict")
344
- .argument("<pr>", "pull request number", positiveInteger)
345
- .argument("<sha>", "commit SHA")
346
- .argument("<verdict>", "verification verdict", parseVerdict)
347
- .requiredOption("--evidence <path>", "evidence path")
348
- .option("--verifier <name>", "verifier name")
349
- .action(
350
- (
351
- pr: number,
352
- sha: string,
353
- verdict: Verdict,
354
- options: LedgerRecordOptions
355
- ) =>
356
- runStore(
357
- program,
358
- io,
359
- (store) =>
360
- store.ledger.record({
361
- pr,
362
- sha,
363
- verdict,
364
- evidence: options.evidence,
365
- verifier: options.verifier,
366
- }),
367
- (row) => `${row.pr}\t${row.sha}\t${row.verdict}`
368
- )
369
- );
370
- leaf(ledger, "check", "check a verification verdict")
371
- .argument("<pr>", "pull request number", positiveInteger)
372
- .argument("<sha>", "commit SHA")
373
- .action((pr: number, sha: string) =>
374
- runStore(
375
- program,
376
- io,
377
- (store) => store.ledger.check({ pr, sha }),
378
- (row) => row.verdict
379
- )
380
- );
381
- leaf(ledger, "summary", "count verification verdicts").action(() =>
382
- runStore(program, io, (store) => store.ledger.summary(), countLine)
383
- );
384
-
385
- const inbox = program
386
- .command("inbox")
387
- .description("manage agent pointers")
388
- .action(() => requireSubcommand(program));
389
- leaf(inbox, "push <agent> <unit> <status>", "push an inbox pointer")
390
- .option("--report <path>", "report path")
391
- .action(
392
- (
393
- agent: string,
394
- unitId: string,
395
- status: string,
396
- options: InboxPushOptions
397
- ) =>
398
- runStore(
399
- program,
400
- io,
401
- (store) =>
402
- store.inbox.push({
403
- agent,
404
- unit: unitId,
405
- status,
406
- report: options.report,
407
- }),
408
- (result) =>
409
- `${result.pointer.unit}\t${result.pointer.status}\t${result.filename}`,
410
- (result) => result.pointer
411
- )
412
- );
413
- leaf(inbox, "drain", "drain inbox pointers")
414
- .option("--peek", "read without draining", false)
415
- .action((options: InboxDrainOptions) =>
416
- runStore(
417
- program,
418
- io,
419
- (store) =>
420
- options.peek ? store.inbox.peek() : store.inbox.drain(),
421
- (rows) => compactRows(rows, pointerLine, "(empty)", null)
422
- )
423
- );
424
- leaf(inbox, "count", "count inbox pointers").action(() =>
425
- runStore(
426
- program,
427
- io,
428
- (store) => store.inbox.count(),
429
- String,
430
- (count) => ({ count })
431
- )
432
- );
433
-
434
- const gate = program
435
- .command("gate")
436
- .description("manage decision gates")
437
- .action(() => requireSubcommand(program));
438
- leaf(gate, "park <id>", "park a decision gate")
439
- .requiredOption("--question <question>", "gate question")
440
- .requiredOption("--options <options>", "gate options")
441
- .requiredOption("--default <answer>", "default answer")
442
- .action((id: string, options: GateParkOptions) =>
443
- runStore(
444
- program,
445
- io,
446
- (store) =>
447
- store.gates.park({
448
- id,
449
- question: options.question,
450
- options: options.options,
451
- defaultAnswer: options.default,
452
- }),
453
- (result) => `${result.id}\topen`
454
- )
455
- );
456
- leaf(gate, "list", "list open decision gates").action(() =>
457
- runStore(
458
- program,
459
- io,
460
- (store) => store.gates.list(),
461
- (rows) => compactRows(rows, gateLine, "(no open gates)")
462
- )
463
- );
464
- leaf(gate, "resolve <id>", "resolve a decision gate")
465
- .requiredOption("--answer <answer>", "chosen answer")
466
- .action((id: string, options: GateResolveOptions) =>
467
- runStore(
468
- program,
469
- io,
470
- (store) => store.gates.resolve({ id, answer: options.answer }),
471
- (result) => `${result.id}\tresolved\t${result.answer}`
472
- )
473
- );
474
-
475
- const frontier = program
476
- .command("frontier")
477
- .description("manage the stack frontier")
478
- .action(() => requireSubcommand(program));
479
- leaf(
480
- frontier,
481
- "set",
482
- "resolve the pull request base chain and set the frontier"
483
- )
484
- .addOption(
485
- new Option(
486
- "--repo <dir>",
487
- "repository directory (or ORCH_REPO)"
488
- ).env("ORCH_REPO")
489
- )
490
- .addOption(
491
- new Option("--forge <forge>", "pull request forge")
492
- .choices(["gh", "origin"])
493
- .default("gh")
494
- )
495
- .option(
496
- "--prs <n,...>",
497
- "optional expected pull request order pin",
498
- prList
499
- )
500
- .action((options: FrontierSetOptions) =>
501
- runStore(
502
- program,
503
- io,
504
- (store) =>
505
- store.frontier.set({
506
- repo: frontierRepo(options),
507
- forge: options.forge,
508
- prs: options.prs,
509
- }),
510
- frontierLine
511
- )
512
- );
513
- leaf(frontier, "show", "show the frontier").action(() =>
514
- runStore(program, io, (store) => store.frontier.show(), frontierLine)
515
- );
516
-
517
- leaf(program, "status", "render status.md and print a summary").action(() =>
518
- runStore(program, io, (store) => store.status.render(), statusLines)
519
- );
520
-
521
- const standing = program
522
- .command("standing")
523
- .description("manage standing orders")
524
- .action(() => requireSubcommand(program));
525
- leaf(standing, "show", "show standing orders").action(() =>
526
- runStore(
527
- program,
528
- io,
529
- (store) => store.standing.show(),
530
- (rows) =>
531
- compactRows(
532
- rows,
533
- (item: StandingLine) => `${item.number}. ${item.line}`,
534
- "(no standing orders)"
535
- )
536
- )
537
- );
538
- leaf(standing, "add <line>", "add a standing order").action((line: string) =>
539
- runStore(
540
- program,
541
- io,
542
- (store) => store.standing.add({ line }),
543
- (item) => `${item.number}. ${item.line}`
544
- )
545
- );
546
-
547
- program.action(() => requireSubcommand(program));
548
- return program;
549
- }
550
-
551
- function handleError(error: unknown, program: Command, io: Io): number {
552
- if (error instanceof CommanderError) {
553
- return error.exitCode === 0 ? 0 : 1;
554
- }
555
- const json = program.opts<GlobalOptions>().json;
556
- if (error instanceof NotFoundError) {
557
- const output = error.output;
558
- if (output === undefined) {
559
- io.stderr(`error: ${error.message}\n`);
560
- } else {
561
- emit(io, json, output.json, () => output.compact);
562
- }
563
- return 2;
564
- }
565
- io.stderr(`error: ${message(error)}\n`);
566
- if (error instanceof UsageError) {
567
- io.stderr(program.helpInformation());
568
- }
569
- return 1;
570
- }
571
-
572
- export async function main(
573
- argv: readonly string[],
574
- io: Io = {
575
- stdout: (value) => process.stdout.write(value),
576
- stderr: (value) => process.stderr.write(value),
577
- }
578
- ): Promise<number> {
579
- const program = createProgram(io);
580
- try {
581
- await program.parseAsync(argv, { from: "user" });
582
- return 0;
583
- } catch (error) {
584
- return handleError(error, program, io);
585
- }
586
- }
587
-
588
- if (import.meta.main) {
589
- process.exitCode = await main(process.argv.slice(2));
590
- }