@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,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kept versions of a personal skill (phase 2 design 2.1, 4.5, 4.6, 4.12):
|
|
3
|
+
* `skills/<name>/.versions/`. Trail writes a new SKILL.md only over the file
|
|
4
|
+
* it wrote itself, byte for byte (0 rule 2), and only after the file it is
|
|
5
|
+
* about to replace is kept as `v<n>/` (0 rule 3). A file the person changed
|
|
6
|
+
* is never written: the change goes beside it as `proposed-v<n>/`, with the
|
|
7
|
+
* person's file kept as `hand-<date>/`, and Trail takes the file as its own
|
|
8
|
+
* again only when the person copied the proposal over it, byte for byte.
|
|
9
|
+
*
|
|
10
|
+
* A write marks itself in the state first (`pendingWrite`, R8), so a process
|
|
11
|
+
* killed between the new file and the state is finished on the next read
|
|
12
|
+
* instead of looking hand-edited forever. A state that can't be written
|
|
13
|
+
* puts the old file back (D68). Every path refuses a link, a file that isn't
|
|
14
|
+
* regular, or one over 64 KB, and fails closed: nothing changes.
|
|
15
|
+
*
|
|
16
|
+
* This module never imports the fold (fold.ts imports recall.ts, which
|
|
17
|
+
* calls `adoptIfCopied`): it writes text it is given.
|
|
18
|
+
*/
|
|
19
|
+
import { readdirSync, rmSync } from 'node:fs';
|
|
20
|
+
import { join } from 'node:path';
|
|
21
|
+
import { parseSkillMd, renderSkillMd, skillHash } from './skillmd.js';
|
|
22
|
+
import { getSkillState, updateSkillState } from './state.js';
|
|
23
|
+
import { appendLedger } from './ledger.js';
|
|
24
|
+
import { underStoreLock } from './store-fs.js';
|
|
25
|
+
import { phraseSha } from './staleness.js';
|
|
26
|
+
import { rebuildCompiled } from './skill-rebuild.js';
|
|
27
|
+
import { printDiff } from './skill-diff.js';
|
|
28
|
+
import { writePrivate } from '../util/private-fs.js';
|
|
29
|
+
import { copyFlat, keepFolder, keepHand, lessonFiles, LinkError, lst, moveLessons, ownDir, prune, regularText, swapScripts, V_DIR, versionsDir, } from './versions-fs.js';
|
|
30
|
+
export { versionsDir } from './versions-fs.js';
|
|
31
|
+
export const VERSIONS_KEPT = 10;
|
|
32
|
+
/** Test seam: runs right before the write's state update (step 4), so a test can hold the state lock. */
|
|
33
|
+
export const VERSION_SEAMS = {};
|
|
34
|
+
/** Kept version numbers, ascending: `v<n>` folders only (links and files skipped). */
|
|
35
|
+
export function listVersions(ref) {
|
|
36
|
+
let names;
|
|
37
|
+
try {
|
|
38
|
+
if (!lst(versionsDir(ref))?.isDirectory())
|
|
39
|
+
return [];
|
|
40
|
+
names = readdirSync(versionsDir(ref));
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
return names.flatMap((n) => {
|
|
46
|
+
const m = V_DIR.exec(n);
|
|
47
|
+
return m && lst(join(versionsDir(ref), n))?.isDirectory() ? [Number(m[1])] : [];
|
|
48
|
+
}).sort((a, b) => a - b);
|
|
49
|
+
}
|
|
50
|
+
/** The number the next written version gets: one past both the file's own and every kept one. */
|
|
51
|
+
export function nextVersion(ref, current) {
|
|
52
|
+
return Math.max(current, 0, ...listVersions(ref)) + 1;
|
|
53
|
+
}
|
|
54
|
+
const intOf = (v) => (typeof v === 'string' && /^[1-9]\d{0,5}$/.test(v) ? Number(v) : 1);
|
|
55
|
+
/** 2.2: what a new version resets. Uses, checked uses, where it came from and when it was added stay. */
|
|
56
|
+
function versionReset(s, hash, asks, at) {
|
|
57
|
+
s.hash = hash;
|
|
58
|
+
s.status = 'candidate';
|
|
59
|
+
s.changedAt = at;
|
|
60
|
+
s.firings = [];
|
|
61
|
+
s.lastFails = [];
|
|
62
|
+
delete s.statusWhy;
|
|
63
|
+
delete s.prevStatus;
|
|
64
|
+
delete s.fixHash;
|
|
65
|
+
s.proposed = null;
|
|
66
|
+
s.pendingWrite = null;
|
|
67
|
+
const keep = new Set(asks.split(',').map((p) => p.trim()).filter(Boolean).map(phraseSha));
|
|
68
|
+
if (s.cueMisses && typeof s.cueMisses === 'object')
|
|
69
|
+
s.cueMisses = Object.fromEntries(Object.entries(s.cueMisses).filter(([k]) => keep.has(k)));
|
|
70
|
+
}
|
|
71
|
+
const clearPending = (id, env) => {
|
|
72
|
+
try {
|
|
73
|
+
updateSkillState(id, (s) => (s ? { ...s, pendingWrite: null } : s), env);
|
|
74
|
+
}
|
|
75
|
+
catch { /* the marker is harmless: its hash isn't the file's */ }
|
|
76
|
+
};
|
|
77
|
+
/** 4.5 steps 1 to 6 under the store lock, then the state lock. */
|
|
78
|
+
function commit(ref, c, env, now) {
|
|
79
|
+
if (ref.scope !== 'personal')
|
|
80
|
+
return { ok: false, why: 'changed' };
|
|
81
|
+
try {
|
|
82
|
+
return underStoreLock(env, () => commitLocked(ref, c, env, now));
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
if (e instanceof LinkError)
|
|
86
|
+
return { ok: false, why: 'link' };
|
|
87
|
+
return { ok: false, why: /busy/.test(e instanceof Error ? e.message : '') ? 'busy' : 'io' };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function commitLocked(ref, c, env, now) {
|
|
91
|
+
// 1. The folder and the file are Trail's: no link, a regular file of at most 64 KB, Trail's own bytes.
|
|
92
|
+
const dirSt = lst(ref.dir);
|
|
93
|
+
if (!dirSt || dirSt.isSymbolicLink())
|
|
94
|
+
return { ok: false, why: dirSt ? 'link' : 'io' };
|
|
95
|
+
if (!dirSt.isDirectory())
|
|
96
|
+
return { ok: false, why: 'io' };
|
|
97
|
+
const vs = lst(versionsDir(ref));
|
|
98
|
+
if (vs && !vs.isDirectory())
|
|
99
|
+
return { ok: false, why: 'link' };
|
|
100
|
+
const fileSt = lst(ref.file);
|
|
101
|
+
if (fileSt?.isSymbolicLink())
|
|
102
|
+
return { ok: false, why: 'link' };
|
|
103
|
+
const text = regularText(ref.file);
|
|
104
|
+
if (text === null)
|
|
105
|
+
return { ok: false, why: 'changed' };
|
|
106
|
+
const parsed = parseSkillMd(text, ref.name);
|
|
107
|
+
const st = getSkillState(ref.id, env);
|
|
108
|
+
if (!parsed || parsed.meta.trail !== ref.id || !st || st.scope !== 'personal')
|
|
109
|
+
return { ok: false, why: 'changed' };
|
|
110
|
+
const hash = skillHash(text);
|
|
111
|
+
const handEdited = hash !== st.hash;
|
|
112
|
+
if (c.baseHash !== null && (handEdited || hash !== c.baseHash))
|
|
113
|
+
return { ok: false, why: 'changed' };
|
|
114
|
+
const from = intOf(parsed.meta.version);
|
|
115
|
+
const to = nextVersion(ref, from);
|
|
116
|
+
if (c.expect !== undefined && c.expect !== to)
|
|
117
|
+
return { ok: false, why: 'changed' };
|
|
118
|
+
const next = c.render(to);
|
|
119
|
+
const nextHash = skillHash(next);
|
|
120
|
+
const at = now.toISOString();
|
|
121
|
+
if (!updateSkillState(ref.id, (s) => (s ? { ...s, pendingWrite: { hash: nextHash, from, at } } : s), env))
|
|
122
|
+
return { ok: false, why: 'busy' };
|
|
123
|
+
let swap = null;
|
|
124
|
+
try {
|
|
125
|
+
// 2. The file it replaces is kept first: Trail's own as v<from>, a hand-edited one (a restore only) as hand-<date>.
|
|
126
|
+
let keptAs = null;
|
|
127
|
+
if (handEdited)
|
|
128
|
+
keepHand(ref, text, now);
|
|
129
|
+
else {
|
|
130
|
+
keptAs = `v${from}`;
|
|
131
|
+
if (keepFolder(ref, keptAs, text, join(ref.dir, 'scripts')) === 'changed') {
|
|
132
|
+
clearPending(ref.id, env);
|
|
133
|
+
return { ok: false, why: 'changed' };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// 3. The new file (temp file and rename), and for a replace or restore its scripts.
|
|
137
|
+
if (c.helpers)
|
|
138
|
+
swap = swapScripts(ref, { helpers: c.helpers });
|
|
139
|
+
else if (c.restoreFrom && lst(join(c.restoreFrom, 'scripts'))?.isDirectory())
|
|
140
|
+
swap = swapScripts(ref, { from: join(c.restoreFrom, 'scripts') });
|
|
141
|
+
writePrivate(ref.file, next);
|
|
142
|
+
if (regularText(ref.file) !== next)
|
|
143
|
+
throw new Error('trail: the new SKILL.md did not read back');
|
|
144
|
+
// 4. The state, then the ledger line. A state that can't be written puts the old file back (D68).
|
|
145
|
+
VERSION_SEAMS.beforeState?.();
|
|
146
|
+
const asks = String(parseSkillMd(next, ref.name)?.meta.asks ?? '');
|
|
147
|
+
const done = updateSkillState(ref.id, (s) => {
|
|
148
|
+
if (!s)
|
|
149
|
+
return s;
|
|
150
|
+
versionReset(s, nextHash, asks, at);
|
|
151
|
+
return s;
|
|
152
|
+
}, env);
|
|
153
|
+
if (!done) {
|
|
154
|
+
putBack(ref, text, swap);
|
|
155
|
+
swap = null;
|
|
156
|
+
clearPending(ref.id, env);
|
|
157
|
+
return { ok: false, why: 'busy' };
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
swap?.done();
|
|
161
|
+
}
|
|
162
|
+
catch { /* the old scripts stay in a dot folder nobody reads */ }
|
|
163
|
+
swap = null;
|
|
164
|
+
try {
|
|
165
|
+
appendLedger(ref.id, { at, event: 'changed', skill: ref.id, op: c.op, from, to, offerId: c.offerId, ...(c.lessonIds?.length ? { lessonIds: c.lessonIds } : {}) }, env);
|
|
166
|
+
}
|
|
167
|
+
catch { /* the state is the truth; the ledger is its record */ }
|
|
168
|
+
// 5. Lessons: folded ones move to lessons/.folded; a replace's go with the old version; a restore brings its own back.
|
|
169
|
+
try {
|
|
170
|
+
const files = lessonFiles(ref.dir);
|
|
171
|
+
if (c.lessonIds?.length)
|
|
172
|
+
moveLessons(ref.dir, files.filter((f) => c.lessonIds.includes(f.id)), join(ref.dir, 'lessons', '.folded'));
|
|
173
|
+
if (c.replace && keptAs)
|
|
174
|
+
moveLessons(ref.dir, files.filter((f) => !f.guardrail), join(versionsDir(ref), keptAs, 'lessons'));
|
|
175
|
+
if (c.restoreFrom && lst(join(c.restoreFrom, 'lessons'))?.isDirectory()) {
|
|
176
|
+
const have = new Set(files.map((f) => f.name));
|
|
177
|
+
copyFlat(join(c.restoreFrom, 'lessons'), join(ref.dir, 'lessons'), 0o600, (n) => n.endsWith('.md') && !have.has(n));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch { /* a lesson left riding the block is harmless */ }
|
|
181
|
+
// 6. Ten kept versions.
|
|
182
|
+
prune(ref, V_DIR, VERSIONS_KEPT);
|
|
183
|
+
return { ok: true, version: to };
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
putBack(ref, text, swap);
|
|
187
|
+
clearPending(ref.id, env);
|
|
188
|
+
if (e instanceof LinkError)
|
|
189
|
+
return { ok: false, why: 'link' };
|
|
190
|
+
return { ok: false, why: 'io' };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** The old file (and scripts) back, when it isn't already. */
|
|
194
|
+
function putBack(ref, text, swap) {
|
|
195
|
+
try {
|
|
196
|
+
if (regularText(ref.file) !== text)
|
|
197
|
+
writePrivate(ref.file, text);
|
|
198
|
+
}
|
|
199
|
+
catch { /* the marker lets the next read tell the new file from a hand edit */ }
|
|
200
|
+
try {
|
|
201
|
+
swap?.undo();
|
|
202
|
+
}
|
|
203
|
+
catch { /* scripts/ as the new version left it */ }
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* 4.5: keeps the current file, writes `next` as the next version, updates state and the ledger. `next.meta.version`
|
|
207
|
+
* must be that next number (`nextVersion`), or nothing is written: the bytes written are the bytes shown.
|
|
208
|
+
*/
|
|
209
|
+
export function writeNewVersion(ref, next, o) {
|
|
210
|
+
if (typeof o.baseHash !== 'string' || !o.baseHash)
|
|
211
|
+
return { ok: false, why: 'changed' };
|
|
212
|
+
const replace = o.op === 'replace';
|
|
213
|
+
return commit(ref, {
|
|
214
|
+
render: (v) => renderSkillMd({ ...next, meta: { ...next.meta, version: String(v) } }),
|
|
215
|
+
op: o.op, offerId: o.offerId, baseHash: o.baseHash, lessonIds: o.op === 'extend' ? o.lessonIds : undefined,
|
|
216
|
+
// A fold keeps scripts/ as it is (a rebuilt skill's helpers are names only); a replace writes the fresh compile's (R22).
|
|
217
|
+
helpers: replace ? next.helpers : null, replace, expect: Number(next.meta.version),
|
|
218
|
+
}, o.env, o.now ?? new Date());
|
|
219
|
+
}
|
|
220
|
+
/* ---------------------------------------------------------- hand edits (4.6) */
|
|
221
|
+
/** 4.6: the proposal beside a hand-edited file, the person's file kept as hand-<date>. Never touches SKILL.md. */
|
|
222
|
+
export function writeProposal(ref, next, op, env, now = new Date()) {
|
|
223
|
+
if (ref.scope !== 'personal')
|
|
224
|
+
return null;
|
|
225
|
+
try {
|
|
226
|
+
return underStoreLock(env, () => {
|
|
227
|
+
const dirSt = lst(ref.dir);
|
|
228
|
+
if (!dirSt?.isDirectory() || lst(ref.file)?.isSymbolicLink())
|
|
229
|
+
return null;
|
|
230
|
+
const current = regularText(ref.file);
|
|
231
|
+
if (current === null)
|
|
232
|
+
return null;
|
|
233
|
+
const version = intOf(next.meta.version);
|
|
234
|
+
const text = renderSkillMd(next);
|
|
235
|
+
const name = `proposed-v${version}`;
|
|
236
|
+
// One proposal at a time: an older one goes first.
|
|
237
|
+
ownDir(versionsDir(ref));
|
|
238
|
+
for (const n of readdirSync(versionsDir(ref)))
|
|
239
|
+
if (/^proposed-/.test(n) && n !== name)
|
|
240
|
+
rmSync(join(versionsDir(ref), n), { recursive: true, force: true });
|
|
241
|
+
if (lst(join(versionsDir(ref), name)))
|
|
242
|
+
rmSync(join(versionsDir(ref), name), { recursive: true, force: true });
|
|
243
|
+
keepFolder(ref, name, text, null);
|
|
244
|
+
const hand = keepHand(ref, current, now);
|
|
245
|
+
const done = updateSkillState(ref.id, (s) => (s ? { ...s, proposed: { hash: skillHash(text), version, op, at: now.toISOString() } } : s), env);
|
|
246
|
+
if (!done)
|
|
247
|
+
return null;
|
|
248
|
+
const path = join(versionsDir(ref), name, 'SKILL.md');
|
|
249
|
+
return { path, hand, version, diff: printDiff(current, text, [`${ref.name}/SKILL.md (yours)`, `${ref.name}/.versions/${name}/SKILL.md`]) };
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* 4.6 and R8, from a read of the file (`candidatesHere`): a file equal to an unfinished write's hash finishes it; one
|
|
258
|
+
* equal to the state's hash clears a stale marker; one equal to the proposal is taken as Trail's own (adopted). True
|
|
259
|
+
* when the file was adopted. One compare when nothing is pending; the locks only on a match.
|
|
260
|
+
*/
|
|
261
|
+
export function adoptIfCopied(ref, st, fileHash, env, now = new Date()) {
|
|
262
|
+
if (!st || ref.scope !== 'personal' || typeof fileHash !== 'string')
|
|
263
|
+
return false;
|
|
264
|
+
const pending = st.pendingWrite && typeof st.pendingWrite === 'object' ? st.pendingWrite : null;
|
|
265
|
+
const proposed = st.proposed && typeof st.proposed === 'object' ? st.proposed : null;
|
|
266
|
+
if (pending && (fileHash === pending.hash || fileHash === st.hash)) {
|
|
267
|
+
// Under the store lock (a try): a write still running holds it, so its own new file is never "finished" here and
|
|
268
|
+
// then put back by that write (D68), which would leave Trail's file looking hand-edited. The file is read again inside.
|
|
269
|
+
try {
|
|
270
|
+
underStoreLock(env, () => {
|
|
271
|
+
const text = regularText(ref.file);
|
|
272
|
+
const now = text === null ? null : skillHash(text);
|
|
273
|
+
if (now !== fileHash)
|
|
274
|
+
return;
|
|
275
|
+
const asks = fileHash === pending.hash ? String(parseSkillMd(text, ref.name)?.meta.asks ?? '') : null;
|
|
276
|
+
updateSkillState(ref.id, (s) => {
|
|
277
|
+
if (!s?.pendingWrite)
|
|
278
|
+
return s;
|
|
279
|
+
if (fileHash === s.pendingWrite.hash)
|
|
280
|
+
versionReset(s, fileHash, asks ?? '', s.pendingWrite.at);
|
|
281
|
+
else if (fileHash === s.hash)
|
|
282
|
+
s.pendingWrite = null;
|
|
283
|
+
return s;
|
|
284
|
+
}, env);
|
|
285
|
+
}, 200);
|
|
286
|
+
}
|
|
287
|
+
catch { /* busy: the next read finishes it */ }
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
if (!proposed || fileHash !== proposed.hash)
|
|
291
|
+
return false;
|
|
292
|
+
let adopted = false;
|
|
293
|
+
try {
|
|
294
|
+
underStoreLock(env, () => {
|
|
295
|
+
const text = regularText(ref.file);
|
|
296
|
+
if (text === null || skillHash(text) !== fileHash || lst(ref.dir)?.isSymbolicLink())
|
|
297
|
+
return;
|
|
298
|
+
const asks = String(parseSkillMd(text, ref.name)?.meta.asks ?? '');
|
|
299
|
+
const at = now.toISOString();
|
|
300
|
+
const done = updateSkillState(ref.id, (s) => {
|
|
301
|
+
if (!s?.proposed || s.proposed.hash !== fileHash)
|
|
302
|
+
return s;
|
|
303
|
+
versionReset(s, fileHash, asks, at);
|
|
304
|
+
adopted = true;
|
|
305
|
+
return s;
|
|
306
|
+
}, env);
|
|
307
|
+
if (!done || !adopted)
|
|
308
|
+
return;
|
|
309
|
+
try {
|
|
310
|
+
appendLedger(ref.id, { at, event: 'changed', skill: ref.id, op: 'adopted', from: Math.max(0, proposed.version - 1), to: proposed.version, offerId: null }, env);
|
|
311
|
+
}
|
|
312
|
+
catch { /* the state is the truth */ }
|
|
313
|
+
try {
|
|
314
|
+
rmSync(join(versionsDir(ref), `proposed-v${proposed.version}`), { recursive: true, force: true });
|
|
315
|
+
}
|
|
316
|
+
catch { /* left beside it */ }
|
|
317
|
+
}, 200);
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
return adopted;
|
|
323
|
+
}
|
|
324
|
+
/* ------------------------------------------------------- restore (4.12, P28) */
|
|
325
|
+
/**
|
|
326
|
+
* 4.12, person only (the CLI checks the terminal; the agent guard denies `restore-version`): `.versions/v<n>/` back
|
|
327
|
+
* as a new version. The current file is kept first (a hand-edited one as hand-<date>, R6). The restored file's
|
|
328
|
+
* `version` is rewritten to the new number through the round trip; one that doesn't round-trip goes back as it is.
|
|
329
|
+
*/
|
|
330
|
+
export function restoreVersion(ref, version, env, now = new Date()) {
|
|
331
|
+
if (!Number.isSafeInteger(version) || version < 1)
|
|
332
|
+
return { ok: false, why: 'unknown' };
|
|
333
|
+
const from = join(versionsDir(ref), `v${version}`);
|
|
334
|
+
const fs = lst(from);
|
|
335
|
+
if (fs?.isSymbolicLink() || lst(versionsDir(ref))?.isSymbolicLink())
|
|
336
|
+
return { ok: false, why: 'link' };
|
|
337
|
+
const old = fs?.isDirectory() ? regularText(join(from, 'SKILL.md')) : null;
|
|
338
|
+
const parsed = old === null ? null : parseSkillMd(old, ref.name);
|
|
339
|
+
if (old === null || !parsed || parsed.meta.trail !== ref.id)
|
|
340
|
+
return { ok: false, why: 'unknown' };
|
|
341
|
+
const st = getSkillState(ref.id, env);
|
|
342
|
+
const rebuilt = rebuildCompiled(old, parsed, { source: st?.source ?? null, helpers: [], runId: st?.runId ?? null });
|
|
343
|
+
const r = commit(ref, {
|
|
344
|
+
render: (v) => (rebuilt ? renderSkillMd({ ...rebuilt, meta: { ...rebuilt.meta, version: String(v) } }) : old),
|
|
345
|
+
op: 'restore-version', offerId: null, baseHash: null, restoreFrom: from,
|
|
346
|
+
}, env, now);
|
|
347
|
+
if (r.ok)
|
|
348
|
+
return r;
|
|
349
|
+
return { ok: false, why: r.why === 'changed' ? 'io' : r.why };
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/skills/versions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { CallKind, CheckFamily, CheckHit, JobClass, PromptParams, RunCall } from './types.js';
|
|
2
|
+
export interface RunFacts {
|
|
3
|
+
/** Values seen earlier in the run that a check can confirm. */
|
|
4
|
+
versions: string[];
|
|
5
|
+
shas: string[];
|
|
6
|
+
pushedBranches: string[];
|
|
7
|
+
pr?: string;
|
|
8
|
+
/** A publish worked in this run: with no version known, npm view may show any (4.2). */
|
|
9
|
+
published?: boolean;
|
|
10
|
+
/** D140: a push or a deploy step worked in this run, so a health read after it is a deploy check. */
|
|
11
|
+
deployed?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** npm-view, deploy, gh-checks, ls-remote: they only read, so a non-final one is look-only (4.5 step 2). */
|
|
14
|
+
export declare const READ_ONLY_FAMILIES: ReadonlySet<CheckFamily>;
|
|
15
|
+
/**
|
|
16
|
+
* The commit a skill works out when it runs: `$(git rev-parse HEAD)` (the `{sha}` default), `--short`, `--verify`
|
|
17
|
+
* (D71 c). A deploy status read at it is a deploy check like one at a written-out sha; it just names no sha.
|
|
18
|
+
*/
|
|
19
|
+
export declare const HEAD_SHA: string;
|
|
20
|
+
/** The family a command belongs to, from the command alone. Cheap: PostToolUse uses it to decide whether to write a mark. */
|
|
21
|
+
export declare function checkFamilyOf(cmd: string, job: JobClass | null): CheckFamily | null;
|
|
22
|
+
/**
|
|
23
|
+
* What a Bash call is (4.1): plumbing, work, look or step. A simple command
|
|
24
|
+
* that is a read-only check (npm view, a deploy status, CI checks, ls-remote)
|
|
25
|
+
* only reads, so it counts as look; the rest of the command still decides.
|
|
26
|
+
*/
|
|
27
|
+
export declare function callKind(cmd: string, job: JobClass | null): CallKind;
|
|
28
|
+
/**
|
|
29
|
+
* A call's command as text: `cmd`, or for a call kept piece by piece (over 2,000 characters, D58c) its pieces
|
|
30
|
+
* joined by their separators, a piece not kept standing as `:`.
|
|
31
|
+
*/
|
|
32
|
+
export declare function callText(c: Pick<RunCall, 'cmd' | 'parts'>): string;
|
|
33
|
+
/** `v` (with or without a leading v) as a whole version in `text`: 1.4.3 is not in 1.4.30. */
|
|
34
|
+
export declare const hasVersion: (text: string, v: string) => boolean;
|
|
35
|
+
/**
|
|
36
|
+
* D101: the call ends in `|| <fallback>` (`docker info || echo "docker not running"`, `npm test || true`), so its
|
|
37
|
+
* exit 0 may come from the fallback alone. Such a call is never a passing check, and a run proven only by such
|
|
38
|
+
* calls is not a good run. One top-level split: linear.
|
|
39
|
+
*/
|
|
40
|
+
export declare function fallbackOnly(cmd: string): boolean;
|
|
41
|
+
/** 4.2. The `query` family only when job === 'report'. D101: never passed behind a fallback. */
|
|
42
|
+
export declare function classifyCheck(cmd: string, resultText: string, r: {
|
|
43
|
+
failed: boolean;
|
|
44
|
+
isError: boolean;
|
|
45
|
+
}, facts: RunFacts, job: JobClass | null): CheckHit | null;
|
|
46
|
+
/** A deployment status tool: its result is check evidence for the deploy family, and the call is never a step (D59b). */
|
|
47
|
+
export declare function isDeployTool(name: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* D59b: a Vercel deployment status result as a deploy check. Passed when the deployment is READY. `get_deployment`
|
|
50
|
+
* reads the deployment the agent named (as `vercel inspect <url>` does). A list is Trail's pick: the newest
|
|
51
|
+
* deployment, or when the run knows commits (`facts.shas`) and the list names commits, the newest at one of them
|
|
52
|
+
* (READY for another commit is not this push). Any other state (BUILDING, QUEUED, INITIALIZING, ERROR, CANCELED,
|
|
53
|
+
* BLOCKED) or a failed call is not a pass. Null for any other tool.
|
|
54
|
+
*/
|
|
55
|
+
export declare function classifyToolCheck(name: string, resultText: string, r: {
|
|
56
|
+
failed: boolean;
|
|
57
|
+
isError: boolean;
|
|
58
|
+
}, facts: RunFacts): CheckHit | null;
|
|
59
|
+
export declare function factsFromCalls(calls: RunCall[], prompt: PromptParams): RunFacts;
|
|
60
|
+
/** 4.3, on the last assistant message of the turn. */
|
|
61
|
+
export declare function endsInQuestion(assistantText: string): boolean;
|
|
62
|
+
export declare function endsInFailure(assistantText: string): boolean;
|
|
63
|
+
//# sourceMappingURL=checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../src/trace/checks.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEnG,MAAM,WAAW,QAAQ;IACvB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,wFAAwF;IACxF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,4GAA4G;AAC5G,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,WAAW,CAA0E,CAAC;AAEnI;;;GAGG;AACH,eAAO,MAAM,QAAQ,QAAqF,CAAC;AAkF3G,6HAA6H;AAC7H,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAQpE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,MAAM,CAIlE;AAMD,8FAA8F;AAC9F,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,GAAG,MAAM,YAA2E,CAAC;AA8E9H;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIjD;AAED,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,CAG/J;AAuDD,yHAAyH;AACzH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAyCD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAQ9I;AA0DD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,GAAG,QAAQ,CA+B/E;AAaD,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAK7D;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAE5D"}
|