@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,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run sheets (`~/.trail/runs/<run-id>.json`, design 2.4): what one finished
|
|
3
|
+
* run did, as compile copies it. Written for every closed run with at least
|
|
4
|
+
* one step call, checked or not, so "save this" can name a run that is no
|
|
5
|
+
* longer the newest. `runs/index.json` lists them, newest last, so the
|
|
6
|
+
* previous run of the same job is found by reading one sheet, never by
|
|
7
|
+
* scanning the folder. Sheets are deleted 7 days after they were last
|
|
8
|
+
* written.
|
|
9
|
+
*
|
|
10
|
+
* A sheet holds commands that ran (secret-checked at fold time), counts and
|
|
11
|
+
* labels; never what the person typed. Re-exported from `runs.ts`, where the
|
|
12
|
+
* design names these functions.
|
|
13
|
+
*/
|
|
14
|
+
import { readdirSync, rmSync, statSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { readJsonSafe, trailPath, withLock, writePrivate } from '../util/private-fs.js';
|
|
17
|
+
const RUN_ID = /^r-\d{4}-[0-9a-f]{4,8}$/;
|
|
18
|
+
const MAX_ROWS = 500;
|
|
19
|
+
const KEEP_MS = 7 * 24 * 3600 * 1000;
|
|
20
|
+
function runsDir(env) {
|
|
21
|
+
return trailPath(env, 'runs');
|
|
22
|
+
}
|
|
23
|
+
function indexPath(env) {
|
|
24
|
+
return join(runsDir(env), 'index.json');
|
|
25
|
+
}
|
|
26
|
+
/** Throws on an id that isn't a run id: it comes from the agent's command line. */
|
|
27
|
+
export function runSheetPath(id, env) {
|
|
28
|
+
if (!RUN_ID.test(String(id)))
|
|
29
|
+
throw new Error(`trail: not a run id: ${String(id).slice(0, 40)}`);
|
|
30
|
+
return join(runsDir(env), `${id}.json`);
|
|
31
|
+
}
|
|
32
|
+
function readIndex(env) {
|
|
33
|
+
const raw = readJsonSafe(indexPath(env));
|
|
34
|
+
const rows = raw && Array.isArray(raw.rows) ? raw.rows.filter((r) => r && typeof r.id === 'string' && RUN_ID.test(r.id)) : [];
|
|
35
|
+
return { v: 1, rows };
|
|
36
|
+
}
|
|
37
|
+
function writeIndex(index, env) {
|
|
38
|
+
writePrivate(indexPath(env), JSON.stringify({ v: 1, rows: index.rows.slice(-MAX_ROWS) }));
|
|
39
|
+
}
|
|
40
|
+
/** Locked read-modify-write of the index; a timed-out lock leaves it as it was (the sheet is still on disk). */
|
|
41
|
+
function updateIndex(env, change) {
|
|
42
|
+
withLock(indexPath(env), () => {
|
|
43
|
+
const index = readIndex(env);
|
|
44
|
+
writeIndex({ v: 1, rows: change(index.rows) }, env);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/** Writes runs/<id>.json and its row in runs/index.json (locked). Sets run.sheet and run.checkIndex. */
|
|
48
|
+
export function writeRunSheet(run, v, meta, env) {
|
|
49
|
+
const path = runSheetPath(run.id, env);
|
|
50
|
+
const checked = v.checked && v.checkIndex !== null;
|
|
51
|
+
const sheet = {
|
|
52
|
+
v: 1,
|
|
53
|
+
id: run.id,
|
|
54
|
+
session: meta.sessionHash,
|
|
55
|
+
repoKey: run.repoKey,
|
|
56
|
+
...(run.checkout ? { checkout: run.checkout } : {}),
|
|
57
|
+
branch: run.branch,
|
|
58
|
+
host: meta.host,
|
|
59
|
+
tier: meta.tier,
|
|
60
|
+
epoch: run.epoch,
|
|
61
|
+
startedAt: run.startedAt,
|
|
62
|
+
endedAt: run.lastAt,
|
|
63
|
+
job: run.job,
|
|
64
|
+
jobWords: [...run.jobWords],
|
|
65
|
+
sharedWords: [...run.sharedWords],
|
|
66
|
+
promptParams: { ...run.promptParams },
|
|
67
|
+
// A call in another repo than the run's keeps no folder: compile refuses it as outside the repo.
|
|
68
|
+
calls: run.calls.map((c) => (c.key === run.repoKey ? { ...c } : { ...c, cwd: null })),
|
|
69
|
+
checkIndex: checked ? v.checkIndex : null,
|
|
70
|
+
checked,
|
|
71
|
+
end: v.end,
|
|
72
|
+
counts: { commands: run.commands, failed: run.failedCount, toolCalls: run.toolCalls, edits: run.edits },
|
|
73
|
+
helpers: [...meta.helpers],
|
|
74
|
+
skillId: run.skillId ?? null,
|
|
75
|
+
...(run.carriedFrom ? { carriedFrom: run.carriedFrom } : {}),
|
|
76
|
+
};
|
|
77
|
+
writePrivate(path, JSON.stringify(sheet));
|
|
78
|
+
const row = { id: run.id, session: meta.sessionHash, repoKey: run.repoKey, job: run.job, checked, startedAt: run.startedAt };
|
|
79
|
+
updateIndex(env, (rows) => [...rows.filter((r) => r.id !== run.id), row]);
|
|
80
|
+
run.sheet = checked ? 'checked' : 'draft';
|
|
81
|
+
run.checkIndex = sheet.checkIndex;
|
|
82
|
+
return sheet;
|
|
83
|
+
}
|
|
84
|
+
function validSheet(v, id) {
|
|
85
|
+
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
86
|
+
return false;
|
|
87
|
+
const s = v;
|
|
88
|
+
return s.v === 1 && s.id === id && typeof s.repoKey === 'string' && Array.isArray(s.calls) && typeof s.startedAt === 'string';
|
|
89
|
+
}
|
|
90
|
+
export function readRunSheet(id, env) {
|
|
91
|
+
if (!RUN_ID.test(String(id)))
|
|
92
|
+
return null;
|
|
93
|
+
const v = readJsonSafe(runSheetPath(id, env));
|
|
94
|
+
return validSheet(v, id) ? v : null;
|
|
95
|
+
}
|
|
96
|
+
/** Deletes run sheets older than 7 days (mtime) and their index rows. */
|
|
97
|
+
export function pruneRunSheets(now = new Date(), env) {
|
|
98
|
+
let names;
|
|
99
|
+
try {
|
|
100
|
+
names = readdirSync(runsDir(env));
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
let gone = 0;
|
|
106
|
+
const cutoff = now.getTime() - KEEP_MS;
|
|
107
|
+
for (const name of names) {
|
|
108
|
+
const id = name.replace(/\.json$/, '');
|
|
109
|
+
if (name === id || !RUN_ID.test(id))
|
|
110
|
+
continue;
|
|
111
|
+
const path = join(runsDir(env), name);
|
|
112
|
+
try {
|
|
113
|
+
if (statSync(path).mtimeMs >= cutoff)
|
|
114
|
+
continue;
|
|
115
|
+
rmSync(path, { force: true });
|
|
116
|
+
gone++;
|
|
117
|
+
}
|
|
118
|
+
catch { /* gone already */ }
|
|
119
|
+
}
|
|
120
|
+
updateIndex(env, (rows) => rows.filter((r) => {
|
|
121
|
+
try {
|
|
122
|
+
return statSync(runSheetPath(r.id, env)).isFile();
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}));
|
|
128
|
+
return gone;
|
|
129
|
+
}
|
|
130
|
+
/** The newest other checked sheet with the same repoKey and job, started before this one, found through
|
|
131
|
+
* runs/index.json (one sheet read, never a folder scan). The Stop offer, the gate and the CLI all call it. */
|
|
132
|
+
export function findPriorSheet(sheet, env) {
|
|
133
|
+
if (sheet.job === null)
|
|
134
|
+
return null;
|
|
135
|
+
const rows = readIndex(env).rows;
|
|
136
|
+
for (let i = rows.length - 1; i >= 0; i--) {
|
|
137
|
+
const r = rows[i];
|
|
138
|
+
if (r.id === sheet.id || !r.checked || r.repoKey !== sheet.repoKey || r.job !== sheet.job || !(Date.parse(r.startedAt) < Date.parse(sheet.startedAt)))
|
|
139
|
+
continue;
|
|
140
|
+
const prior = readRunSheet(r.id, env);
|
|
141
|
+
return prior && prior.checked ? prior : null;
|
|
142
|
+
}
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=run-sheets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-sheets.js","sourceRoot":"","sources":["../../src/trace/run-sheets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type RepairOpts } from './repairs.js';
|
|
2
|
+
import type { JobMatch, RunState, SkillSessionState } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Closes every open run at a compaction (4.1) and notes the one it cut mid-job (D59a): the next run the agent
|
|
5
|
+
* starts with no typed ask continues that job. The fold calls it at a compaction line; SessionStart(compact)
|
|
6
|
+
* calls it when it bumps the epoch before the fold meets that line. Returns the runs it closed.
|
|
7
|
+
*/
|
|
8
|
+
export declare function cutAtCompaction(st: SkillSessionState, fix?: RepairOpts): RunState[];
|
|
9
|
+
/**
|
|
10
|
+
* D116 item 3: the run checked out and the reply then asked about more work ("Published. Want me to deploy the docs
|
|
11
|
+
* too?"): a yes to that is the next job, not this one. A go-ahead after a plain reply ("ok") only acknowledges it.
|
|
12
|
+
*/
|
|
13
|
+
export declare function movedOn(run: RunState, replyEnd: SkillSessionState['replyEnd']): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* D120 (1): the job a typed line over the matching cap names, when it is `open`'s own and `open` has not checked
|
|
16
|
+
* out; null otherwise (a short line is matchJob's, another job or a checked run starts a new run as before).
|
|
17
|
+
*/
|
|
18
|
+
export declare function continuesOpenJob(text: string, open: RunState | null): JobMatch | null;
|
|
19
|
+
/**
|
|
20
|
+
* D137: an open run whose block handed a gated step to the person (denied here and printed for their own terminal)
|
|
21
|
+
* waits 2 hours, past the 30-minute gap, for their next ask of the same job, which continues it.
|
|
22
|
+
*/
|
|
23
|
+
export declare function handedWait(run: RunState, at: string): boolean;
|
|
24
|
+
//# sourceMappingURL=run-turns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-turns.d.ts","sourceRoot":"","sources":["../../src/trace/run-turns.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAQxE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,iBAAiB,EAAE,GAAG,GAAE,UAAe,GAAG,QAAQ,EAAE,CAYvF;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,GAAG,OAAO,CAGvF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,CAKrF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAG7D"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where one run ends and the next begins, beside the fold (runs.ts): the cut
|
|
3
|
+
* a compaction makes (D59a), whether a run already moved on (D116 item 3),
|
|
4
|
+
* and D120 (1): a typed line naming the same job as the open, not-yet-checked
|
|
5
|
+
* run continues it at any length (the 25-word cap is for matching skills).
|
|
6
|
+
*/
|
|
7
|
+
import { matchJob } from './jobs.js';
|
|
8
|
+
import { noteRepairs } from './repairs.js';
|
|
9
|
+
import { checkedSuccess } from './run-verdict.js';
|
|
10
|
+
/** D59a: a run the compaction cut carries its job on when it had one and had not checked out (as its sheet will say). */
|
|
11
|
+
function carries(run) {
|
|
12
|
+
if (run.job === null || run.sheet === 'checked')
|
|
13
|
+
return false;
|
|
14
|
+
return !(run.calls.length > 0 && checkedSuccess(run, null).checked);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Closes every open run at a compaction (4.1) and notes the one it cut mid-job (D59a): the next run the agent
|
|
18
|
+
* starts with no typed ask continues that job. The fold calls it at a compaction line; SessionStart(compact)
|
|
19
|
+
* calls it when it bumps the epoch before the fold meets that line. Returns the runs it closed.
|
|
20
|
+
*/
|
|
21
|
+
export function cutAtCompaction(st, fix = {}) {
|
|
22
|
+
const closed = [];
|
|
23
|
+
for (const r of st.runs) {
|
|
24
|
+
if (r.closed)
|
|
25
|
+
continue;
|
|
26
|
+
r.closed = true;
|
|
27
|
+
noteRepairs(r, fix); // b2: while the run still has its calls (4.12)
|
|
28
|
+
closed.push(r);
|
|
29
|
+
}
|
|
30
|
+
const cut = closed[closed.length - 1];
|
|
31
|
+
if (cut && carries(cut))
|
|
32
|
+
st.cut = cut.id;
|
|
33
|
+
else if (cut)
|
|
34
|
+
delete st.cut;
|
|
35
|
+
return closed;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* D116 item 3: the run checked out and the reply then asked about more work ("Published. Want me to deploy the docs
|
|
39
|
+
* too?"): a yes to that is the next job, not this one. A go-ahead after a plain reply ("ok") only acknowledges it.
|
|
40
|
+
*/
|
|
41
|
+
export function movedOn(run, replyEnd) {
|
|
42
|
+
if (!run.calls.length || replyEnd !== 'question')
|
|
43
|
+
return false;
|
|
44
|
+
return checkedSuccess({ ...run, end: 'done' }, null).checked;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* D120 (1): the job a typed line over the matching cap names, when it is `open`'s own and `open` has not checked
|
|
48
|
+
* out; null otherwise (a short line is matchJob's, another job or a checked run starts a new run as before).
|
|
49
|
+
*/
|
|
50
|
+
export function continuesOpenJob(text, open) {
|
|
51
|
+
if (!open || open.closed || open.job === null)
|
|
52
|
+
return null;
|
|
53
|
+
const m = matchJob(text, { anyLength: true });
|
|
54
|
+
if (!m || m.job !== open.job)
|
|
55
|
+
return null;
|
|
56
|
+
return open.calls.length && checkedSuccess({ ...open, end: 'done' }, null).checked ? null : m;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* D137: an open run whose block handed a gated step to the person (denied here and printed for their own terminal)
|
|
60
|
+
* waits 2 hours, past the 30-minute gap, for their next ask of the same job, which continues it.
|
|
61
|
+
*/
|
|
62
|
+
export function handedWait(run, at) {
|
|
63
|
+
const d = Date.parse(at) - Date.parse(run.handedAt ?? '');
|
|
64
|
+
return d >= 0 && d <= HANDED_WAIT_MS;
|
|
65
|
+
}
|
|
66
|
+
const HANDED_WAIT_MS = 2 * 60 * 60 * 1000;
|
|
67
|
+
//# sourceMappingURL=run-turns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-turns.js","sourceRoot":"","sources":["../../src/trace/run-turns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,WAAW,EAAmB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,yHAAyH;AACzH,SAAS,OAAO,CAAC,GAAa;IAC5B,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,EAAqB,EAAE,MAAkB,EAAE;IACzE,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,MAAM;YAAE,SAAS;QACvB,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAChB,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,+CAA+C;QACpE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,IAAI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;SACpC,IAAI,GAAG;QAAE,OAAO,EAAE,CAAC,GAAG,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,GAAa,EAAE,QAAuC;IAC5E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC/D,OAAO,cAAc,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAqB;IAClE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,cAAc,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAa,EAAE,EAAU;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC;AACvC,CAAC;AACD,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CheckedVerdict } from './runs.js';
|
|
2
|
+
import type { RunCall, RunSheet, RunState, SkillSessionState } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* D64: the branches a ship ask named: its beta, prod (prod or production) and staging words, and a branch
|
|
5
|
+
* name typed in it (`promptParams.branch`, "push branch wa-cutover to beta"). Empty when it named none.
|
|
6
|
+
*/
|
|
7
|
+
export declare function shipBranches(run: Pick<RunState, 'jobWords' | 'promptParams'>): string[];
|
|
8
|
+
/**
|
|
9
|
+
* The run's essential steps (D58a/b), which conditions 3 to 5 and leg A read: step calls in the checkout of
|
|
10
|
+
* the run's own repo. A step in another repo or a scratch folder is left out of the skill, so it neither
|
|
11
|
+
* covers, breaks nor ends the job. A run with no step in its repo (a session outside git) keeps every step.
|
|
12
|
+
*/
|
|
13
|
+
export declare function essentialSteps(calls: RunCall[], repoKey: string): RunCall[];
|
|
14
|
+
/** 4.2. lastAssistant null: judge the end from run.end as the last Stop computed it. */
|
|
15
|
+
export declare function checkedSuccess(run: RunState, lastAssistant: string | null): CheckedVerdict;
|
|
16
|
+
/** 4.7. */
|
|
17
|
+
export declare function lastGoodRun(st: SkillSessionState, env?: NodeJS.ProcessEnv): {
|
|
18
|
+
run: RunState;
|
|
19
|
+
sheet: RunSheet;
|
|
20
|
+
} | {
|
|
21
|
+
none: 'nothing' | 'failed' | 'skill' | 'unproven';
|
|
22
|
+
skillName?: string;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=run-verdict.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-verdict.d.ts","sourceRoot":"","sources":["../../src/trace/run-verdict.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAyB,OAAO,EAAU,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAoBhH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,cAAc,CAAC,GAAG,MAAM,EAAE,CAKvF;AAeD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAI3E;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAoC1F;AAmBD,WAAW;AACX,wBAAgB,WAAW,CAAC,EAAE,EAAE,iBAAiB,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG;IAAE,GAAG,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CA4B1L"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a run worked (design 4.2) and which run "save this" means (4.7).
|
|
3
|
+
* Re-exported from `runs.ts`, where the design names these functions.
|
|
4
|
+
*
|
|
5
|
+
* A run is a checked success when a check that fits its job passed, no step
|
|
6
|
+
* came after it, nothing broke after it, and the turn ended done. A push that
|
|
7
|
+
* moved the remote ref is a ship check (D56a), and a deploy seen still
|
|
8
|
+
* building after it undoes it.
|
|
9
|
+
*/
|
|
10
|
+
import { callText, endsInFailure, endsInQuestion, fallbackOnly } from './checks.js';
|
|
11
|
+
import { OFFER_FAMILIES } from './jobs.js';
|
|
12
|
+
import { runHelpers } from './run-calls.js';
|
|
13
|
+
import { joinCarriedSheet } from './run-join.js';
|
|
14
|
+
import { readRunSheet, writeRunSheet } from './run-sheets.js';
|
|
15
|
+
/** A real check passed: one not behind a fallback (D101). */
|
|
16
|
+
const realPass = (c) => c.check?.passed === true && !fallbackOnly(callText(c));
|
|
17
|
+
const SHIP_PROOF = new Set(['push', 'deploy', 'ls-remote']);
|
|
18
|
+
/**
|
|
19
|
+
* The families whose later unpassed check undoes check `k` (D56a): a push, a deploy or ls-remote is undone by
|
|
20
|
+
* a deploy or ls-remote after it that did not pass (still building, queued, not at the pushed commit).
|
|
21
|
+
* Tests and queries are steps, so condition 3 already covers them; npm-view is left as 4.2 has it.
|
|
22
|
+
*/
|
|
23
|
+
function proofFamilies(k, fits) {
|
|
24
|
+
if (!SHIP_PROOF.has(k))
|
|
25
|
+
return new Set();
|
|
26
|
+
return fits === null ? SHIP_PROOF : new Set(fits.filter((f) => SHIP_PROOF.has(f)));
|
|
27
|
+
}
|
|
28
|
+
/** The ship vocabulary's branch words (jobs.ts: production is canonical prod). */
|
|
29
|
+
const SHIP_BRANCH_WORDS = { beta: ['beta'], prod: ['prod', 'production'], staging: ['staging'] };
|
|
30
|
+
/**
|
|
31
|
+
* D64: the branches a ship ask named: its beta, prod (prod or production) and staging words, and a branch
|
|
32
|
+
* name typed in it (`promptParams.branch`, "push branch wa-cutover to beta"). Empty when it named none.
|
|
33
|
+
*/
|
|
34
|
+
export function shipBranches(run) {
|
|
35
|
+
const out = run.jobWords.flatMap((w) => SHIP_BRANCH_WORDS[w] ?? []);
|
|
36
|
+
const typed = run.promptParams.branch;
|
|
37
|
+
if (typed && !out.includes(typed))
|
|
38
|
+
out.push(typed);
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Whether a passing check proves the run's job (4.2 condition 2). D64: for ship, a push proves it only when
|
|
43
|
+
* it moved a branch the ask named; a push of any other branch (a side branch after the prod push was
|
|
44
|
+
* refused) is no ship check.
|
|
45
|
+
*/
|
|
46
|
+
function fitsJob(run, ch, fits) {
|
|
47
|
+
if (fits === null)
|
|
48
|
+
return true;
|
|
49
|
+
if (!fits.includes(ch.family))
|
|
50
|
+
return false;
|
|
51
|
+
if (run.job !== 'ship' || ch.family !== 'push')
|
|
52
|
+
return true;
|
|
53
|
+
const branch = ch.facts.branch;
|
|
54
|
+
return branch !== undefined && shipBranches(run).includes(branch);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The run's essential steps (D58a/b), which conditions 3 to 5 and leg A read: step calls in the checkout of
|
|
58
|
+
* the run's own repo. A step in another repo or a scratch folder is left out of the skill, so it neither
|
|
59
|
+
* covers, breaks nor ends the job. A run with no step in its repo (a session outside git) keeps every step.
|
|
60
|
+
*/
|
|
61
|
+
export function essentialSteps(calls, repoKey) {
|
|
62
|
+
const steps = calls.filter((c) => c.kind === 'step');
|
|
63
|
+
const inRepo = steps.filter((c) => c.key === repoKey && c.cwd !== null);
|
|
64
|
+
return inRepo.length ? inRepo : steps;
|
|
65
|
+
}
|
|
66
|
+
/** 4.2. lastAssistant null: judge the end from run.end as the last Stop computed it. */
|
|
67
|
+
export function checkedSuccess(run, lastAssistant) {
|
|
68
|
+
const calls = run.calls;
|
|
69
|
+
const essential = essentialSteps(calls, run.repoKey);
|
|
70
|
+
let end;
|
|
71
|
+
if (essential[essential.length - 1]?.failed)
|
|
72
|
+
end = 'failure';
|
|
73
|
+
else if (lastAssistant === null)
|
|
74
|
+
end = run.end;
|
|
75
|
+
else if (endsInFailure(lastAssistant))
|
|
76
|
+
end = 'failure';
|
|
77
|
+
else if (endsInQuestion(lastAssistant))
|
|
78
|
+
end = 'question';
|
|
79
|
+
else
|
|
80
|
+
end = 'done';
|
|
81
|
+
if (run.job === 'pr-green' || run.job === 'sweep')
|
|
82
|
+
return { checked: false, checkIndex: null, end, why: 'judgement' };
|
|
83
|
+
if (run.job === 'run-local')
|
|
84
|
+
return { checked: false, checkIndex: null, end, why: 'no-check-for-job' };
|
|
85
|
+
const fits = run.job === null ? null : OFFER_FAMILIES[run.job] ?? [];
|
|
86
|
+
let k = -1;
|
|
87
|
+
for (let i = calls.length - 1; i >= 0; i--) {
|
|
88
|
+
const ch = calls[i].check;
|
|
89
|
+
// D101: a pass that may come only from an `|| echo` / `|| true` fallback (stored by an older fold) is no check.
|
|
90
|
+
if (ch?.passed && fitsJob(run, ch, fits) && !fallbackOnly(callText(calls[i]))) {
|
|
91
|
+
k = i;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (k < 0) {
|
|
96
|
+
const passed = calls.some(realPass);
|
|
97
|
+
return { checked: false, checkIndex: null, end, why: passed ? 'check-misfit' : 'no-check' };
|
|
98
|
+
}
|
|
99
|
+
// D116 item 3: after a go-ahead to a turn that ended in failure, only a check from then on checks the run out.
|
|
100
|
+
if (run.failedTurn !== undefined && k < run.failedTurn)
|
|
101
|
+
return { checked: false, checkIndex: null, end, why: 'failed-turn' };
|
|
102
|
+
const kept = new Set(essential);
|
|
103
|
+
const after = calls.slice(k + 1).filter((c) => kept.has(c));
|
|
104
|
+
if (after.some((c) => c.failed))
|
|
105
|
+
return { checked: false, checkIndex: null, end, why: 'failed-after-check' };
|
|
106
|
+
if (after.length)
|
|
107
|
+
return { checked: false, checkIndex: null, end, why: 'step-after-check' };
|
|
108
|
+
// D56a: a later check of the same proof that did not pass (a deploy still building after the push) undoes it.
|
|
109
|
+
const proof = proofFamilies(calls[k].check.family, fits);
|
|
110
|
+
if (calls.slice(k + 1).some((c) => c.check && !c.check.passed && proof.has(c.check.family))) {
|
|
111
|
+
return { checked: false, checkIndex: null, end, why: 'unpassed-after-check' };
|
|
112
|
+
}
|
|
113
|
+
if (end !== 'done')
|
|
114
|
+
return { checked: false, checkIndex: k, end, why: `end-${end}` };
|
|
115
|
+
return { checked: true, checkIndex: k, end };
|
|
116
|
+
}
|
|
117
|
+
const ECHO_FALLBACK = /\|\|\s*[({]?\s*(?:echo|printf)(?![\w.-])/;
|
|
118
|
+
/**
|
|
119
|
+
* D101 item 5: the run's success may come only from fallbacks. Its last essential step ends in an `|| echo` /
|
|
120
|
+
* `|| printf` (that echo is usually the failure's own message: "docker not running"), or every essential step ends
|
|
121
|
+
* in a fallback, and no real check passed. A cleanup's `|| true` after real work is fine.
|
|
122
|
+
*/
|
|
123
|
+
function unproven(calls, repoKey) {
|
|
124
|
+
if (calls.some(realPass))
|
|
125
|
+
return false;
|
|
126
|
+
const steps = essentialSteps(calls, repoKey);
|
|
127
|
+
const last = steps[steps.length - 1];
|
|
128
|
+
if (!last)
|
|
129
|
+
return false;
|
|
130
|
+
const text = callText(last);
|
|
131
|
+
if (fallbackOnly(text) && ECHO_FALLBACK.test(text))
|
|
132
|
+
return true;
|
|
133
|
+
return steps.every((c) => fallbackOnly(callText(c)));
|
|
134
|
+
}
|
|
135
|
+
/** 4.7. */
|
|
136
|
+
export function lastGoodRun(st, env) {
|
|
137
|
+
let run;
|
|
138
|
+
for (let i = st.runs.length - 1; i >= 0; i--) {
|
|
139
|
+
const r = st.runs[i];
|
|
140
|
+
if (r.epoch === st.epoch && r.stepCalls > 0) {
|
|
141
|
+
run = r;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (!run)
|
|
146
|
+
return { none: 'nothing' };
|
|
147
|
+
if (run.skillId) {
|
|
148
|
+
const name = [...st.injected].reverse().find((i) => i.skillId === run.skillId)?.name;
|
|
149
|
+
return name ? { none: 'skill', skillName: name } : { none: 'skill' };
|
|
150
|
+
}
|
|
151
|
+
const meta = { host: st.host, tier: st.tier, sessionHash: st.sessionHash };
|
|
152
|
+
let sheet = null;
|
|
153
|
+
if (run.calls.length) {
|
|
154
|
+
const steps = essentialSteps(run.calls, run.repoKey);
|
|
155
|
+
if (steps[steps.length - 1]?.failed || run.end === 'failure')
|
|
156
|
+
return { none: 'failed' };
|
|
157
|
+
if (unproven(run.calls, run.repoKey))
|
|
158
|
+
return { none: 'unproven' };
|
|
159
|
+
sheet = run.sheet !== 'none' && run.closed ? readRunSheet(run.id, env) : null;
|
|
160
|
+
if (!sheet)
|
|
161
|
+
sheet = writeRunSheet(run, checkedSuccess(run, null), { ...meta, helpers: runHelpers(run) }, env);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
sheet = readRunSheet(run.id, env);
|
|
165
|
+
if (!sheet)
|
|
166
|
+
return { none: 'nothing' };
|
|
167
|
+
const steps = essentialSteps(sheet.calls, sheet.repoKey);
|
|
168
|
+
if (steps[steps.length - 1]?.failed || sheet.end === 'failure' || run.end === 'failure')
|
|
169
|
+
return { none: 'failed' };
|
|
170
|
+
if (unproven(sheet.calls, sheet.repoKey))
|
|
171
|
+
return { none: 'unproven' };
|
|
172
|
+
}
|
|
173
|
+
// A run a compaction cut (D59a): the draft and the save copy the whole job, its earlier parts first.
|
|
174
|
+
return { run, sheet: joinCarriedSheet(sheet, (id) => readRunSheet(id, env)) };
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=run-verdict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-verdict.js","sourceRoot":"","sources":["../../src/trace/run-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { TraceEvent } from './claude.js';
|
|
2
|
+
import type { PostMark } from './gate-file.js';
|
|
3
|
+
import type { RunEnd, RunState, SkillSessionState, TypedAnswer } from './types.js';
|
|
4
|
+
export { findPriorSheet, pruneRunSheets, readRunSheet, runSheetPath, writeRunSheet } from './run-sheets.js';
|
|
5
|
+
export { MAX_CARRY_HOPS, joinCarriedSheet } from './run-join.js';
|
|
6
|
+
export { runHelpers } from './run-calls.js';
|
|
7
|
+
export { cutAtCompaction } from './run-turns.js';
|
|
8
|
+
export { checkedSuccess, lastGoodRun } from './run-verdict.js';
|
|
9
|
+
export interface FoldContext {
|
|
10
|
+
sessionHash: string;
|
|
11
|
+
checkout: string;
|
|
12
|
+
/** Cached repoPlace(path).key for a folder inside git; null outside git. */
|
|
13
|
+
repoKeyOf(path: string): string | null;
|
|
14
|
+
/** Cached repoPlace(path).checkout for a folder inside git (the root `cwd` is relative to); null outside git. Defaults to `checkout` for its key. */
|
|
15
|
+
rootOf?(path: string): string | null;
|
|
16
|
+
/** The session's repo key (GateCtx.repoKey): a run with no step calls in git is put down to it. */
|
|
17
|
+
repoKey?: string;
|
|
18
|
+
trailHome: string;
|
|
19
|
+
transcriptPath: string;
|
|
20
|
+
/** From takePostMarks: outcomes for calls whose result the transcript doesn't have yet (3.4). */
|
|
21
|
+
marks: PostMark[];
|
|
22
|
+
now: Date;
|
|
23
|
+
}
|
|
24
|
+
export interface FoldResult {
|
|
25
|
+
closed: RunState[];
|
|
26
|
+
lastAssistant: string;
|
|
27
|
+
compactions: number;
|
|
28
|
+
/** Every typed event folded, as hashes and labels only (never stored). The gate reads these. */
|
|
29
|
+
typed: Array<{
|
|
30
|
+
offset: number;
|
|
31
|
+
at: string;
|
|
32
|
+
sha: string;
|
|
33
|
+
answer: TypedAnswer;
|
|
34
|
+
save: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
export interface CheckedVerdict {
|
|
38
|
+
checked: boolean;
|
|
39
|
+
checkIndex: number | null;
|
|
40
|
+
end: RunEnd;
|
|
41
|
+
why?: string;
|
|
42
|
+
}
|
|
43
|
+
/** 'r-' + MMDD + '-' + 4 hex. */
|
|
44
|
+
export declare function newRunId(now?: Date): string;
|
|
45
|
+
/**
|
|
46
|
+
* A run id no one holds: 4 hex a day is 65,536 ids shared by every session, so a new one is drawn until
|
|
47
|
+
* `taken` (a run in this session, or a sheet on disk from any session) says it is free; after 64 tries, any.
|
|
48
|
+
*/
|
|
49
|
+
export declare function freshRunId(now: Date, taken: (id: string) => boolean): string;
|
|
50
|
+
/** toolCalls >= 5 or failedCount >= 1. */
|
|
51
|
+
export declare function costly(run: RunState): boolean;
|
|
52
|
+
/** Folds new events into the session's runs (4.1). Mutates st. */
|
|
53
|
+
export declare function foldEvents(st: SkillSessionState, events: TraceEvent[], ctx: FoldContext): FoldResult;
|
|
54
|
+
//# sourceMappingURL=runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/trace/runs.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAW9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,OAAO,KAAK,EAAmC,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGpH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,qJAAqJ;IACrJ,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACrC,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,iGAAiG;IACjG,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,GAAG,EAAE,IAAI,CAAC;CACX;AACD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC/F;AACD,MAAM,WAAW,cAAc;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;AAW1G,iCAAiC;AACjC,wBAAgB,QAAQ,CAAC,GAAG,GAAE,IAAiB,GAAG,MAAM,CAGvD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAI5E;AAOD,0CAA0C;AAC1C,wBAAgB,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAE7C;AAiBD,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU,CA0WpG"}
|