@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,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The facts of a Codex rollout file itself (design 4.15, 4.16): where Codex keeps its home, the rollout's first
|
|
3
|
+
* line (`session_meta`), whether it is an import (P39) or a fork (D133), and whether a receipt names this session's
|
|
4
|
+
* own rollout (HC6). Split from codex.ts, which reads the lines. Never throws; never waits on a FIFO.
|
|
5
|
+
*/
|
|
6
|
+
import { closeSync, constants, fstatSync, lstatSync, openSync, readFileSync, readSync, realpathSync } from 'node:fs';
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
import { basename, isAbsolute, join, resolve, sep } from 'node:path';
|
|
9
|
+
const META_BYTES = 64 * 1024;
|
|
10
|
+
/** CODEX_HOME, else $HOME/.codex. */
|
|
11
|
+
export function codexHome(env = process.env) {
|
|
12
|
+
return env.CODEX_HOME ? resolve(env.CODEX_HOME) : join(env.HOME || homedir(), '.codex');
|
|
13
|
+
}
|
|
14
|
+
const str = (v) => (typeof v === 'string' && v !== '' ? v : null);
|
|
15
|
+
/** The rollout's first line's session_meta payload, read with one positioned read of at most 64 KB; null otherwise. */
|
|
16
|
+
function metaPayload(rolloutPath) {
|
|
17
|
+
let fd;
|
|
18
|
+
try {
|
|
19
|
+
// Never waits on a FIFO or a device planted where the rollout should be (review): O_NONBLOCK, then a plain file.
|
|
20
|
+
fd = openSync(rolloutPath, constants.O_RDONLY | (constants.O_NONBLOCK ?? 0));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
if (!fstatSync(fd).isFile())
|
|
27
|
+
return null;
|
|
28
|
+
const buf = Buffer.alloc(META_BYTES);
|
|
29
|
+
const n = readSync(fd, buf, 0, META_BYTES, 0);
|
|
30
|
+
const nl = buf.subarray(0, n).indexOf(0x0a);
|
|
31
|
+
if (nl < 0)
|
|
32
|
+
return null;
|
|
33
|
+
const e = JSON.parse(buf.subarray(0, nl).toString('utf8'));
|
|
34
|
+
const p = e?.payload;
|
|
35
|
+
return e?.type === 'session_meta' && p && typeof p === 'object' && !Array.isArray(p) && str(p.id) ? p : null;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
closeSync(fd);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** The rollout's first line, read with one positioned read of at most 64 KB; null when it isn't a session_meta line. */
|
|
45
|
+
export function codexMeta(rolloutPath) {
|
|
46
|
+
const p = metaPayload(rolloutPath);
|
|
47
|
+
if (!p)
|
|
48
|
+
return null;
|
|
49
|
+
try {
|
|
50
|
+
const src = p.source;
|
|
51
|
+
const source = str(src) ?? (src && typeof src === 'object' && !Array.isArray(src) ? Object.keys(src)[0] ?? null : null);
|
|
52
|
+
const hm = p.history_mode;
|
|
53
|
+
return {
|
|
54
|
+
id: p.id, originator: str(p.originator), source, cliVersion: str(p.cli_version), cwd: str(p.cwd),
|
|
55
|
+
historyMode: hm === 'legacy' || hm === 'paginated' ? hm : null,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* D133, fail closed: a rollout whose session_meta names `forked_from_id` starts with a copy of another session's
|
|
64
|
+
* lines, and Codex lines carry no id that tells the copy from this session's own. A copied typed line whose words the
|
|
65
|
+
* person types again would count, and the copied calls with it (review). So a fork is read as nothing, like an import.
|
|
66
|
+
*/
|
|
67
|
+
export function isForkedRollout(rolloutPath) {
|
|
68
|
+
const f = metaPayload(rolloutPath)?.forked_from_id;
|
|
69
|
+
return f !== undefined && f !== null && f !== '';
|
|
70
|
+
}
|
|
71
|
+
/** The session id a rollout's file name ends with, or null. */
|
|
72
|
+
const nameSession = (path) => /^rollout-.+-([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/.exec(basename(path))?.[1] ?? null;
|
|
73
|
+
/** P39: the rollout is one `external_agent_session_imports.json` lists (by its session id): another host's session. */
|
|
74
|
+
export function isImportedRollout(path, env = process.env) {
|
|
75
|
+
try {
|
|
76
|
+
const id = codexMeta(path)?.id ?? nameSession(path);
|
|
77
|
+
if (!id)
|
|
78
|
+
return false;
|
|
79
|
+
const file = join(codexHome(env), 'external_agent_session_imports.json');
|
|
80
|
+
const st = lstatSync(file);
|
|
81
|
+
if (!st.isFile() || st.size > 16 * 1024 * 1024)
|
|
82
|
+
return false;
|
|
83
|
+
const v = JSON.parse(readFileSync(file, 'utf8'));
|
|
84
|
+
return Array.isArray(v?.records) && v.records.some((r) => r && typeof r === 'object' && r.imported_thread_id === id);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 4.16, D82's first half for Codex: the receipt names this session's own rollout where Codex keeps it: a regular
|
|
92
|
+
* file (not a link), under `codexHome(env)/sessions/` through realpath, named `rollout-*-<session>.jsonl`, whose
|
|
93
|
+
* `session_meta.id` is the session (HC6).
|
|
94
|
+
*/
|
|
95
|
+
export function codexTranscriptOk(r, env = process.env) {
|
|
96
|
+
try {
|
|
97
|
+
const p = r.transcriptPath;
|
|
98
|
+
if (!p || !isAbsolute(p) || !r.session || !lstatSync(p).isFile())
|
|
99
|
+
return false;
|
|
100
|
+
if (nameSession(p) !== r.session)
|
|
101
|
+
return false;
|
|
102
|
+
const root = realpathSync(join(codexHome(env), 'sessions'));
|
|
103
|
+
const file = realpathSync(p);
|
|
104
|
+
if (!file.startsWith(root + sep))
|
|
105
|
+
return false;
|
|
106
|
+
return codexMeta(file)?.id === r.session;
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=codex-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-meta.js","sourceRoot":"","sources":["../../src/trace/codex-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type Memo } from './cursor.js';
|
|
2
|
+
import type { EventReadOptions, TraceEvent } from './claude.js';
|
|
3
|
+
import type { SkillSessionState } from './types.js';
|
|
4
|
+
export type { CodexMeta } from './types.js';
|
|
5
|
+
export { codexExitOf } from './codex-exec.js';
|
|
6
|
+
export { codexHome, codexMeta, codexTranscriptOk, isForkedRollout, isImportedRollout } from './codex-meta.js';
|
|
7
|
+
/** R7, D138: the keyed hash (HMAC-SHA256 with ~/.trail/state/typed-key, 16 hex) of a prompt's trimmed text; null with no key. */
|
|
8
|
+
export declare function codexTypedSha(text: string, env?: NodeJS.ProcessEnv, opts?: {
|
|
9
|
+
create?: boolean;
|
|
10
|
+
}): string | null;
|
|
11
|
+
/** For the prompt hook (c8): the submitted prompt's keyed hash into `st.codex.typedShas`, the last 20. Makes the key. */
|
|
12
|
+
export declare function noteCodexPrompt(st: SkillSessionState, prompt: string, env?: NodeJS.ProcessEnv): void;
|
|
13
|
+
/** P30: a typed line is the person's when the prompt hook recorded its keyed hash in this session. */
|
|
14
|
+
export declare function codexTypedByPerson(text: string, st: SkillSessionState | null | undefined, env?: NodeJS.ProcessEnv): boolean;
|
|
15
|
+
/** The reader's state carried from line to line and saved with the cursor: open calls, running commands, the turn. */
|
|
16
|
+
export type CodexMemo = Memo;
|
|
17
|
+
/**
|
|
18
|
+
* The events of one parsed rollout line, for a caller that walks lines itself (the save gate's tail, a typed line
|
|
19
|
+
* at an offset). `memo` carries open calls from line to line: start it as `{}`. A typed event here is only a
|
|
20
|
+
* candidate: the dialect's `typedByPerson` judges it (P30). Never throws.
|
|
21
|
+
*/
|
|
22
|
+
export declare function codexLineEvents(entry: unknown, memo: CodexMemo, offset?: number, _env?: NodeJS.ProcessEnv): TraceEvent[];
|
|
23
|
+
export interface CodexReadOptions extends EventReadOptions {
|
|
24
|
+
/** The session state whose `codex.typedShas` decide which typed lines are the person's (P30). None: nothing is typed. */
|
|
25
|
+
state?: SkillSessionState | null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The events a Codex rollout gained since the last call with the same `cursorPath` (1a's cursor: positioned,
|
|
29
|
+
* 4 MB chunks). `.jsonl` only (P40), never an imported rollout (P39) or a forked one (D133), lines over 2 MB skipped.
|
|
30
|
+
* Never throws.
|
|
31
|
+
*/
|
|
32
|
+
export declare function readNewCodexEvents(rolloutPath: string, cursorPath: string, opts?: CodexReadOptions): TraceEvent[];
|
|
33
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/trace/codex.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAItD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIpD,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAyD9G,iIAAiI;AACjI,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,GAAG,IAAI,CAGhI;AAED,yHAAyH;AACzH,wBAAgB,eAAe,CAAC,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,IAAI,CAMjH;AAED,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAKxI;AAOD,sHAAsH;AACtH,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC;AAiS7B;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,UAAU,EAAE,CASrI;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,yHAAyH;IACzH,KAAK,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,UAAU,EAAE,CAqBrH"}
|
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading a Codex rollout (design 4.15): `~/.codex/sessions/YYYY/MM/DD/
|
|
3
|
+
* rollout-<time>-<session>.jsonl`, one `{timestamp, type, payload}` per line,
|
|
4
|
+
* `session_meta` first. The reader turns its lines into 1a's `TraceEvent`s,
|
|
5
|
+
* so the fold, runs, checks, compile and credit are host-free from there on.
|
|
6
|
+
*
|
|
7
|
+
* Whose words a line holds is not in the line: Codex puts AGENTS.md text,
|
|
8
|
+
* environment context and hook context in user-role messages too. So a typed
|
|
9
|
+
* line counts as the person's only when its keyed hash is one the
|
|
10
|
+
* UserPromptSubmit hook recorded from the prompt the person submitted (P30,
|
|
11
|
+
* R7); anything else is injected. With no session state, or no key, nothing
|
|
12
|
+
* is typed.
|
|
13
|
+
*
|
|
14
|
+
* A command's exit survives only as text in its output's header (P34): the
|
|
15
|
+
* header decides, a structured `CommandExecution` exit beats it, and a call
|
|
16
|
+
* whose exit never shows stays open, which a run's verdict reads as not
|
|
17
|
+
* passed. Imported rollouts (Claude Code sessions Codex copied in) are never
|
|
18
|
+
* Codex work (P39); compressed `.jsonl.zst` files are never read (P40).
|
|
19
|
+
* Never throws.
|
|
20
|
+
*/
|
|
21
|
+
import { createHash, createHmac, randomBytes } from 'node:crypto';
|
|
22
|
+
import { closeSync, lstatSync, openSync, readFileSync, writeSync } from 'node:fs';
|
|
23
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
24
|
+
import { readAppended } from './cursor.js';
|
|
25
|
+
import { failedText } from './failure.js';
|
|
26
|
+
import { ensurePrivateDir } from './state.js';
|
|
27
|
+
import { trailHome } from '../notes/trail-home.js';
|
|
28
|
+
import { isForkedRollout, isImportedRollout } from './codex-meta.js';
|
|
29
|
+
import { argvCommand, codexExitOf, outputBody, outputText, patchFiles, shellPatchFiles } from './codex-exec.js';
|
|
30
|
+
export { codexExitOf } from './codex-exec.js';
|
|
31
|
+
export { codexHome, codexMeta, codexTranscriptOk, isForkedRollout, isImportedRollout } from './codex-meta.js';
|
|
32
|
+
const MAX_LINE = 2 * 1024 * 1024;
|
|
33
|
+
const MAX_TEXT = 40_000;
|
|
34
|
+
const KEEP_HEAD = 8_000;
|
|
35
|
+
/** A running command's output, joined across write_stdin reads: head and tail kept. */
|
|
36
|
+
const JOIN_KEEP = 8 * 1024;
|
|
37
|
+
const MAX_OPEN = 500;
|
|
38
|
+
const MAX_RUNNING = 50;
|
|
39
|
+
const TYPED_KEEP = 20;
|
|
40
|
+
const str = (v) => (typeof v === 'string' && v !== '' ? v : null);
|
|
41
|
+
/* ----------------------------------------------------------- typed (P30) */
|
|
42
|
+
/**
|
|
43
|
+
* D138 (3): `~/.trail/state/typed-key`, 32 random bytes as hex, 0600; made only when `create`. Never `~/.trail/key`,
|
|
44
|
+
* which belongs to another feature. null when missing, a link (the file or the state folder), or odd.
|
|
45
|
+
*/
|
|
46
|
+
function promptKey(env, create) {
|
|
47
|
+
const dir = join(trailHome(env), 'state');
|
|
48
|
+
const path = join(dir, 'typed-key');
|
|
49
|
+
const linked = () => {
|
|
50
|
+
try {
|
|
51
|
+
return lstatSync(dir).isSymbolicLink();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const read = () => {
|
|
58
|
+
try {
|
|
59
|
+
if (linked())
|
|
60
|
+
return null;
|
|
61
|
+
if (!lstatSync(path).isFile())
|
|
62
|
+
return null;
|
|
63
|
+
const t = readFileSync(path, 'utf8').trim();
|
|
64
|
+
return /^[0-9a-f]{64}$/.test(t) ? Buffer.from(t, 'hex') : null;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const have = read();
|
|
71
|
+
if (have || !create)
|
|
72
|
+
return have;
|
|
73
|
+
try {
|
|
74
|
+
ensurePrivateDir(trailHome(env));
|
|
75
|
+
ensurePrivateDir(dir);
|
|
76
|
+
if (linked())
|
|
77
|
+
return null;
|
|
78
|
+
const fd = openSync(path, 'wx', 0o600);
|
|
79
|
+
try {
|
|
80
|
+
writeSync(fd, `${randomBytes(32).toString('hex')}\n`);
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
closeSync(fd);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
/* another hook made it first, or the home can't be written: read what is there */
|
|
88
|
+
}
|
|
89
|
+
return read();
|
|
90
|
+
}
|
|
91
|
+
/** R7, D138: the keyed hash (HMAC-SHA256 with ~/.trail/state/typed-key, 16 hex) of a prompt's trimmed text; null with no key. */
|
|
92
|
+
export function codexTypedSha(text, env = process.env, opts = {}) {
|
|
93
|
+
const key = promptKey(env, opts.create === true);
|
|
94
|
+
return key ? createHmac('sha256', key).update(String(text).trim(), 'utf8').digest('hex').slice(0, 16) : null;
|
|
95
|
+
}
|
|
96
|
+
/** For the prompt hook (c8): the submitted prompt's keyed hash into `st.codex.typedShas`, the last 20. Makes the key. */
|
|
97
|
+
export function noteCodexPrompt(st, prompt, env = process.env) {
|
|
98
|
+
const sha = codexTypedSha(prompt, env, { create: true });
|
|
99
|
+
if (!sha)
|
|
100
|
+
return;
|
|
101
|
+
const cur = st.codex && typeof st.codex === 'object' ? st.codex : { meta: null, typedShas: [] };
|
|
102
|
+
const shas = Array.isArray(cur.typedShas) ? cur.typedShas.filter((s) => typeof s === 'string') : [];
|
|
103
|
+
st.codex = { meta: cur.meta ?? null, typedShas: [...shas, sha].slice(-TYPED_KEEP) };
|
|
104
|
+
}
|
|
105
|
+
/** P30: a typed line is the person's when the prompt hook recorded its keyed hash in this session. */
|
|
106
|
+
export function codexTypedByPerson(text, st, env = process.env) {
|
|
107
|
+
const shas = st?.codex?.typedShas;
|
|
108
|
+
if (!Array.isArray(shas) || !shas.length || !text.trim())
|
|
109
|
+
return false;
|
|
110
|
+
const sha = codexTypedSha(text, env);
|
|
111
|
+
return sha !== null && shas.includes(sha);
|
|
112
|
+
}
|
|
113
|
+
/** The keys fed to each running session in this read, by memo: in memory only, never in the saved cursor. */
|
|
114
|
+
const KEYS_KEEP = 16 * 1024;
|
|
115
|
+
const fedKeys = new WeakMap();
|
|
116
|
+
function keyed(memo, session, chars) {
|
|
117
|
+
const all = fedKeys.get(memo) ?? {};
|
|
118
|
+
fedKeys.set(memo, all);
|
|
119
|
+
all[session] = `${all[session] ?? ''}${chars}`.slice(-KEYS_KEEP);
|
|
120
|
+
return all[session];
|
|
121
|
+
}
|
|
122
|
+
function box(memo) {
|
|
123
|
+
const m = memo;
|
|
124
|
+
const obj = (v) => v && typeof v === 'object' && !Array.isArray(v);
|
|
125
|
+
if (!obj(m.calls))
|
|
126
|
+
m.calls = {};
|
|
127
|
+
if (!obj(m.running))
|
|
128
|
+
m.running = {};
|
|
129
|
+
if (!obj(m.stdin))
|
|
130
|
+
m.stdin = {};
|
|
131
|
+
if (!obj(m.exits))
|
|
132
|
+
m.exits = {};
|
|
133
|
+
if (!Array.isArray(m.said))
|
|
134
|
+
m.said = [];
|
|
135
|
+
return m;
|
|
136
|
+
}
|
|
137
|
+
function trim(rec, max) {
|
|
138
|
+
const keys = Object.keys(rec);
|
|
139
|
+
for (const k of keys.slice(0, Math.max(0, keys.length - max)))
|
|
140
|
+
delete rec[k];
|
|
141
|
+
}
|
|
142
|
+
const clip = (t) => (t.length > MAX_TEXT ? `${t.slice(0, KEEP_HEAD)}\n…\n${t.slice(-(MAX_TEXT - KEEP_HEAD))}` : t);
|
|
143
|
+
const sha8 = (t) => createHash('sha256').update(t).digest('hex').slice(0, 16);
|
|
144
|
+
/** The text parts of a message's content (input_text, output_text, text). */
|
|
145
|
+
function partsText(content) {
|
|
146
|
+
if (typeof content === 'string')
|
|
147
|
+
return content;
|
|
148
|
+
if (!Array.isArray(content))
|
|
149
|
+
return '';
|
|
150
|
+
return content.flatMap((p) => (p && typeof p === 'object' && typeof p.text === 'string' ? [p.text] : [])).join('\n');
|
|
151
|
+
}
|
|
152
|
+
function args(v) {
|
|
153
|
+
if (v && typeof v === 'object' && !Array.isArray(v))
|
|
154
|
+
return v;
|
|
155
|
+
if (typeof v !== 'string')
|
|
156
|
+
return null;
|
|
157
|
+
try {
|
|
158
|
+
const o = JSON.parse(v);
|
|
159
|
+
return o && typeof o === 'object' && !Array.isArray(o) ? o : null;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/** A folder named by a call, against the turn's folder when relative. */
|
|
166
|
+
function folder(dir, m) {
|
|
167
|
+
const d = str(dir);
|
|
168
|
+
if (!d)
|
|
169
|
+
return m.cwd;
|
|
170
|
+
return isAbsolute(d) ? d : m.cwd ? resolve(m.cwd, d) : undefined;
|
|
171
|
+
}
|
|
172
|
+
/** The shell command a call runs, by tool: exec_command's cmd, shell's vector, shell_command's line, local_shell_call's action. */
|
|
173
|
+
function shellOf(name, a) {
|
|
174
|
+
if (name === 'exec_command')
|
|
175
|
+
return str(a.cmd) ? { cmd: a.cmd, dir: a.workdir } : null;
|
|
176
|
+
if (name === 'shell') {
|
|
177
|
+
const cmd = argvCommand(a.command);
|
|
178
|
+
return cmd ? { cmd, dir: a.workdir } : null;
|
|
179
|
+
}
|
|
180
|
+
if (name === 'shell_command')
|
|
181
|
+
return str(a.command) ? { cmd: a.command, dir: a.workdir } : null;
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
/** The events one parsed rollout line holds. `offset`: where the line starts in the file. */
|
|
185
|
+
function eventsOf(e, memo, out, offset) {
|
|
186
|
+
const p = e.payload && typeof e.payload === 'object' && !Array.isArray(e.payload) ? e.payload : null;
|
|
187
|
+
if (!p)
|
|
188
|
+
return;
|
|
189
|
+
const m = box(memo);
|
|
190
|
+
const at = typeof e.timestamp === 'string' ? e.timestamp : '';
|
|
191
|
+
const where = offset === undefined ? {} : { offset };
|
|
192
|
+
const ctx = () => ({ ...(m.cwd ? { cwd: m.cwd } : {}), ...(m.branch ? { branch: m.branch } : {}) });
|
|
193
|
+
const assistant = (text) => {
|
|
194
|
+
const t = text.trim();
|
|
195
|
+
if (!t)
|
|
196
|
+
return;
|
|
197
|
+
const h = sha8(t);
|
|
198
|
+
if (m.said.includes(h))
|
|
199
|
+
return;
|
|
200
|
+
m.said = [...m.said, h].slice(-20);
|
|
201
|
+
out.push({ kind: 'assistant', text: clip(t), at, ...where });
|
|
202
|
+
};
|
|
203
|
+
const typed = (text) => {
|
|
204
|
+
const t = text.trim();
|
|
205
|
+
if (!t)
|
|
206
|
+
return;
|
|
207
|
+
m.said = [];
|
|
208
|
+
out.push({ kind: 'typed', text: t, at, ...where });
|
|
209
|
+
};
|
|
210
|
+
const injected = (text) => {
|
|
211
|
+
const t = text.trim();
|
|
212
|
+
if (t)
|
|
213
|
+
out.push({ kind: 'injected', text: clip(t), at, ...where });
|
|
214
|
+
};
|
|
215
|
+
const compaction = () => {
|
|
216
|
+
if (at && m.compactAt === at)
|
|
217
|
+
return;
|
|
218
|
+
m.compactAt = at;
|
|
219
|
+
out.push({ kind: 'compaction', at, ...where });
|
|
220
|
+
};
|
|
221
|
+
const call = (id, name, input, shell, cmd, cwd) => {
|
|
222
|
+
m.calls[id] = { name, shell, ...(cmd ? { cmd } : {}), ...(m.turn ? { turn: m.turn } : {}) };
|
|
223
|
+
trim(m.calls, MAX_OPEN);
|
|
224
|
+
const c = ctx();
|
|
225
|
+
out.push({ kind: 'tool_call', id, name, input, at, ...where, ...c, ...(cwd ? { cwd } : {}) });
|
|
226
|
+
};
|
|
227
|
+
const result = (id, code, text, shell) => {
|
|
228
|
+
const failed = code !== null && code !== 0;
|
|
229
|
+
const shown = failed ? `Exit code ${code}\n${text}` : text;
|
|
230
|
+
const ok = shell ? code === 0 && !failedText(text) : !failed;
|
|
231
|
+
out.push({ kind: 'tool_result', id, ok, text: clip(shown), at, ...where, isError: failed });
|
|
232
|
+
};
|
|
233
|
+
const closeRunning = (key, code, more) => {
|
|
234
|
+
const r = m.running[key];
|
|
235
|
+
delete m.running[key];
|
|
236
|
+
for (const [k, v] of Object.entries(m.stdin))
|
|
237
|
+
if (v === key)
|
|
238
|
+
delete m.stdin[k];
|
|
239
|
+
result(r.id, code, [r.head, r.tail, more].filter(Boolean).join('\n'), true);
|
|
240
|
+
};
|
|
241
|
+
const join = (r, text) => {
|
|
242
|
+
if (r.head.length < JOIN_KEEP) {
|
|
243
|
+
const room = JOIN_KEEP - r.head.length;
|
|
244
|
+
r.head += (r.head ? '\n' : '') + text.slice(0, room);
|
|
245
|
+
text = text.slice(room);
|
|
246
|
+
}
|
|
247
|
+
if (text)
|
|
248
|
+
r.tail = `${r.tail}\n${text}`.slice(-JOIN_KEEP);
|
|
249
|
+
};
|
|
250
|
+
if (e.type === 'session_meta') {
|
|
251
|
+
m.cwd = str(p.cwd) ?? m.cwd;
|
|
252
|
+
m.branch = str(p.git?.branch) ?? m.branch;
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (e.type === 'turn_context') {
|
|
256
|
+
m.cwd = str(p.cwd) ?? m.cwd;
|
|
257
|
+
m.branch = str(p.git_branch) ?? m.branch;
|
|
258
|
+
if (str(p.turn_id))
|
|
259
|
+
m.turn = p.turn_id;
|
|
260
|
+
m.said = [];
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
if (e.type === 'compacted')
|
|
264
|
+
return compaction();
|
|
265
|
+
if (e.type === 'event_msg') {
|
|
266
|
+
switch (p.type) {
|
|
267
|
+
case 'task_started':
|
|
268
|
+
if (str(p.turn_id))
|
|
269
|
+
m.turn = p.turn_id;
|
|
270
|
+
m.said = [];
|
|
271
|
+
return;
|
|
272
|
+
case 'user_message':
|
|
273
|
+
return typed(typeof p.message === 'string' ? p.message : '');
|
|
274
|
+
case 'agent_message':
|
|
275
|
+
return assistant(typeof p.message === 'string' ? p.message : '');
|
|
276
|
+
case 'context_compacted':
|
|
277
|
+
return compaction();
|
|
278
|
+
case 'item_completed': {
|
|
279
|
+
const it = p.item && typeof p.item === 'object' ? p.item : null;
|
|
280
|
+
if (!it)
|
|
281
|
+
return;
|
|
282
|
+
if (it.type === 'UserMessage')
|
|
283
|
+
return typed(partsText(it.content));
|
|
284
|
+
if (it.type === 'AgentMessage')
|
|
285
|
+
return assistant(partsText(it.content));
|
|
286
|
+
if (it.type === 'CommandExecution')
|
|
287
|
+
return structured(str(it.id), argvCommand(it.command), it.exit_code, typeof it.aggregated_output === 'string' ? it.aggregated_output : '');
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
case 'exec_command_end':
|
|
291
|
+
return structured(str(p.call_id), argvCommand(p.command), p.exit_code, typeof p.aggregated_output === 'string' ? p.aggregated_output : '');
|
|
292
|
+
default:
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if (e.type !== 'response_item')
|
|
297
|
+
return;
|
|
298
|
+
switch (p.type) {
|
|
299
|
+
case 'message': {
|
|
300
|
+
const text = partsText(p.content);
|
|
301
|
+
if (p.role === 'assistant')
|
|
302
|
+
return assistant(text);
|
|
303
|
+
return injected(text); // user (AGENTS.md, environment context, the prompt's copy), developer, system
|
|
304
|
+
}
|
|
305
|
+
case 'function_call': {
|
|
306
|
+
const id = str(p.call_id);
|
|
307
|
+
const name = str(p.name);
|
|
308
|
+
const a = args(p.arguments);
|
|
309
|
+
if (!id || !name || !a)
|
|
310
|
+
return;
|
|
311
|
+
if (name === 'write_stdin') {
|
|
312
|
+
const session = a.session_id !== undefined && a.session_id !== null ? String(a.session_id) : null;
|
|
313
|
+
if (session !== null)
|
|
314
|
+
m.stdin[id] = session;
|
|
315
|
+
trim(m.stdin, MAX_RUNNING);
|
|
316
|
+
// Keystrokes into a running command (a shell, a REPL) can run anything, so they are a call of their own,
|
|
317
|
+
// with every key fed to that session so far in this read (a command split over writes is whole), never
|
|
318
|
+
// kept on disk: a login's password can be among them (review).
|
|
319
|
+
const chars = typeof a.chars === 'string' ? a.chars : '';
|
|
320
|
+
if (session !== null && chars)
|
|
321
|
+
call(id, 'write_stdin', { session_id: session, chars: keyed(memo, session, chars) }, false);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
const sh = shellOf(name, a);
|
|
325
|
+
if (sh)
|
|
326
|
+
return shellCall(id, sh.cmd, folder(sh.dir, m));
|
|
327
|
+
if (name === 'apply_patch')
|
|
328
|
+
return edits(id, a.input ?? a.patch);
|
|
329
|
+
return call(id, name, a, false);
|
|
330
|
+
}
|
|
331
|
+
case 'local_shell_call': {
|
|
332
|
+
const id = str(p.call_id) ?? str(p.id);
|
|
333
|
+
const cmd = argvCommand(p.action?.command);
|
|
334
|
+
if (id && cmd)
|
|
335
|
+
shellCall(id, cmd, folder(p.action?.working_directory, m));
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
case 'custom_tool_call': {
|
|
339
|
+
const id = str(p.call_id);
|
|
340
|
+
const name = str(p.name);
|
|
341
|
+
if (!id || !name)
|
|
342
|
+
return;
|
|
343
|
+
if (name === 'apply_patch')
|
|
344
|
+
return edits(id, p.input);
|
|
345
|
+
return call(id, name, { input: p.input }, false);
|
|
346
|
+
}
|
|
347
|
+
case 'function_call_output':
|
|
348
|
+
case 'custom_tool_call_output': {
|
|
349
|
+
const id = str(p.call_id);
|
|
350
|
+
if (!id)
|
|
351
|
+
return;
|
|
352
|
+
const text = outputText(p.output);
|
|
353
|
+
const exit = codexExitOf(text);
|
|
354
|
+
const viaStdin = m.stdin[id];
|
|
355
|
+
if (viaStdin !== undefined) {
|
|
356
|
+
delete m.stdin[id];
|
|
357
|
+
if (m.calls[id]) {
|
|
358
|
+
delete m.calls[id];
|
|
359
|
+
out.push({ kind: 'tool_result', id, ok: true, text: '', at, ...where, isError: false });
|
|
360
|
+
}
|
|
361
|
+
const r = m.running[viaStdin];
|
|
362
|
+
if (!r)
|
|
363
|
+
return;
|
|
364
|
+
if (exit && 'code' in exit)
|
|
365
|
+
return closeRunning(viaStdin, exit.code, outputBody(text));
|
|
366
|
+
join(r, outputBody(text));
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
const open = m.calls[id];
|
|
370
|
+
delete m.calls[id];
|
|
371
|
+
const shell = open ? open.shell : true; // a call never seen (read before this window) is judged as a command
|
|
372
|
+
const known = m.exits[id];
|
|
373
|
+
delete m.exits[id];
|
|
374
|
+
if (shell && exit && 'running' in exit && known === undefined) {
|
|
375
|
+
const key = String(exit.running);
|
|
376
|
+
m.running[key] = { id, ...(open?.cmd ? { cmd: open.cmd } : {}), ...(open?.turn ? { turn: open.turn } : {}), head: '', tail: '' };
|
|
377
|
+
join(m.running[key], outputBody(text));
|
|
378
|
+
trim(m.running, MAX_RUNNING);
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
const code = known !== undefined ? known : exit && 'code' in exit ? exit.code : null;
|
|
382
|
+
return result(id, code, outputBody(text), shell);
|
|
383
|
+
}
|
|
384
|
+
default:
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
function edits(id, patch) {
|
|
388
|
+
const files = patchFiles(patch);
|
|
389
|
+
const list = files.length ? files : [''];
|
|
390
|
+
list.forEach((f, i) => call(i === 0 ? id : `${id}#${i + 1}`, 'Edit', { file_path: f && m.cwd && !isAbsolute(f) ? resolve(m.cwd, f) : f }, false));
|
|
391
|
+
for (let i = 2; i <= list.length; i++)
|
|
392
|
+
delete m.calls[`${id}#${i}`];
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* A shell call, and when it runs apply_patch (`apply_patch <<'EOF'`, `["apply_patch", patch]`, after a `cd`), which
|
|
396
|
+
* Codex applies itself, one Edit per file it names as well (review): written through the shell, a patch to
|
|
397
|
+
* ~/.trail was no edit to the tamper checks.
|
|
398
|
+
*/
|
|
399
|
+
function shellCall(id, cmd, cwd) {
|
|
400
|
+
call(id, 'Bash', { command: cmd }, true, cmd, cwd);
|
|
401
|
+
shellPatchFiles(cmd, cwd ?? m.cwd).forEach((f, i) => {
|
|
402
|
+
const k = `${id}#patch${i + 1}`;
|
|
403
|
+
call(k, 'Edit', { file_path: f }, false);
|
|
404
|
+
delete m.calls[k];
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
/** A structured exit: for the open call it names (by id, else by its command on this turn), it decides ok. */
|
|
408
|
+
function structured(id, cmd, exitCode, aggregated) {
|
|
409
|
+
if (typeof exitCode !== 'number' || !Number.isInteger(exitCode))
|
|
410
|
+
return;
|
|
411
|
+
const runKey = (match) => Object.keys(m.running).find((k) => match(m.running[k]));
|
|
412
|
+
if (id && m.calls[id]?.shell) {
|
|
413
|
+
m.exits[id] = exitCode;
|
|
414
|
+
trim(m.exits, MAX_OPEN);
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
const byId = id ? runKey((r) => r.id === id) : undefined;
|
|
418
|
+
if (byId !== undefined)
|
|
419
|
+
return closeRunning(byId, exitCode, aggregated && !m.running[byId].head ? aggregated : '');
|
|
420
|
+
if (!cmd)
|
|
421
|
+
return;
|
|
422
|
+
// By command only when exactly one open call (or running command) on this turn ran it: two `npm test` calls at
|
|
423
|
+
// once would otherwise give one's exit to the other, a failure read as a pass (review).
|
|
424
|
+
const same = Object.keys(m.calls).filter((k) => m.calls[k].shell && m.calls[k].cmd === cmd && m.calls[k].turn === m.turn && m.exits[k] === undefined);
|
|
425
|
+
const byCmd = Object.keys(m.running).filter((k) => m.running[k].cmd === cmd && m.running[k].turn === m.turn);
|
|
426
|
+
if (same.length + byCmd.length !== 1)
|
|
427
|
+
return;
|
|
428
|
+
if (same.length) {
|
|
429
|
+
m.exits[same[0]] = exitCode;
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
closeRunning(byCmd[0], exitCode, '');
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* The events of one parsed rollout line, for a caller that walks lines itself (the save gate's tail, a typed line
|
|
437
|
+
* at an offset). `memo` carries open calls from line to line: start it as `{}`. A typed event here is only a
|
|
438
|
+
* candidate: the dialect's `typedByPerson` judges it (P30). Never throws.
|
|
439
|
+
*/
|
|
440
|
+
export function codexLineEvents(entry, memo, offset, _env = process.env) {
|
|
441
|
+
const out = [];
|
|
442
|
+
try {
|
|
443
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry))
|
|
444
|
+
return out;
|
|
445
|
+
eventsOf(entry, memo, out, offset);
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
/* a line of an unknown shape gives what it gave */
|
|
449
|
+
}
|
|
450
|
+
return out;
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* The events a Codex rollout gained since the last call with the same `cursorPath` (1a's cursor: positioned,
|
|
454
|
+
* 4 MB chunks). `.jsonl` only (P40), never an imported rollout (P39) or a forked one (D133), lines over 2 MB skipped.
|
|
455
|
+
* Never throws.
|
|
456
|
+
*/
|
|
457
|
+
export function readNewCodexEvents(rolloutPath, cursorPath, opts = {}) {
|
|
458
|
+
const out = [];
|
|
459
|
+
const env = opts.env ?? process.env;
|
|
460
|
+
try {
|
|
461
|
+
if (!rolloutPath.endsWith('.jsonl') || isImportedRollout(rolloutPath, env) || isForkedRollout(rolloutPath))
|
|
462
|
+
return out;
|
|
463
|
+
readAppended(rolloutPath, cursorPath, (line, memo, offset) => {
|
|
464
|
+
if (line.length > MAX_LINE)
|
|
465
|
+
return;
|
|
466
|
+
let e;
|
|
467
|
+
try {
|
|
468
|
+
e = JSON.parse(line);
|
|
469
|
+
}
|
|
470
|
+
catch {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
if (!e || typeof e !== 'object' || Array.isArray(e))
|
|
474
|
+
return;
|
|
475
|
+
if (opts.onEntry)
|
|
476
|
+
opts.onEntry(e, memo);
|
|
477
|
+
eventsOf(e, memo, out, offset);
|
|
478
|
+
}, opts);
|
|
479
|
+
}
|
|
480
|
+
catch {
|
|
481
|
+
/* fail open */
|
|
482
|
+
}
|
|
483
|
+
return out.map((ev) => (ev.kind === 'typed' && !codexTypedByPerson(ev.text, opts.state, env) ? { ...ev, kind: 'injected' } : ev));
|
|
484
|
+
}
|
|
485
|
+
//# sourceMappingURL=codex.js.map
|