@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,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The file side of the skill store (store.ts, store-held.ts): private
|
|
3
|
+
* folders that never chmod or write through a link, capped reads, the one
|
|
4
|
+
* store lock, a skill folder written whole, and the state entry and ledger
|
|
5
|
+
* line a new personal skill starts with.
|
|
6
|
+
*
|
|
7
|
+
* A name reaches here from an agent's command line or a person's, so every
|
|
8
|
+
* name is checked to be one folder name before it is joined to a path.
|
|
9
|
+
*/
|
|
10
|
+
import { type Stats } from 'node:fs';
|
|
11
|
+
import type { CompiledSkill, SkillFrom, SkillRef, SkillState } from './types.js';
|
|
12
|
+
import { type Locked } from '../util/private-fs.js';
|
|
13
|
+
/** SKILL.md is at most 60 lines; anything this big is not one. */
|
|
14
|
+
export declare const MAX_SKILL_BYTES: number;
|
|
15
|
+
/** How long a person's command waits for the store; a hook's bookkeeping waits less. */
|
|
16
|
+
export declare const PERSON_WAIT_MS = 1000;
|
|
17
|
+
export declare const HOOK_WAIT_MS = 200;
|
|
18
|
+
/** One folder name: no separators, no dot start, no `..`. Wider than NAME_RE so hand-made folders can be named back. */
|
|
19
|
+
export declare const safeName: (name: string) => boolean;
|
|
20
|
+
export declare const lstatOrNull: (p: string) => Stats | null;
|
|
21
|
+
export declare const statOrNull: (p: string) => Stats | null;
|
|
22
|
+
/** A folder of ours: made 0700 when missing, tightened when it is a real folder; a link is left as it is (never chmod through it). */
|
|
23
|
+
export declare function privateDir(dir: string): void;
|
|
24
|
+
/** The file's text when it is a regular file (links followed) of at most 64 KB; null otherwise. */
|
|
25
|
+
export declare function readCapped(file: string): string | null;
|
|
26
|
+
export declare const skillsDir: (env?: NodeJS.ProcessEnv) => string;
|
|
27
|
+
export declare const heldDir: (env?: NodeJS.ProcessEnv) => string;
|
|
28
|
+
export declare const retiredDir: (env?: NodeJS.ProcessEnv) => string;
|
|
29
|
+
/**
|
|
30
|
+
* Every change to skills/ or held/ runs under one lock (`skills/.store.lock`). Throws when it can't be had in time,
|
|
31
|
+
* and before anything is written when one of Trail's own folders is a link (own-folder.ts).
|
|
32
|
+
*/
|
|
33
|
+
export declare function underStoreLock<T>(env: NodeJS.ProcessEnv | undefined, fn: () => T, waitMs?: number): T;
|
|
34
|
+
/** The same lock for a hook's bookkeeping: `{ ok: false }` when busy or when one of Trail's own folders is a link; nothing changed. */
|
|
35
|
+
export declare function tryStoreLock<T>(env: NodeJS.ProcessEnv | undefined, fn: () => T, waitMs?: number): Locked<T>;
|
|
36
|
+
/**
|
|
37
|
+
* A skill's folder, written whole into a folder that must not exist yet (made here, 0700): SKILL.md (0600), each
|
|
38
|
+
* helper in scripts/ (0700), and an empty lessons/ when asked. Throws on a folder already there (a link included),
|
|
39
|
+
* a bad name, or a helper whose file name is not one plain file name.
|
|
40
|
+
*/
|
|
41
|
+
export declare function writeSkillFolder(dir: string, c: CompiledSkill, text: string, opts: {
|
|
42
|
+
lessons: boolean;
|
|
43
|
+
}): void;
|
|
44
|
+
export declare function newSkillId(): string;
|
|
45
|
+
/**
|
|
46
|
+
* The id to save under: the compiled one, unless another skill already holds it, a retired one included (restoring
|
|
47
|
+
* it brings its state back under that id, so two skills must never share one).
|
|
48
|
+
*/
|
|
49
|
+
export declare function freeId(id: string, name: string, env?: NodeJS.ProcessEnv): string;
|
|
50
|
+
/** Throws unless the name can be a saved skill's: NAME_RE, no `--` or trailing dash, not one of Trail's own words. */
|
|
51
|
+
export declare function checkSaveName(name: string): void;
|
|
52
|
+
/** The skill folders other tools keep in the person's home (`~/.claude/skills`, `~/.agents/skills`, `$CLAUDE_CONFIG_DIR/skills`). */
|
|
53
|
+
export declare function homeSkillDirs(env?: NodeJS.ProcessEnv): string[];
|
|
54
|
+
/** What keeping or restoring a skill would collide with, without a checkout: built in, a personal skill, a host's skill. */
|
|
55
|
+
export declare function takenAtHome(name: string, env?: NodeJS.ProcessEnv): 'built-in' | 'personal' | 'host' | null;
|
|
56
|
+
export declare function personalRef(id: string, name: string, applies: string | null, env?: NodeJS.ProcessEnv): SkillRef;
|
|
57
|
+
/**
|
|
58
|
+
* A new personal skill's state (candidate, uses 0) and its ledger `saved` line. Throws when the state can't be
|
|
59
|
+
* written (its lock busy, as a hook that died holding it leaves it for 10 s): a skill with no state entry would be
|
|
60
|
+
* recalled but could never count a use, so the caller undoes the save.
|
|
61
|
+
*/
|
|
62
|
+
export declare function startSkill(id: string, init: {
|
|
63
|
+
name: string;
|
|
64
|
+
from: SkillFrom;
|
|
65
|
+
runId: string | null;
|
|
66
|
+
hash: string;
|
|
67
|
+
source: SkillState['source'];
|
|
68
|
+
version: string;
|
|
69
|
+
consent: 'offer-yes' | 'asked' | 'init';
|
|
70
|
+
stepsVerified: number;
|
|
71
|
+
stepsTotal: number;
|
|
72
|
+
now: Date;
|
|
73
|
+
env?: NodeJS.ProcessEnv;
|
|
74
|
+
}): void;
|
|
75
|
+
/** Compiled steps plus a check that is not itself a step (4.9 step 10). */
|
|
76
|
+
export declare const stepsTotal: (c: Pick<CompiledSkill, "steps" | "check" | "checkIsStep">) => number;
|
|
77
|
+
//# sourceMappingURL=store-fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-fs.d.ts","sourceRoot":"","sources":["../../src/skills/store-fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The file side of the skill store (store.ts, store-held.ts): private
|
|
3
|
+
* folders that never chmod or write through a link, capped reads, the one
|
|
4
|
+
* store lock, a skill folder written whole, and the state entry and ledger
|
|
5
|
+
* line a new personal skill starts with.
|
|
6
|
+
*
|
|
7
|
+
* A name reaches here from an agent's command line or a person's, so every
|
|
8
|
+
* name is checked to be one folder name before it is joined to a path.
|
|
9
|
+
*/
|
|
10
|
+
import { chmodSync, lstatSync, mkdirSync, readFileSync, rmSync, statSync } from 'node:fs';
|
|
11
|
+
import { homedir } from 'node:os';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { trailPath, withLock, writePrivate } from '../util/private-fs.js';
|
|
14
|
+
import { BUILT_IN_NAMES, goodName } from './compile-words.js';
|
|
15
|
+
import { appendLedger } from './ledger.js';
|
|
16
|
+
import { getSkillState, updateSkillState } from './state.js';
|
|
17
|
+
import { localDate } from './settings.js';
|
|
18
|
+
import { randomBytes } from 'node:crypto';
|
|
19
|
+
import { linkedOwnFolder, ownFolder } from './own-folder.js';
|
|
20
|
+
const POSIX = process.platform !== 'win32';
|
|
21
|
+
/** SKILL.md is at most 60 lines; anything this big is not one. */
|
|
22
|
+
export const MAX_SKILL_BYTES = 64 * 1024;
|
|
23
|
+
/** How long a person's command waits for the store; a hook's bookkeeping waits less. */
|
|
24
|
+
export const PERSON_WAIT_MS = 1000;
|
|
25
|
+
export const HOOK_WAIT_MS = 200;
|
|
26
|
+
/** One folder name: no separators, no dot start, no `..`. Wider than NAME_RE so hand-made folders can be named back. */
|
|
27
|
+
export const safeName = (name) => /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/.test(String(name)) && !String(name).includes('..');
|
|
28
|
+
export const lstatOrNull = (p) => {
|
|
29
|
+
try {
|
|
30
|
+
return lstatSync(p);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export const statOrNull = (p) => {
|
|
37
|
+
try {
|
|
38
|
+
return statSync(p);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
/** A folder of ours: made 0700 when missing, tightened when it is a real folder; a link is left as it is (never chmod through it). */
|
|
45
|
+
export function privateDir(dir) {
|
|
46
|
+
if (!lstatOrNull(dir))
|
|
47
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
48
|
+
const st = lstatOrNull(dir);
|
|
49
|
+
if (POSIX && st?.isDirectory()) {
|
|
50
|
+
try {
|
|
51
|
+
chmodSync(dir, 0o700);
|
|
52
|
+
}
|
|
53
|
+
catch { /* not ours to change */ }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** The file's text when it is a regular file (links followed) of at most 64 KB; null otherwise. */
|
|
57
|
+
export function readCapped(file) {
|
|
58
|
+
const st = statOrNull(file);
|
|
59
|
+
if (!st?.isFile() || st.size > MAX_SKILL_BYTES)
|
|
60
|
+
return null;
|
|
61
|
+
try {
|
|
62
|
+
return readFileSync(file, 'utf8');
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export const skillsDir = (env) => trailPath(env, 'skills');
|
|
69
|
+
export const heldDir = (env) => trailPath(env, 'held');
|
|
70
|
+
export const retiredDir = (env) => join(skillsDir(env), '.retired');
|
|
71
|
+
/**
|
|
72
|
+
* Every change to skills/ or held/ runs under one lock (`skills/.store.lock`). Throws when it can't be had in time,
|
|
73
|
+
* and before anything is written when one of Trail's own folders is a link (own-folder.ts).
|
|
74
|
+
*/
|
|
75
|
+
export function underStoreLock(env, fn, waitMs = PERSON_WAIT_MS) {
|
|
76
|
+
const linked = linkedOwnFolder(env);
|
|
77
|
+
if (linked)
|
|
78
|
+
ownFolder(trailPath(env, linked));
|
|
79
|
+
const done = tryStoreLock(env, fn, waitMs);
|
|
80
|
+
if (!done.ok)
|
|
81
|
+
throw new Error('trail: the skill store is busy (another trail command is changing it). Try again.');
|
|
82
|
+
return done.value;
|
|
83
|
+
}
|
|
84
|
+
/** The same lock for a hook's bookkeeping: `{ ok: false }` when busy or when one of Trail's own folders is a link; nothing changed. */
|
|
85
|
+
export function tryStoreLock(env, fn, waitMs = HOOK_WAIT_MS) {
|
|
86
|
+
if (linkedOwnFolder(env))
|
|
87
|
+
return { ok: false };
|
|
88
|
+
privateDir(trailPath(env));
|
|
89
|
+
privateDir(skillsDir(env));
|
|
90
|
+
return withLock(join(skillsDir(env), '.store'), fn, waitMs);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* A skill's folder, written whole into a folder that must not exist yet (made here, 0700): SKILL.md (0600), each
|
|
94
|
+
* helper in scripts/ (0700), and an empty lessons/ when asked. Throws on a folder already there (a link included),
|
|
95
|
+
* a bad name, or a helper whose file name is not one plain file name.
|
|
96
|
+
*/
|
|
97
|
+
export function writeSkillFolder(dir, c, text, opts) {
|
|
98
|
+
for (const h of c.helpers)
|
|
99
|
+
if (!safeName(h.file))
|
|
100
|
+
throw new Error(`trail: a helper script needs a plain file name: ${JSON.stringify(h.file).slice(0, 60)}`);
|
|
101
|
+
try {
|
|
102
|
+
mkdirSync(dir, { mode: 0o700 });
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
if (e.code === 'EEXIST')
|
|
106
|
+
throw new Error(`trail: a skill folder called ${c.name} is already there`);
|
|
107
|
+
throw e;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
privateDir(dir);
|
|
111
|
+
writePrivate(join(dir, 'SKILL.md'), text);
|
|
112
|
+
if (c.helpers.length || opts.lessons)
|
|
113
|
+
privateDir(join(dir, 'scripts'));
|
|
114
|
+
for (const h of c.helpers)
|
|
115
|
+
writePrivate(join(dir, 'scripts', h.file), h.content, 0o700);
|
|
116
|
+
if (opts.lessons)
|
|
117
|
+
privateDir(join(dir, 'lessons'));
|
|
118
|
+
}
|
|
119
|
+
catch (e) {
|
|
120
|
+
// Half a skill (a full disk) would hold the name and never list: the folder made above goes.
|
|
121
|
+
rmSync(dir, { recursive: true, force: true });
|
|
122
|
+
throw e;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export function newSkillId() {
|
|
126
|
+
return `s-${randomBytes(3).toString('hex')}`;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The id to save under: the compiled one, unless another skill already holds it, a retired one included (restoring
|
|
130
|
+
* it brings its state back under that id, so two skills must never share one).
|
|
131
|
+
*/
|
|
132
|
+
export function freeId(id, name, env) {
|
|
133
|
+
const held = (x) => {
|
|
134
|
+
const s = getSkillState(x, env);
|
|
135
|
+
return s !== null && s.name !== name;
|
|
136
|
+
};
|
|
137
|
+
let out = id;
|
|
138
|
+
for (let i = 0; i < 64 && held(out); i++)
|
|
139
|
+
out = newSkillId();
|
|
140
|
+
return out;
|
|
141
|
+
}
|
|
142
|
+
/** Throws unless the name can be a saved skill's: NAME_RE, no `--` or trailing dash, not one of Trail's own words. */
|
|
143
|
+
export function checkSaveName(name) {
|
|
144
|
+
if (!goodName(name))
|
|
145
|
+
throw new Error(`trail: not a skill name: ${JSON.stringify(name).slice(0, 60)}`);
|
|
146
|
+
}
|
|
147
|
+
/** The skill folders other tools keep in the person's home (`~/.claude/skills`, `~/.agents/skills`, `$CLAUDE_CONFIG_DIR/skills`). */
|
|
148
|
+
export function homeSkillDirs(env) {
|
|
149
|
+
const e = env ?? process.env;
|
|
150
|
+
const home = e.HOME || homedir();
|
|
151
|
+
const dirs = [join(home, '.claude', 'skills'), join(home, '.agents', 'skills')];
|
|
152
|
+
if (e.CLAUDE_CONFIG_DIR)
|
|
153
|
+
dirs.push(join(e.CLAUDE_CONFIG_DIR, 'skills'));
|
|
154
|
+
return dirs;
|
|
155
|
+
}
|
|
156
|
+
/** What keeping or restoring a skill would collide with, without a checkout: built in, a personal skill, a host's skill. */
|
|
157
|
+
export function takenAtHome(name, env) {
|
|
158
|
+
if (BUILT_IN_NAMES.has(name))
|
|
159
|
+
return 'built-in';
|
|
160
|
+
if (lstatOrNull(join(skillsDir(env), name)))
|
|
161
|
+
return 'personal';
|
|
162
|
+
if (homeSkillDirs(env).some((d) => lstatOrNull(join(d, name))))
|
|
163
|
+
return 'host';
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
export function personalRef(id, name, applies, env) {
|
|
167
|
+
const dir = join(skillsDir(env), name);
|
|
168
|
+
return { id, name, scope: 'personal', applies, dir, file: join(dir, 'SKILL.md') };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* A new personal skill's state (candidate, uses 0) and its ledger `saved` line. Throws when the state can't be
|
|
172
|
+
* written (its lock busy, as a hook that died holding it leaves it for 10 s): a skill with no state entry would be
|
|
173
|
+
* recalled but could never count a use, so the caller undoes the save.
|
|
174
|
+
*/
|
|
175
|
+
export function startSkill(id, init) {
|
|
176
|
+
const at = init.now.toISOString();
|
|
177
|
+
const written = updateSkillState(id, () => ({
|
|
178
|
+
name: init.name, scope: 'personal', status: 'candidate', from: init.from, runId: init.runId, addedAt: at,
|
|
179
|
+
lastWorked: init.source ? localDate(init.source.at) : null, lastUsedAt: null, lastUsedRepo: null, uses: 0, checkedUses: 0,
|
|
180
|
+
hash: init.hash, source: init.source, lastFails: [], promoteOffers: {},
|
|
181
|
+
}), init.env);
|
|
182
|
+
if (!written)
|
|
183
|
+
throw new Error('trail: the skill state is busy (a hook is writing it). Try again in a few seconds.');
|
|
184
|
+
try {
|
|
185
|
+
appendLedger(id, {
|
|
186
|
+
at, event: 'saved', skill: id, v: init.version, from: init.from, scope: 'personal',
|
|
187
|
+
receipt: { consent: init.consent, stepsVerified: init.stepsVerified, stepsTotal: init.stepsTotal },
|
|
188
|
+
}, init.env);
|
|
189
|
+
}
|
|
190
|
+
catch { /* the state is the truth; the ledger is its record */ }
|
|
191
|
+
}
|
|
192
|
+
/** Compiled steps plus a check that is not itself a step (4.9 step 10). */
|
|
193
|
+
export const stepsTotal = (c) => c.steps.length + (c.check && !c.checkIsStep ? 1 : 0);
|
|
194
|
+
//# sourceMappingURL=store-fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-fs.js","sourceRoot":"","sources":["../../src/skills/store-fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { JobClass } from '../trace/types.js';
|
|
2
|
+
import type { CompiledSkill, SkillRef } from './types.js';
|
|
3
|
+
import type { PersonCheck } from './person.js';
|
|
4
|
+
export interface HeldItem {
|
|
5
|
+
name: string;
|
|
6
|
+
why: 'no-yes' | 'host';
|
|
7
|
+
host: string;
|
|
8
|
+
job: JobClass | null;
|
|
9
|
+
repoKey: string;
|
|
10
|
+
at: string;
|
|
11
|
+
shownAt: string | null;
|
|
12
|
+
dir: string;
|
|
13
|
+
/** The run it was compiled from (D65: a live save for the same run drops the held item instead of being refused). Null when held.json lacks it. */
|
|
14
|
+
runId?: string | null;
|
|
15
|
+
/** D93: sha256(sessionId).slice(0, 12) of the session that held it; null when held.json lacks it (written before). */
|
|
16
|
+
session?: string | null;
|
|
17
|
+
}
|
|
18
|
+
/** Every held item Trail wrote, whatever its age, oldest first. */
|
|
19
|
+
export declare function allHeld(env?: NodeJS.ProcessEnv): HeldItem[];
|
|
20
|
+
/** Writes held/<name>/SKILL.md (+ scripts/) and held.json, replacing a held item of the same name. */
|
|
21
|
+
export declare function saveHeld(c: CompiledSkill, why: HeldItem['why'], meta: {
|
|
22
|
+
host: string;
|
|
23
|
+
job: JobClass | null;
|
|
24
|
+
repoKey: string;
|
|
25
|
+
session?: string | null;
|
|
26
|
+
}, env?: NodeJS.ProcessEnv, now?: Date): HeldItem;
|
|
27
|
+
/** Held items not shown yet, and shown ones younger than 24 h (still keepable). */
|
|
28
|
+
export declare function listHeld(env?: NodeJS.ProcessEnv, now?: Date): HeldItem[];
|
|
29
|
+
/** Hook bookkeeping (SessionStart): a busy store leaves it unshown, to be shown next time. */
|
|
30
|
+
export declare function markHeldShown(name: string, env?: NodeJS.ProcessEnv, now?: Date): void;
|
|
31
|
+
export declare function dropHeld(name: string, env?: NodeJS.ProcessEnv): void;
|
|
32
|
+
/**
|
|
33
|
+
* The person keeps a held item: it moves into skills/<name> as a candidate they asked for (ledger `saved`, consent
|
|
34
|
+
* `asked`, no steps verified: the transcript was not read again). Refused for anyone but the person, an unknown or
|
|
35
|
+
* expired item, or a name a personal skill, a host's skill or Trail itself already uses.
|
|
36
|
+
*/
|
|
37
|
+
export declare function keepHeld(name: string, person: PersonCheck, env?: NodeJS.ProcessEnv, now?: Date): {
|
|
38
|
+
ok: true;
|
|
39
|
+
ref: SkillRef;
|
|
40
|
+
} | {
|
|
41
|
+
ok: false;
|
|
42
|
+
reason: 'not-a-person' | 'unknown' | 'name-taken';
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=store-held.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-held.d.ts","sourceRoot":"","sources":["../../src/skills/store-held.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ/C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAC3I,mJAAmJ;IACnJ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,sHAAsH;IACtH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAkCD,mEAAmE;AACnE,wBAAgB,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,QAAQ,EAAE,CAW3D;AAED,sGAAsG;AACtG,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG,QAAQ,CAclN;AAED,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG,QAAQ,EAAE,CAEpF;AAED,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI,CAOjG;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAMpE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,YAAY,CAAA;CAAE,CAwC3M"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Held items (`~/.trail/held/<name>/`, design 2): a save Trail could not
|
|
3
|
+
* trust, because the person never said yes or because it came from a host
|
|
4
|
+
* where Trail can't check which steps ran. A held item is never read by
|
|
5
|
+
* recall. It is shown once, at the next `startup` or `resume` of another
|
|
6
|
+
* session than the one that held it (`session`, D93; `shownAt`), stays
|
|
7
|
+
* keepable for 24 hours after that showing, and is then deleted (by
|
|
8
|
+
* housekeeping, or here when kept). Only the person keeps one
|
|
9
|
+
* (`trail skills keep <name>`, checked by `personAtTerminal`).
|
|
10
|
+
*
|
|
11
|
+
* `held/<name>/SKILL.md` is the skill as it would have been saved; its
|
|
12
|
+
* `held.json` says why it was held, where it came from, and when it was shown.
|
|
13
|
+
*/
|
|
14
|
+
import { renameSync, rmSync, readdirSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { readJsonSafe, writePrivate } from '../util/private-fs.js';
|
|
17
|
+
import { parseSkillMd, renderSkillMd, skillHash } from './skillmd.js';
|
|
18
|
+
import { checkSaveName, freeId, heldDir, lstatOrNull, personalRef, privateDir, readCapped, safeName, skillsDir, startSkill, stepsTotal, takenAtHome, tryStoreLock, underStoreLock, writeSkillFolder, } from './store-fs.js';
|
|
19
|
+
const KEEP_MS = 24 * 3600_000;
|
|
20
|
+
/** One held item as Trail wrote it: a real folder (never a link) with a valid held.json; null otherwise. */
|
|
21
|
+
function heldAt(name, env) {
|
|
22
|
+
if (!safeName(name))
|
|
23
|
+
return null;
|
|
24
|
+
const dir = join(heldDir(env), name);
|
|
25
|
+
if (!lstatOrNull(dir)?.isDirectory())
|
|
26
|
+
return null;
|
|
27
|
+
const f = readJsonSafe(join(dir, 'held.json'));
|
|
28
|
+
if (!f || typeof f !== 'object' || f.name !== name || (f.why !== 'no-yes' && f.why !== 'host') || typeof f.repoKey !== 'string' || typeof f.at !== 'string')
|
|
29
|
+
return null;
|
|
30
|
+
if (f.shownAt !== null && typeof f.shownAt !== 'string')
|
|
31
|
+
return null;
|
|
32
|
+
return { ...f, dir };
|
|
33
|
+
}
|
|
34
|
+
const toItem = (f) => ({
|
|
35
|
+
name: f.name, why: f.why, host: String(f.host ?? ''), job: f.job ?? null, repoKey: f.repoKey, at: f.at, shownAt: f.shownAt, dir: f.dir,
|
|
36
|
+
runId: typeof f.runId === 'string' ? f.runId : null,
|
|
37
|
+
session: typeof f.session === 'string' ? f.session : null,
|
|
38
|
+
});
|
|
39
|
+
/** Shown and more than 24 h ago: no longer keepable. */
|
|
40
|
+
const expired = (f, now) => f.shownAt !== null && now.getTime() - Date.parse(f.shownAt) >= KEEP_MS;
|
|
41
|
+
/** Every held item Trail wrote, whatever its age, oldest first. */
|
|
42
|
+
export function allHeld(env) {
|
|
43
|
+
let names;
|
|
44
|
+
try {
|
|
45
|
+
names = readdirSync(heldDir(env));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
return names.filter((n) => !n.startsWith('.')).flatMap((n) => {
|
|
51
|
+
const f = heldAt(n, env);
|
|
52
|
+
return f ? [toItem(f)] : [];
|
|
53
|
+
}).sort((a, b) => a.at.localeCompare(b.at) || a.name.localeCompare(b.name));
|
|
54
|
+
}
|
|
55
|
+
/** Writes held/<name>/SKILL.md (+ scripts/) and held.json, replacing a held item of the same name. */
|
|
56
|
+
export function saveHeld(c, why, meta, env, now = new Date()) {
|
|
57
|
+
checkSaveName(c.name);
|
|
58
|
+
return underStoreLock(env, () => {
|
|
59
|
+
privateDir(heldDir(env));
|
|
60
|
+
const dir = join(heldDir(env), c.name);
|
|
61
|
+
rmSync(dir, { recursive: true, force: true }); // a link is removed, never followed
|
|
62
|
+
writeSkillFolder(dir, c, renderSkillMd(c), { lessons: false });
|
|
63
|
+
const f = {
|
|
64
|
+
v: 1, name: c.name, why, host: meta.host, job: meta.job, repoKey: meta.repoKey, at: now.toISOString(), shownAt: null,
|
|
65
|
+
id: c.meta.trail, runId: c.source.runId, ...(meta.session ? { session: meta.session } : {}), source: { commands: c.source.commands, failed: c.source.failed, at: c.source.at }, stepsTotal: stepsTotal(c),
|
|
66
|
+
};
|
|
67
|
+
writePrivate(join(dir, 'held.json'), JSON.stringify(f, null, 2));
|
|
68
|
+
return toItem({ ...f, dir });
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/** Held items not shown yet, and shown ones younger than 24 h (still keepable). */
|
|
72
|
+
export function listHeld(env, now = new Date()) {
|
|
73
|
+
return allHeld(env).filter((h) => !expired(h, now));
|
|
74
|
+
}
|
|
75
|
+
/** Hook bookkeeping (SessionStart): a busy store leaves it unshown, to be shown next time. */
|
|
76
|
+
export function markHeldShown(name, env, now = new Date()) {
|
|
77
|
+
tryStoreLock(env, () => {
|
|
78
|
+
const f = heldAt(name, env);
|
|
79
|
+
if (!f || f.shownAt !== null)
|
|
80
|
+
return;
|
|
81
|
+
const { dir, ...file } = f;
|
|
82
|
+
writePrivate(join(dir, 'held.json'), JSON.stringify({ ...file, shownAt: now.toISOString() }, null, 2));
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
export function dropHeld(name, env) {
|
|
86
|
+
if (!safeName(name))
|
|
87
|
+
return;
|
|
88
|
+
tryStoreLock(env, () => {
|
|
89
|
+
const dir = join(heldDir(env), name);
|
|
90
|
+
if (lstatOrNull(dir))
|
|
91
|
+
rmSync(dir, { recursive: true, force: true });
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The person keeps a held item: it moves into skills/<name> as a candidate they asked for (ledger `saved`, consent
|
|
96
|
+
* `asked`, no steps verified: the transcript was not read again). Refused for anyone but the person, an unknown or
|
|
97
|
+
* expired item, or a name a personal skill, a host's skill or Trail itself already uses.
|
|
98
|
+
*/
|
|
99
|
+
export function keepHeld(name, person, env, now = new Date()) {
|
|
100
|
+
if (!person.ok)
|
|
101
|
+
return { ok: false, reason: 'not-a-person' };
|
|
102
|
+
if (!safeName(name))
|
|
103
|
+
return { ok: false, reason: 'unknown' };
|
|
104
|
+
return underStoreLock(env, () => {
|
|
105
|
+
const f = heldAt(name, env);
|
|
106
|
+
// Trail wrote held/<name>/SKILL.md itself: a link there is not its file.
|
|
107
|
+
const own = f && !expired(f, now) && lstatOrNull(join(f.dir, 'SKILL.md'))?.isFile();
|
|
108
|
+
const text = own ? readCapped(join(f.dir, 'SKILL.md')) : null;
|
|
109
|
+
let parsed = text === null ? null : parseSkillMd(text, name);
|
|
110
|
+
if (!f || text === null || !parsed)
|
|
111
|
+
return { ok: false, reason: 'unknown' };
|
|
112
|
+
if (takenAtHome(name, env))
|
|
113
|
+
return { ok: false, reason: 'name-taken' };
|
|
114
|
+
const dir = join(skillsDir(env), name);
|
|
115
|
+
renameSync(f.dir, dir);
|
|
116
|
+
let file = text;
|
|
117
|
+
try {
|
|
118
|
+
rmSync(join(dir, 'held.json'), { force: true });
|
|
119
|
+
privateDir(join(dir, 'scripts'));
|
|
120
|
+
privateDir(join(dir, 'lessons'));
|
|
121
|
+
const id = freeId(parsed.meta.trail, name, env);
|
|
122
|
+
if (id !== parsed.meta.trail) {
|
|
123
|
+
file = text.replace(/^(\s+trail:\s*)"[^"\n]*"\s*$/m, `$1"${id}"`);
|
|
124
|
+
writePrivate(join(dir, 'SKILL.md'), file);
|
|
125
|
+
parsed = parseSkillMd(file, name) ?? parsed;
|
|
126
|
+
}
|
|
127
|
+
startSkill(id, {
|
|
128
|
+
name, from: 'asked', runId: f.runId ?? null, hash: skillHash(file), source: f.source ?? null, version: parsed.meta.version,
|
|
129
|
+
consent: 'asked', stepsVerified: 0, stepsTotal: typeof f.stepsTotal === 'number' ? f.stepsTotal : parsed.steps.length, now, env,
|
|
130
|
+
});
|
|
131
|
+
return { ok: true, ref: personalRef(id, name, parsed.meta.applies ?? null, env) };
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
// Put the held item back as it was, so the person can keep it once the state is free.
|
|
135
|
+
try {
|
|
136
|
+
if (file !== text)
|
|
137
|
+
writePrivate(join(dir, 'SKILL.md'), text);
|
|
138
|
+
renameSync(dir, f.dir);
|
|
139
|
+
const { dir: _dir, ...held } = f;
|
|
140
|
+
writePrivate(join(f.dir, 'held.json'), JSON.stringify(held, null, 2));
|
|
141
|
+
}
|
|
142
|
+
catch { /* left in skills/ without state: listed, and the person can forget it */ }
|
|
143
|
+
throw e;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=store-held.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-held.js","sourceRoot":"","sources":["../../src/skills/store-held.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { JobClass } from '../trace/types.js';
|
|
2
|
+
import type { CompiledSkill, ParsedSkill, SkillFrom, SkillRef } from './types.js';
|
|
3
|
+
export { BUILT_IN_NAMES } from './compile-words.js';
|
|
4
|
+
export { newSkillId } from './store-fs.js';
|
|
5
|
+
export { dropHeld, keepHeld, listHeld, markHeldShown, saveHeld, type HeldItem } from './store-held.js';
|
|
6
|
+
export { personAtTerminal, type PersonCheck, type PersonDeps, type PsRow } from './person.js';
|
|
7
|
+
export declare function personalSkillsDir(env?: NodeJS.ProcessEnv): string;
|
|
8
|
+
export interface ScopeCtx {
|
|
9
|
+
repoKeys: string[];
|
|
10
|
+
checkout: string;
|
|
11
|
+
env?: NodeJS.ProcessEnv;
|
|
12
|
+
}
|
|
13
|
+
/** Personal skills that apply to any of repoKeys or 'every repo', then repo (stub), then team (stub). Follows symlinks. Excludes held, retired and settings.skillsOff. */
|
|
14
|
+
export declare function listSkills(ctx: ScopeCtx): SkillRef[];
|
|
15
|
+
/** Every personal skill regardless of applies (for `trail skills`). */
|
|
16
|
+
export declare function listAllPersonal(env?: NodeJS.ProcessEnv): SkillRef[];
|
|
17
|
+
/** Repo skills (`.agents/skills/*` with `metadata.trail`, committed HEAD only): phase 3, so none in 1a. */
|
|
18
|
+
export declare function listRepoSkills(_checkout: string): SkillRef[];
|
|
19
|
+
/** Team skills (`~/.trail/teams/<team>/skills`, the team repo's default branch): phase 3, so none in 1a. */
|
|
20
|
+
export declare function listTeamSkills(_repoKeys: string[], _env?: NodeJS.ProcessEnv): SkillRef[];
|
|
21
|
+
/**
|
|
22
|
+
* The skill's SKILL.md, parsed (null when missing, not a file, over 64 KB, or not Trail's). A personal needs-fix
|
|
23
|
+
* skill whose file no longer has the hash Trail wrote was changed by hand, and goes back to what it was (4.8).
|
|
24
|
+
*/
|
|
25
|
+
export declare function readSkill(ref: SkillRef, known?: {
|
|
26
|
+
status?: string;
|
|
27
|
+
} | null): ParsedSkill | null;
|
|
28
|
+
export declare function findSkill(name: string, ctx: ScopeCtx): SkillRef | null;
|
|
29
|
+
/**
|
|
30
|
+
* Where the name is taken: 'personal' | 'retired' | 'held' | 'repo' | 'team' | 'host' (~/.claude/skills, ~/.agents/skills,
|
|
31
|
+
* <checkout>/.claude/skills, <checkout>/.agents/skills) | 'built-in'; null when free. 'invalid' for a name that is not
|
|
32
|
+
* one folder name. In the checkout, a Trail skill (`metadata.trail`) is 'repo', anything else 'host'.
|
|
33
|
+
*/
|
|
34
|
+
export declare function nameTaken(name: string, ctx: ScopeCtx): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Moment 2's "a Trail skill covers it" (4.12 condition 3): a skill in scope with this job and status candidate,
|
|
37
|
+
* active or needs-fix, or a held item for this repo and job not yet shown. Retired never covers. A skill the person
|
|
38
|
+
* turned off still covers its job: an offer would only make a second one.
|
|
39
|
+
*/
|
|
40
|
+
export declare function jobCovered(job: JobClass, ctx: ScopeCtx): boolean;
|
|
41
|
+
/** Writes skills/<name>/SKILL.md (+ scripts/, empty lessons/), the state entry (candidate, source counts), ledger 'saved'. Locked. */
|
|
42
|
+
export declare function savePersonal(c: CompiledSkill, opts: {
|
|
43
|
+
from: SkillFrom;
|
|
44
|
+
runId: string;
|
|
45
|
+
consent: 'offer-yes' | 'asked' | 'init';
|
|
46
|
+
stepsVerified: number;
|
|
47
|
+
env?: NodeJS.ProcessEnv;
|
|
48
|
+
now?: Date;
|
|
49
|
+
}): SkillRef;
|
|
50
|
+
/**
|
|
51
|
+
* Moves skills/<name> to skills/.retired/<name>-<YYYY-MM-DD>/ (`-2`, `-3` the same day); status retired, prevStatus kept.
|
|
52
|
+
* Phase 2 (4.9): the retire proposal's and drift's retire pass `reason: 'retire-offer'` (the ledger status line's
|
|
53
|
+
* reason) and a hook's short `waitMs`; a busy store throws, as for the person.
|
|
54
|
+
*/
|
|
55
|
+
export declare function forgetSkill(name: string, env?: NodeJS.ProcessEnv, now?: Date, o?: {
|
|
56
|
+
reason?: 'forget' | 'retire-offer';
|
|
57
|
+
waitMs?: number;
|
|
58
|
+
}): {
|
|
59
|
+
ok: true;
|
|
60
|
+
to: string;
|
|
61
|
+
} | {
|
|
62
|
+
ok: false;
|
|
63
|
+
reason: 'unknown';
|
|
64
|
+
};
|
|
65
|
+
/** The newest retired copy back to skills/<name>, with the status it had (needs-fix when it was, else prevStatus). */
|
|
66
|
+
export declare function restoreSkill(name: string, env?: NodeJS.ProcessEnv, now?: Date): {
|
|
67
|
+
ok: true;
|
|
68
|
+
ref: SkillRef;
|
|
69
|
+
} | {
|
|
70
|
+
ok: false;
|
|
71
|
+
reason: 'unknown' | 'name-taken';
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/skills/store.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAe,MAAM,YAAY,CAAC;AAa/F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAE9F,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAEjE;AAED,MAAM,WAAW,QAAQ;IAAG,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE;AAwB3F,0KAA0K;AAC1K,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAQpD;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,QAAQ,EAAE,CAEnE;AAED,2GAA2G;AAC3G,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE,CAE5D;AAED,4GAA4G;AAC5G,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,QAAQ,EAAE,CAExF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAa/F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAEtE;AA0BD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAmBpE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAOhE;AAED,sIAAsI;AACtI,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG,QAAQ,CAsBtM;AAQD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,EACvF,CAAC,GAAE;IAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAe9H;AAED,sHAAsH;AACtH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,YAAY,CAAA;CAAE,CAczK"}
|