@nanonets/graft 0.23.1 → 0.24.1
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 +4 -4
- package/dist/ai/crux.d.ts +31 -3
- package/dist/ai/crux.d.ts.map +1 -1
- package/dist/ai/crux.js +88 -10
- package/dist/ai/crux.js.map +1 -1
- package/dist/ai/llm/openai.d.ts +101 -0
- package/dist/ai/llm/openai.d.ts.map +1 -1
- package/dist/ai/llm/openai.js +396 -6
- package/dist/ai/llm/openai.js.map +1 -1
- package/dist/ai/llm/recover-tool.d.ts +2 -0
- package/dist/ai/llm/recover-tool.d.ts.map +1 -1
- package/dist/ai/llm/recover-tool.js +1 -1
- package/dist/ai/llm/recover-tool.js.map +1 -1
- package/dist/ai/synthesize.d.ts.map +1 -1
- package/dist/ai/synthesize.js +100 -1
- package/dist/ai/synthesize.js.map +1 -1
- 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/claude/format.js +1 -1
- 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/hooks.d.ts +0 -18
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +24 -77
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.js +3 -3
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/note-signals.d.ts +28 -0
- package/dist/claude/note-signals.d.ts.map +1 -0
- package/dist/claude/note-signals.js +325 -0
- package/dist/claude/note-signals.js.map +1 -0
- package/dist/claude/shim-template.d.ts.map +1 -1
- package/dist/claude/shim-template.js +10 -4
- package/dist/claude/shim-template.js.map +1 -1
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +49 -18
- package/dist/claude/skill-template.js.map +1 -1
- 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/state.d.ts +4 -3
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/claude/state.js.map +1 -1
- package/dist/claude/sync-run.js +1 -1
- package/dist/claude/sync-run.js.map +1 -1
- package/dist/cli-picker.d.ts +36 -5
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +60 -13
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +406 -64
- package/dist/cli.js.map +1 -1
- package/dist/cloud/lookup-activity.d.ts +16 -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.map +1 -1
- package/dist/cloud/nudge.js +3 -0
- package/dist/cloud/nudge.js.map +1 -1
- package/dist/cloud/onboarding.d.ts +237 -0
- package/dist/cloud/onboarding.d.ts.map +1 -0
- package/dist/cloud/onboarding.js +536 -0
- package/dist/cloud/onboarding.js.map +1 -0
- package/dist/cloud/pair.d.ts +76 -0
- package/dist/cloud/pair.d.ts.map +1 -0
- package/dist/cloud/pair.js +249 -0
- package/dist/cloud/pair.js.map +1 -0
- package/dist/cloud/workspace-sync.d.ts +10 -2
- package/dist/cloud/workspace-sync.d.ts.map +1 -1
- package/dist/cloud/workspace-sync.js +119 -7
- package/dist/cloud/workspace-sync.js.map +1 -1
- package/dist/cloud/workspace.d.ts +22 -1
- package/dist/cloud/workspace.d.ts.map +1 -1
- package/dist/cloud/workspace.js +16 -1
- package/dist/cloud/workspace.js.map +1 -1
- package/dist/context/batches.d.ts +29 -0
- package/dist/context/batches.d.ts.map +1 -0
- package/dist/context/batches.js +130 -0
- package/dist/context/batches.js.map +1 -0
- package/dist/context/build.d.ts +7 -2
- package/dist/context/build.d.ts.map +1 -1
- package/dist/context/build.js +84 -50
- package/dist/context/build.js.map +1 -1
- package/dist/context/node-file.d.ts.map +1 -1
- package/dist/context/node-file.js +41 -4
- package/dist/context/node-file.js.map +1 -1
- package/dist/engine.d.ts +2 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +1 -0
- package/dist/engine.js.map +1 -1
- package/dist/graph/cards.d.ts.map +1 -1
- package/dist/graph/cards.js +9 -4
- package/dist/graph/cards.js.map +1 -1
- package/dist/graph/enrich.d.ts.map +1 -1
- package/dist/graph/enrich.js +8 -3
- package/dist/graph/enrich.js.map +1 -1
- package/dist/graph/generic.d.ts.map +1 -1
- package/dist/graph/generic.js +207 -6
- package/dist/graph/generic.js.map +1 -1
- package/dist/graph/lsp/client.d.ts +18 -0
- package/dist/graph/lsp/client.d.ts.map +1 -1
- package/dist/graph/lsp/client.js +40 -2
- package/dist/graph/lsp/client.js.map +1 -1
- package/dist/graph/lsp/enrich.d.ts.map +1 -1
- package/dist/graph/lsp/enrich.js +9 -1
- package/dist/graph/lsp/enrich.js.map +1 -1
- package/dist/graph/lsp/registry.d.ts +7 -0
- package/dist/graph/lsp/registry.d.ts.map +1 -1
- package/dist/graph/lsp/registry.js +27 -2
- package/dist/graph/lsp/registry.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/graph/queries/gleam.scm +51 -0
- package/dist/graph/resolve.d.ts.map +1 -1
- package/dist/graph/resolve.js +65 -3
- package/dist/graph/resolve.js.map +1 -1
- package/dist/graph/workspace-cli.d.ts +2 -0
- package/dist/graph/workspace-cli.d.ts.map +1 -1
- package/dist/graph/workspace-cli.js +1 -1
- package/dist/graph/workspace-cli.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 +38 -3
- package/dist/hosts/claude-global.js.map +1 -1
- 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/plain-file.d.ts +11 -0
- package/dist/init/plain-file.d.ts.map +1 -0
- package/dist/init/plain-file.js +80 -0
- package/dist/init/plain-file.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/branches.d.ts +7 -1
- package/dist/notes/branches.d.ts.map +1 -1
- package/dist/notes/branches.js +31 -3
- package/dist/notes/branches.js.map +1 -1
- package/dist/notes/cold-start.d.ts +42 -3
- package/dist/notes/cold-start.d.ts.map +1 -1
- package/dist/notes/cold-start.js +144 -24
- package/dist/notes/cold-start.js.map +1 -1
- package/dist/notes/credit.d.ts +37 -0
- package/dist/notes/credit.d.ts.map +1 -0
- package/dist/notes/credit.js +78 -0
- package/dist/notes/credit.js.map +1 -0
- 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/find-notes.d.ts +17 -0
- package/dist/notes/find-notes.d.ts.map +1 -0
- package/dist/notes/find-notes.js +48 -0
- package/dist/notes/find-notes.js.map +1 -0
- package/dist/notes/flatten.d.ts +31 -0
- package/dist/notes/flatten.d.ts.map +1 -0
- package/dist/notes/flatten.js +73 -0
- package/dist/notes/flatten.js.map +1 -0
- package/dist/notes/git-facts.d.ts +2 -0
- package/dist/notes/git-facts.d.ts.map +1 -1
- package/dist/notes/git-facts.js +6 -0
- package/dist/notes/git-facts.js.map +1 -1
- 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/home.d.ts +24 -6
- package/dist/notes/home.d.ts.map +1 -1
- package/dist/notes/home.js +82 -15
- package/dist/notes/home.js.map +1 -1
- package/dist/notes/learning-fields.d.ts +102 -0
- package/dist/notes/learning-fields.d.ts.map +1 -0
- package/dist/notes/learning-fields.js +214 -0
- package/dist/notes/learning-fields.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/memory-notes.d.ts +71 -0
- package/dist/notes/memory-notes.d.ts.map +1 -0
- package/dist/notes/memory-notes.js +239 -0
- package/dist/notes/memory-notes.js.map +1 -0
- package/dist/notes/note-gate.d.ts +42 -0
- package/dist/notes/note-gate.d.ts.map +1 -0
- package/dist/notes/note-gate.js +181 -0
- package/dist/notes/note-gate.js.map +1 -0
- package/dist/notes/notes.d.ts +29 -85
- package/dist/notes/notes.d.ts.map +1 -1
- package/dist/notes/notes.js +69 -254
- package/dist/notes/notes.js.map +1 -1
- package/dist/notes/pr-reviews.d.ts +35 -7
- package/dist/notes/pr-reviews.d.ts.map +1 -1
- package/dist/notes/pr-reviews.js +156 -46
- 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/secrets.d.ts +28 -0
- package/dist/notes/secrets.d.ts.map +1 -0
- package/dist/notes/secrets.js +362 -0
- package/dist/notes/secrets.js.map +1 -0
- package/dist/notes/targets.d.ts +37 -0
- package/dist/notes/targets.d.ts.map +1 -0
- package/dist/notes/targets.js +108 -0
- package/dist/notes/targets.js.map +1 -0
- package/dist/notes/team-check.d.ts +22 -0
- package/dist/notes/team-check.d.ts.map +1 -0
- package/dist/notes/team-check.js +130 -0
- package/dist/notes/team-check.js.map +1 -0
- package/dist/notes/trail-home.d.ts +3 -0
- package/dist/notes/trail-home.d.ts.map +1 -0
- package/dist/notes/trail-home.js +12 -0
- package/dist/notes/trail-home.js.map +1 -0
- package/dist/skills/anchors-cli.d.ts +33 -0
- package/dist/skills/anchors-cli.d.ts.map +1 -0
- package/dist/skills/anchors-cli.js +274 -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/answers-prompt.d.ts +13 -0
- package/dist/skills/answers-prompt.d.ts.map +1 -0
- package/dist/skills/answers-prompt.js +83 -0
- package/dist/skills/answers-prompt.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/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 +532 -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 +82 -0
- package/dist/skills/compile-words.d.ts.map +1 -0
- package/dist/skills/compile-words.js +385 -0
- package/dist/skills/compile-words.js.map +1 -0
- package/dist/skills/compile.d.ts +35 -0
- package/dist/skills/compile.d.ts.map +1 -0
- package/dist/skills/compile.js +488 -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/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/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/found-skill.d.ts +35 -0
- package/dist/skills/found-skill.d.ts.map +1 -0
- package/dist/skills/found-skill.js +66 -0
- package/dist/skills/found-skill.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/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/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/never-save.d.ts +5 -0
- package/dist/skills/never-save.d.ts.map +1 -0
- package/dist/skills/never-save.js +158 -0
- package/dist/skills/never-save.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/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/params.d.ts +39 -0
- package/dist/skills/params.d.ts.map +1 -0
- package/dist/skills/params.js +275 -0
- package/dist/skills/params.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/ran-less.d.ts +5 -0
- package/dist/skills/ran-less.d.ts.map +1 -0
- package/dist/skills/ran-less.js +51 -0
- package/dist/skills/ran-less.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/risk-delta.d.ts +32 -0
- package/dist/skills/risk-delta.d.ts.map +1 -0
- package/dist/skills/risk-delta.js +56 -0
- package/dist/skills/risk-delta.js.map +1 -0
- package/dist/skills/risk.d.ts +73 -0
- package/dist/skills/risk.d.ts.map +1 -0
- package/dist/skills/risk.js +396 -0
- package/dist/skills/risk.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 +45 -0
- package/dist/skills/runblock.d.ts.map +1 -0
- package/dist/skills/runblock.js +222 -0
- package/dist/skills/runblock.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/settings.d.ts +38 -0
- package/dist/skills/settings.d.ts.map +1 -0
- package/dist/skills/settings.js +133 -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 +2 -0
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +1 -1
- 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 +422 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.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/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.map +1 -1
- package/dist/telemetry/contract.js +8 -6
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/notice.d.ts.map +1 -1
- package/dist/telemetry/notice.js +3 -1
- package/dist/telemetry/notice.js.map +1 -1
- package/dist/trace/check-reads.d.ts +36 -0
- package/dist/trace/check-reads.d.ts.map +1 -0
- package/dist/trace/check-reads.js +57 -0
- package/dist/trace/check-reads.js.map +1 -0
- package/dist/trace/checks.d.ts +63 -0
- package/dist/trace/checks.d.ts.map +1 -0
- package/dist/trace/checks.js +487 -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/host.d.ts +40 -0
- package/dist/trace/host.d.ts.map +1 -0
- package/dist/trace/host.js +84 -0
- package/dist/trace/host.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/redact.d.ts +8 -0
- package/dist/trace/redact.d.ts.map +1 -0
- package/dist/trace/redact.js +63 -0
- package/dist/trace/redact.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/seen-cache.d.ts +9 -0
- package/dist/trace/seen-cache.d.ts.map +1 -0
- package/dist/trace/seen-cache.js +46 -0
- package/dist/trace/seen-cache.js.map +1 -0
- package/dist/trace/shell-scan.d.ts +52 -0
- package/dist/trace/shell-scan.d.ts.map +1 -0
- package/dist/trace/shell-scan.js +318 -0
- package/dist/trace/shell-scan.js.map +1 -0
- package/dist/trace/shell-words.d.ts +91 -0
- package/dist/trace/shell-words.d.ts.map +1 -0
- package/dist/trace/shell-words.js +558 -0
- package/dist/trace/shell-words.js.map +1 -0
- package/dist/trace/shell.d.ts +91 -0
- package/dist/trace/shell.d.ts.map +1 -0
- package/dist/trace/shell.js +435 -0
- package/dist/trace/shell.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/state.d.ts +27 -0
- package/dist/trace/state.d.ts.map +1 -0
- package/dist/trace/state.js +98 -0
- package/dist/trace/state.js.map +1 -0
- package/dist/trace/tamper-code.d.ts +9 -0
- package/dist/trace/tamper-code.d.ts.map +1 -0
- package/dist/trace/tamper-code.js +174 -0
- package/dist/trace/tamper-code.js.map +1 -0
- package/dist/trace/tamper-git.d.ts +12 -0
- package/dist/trace/tamper-git.d.ts.map +1 -0
- package/dist/trace/tamper-git.js +77 -0
- package/dist/trace/tamper-git.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/types.d.ts +477 -0
- package/dist/trace/types.d.ts.map +1 -0
- package/dist/trace/types.js +12 -0
- package/dist/trace/types.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-glob.d.ts +11 -0
- package/dist/trace/walls-glob.d.ts.map +1 -0
- package/dist/trace/walls-glob.js +264 -0
- package/dist/trace/walls-glob.js.map +1 -0
- package/dist/trace/walls-quoted.d.ts +25 -0
- package/dist/trace/walls-quoted.d.ts.map +1 -0
- package/dist/trace/walls-quoted.js +81 -0
- package/dist/trace/walls-quoted.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.d.ts +1 -1
- package/dist/upkeep.d.ts.map +1 -1
- package/dist/upkeep.js +4 -1
- package/dist/upkeep.js.map +1 -1
- package/dist/util/actions-folder.d.ts +2 -0
- package/dist/util/actions-folder.d.ts.map +1 -0
- package/dist/util/actions-folder.js +9 -0
- package/dist/util/actions-folder.js.map +1 -0
- package/dist/util/front-matter.d.ts +31 -4
- package/dist/util/front-matter.d.ts.map +1 -1
- package/dist/util/front-matter.js +95 -3
- package/dist/util/front-matter.js.map +1 -1
- package/dist/util/private-file.d.ts +14 -0
- package/dist/util/private-file.d.ts.map +1 -0
- package/dist/util/private-file.js +82 -0
- package/dist/util/private-file.js.map +1 -0
- package/dist/util/private-fs.d.ts +25 -0
- package/dist/util/private-fs.d.ts.map +1 -0
- package/dist/util/private-fs.js +253 -0
- package/dist/util/private-fs.js.map +1 -0
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js +3 -0
- 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/dist/viewer/app.js +2 -2
- package/package.json +10 -7
- package/scripts/run-tests.mjs +14 -2
- package/scripts/stamp-telemetry-key.mjs +8 -5
- package/scripts/vendor-grammars.mjs +35 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cue misses and 60 days unused (design 1.3, 4.19, spec 13, P26, P27).
|
|
3
|
+
*
|
|
4
|
+
* A cue miss is a block a `job` cue brought in whose steps the agent never
|
|
5
|
+
* ran. Two in a row for one asks phrase drop that phrase from
|
|
6
|
+
* `metadata.asks`, only when Trail wrote the file last (its hash is the one
|
|
7
|
+
* in state) and never the last phrase; a hand-edited skill is never edited,
|
|
8
|
+
* the count just stays. Phrases are never added. A phrase can be the
|
|
9
|
+
* person's own words (D71 b), so outside SKILL.md it is only ever its
|
|
10
|
+
* `phraseSha`: 8 hex of sha256 (R30).
|
|
11
|
+
*
|
|
12
|
+
* A skill unused for 60 days leaves the index line; its cues still fire on a
|
|
13
|
+
* typed ask, and its folder stays.
|
|
14
|
+
*/
|
|
15
|
+
import { createHash } from 'node:crypto';
|
|
16
|
+
import { lstatSync, readFileSync } from 'node:fs';
|
|
17
|
+
import { appendLedger } from './ledger.js';
|
|
18
|
+
import { getSkillState, updateSkillState } from './state.js';
|
|
19
|
+
import { listAllPersonal } from './store.js';
|
|
20
|
+
import { parseSkillMd, skillHash } from './skillmd.js';
|
|
21
|
+
import { localDate } from './settings.js';
|
|
22
|
+
import { flatLine } from '../notes/flatten.js';
|
|
23
|
+
import { writePrivate } from '../util/private-fs.js';
|
|
24
|
+
import { tryStoreLock, MAX_SKILL_BYTES } from './store-fs.js';
|
|
25
|
+
export const UNUSED_DAYS = 60;
|
|
26
|
+
const DROP_AT = 2;
|
|
27
|
+
const MAX_KEYS = 20;
|
|
28
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
29
|
+
/** 8 hex of sha256 of the phrase, its spaces collapsed and lower-cased (R30). */
|
|
30
|
+
export function phraseSha(phrase) {
|
|
31
|
+
const t = String(phrase ?? '').normalize('NFC').trim().replace(/\s+/g, ' ').toLowerCase();
|
|
32
|
+
return createHash('sha256').update(t).digest('hex').slice(0, 8);
|
|
33
|
+
}
|
|
34
|
+
const counts = (st) => {
|
|
35
|
+
const c = st.cueMisses;
|
|
36
|
+
if (!c || typeof c !== 'object' || Array.isArray(c))
|
|
37
|
+
return {};
|
|
38
|
+
return Object.fromEntries(Object.entries(c).filter(([k, v]) => /^[0-9a-f]{8}$/.test(k) && typeof v === 'number' && Number.isFinite(v) && v > 0));
|
|
39
|
+
};
|
|
40
|
+
/** At credit flush (4.19). Returns whether the phrase should be dropped now. Changes st.cueMisses only. */
|
|
41
|
+
export function noteCueResult(st, phraseSha, followed) {
|
|
42
|
+
if (!phraseSha || !/^[0-9a-f]{8}$/.test(phraseSha))
|
|
43
|
+
return { drop: false };
|
|
44
|
+
const c = counts(st);
|
|
45
|
+
if (followed)
|
|
46
|
+
delete c[phraseSha];
|
|
47
|
+
else
|
|
48
|
+
c[phraseSha] = (c[phraseSha] ?? 0) + 1;
|
|
49
|
+
const keys = Object.keys(c);
|
|
50
|
+
for (const k of keys.slice(0, Math.max(0, keys.length - MAX_KEYS)))
|
|
51
|
+
if (k !== phraseSha)
|
|
52
|
+
delete c[k];
|
|
53
|
+
st.cueMisses = c;
|
|
54
|
+
return { drop: !followed && (c[phraseSha] ?? 0) >= DROP_AT };
|
|
55
|
+
}
|
|
56
|
+
const ASKS_LINE = /^ {2}asks: .*$/m;
|
|
57
|
+
/**
|
|
58
|
+
* Removes the asks phrase whose phraseSha matches when the file's hash equals st.hash; never the last phrase.
|
|
59
|
+
* Updates st.hash. Never writes through a link (the skill's folder or its SKILL.md). The caller holds the locks.
|
|
60
|
+
*/
|
|
61
|
+
export function dropPhrase(ref, st, sha) {
|
|
62
|
+
try {
|
|
63
|
+
if (lstatSync(ref.dir).isSymbolicLink())
|
|
64
|
+
return false;
|
|
65
|
+
const f = lstatSync(ref.file);
|
|
66
|
+
if (!f.isFile() || f.size > MAX_SKILL_BYTES)
|
|
67
|
+
return false;
|
|
68
|
+
const text = readFileSync(ref.file, 'utf8');
|
|
69
|
+
if (!st.hash || skillHash(text) !== st.hash)
|
|
70
|
+
return false;
|
|
71
|
+
const parsed = parseSkillMd(text, ref.name);
|
|
72
|
+
if (!parsed || parsed.meta.trail !== ref.id)
|
|
73
|
+
return false;
|
|
74
|
+
const phrases = String(parsed.meta.asks ?? '').split(',').map((p) => p.trim()).filter(Boolean);
|
|
75
|
+
const keep = phrases.filter((p) => phraseSha(p) !== sha);
|
|
76
|
+
if (keep.length === phrases.length || keep.length === 0)
|
|
77
|
+
return false;
|
|
78
|
+
const front = text.slice(0, text.indexOf('\n---', 3) + 1);
|
|
79
|
+
if (!front || (front.match(new RegExp(ASKS_LINE.source, 'gm')) ?? []).length !== 1)
|
|
80
|
+
return false;
|
|
81
|
+
const asks = keep.join(', ');
|
|
82
|
+
const next = text.slice(0, front.length).replace(ASKS_LINE, ` asks: ${JSON.stringify(flatLine(asks, 1024))}`) + text.slice(front.length);
|
|
83
|
+
const back = parseSkillMd(next, ref.name);
|
|
84
|
+
if (!back || back.meta.asks !== asks || back.meta.trail !== ref.id || back.steps.length !== parsed.steps.length)
|
|
85
|
+
return false;
|
|
86
|
+
writePrivate(ref.file, next);
|
|
87
|
+
st.hash = skillHash(next);
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 4.19 at a credit flush, with the locks: the count in state, and at 2 misses in a row the drop (store lock, then
|
|
96
|
+
* the state lock, as a save takes them), its ledger `cue` line. Fails closed: nothing dropped.
|
|
97
|
+
*/
|
|
98
|
+
export function cueFlush(skillId, sha, followed, env, now = new Date()) {
|
|
99
|
+
if (!sha || !/^[0-9a-f]{8}$/.test(sha))
|
|
100
|
+
return { dropped: false };
|
|
101
|
+
const had = getSkillState(skillId, env);
|
|
102
|
+
if (!had || (followed && !counts(had)[sha]))
|
|
103
|
+
return { dropped: false };
|
|
104
|
+
let drop = false;
|
|
105
|
+
updateSkillState(skillId, (s) => {
|
|
106
|
+
if (!s)
|
|
107
|
+
return s;
|
|
108
|
+
drop = noteCueResult(s, sha, followed).drop;
|
|
109
|
+
return s;
|
|
110
|
+
}, env);
|
|
111
|
+
if (!drop)
|
|
112
|
+
return { dropped: false };
|
|
113
|
+
const ref = listAllPersonal(env).find((r) => r.id === skillId);
|
|
114
|
+
if (!ref)
|
|
115
|
+
return { dropped: false };
|
|
116
|
+
let dropped = false;
|
|
117
|
+
try {
|
|
118
|
+
tryStoreLock(env, () => updateSkillState(skillId, (s) => {
|
|
119
|
+
if (s && dropPhrase(ref, s, sha)) {
|
|
120
|
+
dropped = true;
|
|
121
|
+
const c = counts(s);
|
|
122
|
+
delete c[sha];
|
|
123
|
+
s.cueMisses = c;
|
|
124
|
+
}
|
|
125
|
+
return s;
|
|
126
|
+
}, env));
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return { dropped: false };
|
|
130
|
+
}
|
|
131
|
+
if (dropped) {
|
|
132
|
+
try {
|
|
133
|
+
appendLedger(skillId, { at: now.toISOString(), event: 'cue', skill: skillId, phraseSha: sha, change: 'dropped' }, env);
|
|
134
|
+
}
|
|
135
|
+
catch { /* state is the truth */ }
|
|
136
|
+
}
|
|
137
|
+
return { dropped };
|
|
138
|
+
}
|
|
139
|
+
/** The date it was last used or saved when that is 60+ days ago, else null. */
|
|
140
|
+
export function unusedSince(st, now = new Date()) {
|
|
141
|
+
// A date that can't be read, or one after now (a clock that moved back, a hand edit), says nothing: the next one does.
|
|
142
|
+
const ok = (d) => typeof d === 'string' && !Number.isNaN(Date.parse(d)) && Date.parse(d) <= now.getTime() + DAY_MS;
|
|
143
|
+
const base = [st.lastUsedAt, st.addedAt].find(ok);
|
|
144
|
+
if (!base || now.getTime() - Date.parse(base) < UNUSED_DAYS * DAY_MS)
|
|
145
|
+
return null;
|
|
146
|
+
return localDate(base);
|
|
147
|
+
}
|
|
148
|
+
/** skill_stale{unused} is due: once per unused stretch (a use after it was said starts a new one). Sets unusedSaidAt. */
|
|
149
|
+
export function markUnusedSaid(skillId, env, now = new Date()) {
|
|
150
|
+
let due = false;
|
|
151
|
+
updateSkillState(skillId, (s) => {
|
|
152
|
+
if (!s || !unusedSince(s, now))
|
|
153
|
+
return s;
|
|
154
|
+
const said = s.unusedSaidAt ? Date.parse(s.unusedSaidAt) : NaN;
|
|
155
|
+
const used = Date.parse(s.lastUsedAt || s.addedAt);
|
|
156
|
+
if (!Number.isNaN(said) && !(used > said))
|
|
157
|
+
return s;
|
|
158
|
+
s.unusedSaidAt = now.toISOString();
|
|
159
|
+
due = true;
|
|
160
|
+
return s;
|
|
161
|
+
}, env);
|
|
162
|
+
return due;
|
|
163
|
+
}
|
|
164
|
+
/** skill_stale{missing} is due: once per skill per local day (4.18). Sets missingSaidAt. */
|
|
165
|
+
export function markMissingSaid(skillId, env, now = new Date()) {
|
|
166
|
+
let due = false;
|
|
167
|
+
updateSkillState(skillId, (s) => {
|
|
168
|
+
if (!s)
|
|
169
|
+
return s;
|
|
170
|
+
if (s.missingSaidAt && localDate(s.missingSaidAt) === localDate(now))
|
|
171
|
+
return s;
|
|
172
|
+
s.missingSaidAt = now.toISOString();
|
|
173
|
+
due = true;
|
|
174
|
+
return s;
|
|
175
|
+
}, env);
|
|
176
|
+
return due;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=staleness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staleness.js","sourceRoot":"","sources":["../../src/skills/staleness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1F,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,EAAc,EAA0B,EAAE;IACxD,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/D,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnJ,CAAC,CAAC;AAEF,2GAA2G;AAC3G,MAAM,UAAU,aAAa,CAAC,EAAc,EAAE,SAAwB,EAAE,QAAiB;IACvF,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3E,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;;QAC7B,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;IACjB,OAAO,EAAE,IAAI,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,SAAS,GAAG,iBAAiB,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAa,EAAE,EAAc,EAAE,GAAW;IACnE,IAAI,CAAC;QACH,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,GAAG,eAAe;YAAE,OAAO,KAAK,CAAC;QAC1D,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACjG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1I,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC9H,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,GAAkB,EAAE,QAAiB,EAAE,GAAuB,EAAE,MAAY,IAAI,IAAI,EAAE;IAC9H,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClE,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvE,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACjB,IAAI,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC;QAC5C,OAAO,CAAC,CAAC;IACX,CAAC,EAAE,GAAG,CAAC,CAAC;IACR,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAC/D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACpC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACtD,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YAAC,YAAY,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACpK,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,WAAW,CAAC,EAAc,EAAE,MAAY,IAAI,IAAI,EAAE;IAChE,uHAAuH;IACvH,MAAM,EAAE,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;IACzI,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,GAAG,MAAM;QAAE,OAAO,IAAI,CAAC;IAClF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,yHAAyH;AACzH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,GAAuB,EAAE,MAAY,IAAI,IAAI,EAAE;IAC7F,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,GAAG,GAAG,IAAI,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC,EAAE,GAAG,CAAC,CAAC;IACR,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,GAAuB,EAAE,MAAY,IAAI,IAAI,EAAE;IAC9F,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QAC/E,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACpC,GAAG,GAAG,IAAI,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC,EAAE,GAAG,CAAC,CAAC;IACR,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { LedgerUse, SkillState, SkillsStateFile } from './types.js';
|
|
2
|
+
export declare function skillsStatePath(env?: NodeJS.ProcessEnv): string;
|
|
3
|
+
export declare function readSkillsState(env?: NodeJS.ProcessEnv): SkillsStateFile;
|
|
4
|
+
export declare function getSkillState(id: string, env?: NodeJS.ProcessEnv): SkillState | null;
|
|
5
|
+
/**
|
|
6
|
+
* Locked read-modify-write of one entry. Return undefined from fn to delete. undefined also when the lock timed out,
|
|
7
|
+
* or when the state folder is a link (never written through, own-folder.ts): nothing changed either way.
|
|
8
|
+
*/
|
|
9
|
+
export declare function updateSkillState(id: string, fn: (s: SkillState | undefined) => SkillState | undefined, env?: NodeJS.ProcessEnv): SkillState | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* 4.8, after the caller wrote the ledger `use` line: uses, lastUsedAt/Repo; a passed check counts as a checked use,
|
|
12
|
+
* sets lastWorked (local date) and makes a candidate active; the failed step joins lastFails (the last two), and two
|
|
13
|
+
* at the same step make it needs-fix; a use with no failed step empties lastFails. Ready probes never count.
|
|
14
|
+
*/
|
|
15
|
+
export declare function recordUse(id: string, use: LedgerUse, env?: NodeJS.ProcessEnv): SkillState | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* The person corrected a use within 2 prompts (3.2 step 5): one ledger `corrected` line per use, and when the use
|
|
18
|
+
* right before or after it in the ledger was corrected too, needs-fix (spec 13: two uses in a row corrected).
|
|
19
|
+
* The ledger is read and the line written under the state lock, so two hooks correcting neighbouring uses at once
|
|
20
|
+
* each see the other's line. undefined when the skill has no state or no such use, or the ledger can't be written.
|
|
21
|
+
*/
|
|
22
|
+
export declare function recordCorrected(id: string, useId: string, env?: NodeJS.ProcessEnv, now?: Date): SkillState | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* A needs-fix skill whose SKILL.md changed by hand after it was marked (its hash is not the one kept at the mark,
|
|
25
|
+
* `fixHash`, D65; the hash Trail wrote when no mark hash was kept) was fixed: it goes back to what it was (4.8;
|
|
26
|
+
* candidate when that is unknown), with its failures forgotten. An edit made before the failures is not a fix, so
|
|
27
|
+
* it can't bring the skill back read after read. `hash` stays the one Trail wrote (spec 6: hand edits are phase 2's
|
|
28
|
+
* to propose a diff for). Any other status is left alone.
|
|
29
|
+
*/
|
|
30
|
+
export declare function handEdited(id: string, fileHash: string, env?: NodeJS.ProcessEnv, now?: Date): SkillState | undefined;
|
|
31
|
+
/** The skill used most recently in any of repoKeys, with when (for the check cue). A retired skill never answers. */
|
|
32
|
+
export declare function lastUsedIn(repoKeys: string[], env?: NodeJS.ProcessEnv): {
|
|
33
|
+
id: string;
|
|
34
|
+
at: string;
|
|
35
|
+
} | null;
|
|
36
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/skills/state.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAe,eAAe,EAAE,MAAM,YAAY,CAAC;AAgBtF,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAE/D;AA8CD,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,eAAe,CAExE;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,UAAU,GAAG,IAAI,CAEpF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,KAAK,UAAU,GAAG,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,UAAU,GAAG,SAAS,CAiBvJ;AA4CD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,UAAU,GAAG,SAAS,CAqBrG;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG,UAAU,GAAG,SAAS,CA0BlI;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG,UAAU,GAAG,SAAS,CAgBhI;AAED,qHAAqH;AACrH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQzG"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `~/.trail/state/skills.json` (design 2.2, spec 6): what changes often
|
|
3
|
+
* about each skill, per person, keyed by the skill id, for every scope:
|
|
4
|
+
* status, where it came from, uses and checked uses, when it last worked,
|
|
5
|
+
* the hash of the file as Trail last wrote it, and the failed step of the
|
|
6
|
+
* last two uses. The SKILL.md holds only what describes the skill.
|
|
7
|
+
*
|
|
8
|
+
* Status moves (4.8, spec 13): a candidate becomes active on its first use
|
|
9
|
+
* whose check passed; two uses in a row that failed at the same step, or
|
|
10
|
+
* that the person corrected, make it needs-fix (never injected; the index
|
|
11
|
+
* says why), and it goes back to what it was when its SKILL.md is changed by
|
|
12
|
+
* hand. A failed ready probe never counts against it. Every move is a ledger
|
|
13
|
+
* `status` line, written after the state file.
|
|
14
|
+
*
|
|
15
|
+
* Every write is a locked read-modify-write; a lock that can't be had in
|
|
16
|
+
* time changes nothing. Keys a later version adds are kept.
|
|
17
|
+
*/
|
|
18
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
19
|
+
import { readJsonSafe, trailPath, withLock, writePrivate } from '../util/private-fs.js';
|
|
20
|
+
import { appendLedger, readLedger } from './ledger.js';
|
|
21
|
+
import { localDate } from './settings.js';
|
|
22
|
+
import { parseSkillMd, skillHash } from './skillmd.js';
|
|
23
|
+
import { isLinked } from './own-folder.js';
|
|
24
|
+
import { dirname } from 'node:path';
|
|
25
|
+
const STATUSES = new Set(['candidate', 'active', 'needs-fix', 'retired']);
|
|
26
|
+
const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
27
|
+
/** 'Nov 2', in local time. */
|
|
28
|
+
const monthDay = (iso) => {
|
|
29
|
+
const d = new Date(iso);
|
|
30
|
+
return Number.isNaN(d.getTime()) ? 'an earlier day' : `${MONTHS[d.getMonth()]} ${d.getDate()}`;
|
|
31
|
+
};
|
|
32
|
+
export function skillsStatePath(env) {
|
|
33
|
+
return trailPath(env, 'state', 'skills.json');
|
|
34
|
+
}
|
|
35
|
+
const isMap = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
36
|
+
const strOr = (v, d) => (typeof v === 'string' ? v : d);
|
|
37
|
+
const num = (v) => (typeof v === 'number' && Number.isFinite(v) && v >= 0 ? Math.floor(v) : 0);
|
|
38
|
+
/** An entry as read: null when it isn't one; missing newer fields get their defaults; unknown keys stay. */
|
|
39
|
+
function entryOf(v) {
|
|
40
|
+
if (!isMap(v) || typeof v.name !== 'string' || !STATUSES.has(v.status))
|
|
41
|
+
return null;
|
|
42
|
+
const src = isMap(v.source) && typeof v.source.at === 'string' ? { commands: num(v.source.commands), failed: num(v.source.failed), at: v.source.at } : null;
|
|
43
|
+
const fails = Array.isArray(v.lastFails)
|
|
44
|
+
? v.lastFails.filter((f) => isMap(f) && typeof f.step === 'number' && typeof f.at === 'string').slice(-2)
|
|
45
|
+
: [];
|
|
46
|
+
const { fixHash, ...rest } = v;
|
|
47
|
+
return {
|
|
48
|
+
...rest,
|
|
49
|
+
...(typeof fixHash === 'string' ? { fixHash } : {}),
|
|
50
|
+
name: v.name,
|
|
51
|
+
scope: v.scope === 'repo' || v.scope === 'team' ? v.scope : 'personal',
|
|
52
|
+
status: v.status,
|
|
53
|
+
from: v.from === 'init' || v.from === 'repeated' || v.from === 'repaired' ? v.from : 'asked',
|
|
54
|
+
runId: strOr(v.runId, null),
|
|
55
|
+
addedAt: strOr(v.addedAt, ''),
|
|
56
|
+
lastWorked: strOr(v.lastWorked, null),
|
|
57
|
+
lastUsedAt: strOr(v.lastUsedAt, null),
|
|
58
|
+
lastUsedRepo: strOr(v.lastUsedRepo, null),
|
|
59
|
+
uses: num(v.uses),
|
|
60
|
+
checkedUses: num(v.checkedUses),
|
|
61
|
+
hash: strOr(v.hash, ''),
|
|
62
|
+
source: src,
|
|
63
|
+
lastFails: fails.map((f) => ({ step: f.step, at: f.at })),
|
|
64
|
+
promoteOffers: isMap(v.promoteOffers) ? v.promoteOffers : {},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function fileOf(raw) {
|
|
68
|
+
const skills = {};
|
|
69
|
+
if (isMap(raw) && isMap(raw.skills)) {
|
|
70
|
+
for (const [id, v] of Object.entries(raw.skills)) {
|
|
71
|
+
const e = entryOf(v);
|
|
72
|
+
if (e)
|
|
73
|
+
skills[id] = e;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return { v: 1, skills };
|
|
77
|
+
}
|
|
78
|
+
export function readSkillsState(env) {
|
|
79
|
+
return fileOf(readJsonSafe(skillsStatePath(env)));
|
|
80
|
+
}
|
|
81
|
+
export function getSkillState(id, env) {
|
|
82
|
+
return readSkillsState(env).skills[id] ?? null;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Locked read-modify-write of one entry. Return undefined from fn to delete. undefined also when the lock timed out,
|
|
86
|
+
* or when the state folder is a link (never written through, own-folder.ts): nothing changed either way.
|
|
87
|
+
*/
|
|
88
|
+
export function updateSkillState(id, fn, env) {
|
|
89
|
+
const path = skillsStatePath(env);
|
|
90
|
+
if (isLinked(dirname(path)))
|
|
91
|
+
return undefined;
|
|
92
|
+
const done = withLock(path, () => {
|
|
93
|
+
const raw = readJsonSafe(path);
|
|
94
|
+
const keep = isMap(raw) ? raw : {};
|
|
95
|
+
const file = fileOf(raw);
|
|
96
|
+
const had = file.skills[id];
|
|
97
|
+
const next = fn(had === undefined ? undefined : structuredClone(had));
|
|
98
|
+
if (next === undefined) {
|
|
99
|
+
if (had === undefined)
|
|
100
|
+
return undefined;
|
|
101
|
+
delete file.skills[id];
|
|
102
|
+
}
|
|
103
|
+
else
|
|
104
|
+
file.skills[id] = next;
|
|
105
|
+
writePrivate(path, `${JSON.stringify({ ...keep, v: 1, skills: file.skills }, null, 2)}\n`);
|
|
106
|
+
return next;
|
|
107
|
+
});
|
|
108
|
+
return done.ok ? done.value : undefined;
|
|
109
|
+
}
|
|
110
|
+
/** updateSkillState, then the ledger status lines fn collected, only once the state is written. */
|
|
111
|
+
function change(id, env, fn) {
|
|
112
|
+
const moves = [];
|
|
113
|
+
const next = updateSkillState(id, (s) => (s ? fn(s, moves) : undefined), env);
|
|
114
|
+
if (next)
|
|
115
|
+
for (const m of moves) {
|
|
116
|
+
try {
|
|
117
|
+
appendLedger(id, { event: 'status', skill: id, ...m }, env);
|
|
118
|
+
}
|
|
119
|
+
catch { /* the state is the truth; the ledger is its record */ }
|
|
120
|
+
}
|
|
121
|
+
return next;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* The hash of the personal skill's SKILL.md as it is now (`skills/<name>/SKILL.md`, a regular file of at most
|
|
125
|
+
* 64 KB that is still this skill's), or undefined. D65: kept when the skill is marked needs-fix, so a hand edit
|
|
126
|
+
* made before the failures is not taken for a fix.
|
|
127
|
+
*/
|
|
128
|
+
function fileHashOf(id, name, env) {
|
|
129
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/.test(name) || name.includes('..'))
|
|
130
|
+
return undefined; // one folder name only
|
|
131
|
+
try {
|
|
132
|
+
const file = trailPath(env, 'skills', name, 'SKILL.md');
|
|
133
|
+
const st = statSync(file);
|
|
134
|
+
if (!st.isFile() || st.size > 64 * 1024)
|
|
135
|
+
return undefined;
|
|
136
|
+
const text = readFileSync(file, 'utf8');
|
|
137
|
+
return parseSkillMd(text, name)?.meta.trail === id ? skillHash(text) : undefined;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** To needs-fix from candidate or active, keeping what it was and the file's hash right now. */
|
|
144
|
+
function markNeedsFix(id, s, why, at, moves, env) {
|
|
145
|
+
if (s.status !== 'candidate' && s.status !== 'active')
|
|
146
|
+
return;
|
|
147
|
+
moves.push({ at, from: s.status, to: 'needs-fix', reason: 'failed-twice' });
|
|
148
|
+
s.prevStatus = s.status;
|
|
149
|
+
s.status = 'needs-fix';
|
|
150
|
+
s.statusWhy = why;
|
|
151
|
+
const now = fileHashOf(id, s.name, env);
|
|
152
|
+
if (now)
|
|
153
|
+
s.fixHash = now;
|
|
154
|
+
else
|
|
155
|
+
delete s.fixHash;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 4.8, after the caller wrote the ledger `use` line: uses, lastUsedAt/Repo; a passed check counts as a checked use,
|
|
159
|
+
* sets lastWorked (local date) and makes a candidate active; the failed step joins lastFails (the last two), and two
|
|
160
|
+
* at the same step make it needs-fix; a use with no failed step empties lastFails. Ready probes never count.
|
|
161
|
+
*/
|
|
162
|
+
export function recordUse(id, use, env) {
|
|
163
|
+
return change(id, env, (s, moves) => {
|
|
164
|
+
s.uses += 1;
|
|
165
|
+
s.lastUsedAt = use.at;
|
|
166
|
+
s.lastUsedRepo = use.repo;
|
|
167
|
+
if (use.check === 'passed') {
|
|
168
|
+
s.checkedUses += 1;
|
|
169
|
+
s.lastWorked = localDate(use.at);
|
|
170
|
+
if (s.status === 'candidate') {
|
|
171
|
+
moves.push({ at: use.at, from: 'candidate', to: 'active', reason: 'checked-use' });
|
|
172
|
+
s.status = 'active';
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (use.failedStep === null)
|
|
176
|
+
s.lastFails = [];
|
|
177
|
+
else {
|
|
178
|
+
s.lastFails = [...s.lastFails, { step: use.failedStep, at: use.at }].slice(-2);
|
|
179
|
+
const [a, b] = s.lastFails;
|
|
180
|
+
if (a && b && a.step === b.step)
|
|
181
|
+
markNeedsFix(id, s, `step ${b.step} failed on ${monthDay(a.at)} and ${monthDay(b.at)}`, use.at, moves, env);
|
|
182
|
+
}
|
|
183
|
+
return s;
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* The person corrected a use within 2 prompts (3.2 step 5): one ledger `corrected` line per use, and when the use
|
|
188
|
+
* right before or after it in the ledger was corrected too, needs-fix (spec 13: two uses in a row corrected).
|
|
189
|
+
* The ledger is read and the line written under the state lock, so two hooks correcting neighbouring uses at once
|
|
190
|
+
* each see the other's line. undefined when the skill has no state or no such use, or the ledger can't be written.
|
|
191
|
+
*/
|
|
192
|
+
export function recordCorrected(id, useId, env, now = new Date()) {
|
|
193
|
+
const at = now.toISOString();
|
|
194
|
+
let found = false;
|
|
195
|
+
const next = change(id, env, (s, moves) => {
|
|
196
|
+
const lines = readLedger(id, env);
|
|
197
|
+
const uses = lines.filter((l) => l.event === 'use');
|
|
198
|
+
const i = uses.findIndex((u) => u.useId === useId);
|
|
199
|
+
if (i < 0)
|
|
200
|
+
return s;
|
|
201
|
+
const corrected = new Set(lines.flatMap((l) => (l.event === 'corrected' ? [l.useId] : [])));
|
|
202
|
+
if (!corrected.has(useId)) {
|
|
203
|
+
try {
|
|
204
|
+
appendLedger(id, { at, event: 'corrected', skill: id, useId }, env);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return s;
|
|
208
|
+
}
|
|
209
|
+
corrected.add(useId);
|
|
210
|
+
}
|
|
211
|
+
found = true;
|
|
212
|
+
const pair = [uses[i - 1], uses[i + 1]].find((u) => u && corrected.has(u.useId));
|
|
213
|
+
if (pair) {
|
|
214
|
+
const [a, b] = Date.parse(pair.at) < Date.parse(uses[i].at) ? [pair, uses[i]] : [uses[i], pair];
|
|
215
|
+
markNeedsFix(id, s, `corrected after its use on ${monthDay(a.at)} and ${monthDay(b.at)}`, at, moves, env);
|
|
216
|
+
}
|
|
217
|
+
return s;
|
|
218
|
+
});
|
|
219
|
+
return found ? next : undefined;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* A needs-fix skill whose SKILL.md changed by hand after it was marked (its hash is not the one kept at the mark,
|
|
223
|
+
* `fixHash`, D65; the hash Trail wrote when no mark hash was kept) was fixed: it goes back to what it was (4.8;
|
|
224
|
+
* candidate when that is unknown), with its failures forgotten. An edit made before the failures is not a fix, so
|
|
225
|
+
* it can't bring the skill back read after read. `hash` stays the one Trail wrote (spec 6: hand edits are phase 2's
|
|
226
|
+
* to propose a diff for). Any other status is left alone.
|
|
227
|
+
*/
|
|
228
|
+
export function handEdited(id, fileHash, env, now = new Date()) {
|
|
229
|
+
// Checked before the lock (most reads change nothing) and again under it.
|
|
230
|
+
const edited = (e) => e.status === 'needs-fix' && fileHash !== (e.fixHash ?? e.hash);
|
|
231
|
+
const s = getSkillState(id, env);
|
|
232
|
+
if (!s || !edited(s))
|
|
233
|
+
return s ?? undefined;
|
|
234
|
+
return change(id, env, (e, moves) => {
|
|
235
|
+
if (!edited(e))
|
|
236
|
+
return e;
|
|
237
|
+
const back = e.prevStatus && e.prevStatus !== 'needs-fix' && e.prevStatus !== 'retired' ? e.prevStatus : 'candidate';
|
|
238
|
+
moves.push({ at: now.toISOString(), from: 'needs-fix', to: back, reason: 'restore' });
|
|
239
|
+
e.status = back;
|
|
240
|
+
e.lastFails = [];
|
|
241
|
+
delete e.statusWhy;
|
|
242
|
+
delete e.prevStatus;
|
|
243
|
+
delete e.fixHash;
|
|
244
|
+
return e;
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
/** The skill used most recently in any of repoKeys, with when (for the check cue). A retired skill never answers. */
|
|
248
|
+
export function lastUsedIn(repoKeys, env) {
|
|
249
|
+
const keys = new Set(repoKeys.map((k) => k.toLowerCase()));
|
|
250
|
+
let best = null;
|
|
251
|
+
for (const [id, s] of Object.entries(readSkillsState(env).skills)) {
|
|
252
|
+
if (s.status === 'retired' || !s.lastUsedAt || !s.lastUsedRepo || !keys.has(s.lastUsedRepo.toLowerCase()))
|
|
253
|
+
continue;
|
|
254
|
+
if (!best || Date.parse(s.lastUsedAt) > Date.parse(best.at))
|
|
255
|
+
best = { id, at: s.lastUsedAt };
|
|
256
|
+
}
|
|
257
|
+
return best;
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/skills/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|