@nanonets/graft 0.24.0 → 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/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/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/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/cli-picker.d.ts +24 -0
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +36 -5
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +278 -29
- 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/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 +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/cold-start.d.ts +30 -1
- package/dist/notes/cold-start.d.ts.map +1 -1
- package/dist/notes/cold-start.js +98 -19
- package/dist/notes/cold-start.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/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/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/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/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/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 +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/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/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/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/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,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A skill's ledger (`~/.trail/ledger/<skill-id>.jsonl`, design 2.6): one line
|
|
3
|
+
* per event (saved, used, corrected, status changed), kept for good. It holds
|
|
4
|
+
* counts and labels only: which steps ran, which failed, whether the check
|
|
5
|
+
* passed, how many commands, the forms of the ready probes that failed; never
|
|
6
|
+
* a command, a probe's text, a prompt or an output. Each
|
|
7
|
+
* event's known fields are all that is ever written, so a caller that hands
|
|
8
|
+
* over more can't leak it.
|
|
9
|
+
*
|
|
10
|
+
* And credit (4.8): from the commands that ran after a run block came in,
|
|
11
|
+
* which of the skill's steps ran and worked, the step that failed, and
|
|
12
|
+
* whether its check passed. Pure: the calls come from the session state, or,
|
|
13
|
+
* for a run whose calls the session no longer holds (closed, its sheet
|
|
14
|
+
* written: D57), from its run sheet (`creditCalls`).
|
|
15
|
+
*/
|
|
16
|
+
import { randomBytes } from 'node:crypto';
|
|
17
|
+
import { readFileSync } from 'node:fs';
|
|
18
|
+
import { appendPrivateLine, trailPath } from '../util/private-fs.js';
|
|
19
|
+
import { flatLine } from '../notes/flatten.js';
|
|
20
|
+
import { stepMatches } from '../trace/shell.js';
|
|
21
|
+
import { callText, hasVersion, HEAD_SHA } from '../trace/checks.js';
|
|
22
|
+
import { readRunSheet } from '../trace/run-sheets.js';
|
|
23
|
+
import { joinCarriedSheet } from '../trace/run-join.js';
|
|
24
|
+
import { ownFolder } from './own-folder.js';
|
|
25
|
+
import { doesLess } from './ran-less.js';
|
|
26
|
+
import { dirname } from 'node:path';
|
|
27
|
+
/** A skill id as a file name: what Trail writes is 's-' and 6 hex; a hand-edited SKILL.md can say anything. */
|
|
28
|
+
const SKILL_ID = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;
|
|
29
|
+
/** A call at most this long before a block's `at` belongs to it (the fold's own slack for the typed line, 4.1). */
|
|
30
|
+
const SLACK_MS = 5000;
|
|
31
|
+
/** A deploy status read over MCP (D59b, `RunCall.tool`): no command, never a step, not a Bash call. */
|
|
32
|
+
const isToolCall = (c) => typeof c.tool === 'string';
|
|
33
|
+
export function ledgerPath(skillId, env) {
|
|
34
|
+
if (!SKILL_ID.test(String(skillId)))
|
|
35
|
+
throw new Error(`trail: not a skill id: ${flatLine(skillId, 40)}`);
|
|
36
|
+
return trailPath(env, 'ledger', `${skillId}.jsonl`);
|
|
37
|
+
}
|
|
38
|
+
const str = (v, max) => flatLine(v, max);
|
|
39
|
+
const count = (v) => (typeof v === 'number' && Number.isInteger(v) && v >= 0 ? v : 0);
|
|
40
|
+
const steps = (v) => (Array.isArray(v) ? v.filter((x) => typeof x === 'number' && Number.isInteger(x) && x > 0).slice(0, 50) : []);
|
|
41
|
+
const oneOf = (v, values, fallback) => (values.includes(v) ? v : fallback);
|
|
42
|
+
/** The forms a ready probe takes (4.5 step 11). The ledger keeps the form, never the probe's text. */
|
|
43
|
+
export const PROBE_FORMS = ['clean', 'on-branch', 'program', 'path', 'ref', 'other'];
|
|
44
|
+
/** A ready probe's form: `git status --porcelain` is clean, `... = <branch>` on-branch, and so on. A form stays itself. */
|
|
45
|
+
export function probeForm(probe) {
|
|
46
|
+
const p = String(probe ?? '').trim();
|
|
47
|
+
if (PROBE_FORMS.includes(p))
|
|
48
|
+
return p;
|
|
49
|
+
if (/^git status --porcelain$/.test(p))
|
|
50
|
+
return 'clean';
|
|
51
|
+
if (/^git rev-parse --abbrev-ref HEAD = \S+$/.test(p))
|
|
52
|
+
return 'on-branch';
|
|
53
|
+
if (/^command -v \S+$/.test(p))
|
|
54
|
+
return 'program';
|
|
55
|
+
if (/^(?:test -[SfdeE] \S+|\[ -S \S+ \])$/.test(p))
|
|
56
|
+
return 'path';
|
|
57
|
+
if (/^git rev-parse --verify \S+$/.test(p))
|
|
58
|
+
return 'ref';
|
|
59
|
+
return 'other';
|
|
60
|
+
}
|
|
61
|
+
const forms = (v) => [...new Set((Array.isArray(v) ? v : []).filter((x) => typeof x === 'string').map(probeForm))];
|
|
62
|
+
const LESSON_ID = /^(?:ls-[0-9a-f]{6}|l-[0-9a-f]{6,16})$/;
|
|
63
|
+
/**
|
|
64
|
+
* Phase 2 (2.3, 4.1): a use line's fidelity facts, only when the caller gave them, so a 1b use line is written byte
|
|
65
|
+
* for byte as before. Counts, 8-hex shas (at most 4) and step numbers (at most 4); never a command.
|
|
66
|
+
*/
|
|
67
|
+
function useFacts(r) {
|
|
68
|
+
const out = {};
|
|
69
|
+
if (r.fid && typeof r.fid === 'object' && !Array.isArray(r.fid)) {
|
|
70
|
+
const f = r.fid;
|
|
71
|
+
out.fid = { ran: count(f.ran), missing: count(f.missing), extra: count(f.extra), changed: count(f.changed) };
|
|
72
|
+
}
|
|
73
|
+
if (Array.isArray(r.extraShas))
|
|
74
|
+
out.extraShas = r.extraShas.filter((x) => typeof x === 'string' && /^[0-9a-f]{8}$/.test(x)).slice(0, 4);
|
|
75
|
+
if (Array.isArray(r.changedSteps))
|
|
76
|
+
out.changedSteps = steps(r.changedSteps).slice(0, 4);
|
|
77
|
+
if (Array.isArray(r.handed))
|
|
78
|
+
out.handed = steps(r.handed).slice(0, 8);
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
/** The line as 2.6 writes it: its event's fields, in order, and nothing else. Throws on an unknown event. */
|
|
82
|
+
function shape(skillId, l) {
|
|
83
|
+
const r = l;
|
|
84
|
+
const at = str(r.at, 40);
|
|
85
|
+
switch (r.event) {
|
|
86
|
+
case 'saved': {
|
|
87
|
+
const rc = (r.receipt && typeof r.receipt === 'object' ? r.receipt : {});
|
|
88
|
+
return {
|
|
89
|
+
at, event: 'saved', skill: skillId, v: str(r.v, 10), from: oneOf(r.from, ['init', 'repeated', 'repaired', 'asked'], 'asked'),
|
|
90
|
+
scope: oneOf(r.scope, ['personal', 'repo', 'team'], 'personal'),
|
|
91
|
+
receipt: { consent: oneOf(rc.consent, ['offer-yes', 'asked', 'init'], 'asked'), stepsVerified: count(rc.stepsVerified), stepsTotal: count(rc.stepsTotal) },
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
case 'use':
|
|
95
|
+
return {
|
|
96
|
+
at, event: 'use', useId: str(r.useId, 20), skill: skillId, v: str(r.v, 10), host: str(r.host, 20),
|
|
97
|
+
cue: oneOf(r.cue, ['job', 'name', 'compact', 'run'], 'job'), repo: str(r.repo, 200), stepsRan: steps(r.stepsRan),
|
|
98
|
+
failedStep: typeof r.failedStep === 'number' && Number.isInteger(r.failedStep) && r.failedStep > 0 ? r.failedStep : null,
|
|
99
|
+
readyFailed: forms(r.readyFailed),
|
|
100
|
+
check: oneOf(r.check, ['passed', 'failed', 'none'], 'none'), calls: count(r.calls), failed: count(r.failed),
|
|
101
|
+
...useFacts(r),
|
|
102
|
+
};
|
|
103
|
+
// Phase 2 (2.3): a change to the file Trail wrote.
|
|
104
|
+
case 'changed':
|
|
105
|
+
return {
|
|
106
|
+
at, event: 'changed', skill: skillId, op: oneOf(r.op, ['update', 'extend', 'replace', 'adopted', 'restore-version'], 'update'),
|
|
107
|
+
from: count(r.from), to: count(r.to), offerId: typeof r.offerId === 'string' && /^o-[0-9a-f]{6}$/.test(r.offerId) ? r.offerId : null,
|
|
108
|
+
...(Array.isArray(r.lessonIds) ? { lessonIds: r.lessonIds.filter((x) => typeof x === 'string' && LESSON_ID.test(x)).slice(0, 10) } : {}),
|
|
109
|
+
};
|
|
110
|
+
case 'corrected':
|
|
111
|
+
return { at, event: 'corrected', skill: skillId, useId: str(r.useId, 20) };
|
|
112
|
+
case 'status': {
|
|
113
|
+
const statuses = ['candidate', 'active', 'needs-fix', 'retired'];
|
|
114
|
+
return {
|
|
115
|
+
at, event: 'status', skill: skillId, from: oneOf(r.from, statuses, 'candidate'), to: oneOf(r.to, statuses, 'candidate'),
|
|
116
|
+
reason: oneOf(r.reason, ['checked-use', 'failed-twice', 'forget', 'restore', 'retire-offer'], 'restore'),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// 1b: a lesson kept on the skill, and an asks phrase dropped (by its sha only, never the phrase: R30).
|
|
120
|
+
case 'lesson':
|
|
121
|
+
return {
|
|
122
|
+
at, event: 'lesson', skill: skillId, lessonId: LESSON_ID.test(String(r.lessonId)) ? r.lessonId : '',
|
|
123
|
+
src: oneOf(r.src, ['correction', 'repair'], 'correction'), consent: 'offer-yes',
|
|
124
|
+
};
|
|
125
|
+
case 'cue':
|
|
126
|
+
return { at, event: 'cue', skill: skillId, phraseSha: /^[0-9a-f]{8}$/.test(String(r.phraseSha)) ? r.phraseSha : '', change: 'dropped' };
|
|
127
|
+
default:
|
|
128
|
+
throw new Error(`trail: not a ledger event: ${flatLine(r.event, 20)}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** One line, O_APPEND. Throws on a ledger folder that is a link (own-folder.ts) or a ledger file that is one. */
|
|
132
|
+
export function appendLedger(skillId, line, env) {
|
|
133
|
+
const path = ledgerPath(skillId, env);
|
|
134
|
+
ownFolder(dirname(path));
|
|
135
|
+
appendPrivateLine(path, JSON.stringify(shape(skillId, line)));
|
|
136
|
+
}
|
|
137
|
+
const EVENTS = new Set(['saved', 'use', 'corrected', 'status', 'lesson', 'cue', 'changed']);
|
|
138
|
+
/** Every line, oldest first; a broken line, or one that isn't a ledger event, is skipped. [] for an unknown or bad id. */
|
|
139
|
+
export function readLedger(skillId, env) {
|
|
140
|
+
let text;
|
|
141
|
+
try {
|
|
142
|
+
text = readFileSync(ledgerPath(skillId, env), 'utf8');
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
const out = [];
|
|
148
|
+
for (const raw of text.split('\n')) {
|
|
149
|
+
if (!raw.trim())
|
|
150
|
+
continue;
|
|
151
|
+
try {
|
|
152
|
+
const v = JSON.parse(raw);
|
|
153
|
+
if (v && typeof v === 'object' && !Array.isArray(v) && EVENTS.has(v.event) && typeof v.skill === 'string' && typeof v.at === 'string')
|
|
154
|
+
out.push(v);
|
|
155
|
+
}
|
|
156
|
+
catch { /* a torn or hand-mangled line */ }
|
|
157
|
+
}
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
/** A tool's own name, as `metadata.check-tool` keeps it: `mcp__claude_ai_Vercel__get_deployment` -> `get_deployment`. */
|
|
161
|
+
const toolName = (name) => name.replace(/^mcp__.+__(?=[^_])/, '');
|
|
162
|
+
/** The commit a skill's block is about, when it is one (`{sha}` filled with a hash). */
|
|
163
|
+
const blockSha = (inj) => (/^[0-9a-f]{7,40}$/i.test(inj.params.sha ?? '') ? inj.params.sha.toLowerCase() : null);
|
|
164
|
+
const sameCommit = (a, b) => a.startsWith(b) || b.startsWith(a);
|
|
165
|
+
const HEAD_ALL = new RegExp(HEAD_SHA, 'g');
|
|
166
|
+
const hasHead = (t) => new RegExp(HEAD_SHA).test(t);
|
|
167
|
+
/** A written-out commit: 7 to 40 hex with a digit and a letter (promptParams' rule), not part of a longer word. */
|
|
168
|
+
const LITERAL_SHA = /(?<![\w-])(?=[0-9a-f]*\d)(?=[0-9a-f]*[a-f])[0-9a-f]{7,40}(?![\w-])/g;
|
|
169
|
+
const shasIn = (t) => [...new Set(t.match(LITERAL_SHA) ?? [])].slice(0, 6);
|
|
170
|
+
/**
|
|
171
|
+
* D71 c: a skill's step or check matches a call that ran it, its commit written either way: the skill's
|
|
172
|
+
* `$(git rev-parse HEAD)` (the `{sha}` default) where the run wrote the commit out, the commit the block named
|
|
173
|
+
* where the run worked it out with `$(git rev-parse HEAD)`, and a short sha where the run wrote the full one.
|
|
174
|
+
* Another commit is never a match.
|
|
175
|
+
*/
|
|
176
|
+
export function ranAs(step, ran, params) {
|
|
177
|
+
// D138 (2): a call that made the step do less (a dry run, a --no- flag, a hidden failure) is not the step.
|
|
178
|
+
if (doesLess(step, ran))
|
|
179
|
+
return false;
|
|
180
|
+
if (stepMatches(step, ran, params, true))
|
|
181
|
+
return true;
|
|
182
|
+
const ranShas = shasIn(ran);
|
|
183
|
+
if (hasHead(step)) {
|
|
184
|
+
for (const sha of ranShas)
|
|
185
|
+
if (stepMatches(step.replace(HEAD_ALL, sha), ran, params, true))
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
const stepShas = shasIn(step);
|
|
189
|
+
if (hasHead(ran)) {
|
|
190
|
+
for (const sha of stepShas)
|
|
191
|
+
if (stepMatches(step, ran.replace(HEAD_ALL, sha), params, true))
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
for (const s of stepShas) {
|
|
195
|
+
for (const r of ranShas)
|
|
196
|
+
if (r !== s && sameCommit(s, r) && stepMatches(step.split(s).join(r), ran, params, true))
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* D66: a deploy status read over MCP is the check of a skill whose check is that tool (`checkTool`, from
|
|
203
|
+
* `metadata.check-tool`), when it read the block's commit (or says no commit). Null when it is not the check.
|
|
204
|
+
*/
|
|
205
|
+
function toolCheck(inj, c) {
|
|
206
|
+
if (!inj.checkTool || !c.tool || toolName(c.tool) !== toolName(inj.checkTool))
|
|
207
|
+
return null;
|
|
208
|
+
const sha = blockSha(inj);
|
|
209
|
+
const read = c.check?.facts.sha?.toLowerCase();
|
|
210
|
+
if (sha && read && !sameCommit(sha, read))
|
|
211
|
+
return null;
|
|
212
|
+
return c.check?.passed === true;
|
|
213
|
+
}
|
|
214
|
+
/** The end of the `$(…)` that opens at `open` (the index after `$(`), quotes respected; -1 when it never closes. */
|
|
215
|
+
function closeParen(text, open) {
|
|
216
|
+
let depth = 1;
|
|
217
|
+
let quote = null;
|
|
218
|
+
for (let i = open; i < text.length; i++) {
|
|
219
|
+
const ch = text[i];
|
|
220
|
+
if (quote) {
|
|
221
|
+
if (ch === quote)
|
|
222
|
+
quote = null;
|
|
223
|
+
else if (ch === '\\' && quote === '"')
|
|
224
|
+
i++;
|
|
225
|
+
}
|
|
226
|
+
else if (ch === "'" || ch === '"')
|
|
227
|
+
quote = ch;
|
|
228
|
+
else if (ch === '\\')
|
|
229
|
+
i++;
|
|
230
|
+
else if (ch === '(')
|
|
231
|
+
depth++;
|
|
232
|
+
else if (ch === ')' && --depth === 0)
|
|
233
|
+
return i;
|
|
234
|
+
}
|
|
235
|
+
return -1;
|
|
236
|
+
}
|
|
237
|
+
const LOOP = /(?:^|[\s;&|(])(?:until|while|for)\s[\s\S]*\bdo\b[\s\S]*\bdone\b/;
|
|
238
|
+
/**
|
|
239
|
+
* D65 / D59c: the check run inside a wait loop, as a `$(CHECK)` the loop compares (the skill's own wait step,
|
|
240
|
+
* `until [ "$(CHECK)" = "success" ]`) or as the loop's condition (`until CHECK >/dev/null`, `while ! CHECK`).
|
|
241
|
+
* Only a call the fold read as a check (`c.check`) is judged this way: its CheckHit is the loop's last reading.
|
|
242
|
+
*/
|
|
243
|
+
function checkInLoop(check, text, params) {
|
|
244
|
+
if (!LOOP.test(text))
|
|
245
|
+
return false;
|
|
246
|
+
const inner = [];
|
|
247
|
+
for (const m of text.matchAll(/\$\(/g)) {
|
|
248
|
+
const from = m.index + 2;
|
|
249
|
+
const to = closeParen(text, from);
|
|
250
|
+
if (to > from)
|
|
251
|
+
inner.push(text.slice(from, to));
|
|
252
|
+
}
|
|
253
|
+
for (const m of text.matchAll(/(?:^|[\s;&|(])(?:until|while)\s+(?:!\s+)?(?!\[)([^;]+);\s*do\b/g))
|
|
254
|
+
inner.push(m[1]);
|
|
255
|
+
return inner.some((t) => ranAs(check, t.trim(), params));
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Credit from commands that ran (4.8). Pure. The calls are the injection's run's (`creditCalls`); only those at or
|
|
259
|
+
* after `inj.at` (less 5 s, the fold's slack) count. Each call goes to the first step it matches (params filled,
|
|
260
|
+
* env prefixes ignored); a step's last outcome wins, so a failed try then a pass ran. `calls` and `failed` count Bash
|
|
261
|
+
* calls only: an MCP deploy read (`tool`) is never a step. A check-cue injection earns nothing.
|
|
262
|
+
*
|
|
263
|
+
* The check (D65): a call matching `inj.check` at a command start, the check run inside a wait loop, or for a
|
|
264
|
+
* check-tool skill (D66) that tool's result. It is the run's check only once a step has run ok before it (or the
|
|
265
|
+
* call is itself a step, as a tests check is): a check that passed before the steps ran proves nothing about them.
|
|
266
|
+
* Any passing reading makes it `passed`; a reading that never passed, `failed`. A reading is the fold's, except for a
|
|
267
|
+
* version check (D106, `checkVersion`): it passes when the call worked and showed that version.
|
|
268
|
+
*/
|
|
269
|
+
export function creditRun(inj, calls) {
|
|
270
|
+
if (inj.cue === 'check')
|
|
271
|
+
return { stepsRan: [], failedStep: null, check: 'none', calls: 0, failed: 0 };
|
|
272
|
+
const from = Date.parse(inj.at);
|
|
273
|
+
const span = calls.filter((c) => Number.isNaN(from) || Date.parse(c.at) >= from - SLACK_MS);
|
|
274
|
+
const bash = span.filter((c) => !isToolCall(c));
|
|
275
|
+
const last = new Map();
|
|
276
|
+
let check = 'none';
|
|
277
|
+
let stepRan = false;
|
|
278
|
+
// D137: a gated step handed to the person (denied here, theirs to run) counts as ran, its denied call no failure.
|
|
279
|
+
const handed = new Set((inj.handed ?? []).map((h) => h.n).filter((n) => Number.isInteger(n) && n >= 1 && n <= inj.steps.length));
|
|
280
|
+
const reading = (passed) => {
|
|
281
|
+
if (check !== 'passed')
|
|
282
|
+
check = passed ? 'passed' : 'failed';
|
|
283
|
+
};
|
|
284
|
+
// D106: a version check passes when it shows the version the block filled in, not on what the fold could tell.
|
|
285
|
+
const want = inj.checkVersion;
|
|
286
|
+
const passes = (c) => (want ? !c.failed && (hasVersion(c.tail ?? '', want) || c.check?.facts.version === want) : c.check?.passed === true);
|
|
287
|
+
for (const c of span) {
|
|
288
|
+
if (isToolCall(c)) {
|
|
289
|
+
const hit = stepRan ? toolCheck(inj, c) : null;
|
|
290
|
+
if (hit !== null)
|
|
291
|
+
reading(hit);
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
const text = callText(c);
|
|
295
|
+
if (!text)
|
|
296
|
+
continue;
|
|
297
|
+
const i = inj.steps.findIndex((s) => ranAs(s, text, inj.params));
|
|
298
|
+
const ok = !c.failed || handed.has(i + 1);
|
|
299
|
+
if (i >= 0)
|
|
300
|
+
last.set(i + 1, ok);
|
|
301
|
+
if (inj.check && !inj.checkTool && (stepRan || i >= 0)) {
|
|
302
|
+
if (ranAs(inj.check, text, inj.params))
|
|
303
|
+
reading(passes(c));
|
|
304
|
+
else if (c.check && checkInLoop(inj.check, text, inj.params))
|
|
305
|
+
reading(passes(c));
|
|
306
|
+
}
|
|
307
|
+
if (i >= 0 && ok)
|
|
308
|
+
stepRan = true;
|
|
309
|
+
}
|
|
310
|
+
for (const n of handed)
|
|
311
|
+
if (!last.has(n))
|
|
312
|
+
last.set(n, true);
|
|
313
|
+
const ran = [...last].filter(([, ok]) => ok).map(([n]) => n).sort((a, b) => a - b);
|
|
314
|
+
const bad = [...last].filter(([, ok]) => !ok).map(([n]) => n);
|
|
315
|
+
return { stepsRan: ran, failedStep: bad.length ? Math.min(...bad) : null, check, calls: bash.length, failed: bash.filter((c) => c.failed).length };
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* D57: the calls an injection is credited from. Its run's calls while the session state holds them (the open run,
|
|
319
|
+
* or a run the fold just closed, inside `withSkillSession`'s fn), else its run sheet: a closed run's calls are
|
|
320
|
+
* emptied once its sheet is written, so a run the next typed ask closed is credited from `runs/<id>.json`. A sheet
|
|
321
|
+
* carried across a compaction (D59a) is joined with the parts before it (`joinCarriedSheet`).
|
|
322
|
+
* With no run, every call of the injection's epoch the session still holds. [] when there is nothing.
|
|
323
|
+
*/
|
|
324
|
+
export function creditCalls(inj, runs, env) {
|
|
325
|
+
if (!inj.runId)
|
|
326
|
+
return runs.filter((r) => r.epoch === inj.epoch).flatMap((r) => r.calls);
|
|
327
|
+
const run = runs.find((r) => r.id === inj.runId);
|
|
328
|
+
if (run && (run.calls.length || !run.closed))
|
|
329
|
+
return run.calls;
|
|
330
|
+
const sheet = readRunSheet(inj.runId, env);
|
|
331
|
+
return sheet ? joinCarriedSheet(sheet, (id) => readRunSheet(id, env)).calls : [];
|
|
332
|
+
}
|
|
333
|
+
export function newUseId() {
|
|
334
|
+
return `u-${randomBytes(3).toString('hex')}`;
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/skills/ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { WallClass } from '../trace/types.js';
|
|
2
|
+
export interface Lesson {
|
|
3
|
+
/** Skill lesson: 'ls-' + 6 hex (never a learning id, R4). Wall lesson: the learning's id. */
|
|
4
|
+
id: string;
|
|
5
|
+
/** null: tied to a wall only (moment 3 fallback). */
|
|
6
|
+
skill: string | null;
|
|
7
|
+
/** Local date. */
|
|
8
|
+
at: string;
|
|
9
|
+
/** At most 200 chars, flatLine'd, a leading [trail] or [graft] stripped (spec 7, R27). */
|
|
10
|
+
text: string;
|
|
11
|
+
/** 'guardrail' when the text starts with never / don't / ask first (spec 13). */
|
|
12
|
+
kind: 'lesson' | 'guardrail';
|
|
13
|
+
src: 'correction' | 'repair';
|
|
14
|
+
wall: WallClass | null;
|
|
15
|
+
}
|
|
16
|
+
export declare const LESSON_MAX = 200;
|
|
17
|
+
/** The words a lesson reaches the agent and the person in (J07, 4.14, 4.15). Information, tied to the skill (D88). */
|
|
18
|
+
export declare const LESSON_COPY: Record<string, string>;
|
|
19
|
+
/** The correction forms of 4.14 step 2, first match. Null when none matches. */
|
|
20
|
+
export declare function correctionPhrase(typed: string): {
|
|
21
|
+
said: string;
|
|
22
|
+
lesson: string;
|
|
23
|
+
kind: 'lesson' | 'guardrail';
|
|
24
|
+
} | null;
|
|
25
|
+
/** `{lesson}: {fix command}` (params put back), or `{lesson}` alone; one line, at most 200, no leading marker. A cut command is never kept. */
|
|
26
|
+
export declare function lessonText(phrase: {
|
|
27
|
+
lesson: string;
|
|
28
|
+
}, fixCmd: string | null, params: Record<string, string>): string;
|
|
29
|
+
export declare function lessonSha(text: string): string;
|
|
30
|
+
export declare function newLessonId(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Why a lesson's text can't reach the agent, or null (D88, D101, 4.14 step 3): it tells the agent not to ask or
|
|
33
|
+
* confirm (Trail never says that; Claude Code asks before a step that can't be undone), it talks about asking
|
|
34
|
+
* without adding asking (D111: "you don't need to ask first" must never come back as an ask turned around), a
|
|
35
|
+
* command the risk rules never keep, or, unless it is a guardrail that forbids it ("never npm publish from a
|
|
36
|
+
* laptop"), a gated command the block would show with no ask. The same rule for a new lesson's phrase and for a
|
|
37
|
+
* lesson file read back.
|
|
38
|
+
*/
|
|
39
|
+
export declare function lessonRefused(text: string): string | null;
|
|
40
|
+
/**
|
|
41
|
+
* skills/<name>/lessons/<date>-<n>.md for a skill (never written through a link); for a wall-only lesson a learning
|
|
42
|
+
* of kind lesson (every-repo for a machine wall, the repo's personal folder for git-https-auth, R49). Returns the path.
|
|
43
|
+
*/
|
|
44
|
+
export declare function writeLesson(l: Lesson, repoKey: string, env?: NodeJS.ProcessEnv): string;
|
|
45
|
+
/** The lessons in `<skillDir>/lessons/` (never through a link), oldest first; the newest 50 files read. */
|
|
46
|
+
export declare function readLessons(skillDir: string): Lesson[];
|
|
47
|
+
/**
|
|
48
|
+
* The live lessons kept for a wall class here: every-repo ones, then this repo's (oldest first). For lastTimeText
|
|
49
|
+
* (4.10). D117 (4): read through the mtime-keyed lesson index; `write` (Stop, session start) keeps what changed.
|
|
50
|
+
*/
|
|
51
|
+
export declare function wallLessons(cls: WallClass, repoKey: string, env?: NodeJS.ProcessEnv, opts?: {
|
|
52
|
+
write?: boolean;
|
|
53
|
+
}): Lesson[];
|
|
54
|
+
/** A guardrail-kind lesson (never trimmed from a block): so marked, or its text starts with never / don't / ask first. */
|
|
55
|
+
export declare const isGuardrailLesson: (l: Lesson) => boolean;
|
|
56
|
+
/** Guardrail-kind lessons first (never trimmed), then up to 3 newest lessons, oldest of them first (4.16, J07). */
|
|
57
|
+
/** One lesson's line (`Lesson (the person, Nov 3): ...`). */
|
|
58
|
+
export declare const lessonLine: (l: Lesson) => string;
|
|
59
|
+
export declare function lessonLines(lessons: Lesson[]): string[];
|
|
60
|
+
//# sourceMappingURL=lessons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lessons.d.ts","sourceRoot":"","sources":["../../src/skills/lessons.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAenD,MAAM,WAAW,MAAM;IACrB,6FAA6F;IAC7F,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,0FAA0F;IAC1F,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,GAAG,EAAE,YAAY,GAAG,QAAQ,CAAC;IAC7B,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,UAAU,MAAM,CAAC;AAU9B,sHAAsH;AACtH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM9C,CAAC;AAmEF,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAA;CAAE,GAAG,IAAI,CAcrH;AAgBD,+IAA+I;AAC/I,wBAAgB,UAAU,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQpH;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAgDD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWzD;AA6CD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAyBvF;AAuBD,2GAA2G;AAC3G,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAWtD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,EAAE,CAW9H;AAUD,0HAA0H;AAC1H,eAAO,MAAM,iBAAiB,GAAI,GAAG,MAAM,YAAiE,CAAC;AAE7G,mHAAmH;AACnH,6DAA6D;AAC7D,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,WAAuF,CAAC;AAE5H,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAMvD"}
|