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
|
@@ -1,29 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Abstract base class for CLI-based agent
|
|
3
|
-
*
|
|
4
|
-
* implementations (Claude, Codex, Gemini) extend this class.
|
|
5
|
-
*
|
|
6
|
-
* Execution strategy is injected via ExecutionBackend (default: HeadlessBackend).
|
|
7
|
-
* Debug logging is injectable via AgentDebugLogger (default: no-op).
|
|
2
|
+
* Abstract base class for CLI-based agent reviewers.
|
|
3
|
+
* Implements template method pattern for subprocess execution flow.
|
|
4
|
+
* Provider-specific implementations (Claude, Codex, Gemini) extend this class.
|
|
8
5
|
*/
|
|
9
6
|
|
|
10
|
-
import { logDebug, logInfo, logWarn, logError } from "
|
|
11
|
-
import { getInternalSubprocessEnv, findExecutable,
|
|
12
|
-
import {
|
|
13
|
-
import type {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
schema: Record<string, unknown>;
|
|
23
|
-
timeout: number;
|
|
24
|
-
contextPath?: string;
|
|
25
|
-
sessionName?: string;
|
|
26
|
-
debugLogger?: AgentDebugLogger;
|
|
7
|
+
import { logDebug, logInfo, logWarn, logError } from "../../../../_core/lib-ts/runtime/logger.js";
|
|
8
|
+
import { getInternalSubprocessEnv, findExecutable, execFileAsync } from "../../../../_core/lib-ts/runtime/subprocess-utils.js";
|
|
9
|
+
import { debugLog, debugRaw } from "../../debug.js";
|
|
10
|
+
import type { AgentConfig } from "../../types.js";
|
|
11
|
+
|
|
12
|
+
/** Result from execFileAsync */
|
|
13
|
+
export interface ExecResult {
|
|
14
|
+
stdout: string;
|
|
15
|
+
stderr: string;
|
|
16
|
+
exitCode: number | null;
|
|
17
|
+
signal: string | null;
|
|
18
|
+
killed: boolean;
|
|
27
19
|
}
|
|
28
20
|
|
|
29
21
|
/**
|
|
@@ -34,70 +26,133 @@ export interface AgentExecutionConfig {
|
|
|
34
26
|
*/
|
|
35
27
|
export abstract class BaseCliAgent<T> {
|
|
36
28
|
protected agent: AgentConfig;
|
|
37
|
-
protected backend: ExecutionBackend;
|
|
38
|
-
protected contextPath?: string;
|
|
39
|
-
protected debugLogger?: AgentDebugLogger;
|
|
40
29
|
protected schema: Record<string, unknown>;
|
|
41
|
-
protected sessionName: string;
|
|
42
30
|
protected timeout: number;
|
|
31
|
+
protected contextPath?: string;
|
|
32
|
+
protected sessionName: string;
|
|
43
33
|
|
|
44
34
|
constructor(
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
agent: AgentConfig,
|
|
36
|
+
schema: Record<string, unknown>,
|
|
37
|
+
timeout: number,
|
|
38
|
+
contextPath?: string,
|
|
39
|
+
sessionName = "unknown",
|
|
47
40
|
) {
|
|
48
|
-
this.agent =
|
|
49
|
-
this.schema =
|
|
50
|
-
this.timeout =
|
|
51
|
-
this.contextPath =
|
|
52
|
-
this.sessionName =
|
|
53
|
-
this.debugLogger = config.debugLogger;
|
|
54
|
-
this.backend = backend ?? new HeadlessBackend();
|
|
41
|
+
this.agent = agent;
|
|
42
|
+
this.schema = schema;
|
|
43
|
+
this.timeout = timeout;
|
|
44
|
+
this.contextPath = contextPath;
|
|
45
|
+
this.sessionName = sessionName;
|
|
55
46
|
}
|
|
56
47
|
|
|
57
|
-
/**
|
|
58
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Template method - orchestrates the review flow.
|
|
50
|
+
* Subclasses override abstract methods to customize behavior.
|
|
51
|
+
*/
|
|
52
|
+
async review(plan: string): Promise<T> {
|
|
53
|
+
// 1. Find CLI executable
|
|
54
|
+
const cliPath = this.findCli();
|
|
55
|
+
if (!cliPath) {
|
|
56
|
+
return this.makeSkipResult(`${this.getCliName()} CLI not found on PATH`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
logDebug(this.agent.name, `Found ${this.getCliName()} CLI at: ${cliPath}`);
|
|
60
|
+
|
|
61
|
+
// 2. Build prompt and args (provider-specific)
|
|
62
|
+
const prompt = this.buildPrompt(plan);
|
|
63
|
+
const args = this.buildCliArgs();
|
|
64
|
+
|
|
65
|
+
logInfo(this.agent.name, `Running ${this.getCliName()} with model: ${this.agent.model}, timeout: ${this.timeout}s`);
|
|
66
|
+
|
|
67
|
+
// 3. Execute subprocess
|
|
68
|
+
const env = getInternalSubprocessEnv();
|
|
69
|
+
const result = await execFileAsync(cliPath, args, {
|
|
70
|
+
input: prompt,
|
|
71
|
+
timeout: this.timeout * 1000,
|
|
72
|
+
env: env as Record<string, string>,
|
|
73
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
74
|
+
shell: process.platform === "win32",
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// 4. Handle timeout
|
|
78
|
+
if (result.killed || result.signal === "SIGTERM") {
|
|
79
|
+
return this.handleTimeout();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// 5. Extract output (provider-specific)
|
|
83
|
+
const { raw, err } = this.extractOutput(result);
|
|
84
|
+
|
|
85
|
+
// 6. Handle exit errors
|
|
86
|
+
if (!raw && !err && result.exitCode !== 0) {
|
|
87
|
+
return this.handleExitError(result);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// 7. Log subprocess results
|
|
91
|
+
this.logSubprocessResult(result, raw, err);
|
|
92
|
+
|
|
93
|
+
// 8. Parse JSON output (provider-specific)
|
|
94
|
+
const obj = this.parseOutput(raw, result);
|
|
95
|
+
|
|
96
|
+
// 9. Log parsed result
|
|
97
|
+
this.logParsedResult(obj);
|
|
98
|
+
|
|
99
|
+
// 10. Coerce to result type T (provider-specific)
|
|
100
|
+
const coerced = this.coerceResult(obj, raw, err);
|
|
101
|
+
|
|
102
|
+
// 11. Cleanup (optional override)
|
|
103
|
+
await this.cleanup();
|
|
104
|
+
|
|
105
|
+
return coerced;
|
|
106
|
+
}
|
|
59
107
|
|
|
60
108
|
// ─── Abstract Methods (Subclass Implements) ────────────────────────────
|
|
61
109
|
|
|
110
|
+
/** Get the CLI executable name (e.g., "claude", "codex") */
|
|
111
|
+
protected abstract getCliName(): string;
|
|
112
|
+
|
|
62
113
|
/** Build the stdin prompt for the CLI */
|
|
63
114
|
protected abstract buildPrompt(plan: string): string;
|
|
64
115
|
|
|
65
|
-
/**
|
|
66
|
-
protected
|
|
67
|
-
|
|
68
|
-
|
|
116
|
+
/** Build the command-line arguments for the CLI */
|
|
117
|
+
protected abstract buildCliArgs(): string[];
|
|
118
|
+
|
|
119
|
+
/** Parse JSON from CLI output */
|
|
120
|
+
protected abstract parseOutput(raw: string, result: ExecResult): Record<string, unknown> | null;
|
|
69
121
|
|
|
70
122
|
/** Coerce parsed JSON into the result type T */
|
|
71
123
|
protected abstract coerceResult(obj: Record<string, unknown> | null, raw: string, err: string): T;
|
|
72
124
|
|
|
73
|
-
|
|
74
|
-
protected extractOutput(result: ExecutionResult): { raw: string; err: string } {
|
|
75
|
-
return {
|
|
76
|
-
raw: result.stdout.trim(),
|
|
77
|
-
err: result.stderr.trim(),
|
|
78
|
-
};
|
|
79
|
-
}
|
|
125
|
+
// ─── Template Methods (Subclass Can Override) ──────────────────────────
|
|
80
126
|
|
|
81
127
|
/** Find the CLI executable. Override for custom search logic. */
|
|
82
128
|
protected findCli(): string | null {
|
|
83
129
|
return findExecutable(this.getCliName());
|
|
84
130
|
}
|
|
85
131
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
132
|
+
/** Extract stdout/stderr from subprocess result. Override for file-based output (Codex). */
|
|
133
|
+
protected extractOutput(result: ExecResult): { raw: string; err: string } {
|
|
134
|
+
return {
|
|
135
|
+
raw: result.stdout.trim(),
|
|
136
|
+
err: result.stderr.trim(),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
90
139
|
|
|
91
140
|
/** Get default error message for coerceToReview */
|
|
92
141
|
protected getDefaultErrorMessage(): string {
|
|
93
142
|
return `Retry or check ${this.getCliName()} configuration.`;
|
|
94
143
|
}
|
|
95
144
|
|
|
96
|
-
/**
|
|
97
|
-
protected
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
145
|
+
/** Optional cleanup after subprocess execution */
|
|
146
|
+
protected async cleanup(): Promise<void> {
|
|
147
|
+
// Default: no-op. Subclasses override if needed (e.g., Codex temp files).
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// ─── Shared Infrastructure ──────────────────────────────────────────────
|
|
151
|
+
|
|
152
|
+
/** Create skip result when CLI not found */
|
|
153
|
+
protected makeSkipResult(reason: string): T {
|
|
154
|
+
logWarn(this.agent.name, reason);
|
|
155
|
+
return this.makeErrorResult("skip", reason);
|
|
101
156
|
}
|
|
102
157
|
|
|
103
158
|
/** Handle timeout scenario */
|
|
@@ -107,39 +162,29 @@ export abstract class BaseCliAgent<T> {
|
|
|
107
162
|
return this.makeErrorResult("error", `${this.agent.name} timed out after ${this.timeout}s`);
|
|
108
163
|
}
|
|
109
164
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
this.debugLogger?.log(this.contextPath, this.sessionName, `agent:${this.agent.name}`, "parsed_result", {
|
|
116
|
-
parsed_keys: Object.keys(obj),
|
|
117
|
-
verdict: obj.verdict ?? null,
|
|
118
|
-
has_summary: Boolean(obj.summary),
|
|
119
|
-
issues_count: Array.isArray(obj.issues) ? (obj.issues as unknown[]).length : 0,
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (obj) {
|
|
124
|
-
logInfo(this.agent.name, `Parsed JSON successfully, verdict: ${obj.verdict ?? "N/A"}`);
|
|
125
|
-
} else {
|
|
126
|
-
logWarn(this.agent.name, "Failed to parse JSON from output");
|
|
127
|
-
}
|
|
165
|
+
/** Handle non-zero exit with no output */
|
|
166
|
+
protected handleExitError(result: ExecResult): T {
|
|
167
|
+
const msg = `${this.agent.name} failed to run (exit ${result.exitCode})`;
|
|
168
|
+
logError(this.agent.name, `Process exited with code ${result.exitCode} and no output`);
|
|
169
|
+
return this.makeErrorResult("error", msg);
|
|
128
170
|
}
|
|
129
171
|
|
|
172
|
+
/** Construct a T for error/skip/timeout scenarios. Subclasses define shape. */
|
|
173
|
+
protected abstract makeErrorResult(type: "skip" | "error", message: string): T;
|
|
174
|
+
|
|
130
175
|
/** Log subprocess execution results */
|
|
131
|
-
protected logSubprocessResult(result:
|
|
176
|
+
protected logSubprocessResult(result: ExecResult, raw: string, err: string): void {
|
|
132
177
|
logDebug(this.agent.name, `Exit code: ${result.exitCode}`);
|
|
133
178
|
logDebug(this.agent.name, `stdout length: ${raw.length} chars`);
|
|
134
179
|
if (err) logDebug(this.agent.name, `stderr: ${err.slice(0, 500)}`);
|
|
135
180
|
|
|
136
181
|
// Debug logging
|
|
137
182
|
if (this.contextPath) {
|
|
138
|
-
|
|
183
|
+
debugRaw(this.contextPath, this.sessionName, `agent:${this.agent.name}`, "stdout", raw);
|
|
139
184
|
if (err) {
|
|
140
|
-
|
|
185
|
+
debugRaw(this.contextPath, this.sessionName, `agent:${this.agent.name}`, "stderr", err);
|
|
141
186
|
}
|
|
142
|
-
|
|
187
|
+
debugLog(this.contextPath, this.sessionName, `agent:${this.agent.name}`, "subprocess_info", {
|
|
143
188
|
exit_code: result.exitCode,
|
|
144
189
|
stdout_len: raw.length,
|
|
145
190
|
stderr_len: err.length,
|
|
@@ -152,78 +197,21 @@ export abstract class BaseCliAgent<T> {
|
|
|
152
197
|
if (raw) logDebug(this.agent.name, `stdout preview: ${raw.slice(0, 500)}`);
|
|
153
198
|
}
|
|
154
199
|
|
|
155
|
-
/**
|
|
156
|
-
protected
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
/** Parse JSON from CLI output */
|
|
165
|
-
protected abstract parseOutput(raw: string, result: ExecutionResult): Record<string, unknown> | null;
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Template method - orchestrates the review flow.
|
|
169
|
-
* Subclasses override abstract methods to customize behavior.
|
|
170
|
-
*/
|
|
171
|
-
async review(plan: string): Promise<T> {
|
|
172
|
-
// 1. Find CLI executable
|
|
173
|
-
const cliPath = this.findCli();
|
|
174
|
-
if (!cliPath) {
|
|
175
|
-
return this.makeSkipResult(`${this.getCliName()} CLI not found on PATH`);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
logDebug(this.agent.name, `Found ${this.getCliName()} CLI at: ${cliPath}`);
|
|
179
|
-
|
|
180
|
-
// 2. Build prompt and args (provider-specific)
|
|
181
|
-
const prompt = this.buildPrompt(plan);
|
|
182
|
-
const args = this.buildCliArgs();
|
|
183
|
-
|
|
184
|
-
logInfo(this.agent.name, `Running ${this.getCliName()} with model: ${this.agent.model}, timeout: ${this.timeout}s`);
|
|
185
|
-
|
|
186
|
-
// 3. Execute via backend
|
|
187
|
-
const env = getInternalSubprocessEnv();
|
|
188
|
-
const normalizedCliPath = normalizePathForCli(cliPath);
|
|
189
|
-
const result = await this.backend.execute({
|
|
190
|
-
cliPath: normalizedCliPath,
|
|
191
|
-
args,
|
|
192
|
-
input: prompt,
|
|
193
|
-
env: env as Record<string, string>,
|
|
194
|
-
timeoutMs: this.timeout * 1000,
|
|
195
|
-
maxBuffer: 10 * 1024 * 1024,
|
|
196
|
-
shell: process.platform === "win32",
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
// 4. Handle timeout
|
|
200
|
-
if (result.killed || result.signal === "SIGTERM") {
|
|
201
|
-
return this.handleTimeout();
|
|
200
|
+
/** Log parsed JSON result */
|
|
201
|
+
protected logParsedResult(obj: Record<string, unknown> | null): void {
|
|
202
|
+
if (this.contextPath && obj) {
|
|
203
|
+
debugLog(this.contextPath, this.sessionName, `agent:${this.agent.name}`, "parsed_result", {
|
|
204
|
+
parsed_keys: Object.keys(obj),
|
|
205
|
+
verdict: obj.verdict ?? null,
|
|
206
|
+
has_summary: Boolean(obj.summary),
|
|
207
|
+
issues_count: Array.isArray(obj.issues) ? (obj.issues as unknown[]).length : 0,
|
|
208
|
+
});
|
|
202
209
|
}
|
|
203
210
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
if (!raw && !err && result.exitCode !== 0) {
|
|
209
|
-
return this.handleExitError(result);
|
|
211
|
+
if (obj) {
|
|
212
|
+
logInfo(this.agent.name, `Parsed JSON successfully, verdict: ${obj.verdict ?? "N/A"}`);
|
|
213
|
+
} else {
|
|
214
|
+
logWarn(this.agent.name, "Failed to parse JSON from output");
|
|
210
215
|
}
|
|
211
|
-
|
|
212
|
-
// 7. Log subprocess results
|
|
213
|
-
this.logSubprocessResult(result, raw, err);
|
|
214
|
-
|
|
215
|
-
// 8. Parse JSON output (provider-specific)
|
|
216
|
-
const obj = this.parseOutput(raw, result);
|
|
217
|
-
|
|
218
|
-
// 9. Log parsed result
|
|
219
|
-
this.logParsedResult(obj);
|
|
220
|
-
|
|
221
|
-
// 10. Coerce to result type T (provider-specific)
|
|
222
|
-
const coerced = this.coerceResult(obj, raw, err);
|
|
223
|
-
|
|
224
|
-
// 11. Cleanup (optional override)
|
|
225
|
-
await this.cleanup();
|
|
226
|
-
|
|
227
|
-
return coerced;
|
|
228
216
|
}
|
|
229
217
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reviewers package — re-exports all reviewer implementations.
|
|
3
|
-
* See cc-native-plan-review-spec.md §4.9
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export
|
|
12
|
-
export {
|
|
1
|
+
/**
|
|
2
|
+
* Reviewers package — re-exports all reviewer implementations.
|
|
3
|
+
* See cc-native-plan-review-spec.md §4.9
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export type { Reviewer, ReviewerResult, ReviewOptions } from "./types.js";
|
|
7
|
+
export { makeResult } from "./types.js";
|
|
8
|
+
export { AgentReviewer, runAgentReview } from "./agent.js";
|
|
9
|
+
export { BaseCliAgent } from "./base/base-agent.js";
|
|
10
|
+
export { ClaudeAgent } from "./providers/claude-agent.js";
|
|
11
|
+
export { CodexAgent } from "./providers/codex-agent.js";
|
|
12
|
+
export { GeminiAgent } from "./providers/gemini-agent.js";
|
|
@@ -1,57 +1,66 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude CLI agent reviewer implementation.
|
|
3
|
-
* Uses claude CLI with --json-schema and --system-prompt flags.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
* Claude
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
protected parseOutput(raw: string, _result:
|
|
55
|
-
return parseCliOutput(raw, ["verdict", "summary"]);
|
|
56
|
-
}
|
|
57
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Claude CLI agent reviewer implementation.
|
|
3
|
+
* Uses claude CLI with --json-schema and --system-prompt flags.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { shellQuoteWin } from "../../../../_core/lib-ts/runtime/subprocess-utils.js";
|
|
7
|
+
import { parseCliOutput } from "../../cli-output-parser.js";
|
|
8
|
+
import { coerceToReview } from "../../json-parser.js";
|
|
9
|
+
import type { ReviewerResult } from "../../types.js";
|
|
10
|
+
import { AGENT_REVIEW_PROMPT_PREFIX } from "../schemas.js";
|
|
11
|
+
import { makeResult } from "../types.js";
|
|
12
|
+
import { BaseCliAgent } from "../base/base-agent.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Claude CLI-based agent reviewer.
|
|
16
|
+
* Extends BaseCliAgent with Claude-specific prompt and argument handling.
|
|
17
|
+
*/
|
|
18
|
+
export class ClaudeAgent extends BaseCliAgent<ReviewerResult> {
|
|
19
|
+
protected getCliName(): string {
|
|
20
|
+
return "claude";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
protected buildPrompt(plan: string): string {
|
|
24
|
+
return `IMMEDIATELY call StructuredOutput with your review of the plan below.
|
|
25
|
+
Do NOT output any text before calling StructuredOutput.
|
|
26
|
+
|
|
27
|
+
PLAN:
|
|
28
|
+
<<<
|
|
29
|
+
${plan}
|
|
30
|
+
>>>
|
|
31
|
+
`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
protected buildCliArgs(): string[] {
|
|
35
|
+
const schemaJson = JSON.stringify(this.schema);
|
|
36
|
+
const cmdArgs = [
|
|
37
|
+
"--model", this.agent.model,
|
|
38
|
+
"--output-format", "json",
|
|
39
|
+
"--json-schema", shellQuoteWin(schemaJson),
|
|
40
|
+
"--max-turns", "3",
|
|
41
|
+
"--setting-sources", process.platform === "win32" ? '""' : "",
|
|
42
|
+
"-p",
|
|
43
|
+
"--no-session-persistence", // Prevent subprocess from creating session records
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
if (this.agent.system_prompt) {
|
|
47
|
+
const fullPrompt = AGENT_REVIEW_PROMPT_PREFIX + "\n\n---\n\n" + this.agent.system_prompt;
|
|
48
|
+
cmdArgs.push("--system-prompt", shellQuoteWin(fullPrompt));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return cmdArgs;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
protected parseOutput(raw: string, _result: unknown): Record<string, unknown> | null {
|
|
55
|
+
return parseCliOutput(raw, ["verdict", "summary"]);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
protected coerceResult(obj: Record<string, unknown> | null, raw: string, err: string): ReviewerResult {
|
|
59
|
+
const [ok, verdict, norm] = coerceToReview(obj, this.getDefaultErrorMessage());
|
|
60
|
+
return makeResult(this.agent.name, ok, verdict, norm, raw, err);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
protected makeErrorResult(type: "skip" | "error", message: string): ReviewerResult {
|
|
64
|
+
return makeResult(this.agent.name, false, type, {}, "", message);
|
|
65
|
+
}
|
|
66
|
+
}
|