dsh-pstack 0.0.0-stage → 0.1.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 (311) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +158 -2
  3. package/assets/agents/comment-sicko.md +32 -0
  4. package/assets/agents/poteto-agent.md +8 -0
  5. package/assets/docs/guide/01-setup.md +64 -0
  6. package/assets/docs/guide/02-poteto-mode.md +139 -0
  7. package/assets/docs/guide/03-understand.md +79 -0
  8. package/assets/docs/guide/04-design.md +133 -0
  9. package/assets/docs/guide/05-build-and-clean.md +83 -0
  10. package/assets/docs/guide/06-verify-and-ship.md +152 -0
  11. package/assets/docs/guide/07-overnight.md +122 -0
  12. package/assets/docs/guide/08-principles.md +72 -0
  13. package/assets/docs/guide/09-make-it-yours.md +100 -0
  14. package/assets/docs/guide/10-recipes-and-pitfalls.md +180 -0
  15. package/assets/docs/guide/README.md +38 -0
  16. package/assets/docs/harness/dsh.md +65 -0
  17. package/assets/docs/pstack-models.example.md +23 -0
  18. package/assets/skills/architect/SKILL.md +81 -0
  19. package/assets/skills/architect/references/design-red-flags.md +57 -0
  20. package/assets/skills/architect/references/rationale-template.md +35 -0
  21. package/assets/skills/architect/references/runner-prompt.md +20 -0
  22. package/assets/skills/arena/SKILL.md +50 -0
  23. package/assets/skills/automate-me/SKILL.md +105 -0
  24. package/assets/skills/benchmark-checklist/SKILL.md +41 -0
  25. package/assets/skills/blast-radius/SKILL.md +52 -0
  26. package/assets/skills/bro/SKILL.md +9 -0
  27. package/assets/skills/correct/SKILL.md +34 -0
  28. package/assets/skills/create-formal-verification-skill/SKILL.md +43 -0
  29. package/assets/skills/create-verification-skill/SKILL.md +46 -0
  30. package/assets/skills/create-verification-skill/references/feature-map-example/README.md +47 -0
  31. package/assets/skills/create-verification-skill/references/feature-map-example/create-note.md +39 -0
  32. package/assets/skills/create-verification-skill/references/feature-map-example/search.md +45 -0
  33. package/assets/skills/figure-it-out/SKILL.md +54 -0
  34. package/assets/skills/how/SKILL.md +38 -0
  35. package/assets/skills/how/references/explainer-prompt.md +55 -0
  36. package/assets/skills/how/references/explorer-prompt.md +35 -0
  37. package/assets/skills/in-your-own-words/SKILL.md +9 -0
  38. package/assets/skills/interrogate/SKILL.md +69 -0
  39. package/assets/skills/interrogate/references/code-quality-review.md +47 -0
  40. package/assets/skills/interrogate/references/lead-judgment.md +39 -0
  41. package/assets/skills/interrogate/references/reviewer-prompt.md +62 -0
  42. package/assets/skills/interrogate/references/rubric.md +77 -0
  43. package/assets/skills/ketchup/SKILL.md +45 -0
  44. package/assets/skills/maintain-formal-verification-skill/SKILL.md +60 -0
  45. package/assets/skills/maintain-verification-skill/SKILL.md +41 -0
  46. package/assets/skills/no-comments/SKILL.md +26 -0
  47. package/assets/skills/poteto-help/SKILL.md +161 -0
  48. package/assets/skills/poteto-help/references/prompting.md +51 -0
  49. package/assets/skills/poteto-help/references/recipes.md +51 -0
  50. package/assets/skills/poteto-mode/SKILL.md +153 -0
  51. package/assets/skills/poteto-mode/playbooks/authoring-a-skill.md +12 -0
  52. package/assets/skills/poteto-mode/playbooks/autonomous-run.md +13 -0
  53. package/assets/skills/poteto-mode/playbooks/autopilot-full.md +25 -0
  54. package/assets/skills/poteto-mode/playbooks/autopilot-stack.md +12 -0
  55. package/assets/skills/poteto-mode/playbooks/babysit.md +23 -0
  56. package/assets/skills/poteto-mode/playbooks/bug-fix.md +15 -0
  57. package/assets/skills/poteto-mode/playbooks/eval.md +25 -0
  58. package/assets/skills/poteto-mode/playbooks/feature.md +21 -0
  59. package/assets/skills/poteto-mode/playbooks/hillclimb.md +21 -0
  60. package/assets/skills/poteto-mode/playbooks/investigation.md +14 -0
  61. package/assets/skills/poteto-mode/playbooks/multi-phase-plan.md +155 -0
  62. package/assets/skills/poteto-mode/playbooks/opening-a-pr.md +34 -0
  63. package/assets/skills/poteto-mode/playbooks/orchestrate.md +112 -0
  64. package/assets/skills/poteto-mode/playbooks/pause-safely.md +10 -0
  65. package/assets/skills/poteto-mode/playbooks/perf-issue.md +25 -0
  66. package/assets/skills/poteto-mode/playbooks/prototype.md +14 -0
  67. package/assets/skills/poteto-mode/playbooks/refactoring.md +16 -0
  68. package/assets/skills/poteto-mode/playbooks/runtime-forensics.md +11 -0
  69. package/assets/skills/poteto-mode/playbooks/session-pickup.md +11 -0
  70. package/assets/skills/poteto-mode/playbooks/shipping.md +12 -0
  71. package/assets/skills/poteto-mode/playbooks/trace-forensics.md +14 -0
  72. package/assets/skills/poteto-mode/playbooks/visual-parity.md +11 -0
  73. package/assets/skills/poteto-mode/playbooks/worktree-cleanup.md +12 -0
  74. package/assets/skills/poteto-mode/references/bugbot-triage.md +142 -0
  75. package/assets/skills/poteto-mode/scripts/bootstrap.ts +62 -0
  76. package/assets/skills/poteto-mode/scripts/bun.lock +67 -0
  77. package/assets/skills/poteto-mode/scripts/check-plan.mjs +205 -0
  78. package/assets/skills/poteto-mode/scripts/check-plan.test.ts +96 -0
  79. package/assets/skills/poteto-mode/scripts/orch/orch.test.ts +761 -0
  80. package/assets/skills/poteto-mode/scripts/orch/orch.ts +590 -0
  81. package/assets/skills/poteto-mode/scripts/orch/store.ts +1677 -0
  82. package/assets/skills/poteto-mode/scripts/package.json +16 -0
  83. package/assets/skills/poteto-mode/scripts/watch-pr/cli.test.ts +224 -0
  84. package/assets/skills/poteto-mode/scripts/watch-pr/cli.ts +223 -0
  85. package/assets/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.ts +129 -0
  86. package/assets/skills/poteto-mode/scripts/watch-pr/github.test.ts +436 -0
  87. package/assets/skills/poteto-mode/scripts/watch-pr/github.ts +718 -0
  88. package/assets/skills/poteto-mode/scripts/watch-pr/policy.test.ts +420 -0
  89. package/assets/skills/poteto-mode/scripts/watch-pr/policy.ts +836 -0
  90. package/assets/skills/poteto-mode/scripts/watch-pr/render.ts +169 -0
  91. package/assets/skills/poteto-mode/scripts/watch-pr/tsconfig.json +13 -0
  92. package/assets/skills/poteto-mode/scripts/watch-pr/types.compile.ts +93 -0
  93. package/assets/skills/poteto-mode/scripts/watch-pr/types.ts +413 -0
  94. package/assets/skills/poteto-mode/scripts/watch-pr/watch-pr +6 -0
  95. package/assets/skills/poteto-mode/scripts/worktree-audit.sh +127 -0
  96. package/assets/skills/principle-attack-the-premise/SKILL.md +23 -0
  97. package/assets/skills/principle-boundary-discipline/SKILL.md +36 -0
  98. package/assets/skills/principle-build-the-lever/SKILL.md +26 -0
  99. package/assets/skills/principle-encode-lessons-in-structure/SKILL.md +13 -0
  100. package/assets/skills/principle-exhaust-the-design-space/SKILL.md +11 -0
  101. package/assets/skills/principle-experience-first/SKILL.md +21 -0
  102. package/assets/skills/principle-explain-the-number/SKILL.md +19 -0
  103. package/assets/skills/principle-fix-root-causes/SKILL.md +23 -0
  104. package/assets/skills/principle-foundational-thinking/SKILL.md +23 -0
  105. package/assets/skills/principle-guard-the-context-window/SKILL.md +14 -0
  106. package/assets/skills/principle-laziness-protocol/SKILL.md +12 -0
  107. package/assets/skills/principle-make-operations-idempotent/SKILL.md +24 -0
  108. package/assets/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +16 -0
  109. package/assets/skills/principle-minimize-reader-load/SKILL.md +20 -0
  110. package/assets/skills/principle-model-the-domain/SKILL.md +26 -0
  111. package/assets/skills/principle-never-block-on-the-human/SKILL.md +17 -0
  112. package/assets/skills/principle-outcome-oriented-execution/SKILL.md +23 -0
  113. package/assets/skills/principle-prove-it-works/SKILL.md +24 -0
  114. package/assets/skills/principle-redesign-from-first-principles/SKILL.md +18 -0
  115. package/assets/skills/principle-separate-before-serializing-shared-state/SKILL.md +18 -0
  116. package/assets/skills/principle-sequence-verifiable-units/SKILL.md +19 -0
  117. package/assets/skills/principle-subtract-before-you-add/SKILL.md +20 -0
  118. package/assets/skills/principle-test-behavior-not-implementation/SKILL.md +22 -0
  119. package/assets/skills/principle-type-system-discipline/SKILL.md +15 -0
  120. package/assets/skills/recall/SKILL.md +37 -0
  121. package/assets/skills/reflect/SKILL.md +70 -0
  122. package/assets/skills/reflect/references/divergent-reviewer.md +38 -0
  123. package/assets/skills/reflect/references/judgment-reviewer.md +37 -0
  124. package/assets/skills/reflect/references/synthesizer.md +56 -0
  125. package/assets/skills/reflect/references/tooling-reviewer.md +48 -0
  126. package/assets/skills/setup-pstack/SKILL.md +76 -0
  127. package/assets/skills/sharpen/SKILL.md +18 -0
  128. package/assets/skills/show-me-your-work/SKILL.md +84 -0
  129. package/assets/skills/show-me-your-work/references/decision-log-template.tsv +1 -0
  130. package/assets/skills/show-me-your-work/scripts/log.sh +42 -0
  131. package/assets/skills/swarm/SKILL.md +41 -0
  132. package/assets/skills/tdd/SKILL.md +44 -0
  133. package/assets/skills/teach/SKILL.md +23 -0
  134. package/assets/skills/technical-writing/SKILL.md +108 -0
  135. package/assets/skills/typescript-best-practices/SKILL.md +32 -0
  136. package/assets/skills/typescript-best-practices/references/patterns.md +328 -0
  137. package/assets/skills/unslop/SKILL.md +64 -0
  138. package/assets/skills/why/SKILL.md +100 -0
  139. package/assets/skills/why/references/epistemics.md +71 -0
  140. package/assets/skills/why/references/investigator-prompt.md +84 -0
  141. package/assets/skills/why/references/source-playbook.md +17 -0
  142. package/assets/skills/why/references/sources/code-archaeology.md +51 -0
  143. package/assets/skills/why/references/sources/databricks.md +70 -0
  144. package/assets/skills/why/references/sources/datadog.md +97 -0
  145. package/assets/skills/why/references/sources/incident-postmortem.md +5 -0
  146. package/assets/skills/why/references/sources/linear.md +48 -0
  147. package/assets/skills/why/references/sources/notion.md +55 -0
  148. package/assets/skills/why/references/sources/sentry.md +66 -0
  149. package/assets/skills/why/references/sources/slack.md +17 -0
  150. package/assets/skills/why/references/synthesizer-prompt.md +129 -0
  151. package/cordis.patch.yml +20 -0
  152. package/dist/LICENSE +22 -0
  153. package/dist/README.md +159 -0
  154. package/dist/assets/agents/comment-sicko.md +32 -0
  155. package/dist/assets/agents/poteto-agent.md +8 -0
  156. package/dist/assets/docs/guide/01-setup.md +64 -0
  157. package/dist/assets/docs/guide/02-poteto-mode.md +139 -0
  158. package/dist/assets/docs/guide/03-understand.md +79 -0
  159. package/dist/assets/docs/guide/04-design.md +133 -0
  160. package/dist/assets/docs/guide/05-build-and-clean.md +83 -0
  161. package/dist/assets/docs/guide/06-verify-and-ship.md +152 -0
  162. package/dist/assets/docs/guide/07-overnight.md +122 -0
  163. package/dist/assets/docs/guide/08-principles.md +72 -0
  164. package/dist/assets/docs/guide/09-make-it-yours.md +100 -0
  165. package/dist/assets/docs/guide/10-recipes-and-pitfalls.md +180 -0
  166. package/dist/assets/docs/guide/README.md +38 -0
  167. package/dist/assets/docs/harness/dsh.md +65 -0
  168. package/dist/assets/docs/pstack-models.example.md +23 -0
  169. package/dist/assets/skills/architect/SKILL.md +81 -0
  170. package/dist/assets/skills/architect/references/design-red-flags.md +57 -0
  171. package/dist/assets/skills/architect/references/rationale-template.md +35 -0
  172. package/dist/assets/skills/architect/references/runner-prompt.md +20 -0
  173. package/dist/assets/skills/arena/SKILL.md +50 -0
  174. package/dist/assets/skills/automate-me/SKILL.md +105 -0
  175. package/dist/assets/skills/benchmark-checklist/SKILL.md +41 -0
  176. package/dist/assets/skills/blast-radius/SKILL.md +52 -0
  177. package/dist/assets/skills/bro/SKILL.md +9 -0
  178. package/dist/assets/skills/correct/SKILL.md +34 -0
  179. package/dist/assets/skills/create-formal-verification-skill/SKILL.md +43 -0
  180. package/dist/assets/skills/create-verification-skill/SKILL.md +46 -0
  181. package/dist/assets/skills/create-verification-skill/references/feature-map-example/README.md +47 -0
  182. package/dist/assets/skills/create-verification-skill/references/feature-map-example/create-note.md +39 -0
  183. package/dist/assets/skills/create-verification-skill/references/feature-map-example/search.md +45 -0
  184. package/dist/assets/skills/figure-it-out/SKILL.md +54 -0
  185. package/dist/assets/skills/how/SKILL.md +38 -0
  186. package/dist/assets/skills/how/references/explainer-prompt.md +55 -0
  187. package/dist/assets/skills/how/references/explorer-prompt.md +35 -0
  188. package/dist/assets/skills/in-your-own-words/SKILL.md +9 -0
  189. package/dist/assets/skills/interrogate/SKILL.md +69 -0
  190. package/dist/assets/skills/interrogate/references/code-quality-review.md +47 -0
  191. package/dist/assets/skills/interrogate/references/lead-judgment.md +39 -0
  192. package/dist/assets/skills/interrogate/references/reviewer-prompt.md +62 -0
  193. package/dist/assets/skills/interrogate/references/rubric.md +77 -0
  194. package/dist/assets/skills/ketchup/SKILL.md +45 -0
  195. package/dist/assets/skills/maintain-formal-verification-skill/SKILL.md +60 -0
  196. package/dist/assets/skills/maintain-verification-skill/SKILL.md +41 -0
  197. package/dist/assets/skills/no-comments/SKILL.md +26 -0
  198. package/dist/assets/skills/poteto-help/SKILL.md +161 -0
  199. package/dist/assets/skills/poteto-help/references/prompting.md +51 -0
  200. package/dist/assets/skills/poteto-help/references/recipes.md +51 -0
  201. package/dist/assets/skills/poteto-mode/SKILL.md +153 -0
  202. package/dist/assets/skills/poteto-mode/playbooks/authoring-a-skill.md +12 -0
  203. package/dist/assets/skills/poteto-mode/playbooks/autonomous-run.md +13 -0
  204. package/dist/assets/skills/poteto-mode/playbooks/autopilot-full.md +25 -0
  205. package/dist/assets/skills/poteto-mode/playbooks/autopilot-stack.md +12 -0
  206. package/dist/assets/skills/poteto-mode/playbooks/babysit.md +23 -0
  207. package/dist/assets/skills/poteto-mode/playbooks/bug-fix.md +15 -0
  208. package/dist/assets/skills/poteto-mode/playbooks/eval.md +25 -0
  209. package/dist/assets/skills/poteto-mode/playbooks/feature.md +21 -0
  210. package/dist/assets/skills/poteto-mode/playbooks/hillclimb.md +21 -0
  211. package/dist/assets/skills/poteto-mode/playbooks/investigation.md +14 -0
  212. package/dist/assets/skills/poteto-mode/playbooks/multi-phase-plan.md +155 -0
  213. package/dist/assets/skills/poteto-mode/playbooks/opening-a-pr.md +34 -0
  214. package/dist/assets/skills/poteto-mode/playbooks/orchestrate.md +112 -0
  215. package/dist/assets/skills/poteto-mode/playbooks/pause-safely.md +10 -0
  216. package/dist/assets/skills/poteto-mode/playbooks/perf-issue.md +25 -0
  217. package/dist/assets/skills/poteto-mode/playbooks/prototype.md +14 -0
  218. package/dist/assets/skills/poteto-mode/playbooks/refactoring.md +16 -0
  219. package/dist/assets/skills/poteto-mode/playbooks/runtime-forensics.md +11 -0
  220. package/dist/assets/skills/poteto-mode/playbooks/session-pickup.md +11 -0
  221. package/dist/assets/skills/poteto-mode/playbooks/shipping.md +12 -0
  222. package/dist/assets/skills/poteto-mode/playbooks/trace-forensics.md +14 -0
  223. package/dist/assets/skills/poteto-mode/playbooks/visual-parity.md +11 -0
  224. package/dist/assets/skills/poteto-mode/playbooks/worktree-cleanup.md +12 -0
  225. package/dist/assets/skills/poteto-mode/references/bugbot-triage.md +142 -0
  226. package/dist/assets/skills/poteto-mode/scripts/bootstrap.ts +62 -0
  227. package/dist/assets/skills/poteto-mode/scripts/bun.lock +67 -0
  228. package/dist/assets/skills/poteto-mode/scripts/check-plan.mjs +205 -0
  229. package/dist/assets/skills/poteto-mode/scripts/check-plan.test.ts +96 -0
  230. package/dist/assets/skills/poteto-mode/scripts/orch/orch.test.ts +761 -0
  231. package/dist/assets/skills/poteto-mode/scripts/orch/orch.ts +590 -0
  232. package/dist/assets/skills/poteto-mode/scripts/orch/store.ts +1677 -0
  233. package/dist/assets/skills/poteto-mode/scripts/package.json +16 -0
  234. package/dist/assets/skills/poteto-mode/scripts/watch-pr/cli.test.ts +224 -0
  235. package/dist/assets/skills/poteto-mode/scripts/watch-pr/cli.ts +223 -0
  236. package/dist/assets/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.ts +129 -0
  237. package/dist/assets/skills/poteto-mode/scripts/watch-pr/github.test.ts +436 -0
  238. package/dist/assets/skills/poteto-mode/scripts/watch-pr/github.ts +718 -0
  239. package/dist/assets/skills/poteto-mode/scripts/watch-pr/policy.test.ts +420 -0
  240. package/dist/assets/skills/poteto-mode/scripts/watch-pr/policy.ts +836 -0
  241. package/dist/assets/skills/poteto-mode/scripts/watch-pr/render.ts +169 -0
  242. package/dist/assets/skills/poteto-mode/scripts/watch-pr/tsconfig.json +13 -0
  243. package/dist/assets/skills/poteto-mode/scripts/watch-pr/types.compile.ts +93 -0
  244. package/dist/assets/skills/poteto-mode/scripts/watch-pr/types.ts +413 -0
  245. package/dist/assets/skills/poteto-mode/scripts/watch-pr/watch-pr +6 -0
  246. package/dist/assets/skills/poteto-mode/scripts/worktree-audit.sh +127 -0
  247. package/dist/assets/skills/principle-attack-the-premise/SKILL.md +23 -0
  248. package/dist/assets/skills/principle-boundary-discipline/SKILL.md +36 -0
  249. package/dist/assets/skills/principle-build-the-lever/SKILL.md +26 -0
  250. package/dist/assets/skills/principle-encode-lessons-in-structure/SKILL.md +13 -0
  251. package/dist/assets/skills/principle-exhaust-the-design-space/SKILL.md +11 -0
  252. package/dist/assets/skills/principle-experience-first/SKILL.md +21 -0
  253. package/dist/assets/skills/principle-explain-the-number/SKILL.md +19 -0
  254. package/dist/assets/skills/principle-fix-root-causes/SKILL.md +23 -0
  255. package/dist/assets/skills/principle-foundational-thinking/SKILL.md +23 -0
  256. package/dist/assets/skills/principle-guard-the-context-window/SKILL.md +14 -0
  257. package/dist/assets/skills/principle-laziness-protocol/SKILL.md +12 -0
  258. package/dist/assets/skills/principle-make-operations-idempotent/SKILL.md +24 -0
  259. package/dist/assets/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +16 -0
  260. package/dist/assets/skills/principle-minimize-reader-load/SKILL.md +20 -0
  261. package/dist/assets/skills/principle-model-the-domain/SKILL.md +26 -0
  262. package/dist/assets/skills/principle-never-block-on-the-human/SKILL.md +17 -0
  263. package/dist/assets/skills/principle-outcome-oriented-execution/SKILL.md +23 -0
  264. package/dist/assets/skills/principle-prove-it-works/SKILL.md +24 -0
  265. package/dist/assets/skills/principle-redesign-from-first-principles/SKILL.md +18 -0
  266. package/dist/assets/skills/principle-separate-before-serializing-shared-state/SKILL.md +18 -0
  267. package/dist/assets/skills/principle-sequence-verifiable-units/SKILL.md +19 -0
  268. package/dist/assets/skills/principle-subtract-before-you-add/SKILL.md +20 -0
  269. package/dist/assets/skills/principle-test-behavior-not-implementation/SKILL.md +22 -0
  270. package/dist/assets/skills/principle-type-system-discipline/SKILL.md +15 -0
  271. package/dist/assets/skills/recall/SKILL.md +37 -0
  272. package/dist/assets/skills/reflect/SKILL.md +70 -0
  273. package/dist/assets/skills/reflect/references/divergent-reviewer.md +38 -0
  274. package/dist/assets/skills/reflect/references/judgment-reviewer.md +37 -0
  275. package/dist/assets/skills/reflect/references/synthesizer.md +56 -0
  276. package/dist/assets/skills/reflect/references/tooling-reviewer.md +48 -0
  277. package/dist/assets/skills/setup-pstack/SKILL.md +76 -0
  278. package/dist/assets/skills/sharpen/SKILL.md +18 -0
  279. package/dist/assets/skills/show-me-your-work/SKILL.md +84 -0
  280. package/dist/assets/skills/show-me-your-work/references/decision-log-template.tsv +1 -0
  281. package/dist/assets/skills/show-me-your-work/scripts/log.sh +42 -0
  282. package/dist/assets/skills/swarm/SKILL.md +41 -0
  283. package/dist/assets/skills/tdd/SKILL.md +44 -0
  284. package/dist/assets/skills/teach/SKILL.md +23 -0
  285. package/dist/assets/skills/technical-writing/SKILL.md +108 -0
  286. package/dist/assets/skills/typescript-best-practices/SKILL.md +32 -0
  287. package/dist/assets/skills/typescript-best-practices/references/patterns.md +328 -0
  288. package/dist/assets/skills/unslop/SKILL.md +64 -0
  289. package/dist/assets/skills/why/SKILL.md +100 -0
  290. package/dist/assets/skills/why/references/epistemics.md +71 -0
  291. package/dist/assets/skills/why/references/investigator-prompt.md +84 -0
  292. package/dist/assets/skills/why/references/source-playbook.md +17 -0
  293. package/dist/assets/skills/why/references/sources/code-archaeology.md +51 -0
  294. package/dist/assets/skills/why/references/sources/databricks.md +70 -0
  295. package/dist/assets/skills/why/references/sources/datadog.md +97 -0
  296. package/dist/assets/skills/why/references/sources/incident-postmortem.md +5 -0
  297. package/dist/assets/skills/why/references/sources/linear.md +48 -0
  298. package/dist/assets/skills/why/references/sources/notion.md +55 -0
  299. package/dist/assets/skills/why/references/sources/sentry.md +66 -0
  300. package/dist/assets/skills/why/references/sources/slack.md +17 -0
  301. package/dist/assets/skills/why/references/synthesizer-prompt.md +129 -0
  302. package/dist/cordis.patch.yml +20 -0
  303. package/dist/index.d.mts +16 -0
  304. package/dist/index.mjs +172 -0
  305. package/dist/index.mjs.map +1 -0
  306. package/dist/paths-Bbai4CaT.mjs +16 -0
  307. package/dist/paths-Bbai4CaT.mjs.map +1 -0
  308. package/dist/subagent.d.mts +130 -0
  309. package/dist/subagent.mjs +436 -0
  310. package/dist/subagent.mjs.map +1 -0
  311. package/package.json +92 -3
@@ -0,0 +1,590 @@
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
+ }