@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,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A learned skill's SKILL.md (design 2.1, spec 6), written and read.
|
|
3
|
+
*
|
|
4
|
+
* Only `name` and `description` sit at the top level; everything of Trail's
|
|
5
|
+
* is under `metadata` as flat quoted strings, and `metadata.trail` is the one
|
|
6
|
+
* mark that makes a file Trail's. Sections are always Run, Check it worked,
|
|
7
|
+
* If it fails, Don't use for.
|
|
8
|
+
*
|
|
9
|
+
* Every value is written on one line: text a person or an agent wrote (a
|
|
10
|
+
* repo name, an error line) can't open a line of its own, so it can't start
|
|
11
|
+
* a `[trail]` line, a heading or a step. Reading goes through phase 0's
|
|
12
|
+
* guarded front-matter reader (no anchors, aliases or code fences), and a
|
|
13
|
+
* file without `metadata.trail` is never read for steps: Trail never reads
|
|
14
|
+
* or edits another skill's steps.
|
|
15
|
+
*/
|
|
16
|
+
import { createHash } from 'node:crypto';
|
|
17
|
+
import { flatLine } from '../notes/flatten.js';
|
|
18
|
+
import { matter } from '../util/front-matter.js';
|
|
19
|
+
import { gatedKind } from './risk.js';
|
|
20
|
+
import { metaToParams } from './params.js';
|
|
21
|
+
export const GATED_PREFIX = "Can't be undone (Claude Code asks the person first): ";
|
|
22
|
+
export const WAIT_NOTE = '(a wait: run it in the background if it may take over 2 minutes)';
|
|
23
|
+
export const BG_NOTE = '(in the background)';
|
|
24
|
+
export const NO_CHECK = 'No check ran in the run this came from.';
|
|
25
|
+
export const NOTHING_FAILED = 'Nothing failed in the run this came from.';
|
|
26
|
+
/** D59b: a check read with a deploy status tool (`check-tool`), not run as a command. */
|
|
27
|
+
export const TOOL_CHECK = 'Check the deployment the same way the run did: ';
|
|
28
|
+
const META_ORDER = [
|
|
29
|
+
'trail', 'scope', 'applies', 'job', 'asks', 'status-asks', 'params', 'needs', 'ready', 'check-first', 'before-you-start', 'confirm-before', 'check', 'check-shows', 'check-tool', 'version',
|
|
30
|
+
];
|
|
31
|
+
/** Values that are commands or command lists: kept as typed, only made one line. */
|
|
32
|
+
const COMMAND_KEYS = new Set(['params', 'needs', 'ready', 'check-first', 'confirm-before', 'check']);
|
|
33
|
+
const BREAKS = /\r\n|[\n\r\u000b\u000c\u0085\u2028\u2029]/g;
|
|
34
|
+
const HIDDEN = /[\p{Cf}\ufe00-\ufe0f\u{e0100}-\u{e01ef}\u0000-\u0008\u000e-\u001f\u007f-\u0084\u0086-\u009f]/gu;
|
|
35
|
+
const MARKER = /^\s*(?:\[(?:trail|graft|trail-code)\]\s*)+/i;
|
|
36
|
+
/** A command on one line: breaks become spaces, hidden characters go; spaces inside it are kept. */
|
|
37
|
+
export function oneLine(text) {
|
|
38
|
+
return String(text ?? '').replace(HIDDEN, '').replace(BREAKS, ' ').replace(/\t/g, ' ').replace(MARKER, '').trim();
|
|
39
|
+
}
|
|
40
|
+
/** Prose on one line; three dashes in a row would end the front matter for some readers. */
|
|
41
|
+
const prose = (text, max = 1024) => flatLine(text, max).replace(/-{3,}/g, '--');
|
|
42
|
+
/**
|
|
43
|
+
* A command as a double-quoted YAML string. Three dashes in a row end the front matter for some readers,
|
|
44
|
+
* so a dash inside such a run is written `\u002d`, which YAML reads back as `-`: the command stays as typed.
|
|
45
|
+
*/
|
|
46
|
+
const quoted = (cmd) => JSON.stringify(cmd).replace(/-{3,}/g, (m) => `-${'\\u002d'.repeat(m.length - 2)}-`);
|
|
47
|
+
/** The step in a code span whose fence is longer than any backtick run inside it. */
|
|
48
|
+
function codeSpan(cmd) {
|
|
49
|
+
const longest = Math.max(0, ...[...cmd.matchAll(/`+/g)].map((m) => m[0].length));
|
|
50
|
+
if (!longest)
|
|
51
|
+
return `\`${cmd}\``;
|
|
52
|
+
const fence = '`'.repeat(longest + 1);
|
|
53
|
+
return `${fence} ${cmd} ${fence}`;
|
|
54
|
+
}
|
|
55
|
+
export function renderSkillMd(c) {
|
|
56
|
+
const meta = c.meta;
|
|
57
|
+
const keys = [...META_ORDER, ...Object.keys(meta).filter((k) => !META_ORDER.includes(k))];
|
|
58
|
+
const front = ['---', `name: ${c.name}`, `description: ${JSON.stringify(prose(c.description))}`, 'metadata:'];
|
|
59
|
+
for (const k of keys) {
|
|
60
|
+
const v = meta[k];
|
|
61
|
+
if (v === undefined || v === null || String(v) === '')
|
|
62
|
+
continue;
|
|
63
|
+
front.push(` ${k}: ${COMMAND_KEYS.has(k) ? quoted(oneLine(String(v))) : JSON.stringify(prose(v))}`);
|
|
64
|
+
}
|
|
65
|
+
front.push('---');
|
|
66
|
+
const run = c.steps.map((s) => {
|
|
67
|
+
const note = s.wait ? ` ${WAIT_NOTE}` : s.bg ? ` ${BG_NOTE}` : '';
|
|
68
|
+
return `${s.n}. ${s.gated ? GATED_PREFIX : ''}${codeSpan(oneLine(s.cmd))}${note}`;
|
|
69
|
+
});
|
|
70
|
+
let check;
|
|
71
|
+
const shows = c.checkShows ? prose(c.checkShows, 200) : '';
|
|
72
|
+
const phrase = /\s/.test(shows);
|
|
73
|
+
if (!c.check)
|
|
74
|
+
check = NO_CHECK;
|
|
75
|
+
else if (c.meta['check-tool'])
|
|
76
|
+
check = `${TOOL_CHECK}${prose(c.check, 300)}${shows ? `; it shows ${shows}` : ''}.`;
|
|
77
|
+
else if (c.checkIsStep) {
|
|
78
|
+
const n = [...c.steps].reverse().find((s) => s.cmd === c.check)?.n;
|
|
79
|
+
const lead = n ? `Step ${n}, ${codeSpan(oneLine(c.check))}, is the check` : `${codeSpan(oneLine(c.check))} is the check`;
|
|
80
|
+
check = shows ? `${lead}: ${shows}.` : `${lead}.`;
|
|
81
|
+
}
|
|
82
|
+
else if (!shows)
|
|
83
|
+
check = `${codeSpan(oneLine(c.check))} works.`;
|
|
84
|
+
else
|
|
85
|
+
check = `${codeSpan(oneLine(c.check))} shows ${phrase ? shows : codeSpan(shows)}.`;
|
|
86
|
+
const fails = c.ifFails.map((l) => prose(l, 200)).filter(Boolean);
|
|
87
|
+
const before = beforeYouStart(c.meta);
|
|
88
|
+
return [
|
|
89
|
+
...front,
|
|
90
|
+
`# ${prose(c.title, 160)}`,
|
|
91
|
+
'',
|
|
92
|
+
...(before.length ? ['## Before you start', ...before.map((l) => `- ${l}`), ''] : []),
|
|
93
|
+
'## Run',
|
|
94
|
+
...run,
|
|
95
|
+
'',
|
|
96
|
+
'## Check it worked',
|
|
97
|
+
check,
|
|
98
|
+
'',
|
|
99
|
+
'## If it fails',
|
|
100
|
+
...(fails.length ? fails.map((l) => `- ${l}`) : [NOTHING_FAILED]),
|
|
101
|
+
'',
|
|
102
|
+
"## Don't use for",
|
|
103
|
+
prose(c.dontUse, 300),
|
|
104
|
+
'',
|
|
105
|
+
].join('\n');
|
|
106
|
+
}
|
|
107
|
+
/** D116 item 5: the lines of `metadata.before-you-start`, each one flat line. */
|
|
108
|
+
export function beforeYouStart(meta) {
|
|
109
|
+
return String(meta['before-you-start'] ?? '').split(' | ').map((l) => prose(l, 200)).filter(Boolean).slice(0, 3);
|
|
110
|
+
}
|
|
111
|
+
export function skillHash(text) {
|
|
112
|
+
return `sha256:${createHash('sha256').update(String(text ?? '')).digest('hex')}`;
|
|
113
|
+
}
|
|
114
|
+
/** The command in a Run line's first code span, and what follows it (CommonMark code spans). */
|
|
115
|
+
function readSpan(rest) {
|
|
116
|
+
const open = /`+/.exec(rest);
|
|
117
|
+
if (!open)
|
|
118
|
+
return null;
|
|
119
|
+
const len = open[0].length;
|
|
120
|
+
const from = open.index + len;
|
|
121
|
+
const close = new RegExp(`(?<!\`)\`{${len}}(?!\`)`, 'g');
|
|
122
|
+
close.lastIndex = from;
|
|
123
|
+
const m = close.exec(rest);
|
|
124
|
+
if (!m)
|
|
125
|
+
return null;
|
|
126
|
+
let cmd = rest.slice(from, m.index);
|
|
127
|
+
if (cmd.length > 1 && cmd.startsWith(' ') && cmd.endsWith(' ') && cmd.trim())
|
|
128
|
+
cmd = cmd.slice(1, -1);
|
|
129
|
+
return { cmd, after: rest.slice(m.index + len) };
|
|
130
|
+
}
|
|
131
|
+
const isMap = (v) => typeof v === 'object' && v !== null && !Array.isArray(v) && !(v instanceof Date);
|
|
132
|
+
const SCOPES = new Set(['personal', 'repo', 'team']);
|
|
133
|
+
const JOBS = new Set(['release', 'ship', 'pr-green', 'sweep', 'run-local', 'report', 'tests']);
|
|
134
|
+
const section = (heading) => heading.toLowerCase().replace(/[\u2019']/g, "'").replace(/\s+/g, ' ').trim();
|
|
135
|
+
/** Through phase 0's matter(): null on `refused` (anchors, aliases, non-scalars) or when there is no `metadata.trail` key. */
|
|
136
|
+
export function parseSkillMd(text, folderName) {
|
|
137
|
+
const src = String(text ?? '');
|
|
138
|
+
let fm;
|
|
139
|
+
try {
|
|
140
|
+
fm = matter(src, { scalars: ['name', 'description'] });
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
if (fm.refused)
|
|
146
|
+
return null;
|
|
147
|
+
const data = fm.data;
|
|
148
|
+
const raw = data.metadata;
|
|
149
|
+
if (!isMap(raw))
|
|
150
|
+
return null;
|
|
151
|
+
const strings = {};
|
|
152
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
153
|
+
if (v === null || v === undefined)
|
|
154
|
+
continue;
|
|
155
|
+
if (typeof v === 'object' && !(v instanceof Date))
|
|
156
|
+
return null;
|
|
157
|
+
strings[k] = v instanceof Date ? v.toISOString().slice(0, 10) : String(v);
|
|
158
|
+
}
|
|
159
|
+
if (!strings.trail?.trim())
|
|
160
|
+
return null;
|
|
161
|
+
const meta = {};
|
|
162
|
+
for (const k of [...META_ORDER, ...Object.keys(strings)])
|
|
163
|
+
if (strings[k] !== undefined && meta[k] === undefined)
|
|
164
|
+
meta[k] = strings[k];
|
|
165
|
+
if (!SCOPES.has(meta.scope))
|
|
166
|
+
meta.scope = 'personal';
|
|
167
|
+
if (meta.job !== undefined && !JOBS.has(meta.job))
|
|
168
|
+
delete meta.job;
|
|
169
|
+
meta.asks ??= '';
|
|
170
|
+
meta.version ??= '1';
|
|
171
|
+
const confirm = new Set((meta['confirm-before'] ?? '').split(' ; ').map((s) => s.trim()).filter(Boolean));
|
|
172
|
+
const steps = [];
|
|
173
|
+
const ifFails = [];
|
|
174
|
+
const dontUse = [];
|
|
175
|
+
let where = '';
|
|
176
|
+
for (const line of String(fm.content ?? '').split(/\r?\n/)) {
|
|
177
|
+
const h = /^##\s+(.+?)\s*#*\s*$/.exec(line);
|
|
178
|
+
if (h) {
|
|
179
|
+
where = section(h[1]);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (where === 'run') {
|
|
183
|
+
const m = /^\s*\d+\.\s+(.*)$/.exec(line);
|
|
184
|
+
if (!m)
|
|
185
|
+
continue;
|
|
186
|
+
let rest = m[1];
|
|
187
|
+
const prefixed = /^can[\u2019']t be undone\b[^`]*?:\s*/i.exec(rest);
|
|
188
|
+
if (prefixed)
|
|
189
|
+
rest = rest.slice(prefixed[0].length);
|
|
190
|
+
const span = readSpan(rest);
|
|
191
|
+
if (!span || !span.cmd.trim())
|
|
192
|
+
continue;
|
|
193
|
+
const cmd = span.cmd;
|
|
194
|
+
const kind = gatedKind(cmd);
|
|
195
|
+
const gated = kind ?? (prefixed || confirm.has(cmd) ? 'deploy' : null);
|
|
196
|
+
steps.push({ n: steps.length + 1, cmd, gated, bg: /\(in the background\)/i.test(span.after), wait: /\(a wait\b/i.test(span.after) });
|
|
197
|
+
}
|
|
198
|
+
else if (where === 'if it fails') {
|
|
199
|
+
const m = /^\s*[-*]\s+(.+)$/.exec(line);
|
|
200
|
+
if (m)
|
|
201
|
+
ifFails.push(m[1].trim());
|
|
202
|
+
}
|
|
203
|
+
else if (where === "don't use for" && line.trim())
|
|
204
|
+
dontUse.push(line.trim());
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
name: typeof data.name === 'string' && data.name.trim() ? data.name : folderName,
|
|
208
|
+
description: typeof data.description === 'string' ? data.description : '',
|
|
209
|
+
meta: meta,
|
|
210
|
+
steps,
|
|
211
|
+
check: meta.check?.trim() ? meta.check : null,
|
|
212
|
+
checkShows: meta['check-shows']?.trim() ? meta['check-shows'] : null,
|
|
213
|
+
ifFails,
|
|
214
|
+
dontUse: dontUse.join(' '),
|
|
215
|
+
params: metaToParams(meta.params),
|
|
216
|
+
hash: skillHash(src),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=skillmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillmd.js","sourceRoot":"","sources":["../../src/skills/skillmd.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/skills.d.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export declare
|
|
1
|
+
/** Trail's and graft's own skills, rewritten by every `init`: never a place for takeaways. */
|
|
2
|
+
export declare const OWN_SKILLS: Set<string>;
|
|
3
|
+
/**
|
|
4
|
+
* Where a repo's skills are: the repo's in its `.claude/skills/`, and this
|
|
5
|
+
* machine's in ~/.trail. A link in either is followed only while it stays
|
|
6
|
+
* inside its root (`repoRoot`, the checkout; `homeRoot`, ~/.trail), so no
|
|
7
|
+
* skill file outside the repo or ~/.trail is ever read or written.
|
|
8
|
+
*/
|
|
9
|
+
export declare function skillDirs(dir: string): SkillDirs;
|
|
10
|
+
export interface SkillDirs {
|
|
3
11
|
repo: string;
|
|
4
12
|
home: string;
|
|
5
|
-
|
|
13
|
+
repoRoot: string;
|
|
14
|
+
homeRoot: string;
|
|
15
|
+
}
|
|
6
16
|
export interface Takeaway {
|
|
7
17
|
/** Absolute path of its file. */
|
|
8
18
|
path: string;
|
|
@@ -28,9 +38,11 @@ export interface Skill {
|
|
|
28
38
|
where: "repo" | "home";
|
|
29
39
|
/** Absolute path of its SKILL.md. */
|
|
30
40
|
file: string;
|
|
41
|
+
/** Trail may rewrite its SKILL.md (skill-file.ts): never when someone wrote it by hand. */
|
|
42
|
+
trailOwned: boolean;
|
|
31
43
|
takeaways: Takeaway[];
|
|
32
44
|
}
|
|
33
|
-
/** A skill name as a folder: `PDF coords` → `pdf-coords`. */
|
|
45
|
+
/** A skill name as a folder: `PDF coords` → `pdf-coords`. At most 64 characters, cut at a word. */
|
|
34
46
|
export declare function skillName(raw: string): string;
|
|
35
47
|
export declare function parseTakeaway(text: string, path: string, skill: string): Takeaway | null;
|
|
36
48
|
export declare function renderTakeaway(t: Omit<Takeaway, "path">): string;
|
|
@@ -77,6 +89,12 @@ export interface FoldResult {
|
|
|
77
89
|
stillWaiting: number;
|
|
78
90
|
/** The SKILL.md headings that gained lines. */
|
|
79
91
|
sections: string[];
|
|
92
|
+
/**
|
|
93
|
+
* Why SKILL.md was left as it is, with takeaways ready: `hand-written`, not
|
|
94
|
+
* Trail's to rewrite (skill-file.ts); `unreadable`, its front matter isn't
|
|
95
|
+
* between two `---` lines. The takeaways stay waiting, and still reach the agent.
|
|
96
|
+
*/
|
|
97
|
+
left?: "hand-written" | "unreadable";
|
|
80
98
|
}
|
|
81
99
|
/**
|
|
82
100
|
* Write a skill's waiting takeaways into its SKILL.md, under the heading each
|
|
@@ -87,12 +105,13 @@ export interface FoldResult {
|
|
|
87
105
|
export declare function fold(dir: string, name: string, opts?: {
|
|
88
106
|
confirmed?: boolean;
|
|
89
107
|
}): FoldResult | null;
|
|
108
|
+
/** `link`: the repo's `.claude/skills/<name>` leads out of the repo, so nothing is written through it. */
|
|
90
109
|
export type PublishResult = {
|
|
91
110
|
ok: true;
|
|
92
111
|
file: string;
|
|
93
112
|
} | {
|
|
94
113
|
ok: false;
|
|
95
|
-
reason: "unknown" | "in-repo";
|
|
114
|
+
reason: "unknown" | "in-repo" | "link";
|
|
96
115
|
};
|
|
97
116
|
/**
|
|
98
117
|
* Move a skill kept on this machine into the repo's `.claude/skills/`, where
|
|
@@ -111,8 +130,9 @@ export declare function skillForAgent(s: Skill): string;
|
|
|
111
130
|
/**
|
|
112
131
|
* The line a session starts with about skills an agent can't see by itself:
|
|
113
132
|
* ones kept only on this machine (Claude Code loads `.claude/skills/`, not
|
|
114
|
-
* ~/.trail), and the team's ones with corrections waiting.
|
|
115
|
-
*
|
|
133
|
+
* ~/.trail), and the team's ones with corrections waiting. It names the files
|
|
134
|
+
* to read: `trail skills show` is the learned skills' command now and can't
|
|
135
|
+
* print these. Empty when there are none.
|
|
116
136
|
*/
|
|
117
|
-
export declare function skillsDirective(dir: string
|
|
137
|
+
export declare function skillsDirective(dir: string): string;
|
|
118
138
|
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/skills/skills.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/skills/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/skills.js
CHANGED
|
@@ -8,30 +8,46 @@
|
|
|
8
8
|
* skill stays one readable page instead of a pile of corrections.
|
|
9
9
|
*
|
|
10
10
|
* The SKILL.md lives in one of two places. A skill the repo already has, in
|
|
11
|
-
* `.claude/skills/<name>/`, is the
|
|
12
|
-
* into it
|
|
13
|
-
* by
|
|
11
|
+
* `.claude/skills/<name>/`, is the repo's: takeaways attach to it, and fold
|
|
12
|
+
* into it only when it is Trail's (skill-file.ts), never into one someone
|
|
13
|
+
* wrote by hand; the diff goes through review like any change. A skill started
|
|
14
|
+
* by `learn()` lives next to its takeaways in `~/.trail` until someone
|
|
14
15
|
* chooses to share it: `trail skills publish` moves it into the repo's
|
|
15
16
|
* `.claude/skills/`, where Claude Code loads it for everyone who pulls.
|
|
17
|
+
* (No command calls `learn()` any more: the hidden `trail learn` is gone.)
|
|
16
18
|
*
|
|
17
19
|
* Takeaways are never deleted: a folded one keeps its file, with `folded_in`
|
|
18
20
|
* saying which version took it, so why a rule exists stays findable.
|
|
19
21
|
*/
|
|
20
|
-
import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
21
|
-
import { join } from "node:path";
|
|
22
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
23
|
+
import { dirname, join } from "node:path";
|
|
22
24
|
import { matter } from "../util/front-matter.js";
|
|
23
25
|
import { shortDate, slug } from "../notes/notes.js";
|
|
24
|
-
import { ensureRepoHome, repoPlace } from "../notes/home.js";
|
|
26
|
+
import { ensureRepoHome, repoPlace, trailHome } from "../notes/home.js";
|
|
27
|
+
import { versionOf } from "./front-version.js";
|
|
28
|
+
import { nearestThere, rewriteSkill, skillMark, trailOwned, within } from "./skill-file.js";
|
|
25
29
|
/** Trail's and graft's own skills, rewritten by every `init`: never a place for takeaways. */
|
|
26
|
-
const OWN_SKILLS = new Set(["trail", "graft"]);
|
|
27
|
-
/**
|
|
30
|
+
export const OWN_SKILLS = new Set(["trail", "graft"]);
|
|
31
|
+
/**
|
|
32
|
+
* Where a repo's skills are: the repo's in its `.claude/skills/`, and this
|
|
33
|
+
* machine's in ~/.trail. A link in either is followed only while it stays
|
|
34
|
+
* inside its root (`repoRoot`, the checkout; `homeRoot`, ~/.trail), so no
|
|
35
|
+
* skill file outside the repo or ~/.trail is ever read or written.
|
|
36
|
+
*/
|
|
28
37
|
export function skillDirs(dir) {
|
|
29
38
|
const place = repoPlace(dir);
|
|
30
|
-
return { repo: join(place.checkout, ".claude", "skills"), home: join(place.dir, "skills") };
|
|
39
|
+
return { repo: join(place.checkout, ".claude", "skills"), home: join(place.dir, "skills"), repoRoot: place.checkout, homeRoot: trailHome() };
|
|
31
40
|
}
|
|
32
|
-
/**
|
|
41
|
+
/** The longest skill name the Agent Skills spec allows (validate.ts). */
|
|
42
|
+
const NAME_MAX = 64;
|
|
43
|
+
/** A skill name as a folder: `PDF coords` → `pdf-coords`. At most 64 characters, cut at a word. */
|
|
33
44
|
export function skillName(raw) {
|
|
34
|
-
|
|
45
|
+
const name = slug(raw, 8);
|
|
46
|
+
if (name.length <= NAME_MAX)
|
|
47
|
+
return name;
|
|
48
|
+
const cut = name.slice(0, NAME_MAX + 1);
|
|
49
|
+
const at = cut.lastIndexOf("-");
|
|
50
|
+
return at > 0 ? cut.slice(0, at) : name.slice(0, NAME_MAX);
|
|
35
51
|
}
|
|
36
52
|
function yamlScalar(s) {
|
|
37
53
|
return /^[A-Za-z0-9][^:#\n"'{}[\],&*!|>%@`]*$/.test(s) && s.trim() === s ? s : JSON.stringify(s);
|
|
@@ -76,10 +92,12 @@ export function renderTakeaway(t) {
|
|
|
76
92
|
fm.push("---");
|
|
77
93
|
return `${fm.join("\n")}\n${t.text.trim()}\n`;
|
|
78
94
|
}
|
|
79
|
-
function readTakeaways(
|
|
80
|
-
const tdir = join(
|
|
95
|
+
function readTakeaways(dirs, name) {
|
|
96
|
+
const tdir = join(dirs.home, name, "takeaways");
|
|
81
97
|
let files = [];
|
|
82
98
|
try {
|
|
99
|
+
if (!within(tdir, dirs.homeRoot))
|
|
100
|
+
return [];
|
|
83
101
|
files = readdirSync(tdir).filter((f) => f.endsWith(".md")).sort();
|
|
84
102
|
}
|
|
85
103
|
catch {
|
|
@@ -87,6 +105,8 @@ function readTakeaways(homeSkills, name) {
|
|
|
87
105
|
}
|
|
88
106
|
const out = [];
|
|
89
107
|
for (const f of files) {
|
|
108
|
+
if (!within(join(tdir, f), dirs.homeRoot))
|
|
109
|
+
continue;
|
|
90
110
|
try {
|
|
91
111
|
const t = parseTakeaway(readFileSync(join(tdir, f), "utf8"), join(tdir, f), name);
|
|
92
112
|
if (t)
|
|
@@ -98,25 +118,27 @@ function readTakeaways(homeSkills, name) {
|
|
|
98
118
|
}
|
|
99
119
|
return out;
|
|
100
120
|
}
|
|
101
|
-
/** The skill's SKILL.md: the repo's when it has one, else this machine's. */
|
|
121
|
+
/** The skill's SKILL.md: the repo's when it has one, else this machine's. Never one a link leads to outside the repo or ~/.trail. */
|
|
102
122
|
function skillFile(dirs, name) {
|
|
103
123
|
const repo = join(dirs.repo, name, "SKILL.md");
|
|
104
|
-
if (existsSync(repo))
|
|
124
|
+
if (existsSync(repo) && within(repo, dirs.repoRoot))
|
|
105
125
|
return { file: repo, where: "repo" };
|
|
106
126
|
const home = join(dirs.home, name, "SKILL.md");
|
|
107
|
-
if (existsSync(home))
|
|
127
|
+
if (existsSync(home) && within(home, dirs.homeRoot))
|
|
108
128
|
return { file: home, where: "home" };
|
|
109
129
|
return null;
|
|
110
130
|
}
|
|
111
131
|
function readSkill(dirs, name) {
|
|
112
|
-
if (OWN_SKILLS.has(name))
|
|
132
|
+
if (!name || OWN_SKILLS.has(name))
|
|
113
133
|
return null;
|
|
114
134
|
const at = skillFile(dirs, name);
|
|
115
135
|
if (!at)
|
|
116
136
|
return null;
|
|
137
|
+
let text;
|
|
117
138
|
let parsed;
|
|
118
139
|
try {
|
|
119
|
-
|
|
140
|
+
text = readFileSync(at.file, "utf8");
|
|
141
|
+
parsed = matter(text);
|
|
120
142
|
}
|
|
121
143
|
catch {
|
|
122
144
|
return null;
|
|
@@ -125,27 +147,56 @@ function readSkill(dirs, name) {
|
|
|
125
147
|
return {
|
|
126
148
|
name,
|
|
127
149
|
description: typeof d.description === "string" ? d.description.trim() : "",
|
|
128
|
-
version:
|
|
150
|
+
version: versionOf(d),
|
|
129
151
|
body: parsed.content.trim(),
|
|
130
152
|
where: at.where,
|
|
131
153
|
file: at.file,
|
|
132
|
-
|
|
154
|
+
trailOwned: trailOwned(text, d, at.where),
|
|
155
|
+
takeaways: readTakeaways(dirs, name),
|
|
133
156
|
};
|
|
134
157
|
}
|
|
135
|
-
|
|
158
|
+
/**
|
|
159
|
+
* The folders in `dir`, by name, following links: a repo's skill can sit in
|
|
160
|
+
* `.agents/skills/<name>/` with `.claude/skills/<name>` linking to it. A link
|
|
161
|
+
* that loops, dangles, reaches a file or leads out of `root` is skipped, and
|
|
162
|
+
* two names for one folder count once, the first by name.
|
|
163
|
+
*/
|
|
164
|
+
function subdirs(dir, root) {
|
|
165
|
+
let entries;
|
|
136
166
|
try {
|
|
137
|
-
|
|
138
|
-
.filter((e) => e.isDirectory())
|
|
139
|
-
.map((e) => e.name);
|
|
167
|
+
entries = readdirSync(dir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));
|
|
140
168
|
}
|
|
141
169
|
catch {
|
|
142
170
|
return [];
|
|
143
171
|
}
|
|
172
|
+
const out = [];
|
|
173
|
+
const seen = new Set();
|
|
174
|
+
for (const e of entries) {
|
|
175
|
+
const path = join(dir, e.name);
|
|
176
|
+
let real;
|
|
177
|
+
try {
|
|
178
|
+
if (e.isSymbolicLink() && !statSync(path).isDirectory())
|
|
179
|
+
continue;
|
|
180
|
+
if (!e.isSymbolicLink() && !e.isDirectory())
|
|
181
|
+
continue;
|
|
182
|
+
if (!within(path, root))
|
|
183
|
+
continue;
|
|
184
|
+
real = realpathSync(path);
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (seen.has(real))
|
|
190
|
+
continue;
|
|
191
|
+
seen.add(real);
|
|
192
|
+
out.push(e.name);
|
|
193
|
+
}
|
|
194
|
+
return out;
|
|
144
195
|
}
|
|
145
196
|
/** Every skill for the repo `dir` is in: the team's in the repo, then this machine's, by name. */
|
|
146
197
|
export function listSkills(dir) {
|
|
147
198
|
const dirs = skillDirs(dir);
|
|
148
|
-
const names = [...new Set([...subdirs(dirs.repo), ...subdirs(dirs.home)])].sort();
|
|
199
|
+
const names = [...new Set([...subdirs(dirs.repo, dirs.repoRoot), ...subdirs(dirs.home, dirs.homeRoot)])].sort();
|
|
149
200
|
return names.map((n) => readSkill(dirs, n)).filter((s) => s !== null);
|
|
150
201
|
}
|
|
151
202
|
export function getSkill(dir, name) {
|
|
@@ -162,25 +213,15 @@ export function isConfirmed(t) {
|
|
|
162
213
|
/* -------------------------------------------------------------------------- */
|
|
163
214
|
/* writing */
|
|
164
215
|
/* -------------------------------------------------------------------------- */
|
|
165
|
-
function renderNewSkill(name, description) {
|
|
166
|
-
const fm = ["---", `name: ${name}`, `description: ${yamlScalar(description)}`, "version: 1", "---"];
|
|
167
|
-
return `${fm.join("\n")}\n\n# ${name}\n\n${description}.\n`;
|
|
168
|
-
}
|
|
169
216
|
/**
|
|
170
|
-
* SKILL.md
|
|
171
|
-
*
|
|
172
|
-
*
|
|
217
|
+
* A new SKILL.md as the Agent Skills spec has it: name and description on
|
|
218
|
+
* top; Trail's mark and the version under metadata. The description never
|
|
219
|
+
* holds `---`, which ends the front matter early for the reference validator.
|
|
173
220
|
*/
|
|
174
|
-
function
|
|
175
|
-
const
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
const at = fm.findIndex((l) => l.startsWith("version:"));
|
|
179
|
-
if (at === -1)
|
|
180
|
-
fm.push(`version: ${version}`);
|
|
181
|
-
else
|
|
182
|
-
fm[at] = `version: ${version}`;
|
|
183
|
-
writeFileSync(file, `---\n${fm.join("\n")}\n---\n\n${body.trim()}\n`);
|
|
221
|
+
function renderNewSkill(name, description) {
|
|
222
|
+
const said = description.replace(/-{3,}/g, "--");
|
|
223
|
+
const fm = ["---", `name: ${name}`, `description: ${JSON.stringify(said)}`, "metadata:", ` trail: ${JSON.stringify(skillMark(name))}`, ' version: "1"', "---"];
|
|
224
|
+
return `${fm.join("\n")}\n\n# ${name}\n\n${description}.\n`;
|
|
184
225
|
}
|
|
185
226
|
/**
|
|
186
227
|
* Save one takeaway, on this machine. A skill the repo has gets it as is; a
|
|
@@ -192,7 +233,7 @@ export function learn(dir, input) {
|
|
|
192
233
|
if (!name)
|
|
193
234
|
throw new Error("a skill needs a name, like pdf-coords");
|
|
194
235
|
if (OWN_SKILLS.has(name))
|
|
195
|
-
throw new Error(`${name} is the code map's own skill, rewritten by every init
|
|
236
|
+
throw new Error(`${name} is the code map's own skill, rewritten by every init: pick a name for what you're teaching, like pdf-coords`);
|
|
196
237
|
ensureRepoHome(dir);
|
|
197
238
|
const dirs = skillDirs(dir);
|
|
198
239
|
let created = false;
|
|
@@ -265,6 +306,9 @@ export function fold(dir, name, opts = {}) {
|
|
|
265
306
|
const base = { skill: s.name, where: s.where, file: s.file, from: s.version, stillWaiting: still };
|
|
266
307
|
if (ready.length === 0)
|
|
267
308
|
return { ...base, to: s.version, folded: [], sections: [] };
|
|
309
|
+
const leave = (left) => ({ ...base, stillWaiting: waiting(s).length, to: s.version, folded: [], sections: [], left });
|
|
310
|
+
if (!s.trailOwned)
|
|
311
|
+
return leave("hand-written");
|
|
268
312
|
const lines = s.body.split(/\r?\n/);
|
|
269
313
|
const sections = [];
|
|
270
314
|
for (const t of ready) {
|
|
@@ -288,7 +332,8 @@ export function fold(dir, name, opts = {}) {
|
|
|
288
332
|
sections.push(heading);
|
|
289
333
|
}
|
|
290
334
|
const to = s.version + 1;
|
|
291
|
-
rewriteSkill(s.file, to, lines.join("\n"))
|
|
335
|
+
if (!rewriteSkill(s.file, to, lines.join("\n"), skillMark(s.name)))
|
|
336
|
+
return leave("unreadable");
|
|
292
337
|
for (const t of ready) {
|
|
293
338
|
t.foldedIn = to;
|
|
294
339
|
writeFileSync(t.path, renderTakeaway(t));
|
|
@@ -306,8 +351,12 @@ export function publish(dir, name) {
|
|
|
306
351
|
return { ok: false, reason: "unknown" };
|
|
307
352
|
if (s.where === "repo")
|
|
308
353
|
return { ok: false, reason: "in-repo" };
|
|
309
|
-
const
|
|
310
|
-
|
|
354
|
+
const dirs = skillDirs(dir);
|
|
355
|
+
const target = join(dirs.repo, s.name, "SKILL.md");
|
|
356
|
+
// The nearest folder already there must be the repo's own, or the new ones would be made through a link.
|
|
357
|
+
if (!within(nearestThere(dirname(target)), dirs.repoRoot))
|
|
358
|
+
return { ok: false, reason: "link" };
|
|
359
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
311
360
|
try {
|
|
312
361
|
renameSync(s.file, target);
|
|
313
362
|
}
|
|
@@ -340,7 +389,7 @@ export function skillStatus(s) {
|
|
|
340
389
|
*/
|
|
341
390
|
export function skillForAgent(s) {
|
|
342
391
|
const open = waiting(s).sort((a, b) => b.date.localeCompare(a.date) || b.path.localeCompare(a.path));
|
|
343
|
-
const out = [`# ${s.name} (v${s.version}, ${s.where === "repo" ? "
|
|
392
|
+
const out = [`# ${s.name} (v${s.version}, ${s.where === "repo" ? "in this repo" : "kept on this machine"})`, "", s.body.trim()];
|
|
344
393
|
if (open.length) {
|
|
345
394
|
out.push("", `## Corrections since v${s.version} (newest first; these win where they disagree with the above)`);
|
|
346
395
|
for (const t of open)
|
|
@@ -351,20 +400,24 @@ export function skillForAgent(s) {
|
|
|
351
400
|
/**
|
|
352
401
|
* The line a session starts with about skills an agent can't see by itself:
|
|
353
402
|
* ones kept only on this machine (Claude Code loads `.claude/skills/`, not
|
|
354
|
-
* ~/.trail), and the team's ones with corrections waiting.
|
|
355
|
-
*
|
|
403
|
+
* ~/.trail), and the team's ones with corrections waiting. It names the files
|
|
404
|
+
* to read: `trail skills show` is the learned skills' command now and can't
|
|
405
|
+
* print these. Empty when there are none.
|
|
356
406
|
*/
|
|
357
|
-
export function skillsDirective(dir
|
|
407
|
+
export function skillsDirective(dir) {
|
|
358
408
|
const parts = [];
|
|
409
|
+
const dirs = skillDirs(dir);
|
|
359
410
|
for (const s of listSkills(dir)) {
|
|
360
411
|
const open = waiting(s).length;
|
|
412
|
+
const fixes = `${open} correction${open === 1 ? "" : "s"}`;
|
|
413
|
+
const tdir = join(dirs.home, s.name, "takeaways");
|
|
361
414
|
if (s.where === "home")
|
|
362
|
-
parts.push(`${s.name} (on this machine${open ? `, ${
|
|
415
|
+
parts.push(`${s.name} (on this machine: ${s.file}${open ? `, then ${fixes} in ${tdir}` : ""})`);
|
|
363
416
|
else if (open)
|
|
364
|
-
parts.push(`${s.name} (${
|
|
417
|
+
parts.push(`${s.name} (${fixes} newer than its SKILL.md, in ${tdir})`);
|
|
365
418
|
}
|
|
366
419
|
if (parts.length === 0)
|
|
367
420
|
return "";
|
|
368
|
-
return `Skills with more than Claude Code loads by itself: ${parts.join(", ")}.
|
|
421
|
+
return `Skills with more than Claude Code loads by itself: ${parts.join(", ")}. Read them before working in one's area, the corrections newest first; they win where they disagree.\n`;
|
|
369
422
|
}
|
|
370
423
|
//# sourceMappingURL=skills.js.map
|