@nanonets/graft 0.24.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -21
- package/dist/ask/ask.d.ts +8 -0
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +33 -12
- package/dist/ask/ask.js.map +1 -1
- package/dist/blast/render.js +1 -1
- package/dist/blast/render.js.map +1 -1
- package/dist/brand.js +1 -1
- package/dist/brand.js.map +1 -1
- package/dist/check/learning-edits.d.ts +18 -3
- package/dist/check/learning-edits.d.ts.map +1 -1
- package/dist/check/learning-edits.js +54 -10
- package/dist/check/learning-edits.js.map +1 -1
- package/dist/check/local-check.d.ts +7 -3
- package/dist/check/local-check.d.ts.map +1 -1
- package/dist/check/local-check.js +55 -11
- package/dist/check/local-check.js.map +1 -1
- package/dist/check/types.d.ts +11 -2
- package/dist/check/types.d.ts.map +1 -1
- package/dist/claude/format.d.ts +11 -7
- package/dist/claude/format.d.ts.map +1 -1
- package/dist/claude/format.js +50 -28
- package/dist/claude/format.js.map +1 -1
- package/dist/claude/hook-io.d.ts +44 -0
- package/dist/claude/hook-io.d.ts.map +1 -0
- package/dist/claude/hook-io.js +144 -0
- package/dist/claude/hook-io.js.map +1 -0
- package/dist/claude/hook-layers.d.ts +4 -2
- package/dist/claude/hook-layers.d.ts.map +1 -1
- package/dist/claude/hook-layers.js +21 -4
- package/dist/claude/hook-layers.js.map +1 -1
- package/dist/claude/hooks.d.ts +9 -32
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +154 -350
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.d.ts.map +1 -1
- package/dist/claude/init.js +56 -18
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/note-signals.d.ts +6 -0
- package/dist/claude/note-signals.d.ts.map +1 -1
- package/dist/claude/note-signals.js +14 -3
- package/dist/claude/note-signals.js.map +1 -1
- package/dist/claude/post-bash.d.ts +26 -0
- package/dist/claude/post-bash.d.ts.map +1 -0
- package/dist/claude/post-bash.js +191 -0
- package/dist/claude/post-bash.js.map +1 -0
- package/dist/claude/pre-bash-skills.d.ts +21 -0
- package/dist/claude/pre-bash-skills.d.ts.map +1 -0
- package/dist/claude/pre-bash-skills.js +253 -0
- package/dist/claude/pre-bash-skills.js.map +1 -0
- package/dist/claude/pre-bash.d.ts +50 -0
- package/dist/claude/pre-bash.d.ts.map +1 -0
- package/dist/claude/pre-bash.js +245 -0
- package/dist/claude/pre-bash.js.map +1 -0
- package/dist/claude/prompt-consent.d.ts +19 -0
- package/dist/claude/prompt-consent.d.ts.map +1 -0
- package/dist/claude/prompt-consent.js +14 -0
- package/dist/claude/prompt-consent.js.map +1 -0
- package/dist/claude/prompt-hook.d.ts +76 -0
- package/dist/claude/prompt-hook.d.ts.map +1 -0
- package/dist/claude/prompt-hook.js +303 -0
- package/dist/claude/prompt-hook.js.map +1 -0
- package/dist/claude/prompt-skills.d.ts +19 -0
- package/dist/claude/prompt-skills.d.ts.map +1 -0
- package/dist/claude/prompt-skills.js +305 -0
- package/dist/claude/prompt-skills.js.map +1 -0
- package/dist/claude/session-metrics.js +4 -4
- package/dist/claude/session-metrics.js.map +1 -1
- package/dist/claude/settings-merge.d.ts +10 -0
- package/dist/claude/settings-merge.d.ts.map +1 -1
- package/dist/claude/settings-merge.js +46 -17
- package/dist/claude/settings-merge.js.map +1 -1
- package/dist/claude/shim-template.d.ts.map +1 -1
- package/dist/claude/shim-template.js +86 -28
- package/dist/claude/shim-template.js.map +1 -1
- package/dist/claude/skill-template.d.ts +2 -0
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +53 -34
- package/dist/claude/skill-template.js.map +1 -1
- package/dist/claude/skill-use.d.ts +16 -0
- package/dist/claude/skill-use.d.ts.map +1 -0
- package/dist/claude/skill-use.js +78 -0
- package/dist/claude/skill-use.js.map +1 -0
- package/dist/claude/skills-hook-util.d.ts +25 -0
- package/dist/claude/skills-hook-util.d.ts.map +1 -0
- package/dist/claude/skills-hook-util.js +71 -0
- package/dist/claude/skills-hook-util.js.map +1 -0
- package/dist/claude/skills-wiring.d.ts +26 -0
- package/dist/claude/skills-wiring.d.ts.map +1 -0
- package/dist/claude/skills-wiring.js +110 -0
- package/dist/claude/skills-wiring.js.map +1 -0
- package/dist/claude/start-init.d.ts +13 -0
- package/dist/claude/start-init.d.ts.map +1 -0
- package/dist/claude/start-init.js +75 -0
- package/dist/claude/start-init.js.map +1 -0
- package/dist/claude/start-skills.d.ts +31 -0
- package/dist/claude/start-skills.d.ts.map +1 -0
- package/dist/claude/start-skills.js +274 -0
- package/dist/claude/start-skills.js.map +1 -0
- package/dist/claude/state.d.ts +19 -7
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/claude/state.js +59 -4
- package/dist/claude/state.js.map +1 -1
- package/dist/claude/stop-skills.d.ts +23 -0
- package/dist/claude/stop-skills.d.ts.map +1 -0
- package/dist/claude/stop-skills.js +233 -0
- package/dist/claude/stop-skills.js.map +1 -0
- package/dist/claude/stop.d.ts +23 -0
- package/dist/claude/stop.d.ts.map +1 -0
- package/dist/claude/stop.js +219 -0
- package/dist/claude/stop.js.map +1 -0
- package/dist/claude/tally.d.ts +29 -41
- package/dist/claude/tally.d.ts.map +1 -1
- package/dist/claude/tally.js +111 -165
- package/dist/claude/tally.js.map +1 -1
- package/dist/claude/walls-hook.d.ts +52 -0
- package/dist/claude/walls-hook.d.ts.map +1 -0
- package/dist/claude/walls-hook.js +279 -0
- package/dist/claude/walls-hook.js.map +1 -0
- package/dist/cli-epilogue.d.ts.map +1 -1
- package/dist/cli-epilogue.js +24 -14
- package/dist/cli-epilogue.js.map +1 -1
- package/dist/cli-meta.js +3 -3
- package/dist/cli-meta.js.map +1 -1
- package/dist/cli-picker.d.ts +24 -0
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +44 -11
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +475 -390
- package/dist/cli.js.map +1 -1
- package/dist/cloud/head-learnings.d.ts +13 -0
- package/dist/cloud/head-learnings.d.ts.map +1 -0
- package/dist/cloud/head-learnings.js +84 -0
- package/dist/cloud/head-learnings.js.map +1 -0
- package/dist/cloud/lookup-activity.d.ts +18 -0
- package/dist/cloud/lookup-activity.d.ts.map +1 -0
- package/dist/cloud/lookup-activity.js +56 -0
- package/dist/cloud/lookup-activity.js.map +1 -0
- package/dist/cloud/nudge.d.ts +15 -7
- package/dist/cloud/nudge.d.ts.map +1 -1
- package/dist/cloud/nudge.js +45 -33
- package/dist/cloud/nudge.js.map +1 -1
- package/dist/cloud/onboarding.d.ts +273 -0
- package/dist/cloud/onboarding.d.ts.map +1 -0
- package/dist/cloud/onboarding.js +612 -0
- package/dist/cloud/onboarding.js.map +1 -0
- package/dist/cloud/other-repos.d.ts +39 -0
- package/dist/cloud/other-repos.d.ts.map +1 -0
- package/dist/cloud/other-repos.js +137 -0
- package/dist/cloud/other-repos.js.map +1 -0
- package/dist/cloud/pair.d.ts +86 -0
- package/dist/cloud/pair.d.ts.map +1 -0
- package/dist/cloud/pair.js +270 -0
- package/dist/cloud/pair.js.map +1 -0
- package/dist/cloud/workspace-sync.d.ts +75 -11
- package/dist/cloud/workspace-sync.d.ts.map +1 -1
- package/dist/cloud/workspace-sync.js +409 -53
- package/dist/cloud/workspace-sync.js.map +1 -1
- package/dist/cloud/workspace.d.ts +95 -10
- package/dist/cloud/workspace.d.ts.map +1 -1
- package/dist/cloud/workspace.js +112 -9
- package/dist/cloud/workspace.js.map +1 -1
- package/dist/graph/native.d.ts +2 -0
- package/dist/graph/native.d.ts.map +1 -1
- package/dist/graph/native.js +29 -4
- package/dist/graph/native.js.map +1 -1
- package/dist/hosts/claude-global.d.ts +14 -0
- package/dist/hosts/claude-global.d.ts.map +1 -1
- package/dist/hosts/claude-global.js +39 -4
- package/dist/hosts/claude-global.js.map +1 -1
- package/dist/hosts/codex-hooks.d.ts +6 -0
- package/dist/hosts/codex-hooks.d.ts.map +1 -1
- package/dist/hosts/codex-hooks.js +89 -16
- package/dist/hosts/codex-hooks.js.map +1 -1
- package/dist/hosts/codex-trust.d.ts +28 -0
- package/dist/hosts/codex-trust.d.ts.map +1 -0
- package/dist/hosts/codex-trust.js +280 -0
- package/dist/hosts/codex-trust.js.map +1 -0
- package/dist/hosts/cursor-hooks.d.ts.map +1 -1
- package/dist/hosts/cursor-hooks.js +3 -1
- package/dist/hosts/cursor-hooks.js.map +1 -1
- package/dist/init/candidates.d.ts +60 -0
- package/dist/init/candidates.d.ts.map +1 -0
- package/dist/init/candidates.js +202 -0
- package/dist/init/candidates.js.map +1 -0
- package/dist/init/claude-call.d.ts +51 -0
- package/dist/init/claude-call.d.ts.map +1 -0
- package/dist/init/claude-call.js +199 -0
- package/dist/init/claude-call.js.map +1 -0
- package/dist/init/discover-worker.d.ts +18 -0
- package/dist/init/discover-worker.d.ts.map +1 -0
- package/dist/init/discover-worker.js +111 -0
- package/dist/init/discover-worker.js.map +1 -0
- package/dist/init/handover.d.ts +16 -0
- package/dist/init/handover.d.ts.map +1 -0
- package/dist/init/handover.js +92 -0
- package/dist/init/handover.js.map +1 -0
- package/dist/init/howtos.d.ts +20 -0
- package/dist/init/howtos.d.ts.map +1 -0
- package/dist/init/howtos.js +90 -0
- package/dist/init/howtos.js.map +1 -0
- package/dist/init/init-record.d.ts +134 -0
- package/dist/init/init-record.d.ts.map +1 -0
- package/dist/init/init-record.js +339 -0
- package/dist/init/init-record.js.map +1 -0
- package/dist/init/install-paths.d.ts +6 -0
- package/dist/init/install-paths.d.ts.map +1 -0
- package/dist/init/install-paths.js +87 -0
- package/dist/init/install-paths.js.map +1 -0
- package/dist/init/install-record.d.ts +21 -0
- package/dist/init/install-record.d.ts.map +1 -0
- package/dist/init/install-record.js +144 -0
- package/dist/init/install-record.js.map +1 -0
- package/dist/init/keep-answer.d.ts +43 -0
- package/dist/init/keep-answer.d.ts.map +1 -0
- package/dist/init/keep-answer.js +118 -0
- package/dist/init/keep-answer.js.map +1 -0
- package/dist/init/keep-gate.d.ts +30 -0
- package/dist/init/keep-gate.d.ts.map +1 -0
- package/dist/init/keep-gate.js +178 -0
- package/dist/init/keep-gate.js.map +1 -0
- package/dist/init/keep-list.d.ts +67 -0
- package/dist/init/keep-list.d.ts.map +1 -0
- package/dist/init/keep-list.js +232 -0
- package/dist/init/keep-list.js.map +1 -0
- package/dist/init/keep.d.ts +52 -0
- package/dist/init/keep.d.ts.map +1 -0
- package/dist/init/keep.js +393 -0
- package/dist/init/keep.js.map +1 -0
- package/dist/init/look-back-mine.d.ts +37 -0
- package/dist/init/look-back-mine.d.ts.map +1 -0
- package/dist/init/look-back-mine.js +215 -0
- package/dist/init/look-back-mine.js.map +1 -0
- package/dist/init/look-back.d.ts +81 -0
- package/dist/init/look-back.d.ts.map +1 -0
- package/dist/init/look-back.js +170 -0
- package/dist/init/look-back.js.map +1 -0
- package/dist/init/miners.d.ts +46 -0
- package/dist/init/miners.d.ts.map +1 -0
- package/dist/init/miners.js +141 -0
- package/dist/init/miners.js.map +1 -0
- package/dist/init/name-call.d.ts +37 -0
- package/dist/init/name-call.d.ts.map +1 -0
- package/dist/init/name-call.js +151 -0
- package/dist/init/name-call.js.map +1 -0
- package/dist/init/plain-file.d.ts +11 -0
- package/dist/init/plain-file.d.ts.map +1 -0
- package/dist/init/plain-file.js +83 -0
- package/dist/init/plain-file.js.map +1 -0
- package/dist/init/prefs.d.ts +70 -0
- package/dist/init/prefs.d.ts.map +1 -0
- package/dist/init/prefs.js +282 -0
- package/dist/init/prefs.js.map +1 -0
- package/dist/init/relay.d.ts +15 -0
- package/dist/init/relay.d.ts.map +1 -0
- package/dist/init/relay.js +15 -0
- package/dist/init/relay.js.map +1 -0
- package/dist/init/replay-runs.d.ts +121 -0
- package/dist/init/replay-runs.d.ts.map +1 -0
- package/dist/init/replay-runs.js +457 -0
- package/dist/init/replay-runs.js.map +1 -0
- package/dist/init/replay-tamper.d.ts +18 -0
- package/dist/init/replay-tamper.d.ts.map +1 -0
- package/dist/init/replay-tamper.js +87 -0
- package/dist/init/replay-tamper.js.map +1 -0
- package/dist/init/review-screen.d.ts +74 -0
- package/dist/init/review-screen.d.ts.map +1 -0
- package/dist/init/review-screen.js +258 -0
- package/dist/init/review-screen.js.map +1 -0
- package/dist/init/review-tty.d.ts +29 -0
- package/dist/init/review-tty.d.ts.map +1 -0
- package/dist/init/review-tty.js +218 -0
- package/dist/init/review-tty.js.map +1 -0
- package/dist/init/review.d.ts +12 -0
- package/dist/init/review.d.ts.map +1 -0
- package/dist/init/review.js +12 -0
- package/dist/init/review.js.map +1 -0
- package/dist/init/run.d.ts +87 -0
- package/dist/init/run.d.ts.map +1 -0
- package/dist/init/run.js +347 -0
- package/dist/init/run.js.map +1 -0
- package/dist/init/sessions.d.ts +63 -0
- package/dist/init/sessions.d.ts.map +1 -0
- package/dist/init/sessions.js +377 -0
- package/dist/init/sessions.js.map +1 -0
- package/dist/init/transcript.d.ts +81 -0
- package/dist/init/transcript.d.ts.map +1 -0
- package/dist/init/transcript.js +216 -0
- package/dist/init/transcript.js.map +1 -0
- package/dist/init/types.d.ts +139 -0
- package/dist/init/types.d.ts.map +1 -0
- package/dist/init/types.js +2 -0
- package/dist/init/types.js.map +1 -0
- package/dist/mcp/brains.d.ts +72 -0
- package/dist/mcp/brains.d.ts.map +1 -0
- package/dist/mcp/brains.js +220 -0
- package/dist/mcp/brains.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +40 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +7 -2
- package/dist/mcp/tools.js.map +1 -1
- package/dist/notes/cold-start.d.ts +5 -184
- package/dist/notes/cold-start.d.ts.map +1 -1
- package/dist/notes/cold-start.js +5 -575
- package/dist/notes/cold-start.js.map +1 -1
- package/dist/notes/edit-overlap.d.ts.map +1 -1
- package/dist/notes/edit-overlap.js +4 -1
- package/dist/notes/edit-overlap.js.map +1 -1
- package/dist/notes/every-repo.d.ts +18 -0
- package/dist/notes/every-repo.d.ts.map +1 -0
- package/dist/notes/every-repo.js +86 -0
- package/dist/notes/every-repo.js.map +1 -0
- package/dist/notes/guardrails.d.ts +8 -0
- package/dist/notes/guardrails.d.ts.map +1 -0
- package/dist/notes/guardrails.js +38 -0
- package/dist/notes/guardrails.js.map +1 -0
- package/dist/notes/lesson-index.d.ts +13 -0
- package/dist/notes/lesson-index.d.ts.map +1 -0
- package/dist/notes/lesson-index.js +135 -0
- package/dist/notes/lesson-index.js.map +1 -0
- package/dist/notes/linked-learnings.d.ts +8 -0
- package/dist/notes/linked-learnings.d.ts.map +1 -0
- package/dist/notes/linked-learnings.js +113 -0
- package/dist/notes/linked-learnings.js.map +1 -0
- package/dist/notes/notes.d.ts +8 -4
- package/dist/notes/notes.d.ts.map +1 -1
- package/dist/notes/notes.js +9 -7
- package/dist/notes/notes.js.map +1 -1
- package/dist/notes/pr-reviews.d.ts +4 -0
- package/dist/notes/pr-reviews.d.ts.map +1 -1
- package/dist/notes/pr-reviews.js +6 -5
- package/dist/notes/pr-reviews.js.map +1 -1
- package/dist/notes/replace.d.ts +14 -0
- package/dist/notes/replace.d.ts.map +1 -0
- package/dist/notes/replace.js +38 -0
- package/dist/notes/replace.js.map +1 -0
- package/dist/notes/repo-notes-dir.d.ts +2 -0
- package/dist/notes/repo-notes-dir.d.ts.map +1 -0
- package/dist/notes/repo-notes-dir.js +16 -0
- package/dist/notes/repo-notes-dir.js.map +1 -0
- package/dist/notes/repo-trail.d.ts +1 -1
- package/dist/notes/repo-trail.d.ts.map +1 -1
- package/dist/notes/repo-trail.js +24 -4
- package/dist/notes/repo-trail.js.map +1 -1
- package/dist/search/grep.d.ts.map +1 -1
- package/dist/search/grep.js +4 -2
- package/dist/search/grep.js.map +1 -1
- package/dist/search/user-regexp.d.ts +26 -0
- package/dist/search/user-regexp.d.ts.map +1 -0
- package/dist/search/user-regexp.js +150 -0
- package/dist/search/user-regexp.js.map +1 -0
- package/dist/skills/anchors-cli.d.ts +38 -0
- package/dist/skills/anchors-cli.d.ts.map +1 -0
- package/dist/skills/anchors-cli.js +279 -0
- package/dist/skills/anchors-cli.js.map +1 -0
- package/dist/skills/anchors-git.d.ts +29 -0
- package/dist/skills/anchors-git.d.ts.map +1 -0
- package/dist/skills/anchors-git.js +241 -0
- package/dist/skills/anchors-git.js.map +1 -0
- package/dist/skills/anchors-wide.d.ts +25 -0
- package/dist/skills/anchors-wide.d.ts.map +1 -0
- package/dist/skills/anchors-wide.js +481 -0
- package/dist/skills/anchors-wide.js.map +1 -0
- package/dist/skills/anchors.d.ts +32 -0
- package/dist/skills/anchors.d.ts.map +1 -0
- package/dist/skills/anchors.js +485 -0
- package/dist/skills/anchors.js.map +1 -0
- package/dist/skills/check-result.d.ts +26 -0
- package/dist/skills/check-result.d.ts.map +1 -0
- package/dist/skills/check-result.js +46 -0
- package/dist/skills/check-result.js.map +1 -0
- package/dist/skills/cli-skills-1b.d.ts +17 -0
- package/dist/skills/cli-skills-1b.d.ts.map +1 -0
- package/dist/skills/cli-skills-1b.js +166 -0
- package/dist/skills/cli-skills-1b.js.map +1 -0
- package/dist/skills/cli-skills-2.d.ts +35 -0
- package/dist/skills/cli-skills-2.d.ts.map +1 -0
- package/dist/skills/cli-skills-2.js +129 -0
- package/dist/skills/cli-skills-2.js.map +1 -0
- package/dist/skills/cli-skills-report-1b.d.ts +49 -0
- package/dist/skills/cli-skills-report-1b.d.ts.map +1 -0
- package/dist/skills/cli-skills-report-1b.js +191 -0
- package/dist/skills/cli-skills-report-1b.js.map +1 -0
- package/dist/skills/cli-skills-report.d.ts +86 -0
- package/dist/skills/cli-skills-report.d.ts.map +1 -0
- package/dist/skills/cli-skills-report.js +121 -0
- package/dist/skills/cli-skills-report.js.map +1 -0
- package/dist/skills/cli-skills.d.ts +30 -0
- package/dist/skills/cli-skills.d.ts.map +1 -0
- package/dist/skills/cli-skills.js +379 -0
- package/dist/skills/cli-skills.js.map +1 -0
- package/dist/skills/codex-sandbox.d.ts +6 -0
- package/dist/skills/codex-sandbox.d.ts.map +1 -0
- package/dist/skills/codex-sandbox.js +55 -0
- package/dist/skills/codex-sandbox.js.map +1 -0
- package/dist/skills/compile-split.d.ts +57 -0
- package/dist/skills/compile-split.d.ts.map +1 -0
- package/dist/skills/compile-split.js +550 -0
- package/dist/skills/compile-split.js.map +1 -0
- package/dist/skills/compile-version.d.ts +37 -0
- package/dist/skills/compile-version.d.ts.map +1 -0
- package/dist/skills/compile-version.js +56 -0
- package/dist/skills/compile-version.js.map +1 -0
- package/dist/skills/compile-waits.d.ts +12 -0
- package/dist/skills/compile-waits.d.ts.map +1 -0
- package/dist/skills/compile-waits.js +52 -0
- package/dist/skills/compile-waits.js.map +1 -0
- package/dist/skills/compile-words.d.ts +85 -0
- package/dist/skills/compile-words.d.ts.map +1 -0
- package/dist/skills/compile-words.js +445 -0
- package/dist/skills/compile-words.js.map +1 -0
- package/dist/skills/compile.d.ts +42 -0
- package/dist/skills/compile.d.ts.map +1 -0
- package/dist/skills/compile.js +505 -0
- package/dist/skills/compile.js.map +1 -0
- package/dist/skills/credit-facts.d.ts +8 -0
- package/dist/skills/credit-facts.d.ts.map +1 -0
- package/dist/skills/credit-facts.js +32 -0
- package/dist/skills/credit-facts.js.map +1 -0
- package/dist/skills/credit.d.ts +86 -0
- package/dist/skills/credit.d.ts.map +1 -0
- package/dist/skills/credit.js +259 -0
- package/dist/skills/credit.js.map +1 -0
- package/dist/skills/directive-words.d.ts +11 -0
- package/dist/skills/directive-words.d.ts.map +1 -0
- package/dist/skills/directive-words.js +33 -0
- package/dist/skills/directive-words.js.map +1 -0
- package/dist/skills/fidelity.d.ts +42 -0
- package/dist/skills/fidelity.d.ts.map +1 -0
- package/dist/skills/fidelity.js +138 -0
- package/dist/skills/fidelity.js.map +1 -0
- package/dist/skills/fold-gated.d.ts +3 -0
- package/dist/skills/fold-gated.d.ts.map +1 -0
- package/dist/skills/fold-gated.js +78 -0
- package/dist/skills/fold-gated.js.map +1 -0
- package/dist/skills/fold.d.ts +87 -0
- package/dist/skills/fold.d.ts.map +1 -0
- package/dist/skills/fold.js +348 -0
- package/dist/skills/fold.js.map +1 -0
- package/dist/skills/follow-learnings.d.ts +128 -0
- package/dist/skills/follow-learnings.d.ts.map +1 -0
- package/dist/skills/follow-learnings.js +278 -0
- package/dist/skills/follow-learnings.js.map +1 -0
- package/dist/skills/forget-notice.d.ts +44 -0
- package/dist/skills/forget-notice.d.ts.map +1 -0
- package/dist/skills/forget-notice.js +131 -0
- package/dist/skills/forget-notice.js.map +1 -0
- package/dist/skills/front-version.d.ts +12 -0
- package/dist/skills/front-version.d.ts.map +1 -0
- package/dist/skills/front-version.js +87 -0
- package/dist/skills/front-version.js.map +1 -0
- package/dist/skills/host-facts.d.ts +51 -0
- package/dist/skills/host-facts.d.ts.map +1 -0
- package/dist/skills/host-facts.js +134 -0
- package/dist/skills/host-facts.js.map +1 -0
- package/dist/skills/learning-steps.d.ts +43 -0
- package/dist/skills/learning-steps.d.ts.map +1 -0
- package/dist/skills/learning-steps.js +294 -0
- package/dist/skills/learning-steps.js.map +1 -0
- package/dist/skills/ledger.d.ts +43 -0
- package/dist/skills/ledger.d.ts.map +1 -0
- package/dist/skills/ledger.js +336 -0
- package/dist/skills/ledger.js.map +1 -0
- package/dist/skills/lesson-gate.d.ts +25 -0
- package/dist/skills/lesson-gate.d.ts.map +1 -0
- package/dist/skills/lesson-gate.js +316 -0
- package/dist/skills/lesson-gate.js.map +1 -0
- package/dist/skills/lessons.d.ts +60 -0
- package/dist/skills/lessons.d.ts.map +1 -0
- package/dist/skills/lessons.js +396 -0
- package/dist/skills/lessons.js.map +1 -0
- package/dist/skills/offer-answers.d.ts +20 -0
- package/dist/skills/offer-answers.d.ts.map +1 -0
- package/dist/skills/offer-answers.js +51 -0
- package/dist/skills/offer-answers.js.map +1 -0
- package/dist/skills/offer-drift.d.ts +35 -0
- package/dist/skills/offer-drift.d.ts.map +1 -0
- package/dist/skills/offer-drift.js +98 -0
- package/dist/skills/offer-drift.js.map +1 -0
- package/dist/skills/offer-lesson.d.ts +31 -0
- package/dist/skills/offer-lesson.d.ts.map +1 -0
- package/dist/skills/offer-lesson.js +123 -0
- package/dist/skills/offer-lesson.js.map +1 -0
- package/dist/skills/offer-lines.d.ts +40 -0
- package/dist/skills/offer-lines.d.ts.map +1 -0
- package/dist/skills/offer-lines.js +80 -0
- package/dist/skills/offer-lines.js.map +1 -0
- package/dist/skills/offer-moment.d.ts +102 -0
- package/dist/skills/offer-moment.d.ts.map +1 -0
- package/dist/skills/offer-moment.js +260 -0
- package/dist/skills/offer-moment.js.map +1 -0
- package/dist/skills/offer-repair.d.ts +36 -0
- package/dist/skills/offer-repair.d.ts.map +1 -0
- package/dist/skills/offer-repair.js +212 -0
- package/dist/skills/offer-repair.js.map +1 -0
- package/dist/skills/offer-retire.d.ts +53 -0
- package/dist/skills/offer-retire.d.ts.map +1 -0
- package/dist/skills/offer-retire.js +149 -0
- package/dist/skills/offer-retire.js.map +1 -0
- package/dist/skills/offer-update.d.ts +54 -0
- package/dist/skills/offer-update.d.ts.map +1 -0
- package/dist/skills/offer-update.js +115 -0
- package/dist/skills/offer-update.js.map +1 -0
- package/dist/skills/offer-words-1b.d.ts +32 -0
- package/dist/skills/offer-words-1b.d.ts.map +1 -0
- package/dist/skills/offer-words-1b.js +80 -0
- package/dist/skills/offer-words-1b.js.map +1 -0
- package/dist/skills/offer-words-2.d.ts +123 -0
- package/dist/skills/offer-words-2.d.ts.map +1 -0
- package/dist/skills/offer-words-2.js +194 -0
- package/dist/skills/offer-words-2.js.map +1 -0
- package/dist/skills/offer-words.d.ts +65 -0
- package/dist/skills/offer-words.d.ts.map +1 -0
- package/dist/skills/offer-words.js +205 -0
- package/dist/skills/offer-words.js.map +1 -0
- package/dist/skills/offers.d.ts +66 -0
- package/dist/skills/offers.d.ts.map +1 -0
- package/dist/skills/offers.js +284 -0
- package/dist/skills/offers.js.map +1 -0
- package/dist/skills/own-folder.d.ts +9 -0
- package/dist/skills/own-folder.d.ts.map +1 -0
- package/dist/skills/own-folder.js +36 -0
- package/dist/skills/own-folder.js.map +1 -0
- package/dist/skills/person.d.ts +34 -0
- package/dist/skills/person.d.ts.map +1 -0
- package/dist/skills/person.js +102 -0
- package/dist/skills/person.js.map +1 -0
- package/dist/skills/probe-clean.d.ts +9 -0
- package/dist/skills/probe-clean.d.ts.map +1 -0
- package/dist/skills/probe-clean.js +48 -0
- package/dist/skills/probe-clean.js.map +1 -0
- package/dist/skills/probes.d.ts +26 -0
- package/dist/skills/probes.d.ts.map +1 -0
- package/dist/skills/probes.js +225 -0
- package/dist/skills/probes.js.map +1 -0
- package/dist/skills/recall.d.ts +119 -0
- package/dist/skills/recall.d.ts.map +1 -0
- package/dist/skills/recall.js +370 -0
- package/dist/skills/recall.js.map +1 -0
- package/dist/skills/receipts.d.ts +44 -0
- package/dist/skills/receipts.d.ts.map +1 -0
- package/dist/skills/receipts.js +223 -0
- package/dist/skills/receipts.js.map +1 -0
- package/dist/skills/run-checkout.d.ts +4 -0
- package/dist/skills/run-checkout.d.ts.map +1 -0
- package/dist/skills/run-checkout.js +37 -0
- package/dist/skills/run-checkout.js.map +1 -0
- package/dist/skills/runblock.d.ts +47 -0
- package/dist/skills/runblock.d.ts.map +1 -0
- package/dist/skills/runblock.js +227 -0
- package/dist/skills/runblock.js.map +1 -0
- package/dist/skills/save-gate.d.ts +64 -0
- package/dist/skills/save-gate.d.ts.map +1 -0
- package/dist/skills/save-gate.js +354 -0
- package/dist/skills/save-gate.js.map +1 -0
- package/dist/skills/save-parse.d.ts +42 -0
- package/dist/skills/save-parse.d.ts.map +1 -0
- package/dist/skills/save-parse.js +172 -0
- package/dist/skills/save-parse.js.map +1 -0
- package/dist/skills/save-store.d.ts +12 -0
- package/dist/skills/save-store.d.ts.map +1 -0
- package/dist/skills/save-store.js +22 -0
- package/dist/skills/save-store.js.map +1 -0
- package/dist/skills/save-verify.d.ts +59 -0
- package/dist/skills/save-verify.d.ts.map +1 -0
- package/dist/skills/save-verify.js +390 -0
- package/dist/skills/save-verify.js.map +1 -0
- package/dist/skills/settings.d.ts +48 -0
- package/dist/skills/settings.d.ts.map +1 -0
- package/dist/skills/settings.js +155 -0
- package/dist/skills/settings.js.map +1 -0
- package/dist/skills/skill-diff.d.ts +40 -0
- package/dist/skills/skill-diff.d.ts.map +1 -0
- package/dist/skills/skill-diff.js +191 -0
- package/dist/skills/skill-diff.js.map +1 -0
- package/dist/skills/skill-file.d.ts +24 -0
- package/dist/skills/skill-file.d.ts.map +1 -0
- package/dist/skills/skill-file.js +97 -0
- package/dist/skills/skill-file.js.map +1 -0
- package/dist/skills/skill-rebuild.d.ts +27 -0
- package/dist/skills/skill-rebuild.d.ts.map +1 -0
- package/dist/skills/skill-rebuild.js +85 -0
- package/dist/skills/skill-rebuild.js.map +1 -0
- package/dist/skills/skillmd.d.ts +17 -0
- package/dist/skills/skillmd.d.ts.map +1 -0
- package/dist/skills/skillmd.js +219 -0
- package/dist/skills/skillmd.js.map +1 -0
- package/dist/skills/skills.d.ts +28 -8
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +106 -53
- package/dist/skills/skills.js.map +1 -1
- package/dist/skills/staleness.d.ts +27 -0
- package/dist/skills/staleness.d.ts.map +1 -0
- package/dist/skills/staleness.js +178 -0
- package/dist/skills/staleness.js.map +1 -0
- package/dist/skills/state.d.ts +36 -0
- package/dist/skills/state.d.ts.map +1 -0
- package/dist/skills/state.js +259 -0
- package/dist/skills/state.js.map +1 -0
- package/dist/skills/store-fs.d.ts +77 -0
- package/dist/skills/store-fs.d.ts.map +1 -0
- package/dist/skills/store-fs.js +194 -0
- package/dist/skills/store-fs.js.map +1 -0
- package/dist/skills/store-held.d.ts +44 -0
- package/dist/skills/store-held.d.ts.map +1 -0
- package/dist/skills/store-held.js +147 -0
- package/dist/skills/store-held.js.map +1 -0
- package/dist/skills/store.d.ts +73 -0
- package/dist/skills/store.d.ts.map +1 -0
- package/dist/skills/store.js +279 -0
- package/dist/skills/store.js.map +1 -0
- package/dist/skills/types.d.ts +8 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/update-gate.d.ts +36 -0
- package/dist/skills/update-gate.d.ts.map +1 -0
- package/dist/skills/update-gate.js +357 -0
- package/dist/skills/update-gate.js.map +1 -0
- package/dist/skills/update-plan.d.ts +40 -0
- package/dist/skills/update-plan.d.ts.map +1 -0
- package/dist/skills/update-plan.js +196 -0
- package/dist/skills/update-plan.js.map +1 -0
- package/dist/skills/validate.d.ts +11 -0
- package/dist/skills/validate.d.ts.map +1 -0
- package/dist/skills/validate.js +112 -0
- package/dist/skills/validate.js.map +1 -0
- package/dist/skills/value-line.d.ts +94 -0
- package/dist/skills/value-line.d.ts.map +1 -0
- package/dist/skills/value-line.js +355 -0
- package/dist/skills/value-line.js.map +1 -0
- package/dist/skills/versions-fs.d.ts +45 -0
- package/dist/skills/versions-fs.d.ts.map +1 -0
- package/dist/skills/versions-fs.js +234 -0
- package/dist/skills/versions-fs.js.map +1 -0
- package/dist/skills/versions.d.ts +56 -0
- package/dist/skills/versions.d.ts.map +1 -0
- package/dist/skills/versions.js +351 -0
- package/dist/skills/versions.js.map +1 -0
- package/dist/telemetry/contract.d.ts +15 -1
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +80 -11
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/gate.js +4 -4
- package/dist/telemetry/gate.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/notice.js +5 -5
- package/dist/telemetry/notice.js.map +1 -1
- package/dist/telemetry/queue.d.ts.map +1 -1
- package/dist/telemetry/queue.js +7 -7
- package/dist/telemetry/queue.js.map +1 -1
- package/dist/telemetry/track.d.ts.map +1 -1
- package/dist/telemetry/track.js +4 -3
- package/dist/telemetry/track.js.map +1 -1
- package/dist/trace/checks.d.ts +63 -0
- package/dist/trace/checks.d.ts.map +1 -0
- package/dist/trace/checks.js +495 -0
- package/dist/trace/checks.js.map +1 -0
- package/dist/trace/claude.d.ts +124 -0
- package/dist/trace/claude.d.ts.map +1 -0
- package/dist/trace/claude.js +303 -0
- package/dist/trace/claude.js.map +1 -0
- package/dist/trace/codex-exec.d.ts +22 -0
- package/dist/trace/codex-exec.d.ts.map +1 -0
- package/dist/trace/codex-exec.js +129 -0
- package/dist/trace/codex-exec.js.map +1 -0
- package/dist/trace/codex-meta.d.ts +23 -0
- package/dist/trace/codex-meta.d.ts.map +1 -0
- package/dist/trace/codex-meta.js +112 -0
- package/dist/trace/codex-meta.js.map +1 -0
- package/dist/trace/codex.d.ts +33 -0
- package/dist/trace/codex.d.ts.map +1 -0
- package/dist/trace/codex.js +485 -0
- package/dist/trace/codex.js.map +1 -0
- package/dist/trace/cursor.d.ts +16 -0
- package/dist/trace/cursor.d.ts.map +1 -0
- package/dist/trace/cursor.js +133 -0
- package/dist/trace/cursor.js.map +1 -0
- package/dist/trace/dialect.d.ts +43 -0
- package/dist/trace/dialect.d.ts.map +1 -0
- package/dist/trace/dialect.js +95 -0
- package/dist/trace/dialect.js.map +1 -0
- package/dist/trace/epochs.d.ts +10 -0
- package/dist/trace/epochs.d.ts.map +1 -0
- package/dist/trace/epochs.js +16 -0
- package/dist/trace/epochs.js.map +1 -0
- package/dist/trace/failure.d.ts +15 -0
- package/dist/trace/failure.d.ts.map +1 -0
- package/dist/trace/failure.js +69 -0
- package/dist/trace/failure.js.map +1 -0
- package/dist/trace/gate-file.d.ts +71 -0
- package/dist/trace/gate-file.d.ts.map +1 -0
- package/dist/trace/gate-file.js +329 -0
- package/dist/trace/gate-file.js.map +1 -0
- package/dist/trace/guard-fast.d.ts +22 -0
- package/dist/trace/guard-fast.d.ts.map +1 -0
- package/dist/trace/guard-fast.js +213 -0
- package/dist/trace/guard-fast.js.map +1 -0
- package/dist/trace/housekeeping.d.ts +5 -0
- package/dist/trace/housekeeping.d.ts.map +1 -0
- package/dist/trace/housekeeping.js +93 -0
- package/dist/trace/housekeeping.js.map +1 -0
- package/dist/trace/jobs.d.ts +52 -0
- package/dist/trace/jobs.d.ts.map +1 -0
- package/dist/trace/jobs.js +182 -0
- package/dist/trace/jobs.js.map +1 -0
- package/dist/trace/known-repo.d.ts +3 -0
- package/dist/trace/known-repo.d.ts.map +1 -0
- package/dist/trace/known-repo.js +55 -0
- package/dist/trace/known-repo.js.map +1 -0
- package/dist/trace/pool.d.ts +40 -0
- package/dist/trace/pool.d.ts.map +1 -0
- package/dist/trace/pool.js +154 -0
- package/dist/trace/pool.js.map +1 -0
- package/dist/trace/repairs.d.ts +27 -0
- package/dist/trace/repairs.d.ts.map +1 -0
- package/dist/trace/repairs.js +303 -0
- package/dist/trace/repairs.js.map +1 -0
- package/dist/trace/run-calls.d.ts +82 -0
- package/dist/trace/run-calls.d.ts.map +1 -0
- package/dist/trace/run-calls.js +331 -0
- package/dist/trace/run-calls.js.map +1 -0
- package/dist/trace/run-join.d.ts +20 -0
- package/dist/trace/run-join.d.ts.map +1 -0
- package/dist/trace/run-join.js +99 -0
- package/dist/trace/run-join.js.map +1 -0
- package/dist/trace/run-sheets.d.ts +26 -0
- package/dist/trace/run-sheets.d.ts.map +1 -0
- package/dist/trace/run-sheets.js +145 -0
- package/dist/trace/run-sheets.js.map +1 -0
- package/dist/trace/run-turns.d.ts +24 -0
- package/dist/trace/run-turns.d.ts.map +1 -0
- package/dist/trace/run-turns.js +67 -0
- package/dist/trace/run-turns.js.map +1 -0
- package/dist/trace/run-verdict.d.ts +24 -0
- package/dist/trace/run-verdict.d.ts.map +1 -0
- package/dist/trace/run-verdict.js +176 -0
- package/dist/trace/run-verdict.js.map +1 -0
- package/dist/trace/runs.d.ts +54 -0
- package/dist/trace/runs.d.ts.map +1 -0
- package/dist/trace/runs.js +501 -0
- package/dist/trace/runs.js.map +1 -0
- package/dist/trace/skill-session.d.ts +64 -0
- package/dist/trace/skill-session.d.ts.map +1 -0
- package/dist/trace/skill-session.js +232 -0
- package/dist/trace/skill-session.js.map +1 -0
- package/dist/trace/tamper.d.ts +12 -0
- package/dist/trace/tamper.d.ts.map +1 -0
- package/dist/trace/tamper.js +405 -0
- package/dist/trace/tamper.js.map +1 -0
- package/dist/trace/typed.d.ts +30 -0
- package/dist/trace/typed.d.ts.map +1 -0
- package/dist/trace/typed.js +132 -0
- package/dist/trace/typed.js.map +1 -0
- package/dist/trace/wall-state.d.ts +86 -0
- package/dist/trace/wall-state.d.ts.map +1 -0
- package/dist/trace/wall-state.js +279 -0
- package/dist/trace/wall-state.js.map +1 -0
- package/dist/trace/walls.d.ts +40 -0
- package/dist/trace/walls.d.ts.map +1 -0
- package/dist/trace/walls.js +318 -0
- package/dist/trace/walls.js.map +1 -0
- package/dist/upkeep-run.d.ts.map +1 -1
- package/dist/upkeep-run.js +2 -23
- package/dist/upkeep-run.js.map +1 -1
- package/dist/upkeep.d.ts.map +1 -1
- package/dist/upkeep.js +2 -3
- package/dist/upkeep.js.map +1 -1
- package/dist/util/private-fs.d.ts +6 -0
- package/dist/util/private-fs.d.ts.map +1 -1
- package/dist/util/private-fs.js +9 -1
- package/dist/util/private-fs.js.map +1 -1
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js +17 -3
- package/dist/util/state.js.map +1 -1
- package/dist/vendor/tree-sitter-swift/LICENSE +21 -0
- package/dist/vendor/tree-sitter-swift/node-types.json +30694 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/darwin-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/darwin-x64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/linux-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/linux-x64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/win32-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/win32-x64/tree-sitter-swift.node +0 -0
- package/package.json +6 -3
- package/scripts/stamp-telemetry-key.mjs +8 -5
- package/scripts/vendor-grammars.mjs +35 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The skills part of PostToolUse and PostToolUseFailure on Bash (design 3.4).
|
|
3
|
+
*
|
|
4
|
+
* Claude Code fires PostToolUse for a Bash call that worked and
|
|
5
|
+
* PostToolUseFailure for one that failed, never PostToolUse (D34). Each
|
|
6
|
+
* leaves a mark for a call whose result the transcript may not hold yet
|
|
7
|
+
* (`<id>.post.jsonl`, taken by the next catch-up; the transcript's result
|
|
8
|
+
* wins when it arrives); a check's mark carries the output's tail, cut by
|
|
9
|
+
* the fold's own `cleanTail`, so a check read from a mark reads as it will
|
|
10
|
+
* from the transcript. Marks are for Bash only: MCP results (a deploy read)
|
|
11
|
+
* come from the transcript.
|
|
12
|
+
*
|
|
13
|
+
* The asked call's PostToolUse is the person's yes to a step that can't be
|
|
14
|
+
* undone (the group's later steps are covered); a failure never approves,
|
|
15
|
+
* since a refused ask arrives the same way.
|
|
16
|
+
*
|
|
17
|
+
* Where the host shows the offer best as PostToolUse context (`offerChannel`
|
|
18
|
+
* 'post-tool'), the passing check of a job's 3rd day brings it; Stop counts
|
|
19
|
+
* it shown only when the reply ends with it (3.5 step 6).
|
|
20
|
+
*
|
|
21
|
+
* 1b (3.4 step 1, recall half): a result whose error is in the wall catalog
|
|
22
|
+
* gets the catalog's fix as context, from Trail (D88), plus what fixed it
|
|
23
|
+
* here before when a kept lesson worked in 2 epochs; on PostToolUseFailure
|
|
24
|
+
* only where the host reads that context (`failureContext`). Nothing is
|
|
25
|
+
* written for it (R34): Stop records the hit from the transcript.
|
|
26
|
+
*
|
|
27
|
+
* Codex (phase 2, 3.4): PostToolUse fires on every exit, with `tool_response`
|
|
28
|
+
* the text the model sees, so `codexPostBash` reads the exit from its header
|
|
29
|
+
* (`codexFailed`) and hands on the body as the rollout reader shows it; a text
|
|
30
|
+
* with no exit header writes no mark (P34). Each host's own facts decide what
|
|
31
|
+
* context goes out (`postToolContext` on PostToolUse, `failureContext` on
|
|
32
|
+
* PostToolUseFailure).
|
|
33
|
+
*/
|
|
34
|
+
import { existsSync } from 'node:fs';
|
|
35
|
+
import { appendPostMark, gateFilePath, markApproved, skillsOnFast } from '../trace/gate-file.js';
|
|
36
|
+
import { checkFamilyOf } from '../trace/checks.js';
|
|
37
|
+
import { cleanTail } from '../trace/run-calls.js';
|
|
38
|
+
import { currentRun, skillsGate, withSkillSession } from '../trace/skill-session.js';
|
|
39
|
+
import { checkedSuccess, runHelpers, writeRunSheet } from '../trace/runs.js';
|
|
40
|
+
import { trailNow } from '../skills/settings.js';
|
|
41
|
+
import { hostFacts } from '../skills/host-facts.js';
|
|
42
|
+
import { detectHost } from '../trace/host.js';
|
|
43
|
+
import { codexExitOf, outputBody, outputText } from '../trace/codex-exec.js';
|
|
44
|
+
import { offerDue } from '../skills/offer-moment.js';
|
|
45
|
+
import { postToolOfferText } from '../skills/offers.js';
|
|
46
|
+
import { hookError } from './skills-hook-util.js';
|
|
47
|
+
import { notePool } from './stop-skills.js';
|
|
48
|
+
import { wallContextText, wallOfResult } from './walls-hook.js';
|
|
49
|
+
/** PostToolUse(Bash) with `failed` false; PostToolUseFailure(Bash) with `failed` true. Never throws. */
|
|
50
|
+
export function postBashSkills(input, dir, env = process.env, failed = false) {
|
|
51
|
+
return postBashRun(input, dir, env, failed).out;
|
|
52
|
+
}
|
|
53
|
+
/** 3.4: 1a's marks and post-tool offer, then 1b's wall fix. `marked` or a wall hit means it did work (the caller times those). */
|
|
54
|
+
export function postBashRun(input, dir, env = process.env, failed = false) {
|
|
55
|
+
const r = marksAndOffer(input, dir, env, failed);
|
|
56
|
+
const sent = [];
|
|
57
|
+
const wall = wallPart(input, dir, env, failed, sent);
|
|
58
|
+
const context = [r.out.context, wall].filter(Boolean).join('\n');
|
|
59
|
+
return { out: context ? { ...r.out, context } : r.out, marked: r.marked, sent };
|
|
60
|
+
}
|
|
61
|
+
/** 3.4 step 1 (1b): the fix line for a wall hit, and `wall_hit` telemetry. '' when none, or on any throw. */
|
|
62
|
+
function wallPart(input, dir, env, failed, sent) {
|
|
63
|
+
try {
|
|
64
|
+
if (!skillsOnFast(env) || input?.tool_name !== 'Bash')
|
|
65
|
+
return '';
|
|
66
|
+
const command = typeof input.tool_input?.command === 'string' ? input.tool_input.command : '';
|
|
67
|
+
// The patterns first (8 KB at most); the gate only for a hit.
|
|
68
|
+
const cls = command ? wallOfResult(resultText(input, failed), command, failed) : null;
|
|
69
|
+
if (!cls)
|
|
70
|
+
return '';
|
|
71
|
+
const g = skillsGate(input, dir, env);
|
|
72
|
+
if (!g.ok)
|
|
73
|
+
return '';
|
|
74
|
+
const { text, hadLesson } = wallContextText(cls, { checkout: g.ctx.checkout, repoKey: g.ctx.repoKey, env, now: g.ctx.now });
|
|
75
|
+
sent.push(['wall_hit', { class: cls, had_lesson: String(hadLesson) }]);
|
|
76
|
+
// Where the host doesn't read this event's context, nothing is appended (P23; 2.10: Codex's PostToolUse until HC1).
|
|
77
|
+
return reachesModel(input, env, failed) ? text : '';
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
hookError(failed ? 'post-bash-fail' : 'post-bash', e, env);
|
|
81
|
+
return '';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** 1a's 3.4 steps 1 to 4. */
|
|
85
|
+
function marksAndOffer(input, dir, env, failed) {
|
|
86
|
+
try {
|
|
87
|
+
// 1.
|
|
88
|
+
if (!skillsOnFast(env) || input?.tool_name !== 'Bash')
|
|
89
|
+
return { out: {}, marked: false };
|
|
90
|
+
const sid = [input.session_id, input.sessionId].find((v) => typeof v === 'string' && v !== '');
|
|
91
|
+
const id = typeof input.tool_use_id === 'string' ? input.tool_use_id : '';
|
|
92
|
+
const command = typeof input.tool_input?.command === 'string' ? input.tool_input.command : '';
|
|
93
|
+
if (!sid || !id)
|
|
94
|
+
return { out: {}, marked: false };
|
|
95
|
+
const now = trailNow(env);
|
|
96
|
+
const gate = existsSync(gateFilePath(sid, env));
|
|
97
|
+
// 2. The asked call ran: the person said yes.
|
|
98
|
+
if (!failed && gate)
|
|
99
|
+
markApproved(sid, id, now, env);
|
|
100
|
+
// 3.
|
|
101
|
+
const family = command ? checkFamilyOf(command, null) : null;
|
|
102
|
+
if (!gate && family === null)
|
|
103
|
+
return { out: {}, marked: false };
|
|
104
|
+
const tail = family === null ? undefined : cleanTail(resultText(input, failed));
|
|
105
|
+
appendPostMark(sid, { id, at: now.toISOString(), failed, ...(tail ? { tail } : {}) }, env);
|
|
106
|
+
// 4.
|
|
107
|
+
if (failed || family === null || factsOf(input, env).offerChannel !== 'post-tool' || !reachesModel(input, env, failed))
|
|
108
|
+
return { out: {}, marked: true };
|
|
109
|
+
return { out: postToolOffer(input, dir, env), marked: true };
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
hookError(failed ? 'post-bash-fail' : 'post-bash', e, env);
|
|
113
|
+
return { out: {}, marked: false };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** The facts of the host that sent `input` (c7: Codex's for a Codex payload, Claude Code's otherwise). */
|
|
117
|
+
function factsOf(input, env) {
|
|
118
|
+
return hostFacts(env, detectHost(input).host);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* This event's context reaches the model: PostToolUseFailure's where `failureContext`, PostToolUse's where
|
|
122
|
+
* `postToolContext`. Codex has no PostToolUseFailure: its failed calls come on PostToolUse.
|
|
123
|
+
*/
|
|
124
|
+
function reachesModel(input, env, failed) {
|
|
125
|
+
const host = detectHost(input).host;
|
|
126
|
+
const facts = hostFacts(env, host);
|
|
127
|
+
return failed && host !== 'codex' ? facts.failureContext : facts.postToolContext;
|
|
128
|
+
}
|
|
129
|
+
/** 1.7: whether a Codex shell output failed, from its header only; null when the text names no exit (P34). */
|
|
130
|
+
export function codexFailed(toolResponse) {
|
|
131
|
+
const exit = codexExitOf(outputText(toolResponse));
|
|
132
|
+
return exit && 'code' in exit ? exit.code !== 0 : null;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 3.4, Codex: the exit from the output's header, then 1a's marks and 1b's wall part with the body as the rollout
|
|
136
|
+
* reader shows it (`Exit code N` in front when not 0, as Claude Code writes a failed result). Null when the text
|
|
137
|
+
* names no exit: nothing is written and the rollout's result is the only one (P34).
|
|
138
|
+
*/
|
|
139
|
+
export function codexPostBash(input, dir, env = process.env) {
|
|
140
|
+
const failed = codexFailed(input?.tool_response);
|
|
141
|
+
if (failed === null)
|
|
142
|
+
return null;
|
|
143
|
+
const text = outputText(input.tool_response);
|
|
144
|
+
const exit = codexExitOf(text);
|
|
145
|
+
const body = outputBody(text);
|
|
146
|
+
const shown = failed ? `Exit code ${exit.code}\n${body}` : body;
|
|
147
|
+
const as = failed ? { ...input, tool_response: undefined, error: shown } : { ...input, tool_response: shown };
|
|
148
|
+
return postBashRun(as, dir, env, failed);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* What the call printed, as the transcript's result holds it: stdout then stderr joined with nothing, which is how
|
|
152
|
+
* Claude Code writes a Bash result (its stderr brings its own line break; checked on local transcripts, g7 review),
|
|
153
|
+
* or the error text (PostToolUseFailure's `error`).
|
|
154
|
+
*/
|
|
155
|
+
export function resultText(input, failed) {
|
|
156
|
+
if (failed)
|
|
157
|
+
return typeof input?.error === 'string' ? input.error : '';
|
|
158
|
+
const r = input?.tool_response;
|
|
159
|
+
if (typeof r === 'string')
|
|
160
|
+
return r;
|
|
161
|
+
if (!r || typeof r !== 'object')
|
|
162
|
+
return '';
|
|
163
|
+
return [r.stdout, r.stderr].filter((t) => typeof t === 'string').join('');
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* 3.4 step 4: the open run, with this mark folded, checks out (the turn's end is judged at Stop, when the reply is
|
|
167
|
+
* known); its sheet and today's pool day are written, and when 4.12 holds the offer waits, not yet shown.
|
|
168
|
+
*/
|
|
169
|
+
function postToolOffer(input, dir, env) {
|
|
170
|
+
const g = skillsGate(input, dir, env);
|
|
171
|
+
if (!g.ok || !g.ctx.learn)
|
|
172
|
+
return {};
|
|
173
|
+
const ctx = g.ctx;
|
|
174
|
+
const text = withSkillSession(ctx, { catchUp: true }, (st) => {
|
|
175
|
+
const run = currentRun(st);
|
|
176
|
+
if (!run || st.pendingOffer || !run.calls.length)
|
|
177
|
+
return null;
|
|
178
|
+
const verdict = checkedSuccess({ ...run, end: 'done' }, null);
|
|
179
|
+
if (!verdict.checked)
|
|
180
|
+
return null;
|
|
181
|
+
const sheet = writeRunSheet(run, verdict, { host: ctx.host, tier: ctx.tier, sessionHash: ctx.sessionHash, helpers: runHelpers(run) }, env);
|
|
182
|
+
notePool(run, ctx);
|
|
183
|
+
const due = offerDue({ run, verdict, sheet, st, ctx, channel: 'post-tool' });
|
|
184
|
+
if (!due.due)
|
|
185
|
+
return null;
|
|
186
|
+
st.pendingOffer = due.offer;
|
|
187
|
+
return postToolOfferText(due.offer);
|
|
188
|
+
});
|
|
189
|
+
return text ? { context: text } : {};
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=post-bash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-bash.js","sourceRoot":"","sources":["../../src/claude/post-bash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { shellWords } from '../skills/risk.js';
|
|
2
|
+
import type { PreBashDecision } from './pre-bash.js';
|
|
3
|
+
/** save-parse.ts SKILLS_ADD_RE, kept here so the fast path needn't load the save gate to test for it (a test holds them equal). */
|
|
4
|
+
export declare const SKILLS_ADD: RegExp;
|
|
5
|
+
/** save-parse.ts SAVE_GATE_RE (`skills add`, `skills lesson`, phase 2 `skills update`), kept here for the same reason (a test holds them equal). */
|
|
6
|
+
export declare const SAVE_GATE: RegExp;
|
|
7
|
+
/** How long a yes to the first step of a group covers its later steps. */
|
|
8
|
+
export declare const APPROVED_MS: number;
|
|
9
|
+
/** directive-words.ts FROM_TRAIL's who, kept here so the fast path loads nothing more (a test holds them equal). */
|
|
10
|
+
export declare const TRAIL_WHO = "Trail, the tool this person installed to keep commands that worked as skills,";
|
|
11
|
+
/** The words the shell runs, as the agent guard reads them (risk.ts shellWords): `tr''ail sk"ills" on`, a line continuation joined. */
|
|
12
|
+
export declare const guardWords: typeof shellWords;
|
|
13
|
+
/** 3.3. `command` is the shell call's command when the caller has it (any host's shape); else Claude Code's `tool_input.command`. */
|
|
14
|
+
export declare function preBashSkills(input: any, dir: string, env?: NodeJS.ProcessEnv, command?: string): Promise<PreBashDecision | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Claude Code's own prompt reaches the person (D17): an interactive entrypoint (headless is decided by
|
|
17
|
+
* CLAUDE_CODE_ENTRYPOINT, as skillsGate decides it, D16, unless the lab's switch, D26), a permission mode the host
|
|
18
|
+
* asks in, and Claude Code itself.
|
|
19
|
+
*/
|
|
20
|
+
export declare function canAskHere(input: any, env?: NodeJS.ProcessEnv): boolean;
|
|
21
|
+
//# sourceMappingURL=pre-bash-skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-bash-skills.d.ts","sourceRoot":"","sources":["../../src/claude/pre-bash-skills.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAmD,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIhG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIrD,mIAAmI;AACnI,eAAO,MAAM,UAAU,QAAqB,CAAC;AAC7C,oJAAoJ;AACpJ,eAAO,MAAM,SAAS,QAAuC,CAAC;AAC9D,0EAA0E;AAC1E,eAAO,MAAM,WAAW,QAAiB,CAAC;AAE1C,oHAAoH;AACpH,eAAO,MAAM,SAAS,kFAAkF,CAAC;AAIzG,uIAAuI;AACvI,eAAO,MAAM,UAAU,mBAAa,CAAC;AAErC,qIAAqI;AACrI,wBAAsB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA2BpJ;AA8CD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAOpF"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The skills part of PreToolUse on Bash (design 3.3): the agent guard, the
|
|
3
|
+
* save gate, and the one ask before a step of a live run block that can't
|
|
4
|
+
* be undone.
|
|
5
|
+
*
|
|
6
|
+
* `pre-bash.ts` loads this file only when its prefilter holds (the command
|
|
7
|
+
* says `skills` or names a Trail hook script, or this session has a gate
|
|
8
|
+
* file), and only in the copy of the hooks that answers (0 rule 15). It runs
|
|
9
|
+
* before a shell command, so its static imports are the fast-path modules
|
|
10
|
+
* alone: the shell lexer, the gate file, the risk lists, the host facts and
|
|
11
|
+
* host detection, each loading only node:path and node:os. The save gate,
|
|
12
|
+
* the session state and compile load by `import()` on the save-gate path
|
|
13
|
+
* only.
|
|
14
|
+
*
|
|
15
|
+
* In order:
|
|
16
|
+
* 1. The agent guard, whatever the settings say: commands only the person
|
|
17
|
+
* may run (turn skills or offers on, keep a held skill) and Trail's hook
|
|
18
|
+
* scripts run by hand are denied.
|
|
19
|
+
* 2. Skills off: nothing more.
|
|
20
|
+
* 2b. 1b's sure-fail guardrail (4.11, recall half, subagents too): a
|
|
21
|
+
* `timeout N` command on a machine with no `timeout`, when the person
|
|
22
|
+
* kept the no-timeout guardrail, is denied and the deny marked for Stop's
|
|
23
|
+
* count (no telemetry module on this path). Nothing else runs for it.
|
|
24
|
+
* 3. `skills add` or `skills lesson`: the save gate decides (a deny, or a
|
|
25
|
+
* receipt and null); the lesson gate loads only for a lesson command.
|
|
26
|
+
* 4. A step of a live run block that can't be undone: Claude Code asks the
|
|
27
|
+
* person once per group of such steps; where it can't ask (headless, a
|
|
28
|
+
* mode that doesn't ask, another host), the step is denied and its
|
|
29
|
+
* command shown for the person to run.
|
|
30
|
+
* Anything thrown lets the command through: a hook that can wedge every
|
|
31
|
+
* shell command is worse than none.
|
|
32
|
+
*/
|
|
33
|
+
import { normalizeCommand, programOf, simpleCommands, stepMatches } from '../trace/shell.js';
|
|
34
|
+
import { markAsked, markHanded, readGateFile, skillsOnFast, trailHomeFast } from '../trace/gate-file.js';
|
|
35
|
+
import { agentGuard, gatedAnywhere, gatedKind, gatedWhat, shellWords } from '../skills/risk.js';
|
|
36
|
+
import { hostFacts, isTestHome, labInteractive } from '../skills/host-facts.js';
|
|
37
|
+
import { detectHost } from '../trace/host.js';
|
|
38
|
+
import { markDenied, sureFail } from '../trace/guard-fast.js';
|
|
39
|
+
import { join } from 'node:path';
|
|
40
|
+
/** save-parse.ts SKILLS_ADD_RE, kept here so the fast path needn't load the save gate to test for it (a test holds them equal). */
|
|
41
|
+
export const SKILLS_ADD = /\bskills\s+add\b/;
|
|
42
|
+
/** save-parse.ts SAVE_GATE_RE (`skills add`, `skills lesson`, phase 2 `skills update`), kept here for the same reason (a test holds them equal). */
|
|
43
|
+
export const SAVE_GATE = /\bskills\s+(?:add|lesson|update)\b/;
|
|
44
|
+
/** How long a yes to the first step of a group covers its later steps. */
|
|
45
|
+
export const APPROVED_MS = 30 * 60 * 1000;
|
|
46
|
+
const SHOWN_MAX = 500;
|
|
47
|
+
/** directive-words.ts FROM_TRAIL's who, kept here so the fast path loads nothing more (a test holds them equal). */
|
|
48
|
+
export const TRAIL_WHO = 'Trail, the tool this person installed to keep commands that worked as skills,';
|
|
49
|
+
/** Past this a command is not split into its simple commands on the fast path (a 2 MB one takes seconds). */
|
|
50
|
+
const SPLIT_MAX = 64 * 1024;
|
|
51
|
+
/** The words the shell runs, as the agent guard reads them (risk.ts shellWords): `tr''ail sk"ills" on`, a line continuation joined. */
|
|
52
|
+
export const guardWords = shellWords;
|
|
53
|
+
/** 3.3. `command` is the shell call's command when the caller has it (any host's shape); else Claude Code's `tool_input.command`. */
|
|
54
|
+
export async function preBashSkills(input, dir, env = process.env, command) {
|
|
55
|
+
try {
|
|
56
|
+
const cmd = typeof command === 'string' ? command : typeof input?.tool_input?.command === 'string' ? input.tool_input.command : '';
|
|
57
|
+
if (!cmd)
|
|
58
|
+
return null;
|
|
59
|
+
// 1. Any settings, no file read.
|
|
60
|
+
const guard = agentGuard(cmd);
|
|
61
|
+
if (guard)
|
|
62
|
+
return { permissionDecision: 'deny', reason: `trail: ${guard.reason}` };
|
|
63
|
+
// 2.
|
|
64
|
+
if (!skillsOnFast(env))
|
|
65
|
+
return null;
|
|
66
|
+
// 2b. 1b: the sure-fail guardrail. Its deny is the whole answer; Stop counts it from the mark (3.5 step 5).
|
|
67
|
+
const sure = sureFail(cmd, env);
|
|
68
|
+
if (sure) {
|
|
69
|
+
const sid = rawSessionId(input);
|
|
70
|
+
if (sid)
|
|
71
|
+
markDenied(sid, cmd, env, nowOf(env));
|
|
72
|
+
return { permissionDecision: 'deny', reason: sure.deny };
|
|
73
|
+
}
|
|
74
|
+
// 3. The only path that loads more code.
|
|
75
|
+
if (SAVE_GATE.test(cmd) || SAVE_GATE.test(guardWords(cmd))) {
|
|
76
|
+
const { saveOrLessonGate } = await import('../skills/save-gate.js');
|
|
77
|
+
return saveOrLessonGate(input, dir, env);
|
|
78
|
+
}
|
|
79
|
+
// 4.
|
|
80
|
+
return gatedAsk(input, cmd, env);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
await logThrow(e, env);
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 0 rule 5: one line in `state/hook-errors.log`, as skills-hook-util's hookError writes it (the time, the hook, the
|
|
89
|
+
* error's name and file, never its message), with node:fs from the process so the fast path loads nothing more.
|
|
90
|
+
*/
|
|
91
|
+
async function logThrow(e, env) {
|
|
92
|
+
try {
|
|
93
|
+
const fs = process.getBuiltinModule('node:fs');
|
|
94
|
+
const err = e instanceof Error ? e : new Error('not an Error');
|
|
95
|
+
const where = (err.stack ?? '').split('\n').slice(1).map((l) => /\(?([^\s()]+:\d+):\d+\)?$/.exec(l.trim())?.[1]).find(Boolean) ?? '';
|
|
96
|
+
const file = (where.split('/').pop() ?? '').replace(/[^\w.:-]/g, '');
|
|
97
|
+
const dir = join(trailHomeFast(env), 'state');
|
|
98
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
99
|
+
const path = join(dir, 'hook-errors.log');
|
|
100
|
+
// Non-blocking, and only into a regular file: a FIFO planted here would hold PreToolUse (D100 18).
|
|
101
|
+
const { O_WRONLY, O_APPEND, O_CREAT, O_NOFOLLOW, O_NONBLOCK } = fs.constants;
|
|
102
|
+
const fd = fs.openSync(path, O_WRONLY | O_APPEND | O_CREAT | O_NOFOLLOW | (O_NONBLOCK ?? 0), 0o600);
|
|
103
|
+
try {
|
|
104
|
+
if (!fs.fstatSync(fd).isFile())
|
|
105
|
+
return;
|
|
106
|
+
fs.writeSync(fd, `${new Date().toISOString()} pre-bash ${err.name.replace(/[^\w]/g, '').slice(0, 40)}${file ? ` ${file}` : ''}\n`);
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
fs.closeSync(fd);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
/* the log is best effort; skills-hook-util cuts it to 100 KB on its next write */
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** The session id as payloadSessionId reads it; gate-file.ts turns it into a file name the same way. */
|
|
117
|
+
function rawSessionId(input) {
|
|
118
|
+
const p = input && typeof input === 'object' ? input : {};
|
|
119
|
+
const id = [p.session_id, p.sessionId, p.conversation_id].find((v) => typeof v === 'string' && v !== '');
|
|
120
|
+
return typeof id === 'string' ? id : null;
|
|
121
|
+
}
|
|
122
|
+
/** trailNow without the settings module: TRAIL_TEST_NOW only in a test home (0 rule 10). */
|
|
123
|
+
function nowOf(env) {
|
|
124
|
+
const fixed = env.TRAIL_TEST_NOW;
|
|
125
|
+
if (fixed && isTestHome(env)) {
|
|
126
|
+
const d = new Date(fixed);
|
|
127
|
+
if (!Number.isNaN(d.getTime()))
|
|
128
|
+
return d;
|
|
129
|
+
}
|
|
130
|
+
return new Date();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Claude Code's own prompt reaches the person (D17): an interactive entrypoint (headless is decided by
|
|
134
|
+
* CLAUDE_CODE_ENTRYPOINT, as skillsGate decides it, D16, unless the lab's switch, D26), a permission mode the host
|
|
135
|
+
* asks in, and Claude Code itself.
|
|
136
|
+
*/
|
|
137
|
+
export function canAskHere(input, env = process.env) {
|
|
138
|
+
const host = detectHost(input).host;
|
|
139
|
+
const ep = env.CLAUDE_CODE_ENTRYPOINT;
|
|
140
|
+
const script = (typeof ep === 'string' && ep.startsWith('sdk')) || (!ep && host === 'claude');
|
|
141
|
+
if (script && !labInteractive(env))
|
|
142
|
+
return false;
|
|
143
|
+
const mode = typeof input?.permission_mode === 'string' ? input.permission_mode : '';
|
|
144
|
+
return host === 'claude' && hostFacts(env, host).askModes.includes(mode);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The gated step this command runs: newest live block first, each group, each step. First by the step's own
|
|
148
|
+
* text (at the start of the command or after `&&` / `;`); then by what the command does, for each simple
|
|
149
|
+
* command in it (`true || npm publish x`, `echo y | npm publish x`), against a step of the same kind and program.
|
|
150
|
+
*/
|
|
151
|
+
function findStep(gate, cmd) {
|
|
152
|
+
const live = [...gate.live].reverse();
|
|
153
|
+
if (cmd.length > SPLIT_MAX) {
|
|
154
|
+
// Too long to split piece by piece inside the hook's 5 s: any gated pattern anywhere in it is that group's ask (errs safe).
|
|
155
|
+
const kinds = gatedAnywhere(cmd);
|
|
156
|
+
for (const l of live)
|
|
157
|
+
for (const [gi, group] of l.groups.entries())
|
|
158
|
+
if (kinds.has(group.kind) && group.steps[0])
|
|
159
|
+
return { live: l, gi, group, step: group.steps[0] };
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
for (const l of live) {
|
|
163
|
+
for (const [gi, group] of l.groups.entries()) {
|
|
164
|
+
for (const step of group.steps)
|
|
165
|
+
if (stepMatches(step.text, cmd, l.params))
|
|
166
|
+
return { live: l, gi, group, step };
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const simple = simpleCommands(cmd).map((s) => ({ kind: gatedKind(s), program: programOf(s) })).filter((s) => s.kind !== null);
|
|
170
|
+
if (!simple.length)
|
|
171
|
+
return null;
|
|
172
|
+
for (const l of live) {
|
|
173
|
+
for (const [gi, group] of l.groups.entries()) {
|
|
174
|
+
for (const step of group.steps) {
|
|
175
|
+
if (simple.some((s) => s.kind === group.kind && s.program === step.program))
|
|
176
|
+
return { live: l, gi, group, step };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
/** A name or command as one line of the reason: spaces collapsed, cut. */
|
|
183
|
+
function oneLine(text, max) {
|
|
184
|
+
const t = String(text ?? '').replace(/[\u0000-\u001f\u007f]+/g, ' ').replace(/\s+/g, ' ').trim();
|
|
185
|
+
return t.length > max ? `${t.slice(0, max - 1)}…` : t;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* For the person's own prompt (Claude Code shows them the reason): `step 5`, `steps 5 and 6; your yes here is for
|
|
189
|
+
* both`, `steps 4, 5 and 6; your yes here is for all 3`. The agent's words never say what a yes covers (D101).
|
|
190
|
+
*/
|
|
191
|
+
function stepWords(group) {
|
|
192
|
+
const ns = group.steps.map((s) => s.n);
|
|
193
|
+
if (ns.length === 1)
|
|
194
|
+
return `step ${ns[0]}`;
|
|
195
|
+
const list = `${ns.slice(0, -1).join(', ')} and ${ns[ns.length - 1]}`;
|
|
196
|
+
return `steps ${list}; your yes here is for ${ns.length === 2 ? 'both' : `all ${ns.length}`}`;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* The command is that step exactly, its params filled as the block showed them: a yes covers what the person was
|
|
200
|
+
* told, never more (`git push origin beta --force`). A step with a param the block left blank is never covered.
|
|
201
|
+
*/
|
|
202
|
+
function sameStep(cmd, step, params) {
|
|
203
|
+
let plain = true;
|
|
204
|
+
const filled = step.replace(/\{([A-Za-z_]\w*)\}/g, (m, k) => {
|
|
205
|
+
const v = params[k];
|
|
206
|
+
if (typeof v !== 'string')
|
|
207
|
+
return m;
|
|
208
|
+
// A value is a version, a sha, a branch: one that carries more shell (`x && npm publish y`, `$(…)`) was never what the person saw asked.
|
|
209
|
+
if (!PLAIN_VALUE.test(v))
|
|
210
|
+
plain = false;
|
|
211
|
+
return v;
|
|
212
|
+
});
|
|
213
|
+
return plain && !/\{[A-Za-z_]\w*\}/.test(filled) && normalizeCommand(cmd) === normalizeCommand(filled);
|
|
214
|
+
}
|
|
215
|
+
/** recall.ts SAFE_VALUE: the shape a filled value must have for a yes to cover the step it is in. */
|
|
216
|
+
const PLAIN_VALUE = /^[A-Za-z0-9][A-Za-z0-9._@:+\/-]{0,99}$/;
|
|
217
|
+
/** 3.3 step 4. */
|
|
218
|
+
function gatedAsk(input, cmd, env) {
|
|
219
|
+
const sid = rawSessionId(input);
|
|
220
|
+
if (!sid)
|
|
221
|
+
return null;
|
|
222
|
+
const gate = readGateFile(sid, env);
|
|
223
|
+
if (!gate)
|
|
224
|
+
return null;
|
|
225
|
+
const hit = findStep(gate, cmd);
|
|
226
|
+
if (!hit)
|
|
227
|
+
return null;
|
|
228
|
+
const { live, gi, group, step } = hit;
|
|
229
|
+
const what = gatedWhat(group.kind, step.text, live.params);
|
|
230
|
+
const name = oneLine(live.name, 80);
|
|
231
|
+
if (!canAskHere(input, env)) {
|
|
232
|
+
// D137: the step is handed to the person; credit counts it so, and their next ask of this job continues the run.
|
|
233
|
+
try {
|
|
234
|
+
markHanded(sid, live.injId, step.n, nowOf(env), env);
|
|
235
|
+
}
|
|
236
|
+
catch { /* the deny stands either way */ }
|
|
237
|
+
return {
|
|
238
|
+
permissionDecision: 'deny',
|
|
239
|
+
// D101: who stopped it and why, and what to do instead; never a bare order.
|
|
240
|
+
reason: `trail: ${TRAIL_WHO} stopped step ${step.n} of skill ${name}: it ${what} and can't be undone, and this session can't ask the person first. So don't run it, and don't try it again this turn, even after a yes in chat; ask the person to run this command in their own terminal: ${oneLine(cmd, SHOWN_MAX)}`,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
const now = nowOf(env);
|
|
244
|
+
const since = group.approvedAt === null ? NaN : now.getTime() - Date.parse(group.approvedAt);
|
|
245
|
+
// A yes from the last 30 minutes; one stamped after now (a clock that moved back, a file written by hand) covers nothing.
|
|
246
|
+
const approved = since >= 0 && since <= APPROVED_MS;
|
|
247
|
+
if (approved && typeof group.askedStep === 'number' && step.n > group.askedStep && sameStep(cmd, step.text, live.params))
|
|
248
|
+
return null;
|
|
249
|
+
const toolUseId = typeof input?.tool_use_id === 'string' ? input.tool_use_id : '';
|
|
250
|
+
markAsked(sid, live.injId, gi, toolUseId, now, env, step.n);
|
|
251
|
+
return { permissionDecision: 'ask', reason: `trail: this ${what} and can't be undone (${name}, ${stepWords(group)}).` };
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=pre-bash-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-bash-skills.js","sourceRoot":"","sources":["../../src/claude/pre-bash-skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** What the hook can answer: Claude Code's PreToolUse permission decision and its reason. */
|
|
2
|
+
export interface PreBashDecision {
|
|
3
|
+
permissionDecision: 'allow' | 'ask' | 'deny';
|
|
4
|
+
reason: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The decision for one Bash call, or null to let it run untouched. Phase 0:
|
|
8
|
+
* always null. Never throws.
|
|
9
|
+
*/
|
|
10
|
+
export declare function preBash(_input: unknown, _dir: string): PreBashDecision | null;
|
|
11
|
+
/**
|
|
12
|
+
* detectHost(input).host === 'codex', without loading trace/host.ts (the fast path loads nothing it needn't). Read
|
|
13
|
+
* only for a decision about to be sent.
|
|
14
|
+
*/
|
|
15
|
+
export declare function codexPayload(input: unknown): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* The hook's stdout for `input`: the decision in Claude Code's PreToolUse
|
|
18
|
+
* shape, or '' when there is none, `decide` throws, or what it returns isn't
|
|
19
|
+
* a decision the host understands.
|
|
20
|
+
*
|
|
21
|
+
* Codex (P37, P38): its hooks can't ask (an `ask` fails the hook run and the
|
|
22
|
+
* command runs, D17), so an ask goes out as a deny with the same reason; and
|
|
23
|
+
* an `allow` without `updatedInput` drops the hook's whole output there, so
|
|
24
|
+
* Trail never sends one. The deny is the whole output.
|
|
25
|
+
*/
|
|
26
|
+
export declare function preBashOutput(input: unknown, dir: string, decide?: (input: unknown, dir: string) => PreBashDecision | null): string;
|
|
27
|
+
/**
|
|
28
|
+
* The command of a shell call, in Claude Code's and Cursor's shape
|
|
29
|
+
* (`tool_name`, `tool_input.command`) or Copilot CLI's (`toolName`,
|
|
30
|
+
* `toolArgs` as JSON text or an object), or null when the payload isn't a
|
|
31
|
+
* shell call. Copilot may run this hook for every tool whatever the matcher
|
|
32
|
+
* says, so the hook checks for itself.
|
|
33
|
+
*/
|
|
34
|
+
export declare function shellCommand(input: unknown): string | null;
|
|
35
|
+
/** The longest the payload may take to arrive. Hosts write it at once and close stdin; this bounds one that doesn't, well inside the 5 s the hook is given. */
|
|
36
|
+
export declare const STDIN_WAIT_MS = 2000;
|
|
37
|
+
/** A payload over this is read to its end and dropped: no shell command worth checking is this long. */
|
|
38
|
+
export declare const STDIN_MAX_BYTES: number;
|
|
39
|
+
/** gate-file.ts gateFilePath without loading it: the same file name for the same id (a test holds them equal). */
|
|
40
|
+
export declare function gateFilePathFast(input: Record<string, unknown>, env: NodeJS.ProcessEnv): string | null;
|
|
41
|
+
/**
|
|
42
|
+
* Design 1.7: whether the skills part has anything to look at, decided without loading it. The command
|
|
43
|
+
* (read as the agent guard reads it: quotes and backslashes don't change the words) says `skills` or names a
|
|
44
|
+
* Trail hook script, or this session has a gate file (a run block with a step that can't be undone is live).
|
|
45
|
+
* Every other shell command pays one regex and one stat.
|
|
46
|
+
*/
|
|
47
|
+
export declare function skillsPrefilter(input: Record<string, unknown>, command: string, env?: NodeJS.ProcessEnv): boolean;
|
|
48
|
+
/** The shim's entry: `node trail-hooks.cjs pre-bash`. Never rejects. `decide` is preBash; tests pass their own. */
|
|
49
|
+
export declare function main(event?: string, decide?: (input: unknown, dir: string) => PreBashDecision | null): Promise<void>;
|
|
50
|
+
//# sourceMappingURL=pre-bash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-bash.d.ts","sourceRoot":"","sources":["../../src/claude/pre-bash.ts"],"names":[],"mappings":"AA4BA,6FAA6F;AAC7F,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAE7E;AAKD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAapD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,eAAe,GAAG,IAAc,GAAG,MAAM,CAa5I;AAKD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAa1D;AAOD,+JAA+J;AAC/J,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,wGAAwG;AACxG,eAAO,MAAM,eAAe,QAAkB,CAAC;AAmF/C,kHAAkH;AAClH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAStG;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAS9H;AAED,mHAAmH;AACnH,wBAAsB,IAAI,CAAC,KAAK,SAAa,EAAE,MAAM,GAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,eAAe,GAAG,IAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BvI"}
|