pstack-claude-mirror 0.0.0-stage → 0.9.133
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.
- package/.claude-plugin/marketplace.json +16 -0
- package/CHANGES.md +1110 -0
- package/LICENSE +22 -0
- package/LICENSE-cursor-team-kit +21 -0
- package/LICENSE-mirror +27 -0
- package/LICENSE-thermos +21 -0
- package/NOTICE-skills.md +13 -0
- package/NOTICE.md +62 -0
- package/README.md +84 -2
- package/UPSTREAM-README.md +243 -0
- package/bin/pstack-claude.mjs +183 -0
- package/docs/reference.md +247 -0
- package/package.json +88 -4
- package/plugins/pstack/.antigravity-plugin/plugin.json +8 -0
- package/plugins/pstack/.claude-plugin/icon.png +0 -0
- package/plugins/pstack/.claude-plugin/plugin.json +31 -0
- package/plugins/pstack/.codex-plugin/plugin.json +52 -0
- package/plugins/pstack/.github/plugin/plugin.json +15 -0
- package/plugins/pstack/.grok-plugin/plugin.json +9 -0
- package/plugins/pstack/.muse-plugin/plugin.json +381 -0
- package/plugins/pstack/README.md +27 -0
- package/plugins/pstack/agents/comment-sicko.md +34 -0
- package/plugins/pstack/agents/poteto-agent.md +8 -0
- package/plugins/pstack/agents/thermo-nuclear-code-quality-review-subagent.md +23 -0
- package/plugins/pstack/agents/thermo-nuclear-review-subagent.md +28 -0
- package/plugins/pstack/assets/pstack-icon.png +0 -0
- package/plugins/pstack/assets/pstack-icon.prompt.txt +8 -0
- package/plugins/pstack/grok/skills/pstack-routing/SKILL.md +8 -0
- package/plugins/pstack/hooks/agy-context.awk +9 -0
- package/plugins/pstack/hooks/codex-hooks.json +17 -0
- package/plugins/pstack/hooks/copilot-context.awk +44 -0
- package/plugins/pstack/hooks/copilot-hooks.json +27 -0
- package/plugins/pstack/hooks/hooks.json +16 -0
- package/plugins/pstack/hooks/json.awk +164 -0
- package/plugins/pstack/hooks/kimi-instructions.md +17 -0
- package/plugins/pstack/hooks/muse-context.awk +31 -0
- package/plugins/pstack/hooks/pre-tool-use.awk +152 -0
- package/plugins/pstack/hooks/pre-tool-use.sh +16 -0
- package/plugins/pstack/hooks/script-contracts.awk +55 -0
- package/plugins/pstack/hooks/session-start-agy.md +17 -0
- package/plugins/pstack/hooks/session-start-context.md +15 -0
- package/plugins/pstack/hooks/session-start-copilot-setup.md +1 -0
- package/plugins/pstack/hooks/session-start-copilot-sheet.md +1 -0
- package/plugins/pstack/hooks/session-start-copilot.md +3 -0
- package/plugins/pstack/hooks/session-start-minimax.md +17 -0
- package/plugins/pstack/hooks/session-start-muse-sheet.md +1 -0
- package/plugins/pstack/hooks/session-start-muse.md +17 -0
- package/plugins/pstack/hooks/session-start-opencode.md +17 -0
- package/plugins/pstack/hooks/session-start.ps1 +105 -0
- package/plugins/pstack/hooks/session-start.sh +95 -0
- package/plugins/pstack/hooks.json +10 -0
- package/plugins/pstack/models.json +67 -0
- package/plugins/pstack/omp/index.mjs +34 -0
- package/plugins/pstack/opencode/index.js +49 -0
- package/plugins/pstack/package.json +8 -0
- package/plugins/pstack/pi/agent-files.ts +117 -0
- package/plugins/pstack/pi/agent-text.ts +99 -0
- package/plugins/pstack/pi/agent-tools.ts +148 -0
- package/plugins/pstack/pi/agents.ts +486 -0
- package/plugins/pstack/pi/ask.ts +87 -0
- package/plugins/pstack/pi/child.ts +310 -0
- package/plugins/pstack/pi/config.ts +178 -0
- package/plugins/pstack/pi/index.ts +44 -0
- package/plugins/pstack/pi/one-shot.ts +90 -0
- package/plugins/pstack/pi/path-skills.ts +54 -0
- package/plugins/pstack/pi/prompt.ts +39 -0
- package/plugins/pstack/pi/schedule.ts +254 -0
- package/plugins/pstack/pi/slash.ts +92 -0
- package/plugins/pstack/pi/sleep-wait.ts +76 -0
- package/plugins/pstack/pi/worktree.ts +74 -0
- package/plugins/pstack/skills/architect/SKILL.md +100 -0
- package/plugins/pstack/skills/architect/references/design-red-flags.md +57 -0
- package/plugins/pstack/skills/architect/references/rationale-template.md +39 -0
- package/plugins/pstack/skills/architect/references/runner-prompt.md +20 -0
- package/plugins/pstack/skills/arena/SKILL.md +66 -0
- package/plugins/pstack/skills/automate-me/SKILL.md +111 -0
- package/plugins/pstack/skills/babysit/SKILL.md +68 -0
- package/plugins/pstack/skills/benchmark-checklist/SKILL.md +38 -0
- package/plugins/pstack/skills/blast-radius/SKILL.md +49 -0
- package/plugins/pstack/skills/bro/SKILL.md +6 -0
- package/plugins/pstack/skills/correct/SKILL.md +31 -0
- package/plugins/pstack/skills/create-formal-verification-skill/SKILL.md +50 -0
- package/plugins/pstack/skills/create-verification-skill/SKILL.md +51 -0
- package/plugins/pstack/skills/create-verification-skill/references/feature-map-example/README.md +47 -0
- package/plugins/pstack/skills/create-verification-skill/references/feature-map-example/create-note.md +39 -0
- package/plugins/pstack/skills/create-verification-skill/references/feature-map-example/search.md +45 -0
- package/plugins/pstack/skills/deslop/SKILL.md +24 -0
- package/plugins/pstack/skills/figure-it-out/SKILL.md +51 -0
- package/plugins/pstack/skills/fix-ci/SKILL.md +29 -0
- package/plugins/pstack/skills/fix-merge-conflicts/SKILL.md +32 -0
- package/plugins/pstack/skills/get-pr-comments/SKILL.md +23 -0
- package/plugins/pstack/skills/how/SKILL.md +54 -0
- package/plugins/pstack/skills/how/references/explainer-prompt.md +55 -0
- package/plugins/pstack/skills/how/references/explorer-prompt.md +35 -0
- package/plugins/pstack/skills/in-your-own-words/SKILL.md +6 -0
- package/plugins/pstack/skills/interrogate/SKILL.md +48 -0
- package/plugins/pstack/skills/ketchup/SKILL.md +42 -0
- package/plugins/pstack/skills/ketchup-video/SKILL.md +28 -0
- package/plugins/pstack/skills/maintain-formal-verification-skill/SKILL.md +65 -0
- package/plugins/pstack/skills/maintain-verification-skill/SKILL.md +46 -0
- package/plugins/pstack/skills/make-pr-easy-to-review/SKILL.md +59 -0
- package/plugins/pstack/skills/no-comments/SKILL.md +45 -0
- package/plugins/pstack/skills/poteto-help/SKILL.md +149 -0
- package/plugins/pstack/skills/poteto-help/references/prompting.md +51 -0
- package/plugins/pstack/skills/poteto-help/references/recipes.md +51 -0
- package/plugins/pstack/skills/poteto-mode/SKILL.md +174 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/authoring-a-skill.md +12 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/autonomous-run.md +13 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/autopilot-full.md +31 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/autopilot-stack.md +8 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/babysit.md +23 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/bug-fix.md +15 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/eval.md +25 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/feature.md +21 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/hillclimb.md +21 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/investigation.md +14 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/multi-phase-plan.md +158 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/opening-a-pr.md +34 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/orchestrate.md +27 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/pause-safely.md +11 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/perf-issue.md +25 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/prototype.md +14 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/refactoring.md +18 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/runtime-forensics.md +11 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/session-pickup.md +11 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/shipping.md +16 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/trace-forensics.md +14 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/visual-parity.md +11 -0
- package/plugins/pstack/skills/poteto-mode/playbooks/worktree-cleanup.md +12 -0
- package/plugins/pstack/skills/poteto-mode/references/agents/comment-sicko.md +34 -0
- package/plugins/pstack/skills/poteto-mode/references/agy-tools.md +99 -0
- package/plugins/pstack/skills/poteto-mode/references/bugbot-triage.md +142 -0
- package/plugins/pstack/skills/poteto-mode/references/codex-tools.md +109 -0
- package/plugins/pstack/skills/poteto-mode/references/copilot-tools.md +143 -0
- package/plugins/pstack/skills/poteto-mode/references/grok.md +50 -0
- package/plugins/pstack/skills/poteto-mode/references/kimi-tools.md +40 -0
- package/plugins/pstack/skills/poteto-mode/references/licenses/LICENSE +22 -0
- package/plugins/pstack/skills/poteto-mode/references/licenses/LICENSE-cursor-team-kit +21 -0
- package/plugins/pstack/skills/poteto-mode/references/licenses/LICENSE-thermos +21 -0
- package/plugins/pstack/skills/poteto-mode/references/licenses/NOTICE.md +13 -0
- package/plugins/pstack/skills/poteto-mode/references/merge-safety.md +43 -0
- package/plugins/pstack/skills/poteto-mode/references/minimax-tools.md +93 -0
- package/plugins/pstack/skills/poteto-mode/references/muse-tools.md +105 -0
- package/plugins/pstack/skills/poteto-mode/references/omp-tools.md +39 -0
- package/plugins/pstack/skills/poteto-mode/references/opencode-tools.md +29 -0
- package/plugins/pstack/skills/poteto-mode/references/pi-tools.md +117 -0
- package/plugins/pstack/skills/poteto-mode/references/resume-storage.md +20 -0
- package/plugins/pstack/skills/poteto-mode/scripts/.prettierignore +23 -0
- package/plugins/pstack/skills/poteto-mode/scripts/.prettierrc.json +3 -0
- package/plugins/pstack/skills/poteto-mode/scripts/bootstrap.ts +71 -0
- package/plugins/pstack/skills/poteto-mode/scripts/bun.lock +67 -0
- package/plugins/pstack/skills/poteto-mode/scripts/check-plan.mjs +214 -0
- package/plugins/pstack/skills/poteto-mode/scripts/check-plan.test.ts +115 -0
- package/plugins/pstack/skills/poteto-mode/scripts/check-playbooks.mjs +71 -0
- package/plugins/pstack/skills/poteto-mode/scripts/codex-session-effort.mjs +66 -0
- package/plugins/pstack/skills/poteto-mode/scripts/package.json +16 -0
- package/plugins/pstack/skills/poteto-mode/scripts/resume.mjs +139 -0
- package/plugins/pstack/skills/poteto-mode/scripts/tsconfig.json +14 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/cli.test.ts +383 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/cli.ts +266 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/deadline.ts +20 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.ts +157 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/fresh-install.test.ts +35 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/github.test.ts +902 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/github.ts +922 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/integrity.test.ts +887 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/landing.ts +92 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/live-merge-safety.mjs +142 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/policy.test.ts +1151 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/policy.ts +956 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/render.ts +200 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/ship-pr +6 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/shipping-cli.test.ts +159 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/shipping-cli.ts +65 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/shipping.test-helper.ts +48 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/shipping.test.ts +360 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/shipping.ts +235 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/transport.test.ts +211 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/tsconfig.json +13 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/types.compile.ts +108 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/types.ts +474 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/watch-pr +6 -0
- package/plugins/pstack/skills/poteto-mode/scripts/watch-pr/wrapper.test.ts +20 -0
- package/plugins/pstack/skills/poteto-mode/scripts/worktree-audit.mjs +434 -0
- package/plugins/pstack/skills/principle-attack-the-premise/SKILL.md +21 -0
- package/plugins/pstack/skills/principle-boundary-discipline/SKILL.md +34 -0
- package/plugins/pstack/skills/principle-build-the-lever/SKILL.md +24 -0
- package/plugins/pstack/skills/principle-encode-lessons-in-structure/SKILL.md +11 -0
- package/plugins/pstack/skills/principle-exhaust-the-design-space/SKILL.md +9 -0
- package/plugins/pstack/skills/principle-experience-first/SKILL.md +19 -0
- package/plugins/pstack/skills/principle-explain-the-number/SKILL.md +18 -0
- package/plugins/pstack/skills/principle-fix-root-causes/SKILL.md +21 -0
- package/plugins/pstack/skills/principle-foundational-thinking/SKILL.md +21 -0
- package/plugins/pstack/skills/principle-guard-the-context-window/SKILL.md +12 -0
- package/plugins/pstack/skills/principle-laziness-protocol/SKILL.md +10 -0
- package/plugins/pstack/skills/principle-make-operations-idempotent/SKILL.md +22 -0
- package/plugins/pstack/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +14 -0
- package/plugins/pstack/skills/principle-minimize-reader-load/SKILL.md +18 -0
- package/plugins/pstack/skills/principle-model-the-domain/SKILL.md +24 -0
- package/plugins/pstack/skills/principle-never-block-on-the-human/SKILL.md +15 -0
- package/plugins/pstack/skills/principle-outcome-oriented-execution/SKILL.md +21 -0
- package/plugins/pstack/skills/principle-prove-it-works/SKILL.md +27 -0
- package/plugins/pstack/skills/principle-redesign-from-first-principles/SKILL.md +16 -0
- package/plugins/pstack/skills/principle-separate-before-serializing-shared-state/SKILL.md +16 -0
- package/plugins/pstack/skills/principle-sequence-verifiable-units/SKILL.md +17 -0
- package/plugins/pstack/skills/principle-subtract-before-you-add/SKILL.md +18 -0
- package/plugins/pstack/skills/principle-test-behavior-not-implementation/SKILL.md +20 -0
- package/plugins/pstack/skills/principle-type-system-discipline/SKILL.md +13 -0
- package/plugins/pstack/skills/recall/SKILL.md +43 -0
- package/plugins/pstack/skills/reflect/SKILL.md +89 -0
- package/plugins/pstack/skills/reflect/references/divergent-reviewer.md +38 -0
- package/plugins/pstack/skills/reflect/references/judgment-reviewer.md +37 -0
- package/plugins/pstack/skills/reflect/references/synthesizer.md +56 -0
- package/plugins/pstack/skills/reflect/references/tooling-reviewer.md +48 -0
- package/plugins/pstack/skills/reflect/scripts/claude-project-dir.mjs +121 -0
- package/plugins/pstack/skills/reflect/scripts/find-transcript.mjs +218 -0
- package/plugins/pstack/skills/setup-pstack/SKILL.md +109 -0
- package/plugins/pstack/skills/setup-pstack/copilot.md +88 -0
- package/plugins/pstack/skills/setup-pstack/references/runtimes.md +75 -0
- package/plugins/pstack/skills/setup-pstack/scripts/check-sheet.awk +10 -0
- package/plugins/pstack/skills/setup-pstack/scripts/check-sheet.sh +20 -0
- package/plugins/pstack/skills/setup-pstack/scripts/read-sheet.sh +24 -0
- package/plugins/pstack/skills/setup-pstack/scripts/sheet.awk +160 -0
- package/plugins/pstack/skills/sharpen/SKILL.md +15 -0
- package/plugins/pstack/skills/show-me-your-work/SKILL.md +89 -0
- package/plugins/pstack/skills/show-me-your-work/references/decision-log-template.tsv +1 -0
- package/plugins/pstack/skills/show-me-your-work/scripts/log.sh +58 -0
- package/plugins/pstack/skills/statechart/SKILL.md +81 -0
- package/plugins/pstack/skills/statechart/references/render.md +93 -0
- package/plugins/pstack/skills/statechart/scripts/backends/cfg.ts +33 -0
- package/plugins/pstack/skills/statechart/scripts/backends/mermaid.ts +201 -0
- package/plugins/pstack/skills/statechart/scripts/backends/plain-text.ts +72 -0
- package/plugins/pstack/skills/statechart/scripts/backends/report.ts +177 -0
- package/plugins/pstack/skills/statechart/scripts/bun.lock +17 -0
- package/plugins/pstack/skills/statechart/scripts/frontends/config.ts +276 -0
- package/plugins/pstack/skills/statechart/scripts/frontends/dot.ts +74 -0
- package/plugins/pstack/skills/statechart/scripts/frontends/marks.ts +93 -0
- package/plugins/pstack/skills/statechart/scripts/frontends/messages.ts +52 -0
- package/plugins/pstack/skills/statechart/scripts/frontends/spec.ts +114 -0
- package/plugins/pstack/skills/statechart/scripts/frontends/trace.ts +24 -0
- package/plugins/pstack/skills/statechart/scripts/frontends/value.ts +166 -0
- package/plugins/pstack/skills/statechart/scripts/frontends/verdict.ts +40 -0
- package/plugins/pstack/skills/statechart/scripts/frontends/view.ts +119 -0
- package/plugins/pstack/skills/statechart/scripts/ir.ts +547 -0
- package/plugins/pstack/skills/statechart/scripts/janitor.ts +12 -0
- package/plugins/pstack/skills/statechart/scripts/package.json +11 -0
- package/plugins/pstack/skills/statechart/scripts/passes/annotate.ts +128 -0
- package/plugins/pstack/skills/statechart/scripts/passes/label.ts +269 -0
- package/plugins/pstack/skills/statechart/scripts/passes/lift.ts +85 -0
- package/plugins/pstack/skills/statechart/scripts/passes/loop-check.ts +68 -0
- package/plugins/pstack/skills/statechart/scripts/passes/paths.ts +60 -0
- package/plugins/pstack/skills/statechart/scripts/passes/reach.ts +135 -0
- package/plugins/pstack/skills/statechart/scripts/passes/region-check.ts +97 -0
- package/plugins/pstack/skills/statechart/scripts/passes/regions.ts +295 -0
- package/plugins/pstack/skills/statechart/scripts/pipeline.ts +76 -0
- package/plugins/pstack/skills/statechart/scripts/run.ts +526 -0
- package/plugins/pstack/skills/statechart/scripts/statechart +29 -0
- package/plugins/pstack/skills/statechart/scripts/statechart.ts +171 -0
- package/plugins/pstack/skills/statechart/scripts/test/ConfigOracle.java +63 -0
- package/plugins/pstack/skills/statechart/scripts/test/chart.test.ts +1210 -0
- package/plugins/pstack/skills/statechart/scripts/test/charts/Braces.mmd +7 -0
- package/plugins/pstack/skills/statechart/scripts/test/charts/Escapes.mmd +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/charts/Phases.mmd +29 -0
- package/plugins/pstack/skills/statechart/scripts/test/child-env.test.ts +15 -0
- package/plugins/pstack/skills/statechart/scripts/test/cli.test.ts +1323 -0
- package/plugins/pstack/skills/statechart/scripts/test/config-fuzz.test.ts +263 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Counter/ChartRun.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Counter/Counter.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Counter/Counter.tla +10 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Counter/chart.mmd +9 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Counter/graph.dot +16 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Counter/report.md +7 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Counter/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Counter/verdict-1.out +49 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/ChartRun.out +60 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/CounterAction.cfg +4 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/CounterAction.tla +22 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/chart.mmd +26 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/graph.dot +19 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/report.md +20 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-1.out +56 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-2.out +82 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-3.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/ChartRun.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/CounterDeadlock.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/CounterDeadlock.tla +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/chart.mmd +22 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/graph.dot +16 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/report.md +17 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-1.out +56 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-2.out +77 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/ChartRun.out +69 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/CounterFan.cfg +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/CounterFan.tla +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/chart.mmd +85 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/graph.dot +70 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/report.md +12 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-1.out +67 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-2.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/ChartRun.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/ChartRun.out +85 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/CounterGuard.cfg +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/CounterGuard.tla +13 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/chart.mmd +5 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/graph.dot +10 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/report.md +31 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-1.out +64 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-2.out +77 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/ChartRun.out +55 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/CounterInitPast.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/CounterInitPast.tla +10 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/chart.mmd +12 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/graph.dot +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/report.md +12 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-1.out +33 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-2.out +54 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/ChartRun.out +54 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/CounterInitPastHolds.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/CounterInitPastHolds.tla +10 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/chart.mmd +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/graph.dot +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/report.md +7 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/verdict-1.out +46 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/ChartRun.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterInstance.cfg +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterInstance.tla +10 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterSteps.tla +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/chart.mmd +17 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/graph.dot +15 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/report.md +14 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/sany.out +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterInstance/verdict-1.out +78 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/ChartRun.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/CounterJump.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/CounterJump.tla +19 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/chart.mmd +26 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/graph.dot +22 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/report.md +12 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-1.out +58 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-2.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterLoop/ChartRun.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterLoop/CounterLoop.cfg +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterLoop/CounterLoop.tla +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterLoop/chart.mmd +17 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterLoop/graph.dot +15 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterLoop/report.md +14 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterLoop/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterLoop/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterLoop/verdict-1.out +76 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/ChartRun.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/CounterOrder.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/CounterOrder.tla +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/chart.mmd +19 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/graph.dot +10 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/report.md +15 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-1.out +56 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-2.out +67 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/ChartRun.out +62 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/CounterRules.cfg +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/CounterRules.tla +24 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/Moves.tla +5 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/chart.mmd +22 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/graph.dot +10 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/report.md +23 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/sany.out +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-1.out +58 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-2.out +66 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-3.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-3.out +74 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-4.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/ChartRun.out +58 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/CounterStart.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/CounterStart.tla +15 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/chart.mmd +18 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/graph.dot +13 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/report.md +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-1.out +33 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-2.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStop/ChartRun.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStop/CounterStop.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStop/CounterStop.tla +15 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStop/chart.mmd +7 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStop/graph.dot +13 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStop/report.md +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStop/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterStop/verdict-1.out +49 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/ChartRun.out +61 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/CounterTie.cfg +4 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/CounterTie.tla +14 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/chart.mmd +30 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/graph.dot +19 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/report.md +27 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-1.out +56 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-2.out +64 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-3.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-3.out +87 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-4.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/ChartRun.out +60 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/CounterTieInGraph.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/CounterTieInGraph.tla +12 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/chart.mmd +23 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/graph.dot +19 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/report.md +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-1.out +56 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-2.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/ChartRun.out +61 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/CounterView.cfg +4 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/CounterView.tla +14 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/chart.mmd +23 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/graph.dot +19 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/report.md +27 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-1.out +56 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-2.out +64 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-3.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-3.out +87 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-4.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/CounterView/view.mjs +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/ChartRun.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/DieHard.cfg +4 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/DieHard.tla +38 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/chart.mmd +92 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/graph.dot +126 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/report.md +17 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-1.out +91 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-2.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/ChartRun.out +61 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/FirstRule.cfg +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/FirstRule.tla +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/chart.mmd +22 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/graph.dot +16 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/report.md +25 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-1.out +56 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-2.out +64 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-3.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-3.out +64 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-4.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-4.out +77 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/HiddenClock/ChartRun.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/HiddenClock/HiddenClock.cfg +4 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/HiddenClock/HiddenClock.tla +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/HiddenClock/chart.mmd +13 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/HiddenClock/graph.dot +12 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/HiddenClock/report.md +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/HiddenClock/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/HiddenClock/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/HiddenClock/verdict-1.out +72 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Login/ChartRun.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Login/Login.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Login/Login.tla +62 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Login/chart.mmd +27 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Login/graph.dot +40 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Login/report.md +7 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Login/sany.out +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Login/verdict-1.out +47 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Login/view.mjs +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/ChartRun.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/LoginGuarded.cfg +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/LoginGuarded.tla +64 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/chart.mmd +28 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/graph.dot +37 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/report.md +8 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/sany.out +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/verdict-1.out +47 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/view.mjs +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/ChartRun.out +60 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/LoginParallel.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/LoginParallel.tla +64 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/chart.mmd +44 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/graph.dot +58 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/report.md +17 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/sany.out +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-1.out +83 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-2.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/LoginParallel/view.mjs +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/ChartRun.out +60 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/MediaPlayer.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/MediaPlayer.tla +103 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/chart.mmd +43 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/graph.dot +93 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/report.md +14 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/sany.out +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-1.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-2.out +72 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/view.mjs +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/ChartRun.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/MediaPlayerFixed.cfg +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/MediaPlayerFixed.tla +100 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/chart.mmd +31 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/graph.dot +85 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/report.md +9 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/sany.out +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/verdict-1.out +47 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/view.mjs +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/ChartRun.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayer.tla +103 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayerProps.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayerProps.tla +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/chart.mmd +42 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/graph.dot +93 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/report.md +19 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-1.out +61 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-2.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-3.out +61 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-4.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-4.out +66 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-5.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-5.out +58 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-6.out +49 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/view.mjs +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/PickWorker/ChartRun.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/PickWorker/PickWorker.cfg +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/PickWorker/PickWorker.tla +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/PickWorker/chart.mmd +5 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/PickWorker/graph.dot +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/PickWorker/report.md +7 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/PickWorker/sany.out +5 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/PickWorker/verdict-1.out +70 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/ChartRun.out +61 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/Shadow.cfg +4 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/Shadow.tla +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/ShadowLib.tla +6 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/ShadowSub.tla +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/chart.mmd +9 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/graph.dot +16 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/report.md +8 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/sany.out +4 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/Shadow/verdict-1.out +65 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/ChartRun.out +59 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/SpacedNames.cfg +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/SpacedNames.tla +9 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/chart.mmd +23 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/graph.dot +17 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/report.md +15 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/sany.out +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-1.out +65 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-2.out +75 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/ChartRun.out +69 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/TwoPhase.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/TwoPhase.tla +75 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/chart.mmd +60 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/graph.dot +297 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/report.md +20 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/sany.out +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-1.out +95 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-2.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhase/view.mjs +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/ChartRun.out +57 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/TwoPhaseFixed.cfg +3 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/TwoPhaseFixed.tla +75 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/chart.mmd +37 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/graph.dot +223 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/report.md +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/sany.out +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/verdict-1.out +47 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/view.mjs +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/ChartRun.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/ChartRun.out +75 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/TypeGuard.cfg +5 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/TypeGuard.tla +11 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/chart.mmd +18 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/graph.dot +14 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/report.md +29 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-1.out +64 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-2.out +75 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/ChartRun.out +58 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/UserNoDeadlock.cfg +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/UserNoDeadlock.tla +8 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/chart.mmd +22 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/graph.dot +16 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/report.md +15 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-1.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-1.out +56 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-2.exit +1 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-2.out +77 -0
- package/plugins/pstack/skills/statechart/scripts/test/corpus.test.ts +415 -0
- package/plugins/pstack/skills/statechart/scripts/test/differential.test.ts +565 -0
- package/plugins/pstack/skills/statechart/scripts/test/grid/Grid.cfg +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/grid/Grid.tla +9 -0
- package/plugins/pstack/skills/statechart/scripts/test/grid/sany.out +2 -0
- package/plugins/pstack/skills/statechart/scripts/test/java.ts +63 -0
- package/plugins/pstack/skills/statechart/scripts/test/labels.ts +643 -0
- package/plugins/pstack/skills/statechart/scripts/test/messages.test.ts +227 -0
- package/plugins/pstack/skills/statechart/scripts/test/pipeline.test.ts +270 -0
- package/plugins/pstack/skills/statechart/scripts/test/plain-tlc.test.ts +255 -0
- package/plugins/pstack/skills/statechart/scripts/test/render.test.ts +81 -0
- package/plugins/pstack/skills/statechart/scripts/test/tlc-out.test.ts +90 -0
- package/plugins/pstack/skills/statechart/scripts/test/tlc.ts +158 -0
- package/plugins/pstack/skills/statechart/scripts/tsconfig.json +11 -0
- package/plugins/pstack/skills/statechart/scripts/worker.ts +35 -0
- package/plugins/pstack/skills/swarm/SKILL.md +58 -0
- package/plugins/pstack/skills/tdd/SKILL.md +41 -0
- package/plugins/pstack/skills/teach/SKILL.md +28 -0
- package/plugins/pstack/skills/technical-writing/SKILL.md +105 -0
- package/plugins/pstack/skills/thermo-nuclear-code-quality-review/SKILL.md +201 -0
- package/plugins/pstack/skills/thermo-nuclear-review/SKILL.md +50 -0
- package/plugins/pstack/skills/thermos/SKILL.md +40 -0
- package/plugins/pstack/skills/typescript-best-practices/SKILL.md +32 -0
- package/plugins/pstack/skills/typescript-best-practices/references/patterns.md +328 -0
- package/plugins/pstack/skills/unslop/SKILL.md +61 -0
- package/plugins/pstack/skills/what-did-i-get-done/SKILL.md +31 -0
- package/plugins/pstack/skills/why/SKILL.md +116 -0
- package/plugins/pstack/skills/why/references/epistemics.md +79 -0
- package/plugins/pstack/skills/why/references/investigator-prompt.md +86 -0
- package/plugins/pstack/skills/why/references/source-playbook.md +17 -0
- package/plugins/pstack/skills/why/references/sources/code-archaeology.md +51 -0
- package/plugins/pstack/skills/why/references/sources/databricks.md +70 -0
- package/plugins/pstack/skills/why/references/sources/datadog.md +97 -0
- package/plugins/pstack/skills/why/references/sources/incident-postmortem.md +5 -0
- package/plugins/pstack/skills/why/references/sources/linear.md +48 -0
- package/plugins/pstack/skills/why/references/sources/notion.md +55 -0
- package/plugins/pstack/skills/why/references/sources/sentry.md +66 -0
- package/plugins/pstack/skills/why/references/sources/slack.md +17 -0
- package/plugins/pstack/skills/why/references/synthesizer-prompt.md +130 -0
- package/tools/forks.json +398 -0
- package/tools/substitutions.json +646 -0
- package/tools/upstream.json +53 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
param([string] $Runtime)
|
|
2
|
+
$ErrorActionPreference = 'Stop'
|
|
3
|
+
|
|
4
|
+
function ReadHookFile([string] $name) {
|
|
5
|
+
[System.IO.File]::ReadAllText((Join-Path $PSScriptRoot $name), [System.Text.Encoding]::UTF8)
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
# -ccontains, -ceq, and EndsWith(string) compare by culture, which skips
|
|
9
|
+
# zero-width characters, so sheet text is compared ordinally, as sh and awk
|
|
10
|
+
# compare bytes. The runtime argument comes from the hooks files, not the
|
|
11
|
+
# sheet, so its switch and -ceq stay as they are.
|
|
12
|
+
function HasOrdinal([string[]] $list, [string] $item) {
|
|
13
|
+
$null -ne $list -and [Array]::IndexOf($list, $item) -ge 0
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
# muse-context.awk prints each file one line at a time, so its last line ends
|
|
17
|
+
# with a newline even when the file's does not.
|
|
18
|
+
function AsLines([string] $text) {
|
|
19
|
+
if ($text -and -not $text.EndsWith("`n", [System.StringComparison]::Ordinal)) { $text + "`n" } else { $text }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
# The sheet's role lines whose entries are all model IDs or aliases, each with
|
|
23
|
+
# an optional known effort, then a usable default effort, in models.json order.
|
|
24
|
+
# These are the lines sheet.awk accepts for muse-context.awk.
|
|
25
|
+
function MuseRoleLines([string[]] $lines) {
|
|
26
|
+
$models = [System.IO.File]::ReadAllText((Join-Path (Split-Path $PSScriptRoot -Parent) 'models.json'), [System.Text.Encoding]::UTF8) | ConvertFrom-Json
|
|
27
|
+
$efforts = @($models.efforts)
|
|
28
|
+
$value = [System.Collections.Generic.Dictionary[string, string]]::new([System.StringComparer]::Ordinal)
|
|
29
|
+
foreach ($line in $lines) {
|
|
30
|
+
$colon = $line.IndexOf(':')
|
|
31
|
+
if ($colon -lt 0 -or $line -cmatch '^[ \t]') { continue }
|
|
32
|
+
$value[$line.Substring(0, $colon).Trim([char[]]" `t")] = $line.Substring($colon + 1).Trim([char[]]" `t")
|
|
33
|
+
}
|
|
34
|
+
foreach ($role in $models.roles.role) {
|
|
35
|
+
if (-not $value.ContainsKey($role)) { continue }
|
|
36
|
+
$usable = $true
|
|
37
|
+
foreach ($raw in $value[$role].Split(',')) {
|
|
38
|
+
$entry = $raw.Trim([char[]]" `t")
|
|
39
|
+
if ($entry -cmatch '[ \t]+@([a-z]+)$' -and (HasOrdinal $efforts $Matches[1])) {
|
|
40
|
+
$entry = $entry.Substring(0, $entry.Length - $Matches[0].Length)
|
|
41
|
+
}
|
|
42
|
+
$usable = $usable -and $entry -cmatch '^[a-z0-9][a-z0-9.-]*$'
|
|
43
|
+
}
|
|
44
|
+
if ($usable) { "$($role): $($value[$role])" }
|
|
45
|
+
}
|
|
46
|
+
$effort = $value['default effort']
|
|
47
|
+
if (HasOrdinal (@('session') + $efforts) $effort) { "default effort: $effort" }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# Each runtime's hooks file passes its own name, as for session-start.sh.
|
|
51
|
+
switch -CaseSensitive ($Runtime) {
|
|
52
|
+
'codex' {
|
|
53
|
+
$sheetRoot = if ($env:CODEX_HOME) { $env:CODEX_HOME } else { Join-Path $env:USERPROFILE '.codex' }
|
|
54
|
+
$sheet = Join-Path $sheetRoot 'pstack-models.md'
|
|
55
|
+
$context = 'session-start-context.md'
|
|
56
|
+
}
|
|
57
|
+
'muse' {
|
|
58
|
+
# A Linux Muse under WSL can reach powershell.exe through interop, and
|
|
59
|
+
# the sh hook owns that session. Interop should run this script from a
|
|
60
|
+
# \\wsl UNC path, and passes MUSE_PLUGIN_ROOT only when WSLENV shares
|
|
61
|
+
# it; neither signal has been run under WSL.
|
|
62
|
+
if ($PSScriptRoot -like '\\wsl*' -or $env:MUSE_PLUGIN_ROOT -like '/*') {
|
|
63
|
+
exit 0
|
|
64
|
+
}
|
|
65
|
+
# Muse drops USERPROFILE from the hook environment.
|
|
66
|
+
$userProfile = if ($env:USERPROFILE) { $env:USERPROFILE } else { [System.Environment]::GetFolderPath('UserProfile') }
|
|
67
|
+
$sheetRoot = if ($env:XDG_CONFIG_HOME) { $env:XDG_CONFIG_HOME } else { Join-Path $userProfile '.config' }
|
|
68
|
+
$sheet = Join-Path (Join-Path $sheetRoot 'muse') 'pstack-models.md'
|
|
69
|
+
$context = 'session-start-muse.md'
|
|
70
|
+
}
|
|
71
|
+
default {
|
|
72
|
+
[Console]::Error.WriteLine("session-start.ps1: unknown runtime '$Runtime' (expected codex or muse)")
|
|
73
|
+
exit 2
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# A missing, unreadable, or undecodable sheet leaves $sheetLines null and the
|
|
78
|
+
# hook on, as session-start.sh does.
|
|
79
|
+
$sheetLines = $null
|
|
80
|
+
if (Test-Path -LiteralPath $sheet -PathType Leaf) {
|
|
81
|
+
try {
|
|
82
|
+
$bytes = [System.IO.File]::ReadAllBytes($sheet)
|
|
83
|
+
# Windows PowerShell 5.1's `>` writes UTF-16 LE with a byte-order mark.
|
|
84
|
+
# The decoder throws where iconv in read-sheet.sh fails: on an odd byte
|
|
85
|
+
# count or an unpaired surrogate.
|
|
86
|
+
$encoding = if ($bytes.Length -ge 2 -and $bytes[0] -eq 0xFF -and $bytes[1] -eq 0xFE) { [System.Text.UnicodeEncoding]::new($false, $false, $true) } else { [System.Text.UTF8Encoding]::new($false) }
|
|
87
|
+
$sheetLines = ($encoding.GetString($bytes) -replace '^\uFEFF', '') -split "`n" | ForEach-Object { $_ -replace "`r$", '' }
|
|
88
|
+
} catch { }
|
|
89
|
+
}
|
|
90
|
+
if (HasOrdinal $sheetLines 'session hook: off') {
|
|
91
|
+
exit 0
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
$output = ReadHookFile $context
|
|
95
|
+
# Muse reads stdout as plain context, so the sheet's checked role lines follow
|
|
96
|
+
# the mandate, as muse-context.awk prints them.
|
|
97
|
+
if ($Runtime -ceq 'muse') {
|
|
98
|
+
$output = AsLines $output
|
|
99
|
+
$roleLines = if ($null -eq $sheetLines) { @() } else { @(MuseRoleLines $sheetLines) }
|
|
100
|
+
if ($roleLines.Count -gt 0) {
|
|
101
|
+
$output += "`n" + (AsLines (ReadHookFile 'session-start-muse-sheet.md')) + (($roleLines -join "`n") + "`n")
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
|
|
105
|
+
[Console]::Write($output)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
set -eu
|
|
3
|
+
|
|
4
|
+
# Each runtime's hooks file passes its own name. MiniMax Code runs Claude
|
|
5
|
+
# Code's hooks file, so it is known by the MINIMAX_PLUGIN_ROOT it sets.
|
|
6
|
+
runtime="${1:-}"
|
|
7
|
+
if [ "$runtime" = claude ] && [ -n "${MINIMAX_PLUGIN_ROOT:-}" ]; then
|
|
8
|
+
runtime=minimax
|
|
9
|
+
fi
|
|
10
|
+
|
|
11
|
+
# Literal plugin paths, so a static reader of the hooks files can follow them.
|
|
12
|
+
case "$runtime" in
|
|
13
|
+
agy)
|
|
14
|
+
# Antigravity starts hooks in the plugin root.
|
|
15
|
+
sheet="$HOME/.gemini/config/pstack-models.md"
|
|
16
|
+
reader=./skills/setup-pstack/scripts/read-sheet.sh
|
|
17
|
+
;;
|
|
18
|
+
claude)
|
|
19
|
+
sheet="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/pstack-models.md"
|
|
20
|
+
reader="${CLAUDE_PLUGIN_ROOT}/skills/setup-pstack/scripts/read-sheet.sh"
|
|
21
|
+
;;
|
|
22
|
+
minimax)
|
|
23
|
+
# MiniMax Code withholds MINIMAX_DATA_DIR from hooks and its bash tool.
|
|
24
|
+
sheet="$HOME/.minimax/pstack-models.md"
|
|
25
|
+
reader="${MINIMAX_PLUGIN_ROOT}/skills/setup-pstack/scripts/read-sheet.sh"
|
|
26
|
+
;;
|
|
27
|
+
codex)
|
|
28
|
+
sheet="${CODEX_HOME:-$HOME/.codex}/pstack-models.md"
|
|
29
|
+
reader="${CLAUDE_PLUGIN_ROOT}/skills/setup-pstack/scripts/read-sheet.sh"
|
|
30
|
+
;;
|
|
31
|
+
copilot)
|
|
32
|
+
sheet="${COPILOT_HOME:-$HOME/.copilot}/pstack-models.md"
|
|
33
|
+
reader="${COPILOT_PLUGIN_ROOT}/skills/setup-pstack/scripts/read-sheet.sh"
|
|
34
|
+
;;
|
|
35
|
+
muse)
|
|
36
|
+
# On Windows the manifest's PowerShell hook owns Muse. `uname -s` names a
|
|
37
|
+
# Windows sh, busybox-w32's as Windows_NT, and OS covers one without uname.
|
|
38
|
+
case "$(uname -s 2>/dev/null || true)" in
|
|
39
|
+
MINGW*|MSYS*|CYGWIN*|Windows_NT) exit 0 ;;
|
|
40
|
+
esac
|
|
41
|
+
[ "${OS:-}" != Windows_NT ] || exit 0
|
|
42
|
+
sheet="${XDG_CONFIG_HOME:-$HOME/.config}/muse/pstack-models.md"
|
|
43
|
+
reader="${MUSE_PLUGIN_ROOT}/skills/setup-pstack/scripts/read-sheet.sh"
|
|
44
|
+
;;
|
|
45
|
+
*)
|
|
46
|
+
echo "session-start.sh: unknown runtime '${1:-}' (expected agy, claude, codex, copilot, or muse)" >&2
|
|
47
|
+
exit 2
|
|
48
|
+
;;
|
|
49
|
+
esac
|
|
50
|
+
|
|
51
|
+
# A sheet that cannot be decoded counts as missing, so injection stays on.
|
|
52
|
+
found=0
|
|
53
|
+
if [ -f "$sheet" ] && [ -r "$sheet" ] && normalized=$(sh "$reader" "$sheet"); then
|
|
54
|
+
found=1
|
|
55
|
+
else
|
|
56
|
+
normalized=
|
|
57
|
+
fi
|
|
58
|
+
if printf '%s\n' "$normalized" | grep -qx 'session hook: off'; then
|
|
59
|
+
[ "$runtime" != agy ] || printf '{}\n'
|
|
60
|
+
exit 0
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
if [ "$runtime" = agy ]; then
|
|
64
|
+
LC_ALL=C awk -f ./hooks/json.awk -f ./hooks/agy-context.awk ./hooks/session-start-agy.md
|
|
65
|
+
exit 0
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
# GitHub Copilot parses stdout as one JSON object. Its sheet sits outside
|
|
69
|
+
# Copilot's path sandbox, so the hook checks the sheet and adds its role lines
|
|
70
|
+
# to the mandate, and the agent never reads the file. The hooks directory goes
|
|
71
|
+
# through the environment, since awk expands backslash escapes in a -v value.
|
|
72
|
+
if [ "$runtime" = copilot ]; then
|
|
73
|
+
printf '%s\n' "$normalized" | PSTACK_HOOKS="${COPILOT_PLUGIN_ROOT}/hooks" LC_ALL=C awk -v found="$found" \
|
|
74
|
+
-f "${COPILOT_PLUGIN_ROOT}/hooks/json.awk" \
|
|
75
|
+
-f "${COPILOT_PLUGIN_ROOT}/skills/setup-pstack/scripts/sheet.awk" \
|
|
76
|
+
-f "${COPILOT_PLUGIN_ROOT}/hooks/copilot-context.awk"
|
|
77
|
+
exit 0
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# Muse reads stdout as plain additional context. Its sheet has no include
|
|
81
|
+
# mechanism, so the hook adds the sheet's known role lines to the Muse
|
|
82
|
+
# mandate itself, rebuilt from their checked values.
|
|
83
|
+
if [ "$runtime" = muse ]; then
|
|
84
|
+
printf '%s\n' "$normalized" | PSTACK_HOOKS="${MUSE_PLUGIN_ROOT}/hooks" LC_ALL=C awk -v found="$found" \
|
|
85
|
+
-f "${MUSE_PLUGIN_ROOT}/skills/setup-pstack/scripts/sheet.awk" \
|
|
86
|
+
-f "${MUSE_PLUGIN_ROOT}/hooks/muse-context.awk"
|
|
87
|
+
exit 0
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
if [ "$runtime" = minimax ]; then
|
|
91
|
+
cat "${MINIMAX_PLUGIN_ROOT}/hooks/session-start-minimax.md"
|
|
92
|
+
exit 0
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
cat "${CLAUDE_PLUGIN_ROOT}/hooks/session-start-context.md"
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tiers": {
|
|
3
|
+
"default": "opus",
|
|
4
|
+
"strongest": "fable",
|
|
5
|
+
"worker": "sonnet",
|
|
6
|
+
"panel": ["opus", "fable", "sonnet", "haiku"]
|
|
7
|
+
},
|
|
8
|
+
"efforts": ["low", "medium", "high", "xhigh", "max"],
|
|
9
|
+
"defaultEffort": "session",
|
|
10
|
+
"available": ["opus", "fable", "sonnet", "haiku"],
|
|
11
|
+
"roles": [
|
|
12
|
+
{ "role": "feature, refactoring", "models": "worker", "skill": "poteto-mode" },
|
|
13
|
+
{ "role": "bug-fix", "models": "default", "skill": "poteto-mode" },
|
|
14
|
+
{ "role": "perf-issue", "models": "default", "skill": "poteto-mode" },
|
|
15
|
+
{ "role": "hillclimb", "models": "default", "skill": "poteto-mode" },
|
|
16
|
+
{ "role": "judgment and prose", "models": "default", "skill": "poteto-mode" },
|
|
17
|
+
{ "role": "strongest judgment", "models": "strongest", "skill": "poteto-mode" },
|
|
18
|
+
{ "role": "how explorer", "models": "default", "skill": "how" },
|
|
19
|
+
{ "role": "how explainer", "models": "default", "skill": "how" },
|
|
20
|
+
{ "role": "why investigators", "models": "default", "skill": "why" },
|
|
21
|
+
{ "role": "why synthesizer", "models": "default", "skill": "why" },
|
|
22
|
+
{ "role": "reflect tooling", "models": "default", "skill": "reflect" },
|
|
23
|
+
{ "role": "reflect judgment, divergent, synthesizer", "models": "default", "skill": "reflect" },
|
|
24
|
+
{ "role": "arena runners", "models": "panel", "skill": "arena" },
|
|
25
|
+
{ "role": "arena cross-judge pool", "models": "panel", "skill": "arena" },
|
|
26
|
+
{ "role": "swarm workers", "models": "default", "skill": "swarm" },
|
|
27
|
+
{ "role": "architect runners", "models": "panel", "skill": "architect" },
|
|
28
|
+
{ "role": "interrogate reviewers", "models": "panel", "skill": "interrogate" },
|
|
29
|
+
{ "role": "thermos reviewers", "models": "default", "skill": "thermos" },
|
|
30
|
+
{ "role": "no-comments reviewer", "models": "default", "skill": "no-comments" }
|
|
31
|
+
],
|
|
32
|
+
"codex": {
|
|
33
|
+
"default": "gpt-6.1-sol",
|
|
34
|
+
"strongest": "gpt-6-astra",
|
|
35
|
+
"worker": "gpt-6.1-sol",
|
|
36
|
+
"panel": ["gpt-6-astra", "gpt-6.1-sol", "gpt-6.1-terra", "gpt-6-luna"]
|
|
37
|
+
},
|
|
38
|
+
"pi": {
|
|
39
|
+
"fallback": "anthropic",
|
|
40
|
+
"models": {
|
|
41
|
+
"anthropic": {
|
|
42
|
+
"opus": "anthropic/claude-opus-5-5",
|
|
43
|
+
"fable": "anthropic/claude-fable-5-1",
|
|
44
|
+
"sonnet": "anthropic/claude-sonnet-5-5",
|
|
45
|
+
"haiku": "anthropic/claude-haiku-5-5"
|
|
46
|
+
},
|
|
47
|
+
"openai": {
|
|
48
|
+
"opus": "openai/gpt-6.1-sol",
|
|
49
|
+
"fable": "openai/gpt-6-astra",
|
|
50
|
+
"sonnet": "openai/gpt-6.1-sol",
|
|
51
|
+
"haiku": "openai/gpt-6-luna"
|
|
52
|
+
},
|
|
53
|
+
"openai-codex": {
|
|
54
|
+
"opus": "openai-codex/gpt-6.1-sol",
|
|
55
|
+
"fable": "openai-codex/gpt-6-astra",
|
|
56
|
+
"sonnet": "openai-codex/gpt-6.1-sol",
|
|
57
|
+
"haiku": "openai-codex/gpt-6-luna"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"muse": {
|
|
62
|
+
"default": "muse-wonder-1.0",
|
|
63
|
+
"strongest": "muse-wonder-full-1.0",
|
|
64
|
+
"worker": "muse-spark-1.3",
|
|
65
|
+
"panel": ["muse-wonder-full-1.0", "muse-wonder-1.0", "muse-spark-1.3"]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
|
|
6
|
+
const root = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
7
|
+
const skills = join(root, "skills");
|
|
8
|
+
const mapping = join(root, "skills", "poteto-mode", "references", "omp-tools.md");
|
|
9
|
+
const mandate = readFileSync(join(root, "hooks", "session-start-context.md"), "utf8");
|
|
10
|
+
const marker = "[pstack OMP instructions]";
|
|
11
|
+
|
|
12
|
+
function instructions(routed) {
|
|
13
|
+
const adapter = `${marker}\nBefore following a pstack skill, read ${JSON.stringify(mapping)} for OMP tool and model mappings. Resolve every pstack:<name> skill in the following instructions by reading the installed plugin file at ${JSON.stringify(join(skills, "<name>", "SKILL.md"))}, substituting the named skill. For example, read ${JSON.stringify(join(skills, "poteto-mode", "SKILL.md"))} for pstack:poteto-mode. Do not resolve these names through a bare skill name, which can select a different installation.`;
|
|
14
|
+
return routed ? `${adapter}\n${mandate}` : adapter;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function routingOff() {
|
|
18
|
+
try {
|
|
19
|
+
const bytes = readFileSync(join(homedir(), ".omp", "pstack-models.md"));
|
|
20
|
+
const text = bytes[0] === 0xff && bytes[1] === 0xfe
|
|
21
|
+
? new TextDecoder("utf-16le", { fatal: true }).decode(bytes)
|
|
22
|
+
: bytes.toString("utf8").replace(/^\uFEFF/, "");
|
|
23
|
+
return text.split(/\r?\n/).includes("session hook: off");
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default function pstack(omp) {
|
|
30
|
+
omp.on("before_agent_start", (event, ctx) => {
|
|
31
|
+
if (event.systemPrompt.some((section) => section.includes(marker))) return;
|
|
32
|
+
return { systemPrompt: [...event.systemPrompt, instructions(ctx.agent.kind === "main" && !routingOff())] };
|
|
33
|
+
});
|
|
34
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { readFileSync, readdirSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
|
|
6
|
+
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
7
|
+
const skillsDir = join(root, "skills");
|
|
8
|
+
|
|
9
|
+
function readSkills() {
|
|
10
|
+
return readdirSync(skillsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => {
|
|
11
|
+
const path = join(skillsDir, entry.name, "SKILL.md");
|
|
12
|
+
const text = readFileSync(path, "utf8");
|
|
13
|
+
const match = text.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);
|
|
14
|
+
if (!match) throw new Error(`Missing skill frontmatter: ${path}`);
|
|
15
|
+
const metadata = Bun.YAML.parse(match[1]);
|
|
16
|
+
return { id: `pstack-${entry.name}`, name: metadata.name, description: metadata.description, path, content: text.slice(match[0].length) };
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function hookEnabled() {
|
|
21
|
+
const config = process.env.XDG_CONFIG_HOME || join(homedir(), ".config");
|
|
22
|
+
try {
|
|
23
|
+
const bytes = readFileSync(join(config, "opencode", "pstack-models.md"));
|
|
24
|
+
const text = bytes[0] === 0xff && bytes[1] === 0xfe
|
|
25
|
+
? new TextDecoder("utf-16le", { fatal: true, ignoreBOM: true }).decode(bytes)
|
|
26
|
+
: bytes.toString("utf8");
|
|
27
|
+
return !text.replace(/^\uFEFF/, "").split(/\r?\n/).includes("session hook: off");
|
|
28
|
+
} catch {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export default {
|
|
34
|
+
id: "pstack",
|
|
35
|
+
async setup(ctx) {
|
|
36
|
+
const skills = readSkills();
|
|
37
|
+
const mandate = readFileSync(join(root, "hooks", "session-start-opencode.md"), "utf8");
|
|
38
|
+
await ctx.skill.transform((editor) => {
|
|
39
|
+
for (const skill of skills) if (!editor.get(skill.id)) editor.add(skill);
|
|
40
|
+
});
|
|
41
|
+
await ctx.session.hook("context", async (event) => {
|
|
42
|
+
const session = await ctx.session.get({ sessionID: event.sessionID });
|
|
43
|
+
if (session.parentID || !hookEnabled()) return;
|
|
44
|
+
const installed = new Map((await ctx.skill.list()).data.map((skill) => [skill.id, skill.path]));
|
|
45
|
+
if (skills.some((skill) => installed.get(skill.id) !== skill.path)) return;
|
|
46
|
+
event.system.push({ type: "text", text: mandate });
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// The agent types the agent tool offers, read from agent files. Kept out of
|
|
2
|
+
// config.ts, which tools and tests import for its settings, so that only the
|
|
3
|
+
// extension's agent code loads Pi's package for its YAML reader.
|
|
4
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
5
|
+
import { basename, join } from "node:path";
|
|
6
|
+
import { parseFrontmatter } from "@earendil-works/pi-coding-agent";
|
|
7
|
+
|
|
8
|
+
import { type AgentDefinition, GENERAL_PURPOSE, type Settings, USER_AGENTS_DIR } from "./config.ts";
|
|
9
|
+
|
|
10
|
+
// Claude Code 2.1.310's retry for frontmatter that is not YAML: quote each
|
|
11
|
+
// unquoted top-level value that holds YAML syntax, so `description: Use for
|
|
12
|
+
// a: b` reads as text, and turn leading tabs into spaces. Claude Code also
|
|
13
|
+
// keeps a `[...]` value that parses as a list; the extension reads no list
|
|
14
|
+
// field from a file that needs the retry, so that case is left out.
|
|
15
|
+
function quoteAsText(yaml: string): string {
|
|
16
|
+
const lines = yaml.split("\n").map((line) => {
|
|
17
|
+
const kv = /^([a-zA-Z_-]+):\s+(\S.*)$/.exec(line);
|
|
18
|
+
if (!kv) return line;
|
|
19
|
+
const [, name, value] = kv;
|
|
20
|
+
const quoted = (value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"));
|
|
21
|
+
if (quoted || !/[{}[\]*&#!|>%@`]|: /.test(value)) return line;
|
|
22
|
+
return `${name}: "${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
|
|
23
|
+
});
|
|
24
|
+
return lines.join("\n").replace(/^\t+/gm, (tabs) => " ".repeat(tabs.length));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Claude Code's YAML reader, Bun's, keeps the last value of a repeated
|
|
28
|
+
// top-level field, where Pi's rejects the field. Drops each earlier entry with
|
|
29
|
+
// every line up to the next field, a list written at column 0 included.
|
|
30
|
+
function lastOfEachKey(yaml: string): string {
|
|
31
|
+
const lines = yaml.split("\n");
|
|
32
|
+
const keyOf = (line: string) => /^([^\s#][^:]*):(?:\s|$)/.exec(line)?.[1];
|
|
33
|
+
const last = new Map(lines.map((line, i) => [keyOf(line), i]));
|
|
34
|
+
let dropping = false;
|
|
35
|
+
return lines
|
|
36
|
+
.filter((line, i) => {
|
|
37
|
+
const name = keyOf(line);
|
|
38
|
+
if (name !== undefined) dropping = last.get(name) !== i;
|
|
39
|
+
return !dropping;
|
|
40
|
+
})
|
|
41
|
+
.join("\n");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Pi's YAML reader, then Claude Code's: first with a repeated field's last
|
|
45
|
+
// value, then with its retry. Frontmatter that fails all three throws.
|
|
46
|
+
export function frontmatter(text: string): { fields: Record<string, unknown>; body: string } {
|
|
47
|
+
let parsed: ReturnType<typeof parseFrontmatter>;
|
|
48
|
+
try {
|
|
49
|
+
parsed = parseFrontmatter(text);
|
|
50
|
+
} catch {
|
|
51
|
+
// parseFrontmatter only throws on a file that opens with ---, after any byte-order mark, which trimStart drops.
|
|
52
|
+
const lf = text.trimStart().replace(/\r\n?/g, "\n");
|
|
53
|
+
const rewritten = (rewrite: (yaml: string) => string) =>
|
|
54
|
+
parseFrontmatter(lf.replace(/^(---\n)([\s\S]*?)(\n---)/, (_, open: string, yaml: string, close: string) => open + rewrite(yaml) + close));
|
|
55
|
+
try {
|
|
56
|
+
parsed = rewritten(lastOfEachKey);
|
|
57
|
+
} catch {
|
|
58
|
+
parsed = rewritten((yaml) => quoteAsText(lastOfEachKey(yaml)));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return { fields: parsed.frontmatter, body: parsed.body.trim() };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// A field as text, trimmed as Claude Code reads it; an empty or missing one is undefined.
|
|
65
|
+
function scalar(value: unknown): string | undefined {
|
|
66
|
+
return value == null ? undefined : String(value).trim() || undefined;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function parseAgentFile(file: string, text: string): AgentDefinition {
|
|
70
|
+
const { fields, body } = frontmatter(text);
|
|
71
|
+
// Claude Code's `model: inherit` runs the agent on the parent's model, as no model does.
|
|
72
|
+
const model = scalar(fields.model);
|
|
73
|
+
return { file, description: scalar(fields.description), body, model: model !== "inherit" ? model : undefined, effort: scalar(fields.effort) };
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Claude Code registers each plugin agent file as pstack:<file name>, beside
|
|
77
|
+
// the built-in general-purpose type, which has no agent file, and a user agent
|
|
78
|
+
// file under its bare name. A user file only adds a type, never replaces one.
|
|
79
|
+
export function loadAgentTypes(settings: Pick<Settings, "pluginRoot" | "agentDir">): Map<string, AgentDefinition> {
|
|
80
|
+
// The built-in type's description is Claude Code's own.
|
|
81
|
+
const types = new Map<string, AgentDefinition>([
|
|
82
|
+
[GENERAL_PURPOSE, { body: "", description: "General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks. When you are searching for a keyword or file and are not confident that you will find the right match in the first few tries use this agent to perform the search for you." }],
|
|
83
|
+
]);
|
|
84
|
+
const dir = join(settings.pluginRoot, "agents");
|
|
85
|
+
if (existsSync(dir)) {
|
|
86
|
+
for (const file of readdirSync(dir).filter((f) => f.endsWith(".md")).sort()) {
|
|
87
|
+
const type = `pstack:${basename(file, ".md")}`;
|
|
88
|
+
const path = join(dir, file);
|
|
89
|
+
types.set(type, parseAgentFile(path, readFileSync(path, "utf8")));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
for (const [type, def] of userAgentFiles(join(settings.agentDir, USER_AGENTS_DIR))) {
|
|
93
|
+
if (!types.has(type)) types.set(type, def);
|
|
94
|
+
}
|
|
95
|
+
return types;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Each readable .md file in the user's folder, by bare name. A hidden file, such
|
|
99
|
+
// as a macOS ._ sidecar, a name with a colon, which Claude Code keeps for plugin
|
|
100
|
+
// agents, an entry that is not a readable file, and a folder that cannot be
|
|
101
|
+
// listed are skipped, so the user's folder never breaks the plugin's agent types.
|
|
102
|
+
function userAgentFiles(dir: string): [string, AgentDefinition][] {
|
|
103
|
+
let files: string[];
|
|
104
|
+
try {
|
|
105
|
+
files = readdirSync(dir).filter((f) => f.endsWith(".md") && !f.startsWith(".") && !f.includes(":")).sort();
|
|
106
|
+
} catch {
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
return files.flatMap((file): [string, AgentDefinition][] => {
|
|
110
|
+
const path = join(dir, file);
|
|
111
|
+
try {
|
|
112
|
+
return statSync(path).isFile() ? [[basename(file, ".md"), parseAgentFile(path, readFileSync(path, "utf8"))]] : [];
|
|
113
|
+
} catch {
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// What the model reads about an agent: tool results, completion notices, and
|
|
2
|
+
// the cap on text that stays inline. Pure functions of the persisted record
|
|
3
|
+
// and the path of the child's transcript and its live activity, which the
|
|
4
|
+
// caller looks up.
|
|
5
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
|
|
7
|
+
import type { AgentRecord, EndedRecord } from "./agents.ts";
|
|
8
|
+
import type { Activity } from "./child.ts";
|
|
9
|
+
|
|
10
|
+
const NOTICE_TYPE = "pstack-agent";
|
|
11
|
+
export const OUTPUT_CAP_BYTES = 50 * 1024;
|
|
12
|
+
|
|
13
|
+
export function truncateUtf8(text: string, cap: number): string {
|
|
14
|
+
const buf = Buffer.from(text, "utf8");
|
|
15
|
+
if (buf.length <= cap) return text;
|
|
16
|
+
let end = cap;
|
|
17
|
+
while (end > 0 && (buf[end] & 0xc0) === 0x80) end--;
|
|
18
|
+
return buf.subarray(0, end).toString("utf8");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function header({ agent, ...record }: EndedRecord, transcript: string | undefined): string {
|
|
22
|
+
const lines = [`agentId: ${agent.id}`, `description: ${agent.description}`, `status: ${record.status}`, `exit code: ${record.exitCode}`];
|
|
23
|
+
if (agent.worktree) {
|
|
24
|
+
const state = record.worktreeKept === false ? "no changes; removed" : `branch ${agent.worktree.branch}`;
|
|
25
|
+
lines.push(`worktree: ${agent.worktree.path} (${state})`);
|
|
26
|
+
}
|
|
27
|
+
if (transcript) lines.push(`transcript: ${transcript}`);
|
|
28
|
+
return lines.join("\n");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// The record's text is already cut to the cap, with the full copy on disk.
|
|
32
|
+
function report(record: EndedRecord): string {
|
|
33
|
+
if (!record.outputFile) return record.finalText;
|
|
34
|
+
return `${record.finalText}\n\n[Output truncated at ${OUTPUT_CAP_BYTES / 1024} KB. Full output: ${record.outputFile}]`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function resultText(record: EndedRecord, transcript: string | undefined): string {
|
|
38
|
+
return `${header(record, transcript)}\n\n${report(record)}`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
type Lookups = {
|
|
42
|
+
transcriptOf: (agent: AgentRecord["agent"]) => string | undefined;
|
|
43
|
+
activityOf: (agent: AgentRecord["agent"]) => Activity | undefined;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export function listing(records: AgentRecord[], { transcriptOf, activityOf }: Lookups): object[] {
|
|
47
|
+
return records.map(({ agent, ...r }) => ({
|
|
48
|
+
id: agent.id,
|
|
49
|
+
description: agent.description,
|
|
50
|
+
subagent_type: agent.subagentType,
|
|
51
|
+
model: agent.model ?? "(pi default)",
|
|
52
|
+
status: r.status,
|
|
53
|
+
pid: r.pid,
|
|
54
|
+
startedAt: agent.startedAt,
|
|
55
|
+
endedAt: r.status === "running" ? undefined : r.endedAt,
|
|
56
|
+
worktree: agent.worktree?.path,
|
|
57
|
+
sessionFile: transcriptOf(agent),
|
|
58
|
+
activity: r.status === "running" ? activityOf(agent) : undefined,
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const toolLine = ({ name, args }: NonNullable<Activity["tool"]>) => (args ? `${name}: ${args}` : name);
|
|
63
|
+
|
|
64
|
+
// The footer line: how many run, then the most recently active one.
|
|
65
|
+
export function statusText(running: { id: string; at: string; activity?: Activity }[]): string | undefined {
|
|
66
|
+
if (!running.length) return undefined;
|
|
67
|
+
const latest = running.reduce((a, b) => (b.at > a.at ? b : a));
|
|
68
|
+
const { tool, said } = latest.activity ?? {};
|
|
69
|
+
const doing = tool?.running ? toolLine(tool) : (said ?? (tool && toolLine(tool)));
|
|
70
|
+
return `pstack: ${running.length} running${doing ? ` · ${latest.id.slice(0, 8)} ${doing}` : ""}`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const shellPath = (path: string) => /^[A-Za-z0-9_./-]+$/.test(path) ? path : `'${path.replaceAll("'", "'\\''")}'`;
|
|
74
|
+
|
|
75
|
+
// What /pstack-agents shows the user: one block per agent.
|
|
76
|
+
export function agentsReport(records: AgentRecord[], { transcriptOf, activityOf }: Lookups): string {
|
|
77
|
+
if (!records.length) return "No pstack agents in this session.";
|
|
78
|
+
return records
|
|
79
|
+
.map(({ agent, status }) => {
|
|
80
|
+
const lines = [`${agent.id} ${status}: ${agent.description}`];
|
|
81
|
+
const activity = status === "running" ? activityOf(agent) : undefined;
|
|
82
|
+
if (activity?.tool) lines.push(`${activity.tool.running ? "now" : "last"}: ${toolLine(activity.tool)}`);
|
|
83
|
+
if (activity?.said) lines.push(`said: ${activity.said}`);
|
|
84
|
+
const transcript = transcriptOf(agent);
|
|
85
|
+
if (transcript) lines.push(`transcript: ${transcript}`, `read it: ${status === "running" ? "tail -f" : "pi --export"} ${shellPath(transcript)}`);
|
|
86
|
+
else lines.push("transcript: not written yet");
|
|
87
|
+
return lines.join("\n");
|
|
88
|
+
})
|
|
89
|
+
.join("\n\n");
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function noticeOf(record: EndedRecord, transcript: string | undefined): Parameters<ExtensionAPI["sendMessage"]>[0] {
|
|
93
|
+
return {
|
|
94
|
+
customType: NOTICE_TYPE,
|
|
95
|
+
content: `pstack agent finished.\n${header(record, transcript)}${record.outputFile ? `\nfull output: ${record.outputFile}` : ""}\n\n${report(record)}`,
|
|
96
|
+
display: true,
|
|
97
|
+
details: { agentId: record.agent.id, status: record.status, exitCode: record.exitCode, outputFile: record.outputFile },
|
|
98
|
+
};
|
|
99
|
+
}
|