@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,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The update gate (phase 2 design 4.11, P29, R4, R14): 1a's dual consent for
|
|
3
|
+
* `trail skills update <name> --offer <id>`, the one command that changes a
|
|
4
|
+
* skill Trail kept. An agent can never change a skill without the person's
|
|
5
|
+
* typed yes to the offer that showed that exact change.
|
|
6
|
+
*
|
|
7
|
+
* The PreToolUse half (`checkSkillsUpdate`) denies, or writes a receipt and
|
|
8
|
+
* lets the command run. The CLI half (`cliUpdate`) never trusts the receipt:
|
|
9
|
+
* it re-decides from the transcript under the session lock (the same
|
|
10
|
+
* `decide`), plans the change again, and writes only when the plan still
|
|
11
|
+
* gives the `proposalSha` the person saw from the file it was computed from
|
|
12
|
+
* (`baseHash`). Every new or changed step is read again in the transcript at
|
|
13
|
+
* its offsets and must show it ran as stored and worked (R4), so no step
|
|
14
|
+
* comes from a run sheet the agent edited or from text it only read.
|
|
15
|
+
*
|
|
16
|
+
* A file the person changed by hand is never written: the change goes beside
|
|
17
|
+
* it as a proposal (4.6). Loaded only for an update command (the save gate
|
|
18
|
+
* imports it lazily), and never loads the CLI or telemetry.
|
|
19
|
+
*/
|
|
20
|
+
import { createHash } from 'node:crypto';
|
|
21
|
+
import { lstatSync, readdirSync } from 'node:fs';
|
|
22
|
+
import { homedir } from 'node:os';
|
|
23
|
+
import { join, relative, isAbsolute, sep } from 'node:path';
|
|
24
|
+
import { skillsGate, withSkillSession } from '../trace/skill-session.js';
|
|
25
|
+
import { joinCarriedSheet, readRunSheet } from '../trace/runs.js';
|
|
26
|
+
import { classifyFor } from './offer-answers.js';
|
|
27
|
+
import { CLAUDE_DIALECT, dialectFor } from '../trace/dialect.js';
|
|
28
|
+
import { flatLine } from '../notes/flatten.js';
|
|
29
|
+
import { readJsonSafe, trailPath, withLock, writePrivate } from '../util/private-fs.js';
|
|
30
|
+
import { hookError } from '../claude/skills-hook-util.js';
|
|
31
|
+
import { skillsOn } from './settings.js';
|
|
32
|
+
import { hostFacts } from './host-facts.js';
|
|
33
|
+
import { codexSandboxRefusal } from './codex-sandbox.js';
|
|
34
|
+
import { endsWithLine } from './offer-words.js';
|
|
35
|
+
import { offerLinesOf } from './offer-lines.js';
|
|
36
|
+
import { receiptPath, receiptTranscriptOk, receiptTranscriptRead, typedLineStillThere } from './receipts.js';
|
|
37
|
+
import { dialectUse, personLine, ranAndWorked, replyBefore } from './save-verify.js';
|
|
38
|
+
import { parseSkillsUpdate, SKILLS_UPDATE_RE } from './save-parse.js';
|
|
39
|
+
import { bashCommand, tailCalls, tamperInTail } from './save-gate.js';
|
|
40
|
+
import { listAllPersonal } from './store.js';
|
|
41
|
+
import { writeNewVersion, writeProposal } from './versions.js';
|
|
42
|
+
import { replan } from './update-plan.js';
|
|
43
|
+
export { parseSkillsUpdate, SKILLS_UPDATE_RE as UPDATE_RE } from './save-parse.js';
|
|
44
|
+
export { foldInputFor, proposalShaOf, replan } from './update-plan.js';
|
|
45
|
+
/** An update receipt older than this is stale (4.11 CLI step 1). */
|
|
46
|
+
const FRESH_MS = 30 * 60_000;
|
|
47
|
+
const AHEAD_MS = 5_000;
|
|
48
|
+
const SKEW_MS = 5_000;
|
|
49
|
+
const CMD_MAX = 64 * 1024;
|
|
50
|
+
const NOT = 'trail · not changed: ';
|
|
51
|
+
export const UPDATE_DENY = {
|
|
52
|
+
flags: `${NOT}\`trail skills update\` takes only the skill's name and --offer <id>, and runs on its own.`,
|
|
53
|
+
tooLong: `${NOT}that command is too long for Trail to read, so it changes nothing.`,
|
|
54
|
+
noOffer: `${NOT}there is no change offer with that id in this session, so there is nothing the person said yes to.`,
|
|
55
|
+
noYes: `${NOT}the person didn't say yes to this change.`,
|
|
56
|
+
subagent: `${NOT}only the main session can change a skill.`,
|
|
57
|
+
noPerson: `${NOT}this session runs without a person at the keyboard (headless, CI or a scratch folder), so Trail changes nothing from it.`,
|
|
58
|
+
busy: `${NOT}Trail was busy. Run the same command again.`,
|
|
59
|
+
transcript: `${NOT}Trail couldn't find this conversation where Claude Code keeps it, so it can't check that the person said yes.`,
|
|
60
|
+
};
|
|
61
|
+
const one = (t, max = 60) => flatLine(t, max);
|
|
62
|
+
export const changedDeny = (name) => `${NOT}${one(name)} changed since Trail showed this, so nothing changed. The person can see it with: trail skills show ${one(name)}`;
|
|
63
|
+
const nameDeny = (name, id) => `${NOT}the offer was for the skill ${one(name)}. Run: trail skills update ${one(name)} --offer ${one(id, 40)}`;
|
|
64
|
+
const splitDeny = (name, runId) => `${NOT}that offer keeps the steps as a new skill. Run: trail skills add ${one(name)} --run ${one(runId, 40)}`;
|
|
65
|
+
const neverRanDeny = (cmds) => `${NOT}these steps never ran here and worked: ${cmds.map((c) => one(c, 80)).join('; ')}.`;
|
|
66
|
+
const tamperDeny = (what) => `${NOT}this session changed Trail's own files (${one(what, 120)}), so Trail can't trust its record of what was offered.`;
|
|
67
|
+
/**
|
|
68
|
+
* The person's yes to this offer, as `classifyFor` reads it for the offer's moment (4.10): 1a's yes words for an
|
|
69
|
+
* update; for drift its own word `replace` and 1a's yes words but not the keep or save ones ("keep it" there means leave it).
|
|
70
|
+
*/
|
|
71
|
+
const isYes = (moment, afterShow) => (t) => classifyFor(moment, t, afterShow) === 'yes';
|
|
72
|
+
/** The steps of `next` that aren't steps of `base` (the new or changed ones), with the calls they were copied from. */
|
|
73
|
+
const changedSteps = (base, next) => next.steps.filter((s) => !base.steps.some((b) => b.cmd === s.cmd));
|
|
74
|
+
/** 4.11 steps 1, 3, 4, 5b and 6, both halves. Tamper (step 5) is read by each half from the transcript's tail. */
|
|
75
|
+
function decide(cmd, ctx, st) {
|
|
76
|
+
const env = ctx.env;
|
|
77
|
+
if (ctx.subagent)
|
|
78
|
+
return { deny: UPDATE_DENY.subagent };
|
|
79
|
+
if (!ctx.fold || !ctx.learn)
|
|
80
|
+
return { deny: UPDATE_DENY.noPerson };
|
|
81
|
+
if (!cmd)
|
|
82
|
+
return { deny: UPDATE_DENY.flags };
|
|
83
|
+
if (st.tampered)
|
|
84
|
+
return { deny: tamperDeny(st.tampered) };
|
|
85
|
+
const po = st.pendingOffer;
|
|
86
|
+
if (!po || po.offerId !== cmd.offerId || (po.moment !== 'update' && po.moment !== 'drift') || !po.fold)
|
|
87
|
+
return { deny: UPDATE_DENY.noOffer };
|
|
88
|
+
if (po.fold.op === 'split')
|
|
89
|
+
return { deny: splitDeny(po.name, po.runId) };
|
|
90
|
+
if (cmd.name !== po.name)
|
|
91
|
+
return { deny: nameDeny(po.name, po.offerId) };
|
|
92
|
+
const fold = po.fold;
|
|
93
|
+
const sheet = readRunSheet(po.runId, env);
|
|
94
|
+
if (!sheet || sheet.session !== ctx.sessionHash)
|
|
95
|
+
return { deny: UPDATE_DENY.noOffer };
|
|
96
|
+
const tx = ctx.transcriptPath;
|
|
97
|
+
if (!tx || !po.shownAt || !po.yes)
|
|
98
|
+
return { deny: UPDATE_DENY.noYes };
|
|
99
|
+
const ta = po.typedAfter;
|
|
100
|
+
const entry = ta[0]?.answer === 'show' ? ta[1] : ta[0];
|
|
101
|
+
if (!entry || entry.answer !== 'yes' || entry.sha !== po.yes.typedSha)
|
|
102
|
+
return { deny: UPDATE_DENY.noYes };
|
|
103
|
+
const afterShow = entry !== ta[0];
|
|
104
|
+
// 4.16: every read of the transcript goes through the host's dialect (a Codex typed line counts by its keyed hash).
|
|
105
|
+
const use = dialectUse(ctx.host, st);
|
|
106
|
+
const p = personLine(tx, entry.offset, entry.sha, isYes(po.moment, afterShow), env, undefined, use);
|
|
107
|
+
// A yes typed before the offer was shown is no yes to it.
|
|
108
|
+
if (!p || !(p.at + SKEW_MS >= Date.parse(po.shownAt)))
|
|
109
|
+
return { deny: UPDATE_DENY.noYes };
|
|
110
|
+
// D72, R11: the agent's reply right before the yes ended with the offer's own line 2, after "show me" too (c3's show
|
|
111
|
+
// directive asks line 2 again after the diff, never 1a's Keep it?).
|
|
112
|
+
const lines = offerLinesOf(po, tx, env, use);
|
|
113
|
+
const notice = po.channel === 'notice' && hostFacts(env, ctx.host).offerChannel === 'notice';
|
|
114
|
+
if (!lines || (!notice && !endsWithLine(replyBefore(tx, entry.offset, env, use) ?? '', lines[1])))
|
|
115
|
+
return { deny: UPDATE_DENY.noYes };
|
|
116
|
+
// 6 (P29, R14): the same change, from the same file.
|
|
117
|
+
const plan = replan(fold.skillId, po.runId, fold.op, env, { st });
|
|
118
|
+
if (!plan || plan.baseHash !== fold.baseHash || plan.proposalSha !== fold.proposalSha)
|
|
119
|
+
return { deny: changedDeny(po.name) };
|
|
120
|
+
// 5b (R4): every new or changed step ran here, as stored, and worked, read again in the transcript.
|
|
121
|
+
const joined = joinCarriedSheet(sheet, (id) => readRunSheet(id, env));
|
|
122
|
+
const byId = new Map(joined.calls.map((c) => [c.id, c]));
|
|
123
|
+
const units = changedSteps(plan.base, plan.next).map((s) => ({ ids: s.from ?? [], text: s.cmd }));
|
|
124
|
+
// A check the old version didn't have (drift's replace takes the fresh compile's), as 1a's add gate reads one (step 7).
|
|
125
|
+
const checkCall = joined.checkIndex === null ? null : joined.calls[joined.checkIndex] ?? null;
|
|
126
|
+
if (plan.next.check && !plan.next.checkIsStep && plan.next.check !== plan.base.check)
|
|
127
|
+
units.push({ ids: checkCall ? [checkCall.id] : [], text: plan.next.check });
|
|
128
|
+
const bad = units.filter((u) => !u.ids.length || !u.ids.every((id) => ranAndWorked(byId.get(id), tx, joined.job, use, env)));
|
|
129
|
+
if (bad.length)
|
|
130
|
+
return { deny: neverRanDeny(bad.slice(0, 3).map((u) => u.text)) };
|
|
131
|
+
return { po: po, typed: p.typed, plan };
|
|
132
|
+
}
|
|
133
|
+
/* -------------------------------------------------------------- the receipts */
|
|
134
|
+
const updateReceiptPath = (session, env) => receiptPath(session, env).replace(/\.json$/, '.update.json');
|
|
135
|
+
const str = (v) => typeof v === 'string';
|
|
136
|
+
const OPS = new Set(['update', 'extend', 'replace']);
|
|
137
|
+
function asUpdateReceipt(v) {
|
|
138
|
+
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
139
|
+
return null;
|
|
140
|
+
const r = v;
|
|
141
|
+
if (r.v !== 1 || r.kind !== 'update' || !str(r.session) || !str(r.transcriptPath) || !str(r.toolUseId) || !str(r.host))
|
|
142
|
+
return null;
|
|
143
|
+
if (!str(r.offerId) || !str(r.skillId) || !str(r.name) || !str(r.runId) || !OPS.has(r.op) || !str(r.baseHash) || !str(r.proposalSha) || !str(r.at))
|
|
144
|
+
return null;
|
|
145
|
+
if (!r.typed || typeof r.typed !== 'object' || typeof r.typed.offset !== 'number' || !str(r.typed.lineSha))
|
|
146
|
+
return null;
|
|
147
|
+
return r.usedAt === null || str(r.usedAt) ? r : null;
|
|
148
|
+
}
|
|
149
|
+
function readUpdateReceipt(path) {
|
|
150
|
+
try {
|
|
151
|
+
if (!lstatSync(path).isFile())
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
return asUpdateReceipt(readJsonSafe(path));
|
|
158
|
+
}
|
|
159
|
+
/** The unused update receipt for this offer and name, under 30 minutes old (any session's file; the newest). */
|
|
160
|
+
export function findUpdateReceipt(offerId, name, now, env) {
|
|
161
|
+
let names;
|
|
162
|
+
try {
|
|
163
|
+
names = readdirSync(trailPath(env, 'receipts'));
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
let best = null;
|
|
169
|
+
for (const n of names) {
|
|
170
|
+
if (!n.endsWith('.update.json'))
|
|
171
|
+
continue;
|
|
172
|
+
const r = readUpdateReceipt(join(trailPath(env, 'receipts'), n));
|
|
173
|
+
if (!r || r.usedAt !== null || r.offerId !== offerId || r.name !== name)
|
|
174
|
+
continue;
|
|
175
|
+
const age = now.getTime() - Date.parse(r.at);
|
|
176
|
+
if (Number.isNaN(age) || age > FRESH_MS || age < -AHEAD_MS)
|
|
177
|
+
continue;
|
|
178
|
+
if (!best || Date.parse(r.at) > Date.parse(best.at))
|
|
179
|
+
best = r;
|
|
180
|
+
}
|
|
181
|
+
return best;
|
|
182
|
+
}
|
|
183
|
+
function markUpdateReceiptUsed(r, now, env) {
|
|
184
|
+
const path = updateReceiptPath(r.session, env);
|
|
185
|
+
withLock(path, () => {
|
|
186
|
+
const cur = readUpdateReceipt(path);
|
|
187
|
+
if (!cur || cur.toolUseId !== r.toolUseId || cur.at !== r.at || cur.usedAt !== null)
|
|
188
|
+
return;
|
|
189
|
+
writePrivate(path, `${JSON.stringify({ ...cur, usedAt: now.toISOString() }, null, 2)}\n`);
|
|
190
|
+
}, 1000);
|
|
191
|
+
}
|
|
192
|
+
/** The receipt as 1a's transcript checks read one: tier A always (updates are tier A only), so another host's is refused. */
|
|
193
|
+
const asReceipt = (r) => ({ ...r, tier: 'A' });
|
|
194
|
+
/* ----------------------------------------------------------- PreToolUse half */
|
|
195
|
+
/** 4.11's PreToolUse half: a deny with the reason, or null after writing the receipt (the call runs). */
|
|
196
|
+
export function checkSkillsUpdate(input, ctx, st, _fold) {
|
|
197
|
+
const command = input?.tool_input?.command;
|
|
198
|
+
if (typeof command !== 'string' || !SKILLS_UPDATE_RE.test(command))
|
|
199
|
+
return null;
|
|
200
|
+
if (command.length > CMD_MAX)
|
|
201
|
+
return { permissionDecision: 'deny', reason: UPDATE_DENY.tooLong };
|
|
202
|
+
const cmd = parseSkillsUpdate(command);
|
|
203
|
+
const tx = ctx.transcriptPath;
|
|
204
|
+
const tampered = cmd && tx && !ctx.subagent && ctx.learn ? tamperInTail(tailCalls(tx, dialectFor(ctx.host) ?? CLAUDE_DIALECT, ctx.env), tx, ctx.env) : null;
|
|
205
|
+
if (tampered)
|
|
206
|
+
return { permissionDecision: 'deny', reason: tamperDeny(tampered) };
|
|
207
|
+
const d = decide(cmd, ctx, st);
|
|
208
|
+
if ('deny' in d)
|
|
209
|
+
return { permissionDecision: 'deny', reason: d.deny };
|
|
210
|
+
const r = {
|
|
211
|
+
v: 1, kind: 'update', session: ctx.sessionId, transcriptPath: tx ?? '', toolUseId: typeof input?.tool_use_id === 'string' ? input.tool_use_id : '',
|
|
212
|
+
host: ctx.host, offerId: d.po.offerId, skillId: d.po.fold.skillId, name: d.po.name, runId: d.po.runId, op: d.po.fold.op,
|
|
213
|
+
baseHash: d.plan.baseHash, proposalSha: d.plan.proposalSha, typed: d.typed, at: ctx.now.toISOString(), usedAt: null,
|
|
214
|
+
};
|
|
215
|
+
writePrivate(updateReceiptPath(ctx.sessionId, ctx.env), `${JSON.stringify(r, null, 2)}\n`);
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
/** 3.3 step 3 for an update command, from the hook's payload: the gate, then `checkSkillsUpdate` under the session lock. */
|
|
219
|
+
export function updateGate(input, dir, env = process.env, now) {
|
|
220
|
+
try {
|
|
221
|
+
const g = skillsGate(input, dir, env, now);
|
|
222
|
+
if (!g.ok)
|
|
223
|
+
return null;
|
|
224
|
+
const ctx = g.ctx;
|
|
225
|
+
if (ctx.subagent)
|
|
226
|
+
return { permissionDecision: 'deny', reason: UPDATE_DENY.subagent };
|
|
227
|
+
if (!ctx.fold)
|
|
228
|
+
return { permissionDecision: 'deny', reason: UPDATE_DENY.noPerson };
|
|
229
|
+
const r = withSkillSession(ctx, { catchUp: true, waitMs: 300 }, (st, fold) => checkSkillsUpdate(input, ctx, st, fold));
|
|
230
|
+
return r === undefined ? { permissionDecision: 'deny', reason: UPDATE_DENY.busy } : r;
|
|
231
|
+
}
|
|
232
|
+
catch (e) {
|
|
233
|
+
// 0 rule 5: the command runs, and the CLI finds no receipt and changes nothing.
|
|
234
|
+
hookError('pre-bash', e, env);
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const fail = (line) => ({ code: 1, lines: [line] });
|
|
239
|
+
/** The transcript shows the main session's agent running exactly this update, with the receipt's tool_use id. */
|
|
240
|
+
function updateInTranscript(r, name, offerId, calls) {
|
|
241
|
+
if (!r.toolUseId)
|
|
242
|
+
return false;
|
|
243
|
+
return calls.some((call) => {
|
|
244
|
+
const raw = call.id === r.toolUseId ? bashCommand(call) : null;
|
|
245
|
+
const c = raw === null ? null : parseSkillsUpdate(raw);
|
|
246
|
+
return c !== null && c.name === name && c.offerId === offerId;
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
/** A path as the person reads it: `~/…` under their home (Windows may set only USERPROFILE, which homedir() reads). */
|
|
250
|
+
function shown(p, env) {
|
|
251
|
+
const home = env.HOME || homedir();
|
|
252
|
+
const rel = home && isAbsolute(p) ? relative(home, p) : '';
|
|
253
|
+
// Forward slashes either way: the person pastes it into Git Bash or PowerShell on Windows, and both take them.
|
|
254
|
+
return rel && !rel.startsWith('..') && !isAbsolute(rel) ? `~/${rel.split(sep).join('/')}` : p.split(sep).join('/');
|
|
255
|
+
}
|
|
256
|
+
/** What changed, in words: `step 4 is now '…'`, `step 5 added: '…'`, `the 4 steps that just worked replace the old ones`. */
|
|
257
|
+
export function whatChanged(op, plan) {
|
|
258
|
+
const q = (c) => `'${one(c, 60).replace(/'/g, '"')}'`;
|
|
259
|
+
if (op === 'update' && plan.plan?.op === 'update')
|
|
260
|
+
return `step ${plan.plan.step} is now ${q(plan.plan.cmd.cmd)}`;
|
|
261
|
+
if (op === 'extend' && plan.plan?.op === 'extend') {
|
|
262
|
+
const at = plan.plan.at;
|
|
263
|
+
const cmds = plan.plan.cmds;
|
|
264
|
+
return cmds.length === 1 ? `step ${at + 1} added: ${q(cmds[0].cmd)}` : `steps ${at + 1} and ${at + 2} added: ${q(cmds[0].cmd)} and ${q(cmds[1].cmd)}`;
|
|
265
|
+
}
|
|
266
|
+
const k = plan.next.steps.length;
|
|
267
|
+
return `the ${k} step${k === 1 ? '' : 's'} that just worked replace the old ones`;
|
|
268
|
+
}
|
|
269
|
+
const WRITE_WHY = {
|
|
270
|
+
busy: UPDATE_DENY.busy,
|
|
271
|
+
link: `${NOT}the skill's folder in Trail's home is a link, so Trail won't write through it.`,
|
|
272
|
+
io: `${NOT}Trail couldn't write the new version, so the skill is as it was.`,
|
|
273
|
+
};
|
|
274
|
+
/** 4.11's CLI half: re-decides from the transcript, plans again, writes the new version or the proposal. Exit 0 changed, 1 not. */
|
|
275
|
+
export function cliUpdate(name, offerId, env = process.env, now = new Date()) {
|
|
276
|
+
if (!skillsOn(env))
|
|
277
|
+
return fail('Skills are off. Turn them on with: trail skills on');
|
|
278
|
+
const found = findUpdateReceipt(offerId, name, now, env);
|
|
279
|
+
if (!found)
|
|
280
|
+
return fail(UPDATE_DENY.noYes);
|
|
281
|
+
const sandboxed = codexSandboxRefusal(found.host, `trail skills update ${name} --offer ${offerId}`, env);
|
|
282
|
+
if (sandboxed)
|
|
283
|
+
return fail(sandboxed);
|
|
284
|
+
const r = receiptTranscriptOk(asReceipt(found), env) && receiptTranscriptRead(asReceipt(found), env) ? found : null;
|
|
285
|
+
if (!r) {
|
|
286
|
+
markUpdateReceiptUsed(found, now, env);
|
|
287
|
+
return fail(UPDATE_DENY.transcript);
|
|
288
|
+
}
|
|
289
|
+
const calls = tailCalls(r.transcriptPath, dialectFor(r.host) ?? CLAUDE_DIALECT, env);
|
|
290
|
+
if (!updateInTranscript(r, name, offerId, calls))
|
|
291
|
+
return fail(UPDATE_DENY.noYes);
|
|
292
|
+
const tampered = tamperInTail(calls, r.transcriptPath, env);
|
|
293
|
+
if (tampered) {
|
|
294
|
+
markUpdateReceiptUsed(r, now, env);
|
|
295
|
+
return fail(tamperDeny(tampered));
|
|
296
|
+
}
|
|
297
|
+
const sheet = readRunSheet(r.runId, env);
|
|
298
|
+
if (!sheet) {
|
|
299
|
+
markUpdateReceiptUsed(r, now, env);
|
|
300
|
+
return fail(`${NOT}the run it came from is gone (runs are kept 7 days).`);
|
|
301
|
+
}
|
|
302
|
+
const ctx = {
|
|
303
|
+
sessionId: r.session, sessionHash: createHash('sha256').update(r.session).digest('hex').slice(0, 12), host: r.host, tier: 'A',
|
|
304
|
+
entry: 'interactive', permissionMode: null, subagent: false, fold: true, learn: true, learnOff: null, dir: sheet.checkout ?? '',
|
|
305
|
+
checkout: sheet.checkout ?? '', repoKey: sheet.repoKey, transcriptPath: r.transcriptPath, env, now,
|
|
306
|
+
};
|
|
307
|
+
let out;
|
|
308
|
+
try {
|
|
309
|
+
out = withSkillSession(ctx, { catchUp: true, waitMs: 1000 }, (st) => {
|
|
310
|
+
const d = decide({ name, offerId }, ctx, st);
|
|
311
|
+
if ('deny' in d)
|
|
312
|
+
return fail(d.deny);
|
|
313
|
+
const backed = d.typed.offset === r.typed.offset && d.typed.lineSha === r.typed.lineSha && typedLineStillThere(r.transcriptPath, r.typed)
|
|
314
|
+
&& d.plan.proposalSha === r.proposalSha && d.plan.baseHash === r.baseHash && d.po.fold.op === r.op && d.po.fold.skillId === r.skillId;
|
|
315
|
+
if (!backed)
|
|
316
|
+
return fail(changedDeny(name));
|
|
317
|
+
const ref = listAllPersonal(env).find((x) => x.id === r.skillId && x.name === name);
|
|
318
|
+
if (!ref)
|
|
319
|
+
return fail(changedDeny(name));
|
|
320
|
+
const op = r.op;
|
|
321
|
+
if (d.plan.handEdited) {
|
|
322
|
+
const p = writeProposal(ref, d.plan.next, r.op, env, now);
|
|
323
|
+
if (!p)
|
|
324
|
+
return fail(`${NOT}Trail couldn't write the change beside ${one(name)}, so nothing changed.`);
|
|
325
|
+
st.pendingOffer = null;
|
|
326
|
+
const diff = p.diff ? p.diff.split('\n') : [];
|
|
327
|
+
return {
|
|
328
|
+
code: 0, op, proposal: true, lines: [
|
|
329
|
+
...diff,
|
|
330
|
+
`Tell the person: you changed ${one(name)} by hand, so Trail left it alone and wrote the change beside it. To use it, they run this in their own terminal: cp ${shown(p.path, env)} ${shown(ref.file, env)} (their edited file is kept in .versions/${p.hand})`,
|
|
331
|
+
],
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
const w = writeNewVersion(ref, d.plan.next, { op, offerId, baseHash: d.plan.baseHash, lessonIds: d.plan.plan?.op === 'extend' ? d.plan.plan.lessonIds : undefined, env, now });
|
|
335
|
+
if (!w.ok)
|
|
336
|
+
return fail(w.why === 'changed' ? changedDeny(name) : WRITE_WHY[w.why]);
|
|
337
|
+
st.pendingOffer = null;
|
|
338
|
+
const what = whatChanged(op, d.plan);
|
|
339
|
+
const n = w.version;
|
|
340
|
+
return {
|
|
341
|
+
code: 0, op, lines: [
|
|
342
|
+
`✓ changed ${one(name)} to v${n} · ${what}`,
|
|
343
|
+
`Tell the person what Trail changed: ${one(name)} is now v${n}: ${what}. It's a candidate again until its next checked use. The old version is kept; to go back: trail skills restore ${one(name)} --version ${n - 1}`,
|
|
344
|
+
],
|
|
345
|
+
};
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
catch (e) {
|
|
349
|
+
out = fail(`${NOT}${one(e instanceof Error ? e.message : String(e), 160).replace(/^trail:\s*/, '')}`);
|
|
350
|
+
}
|
|
351
|
+
// 4.11 CLI step 4: used once, a refusal included; a busy session lock leaves it for the same command again.
|
|
352
|
+
if (out === undefined)
|
|
353
|
+
return fail(UPDATE_DENY.busy);
|
|
354
|
+
markUpdateReceiptUsed(r, now, env);
|
|
355
|
+
return out;
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=update-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-gate.js","sourceRoot":"","sources":["../../src/skills/update-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { CompiledSkill, FoldOp } from './types.js';
|
|
2
|
+
import type { RunSheet, SkillInjection, SkillSessionState } from '../trace/types.js';
|
|
3
|
+
import { type FoldInput, type FoldPlan } from './fold.js';
|
|
4
|
+
export type PlanInj = Pick<SkillInjection, 'params' | 'steps' | 'at' | 'check'>;
|
|
5
|
+
/** `inj`: the block's injection (Stop passes the live one); else it is found in `st`, else in the run's session file. */
|
|
6
|
+
export interface PlanOpts {
|
|
7
|
+
inj?: PlanInj;
|
|
8
|
+
st?: SkillSessionState | null;
|
|
9
|
+
now?: Date;
|
|
10
|
+
}
|
|
11
|
+
export interface Replanned {
|
|
12
|
+
next: CompiledSkill;
|
|
13
|
+
text: string;
|
|
14
|
+
/** 16 hex of sha256 of `text` (4.7). */
|
|
15
|
+
proposalSha: string;
|
|
16
|
+
/** `skillHash` of the file the plan was computed from. */
|
|
17
|
+
baseHash: string;
|
|
18
|
+
/** That file's text, for the printed diff (`draft --print`). */
|
|
19
|
+
current: string;
|
|
20
|
+
/** The file isn't what Trail last wrote: the change goes beside it (4.6). */
|
|
21
|
+
handEdited: boolean;
|
|
22
|
+
/** The fold plan; null for drift's replace. */
|
|
23
|
+
plan: Extract<FoldPlan, {
|
|
24
|
+
op: 'update' | 'extend';
|
|
25
|
+
}> | null;
|
|
26
|
+
base: CompiledSkill;
|
|
27
|
+
fresh: CompiledSkill | null;
|
|
28
|
+
}
|
|
29
|
+
/** The run's own session file (its `skills.sessionHash` is the sheet's), among the 64 newest: for draft, which has no session. */
|
|
30
|
+
export declare function sessionOf(sheet: RunSheet, env: NodeJS.ProcessEnv): SkillSessionState | null;
|
|
31
|
+
/** The fold input for one checked use of the skill (4.2), from disk; null when the skill, the run or its block is gone. */
|
|
32
|
+
export declare function foldInputFor(skillId: string, runId: string, env?: NodeJS.ProcessEnv, o?: PlanOpts): FoldInput | null;
|
|
33
|
+
export declare const proposalShaOf: (text: string) => string;
|
|
34
|
+
/**
|
|
35
|
+
* The change again, from the run sheet and the file as they are now (4.11 step 6). Update and extend: `planFold`
|
|
36
|
+
* must give that same op. Replace (drift): the fresh compile as the next version, keeping the skill's id, name and
|
|
37
|
+
* asks. The next version is numbered past every kept one, as the write numbers it. null: nothing to change.
|
|
38
|
+
*/
|
|
39
|
+
export declare function replan(skillId: string, runId: string, op: FoldOp | 'replace', env?: NodeJS.ProcessEnv, o?: PlanOpts): Replanned | null;
|
|
40
|
+
//# sourceMappingURL=update-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-plan.d.ts","sourceRoot":"","sources":["../../src/skills/update-plan.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAmC,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMrF,OAAO,EAAoC,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAa5F,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC;AAChF,yHAAyH;AACzH,MAAM,WAAW,QAAQ;IAAG,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE;AAEtF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE;QAAE,EAAE,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CAC7B;AA4CD,kIAAkI;AAClI,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAgB3F;AAgDD,2HAA2H;AAC3H,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,CAAC,GAAE,QAAa,GAAG,SAAS,GAAG,IAAI,CAMrI;AAED,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,WAAyE,CAAC;AAEpH;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,CAAC,GAAE,QAAa,GAAG,SAAS,GAAG,IAAI,CAyBvJ"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The change a moment 5 or 6 offer shows, worked out again from disk
|
|
3
|
+
* (phase 2 design 4.11, R14): the run sheet, the skill file as it is now, its
|
|
4
|
+
* unfolded lessons, and the ledger uses from before that run started (never
|
|
5
|
+
* later ones, so a use another session flushed since can't move the plan).
|
|
6
|
+
* One builder (`foldInputFor`) and one plan (`replan`) serve the offer at
|
|
7
|
+
* Stop (c3, through `OfferInput.plan`), both halves of the update gate and
|
|
8
|
+
* `trail skills draft --print`, so they can't disagree: the offer pins the
|
|
9
|
+
* `proposalSha` and `baseHash` this returns, and the gate writes only when
|
|
10
|
+
* they come out the same again.
|
|
11
|
+
*
|
|
12
|
+
* Re-exported from `update-gate.ts`, where the design names `replan`.
|
|
13
|
+
* Loaded only on the update paths, never on the PreToolUse fast path.
|
|
14
|
+
*/
|
|
15
|
+
import { createHash } from 'node:crypto';
|
|
16
|
+
import { lstatSync, readdirSync, readFileSync } from 'node:fs';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
import { joinCarriedSheet, readRunSheet } from '../trace/runs.js';
|
|
20
|
+
import { readJsonSafe, trailPath } from '../util/private-fs.js';
|
|
21
|
+
import { compileRun, proposeName } from './compile.js';
|
|
22
|
+
import { fidelityOf } from './fidelity.js';
|
|
23
|
+
import { fidelityWhere } from './credit-facts.js';
|
|
24
|
+
import { applyFold, planFold, replaceWith } from './fold.js';
|
|
25
|
+
import { readLedger } from './ledger.js';
|
|
26
|
+
import { readLessons } from './lessons.js';
|
|
27
|
+
import { runCheckout } from './run-checkout.js';
|
|
28
|
+
import { rebuildCompiled, rebuildLoose } from './skill-rebuild.js';
|
|
29
|
+
import { parseSkillMd, renderSkillMd, skillHash } from './skillmd.js';
|
|
30
|
+
import { getSkillState } from './state.js';
|
|
31
|
+
import { listAllPersonal, nameTaken } from './store.js';
|
|
32
|
+
import { MAX_SKILL_BYTES } from './store-fs.js';
|
|
33
|
+
import { nextVersion } from './versions.js';
|
|
34
|
+
import { fillParams } from './params.js';
|
|
35
|
+
import { recallMarks, stepLearnings, whose } from './follow-learnings.js';
|
|
36
|
+
const MAX_EARLIER = 4;
|
|
37
|
+
const SESSION_FILES = 64;
|
|
38
|
+
const SESSION_MAX_BYTES = 8 * 1024 * 1024;
|
|
39
|
+
/** The file's text when it is a regular file of at most 64 KB and neither it nor its folder is a link. */
|
|
40
|
+
function ownText(ref) {
|
|
41
|
+
try {
|
|
42
|
+
if (lstatSync(ref.dir).isSymbolicLink())
|
|
43
|
+
return null;
|
|
44
|
+
const s = lstatSync(ref.file);
|
|
45
|
+
if (!s.isFile() || s.size > MAX_SKILL_BYTES)
|
|
46
|
+
return null;
|
|
47
|
+
return readFileSync(ref.file, 'utf8');
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** The helper file names in scripts/ (a rebuilt skill names them; a fold never writes them). */
|
|
54
|
+
function scriptNames(dir) {
|
|
55
|
+
try {
|
|
56
|
+
if (!lstatSync(join(dir, 'scripts')).isDirectory())
|
|
57
|
+
return [];
|
|
58
|
+
return readdirSync(join(dir, 'scripts')).filter((n) => !n.startsWith('.') && lstatSync(join(dir, 'scripts', n)).isFile()).sort();
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The block as credit read it (`settleCredit`, and c3's offer at Stop): the newest injection of this skill for the
|
|
66
|
+
* job's runs (the run and the parts a compaction joined into it) gives the params, steps and check, the oldest its
|
|
67
|
+
* `at`, so the fidelity window and so the plan come out the same at Stop, in PreToolUse and in the CLI.
|
|
68
|
+
*/
|
|
69
|
+
function injIn(st, skillId, runIds) {
|
|
70
|
+
const all = Array.isArray(st?.injected) ? st.injected : [];
|
|
71
|
+
const mine = all.filter((i) => i && i.skillId === skillId && i.runId !== null && runIds.includes(i.runId) && i.cue !== 'check')
|
|
72
|
+
.sort((a, b) => Date.parse(a.at) - Date.parse(b.at));
|
|
73
|
+
if (!mine.length)
|
|
74
|
+
return null;
|
|
75
|
+
const newest = mine[mine.length - 1];
|
|
76
|
+
return { params: newest.params, steps: newest.steps, check: newest.check, at: mine[0].at };
|
|
77
|
+
}
|
|
78
|
+
/** The run's own session file (its `skills.sessionHash` is the sheet's), among the 64 newest: for draft, which has no session. */
|
|
79
|
+
export function sessionOf(sheet, env) {
|
|
80
|
+
const dir = trailPath(env, 'sessions');
|
|
81
|
+
let names;
|
|
82
|
+
try {
|
|
83
|
+
names = readdirSync(dir).filter((n) => /^[\w.-]+\.json$/.test(n) && !/\.(?:hooks|gate|lesson|update)\.json$/.test(n)).flatMap((n) => {
|
|
84
|
+
const s = lstatSync(join(dir, n));
|
|
85
|
+
return s.isFile() && s.size <= SESSION_MAX_BYTES ? [{ n, t: s.mtimeMs }] : [];
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
for (const { n } of names.sort((a, b) => b.t - a.t).slice(0, SESSION_FILES)) {
|
|
92
|
+
const st = readJsonSafe(join(dir, n))?.skills;
|
|
93
|
+
if (st && typeof st === 'object' && st.sessionHash === sheet.session)
|
|
94
|
+
return st;
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
function gather(skillId, runId, env, o, needInj) {
|
|
99
|
+
const ref = listAllPersonal(env).find((r) => r.id === skillId);
|
|
100
|
+
if (!ref || ref.scope !== 'personal')
|
|
101
|
+
return null;
|
|
102
|
+
const text = ownText(ref);
|
|
103
|
+
const skill = text === null ? null : parseSkillMd(text, ref.name);
|
|
104
|
+
if (text === null || !skill || skill.meta.trail !== skillId)
|
|
105
|
+
return null;
|
|
106
|
+
const sheet = readRunSheet(runId, env);
|
|
107
|
+
if (!sheet)
|
|
108
|
+
return null;
|
|
109
|
+
const read = (id) => readRunSheet(id, env);
|
|
110
|
+
const joined = joinCarriedSheet(sheet, read);
|
|
111
|
+
const ids = [...new Set([runId, ...(joined.joined ?? []).map((j) => j.id)])];
|
|
112
|
+
const inj = o.inj ?? injIn(o.st, skillId, ids) ?? (needInj ? injIn(sessionOf(sheet, env), skillId, ids) : null);
|
|
113
|
+
if (needInj && !inj)
|
|
114
|
+
return null;
|
|
115
|
+
const home = env.HOME || homedir();
|
|
116
|
+
const repoRoot = runCheckout(joined, env, '');
|
|
117
|
+
// c3's credit flush keys extraShas with the same `where` (one function for both), or two-uses never matches (R10).
|
|
118
|
+
const fid = fidelityOf(skill, inj ?? { params: {}, steps: [] }, joined.calls, fidelityWhere(joined, env));
|
|
119
|
+
const scope = { repoKeys: [sheet.repoKey], checkout: repoRoot, env };
|
|
120
|
+
const c = compileRun(sheet, {
|
|
121
|
+
repoRoot, home, platform: process.platform, prior: null, name: ref.name, moment: 'repeated',
|
|
122
|
+
applies: skill.meta.applies ?? sheet.repoKey, taken: () => false, id: skillId, readSheet: read,
|
|
123
|
+
});
|
|
124
|
+
const fresh = c.ok ? c.skill : null;
|
|
125
|
+
// R14: the uses before this run started, newest last.
|
|
126
|
+
const started = Date.parse(sheet.startedAt);
|
|
127
|
+
const earlier = readLedger(skillId, env).filter((l) => l.event === 'use' && Date.parse(l.at) < started).slice(-MAX_EARLIER);
|
|
128
|
+
const state = getSkillState(skillId, env);
|
|
129
|
+
const hash = skillHash(text);
|
|
130
|
+
const handEdited = !state || (hash !== state.hash && hash !== state.pendingWrite?.hash);
|
|
131
|
+
const base = handEdited ? rebuildLoose(text, skill)
|
|
132
|
+
: rebuildCompiled(text, skill, { source: state.source, helpers: scriptNames(ref.dir), runId: state.runId });
|
|
133
|
+
let splitName;
|
|
134
|
+
try {
|
|
135
|
+
if (fresh)
|
|
136
|
+
splitName = proposeName(sheet, fresh.steps, (n) => nameTaken(n, scope) !== null);
|
|
137
|
+
}
|
|
138
|
+
catch { /* no split name: no split */ }
|
|
139
|
+
// Part 7: the steps the block showed the way a live learning says, as it showed them (the injection's steps).
|
|
140
|
+
const preferred = inj ? recallMarks(skill.steps, stepLearnings({ repoKeys: [sheet.repoKey], checkout: repoRoot, env })).flatMap((m) => [...m.fixes].flatMap(([step, cmd]) => (cmd && inj.steps?.[step - 1] === fillParams(cmd, inj.params ?? {}) ? [{ step, cmd, follows: whose(m.l) }] : []))) : [];
|
|
141
|
+
const input = {
|
|
142
|
+
skill, text, fresh, fid, inj: { params: inj?.params ?? {} }, taken: (n) => nameTaken(n, scope) !== null, ...(preferred.length ? { preferred } : {}),
|
|
143
|
+
earlierExtraShas: earlier.map((u) => u.extraShas ?? []), lessons: readLessons(ref.dir),
|
|
144
|
+
earlierRan: earlier.map((u) => u.stepsRan), earlierChecks: earlier.map((u) => u.check), base, ...(splitName ? { splitName } : {}),
|
|
145
|
+
};
|
|
146
|
+
return { input, ref, state, text, sheet, handEdited };
|
|
147
|
+
}
|
|
148
|
+
/** The fold input for one checked use of the skill (4.2), from disk; null when the skill, the run or its block is gone. */
|
|
149
|
+
export function foldInputFor(skillId, runId, env = process.env, o = {}) {
|
|
150
|
+
try {
|
|
151
|
+
return gather(skillId, runId, env, o, true)?.input ?? null;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export const proposalShaOf = (text) => createHash('sha256').update(text, 'utf8').digest('hex').slice(0, 16);
|
|
158
|
+
/**
|
|
159
|
+
* The change again, from the run sheet and the file as they are now (4.11 step 6). Update and extend: `planFold`
|
|
160
|
+
* must give that same op. Replace (drift): the fresh compile as the next version, keeping the skill's id, name and
|
|
161
|
+
* asks. The next version is numbered past every kept one, as the write numbers it. null: nothing to change.
|
|
162
|
+
*/
|
|
163
|
+
export function replan(skillId, runId, op, env = process.env, o = {}) {
|
|
164
|
+
try {
|
|
165
|
+
if (op === 'split')
|
|
166
|
+
return null;
|
|
167
|
+
const g = gather(skillId, runId, env, o, op !== 'replace');
|
|
168
|
+
const base = g?.input.base ?? null;
|
|
169
|
+
if (!g || !base || !/^[1-9]\d{0,5}$/.test(String(base.meta.version)))
|
|
170
|
+
return null;
|
|
171
|
+
let next;
|
|
172
|
+
let plan = null;
|
|
173
|
+
if (op === 'replace') {
|
|
174
|
+
if (!g.input.fresh)
|
|
175
|
+
return null;
|
|
176
|
+
next = replaceWith(base, g.input.fresh);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
const p = planFold(g.input);
|
|
180
|
+
if (p.op !== op)
|
|
181
|
+
return null;
|
|
182
|
+
plan = p;
|
|
183
|
+
next = applyFold(base, plan);
|
|
184
|
+
}
|
|
185
|
+
if (!next)
|
|
186
|
+
return null;
|
|
187
|
+
const version = String(nextVersion(g.ref, Number(base.meta.version)));
|
|
188
|
+
next = { ...next, meta: { ...next.meta, version } };
|
|
189
|
+
const text = renderSkillMd(next);
|
|
190
|
+
return { next, text, proposalSha: proposalShaOf(text), baseHash: skillHash(g.text), current: g.text, handEdited: g.handEdited, plan, base, fresh: g.input.fresh };
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=update-plan.js.map
|