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
package/dist/commands/launch.js
CHANGED
|
@@ -1,44 +1,64 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
3
|
import { Flags } from '@oclif/core';
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { spawnProcess } from '../lib/spawn.js';
|
|
7
|
-
import { launchTerminal } from '../lib/terminal.js';
|
|
8
|
-
import { checkVersionCompatibility, getClaudeCodeVersion } from '../lib/version.js';
|
|
9
|
-
import { EXIT_CODES } from '../types/index.js';
|
|
4
|
+
import { executeLaunch } from '../capabilities/launch/control-plane/execute-launch.js';
|
|
5
|
+
import BaseCommand from '../cli/base-command.js';
|
|
10
6
|
/**
|
|
11
|
-
* Launch Claude Code or
|
|
7
|
+
* Launch Claude Code, Codex, or Devin with AIW configuration.
|
|
12
8
|
*
|
|
13
9
|
* Spawns Claude Code CLI with --dangerously-skip-permissions flag,
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
10
|
+
* Codex CLI with --yolo flag, or Devin CLI with --permission-mode dangerous,
|
|
11
|
+
* enabling unattended execution. Supports multiple parallel sessions.
|
|
12
|
+
*
|
|
13
|
+
* ## Multiplexer-first launch (preferred)
|
|
14
|
+
*
|
|
15
|
+
* When a terminal multiplexer is available (psmux on Windows, tmux on Unix),
|
|
16
|
+
* the launch flow is:
|
|
17
|
+
* - **Inside an existing session** → split a new pane in the current session
|
|
18
|
+
* - **Outside any session** → create a new multiplexer session with the REPL
|
|
19
|
+
*
|
|
20
|
+
* This gives persistent sessions, pane splitting, and scrollback.
|
|
21
|
+
* Use `--no-tmux` to bypass the multiplexer and launch inline.
|
|
22
|
+
*
|
|
23
|
+
* ## Inline fallback
|
|
24
|
+
*
|
|
25
|
+
* When no multiplexer is available (or `--no-tmux` is set), the REPL launches
|
|
26
|
+
* directly in the current terminal.
|
|
27
|
+
*
|
|
28
|
+
* ## Install multiplexer
|
|
29
|
+
* - Windows: `winget install psmux` (native ConPTY multiplexer)
|
|
30
|
+
* - Unix: `apt install tmux` / `brew install tmux`
|
|
17
31
|
*/
|
|
18
32
|
export default class LaunchCommand extends BaseCommand {
|
|
19
|
-
static description = 'Launch Claude Code or
|
|
33
|
+
static description = 'Launch Claude Code, Codex, or Devin with AIW configuration (sandbox disabled, tmux-first; Windows opens mintty window first with inline fallback)\n\n' +
|
|
20
34
|
'FLAGS\n' +
|
|
21
35
|
' --codex/-c: Launch Codex instead of Claude Code (uses --yolo flag)\n' +
|
|
36
|
+
' --devin/-e: Launch Devin CLI instead of Claude Code (uses --permission-mode dangerous)\n' +
|
|
22
37
|
' --new/-n: Open a new terminal in the current directory and launch there\n' +
|
|
23
38
|
' --no-tmux/-t: Launch directly in current shell instead of auto-launching tmux\n' +
|
|
24
|
-
' --tmux-session/-s: tmux session name to reuse when auto-launching tmux
|
|
39
|
+
' --tmux-session/-s: tmux session name to reuse when auto-launching tmux\n' +
|
|
40
|
+
' --prompt/-p: Initial prompt to pass to the AI REPL at startup\n' +
|
|
41
|
+
' --wait: Block until launched pane exits (for scripted callers)\n' +
|
|
42
|
+
' --json: JSON output (paneId, backend, exitCode, sentinel)\n' +
|
|
43
|
+
' --split: Split direction when in tmux (auto|h|v, default: auto)\n' +
|
|
44
|
+
' --env: Extra env vars as JSON string\n' +
|
|
45
|
+
' --prompt-path: Path to prompt file for REPL-mode tools\n\n' +
|
|
25
46
|
'EXIT CODES\n' +
|
|
26
47
|
' 0 Success - AI assistant launched and exited successfully\n' +
|
|
27
48
|
' 1 General error - unexpected runtime failure\n' +
|
|
28
49
|
' 2 Invalid usage - check your arguments and flags\n' +
|
|
29
|
-
' 3 Environment error - CLI not found (install Claude Code from https://claude.ai/download, Codex from npm)';
|
|
50
|
+
' 3 Environment error - CLI not found (install Claude Code from https://claude.ai/download, Codex from npm, Devin from https://cli.devin.ai)';
|
|
30
51
|
static examples = [
|
|
31
52
|
'<%= config.bin %> <%= command.id %> # Auto-launches tmux with a fresh session when not already in tmux',
|
|
32
53
|
'<%= config.bin %> <%= command.id %> --codex # Launch Codex with --yolo flag',
|
|
33
|
-
'<%= config.bin %> <%= command.id %>
|
|
54
|
+
'<%= config.bin %> <%= command.id %> --devin # Launch Devin CLI with --permission-mode dangerous',
|
|
34
55
|
'<%= config.bin %> <%= command.id %> --new # Launch in a new terminal window',
|
|
35
|
-
'<%= config.bin %> <%= command.id %> -n # Short form for --new',
|
|
36
|
-
'<%= config.bin %> <%= command.id %> --codex --new # Launch Codex in new terminal',
|
|
37
56
|
'<%= config.bin %> <%= command.id %> --no-tmux # Run directly in current shell',
|
|
38
57
|
'<%= config.bin %> <%= command.id %> --tmux-session aiw-main # Reuse/attach explicit tmux session name',
|
|
58
|
+
'<%= config.bin %> <%= command.id %> --prompt "Fix the login bug" # Launch with initial prompt',
|
|
59
|
+
'<%= config.bin %> <%= command.id %> --wait --json # Block until pane exits, output JSON result',
|
|
60
|
+
'<%= config.bin %> <%= command.id %> --split h # Force horizontal split in tmux',
|
|
39
61
|
'<%= config.bin %> <%= command.id %> --debug # Enable verbose logging',
|
|
40
|
-
'# Check exit code in Bash\n<%= config.bin %> <%= command.id %>\necho $?',
|
|
41
|
-
'# Check exit code in PowerShell\n<%= config.bin %> <%= command.id %>\necho $LASTEXITCODE',
|
|
42
62
|
];
|
|
43
63
|
static flags = {
|
|
44
64
|
...BaseCommand.baseFlags,
|
|
@@ -46,6 +66,21 @@ export default class LaunchCommand extends BaseCommand {
|
|
|
46
66
|
char: 'c',
|
|
47
67
|
description: 'Launch Codex instead of Claude Code (uses --yolo flag for full auto mode)',
|
|
48
68
|
default: false,
|
|
69
|
+
exclusive: ['devin'],
|
|
70
|
+
}),
|
|
71
|
+
devin: Flags.boolean({
|
|
72
|
+
char: 'e',
|
|
73
|
+
description: 'Launch Devin CLI instead of Claude Code (uses --permission-mode dangerous)',
|
|
74
|
+
default: false,
|
|
75
|
+
exclusive: ['codex'],
|
|
76
|
+
}),
|
|
77
|
+
env: Flags.string({
|
|
78
|
+
description: 'Extra env vars as JSON object string (e.g. \'{"FOO":"bar"}\')',
|
|
79
|
+
required: false,
|
|
80
|
+
}),
|
|
81
|
+
json: Flags.boolean({
|
|
82
|
+
description: 'JSON output (paneId, backend, exitCode, sentinel)',
|
|
83
|
+
default: false,
|
|
49
84
|
}),
|
|
50
85
|
new: Flags.boolean({
|
|
51
86
|
char: 'n',
|
|
@@ -57,159 +92,65 @@ export default class LaunchCommand extends BaseCommand {
|
|
|
57
92
|
description: 'Launch directly in current shell instead of auto-launching tmux',
|
|
58
93
|
default: false,
|
|
59
94
|
}),
|
|
95
|
+
prompt: Flags.string({
|
|
96
|
+
char: 'p',
|
|
97
|
+
description: 'Initial prompt to pass to the AI REPL at startup',
|
|
98
|
+
required: false,
|
|
99
|
+
}),
|
|
100
|
+
'prompt-file': Flags.string({
|
|
101
|
+
description: 'Path to file containing initial prompt (internal)',
|
|
102
|
+
required: false,
|
|
103
|
+
hidden: true,
|
|
104
|
+
}),
|
|
105
|
+
'spawned-window': Flags.boolean({
|
|
106
|
+
description: 'Internal: marks launch as re-entered in a spawned terminal window',
|
|
107
|
+
required: false,
|
|
108
|
+
hidden: true,
|
|
109
|
+
default: false,
|
|
110
|
+
}),
|
|
111
|
+
'prompt-path': Flags.string({
|
|
112
|
+
description: 'Path to prompt file for REPL-mode tools',
|
|
113
|
+
required: false,
|
|
114
|
+
}),
|
|
115
|
+
split: Flags.string({
|
|
116
|
+
description: 'Split direction when in multiplexer (auto|horizontal|vertical, default: auto)',
|
|
117
|
+
options: ['auto', 'horizontal', 'vertical'],
|
|
118
|
+
required: false,
|
|
119
|
+
}),
|
|
60
120
|
'tmux-session': Flags.string({
|
|
61
121
|
char: 's',
|
|
62
122
|
description: 'tmux session name to reuse when auto-launching tmux (default: new aiw-<current-dir>-<unique> session)',
|
|
63
123
|
required: false,
|
|
64
124
|
}),
|
|
125
|
+
wait: Flags.boolean({
|
|
126
|
+
description: 'Block until launched pane exits; output result',
|
|
127
|
+
default: false,
|
|
128
|
+
}),
|
|
65
129
|
};
|
|
66
130
|
async run() {
|
|
67
131
|
const { flags } = await this.parse(LaunchCommand);
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
// Normal launch flow
|
|
94
|
-
let exitCode;
|
|
95
|
-
try {
|
|
96
|
-
// Version check only applies to Claude Code (not Codex)
|
|
97
|
-
if (useCodex) {
|
|
98
|
-
this.debug('Launching Codex with --yolo flag');
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
// Check Claude Code version compatibility (non-blocking)
|
|
102
|
-
const version = await getClaudeCodeVersion();
|
|
103
|
-
const versionCheck = checkVersionCompatibility(version);
|
|
104
|
-
// Debug logging: show version information
|
|
105
|
-
this.debug(`Claude Code version: ${versionCheck.version ?? 'unknown'}`);
|
|
106
|
-
this.debug(`Compatibility status: ${versionCheck.compatible ? 'compatible' : 'incompatible'}`);
|
|
107
|
-
// Non-blocking warning for incompatibility or unknown version
|
|
108
|
-
if (versionCheck.warning) {
|
|
109
|
-
this.warn(versionCheck.warning);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// Spawn AI CLI with sandbox permissions disabled
|
|
113
|
-
// AIW hook system provides safety guardrails
|
|
114
|
-
// Continue launch regardless of version check result (graceful degradation)
|
|
115
|
-
if (shouldAutoTmux && this.isTmuxAvailable()) {
|
|
116
|
-
const shellCommand = this.buildTmuxShellCommand(cliCommand, cliArgs);
|
|
117
|
-
const sessionFromFlag = flags['tmux-session']?.trim();
|
|
118
|
-
if (sessionFromFlag && sessionFromFlag.length > 0) {
|
|
119
|
-
const sessionName = this.sanitizeTmuxSessionName(sessionFromFlag);
|
|
120
|
-
this.logInfo(`Launching in tmux session: ${sessionName} (reuse/attach)`);
|
|
121
|
-
exitCode = await spawnProcess('tmux', ['new-session', '-A', '-s', sessionName, shellCommand]);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
const sessionBase = `aiw-${basename(process.cwd())}`;
|
|
125
|
-
const sessionName = this.buildUniqueTmuxSessionName(sessionBase);
|
|
126
|
-
this.logInfo(`Launching in new tmux session: ${sessionName}`);
|
|
127
|
-
exitCode = await spawnProcess('tmux', ['new-session', '-s', sessionName, shellCommand]);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
else if (shouldAutoTmux && this.isWindowsTerminalAvailable()) {
|
|
131
|
-
this.logInfo('tmux unavailable; launching in Windows Terminal split pane');
|
|
132
|
-
exitCode = await spawnProcess('wt', ['split-pane', '--', cliCommand, ...cliArgs]);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
if (shouldAutoTmux) {
|
|
136
|
-
this.logInfo('No pane launcher available. Launching directly.');
|
|
137
|
-
}
|
|
138
|
-
else if (disableTmux) {
|
|
139
|
-
this.debug('tmux launch disabled via --no-tmux');
|
|
140
|
-
}
|
|
141
|
-
else if (insideTmux) {
|
|
142
|
-
this.debug('Already inside tmux; launching directly in current pane');
|
|
143
|
-
this.enableTmuxMouseIfPossible();
|
|
144
|
-
}
|
|
145
|
-
else if (!interactiveTty) {
|
|
146
|
-
this.debug('Non-interactive terminal detected; launching directly');
|
|
147
|
-
}
|
|
148
|
-
exitCode = await spawnProcess(cliCommand, cliArgs);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
if (error instanceof ProcessSpawnError) {
|
|
153
|
-
// Actionable error message (already includes installation link)
|
|
154
|
-
this.error(error.message, { exit: EXIT_CODES.ENVIRONMENT_ERROR });
|
|
155
|
-
}
|
|
156
|
-
// Unexpected error
|
|
157
|
-
this.error('Unexpected launch failure.', { exit: EXIT_CODES.GENERAL_ERROR });
|
|
158
|
-
}
|
|
159
|
-
// Pass through Claude Code's exit code (outside try-catch to avoid catching exit)
|
|
160
|
-
this.exit(exitCode);
|
|
161
|
-
}
|
|
162
|
-
buildTmuxShellCommand(command, args) {
|
|
163
|
-
const launchCommand = [command, ...args].map((part) => this.shellQuote(part)).join(' ');
|
|
164
|
-
return `tmux set-option -g mouse on >/dev/null 2>&1 || true; exec ${launchCommand}`;
|
|
165
|
-
}
|
|
166
|
-
isTmuxAvailable() {
|
|
167
|
-
try {
|
|
168
|
-
const cmd = process.platform === 'win32' ? 'where tmux' : 'which tmux';
|
|
169
|
-
execSync(cmd, { stdio: 'ignore' });
|
|
170
|
-
return true;
|
|
171
|
-
}
|
|
172
|
-
catch {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
isWindowsTerminalAvailable() {
|
|
177
|
-
if (process.platform !== 'win32')
|
|
178
|
-
return false;
|
|
179
|
-
try {
|
|
180
|
-
execSync('where wt', { stdio: 'ignore' });
|
|
181
|
-
return true;
|
|
182
|
-
}
|
|
183
|
-
catch {
|
|
184
|
-
return false;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
sanitizeTmuxSessionName(input) {
|
|
188
|
-
const trimmed = input.trim().toLowerCase();
|
|
189
|
-
const safe = trimmed
|
|
190
|
-
.replaceAll(/[^a-z0-9_-]/g, '-')
|
|
191
|
-
.replaceAll(/-+/g, '-')
|
|
192
|
-
.replaceAll(/^[-_]+|[-_]+$/g, '');
|
|
193
|
-
return safe || 'aiw';
|
|
194
|
-
}
|
|
195
|
-
buildUniqueTmuxSessionName(base) {
|
|
196
|
-
const safeBase = this.sanitizeTmuxSessionName(base);
|
|
197
|
-
const timestamp = Date.now().toString(36);
|
|
198
|
-
const pid = process.pid.toString(36);
|
|
199
|
-
return this.sanitizeTmuxSessionName(`${safeBase}-${timestamp}-${pid}`);
|
|
200
|
-
}
|
|
201
|
-
enableTmuxMouseIfPossible() {
|
|
202
|
-
if (!this.isTmuxAvailable())
|
|
203
|
-
return;
|
|
204
|
-
try {
|
|
205
|
-
execSync('tmux set-option -g mouse on', { stdio: 'ignore' });
|
|
206
|
-
this.debug('Enabled tmux mouse support (set-option -g mouse on)');
|
|
207
|
-
}
|
|
208
|
-
catch {
|
|
209
|
-
this.debug('Could not enable tmux mouse support automatically');
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
shellQuote(input) {
|
|
213
|
-
return `'${input.replaceAll("'", `'"'"'`)}'`;
|
|
132
|
+
await executeLaunch({
|
|
133
|
+
cwd: process.cwd(),
|
|
134
|
+
flags: flags,
|
|
135
|
+
interactiveTty: Boolean(process.stdin.isTTY && process.stdout.isTTY),
|
|
136
|
+
platform: process.platform,
|
|
137
|
+
readPromptFile: (filePath) => (existsSync(filePath) ? readFileSync(filePath, 'utf8') : undefined),
|
|
138
|
+
}, {
|
|
139
|
+
host: {
|
|
140
|
+
debug: (message, ...args) => this.debug([message, ...args.map(String)].join(' ')),
|
|
141
|
+
error: (input, options) => this.error(input, options),
|
|
142
|
+
exit: (code) => this.exit(code),
|
|
143
|
+
log: (message) => this.log(message),
|
|
144
|
+
logInfo: (message) => this.logInfo(message),
|
|
145
|
+
logWarning: (message) => this.logWarning(message),
|
|
146
|
+
warn: (input) => this.warn(input),
|
|
147
|
+
},
|
|
148
|
+
now: () => Date.now(),
|
|
149
|
+
pid: process.pid,
|
|
150
|
+
tempDir: os.tmpdir(),
|
|
151
|
+
writePromptFile(filePath, content) {
|
|
152
|
+
writeFileSync(filePath, content, { encoding: 'utf8', mode: 0o600 });
|
|
153
|
+
},
|
|
154
|
+
});
|
|
214
155
|
}
|
|
215
156
|
}
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
export interface HookCommand {
|
|
9
9
|
/** If true, runs in background without blocking */
|
|
10
10
|
async?: boolean;
|
|
11
|
+
/** If false, hook failure will not block tool execution */
|
|
12
|
+
blockOnFail?: boolean;
|
|
11
13
|
/** Command to execute */
|
|
12
14
|
command: string;
|
|
13
15
|
/** Optional timeout in seconds */
|
|
@@ -15,14 +17,31 @@ export interface HookCommand {
|
|
|
15
17
|
/** Type of hook action */
|
|
16
18
|
type: 'command';
|
|
17
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Hook prompt configuration
|
|
22
|
+
*/
|
|
23
|
+
export interface HookPrompt {
|
|
24
|
+
/** If true, runs in background without blocking */
|
|
25
|
+
async?: boolean;
|
|
26
|
+
/** Prompt text shown to the model */
|
|
27
|
+
prompt: string;
|
|
28
|
+
/** Optional timeout in seconds */
|
|
29
|
+
timeout?: number;
|
|
30
|
+
/** Type of hook action */
|
|
31
|
+
type: 'prompt';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Hook action configuration
|
|
35
|
+
*/
|
|
36
|
+
export type HookAction = HookCommand | HookPrompt;
|
|
18
37
|
/**
|
|
19
38
|
* Hook matcher configuration
|
|
20
39
|
*/
|
|
21
40
|
export interface HookMatcher {
|
|
22
41
|
/** Array of hook commands to execute */
|
|
23
|
-
hooks:
|
|
42
|
+
hooks: HookAction[];
|
|
24
43
|
/** Tool name pattern to match (regex supported) */
|
|
25
|
-
matcher
|
|
44
|
+
matcher?: string;
|
|
26
45
|
/** Execute only once per session */
|
|
27
46
|
once?: boolean;
|
|
28
47
|
}
|
|
@@ -52,20 +71,6 @@ export type EnabledPlugins = Record<string, boolean>;
|
|
|
52
71
|
* Environment variables configuration
|
|
53
72
|
*/
|
|
54
73
|
export type EnvConfig = Record<string, string>;
|
|
55
|
-
/**
|
|
56
|
-
* Method installation tracking metadata
|
|
57
|
-
*/
|
|
58
|
-
interface MethodTracking {
|
|
59
|
-
/** IDEs configured for this method */
|
|
60
|
-
ides?: string[];
|
|
61
|
-
/** ISO timestamp when method was installed */
|
|
62
|
-
installedAt: string;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Methods tracking object
|
|
66
|
-
* Maps method names to their installation metadata
|
|
67
|
-
*/
|
|
68
|
-
export type MethodsConfig = Record<string, MethodTracking>;
|
|
69
74
|
/**
|
|
70
75
|
* Complete Claude Code settings.json structure
|
|
71
76
|
*/
|
|
@@ -76,16 +81,24 @@ export interface ClaudeSettings {
|
|
|
76
81
|
enabledPlugins?: EnabledPlugins;
|
|
77
82
|
/** Environment variables */
|
|
78
83
|
env?: EnvConfig;
|
|
84
|
+
/** File suggestion command configuration */
|
|
85
|
+
fileSuggestion?: {
|
|
86
|
+
command: string;
|
|
87
|
+
type: 'command';
|
|
88
|
+
};
|
|
79
89
|
/** Hook configurations */
|
|
80
90
|
hooks?: HooksConfig;
|
|
81
|
-
/** Installed methods tracking */
|
|
82
|
-
methods?: MethodsConfig;
|
|
83
91
|
/** Default model to use */
|
|
84
92
|
model?: string;
|
|
85
93
|
/** Tool permissions */
|
|
86
94
|
permissions?: Permissions;
|
|
87
95
|
/** Spinner tips enabled */
|
|
88
96
|
spinnerTipsEnabled?: boolean;
|
|
97
|
+
/** Status line command configuration */
|
|
98
|
+
statusLine?: {
|
|
99
|
+
command: string;
|
|
100
|
+
type: 'command';
|
|
101
|
+
};
|
|
89
102
|
}
|
|
90
103
|
/**
|
|
91
104
|
* Settings file types in hierarchy
|
|
@@ -102,4 +115,3 @@ export interface SettingsLocation {
|
|
|
102
115
|
/** Type of settings file */
|
|
103
116
|
type: SettingsFileType;
|
|
104
117
|
}
|
|
105
|
-
export {};
|
package/dist/lib/config.js
CHANGED
|
@@ -2,7 +2,6 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { debug } from './debug.js';
|
|
5
|
-
import { getAiwDir as getAiwDirFromEnv } from './env-compat.js';
|
|
6
5
|
import { ConfigNotFoundError } from './errors.js';
|
|
7
6
|
/**
|
|
8
7
|
* Resolve AI Workflow CLI home directory.
|
|
@@ -10,7 +9,7 @@ import { ConfigNotFoundError } from './errors.js';
|
|
|
10
9
|
*/
|
|
11
10
|
export function getAiwDir() {
|
|
12
11
|
// Try env var first, then default
|
|
13
|
-
const envHome =
|
|
12
|
+
const envHome = process.env['AIW_DIR'];
|
|
14
13
|
if (envHome) {
|
|
15
14
|
return envHome;
|
|
16
15
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting module for context display output.
|
|
3
|
+
* See SPEC.md §11
|
|
4
|
+
*
|
|
5
|
+
* All functions accept a ContextState with fields:
|
|
6
|
+
* id, summary, mode, last_active, plan_path, handoff_path,
|
|
7
|
+
* tasks[], last_session, session_ids, status, method, tags
|
|
8
|
+
*/
|
|
9
|
+
import type { ContextState } from "../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Get bracketed display string for mode, or empty for idle.
|
|
12
|
+
* See SPEC.md §11.2
|
|
13
|
+
*/
|
|
14
|
+
export declare function getModeDisplay(mode: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Format ISO timestamp as '2 hours ago', 'yesterday', etc.
|
|
17
|
+
* See SPEC.md §11.3
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatRelativeTime(isoTimestamp: string | null): string;
|
|
20
|
+
/**
|
|
21
|
+
* Build restore sections from last_session, tasks, and plan_path.
|
|
22
|
+
* See SPEC.md §11.4
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildRestoreSections(ctx: ContextState, projectRoot?: string, inlinePlan?: boolean): string;
|
|
25
|
+
/**
|
|
26
|
+
* Format output when resuming a context with a pending handoff.
|
|
27
|
+
* See SPEC.md §11.5
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatHandoffContinuation(ctx: ContextState, projectRoot?: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Build lightweight orientation for external agents (Codex, etc.).
|
|
32
|
+
* Tells the agent where the context folder and key paths are — no session state.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildExternalAgentContext(ctx: ContextState, projectRoot: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Format output for pending plan implementation (mode=has_plan).
|
|
37
|
+
* See SPEC.md §11.6
|
|
38
|
+
*/
|
|
39
|
+
export declare function formatPlanContinuation(ctx: ContextState, projectRoot?: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Format output for ongoing implementation (mode=active).
|
|
42
|
+
* See SPEC.md §11.7
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatActiveContinuation(ctx: ContextState, projectRoot?: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Format list of contexts for display.
|
|
47
|
+
* See SPEC.md §11.8
|
|
48
|
+
*/
|
|
49
|
+
export declare function formatContextList(contexts: ContextState[]): string;
|
|
50
|
+
/**
|
|
51
|
+
* Format notification for a newly created context.
|
|
52
|
+
* See SPEC.md §11.9
|
|
53
|
+
*/
|
|
54
|
+
export declare function formatContextCreated(ctx: ContextState): string;
|
|
55
|
+
/**
|
|
56
|
+
* Format system reminder: lightweight (per-prompt) or rich (first-bind restore).
|
|
57
|
+
* See SPEC.md §11.10
|
|
58
|
+
*/
|
|
59
|
+
export declare function formatActiveContextReminder(ctx: ContextState, projectRoot?: string, includeRestore?: boolean): string;
|
|
60
|
+
/**
|
|
61
|
+
* Format the boxed picker shown on stderr when blocking for selection.
|
|
62
|
+
* See SPEC.md §11.11
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatContextPickerStderr(contexts: ContextState[]): string;
|
|
65
|
+
/**
|
|
66
|
+
* Format feedback about caret command operations performed.
|
|
67
|
+
* See SPEC.md §11.12
|
|
68
|
+
*/
|
|
69
|
+
export declare function formatCommandFeedback(endedContexts: ContextState[], selectedContext: ContextState | null): string;
|
|
70
|
+
/**
|
|
71
|
+
* Build a markdown inventory of resources available in the context folder.
|
|
72
|
+
* Returns null if the context folder doesn't exist yet (brand new context).
|
|
73
|
+
*/
|
|
74
|
+
export declare function buildContextInventory(state: ContextState, projectRoot: string): string | null;
|