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
@@ -0,0 +1,94 @@
1
+ import { EC, memo } from "../ir.mjs";
2
+ import { BRACKET, isSpace, parseValue, tokenEnd, unreadable } from "./value.mjs";
3
+ import { actionOf, messageState } from "./messages.mjs";
4
+ // runtime/skills/statechart/scripts/frontends/marks.ts
5
+ const markTexts = (chunk, top, inner) => {
6
+ if (top.length !== 2) return void 0;
7
+ const [a, b] = top;
8
+ const open = chunk.indexOf("<<", a);
9
+ const close = chunk.lastIndexOf(">>", b);
10
+ const end = chunk.trimEnd().length - 2;
11
+ if (open < 0 || chunk.slice(a + 1, open).trim() || chunk.slice(close + 2, b).trim()) return void 0;
12
+ if (!chunk.startsWith(">>", end)) return void 0;
13
+ const cuts = [open + 1];
14
+ for (const k of inner) if (k > open && k < close) cuts.push(k);
15
+ cuts.push(close);
16
+ const texts = [];
17
+ for (let k = 1; k < cuts.length; k++) texts.push(chunk.slice(cuts[k - 1] + 1, cuts[k]));
18
+ return {
19
+ values: texts,
20
+ rules: chunk.slice(b + 1, end)
21
+ };
22
+ };
23
+ const ruleNames = (v) => {
24
+ if (typeof v !== "object" || v.kind !== "set") return void 0;
25
+ const names = [];
26
+ for (const m of v.members) {
27
+ if (typeof m !== "string") return void 0;
28
+ names.push(m);
29
+ }
30
+ return names;
31
+ };
32
+ function* readMarks(messages, tag) {
33
+ const read = memo(parseValue);
34
+ const start = `"${tag}",`;
35
+ let chunk = "";
36
+ let depth = 0;
37
+ let top = [];
38
+ let inner = [];
39
+ for (const line of messages) {
40
+ if (typeof line !== "string") continue;
41
+ if (!chunk) {
42
+ if (!line.startsWith("<<") || !line.slice(2).trimStart().startsWith(start)) continue;
43
+ depth = 0;
44
+ top = [];
45
+ inner = [];
46
+ }
47
+ const base = chunk.length;
48
+ chunk += line + "\n";
49
+ let i = 0;
50
+ let last = 0;
51
+ while (i < line.length) {
52
+ const c = line.charCodeAt(i);
53
+ if (isSpace(c)) {
54
+ i++;
55
+ continue;
56
+ }
57
+ const j = tokenEnd(line, i);
58
+ if (j === -1) throw unreadable(line + "\n", last);
59
+ if (c === 44 && depth === 1) top.push(base + i);
60
+ else if (c === 44 && depth === 2) inner.push(base + i);
61
+ depth += BRACKET[c];
62
+ i = last = j;
63
+ }
64
+ if (depth > 0) continue;
65
+ const texts = markTexts(chunk, top, inner);
66
+ const values = [];
67
+ if (texts) for (const v of texts.values) values.push(read(v));
68
+ const broken = texts && ruleNames(read(texts.rules));
69
+ if (!broken) throw new Error(`TLC printed a mark that the command cannot read:\n${chunk.slice(0, 2e3)}`);
70
+ chunk = "";
71
+ yield {
72
+ values,
73
+ broken
74
+ };
75
+ }
76
+ if (chunk) throw new Error(`TLC's output ends inside a marked state, so the command cannot tell which rules it breaks:\n${chunk.slice(0, 2e3)}`);
77
+ }
78
+ function readCounterexample(messages) {
79
+ const trace = [];
80
+ for (const m of messages) {
81
+ if (typeof m === "string") continue;
82
+ const action = m.code === EC.TLC_STATE_PRINT2 ? actionOf(m) : void 0;
83
+ if (action !== void 0) trace.push({
84
+ action,
85
+ vars: messageState(m)
86
+ });
87
+ else if (m.code === EC.TLC_INVARIANT_VIOLATED_INITIAL || m.code === EC.TLC_PROPERTY_VIOLATED_INITIAL) trace.push({
88
+ action: "",
89
+ vars: messageState(m)
90
+ });
91
+ }
92
+ return trace;
93
+ }
94
+ export { readCounterexample, readMarks };
@@ -0,0 +1,48 @@
1
+ import { linesOf, parseState } from "./dot.mjs";
2
+ // runtime/skills/statechart/scripts/frontends/messages.ts
3
+ const START = /@!@!@STARTMSG (\d+):(\d+) @!@!@$/;
4
+ const END = /^@!@!@ENDMSG \d+ @!@!@$/;
5
+ const isCutMarker = (lastLine) => lastLine.startsWith("@!@!@");
6
+ function cutMessage(open) {
7
+ for (let i = open.length - 1; i > 0 && !open[i].body.length; i--) open[i - 1].body.pop();
8
+ return open[0]?.body.length ? open[0] : void 0;
9
+ }
10
+ function* readMessages(tlcOut) {
11
+ const lines = linesOf(tlcOut)[Symbol.iterator]();
12
+ const open = [];
13
+ try {
14
+ for (let next = lines.next(); !next.done;) {
15
+ const line = next.value;
16
+ next = lines.next();
17
+ if (next.done && (!line || isCutMarker(line))) break;
18
+ const start = START.exec(line);
19
+ if (start) {
20
+ const message = {
21
+ code: Number(start[1]),
22
+ level: Number(start[2]),
23
+ body: []
24
+ };
25
+ if (start.index) message.beforeMarker = line.slice(0, start.index);
26
+ open.at(-1)?.body.push(message);
27
+ open.push(message);
28
+ } else if (END.test(line)) {
29
+ const done = open.pop();
30
+ if (done && !open.length) yield done;
31
+ } else if (open.length) open[open.length - 1].body.push(line);
32
+ else yield line;
33
+ }
34
+ } finally {
35
+ lines.return?.();
36
+ }
37
+ const cut = cutMessage(open);
38
+ if (cut) yield cut;
39
+ }
40
+ const textOf = ({ body }) => body.filter((part) => typeof part === "string").join("\n");
41
+ const actionOf = (m) => /^\d+: (?:Back to state: )?<([^\s>]+)/.exec(textOf(m))?.[1];
42
+ const messageState = (m) => {
43
+ const lines = textOf(m).split("\n");
44
+ const body = [];
45
+ for (let i = 1; i < lines.length && lines[i].trim(); i++) body.push(lines[i]);
46
+ return parseState(body.join("\n"));
47
+ };
48
+ export { actionOf, messageState, readMessages, textOf };
@@ -0,0 +1,101 @@
1
+ import { NAME } from "./config.mjs";
2
+ // runtime/skills/statechart/scripts/frontends/spec.ts
3
+ function readChecks({ configFile, config }) {
4
+ const refuse = (words) => /* @__PURE__ */ new Error(`TLC refuses the config ${configFile}. ${words}`);
5
+ if (config.spec && (config.init || config.next)) throw refuse("The configuration file cannot specify both INIT/NEXT and SPECIFICATION fields.");
6
+ if (!config.spec && !config.init) throw refuse("The configuration file did not specify the initial state predicate.");
7
+ const written = [];
8
+ for (const s of config.sections) if (![
9
+ "INVARIANT",
10
+ "PROPERTY",
11
+ "CHECK_DEADLOCK"
12
+ ].includes(s.key)) written.push(s);
13
+ return {
14
+ invariants: config.invariants,
15
+ properties: config.properties,
16
+ deadlock: config.checkDeadlock !== false,
17
+ written
18
+ };
19
+ }
20
+ const ENTITIES = {
21
+ amp: "&",
22
+ apos: "'",
23
+ gt: ">",
24
+ lt: "<",
25
+ quot: "\""
26
+ };
27
+ const decode = (text) => text.replace(/&(#x?)?(\w+);/g, (_, number, name) => number ? String.fromCodePoint(Number.parseInt(name, number === "#x" ? 16 : 10)) : ENTITIES[name]);
28
+ function parseXml(xml) {
29
+ const document = {
30
+ tag: "",
31
+ text: "",
32
+ children: []
33
+ };
34
+ const open = [document];
35
+ for (const [, close, tag, empty, text] of xml.matchAll(/<(\/?)([^\s/>?!]+)[^>]*?(\/?)>|<[?!][^>]*>|([^<]+)/g)) {
36
+ const parent = open[open.length - 1];
37
+ if (text !== void 0) parent.text += decode(text);
38
+ else if (close) open.pop();
39
+ else if (tag) {
40
+ const node = {
41
+ tag,
42
+ text: "",
43
+ children: []
44
+ };
45
+ parent.children.push(node);
46
+ if (!empty) open.push(node);
47
+ }
48
+ }
49
+ return document;
50
+ }
51
+ const child = (node, tag) => node?.children.find((c) => c.tag === tag);
52
+ const textOf = (node, tag) => child(node, tag)?.text ?? "";
53
+ const VARIABLE_KIND = "3";
54
+ function readSany(xml) {
55
+ const modules = child(parseXml(xml), "modules");
56
+ const symbols = /* @__PURE__ */ new Map();
57
+ for (const entry of child(modules, "context")?.children ?? []) symbols.set(textOf(entry, "UID"), entry.children[1]);
58
+ const root = textOf(modules, "RootModule");
59
+ let module;
60
+ for (const node of symbols.values()) if (node.tag === "ModuleNode" && textOf(node, "uniquename") === root) module = node;
61
+ const definitions = /* @__PURE__ */ new Map();
62
+ const variables = [];
63
+ for (const ref of module?.children ?? []) {
64
+ if (ref.tag !== "OpDeclNodeRef" && ref.tag !== "UserDefinedOpKindRef") continue;
65
+ const uid = textOf(ref, "UID");
66
+ const node = symbols.get(uid);
67
+ if (!node) continue;
68
+ const name = textOf(node, "uniquename");
69
+ definitions.set(name, node);
70
+ if (node.tag === "OpDeclNode" && textOf(node, "kind") === VARIABLE_KIND) variables.push({
71
+ uid: Number(uid),
72
+ name
73
+ });
74
+ }
75
+ variables.sort((a, b) => a.uid - b.uid);
76
+ return {
77
+ variables: variables.map((v) => v.name),
78
+ definitions
79
+ };
80
+ }
81
+ function readSpec({ module, sany, checks }) {
82
+ return {
83
+ module,
84
+ variables: sany.variables,
85
+ ...checks
86
+ };
87
+ }
88
+ const STATE_LEVEL = 1;
89
+ function initialOnlyProperties({ definitions }, { written, properties }) {
90
+ const replaced = /* @__PURE__ */ new Map();
91
+ for (const s of written) if (s.key === "CONSTANT") {
92
+ for (let i = 1; i + 1 < s.tokens.length; i++) if (s.tokens[i] === "<-" && NAME.test(s.tokens[i + 1])) replaced.set(s.tokens[i - 1], s.tokens[i + 1]);
93
+ }
94
+ const names = /* @__PURE__ */ new Set();
95
+ for (const name of properties) {
96
+ const definition = definitions.get(replaced.get(name) ?? name);
97
+ if (definition && Number(textOf(definition, "level")) <= STATE_LEVEL) names.add(name);
98
+ }
99
+ return names;
100
+ }
101
+ export { initialOnlyProperties, readChecks, readSany, readSpec };
@@ -0,0 +1,39 @@
1
+ import { EC } from "../ir.mjs";
2
+ import { actionOf, messageState, textOf } from "./messages.mjs";
3
+ // runtime/skills/statechart/scripts/frontends/trace.ts
4
+ function readTrace(messages) {
5
+ const seq = [];
6
+ for (const m of messages) {
7
+ if (typeof m === "string") continue;
8
+ if (m.code === EC.TLC_STATE_PRINT3) return {
9
+ seq,
10
+ loop: seq.length - 1
11
+ };
12
+ const back = m.code === EC.TLC_BACK_TO_STATE && /^(\d+): Back to state: /.exec(textOf(m));
13
+ if (back) {
14
+ const loop = Number(back[1]) - 1;
15
+ seq.push({
16
+ action: actionOf(m) ?? "",
17
+ vars: seq[loop]?.vars
18
+ });
19
+ return {
20
+ seq,
21
+ loop
22
+ };
23
+ }
24
+ const action = m.code === EC.TLC_STATE_PRINT2 ? actionOf(m) : void 0;
25
+ if (action !== void 0) seq.push({
26
+ action,
27
+ vars: messageState(m)
28
+ });
29
+ else if (m.code === EC.TLC_INVARIANT_VIOLATED_INITIAL || m.code === EC.TLC_PROPERTY_VIOLATED_INITIAL) seq.push({
30
+ action: "",
31
+ vars: messageState(m)
32
+ });
33
+ }
34
+ return {
35
+ seq,
36
+ loop: void 0
37
+ };
38
+ }
39
+ export { readTrace };
@@ -0,0 +1,180 @@
1
+ // runtime/skills/statechart/scripts/frontends/value.ts
2
+ const BRACKET = /* @__PURE__ */ new Int8Array(128);
3
+ for (const c of "<{[(") BRACKET[c.charCodeAt(0)] = 1;
4
+ for (const c of ">}])") BRACKET[c.charCodeAt(0)] = -1;
5
+ const PUNCT = /* @__PURE__ */ new Map([
6
+ [60, "<<"],
7
+ [62, ">>"],
8
+ [124, "|->"],
9
+ [58, ":>"],
10
+ [64, "@@"],
11
+ [46, ".."]
12
+ ]);
13
+ const SPACE = /\s/;
14
+ const isSpace = (c) => c === 32 || c >= 9 && c <= 13 || c > 127 && SPACE.test(String.fromCharCode(c));
15
+ const isDigit = (c) => c >= 48 && c <= 57;
16
+ const isWord = (c) => isDigit(c) || c >= 65 && c <= 90 || c >= 97 && c <= 122 || c === 95;
17
+ const isLineEnd = (c) => c === 10 || c === 13 || c === 8232 || c === 8233;
18
+ const tokenEnd = (s, i) => {
19
+ const c = s.charCodeAt(i);
20
+ if (c === 34) {
21
+ for (let j = i + 1; j < s.length; j++) {
22
+ const d = s.charCodeAt(j);
23
+ if (d === 34) return j + 1;
24
+ if (d === 92 && (++j >= s.length || isLineEnd(s.charCodeAt(j)))) return -1;
25
+ }
26
+ return -1;
27
+ }
28
+ const punct = PUNCT.get(c);
29
+ if (punct) return s.startsWith(punct, i) ? i + punct.length : -1;
30
+ if (BRACKET[c] || c === 44) return i + 1;
31
+ let j = i + 1;
32
+ if (c === 45 || isDigit(c)) {
33
+ while (isDigit(s.charCodeAt(j))) j++;
34
+ return c === 45 && j === i + 1 ? -1 : j;
35
+ }
36
+ if (!isWord(c)) return -1;
37
+ while (isWord(s.charCodeAt(j))) j++;
38
+ return j;
39
+ };
40
+ const unreadable = (text, pos) => /* @__PURE__ */ new Error(`cannot read TLA+ value at "${text.slice(pos, pos + 20)}"`);
41
+ const INT = /^-?\d+$/;
42
+ const NAME = /^\w*[A-Za-z]\w*$/;
43
+ const UNESCAPED = {
44
+ "\"": "\"",
45
+ "\\": "\\",
46
+ n: "\n",
47
+ t: " ",
48
+ r: "\r",
49
+ f: "\f"
50
+ };
51
+ const models = /* @__PURE__ */ new Map();
52
+ const model = (name) => {
53
+ let v = models.get(name);
54
+ if (v === void 0) models.set(name, v = {
55
+ kind: "model",
56
+ name
57
+ });
58
+ return v;
59
+ };
60
+ function parseValue(text) {
61
+ const tokens = [];
62
+ const starts = [];
63
+ for (let pos = 0;;) {
64
+ while (pos < text.length && isSpace(text.charCodeAt(pos))) pos++;
65
+ if (pos === text.length) break;
66
+ const end = tokenEnd(text, pos);
67
+ if (end === -1) throw unreadable(text, pos);
68
+ tokens.push(text.slice(pos, end));
69
+ starts.push(pos);
70
+ pos = end;
71
+ }
72
+ let i = 0;
73
+ const fail = () => {
74
+ throw unreadable(text, i < starts.length ? starts[Math.max(i - 1, 0)] : text.length);
75
+ };
76
+ const next = () => i < tokens.length ? tokens[i++] : fail();
77
+ const eat = (t) => {
78
+ if (next() !== t) fail();
79
+ };
80
+ const items = (close, item) => {
81
+ const out = [];
82
+ if (tokens[i] === close) {
83
+ i++;
84
+ return out;
85
+ }
86
+ for (;;) {
87
+ out.push(item());
88
+ const t = next();
89
+ if (t === close) return out;
90
+ if (t !== ",") fail();
91
+ }
92
+ };
93
+ const string = (t) => {
94
+ let s = "";
95
+ for (let j = 1, from = 1;;) {
96
+ const k = t.indexOf("\\", j);
97
+ if (k === -1 || k >= t.length - 1) return s + t.slice(from, -1);
98
+ const c = UNESCAPED[t[k + 1]];
99
+ if (c === void 0) fail();
100
+ s += t.slice(from, k) + c;
101
+ j = from = k + 2;
102
+ }
103
+ };
104
+ const value = () => {
105
+ const t = next();
106
+ switch (t) {
107
+ case "TRUE": return true;
108
+ case "FALSE": return false;
109
+ case "{": return {
110
+ kind: "set",
111
+ members: items("}", value)
112
+ };
113
+ case "<<": {
114
+ const values = items(">>", value);
115
+ const keys = [];
116
+ for (let k = 1; k <= values.length; k++) keys.push(k);
117
+ return {
118
+ kind: "function",
119
+ printedAs: "tuple",
120
+ keys,
121
+ values
122
+ };
123
+ }
124
+ case "[": {
125
+ const keys = [];
126
+ const values = [];
127
+ items("]", () => {
128
+ const name = next();
129
+ if (!NAME.test(name)) fail();
130
+ eat("|->");
131
+ keys.push(name);
132
+ values.push(value());
133
+ });
134
+ return {
135
+ kind: "function",
136
+ printedAs: "record",
137
+ keys,
138
+ values
139
+ };
140
+ }
141
+ case "(": {
142
+ const keys = [];
143
+ const values = [];
144
+ do {
145
+ keys.push(value());
146
+ eat(":>");
147
+ values.push(value());
148
+ } while (next() === "@@");
149
+ if (tokens[i - 1] !== ")") fail();
150
+ return {
151
+ kind: "function",
152
+ printedAs: "pairs",
153
+ keys,
154
+ values
155
+ };
156
+ }
157
+ }
158
+ if (t.charCodeAt(0) === 34) return string(t);
159
+ if (INT.test(t)) {
160
+ if (tokens[i] !== "..") return Number(t);
161
+ i++;
162
+ const hi = next();
163
+ if (!INT.test(hi)) fail();
164
+ return {
165
+ kind: "interval",
166
+ lo: Number(t),
167
+ hi: Number(hi)
168
+ };
169
+ }
170
+ if (NAME.test(t)) return model(t);
171
+ return fail();
172
+ };
173
+ const out = value();
174
+ if (i < tokens.length) {
175
+ i++;
176
+ fail();
177
+ }
178
+ return out;
179
+ }
180
+ export { BRACKET, isSpace, parseValue, tokenEnd, unreadable };
@@ -0,0 +1,40 @@
1
+ import { EC } from "../ir.mjs";
2
+ import { textOf } from "./messages.mjs";
3
+ // runtime/skills/statechart/scripts/frontends/verdict.ts
4
+ const NAMED = /* @__PURE__ */ new Map([
5
+ [EC.TLC_INVARIANT_VIOLATED_INITIAL, ["invariant", /^Invariant (.+) is violated by the initial/]],
6
+ [EC.TLC_INVARIANT_VIOLATED_BEHAVIOR, ["invariant", /^Invariant (.+) is violated\.$/m]],
7
+ [EC.TLC_PROPERTY_VIOLATED_INITIAL, ["property", /^Property (.+) is violated by the initial/]],
8
+ [EC.TLC_ACTION_PROPERTY_VIOLATED_BEHAVIOR, ["property", /^Action property (.+) is violated\.$/m]]
9
+ ]);
10
+ const DISTINCT = /* @__PURE__ */ new Map([
11
+ [EC.TLC_INIT_GENERATED1, /(\d+) distinct states? generated/],
12
+ [EC.TLC_INIT_GENERATED2, /with (\d+) of them distinct/],
13
+ [EC.TLC_STATS, /(\d+) distinct states found/]
14
+ ]);
15
+ function readVerdict(messages) {
16
+ let broke;
17
+ let distinct = 0;
18
+ let initial = 0;
19
+ for (const m of messages) {
20
+ if (typeof m === "string") continue;
21
+ const count = DISTINCT.get(m.code)?.exec(textOf(m));
22
+ if (count) distinct = Math.max(distinct, Number(count[1]));
23
+ if (m.code === EC.TLC_INIT_GENERATED1 || m.code === EC.TLC_INIT_GENERATED2) initial = Number(/(\d+) (?:distinct )?states? generated/.exec(textOf(m))?.[1] ?? 0);
24
+ if (broke) continue;
25
+ if (m.code === EC.TLC_DEADLOCK_REACHED) broke = { kind: "deadlock" };
26
+ else if (m.code === EC.TLC_TEMPORAL_PROPERTY_VIOLATED) broke = { kind: "temporal" };
27
+ const named = NAMED.get(m.code);
28
+ const name = named?.[1].exec(textOf(m))?.[1];
29
+ if (named && name) broke = {
30
+ kind: named[0],
31
+ name
32
+ };
33
+ }
34
+ return {
35
+ broke,
36
+ distinct,
37
+ initial
38
+ };
39
+ }
40
+ export { readVerdict };
@@ -0,0 +1,99 @@
1
+ import { checked, list } from "../ir.mjs";
2
+ // runtime/skills/statechart/scripts/frontends/view.ts
3
+ const projected = /* @__PURE__ */ new WeakMap();
4
+ const json = (v) => {
5
+ if (typeof v !== "object") return v;
6
+ if (v.kind === "model") return v.name;
7
+ let j = projected.get(v);
8
+ if (j === void 0) {
9
+ if (v.kind === "interval") {
10
+ const members = [];
11
+ for (let k = v.lo; k <= v.hi; k++) members.push(k);
12
+ j = members;
13
+ } else if (v.kind === "set") {
14
+ const members = [];
15
+ for (const m of v.members) members.push(json(m));
16
+ j = members;
17
+ } else {
18
+ const fields = [];
19
+ for (let i = 0; i < v.keys.length; i++) {
20
+ const k = json(v.keys[i]);
21
+ fields.push([typeof k === "object" ? JSON.stringify(k) : String(k), json(v.values[i])]);
22
+ }
23
+ j = Object.fromEntries(fields);
24
+ }
25
+ projected.set(v, j);
26
+ }
27
+ return j;
28
+ };
29
+ const projectedVars = /* @__PURE__ */ new WeakMap();
30
+ const jsonVars = (vars) => {
31
+ let j = projectedVars.get(vars);
32
+ if (j === void 0) {
33
+ const fields = [];
34
+ for (const [name, v] of Object.entries(vars)) fields.push([name, json(v)]);
35
+ j = Object.fromEntries(fields);
36
+ projectedVars.set(vars, j);
37
+ }
38
+ return j;
39
+ };
40
+ const THEME_COLORS = [
41
+ "blue",
42
+ "orange",
43
+ "purple",
44
+ "yellow",
45
+ "teal",
46
+ "tan",
47
+ "pink"
48
+ ];
49
+ const isFunction = (v) => typeof v === "function";
50
+ const isPlainObject = (v) => {
51
+ if (typeof v !== "object" || v === null) return false;
52
+ const proto = Object.getPrototypeOf(v);
53
+ return proto === Object.prototype || proto === null;
54
+ };
55
+ const isString = (v) => typeof v === "string";
56
+ const VIEW_EXPORTS = [
57
+ "state",
58
+ "step",
59
+ "group",
60
+ "colors",
61
+ "title"
62
+ ];
63
+ function checkView(view, inspect) {
64
+ const literal = (v) => typeof v === "string" ? JSON.stringify(v) : inspect(v, { breakLength: Infinity });
65
+ const extra = [];
66
+ for (const name of Object.keys(view)) if (!VIEW_EXPORTS.includes(name)) extra.push(name);
67
+ if (extra.length) throw new Error(`The view exports ${list(extra)}, which the command does not read. Export only ${list(VIEW_EXPORTS)}.`);
68
+ const wrong = [];
69
+ const pick = (name, kind, fits) => {
70
+ const v = view[name];
71
+ if (v === void 0 || fits(v)) return v;
72
+ wrong.push(`${name} must be ${kind}`);
73
+ };
74
+ const state = pick("state", "a function", isFunction);
75
+ const step = pick("step", "a function", isFunction);
76
+ const group = pick("group", "a function", isFunction);
77
+ const exported = pick("colors", "a plain object", isPlainObject);
78
+ const title = pick("title", "a string", isString);
79
+ if (wrong.length) throw new Error(`The view's ${list(wrong)}.`);
80
+ if (group !== void 0 && exported === void 0) throw new Error("The view exports group() but no colors. Give each group a color in colors.");
81
+ const colors = Object.create(null);
82
+ const bad = [];
83
+ for (const [name, color] of Object.entries(exported ?? {})) if (typeof color === "string" && THEME_COLORS.includes(color)) colors[name] = color;
84
+ else bad.push(`${JSON.stringify(name)} the color ${literal(color)}`);
85
+ if (bad.length) throw new Error(`The view's colors give ${list(bad)}. Give each group ${list(THEME_COLORS, "or")}.`);
86
+ return {
87
+ state: state && ((vars) => state(jsonVars(vars))),
88
+ step: step && ((action, from, to) => step(action, jsonVars(from), jsonVars(to))),
89
+ group: group && ((vars) => {
90
+ const g = group(jsonVars(vars));
91
+ if (g !== void 0 && !Object.hasOwn(colors, typeof g === "symbol" ? g : String(g))) throw new Error(`The view's group() returned ${literal(g)}, which colors does not name. Give each group a color in colors.`);
92
+ return g;
93
+ }),
94
+ colors,
95
+ title,
96
+ [checked]: true
97
+ };
98
+ }
99
+ export { checkView, json };