@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,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Receipts (design 2.7, 4.9): what the PreToolUse save gate decided about one
|
|
3
|
+
* `trail skills add`, for the CLI that runs right after it. One per session
|
|
4
|
+
* (`~/.trail/receipts/<session-id>.json`), replaced by the next add, found
|
|
5
|
+
* only for its run and name while fresh, and used once: the CLI sets `usedAt`
|
|
6
|
+
* when it acts on it, and a used receipt never counts again.
|
|
7
|
+
*
|
|
8
|
+
* A receipt is a hint, never proof. The CLI re-decides from the transcript
|
|
9
|
+
* (4.9 CLI half); a receipt the agent wrote itself is caught there.
|
|
10
|
+
*
|
|
11
|
+
* `lineAt` is the one positioned read the gate makes of the transcript: the
|
|
12
|
+
* line that starts at a byte offset the fold recorded, so the gate checks the
|
|
13
|
+
* person's typed line and each step's call and result without reading the
|
|
14
|
+
* whole file.
|
|
15
|
+
*/
|
|
16
|
+
import { createHash } from 'node:crypto';
|
|
17
|
+
import { closeSync, lstatSync, openSync, readdirSync, readSync, realpathSync, statSync } from 'node:fs';
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
import { readJsonSafe, trailPath, withLock, writePrivate } from '../util/private-fs.js';
|
|
20
|
+
import { sessionPath } from '../trace/gate-file.js';
|
|
21
|
+
import { dialectFor } from '../trace/dialect.js';
|
|
22
|
+
/** A receipt older than this is stale: the CLI runs right after its PreToolUse. */
|
|
23
|
+
const FRESH_MS = 10 * 60_000;
|
|
24
|
+
/** Clock skew allowed between the hook and the CLI. */
|
|
25
|
+
const AHEAD_MS = 5_000;
|
|
26
|
+
const DEFAULT_MAX_LINE = 1024 * 1024;
|
|
27
|
+
const TIERS = new Set(['A', 'B', 'C', 'D']);
|
|
28
|
+
const CONSENTS = new Set(['offer-yes', 'asked', 'none']);
|
|
29
|
+
const ASKED = new Set(['this repo', 'every repo', 'repo', 'team']);
|
|
30
|
+
/** A session id as a file name, as phase 0's state.ts does it: anything odd is hashed. */
|
|
31
|
+
function fileId(sessionId) {
|
|
32
|
+
if (/^[A-Za-z0-9_-][A-Za-z0-9._-]{0,127}$/.test(sessionId))
|
|
33
|
+
return sessionId;
|
|
34
|
+
return `h-${createHash('sha256').update(String(sessionId)).digest('hex').slice(0, 16)}`;
|
|
35
|
+
}
|
|
36
|
+
const receiptsDir = (env) => trailPath(env, 'receipts');
|
|
37
|
+
/** <home>/receipts/<session-id>.json */
|
|
38
|
+
export function receiptPath(sessionId, env) {
|
|
39
|
+
return join(receiptsDir(env), `${fileId(String(sessionId))}.json`);
|
|
40
|
+
}
|
|
41
|
+
/** Replaces the session's previous receipt. */
|
|
42
|
+
export function writeReceipt(r, env) {
|
|
43
|
+
writePrivate(receiptPath(r.session, env), `${JSON.stringify(r, null, 2)}\n`);
|
|
44
|
+
}
|
|
45
|
+
const str = (v) => typeof v === 'string';
|
|
46
|
+
const num = (v) => typeof v === 'number' && Number.isFinite(v);
|
|
47
|
+
/** The receipt as Trail writes it, or null: a file of any other shape is not one. */
|
|
48
|
+
function asReceipt(v) {
|
|
49
|
+
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
50
|
+
return null;
|
|
51
|
+
const r = v;
|
|
52
|
+
if (r.v !== 1 || !str(r.session) || !str(r.transcriptPath) || !str(r.toolUseId) || !str(r.runId) || !str(r.name) || !str(r.at))
|
|
53
|
+
return null;
|
|
54
|
+
if (!str(r.host) || !TIERS.has(r.tier) || !CONSENTS.has(r.consent) || (r.offerId !== null && !str(r.offerId)))
|
|
55
|
+
return null;
|
|
56
|
+
if (r.typed !== null && (!r.typed || typeof r.typed !== 'object' || !num(r.typed.offset) || !str(r.typed.lineSha)))
|
|
57
|
+
return null;
|
|
58
|
+
if (typeof r.typedYes !== 'boolean' || typeof r.typedSave !== 'boolean' || (r.asked !== null && !ASKED.has(r.asked)))
|
|
59
|
+
return null;
|
|
60
|
+
if (!num(r.stepsTotal) || !num(r.stepsVerified) || (r.verdict !== 'live' && r.verdict !== 'held'))
|
|
61
|
+
return null;
|
|
62
|
+
if (r.usedAt !== null && !str(r.usedAt))
|
|
63
|
+
return null;
|
|
64
|
+
if (r.checkout !== undefined && !str(r.checkout))
|
|
65
|
+
return null;
|
|
66
|
+
return r;
|
|
67
|
+
}
|
|
68
|
+
/** One receipt file, read only when it is a regular file (never through a link). */
|
|
69
|
+
function readReceiptFile(path) {
|
|
70
|
+
try {
|
|
71
|
+
if (!lstatSync(path).isFile())
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return asReceipt(readJsonSafe(path));
|
|
78
|
+
}
|
|
79
|
+
/** The unused receipt (usedAt null) for this run and name, fresh (<= 10 min old, not > 5 s in the future). Scans receipts/*.json. */
|
|
80
|
+
export function findReceipt(runId, name, now = new Date(), env) {
|
|
81
|
+
let names;
|
|
82
|
+
try {
|
|
83
|
+
names = readdirSync(receiptsDir(env));
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
let best = null;
|
|
89
|
+
for (const n of names) {
|
|
90
|
+
if (!n.endsWith('.json'))
|
|
91
|
+
continue;
|
|
92
|
+
const r = readReceiptFile(join(receiptsDir(env), n));
|
|
93
|
+
if (!r || r.usedAt !== null || r.runId !== runId || r.name !== name)
|
|
94
|
+
continue;
|
|
95
|
+
const age = now.getTime() - Date.parse(r.at);
|
|
96
|
+
if (Number.isNaN(age) || age > FRESH_MS || age < -AHEAD_MS)
|
|
97
|
+
continue;
|
|
98
|
+
if (!best || Date.parse(r.at) > Date.parse(best.at))
|
|
99
|
+
best = r;
|
|
100
|
+
}
|
|
101
|
+
return best;
|
|
102
|
+
}
|
|
103
|
+
const sameReceipt = (a, b) => a.session === b.session && a.toolUseId === b.toolUseId && a.runId === b.runId && a.name === b.name && a.at === b.at;
|
|
104
|
+
/** Sets usedAt on the receipt on disk, when it is still this one (a newer add replaces it, and stays unused). */
|
|
105
|
+
export function markReceiptUsed(r, now = new Date(), env) {
|
|
106
|
+
const path = receiptPath(r.session, env);
|
|
107
|
+
withLock(path, () => {
|
|
108
|
+
const cur = readReceiptFile(path);
|
|
109
|
+
if (!cur || !sameReceipt(cur, r) || cur.usedAt !== null)
|
|
110
|
+
return;
|
|
111
|
+
writePrivate(path, `${JSON.stringify({ ...cur, usedAt: now.toISOString() }, null, 2)}\n`);
|
|
112
|
+
}, 1000);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The transcript line that starts at offset: one positioned read of at most maxBytes (default 1 MB), from the
|
|
116
|
+
* byte before it, so an offset inside a line is refused. null past the end, with no newline within maxBytes, or
|
|
117
|
+
* unreadable.
|
|
118
|
+
*/
|
|
119
|
+
export function lineAt(transcriptPath, offset, maxBytes = DEFAULT_MAX_LINE) {
|
|
120
|
+
if (!Number.isSafeInteger(offset) || offset < 0 || !(maxBytes > 0))
|
|
121
|
+
return null;
|
|
122
|
+
let fd;
|
|
123
|
+
try {
|
|
124
|
+
fd = openSync(transcriptPath, 'r');
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const from = offset === 0 ? 0 : offset - 1;
|
|
131
|
+
const lead = offset - from;
|
|
132
|
+
const buf = Buffer.alloc(lead + Math.floor(maxBytes));
|
|
133
|
+
const n = readSync(fd, buf, 0, buf.length, from);
|
|
134
|
+
if (n <= lead)
|
|
135
|
+
return null;
|
|
136
|
+
if (lead === 1 && buf[0] !== 0x0a)
|
|
137
|
+
return null;
|
|
138
|
+
const end = buf.indexOf(0x0a, lead);
|
|
139
|
+
if (end < 0 || end >= n)
|
|
140
|
+
return null;
|
|
141
|
+
return buf.subarray(lead, end).toString('utf8');
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
closeSync(fd);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* The whole lines that end right before `offset` (which must be a line start), oldest first: one positioned read of
|
|
152
|
+
* at most maxBytes (default 1 MB) back from it. A line cut by the window is left out. [] at offset 0, inside a
|
|
153
|
+
* line, or unreadable.
|
|
154
|
+
*/
|
|
155
|
+
export function linesBefore(transcriptPath, offset, maxBytes = DEFAULT_MAX_LINE) {
|
|
156
|
+
if (!Number.isSafeInteger(offset) || offset <= 0 || !(maxBytes > 0))
|
|
157
|
+
return [];
|
|
158
|
+
let fd;
|
|
159
|
+
try {
|
|
160
|
+
fd = openSync(transcriptPath, 'r');
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
const from = Math.max(0, offset - Math.floor(maxBytes));
|
|
167
|
+
const buf = Buffer.alloc(offset - from);
|
|
168
|
+
const n = readSync(fd, buf, 0, buf.length, from);
|
|
169
|
+
if (n !== buf.length || buf[n - 1] !== 0x0a)
|
|
170
|
+
return [];
|
|
171
|
+
const lines = buf.subarray(0, n - 1).toString('utf8').split('\n');
|
|
172
|
+
return from > 0 ? lines.slice(1) : lines;
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
closeSync(fd);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/** sha256 hex of the whole line, as read (no newline). */
|
|
182
|
+
export function lineSha(line) {
|
|
183
|
+
return createHash('sha256').update(line, 'utf8').digest('hex');
|
|
184
|
+
}
|
|
185
|
+
export function typedLineStillThere(transcriptPath, typed) {
|
|
186
|
+
const line = lineAt(transcriptPath, typed.offset);
|
|
187
|
+
return line !== null && lineSha(line) === typed.lineSha;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* The receipt names the host's own transcript for its session (g7, D74), as its host's dialect knows it (4.16):
|
|
191
|
+
* for Claude Code `<projects>/<folder>/<session_id>.jsonl`, for Codex `CODEX_HOME/sessions/.../rollout-*-<session>.jsonl`
|
|
192
|
+
* whose first line names the session, each compared through realpath, so a link to a file elsewhere, a copy in /tmp
|
|
193
|
+
* or another session's file is not it. A host with no dialect can't save live; its receipt can only be held for its
|
|
194
|
+
* host, so it passes as it is, unless it claims tier A.
|
|
195
|
+
*/
|
|
196
|
+
export function receiptTranscriptOk(r, env = process.env) {
|
|
197
|
+
const d = dialectFor(r.host);
|
|
198
|
+
if (!d)
|
|
199
|
+
return r.tier !== 'A';
|
|
200
|
+
return d.transcriptOk(r, env);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* The receipt names the very file the hooks read for its session (g7 review): the session state's cursor keeps the
|
|
204
|
+
* transcript's device and inode, from the path Claude Code itself gave the hooks. The path check above trusts the
|
|
205
|
+
* projects folders, and `$CLAUDE_CONFIG_DIR` comes from the env of `trail skills add`, which is the agent's; a copy
|
|
206
|
+
* under a folder the agent names, or in another project folder, is not the file the hooks read. A hard link to it
|
|
207
|
+
* is (same inode). No cursor (the hooks never read this session): no. Another host's receipt is held anyway: passes.
|
|
208
|
+
*/
|
|
209
|
+
export function receiptTranscriptRead(r, env = process.env) {
|
|
210
|
+
if (!dialectFor(r.host))
|
|
211
|
+
return r.tier !== 'A';
|
|
212
|
+
const cur = readJsonSafe(sessionPath(r.session, '.json', env))?.trace;
|
|
213
|
+
if (!cur || typeof cur.ino !== 'number' || typeof cur.dev !== 'number' || !cur.ino)
|
|
214
|
+
return false;
|
|
215
|
+
try {
|
|
216
|
+
const st = statSync(realpathSync(r.transcriptPath));
|
|
217
|
+
return st.isFile() && st.ino === cur.ino && st.dev === cur.dev;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=receipts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipts.js","sourceRoot":"","sources":["../../src/skills/receipts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RunSheet } from '../trace/types.js';
|
|
2
|
+
/** The run's own checkout when it holds, else the first hint that does (an older sheet has none); '' when none. */
|
|
3
|
+
export declare function runCheckout(sheet: Pick<RunSheet, 'repoKey' | 'checkout'>, env?: NodeJS.ProcessEnv, ...hints: Array<string | null | undefined>): string;
|
|
4
|
+
//# sourceMappingURL=run-checkout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-checkout.d.ts","sourceRoot":"","sources":["../../src/skills/run-checkout.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAelD,mHAAmH;AACnH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAC,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAGnK"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The checkout a run ran in (D93), for everything that compiles the run as a
|
|
3
|
+
* skill: the prompt hook's asked save, the offer moment, both halves of the
|
|
4
|
+
* save gate and the held copy. Compile reads paths relative to that root, so
|
|
5
|
+
* every one of them must use the same one, taken from the run itself (its
|
|
6
|
+
* sheet, or the receipt the PreToolUse half wrote), never from the folder a
|
|
7
|
+
* command happens to run in: a session that starts in a folder above the
|
|
8
|
+
* repo and cds into it runs `trail skills add` up there.
|
|
9
|
+
*
|
|
10
|
+
* A folder is used only when it still exists and is the top of a git
|
|
11
|
+
* checkout whose repo key is the run's. Otherwise ''.
|
|
12
|
+
*/
|
|
13
|
+
import { statSync } from 'node:fs';
|
|
14
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
15
|
+
import { repoPlace } from '../notes/home.js';
|
|
16
|
+
/** `dir` is an existing checkout's top, with the key `repoKey`. */
|
|
17
|
+
function holds(dir, repoKey, env) {
|
|
18
|
+
if (typeof dir !== 'string' || !dir || !isAbsolute(dir) || !repoKey)
|
|
19
|
+
return false;
|
|
20
|
+
try {
|
|
21
|
+
if (!statSync(dir).isDirectory())
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const place = repoPlace(dir, env);
|
|
28
|
+
return place.git && place.key === repoKey && resolve(place.checkout) === resolve(dir);
|
|
29
|
+
}
|
|
30
|
+
/** The run's own checkout when it holds, else the first hint that does (an older sheet has none); '' when none. */
|
|
31
|
+
export function runCheckout(sheet, env = process.env, ...hints) {
|
|
32
|
+
for (const dir of [sheet.checkout, ...hints])
|
|
33
|
+
if (holds(dir, sheet.repoKey, env))
|
|
34
|
+
return resolve(dir);
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=run-checkout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-checkout.js","sourceRoot":"","sources":["../../src/skills/run-checkout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,mEAAmE;AACnE,SAAS,KAAK,CAAC,GAAY,EAAE,OAAe,EAAE,GAAsB;IAClE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAClF,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,KAAK,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AACxF,CAAC;AAED,mHAAmH;AACnH,MAAM,UAAU,WAAW,CAAC,KAA6C,EAAE,MAAyB,OAAO,CAAC,GAAG,EAAE,GAAG,KAAuC;IACzJ,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC;QAAE,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACtG,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { SkillInjection } from '../trace/types.js';
|
|
2
|
+
import { type Candidate } from './recall.js';
|
|
3
|
+
import type { ParsedSkill } from './types.js';
|
|
4
|
+
import { type ProbeResult } from './probes.js';
|
|
5
|
+
import { type Lesson } from './lessons.js';
|
|
6
|
+
import { type Anchor } from './anchors.js';
|
|
7
|
+
import { type RecallMark } from './follow-learnings.js';
|
|
8
|
+
export { runProbes, probePassWords, readyProbes, PROBE_BUDGET_MS, type ProbeResult, type ProbeOpts, type ProbeGit } from './probes.js';
|
|
9
|
+
export declare const RUN_BLOCK_MAX = 1200;
|
|
10
|
+
/** 'Oct 14' for a local date (`2026-10-14`) or an ISO time, in local time. */
|
|
11
|
+
export declare function dayWords(d: string | null | undefined): string;
|
|
12
|
+
/**
|
|
13
|
+
* canAsk: interactive entry, permission_mode in hostFacts.askModes, host claude (4.15 step 5).
|
|
14
|
+
* 1b: `lessons` (default: the skill folder's) end the block, guardrail-kind first (4.16); `gone` (default: the
|
|
15
|
+
* anchors gone where the candidate was found) opens it with the out-of-date line (4.18). Both count toward 1,200:
|
|
16
|
+
* lessons are the second thing cut, oldest first; guardrail-kind lessons and the out-of-date line never are.
|
|
17
|
+
*/
|
|
18
|
+
export declare function runBlock(c: Candidate, ctx: {
|
|
19
|
+
values: Record<string, string>;
|
|
20
|
+
notes: string[];
|
|
21
|
+
probes: ProbeResult[];
|
|
22
|
+
canAsk: boolean;
|
|
23
|
+
header: 'job' | 'compact';
|
|
24
|
+
lastFail: {
|
|
25
|
+
step: number;
|
|
26
|
+
at: string;
|
|
27
|
+
} | null;
|
|
28
|
+
lessons?: Lesson[];
|
|
29
|
+
gone?: Anchor[];
|
|
30
|
+
anchorDeadline?: number;
|
|
31
|
+
marks?: RecallMark[];
|
|
32
|
+
}): string;
|
|
33
|
+
/**
|
|
34
|
+
* D116 item 1: the check is a step that only reads (a status, a view, a log, a GET, a tests or query run), so a
|
|
35
|
+
* status question may run it. A push (it is the step that moved the branch), anything gated, or a command
|
|
36
|
+
* that changes things is not: that skill gets no check line.
|
|
37
|
+
*/
|
|
38
|
+
export declare function readOnlyCheck(s: Pick<ParsedSkill, 'check' | 'steps' | 'meta'>): boolean;
|
|
39
|
+
/** The check line for a status question; '' when the skill has no check, or none that only reads (D116 item 1). */
|
|
40
|
+
export declare function checkLine(c: Candidate, values: Record<string, string>): string;
|
|
41
|
+
/** The SkillInjection recorded for a block or check line (live: true for job, name and compact cues). */
|
|
42
|
+
export declare function injectionFor(c: Candidate, values: Record<string, string>, cue: SkillInjection['cue'], epoch: number, now?: Date): SkillInjection;
|
|
43
|
+
/** g4's open issue 4 (D71 d): the ready probes that failed for a block ride on its injection, for the use line (never counted against the skill). */
|
|
44
|
+
export declare function withReadyFailed(inj: SkillInjection, probes: ProbeResult[]): SkillInjection;
|
|
45
|
+
/** 'trail: using skill <name> (v<n>, worked <Mon D>)'. */
|
|
46
|
+
export declare function useNotice(c: Candidate): string;
|
|
47
|
+
//# sourceMappingURL=runblock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runblock.d.ts","sourceRoot":"","sources":["../../src/skills/runblock.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAQrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAA8D,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvI,eAAO,MAAM,aAAa,OAAO,CAAC;AAMlC,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAI7D;AA+CD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;CAAE,GAAG,MAAM,CA8D7S;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG,OAAO,CASvF;AAED,mHAAmH;AACnH,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAM9E;AAUD,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,cAAc,CAsB5J;AAED,qJAAqJ;AACrJ,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,CAG1F;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAG9C"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a skill brings back (design 4.15, spec 11): the run block a job or
|
|
3
|
+
* name cue injects, the check line a status question gets, the injection
|
|
4
|
+
* recorded for either, and the one line the person sees.
|
|
5
|
+
*
|
|
6
|
+
* The block is past tense and attributed ("fits", "last worked Oct 14",
|
|
7
|
+
* "what worked was step 5"), never an order: the agent starts from the
|
|
8
|
+
* steps because they worked here before. At most 1,200 characters. Every
|
|
9
|
+
* value is flattened to one line and every line after the header starts
|
|
10
|
+
* with two spaces, so nothing in a skill file can open a `[trail]` line.
|
|
11
|
+
*
|
|
12
|
+
* A step that can't be undone is said once, after its group: where the
|
|
13
|
+
* host can ask the person, Claude Code will ask before the group's first
|
|
14
|
+
* step and the agent waits for that; where it can't (headless, permissions
|
|
15
|
+
* skipped, another host), the agent shows the person the command instead
|
|
16
|
+
* of running it (D17). The words never tell the agent not to ask and never
|
|
17
|
+
* say what one yes covers (D101): an agent read those as a bypass.
|
|
18
|
+
*/
|
|
19
|
+
import { randomBytes } from 'node:crypto';
|
|
20
|
+
import { nameOf } from './recall.js';
|
|
21
|
+
import { flatLine } from '../notes/flatten.js';
|
|
22
|
+
import { monthDay } from './compile-words.js';
|
|
23
|
+
import { fillParams } from './params.js';
|
|
24
|
+
import { gatedGroups, gatedKind } from './risk.js';
|
|
25
|
+
import { neverSave } from './never-save.js';
|
|
26
|
+
import { checkFamilyOf } from '../trace/checks.js';
|
|
27
|
+
import { commandKind } from '../trace/shell.js';
|
|
28
|
+
import { beforeYouStart } from './skillmd.js';
|
|
29
|
+
import { probePassWords } from './probes.js';
|
|
30
|
+
import { isGuardrailLesson, lessonLines, lessonRefused, readLessons } from './lessons.js';
|
|
31
|
+
import { goneAnchors, outOfDateLine } from './anchors.js';
|
|
32
|
+
import { WIDE_SCAN_MS } from './anchors-wide.js';
|
|
33
|
+
import { markLines, stepNote, withFixes } from './follow-learnings.js';
|
|
34
|
+
export { runProbes, probePassWords, readyProbes, PROBE_BUDGET_MS } from './probes.js';
|
|
35
|
+
export const RUN_BLOCK_MAX = 1200;
|
|
36
|
+
/** A command or value on one line, never cut (a cut command would be wrong; an overlong block becomes the pointer). */
|
|
37
|
+
const flat = (t) => flatLine(t, 4000);
|
|
38
|
+
const prose = (t, max = 200) => flatLine(t, max);
|
|
39
|
+
/** 'Oct 14' for a local date (`2026-10-14`) or an ISO time, in local time. */
|
|
40
|
+
export function dayWords(d) {
|
|
41
|
+
if (!d)
|
|
42
|
+
return 'an earlier day';
|
|
43
|
+
const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(d);
|
|
44
|
+
return m ? monthDay(new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3])).toISOString()) : monthDay(d);
|
|
45
|
+
}
|
|
46
|
+
const OWNER = { personal: 'yours', repo: "the repo's", team: "the team's" };
|
|
47
|
+
/** 'last worked Oct 14', or 'saved Oct 14' for a skill that never checked out. */
|
|
48
|
+
function whenWords(c) {
|
|
49
|
+
return c.state?.lastWorked ? `last worked ${dayWords(c.state.lastWorked)}` : `saved ${dayWords(c.state?.addedAt ?? null)}`;
|
|
50
|
+
}
|
|
51
|
+
const listWords = (ns) => (ns.length === 2 ? `${ns[0]} and ${ns[1]}` : `${ns.slice(0, -1).join(', ')} and ${ns[ns.length - 1]}`);
|
|
52
|
+
function gatedNote(steps, canAsk) {
|
|
53
|
+
const one = steps.length === 1;
|
|
54
|
+
const which = one ? `step ${steps[0]}` : `steps ${listWords(steps)}`;
|
|
55
|
+
// D101: never "don't ask", never what one yes covers (that stays in pre-bash-skills' gate logic).
|
|
56
|
+
// D118 a: a step whose ask was denied is not run again that turn (the lab's agent retried a push three times).
|
|
57
|
+
if (!canAsk) {
|
|
58
|
+
return one
|
|
59
|
+
? ` This session can't ask the person, so don't run ${which} (it can't be undone), not even after a yes in chat; show them the command to run themselves.`
|
|
60
|
+
: ` This session can't ask the person, so don't run ${which} (they can't be undone), not even after a yes in chat; show them the commands to run themselves.`;
|
|
61
|
+
}
|
|
62
|
+
const retry = ` If they say no, don't retry this turn; ask them to run ${one ? 'it' : 'them'}.`;
|
|
63
|
+
return one
|
|
64
|
+
? ` Claude Code will ask the person before ${which} (it can't be undone); wait for that.${retry}`
|
|
65
|
+
: ` Claude Code will ask the person before step ${steps[0]} (${which} can't be undone); wait for that.${retry}`;
|
|
66
|
+
}
|
|
67
|
+
/** What a tests or query check shows by default: "step n passing" already says it. */
|
|
68
|
+
const PLAIN_SHOWS = new Set(['the tests pass', 'rows come back']);
|
|
69
|
+
function checkText(c, values, skill = c.skill) {
|
|
70
|
+
const s = skill;
|
|
71
|
+
if (!s.check)
|
|
72
|
+
return null;
|
|
73
|
+
const shows = s.checkShows ? prose(fillParams(s.checkShows, values)) : s.meta['check-tool'] ? 'READY' : null;
|
|
74
|
+
return { text: flat(fillParams(s.check, values)), shows };
|
|
75
|
+
}
|
|
76
|
+
/** 1b: a personal skill's lessons from its own folder (4.16); none for a skill that isn't in one. */
|
|
77
|
+
function lessonsOf(c) {
|
|
78
|
+
return c.ref.scope === 'personal' && c.ref.dir ? readLessons(c.ref.dir) : [];
|
|
79
|
+
}
|
|
80
|
+
/** 1b: the anchors gone where the candidate was found (4.18; local file reads only). Phase 2 (4.13): a job cue's block may scan the CLI (its own 150 ms); a compaction's (SessionStart) reads only the cache. */
|
|
81
|
+
function goneOf(c, scan, until) {
|
|
82
|
+
return c.here ? goneAnchors(c.skill, c.here.checkout, c.here.env ?? process.env, { scan, deadline: Math.min(until ?? Infinity, Date.now() + WIDE_SCAN_MS) }) : [];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* canAsk: interactive entry, permission_mode in hostFacts.askModes, host claude (4.15 step 5).
|
|
86
|
+
* 1b: `lessons` (default: the skill folder's) end the block, guardrail-kind first (4.16); `gone` (default: the
|
|
87
|
+
* anchors gone where the candidate was found) opens it with the out-of-date line (4.18). Both count toward 1,200:
|
|
88
|
+
* lessons are the second thing cut, oldest first; guardrail-kind lessons and the out-of-date line never are.
|
|
89
|
+
*/
|
|
90
|
+
export function runBlock(c, ctx) {
|
|
91
|
+
// Part 7: a step the person's learning goes against shows its way (or is marked to leave out); never cut.
|
|
92
|
+
const marks = ctx.marks ?? [];
|
|
93
|
+
const s = withFixes(c.skill, marks);
|
|
94
|
+
const name = nameOf(c);
|
|
95
|
+
const ood = outOfDateLine(name, ctx.gone ?? goneOf(c, ctx.header === 'job', ctx.anchorDeadline));
|
|
96
|
+
const opening = ood ? [`[trail] ${ood}`] : [];
|
|
97
|
+
// A lesson is information the person kept (J07), filled like the steps; one edited by hand to skip the ask, or to
|
|
98
|
+
// hold a refused or gated command, is left out (D88, D101, 4.14 step 3: lessonRefused).
|
|
99
|
+
const kept = (ctx.lessons ?? lessonsOf(c)).map((l) => ({ ...l, text: fillParams(l.text, ctx.values) })).filter((l) => !lessonRefused(l.text));
|
|
100
|
+
const guardLines = lessonLines(kept.filter(isGuardrailLesson)).map((l) => ` ${l}`);
|
|
101
|
+
const lessonRest = lessonLines(kept.filter((l) => !isGuardrailLesson(l))).map((l) => ` ${l}`);
|
|
102
|
+
const owner = `${OWNER[c.ref.scope] ?? 'yours'}, v${prose(s.meta.version || '1', 12)}, ${whenWords(c)}`;
|
|
103
|
+
const header = ctx.header === 'compact'
|
|
104
|
+
? `[trail] You were partway through skill ${name} when the conversation was compacted. Its steps (${owner}):`
|
|
105
|
+
: `[trail] Skill ${name} fits (${owner}).${ctx.lastFail ? ` Last time step ${ctx.lastFail.step} failed; watch its output.` : ''} Start from these exact steps, in order:`;
|
|
106
|
+
const failed = ctx.probes.filter((p) => !p.ok).map((p) => ` ready: ${prose(p.why ?? p.probe)}.${p.fix ? ` ${prose(p.fix)}` : ''}`);
|
|
107
|
+
const passedWords = ctx.probes.filter((p) => p.ok).map((p) => probePassWords(p.probe)).filter((w) => !!w);
|
|
108
|
+
const passed = passedWords.length ? ` ready: ${passedWords.join(', ')}` : null;
|
|
109
|
+
// D116 item 5: what the person does first (a login the run fed keystrokes into, kept out of the steps).
|
|
110
|
+
const before = beforeYouStart(s.meta).map((l) => ` before you start: ${prose(l)}.`);
|
|
111
|
+
const checkFirst = String(s.meta['check-first'] ?? '').split(' ; ').map((x) => x.trim()).filter(Boolean).map((x) => ` check first: ${flat(x)}`);
|
|
112
|
+
const groups = gatedGroups(s.steps);
|
|
113
|
+
const steps = [];
|
|
114
|
+
for (const st of s.steps) {
|
|
115
|
+
const note = st.wait ? ' (a wait: run it in the background if it may take over 2 minutes)' : st.bg ? ' (in the background)' : '';
|
|
116
|
+
const own = c.skill.steps.find((x) => x.n === st.n)?.cmd ?? st.cmd;
|
|
117
|
+
steps.push(` ${st.n} ${flat(fillParams(st.cmd, ctx.values))}${note}${stepNote(marks, st.n, fillParams(own, ctx.values))}`);
|
|
118
|
+
const g = groups.find((x) => x.steps[x.steps.length - 1] === st.n);
|
|
119
|
+
if (g)
|
|
120
|
+
steps.push(gatedNote(g.steps, ctx.canAsk));
|
|
121
|
+
}
|
|
122
|
+
const chk = checkText(c, ctx.values, s);
|
|
123
|
+
let check = null;
|
|
124
|
+
if (chk) {
|
|
125
|
+
const asStep = [...s.steps].reverse().find((x) => x.cmd === s.check);
|
|
126
|
+
if (asStep && !s.meta['check-tool']) {
|
|
127
|
+
check = chk.shows && !PLAIN_SHOWS.has(chk.shows) ? ` check: step ${asStep.n} passing is the check (it should show ${chk.shows}).` : ` check: step ${asStep.n} passing is the check.`;
|
|
128
|
+
}
|
|
129
|
+
else
|
|
130
|
+
check = ` check: ${chk.text}${chk.shows ? ` (it should show ${chk.shows})` : ''}`;
|
|
131
|
+
}
|
|
132
|
+
// A line edited by hand to hold a command the risk rules refuse is left out.
|
|
133
|
+
const fails = s.ifFails.filter((l) => !neverSave(l)).slice(0, 2).map((l) => ` If it fails: ${prose(l)}`);
|
|
134
|
+
const notes = ctx.notes.map((n) => ` ${prose(n)}`);
|
|
135
|
+
const footer = ` If a step fails, fix that step and say so. End with "Used skill ${name}".`;
|
|
136
|
+
const follow = markLines(marks).map((l) => ` ${prose(l, 400)}`);
|
|
137
|
+
const build = (o) => [
|
|
138
|
+
...opening, header, ...failed, ...(o.passed && passed ? [passed] : []), ...before, ...checkFirst, ...steps, ...(check ? [check] : []), ...follow,
|
|
139
|
+
...fails.slice(0, o.fails), ...(o.notes ? notes : []), footer, ...guardLines, ...lessonRest.slice(lessonRest.length - o.lessons),
|
|
140
|
+
].join('\n');
|
|
141
|
+
const all = lessonRest.length;
|
|
142
|
+
for (const o of [
|
|
143
|
+
{ notes: true, fails: 2, passed: true, lessons: all }, { notes: false, fails: 2, passed: true, lessons: all },
|
|
144
|
+
...Array.from({ length: all }, (_, i) => ({ notes: false, fails: 2, passed: true, lessons: all - 1 - i })),
|
|
145
|
+
{ notes: false, fails: 1, passed: true, lessons: 0 }, { notes: false, fails: 1, passed: false, lessons: 0 },
|
|
146
|
+
]) {
|
|
147
|
+
const block = build(o);
|
|
148
|
+
if (block.length <= RUN_BLOCK_MAX)
|
|
149
|
+
return block;
|
|
150
|
+
}
|
|
151
|
+
return [...opening, `[trail] Skill ${name} fits this ask, but its steps are too long to show here. Run trail skills show ${name} and start from them.`].join('\n');
|
|
152
|
+
}
|
|
153
|
+
/** A GET with curl or wget: no other method, no body, no upload. */
|
|
154
|
+
const HTTP_GET = /^(?:curl|wget)\s/;
|
|
155
|
+
const HTTP_WRITES = /\s(?:-X\s*(?!GET\b)\w|--request\s*(?!GET\b)\w|-d\b|--data\b|--data-\w+|-F\b|--form\b|-T\b|--upload-file\b|--post-\w+|--method=(?!GET\b))/i;
|
|
156
|
+
/**
|
|
157
|
+
* D116 item 1: the check is a step that only reads (a status, a view, a log, a GET, a tests or query run), so a
|
|
158
|
+
* status question may run it. A push (it is the step that moved the branch), anything gated, or a command
|
|
159
|
+
* that changes things is not: that skill gets no check line.
|
|
160
|
+
*/
|
|
161
|
+
export function readOnlyCheck(s) {
|
|
162
|
+
const cmd = String(s.check ?? '').trim();
|
|
163
|
+
if (!cmd)
|
|
164
|
+
return false;
|
|
165
|
+
if (s.meta['check-tool'])
|
|
166
|
+
return true;
|
|
167
|
+
if (gatedKind(cmd) || s.steps.some((x) => x.cmd === s.check && x.gated))
|
|
168
|
+
return false;
|
|
169
|
+
const fam = checkFamilyOf(cmd, s.meta.job ?? null);
|
|
170
|
+
if (fam)
|
|
171
|
+
return fam !== 'push';
|
|
172
|
+
if (HTTP_GET.test(cmd))
|
|
173
|
+
return !HTTP_WRITES.test(` ${cmd}`);
|
|
174
|
+
return commandKind(cmd) === 'look';
|
|
175
|
+
}
|
|
176
|
+
/** The check line for a status question; '' when the skill has no check, or none that only reads (D116 item 1). */
|
|
177
|
+
export function checkLine(c, values) {
|
|
178
|
+
if (!readOnlyCheck(c.skill))
|
|
179
|
+
return '';
|
|
180
|
+
const chk = checkText(c, values);
|
|
181
|
+
const name = nameOf(c);
|
|
182
|
+
if (!chk)
|
|
183
|
+
return '';
|
|
184
|
+
return `[trail] To check ${name}: ${chk.text}${chk.shows ? ` (it should show ${chk.shows})` : ''}. Answer from what it shows; don't run any other step.`;
|
|
185
|
+
}
|
|
186
|
+
/** D106: a check that shows a `{version}` param, filled with a literal version: what credit expects it to show. */
|
|
187
|
+
function checkVersionOf(c, values) {
|
|
188
|
+
const name = /^\{([A-Za-z_]\w*)\}$/.exec(String(c.skill.checkShows ?? '').trim())?.[1];
|
|
189
|
+
const v = name && c.skill.params.some((p) => p.name === name && p.shape === 'version') ? values[name] : undefined;
|
|
190
|
+
const m = v === undefined ? null : /^v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)$/.exec(v.trim());
|
|
191
|
+
return m ? { checkVersion: m[1] } : {};
|
|
192
|
+
}
|
|
193
|
+
/** The SkillInjection recorded for a block or check line (live: true for job, name and compact cues). */
|
|
194
|
+
export function injectionFor(c, values, cue, epoch, now = new Date()) {
|
|
195
|
+
const s = c.skill;
|
|
196
|
+
const block = cue !== 'check';
|
|
197
|
+
const tool = s.meta['check-tool'];
|
|
198
|
+
return {
|
|
199
|
+
injId: `i-${randomBytes(3).toString('hex')}`,
|
|
200
|
+
skillId: c.ref.id || s.meta.trail,
|
|
201
|
+
name: c.ref.name || s.name,
|
|
202
|
+
epoch,
|
|
203
|
+
at: now.toISOString(),
|
|
204
|
+
cue,
|
|
205
|
+
params: { ...values },
|
|
206
|
+
steps: block ? s.steps.map((st) => fillParams(st.cmd, values)) : [],
|
|
207
|
+
gated: block ? s.steps.filter((st) => st.gated).map((st) => ({ step: st.n, kind: st.gated })) : [],
|
|
208
|
+
check: s.check ? fillParams(s.check, values) : null,
|
|
209
|
+
...(tool ? { checkTool: tool } : {}),
|
|
210
|
+
...checkVersionOf(c, values),
|
|
211
|
+
runId: null,
|
|
212
|
+
live: block,
|
|
213
|
+
// 1b (R30): the asks phrase a job cue fired on, by its sha only.
|
|
214
|
+
...(cue === 'job' && typeof c.phraseSha === 'string' && /^[0-9a-f]{8}$/.test(c.phraseSha) ? { phraseSha: c.phraseSha } : {}),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/** g4's open issue 4 (D71 d): the ready probes that failed for a block ride on its injection, for the use line (never counted against the skill). */
|
|
218
|
+
export function withReadyFailed(inj, probes) {
|
|
219
|
+
const failed = probes.filter((p) => !p.ok).map((p) => p.probe);
|
|
220
|
+
return failed.length ? { ...inj, readyFailed: failed } : inj;
|
|
221
|
+
}
|
|
222
|
+
/** 'trail: using skill <name> (v<n>, worked <Mon D>)'. */
|
|
223
|
+
export function useNotice(c) {
|
|
224
|
+
const when = c.state?.lastWorked ? `worked ${dayWords(c.state.lastWorked)}` : `saved ${dayWords(c.state?.addedAt ?? null)}`;
|
|
225
|
+
return `trail: using skill ${nameOf(c)} (v${prose(c.skill.meta.version || '1', 12)}, ${when})`;
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=runblock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runblock.js","sourceRoot":"","sources":["../../src/skills/runblock.ts"],"names":[],"mappings":"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"}
|