aiwcli 0.15.5 → 0.15.7
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 +6 -3
- 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 +160 -0
- package/dist/capabilities/installation/control-plane/clear-command.js +1220 -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 +51 -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 +222 -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 +0 -20
- package/dist/commands/branch.js +24 -416
- 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 +36 -11
- package/dist/commands/launch.js +135 -159
- package/dist/lib/base-command.d.ts +1 -114
- package/dist/lib/base-command.js +1 -153
- package/dist/lib/claude-settings-types.d.ts +31 -19
- 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 +618 -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 +54 -0
- package/dist/lib/git-exclude-manager.d.ts +2 -2
- package/dist/lib/git-exclude-manager.js +3 -3
- package/dist/lib/hooks/hook-utils.d.ts +143 -0
- package/dist/lib/hooks/hook-utils.js +609 -0
- package/dist/lib/hooks/session-end-logic.d.ts +5 -0
- package/dist/lib/hooks/session-end-logic.js +63 -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 +161 -0
- package/dist/lib/launch-options.d.ts +1 -0
- package/dist/lib/launch-options.js +1 -0
- package/dist/lib/lsp-patch.d.ts +12 -0
- package/dist/lib/lsp-patch.js +156 -0
- package/dist/lib/multiplexer.d.ts +57 -0
- package/dist/lib/multiplexer.js +19 -0
- package/dist/lib/multiplexers/psmux.d.ts +75 -0
- package/dist/lib/multiplexers/psmux.js +384 -0
- package/dist/lib/multiplexers/tmux.d.ts +44 -0
- package/dist/lib/multiplexers/tmux.js +262 -0
- package/dist/lib/mux-utils.d.ts +5 -0
- package/dist/lib/mux-utils.js +42 -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/runtime/aiw-cli.d.ts +37 -0
- package/dist/lib/runtime/aiw-cli.js +74 -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 +55 -0
- package/dist/lib/runtime/cli-args.js +185 -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 +262 -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 +14 -0
- package/dist/lib/runtime/models.js +14 -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 +30 -0
- package/dist/lib/runtime/state-io.js +174 -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 +54 -0
- package/dist/lib/runtime/utils.js +162 -0
- package/dist/lib/sentinel-wrapper.d.ts +9 -0
- package/dist/lib/sentinel-wrapper.js +20 -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 +6 -0
- package/dist/lib/spawn-errors.js +15 -0
- package/dist/lib/spawn.js +5 -11
- package/dist/lib/template-installer.d.ts +4 -5
- package/dist/lib/template-installer.js +36 -34
- 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 +11 -0
- package/dist/lib/terminal-strategy.js +49 -0
- package/dist/lib/terminal.d.ts +28 -0
- package/dist/lib/terminal.js +162 -112
- 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 +5 -0
- package/dist/lib/tmux-primitives.js +15 -0
- package/dist/lib/tmux-session.d.ts +32 -0
- package/dist/lib/tmux-session.js +86 -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/platform/launch.d.ts +10 -0
- package/dist/platform/launch.js +10 -0
- package/dist/templates/CLAUDE.md +31 -40
- package/dist/templates/cc-native/.claude/settings.json +27 -27
- package/dist/templates/cc-native/CC-NATIVE-README.md +1 -1
- package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +10 -9
- package/dist/templates/cc-native/_cc-native/CLAUDE.md +18 -18
- package/dist/templates/cc-native/_cc-native/artifacts/CLAUDE.md +3 -3
- package/dist/templates/cc-native/_cc-native/artifacts/lib/format.ts +14 -14
- package/dist/templates/cc-native/_cc-native/artifacts/lib/tracker.ts +1 -1
- package/dist/templates/cc-native/_cc-native/artifacts/lib/write.ts +3 -3
- package/dist/templates/cc-native/_cc-native/cc-native.config.json +3 -3
- package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +16 -15
- package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +3 -3
- 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 +2 -2
- package/dist/templates/cc-native/_cc-native/hooks/mark_questions_asked.ts +3 -3
- package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +2 -2
- package/dist/templates/cc-native/_cc-native/hooks/validate_task_prompt.ts +3 -3
- package/dist/templates/cc-native/_cc-native/lib-ts/CLAUDE.md +8 -8
- package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +4 -4
- package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/plan-discovery.ts +2 -2
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/logger.ts +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/retrieval-pipeline.ts +2 -2
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/types.ts +1 -1
- package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +8 -8
- package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +3 -3
- package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +2 -2
- package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +3 -3
- package/dist/templates/cc-native/_cc-native/plan-review/CLAUDE.md +3 -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 +37 -15
- package/dist/templates/cc-native/_cc-native/plan-review/lib/corroboration.ts +16 -69
- package/dist/templates/cc-native/_cc-native/plan-review/lib/orchestrator.ts +1 -1
- package/dist/templates/cc-native/_cc-native/plan-review/lib/output-builder.ts +1 -1
- package/dist/templates/cc-native/_cc-native/plan-review/lib/plan-questions.ts +2 -2
- package/dist/templates/cc-native/_cc-native/plan-review/lib/preflight.ts +56 -26
- package/dist/templates/cc-native/_cc-native/plan-review/lib/review-pipeline.ts +7 -7
- package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/agent.ts +4 -4
- package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/base/base-agent.ts +3 -3
- package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/index.ts +1 -1
- package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/claude-agent.ts +2 -2
- package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/codex-agent.ts +4 -4
- package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/gemini-agent.ts +1 -1
- package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/orchestrator-claude-agent.ts +5 -6
- package/dist/templates/core/.codex/workflows/codex.md +17 -0
- package/dist/templates/core/.codex/workflows/handoff.md +5 -0
- package/dist/templates/core/.codex/workflows/meta-plan.md +7 -0
- package/dist/templates/core/.cognition/AGENTS.md +5 -0
- package/dist/templates/core/.cognition/config.json +12 -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 +14 -23
- 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 +4 -3
- package/dist/templates/{_shared → core}/hooks-ts/lint_after_edit.ts +7 -9
- package/dist/templates/{_shared → core}/hooks-ts/pre_compact.ts +5 -5
- 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/agent-exec/backends/headless.ts +3 -2
- package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/tmux.ts +44 -15
- package/dist/templates/{_shared → core}/lib-ts/agent-exec/base-agent.ts +6 -4
- package/dist/templates/{_shared → core}/lib-ts/agent-exec/execution-backend.ts +1 -1
- package/dist/templates/{_shared → core}/lib-ts/agent-exec/index.ts +2 -2
- package/dist/templates/{_shared → core}/lib-ts/agent-exec/structured-output.ts +4 -5
- 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 +32 -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 +168 -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 +93 -0
- package/dist/templates/core/lib-ts/package.json +19 -0
- package/dist/templates/core/lib-ts/runtime/agent-launcher.ts +295 -0
- package/dist/templates/core/lib-ts/runtime/aiw-cli.ts +106 -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 +8 -6
- 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 +59 -10
- 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 +2 -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 +11 -7
- 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 +4 -3
- 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 +61 -0
- package/dist/templates/{_shared → core}/scripts/resolve_context.ts +3 -3
- package/dist/templates/{_shared → core}/scripts/status_line.ts +25 -20
- package/dist/templates/core/skills/codex/CLAUDE.md +78 -0
- package/dist/templates/{_shared → core}/skills/codex/SKILL.md +21 -18
- package/dist/templates/{_shared → core}/skills/codex/lib/codex-watcher.ts +76 -103
- package/dist/templates/{_shared → core}/skills/codex/scripts/launch-codex.ts +119 -133
- package/dist/templates/{_shared → core}/skills/codex/scripts/watch-codex.ts +6 -4
- package/dist/templates/core/skills/devin/CLAUDE.md +65 -0
- package/dist/templates/core/skills/devin/SKILL.md +73 -0
- package/dist/templates/core/skills/devin/lib/devin-watcher.ts +280 -0
- package/dist/templates/core/skills/devin/scripts/launch-devin.ts +257 -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/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/task_create_capture.ts +0 -48
- package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +0 -93
- 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/{_shared → core}/lib-ts/agent-exec/backends/index.ts +0 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import confirm from '@inquirer/confirm';
|
|
4
|
+
import { Flags } from '@oclif/core';
|
|
5
|
+
import BaseCommand from '../../../cli/base-command.js';
|
|
6
|
+
import { EXIT_CODES } from '../../../types/exit-codes.js';
|
|
7
|
+
/**
|
|
8
|
+
* Clean output folder(s) for methods.
|
|
9
|
+
* Removes all files and subdirectories from the method's output folder.
|
|
10
|
+
*/
|
|
11
|
+
export default class CleanCommand extends BaseCommand {
|
|
12
|
+
static description = 'Clean output folder(s) for a specific method or all methods';
|
|
13
|
+
static examples = [
|
|
14
|
+
'<%= config.bin %> <%= command.id %> --method cc-native',
|
|
15
|
+
'<%= config.bin %> <%= command.id %> -m cc-native',
|
|
16
|
+
'<%= config.bin %> <%= command.id %> --all',
|
|
17
|
+
'<%= config.bin %> <%= command.id %> -a --dry-run',
|
|
18
|
+
'<%= config.bin %> <%= command.id %> --method cc-native --dry-run',
|
|
19
|
+
'<%= config.bin %> <%= command.id %> -m cc-native --force',
|
|
20
|
+
];
|
|
21
|
+
static flags = {
|
|
22
|
+
...BaseCommand.baseFlags,
|
|
23
|
+
all: Flags.boolean({
|
|
24
|
+
char: 'a',
|
|
25
|
+
description: 'Clean all output folders',
|
|
26
|
+
default: false,
|
|
27
|
+
exclusive: ['method'],
|
|
28
|
+
}),
|
|
29
|
+
'dry-run': Flags.boolean({
|
|
30
|
+
char: 'n',
|
|
31
|
+
description: 'Show what would be deleted without actually deleting',
|
|
32
|
+
default: false,
|
|
33
|
+
}),
|
|
34
|
+
force: Flags.boolean({
|
|
35
|
+
char: 'f',
|
|
36
|
+
description: 'Skip confirmation prompt',
|
|
37
|
+
default: false,
|
|
38
|
+
}),
|
|
39
|
+
method: Flags.string({
|
|
40
|
+
char: 'm',
|
|
41
|
+
description: 'Method name whose output folder to clean (e.g., cc-native)',
|
|
42
|
+
exclusive: ['all'],
|
|
43
|
+
}),
|
|
44
|
+
};
|
|
45
|
+
async run() {
|
|
46
|
+
const { flags } = await this.parse(CleanCommand);
|
|
47
|
+
const targetDir = process.cwd();
|
|
48
|
+
this.logWarning("'aiw clean' is deprecated. Use 'aiw clear --output' instead.");
|
|
49
|
+
// Validate: require either --method or --all
|
|
50
|
+
if (!flags.method && !flags.all) {
|
|
51
|
+
this.error('Either --method or --all is required.', {
|
|
52
|
+
exit: EXIT_CODES.GENERAL_ERROR,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
// Find output folders to clean
|
|
57
|
+
const outputFolders = flags.all
|
|
58
|
+
? await this.findAllOutputFolders(targetDir)
|
|
59
|
+
: [`_${flags.method}-output`];
|
|
60
|
+
if (outputFolders.length === 0) {
|
|
61
|
+
this.logInfo('No output folders found.');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Collect contents from all folders (parallel stat and content retrieval)
|
|
65
|
+
const folderResults = await Promise.all(outputFolders.map(async (folder) => {
|
|
66
|
+
const folderPath = join(targetDir, folder);
|
|
67
|
+
const stat = await fs.stat(folderPath).catch(() => null);
|
|
68
|
+
if (!stat?.isDirectory()) {
|
|
69
|
+
return { folder, items: [], exists: false };
|
|
70
|
+
}
|
|
71
|
+
const items = await this.getContents(folderPath);
|
|
72
|
+
return { folder, items, exists: true };
|
|
73
|
+
}));
|
|
74
|
+
// Check for non-existent folder in single method mode
|
|
75
|
+
if (!flags.all) {
|
|
76
|
+
const result = folderResults[0];
|
|
77
|
+
if (result && !result.exists) {
|
|
78
|
+
this.logInfo(`Output folder '${result.folder}' does not exist.`);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Filter to folders with content
|
|
83
|
+
const allContents = folderResults.filter((r) => r.exists && r.items.length > 0);
|
|
84
|
+
const totalItems = allContents.reduce((sum, c) => sum + c.items.length, 0);
|
|
85
|
+
if (totalItems === 0) {
|
|
86
|
+
const msg = flags.all ? 'All output folders are empty.' : `Output folder '${outputFolders[0]}' is already empty.`;
|
|
87
|
+
this.logInfo(msg);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Show what will be deleted
|
|
91
|
+
this.log('');
|
|
92
|
+
this.logInfo(`Found ${totalItems} item(s) in ${allContents.length} output folder(s):`);
|
|
93
|
+
this.log('');
|
|
94
|
+
this.displayContents(allContents, targetDir);
|
|
95
|
+
this.log('');
|
|
96
|
+
// Dry run - just show files without deleting
|
|
97
|
+
if (flags['dry-run']) {
|
|
98
|
+
this.logInfo('Dry run complete. No files were deleted.');
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Confirm deletion
|
|
102
|
+
if (!flags.force) {
|
|
103
|
+
const folderNames = allContents.map((c) => c.folder).join(', ');
|
|
104
|
+
const shouldDelete = await confirm({
|
|
105
|
+
message: `Delete all contents of ${allContents.length > 1 ? 'folders: ' : ''}${folderNames}?`,
|
|
106
|
+
default: false,
|
|
107
|
+
});
|
|
108
|
+
if (!shouldDelete) {
|
|
109
|
+
this.log('Operation cancelled.');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Delete all contents (parallel deletion with error tracking)
|
|
114
|
+
const allItems = allContents.flatMap((c) => c.items);
|
|
115
|
+
const deleteResults = await Promise.all(allItems.map(async (item) => {
|
|
116
|
+
try {
|
|
117
|
+
await fs.rm(item.path, { recursive: true, force: true });
|
|
118
|
+
this.logDebug(`Deleted: ${item.path}`);
|
|
119
|
+
return { success: true, path: item.path };
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
const err = error;
|
|
123
|
+
this.logWarning(`Failed to delete ${item.path}: ${err.message}`);
|
|
124
|
+
return { success: false, path: item.path };
|
|
125
|
+
}
|
|
126
|
+
}));
|
|
127
|
+
const deletedCount = deleteResults.filter((r) => r.success).length;
|
|
128
|
+
this.log('');
|
|
129
|
+
const firstFolder = allContents[0];
|
|
130
|
+
const folderSummary = allContents.length === 1 && firstFolder ? `'${firstFolder.folder}'` : `${allContents.length} folders`;
|
|
131
|
+
this.logSuccess(`Cleaned ${folderSummary}: ${deletedCount} item(s) deleted.`);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
const err = error;
|
|
135
|
+
if (err.code === 'EACCES' || err.code === 'EPERM') {
|
|
136
|
+
this.error(`Permission denied. ${err.message}`, {
|
|
137
|
+
exit: EXIT_CODES.ENVIRONMENT_ERROR,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
this.error(`Clean failed: ${err.message}`, {
|
|
141
|
+
exit: EXIT_CODES.GENERAL_ERROR,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Display contents of folders that will be deleted.
|
|
147
|
+
*
|
|
148
|
+
* @param allContents - Folders with their contents
|
|
149
|
+
* @param targetDir - Base directory for relative path display
|
|
150
|
+
*/
|
|
151
|
+
displayContents(allContents, targetDir) {
|
|
152
|
+
for (const { items } of allContents) {
|
|
153
|
+
for (const item of items) {
|
|
154
|
+
const relativePath = item.path.replace(targetDir + '\\', '').replace(targetDir + '/', '');
|
|
155
|
+
const suffix = item.isDirectory ? '/' : '';
|
|
156
|
+
this.log(` ${relativePath}${suffix}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Find all output folders in the target directory.
|
|
162
|
+
* Matches folders with pattern _*-output (e.g., _bmad-output, _gsd-output).
|
|
163
|
+
*
|
|
164
|
+
* @param targetDir - Directory to search in
|
|
165
|
+
* @returns Array of output folder names
|
|
166
|
+
*/
|
|
167
|
+
async findAllOutputFolders(targetDir) {
|
|
168
|
+
try {
|
|
169
|
+
const entries = await fs.readdir(targetDir, { withFileTypes: true });
|
|
170
|
+
return entries
|
|
171
|
+
.filter((entry) => entry.isDirectory() && entry.name.startsWith('_') && entry.name.endsWith('-output'))
|
|
172
|
+
.map((entry) => entry.name);
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get all top-level contents of a directory.
|
|
180
|
+
*
|
|
181
|
+
* @param dirPath - Directory to list contents of
|
|
182
|
+
* @returns Array of content items with path and type info
|
|
183
|
+
*/
|
|
184
|
+
async getContents(dirPath) {
|
|
185
|
+
try {
|
|
186
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
187
|
+
return entries.map((entry) => ({
|
|
188
|
+
isDirectory: entry.isDirectory(),
|
|
189
|
+
path: join(dirPath, entry.name),
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import BaseCommand from '../../../cli/base-command.js';
|
|
2
|
+
/**
|
|
3
|
+
* Clear method runtime folders, output folders, IDE method folders, and update configurations.
|
|
4
|
+
*/
|
|
5
|
+
export default class ClearCommand extends BaseCommand {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
output: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
template: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
help: import("@oclif/core/interfaces").BooleanFlag<void>;
|
|
15
|
+
quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
};
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Clean runtime output artifacts from _output/ at project root.
|
|
20
|
+
* Handles temp files, cache files, log rotation, and archive cleanup.
|
|
21
|
+
*
|
|
22
|
+
* @param targetDir - Project root directory
|
|
23
|
+
* @param flags - Command flags (dry-run, force)
|
|
24
|
+
* @param flags.force - Skip confirmation prompt
|
|
25
|
+
*/
|
|
26
|
+
private cleanRuntimeOutput;
|
|
27
|
+
/**
|
|
28
|
+
* Clean up backup files created during settings reconstruction.
|
|
29
|
+
*
|
|
30
|
+
* @param targetDir - Project root directory
|
|
31
|
+
*/
|
|
32
|
+
private cleanupBackupFiles;
|
|
33
|
+
/**
|
|
34
|
+
* Clean up git exclude entries and prune stale entries.
|
|
35
|
+
*
|
|
36
|
+
* @param targetDir - Project root directory
|
|
37
|
+
* @returns True if git exclude was updated
|
|
38
|
+
*/
|
|
39
|
+
private cleanupGitExclude;
|
|
40
|
+
private countCoreIdeManagedFiles;
|
|
41
|
+
private countMatchingManagedFiles;
|
|
42
|
+
/**
|
|
43
|
+
* Display a list of folders to remove.
|
|
44
|
+
*
|
|
45
|
+
* @param targetDir - Base directory for relative path display
|
|
46
|
+
* @param folders - Array of folder paths
|
|
47
|
+
* @param label - Label for the folder type
|
|
48
|
+
*/
|
|
49
|
+
private displayFolderList;
|
|
50
|
+
/**
|
|
51
|
+
* Display all pending changes before confirmation.
|
|
52
|
+
*
|
|
53
|
+
* @param targetDir - Project root directory
|
|
54
|
+
* @param folders - Discovered folders and methods to remove
|
|
55
|
+
* @param folders.methodRuntimeFolders - Method runtime folders to remove
|
|
56
|
+
* @param folders.outputMethodFolders - Output method folders to remove
|
|
57
|
+
* @param folders.ideMethodFolders - IDE method folders to remove
|
|
58
|
+
* @param folders.coreRuntimeFolders - Core runtime folders to remove
|
|
59
|
+
* @param folders.coreIdeFilesToRemove - Number of core IDE files to remove
|
|
60
|
+
* @param folders.methodsToRemove - Method names being removed
|
|
61
|
+
*/
|
|
62
|
+
private displayPendingChanges;
|
|
63
|
+
/**
|
|
64
|
+
* Delete all discovered folders in parallel.
|
|
65
|
+
*
|
|
66
|
+
* @param methodRuntimeFolders - Method runtime folders to delete
|
|
67
|
+
* @param outputMethodFolders - Output method folders to delete
|
|
68
|
+
* @param ideMethodFolders - IDE method folders to delete
|
|
69
|
+
* @returns Count of successfully deleted folders by type
|
|
70
|
+
*/
|
|
71
|
+
private executeFolderDeletion;
|
|
72
|
+
/**
|
|
73
|
+
* Extract method names from runtime folder names (e.g., _gsd -> gsd).
|
|
74
|
+
*
|
|
75
|
+
* @param methodRuntimeFolders - Array of runtime folder paths
|
|
76
|
+
* @returns Array of method names
|
|
77
|
+
*/
|
|
78
|
+
private extractMethodNames;
|
|
79
|
+
private findCoreRuntimeFolders;
|
|
80
|
+
/**
|
|
81
|
+
* Find all IDE method folders by scanning subdirectories of each IDE root
|
|
82
|
+
* for children matching installed method names.
|
|
83
|
+
*
|
|
84
|
+
* For example, finds .claude/commands/cc-native/, .claude/skills/cc-native/,
|
|
85
|
+
* .windsurf/workflows/cc-native/ — without hardcoding which subdirectories exist.
|
|
86
|
+
*
|
|
87
|
+
* @param targetDir - Directory to search in
|
|
88
|
+
* @param template - Optional template/method name to filter by
|
|
89
|
+
* @returns Array of IDE method folder paths
|
|
90
|
+
*/
|
|
91
|
+
private findIdeMethodFolders;
|
|
92
|
+
/**
|
|
93
|
+
* Find all method runtime folders in the target directory.
|
|
94
|
+
* Looks for .aiwcli/_{method}/ structure (e.g., .aiwcli/_gsd/, .aiwcli/_bmad/).
|
|
95
|
+
*
|
|
96
|
+
* @param targetDir - Directory to search in
|
|
97
|
+
* @param template - Optional template/method name to filter by (e.g., 'bmad', 'gsd')
|
|
98
|
+
* @returns Array of method runtime folder paths
|
|
99
|
+
*/
|
|
100
|
+
private findMethodRuntimeFolders;
|
|
101
|
+
/**
|
|
102
|
+
* Find all method output folders in the target directory.
|
|
103
|
+
* Looks for _output/{method}/ structure at project root.
|
|
104
|
+
*
|
|
105
|
+
* @param targetDir - Directory to search in
|
|
106
|
+
* @param template - Optional template/method name to filter by (e.g., 'bmad', 'gsd')
|
|
107
|
+
* @returns Array of output folder paths
|
|
108
|
+
*/
|
|
109
|
+
private findOutputFolders;
|
|
110
|
+
private getCoreTemplatePathSafe;
|
|
111
|
+
/**
|
|
112
|
+
* Perform all post-deletion cleanup: empty dir removal, git exclude, settings, IDE folders.
|
|
113
|
+
*
|
|
114
|
+
* @param targetDir - Project root directory
|
|
115
|
+
* @param methodsToRemove - Method names being removed
|
|
116
|
+
* @returns Cleanup result state
|
|
117
|
+
*/
|
|
118
|
+
private performPostDeleteCleanup;
|
|
119
|
+
/**
|
|
120
|
+
* Reconstruct IDE settings after method removal.
|
|
121
|
+
*
|
|
122
|
+
* @param targetDir - Project root directory
|
|
123
|
+
* @param methodsToRemove - Methods being removed
|
|
124
|
+
* @returns Which IDE settings were updated
|
|
125
|
+
*/
|
|
126
|
+
private reconstructSettingsAfterRemoval;
|
|
127
|
+
private removeCoreIdeContent;
|
|
128
|
+
/**
|
|
129
|
+
* Report the results of a clear operation.
|
|
130
|
+
*
|
|
131
|
+
* @param deleteCounts - Counts of deleted folders by type
|
|
132
|
+
* @param deleteCounts.deletedMethodRuntime - Number of method runtime folders deleted
|
|
133
|
+
* @param deleteCounts.deletedOutput - Number of output folders deleted
|
|
134
|
+
* @param deleteCounts.deletedIde - Number of IDE method folders deleted
|
|
135
|
+
* @param deleteCounts.deletedCoreRuntime - Number of core runtime folders deleted
|
|
136
|
+
* @param cleanup - Cleanup operation results
|
|
137
|
+
* @param cleanup.gitExcludeUpdated - Whether git exclude was updated
|
|
138
|
+
* @param cleanup.removedOutputDir - Whether _output dir was removed
|
|
139
|
+
* @param cleanup.removedAiwcliContainer - Whether .aiwcli dir was removed
|
|
140
|
+
* @param cleanup.removedClaudeDir - Whether .claude dir was removed
|
|
141
|
+
* @param cleanup.removedCodexDir - Whether .codex dir was removed
|
|
142
|
+
* @param cleanup.removedWindsurfDir - Whether .windsurf dir was removed
|
|
143
|
+
* @param cleanup.removedCoreIdeFiles - Number of core IDE files removed
|
|
144
|
+
* @param cleanup.updatedClaudeSettings - Whether Claude settings were updated
|
|
145
|
+
* @param cleanup.updatedWindsurfSettings - Whether Windsurf settings were updated
|
|
146
|
+
*/
|
|
147
|
+
private reportClearResults;
|
|
148
|
+
private resolveMethodsToRemove;
|
|
149
|
+
private stripAiwSettingsForFullClear;
|
|
150
|
+
/**
|
|
151
|
+
* Try to remove an IDE folder if it should be deleted (empty settings + empty subfolders).
|
|
152
|
+
*
|
|
153
|
+
* @param targetDir - Project root directory
|
|
154
|
+
* @param ideFolder - IDE folder configuration
|
|
155
|
+
* @param ideFolder.root - Root folder name (e.g., '.claude')
|
|
156
|
+
* @param ideFolder.settingsFile - Settings file name (e.g., 'settings.json')
|
|
157
|
+
* @returns True if the folder was removed
|
|
158
|
+
*/
|
|
159
|
+
private tryRemoveIdeFolder;
|
|
160
|
+
}
|