@nanonets/graft 0.24.0 → 0.25.0
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 +26 -21
- 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/blast/render.js +1 -1
- package/dist/blast/render.js.map +1 -1
- package/dist/brand.js +1 -1
- package/dist/brand.js.map +1 -1
- package/dist/check/learning-edits.d.ts +18 -3
- package/dist/check/learning-edits.d.ts.map +1 -1
- package/dist/check/learning-edits.js +54 -10
- package/dist/check/learning-edits.js.map +1 -1
- package/dist/check/local-check.d.ts +7 -3
- package/dist/check/local-check.d.ts.map +1 -1
- package/dist/check/local-check.js +55 -11
- package/dist/check/local-check.js.map +1 -1
- package/dist/check/types.d.ts +11 -2
- package/dist/check/types.d.ts.map +1 -1
- package/dist/claude/format.d.ts +11 -7
- package/dist/claude/format.d.ts.map +1 -1
- package/dist/claude/format.js +50 -28
- 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/hook-layers.d.ts +4 -2
- package/dist/claude/hook-layers.d.ts.map +1 -1
- package/dist/claude/hook-layers.js +21 -4
- package/dist/claude/hook-layers.js.map +1 -1
- package/dist/claude/hooks.d.ts +9 -32
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +154 -350
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.d.ts.map +1 -1
- package/dist/claude/init.js +56 -18
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/note-signals.d.ts +6 -0
- package/dist/claude/note-signals.d.ts.map +1 -1
- package/dist/claude/note-signals.js +14 -3
- package/dist/claude/note-signals.js.map +1 -1
- package/dist/claude/post-bash.d.ts +26 -0
- package/dist/claude/post-bash.d.ts.map +1 -0
- package/dist/claude/post-bash.js +191 -0
- package/dist/claude/post-bash.js.map +1 -0
- package/dist/claude/pre-bash-skills.d.ts +21 -0
- package/dist/claude/pre-bash-skills.d.ts.map +1 -0
- package/dist/claude/pre-bash-skills.js +253 -0
- package/dist/claude/pre-bash-skills.js.map +1 -0
- package/dist/claude/pre-bash.d.ts +50 -0
- package/dist/claude/pre-bash.d.ts.map +1 -0
- package/dist/claude/pre-bash.js +245 -0
- package/dist/claude/pre-bash.js.map +1 -0
- package/dist/claude/prompt-consent.d.ts +19 -0
- package/dist/claude/prompt-consent.d.ts.map +1 -0
- package/dist/claude/prompt-consent.js +14 -0
- package/dist/claude/prompt-consent.js.map +1 -0
- package/dist/claude/prompt-hook.d.ts +76 -0
- package/dist/claude/prompt-hook.d.ts.map +1 -0
- package/dist/claude/prompt-hook.js +303 -0
- package/dist/claude/prompt-hook.js.map +1 -0
- package/dist/claude/prompt-skills.d.ts +19 -0
- package/dist/claude/prompt-skills.d.ts.map +1 -0
- package/dist/claude/prompt-skills.js +305 -0
- package/dist/claude/prompt-skills.js.map +1 -0
- package/dist/claude/session-metrics.js +4 -4
- package/dist/claude/session-metrics.js.map +1 -1
- package/dist/claude/settings-merge.d.ts +10 -0
- package/dist/claude/settings-merge.d.ts.map +1 -1
- package/dist/claude/settings-merge.js +46 -17
- package/dist/claude/settings-merge.js.map +1 -1
- package/dist/claude/shim-template.d.ts.map +1 -1
- package/dist/claude/shim-template.js +86 -28
- package/dist/claude/shim-template.js.map +1 -1
- package/dist/claude/skill-template.d.ts +2 -0
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +53 -34
- package/dist/claude/skill-template.js.map +1 -1
- package/dist/claude/skill-use.d.ts +16 -0
- package/dist/claude/skill-use.d.ts.map +1 -0
- package/dist/claude/skill-use.js +78 -0
- package/dist/claude/skill-use.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/claude/skills-wiring.d.ts +26 -0
- package/dist/claude/skills-wiring.d.ts.map +1 -0
- package/dist/claude/skills-wiring.js +110 -0
- package/dist/claude/skills-wiring.js.map +1 -0
- package/dist/claude/start-init.d.ts +13 -0
- package/dist/claude/start-init.d.ts.map +1 -0
- package/dist/claude/start-init.js +75 -0
- package/dist/claude/start-init.js.map +1 -0
- package/dist/claude/start-skills.d.ts +31 -0
- package/dist/claude/start-skills.d.ts.map +1 -0
- package/dist/claude/start-skills.js +274 -0
- package/dist/claude/start-skills.js.map +1 -0
- package/dist/claude/state.d.ts +19 -7
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/claude/state.js +59 -4
- package/dist/claude/state.js.map +1 -1
- package/dist/claude/stop-skills.d.ts +23 -0
- package/dist/claude/stop-skills.d.ts.map +1 -0
- package/dist/claude/stop-skills.js +233 -0
- package/dist/claude/stop-skills.js.map +1 -0
- package/dist/claude/stop.d.ts +23 -0
- package/dist/claude/stop.d.ts.map +1 -0
- package/dist/claude/stop.js +219 -0
- package/dist/claude/stop.js.map +1 -0
- package/dist/claude/tally.d.ts +29 -41
- package/dist/claude/tally.d.ts.map +1 -1
- package/dist/claude/tally.js +111 -165
- package/dist/claude/tally.js.map +1 -1
- package/dist/claude/walls-hook.d.ts +52 -0
- package/dist/claude/walls-hook.d.ts.map +1 -0
- package/dist/claude/walls-hook.js +279 -0
- package/dist/claude/walls-hook.js.map +1 -0
- package/dist/cli-epilogue.d.ts.map +1 -1
- package/dist/cli-epilogue.js +24 -14
- package/dist/cli-epilogue.js.map +1 -1
- package/dist/cli-meta.js +3 -3
- package/dist/cli-meta.js.map +1 -1
- package/dist/cli-picker.d.ts +24 -0
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +44 -11
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +475 -390
- package/dist/cli.js.map +1 -1
- package/dist/cloud/head-learnings.d.ts +13 -0
- package/dist/cloud/head-learnings.d.ts.map +1 -0
- package/dist/cloud/head-learnings.js +84 -0
- package/dist/cloud/head-learnings.js.map +1 -0
- package/dist/cloud/lookup-activity.d.ts +18 -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 +15 -7
- package/dist/cloud/nudge.d.ts.map +1 -1
- package/dist/cloud/nudge.js +45 -33
- package/dist/cloud/nudge.js.map +1 -1
- package/dist/cloud/onboarding.d.ts +273 -0
- package/dist/cloud/onboarding.d.ts.map +1 -0
- package/dist/cloud/onboarding.js +612 -0
- package/dist/cloud/onboarding.js.map +1 -0
- package/dist/cloud/other-repos.d.ts +39 -0
- package/dist/cloud/other-repos.d.ts.map +1 -0
- package/dist/cloud/other-repos.js +137 -0
- package/dist/cloud/other-repos.js.map +1 -0
- package/dist/cloud/pair.d.ts +86 -0
- package/dist/cloud/pair.d.ts.map +1 -0
- package/dist/cloud/pair.js +270 -0
- package/dist/cloud/pair.js.map +1 -0
- package/dist/cloud/workspace-sync.d.ts +75 -11
- package/dist/cloud/workspace-sync.d.ts.map +1 -1
- package/dist/cloud/workspace-sync.js +409 -53
- package/dist/cloud/workspace-sync.js.map +1 -1
- package/dist/cloud/workspace.d.ts +95 -10
- package/dist/cloud/workspace.d.ts.map +1 -1
- package/dist/cloud/workspace.js +112 -9
- 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 +39 -4
- package/dist/hosts/claude-global.js.map +1 -1
- package/dist/hosts/codex-hooks.d.ts +6 -0
- package/dist/hosts/codex-hooks.d.ts.map +1 -1
- package/dist/hosts/codex-hooks.js +89 -16
- package/dist/hosts/codex-hooks.js.map +1 -1
- package/dist/hosts/codex-trust.d.ts +28 -0
- package/dist/hosts/codex-trust.d.ts.map +1 -0
- package/dist/hosts/codex-trust.js +280 -0
- package/dist/hosts/codex-trust.js.map +1 -0
- package/dist/hosts/cursor-hooks.d.ts.map +1 -1
- package/dist/hosts/cursor-hooks.js +3 -1
- package/dist/hosts/cursor-hooks.js.map +1 -1
- package/dist/init/candidates.d.ts +60 -0
- package/dist/init/candidates.d.ts.map +1 -0
- package/dist/init/candidates.js +202 -0
- package/dist/init/candidates.js.map +1 -0
- package/dist/init/claude-call.d.ts +51 -0
- package/dist/init/claude-call.d.ts.map +1 -0
- package/dist/init/claude-call.js +199 -0
- package/dist/init/claude-call.js.map +1 -0
- package/dist/init/discover-worker.d.ts +18 -0
- package/dist/init/discover-worker.d.ts.map +1 -0
- package/dist/init/discover-worker.js +111 -0
- package/dist/init/discover-worker.js.map +1 -0
- package/dist/init/handover.d.ts +16 -0
- package/dist/init/handover.d.ts.map +1 -0
- package/dist/init/handover.js +92 -0
- package/dist/init/handover.js.map +1 -0
- package/dist/init/howtos.d.ts +20 -0
- package/dist/init/howtos.d.ts.map +1 -0
- package/dist/init/howtos.js +90 -0
- package/dist/init/howtos.js.map +1 -0
- package/dist/init/init-record.d.ts +134 -0
- package/dist/init/init-record.d.ts.map +1 -0
- package/dist/init/init-record.js +339 -0
- package/dist/init/init-record.js.map +1 -0
- package/dist/init/install-paths.d.ts +6 -0
- package/dist/init/install-paths.d.ts.map +1 -0
- package/dist/init/install-paths.js +87 -0
- package/dist/init/install-paths.js.map +1 -0
- 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/keep-answer.d.ts +43 -0
- package/dist/init/keep-answer.d.ts.map +1 -0
- package/dist/init/keep-answer.js +118 -0
- package/dist/init/keep-answer.js.map +1 -0
- package/dist/init/keep-gate.d.ts +30 -0
- package/dist/init/keep-gate.d.ts.map +1 -0
- package/dist/init/keep-gate.js +178 -0
- package/dist/init/keep-gate.js.map +1 -0
- package/dist/init/keep-list.d.ts +67 -0
- package/dist/init/keep-list.d.ts.map +1 -0
- package/dist/init/keep-list.js +232 -0
- package/dist/init/keep-list.js.map +1 -0
- package/dist/init/keep.d.ts +52 -0
- package/dist/init/keep.d.ts.map +1 -0
- package/dist/init/keep.js +393 -0
- package/dist/init/keep.js.map +1 -0
- package/dist/init/look-back-mine.d.ts +37 -0
- package/dist/init/look-back-mine.d.ts.map +1 -0
- package/dist/init/look-back-mine.js +215 -0
- package/dist/init/look-back-mine.js.map +1 -0
- package/dist/init/look-back.d.ts +81 -0
- package/dist/init/look-back.d.ts.map +1 -0
- package/dist/init/look-back.js +170 -0
- package/dist/init/look-back.js.map +1 -0
- package/dist/init/miners.d.ts +46 -0
- package/dist/init/miners.d.ts.map +1 -0
- package/dist/init/miners.js +141 -0
- package/dist/init/miners.js.map +1 -0
- package/dist/init/name-call.d.ts +37 -0
- package/dist/init/name-call.d.ts.map +1 -0
- package/dist/init/name-call.js +151 -0
- package/dist/init/name-call.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 +83 -0
- package/dist/init/plain-file.js.map +1 -0
- package/dist/init/prefs.d.ts +70 -0
- package/dist/init/prefs.d.ts.map +1 -0
- package/dist/init/prefs.js +282 -0
- package/dist/init/prefs.js.map +1 -0
- package/dist/init/relay.d.ts +15 -0
- package/dist/init/relay.d.ts.map +1 -0
- package/dist/init/relay.js +15 -0
- package/dist/init/relay.js.map +1 -0
- package/dist/init/replay-runs.d.ts +121 -0
- package/dist/init/replay-runs.d.ts.map +1 -0
- package/dist/init/replay-runs.js +457 -0
- package/dist/init/replay-runs.js.map +1 -0
- package/dist/init/replay-tamper.d.ts +18 -0
- package/dist/init/replay-tamper.d.ts.map +1 -0
- package/dist/init/replay-tamper.js +87 -0
- package/dist/init/replay-tamper.js.map +1 -0
- package/dist/init/review-screen.d.ts +74 -0
- package/dist/init/review-screen.d.ts.map +1 -0
- package/dist/init/review-screen.js +258 -0
- package/dist/init/review-screen.js.map +1 -0
- package/dist/init/review-tty.d.ts +29 -0
- package/dist/init/review-tty.d.ts.map +1 -0
- package/dist/init/review-tty.js +218 -0
- package/dist/init/review-tty.js.map +1 -0
- package/dist/init/review.d.ts +12 -0
- package/dist/init/review.d.ts.map +1 -0
- package/dist/init/review.js +12 -0
- package/dist/init/review.js.map +1 -0
- package/dist/init/run.d.ts +87 -0
- package/dist/init/run.d.ts.map +1 -0
- package/dist/init/run.js +347 -0
- package/dist/init/run.js.map +1 -0
- package/dist/init/sessions.d.ts +63 -0
- package/dist/init/sessions.d.ts.map +1 -0
- package/dist/init/sessions.js +377 -0
- package/dist/init/sessions.js.map +1 -0
- package/dist/init/transcript.d.ts +81 -0
- package/dist/init/transcript.d.ts.map +1 -0
- package/dist/init/transcript.js +216 -0
- package/dist/init/transcript.js.map +1 -0
- package/dist/init/types.d.ts +139 -0
- package/dist/init/types.d.ts.map +1 -0
- package/dist/init/types.js +2 -0
- package/dist/init/types.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 +5 -184
- package/dist/notes/cold-start.d.ts.map +1 -1
- package/dist/notes/cold-start.js +5 -575
- package/dist/notes/cold-start.js.map +1 -1
- package/dist/notes/edit-overlap.d.ts.map +1 -1
- package/dist/notes/edit-overlap.js +4 -1
- package/dist/notes/edit-overlap.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/notes.d.ts +8 -4
- package/dist/notes/notes.d.ts.map +1 -1
- package/dist/notes/notes.js +9 -7
- package/dist/notes/notes.js.map +1 -1
- package/dist/notes/pr-reviews.d.ts +4 -0
- package/dist/notes/pr-reviews.d.ts.map +1 -1
- package/dist/notes/pr-reviews.js +6 -5
- 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/repo-trail.d.ts +1 -1
- package/dist/notes/repo-trail.d.ts.map +1 -1
- package/dist/notes/repo-trail.js +24 -4
- package/dist/notes/repo-trail.js.map +1 -1
- package/dist/search/grep.d.ts.map +1 -1
- package/dist/search/grep.js +4 -2
- package/dist/search/grep.js.map +1 -1
- package/dist/search/user-regexp.d.ts +26 -0
- package/dist/search/user-regexp.d.ts.map +1 -0
- package/dist/search/user-regexp.js +150 -0
- package/dist/search/user-regexp.js.map +1 -0
- package/dist/skills/anchors-cli.d.ts +38 -0
- package/dist/skills/anchors-cli.d.ts.map +1 -0
- package/dist/skills/anchors-cli.js +279 -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/cli-skills-1b.d.ts +17 -0
- package/dist/skills/cli-skills-1b.d.ts.map +1 -0
- package/dist/skills/cli-skills-1b.js +166 -0
- package/dist/skills/cli-skills-1b.js.map +1 -0
- package/dist/skills/cli-skills-2.d.ts +35 -0
- package/dist/skills/cli-skills-2.d.ts.map +1 -0
- package/dist/skills/cli-skills-2.js +129 -0
- package/dist/skills/cli-skills-2.js.map +1 -0
- package/dist/skills/cli-skills-report-1b.d.ts +49 -0
- package/dist/skills/cli-skills-report-1b.d.ts.map +1 -0
- package/dist/skills/cli-skills-report-1b.js +191 -0
- package/dist/skills/cli-skills-report-1b.js.map +1 -0
- package/dist/skills/cli-skills-report.d.ts +86 -0
- package/dist/skills/cli-skills-report.d.ts.map +1 -0
- package/dist/skills/cli-skills-report.js +121 -0
- package/dist/skills/cli-skills-report.js.map +1 -0
- package/dist/skills/cli-skills.d.ts +30 -0
- package/dist/skills/cli-skills.d.ts.map +1 -0
- package/dist/skills/cli-skills.js +379 -0
- package/dist/skills/cli-skills.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 +550 -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 +85 -0
- package/dist/skills/compile-words.d.ts.map +1 -0
- package/dist/skills/compile-words.js +445 -0
- package/dist/skills/compile-words.js.map +1 -0
- package/dist/skills/compile.d.ts +42 -0
- package/dist/skills/compile.d.ts.map +1 -0
- package/dist/skills/compile.js +505 -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/credit.d.ts +86 -0
- package/dist/skills/credit.d.ts.map +1 -0
- package/dist/skills/credit.js +259 -0
- package/dist/skills/credit.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/fold-gated.d.ts +3 -0
- package/dist/skills/fold-gated.d.ts.map +1 -0
- package/dist/skills/fold-gated.js +78 -0
- package/dist/skills/fold-gated.js.map +1 -0
- package/dist/skills/fold.d.ts +87 -0
- package/dist/skills/fold.d.ts.map +1 -0
- package/dist/skills/fold.js +348 -0
- package/dist/skills/fold.js.map +1 -0
- package/dist/skills/follow-learnings.d.ts +128 -0
- package/dist/skills/follow-learnings.d.ts.map +1 -0
- package/dist/skills/follow-learnings.js +278 -0
- package/dist/skills/follow-learnings.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/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/learning-steps.d.ts +43 -0
- package/dist/skills/learning-steps.d.ts.map +1 -0
- package/dist/skills/learning-steps.js +294 -0
- package/dist/skills/learning-steps.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/lesson-gate.d.ts +25 -0
- package/dist/skills/lesson-gate.d.ts.map +1 -0
- package/dist/skills/lesson-gate.js +316 -0
- package/dist/skills/lesson-gate.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/offer-drift.d.ts +35 -0
- package/dist/skills/offer-drift.d.ts.map +1 -0
- package/dist/skills/offer-drift.js +98 -0
- package/dist/skills/offer-drift.js.map +1 -0
- package/dist/skills/offer-lesson.d.ts +31 -0
- package/dist/skills/offer-lesson.d.ts.map +1 -0
- package/dist/skills/offer-lesson.js +123 -0
- package/dist/skills/offer-lesson.js.map +1 -0
- package/dist/skills/offer-lines.d.ts +40 -0
- package/dist/skills/offer-lines.d.ts.map +1 -0
- package/dist/skills/offer-lines.js +80 -0
- package/dist/skills/offer-lines.js.map +1 -0
- package/dist/skills/offer-moment.d.ts +102 -0
- package/dist/skills/offer-moment.d.ts.map +1 -0
- package/dist/skills/offer-moment.js +260 -0
- package/dist/skills/offer-moment.js.map +1 -0
- package/dist/skills/offer-repair.d.ts +36 -0
- package/dist/skills/offer-repair.d.ts.map +1 -0
- package/dist/skills/offer-repair.js +212 -0
- package/dist/skills/offer-repair.js.map +1 -0
- package/dist/skills/offer-retire.d.ts +53 -0
- package/dist/skills/offer-retire.d.ts.map +1 -0
- package/dist/skills/offer-retire.js +149 -0
- package/dist/skills/offer-retire.js.map +1 -0
- package/dist/skills/offer-update.d.ts +54 -0
- package/dist/skills/offer-update.d.ts.map +1 -0
- package/dist/skills/offer-update.js +115 -0
- package/dist/skills/offer-update.js.map +1 -0
- package/dist/skills/offer-words-1b.d.ts +32 -0
- package/dist/skills/offer-words-1b.d.ts.map +1 -0
- package/dist/skills/offer-words-1b.js +80 -0
- package/dist/skills/offer-words-1b.js.map +1 -0
- package/dist/skills/offer-words-2.d.ts +123 -0
- package/dist/skills/offer-words-2.d.ts.map +1 -0
- package/dist/skills/offer-words-2.js +194 -0
- package/dist/skills/offer-words-2.js.map +1 -0
- package/dist/skills/offer-words.d.ts +65 -0
- package/dist/skills/offer-words.d.ts.map +1 -0
- package/dist/skills/offer-words.js +205 -0
- package/dist/skills/offer-words.js.map +1 -0
- package/dist/skills/offers.d.ts +66 -0
- package/dist/skills/offers.d.ts.map +1 -0
- package/dist/skills/offers.js +284 -0
- package/dist/skills/offers.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 +47 -0
- package/dist/skills/runblock.d.ts.map +1 -0
- package/dist/skills/runblock.js +227 -0
- package/dist/skills/runblock.js.map +1 -0
- package/dist/skills/save-gate.d.ts +64 -0
- package/dist/skills/save-gate.d.ts.map +1 -0
- package/dist/skills/save-gate.js +354 -0
- package/dist/skills/save-gate.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/save-verify.d.ts +59 -0
- package/dist/skills/save-verify.d.ts.map +1 -0
- package/dist/skills/save-verify.js +390 -0
- package/dist/skills/save-verify.js.map +1 -0
- package/dist/skills/settings.d.ts +48 -0
- package/dist/skills/settings.d.ts.map +1 -0
- package/dist/skills/settings.js +155 -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 +28 -8
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +106 -53
- 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 +8 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/update-gate.d.ts +36 -0
- package/dist/skills/update-gate.d.ts.map +1 -0
- package/dist/skills/update-gate.js +357 -0
- package/dist/skills/update-gate.js.map +1 -0
- package/dist/skills/update-plan.d.ts +40 -0
- package/dist/skills/update-plan.d.ts.map +1 -0
- package/dist/skills/update-plan.js +196 -0
- package/dist/skills/update-plan.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/value-line.d.ts +94 -0
- package/dist/skills/value-line.d.ts.map +1 -0
- package/dist/skills/value-line.js +355 -0
- package/dist/skills/value-line.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 +15 -1
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +80 -11
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/gate.js +4 -4
- package/dist/telemetry/gate.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/notice.js +5 -5
- package/dist/telemetry/notice.js.map +1 -1
- package/dist/telemetry/queue.d.ts.map +1 -1
- package/dist/telemetry/queue.js +7 -7
- package/dist/telemetry/queue.js.map +1 -1
- package/dist/telemetry/track.d.ts.map +1 -1
- package/dist/telemetry/track.js +4 -3
- package/dist/telemetry/track.js.map +1 -1
- package/dist/trace/checks.d.ts +63 -0
- package/dist/trace/checks.d.ts.map +1 -0
- package/dist/trace/checks.js +495 -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/upkeep-run.d.ts.map +1 -1
- package/dist/upkeep-run.js +2 -23
- package/dist/upkeep-run.js.map +1 -1
- package/dist/upkeep.d.ts.map +1 -1
- package/dist/upkeep.js +2 -3
- package/dist/upkeep.js.map +1 -1
- package/dist/util/private-fs.d.ts +6 -0
- package/dist/util/private-fs.d.ts.map +1 -1
- package/dist/util/private-fs.js +9 -1
- package/dist/util/private-fs.js.map +1 -1
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js +17 -3
- 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/package.json +6 -3
- package/scripts/stamp-telemetry-key.mjs +8 -5
- package/scripts/vendor-grammars.mjs +35 -0
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The checks that prove a job worked (design 4.2), read from a command and
|
|
3
|
+
* what it printed: tests whose runner says they passed, `npm view` showing
|
|
4
|
+
* the version this run is about, a deploy that is success or READY at the
|
|
5
|
+
* pushed commit, CI checks all passing, `git ls-remote` showing a pushed
|
|
6
|
+
* commit, a report's query that came back. A check needs the call not to
|
|
7
|
+
* have failed, and anything pending, failing or cancelled is not a pass.
|
|
8
|
+
*
|
|
9
|
+
* And how a turn ended (4.3), on the agent's last words: in a failure, in a
|
|
10
|
+
* question, or done. Never stored.
|
|
11
|
+
*
|
|
12
|
+
* Pure: no files, no clock.
|
|
13
|
+
*/
|
|
14
|
+
import { BATS, batsPassed, DEPLOY_STEP, GCLOUD_DESCRIBE, gcloudReady, HEALTH_CURL, healthy, inLoop, isHealthCurl } from './check-reads.js';
|
|
15
|
+
import { OFFER_FAMILIES } from './jobs.js';
|
|
16
|
+
import { bareCommand, commandKind, simpleCommands, splitTop, stripOutputFilters } from './shell.js';
|
|
17
|
+
/** npm-view, deploy, gh-checks, ls-remote: they only read, so a non-final one is look-only (4.5 step 2). */
|
|
18
|
+
export const READ_ONLY_FAMILIES = new Set(['npm-view', 'deploy', 'gh-checks', 'ls-remote']);
|
|
19
|
+
/**
|
|
20
|
+
* The commit a skill works out when it runs: `$(git rev-parse HEAD)` (the `{sha}` default), `--short`, `--verify`
|
|
21
|
+
* (D71 c). A deploy status read at it is a deploy check like one at a written-out sha; it just names no sha.
|
|
22
|
+
*/
|
|
23
|
+
export const HEAD_SHA = String.raw `\$\(\s*git\s+rev-parse\s+(?:--short(?:=\d+)?\s+|--verify\s+)?HEAD\s*\)`;
|
|
24
|
+
/** Python's runners, through uv, poetry or pdm too: pytest, `python -m pytest|unittest`, tox, nox. */
|
|
25
|
+
const PY_TESTS = /^(?:(?:uv|poetry|pdm) run (?:-- )?)?(?:pytest\b|python[\d.]* -m (?:pytest|unittest)\b)|^(?:tox|nox)(?=\s|$)/;
|
|
26
|
+
/** A runner run from a venv or any other bin folder (`.venv/bin/pytest`, `/x/venv/bin/python3`): its folder goes before matching. */
|
|
27
|
+
const BIN_DIR = /^(?:[^\s'"`$;|&()<>]*\/)?bin\/(?=(?:python[\d.]*|pytest|tox|nox)(?:\s|$))/;
|
|
28
|
+
/** Anchored on a simple command after its env prefixes and wrappers. */
|
|
29
|
+
const FAMILIES = [
|
|
30
|
+
['tests', /^(?:npm (?:test|t)\b|npm run test[:\w-]*|pnpm (?:run )?test[:\w-]*|yarn (?:run )?test\b|bun test\b|npx (?:vitest|jest)\b|vitest run\b|jest\b|go test\b|cargo test\b|node\b.*\s--test\b|make test[\w-]*)/],
|
|
31
|
+
['tests', PY_TESTS],
|
|
32
|
+
['tests', new RegExp(`^${BATS}`)], // D140
|
|
33
|
+
['npm-view', /^npm (?:view|v|info|show) (?!-)(\S+)/],
|
|
34
|
+
['deploy', new RegExp(String.raw `^gh api\b.*\/commits\/(?:([0-9a-f]{7,40})|${HEAD_SHA})\/(?:statuses|status|check-runs)\b|^(?:npx )?vercel (?:inspect|ls|list)\b|^(?:npx )?netlify (?:status|deploy:list)\b|^fly(?:ctl)? status\b|^kubectl rollout status\b`)],
|
|
35
|
+
['deploy', new RegExp(`^(?:${GCLOUD_DESCRIBE}|${HEALTH_CURL})`)], // D140
|
|
36
|
+
['gh-checks', /^gh pr checks(?:\s+#?(\d+))?|^gh run watch\b.*\s--exit-status\b|^gh run view (?:-\S+\s+)*\d+/],
|
|
37
|
+
['ls-remote', /^git ls-remote(?:\s+-\S+)*\s+(\S+)\s+(\S+)/],
|
|
38
|
+
// A step, not a read: passes when its output shows the remote ref moved (D56a).
|
|
39
|
+
['push', /^git(?:\s+-[Cc]\s+\S+|\s+--[\w-]+=\S+)*\s+push\b/],
|
|
40
|
+
];
|
|
41
|
+
const QUERY = /\bpsql\b.*\s(?:-c|--command)\b|\bsqlite3\b \S+ ["']|\bmysql\b.*\s-e\b|\bbq\s+query\b|\bsupabase\b.*\b(?:sql|query)\b|\bcurl\b.*\.supabase\.co\/rest\/v1\//;
|
|
42
|
+
const BATS_RE = new RegExp(`^${BATS}`);
|
|
43
|
+
const pushFits = (job) => job !== null && (OFFER_FAMILIES[job] ?? []).includes('push');
|
|
44
|
+
/**
|
|
45
|
+
* The family and its match, from the last simple command that has one. A push is a step that only doubles
|
|
46
|
+
* as a check (D56a): in a call that also reads a check or runs tests, that one wins, unless the push is
|
|
47
|
+
* the job's own proof (ship).
|
|
48
|
+
*/
|
|
49
|
+
function simpleFamily(cmd, job) {
|
|
50
|
+
const simple = simpleCommands(cmd);
|
|
51
|
+
let push = null;
|
|
52
|
+
for (let i = simple.length - 1; i >= 0; i--) {
|
|
53
|
+
const bare = bareCommand(simple[i]).replace(BIN_DIR, '');
|
|
54
|
+
let hit = null;
|
|
55
|
+
for (const [family, re] of FAMILIES) {
|
|
56
|
+
const m = re.exec(bare);
|
|
57
|
+
if (m) {
|
|
58
|
+
hit = { family, m };
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (!hit && job === 'report' && QUERY.test(bare))
|
|
63
|
+
hit = { family: 'query', m: null };
|
|
64
|
+
if (hit?.family === 'deploy' && isHealthCurl(bare) && inLoop(cmd))
|
|
65
|
+
hit = null; // D140: a wait, not a check
|
|
66
|
+
if (!hit)
|
|
67
|
+
continue;
|
|
68
|
+
if (hit.family !== 'push')
|
|
69
|
+
return push && pushFits(job) ? push : hit;
|
|
70
|
+
push ??= hit;
|
|
71
|
+
}
|
|
72
|
+
return push;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A deploy status read anywhere in a loop, `$(…)` included: a commit's statuses by a literal sha or a variable
|
|
76
|
+
* (`commits/$SHA/statuses`), `vercel inspect|ls`, netlify, fly, kubectl, or Vercel's deployments API by curl.
|
|
77
|
+
*/
|
|
78
|
+
const DEPLOY_READ = new RegExp(String.raw `\bgh api\b[^\n]*?\/commits\/(?:([0-9a-f]{7,40})|\$\{?([A-Za-z_]\w*)\}?|${HEAD_SHA})\/(?:statuses|status|check-runs)\b|\b(?:npx )?vercel (?:inspect|ls|list)\b|\bnetlify (?:status|deploy:list)\b|\bfly(?:ctl)? status\b|\bkubectl rollout status\b|\bcurl\b[^\n]*?\bapi\.vercel\.com\/v\d+\/deployments\b`);
|
|
79
|
+
const LOOP_HEAD = /^\s*(?:for|while|until)\b/;
|
|
80
|
+
/** D59c: one top-level piece that is a loop which sleeps and reads a deploy status. `whole`: where its sha variable is set. */
|
|
81
|
+
function deployPoll(piece, whole) {
|
|
82
|
+
if (!LOOP_HEAD.test(piece) || !/\bsleep\b/.test(piece))
|
|
83
|
+
return null;
|
|
84
|
+
const m = DEPLOY_READ.exec(piece);
|
|
85
|
+
if (!m)
|
|
86
|
+
return null;
|
|
87
|
+
const sha = m[1] ?? (m[2] ? new RegExp(`(?:^|[\\s;&|(])${m[2]}=["']?([0-9a-f]{7,40})\\b`).exec(whole)?.[1] : undefined);
|
|
88
|
+
return { family: 'deploy', m: null, poll: true, ...(sha ? { sha } : {}) };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The family of a whole call. A loop that polls a deploy status (D59c) is a deploy check unless a family read
|
|
92
|
+
* after the loop decides (a one-shot `vercel ls` after it); a push after the loop yields to it as in D56a.
|
|
93
|
+
*/
|
|
94
|
+
function familyMatch(cmd, job) {
|
|
95
|
+
const text = stripOutputFilters(String(cmd ?? ''));
|
|
96
|
+
if (/\bsleep\b/.test(text) && /\b(?:for|while|until)\b/.test(text)) {
|
|
97
|
+
const pieces = splitTop(text);
|
|
98
|
+
for (let i = pieces.length - 1; i >= 0; i--) {
|
|
99
|
+
const poll = deployPoll(pieces[i].text, text);
|
|
100
|
+
if (!poll)
|
|
101
|
+
continue;
|
|
102
|
+
const rest = pieces.slice(i + 1).map((p) => `${p.text}${p.sep ? ` ${p.sep} ` : ''}`).join('');
|
|
103
|
+
const later = rest ? simpleFamily(rest, job) : null;
|
|
104
|
+
return later && !(later.family === 'push' && !pushFits(job)) ? later : poll;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return simpleFamily(text, job);
|
|
108
|
+
}
|
|
109
|
+
/** The family a command belongs to, from the command alone. Cheap: PostToolUse uses it to decide whether to write a mark. */
|
|
110
|
+
export function checkFamilyOf(cmd, job) {
|
|
111
|
+
return familyMatch(cmd, job)?.family ?? null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* What a Bash call is (4.1): plumbing, work, look or step. A simple command
|
|
115
|
+
* that is a read-only check (npm view, a deploy status, CI checks, ls-remote)
|
|
116
|
+
* only reads, so it counts as look; the rest of the command still decides.
|
|
117
|
+
*/
|
|
118
|
+
export function callKind(cmd, job) {
|
|
119
|
+
const kinds = simpleCommands(String(cmd ?? '')).map((simple) => {
|
|
120
|
+
const fam = familyMatch(simple, job)?.family;
|
|
121
|
+
return fam && READ_ONLY_FAMILIES.has(fam) ? 'look' : commandKind(simple);
|
|
122
|
+
});
|
|
123
|
+
if (kinds.every((k) => k === 'plumbing'))
|
|
124
|
+
return 'plumbing';
|
|
125
|
+
if (kinds.includes('step'))
|
|
126
|
+
return 'step';
|
|
127
|
+
return kinds.includes('work') ? 'work' : 'look';
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* A call's command as text: `cmd`, or for a call kept piece by piece (over 2,000 characters, D58c) its pieces
|
|
131
|
+
* joined by their separators, a piece not kept standing as `:`.
|
|
132
|
+
*/
|
|
133
|
+
export function callText(c) {
|
|
134
|
+
if (c.cmd !== null)
|
|
135
|
+
return c.cmd;
|
|
136
|
+
if (!c.parts?.length)
|
|
137
|
+
return '';
|
|
138
|
+
return c.parts.map((p) => `${p.cmd ?? ':'}${p.sep ? (p.sep === ';' ? '; ' : ` ${p.sep} `) : ''}`).join('').trim();
|
|
139
|
+
}
|
|
140
|
+
const HEAD = 1500;
|
|
141
|
+
const TAIL = 2500;
|
|
142
|
+
const ends = (t) => (t.length > HEAD + TAIL ? `${t.slice(0, HEAD)}\n${t.slice(-TAIL)}` : t);
|
|
143
|
+
const escapeRe = (t) => t.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
144
|
+
/** `v` (with or without a leading v) as a whole version in `text`: 1.4.3 is not in 1.4.30. */
|
|
145
|
+
export const hasVersion = (text, v) => new RegExp(`(?<![\\w.-])v?${escapeRe(v)}(?![\\w-]|\\.\\d)`).test(text);
|
|
146
|
+
const SEMVER = /(?<![\w.-])v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?)(?![\w-]|\.\d)/;
|
|
147
|
+
/**
|
|
148
|
+
* The runner's own summary says whether the tests passed. With none (an unknown runner), no failure text
|
|
149
|
+
* is a pass only when the call's exit code is the runner's: through a pipe it is the last program's
|
|
150
|
+
* (`| head` cut the summary off, `| grep -v` hid the failures), so it says nothing.
|
|
151
|
+
*/
|
|
152
|
+
function testsPassed(text, piped) {
|
|
153
|
+
const lines = text.split(/\r?\n/);
|
|
154
|
+
const num = (re) => { const m = re.exec(text); return m ? Number(m[1]) : undefined; };
|
|
155
|
+
const summary = lines.filter((l) => /^\s*(?:Test Files|Tests:?|Test Suites:)\s/.test(l));
|
|
156
|
+
if (summary.length) {
|
|
157
|
+
const passed = summary.some((l) => /\b[1-9]\d* passed/.test(l)) && !summary.some((l) => /\b[1-9]\d* failed/.test(l));
|
|
158
|
+
return { passed, count: num(/^\s*Tests:?\s+(?:\d+ \w+(?:,| \|) )*?(\d+) passed/m) };
|
|
159
|
+
}
|
|
160
|
+
if (/^[#ℹ]\s*(?:pass|fail) \d+/m.test(text))
|
|
161
|
+
return { passed: /^[#ℹ]\s*fail 0\b/m.test(text), count: num(/^[#ℹ]\s*pass (\d+)/m) };
|
|
162
|
+
// unittest: `Ran 4 tests in 0.002s`, then `OK` or `FAILED (failures=1)`.
|
|
163
|
+
if (/^Ran \d+ tests? in /m.test(text))
|
|
164
|
+
return { passed: /^OK\b/m.test(text) && !/^FAILED\b/m.test(text), count: num(/^Ran (\d+) tests? in /m) };
|
|
165
|
+
if (/test result: /.test(text))
|
|
166
|
+
return { passed: /test result: ok\b/.test(text) && !/test result: FAILED/.test(text), count: num(/test result: ok\. (\d+) passed/) };
|
|
167
|
+
if (/^(?:ok|FAIL|--- FAIL)\s/m.test(text))
|
|
168
|
+
return { passed: /^ok\s/m.test(text) && !/^(?:FAIL|--- FAIL|panic:)/m.test(text) };
|
|
169
|
+
if (/\d+ (?:passed|failed|errors?)\b/.test(text))
|
|
170
|
+
return { passed: /\d+ passed/.test(text) && !/\b[1-9]\d* (?:failed|errors?)\b/.test(text), count: num(/(\d+) passed/) };
|
|
171
|
+
// mocha
|
|
172
|
+
if (/^\s*\d+ (?:passing|failing)\b/m.test(text))
|
|
173
|
+
return { passed: /^\s*[1-9]\d* passing\b/m.test(text) && !/^\s*[1-9]\d* failing\b/m.test(text), count: num(/^\s*(\d+) passing\b/m) };
|
|
174
|
+
return { passed: !piped };
|
|
175
|
+
}
|
|
176
|
+
const DEPLOY_OK = /^(?:success|ready|completed successfully)$/i;
|
|
177
|
+
const DEPLOY_BAD = /^(?:pending|failure|failed|error|errored|canceled|cancelled|queued|in_progress|building|initializing|action_required|timed_out)$/i;
|
|
178
|
+
function deployState(text) {
|
|
179
|
+
const states = [];
|
|
180
|
+
for (const m of text.matchAll(/"(?:state|status|conclusion)"\s*:\s*"([^"]+)"/gi))
|
|
181
|
+
states.push(m[1]);
|
|
182
|
+
for (const m of text.matchAll(/^\s*(?:state|status)\s*[:=]?\s*[●•]?\s*([A-Za-z_]+)\s*$/gim))
|
|
183
|
+
states.push(m[1]);
|
|
184
|
+
for (const m of text.matchAll(/[●•]\s*([A-Za-z_]+)/g))
|
|
185
|
+
states.push(m[1]);
|
|
186
|
+
const last = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean).pop() ?? '';
|
|
187
|
+
const lastWord = last.replace(/^["'●•\s]+|["'\s]+$/g, '');
|
|
188
|
+
if (/^[A-Za-z_]+$/.test(lastWord))
|
|
189
|
+
states.push(lastWord);
|
|
190
|
+
if (states.some((s) => DEPLOY_BAD.test(s)))
|
|
191
|
+
return { passed: false };
|
|
192
|
+
if (/successfully rolled out/i.test(last))
|
|
193
|
+
return { passed: true, state: 'successfully rolled out' };
|
|
194
|
+
const good = states.find((s) => DEPLOY_OK.test(s));
|
|
195
|
+
return good ? { passed: true, state: good } : { passed: false };
|
|
196
|
+
}
|
|
197
|
+
const POLL_OK = /^(?:ready|success|succeeded)$/i;
|
|
198
|
+
const POLL_BAD = /^(?:pending|failure|failed|error|errored|canceled|cancelled|queued|in_progress|building|initializing|blocked|unknown|action_required|timed_out|deploying)$/i;
|
|
199
|
+
/**
|
|
200
|
+
* D59c: a poll loop printed a state per try; the last line that names one is where it stopped. Passed when
|
|
201
|
+
* that line says READY or success and nothing pending or failed. URLs are left out (a path can hold any word).
|
|
202
|
+
*/
|
|
203
|
+
function lastPollState(text) {
|
|
204
|
+
const lines = text.split(/\r?\n/);
|
|
205
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
206
|
+
const tokens = lines[i].replace(/\bhttps?:\/\/\S+/g, ' ').split(/[^A-Za-z_]+/).filter(Boolean);
|
|
207
|
+
const bad = tokens.find((t) => POLL_BAD.test(t));
|
|
208
|
+
const good = tokens.find((t) => POLL_OK.test(t));
|
|
209
|
+
if (bad)
|
|
210
|
+
return { passed: false, state: bad };
|
|
211
|
+
if (good)
|
|
212
|
+
return { passed: true, state: good };
|
|
213
|
+
}
|
|
214
|
+
return { passed: false };
|
|
215
|
+
}
|
|
216
|
+
function checksPassed(cmd, text) {
|
|
217
|
+
if (/^gh pr checks/.test(cmd)) {
|
|
218
|
+
const rows = text.split(/\r?\n/).filter((l) => l.includes('\t'));
|
|
219
|
+
if (rows.length)
|
|
220
|
+
return rows.every((l) => /^(?:pass|skipping|skipped|success|neutral)$/i.test(l.split('\t')[1].trim()));
|
|
221
|
+
return /All checks were successful/i.test(text);
|
|
222
|
+
}
|
|
223
|
+
// Not passed: a failed, cancelled, still-running or waiting state anywhere in what it printed.
|
|
224
|
+
if (/\b(?:failure|failed|cancelled|timed_out|action_required|startup_failure|in_progress|queued|pending|waiting)\b/i.test(text))
|
|
225
|
+
return false;
|
|
226
|
+
if (/completed with '?success'?/i.test(text))
|
|
227
|
+
return true;
|
|
228
|
+
// `--json status,conclusion`, raw or through -q/--jq: completed, with a success conclusion.
|
|
229
|
+
if (/\bcompleted\b/i.test(text) && /\bsuccess\b/i.test(text))
|
|
230
|
+
return true;
|
|
231
|
+
return /^\s*✓/m.test(text) && !/^\s*[X✗]\s/m.test(text);
|
|
232
|
+
}
|
|
233
|
+
/** A fallback that always exits 0: `echo …`, `printf …`, `true`, `:`, `exit 0`, or a group that starts with one. */
|
|
234
|
+
const FALLBACK = /^[({]?\s*(?:echo|printf|true|:|exit\s+0)(?![\w.-])/;
|
|
235
|
+
/**
|
|
236
|
+
* D101: the call ends in `|| <fallback>` (`docker info || echo "docker not running"`, `npm test || true`), so its
|
|
237
|
+
* exit 0 may come from the fallback alone. Such a call is never a passing check, and a run proven only by such
|
|
238
|
+
* calls is not a good run. One top-level split: linear.
|
|
239
|
+
*/
|
|
240
|
+
export function fallbackOnly(cmd) {
|
|
241
|
+
const segs = splitTop(String(cmd ?? ''));
|
|
242
|
+
if (segs.length < 2)
|
|
243
|
+
return false;
|
|
244
|
+
return segs[segs.length - 2].sep === '||' && FALLBACK.test(segs[segs.length - 1].text.trim());
|
|
245
|
+
}
|
|
246
|
+
/** 4.2. The `query` family only when job === 'report'. D101: never passed behind a fallback. */
|
|
247
|
+
export function classifyCheck(cmd, resultText, r, facts, job) {
|
|
248
|
+
const hit = classifyCheckHit(cmd, resultText, r, facts, job);
|
|
249
|
+
return hit && hit.passed && fallbackOnly(cmd) ? { ...hit, passed: false } : hit;
|
|
250
|
+
}
|
|
251
|
+
function classifyCheckHit(cmd, resultText, r, facts, job) {
|
|
252
|
+
const hit = familyMatch(cmd, job);
|
|
253
|
+
if (!hit)
|
|
254
|
+
return null;
|
|
255
|
+
const text = ends(String(resultText ?? ''));
|
|
256
|
+
const ok = !r.failed;
|
|
257
|
+
const { family, m } = hit;
|
|
258
|
+
if (family === 'tests') {
|
|
259
|
+
const t = (BATS_RE.test(m.input) ? batsPassed(text) : null) ?? testsPassed(text, splitTop(cmd).some((seg) => seg.sep === '|'));
|
|
260
|
+
return { family, passed: ok && t.passed, facts: t.count === undefined ? {} : { passedCount: t.count } };
|
|
261
|
+
}
|
|
262
|
+
if (family === 'npm-view') {
|
|
263
|
+
const spec = m[1];
|
|
264
|
+
const pkg = spec.replace(/(.)@.*$/, '$1');
|
|
265
|
+
const known = facts.versions.find((v) => hasVersion(text, v));
|
|
266
|
+
const any = !facts.versions.length && facts.published ? SEMVER.exec(text)?.[1] : undefined;
|
|
267
|
+
const version = known ?? any;
|
|
268
|
+
return { family, passed: ok && version !== undefined, facts: version ? { version, pkg } : { pkg } };
|
|
269
|
+
}
|
|
270
|
+
if (family === 'deploy' && m && isHealthCurl(m.input)) {
|
|
271
|
+
// D140: a health read proves a deploy only after the run pushed or deployed.
|
|
272
|
+
if (!facts.pushedBranches.length && !facts.deployed)
|
|
273
|
+
return null;
|
|
274
|
+
const up = ok && healthy(text);
|
|
275
|
+
return { family, passed: up, facts: up ? { state: 'healthy' } : {} };
|
|
276
|
+
}
|
|
277
|
+
if (family === 'deploy' && m && m.input.startsWith('gcloud ')) {
|
|
278
|
+
const g = gcloudReady(text, facts.shas);
|
|
279
|
+
return { family, passed: ok && g.passed, facts: { ...(g.sha ? { sha: g.sha } : {}), ...(g.state ? { state: g.state } : {}) } };
|
|
280
|
+
}
|
|
281
|
+
if (family === 'deploy') {
|
|
282
|
+
const d = hit.poll ? lastPollState(text) : deployState(text);
|
|
283
|
+
const sha = m?.[1] ?? hit.sha;
|
|
284
|
+
return { family, passed: ok && d.passed, facts: { ...(sha ? { sha } : {}), ...(d.state ? { state: d.state } : {}) } };
|
|
285
|
+
}
|
|
286
|
+
if (family === 'gh-checks') {
|
|
287
|
+
const pr = m[1];
|
|
288
|
+
return { family, passed: ok && checksPassed(m[0], text), facts: pr ? { pr } : {} };
|
|
289
|
+
}
|
|
290
|
+
if (family === 'push')
|
|
291
|
+
return pushCheck(m.input, text, ok);
|
|
292
|
+
if (family === 'ls-remote') {
|
|
293
|
+
const remote = m[1];
|
|
294
|
+
const branch = m[2].replace(/^refs\/heads\//, '');
|
|
295
|
+
const shown = [...text.matchAll(/^([0-9a-f]{7,40})\s/gm)].map((x) => x[1]);
|
|
296
|
+
const sha = facts.shas.find((s) => shown.some((o) => o.startsWith(s) || s.startsWith(o)));
|
|
297
|
+
return { family, passed: ok && sha !== undefined, facts: { ...(sha ? { sha } : {}), remote, branch } };
|
|
298
|
+
}
|
|
299
|
+
return { family, passed: ok && !/^ERROR:/m.test(text) && text.trim() !== '', facts: {} };
|
|
300
|
+
}
|
|
301
|
+
/* --------------------------------------------- deploy status over MCP (D59b) */
|
|
302
|
+
/** `mcp__<server>__get_deployment` or `list_deployments` on a Vercel server (claude.ai's `claude_ai_Vercel`, a local `vercel`). */
|
|
303
|
+
const DEPLOY_TOOL = /^mcp__(.+)__(?:get_deployment|list_deployments)$/;
|
|
304
|
+
/** A deployment status tool: its result is check evidence for the deploy family, and the call is never a step (D59b). */
|
|
305
|
+
export function isDeployTool(name) {
|
|
306
|
+
const m = DEPLOY_TOOL.exec(String(name ?? ''));
|
|
307
|
+
return m !== null && /vercel/i.test(m[1]);
|
|
308
|
+
}
|
|
309
|
+
const str = (v) => (typeof v === 'string' && v ? v : undefined);
|
|
310
|
+
function deploymentOf(v) {
|
|
311
|
+
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
312
|
+
return null;
|
|
313
|
+
const d = v;
|
|
314
|
+
const state = str(d.readyState) ?? str(d.state);
|
|
315
|
+
if (!state)
|
|
316
|
+
return null;
|
|
317
|
+
const meta = d.meta && typeof d.meta === 'object' ? d.meta : {};
|
|
318
|
+
const created = typeof d.createdAt === 'number' ? d.createdAt : typeof d.created === 'number' ? d.created : undefined;
|
|
319
|
+
const sha = str(meta.githubCommitSha);
|
|
320
|
+
const branch = str(meta.githubCommitRef);
|
|
321
|
+
return { state, ...(sha ? { sha } : {}), ...(branch ? { branch } : {}), ...(created !== undefined ? { created } : {}) };
|
|
322
|
+
}
|
|
323
|
+
/** The deployments a result shows, newest first. JSON as the tools print it; a cut-off text read field by field. */
|
|
324
|
+
function deploymentsIn(text, list) {
|
|
325
|
+
let j = null;
|
|
326
|
+
try {
|
|
327
|
+
j = JSON.parse(text);
|
|
328
|
+
}
|
|
329
|
+
catch { /* clipped or not JSON */ }
|
|
330
|
+
if (j && typeof j === 'object') {
|
|
331
|
+
const field = (v, k) => (v && typeof v === 'object' && !Array.isArray(v) ? v[k] : undefined);
|
|
332
|
+
const r = field(j, 'result') ?? j;
|
|
333
|
+
if (!list)
|
|
334
|
+
return [deploymentOf(field(r, 'deployment') ?? r)].filter((d) => d !== null);
|
|
335
|
+
const inner = field(r, 'deployments');
|
|
336
|
+
const raw = [r, inner, field(inner, 'deployments')].find(Array.isArray) ?? [];
|
|
337
|
+
const all = raw.map(deploymentOf).filter((d) => d !== null);
|
|
338
|
+
return all.every((d) => d.created !== undefined) ? [...all].sort((a, b) => b.created - a.created) : all;
|
|
339
|
+
}
|
|
340
|
+
const pieces = list ? text.split(/"(?:id|uid)"\s*:\s*"dpl_/).slice(1) : [text];
|
|
341
|
+
const out = [];
|
|
342
|
+
for (const p of pieces) {
|
|
343
|
+
const state = /"readyState"\s*:\s*"([A-Z_]+)"/.exec(p)?.[1] ?? /"state"\s*:\s*"([A-Z_]+)"/.exec(p)?.[1];
|
|
344
|
+
const sha = /"githubCommitSha"\s*:\s*"([0-9a-f]{7,40})"/.exec(p)?.[1];
|
|
345
|
+
if (state)
|
|
346
|
+
out.push({ state, ...(sha ? { sha } : {}) });
|
|
347
|
+
}
|
|
348
|
+
return out;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* D59b: a Vercel deployment status result as a deploy check. Passed when the deployment is READY. `get_deployment`
|
|
352
|
+
* reads the deployment the agent named (as `vercel inspect <url>` does). A list is Trail's pick: the newest
|
|
353
|
+
* deployment, or when the run knows commits (`facts.shas`) and the list names commits, the newest at one of them
|
|
354
|
+
* (READY for another commit is not this push). Any other state (BUILDING, QUEUED, INITIALIZING, ERROR, CANCELED,
|
|
355
|
+
* BLOCKED) or a failed call is not a pass. Null for any other tool.
|
|
356
|
+
*/
|
|
357
|
+
export function classifyToolCheck(name, resultText, r, facts) {
|
|
358
|
+
if (!isDeployTool(name))
|
|
359
|
+
return null;
|
|
360
|
+
const list = /__list_deployments$/.test(name);
|
|
361
|
+
const deps = deploymentsIn(String(resultText ?? ''), list);
|
|
362
|
+
const atCommit = (d) => d.sha !== undefined && facts.shas.some((s) => d.sha.startsWith(s) || s.startsWith(d.sha));
|
|
363
|
+
const d = list && facts.shas.length && deps.some((x) => x.sha) ? deps.find(atCommit) : deps[0];
|
|
364
|
+
const passed = !r.failed && !r.isError && d?.state === 'READY';
|
|
365
|
+
return { family: 'deploy', passed, facts: d ? { state: d.state, ...(d.sha ? { sha: d.sha } : {}), ...(d.branch ? { branch: d.branch } : {}) } : {} };
|
|
366
|
+
}
|
|
367
|
+
/** `--dry-run`, or `-n` alone or among short flags. */
|
|
368
|
+
const DRY_RUN = /(?:^|\s)(?:--dry-run|-[a-zA-Z]*n[a-zA-Z]*)(?=\s|$)/;
|
|
369
|
+
const REJECTED = /\[(?:remote )?rejected\]|^error: failed to push|^\s*!\s/m;
|
|
370
|
+
const isTagRef = (ref) => ref.startsWith('refs/tags/') || /^v?\d+\.\d+/.test(ref);
|
|
371
|
+
/** The remote a `git push` names: its first word after `push` that is not a flag or a flag's value. */
|
|
372
|
+
function pushRemote(bare) {
|
|
373
|
+
const args = bare.replace(/^.*?\bpush\b/, '').trim().split(/\s+/).filter(Boolean);
|
|
374
|
+
for (let i = 0; i < args.length; i++) {
|
|
375
|
+
const a = args[i];
|
|
376
|
+
if (a === '-o' || a === '--push-option' || a === '--repo' || a === '--receive-pack' || a === '--exec') {
|
|
377
|
+
i++;
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
if (!a.startsWith('-'))
|
|
381
|
+
return a.replace(/^['"]|['"]$/g, '');
|
|
382
|
+
}
|
|
383
|
+
return undefined;
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* D56a: a push passed when it ran (exit 0), was not a dry run, printed a branch ref that moved
|
|
387
|
+
* (`<old>..<new> <src> -> <dst>`, `<old>...<new>` forced, or `* [new branch]`), and nothing was rejected.
|
|
388
|
+
* "Everything up-to-date" moved nothing; a tag alone moves no branch.
|
|
389
|
+
*/
|
|
390
|
+
function pushCheck(bare, text, ok) {
|
|
391
|
+
const remote = pushRemote(bare);
|
|
392
|
+
const moved = [...text.matchAll(PUSH_TAIL)].filter((m) => !isTagRef(m[4].replace(/^refs\/heads\//, '')));
|
|
393
|
+
const last = moved[moved.length - 1];
|
|
394
|
+
const facts = {};
|
|
395
|
+
if (last?.[2])
|
|
396
|
+
facts.sha = last[2];
|
|
397
|
+
if (last)
|
|
398
|
+
facts.branch = last[4].replace(/^refs\/heads\//, '');
|
|
399
|
+
if (remote)
|
|
400
|
+
facts.remote = remote;
|
|
401
|
+
const passed = ok && moved.length > 0 && !DRY_RUN.test(bare.replace(/^.*?\bpush\b/, '')) && !REJECTED.test(text) && !/Everything up-to-date/.test(text);
|
|
402
|
+
return { family: 'push', passed, facts };
|
|
403
|
+
}
|
|
404
|
+
const SHA = /^[0-9a-f]{7,40}$/;
|
|
405
|
+
const isSha = (t) => SHA.test(t) && /\d/.test(t) && /[a-f]/.test(t);
|
|
406
|
+
const addOnce = (list, v) => { if (v && !list.includes(v))
|
|
407
|
+
list.push(v); };
|
|
408
|
+
const PUSH_TAIL = /^\s*[+*=!-]?\s*(?:([0-9a-f]{7,40})\.\.\.?([0-9a-f]{7,40})|\[new branch\])\s+(\S+)\s+->\s+(\S+)/gm;
|
|
409
|
+
/** Branches and shas a `git push` command names. */
|
|
410
|
+
function pushTargets(bare, facts) {
|
|
411
|
+
const args = bare.split(/\s+/).slice(2);
|
|
412
|
+
const pos = [];
|
|
413
|
+
for (let i = 0; i < args.length; i++) {
|
|
414
|
+
const a = args[i];
|
|
415
|
+
if (a === '-o' || a === '--push-option' || a === '--repo') {
|
|
416
|
+
i++;
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
if (!a.startsWith('-'))
|
|
420
|
+
pos.push(a.replace(/^['"]|['"]$/g, ''));
|
|
421
|
+
}
|
|
422
|
+
for (const spec of pos.slice(1)) {
|
|
423
|
+
const [src, dst] = spec.replace(/^\+/, '').split(':');
|
|
424
|
+
if (isSha(src))
|
|
425
|
+
addOnce(facts.shas, src);
|
|
426
|
+
const target = (dst ?? src).replace(/^refs\/heads\//, '');
|
|
427
|
+
if (!target || target === 'HEAD' || target.startsWith('refs/') || /^v?\d+\.\d+/.test(target) || isSha(target))
|
|
428
|
+
continue;
|
|
429
|
+
addOnce(facts.pushedBranches, target);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
export function factsFromCalls(calls, prompt) {
|
|
433
|
+
const facts = { versions: [], shas: [], pushedBranches: [], published: false };
|
|
434
|
+
for (const c of calls) {
|
|
435
|
+
const cmd = callText(c);
|
|
436
|
+
if (!cmd || c.failed)
|
|
437
|
+
continue;
|
|
438
|
+
for (const simple of simpleCommands(stripOutputFilters(cmd))) {
|
|
439
|
+
const bare = bareCommand(simple);
|
|
440
|
+
if (/^(?:npm|pnpm|yarn(?: npm)?) publish\b/.test(bare)) {
|
|
441
|
+
facts.published = true;
|
|
442
|
+
addOnce(facts.versions, /-(\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?)\.tgz\b/.exec(bare)?.[1]);
|
|
443
|
+
}
|
|
444
|
+
if (/^npm version\b/.test(bare))
|
|
445
|
+
addOnce(facts.versions, /^npm version (?:-\S+\s+)*v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?)\b/.exec(bare)?.[1]);
|
|
446
|
+
if (/^git push\b/.test(bare))
|
|
447
|
+
pushTargets(bare, facts);
|
|
448
|
+
if (DEPLOY_STEP.test(bare))
|
|
449
|
+
facts.deployed = true;
|
|
450
|
+
if (/^git rev-parse\b/.test(bare))
|
|
451
|
+
for (const t of (c.tail ?? '').split(/\s+/))
|
|
452
|
+
if (isSha(t))
|
|
453
|
+
addOnce(facts.shas, t);
|
|
454
|
+
for (const m of bare.matchAll(/\bcommits\/([0-9a-f]{7,40})\b/g))
|
|
455
|
+
addOnce(facts.shas, m[1]);
|
|
456
|
+
const pr = /^gh pr \w+ #?(\d+)\b/.exec(bare)?.[1];
|
|
457
|
+
if (pr)
|
|
458
|
+
facts.pr = pr;
|
|
459
|
+
}
|
|
460
|
+
const tail = c.tail ?? '';
|
|
461
|
+
for (const m of tail.matchAll(/^\+ (@?[\w./-]+)@(\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?)\s*$/gm))
|
|
462
|
+
addOnce(facts.versions, m[2]);
|
|
463
|
+
if (/\bgit push\b/.test(cmd)) {
|
|
464
|
+
for (const m of tail.matchAll(PUSH_TAIL)) {
|
|
465
|
+
addOnce(facts.shas, m[2]);
|
|
466
|
+
const dst = m[4].replace(/^refs\/heads\//, '');
|
|
467
|
+
if (!/^v?\d+\.\d+/.test(dst) && !dst.startsWith('refs/'))
|
|
468
|
+
addOnce(facts.pushedBranches, dst);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
addOnce(facts.versions, prompt.version);
|
|
473
|
+
return facts;
|
|
474
|
+
}
|
|
475
|
+
/** The last paragraph of prose, code blocks removed, at most 300 characters. */
|
|
476
|
+
function lastWords(text) {
|
|
477
|
+
const prose = String(text ?? '').replace(/```[\s\S]*?(?:```|$)/g, '\n\n');
|
|
478
|
+
const para = prose.split(/\n\s*\n/).map((p) => p.trim()).filter(Boolean).pop() ?? '';
|
|
479
|
+
return para.slice(-300);
|
|
480
|
+
}
|
|
481
|
+
const QUESTION = /\b(should I|shall I|do you want|would you like|want me to|let me know (if|when|whether)|can you (tap|confirm|run|approve|check|sign in)|please (tap|confirm|run|approve|check|sign in|let me know)|waiting (for|on) you|once you('ve| have)?)\b/i;
|
|
482
|
+
const NEGATED = /\b(0|no|zero|none of the|nothing) (\w+ ){0,2}(fail\w*|error\w*)/gi;
|
|
483
|
+
const FAILURE = /\b(failed|fails|failing|couldn'?t|could not|can'?t|cannot|unable to|blocked|didn'?t (work|finish|go through)|not (yet )?(published|deployed|live|green|passing)|still (red|broken|pending|failing)|errored|timed out)\b/i;
|
|
484
|
+
/** 4.3, on the last assistant message of the turn. */
|
|
485
|
+
export function endsInQuestion(assistantText) {
|
|
486
|
+
const p = lastWords(assistantText);
|
|
487
|
+
if (!p)
|
|
488
|
+
return false;
|
|
489
|
+
const lastLine = p.split(/\r?\n/).map((l) => l.trim()).filter(Boolean).pop() ?? '';
|
|
490
|
+
return /\?$/.test(lastLine.replace(/[)*"\s]+$/, '')) || QUESTION.test(p);
|
|
491
|
+
}
|
|
492
|
+
export function endsInFailure(assistantText) {
|
|
493
|
+
return FAILURE.test(lastWords(assistantText).replace(NEGATED, ' '));
|
|
494
|
+
}
|
|
495
|
+
//# sourceMappingURL=checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/trace/checks.ts"],"names":[],"mappings":"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"}
|