aiwcli 0.15.5 → 0.17.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 +108 -1124
- package/bin/run.js +0 -4
- package/dist/capabilities/branch/adapters.d.ts +2 -0
- package/dist/capabilities/branch/adapters.js +21 -0
- package/dist/capabilities/branch/contracts.d.ts +57 -0
- package/dist/capabilities/branch/contracts.js +1 -0
- package/dist/capabilities/branch/control-plane.d.ts +2 -0
- package/dist/capabilities/branch/control-plane.js +343 -0
- package/dist/capabilities/branch/runtime-core.d.ts +5 -0
- package/dist/capabilities/branch/runtime-core.js +36 -0
- package/dist/capabilities/installation/control-plane/clean-command.d.ts +41 -0
- package/dist/capabilities/installation/control-plane/clean-command.js +196 -0
- package/dist/capabilities/installation/control-plane/clear-command.d.ts +162 -0
- package/dist/capabilities/installation/control-plane/clear-command.js +1249 -0
- package/dist/capabilities/installation/control-plane/init-command.d.ts +81 -0
- package/dist/capabilities/installation/control-plane/init-command.js +449 -0
- package/dist/capabilities/launch/contracts.d.ts +86 -0
- package/dist/capabilities/launch/contracts.js +1 -0
- package/dist/capabilities/launch/control-plane/execute-launch.d.ts +2 -0
- package/dist/capabilities/launch/control-plane/execute-launch.js +261 -0
- package/dist/capabilities/launch/runtime-core/launch-decisions.d.ts +82 -0
- package/dist/capabilities/launch/runtime-core/launch-decisions.js +202 -0
- package/dist/capabilities/launch/runtime-core/launch-options.d.ts +14 -0
- package/dist/capabilities/launch/runtime-core/launch-options.js +69 -0
- package/dist/cli/base-command.d.ts +18 -0
- package/dist/cli/base-command.js +55 -0
- package/dist/commands/branch.d.ts +1 -21
- package/dist/commands/branch.js +25 -417
- package/dist/commands/clean.d.ts +1 -41
- package/dist/commands/clean.js +1 -196
- package/dist/commands/clear.d.ts +1 -161
- package/dist/commands/clear.js +1 -1121
- package/dist/commands/init/index.d.ts +1 -98
- package/dist/commands/init/index.js +4 -478
- package/dist/commands/launch.d.ts +32 -12
- package/dist/commands/launch.js +107 -166
- package/dist/lib/claude-settings-types.d.ts +31 -19
- package/dist/lib/config.js +1 -2
- package/dist/lib/context/context-formatter.d.ts +74 -0
- package/dist/lib/context/context-formatter.js +493 -0
- package/dist/lib/context/context-selector.d.ts +42 -0
- package/dist/lib/context/context-selector.js +451 -0
- package/dist/lib/context/context-store.d.ts +100 -0
- package/dist/lib/context/context-store.js +644 -0
- package/dist/lib/context/plan-manager.d.ts +54 -0
- package/dist/lib/context/plan-manager.js +282 -0
- package/dist/lib/context/task-tracker.d.ts +44 -0
- package/dist/lib/context/task-tracker.js +146 -0
- package/dist/lib/core-ide-base.d.ts +4 -0
- package/dist/lib/core-ide-base.js +77 -0
- package/dist/lib/core-installer.d.ts +5 -0
- package/dist/lib/core-installer.js +33 -0
- package/dist/lib/debug.d.ts +0 -10
- package/dist/lib/debug.js +0 -10
- package/dist/lib/env-sanitizer.d.ts +25 -0
- package/dist/lib/env-sanitizer.js +46 -0
- package/dist/lib/errors.d.ts +0 -13
- package/dist/lib/errors.js +0 -15
- package/dist/lib/git-exclude-manager.d.ts +2 -2
- package/dist/lib/git-exclude-manager.js +3 -3
- package/dist/lib/hooks/context-monitor-logic.d.ts +6 -0
- package/dist/lib/hooks/context-monitor-logic.js +25 -0
- package/dist/lib/hooks/hook-utils.d.ts +143 -0
- package/dist/lib/hooks/hook-utils.js +620 -0
- package/dist/lib/hooks/prompt-binding-logic.d.ts +7 -0
- package/dist/lib/hooks/prompt-binding-logic.js +50 -0
- package/dist/lib/hooks/session-end-logic.d.ts +5 -0
- package/dist/lib/hooks/session-end-logic.js +51 -0
- package/dist/lib/hooks-merger.js +25 -19
- package/dist/lib/ide-path-resolver.d.ts +19 -7
- package/dist/lib/ide-path-resolver.js +25 -9
- package/dist/lib/install-state.d.ts +34 -0
- package/dist/lib/install-state.js +154 -0
- package/dist/lib/json-io.d.ts +12 -0
- package/dist/lib/json-io.js +30 -0
- package/dist/lib/lsp-patch.d.ts +12 -0
- package/dist/lib/lsp-patch.js +156 -0
- package/dist/lib/multiplexer.d.ts +65 -0
- package/dist/lib/multiplexer.js +38 -0
- package/dist/lib/multiplexers/psmux.d.ts +55 -0
- package/dist/lib/multiplexers/psmux.js +324 -0
- package/dist/lib/multiplexers/tmux.d.ts +36 -0
- package/dist/lib/multiplexers/tmux.js +221 -0
- package/dist/lib/multiplexers/wezterm.d.ts +38 -0
- package/dist/lib/multiplexers/wezterm.js +225 -0
- package/dist/lib/mux-utils.d.ts +6 -0
- package/dist/lib/mux-utils.js +36 -0
- package/dist/lib/paths.d.ts +2 -2
- package/dist/lib/paths.js +2 -2
- package/dist/lib/platform-commands.d.ts +27 -0
- package/dist/lib/platform-commands.js +49 -0
- package/dist/lib/prompt-file-manager.d.ts +23 -0
- package/dist/lib/prompt-file-manager.js +41 -0
- package/dist/lib/runtime/agent-launcher.d.ts +67 -0
- package/dist/lib/runtime/agent-launcher.js +262 -0
- package/dist/lib/runtime/aiw-cli.d.ts +39 -0
- package/dist/lib/runtime/aiw-cli.js +76 -0
- package/dist/lib/runtime/atomic-write.d.ts +19 -0
- package/dist/lib/runtime/atomic-write.js +121 -0
- package/dist/lib/runtime/cli-args.d.ts +58 -0
- package/dist/lib/runtime/cli-args.js +200 -0
- package/dist/lib/runtime/constants.d.ts +56 -0
- package/dist/lib/runtime/constants.js +230 -0
- package/dist/lib/runtime/executable-policy.d.ts +16 -0
- package/dist/lib/runtime/executable-policy.js +57 -0
- package/dist/lib/runtime/git-state.d.ts +9 -0
- package/dist/lib/runtime/git-state.js +59 -0
- package/dist/lib/runtime/inference.d.ts +37 -0
- package/dist/lib/runtime/inference.js +251 -0
- package/dist/lib/runtime/lint-dispatch.d.ts +40 -0
- package/dist/lib/runtime/lint-dispatch.js +285 -0
- package/dist/lib/runtime/logger.d.ts +66 -0
- package/dist/lib/runtime/logger.js +201 -0
- package/dist/lib/runtime/models.d.ts +20 -0
- package/dist/lib/runtime/models.js +20 -0
- package/dist/lib/runtime/platform-adapter.d.ts +7 -0
- package/dist/lib/runtime/platform-adapter.js +21 -0
- package/dist/lib/runtime/preflight.d.ts +24 -0
- package/dist/lib/runtime/preflight.js +65 -0
- package/dist/lib/runtime/sentinel-ipc.d.ts +14 -0
- package/dist/lib/runtime/sentinel-ipc.js +67 -0
- package/dist/lib/runtime/state-io.d.ts +31 -0
- package/dist/lib/runtime/state-io.js +179 -0
- package/dist/lib/runtime/stop-words.d.ts +20 -0
- package/dist/lib/runtime/stop-words.js +150 -0
- package/dist/lib/runtime/subprocess-utils.d.ts +29 -0
- package/dist/lib/runtime/subprocess-utils.js +96 -0
- package/dist/lib/runtime/tmux-preflight.d.ts +13 -0
- package/dist/lib/runtime/tmux-preflight.js +78 -0
- package/dist/lib/runtime/utils.d.ts +62 -0
- package/dist/lib/runtime/utils.js +192 -0
- package/dist/lib/schemas.d.ts +250 -0
- package/dist/lib/schemas.js +216 -0
- package/dist/lib/sentinel-manager.d.ts +32 -0
- package/dist/lib/sentinel-manager.js +62 -0
- package/dist/lib/sentinel-wrapper.d.ts +10 -0
- package/dist/lib/sentinel-wrapper.js +29 -0
- package/dist/lib/settings-hierarchy.js +3 -20
- package/dist/lib/shell-adapters/bash-adapter.d.ts +18 -0
- package/dist/lib/shell-adapters/bash-adapter.js +69 -0
- package/dist/lib/shell-adapters/index.d.ts +5 -0
- package/dist/lib/shell-adapters/index.js +7 -0
- package/dist/lib/shell-adapters/powershell-adapter.d.ts +18 -0
- package/dist/lib/shell-adapters/powershell-adapter.js +62 -0
- package/dist/lib/shell-adapters/shell-adapter.d.ts +45 -0
- package/dist/lib/shell-adapters/shell-adapter.js +5 -0
- package/dist/lib/shell-quoting.d.ts +5 -0
- package/dist/lib/shell-quoting.js +17 -0
- package/dist/lib/spawn-errors.d.ts +9 -0
- package/dist/lib/spawn-errors.js +29 -0
- package/dist/lib/spawn.js +5 -11
- package/dist/lib/spinner.d.ts +0 -5
- package/dist/lib/spinner.js +0 -16
- package/dist/lib/template-installer.d.ts +14 -5
- package/dist/lib/template-installer.js +40 -38
- package/dist/lib/template-resolver.d.ts +6 -7
- package/dist/lib/template-resolver.js +26 -21
- package/dist/lib/template-settings-reconstructor.d.ts +7 -2
- package/dist/lib/template-settings-reconstructor.js +76 -45
- package/dist/lib/terminal-strategy.d.ts +12 -0
- package/dist/lib/terminal-strategy.js +55 -0
- package/dist/lib/terminal.d.ts +34 -4
- package/dist/lib/terminal.js +192 -119
- package/dist/lib/tmux-pane-placement.d.ts +17 -0
- package/dist/lib/tmux-pane-placement.js +58 -0
- package/dist/lib/tmux-primitives.d.ts +3 -0
- package/dist/lib/tmux-primitives.js +11 -0
- package/dist/lib/tmux-session.d.ts +32 -0
- package/dist/lib/tmux-session.js +87 -0
- package/dist/lib/tty-detection.js +1 -1
- package/dist/lib/types.d.ts +168 -0
- package/dist/lib/types.js +6 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/lib/windsurf-hooks-hierarchy.js +6 -23
- package/dist/platform/launch.d.ts +11 -0
- package/dist/platform/launch.js +11 -0
- package/dist/templates/CLAUDE.md +30 -40
- package/dist/templates/cc-native/.claude/settings.json +26 -36
- package/dist/templates/cc-native/CC-NATIVE-README.md +1 -1
- package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +20 -12
- package/dist/templates/cc-native/_cc-native/cc-native.config.json +2 -6
- package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +39 -59
- package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +9 -11
- package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_subagent.ts +2 -2
- package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_write.ts +4 -5
- package/dist/templates/cc-native/_cc-native/hooks/mark_questions_asked.ts +4 -4
- package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +2 -27
- package/dist/templates/cc-native/_cc-native/hooks/validate_task_prompt.ts +7 -7
- package/dist/templates/cc-native/_cc-native/lib-ts/.mocharc.json +9 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/aggregate-agents.test.ts +118 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/artifacts.test.ts +234 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/cc-native-state.test.ts +170 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/cli-output-parser.test.ts +73 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/config.test.ts +64 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/constants.test.ts +40 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/debug.test.ts +42 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/exports.test.ts +58 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/helpers.ts +107 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/hooks/add-plan-context.hook.test.ts +97 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/hooks/plan-questions.hook.test.ts +81 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/hooks/plan-review.hook.test.ts +71 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/json-parser.test.ts +99 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/orchestrator-agent.test.ts +288 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/orchestrator.test.ts +48 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/reviewers.test.ts +32 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/state.test.ts +124 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/verdict.test.ts +93 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/agent-selection.ts +163 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +6 -14
- package/dist/templates/cc-native/_cc-native/{artifacts/lib → lib-ts/artifacts}/format.ts +597 -599
- package/dist/templates/cc-native/_cc-native/{artifacts/lib → lib-ts/artifacts}/index.ts +26 -26
- package/dist/templates/cc-native/_cc-native/{artifacts/lib → lib-ts/artifacts}/tracker.ts +106 -107
- package/dist/templates/cc-native/_cc-native/{artifacts/lib → lib-ts/artifacts}/write.ts +118 -119
- package/dist/templates/cc-native/_cc-native/lib-ts/artifacts.ts +21 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +17 -16
- package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +132 -10
- package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/constants.ts +6 -6
- package/dist/templates/cc-native/_cc-native/lib-ts/corroboration.ts +119 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +2 -3
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/graduation.ts +132 -132
- package/dist/templates/cc-native/_cc-native/lib-ts/index.ts +88 -86
- package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +5 -6
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/orchestrator.ts +70 -70
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/output-builder.ts +130 -121
- package/dist/templates/cc-native/_cc-native/lib-ts/package-lock.json +1679 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/package.json +24 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/plan-discovery.ts +5 -5
- package/dist/templates/cc-native/_cc-native/lib-ts/plan-enhancement.ts +1 -6
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/plan-questions.ts +101 -101
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/review-pipeline.ts +511 -543
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/__tests__/agent-providers.test.ts +262 -0
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/agent.ts +71 -85
- package/dist/templates/{_shared/lib-ts/agent-exec → cc-native/_cc-native/lib-ts/reviewers/base}/base-agent.ts +138 -150
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/index.ts +12 -12
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/providers/claude-agent.ts +66 -57
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/providers/codex-agent.ts +185 -200
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/providers/gemini-agent.ts +39 -40
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/providers/orchestrator-claude-agent.ts +196 -225
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/schemas.ts +201 -201
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/types.ts +21 -23
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/__tests__/hyde.test.ts +365 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/__tests__/ollama-client.test.ts +223 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/embedding-indexer.ts +12 -16
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/hyde.ts +3 -2
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/index.ts +31 -31
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/logger.ts +7 -8
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/ollama-client.ts +7 -9
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/retrieval-pipeline.ts +16 -19
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-indexer.ts +37 -41
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-loader.ts +33 -43
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-searcher.ts +20 -20
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/types.ts +9 -10
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/vector-store.ts +3 -4
- package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +50 -126
- package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +20 -22
- package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +2 -2
- package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +14 -89
- package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/verdict.ts +72 -72
- package/dist/templates/cc-native/_cc-native/plan-review/CLAUDE.md +38 -1
- package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/agent-selection.test.ts +345 -0
- package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/preflight.test.ts +344 -0
- package/dist/templates/cc-native/_cc-native/plan-review/lib/agent-selection.ts +38 -16
- package/dist/templates/cc-native/_cc-native/plan-review/lib/preflight.ts +56 -26
- package/dist/templates/cc-native/_cc-native/scripts/council_debate.ts +242 -0
- package/dist/templates/cc-native/_cc-native/scripts/council_debate_simple.ts +294 -0
- package/dist/templates/cc-native/_cc-native/{plan-review/workflows → workflows}/specdev.md +9 -9
- package/dist/templates/core/.claude/skills/codex/SKILL.md +25 -0
- package/dist/templates/core/.claude/skills/devin/SKILL.md +25 -0
- package/dist/templates/core/.claude/skills/handoff/SKILL.md +11 -0
- package/dist/templates/core/.claude/skills/handoff-resume/SKILL.md +11 -0
- package/dist/templates/core/.claude/skills/meta-plan/SKILL.md +13 -0
- package/dist/templates/core/.codex/skills/codex/SKILL.md +13 -0
- package/dist/templates/core/.codex/skills/devin/SKILL.md +19 -0
- package/dist/templates/core/.codex/skills/handoff/SKILL.md +11 -0
- package/dist/templates/core/.codex/skills/handoff-resume/SKILL.md +11 -0
- package/dist/templates/core/.codex/skills/meta-plan/SKILL.md +13 -0
- package/dist/templates/core/.devin/AGENTS.md +5 -0
- package/dist/templates/core/.devin/config.json +12 -0
- package/dist/templates/core/.devin/skills/codex/SKILL.md +19 -0
- package/dist/templates/core/.devin/skills/devin/SKILL.md +13 -0
- package/dist/templates/core/.devin/skills/handoff/SKILL.md +11 -0
- package/dist/templates/core/.devin/skills/handoff-resume/SKILL.md +11 -0
- package/dist/templates/core/.devin/skills/meta-plan/SKILL.md +13 -0
- package/dist/templates/core/.windsurf/workflows/handoff-resume.md +9 -0
- package/dist/templates/{_shared → core}/.windsurf/workflows/handoff.md +1 -1
- package/dist/templates/{_shared → core}/.windsurf/workflows/meta-plan.md +1 -1
- package/dist/templates/core/hooks-ts/_utils/git-state.ts +2 -0
- package/dist/templates/{_shared → core}/hooks-ts/archive_plan.ts +15 -44
- package/dist/templates/core/hooks-ts/codex_explorer.ts +160 -0
- package/dist/templates/{_shared → core}/hooks-ts/context_monitor.ts +23 -55
- package/dist/templates/{_shared → core}/hooks-ts/file-suggestion.ts +5 -22
- package/dist/templates/{_shared → core}/hooks-ts/lint_after_edit.ts +7 -9
- package/dist/templates/core/hooks-ts/pre_compact.ts +36 -0
- package/dist/templates/{_shared → core}/hooks-ts/session_end.ts +38 -78
- package/dist/templates/{_shared → core}/hooks-ts/session_start.ts +5 -5
- package/dist/templates/core/hooks-ts/task_create_capture.ts +32 -0
- package/dist/templates/{_shared → core}/hooks-ts/task_update_capture.ts +9 -24
- package/dist/templates/core/hooks-ts/user_prompt_submit.ts +46 -0
- package/dist/templates/{_shared → core}/lib-ts/CLAUDE.md +27 -16
- package/dist/templates/{_shared → core}/lib-ts/context/CLAUDE.md +9 -6
- package/dist/templates/{_shared → core}/lib-ts/context/context-formatter.ts +16 -21
- package/dist/templates/{_shared → core}/lib-ts/context/context-selector.ts +8 -6
- package/dist/templates/{_shared → core}/lib-ts/context/context-store.ts +59 -20
- package/dist/templates/{_shared → core}/lib-ts/context/plan-manager.ts +19 -15
- package/dist/templates/{_shared → core}/lib-ts/context/task-tracker.ts +3 -3
- package/dist/templates/core/lib-ts/hooks/context-monitor-logic.ts +32 -0
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/hooks}/hook-utils.ts +179 -41
- package/dist/templates/core/lib-ts/hooks/prompt-binding-logic.ts +80 -0
- package/dist/templates/core/lib-ts/hooks/session-end-logic.ts +82 -0
- package/dist/templates/core/lib-ts/package.json +19 -0
- package/dist/templates/core/lib-ts/runtime/agent-launcher.ts +369 -0
- package/dist/templates/core/lib-ts/runtime/aiw-cli.ts +108 -0
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/atomic-write.ts +12 -7
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/cli-args.ts +24 -8
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/constants.ts +326 -324
- package/dist/templates/core/lib-ts/runtime/executable-policy.ts +89 -0
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/git-state.ts +6 -4
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/inference.ts +60 -23
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/lint-dispatch.ts +25 -23
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/logger.ts +32 -29
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/models.ts +9 -2
- package/dist/templates/core/lib-ts/runtime/platform-adapter.ts +33 -0
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/preflight.ts +4 -3
- package/dist/templates/core/lib-ts/runtime/sentinel-ipc.ts +91 -0
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/state-io.ts +20 -11
- package/dist/templates/core/lib-ts/runtime/stop-words.ts +185 -0
- package/dist/templates/core/lib-ts/runtime/subprocess-utils.ts +147 -0
- package/dist/templates/core/lib-ts/runtime/tmux-preflight.ts +93 -0
- package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/utils.ts +34 -4
- package/dist/templates/core/lib-ts/schemas.ts +233 -0
- package/dist/templates/{_shared → core}/lib-ts/templates/formatters.ts +7 -5
- package/dist/templates/{_shared → core}/lib-ts/templates/plan-context.ts +2 -1
- package/dist/templates/{_shared → core}/lib-ts/tsconfig.json +3 -1
- package/dist/templates/{_shared → core}/lib-ts/types.ts +78 -77
- package/dist/templates/core/scripts/resolve-run.ts +93 -0
- package/dist/templates/{_shared → core}/scripts/resolve_context.ts +3 -3
- package/dist/templates/{_shared → core}/scripts/status_line.ts +26 -21
- package/dist/templates/core/skills/codex/CLAUDE.md +83 -0
- package/dist/templates/{_shared → core}/skills/codex/SKILL.md +27 -18
- package/dist/templates/{_shared → core}/skills/codex/lib/codex-watcher.ts +79 -113
- package/dist/templates/{_shared → core}/skills/codex/scripts/launch-codex.ts +134 -148
- package/dist/templates/{_shared → core}/skills/codex/scripts/watch-codex.ts +6 -4
- package/dist/templates/core/skills/devin/CLAUDE.md +122 -0
- package/dist/templates/core/skills/devin/SKILL.md +73 -0
- package/dist/templates/core/skills/devin/lib/devin-watcher.ts +300 -0
- package/dist/templates/core/skills/devin/scripts/launch-devin.ts +258 -0
- package/dist/templates/{_shared → core}/skills/handoff-system/CLAUDE.md +436 -433
- package/dist/templates/{_shared → core}/skills/handoff-system/lib/document-generator.ts +9 -7
- package/dist/templates/{_shared → core}/skills/handoff-system/lib/handoff-reader.ts +6 -4
- package/dist/templates/{_shared → core}/skills/handoff-system/scripts/resume_handoff.ts +10 -8
- package/dist/templates/{_shared → core}/skills/handoff-system/scripts/save_handoff.ts +12 -10
- package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff-resume.md +2 -2
- package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff.md +6 -5
- package/dist/templates/{_shared → core}/skills/meta-plan/CLAUDE.md +2 -1
- package/dist/templates/{_shared → core}/skills/meta-plan/workflows/meta-plan.md +8 -7
- package/oclif.manifest.json +89 -13
- package/package.json +13 -12
- package/dist/lib/base-command.d.ts +0 -114
- package/dist/lib/base-command.js +0 -153
- package/dist/lib/env-compat.d.ts +0 -18
- package/dist/lib/env-compat.js +0 -23
- package/dist/lib/stdin.d.ts +0 -48
- package/dist/lib/stdin.js +0 -60
- package/dist/templates/_shared/.claude/settings.json +0 -120
- package/dist/templates/_shared/.claude/skills/codex/SKILL.md +0 -35
- package/dist/templates/_shared/.claude/skills/handoff/SKILL.md +0 -13
- package/dist/templates/_shared/.claude/skills/handoff-resume/SKILL.md +0 -13
- package/dist/templates/_shared/.claude/skills/meta-plan/SKILL.md +0 -43
- package/dist/templates/_shared/.codex/workflows/codex.md +0 -11
- package/dist/templates/_shared/.codex/workflows/handoff.md +0 -226
- package/dist/templates/_shared/.codex/workflows/meta-plan.md +0 -347
- package/dist/templates/_shared/hooks-ts/_utils/git-state.ts +0 -2
- package/dist/templates/_shared/hooks-ts/pre_compact.ts +0 -49
- package/dist/templates/_shared/hooks-ts/task_create_capture.ts +0 -48
- package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +0 -93
- package/dist/templates/_shared/lib-ts/agent-exec/backends/headless.ts +0 -33
- package/dist/templates/_shared/lib-ts/agent-exec/backends/index.ts +0 -6
- package/dist/templates/_shared/lib-ts/agent-exec/backends/tmux.ts +0 -119
- package/dist/templates/_shared/lib-ts/agent-exec/execution-backend.ts +0 -50
- package/dist/templates/_shared/lib-ts/agent-exec/index.ts +0 -6
- package/dist/templates/_shared/lib-ts/agent-exec/structured-output.ts +0 -166
- package/dist/templates/_shared/lib-ts/base/launchers/tmux-launcher.ts +0 -173
- package/dist/templates/_shared/lib-ts/base/launchers/window-launcher.ts +0 -93
- package/dist/templates/_shared/lib-ts/base/launchers/wt-launcher.ts +0 -64
- package/dist/templates/_shared/lib-ts/base/pane-launcher.ts +0 -55
- package/dist/templates/_shared/lib-ts/base/sentinel-ipc.ts +0 -87
- package/dist/templates/_shared/lib-ts/base/stop-words.ts +0 -184
- package/dist/templates/_shared/lib-ts/base/subprocess-utils.ts +0 -249
- package/dist/templates/_shared/lib-ts/base/tmux-driver.ts +0 -341
- package/dist/templates/_shared/lib-ts/base/tmux-pane-placement.ts +0 -78
- package/dist/templates/_shared/lib-ts/package.json +0 -20
- package/dist/templates/_shared/scripts/resolve-run.ts +0 -62
- package/dist/templates/_shared/skills/codex/CLAUDE.md +0 -70
- package/dist/templates/cc-native/_cc-native/CLAUDE.md +0 -73
- package/dist/templates/cc-native/_cc-native/artifacts/CLAUDE.md +0 -64
- package/dist/templates/cc-native/_cc-native/lib-ts/CLAUDE.md +0 -70
- package/dist/templates/cc-native/_cc-native/plan-review/CODING-STANDARDS-CHECKLIST.md +0 -75
- package/dist/templates/cc-native/_cc-native/plan-review/agents/CLAUDE.md +0 -143
- package/dist/templates/cc-native/_cc-native/plan-review/agents/PLAN-ORCHESTRATOR.md +0 -213
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-questions/PLAN-QUESTIONER.md +0 -70
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-EVOLUTION.md +0 -62
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-PATTERNS.md +0 -61
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-STRUCTURE.md +0 -62
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ASSUMPTION-TRACER.md +0 -56
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/CLARITY-AUDITOR.md +0 -53
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-FEASIBILITY.md +0 -66
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-GAPS.md +0 -70
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-ORDERING.md +0 -62
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/CONSTRAINT-VALIDATOR.md +0 -72
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DESIGN-ADR-VALIDATOR.md +0 -61
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DESIGN-SCALE-MATCHER.md +0 -64
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DEVILS-ADVOCATE.md +0 -56
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DOCUMENTATION-PHILOSOPHY.md +0 -86
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/HANDOFF-READINESS.md +0 -59
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/HIDDEN-COMPLEXITY.md +0 -58
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/INCREMENTAL-DELIVERY.md +0 -66
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-DEPENDENCY.md +0 -62
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-FMEA.md +0 -66
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-PREMORTEM.md +0 -71
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-REVERSIBILITY.md +0 -74
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SCOPE-BOUNDARY.md +0 -77
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SIMPLICITY-GUARDIAN.md +0 -62
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SKEPTIC.md +0 -68
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-BEHAVIOR-AUDITOR.md +0 -61
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-CHARACTERIZATION.md +0 -71
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-FIRST-VALIDATOR.md +0 -61
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-PYRAMID-ANALYZER.md +0 -61
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TRADEOFF-COSTS.md +0 -67
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TRADEOFF-STAKEHOLDERS.md +0 -65
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/VERIFY-COVERAGE.md +0 -74
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/VERIFY-STRENGTH.md +0 -69
- package/dist/templates/cc-native/_cc-native/plan-review/lib/corroboration.ts +0 -172
- package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/base/base-agent.ts +0 -7
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
import { execFileSync } from "node:child_process";
|
|
13
13
|
import * as fs from "node:fs";
|
|
14
14
|
import { homedir } from "node:os";
|
|
15
|
-
import
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
|
|
16
17
|
import type { ContextState } from "../lib-ts/types.js";
|
|
17
18
|
|
|
18
19
|
// PAI infrastructure imports — graceful fallback when libs aren't available
|
|
@@ -25,7 +26,7 @@ let saveState: (id: string, state: ContextState) => void = () => {};
|
|
|
25
26
|
let findLatestPlan: (contextId: string) => string | null = () => null;
|
|
26
27
|
|
|
27
28
|
try {
|
|
28
|
-
const hookUtils = await import("../lib-ts/
|
|
29
|
+
const hookUtils = await import("../lib-ts/hooks/hook-utils.js");
|
|
29
30
|
CONTEXT_BASELINE_TOKENS = hookUtils.CONTEXT_BASELINE_TOKENS;
|
|
30
31
|
} catch {
|
|
31
32
|
/* PAI hook-utils not available */
|
|
@@ -52,7 +53,7 @@ try {
|
|
|
52
53
|
// Path setup
|
|
53
54
|
// ---------------------------------------------------------------------------
|
|
54
55
|
const SCRIPT_DIR = path.dirname(new URL(import.meta.url).pathname);
|
|
55
|
-
// Resolve project root from script location (.aiwcli/
|
|
56
|
+
// Resolve project root from script location (.aiwcli/_core/scripts/) so paths
|
|
56
57
|
// work even when cwd has drifted via `cd` in a Bash tool call.
|
|
57
58
|
const PROJECT_ROOT = path.resolve(SCRIPT_DIR, "..", "..", "..");
|
|
58
59
|
const OUTPUT_DIR = path.join(PROJECT_ROOT, "_output");
|
|
@@ -213,19 +214,18 @@ function renderContextBar(width: number, pct: number): [string, string] {
|
|
|
213
214
|
// Display width helper — accounts for wide Unicode and ANSI escapes
|
|
214
215
|
// ---------------------------------------------------------------------------
|
|
215
216
|
|
|
216
|
-
|
|
217
|
-
const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
217
|
+
const ANSI_RE = new RegExp(`${String.raw`\u001B`}\\[[0-9;]*m`, "g");
|
|
218
218
|
|
|
219
219
|
function isWideChar(cp: number): boolean {
|
|
220
220
|
return (
|
|
221
|
-
cp ===
|
|
222
|
-
cp ===
|
|
223
|
-
(cp >=
|
|
224
|
-
(cp >=
|
|
225
|
-
(cp >=
|
|
226
|
-
(cp >=
|
|
227
|
-
(cp >=
|
|
228
|
-
(cp >=
|
|
221
|
+
cp === 0x26_c1 || // ⛁ draughts man
|
|
222
|
+
cp === 0x23_f1 || // ⏱ stopwatch
|
|
223
|
+
(cp >= 0x26_00 && cp <= 0x26_ff) || // misc symbols
|
|
224
|
+
(cp >= 0x27_00 && cp <= 0x27_bf) || // dingbats
|
|
225
|
+
(cp >= 0x1_f3_00 && cp <= 0x1_fa_ff) || // emoji
|
|
226
|
+
(cp >= 0xfe_00 && cp <= 0xfe_0f) || // variation selectors
|
|
227
|
+
(cp >= 0x4e_00 && cp <= 0x9f_ff) || // CJK
|
|
228
|
+
(cp >= 0x30_00 && cp <= 0x30_3f) // CJK symbols
|
|
229
229
|
);
|
|
230
230
|
}
|
|
231
231
|
|
|
@@ -401,10 +401,10 @@ interface GitStatus {
|
|
|
401
401
|
|
|
402
402
|
function runGit(args: string[], cwd: string, timeout = 2000): string | null {
|
|
403
403
|
try {
|
|
404
|
-
const result = execFileSync("git", args, {
|
|
404
|
+
const result = execFileSync("git", ["--no-optional-locks", ...args], {
|
|
405
405
|
cwd,
|
|
406
406
|
timeout,
|
|
407
|
-
encoding: "
|
|
407
|
+
encoding: "utf8",
|
|
408
408
|
stdio: ["pipe", "pipe", "pipe"],
|
|
409
409
|
windowsHide: true,
|
|
410
410
|
});
|
|
@@ -687,12 +687,15 @@ function renderContextManager(
|
|
|
687
687
|
// Note: termWidth not available here — caller truncates via main()
|
|
688
688
|
switch (mode) {
|
|
689
689
|
case "micro":
|
|
690
|
-
case "nano":
|
|
690
|
+
case "nano": {
|
|
691
691
|
return `${CTX_ACCENT}\u25C6${RESET} ${SLATE_400}${truncatedId}${RESET}${modeBadge}`;
|
|
692
|
-
|
|
692
|
+
}
|
|
693
|
+
case "mini": {
|
|
693
694
|
return `${CTX_ACCENT}\u25C6${RESET} ${SLATE_400}${truncatedId}${RESET}${modeBadge}${planPart}`;
|
|
694
|
-
|
|
695
|
+
}
|
|
696
|
+
default: {
|
|
695
697
|
return `${CTX_ACCENT}\u25C6${RESET} ${CTX_SECONDARY}Context:${RESET} ${SLATE_300}${truncatedId}${RESET}${modeBadge}${planPart}`;
|
|
698
|
+
}
|
|
696
699
|
}
|
|
697
700
|
}
|
|
698
701
|
|
|
@@ -715,7 +718,7 @@ interface StatuslineCache {
|
|
|
715
718
|
function loadCache(): StatuslineCache {
|
|
716
719
|
try {
|
|
717
720
|
if (fs.existsSync(STATUSLINE_CACHE)) {
|
|
718
|
-
return JSON.parse(fs.readFileSync(STATUSLINE_CACHE, "
|
|
721
|
+
return JSON.parse(fs.readFileSync(STATUSLINE_CACHE, "utf8"));
|
|
719
722
|
}
|
|
720
723
|
} catch {
|
|
721
724
|
/* ignore */
|
|
@@ -726,7 +729,7 @@ function loadCache(): StatuslineCache {
|
|
|
726
729
|
function saveCache(cache: StatuslineCache): void {
|
|
727
730
|
try {
|
|
728
731
|
fs.mkdirSync(path.dirname(STATUSLINE_CACHE), { recursive: true });
|
|
729
|
-
fs.writeFileSync(STATUSLINE_CACHE, JSON.stringify(cache, null, 2), "
|
|
732
|
+
fs.writeFileSync(STATUSLINE_CACHE, JSON.stringify(cache, null, 2), "utf8");
|
|
730
733
|
} catch {
|
|
731
734
|
/* ignore */
|
|
732
735
|
}
|
|
@@ -810,7 +813,7 @@ function main(): void {
|
|
|
810
813
|
// Read JSON from stdin
|
|
811
814
|
let inputData: StatusLineInput;
|
|
812
815
|
try {
|
|
813
|
-
inputData = JSON.parse(fs.readFileSync(0, "
|
|
816
|
+
inputData = JSON.parse(fs.readFileSync(0, "utf8")) as StatusLineInput;
|
|
814
817
|
} catch {
|
|
815
818
|
inputData = {};
|
|
816
819
|
}
|
|
@@ -898,3 +901,5 @@ function main(): void {
|
|
|
898
901
|
}
|
|
899
902
|
|
|
900
903
|
main();
|
|
904
|
+
|
|
905
|
+
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Codex Skill
|
|
2
|
+
|
|
3
|
+
Launch Codex CLI in a visible pane (tmux on Unix, Windows Terminal/window fallback on native Windows) and pass the prompt at process start.
|
|
4
|
+
|
|
5
|
+
## Directory Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
codex/
|
|
9
|
+
├── CLAUDE.md ← This file
|
|
10
|
+
├── SKILL.md ← Skill metadata (user-invocable)
|
|
11
|
+
├── lib/
|
|
12
|
+
│ └── codex-watcher.ts ← Reusable watch/summarize library
|
|
13
|
+
└── scripts/
|
|
14
|
+
├── launch-codex.ts ← Single entry point (launch + optional watch)
|
|
15
|
+
└── watch-codex.ts ← Standalone watch mode
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Script: launch-codex.ts
|
|
19
|
+
|
|
20
|
+
> Note: This file documents template source paths (`.aiwcli/_core/...`). During installation, settings command paths are normalized to runtime `.aiwcli/_core/...`.
|
|
21
|
+
|
|
22
|
+
**Usage:**
|
|
23
|
+
```bash
|
|
24
|
+
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/codex/scripts/launch-codex.ts [--model <tier|id>] [--sandbox <sandbox-mode>] [--prompt <text>] [--no-yolo] [--no-watch] [--context <id>] plan
|
|
25
|
+
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/codex/scripts/launch-codex.ts [--model <tier|id>] [--sandbox <sandbox-mode>] [--prompt <text>] [--no-yolo] [--no-watch] [--context <id>] --file <path>
|
|
26
|
+
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/codex/scripts/launch-codex.ts [--model <tier|id>] [--sandbox <sandbox-mode>] [--prompt <text>] [--no-yolo] [--no-watch] [--context <id>] <inline text...>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Args:**
|
|
30
|
+
- `plan` — discover active plan via context system, build a bootstrap startup prompt that includes the plan filepath (Codex reads that file directly)
|
|
31
|
+
- `--file <path>` — build a bootstrap startup prompt that includes the file path (Codex reads that file directly)
|
|
32
|
+
- `<text...>` — join remaining args as inline prompt
|
|
33
|
+
- `--model <alias|tier|id>` — Aliases: `spark` → `gpt-5.3-codex-spark`, `codex` → `gpt-5.4`, `gpt` → `gpt-5.4`. Tiers: `fast`/`standard`/`smart` (resolved via `resolveModelForProvider()`). Or a full model ID.
|
|
34
|
+
- `--sandbox <mode>` — `read-only`, `workspace-write`, or `danger-full-access`. Default is `danger-full-access`.
|
|
35
|
+
- `--prompt <text>` — append extra instructions. In `plan` and `--file` modes, these are embedded into a bootstrap temp file alongside the target path.
|
|
36
|
+
- `--task-id <id>` — Caller-provided task ID for direct summary file lookup. If omitted, auto-generated as `<timestamp>-<pid>`. Enables the caller to know the exact summary file path without reading background task stdout.
|
|
37
|
+
- `--no-yolo` — Disable YOLO mode (`--dangerously-bypass-approvals-and-sandbox`).
|
|
38
|
+
- `--no-watch` — Disable watch/summarize mode.
|
|
39
|
+
|
|
40
|
+
**Plan discovery order:**
|
|
41
|
+
1. `CLAUDE_SESSION_ID` env → `getContextBySessionId()` → `findLatestPlan(contextId)`
|
|
42
|
+
2. Fallback: scan `_output/contexts/*/plans/*.md` by mtime
|
|
43
|
+
|
|
44
|
+
**Dependencies:**
|
|
45
|
+
- `runtime/aiw-cli.ts` — shells out to `aiw launch` for pane management (no direct tmux imports)
|
|
46
|
+
- `runtime/cli-args.ts` — model/sandbox/yolo CLI arg generation
|
|
47
|
+
- `context/*` — context lookup, formatting, plan discovery
|
|
48
|
+
|
|
49
|
+
**Watch behavior (single entry point):**
|
|
50
|
+
- Watch is enabled by default.
|
|
51
|
+
- `launch-codex.ts` launches Codex, waits for completion (pane close or sentinel), and prints a summary.
|
|
52
|
+
- Summary cascade:
|
|
53
|
+
1. Session-file summary (`summarizeViaSessionFile`): Codex CLI Spark primary, `fast` tier (Haiku) fallback
|
|
54
|
+
2. `codex exec resume <session_id>` summary (output file, then stdout/stderr parse fallback)
|
|
55
|
+
3. Transcript-line fallback
|
|
56
|
+
4. Static `Summary unavailable` message
|
|
57
|
+
- Summary persistence:
|
|
58
|
+
- `persistSummary()` in `agent-launcher.ts` writes to `os.tmpdir()/codex-summary-<ts>-<id>.md` (unique per run)
|
|
59
|
+
- Also writes to well-known path: `$TMPDIR/aiw-agent-output/<session-key>/codex-<taskId>.md`
|
|
60
|
+
- Task ID is caller-provided via `--task-id` or auto-generated as `<timestamp>-<pid>`
|
|
61
|
+
- Caller can compute the exact path via `getWellKnownSummaryPath("codex", taskId)` — no discovery needed
|
|
62
|
+
- Multiple concurrent agents use different task IDs, so they don't clobber each other
|
|
63
|
+
- Session key resolution: tmux (`$TMUX`), psmux (`psmux display-message`), exec fallback (project-root hash)
|
|
64
|
+
- Task ID + summary path printed early (before agent runs) so even partial stdout capture is useful
|
|
65
|
+
- Best-effort: logs warning on failure, stdout output still proceeds
|
|
66
|
+
|
|
67
|
+
**Design decisions:**
|
|
68
|
+
- Prompt is delivered at launch time (no tmux buffer paste/capture workflow)
|
|
69
|
+
- Pane backend detection delegated to `aiw launch` (tmux in-session only → inline exec fallback)
|
|
70
|
+
- `core` source only — runtime execution resolves to `.aiwcli/_core`
|
|
71
|
+
- Watch path is best-effort and does not change launch success semantics
|
|
72
|
+
|
|
73
|
+
## Library: lib/codex-watcher.ts
|
|
74
|
+
|
|
75
|
+
Reusable side-effect-free watch/summarize functions used by launch flow:
|
|
76
|
+
- `waitForPaneClose(target, timeoutMs?)` where `target` can be tmux pane id or `{ backend, paneId, sentinelPath }`
|
|
77
|
+
- `summarizeViaSessionFile(sessionFile)`
|
|
78
|
+
- `summarizeViaResume(sessionId)`
|
|
79
|
+
- `summarizeFromSessionFileFallback(sessionFile)`
|
|
80
|
+
- `collectTranscriptLines(sessionFile)`
|
|
81
|
+
|
|
82
|
+
Constants and helper utilities are exported for reuse and testing (`POLL_INTERVAL_MS`, `SUMMARY_UNAVAILABLE_MESSAGE`, `normalizeText`, `looksLikeBadSummary`, etc.).
|
|
83
|
+
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: codex
|
|
3
|
+
description: Delegate implementation to Codex sub-agents. USE WHEN codex OR send to codex OR codex implement OR hand off to codex OR launch codex OR run codex.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# /codex
|
|
2
8
|
|
|
3
9
|
## Role
|
|
@@ -9,19 +15,31 @@ The script blocks until Codex exits and prints a session summary. Run with Bash
|
|
|
9
15
|
## Command
|
|
10
16
|
|
|
11
17
|
```
|
|
12
|
-
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/
|
|
18
|
+
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/codex/scripts/launch-codex.ts [flags] <mode>
|
|
13
19
|
```
|
|
14
20
|
|
|
15
21
|
**Modes:** `plan` | `--file <path>` | `<inline text...>`
|
|
16
22
|
|
|
23
|
+
`plan` and `--file` modes pass a filepath-first bootstrap prompt so Codex reads the file from disk instead of relying on a pasted full document.
|
|
24
|
+
|
|
17
25
|
**Flags:**
|
|
18
26
|
- `--context <id>` — Project orientation for the sub-agent. Pass when implementing a plan so Codex understands the project structure.
|
|
19
|
-
- `--prompt <text>` —
|
|
20
|
-
- `--model <name>` — Aliases: `spark`, `codex`, `gpt`. Tiers: `fast`, `standard`, `smart`. Or
|
|
27
|
+
- `--prompt <text>` — Add extra instructions. In `plan`/`--file` mode, this is embedded into the bootstrap temp file with the target path.
|
|
28
|
+
- `--model <name>` — Aliases: `spark`, `codex`, `gpt`. Tiers: `fast`, `standard`, `smart`. Or unknown full model ID.
|
|
21
29
|
- `--sandbox <mode>` — `read-only`, `workspace-write`, `danger-full-access`.
|
|
22
30
|
- `--no-yolo` — Disable YOLO mode (on by default).
|
|
23
31
|
- `--no-watch` — Fire-and-forget: exit immediately after launch, skip waiting for summary.
|
|
24
32
|
|
|
33
|
+
## Retrieving Results
|
|
34
|
+
|
|
35
|
+
The script prints a summary to stdout and writes it to a temp file.
|
|
36
|
+
|
|
37
|
+
**Primary:** Check TaskOutput for the background task — the summary and file path are inline.
|
|
38
|
+
|
|
39
|
+
**Fallback (if TaskOutput is empty):** Look for the `[summary_file:<path>]` line in the output. If found, read that file path directly. The temp file persists independently of Claude Code's background task capture.
|
|
40
|
+
|
|
41
|
+
If neither is available, check `_output/hook-log.jsonl` for `codex-capture` or `codex-skill` entries for diagnostics.
|
|
42
|
+
|
|
25
43
|
## Delegation Patterns
|
|
26
44
|
|
|
27
45
|
### One-shot
|
|
@@ -29,24 +47,14 @@ bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_shared/skills/codex/scripts/launch-cod
|
|
|
29
47
|
For small or tightly coupled plans. One sub-agent implements the whole plan.
|
|
30
48
|
|
|
31
49
|
```bash
|
|
32
|
-
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/
|
|
50
|
+
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/codex/scripts/launch-codex.ts --context <ctx-id> plan
|
|
33
51
|
```
|
|
34
52
|
|
|
35
53
|
Run with `run_in_background: true`. Wait for the summary. Review the changes.
|
|
36
54
|
|
|
37
55
|
### Parallel
|
|
38
56
|
|
|
39
|
-
For plans with independent sections
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
# Sub-agent A — section 1
|
|
43
|
-
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_shared/skills/codex/scripts/launch-codex.ts \
|
|
44
|
-
--context <ctx-id> --prompt "Implement section 1: Extract watch logic into lib/codex-watcher.ts" plan
|
|
45
|
-
|
|
46
|
-
# Sub-agent B — section 3
|
|
47
|
-
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_shared/skills/codex/scripts/launch-codex.ts \
|
|
48
|
-
--context <ctx-id> --prompt "Implement section 3: Update launch-codex.ts arg parsing" plan
|
|
49
|
-
```
|
|
57
|
+
For plans with independent sections, create small section-brief files and launch one sub-agent per brief with `--file`.
|
|
50
58
|
|
|
51
59
|
Run each with `run_in_background: true`. Summaries arrive as separate background task notifications. When all complete, review for conflicts between agents, then verify with tests or import checks.
|
|
52
60
|
|
|
@@ -55,10 +63,10 @@ Run each with `run_in_background: true`. Summaries arrive as separate background
|
|
|
55
63
|
For tasks outside a plan. Pass inline text or a file path.
|
|
56
64
|
|
|
57
65
|
```bash
|
|
58
|
-
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/
|
|
66
|
+
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/codex/scripts/launch-codex.ts \
|
|
59
67
|
"Fix the failing test in auth.ts"
|
|
60
68
|
|
|
61
|
-
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/
|
|
69
|
+
bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/codex/scripts/launch-codex.ts \
|
|
62
70
|
--file path/to/task-description.md
|
|
63
71
|
```
|
|
64
72
|
|
|
@@ -67,5 +75,6 @@ bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_shared/skills/codex/scripts/launch-cod
|
|
|
67
75
|
- **Delegate implementation.** If the work involves writing code and Codex can handle it, send it to Codex.
|
|
68
76
|
- **Split independent sections** into parallel sub-agents for faster execution.
|
|
69
77
|
- **Pass `--context`** when implementing a plan — Codex needs project orientation to make good decisions.
|
|
70
|
-
- **Scope
|
|
78
|
+
- **Scope parallel agents with separate `--file` briefs** so each sub-agent has an explicit task boundary.
|
|
71
79
|
- **Review results** when summaries arrive. Check for merge conflicts between parallel agents, then verify with `tsc --noEmit`, tests, or manual inspection.
|
|
80
|
+
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as os from "node:os";
|
|
3
|
-
import
|
|
3
|
+
import path from "node:path";
|
|
4
4
|
|
|
5
|
-
import { inference } from "../../../lib-ts/
|
|
6
|
-
import {
|
|
7
|
-
import { CODEX_MODELS } from "../../../lib-ts/
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
import { inference } from "../../../lib-ts/runtime/inference.js";
|
|
6
|
+
import { logWarn } from "../../../lib-ts/runtime/logger.js";
|
|
7
|
+
import { CODEX_MODELS } from "../../../lib-ts/runtime/models.js";
|
|
8
|
+
import { execFileAsync } from "../../../lib-ts/runtime/subprocess-utils.js";
|
|
9
|
+
|
|
10
|
+
// Re-export shared symbols that consumers import from this module
|
|
11
|
+
export {
|
|
12
|
+
type PaneWatchTarget,
|
|
13
|
+
looksLikeBadSummary,
|
|
14
|
+
persistSummary,
|
|
15
|
+
sleep,
|
|
16
|
+
waitForPaneClose,
|
|
17
|
+
} from "../../../lib-ts/runtime/agent-launcher.js";
|
|
18
|
+
|
|
19
|
+
import { looksLikeBadSummary } from "../../../lib-ts/runtime/agent-launcher.js";
|
|
11
20
|
|
|
12
|
-
export const POLL_INTERVAL_MS = 2000;
|
|
13
|
-
export const POLL_TIMEOUT_MS = 3000;
|
|
14
21
|
export const SUMMARY_TIMEOUT_SEC = 8;
|
|
15
|
-
export const RESUME_TIMEOUT_MS =
|
|
22
|
+
export const RESUME_TIMEOUT_MS = 45_000;
|
|
16
23
|
export const MAX_TRANSCRIPT_LINES = 220;
|
|
17
24
|
export const MAX_LINE_LENGTH = 500;
|
|
18
|
-
export const WAIT_TIMEOUT_MS_DEFAULT = 14_400_000;
|
|
19
25
|
export const SUMMARY_UNAVAILABLE_MESSAGE = "Codex session completed. Summary unavailable.";
|
|
20
26
|
|
|
21
|
-
export interface PaneWatchTarget {
|
|
22
|
-
backend?: PaneBackend;
|
|
23
|
-
paneId?: string;
|
|
24
|
-
sentinelPath?: string;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
27
|
export const TRANSCRIPT_SUMMARY_PROMPT = `Summarize this Codex session transcript excerpt.
|
|
28
28
|
Return 3-5 concise bullet points.
|
|
29
29
|
Focus on:
|
|
@@ -43,10 +43,6 @@ Do not ask follow-up questions.
|
|
|
43
43
|
Do not request additional input.
|
|
44
44
|
If the prior session was brief, still provide a best-effort summary.`;
|
|
45
45
|
|
|
46
|
-
export function sleep(ms: number): Promise<void> {
|
|
47
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
46
|
export function safeCleanup(filePath: string): void {
|
|
51
47
|
try {
|
|
52
48
|
if (fs.existsSync(filePath)) fs.unlinkSync(filePath);
|
|
@@ -58,7 +54,7 @@ export function safeCleanup(filePath: string): void {
|
|
|
58
54
|
export function readTextIfExists(filePath: string): string {
|
|
59
55
|
try {
|
|
60
56
|
if (!filePath || !fs.existsSync(filePath)) return "";
|
|
61
|
-
return fs.readFileSync(filePath, "
|
|
57
|
+
return fs.readFileSync(filePath, "utf8").trim();
|
|
62
58
|
} catch {
|
|
63
59
|
return "";
|
|
64
60
|
}
|
|
@@ -66,16 +62,16 @@ export function readTextIfExists(filePath: string): string {
|
|
|
66
62
|
|
|
67
63
|
export function normalizeText(text: string): string {
|
|
68
64
|
return text
|
|
69
|
-
.
|
|
70
|
-
.
|
|
71
|
-
.
|
|
65
|
+
.replaceAll('\r', "")
|
|
66
|
+
.replaceAll(/\p{Cc}/gu, "")
|
|
67
|
+
.replaceAll(/\s+/g, " ")
|
|
72
68
|
.trim();
|
|
73
69
|
}
|
|
74
70
|
|
|
75
71
|
export function getMessageContentText(content: unknown): string {
|
|
76
72
|
if (!Array.isArray(content)) return "";
|
|
77
73
|
return content
|
|
78
|
-
.map((entry:
|
|
74
|
+
.map((entry: unknown) => {
|
|
79
75
|
if (!entry || typeof entry !== "object") return "";
|
|
80
76
|
if (typeof entry.text !== "string") return "";
|
|
81
77
|
return entry.text;
|
|
@@ -90,11 +86,11 @@ export function collectTranscriptLines(sessionFile: string): string[] {
|
|
|
90
86
|
const seen = new Set<string>();
|
|
91
87
|
|
|
92
88
|
try {
|
|
93
|
-
const raw = fs.readFileSync(sessionFile, "
|
|
89
|
+
const raw = fs.readFileSync(sessionFile, "utf8");
|
|
94
90
|
const lines = raw.split(/\r?\n/).filter((line) => line.trim().length > 0);
|
|
95
91
|
|
|
96
92
|
for (const line of lines) {
|
|
97
|
-
let parsed:
|
|
93
|
+
let parsed: unknown;
|
|
98
94
|
try {
|
|
99
95
|
parsed = JSON.parse(line);
|
|
100
96
|
} catch {
|
|
@@ -132,99 +128,32 @@ export function collectTranscriptLines(sessionFile: string): string[] {
|
|
|
132
128
|
return out.slice(-MAX_TRANSCRIPT_LINES);
|
|
133
129
|
}
|
|
134
130
|
|
|
135
|
-
export function
|
|
136
|
-
const normalized = output.toLowerCase();
|
|
137
|
-
return (
|
|
138
|
-
normalized.includes("don't see") ||
|
|
139
|
-
normalized.includes("no output") ||
|
|
140
|
-
normalized.includes("could you provide") ||
|
|
141
|
-
normalized.includes("paste")
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
async function waitForSentinelClose(sentinelPath: string, timeoutMs: number): Promise<void> {
|
|
146
|
-
const deadline = Date.now() + timeoutMs;
|
|
147
|
-
while (true) {
|
|
148
|
-
if (fs.existsSync(sentinelPath)) return;
|
|
149
|
-
if (Date.now() >= deadline) {
|
|
150
|
-
logDebug("codex-capture", `watch timeout reached waiting for sentinel ${sentinelPath}`);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
const remainingMs = deadline - Date.now();
|
|
155
|
-
await sleep(Math.max(0, Math.min(POLL_INTERVAL_MS, remainingMs)));
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function normalizeWatchTarget(target: string | PaneWatchTarget): PaneWatchTarget {
|
|
160
|
-
if (typeof target === "string") {
|
|
161
|
-
return { backend: "tmux", paneId: target };
|
|
162
|
-
}
|
|
163
|
-
return target;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
export async function waitForPaneClose(
|
|
167
|
-
target: string | PaneWatchTarget,
|
|
168
|
-
timeoutMs = WAIT_TIMEOUT_MS_DEFAULT,
|
|
169
|
-
): Promise<void> {
|
|
170
|
-
const watch = normalizeWatchTarget(target);
|
|
171
|
-
|
|
172
|
-
if (watch.sentinelPath) {
|
|
173
|
-
await waitForSentinelClose(watch.sentinelPath, timeoutMs);
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
const backend = watch.backend ?? "tmux";
|
|
178
|
-
const paneId = watch.paneId ?? "";
|
|
179
|
-
|
|
180
|
-
if (backend !== "tmux") {
|
|
181
|
-
logDebug("codex-capture", `No pane watcher for backend=${backend}; continuing without wait`);
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (!paneId) return;
|
|
186
|
-
|
|
187
|
-
const tmux = getTmuxAvailability({ requireSessionEnv: false });
|
|
188
|
-
if (!tmux.available || !tmux.tmuxPath) {
|
|
189
|
-
logWarn("codex-capture", `tmux unavailable while watching pane ${paneId}: ${tmux.reason ?? "unknown reason"}`);
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const deadline = Date.now() + timeoutMs;
|
|
194
|
-
while (true) {
|
|
195
|
-
if (Date.now() >= deadline) {
|
|
196
|
-
logDebug("codex-capture", `watch timeout reached for pane ${paneId} after ${timeoutMs}ms`);
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
const result = await execFileAsync(tmux.tmuxPath, ["list-panes", "-a", "-F", "#{pane_id}"], {
|
|
201
|
-
timeout: POLL_TIMEOUT_MS,
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
if (result.exitCode !== 0) {
|
|
205
|
-
logDebug("codex-capture", `list-panes failed; assuming pane closed (${result.stderr.trim() || "no stderr"})`);
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const activePaneIds = result.stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
210
|
-
if (!activePaneIds.includes(paneId)) return;
|
|
211
|
-
|
|
212
|
-
const remainingMs = deadline - Date.now();
|
|
213
|
-
await sleep(Math.max(0, Math.min(POLL_INTERVAL_MS, remainingMs)));
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
export function summarizeViaSessionFileSpark(sessionFile: string): string | null {
|
|
131
|
+
export async function summarizeViaSessionFile(sessionFile: string): Promise<string | null> {
|
|
218
132
|
const transcriptLines = collectTranscriptLines(sessionFile);
|
|
219
133
|
if (transcriptLines.length === 0) return null;
|
|
220
134
|
|
|
221
135
|
const transcript = transcriptLines.join("\n");
|
|
136
|
+
const fullPrompt = `${TRANSCRIPT_SUMMARY_PROMPT}\n\nSession transcript excerpt:\n\n${transcript}`;
|
|
137
|
+
|
|
138
|
+
const codexResult = await execFileAsync(
|
|
139
|
+
"codex",
|
|
140
|
+
["exec", fullPrompt, "--model", CODEX_MODELS.spark, "--json"],
|
|
141
|
+
{ timeout: SUMMARY_TIMEOUT_SEC * 1000 },
|
|
142
|
+
);
|
|
143
|
+
if (codexResult.exitCode === 0 && codexResult.stdout.trim()) {
|
|
144
|
+
const output = codexResult.stdout.trim();
|
|
145
|
+
if (!looksLikeBadSummary(output)) return output;
|
|
146
|
+
}
|
|
147
|
+
logWarn(
|
|
148
|
+
"codex-capture",
|
|
149
|
+
`Codex Spark transcript summary failed (exit=${codexResult.exitCode}), falling back to Haiku`,
|
|
150
|
+
);
|
|
151
|
+
|
|
222
152
|
const result = inference(
|
|
223
153
|
TRANSCRIPT_SUMMARY_PROMPT,
|
|
224
154
|
`Session transcript excerpt:\n\n${transcript}`,
|
|
225
155
|
"fast",
|
|
226
156
|
SUMMARY_TIMEOUT_SEC,
|
|
227
|
-
{ model: CODEX_MODELS.spark },
|
|
228
157
|
);
|
|
229
158
|
|
|
230
159
|
if (result.success && result.output && result.output.trim() && !looksLikeBadSummary(result.output)) {
|
|
@@ -238,6 +167,31 @@ export function summarizeViaSessionFileSpark(sessionFile: string): string | null
|
|
|
238
167
|
return null;
|
|
239
168
|
}
|
|
240
169
|
|
|
170
|
+
export function extractResumeSummary(text: string): string {
|
|
171
|
+
if (!text) return "";
|
|
172
|
+
|
|
173
|
+
const normalized = text.replaceAll("\r", "");
|
|
174
|
+
const marker = /(?:^|\n)codex\n/.exec(normalized);
|
|
175
|
+
if (!marker) return "";
|
|
176
|
+
|
|
177
|
+
const lines = normalized.slice(marker.index + marker[0].length).split("\n");
|
|
178
|
+
const bullets: string[] = [];
|
|
179
|
+
let collecting = false;
|
|
180
|
+
|
|
181
|
+
for (const rawLine of lines) {
|
|
182
|
+
const line = rawLine.trim();
|
|
183
|
+
if (!collecting && line.length === 0) continue;
|
|
184
|
+
if (line.startsWith("- ")) {
|
|
185
|
+
bullets.push(line);
|
|
186
|
+
collecting = true;
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (collecting) break;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return bullets.length >= 2 ? bullets.join("\n") : "";
|
|
193
|
+
}
|
|
194
|
+
|
|
241
195
|
export async function summarizeViaResume(sessionId: string): Promise<string | null> {
|
|
242
196
|
const outputFile = path.join(os.tmpdir(), `codex-resume-summary-${Date.now()}-${process.pid}.txt`);
|
|
243
197
|
|
|
@@ -261,7 +215,16 @@ export async function summarizeViaResume(sessionId: string): Promise<string | nu
|
|
|
261
215
|
safeCleanup(outputFile);
|
|
262
216
|
|
|
263
217
|
if (summary && !looksLikeBadSummary(summary)) return summary;
|
|
264
|
-
|
|
218
|
+
|
|
219
|
+
const stdoutSummary = extractResumeSummary(result.stdout);
|
|
220
|
+
if (stdoutSummary && !looksLikeBadSummary(stdoutSummary)) return stdoutSummary;
|
|
221
|
+
|
|
222
|
+
const stderrSummary = extractResumeSummary(result.stderr);
|
|
223
|
+
if (stderrSummary && !looksLikeBadSummary(stderrSummary)) return stderrSummary;
|
|
224
|
+
|
|
225
|
+
const stderrTrimmed = result.stderr.trim();
|
|
226
|
+
const stderrPreview = stderrTrimmed.length > 200 ? `${stderrTrimmed.slice(0, 200)}...` : (stderrTrimmed || "none");
|
|
227
|
+
logWarn("codex-capture", `codex exec resume failed for ${sessionId}: exit=${result.exitCode}, stderr=${stderrPreview}`);
|
|
265
228
|
return null;
|
|
266
229
|
}
|
|
267
230
|
|
|
@@ -270,3 +233,6 @@ export function summarizeFromSessionFileFallback(sessionFile: string): string |
|
|
|
270
233
|
if (lines.length === 0) return null;
|
|
271
234
|
return `Codex session completed. Transcript fallback:\n- ${lines.join("\n- ")}`;
|
|
272
235
|
}
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|