@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,488 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compile: from a run sheet to a skill (design 4.5, spec 10's copy rules).
|
|
3
|
+
*
|
|
4
|
+
* Deterministic and model-free: the same sheet, prior sheet and options give
|
|
5
|
+
* the same file. Every step is a command that ran and worked in the run,
|
|
6
|
+
* copied, then cleaned the same way every time: output filters, trailing
|
|
7
|
+
* echoes, a leading sleep and (on macOS) `timeout` dropped; its folder named
|
|
8
|
+
* as `(cd sub && ...)`; repo paths relative and home paths `$HOME`; a poll
|
|
9
|
+
* folded into one wait loop of at most 5 minutes; values that change become
|
|
10
|
+
* {params}. A step Trail can't keep safely (a secret it can't name, a scratch
|
|
11
|
+
* path, sudo, a credential file, more than one line ...) refuses the whole
|
|
12
|
+
* skill, with the reason in plain words: a skill missing a step is worse than
|
|
13
|
+
* no skill.
|
|
14
|
+
*
|
|
15
|
+
* Reads only the helper scripts a run executed from scratch folders (4.5
|
|
16
|
+
* step 7), to copy them in, and the earlier parts of a run a compaction cut
|
|
17
|
+
* (D59a, `joinCarriedSheet`). Writes nothing: the store saves.
|
|
18
|
+
*/
|
|
19
|
+
import { createHash } from 'node:crypto';
|
|
20
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
21
|
+
import { basename, extname } from 'node:path';
|
|
22
|
+
import { bareCommand, leadingCds, normalizeCommand, programOf, relativizePaths, simpleCommands, stripLeadingSleep, stripOutputFilters, stripTimeout, stripTrailingEcho } from '../trace/shell.js';
|
|
23
|
+
import { callText, checkFamilyOf, fallbackOnly } from '../trace/checks.js';
|
|
24
|
+
import { JUDGEMENT_JOBS } from '../trace/jobs.js';
|
|
25
|
+
import { essentialSteps } from '../trace/run-verdict.js';
|
|
26
|
+
import { joinCarriedSheet } from '../trace/run-join.js';
|
|
27
|
+
import { cleanLine } from '../trace/redact.js';
|
|
28
|
+
import { secretReason } from '../notes/secrets.js';
|
|
29
|
+
import { MAX_RUN_LINES, MAX_STEP_CHARS, gatedKind } from './risk.js';
|
|
30
|
+
import { literalPassword, neverSave } from './never-save.js';
|
|
31
|
+
import { STABLE_BRANCHES, findParams, paramsToMeta } from './params.js';
|
|
32
|
+
import { renderSkillMd } from './skillmd.js';
|
|
33
|
+
import { skillProblems } from './validate.js';
|
|
34
|
+
import { askPhrases, askedJob, carriedSteps, describe, elsewhereLines, freeName, goodName, jobWords, toolCheckWords } from './compile-words.js';
|
|
35
|
+
import { WIN_TEMP, splitSheet, stripScratchLog } from './compile-split.js';
|
|
36
|
+
import { answersPrompt, loginFeed } from './answers-prompt.js';
|
|
37
|
+
import { checkShowsFor, shownVersion, versionShaped, versionTie } from './compile-version.js';
|
|
38
|
+
import { findWaits } from './compile-waits.js';
|
|
39
|
+
export { BUILT_IN_NAMES, NAME_RE, askPhrases, draftText, proposeName, refusalWords } from './compile-words.js';
|
|
40
|
+
class Refused extends Error {
|
|
41
|
+
reason;
|
|
42
|
+
detail;
|
|
43
|
+
constructor(reason, detail) {
|
|
44
|
+
super(reason);
|
|
45
|
+
this.reason = reason;
|
|
46
|
+
this.detail = detail;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const refuse = (reason, detail = '') => { throw new Refused(reason, detail); };
|
|
50
|
+
const excerpt = (t, max = 80) => cleanLine(String(t ?? '').split('\n')[0], max) ?? 'a command';
|
|
51
|
+
/** Where the skill's own folder goes in a copied helper's path, until the name is known. */
|
|
52
|
+
const SKILL_DIR = '\u0000skill\u0000';
|
|
53
|
+
const HELPER_MAX_BYTES = 16 * 1024;
|
|
54
|
+
const HELPER_MAX_LINES = 200;
|
|
55
|
+
const WAIT_TAIL = 'do [ $((SECONDS-s)) -ge 300 ] && echo "not ready after 5 min" && break; sleep 10; done';
|
|
56
|
+
const PROBE = /^(?:command -v [\w.+-]+|test -[SfdeE] \S+|\[ -S \S+ \]|git rev-parse --verify \S+)$/;
|
|
57
|
+
const PORCELAIN = 'git status --porcelain';
|
|
58
|
+
const CHECK_FIRST = /^(?:npm whoami|gh auth status|aws sts get-caller-identity|gcloud auth list|vercel whoami|docker info|colima status)(?:\s+-{1,2}[\w-]+(?:[= ]\S+)?)*$/;
|
|
59
|
+
/** A token that is a scratch path: /tmp, /private/tmp, /var/folders, $TMPDIR, a scratchpad segment, or Windows' temp folder. */
|
|
60
|
+
const SCRATCH = new RegExp(String.raw `(?<![\w.~$-])(?:\/private)?\/(?:tmp|var\/folders)\/[^\s'"\`;|&()<>,]*|\$\{?TMPDIR\}?[^\s'"\`;|&()<>,]*|[^\s'"\`;|&()<>,=]*[\\/]scratchpad[\\/][^\s'"\`;|&()<>,]*|${WIN_TEMP}[^\s'"\`;|&()<>,]*`, 'g');
|
|
61
|
+
const PLAIN = /^(?:npm (?:run )?[\w:.-]+|pnpm (?:run )?[\w:.-]+|yarn (?:run )?[\w:.-]+|make [\w.-]+|go test \.\/\.\.\.)$/;
|
|
62
|
+
/** 4.5 step 8, plus leading cds gone (the folder is the call's cwd). */
|
|
63
|
+
function cleanText(cmd, platform) {
|
|
64
|
+
let s = cmd.replace(/\\\r?\n[ \t]*/g, ' ').trim();
|
|
65
|
+
s = leadingCds(s).rest || s;
|
|
66
|
+
for (let n = 0; n < 10; n++) {
|
|
67
|
+
let next = stripTrailingEcho(stripOutputFilters(stripScratchLog(s)));
|
|
68
|
+
next = stripLeadingSleep(next);
|
|
69
|
+
if (platform === 'darwin')
|
|
70
|
+
next = stripTimeout(next);
|
|
71
|
+
if (next === s)
|
|
72
|
+
break;
|
|
73
|
+
s = next;
|
|
74
|
+
}
|
|
75
|
+
return s;
|
|
76
|
+
}
|
|
77
|
+
const quoteDir = (cwd) => (/^[\w./@+-]+$/.test(cwd) ? cwd : `'${cwd.replace(/'/g, `'\\''`)}'`);
|
|
78
|
+
const inFolder = (cwd, cmd) => (cwd ? `(cd ${quoteDir(cwd)} && ${cmd})` : cmd);
|
|
79
|
+
function planCalls(sheet, ci, checkIsStep, platform, loops) {
|
|
80
|
+
const calls = sheet.calls;
|
|
81
|
+
const roles = calls.map(() => 'left');
|
|
82
|
+
const waits = findWaits(calls, ci, sheet.job);
|
|
83
|
+
for (const [L, w] of waits) {
|
|
84
|
+
for (const e of w.polls)
|
|
85
|
+
roles[e] = 'poll';
|
|
86
|
+
if (L !== ci)
|
|
87
|
+
roles[L] = 'wait';
|
|
88
|
+
}
|
|
89
|
+
// D58 d: a polling loop that worked is a wait on the command it polled.
|
|
90
|
+
calls.forEach((c, i) => {
|
|
91
|
+
const w = loops.get(c);
|
|
92
|
+
if (!w || i === ci || roles[i] === 'poll' || c.failed)
|
|
93
|
+
return;
|
|
94
|
+
roles[i] = 'wait';
|
|
95
|
+
waits.set(i, { token: w.token, polls: [], ...(w.whileOk ? { whileOk: true } : {}), loop: true });
|
|
96
|
+
});
|
|
97
|
+
const probes = [];
|
|
98
|
+
const checkFirst = [];
|
|
99
|
+
calls.forEach((c, i) => {
|
|
100
|
+
if (roles[i] !== 'left')
|
|
101
|
+
return;
|
|
102
|
+
if (i === ci) {
|
|
103
|
+
roles[i] = checkIsStep ? 'step' : 'check';
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (c.failed) {
|
|
107
|
+
roles[i] = 'failed';
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const text = c.cmd === null ? '' : cleanText(c.cmd, platform);
|
|
111
|
+
if ((text === PORCELAIN || PROBE.test(text)) && !(c.cwd === null && text.startsWith('git '))) {
|
|
112
|
+
roles[i] = 'probe';
|
|
113
|
+
probes.push({ i, text });
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (CHECK_FIRST.test(text)) {
|
|
117
|
+
roles[i] = 'checkFirst';
|
|
118
|
+
checkFirst.push({ i, text });
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (c.kind === 'step')
|
|
122
|
+
roles[i] = 'step';
|
|
123
|
+
});
|
|
124
|
+
return { roles, waits, probes, checkFirst };
|
|
125
|
+
}
|
|
126
|
+
/** Is `path` the script this command executes (`bash|sh|zsh|node|python3? <path>` or `<path>` alone)? */
|
|
127
|
+
function executes(text, path) {
|
|
128
|
+
const un = (w) => w.replace(/^(['"])(.*)\1$/, '$2');
|
|
129
|
+
return simpleCommands(text).some((simple) => {
|
|
130
|
+
const w = bareCommand(simple).split(/\s+/).map(un);
|
|
131
|
+
if (w[0] === path)
|
|
132
|
+
return true;
|
|
133
|
+
if (!/^(?:(?:ba|z|da)?sh|node|python3?|bun|deno)$/.test(basename(w[0] ?? '')))
|
|
134
|
+
return false;
|
|
135
|
+
return w.slice(1).find((a) => !a.startsWith('-')) === path;
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/** 4.5 step 7: scratch paths; a helper script that ran is copied in, anything else refuses. Then repo and home paths. */
|
|
139
|
+
function paths(text, sheet, opts, helpers, strict) {
|
|
140
|
+
let gated = null;
|
|
141
|
+
const out = text.replace(SCRATCH, (p) => {
|
|
142
|
+
if (!executes(text, p) || !sheet.helpers.includes(p))
|
|
143
|
+
return strict ? refuse('scratch-path', p) : p;
|
|
144
|
+
let content;
|
|
145
|
+
try {
|
|
146
|
+
if (!statSync(p).isFile())
|
|
147
|
+
throw new Error('not a file');
|
|
148
|
+
content = readFileSync(p, 'utf8');
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return strict ? refuse('helper-missing', p) : p;
|
|
152
|
+
}
|
|
153
|
+
const lines = content.replace(/\n$/, '').split('\n');
|
|
154
|
+
// Read whole too, its `\`-continued lines joined: `curl … \` then `| sh` is one command.
|
|
155
|
+
const whole = content.replace(/\\\r?\n/g, ' ');
|
|
156
|
+
if (Buffer.byteLength(content) > HELPER_MAX_BYTES || lines.length > HELPER_MAX_LINES || secretReason(content) !== null
|
|
157
|
+
|| literalPassword(whole) || neverSave(whole) !== null || lines.some((l) => neverSave(l) !== null)) {
|
|
158
|
+
return strict ? refuse('scratch-path', `${p} (too big, or unsafe to copy)`) : p;
|
|
159
|
+
}
|
|
160
|
+
gated ??= lines.map((l) => gatedKind(l)).find((k) => k !== null) ?? gatedKind(whole);
|
|
161
|
+
let file = basename(p);
|
|
162
|
+
const clash = helpers.find((h) => h.file === file && h.from !== p);
|
|
163
|
+
if (clash)
|
|
164
|
+
file = `${basename(p, extname(p))}-${helpers.length + 1}${extname(p)}`;
|
|
165
|
+
if (!helpers.some((h) => h.from === p))
|
|
166
|
+
helpers.push({ file, from: p, content });
|
|
167
|
+
return `$HOME/.trail/skills/${SKILL_DIR}/scripts/${helpers.find((h) => h.from === p).file}`;
|
|
168
|
+
});
|
|
169
|
+
return { text: relativizePaths(out, opts.repoRoot, opts.home), gated };
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Steps 2 and 4 to 9 for one sheet, its multi-line calls read line by line (compile-split.ts).
|
|
173
|
+
* strict: refuse; not strict (a prior run, for varied params): skip what can't be kept.
|
|
174
|
+
*/
|
|
175
|
+
function keptSteps(input, opts, strict) {
|
|
176
|
+
// D58 a/b: the steps the run verdict reads (run-verdict.ts `essentialSteps`) are the only ones that can be
|
|
177
|
+
// in the skill; a call in another checkout (its own key) ran elsewhere, like one outside any repo.
|
|
178
|
+
const essential = new Set(essentialSteps(input.calls, input.repoKey));
|
|
179
|
+
const away = (c) => c.cwd !== null && (c.key !== input.repoKey || (c.kind === 'step' && !essential.has(c)));
|
|
180
|
+
const placed = { ...input, calls: input.calls.map((c) => (away(c) ? { ...c, cwd: null } : c)) };
|
|
181
|
+
const { sheet, blocked, waits: loops, parts } = splitSheet(placed, opts);
|
|
182
|
+
const calls = sheet.calls;
|
|
183
|
+
// D101: a call that may pass only through its `|| echo` / `|| true` fallback is never taken as the check.
|
|
184
|
+
const ci = sheet.checkIndex !== null && sheet.checkIndex >= 0 && sheet.checkIndex < calls.length && !fallbackOnly(callText(calls[sheet.checkIndex])) ? sheet.checkIndex : null;
|
|
185
|
+
const checkCall = ci === null ? null : calls[ci];
|
|
186
|
+
const checkFam = checkCall ? (checkCall.check?.family ?? (checkCall.cmd ? checkFamilyOf(checkCall.cmd, sheet.job) : null)) : null;
|
|
187
|
+
// A push that moved the branch (D56a) is a step that doubles as the check, like tests and queries.
|
|
188
|
+
const checkIsStep = checkFam === 'tests' || checkFam === 'query' || checkFam === 'push';
|
|
189
|
+
const plan = planCalls(sheet, ci, checkIsStep, opts.platform, loops);
|
|
190
|
+
const helpers = [];
|
|
191
|
+
const guard = (fn) => {
|
|
192
|
+
if (strict)
|
|
193
|
+
return fn();
|
|
194
|
+
try {
|
|
195
|
+
return fn();
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
if (e instanceof Refused)
|
|
199
|
+
return null;
|
|
200
|
+
throw e;
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
// Step 2: what each kept call is. D58 b: a step that ran outside the repo is left out (and listed), not refused.
|
|
204
|
+
const raw = plan.roles.flatMap((r, i) => (r === 'step' || r === 'wait' ? [i] : []));
|
|
205
|
+
const elsewhere = [];
|
|
206
|
+
const logins = [];
|
|
207
|
+
const usable = (i) => guard(() => {
|
|
208
|
+
const c = calls[i];
|
|
209
|
+
if (c.cwd === null && i !== ci) {
|
|
210
|
+
elsewhere.push(c);
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
// A long call from before its pieces were kept; a long call whose piece held a secret Trail couldn't name (D58 c).
|
|
214
|
+
if (c.truncated && !c.parts)
|
|
215
|
+
refuse('truncated', excerpt(c.cmd));
|
|
216
|
+
if (c.cmd === null || c.secret === 'refused')
|
|
217
|
+
refuse('secret');
|
|
218
|
+
// D116 item 5: keystrokes fed into a login alone: the step goes, and the login is the person's, before they start.
|
|
219
|
+
const feed = c.loginFeed ? { service: c.loginFeed, login: c.cmd ?? '' } : loginFeed(c.cmd ?? '');
|
|
220
|
+
if (feed) {
|
|
221
|
+
logins.push(feed);
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
// D101: keystrokes fed into a login or publish prompt answer the person's own confirmation.
|
|
225
|
+
if (answersPrompt(c.cmd ?? ''))
|
|
226
|
+
refuse('answers-prompt', excerpt(c.cmd));
|
|
227
|
+
const why = blocked.get(c);
|
|
228
|
+
if (why)
|
|
229
|
+
refuse('multi-line', `${why}: \`${excerpt(c.cmd)}\``);
|
|
230
|
+
if (c.multiLine) {
|
|
231
|
+
const never = neverSave(c.cmd);
|
|
232
|
+
refuse(never ? 'never-save' : 'multi-line', never ? `${never}: \`${excerpt(c.cmd)}\`` : excerpt(c.cmd));
|
|
233
|
+
}
|
|
234
|
+
if (c.cwd === null)
|
|
235
|
+
refuse('outside-repo', excerpt(c.cmd));
|
|
236
|
+
return true;
|
|
237
|
+
});
|
|
238
|
+
let items = [];
|
|
239
|
+
for (const i of raw) {
|
|
240
|
+
if (!usable(i))
|
|
241
|
+
continue;
|
|
242
|
+
const c = calls[i];
|
|
243
|
+
items.push({ i, call: c, core: '', text: '', bg: c.bg, wait: plan.roles[i] === 'wait', from: [c.id], gated: null, isCheck: i === ci });
|
|
244
|
+
}
|
|
245
|
+
// D59b: a deploy status read over MCP has no command to copy; build() words it.
|
|
246
|
+
const checkOk = checkCall && !checkIsStep ? (checkCall.tool ? true : usable(ci)) : null;
|
|
247
|
+
// Step 4: a repeat keeps its last run, with every id.
|
|
248
|
+
let duplicates = 0;
|
|
249
|
+
const keyOf = (it) => `${it.call.cwd}\u0000${normalizeCommand(it.call.cmd)}`;
|
|
250
|
+
items = items.filter((it, k) => {
|
|
251
|
+
if (it.wait)
|
|
252
|
+
return true;
|
|
253
|
+
const later = items.slice(k + 1).find((b) => !b.wait && keyOf(b) === keyOf(it));
|
|
254
|
+
if (!later)
|
|
255
|
+
return true;
|
|
256
|
+
later.from = [...new Set([...it.from, ...later.from])];
|
|
257
|
+
duplicates++;
|
|
258
|
+
return false;
|
|
259
|
+
});
|
|
260
|
+
// Steps 6 to 9: folder, paths, text, risk.
|
|
261
|
+
const shape = (c, wait) => {
|
|
262
|
+
// A loop's poll keeps its output filters: the value it waited for is what they printed.
|
|
263
|
+
let core = wait?.loop ? c.cmd.trim() : cleanText(c.cmd, opts.platform);
|
|
264
|
+
let bg = c.bg;
|
|
265
|
+
if (/(?<![&|>])&\s*$/.test(core)) {
|
|
266
|
+
core = core.replace(/\s*&\s*$/, '');
|
|
267
|
+
bg = true;
|
|
268
|
+
}
|
|
269
|
+
const p = paths(core, sheet, opts, helpers, strict);
|
|
270
|
+
core = p.text;
|
|
271
|
+
const text = inFolder(c.cwd ?? '', core);
|
|
272
|
+
if (text.length > MAX_STEP_CHARS)
|
|
273
|
+
refuse('step-too-long', excerpt(text));
|
|
274
|
+
let final = text;
|
|
275
|
+
if (wait) {
|
|
276
|
+
final = wait.token !== null
|
|
277
|
+
? `s=$SECONDS; until [ "$(${c.cwd ? `cd ${quoteDir(c.cwd)} && ${core}` : core})" = "${wait.token}" ]; ${WAIT_TAIL}`
|
|
278
|
+
: `s=$SECONDS; ${wait.whileOk ? 'while' : 'until'} ${text} >/dev/null 2>&1; ${WAIT_TAIL}`;
|
|
279
|
+
}
|
|
280
|
+
const why = neverSave(final);
|
|
281
|
+
if (why)
|
|
282
|
+
refuse('never-save', `${why}: \`${excerpt(core)}\``);
|
|
283
|
+
if (literalPassword(final))
|
|
284
|
+
refuse('secret');
|
|
285
|
+
return { core, text: final, bg: wait ? false : bg, gated: gatedKind(final) ?? p.gated };
|
|
286
|
+
};
|
|
287
|
+
items = items.filter((it) => guard(() => Object.assign(it, shape(it.call, it.wait ? plan.waits.get(it.i) : null))) !== null);
|
|
288
|
+
const check = checkCall && checkOk && !checkCall.tool ? guard(() => shape(checkCall, null)) : null;
|
|
289
|
+
return { sheet, items, check, checkCall, checkFam, checkIsStep, ci, plan, helpers, duplicates, elsewhere, parts, logins };
|
|
290
|
+
}
|
|
291
|
+
const BUG = (what) => refuse('never-save', `bug: ${what}`);
|
|
292
|
+
function build(sheet, opts) {
|
|
293
|
+
// Step 1.
|
|
294
|
+
if (sheet.job && JUDGEMENT_JOBS.has(sheet.job))
|
|
295
|
+
refuse('judgement', sheet.job);
|
|
296
|
+
// Deploy status reads (D59b) share the call cap but are not commands.
|
|
297
|
+
if (sheet.counts.commands > sheet.calls.filter((c) => !c.tool).length)
|
|
298
|
+
refuse('too-long', 'overflow');
|
|
299
|
+
if (opts.moment === 'repeated' && sheet.checkIndex === null)
|
|
300
|
+
refuse('no-check');
|
|
301
|
+
const k = keptSteps(sheet, opts, true);
|
|
302
|
+
if (opts.moment === 'repeated' && !k.checkCall)
|
|
303
|
+
refuse('no-check');
|
|
304
|
+
// Step 10: params, with the prior run's steps for what varied.
|
|
305
|
+
const prior = opts.prior ? keptSteps(opts.prior, opts, false).items.map((it) => it.text) : null;
|
|
306
|
+
const checkText = k.checkIsStep ? k.items.find((it) => it.isCheck)?.text : k.check?.text;
|
|
307
|
+
const found = findParams(k.items.map((it) => it.text), { prompt: sheet.promptParams ?? {}, prior, ...(checkText === undefined ? {} : { check: checkText }) });
|
|
308
|
+
// Params can hide a target (`rm -rf build-{arg1}`) or a branch (`git push origin {branch}`): read the steps again.
|
|
309
|
+
k.items.forEach((it, n) => {
|
|
310
|
+
const why = neverSave(found.cmds[n]);
|
|
311
|
+
if (why)
|
|
312
|
+
refuse('never-save', `${why}: \`${excerpt(found.cmds[n])}\``);
|
|
313
|
+
it.gated ??= gatedKind(found.cmds[n]);
|
|
314
|
+
});
|
|
315
|
+
if (found.check !== undefined && neverSave(found.check))
|
|
316
|
+
refuse('never-save', excerpt(found.check));
|
|
317
|
+
// D106: a check that reads a version shows the {version} the steps use, or it could never pass.
|
|
318
|
+
const cc = k.checkCall;
|
|
319
|
+
const tie = cc && !k.checkIsStep && versionShaped(cc, k.checkFam)
|
|
320
|
+
? versionTie(k.items.map((it, n) => ({ cmd: found.cmds[n], cwd: it.call.cwd })), found.params, shownVersion(cc)) ?? refuse('no-check', 'version') : null;
|
|
321
|
+
if (tie)
|
|
322
|
+
found.params = tie.params;
|
|
323
|
+
// Step 12: size and worth. D58 b: at least one step inside the repo (the check, when there is one, too).
|
|
324
|
+
if (!k.items.length)
|
|
325
|
+
refuse(k.elsewhere.length ? 'outside-repo' : 'no-steps', k.elsewhere.length ? excerpt(k.elsewhere[0].cmd) : '');
|
|
326
|
+
// D51: a report whose query ran as an inline script has no step that makes the numbers.
|
|
327
|
+
if (sheet.job === 'report' && !k.items.some((it) => checkFamilyOf(it.call.cmd, 'report') === 'query'))
|
|
328
|
+
refuse('no-steps', 'report');
|
|
329
|
+
if (k.items.length > MAX_RUN_LINES)
|
|
330
|
+
refuse('too-long', String(k.items.length));
|
|
331
|
+
if (opts.moment === 'repeated' && sheet.counts.failed === 0) {
|
|
332
|
+
const plain = (t) => PLAIN.test(/^\(cd \S+ && (.*)\)$/.exec(t)?.[1] ?? t);
|
|
333
|
+
if (k.items.every((it) => !it.wait && !it.bg && plain(it.text)))
|
|
334
|
+
refuse('trivial', k.items.map((it) => it.text).join(' ; '));
|
|
335
|
+
}
|
|
336
|
+
// Step 13: name and words.
|
|
337
|
+
let steps = k.items.map((it, n) => ({ n: n + 1, cmd: found.cmds[n], gated: it.gated, bg: it.bg, wait: it.wait, from: it.from }));
|
|
338
|
+
const sourceCalls = k.items.map((it) => it.call);
|
|
339
|
+
const main = k.checkIsStep && found.check !== undefined ? { main: found.check } : {};
|
|
340
|
+
// D99: an asked save whose run's asks gave no job takes it from the save request or the run's commands, so a
|
|
341
|
+
// release is `release-npm`, never named after its first step (`git-fetch`).
|
|
342
|
+
const job = sheet.job ?? (opts.moment === 'asked' ? askedJob(opts.askedWith, steps, sourceCalls, k.checkFam) : null);
|
|
343
|
+
const asked = job === null && opts.moment === 'asked' ? { asked: askPhrases(opts.askedWith) } : {};
|
|
344
|
+
const words = jobWords({ ...sheet, job }, steps, { calls: sourceCalls, helperText: k.helpers.map((h) => h.content).join('\n'), ...main, ...asked });
|
|
345
|
+
const name = opts.name && goodName(opts.name) && !opts.taken(opts.name) ? opts.name : freeName(words.base, sheet.repoKey, opts.taken);
|
|
346
|
+
const named = (t) => t.split(SKILL_DIR).join(name);
|
|
347
|
+
steps = steps.map((s) => ({ ...s, cmd: named(s.cmd) }));
|
|
348
|
+
const tool = k.checkCall?.tool;
|
|
349
|
+
const check = tool ? toolCheckWords(tool, k.checkCall.check?.facts ?? {}, found.params) : found.check === undefined ? '' : named(found.check);
|
|
350
|
+
// Step 11: ready, check first, needs.
|
|
351
|
+
const shipping = job === 'ship' || job === 'release';
|
|
352
|
+
const ready = [];
|
|
353
|
+
if (shipping || k.plan.probes.some((p) => p.text === PORCELAIN))
|
|
354
|
+
ready.push(PORCELAIN);
|
|
355
|
+
if (shipping && sheet.branch && STABLE_BRANCHES.has(sheet.branch))
|
|
356
|
+
ready.push(`git rev-parse --abbrev-ref HEAD = ${sheet.branch}`);
|
|
357
|
+
for (const p of k.plan.probes) {
|
|
358
|
+
const t = relativizePaths(p.text, opts.repoRoot, opts.home);
|
|
359
|
+
if (p.text !== PORCELAIN && !SCRATCH_ONE.test(t) && !ready.includes(t))
|
|
360
|
+
ready.push(t);
|
|
361
|
+
}
|
|
362
|
+
const checkFirst = [...new Set(k.plan.checkFirst.map((c) => relativizePaths(c.text, opts.repoRoot, opts.home)))].slice(0, 2);
|
|
363
|
+
const needs = [];
|
|
364
|
+
for (const core of [...k.items.map((it) => it.core), ...(k.check ? [k.check.core] : [])]) {
|
|
365
|
+
for (const simple of simpleCommands(core)) {
|
|
366
|
+
const w = bareCommand(simple).split(/\s+/)[0] ?? '';
|
|
367
|
+
if (/^[A-Za-z][\w.+-]*$/.test(w) && !NOT_NEEDS.has(w) && !needs.includes(w))
|
|
368
|
+
needs.push(w);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
// Step 14: If it fails.
|
|
372
|
+
const ifFails = failLines(k.sheet, opts, k.items, steps, checkFirst, found.params);
|
|
373
|
+
// Step 3: the check.
|
|
374
|
+
const checkShows = checkShowsFor(k.checkFam, k.checkCall, found.params, tie?.name ?? null);
|
|
375
|
+
const id = opts.id ?? `s-${createHash('sha256').update(`${sheet.id}|${name}`).digest('hex').slice(0, 6)}`;
|
|
376
|
+
const gatedTexts = steps.filter((s) => s.gated).map((s) => s.cmd);
|
|
377
|
+
const meta = {
|
|
378
|
+
trail: id, scope: 'personal', applies: opts.applies, ...(job ? { job } : {}), asks: words.asks.join(', '),
|
|
379
|
+
...(words.statusAsks.length ? { 'status-asks': words.statusAsks.join(', ') } : {}),
|
|
380
|
+
...(found.params.length ? { params: paramsToMeta(found.params) } : {}),
|
|
381
|
+
...(needs.length ? { needs: needs.slice(0, 6).join(', ') } : {}),
|
|
382
|
+
...(ready.length ? { ready: ready.slice(0, 3).join(' ; ') } : {}),
|
|
383
|
+
...(checkFirst.length ? { 'check-first': checkFirst.join(' ; ') } : {}),
|
|
384
|
+
...(k.logins.length ? { 'before-you-start': [...new Set(k.logins.map((l) => `the person is logged in to ${l.service}; they run ${l.login} themselves`))].join(' | ') } : {}),
|
|
385
|
+
...(gatedTexts.length ? { 'confirm-before': gatedTexts.join(' ; ') } : {}),
|
|
386
|
+
...(check ? { check } : {}),
|
|
387
|
+
...(check && checkShows ? { 'check-shows': checkShows } : {}),
|
|
388
|
+
...(tool ? { 'check-tool': tool.replace(/^mcp__.+__(?=[^_])/, '') } : {}),
|
|
389
|
+
version: '1',
|
|
390
|
+
};
|
|
391
|
+
// Every call not copied into a step, by what it was; steps that ran elsewhere are listed instead (D58 b).
|
|
392
|
+
const inSteps = new Set(steps.flatMap((s) => s.from ?? []));
|
|
393
|
+
const away = new Set(k.elsewhere.map((c) => c.id));
|
|
394
|
+
const leftOut = { failed: 0, lookOnly: 0, duplicates: k.duplicates, plumbing: 0, work: 0 };
|
|
395
|
+
sheet.calls.forEach((c, i) => {
|
|
396
|
+
if (c.tool)
|
|
397
|
+
return; // a deploy status read is not a command
|
|
398
|
+
// A piece too long to keep (D58 c) is work left out, even when the call's other pieces are steps.
|
|
399
|
+
const long = c.parts?.filter((p) => p.long).length ?? 0;
|
|
400
|
+
leftOut.work += long;
|
|
401
|
+
if (long && c.parts.every((p) => p.long))
|
|
402
|
+
return;
|
|
403
|
+
if (inSteps.has(c.id) || away.has(c.id))
|
|
404
|
+
return;
|
|
405
|
+
// A call read part by part counts as what its parts were (a heredoc that only wrote files is work, D51).
|
|
406
|
+
const kinds = (k.parts.get(c) ?? [c]).map((x) => x.kind);
|
|
407
|
+
if (c.failed && i !== sheet.checkIndex)
|
|
408
|
+
leftOut.failed++;
|
|
409
|
+
else if (kinds.every((x) => x === 'plumbing'))
|
|
410
|
+
leftOut.plumbing++;
|
|
411
|
+
else if (kinds.includes('work'))
|
|
412
|
+
leftOut.work++;
|
|
413
|
+
else
|
|
414
|
+
leftOut.lookOnly++;
|
|
415
|
+
});
|
|
416
|
+
// Step 15: assemble and check the file.
|
|
417
|
+
const c = {
|
|
418
|
+
name, title: words.title, description: describe(words.lead, sheet.endedAt, words.asks), meta, steps, check,
|
|
419
|
+
checkShows: check ? checkShows : null, checkIsStep: k.checkIsStep && !!check, ifFails, dontUse: words.dontUse, params: found.params,
|
|
420
|
+
helpers: k.helpers, leftOut, ...(k.elsewhere.length ? { elsewhere: elsewhereLines(k.elsewhere, sheet.repoKey, (t) => relativizePaths(cleanText(t, opts.platform), opts.repoRoot, opts.home)) } : {}),
|
|
421
|
+
...(sheet.joined?.length ? { carried: carriedSteps(sheet, steps) } : {}),
|
|
422
|
+
source: { runId: sheet.id, commands: sheet.counts.commands, failed: sheet.counts.failed, at: sheet.endedAt },
|
|
423
|
+
};
|
|
424
|
+
const text = renderSkillMd(c);
|
|
425
|
+
const problems = skillProblems(text, name);
|
|
426
|
+
if (problems.length)
|
|
427
|
+
BUG(problems[0]);
|
|
428
|
+
if (text.split('\n').length - 1 > 60)
|
|
429
|
+
BUG('more than 60 lines');
|
|
430
|
+
if (secretReason(text) !== null)
|
|
431
|
+
BUG('the file holds something that looks like a secret');
|
|
432
|
+
return c;
|
|
433
|
+
}
|
|
434
|
+
const SCRATCH_ONE = new RegExp(SCRATCH.source);
|
|
435
|
+
const NOT_NEEDS = new Set(['cd', 'export', 'source', 'echo', 'printf', 'sleep', 'true', 'false', 'pwd', 'set', 'unset', 'alias', 'wait', 'exit', 'return', 'test', 'until', 'while', 'if', 'for', 'do', 'done', 'then', 'fi', 'eval', 'exec', 'read', 'local', 'shift', 'trap', 'cat', 'ls', 'head', 'tail', 'grep']);
|
|
436
|
+
/** 4.5 step 14: a failure the run got past, and the step that got past it. At most 4 lines. */
|
|
437
|
+
function failLines(sheet, opts, items, steps, checkFirst, params) {
|
|
438
|
+
const out = [];
|
|
439
|
+
const add = (line) => { if (line && !out.includes(line) && out.length < 4)
|
|
440
|
+
out.push(line); };
|
|
441
|
+
const asParams = (t) => {
|
|
442
|
+
let s = relativizePaths(t, opts.repoRoot, opts.home);
|
|
443
|
+
for (const p of params)
|
|
444
|
+
for (const v of p.seen)
|
|
445
|
+
if (v && v.length >= 2)
|
|
446
|
+
s = s.replace(new RegExp(`(?<![\\w.-])${v.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?![\\w-]|\\.\\w)`, 'g'), `{${p.name}}`);
|
|
447
|
+
return s;
|
|
448
|
+
};
|
|
449
|
+
sheet.calls.forEach((f, i) => {
|
|
450
|
+
if (!f.failed || f.cmd === null || f.cwd === null)
|
|
451
|
+
return;
|
|
452
|
+
const text = cleanText(f.cmd, opts.platform);
|
|
453
|
+
const cf = checkFirst.find((c) => c.split(' ').slice(0, 2).join(' ') === text.split(' ').slice(0, 2).join(' '));
|
|
454
|
+
if (cf && CHECK_FIRST.test(text)) {
|
|
455
|
+
add(`\`${cf}\` said you're not signed in: sign in first (the person may need to do this part).`);
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
const prog = programOf(f.cmd);
|
|
459
|
+
if (!prog || !f.errorLine)
|
|
460
|
+
return;
|
|
461
|
+
const k = items.findIndex((it) => it.i > i && programOf(it.call.cmd) === prog);
|
|
462
|
+
if (k < 0)
|
|
463
|
+
return;
|
|
464
|
+
const s = items[k];
|
|
465
|
+
// The same command again: a retry, nothing to learn from it.
|
|
466
|
+
if (normalizeCommand(f.cmd) === normalizeCommand(s.call.cmd) && f.cwd === s.call.cwd)
|
|
467
|
+
return;
|
|
468
|
+
const err = asParams(f.errorLine);
|
|
469
|
+
if (SCRATCH_ONE.test(err))
|
|
470
|
+
return;
|
|
471
|
+
add(cleanLine(`\`${prog}\` said "${err}": what worked was step ${steps[k].n}.`, 200));
|
|
472
|
+
});
|
|
473
|
+
return out;
|
|
474
|
+
}
|
|
475
|
+
export function compileRun(input, opts) {
|
|
476
|
+
try {
|
|
477
|
+
// D59a: a run a compaction cut compiles whole, and so does its prior.
|
|
478
|
+
const sheet = joinCarriedSheet(input, opts.readSheet);
|
|
479
|
+
const prior = opts.prior ? joinCarriedSheet(opts.prior, opts.readSheet) : opts.prior;
|
|
480
|
+
return { ok: true, skill: build(sheet, { ...opts, prior }) };
|
|
481
|
+
}
|
|
482
|
+
catch (e) {
|
|
483
|
+
if (e instanceof Refused)
|
|
484
|
+
return { ok: false, reason: e.reason, detail: e.detail };
|
|
485
|
+
return { ok: false, reason: 'never-save', detail: `bug: ${e instanceof Error ? e.message : String(e)}` };
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/skills/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RunSheet, SkillInjection } from '../trace/types.js';
|
|
2
|
+
import type { LedgerUseFacts, ParsedSkill } from './types.js';
|
|
3
|
+
import { type FidelityWhere } from './fidelity.js';
|
|
4
|
+
/** The repo, the run's own checkout (D93) and the home, for fidelity and its keys. */
|
|
5
|
+
export declare function fidelityWhere(sheet: Pick<RunSheet, 'repoKey' | 'checkout'>, env?: NodeJS.ProcessEnv): FidelityWhere;
|
|
6
|
+
/** 4.1 step 5: the use line's `fid`, `extraShas` (first 4) and `changedSteps` (first 4). {} when the skill can't be read. */
|
|
7
|
+
export declare function useFacts(skill: ParsedSkill | null, inj: SkillInjection, sheet: Pick<RunSheet, 'repoKey' | 'checkout' | 'calls'>, env?: NodeJS.ProcessEnv): LedgerUseFacts;
|
|
8
|
+
//# sourceMappingURL=credit-facts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-facts.d.ts","sourceRoot":"","sources":["../../src/skills/credit-facts.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAA8B,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAG/E,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAC,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,aAAa,CAGhI;AAED,6HAA6H;AAC7H,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,EAC9H,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,cAAc,CAQtD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 2's facts at the credit flush (design 4.1, P2, P3): next-run
|
|
3
|
+
* fidelity of one use, as the use line keeps it (counts, the 8-hex keys of
|
|
4
|
+
* passing steps the skill lacks, the steps that failed and were done another
|
|
5
|
+
* way), and the one `where` every flush computes its keys with, so the same
|
|
6
|
+
* extra step in two uses gives the same key (c1's R10 note). `replan`
|
|
7
|
+
* (update-gate.ts) builds its fidelity with the same `fidelityWhere`.
|
|
8
|
+
*
|
|
9
|
+
* Fidelity never changes the use's outcome or the skill's status (P3), and a
|
|
10
|
+
* throw writes the use line without it.
|
|
11
|
+
*/
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
import { fidelityCounts, fidelityOf } from './fidelity.js';
|
|
14
|
+
import { runCheckout } from './run-checkout.js';
|
|
15
|
+
/** The repo, the run's own checkout (D93) and the home, for fidelity and its keys. */
|
|
16
|
+
export function fidelityWhere(sheet, env = process.env) {
|
|
17
|
+
const root = runCheckout(sheet, env, '');
|
|
18
|
+
return { repoKey: sheet.repoKey, ...(root ? { repoRoot: root } : {}), home: env.HOME || homedir() };
|
|
19
|
+
}
|
|
20
|
+
/** 4.1 step 5: the use line's `fid`, `extraShas` (first 4) and `changedSteps` (first 4). {} when the skill can't be read. */
|
|
21
|
+
export function useFacts(skill, inj, sheet, env = process.env) {
|
|
22
|
+
if (!skill)
|
|
23
|
+
return {};
|
|
24
|
+
try {
|
|
25
|
+
const f = fidelityOf(skill, inj, sheet.calls, fidelityWhere(sheet, env));
|
|
26
|
+
return { fid: fidelityCounts(f), extraShas: f.extra.map((e) => e.sha).slice(0, 4), changedSteps: f.changed.map((c) => c.step).slice(0, 4) };
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=credit-facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-facts.js","sourceRoot":"","sources":["../../src/skills/credit-facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAsB,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,KAA6C,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC/G,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACzC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,CAAC;AACtG,CAAC;AAED,6HAA6H;AAC7H,MAAM,UAAU,QAAQ,CAAC,KAAyB,EAAE,GAAmB,EAAE,KAAuD,EAC9H,MAAyB,OAAO,CAAC,GAAG;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC9I,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The sentence a directive opens with, after its `[trail]` marker. */
|
|
2
|
+
export declare const FROM_TRAIL = "From Trail, the tool this person installed to keep commands that worked as skills.";
|
|
3
|
+
/** The longest quote of the person's words a directive carries. */
|
|
4
|
+
export declare const QUOTE_MAX = 120;
|
|
5
|
+
/** The person's words as one quotable line: '' when there are none. */
|
|
6
|
+
export declare function quoteOf(typed: unknown): string;
|
|
7
|
+
/** `They typed: "save this as a skill".`, or '' when there are no words to quote. */
|
|
8
|
+
export declare function typedWords(typed: unknown): string;
|
|
9
|
+
/** `[trail] From Trail, ... They typed: "...". <rest>`: the opening, the quote when there is one, then the rest. */
|
|
10
|
+
export declare function directive(typed: unknown, rest: string): string;
|
|
11
|
+
//# sourceMappingURL=directive-words.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directive-words.d.ts","sourceRoot":"","sources":["../../src/skills/directive-words.ts"],"names":[],"mappings":"AAgBA,uEAAuE;AACvE,eAAO,MAAM,UAAU,uFAAuF,CAAC;AAE/G,mEAAmE;AACnE,eAAO,MAAM,SAAS,MAAM,CAAC;AAE7B,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE9C;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGjD;AAED,oHAAoH;AACpH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D"}
|