@nanonets/graft 0.23.1 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/ai/crux.d.ts +31 -3
- package/dist/ai/crux.d.ts.map +1 -1
- package/dist/ai/crux.js +88 -10
- package/dist/ai/crux.js.map +1 -1
- package/dist/ai/llm/openai.d.ts +101 -0
- package/dist/ai/llm/openai.d.ts.map +1 -1
- package/dist/ai/llm/openai.js +396 -6
- package/dist/ai/llm/openai.js.map +1 -1
- package/dist/ai/llm/recover-tool.d.ts +2 -0
- package/dist/ai/llm/recover-tool.d.ts.map +1 -1
- package/dist/ai/llm/recover-tool.js +1 -1
- package/dist/ai/llm/recover-tool.js.map +1 -1
- package/dist/ai/synthesize.d.ts.map +1 -1
- package/dist/ai/synthesize.js +100 -1
- package/dist/ai/synthesize.js.map +1 -1
- package/dist/ask/ask.d.ts +8 -0
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +33 -12
- package/dist/ask/ask.js.map +1 -1
- package/dist/claude/format.js +1 -1
- package/dist/claude/format.js.map +1 -1
- package/dist/claude/hook-io.d.ts +44 -0
- package/dist/claude/hook-io.d.ts.map +1 -0
- package/dist/claude/hook-io.js +144 -0
- package/dist/claude/hook-io.js.map +1 -0
- package/dist/claude/hooks.d.ts +0 -18
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +24 -77
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.js +3 -3
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/note-signals.d.ts +28 -0
- package/dist/claude/note-signals.d.ts.map +1 -0
- package/dist/claude/note-signals.js +325 -0
- package/dist/claude/note-signals.js.map +1 -0
- package/dist/claude/shim-template.d.ts.map +1 -1
- package/dist/claude/shim-template.js +10 -4
- package/dist/claude/shim-template.js.map +1 -1
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +49 -18
- package/dist/claude/skill-template.js.map +1 -1
- package/dist/claude/skills-hook-util.d.ts +25 -0
- package/dist/claude/skills-hook-util.d.ts.map +1 -0
- package/dist/claude/skills-hook-util.js +71 -0
- package/dist/claude/skills-hook-util.js.map +1 -0
- package/dist/claude/state.d.ts +4 -3
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/claude/state.js.map +1 -1
- package/dist/claude/sync-run.js +1 -1
- package/dist/claude/sync-run.js.map +1 -1
- package/dist/cli-picker.d.ts +36 -5
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +60 -13
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +406 -64
- package/dist/cli.js.map +1 -1
- package/dist/cloud/lookup-activity.d.ts +16 -0
- package/dist/cloud/lookup-activity.d.ts.map +1 -0
- package/dist/cloud/lookup-activity.js +56 -0
- package/dist/cloud/lookup-activity.js.map +1 -0
- package/dist/cloud/nudge.d.ts.map +1 -1
- package/dist/cloud/nudge.js +3 -0
- package/dist/cloud/nudge.js.map +1 -1
- package/dist/cloud/onboarding.d.ts +237 -0
- package/dist/cloud/onboarding.d.ts.map +1 -0
- package/dist/cloud/onboarding.js +536 -0
- package/dist/cloud/onboarding.js.map +1 -0
- package/dist/cloud/pair.d.ts +76 -0
- package/dist/cloud/pair.d.ts.map +1 -0
- package/dist/cloud/pair.js +249 -0
- package/dist/cloud/pair.js.map +1 -0
- package/dist/cloud/workspace-sync.d.ts +10 -2
- package/dist/cloud/workspace-sync.d.ts.map +1 -1
- package/dist/cloud/workspace-sync.js +119 -7
- package/dist/cloud/workspace-sync.js.map +1 -1
- package/dist/cloud/workspace.d.ts +22 -1
- package/dist/cloud/workspace.d.ts.map +1 -1
- package/dist/cloud/workspace.js +16 -1
- package/dist/cloud/workspace.js.map +1 -1
- package/dist/context/batches.d.ts +29 -0
- package/dist/context/batches.d.ts.map +1 -0
- package/dist/context/batches.js +130 -0
- package/dist/context/batches.js.map +1 -0
- package/dist/context/build.d.ts +7 -2
- package/dist/context/build.d.ts.map +1 -1
- package/dist/context/build.js +84 -50
- package/dist/context/build.js.map +1 -1
- package/dist/context/node-file.d.ts.map +1 -1
- package/dist/context/node-file.js +41 -4
- package/dist/context/node-file.js.map +1 -1
- package/dist/engine.d.ts +2 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +1 -0
- package/dist/engine.js.map +1 -1
- package/dist/graph/cards.d.ts.map +1 -1
- package/dist/graph/cards.js +9 -4
- package/dist/graph/cards.js.map +1 -1
- package/dist/graph/enrich.d.ts.map +1 -1
- package/dist/graph/enrich.js +8 -3
- package/dist/graph/enrich.js.map +1 -1
- package/dist/graph/generic.d.ts.map +1 -1
- package/dist/graph/generic.js +207 -6
- package/dist/graph/generic.js.map +1 -1
- package/dist/graph/lsp/client.d.ts +18 -0
- package/dist/graph/lsp/client.d.ts.map +1 -1
- package/dist/graph/lsp/client.js +40 -2
- package/dist/graph/lsp/client.js.map +1 -1
- package/dist/graph/lsp/enrich.d.ts.map +1 -1
- package/dist/graph/lsp/enrich.js +9 -1
- package/dist/graph/lsp/enrich.js.map +1 -1
- package/dist/graph/lsp/registry.d.ts +7 -0
- package/dist/graph/lsp/registry.d.ts.map +1 -1
- package/dist/graph/lsp/registry.js +27 -2
- package/dist/graph/lsp/registry.js.map +1 -1
- package/dist/graph/native.d.ts +2 -0
- package/dist/graph/native.d.ts.map +1 -1
- package/dist/graph/native.js +29 -4
- package/dist/graph/native.js.map +1 -1
- package/dist/graph/queries/gleam.scm +51 -0
- package/dist/graph/resolve.d.ts.map +1 -1
- package/dist/graph/resolve.js +65 -3
- package/dist/graph/resolve.js.map +1 -1
- package/dist/graph/workspace-cli.d.ts +2 -0
- package/dist/graph/workspace-cli.d.ts.map +1 -1
- package/dist/graph/workspace-cli.js +1 -1
- package/dist/graph/workspace-cli.js.map +1 -1
- package/dist/hosts/claude-global.d.ts +14 -0
- package/dist/hosts/claude-global.d.ts.map +1 -1
- package/dist/hosts/claude-global.js +38 -3
- package/dist/hosts/claude-global.js.map +1 -1
- package/dist/init/install-record.d.ts +21 -0
- package/dist/init/install-record.d.ts.map +1 -0
- package/dist/init/install-record.js +144 -0
- package/dist/init/install-record.js.map +1 -0
- package/dist/init/plain-file.d.ts +11 -0
- package/dist/init/plain-file.d.ts.map +1 -0
- package/dist/init/plain-file.js +80 -0
- package/dist/init/plain-file.js.map +1 -0
- package/dist/mcp/brains.d.ts +72 -0
- package/dist/mcp/brains.d.ts.map +1 -0
- package/dist/mcp/brains.js +220 -0
- package/dist/mcp/brains.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +40 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +7 -2
- package/dist/mcp/tools.js.map +1 -1
- package/dist/notes/branches.d.ts +7 -1
- package/dist/notes/branches.d.ts.map +1 -1
- package/dist/notes/branches.js +31 -3
- package/dist/notes/branches.js.map +1 -1
- package/dist/notes/cold-start.d.ts +42 -3
- package/dist/notes/cold-start.d.ts.map +1 -1
- package/dist/notes/cold-start.js +144 -24
- package/dist/notes/cold-start.js.map +1 -1
- package/dist/notes/credit.d.ts +37 -0
- package/dist/notes/credit.d.ts.map +1 -0
- package/dist/notes/credit.js +78 -0
- package/dist/notes/credit.js.map +1 -0
- package/dist/notes/every-repo.d.ts +18 -0
- package/dist/notes/every-repo.d.ts.map +1 -0
- package/dist/notes/every-repo.js +86 -0
- package/dist/notes/every-repo.js.map +1 -0
- package/dist/notes/find-notes.d.ts +17 -0
- package/dist/notes/find-notes.d.ts.map +1 -0
- package/dist/notes/find-notes.js +48 -0
- package/dist/notes/find-notes.js.map +1 -0
- package/dist/notes/flatten.d.ts +31 -0
- package/dist/notes/flatten.d.ts.map +1 -0
- package/dist/notes/flatten.js +73 -0
- package/dist/notes/flatten.js.map +1 -0
- package/dist/notes/git-facts.d.ts +2 -0
- package/dist/notes/git-facts.d.ts.map +1 -1
- package/dist/notes/git-facts.js +6 -0
- package/dist/notes/git-facts.js.map +1 -1
- package/dist/notes/guardrails.d.ts +8 -0
- package/dist/notes/guardrails.d.ts.map +1 -0
- package/dist/notes/guardrails.js +38 -0
- package/dist/notes/guardrails.js.map +1 -0
- package/dist/notes/home.d.ts +24 -6
- package/dist/notes/home.d.ts.map +1 -1
- package/dist/notes/home.js +82 -15
- package/dist/notes/home.js.map +1 -1
- package/dist/notes/learning-fields.d.ts +102 -0
- package/dist/notes/learning-fields.d.ts.map +1 -0
- package/dist/notes/learning-fields.js +214 -0
- package/dist/notes/learning-fields.js.map +1 -0
- package/dist/notes/lesson-index.d.ts +13 -0
- package/dist/notes/lesson-index.d.ts.map +1 -0
- package/dist/notes/lesson-index.js +135 -0
- package/dist/notes/lesson-index.js.map +1 -0
- package/dist/notes/linked-learnings.d.ts +8 -0
- package/dist/notes/linked-learnings.d.ts.map +1 -0
- package/dist/notes/linked-learnings.js +113 -0
- package/dist/notes/linked-learnings.js.map +1 -0
- package/dist/notes/memory-notes.d.ts +71 -0
- package/dist/notes/memory-notes.d.ts.map +1 -0
- package/dist/notes/memory-notes.js +239 -0
- package/dist/notes/memory-notes.js.map +1 -0
- package/dist/notes/note-gate.d.ts +42 -0
- package/dist/notes/note-gate.d.ts.map +1 -0
- package/dist/notes/note-gate.js +181 -0
- package/dist/notes/note-gate.js.map +1 -0
- package/dist/notes/notes.d.ts +29 -85
- package/dist/notes/notes.d.ts.map +1 -1
- package/dist/notes/notes.js +69 -254
- package/dist/notes/notes.js.map +1 -1
- package/dist/notes/pr-reviews.d.ts +35 -7
- package/dist/notes/pr-reviews.d.ts.map +1 -1
- package/dist/notes/pr-reviews.js +156 -46
- package/dist/notes/pr-reviews.js.map +1 -1
- package/dist/notes/replace.d.ts +14 -0
- package/dist/notes/replace.d.ts.map +1 -0
- package/dist/notes/replace.js +38 -0
- package/dist/notes/replace.js.map +1 -0
- package/dist/notes/repo-notes-dir.d.ts +2 -0
- package/dist/notes/repo-notes-dir.d.ts.map +1 -0
- package/dist/notes/repo-notes-dir.js +16 -0
- package/dist/notes/repo-notes-dir.js.map +1 -0
- package/dist/notes/secrets.d.ts +28 -0
- package/dist/notes/secrets.d.ts.map +1 -0
- package/dist/notes/secrets.js +362 -0
- package/dist/notes/secrets.js.map +1 -0
- package/dist/notes/targets.d.ts +37 -0
- package/dist/notes/targets.d.ts.map +1 -0
- package/dist/notes/targets.js +108 -0
- package/dist/notes/targets.js.map +1 -0
- package/dist/notes/team-check.d.ts +22 -0
- package/dist/notes/team-check.d.ts.map +1 -0
- package/dist/notes/team-check.js +130 -0
- package/dist/notes/team-check.js.map +1 -0
- package/dist/notes/trail-home.d.ts +3 -0
- package/dist/notes/trail-home.d.ts.map +1 -0
- package/dist/notes/trail-home.js +12 -0
- package/dist/notes/trail-home.js.map +1 -0
- package/dist/skills/anchors-cli.d.ts +33 -0
- package/dist/skills/anchors-cli.d.ts.map +1 -0
- package/dist/skills/anchors-cli.js +274 -0
- package/dist/skills/anchors-cli.js.map +1 -0
- package/dist/skills/anchors-git.d.ts +29 -0
- package/dist/skills/anchors-git.d.ts.map +1 -0
- package/dist/skills/anchors-git.js +241 -0
- package/dist/skills/anchors-git.js.map +1 -0
- package/dist/skills/anchors-wide.d.ts +25 -0
- package/dist/skills/anchors-wide.d.ts.map +1 -0
- package/dist/skills/anchors-wide.js +481 -0
- package/dist/skills/anchors-wide.js.map +1 -0
- package/dist/skills/anchors.d.ts +32 -0
- package/dist/skills/anchors.d.ts.map +1 -0
- package/dist/skills/anchors.js +485 -0
- package/dist/skills/anchors.js.map +1 -0
- package/dist/skills/answers-prompt.d.ts +13 -0
- package/dist/skills/answers-prompt.d.ts.map +1 -0
- package/dist/skills/answers-prompt.js +83 -0
- package/dist/skills/answers-prompt.js.map +1 -0
- package/dist/skills/check-result.d.ts +26 -0
- package/dist/skills/check-result.d.ts.map +1 -0
- package/dist/skills/check-result.js +46 -0
- package/dist/skills/check-result.js.map +1 -0
- package/dist/skills/codex-sandbox.d.ts +6 -0
- package/dist/skills/codex-sandbox.d.ts.map +1 -0
- package/dist/skills/codex-sandbox.js +55 -0
- package/dist/skills/codex-sandbox.js.map +1 -0
- package/dist/skills/compile-split.d.ts +57 -0
- package/dist/skills/compile-split.d.ts.map +1 -0
- package/dist/skills/compile-split.js +532 -0
- package/dist/skills/compile-split.js.map +1 -0
- package/dist/skills/compile-version.d.ts +37 -0
- package/dist/skills/compile-version.d.ts.map +1 -0
- package/dist/skills/compile-version.js +56 -0
- package/dist/skills/compile-version.js.map +1 -0
- package/dist/skills/compile-waits.d.ts +12 -0
- package/dist/skills/compile-waits.d.ts.map +1 -0
- package/dist/skills/compile-waits.js +52 -0
- package/dist/skills/compile-waits.js.map +1 -0
- package/dist/skills/compile-words.d.ts +82 -0
- package/dist/skills/compile-words.d.ts.map +1 -0
- package/dist/skills/compile-words.js +385 -0
- package/dist/skills/compile-words.js.map +1 -0
- package/dist/skills/compile.d.ts +35 -0
- package/dist/skills/compile.d.ts.map +1 -0
- package/dist/skills/compile.js +488 -0
- package/dist/skills/compile.js.map +1 -0
- package/dist/skills/credit-facts.d.ts +8 -0
- package/dist/skills/credit-facts.d.ts.map +1 -0
- package/dist/skills/credit-facts.js +32 -0
- package/dist/skills/credit-facts.js.map +1 -0
- package/dist/skills/directive-words.d.ts +11 -0
- package/dist/skills/directive-words.d.ts.map +1 -0
- package/dist/skills/directive-words.js +33 -0
- package/dist/skills/directive-words.js.map +1 -0
- package/dist/skills/fidelity.d.ts +42 -0
- package/dist/skills/fidelity.d.ts.map +1 -0
- package/dist/skills/fidelity.js +138 -0
- package/dist/skills/fidelity.js.map +1 -0
- package/dist/skills/forget-notice.d.ts +44 -0
- package/dist/skills/forget-notice.d.ts.map +1 -0
- package/dist/skills/forget-notice.js +131 -0
- package/dist/skills/forget-notice.js.map +1 -0
- package/dist/skills/found-skill.d.ts +35 -0
- package/dist/skills/found-skill.d.ts.map +1 -0
- package/dist/skills/found-skill.js +66 -0
- package/dist/skills/found-skill.js.map +1 -0
- package/dist/skills/front-version.d.ts +12 -0
- package/dist/skills/front-version.d.ts.map +1 -0
- package/dist/skills/front-version.js +87 -0
- package/dist/skills/front-version.js.map +1 -0
- package/dist/skills/host-facts.d.ts +51 -0
- package/dist/skills/host-facts.d.ts.map +1 -0
- package/dist/skills/host-facts.js +134 -0
- package/dist/skills/host-facts.js.map +1 -0
- package/dist/skills/ledger.d.ts +43 -0
- package/dist/skills/ledger.d.ts.map +1 -0
- package/dist/skills/ledger.js +336 -0
- package/dist/skills/ledger.js.map +1 -0
- package/dist/skills/lessons.d.ts +60 -0
- package/dist/skills/lessons.d.ts.map +1 -0
- package/dist/skills/lessons.js +396 -0
- package/dist/skills/lessons.js.map +1 -0
- package/dist/skills/never-save.d.ts +5 -0
- package/dist/skills/never-save.d.ts.map +1 -0
- package/dist/skills/never-save.js +158 -0
- package/dist/skills/never-save.js.map +1 -0
- package/dist/skills/offer-answers.d.ts +20 -0
- package/dist/skills/offer-answers.d.ts.map +1 -0
- package/dist/skills/offer-answers.js +51 -0
- package/dist/skills/offer-answers.js.map +1 -0
- package/dist/skills/own-folder.d.ts +9 -0
- package/dist/skills/own-folder.d.ts.map +1 -0
- package/dist/skills/own-folder.js +36 -0
- package/dist/skills/own-folder.js.map +1 -0
- package/dist/skills/params.d.ts +39 -0
- package/dist/skills/params.d.ts.map +1 -0
- package/dist/skills/params.js +275 -0
- package/dist/skills/params.js.map +1 -0
- package/dist/skills/person.d.ts +34 -0
- package/dist/skills/person.d.ts.map +1 -0
- package/dist/skills/person.js +102 -0
- package/dist/skills/person.js.map +1 -0
- package/dist/skills/probe-clean.d.ts +9 -0
- package/dist/skills/probe-clean.d.ts.map +1 -0
- package/dist/skills/probe-clean.js +48 -0
- package/dist/skills/probe-clean.js.map +1 -0
- package/dist/skills/probes.d.ts +26 -0
- package/dist/skills/probes.d.ts.map +1 -0
- package/dist/skills/probes.js +225 -0
- package/dist/skills/probes.js.map +1 -0
- package/dist/skills/ran-less.d.ts +5 -0
- package/dist/skills/ran-less.d.ts.map +1 -0
- package/dist/skills/ran-less.js +51 -0
- package/dist/skills/ran-less.js.map +1 -0
- package/dist/skills/recall.d.ts +119 -0
- package/dist/skills/recall.d.ts.map +1 -0
- package/dist/skills/recall.js +370 -0
- package/dist/skills/recall.js.map +1 -0
- package/dist/skills/receipts.d.ts +44 -0
- package/dist/skills/receipts.d.ts.map +1 -0
- package/dist/skills/receipts.js +223 -0
- package/dist/skills/receipts.js.map +1 -0
- package/dist/skills/risk-delta.d.ts +32 -0
- package/dist/skills/risk-delta.d.ts.map +1 -0
- package/dist/skills/risk-delta.js +56 -0
- package/dist/skills/risk-delta.js.map +1 -0
- package/dist/skills/risk.d.ts +73 -0
- package/dist/skills/risk.d.ts.map +1 -0
- package/dist/skills/risk.js +396 -0
- package/dist/skills/risk.js.map +1 -0
- package/dist/skills/run-checkout.d.ts +4 -0
- package/dist/skills/run-checkout.d.ts.map +1 -0
- package/dist/skills/run-checkout.js +37 -0
- package/dist/skills/run-checkout.js.map +1 -0
- package/dist/skills/runblock.d.ts +45 -0
- package/dist/skills/runblock.d.ts.map +1 -0
- package/dist/skills/runblock.js +222 -0
- package/dist/skills/runblock.js.map +1 -0
- package/dist/skills/save-parse.d.ts +42 -0
- package/dist/skills/save-parse.d.ts.map +1 -0
- package/dist/skills/save-parse.js +172 -0
- package/dist/skills/save-parse.js.map +1 -0
- package/dist/skills/save-store.d.ts +12 -0
- package/dist/skills/save-store.d.ts.map +1 -0
- package/dist/skills/save-store.js +22 -0
- package/dist/skills/save-store.js.map +1 -0
- package/dist/skills/settings.d.ts +38 -0
- package/dist/skills/settings.d.ts.map +1 -0
- package/dist/skills/settings.js +133 -0
- package/dist/skills/settings.js.map +1 -0
- package/dist/skills/skill-diff.d.ts +40 -0
- package/dist/skills/skill-diff.d.ts.map +1 -0
- package/dist/skills/skill-diff.js +191 -0
- package/dist/skills/skill-diff.js.map +1 -0
- package/dist/skills/skill-file.d.ts +24 -0
- package/dist/skills/skill-file.d.ts.map +1 -0
- package/dist/skills/skill-file.js +97 -0
- package/dist/skills/skill-file.js.map +1 -0
- package/dist/skills/skill-rebuild.d.ts +27 -0
- package/dist/skills/skill-rebuild.d.ts.map +1 -0
- package/dist/skills/skill-rebuild.js +85 -0
- package/dist/skills/skill-rebuild.js.map +1 -0
- package/dist/skills/skillmd.d.ts +17 -0
- package/dist/skills/skillmd.d.ts.map +1 -0
- package/dist/skills/skillmd.js +219 -0
- package/dist/skills/skillmd.js.map +1 -0
- package/dist/skills/skills.d.ts +2 -0
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +1 -1
- package/dist/skills/skills.js.map +1 -1
- package/dist/skills/staleness.d.ts +27 -0
- package/dist/skills/staleness.d.ts.map +1 -0
- package/dist/skills/staleness.js +178 -0
- package/dist/skills/staleness.js.map +1 -0
- package/dist/skills/state.d.ts +36 -0
- package/dist/skills/state.d.ts.map +1 -0
- package/dist/skills/state.js +259 -0
- package/dist/skills/state.js.map +1 -0
- package/dist/skills/store-fs.d.ts +77 -0
- package/dist/skills/store-fs.d.ts.map +1 -0
- package/dist/skills/store-fs.js +194 -0
- package/dist/skills/store-fs.js.map +1 -0
- package/dist/skills/store-held.d.ts +44 -0
- package/dist/skills/store-held.d.ts.map +1 -0
- package/dist/skills/store-held.js +147 -0
- package/dist/skills/store-held.js.map +1 -0
- package/dist/skills/store.d.ts +73 -0
- package/dist/skills/store.d.ts.map +1 -0
- package/dist/skills/store.js +279 -0
- package/dist/skills/store.js.map +1 -0
- package/dist/skills/types.d.ts +422 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/validate.d.ts +11 -0
- package/dist/skills/validate.d.ts.map +1 -0
- package/dist/skills/validate.js +112 -0
- package/dist/skills/validate.js.map +1 -0
- package/dist/skills/versions-fs.d.ts +45 -0
- package/dist/skills/versions-fs.d.ts.map +1 -0
- package/dist/skills/versions-fs.js +234 -0
- package/dist/skills/versions-fs.js.map +1 -0
- package/dist/skills/versions.d.ts +56 -0
- package/dist/skills/versions.d.ts.map +1 -0
- package/dist/skills/versions.js +351 -0
- package/dist/skills/versions.js.map +1 -0
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +8 -6
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/notice.d.ts.map +1 -1
- package/dist/telemetry/notice.js +3 -1
- package/dist/telemetry/notice.js.map +1 -1
- package/dist/trace/check-reads.d.ts +36 -0
- package/dist/trace/check-reads.d.ts.map +1 -0
- package/dist/trace/check-reads.js +57 -0
- package/dist/trace/check-reads.js.map +1 -0
- package/dist/trace/checks.d.ts +63 -0
- package/dist/trace/checks.d.ts.map +1 -0
- package/dist/trace/checks.js +487 -0
- package/dist/trace/checks.js.map +1 -0
- package/dist/trace/claude.d.ts +124 -0
- package/dist/trace/claude.d.ts.map +1 -0
- package/dist/trace/claude.js +303 -0
- package/dist/trace/claude.js.map +1 -0
- package/dist/trace/codex-exec.d.ts +22 -0
- package/dist/trace/codex-exec.d.ts.map +1 -0
- package/dist/trace/codex-exec.js +129 -0
- package/dist/trace/codex-exec.js.map +1 -0
- package/dist/trace/codex-meta.d.ts +23 -0
- package/dist/trace/codex-meta.d.ts.map +1 -0
- package/dist/trace/codex-meta.js +112 -0
- package/dist/trace/codex-meta.js.map +1 -0
- package/dist/trace/codex.d.ts +33 -0
- package/dist/trace/codex.d.ts.map +1 -0
- package/dist/trace/codex.js +485 -0
- package/dist/trace/codex.js.map +1 -0
- package/dist/trace/cursor.d.ts +16 -0
- package/dist/trace/cursor.d.ts.map +1 -0
- package/dist/trace/cursor.js +133 -0
- package/dist/trace/cursor.js.map +1 -0
- package/dist/trace/dialect.d.ts +43 -0
- package/dist/trace/dialect.d.ts.map +1 -0
- package/dist/trace/dialect.js +95 -0
- package/dist/trace/dialect.js.map +1 -0
- package/dist/trace/epochs.d.ts +10 -0
- package/dist/trace/epochs.d.ts.map +1 -0
- package/dist/trace/epochs.js +16 -0
- package/dist/trace/epochs.js.map +1 -0
- package/dist/trace/failure.d.ts +15 -0
- package/dist/trace/failure.d.ts.map +1 -0
- package/dist/trace/failure.js +69 -0
- package/dist/trace/failure.js.map +1 -0
- package/dist/trace/gate-file.d.ts +71 -0
- package/dist/trace/gate-file.d.ts.map +1 -0
- package/dist/trace/gate-file.js +329 -0
- package/dist/trace/gate-file.js.map +1 -0
- package/dist/trace/guard-fast.d.ts +22 -0
- package/dist/trace/guard-fast.d.ts.map +1 -0
- package/dist/trace/guard-fast.js +213 -0
- package/dist/trace/guard-fast.js.map +1 -0
- package/dist/trace/host.d.ts +40 -0
- package/dist/trace/host.d.ts.map +1 -0
- package/dist/trace/host.js +84 -0
- package/dist/trace/host.js.map +1 -0
- package/dist/trace/housekeeping.d.ts +5 -0
- package/dist/trace/housekeeping.d.ts.map +1 -0
- package/dist/trace/housekeeping.js +93 -0
- package/dist/trace/housekeeping.js.map +1 -0
- package/dist/trace/jobs.d.ts +52 -0
- package/dist/trace/jobs.d.ts.map +1 -0
- package/dist/trace/jobs.js +182 -0
- package/dist/trace/jobs.js.map +1 -0
- package/dist/trace/known-repo.d.ts +3 -0
- package/dist/trace/known-repo.d.ts.map +1 -0
- package/dist/trace/known-repo.js +55 -0
- package/dist/trace/known-repo.js.map +1 -0
- package/dist/trace/pool.d.ts +40 -0
- package/dist/trace/pool.d.ts.map +1 -0
- package/dist/trace/pool.js +154 -0
- package/dist/trace/pool.js.map +1 -0
- package/dist/trace/redact.d.ts +8 -0
- package/dist/trace/redact.d.ts.map +1 -0
- package/dist/trace/redact.js +63 -0
- package/dist/trace/redact.js.map +1 -0
- package/dist/trace/repairs.d.ts +27 -0
- package/dist/trace/repairs.d.ts.map +1 -0
- package/dist/trace/repairs.js +303 -0
- package/dist/trace/repairs.js.map +1 -0
- package/dist/trace/run-calls.d.ts +82 -0
- package/dist/trace/run-calls.d.ts.map +1 -0
- package/dist/trace/run-calls.js +331 -0
- package/dist/trace/run-calls.js.map +1 -0
- package/dist/trace/run-join.d.ts +20 -0
- package/dist/trace/run-join.d.ts.map +1 -0
- package/dist/trace/run-join.js +99 -0
- package/dist/trace/run-join.js.map +1 -0
- package/dist/trace/run-sheets.d.ts +26 -0
- package/dist/trace/run-sheets.d.ts.map +1 -0
- package/dist/trace/run-sheets.js +145 -0
- package/dist/trace/run-sheets.js.map +1 -0
- package/dist/trace/run-turns.d.ts +24 -0
- package/dist/trace/run-turns.d.ts.map +1 -0
- package/dist/trace/run-turns.js +67 -0
- package/dist/trace/run-turns.js.map +1 -0
- package/dist/trace/run-verdict.d.ts +24 -0
- package/dist/trace/run-verdict.d.ts.map +1 -0
- package/dist/trace/run-verdict.js +176 -0
- package/dist/trace/run-verdict.js.map +1 -0
- package/dist/trace/runs.d.ts +54 -0
- package/dist/trace/runs.d.ts.map +1 -0
- package/dist/trace/runs.js +501 -0
- package/dist/trace/runs.js.map +1 -0
- package/dist/trace/seen-cache.d.ts +9 -0
- package/dist/trace/seen-cache.d.ts.map +1 -0
- package/dist/trace/seen-cache.js +46 -0
- package/dist/trace/seen-cache.js.map +1 -0
- package/dist/trace/shell-scan.d.ts +52 -0
- package/dist/trace/shell-scan.d.ts.map +1 -0
- package/dist/trace/shell-scan.js +318 -0
- package/dist/trace/shell-scan.js.map +1 -0
- package/dist/trace/shell-words.d.ts +91 -0
- package/dist/trace/shell-words.d.ts.map +1 -0
- package/dist/trace/shell-words.js +558 -0
- package/dist/trace/shell-words.js.map +1 -0
- package/dist/trace/shell.d.ts +91 -0
- package/dist/trace/shell.d.ts.map +1 -0
- package/dist/trace/shell.js +435 -0
- package/dist/trace/shell.js.map +1 -0
- package/dist/trace/skill-session.d.ts +64 -0
- package/dist/trace/skill-session.d.ts.map +1 -0
- package/dist/trace/skill-session.js +232 -0
- package/dist/trace/skill-session.js.map +1 -0
- package/dist/trace/state.d.ts +27 -0
- package/dist/trace/state.d.ts.map +1 -0
- package/dist/trace/state.js +98 -0
- package/dist/trace/state.js.map +1 -0
- package/dist/trace/tamper-code.d.ts +9 -0
- package/dist/trace/tamper-code.d.ts.map +1 -0
- package/dist/trace/tamper-code.js +174 -0
- package/dist/trace/tamper-code.js.map +1 -0
- package/dist/trace/tamper-git.d.ts +12 -0
- package/dist/trace/tamper-git.d.ts.map +1 -0
- package/dist/trace/tamper-git.js +77 -0
- package/dist/trace/tamper-git.js.map +1 -0
- package/dist/trace/tamper.d.ts +12 -0
- package/dist/trace/tamper.d.ts.map +1 -0
- package/dist/trace/tamper.js +405 -0
- package/dist/trace/tamper.js.map +1 -0
- package/dist/trace/typed.d.ts +30 -0
- package/dist/trace/typed.d.ts.map +1 -0
- package/dist/trace/typed.js +132 -0
- package/dist/trace/typed.js.map +1 -0
- package/dist/trace/types.d.ts +477 -0
- package/dist/trace/types.d.ts.map +1 -0
- package/dist/trace/types.js +12 -0
- package/dist/trace/types.js.map +1 -0
- package/dist/trace/wall-state.d.ts +86 -0
- package/dist/trace/wall-state.d.ts.map +1 -0
- package/dist/trace/wall-state.js +279 -0
- package/dist/trace/wall-state.js.map +1 -0
- package/dist/trace/walls-glob.d.ts +11 -0
- package/dist/trace/walls-glob.d.ts.map +1 -0
- package/dist/trace/walls-glob.js +264 -0
- package/dist/trace/walls-glob.js.map +1 -0
- package/dist/trace/walls-quoted.d.ts +25 -0
- package/dist/trace/walls-quoted.d.ts.map +1 -0
- package/dist/trace/walls-quoted.js +81 -0
- package/dist/trace/walls-quoted.js.map +1 -0
- package/dist/trace/walls.d.ts +40 -0
- package/dist/trace/walls.d.ts.map +1 -0
- package/dist/trace/walls.js +318 -0
- package/dist/trace/walls.js.map +1 -0
- package/dist/upkeep.d.ts +1 -1
- package/dist/upkeep.d.ts.map +1 -1
- package/dist/upkeep.js +4 -1
- package/dist/upkeep.js.map +1 -1
- package/dist/util/actions-folder.d.ts +2 -0
- package/dist/util/actions-folder.d.ts.map +1 -0
- package/dist/util/actions-folder.js +9 -0
- package/dist/util/actions-folder.js.map +1 -0
- package/dist/util/front-matter.d.ts +31 -4
- package/dist/util/front-matter.d.ts.map +1 -1
- package/dist/util/front-matter.js +95 -3
- package/dist/util/front-matter.js.map +1 -1
- package/dist/util/private-file.d.ts +14 -0
- package/dist/util/private-file.d.ts.map +1 -0
- package/dist/util/private-file.js +82 -0
- package/dist/util/private-file.js.map +1 -0
- package/dist/util/private-fs.d.ts +25 -0
- package/dist/util/private-fs.d.ts.map +1 -0
- package/dist/util/private-fs.js +253 -0
- package/dist/util/private-fs.js.map +1 -0
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js +3 -0
- package/dist/util/state.js.map +1 -1
- package/dist/vendor/tree-sitter-swift/LICENSE +21 -0
- package/dist/vendor/tree-sitter-swift/node-types.json +30694 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/darwin-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/darwin-x64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/linux-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/linux-x64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/win32-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/win32-x64/tree-sitter-swift.node +0 -0
- package/dist/viewer/app.js +2 -2
- package/package.json +10 -7
- package/scripts/run-tests.mjs +14 -2
- package/scripts/stamp-telemetry-key.mjs +8 -5
- package/scripts/vendor-grammars.mjs +35 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading a shell command the way the shell does, without running anything.
|
|
3
|
+
*
|
|
4
|
+
* Agents write commit messages in `"$(cat <<'EOF' ... EOF)"`, wrap commands
|
|
5
|
+
* in `(cd x && ...)`, poll in `for` loops and pipe everything through
|
|
6
|
+
* `| tail`. A plain split on `;` or `|` turns a word inside a quote, a
|
|
7
|
+
* substitution or a heredoc body into a "step", so this reads top-level
|
|
8
|
+
* segments only: quotes, `$'…'`, `$(…)`, backticks, `(…)` subshells, `{…}`
|
|
9
|
+
* groups, `[[…]]`, loops and ifs are opaque, and a heredoc body belongs to the
|
|
10
|
+
* segment whose line opened it.
|
|
11
|
+
*
|
|
12
|
+
* The PreToolUse fast path loads this file: its imports are the lexer,
|
|
13
|
+
* `shell-scan.ts`, and the program-word layer on it, `shell-words.ts`; the
|
|
14
|
+
* lexer imports nothing.
|
|
15
|
+
*
|
|
16
|
+
* Every reader here is linear in the command's length (a skill's step is
|
|
17
|
+
* matched against each command the agent runs, in the PreToolUse hook) and
|
|
18
|
+
* reads nesting only to a fixed depth.
|
|
19
|
+
*/
|
|
20
|
+
import type { CallKind } from './types.js';
|
|
21
|
+
import { PLUMBING, RUNNERS, bareCommand, heredocInterpreter, hookUnrun, inlineScript, quotedTextHit, readsFiles, scriptKind, simpleCommands } from './shell-words.js';
|
|
22
|
+
export { PLUMBING, RUNNERS, bareCommand, heredocInterpreter, hookUnrun, inlineScript, quotedTextHit, readsFiles, scriptKind, simpleCommands };
|
|
23
|
+
export interface Segment {
|
|
24
|
+
text: string;
|
|
25
|
+
sep: '&&' | '||' | ';' | '|' | '&' | '';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Top-level segments. Opaque: '…', "…", $'…', $(…), `…`, a (…) subshell, a {…} group, and a heredoc
|
|
29
|
+
* body (the lines after `<<[-~]?\s*['"]?WORD['"]?` up to the line that is exactly WORD), which belongs to
|
|
30
|
+
* the segment whose line opened it. Each segment keeps the separator after it; a trailing `&` gives '&'.
|
|
31
|
+
*/
|
|
32
|
+
export declare function splitTop(cmd: string): Segment[];
|
|
33
|
+
/** Any heredoc, or a newline outside quotes and heredoc bodies (a `\`-continued line is not one). */
|
|
34
|
+
export declare function isMultiLine(cmd: string): boolean;
|
|
35
|
+
/** `A=1 B=2 cmd` -> { env: ['A=1','B=2'], rest: 'cmd' }. */
|
|
36
|
+
export declare function envPrefix(cmd: string): {
|
|
37
|
+
env: string[];
|
|
38
|
+
rest: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Every leading `cd X &&` / `cd X;` segment in order (`cd X || exit 1` on its own line is one too), and
|
|
42
|
+
* `(cd X && rest)` when the subshell is the whole command.
|
|
43
|
+
*/
|
|
44
|
+
export declare function leadingCds(cmd: string, depth?: number): {
|
|
45
|
+
cds: string[];
|
|
46
|
+
rest: string;
|
|
47
|
+
};
|
|
48
|
+
/** Drops a leading `sleep N;` / `sleep N &&`. A sleep inside a subshell or pipe stays. */
|
|
49
|
+
export declare function stripLeadingSleep(cmd: string): string;
|
|
50
|
+
/** Drops a leading `timeout N ` / `gtimeout N ` (also right after env prefixes). */
|
|
51
|
+
export declare function stripTimeout(cmd: string): string;
|
|
52
|
+
/** Drops trailing `| tail…`, `| head…`, `| less`, `| more`, `| cat` segments and the `2>&1` that fed them. */
|
|
53
|
+
export declare function stripOutputFilters(cmd: string): string;
|
|
54
|
+
/** Drops a last segment that is only `echo …` or `printf …` after `&&`, `;` or `||`. */
|
|
55
|
+
export declare function stripTrailingEcho(cmd: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* The first segment's program after env prefixes, leading cds, `time`, `nice`, `command`, and a
|
|
58
|
+
* `script -q /dev/null` wrapper; two words for RUNNERS (`git push`, `gh pr`, `npm run`, `npx vitest`).
|
|
59
|
+
* Never a word from inside quotes or a heredoc body.
|
|
60
|
+
*/
|
|
61
|
+
export declare function programOf(cmd: string): string | null;
|
|
62
|
+
/** Read-only exploration (4.1 kinds). */
|
|
63
|
+
export declare function isLookOnly(cmd: string): boolean;
|
|
64
|
+
/** Changes the work itself rather than running the job (4.1 kinds). */
|
|
65
|
+
export declare function isWork(cmd: string): boolean;
|
|
66
|
+
/** plumbing, work, look or step from the command alone (4.1; the fold also counts read-only check families as look). */
|
|
67
|
+
export declare function commandKind(cmd: string): CallKind;
|
|
68
|
+
/**
|
|
69
|
+
* Any part of the command runs Trail: trail, graft, npx @trailhq/trail-code, npx @nanonets/graft,
|
|
70
|
+
* node …/dist/bin/(trail|graft).js. For "a skill never runs Trail" (4.11). The fold's "Trail's own
|
|
71
|
+
* command, ignored" (4.1) is `onlyTrail`: `trail x; rm ~/.trail/y` runs Trail and is not only Trail.
|
|
72
|
+
*/
|
|
73
|
+
export declare function isTrailCommand(cmd: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* The whole command is Trail's own (4.1 "ignored entirely", and the tamper check's exemption): it runs
|
|
76
|
+
* Trail, and everything else in it only reads or sets up the shell. Not when any part writes a file
|
|
77
|
+
* (a redirect, cp, tee), runs code inside a word (`$( )`, backticks), runs another program, or changes
|
|
78
|
+
* which `trail` runs (PATH, an alias, a function, a path to a `trail`).
|
|
79
|
+
*/
|
|
80
|
+
export declare function onlyTrail(cmd: string): boolean;
|
|
81
|
+
/** For comparisons: output filters, trailing echo, leading cds, leading sleep and timeout stripped; quotes removed; spaces collapsed. */
|
|
82
|
+
export declare function normalizeCommand(cmd: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* A step matches a command that ran when, after normalizeCommand on both, the step (params filled from
|
|
85
|
+
* `values` where known, other {params} as \S+) matches at the start of the ran command or right after a
|
|
86
|
+
* top-level `&& ` or `; `. Env prefixes are compared too, unless `ignoreEnv`.
|
|
87
|
+
*/
|
|
88
|
+
export declare function stepMatches(step: string, ran: string, values?: Record<string, string>, ignoreEnv?: boolean): boolean;
|
|
89
|
+
/** Absolute path tokens: under repoRoot become repo-relative (`./x` or `x`); under home become `$HOME/…`; `~/` becomes `$HOME/`. */
|
|
90
|
+
export declare function relativizePaths(cmd: string, repoRoot: string, home: string): string;
|
|
91
|
+
//# sourceMappingURL=shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/trace/shell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EACM,QAAQ,EAAE,OAAO,EAA6B,WAAW,EAAc,kBAAkB,EAAE,SAAS,EAAE,YAAY,EAC7H,aAAa,EAAE,UAAU,EAAE,UAAU,EAA0B,cAAc,EAC9E,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAE9I,MAAM,WAAW,OAAO;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAA;CAAE;AAElF;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,CAG/C;AAED,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGhD;AAED,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAUtE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA+BlF;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWrD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUhD;AAED,8GAA8G;AAC9G,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAatD;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASrD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIpD;AAmFD,yCAAyC;AACzC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG/C;AAED,uEAAuE;AACvE,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3C;AAED,wHAAwH;AACxH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAEjD;AA8BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAyCD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAcD,yIAAyI;AACzI,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAID;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAyBtH;AAED,oIAAoI;AACpI,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASnF"}
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import { ASSIGN, OPEN_KW, base, cut, pieceText, scan, unquote, words } from './shell-scan.js';
|
|
2
|
+
import { MAX_DEPTH, PLUMBING, RUNNERS, VALUE_FLAGS, afterTimeout, bareCommand, groupInner, heredocInterpreter, hookUnrun, inlineScript, programOfText, programWords, quotedTextHit, readsFiles, scriptKind, shellOnly, shellScript, simpleCommands, stripKeywords, writesFile, } from './shell-words.js';
|
|
3
|
+
export { PLUMBING, RUNNERS, bareCommand, heredocInterpreter, hookUnrun, inlineScript, quotedTextHit, readsFiles, scriptKind, simpleCommands };
|
|
4
|
+
/**
|
|
5
|
+
* Top-level segments. Opaque: '…', "…", $'…', $(…), `…`, a (…) subshell, a {…} group, and a heredoc
|
|
6
|
+
* body (the lines after `<<[-~]?\s*['"]?WORD['"]?` up to the line that is exactly WORD), which belongs to
|
|
7
|
+
* the segment whose line opened it. Each segment keeps the separator after it; a trailing `&` gives '&'.
|
|
8
|
+
*/
|
|
9
|
+
export function splitTop(cmd) {
|
|
10
|
+
const s = String(cmd ?? '');
|
|
11
|
+
return scan(s).segs.map((p) => ({ text: pieceText(s, p), sep: p.sep }));
|
|
12
|
+
}
|
|
13
|
+
/** Any heredoc, or a newline outside quotes and heredoc bodies (a `\`-continued line is not one). */
|
|
14
|
+
export function isMultiLine(cmd) {
|
|
15
|
+
const r = scan(String(cmd ?? ''));
|
|
16
|
+
return r.heredoc || r.newline;
|
|
17
|
+
}
|
|
18
|
+
/** `A=1 B=2 cmd` -> { env: ['A=1','B=2'], rest: 'cmd' }. */
|
|
19
|
+
export function envPrefix(cmd) {
|
|
20
|
+
const s = String(cmd ?? '').trimStart();
|
|
21
|
+
const env = [];
|
|
22
|
+
let at = 0;
|
|
23
|
+
for (const w of words(s)) {
|
|
24
|
+
if (!ASSIGN.test(w))
|
|
25
|
+
break;
|
|
26
|
+
env.push(w);
|
|
27
|
+
at = s.indexOf(w, at) + w.length;
|
|
28
|
+
}
|
|
29
|
+
return { env, rest: env.length ? s.slice(at).trim() : s.trim() };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Every leading `cd X &&` / `cd X;` segment in order (`cd X || exit 1` on its own line is one too), and
|
|
33
|
+
* `(cd X && rest)` when the subshell is the whole command.
|
|
34
|
+
*/
|
|
35
|
+
export function leadingCds(cmd, depth = 0) {
|
|
36
|
+
const s = String(cmd ?? '').trim();
|
|
37
|
+
const { segs } = scan(s);
|
|
38
|
+
const cds = [];
|
|
39
|
+
let k = 0;
|
|
40
|
+
for (; k < segs.length; k++) {
|
|
41
|
+
const p = segs[k];
|
|
42
|
+
const w = words(s.slice(p.start, p.end));
|
|
43
|
+
if (w[0] !== 'cd' || w.length > 2 || p.bodies.length)
|
|
44
|
+
break;
|
|
45
|
+
let end = k;
|
|
46
|
+
if (p.sep === '||') {
|
|
47
|
+
const q = segs[k + 1];
|
|
48
|
+
const e = q ? words(s.slice(q.start, q.end)) : [];
|
|
49
|
+
if (!q || q.bodies.length || q.group || !/^(?:exit|return)$/.test(e[0] ?? '') || e.length > 2)
|
|
50
|
+
break;
|
|
51
|
+
end = k + 1;
|
|
52
|
+
}
|
|
53
|
+
const sep = segs[end].sep;
|
|
54
|
+
if (end < segs.length - 1 && sep !== '&&' && sep !== ';')
|
|
55
|
+
break;
|
|
56
|
+
if (end === segs.length - 1 && sep !== '')
|
|
57
|
+
break;
|
|
58
|
+
cds.push(w[1] === undefined ? '~' : unquote(w[1]));
|
|
59
|
+
k = end;
|
|
60
|
+
}
|
|
61
|
+
if (k === segs.length && k > 0)
|
|
62
|
+
return { cds, rest: '' };
|
|
63
|
+
const rest = k ? s.slice(segs[k].start).trim() : s;
|
|
64
|
+
const only = scan(rest).segs;
|
|
65
|
+
const g = only.length === 1 ? only[0].group : null;
|
|
66
|
+
if (g && rest[g.open] === '(' && g.close === rest.length - 1 && depth < MAX_DEPTH && /^\s*cd\b/.test(rest.slice(g.open + 1))) {
|
|
67
|
+
const inner = leadingCds(rest.slice(g.open + 1, g.close), depth + 1);
|
|
68
|
+
if (inner.cds.length)
|
|
69
|
+
return { cds: [...cds, ...inner.cds], rest: inner.rest };
|
|
70
|
+
}
|
|
71
|
+
return { cds, rest };
|
|
72
|
+
}
|
|
73
|
+
/** Drops a leading `sleep N;` / `sleep N &&`. A sleep inside a subshell or pipe stays. */
|
|
74
|
+
export function stripLeadingSleep(cmd) {
|
|
75
|
+
const s = String(cmd ?? '').trim();
|
|
76
|
+
const { segs } = scan(s);
|
|
77
|
+
let k = 0;
|
|
78
|
+
for (; k < segs.length - 1; k++) {
|
|
79
|
+
const p = segs[k];
|
|
80
|
+
if (p.sep !== ';' && p.sep !== '&&')
|
|
81
|
+
break;
|
|
82
|
+
const w = words(s.slice(p.start, p.end));
|
|
83
|
+
if (w[0] !== 'sleep' || w.length !== 2)
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
return k ? s.slice(segs[k].start).trim() : s;
|
|
87
|
+
}
|
|
88
|
+
/** Drops a leading `timeout N ` / `gtimeout N ` (also right after env prefixes). */
|
|
89
|
+
export function stripTimeout(cmd) {
|
|
90
|
+
const s = String(cmd ?? '').trim();
|
|
91
|
+
const { env, rest } = envPrefix(s);
|
|
92
|
+
const w = words(rest);
|
|
93
|
+
const after = afterTimeout(w);
|
|
94
|
+
if (!after?.length)
|
|
95
|
+
return s;
|
|
96
|
+
// Cut the original text where the command after the duration starts, so its spacing and quotes stay as typed.
|
|
97
|
+
let at = 0;
|
|
98
|
+
for (const word of w.slice(0, w.length - after.length))
|
|
99
|
+
at = rest.indexOf(word, at) + word.length;
|
|
100
|
+
return [...env, rest.slice(at).trim()].join(' ').trim();
|
|
101
|
+
}
|
|
102
|
+
/** Drops trailing `| tail…`, `| head…`, `| less`, `| more`, `| cat` segments and the `2>&1` that fed them. */
|
|
103
|
+
export function stripOutputFilters(cmd) {
|
|
104
|
+
let s = String(cmd ?? '').trim();
|
|
105
|
+
for (;;) {
|
|
106
|
+
const { segs, keep } = scan(s);
|
|
107
|
+
let k = segs.length;
|
|
108
|
+
while (k > 1 && segs[k - 2].sep === '|' && /^(?:tail|head|less|more|cat)$/.test(words(s.slice(segs[k - 1].start, segs[k - 1].end))[0] ?? ''))
|
|
109
|
+
k--;
|
|
110
|
+
if (k === segs.length)
|
|
111
|
+
return s;
|
|
112
|
+
const prev = segs[k - 1];
|
|
113
|
+
const head = s.slice(prev.start, prev.end);
|
|
114
|
+
const redirect = /\s*2>&1\s*$/.exec(head);
|
|
115
|
+
const from = redirect ? prev.start + redirect.index : prev.end;
|
|
116
|
+
s = cut(s, [[from, segs[segs.length - 1].end]], keep);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** Drops a last segment that is only `echo …` or `printf …` after `&&`, `;` or `||`. */
|
|
120
|
+
export function stripTrailingEcho(cmd) {
|
|
121
|
+
const s = String(cmd ?? '').trim();
|
|
122
|
+
const { segs, keep } = scan(s);
|
|
123
|
+
if (segs.length < 2)
|
|
124
|
+
return s;
|
|
125
|
+
const prev = segs[segs.length - 2];
|
|
126
|
+
const last = segs[segs.length - 1];
|
|
127
|
+
if (prev.sep !== '&&' && prev.sep !== ';' && prev.sep !== '||')
|
|
128
|
+
return s;
|
|
129
|
+
if (!/^(?:echo|printf)$/.test(words(s.slice(last.start, last.end))[0] ?? '') || last.bodies.length)
|
|
130
|
+
return s;
|
|
131
|
+
return cut(s, [[prev.end, last.end]], keep);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The first segment's program after env prefixes, leading cds, `time`, `nice`, `command`, and a
|
|
135
|
+
* `script -q /dev/null` wrapper; two words for RUNNERS (`git push`, `gh pr`, `npm run`, `npx vitest`).
|
|
136
|
+
* Never a word from inside quotes or a heredoc body.
|
|
137
|
+
*/
|
|
138
|
+
export function programOf(cmd) {
|
|
139
|
+
const s = String(cmd ?? '').trim();
|
|
140
|
+
if (!s)
|
|
141
|
+
return null;
|
|
142
|
+
return programOfText(leadingCds(s).rest || s).prog;
|
|
143
|
+
}
|
|
144
|
+
/** `find` actions that change files or run commands: such a find is not a look. */
|
|
145
|
+
const FIND_ACTS = /^-(?:delete|exec|execdir|ok|okdir|fprint0?|fprintf|fls)$/;
|
|
146
|
+
/**
|
|
147
|
+
* Commands that only report on the machine, reshape text, read an API or print a version or help: they
|
|
148
|
+
* run, but change nothing, so they are looks (on the program words, wrappers gone; a file redirect still
|
|
149
|
+
* makes them work).
|
|
150
|
+
*/
|
|
151
|
+
const INFO = /^(?:date|uname|hostname|sw_vers|whoami|id|uptime|nproc|ps|pgrep|lsof|vm_stat|printenv|sysctl|seq|tr|sort(?![^|;&]*\s-\w*o)|uniq|cut|awk|column|paste|comm|nl|diff|cmp|basename|dirname|realpath|readlink|od|xxd|strings|xargs echo|git (?:rev-list|for-each-ref|name-rev|ls-tree)|docker (?:ps|images|inspect|logs|version|context (?:ls|inspect|show))|colima (?:status|list|ls)|kubectl (?:get|describe|logs)|npm config get|git config --get|brew (?:list|info)|open(?!\s+-[aAbe]\b)|gh (?:repo|release) (?:list|view)|gh api(?![^|;&]*\s(?:-X|--method|-f|-F|--field|--raw-field|--input)\b))(?:\s|$)|^(?:npx(?:\s+-[\w-]+)*\s+)?[\w.@/+-]+(?: [\w-]+)? (?:--version|-v|-V|version|--help|-h|help)(?:\s+\d?>>?&?\s*[^\s&>]\S*)*$/;
|
|
152
|
+
/**
|
|
153
|
+
* A segment's kind on its own: plumbing, work, look or step. A top-level redirect into a file turns
|
|
154
|
+
* a look or plumbing segment into work: `grep x a > ~/.trail/y` writes a file, and the tamper check
|
|
155
|
+
* (4.1) trusts that a look only reads.
|
|
156
|
+
*/
|
|
157
|
+
function segKind(s, p, depth) {
|
|
158
|
+
if (p.group)
|
|
159
|
+
return kindOf(groupInner(s, p), depth + 1);
|
|
160
|
+
const head = s.slice(p.start, p.end);
|
|
161
|
+
// D51, D58 e: an interpreter's heredoc program is read for what it does; it is never a step.
|
|
162
|
+
const prog = p.bodies.length ? heredocInterpreter(programWords(head)) : null;
|
|
163
|
+
if (prog)
|
|
164
|
+
return scriptKind(p.bodies.map(([a, b]) => s.slice(a, b)).join('\n'), prog) === 'look' && !writesFile(head) ? 'look' : 'work';
|
|
165
|
+
const k = readKind(head, depth);
|
|
166
|
+
return (k === 'look' || k === 'plumbing') && writesFile(head) ? 'work' : k;
|
|
167
|
+
}
|
|
168
|
+
function readKind(head, depth) {
|
|
169
|
+
const w = programWords(head);
|
|
170
|
+
const prog = base(w[0] ?? '');
|
|
171
|
+
if (OPEN_KW.has(w[0] ?? '')) {
|
|
172
|
+
const inner = stripKeywords(head);
|
|
173
|
+
if (inner !== head)
|
|
174
|
+
return kindOf(inner, depth + 1);
|
|
175
|
+
}
|
|
176
|
+
if (!w.length || shellOnly(prog))
|
|
177
|
+
return 'plumbing';
|
|
178
|
+
if (INFO.test(w.join(' ').replace(/^docker(?:\s+(?:--context|-c|--host|-H)[ =]\S+)+/, 'docker')))
|
|
179
|
+
return 'look';
|
|
180
|
+
const sub = w.slice(1).filter((a) => !a.startsWith('-'));
|
|
181
|
+
const flags = w.slice(1).filter((a) => a.startsWith('-'));
|
|
182
|
+
if (prog === 'git') {
|
|
183
|
+
const g = w.slice(1).filter((a, i, all) => !a.startsWith('-') && !VALUE_FLAGS.git.has(all[i - 1] ?? ''));
|
|
184
|
+
const verb = g[0];
|
|
185
|
+
if ((verb === 'worktree' || verb === 'stash') && /^(?:list|show)$/.test(g[1] ?? ''))
|
|
186
|
+
return 'look';
|
|
187
|
+
if (verb === 'tag' && (g.length === 1 || flags.some((f) => /^(?:-l|--list|--contains|--points-at)$/.test(f))))
|
|
188
|
+
return 'look';
|
|
189
|
+
if (verb && /^(?:add|commit|stash|restore|rm|mv|apply|am)$/.test(verb))
|
|
190
|
+
return 'work';
|
|
191
|
+
if (verb === 'checkout' && w.includes('--'))
|
|
192
|
+
return 'work';
|
|
193
|
+
if (verb && /^(?:status|log|diff|show|ls-files|blame|describe|reflog|shortlog)$/.test(verb))
|
|
194
|
+
return flags.some((f) => /^--output\b/.test(f)) ? 'step' : 'look';
|
|
195
|
+
if (verb === 'rev-parse' && !w.includes('--verify'))
|
|
196
|
+
return 'look';
|
|
197
|
+
if (verb === 'remote' && g.length === 1)
|
|
198
|
+
return 'look';
|
|
199
|
+
if (verb === 'branch' && g.length === 1 && !flags.some((f) => /^-(?:[dDmMcCfu]|-delete|-move|-copy|-force|-set-upstream-to|-unset-upstream|-edit-description)/.test(f)))
|
|
200
|
+
return 'look';
|
|
201
|
+
return 'step';
|
|
202
|
+
}
|
|
203
|
+
if (prog === 'gh') {
|
|
204
|
+
if (/^(?:pr (?:view|list|diff)|run list|issue (?:view|list)|repo view)$/.test(sub.slice(0, 2).join(' ')))
|
|
205
|
+
return 'look';
|
|
206
|
+
return 'step';
|
|
207
|
+
}
|
|
208
|
+
if (prog === 'npm' && sub[0] === 'ls')
|
|
209
|
+
return 'look';
|
|
210
|
+
if (prog === 'perl' && flags.some((f) => /^-\w*i/.test(f)))
|
|
211
|
+
return 'work';
|
|
212
|
+
// D51, D58 e: `node -e`, `python3 -c`: a step only when it is one line that starts a program.
|
|
213
|
+
const code = inlineScript(w);
|
|
214
|
+
if (code !== null)
|
|
215
|
+
return scriptKind(code, prog);
|
|
216
|
+
if (prog === 'sed')
|
|
217
|
+
return flags.some((f) => /^-[a-zA-Z]*i/.test(f) || f === '--in-place') ? 'work' : flags.includes('-n') ? 'look' : 'step';
|
|
218
|
+
if (prog === 'perl')
|
|
219
|
+
return flags.some((f) => /^-\w*i/.test(f)) ? 'work' : 'step';
|
|
220
|
+
if (prog === 'rm')
|
|
221
|
+
return flags.some((f) => /^-\w*[rR]|^--recursive/.test(f)) ? 'step' : 'work';
|
|
222
|
+
if (prog === 'tee')
|
|
223
|
+
return sub.length ? 'work' : 'plumbing';
|
|
224
|
+
if (/^(?:patch|mkdir|touch|cp|mv|chmod|ln)$/.test(prog))
|
|
225
|
+
return 'work';
|
|
226
|
+
if (prog === 'command')
|
|
227
|
+
return w[1] === '-v' || w[1] === '-V' ? 'look' : 'step';
|
|
228
|
+
if (prog === 'find' && w.some((a) => FIND_ACTS.test(a)))
|
|
229
|
+
return 'step';
|
|
230
|
+
if (prog === 'tree' && flags.some((f) => /^-o/.test(f)))
|
|
231
|
+
return 'step';
|
|
232
|
+
if (/^(?:ls|cat|head|tail|grep|egrep|rg|find|wc|pwd|which|less|more|tree|stat|file|du|df|jq|test|\[)$/.test(prog))
|
|
233
|
+
return 'look';
|
|
234
|
+
return 'step';
|
|
235
|
+
}
|
|
236
|
+
/** What a whole command is: plumbing when every segment is; work when it only edits or commits; look when it only reads. */
|
|
237
|
+
function kindOf(cmd, depth = 0) {
|
|
238
|
+
if (depth > MAX_DEPTH)
|
|
239
|
+
return 'step';
|
|
240
|
+
const s = String(cmd ?? '');
|
|
241
|
+
const { segs } = scan(s);
|
|
242
|
+
const kinds = segs.map((p) => segKind(s, p, depth));
|
|
243
|
+
if (kinds.every((k) => k === 'plumbing'))
|
|
244
|
+
return 'plumbing';
|
|
245
|
+
if (kinds.includes('step'))
|
|
246
|
+
return 'step';
|
|
247
|
+
return kinds.includes('work') ? 'work' : 'look';
|
|
248
|
+
}
|
|
249
|
+
/** Read-only exploration (4.1 kinds). */
|
|
250
|
+
export function isLookOnly(cmd) {
|
|
251
|
+
const k = kindOf(cmd);
|
|
252
|
+
return k === 'look' || k === 'plumbing';
|
|
253
|
+
}
|
|
254
|
+
/** Changes the work itself rather than running the job (4.1 kinds). */
|
|
255
|
+
export function isWork(cmd) {
|
|
256
|
+
return kindOf(cmd) === 'work';
|
|
257
|
+
}
|
|
258
|
+
/** plumbing, work, look or step from the command alone (4.1; the fold also counts read-only check families as look). */
|
|
259
|
+
export function commandKind(cmd) {
|
|
260
|
+
return kindOf(cmd);
|
|
261
|
+
}
|
|
262
|
+
const TRAIL_BIN = /^(?:trail|graft|trail-code)$/;
|
|
263
|
+
const TRAIL_PKG = /^(?:@trailhq\/trail-code|@nanonets\/graft|trail-code)(?:@\S*)?$/;
|
|
264
|
+
const TRAIL_SCRIPT = /(?:^|\/)dist\/bin\/(?:trail|graft)\.js$|(?:^|\/)(?:trail|graft)-hooks\.cjs$/;
|
|
265
|
+
/** Trail's own program in one simple command (not through `sh -c`). `bare`: only `trail`/`graft` found on PATH, not a path to one. */
|
|
266
|
+
function trailProgram(w, bare) {
|
|
267
|
+
const p = w[0];
|
|
268
|
+
if (!p)
|
|
269
|
+
return false;
|
|
270
|
+
if (bare ? TRAIL_BIN.test(p) : TRAIL_BIN.test(base(p)) || TRAIL_SCRIPT.test(p))
|
|
271
|
+
return true;
|
|
272
|
+
const args = w.slice(1).filter((a) => !a.startsWith('-'));
|
|
273
|
+
if (p === 'npx' || p === 'bunx' || p === 'pnpx')
|
|
274
|
+
return TRAIL_PKG.test(args[0] ?? '');
|
|
275
|
+
if ((p === 'pnpm' || p === 'yarn') && args[0] === 'dlx')
|
|
276
|
+
return TRAIL_PKG.test(args[1] ?? '');
|
|
277
|
+
if (p === 'npm' && args[0] === 'exec')
|
|
278
|
+
return TRAIL_PKG.test(args[1] ?? '');
|
|
279
|
+
if (base(p) === 'node')
|
|
280
|
+
return TRAIL_SCRIPT.test(args[0] ?? '');
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
function trailSegment(text, depth) {
|
|
284
|
+
const raw = programWords(text);
|
|
285
|
+
const script = shellScript(raw);
|
|
286
|
+
return script !== null ? isTrailAt(script, depth + 1) : trailProgram(raw.map(unquote), false);
|
|
287
|
+
}
|
|
288
|
+
function isTrailAt(s, depth) {
|
|
289
|
+
if (depth > MAX_DEPTH)
|
|
290
|
+
return false;
|
|
291
|
+
return scan(s, false).segs.some((p) => (p.group ? isTrailAt(groupInner(s, p), depth + 1) : trailSegment(s.slice(p.start, p.end), depth)));
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Any part of the command runs Trail: trail, graft, npx @trailhq/trail-code, npx @nanonets/graft,
|
|
295
|
+
* node …/dist/bin/(trail|graft).js. For "a skill never runs Trail" (4.11). The fold's "Trail's own
|
|
296
|
+
* command, ignored" (4.1) is `onlyTrail`: `trail x; rm ~/.trail/y` runs Trail and is not only Trail.
|
|
297
|
+
*/
|
|
298
|
+
export function isTrailCommand(cmd) {
|
|
299
|
+
const s = String(cmd ?? '');
|
|
300
|
+
return isTrailAt(s, 0) || TRAIL_INSIDE.test(s);
|
|
301
|
+
}
|
|
302
|
+
/** Trail run inside a word: `$(trail …)`, `<(trail …)`. Not backticks: `graft` in backticks is far more often a quoted word in a commit message. */
|
|
303
|
+
const TRAIL_INSIDE = /(?:\$\(|[<>]\()\s*(?:trail|graft|trail-code|npx\s+(?:@trailhq\/trail-code|@nanonets\/graft))\b/;
|
|
304
|
+
/** Code that runs inside a word: `$( )`, backticks, `<( )`, `>( )`, outside single quotes (and anywhere in a command with a heredoc). */
|
|
305
|
+
function runsInside(s) {
|
|
306
|
+
let dq = false;
|
|
307
|
+
for (let i = 0; i < s.length; i++) {
|
|
308
|
+
const c = s[i];
|
|
309
|
+
if (c === '\\') {
|
|
310
|
+
i++;
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (c === '`' || (c === '$' && s[i + 1] === '('))
|
|
314
|
+
return true;
|
|
315
|
+
if (dq) {
|
|
316
|
+
if (c === '"')
|
|
317
|
+
dq = false;
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
if (c === '"')
|
|
321
|
+
dq = true;
|
|
322
|
+
else if (c === "'") {
|
|
323
|
+
if (s[i - 1] === '$')
|
|
324
|
+
while (i + 1 < s.length && s[i + 1] !== "'")
|
|
325
|
+
i += s[i + 1] === '\\' ? 2 : 1;
|
|
326
|
+
else
|
|
327
|
+
while (i + 1 < s.length && s[i + 1] !== "'")
|
|
328
|
+
i++;
|
|
329
|
+
i++;
|
|
330
|
+
}
|
|
331
|
+
else if ((c === '<' || c === '>') && s[i + 1] === '(')
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
return scan(s).heredoc && /`|\$\(/.test(s);
|
|
335
|
+
}
|
|
336
|
+
/** Lines that change what a later `trail` runs: PATH, an alias, a function. */
|
|
337
|
+
const REDEFINES = /\bPATH\+?=|^(?:alias|unalias|hash|function)$|^[\w.-]+\(\)/;
|
|
338
|
+
function onlyTrailAt(s, depth) {
|
|
339
|
+
if (depth > MAX_DEPTH || !s.trim() || runsInside(s))
|
|
340
|
+
return false;
|
|
341
|
+
let trail = false;
|
|
342
|
+
for (const simple of simpleCommands(s)) {
|
|
343
|
+
if (writesFile(simple) || words(simple).some((x) => REDEFINES.test(x)))
|
|
344
|
+
return false;
|
|
345
|
+
const raw = programWords(simple);
|
|
346
|
+
const script = shellScript(raw);
|
|
347
|
+
if (script !== null) {
|
|
348
|
+
if (!onlyTrailAt(script, depth + 1))
|
|
349
|
+
return false;
|
|
350
|
+
trail = true;
|
|
351
|
+
}
|
|
352
|
+
else if (trailProgram(raw.map(unquote), true))
|
|
353
|
+
trail = true;
|
|
354
|
+
else if (!['look', 'plumbing'].includes(kindOf(simple, depth + 1)))
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
return trail;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* The whole command is Trail's own (4.1 "ignored entirely", and the tamper check's exemption): it runs
|
|
361
|
+
* Trail, and everything else in it only reads or sets up the shell. Not when any part writes a file
|
|
362
|
+
* (a redirect, cp, tee), runs code inside a word (`$( )`, backticks), runs another program, or changes
|
|
363
|
+
* which `trail` runs (PATH, an alias, a function, a path to a `trail`).
|
|
364
|
+
*/
|
|
365
|
+
export function onlyTrail(cmd) {
|
|
366
|
+
return onlyTrailAt(String(cmd ?? ''), 0);
|
|
367
|
+
}
|
|
368
|
+
/** The strips, repeated until nothing changes. */
|
|
369
|
+
function stripped(cmd) {
|
|
370
|
+
let s = String(cmd ?? '').trim();
|
|
371
|
+
for (let n = 0; n < 20; n++) {
|
|
372
|
+
const next = stripTimeout(stripLeadingSleep(leadingCds(stripTrailingEcho(stripOutputFilters(s))).rest));
|
|
373
|
+
if (next === s)
|
|
374
|
+
break;
|
|
375
|
+
s = next;
|
|
376
|
+
}
|
|
377
|
+
return s;
|
|
378
|
+
}
|
|
379
|
+
const flatten = (s) => s.replace(/['"]/g, '').replace(/\s+/g, ' ').trim();
|
|
380
|
+
/** For comparisons: output filters, trailing echo, leading cds, leading sleep and timeout stripped; quotes removed; spaces collapsed. */
|
|
381
|
+
export function normalizeCommand(cmd) {
|
|
382
|
+
return flatten(stripped(cmd));
|
|
383
|
+
}
|
|
384
|
+
const escapeRe = (t) => t.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
385
|
+
/**
|
|
386
|
+
* A step matches a command that ran when, after normalizeCommand on both, the step (params filled from
|
|
387
|
+
* `values` where known, other {params} as \S+) matches at the start of the ran command or right after a
|
|
388
|
+
* top-level `&& ` or `; `. Env prefixes are compared too, unless `ignoreEnv`.
|
|
389
|
+
*/
|
|
390
|
+
export function stepMatches(step, ran, values = {}, ignoreEnv = false) {
|
|
391
|
+
const core = stripped(step);
|
|
392
|
+
let want = flatten(core);
|
|
393
|
+
if (ignoreEnv)
|
|
394
|
+
want = envPrefix(want).rest;
|
|
395
|
+
if (!want)
|
|
396
|
+
return false;
|
|
397
|
+
// An unknown {param} is one token, never an operator: `{b}` can't swallow `&&`.
|
|
398
|
+
const re = new RegExp(`^${want.split(/(\{[A-Za-z_][\w]*\})/).map((part) => {
|
|
399
|
+
const name = /^\{([A-Za-z_]\w*)\}$/.exec(part)?.[1];
|
|
400
|
+
if (!name)
|
|
401
|
+
return escapeRe(part);
|
|
402
|
+
const v = values[name];
|
|
403
|
+
return v === undefined ? '[^\\s;&|<>]+' : escapeRe(flatten(v));
|
|
404
|
+
}).join('')}(?=$|[\\s;&|])`);
|
|
405
|
+
// The step spans `width` top-level segments, so a match from segment k reads only k..k+width-1:
|
|
406
|
+
// linear in the command, where re-reading every tail was quadratic (a 7 KB script took 8 s).
|
|
407
|
+
const width = Math.max(1, scan(core).segs.length);
|
|
408
|
+
const s = stripped(ran);
|
|
409
|
+
const { segs } = scan(s);
|
|
410
|
+
for (let k = 0; k < segs.length; k++) {
|
|
411
|
+
if (k > 0 && segs[k - 1].sep !== '&&' && segs[k - 1].sep !== ';')
|
|
412
|
+
continue;
|
|
413
|
+
const last = segs[Math.min(k + width, segs.length) - 1];
|
|
414
|
+
let tail = flatten(stripTimeout(stripLeadingSleep(leadingCds(s.slice(segs[k].start, last.end)).rest)));
|
|
415
|
+
if (ignoreEnv)
|
|
416
|
+
tail = envPrefix(tail).rest;
|
|
417
|
+
if (re.test(tail))
|
|
418
|
+
return true;
|
|
419
|
+
}
|
|
420
|
+
return false;
|
|
421
|
+
}
|
|
422
|
+
/** Absolute path tokens: under repoRoot become repo-relative (`./x` or `x`); under home become `$HOME/…`; `~/` becomes `$HOME/`. */
|
|
423
|
+
export function relativizePaths(cmd, repoRoot, home) {
|
|
424
|
+
const before = String.raw `(^|[\s'"=:(,]|(?<=:)//)`;
|
|
425
|
+
const after = String.raw `(?=$|[/\s'"),;:&|])`;
|
|
426
|
+
let s = String(cmd ?? '');
|
|
427
|
+
const root = repoRoot.replace(/\/+$/, '');
|
|
428
|
+
const h = home.replace(/\/+$/, '');
|
|
429
|
+
if (root)
|
|
430
|
+
s = s.replace(new RegExp(`${before}${escapeRe(root)}${after}(/?)`, 'g'), (_m, pre, slash) => `${pre}.${slash}`);
|
|
431
|
+
if (h)
|
|
432
|
+
s = s.replace(new RegExp(`${before}${escapeRe(h)}${after}`, 'g'), (_m, pre) => `${pre}$HOME`);
|
|
433
|
+
return s.replace(/(^|[\s'"=:(,])~(?=\/|$|\s)/g, '$1$HOME');
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/trace/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { TraceEvent } from './claude.js';
|
|
2
|
+
import { type FoldResult } from './runs.js';
|
|
3
|
+
import type { CodexMeta, RunState, SkillInjection, SkillSessionState } from './types.js';
|
|
4
|
+
export { housekeeping } from './housekeeping.js';
|
|
5
|
+
export type SkipWhy = 'no-hooks' | 'off' | 'no-session';
|
|
6
|
+
export type LearnOffWhy = 'host' | 'headless' | 'ci' | 'subagent' | 'scratch' | 'ephemeral';
|
|
7
|
+
export interface GateCtx {
|
|
8
|
+
sessionId: string;
|
|
9
|
+
sessionHash: string;
|
|
10
|
+
host: string;
|
|
11
|
+
tier: 'A' | 'B' | 'C' | 'D';
|
|
12
|
+
entry: 'interactive' | 'headless';
|
|
13
|
+
permissionMode: string | null;
|
|
14
|
+
subagent: boolean;
|
|
15
|
+
/** Runs are folded and run sheets written: interactive, top level, not CI, not scratch, any host (4.1). */
|
|
16
|
+
fold: boolean;
|
|
17
|
+
/** fold and tier A: pool days, offers, credit, live saves (0 rule 2). */
|
|
18
|
+
learn: boolean;
|
|
19
|
+
learnOff: LearnOffWhy | null;
|
|
20
|
+
dir: string;
|
|
21
|
+
/** The checkout root of the payload's cwd; '' when it is not inside git. */
|
|
22
|
+
checkout: string;
|
|
23
|
+
repoKey: string;
|
|
24
|
+
transcriptPath: string | null;
|
|
25
|
+
env: NodeJS.ProcessEnv;
|
|
26
|
+
now: Date;
|
|
27
|
+
/** Codex only (4.17): the rollout's first line, read by the gate; the session keeps it in `st.codex.meta`. */
|
|
28
|
+
codexMeta?: CodexMeta | null;
|
|
29
|
+
}
|
|
30
|
+
/** 3.0. */
|
|
31
|
+
export declare function skillsGate(input: any, dir: string, env?: NodeJS.ProcessEnv, now?: Date): {
|
|
32
|
+
ok: true;
|
|
33
|
+
ctx: GateCtx;
|
|
34
|
+
} | {
|
|
35
|
+
ok: false;
|
|
36
|
+
why: SkipWhy;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Locked read-modify-write of the `skills` key of sessions/<id>.json (lock wait default 200 ms).
|
|
40
|
+
* With catchUp (ctx.fold only): takePostMarks, then the host dialect's readNewEvents(transcript, sessionStatePath(id))
|
|
41
|
+
* (4.16; a host with no dialect keeps 1a's reader, so J24's Cursor and Copilot payloads still fold and are held)
|
|
42
|
+
* then foldEvents, inside the
|
|
43
|
+
* same lock (the `trace` cursor lives in the same file); then, for every run the fold closed with
|
|
44
|
+
* stepCalls > 0 and sheet 'none', writeRunSheet(run, checkedSuccess(run, null)), then its calls are emptied.
|
|
45
|
+
* Returns undefined when the lock timed out: the caller fails open.
|
|
46
|
+
*
|
|
47
|
+
* `fn` still sees the closed runs' calls (in `fold.closed`); they are emptied before the state is written. When `fn`
|
|
48
|
+
* throws, the folded state is written as it was before `fn`, so the cursor that moved and the state agree.
|
|
49
|
+
* `prepare` runs on the state first, before the catch-up: the Codex prompt hook records the prompt's keyed hash
|
|
50
|
+
* there, so a typed line already in the rollout counts in this same read (P30).
|
|
51
|
+
*/
|
|
52
|
+
export declare function withSkillSession<T>(ctx: GateCtx, opts: {
|
|
53
|
+
catchUp: boolean;
|
|
54
|
+
waitMs?: number;
|
|
55
|
+
prepare?: (st: SkillSessionState) => void;
|
|
56
|
+
}, fn: (st: SkillSessionState, fold: (FoldResult & {
|
|
57
|
+
events: TraceEvent[];
|
|
58
|
+
}) | null) => T): T | undefined;
|
|
59
|
+
/** Unlocked read (`trail skills`). A new state when none. */
|
|
60
|
+
export declare function loadSkillSession(ctx: GateCtx): SkillSessionState;
|
|
61
|
+
export declare function currentRun(st: SkillSessionState): RunState | null;
|
|
62
|
+
export declare function injectedThisEpoch(st: SkillSessionState): SkillInjection[];
|
|
63
|
+
export declare function liveInjections(st: SkillSessionState): SkillInjection[];
|
|
64
|
+
//# sourceMappingURL=skill-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-session.d.ts","sourceRoot":"","sources":["../../src/trace/skill-session.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,EAA2E,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACrH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAC5F,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC5B,KAAK,EAAE,aAAa,GAAG,UAAU,CAAC;IAClC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,2GAA2G;IAC3G,IAAI,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,EAAE,IAAI,CAAC;IACV,8GAA8G;IAC9G,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC9B;AAaD,WAAW;AACX,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CAoD9J;AA0ED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAAE,EACtI,EAAE,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,UAAU,GAAG;IAAE,MAAM,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CA8BvG;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAEhE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,iBAAiB,GAAG,QAAQ,GAAG,IAAI,CAGjE;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,iBAAiB,GAAG,cAAc,EAAE,CAEzE;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,iBAAiB,GAAG,cAAc,EAAE,CAEtE"}
|