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 +0,0 @@
1
- {"version":3,"file":"subagent.mjs","names":[],"sources":["../src/roles.ts","../src/models.ts","../src/subagent.ts"],"sourcesContent":["/**\n * pstack role resolution.\n *\n * `~/.dsh/pstack-models.md` holds one role per line. The tool resolves a role\n * into a child LLM route at call time, so edits apply to the next delegation\n * without restarting the harness.\n *\n * Parsing never throws. A typo in one line must not break delegation, but it\n * must also not disappear: `parseModelConfigWithIssues` collects `issues` and\n * the parser keeps them so a caller can report the line that is wrong.\n */\n\nexport interface Route {\n readonly provider: string;\n readonly model: string;\n readonly reasoningEffort?: string;\n}\n\nexport type RoleValue = \"inherit-parent\" | Route;\nexport type RoleTable = ReadonlyMap<string, readonly RoleValue[]>;\n\n/** A problem in the role file, tied to the line that caused it. */\nexport interface RoleIssue {\n /** 1-based line number in `pstack-models.md`. */\n readonly line: number;\n readonly message: string;\n}\n\nexport interface ParsedModelConfig {\n readonly table: RoleTable;\n readonly issues: readonly RoleIssue[];\n}\n\nconst INHERIT = new Set([\"inherit-parent\", \"auto\", \"parent\"]);\n\n/**\n * Reasoning efforts DSH understands, widest first. A token outside this set is\n * reported rather than dropped: a route that silently loses `xhigh` looks\n * configured and is not.\n */\nexport const REASONING_EFFORTS = [\"max\", \"xhigh\", \"high\", \"medium\", \"low\", \"off\"] as const;\nconst EFFORTS = new Set<string>(REASONING_EFFORTS);\n\n/**\n * Register the role names on one line.\n *\n * The whole left side is always stored as one key, so\n * `reflect judgment, divergent, synthesizer` stays addressable as written.\n * When the comma list is a genuine group (`feature, refactoring`), each part is\n * stored too, so a caller can name just one of them. Both spellings therefore\n * work, and neither can shadow the other: the full key is a different string.\n */\nfunction splitRoles(left: string): string[] {\n const whole = left.trim().toLowerCase().replace(/\\s+/g, \" \");\n if (!whole) return [];\n const parts = left\n .split(\",\")\n .map((part) => part.trim().toLowerCase())\n .filter(Boolean);\n return parts.length > 1 ? [whole, ...parts] : [whole];\n}\n\nexport function parseModelConfigWithIssues(source: string): ParsedModelConfig {\n const table = new Map<string, RoleValue[]>();\n const issues: RoleIssue[] = [];\n const lines = source.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n\n for (const [index, rawLine] of lines.entries()) {\n const line = rawLine.trim();\n if (!line || line.startsWith(\"#\") || line.startsWith(\"//\")) continue;\n const lineNumber = index + 1;\n const separator = line.indexOf(\":\");\n if (separator === -1) {\n issues.push({\n line: lineNumber,\n message: `expected \"role: value\", got ${JSON.stringify(line)}`,\n });\n continue;\n }\n const roles = splitRoles(line.slice(0, separator));\n if (roles.length === 0) {\n issues.push({ line: lineNumber, message: \"no role name before the colon\" });\n continue;\n }\n\n const values: RoleValue[] = [];\n for (const entry of line.slice(separator + 1).split(\",\")) {\n const parsed = parseValue(entry.trim(), lineNumber, issues);\n if (parsed !== undefined) values.push(parsed);\n }\n if (values.length === 0) {\n issues.push({ line: lineNumber, message: `no usable value for ${roles.join(\", \")}` });\n continue;\n }\n for (const role of roles) table.set(role, values);\n }\n\n return { table, issues };\n}\n\n/** Parse without the diagnostics. Kept for callers that only need the table. */\nexport function parseModelConfig(source: string): RoleTable {\n return parseModelConfigWithIssues(source).table;\n}\n\nexport function parseValue(\n value: string,\n line = 0,\n issues: RoleIssue[] = [],\n): RoleValue | undefined {\n if (!value) return undefined;\n if (INHERIT.has(value.toLowerCase())) return \"inherit-parent\";\n const tokens = value.split(/\\s+/).filter(Boolean);\n const [route, ...rest] = tokens;\n if (!route) return undefined;\n\n const slash = route.indexOf(\"/\");\n if (slash <= 0 || slash === route.length - 1) {\n // A bare model id with no provider cannot be routed safely; ask the harness\n // to inherit rather than guessing a provider.\n issues.push({\n line,\n message: `\"${route}\" is not <provider>/<model>, so this role inherits the parent route`,\n });\n return \"inherit-parent\";\n }\n\n let reasoningEffort: string | undefined;\n for (const token of rest) {\n if (EFFORTS.has(token.toLowerCase())) {\n reasoningEffort = token.toLowerCase();\n continue;\n }\n issues.push({\n line,\n message: `unknown effort \"${token}\"; expected one of ${REASONING_EFFORTS.join(\", \")}`,\n });\n }\n\n return {\n provider: route.slice(0, slash),\n model: route.slice(slash + 1),\n ...(reasoningEffort ? { reasoningEffort } : {}),\n };\n}\n\n/** How a role name was matched, so the caller can report a near miss. */\nexport interface RoleMatch {\n /** The key exactly as it appears in the file, after lowercasing. */\n readonly key: string;\n readonly values: readonly RoleValue[];\n /** True when the key came from a shared `a, b: value` line. */\n readonly fromList: boolean;\n}\n\n/**\n * Look a role up by name.\n *\n * The parser stores both the whole left side of a line and, when the comma list\n * is a genuine group, each part. So a direct map hit is the only match worth\n * making. Matching is exact on purpose: a near miss such as `how` against\n * `how explorer` must not resolve, because picking a route the user did not name\n * changes both cost and model without saying so. `findNearMisses` reports those\n * for a human instead.\n */\nexport function lookupRole(table: RoleTable, role: string | undefined): RoleMatch | undefined {\n if (!role) return undefined;\n const key = role.trim().toLowerCase().replace(/\\s+/g, \" \");\n if (!key) return undefined;\n\n const values = table.get(key);\n if (!values) return undefined;\n // `fromList` is informational: a key containing a comma came from a shared\n // line, which is how a panel role is spelled.\n return { key, values, fromList: key.includes(\",\") };\n}\n\n/**\n * Configured role names a caller could have meant. Used to explain a miss, not\n * to resolve one: `how` is a near miss for `how explorer`, and quietly running\n * on the explorer route would look configured while being wrong.\n */\nexport function findNearMisses(table: RoleTable, role: string): string[] {\n const key = role.trim().toLowerCase().replace(/\\s+/g, \" \");\n if (!key) return [];\n const hits: string[] = [];\n for (const candidate of table.keys()) {\n if (candidate === key) continue;\n if (candidate.includes(key) || key.includes(candidate)) {\n hits.push(candidate);\n continue;\n }\n // A shared line stores its parts separately too, so compare against those\n // as well: `how` should surface both `how explorer` and `how explainer`.\n for (const part of candidate.split(\",\").map((item) => item.trim())) {\n if (part === key) continue;\n if (part.includes(key) || key.includes(part)) {\n hits.push(candidate);\n break;\n }\n }\n }\n return [...new Set(hits)];\n}\n\n/**\n * Resolve one role to a route.\n *\n * `index` selects a panel entry and wraps, so a caller that spawns more\n * children than the list has entries still gets a deterministic route. A\n * missing role or an `inherit-parent` entry both return `undefined`, which\n * tells the caller to omit `agentOptions` and inherit.\n */\nexport function resolveRole(\n table: RoleTable,\n role: string | undefined,\n index = 0,\n): Route | undefined {\n const values = lookupRole(table, role)?.values;\n if (!values || values.length === 0) return undefined;\n const value = values[Math.abs(index) % values.length];\n return value && value !== \"inherit-parent\" ? value : undefined;\n}\n\n/** Every entry for a panel role. An empty list means the role is not configured. */\nexport function resolvePanel(table: RoleTable, role: string): readonly RoleValue[] {\n return lookupRole(table, role)?.values ?? [];\n}\n","/**\n * Read `~/.dsh/pstack-models.md`, the role file `/setup-pstack` writes.\n */\nimport { readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { parseModelConfigWithIssues, type RoleIssue, type RoleTable } from \"./roles.ts\";\n\nexport function dshHome(): string {\n return process.env.DSH_HOME || join(homedir(), \".dsh\");\n}\n\nexport function modelConfigPath(): string {\n return join(dshHome(), \"pstack-models.md\");\n}\n\nexport interface LoadedRoleTable {\n readonly table: RoleTable;\n /** Parse problems, each tied to a line of the file. */\n readonly issues: readonly RoleIssue[];\n /** True when the file exists but could not be read. */\n readonly unreadable: boolean;\n}\n\n/**\n * Read the role file.\n *\n * A missing file is normal and means every role inherits the parent route. A\n * malformed line degrades only that line, and the issues travel with the table\n * so the tool can name them in its reply. A read failure keeps that distinction\n * explicit instead of collapsing into an empty table.\n */\nexport async function loadRoleTable(): Promise<LoadedRoleTable> {\n try {\n const source = await readFile(modelConfigPath(), \"utf8\");\n const { table, issues } = parseModelConfigWithIssues(source);\n return { table, issues, unreadable: false };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { table: new Map(), issues: [], unreadable: false };\n }\n return {\n table: new Map(),\n issues: [\n {\n line: 0,\n message: `could not read ${modelConfigPath()}: ${(error as Error).message}`,\n },\n ],\n unreadable: true,\n };\n }\n}\n","/**\n * `pstack_subagent`: pstack's delegation surface for DSH.\n *\n * Cursor's `Task` tool gives every spawn a `subagent_type`, a model slug, and\n * background execution. DSH splits those across `ctx.subagents` (background\n * activations), the agent preset system (composition), and the LLM adapter\n * routes (model choice). This tool joins them back into one call whose shape a\n * ported pstack skill can use unchanged.\n */\nimport { readFile } from \"node:fs/promises\";\nimport type { Context } from \"@deepseek-ai/cordis\";\nimport type { Agent } from \"@deepseek-ai/dsh-agent\";\nimport type { ContentBlock } from \"@deepseek-ai/dsh-llm\";\nimport { ReasoningEffortId } from \"@deepseek-ai/dsh-llm\";\nimport type {} from \"@deepseek-ai/dsh-subagent\";\nimport { defineTool } from \"@deepseek-ai/dsh-tools\";\nimport { loadRoleTable, modelConfigPath } from \"./models.ts\";\nimport { AGENTS_ROOT, SKILLS_ROOT } from \"./paths.ts\";\nimport { findNearMisses, lookupRole, resolveRole, type Route } from \"./roles.ts\";\n\nexport const name = \"pstack-subagent\";\nexport const inject = [\"tools\", \"subagents\"];\n\nconst AGENT_KINDS = [\"poteto-agent\", \"comment-sicko\", \"general\"] as const;\nexport type AgentKind = (typeof AGENT_KINDS)[number];\n\nexport interface Config {\n /** Tool name exposed to the model. */\n readonly toolName?: string;\n /** Subagent provider registered on `ctx.subagents`. */\n readonly provider?: string;\n /** Default agent kind when the model omits `agent`. */\n readonly defaultAgent?: AgentKind;\n}\n\nconst POTETO_AGENT_PATH = `${AGENTS_ROOT}poteto-agent.md`;\nconst COMMENT_SICKO_PATH = `${AGENTS_ROOT}comment-sicko.md`;\nconst POTETO_MODE_PATH = `${SKILLS_ROOT}poteto-mode/SKILL.md`;\n\nexport function stripFrontmatter(source: string): string {\n if (!source.startsWith(\"---\")) return source;\n const end = source.indexOf(\"\\n---\", 3);\n return end === -1 ? source : source.slice(end + 4).replace(/^\\n+/, \"\");\n}\n\nexport async function readAgentInstructions(kind: AgentKind): Promise<string> {\n if (kind === \"general\") return \"\";\n const path = kind === \"poteto-agent\" ? POTETO_AGENT_PATH : COMMENT_SICKO_PATH;\n try {\n return stripFrontmatter(await readFile(path, \"utf8\"));\n } catch {\n return \"\";\n }\n}\n\n/**\n * Build the child prompt. A pstack delegate must read `poteto-mode` first, and\n * the parent normally passes its absolute path. When the parent omits it, this\n * fallback keeps the delegate from drifting into general-purpose style.\n */\nexport function composePrompt(input: {\n readonly kind: AgentKind;\n readonly description: string;\n readonly prompt: string;\n readonly agentInstructions: string;\n readonly potetoModePath?: string;\n}): string {\n if (input.kind === \"general\") return input.prompt;\n\n const path = input.potetoModePath ?? POTETO_MODE_PATH;\n const sections = [\n input.agentInstructions.trim(),\n `Parent task label: ${input.description}`,\n `Read \\`${path}\\` in full before any work, including its inline Principles index. Navigate to a leaf \\`principle-*\\` skill whenever you apply that principle.`,\n input.prompt.trim(),\n ].filter(Boolean);\n return sections.join(\"\\n\\n\");\n}\n\nexport interface RoleResolution {\n readonly route: Route | undefined;\n /** Human-readable notes to append to the tool reply: issues, near misses. */\n readonly notes: readonly string[];\n}\n\n/**\n * Resolve the `role` argument against the shipped role table, explaining a miss\n * instead of swallowing it.\n *\n * A missing file is normal. A configured-but-unmatched role is not: it means a\n * skill and `~/.dsh/pstack-models.md` disagree, and the child would silently run\n * on the parent route. The tool reply says so, so the parent can fix the file or\n * report the miss rather than believing the route applied.\n */\nexport async function resolveRoleArg(role: string | undefined): Promise<RoleResolution> {\n if (!role) return { route: undefined, notes: [] };\n\n const { table, issues, unreadable } = await loadRoleTable();\n const match = lookupRole(table, role);\n if (match) {\n const notes: string[] = [];\n for (const issue of issues) {\n if (issue.line === 0) notes.push(issue.message);\n }\n return { route: resolveRole(table, role), notes };\n }\n\n const near = findNearMisses(table, role);\n const lines: string[] = [];\n if (unreadable) {\n lines.push(\n `pstack: ${modelConfigPath()} could not be read; the child inherits the parent route.`,\n );\n } else if (table.size === 0) {\n lines.push(\n `pstack: no role table at ${modelConfigPath()}; the child inherits the parent route. Run /setup-pstack to configure roles.`,\n );\n } else {\n lines.push(\n `pstack: role \"${role}\" is not in ${modelConfigPath()}; the child inherits the parent route.`,\n );\n if (near.length > 0)\n lines.push(`pstack: did you mean ${near.map((n) => `\"${n}\"`).join(\" or \")}?`);\n }\n return { route: undefined, notes: lines };\n}\n\nexport interface PstackToolDeps {\n readonly start: (input: {\n readonly parent: Agent;\n readonly label: string;\n readonly prompt: ContentBlock[];\n readonly signal: AbortSignal;\n readonly route: Route | undefined;\n readonly cwd: string | undefined;\n }) => Promise<{ readonly childId: string }>;\n readonly loadAgent: (kind: AgentKind) => Promise<string>;\n /**\n * Resolve the `role` argument. The notes explain a miss so the reply can name\n * it; an empty list means the route applied as written, or there was no role.\n */\n readonly loadRole: (role: string | undefined) => Promise<RoleResolution>;\n readonly potetoModePath?: string;\n readonly defaultAgent?: AgentKind;\n readonly toolName?: string;\n}\n\n/**\n * Turn a resolved role into the `agentOptions` a child activation carries.\n *\n * This is the only place a `Route` becomes a provider request. Keeping it a\n * pure function lets a test assert the exact options without starting a child,\n * which is where a role-to-route bug would otherwise stay invisible until a\n * live delegation picked the wrong model.\n */\nexport function routeToAgentOptions(\n route: Route | undefined,\n): { provider: string; model: string; reasoningEffort?: ReasoningEffortId } | undefined {\n if (!route) return undefined;\n return {\n provider: route.provider,\n model: route.model,\n ...(route.reasoningEffort ? { reasoningEffort: ReasoningEffortId(route.reasoningEffort) } : {}),\n };\n}\n\n/** Tool definition over injected dependencies; `apply` supplies the runtime. */\nexport function createPstackTool(deps: PstackToolDeps) {\n return defineTool({\n name: deps.toolName ?? \"pstack_subagent\",\n description:\n 'Delegate a self-contained task to a pstack subagent. Use `agent: \"poteto-agent\"` for code-writing delegates and helper tasks spawned inside a /poteto-mode playbook step. Use `agent: \"general\"` for workflow reviewers such as how, why, arena, swarm, interrogate, and reflect. Use `agent: \"comment-sicko\"` only through /no-comments. Pass `role` to select the route configured in ~/.dsh/pstack-models.md; omit it to inherit the parent route. The call returns the child id immediately and the runtime reports the final answer in a completion notice.',\n parameters: {\n description: {\n type: \"string\",\n description: \"A short (3-5 word) description of the delegated task, for display.\",\n required: true,\n },\n prompt: {\n type: \"string\",\n description:\n \"The complete, self-contained task for the subagent. It does not share this conversation, so include context, file pointers, constraints, and the check that proves the work.\",\n required: true,\n },\n agent: {\n type: \"string\",\n enum: AGENT_KINDS,\n description:\n \"poteto-agent (default) for pstack delegates; general for workflow reviewers; comment-sicko for comment review.\",\n },\n role: {\n type: \"string\",\n description:\n 'Role line in ~/.dsh/pstack-models.md, such as \"feature, refactoring\" or \"judgment and prose\". Omit to inherit the parent route.',\n },\n cwd: {\n type: \"string\",\n description: \"Initial child working directory. Omit to inherit the parent directory.\",\n },\n },\n output: {\n schema: { type: \"string\" },\n render: (_args, value) => [{ type: \"text\", text: value }],\n },\n async execute(args, exec) {\n const parent = exec.agent;\n if (!parent) throw new Error(\"pstack_subagent requires an agent context\");\n\n const kind = (args.agent ?? deps.defaultAgent ?? \"poteto-agent\") as AgentKind;\n const agentInstructions = await deps.loadAgent(kind);\n const prompt = composePrompt({\n kind,\n description: args.description,\n prompt: args.prompt,\n agentInstructions,\n ...(deps.potetoModePath ? { potetoModePath: deps.potetoModePath } : {}),\n });\n const { route, notes } = await deps.loadRole(args.role);\n\n const activation = await deps.start({\n parent,\n label: args.description,\n prompt: [{ type: \"text\", text: prompt }],\n signal: exec.signal,\n route,\n cwd: args.cwd,\n });\n\n const started = `started subagent ${activation.childId}`;\n return notes.length > 0 ? [started, ...notes].join(\"\\n\") : started;\n },\n });\n}\n\n/**\n * Build the provider-facing activation request for one child.\n *\n * A role is resolved once, at delegation time, into concrete provider options.\n * The child inherits the parent route when the role is absent or resolves to\n * `inherit-parent`, which is why the field is omitted rather than set to a\n * placeholder.\n */\nexport function buildActivationRequest(input: {\n readonly parent: Agent;\n readonly prompt: ContentBlock[];\n readonly route: Route | undefined;\n readonly cwd: string | undefined;\n}): {\n parent: Agent;\n prompt: ContentBlock[];\n cwd?: string;\n agentOptions?: { provider: string; model: string; reasoningEffort?: ReasoningEffortId };\n} {\n const options = routeToAgentOptions(input.route);\n return {\n parent: input.parent,\n prompt: input.prompt,\n ...(input.cwd ? { cwd: input.cwd } : {}),\n ...(options ? { agentOptions: options } : {}),\n };\n}\n\n/**\n * Mount the tool. `ctx.subagents` owns child lifecycle; this row only supplies\n * the pstack-specific shape (agent preambles and role routes) on top.\n */\nexport function apply(ctx: Context, config: Config = {}): void {\n const providerName = config.provider ?? \"spawn\";\n\n const tool = createPstackTool({\n async start({ parent, label, prompt, signal, route, cwd }) {\n const activation = await ctx.subagents.startActivation({\n provider: providerName,\n label,\n signal,\n delivery: \"parent\",\n request: buildActivationRequest({ parent, prompt, route, cwd }),\n });\n return { childId: String(activation.childId) };\n },\n loadAgent: readAgentInstructions,\n loadRole: resolveRoleArg,\n potetoModePath: POTETO_MODE_PATH,\n ...(config.defaultAgent ? { defaultAgent: config.defaultAgent } : {}),\n ...(config.toolName ? { toolName: config.toolName } : {}),\n });\n ctx.tools.register(tool);\n}\n"],"mappings":"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"}
File without changes