claude-code-workflow 6.3.18 → 6.3.19
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/.claude/CLAUDE.md +8 -5
- package/.claude/agents/action-planning-agent.md +26 -2
- package/.claude/agents/code-developer.md +132 -43
- package/.claude/agents/debug-explore-agent.md +434 -0
- package/.claude/agents/test-fix-agent.md +14 -0
- package/.claude/commands/issue/discover.md +41 -0
- package/.claude/commands/issue/execute.md +200 -19
- package/.claude/commands/issue/new.md +1 -1
- package/.claude/commands/issue/plan.md +6 -1
- package/.claude/commands/issue/queue.md +94 -39
- package/.claude/commands/memory/swagger-docs.md +773 -0
- package/.claude/commands/workflow/brainstorm/auto-parallel.md +21 -21
- package/.claude/commands/workflow/execute.md +54 -34
- package/.claude/commands/workflow/lite-execute.md +48 -164
- package/.claude/commands/workflow/lite-fix.md +4 -4
- package/.claude/commands/workflow/lite-plan.md +5 -5
- package/.claude/commands/workflow/plan.md +27 -27
- package/.claude/commands/workflow/review.md +42 -17
- package/.claude/commands/workflow/tdd-plan.md +25 -25
- package/.claude/commands/workflow/test-fix-gen.md +10 -10
- package/.claude/commands/workflow/test-gen.md +14 -14
- package/.claude/commands/workflow/ui-design/explore-auto.md +21 -21
- package/.claude/commands/workflow/ui-design/imitate-auto.md +24 -24
- package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +693 -0
- package/.claude/skills/ccw/SKILL.md +462 -0
- package/.claude/skills/ccw/index/command-capabilities.json +127 -0
- package/.claude/skills/ccw/index/intent-rules.json +136 -0
- package/.claude/skills/ccw/index/workflow-chains.json +451 -0
- package/.claude/skills/ccw/phases/actions/bugfix.md +218 -0
- package/.claude/skills/ccw/phases/actions/coupled.md +194 -0
- package/.claude/skills/ccw/phases/actions/docs.md +93 -0
- package/.claude/skills/ccw/phases/actions/full.md +154 -0
- package/.claude/skills/ccw/phases/actions/issue.md +201 -0
- package/.claude/skills/ccw/phases/actions/rapid.md +104 -0
- package/.claude/skills/ccw/phases/actions/review-fix.md +84 -0
- package/.claude/skills/ccw/phases/actions/tdd.md +66 -0
- package/.claude/skills/ccw/phases/actions/ui.md +79 -0
- package/.claude/skills/ccw/phases/orchestrator.md +435 -0
- package/.claude/skills/ccw/specs/intent-classification.md +336 -0
- package/.claude/skills/ccw-help/SKILL.md +177 -0
- package/.claude/skills/ccw-help/index/all-agents.json +82 -0
- package/.claude/skills/{command-guide → ccw-help}/index/all-commands.json +183 -73
- package/.claude/skills/{command-guide → ccw-help}/index/by-category.json +187 -73
- package/.claude/skills/{command-guide → ccw-help}/index/by-use-case.json +295 -185
- package/.claude/skills/{command-guide → ccw-help}/index/command-relationships.json +19 -166
- package/.claude/skills/{command-guide → ccw-help}/index/essential-commands.json +10 -10
- package/.claude/skills/ccw-help/scripts/analyze_commands.py +337 -0
- package/.claude/skills/code-reviewer/README.md +340 -0
- package/.claude/skills/code-reviewer/SKILL.md +308 -0
- package/.claude/skills/code-reviewer/phases/01-code-discovery.md +246 -0
- package/.claude/skills/code-reviewer/phases/02-security-analysis.md +442 -0
- package/.claude/skills/code-reviewer/phases/03-best-practices-review.md +36 -0
- package/.claude/skills/code-reviewer/phases/04-report-generation.md +278 -0
- package/.claude/skills/code-reviewer/specs/best-practices-requirements.md +346 -0
- package/.claude/skills/code-reviewer/specs/quality-standards.md +252 -0
- package/.claude/skills/code-reviewer/specs/security-requirements.md +243 -0
- package/.claude/skills/code-reviewer/templates/best-practice-finding.md +234 -0
- package/.claude/skills/code-reviewer/templates/report-template.md +316 -0
- package/.claude/skills/code-reviewer/templates/security-finding.md +161 -0
- package/.claude/skills/skill-generator/SKILL.md +187 -0
- package/.claude/skills/skill-generator/phases/01-requirements-discovery.md +239 -0
- package/.claude/skills/skill-generator/phases/02-structure-generation.md +207 -0
- package/.claude/skills/skill-generator/phases/03-phase-generation.md +802 -0
- package/.claude/skills/skill-generator/phases/04-specs-templates.md +328 -0
- package/.claude/skills/skill-generator/phases/05-validation.md +334 -0
- package/.claude/skills/skill-generator/specs/cli-integration.md +448 -0
- package/.claude/skills/skill-generator/specs/execution-modes.md +396 -0
- package/.claude/skills/skill-generator/specs/scripting-integration.md +265 -0
- package/.claude/skills/skill-generator/specs/skill-requirements.md +466 -0
- package/.claude/skills/skill-generator/templates/autonomous-action.md +517 -0
- package/.claude/skills/skill-generator/templates/autonomous-orchestrator.md +276 -0
- package/.claude/skills/skill-generator/templates/code-analysis-action.md +503 -0
- package/.claude/skills/skill-generator/templates/llm-action.md +355 -0
- package/.claude/skills/skill-generator/templates/script-bash.md +277 -0
- package/.claude/skills/skill-generator/templates/script-python.md +198 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +441 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +156 -0
- package/.claude/workflows/chinese-response.md +15 -28
- package/.claude/workflows/cli-templates/prompts/documentation/swagger-api.txt +266 -0
- package/.claude/workflows/cli-tools-usage.md +221 -177
- package/.claude/workflows/windows-platform.md +13 -10
- package/.codex/prompts/issue-execute.md +305 -82
- package/.codex/prompts/issue-queue.md +22 -0
- package/.codex/prompts/lite-execute.md +36 -11
- package/README.md +309 -305
- package/ccw/README.md +10 -4
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +4 -1
- package/ccw/dist/cli.js.map +1 -1
- package/ccw/dist/commands/cli.d.ts.map +1 -1
- package/ccw/dist/commands/cli.js +131 -34
- package/ccw/dist/commands/cli.js.map +1 -1
- package/ccw/dist/commands/issue.d.ts +152 -0
- package/ccw/dist/commands/issue.d.ts.map +1 -1
- package/ccw/dist/commands/issue.js +550 -85
- package/ccw/dist/commands/issue.js.map +1 -1
- package/ccw/dist/commands/serve.d.ts +1 -0
- package/ccw/dist/commands/serve.d.ts.map +1 -1
- package/ccw/dist/commands/serve.js +12 -5
- package/ccw/dist/commands/serve.js.map +1 -1
- package/ccw/dist/commands/stop.d.ts.map +1 -1
- package/ccw/dist/commands/stop.js +29 -5
- package/ccw/dist/commands/stop.js.map +1 -1
- package/ccw/dist/commands/tool.d.ts.map +1 -1
- package/ccw/dist/commands/tool.js +19 -2
- package/ccw/dist/commands/tool.js.map +1 -1
- package/ccw/dist/commands/view.d.ts +1 -0
- package/ccw/dist/commands/view.d.ts.map +1 -1
- package/ccw/dist/commands/view.js +10 -3
- package/ccw/dist/commands/view.js.map +1 -1
- package/ccw/dist/config/cli-settings-manager.d.ts +86 -0
- package/ccw/dist/config/cli-settings-manager.d.ts.map +1 -0
- package/ccw/dist/config/cli-settings-manager.js +392 -0
- package/ccw/dist/config/cli-settings-manager.js.map +1 -0
- package/ccw/dist/config/litellm-api-config-manager.d.ts +71 -5
- package/ccw/dist/config/litellm-api-config-manager.d.ts.map +1 -1
- package/ccw/dist/config/litellm-api-config-manager.js +290 -20
- package/ccw/dist/config/litellm-api-config-manager.js.map +1 -1
- package/ccw/dist/core/auth/csrf-manager.d.ts +18 -0
- package/ccw/dist/core/auth/csrf-manager.d.ts.map +1 -0
- package/ccw/dist/core/auth/csrf-manager.js +80 -0
- package/ccw/dist/core/auth/csrf-manager.js.map +1 -0
- package/ccw/dist/core/auth/csrf-middleware.d.ts +8 -0
- package/ccw/dist/core/auth/csrf-middleware.d.ts.map +1 -0
- package/ccw/dist/core/auth/csrf-middleware.js +141 -0
- package/ccw/dist/core/auth/csrf-middleware.js.map +1 -0
- package/ccw/dist/core/auth/middleware.d.ts +15 -0
- package/ccw/dist/core/auth/middleware.d.ts.map +1 -0
- package/ccw/dist/core/auth/middleware.js +76 -0
- package/ccw/dist/core/auth/middleware.js.map +1 -0
- package/ccw/dist/core/auth/token-manager.d.ts +41 -0
- package/ccw/dist/core/auth/token-manager.d.ts.map +1 -0
- package/ccw/dist/core/auth/token-manager.js +171 -0
- package/ccw/dist/core/auth/token-manager.js.map +1 -0
- package/ccw/dist/core/cache-manager.d.ts +6 -6
- package/ccw/dist/core/cache-manager.d.ts.map +1 -1
- package/ccw/dist/core/cache-manager.js +70 -48
- package/ccw/dist/core/cache-manager.js.map +1 -1
- package/ccw/dist/core/claude-freshness.d.ts.map +1 -1
- package/ccw/dist/core/claude-freshness.js +23 -3
- package/ccw/dist/core/claude-freshness.js.map +1 -1
- package/ccw/dist/core/core-memory-store.d.ts.map +1 -1
- package/ccw/dist/core/core-memory-store.js +2 -1
- package/ccw/dist/core/core-memory-store.js.map +1 -1
- package/ccw/dist/core/cors.d.ts +3 -0
- package/ccw/dist/core/cors.d.ts.map +1 -0
- package/ccw/dist/core/cors.js +10 -0
- package/ccw/dist/core/cors.js.map +1 -0
- package/ccw/dist/core/dashboard-generator-patch.js +0 -1
- package/ccw/dist/core/dashboard-generator-patch.js.map +1 -1
- package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
- package/ccw/dist/core/dashboard-generator.js +417 -416
- package/ccw/dist/core/dashboard-generator.js.map +1 -1
- package/ccw/dist/core/data-aggregator.js +2 -2
- package/ccw/dist/core/data-aggregator.js.map +1 -1
- package/ccw/dist/core/lite-scanner.d.ts +1 -1
- package/ccw/dist/core/lite-scanner.d.ts.map +1 -1
- package/ccw/dist/core/lite-scanner.js +130 -127
- package/ccw/dist/core/lite-scanner.js.map +1 -1
- package/ccw/dist/core/routes/auth-routes.d.ts +12 -0
- package/ccw/dist/core/routes/auth-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/auth-routes.js +80 -0
- package/ccw/dist/core/routes/auth-routes.js.map +1 -0
- package/ccw/dist/core/routes/ccw-routes.d.ts +1 -14
- package/ccw/dist/core/routes/ccw-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/ccw-routes.js +9 -4
- package/ccw/dist/core/routes/ccw-routes.js.map +1 -1
- package/ccw/dist/core/routes/claude-routes.d.ts +1 -14
- package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/claude-routes.js +98 -39
- package/ccw/dist/core/routes/claude-routes.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts +14 -12
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +122 -43
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/cli-settings-routes.d.ts +11 -0
- package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/cli-settings-routes.js +204 -0
- package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -0
- package/ccw/dist/core/routes/codexlens/config-handlers.d.ts +6 -0
- package/ccw/dist/core/routes/codexlens/config-handlers.d.ts.map +1 -0
- package/ccw/dist/core/routes/codexlens/config-handlers.js +1195 -0
- package/ccw/dist/core/routes/codexlens/config-handlers.js.map +1 -0
- package/ccw/dist/core/routes/codexlens/index-handlers.d.ts +10 -0
- package/ccw/dist/core/routes/codexlens/index-handlers.d.ts.map +1 -0
- package/ccw/dist/core/routes/codexlens/index-handlers.js +322 -0
- package/ccw/dist/core/routes/codexlens/index-handlers.js.map +1 -0
- package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts +6 -0
- package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -0
- package/ccw/dist/core/routes/codexlens/semantic-handlers.js +865 -0
- package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -0
- package/ccw/dist/core/routes/codexlens/utils.d.ts +23 -0
- package/ccw/dist/core/routes/codexlens/utils.d.ts.map +1 -0
- package/ccw/dist/core/routes/codexlens/utils.js +85 -0
- package/ccw/dist/core/routes/codexlens/utils.js.map +1 -0
- package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts +13 -0
- package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts.map +1 -0
- package/ccw/dist/core/routes/codexlens/watcher-handlers.js +235 -0
- package/ccw/dist/core/routes/codexlens/watcher-handlers.js.map +1 -0
- package/ccw/dist/core/routes/codexlens-routes.d.ts +2 -11
- package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/codexlens-routes.js +10 -981
- package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
- package/ccw/dist/core/routes/discovery-routes.d.ts +1 -35
- package/ccw/dist/core/routes/discovery-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/discovery-routes.js +25 -0
- package/ccw/dist/core/routes/discovery-routes.js.map +1 -1
- package/ccw/dist/core/routes/files-routes.d.ts +1 -14
- package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/files-routes.js +57 -14
- package/ccw/dist/core/routes/files-routes.js.map +1 -1
- package/ccw/dist/core/routes/graph-routes.d.ts +1 -14
- package/ccw/dist/core/routes/graph-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/graph-routes.js +36 -37
- package/ccw/dist/core/routes/graph-routes.js.map +1 -1
- package/ccw/dist/core/routes/help-routes.d.ts +1 -14
- package/ccw/dist/core/routes/help-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/help-routes.js +5 -0
- package/ccw/dist/core/routes/help-routes.js.map +1 -1
- package/ccw/dist/core/routes/hooks-routes.d.ts +4 -14
- package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/hooks-routes.js +43 -21
- package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
- package/ccw/dist/core/routes/issue-routes.d.ts +1 -34
- package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/issue-routes.js +24 -0
- package/ccw/dist/core/routes/issue-routes.js.map +1 -1
- package/ccw/dist/core/routes/litellm-api-routes.d.ts +1 -14
- package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/litellm-api-routes.js +505 -48
- package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
- package/ccw/dist/core/routes/litellm-routes.d.ts +1 -14
- package/ccw/dist/core/routes/litellm-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/litellm-routes.js +28 -11
- package/ccw/dist/core/routes/litellm-routes.js.map +1 -1
- package/ccw/dist/core/routes/mcp-routes.d.ts +1 -14
- package/ccw/dist/core/routes/mcp-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/mcp-routes.js +99 -30
- package/ccw/dist/core/routes/mcp-routes.js.map +1 -1
- package/ccw/dist/core/routes/mcp-templates-db.d.ts.map +1 -1
- package/ccw/dist/core/routes/mcp-templates-db.js +30 -31
- package/ccw/dist/core/routes/mcp-templates-db.js.map +1 -1
- package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/memory-routes.js +74 -24
- package/ccw/dist/core/routes/memory-routes.js.map +1 -1
- package/ccw/dist/core/routes/nav-status-routes.d.ts +3 -0
- package/ccw/dist/core/routes/nav-status-routes.d.ts.map +1 -0
- package/ccw/dist/core/routes/nav-status-routes.js +217 -0
- package/ccw/dist/core/routes/nav-status-routes.js.map +1 -0
- package/ccw/dist/core/routes/rules-routes.d.ts +1 -14
- package/ccw/dist/core/routes/rules-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/rules-routes.js +481 -58
- package/ccw/dist/core/routes/rules-routes.js.map +1 -1
- package/ccw/dist/core/routes/session-routes.d.ts +1 -14
- package/ccw/dist/core/routes/session-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/session-routes.js +15 -3
- package/ccw/dist/core/routes/session-routes.js.map +1 -1
- package/ccw/dist/core/routes/skills-routes.d.ts +1 -14
- package/ccw/dist/core/routes/skills-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/skills-routes.js +394 -112
- package/ccw/dist/core/routes/skills-routes.js.map +1 -1
- package/ccw/dist/core/routes/status-routes.d.ts +1 -14
- package/ccw/dist/core/routes/status-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/status-routes.js +4 -0
- package/ccw/dist/core/routes/status-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.d.ts +4 -10
- package/ccw/dist/core/routes/system-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +6 -4
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/dist/core/routes/types.d.ts +19 -0
- package/ccw/dist/core/routes/types.d.ts.map +1 -0
- package/ccw/dist/core/routes/types.js +2 -0
- package/ccw/dist/core/routes/types.js.map +1 -0
- package/ccw/dist/core/server.d.ts.map +1 -1
- package/ccw/dist/core/server.js +201 -29
- package/ccw/dist/core/server.js.map +1 -1
- package/ccw/dist/core/services/api-key-tester.d.ts +31 -0
- package/ccw/dist/core/services/api-key-tester.d.ts.map +1 -0
- package/ccw/dist/core/services/api-key-tester.js +106 -0
- package/ccw/dist/core/services/api-key-tester.js.map +1 -0
- package/ccw/dist/core/services/health-check-service.d.ts +82 -0
- package/ccw/dist/core/services/health-check-service.d.ts.map +1 -0
- package/ccw/dist/core/services/health-check-service.js +271 -0
- package/ccw/dist/core/services/health-check-service.js.map +1 -0
- package/ccw/dist/core/websocket.d.ts +9 -7
- package/ccw/dist/core/websocket.d.ts.map +1 -1
- package/ccw/dist/core/websocket.js +9 -4
- package/ccw/dist/core/websocket.js.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.d.ts +152 -28
- package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
- package/ccw/dist/tools/claude-cli-tools.js +490 -100
- package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
- package/ccw/dist/tools/cli-config-manager.d.ts +24 -8
- package/ccw/dist/tools/cli-config-manager.d.ts.map +1 -1
- package/ccw/dist/tools/cli-config-manager.js +76 -156
- package/ccw/dist/tools/cli-config-manager.js.map +1 -1
- package/ccw/dist/tools/cli-executor-core.d.ts +85 -0
- package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -0
- package/ccw/dist/tools/cli-executor-core.js +1310 -0
- package/ccw/dist/tools/cli-executor-core.js.map +1 -0
- package/ccw/dist/tools/cli-executor-state.d.ts +241 -0
- package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -0
- package/ccw/dist/tools/cli-executor-state.js +392 -0
- package/ccw/dist/tools/cli-executor-state.js.map +1 -0
- package/ccw/dist/tools/cli-executor-utils.d.ts +36 -0
- package/ccw/dist/tools/cli-executor-utils.d.ts.map +1 -0
- package/ccw/dist/tools/cli-executor-utils.js +298 -0
- package/ccw/dist/tools/cli-executor-utils.js.map +1 -0
- package/ccw/dist/tools/cli-executor.d.ts +3 -377
- package/ccw/dist/tools/cli-executor.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor.js +3 -1884
- package/ccw/dist/tools/cli-executor.js.map +1 -1
- package/ccw/dist/tools/cli-history-store.d.ts +2 -0
- package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
- package/ccw/dist/tools/cli-history-store.js.map +1 -1
- package/ccw/dist/tools/cli-output-converter.d.ts +192 -0
- package/ccw/dist/tools/cli-output-converter.d.ts.map +1 -0
- package/ccw/dist/tools/cli-output-converter.js +1047 -0
- package/ccw/dist/tools/cli-output-converter.js.map +1 -0
- package/ccw/dist/tools/cli-prompt-builder.d.ts +113 -0
- package/ccw/dist/tools/cli-prompt-builder.d.ts.map +1 -0
- package/ccw/dist/tools/cli-prompt-builder.js +363 -0
- package/ccw/dist/tools/cli-prompt-builder.js.map +1 -0
- package/ccw/dist/tools/codex-lens.d.ts +15 -1
- package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
- package/ccw/dist/tools/codex-lens.js +289 -55
- package/ccw/dist/tools/codex-lens.js.map +1 -1
- package/ccw/dist/tools/detect-changed-modules.d.ts.map +1 -1
- package/ccw/dist/tools/detect-changed-modules.js +22 -4
- package/ccw/dist/tools/detect-changed-modules.js.map +1 -1
- package/ccw/dist/tools/index.d.ts.map +1 -1
- package/ccw/dist/tools/index.js +2 -0
- package/ccw/dist/tools/index.js.map +1 -1
- package/ccw/dist/tools/litellm-client.d.ts.map +1 -1
- package/ccw/dist/tools/litellm-client.js +10 -4
- package/ccw/dist/tools/litellm-client.js.map +1 -1
- package/ccw/dist/tools/litellm-executor.d.ts +2 -4
- package/ccw/dist/tools/litellm-executor.d.ts.map +1 -1
- package/ccw/dist/tools/litellm-executor.js +39 -8
- package/ccw/dist/tools/litellm-executor.js.map +1 -1
- package/ccw/dist/tools/native-session-discovery.d.ts +2 -0
- package/ccw/dist/tools/native-session-discovery.d.ts.map +1 -1
- package/ccw/dist/tools/native-session-discovery.js +197 -1
- package/ccw/dist/tools/native-session-discovery.js.map +1 -1
- package/ccw/dist/tools/session-manager.d.ts.map +1 -1
- package/ccw/dist/tools/session-manager.js +79 -0
- package/ccw/dist/tools/session-manager.js.map +1 -1
- package/ccw/dist/tools/skill-context-loader.d.ts +15 -0
- package/ccw/dist/tools/skill-context-loader.d.ts.map +1 -0
- package/ccw/dist/tools/skill-context-loader.js +198 -0
- package/ccw/dist/tools/skill-context-loader.js.map +1 -0
- package/ccw/dist/tools/smart-search.d.ts +8 -3
- package/ccw/dist/tools/smart-search.d.ts.map +1 -1
- package/ccw/dist/tools/smart-search.js +378 -75
- package/ccw/dist/tools/smart-search.js.map +1 -1
- package/ccw/dist/types/cli-settings.d.ts +86 -0
- package/ccw/dist/types/cli-settings.d.ts.map +1 -0
- package/ccw/dist/types/cli-settings.js +54 -0
- package/ccw/dist/types/cli-settings.js.map +1 -0
- package/ccw/dist/types/litellm-api-config.d.ts +40 -1
- package/ccw/dist/types/litellm-api-config.d.ts.map +1 -1
- package/ccw/dist/utils/exec-constants.d.ts +25 -0
- package/ccw/dist/utils/exec-constants.d.ts.map +1 -0
- package/ccw/dist/utils/exec-constants.js +25 -0
- package/ccw/dist/utils/exec-constants.js.map +1 -0
- package/ccw/dist/utils/path-resolver.d.ts +1 -0
- package/ccw/dist/utils/path-resolver.d.ts.map +1 -1
- package/ccw/dist/utils/path-resolver.js +48 -3
- package/ccw/dist/utils/path-resolver.js.map +1 -1
- package/ccw/dist/utils/path-validator.d.ts.map +1 -1
- package/ccw/dist/utils/path-validator.js +25 -6
- package/ccw/dist/utils/path-validator.js.map +1 -1
- package/ccw/dist/utils/python-utils.d.ts.map +1 -1
- package/ccw/dist/utils/python-utils.js +27 -7
- package/ccw/dist/utils/python-utils.js.map +1 -1
- package/ccw/dist/utils/shell-escape.d.ts +8 -0
- package/ccw/dist/utils/shell-escape.d.ts.map +1 -0
- package/ccw/dist/utils/shell-escape.js +24 -0
- package/ccw/dist/utils/shell-escape.js.map +1 -0
- package/ccw/dist/utils/uv-manager.d.ts +167 -0
- package/ccw/dist/utils/uv-manager.d.ts.map +1 -0
- package/ccw/dist/utils/uv-manager.js +644 -0
- package/ccw/dist/utils/uv-manager.js.map +1 -0
- package/ccw/src/cli.ts +4 -1
- package/ccw/src/commands/cli.ts +132 -34
- package/ccw/src/commands/issue.ts +605 -91
- package/ccw/src/commands/serve.ts +15 -5
- package/ccw/src/commands/stop.ts +32 -5
- package/ccw/src/commands/tool.ts +17 -2
- package/ccw/src/commands/view.ts +13 -3
- package/ccw/src/config/cli-settings-manager.ts +460 -0
- package/ccw/src/config/litellm-api-config-manager.ts +392 -57
- package/ccw/src/core/auth/csrf-manager.ts +104 -0
- package/ccw/src/core/auth/csrf-middleware.ts +159 -0
- package/ccw/src/core/auth/middleware.ts +94 -0
- package/ccw/src/core/auth/token-manager.ts +219 -0
- package/ccw/src/core/cache-manager.ts +64 -52
- package/ccw/src/core/claude-freshness.ts +26 -6
- package/ccw/src/core/core-memory-store.ts +2 -1
- package/ccw/src/core/cors.ts +10 -0
- package/ccw/src/core/dashboard-generator-patch.ts +47 -48
- package/ccw/src/core/dashboard-generator.ts +797 -744
- package/ccw/src/core/data-aggregator.ts +667 -667
- package/ccw/src/core/lite-scanner.ts +156 -140
- package/ccw/src/core/routes/auth-routes.ts +98 -0
- package/ccw/src/core/routes/ccw-routes.ts +10 -20
- package/ccw/src/core/routes/claude-routes.ts +101 -51
- package/ccw/src/core/routes/cli-routes.ts +152 -55
- package/ccw/src/core/routes/cli-settings-routes.ts +232 -0
- package/ccw/src/core/routes/codexlens/README.md +37 -0
- package/ccw/src/core/routes/codexlens/config-handlers.ts +1269 -0
- package/ccw/src/core/routes/codexlens/index-handlers.ts +354 -0
- package/ccw/src/core/routes/codexlens/semantic-handlers.ts +931 -0
- package/ccw/src/core/routes/codexlens/utils.ts +96 -0
- package/ccw/src/core/routes/codexlens/watcher-handlers.ts +265 -0
- package/ccw/src/core/routes/codexlens-routes.ts +11 -1044
- package/ccw/src/core/routes/discovery-routes.ts +1 -12
- package/ccw/src/core/routes/files-routes.ts +112 -40
- package/ccw/src/core/routes/graph-routes.ts +39 -46
- package/ccw/src/core/routes/help-routes.ts +2 -12
- package/ccw/src/core/routes/hooks-routes.ts +83 -44
- package/ccw/src/core/routes/issue-routes.ts +1 -12
- package/ccw/src/core/routes/litellm-api-routes.ts +566 -60
- package/ccw/src/core/routes/litellm-routes.ts +35 -27
- package/ccw/src/core/routes/mcp-routes.ts +157 -60
- package/ccw/src/core/routes/mcp-routes.ts.backup +549 -550
- package/ccw/src/core/routes/mcp-templates-db.ts +267 -268
- package/ccw/src/core/routes/memory-routes.ts +76 -22
- package/ccw/src/core/routes/nav-status-routes.ts +231 -0
- package/ccw/src/core/routes/rules-routes.ts +600 -81
- package/ccw/src/core/routes/session-routes.ts +28 -22
- package/ccw/src/core/routes/skills-routes.ts +452 -132
- package/ccw/src/core/routes/status-routes.ts +1 -12
- package/ccw/src/core/routes/system-routes.ts +15 -22
- package/ccw/src/core/routes/types.ts +25 -0
- package/ccw/src/core/server.ts +651 -468
- package/ccw/src/core/services/api-key-tester.ts +137 -0
- package/ccw/src/core/services/health-check-service.ts +340 -0
- package/ccw/src/core/websocket.ts +20 -12
- package/ccw/src/templates/dashboard-css/01-base.css +109 -0
- package/ccw/src/templates/dashboard-css/10-cli-status.css +202 -0
- package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +308 -0
- package/ccw/src/templates/dashboard-css/30-core-memory.css +20 -0
- package/ccw/src/templates/dashboard-css/31-api-settings.css +751 -14
- package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +230 -2
- package/ccw/src/templates/dashboard-js/api.js +5 -0
- package/ccw/src/templates/dashboard-js/components/cli-status.js +279 -107
- package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +262 -20
- package/ccw/src/templates/dashboard-js/components/hook-manager.js +105 -5
- package/ccw/src/templates/dashboard-js/components/mcp-manager.js +317 -0
- package/ccw/src/templates/dashboard-js/components/navigation.js +45 -0
- package/ccw/src/templates/dashboard-js/components/notifications.js +128 -0
- package/ccw/src/templates/dashboard-js/i18n.js +4438 -3983
- package/ccw/src/templates/dashboard-js/main.js +71 -0
- package/ccw/src/templates/dashboard-js/services.js +289 -0
- package/ccw/src/templates/dashboard-js/views/api-settings.js +5613 -3361
- package/ccw/src/templates/dashboard-js/views/claude-manager.js +1 -7
- package/ccw/src/templates/dashboard-js/views/cli-manager.js +581 -87
- package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +6091 -1965
- package/ccw/src/templates/dashboard-js/views/core-memory.js +129 -20
- package/ccw/src/templates/dashboard-js/views/hook-manager.js +17 -3
- package/ccw/src/templates/dashboard-js/views/mcp-manager.js +63 -0
- package/ccw/src/templates/dashboard-js/views/project-overview.js +182 -37
- package/ccw/src/templates/dashboard-js/views/rules-manager.js +26 -3
- package/ccw/src/templates/dashboard-js/views/skills-manager.js +2 -42
- package/ccw/src/templates/dashboard.html +6 -0
- package/ccw/src/tools/README.md +29 -0
- package/ccw/src/tools/claude-cli-tools.ts +640 -125
- package/ccw/src/tools/cli-config-manager.ts +102 -172
- package/ccw/src/tools/cli-executor-core.ts +1533 -0
- package/ccw/src/tools/cli-executor-state.ts +560 -0
- package/ccw/src/tools/cli-executor-utils.ts +349 -0
- package/ccw/src/tools/cli-executor.ts +3 -2309
- package/ccw/src/tools/cli-history-store.ts +2 -0
- package/ccw/src/tools/cli-output-converter.ts +1237 -0
- package/ccw/src/tools/cli-prompt-builder.ts +487 -0
- package/ccw/src/tools/codex-lens.ts +324 -59
- package/ccw/src/tools/detect-changed-modules.ts +24 -6
- package/ccw/src/tools/index.ts +2 -0
- package/ccw/src/tools/litellm-client.ts +10 -4
- package/ccw/src/tools/litellm-executor.ts +146 -114
- package/ccw/src/tools/native-session-discovery.ts +209 -1
- package/ccw/src/tools/session-manager.ts +88 -0
- package/ccw/src/tools/skill-context-loader.ts +213 -0
- package/ccw/src/tools/smart-search.ts +427 -76
- package/ccw/src/types/cli-settings.ts +137 -0
- package/ccw/src/types/litellm-api-config.ts +55 -1
- package/ccw/src/utils/exec-constants.ts +24 -0
- package/ccw/src/utils/path-resolver.ts +49 -3
- package/ccw/src/utils/path-validator.ts +28 -6
- package/ccw/src/utils/python-utils.ts +140 -121
- package/ccw/src/utils/shell-escape.ts +30 -0
- package/ccw/src/utils/uv-manager.ts +796 -0
- package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-312.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-312.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-312.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +270 -251
- package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +33 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-312.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-312.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-312.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-313.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/config/loader.py +343 -316
- package/ccw-litellm/src/ccw_litellm/config/models.py +162 -130
- package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-312.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-312.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-310.pyc +0 -0
- package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-312.pyc +0 -0
- package/codex-lens/pyproject.toml +43 -0
- package/codex-lens/src/codexlens/__pycache__/__init__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/__main__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/__main__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/config.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/config.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/entities.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/entities.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/env_config.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/env_config.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/env_config.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/errors.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/errors.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/cli/commands.py +4416 -2295
- package/codex-lens/src/codexlens/cli/embedding_manager.py +767 -14
- package/codex-lens/src/codexlens/cli/model_manager.py +676 -0
- package/codex-lens/src/codexlens/config.py +321 -12
- package/codex-lens/src/codexlens/entities.py +4 -1
- package/codex-lens/src/codexlens/env_config.py +298 -0
- package/codex-lens/src/codexlens/indexing/__init__.py +23 -1
- package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/indexing/__pycache__/embedding.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/indexing/embedding.py +582 -0
- package/codex-lens/src/codexlens/indexing/symbol_extractor.py +62 -28
- package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/factory.py +139 -10
- package/codex-lens/src/codexlens/parsers/treesitter_parser.py +487 -13
- package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/binary_searcher.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/graph_expander.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/binary_searcher.py +277 -0
- package/codex-lens/src/codexlens/search/chain_search.py +1642 -8
- package/codex-lens/src/codexlens/search/enrichment.py +21 -0
- package/codex-lens/src/codexlens/search/graph_expander.py +264 -0
- package/codex-lens/src/codexlens/search/hybrid_search.py +772 -37
- package/codex-lens/src/codexlens/search/ranking.py +347 -8
- package/codex-lens/src/codexlens/semantic/SPLADE_IMPLEMENTATION.md +225 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/reranker.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/ann_index.py +654 -0
- package/codex-lens/src/codexlens/semantic/factory.py +63 -3
- package/codex-lens/src/codexlens/semantic/gpu_support.py +19 -2
- package/codex-lens/src/codexlens/semantic/litellm_embedder.py +144 -144
- package/codex-lens/src/codexlens/semantic/reranker/__init__.py +25 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/litellm_reranker.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/reranker/api_reranker.py +403 -0
- package/codex-lens/src/codexlens/semantic/reranker/base.py +46 -0
- package/codex-lens/src/codexlens/semantic/reranker/factory.py +159 -0
- package/codex-lens/src/codexlens/semantic/reranker/fastembed_reranker.py +257 -0
- package/codex-lens/src/codexlens/semantic/reranker/legacy.py +91 -0
- package/codex-lens/src/codexlens/semantic/reranker/litellm_reranker.py +214 -0
- package/codex-lens/src/codexlens/semantic/reranker/onnx_reranker.py +268 -0
- package/codex-lens/src/codexlens/semantic/splade_encoder.py +567 -0
- package/codex-lens/src/codexlens/semantic/vector_store.py +472 -352
- package/codex-lens/src/codexlens/storage/__init__.py +3 -0
- package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/merkle_tree.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/dir_index.py +310 -12
- package/codex-lens/src/codexlens/storage/index_tree.py +194 -23
- package/codex-lens/src/codexlens/storage/merkle_tree.py +136 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_006_enhance_relationships.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_008_add_merkle_hashes.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_009_add_splade.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_010_add_multi_vector_chunks.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_006_enhance_relationships.py +37 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_007_add_graph_neighbors.py +47 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_008_add_merkle_hashes.py +81 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_009_add_splade.py +103 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_010_add_multi_vector_chunks.py +162 -0
- package/codex-lens/src/codexlens/storage/splade_index.py +578 -0
- package/codex-lens/src/codexlens/storage/sqlite_store.py +508 -184
- package/codex-lens/src/codexlens/storage/vector_meta_store.py +415 -0
- package/codex-lens/src/codexlens/watcher/__init__.py +17 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-310.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-312.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/watcher/events.py +82 -0
- package/codex-lens/src/codexlens/watcher/file_watcher.py +347 -0
- package/codex-lens/src/codexlens/watcher/incremental_indexer.py +369 -0
- package/codex-lens/src/codexlens/watcher/manager.py +255 -0
- package/package.json +4 -1
- package/.claude/commands/workflow/docs/analyze.md +0 -1467
- package/.claude/commands/workflow/docs/copyright.md +0 -1265
- package/.claude/skills/command-guide/SKILL.md +0 -388
- package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +0 -592
- package/.claude/skills/command-guide/guides/cli-tools-guide.md +0 -410
- package/.claude/skills/command-guide/guides/examples.md +0 -537
- package/.claude/skills/command-guide/guides/getting-started.md +0 -242
- package/.claude/skills/command-guide/guides/implementation-details.md +0 -1010
- package/.claude/skills/command-guide/guides/index-structure.md +0 -326
- package/.claude/skills/command-guide/guides/troubleshooting.md +0 -92
- package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +0 -316
- package/.claude/skills/command-guide/guides/workflow-patterns.md +0 -662
- package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +0 -855
- package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +0 -267
- package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +0 -182
- package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +0 -446
- package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +0 -558
- package/.claude/skills/command-guide/reference/agents/code-developer.md +0 -311
- package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +0 -308
- package/.claude/skills/command-guide/reference/agents/context-search-agent.md +0 -581
- package/.claude/skills/command-guide/reference/agents/doc-generator.md +0 -330
- package/.claude/skills/command-guide/reference/agents/memory-bridge.md +0 -94
- package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +0 -400
- package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +0 -344
- package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +0 -593
- package/.claude/skills/command-guide/reference/agents/universal-executor.md +0 -131
- package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +0 -440
- package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +0 -93
- package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +0 -687
- package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +0 -471
- package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +0 -386
- package/.claude/skills/command-guide/reference/commands/memory/docs.md +0 -616
- package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +0 -182
- package/.claude/skills/command-guide/reference/commands/memory/load.md +0 -240
- package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +0 -525
- package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +0 -396
- package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +0 -314
- package/.claude/skills/command-guide/reference/commands/memory/update-full.md +0 -332
- package/.claude/skills/command-guide/reference/commands/memory/update-related.md +0 -332
- package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +0 -517
- package/.claude/skills/command-guide/reference/commands/task/breakdown.md +0 -204
- package/.claude/skills/command-guide/reference/commands/task/create.md +0 -152
- package/.claude/skills/command-guide/reference/commands/task/execute.md +0 -270
- package/.claude/skills/command-guide/reference/commands/task/replan.md +0 -437
- package/.claude/skills/command-guide/reference/commands/version.md +0 -254
- package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +0 -447
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +0 -585
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +0 -452
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +0 -443
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +0 -220
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +0 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +0 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +0 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +0 -200
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +0 -398
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +0 -387
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +0 -221
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +0 -221
- package/.claude/skills/command-guide/reference/commands/workflow/execute.md +0 -465
- package/.claude/skills/command-guide/reference/commands/workflow/init.md +0 -164
- package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +0 -748
- package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +0 -664
- package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +0 -645
- package/.claude/skills/command-guide/reference/commands/workflow/plan.md +0 -551
- package/.claude/skills/command-guide/reference/commands/workflow/replan.md +0 -515
- package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +0 -606
- package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +0 -765
- package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +0 -776
- package/.claude/skills/command-guide/reference/commands/workflow/review.md +0 -298
- package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +0 -547
- package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +0 -114
- package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +0 -77
- package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +0 -257
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +0 -460
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +0 -400
- package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +0 -498
- package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +0 -699
- package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +0 -529
- package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +0 -766
- package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +0 -433
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +0 -487
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +0 -518
- package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +0 -309
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +0 -163
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +0 -232
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +0 -254
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +0 -1150
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +0 -652
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +0 -454
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +0 -678
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +0 -504
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +0 -745
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +0 -537
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +0 -788
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +0 -356
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +0 -773
- package/.claude/skills/command-guide/scripts/analyze_commands.py +0 -502
- package/.claude/skills/command-guide/scripts/update-index.sh +0 -130
- package/.claude/skills/command-guide/templates/issue-bug.md +0 -104
- package/.claude/skills/command-guide/templates/issue-diagnosis.md +0 -275
- package/.claude/skills/command-guide/templates/issue-feature.md +0 -97
- package/.claude/skills/command-guide/templates/issue-question.md +0 -141
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: execute
|
|
3
|
-
description: Execute queue with
|
|
4
|
-
argument-hint: ""
|
|
3
|
+
description: Execute queue with DAG-based parallel orchestration (one commit per solution)
|
|
4
|
+
argument-hint: "[--worktree [<existing-path>]] [--queue <queue-id>]"
|
|
5
5
|
allowed-tools: TodoWrite(*), Bash(*), Read(*), AskUserQuestion(*)
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -17,31 +17,51 @@ Minimal orchestrator that dispatches **solution IDs** to executors. Each executo
|
|
|
17
17
|
- `done <id>` → update solution completion status
|
|
18
18
|
- No race conditions: status changes only via `done`
|
|
19
19
|
- **Executor handles all tasks within a solution sequentially**
|
|
20
|
+
- **Worktree isolation**: Each executor can work in its own git worktree
|
|
20
21
|
|
|
21
22
|
## Usage
|
|
22
23
|
|
|
23
24
|
```bash
|
|
24
|
-
/issue:execute
|
|
25
|
+
/issue:execute # Execute active queue(s)
|
|
26
|
+
/issue:execute --queue QUE-xxx # Execute specific queue
|
|
27
|
+
/issue:execute --worktree # Use git worktrees for parallel isolation
|
|
28
|
+
/issue:execute --worktree --queue QUE-xxx
|
|
29
|
+
/issue:execute --worktree /path/to/existing/worktree # Resume in existing worktree
|
|
25
30
|
```
|
|
26
31
|
|
|
27
32
|
**Parallelism**: Determined automatically by task dependency DAG (no manual control)
|
|
28
33
|
**Executor & Dry-run**: Selected via interactive prompt (AskUserQuestion)
|
|
34
|
+
**Worktree**: Creates isolated git worktrees for each parallel executor
|
|
35
|
+
|
|
36
|
+
**⭐ Recommended Executor**: **Codex** - Best for long-running autonomous work (2hr timeout), supports background execution and full write access
|
|
37
|
+
|
|
38
|
+
**Worktree Options**:
|
|
39
|
+
- `--worktree` - Create a new worktree with timestamp-based name
|
|
40
|
+
- `--worktree <existing-path>` - Resume in an existing worktree (for recovery/continuation)
|
|
41
|
+
|
|
42
|
+
**Resume**: Use `git worktree list` to find existing worktrees from interrupted executions
|
|
29
43
|
|
|
30
44
|
## Execution Flow
|
|
31
45
|
|
|
32
46
|
```
|
|
47
|
+
Phase 0 (if --worktree): Setup Worktree Base
|
|
48
|
+
└─ Ensure .worktrees directory exists
|
|
49
|
+
|
|
33
50
|
Phase 1: Get DAG & User Selection
|
|
34
|
-
├─ ccw issue queue dag → { parallel_batches: [["S-1","S-2"], ["S-3"]] }
|
|
35
|
-
└─ AskUserQuestion → executor type (codex|gemini|agent), dry-run mode
|
|
51
|
+
├─ ccw issue queue dag [--queue QUE-xxx] → { parallel_batches: [["S-1","S-2"], ["S-3"]] }
|
|
52
|
+
└─ AskUserQuestion → executor type (codex|gemini|agent), dry-run mode, worktree mode
|
|
36
53
|
|
|
37
54
|
Phase 2: Dispatch Parallel Batch (DAG-driven)
|
|
38
55
|
├─ Parallelism determined by DAG (no manual limit)
|
|
39
56
|
├─ For each solution ID in batch (parallel - all at once):
|
|
57
|
+
│ ├─ (if worktree) Create isolated worktree: git worktree add
|
|
40
58
|
│ ├─ Executor calls: ccw issue detail <id> (READ-ONLY)
|
|
41
59
|
│ ├─ Executor gets FULL SOLUTION with all tasks
|
|
42
60
|
│ ├─ Executor implements all tasks sequentially (T1 → T2 → T3)
|
|
43
|
-
│ ├─ Executor tests +
|
|
44
|
-
│
|
|
61
|
+
│ ├─ Executor tests + verifies each task
|
|
62
|
+
│ ├─ Executor commits ONCE per solution (with formatted summary)
|
|
63
|
+
│ ├─ Executor calls: ccw issue done <id>
|
|
64
|
+
│ └─ (if worktree) Cleanup: merge branch, remove worktree
|
|
45
65
|
└─ Wait for batch completion
|
|
46
66
|
|
|
47
67
|
Phase 3: Next Batch
|
|
@@ -93,12 +113,22 @@ const answer = AskUserQuestion({
|
|
|
93
113
|
{ label: 'Execute (Recommended)', description: 'Run all ready solutions' },
|
|
94
114
|
{ label: 'Dry-run', description: 'Show DAG and batches without executing' }
|
|
95
115
|
]
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
question: 'Use git worktrees for parallel isolation?',
|
|
119
|
+
header: 'Worktree',
|
|
120
|
+
multiSelect: false,
|
|
121
|
+
options: [
|
|
122
|
+
{ label: 'Yes (Recommended for parallel)', description: 'Each executor works in isolated worktree branch' },
|
|
123
|
+
{ label: 'No', description: 'Work directly in current directory (serial only)' }
|
|
124
|
+
]
|
|
96
125
|
}
|
|
97
126
|
]
|
|
98
127
|
});
|
|
99
128
|
|
|
100
129
|
const executor = answer['Executor'].toLowerCase().split(' ')[0]; // codex|gemini|agent
|
|
101
130
|
const isDryRun = answer['Mode'].includes('Dry-run');
|
|
131
|
+
const useWorktree = answer['Worktree'].includes('Yes');
|
|
102
132
|
|
|
103
133
|
// Dry run mode
|
|
104
134
|
if (isDryRun) {
|
|
@@ -128,10 +158,24 @@ TodoWrite({
|
|
|
128
158
|
|
|
129
159
|
console.log(`\n### Executing Solutions (DAG batch 1): ${batch.join(', ')}`);
|
|
130
160
|
|
|
161
|
+
// Setup worktree base directory if needed (using absolute paths)
|
|
162
|
+
if (useWorktree) {
|
|
163
|
+
// Use absolute paths to avoid issues when running from subdirectories
|
|
164
|
+
const repoRoot = Bash('git rev-parse --show-toplevel').trim();
|
|
165
|
+
const worktreeBase = `${repoRoot}/.ccw/worktrees`;
|
|
166
|
+
Bash(`mkdir -p "${worktreeBase}"`);
|
|
167
|
+
// Prune stale worktrees from previous interrupted executions
|
|
168
|
+
Bash('git worktree prune');
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Parse existing worktree path from args if provided
|
|
172
|
+
// Example: --worktree /path/to/existing/worktree
|
|
173
|
+
const existingWorktree = args.worktree && typeof args.worktree === 'string' ? args.worktree : null;
|
|
174
|
+
|
|
131
175
|
// Launch ALL solutions in batch in parallel (DAG guarantees no conflicts)
|
|
132
176
|
const executions = batch.map(solutionId => {
|
|
133
177
|
updateTodo(solutionId, 'in_progress');
|
|
134
|
-
return dispatchExecutor(solutionId, executor);
|
|
178
|
+
return dispatchExecutor(solutionId, executor, useWorktree, existingWorktree);
|
|
135
179
|
});
|
|
136
180
|
|
|
137
181
|
await Promise.all(executions);
|
|
@@ -141,13 +185,126 @@ batch.forEach(id => updateTodo(id, 'completed'));
|
|
|
141
185
|
### Executor Dispatch
|
|
142
186
|
|
|
143
187
|
```javascript
|
|
144
|
-
function dispatchExecutor(solutionId, executorType) {
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
|
|
188
|
+
function dispatchExecutor(solutionId, executorType, useWorktree = false, existingWorktree = null) {
|
|
189
|
+
// Worktree setup commands (if enabled) - using absolute paths
|
|
190
|
+
// Supports both creating new worktrees and resuming in existing ones
|
|
191
|
+
const worktreeSetup = useWorktree ? `
|
|
192
|
+
### Step 0: Setup Isolated Worktree
|
|
193
|
+
\`\`\`bash
|
|
194
|
+
# Use absolute paths to avoid issues when running from subdirectories
|
|
195
|
+
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
196
|
+
WORKTREE_BASE="\${REPO_ROOT}/.ccw/worktrees"
|
|
197
|
+
|
|
198
|
+
# Check if existing worktree path was provided
|
|
199
|
+
EXISTING_WORKTREE="${existingWorktree || ''}"
|
|
200
|
+
|
|
201
|
+
if [[ -n "\${EXISTING_WORKTREE}" && -d "\${EXISTING_WORKTREE}" ]]; then
|
|
202
|
+
# Resume mode: Use existing worktree
|
|
203
|
+
WORKTREE_PATH="\${EXISTING_WORKTREE}"
|
|
204
|
+
WORKTREE_NAME=$(basename "\${WORKTREE_PATH}")
|
|
205
|
+
|
|
206
|
+
# Verify it's a valid git worktree
|
|
207
|
+
if ! git -C "\${WORKTREE_PATH}" rev-parse --is-inside-work-tree &>/dev/null; then
|
|
208
|
+
echo "Error: \${EXISTING_WORKTREE} is not a valid git worktree"
|
|
209
|
+
exit 1
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
echo "Resuming in existing worktree: \${WORKTREE_PATH}"
|
|
213
|
+
else
|
|
214
|
+
# Create mode: New worktree with timestamp
|
|
215
|
+
WORKTREE_NAME="exec-${solutionId}-$(date +%H%M%S)"
|
|
216
|
+
WORKTREE_PATH="\${WORKTREE_BASE}/\${WORKTREE_NAME}"
|
|
217
|
+
|
|
218
|
+
# Ensure worktree base exists
|
|
219
|
+
mkdir -p "\${WORKTREE_BASE}"
|
|
220
|
+
|
|
221
|
+
# Prune stale worktrees
|
|
222
|
+
git worktree prune
|
|
223
|
+
|
|
224
|
+
# Create worktree
|
|
225
|
+
git worktree add "\${WORKTREE_PATH}" -b "\${WORKTREE_NAME}"
|
|
226
|
+
|
|
227
|
+
echo "Created new worktree: \${WORKTREE_PATH}"
|
|
228
|
+
fi
|
|
229
|
+
|
|
230
|
+
# Setup cleanup trap for graceful failure handling
|
|
231
|
+
cleanup_worktree() {
|
|
232
|
+
echo "Cleaning up worktree due to interruption..."
|
|
233
|
+
cd "\${REPO_ROOT}" 2>/dev/null || true
|
|
234
|
+
git worktree remove "\${WORKTREE_PATH}" --force 2>/dev/null || true
|
|
235
|
+
echo "Worktree removed. Branch '\${WORKTREE_NAME}' kept for inspection."
|
|
236
|
+
}
|
|
237
|
+
trap cleanup_worktree EXIT INT TERM
|
|
238
|
+
|
|
239
|
+
cd "\${WORKTREE_PATH}"
|
|
240
|
+
\`\`\`
|
|
241
|
+
` : '';
|
|
242
|
+
|
|
243
|
+
const worktreeCleanup = useWorktree ? `
|
|
244
|
+
### Step 5: Worktree Completion (User Choice)
|
|
245
|
+
|
|
246
|
+
After all tasks complete, prompt for merge strategy:
|
|
247
|
+
|
|
248
|
+
\`\`\`javascript
|
|
249
|
+
AskUserQuestion({
|
|
250
|
+
questions: [{
|
|
251
|
+
question: "Solution ${solutionId} completed. What to do with worktree branch?",
|
|
252
|
+
header: "Merge",
|
|
253
|
+
multiSelect: false,
|
|
254
|
+
options: [
|
|
255
|
+
{ label: "Create PR (Recommended)", description: "Push branch and create pull request - safest for parallel execution" },
|
|
256
|
+
{ label: "Merge to main", description: "Merge branch and cleanup worktree (requires clean main)" },
|
|
257
|
+
{ label: "Keep branch", description: "Cleanup worktree, keep branch for manual handling" }
|
|
258
|
+
]
|
|
259
|
+
}]
|
|
260
|
+
})
|
|
261
|
+
\`\`\`
|
|
262
|
+
|
|
263
|
+
**Based on selection:**
|
|
264
|
+
\`\`\`bash
|
|
265
|
+
# Disable cleanup trap before intentional cleanup
|
|
266
|
+
trap - EXIT INT TERM
|
|
267
|
+
|
|
268
|
+
# Return to repo root (use REPO_ROOT from setup)
|
|
269
|
+
cd "\${REPO_ROOT}"
|
|
270
|
+
|
|
271
|
+
# Validate main repo state before merge
|
|
272
|
+
validate_main_clean() {
|
|
273
|
+
if [[ -n \$(git status --porcelain) ]]; then
|
|
274
|
+
echo "⚠️ Warning: Main repo has uncommitted changes."
|
|
275
|
+
echo "Cannot auto-merge. Falling back to 'Create PR' option."
|
|
276
|
+
return 1
|
|
277
|
+
fi
|
|
278
|
+
return 0
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
# Create PR (Recommended for parallel execution):
|
|
282
|
+
git push -u origin "\${WORKTREE_NAME}"
|
|
283
|
+
gh pr create --title "Solution ${solutionId}" --body "Issue queue execution"
|
|
284
|
+
git worktree remove "\${WORKTREE_PATH}"
|
|
285
|
+
|
|
286
|
+
# Merge to main (only if main is clean):
|
|
287
|
+
if validate_main_clean; then
|
|
288
|
+
git merge --no-ff "\${WORKTREE_NAME}" -m "Merge solution ${solutionId}"
|
|
289
|
+
git worktree remove "\${WORKTREE_PATH}" && git branch -d "\${WORKTREE_NAME}"
|
|
290
|
+
else
|
|
291
|
+
# Fallback to PR if main is dirty
|
|
292
|
+
git push -u origin "\${WORKTREE_NAME}"
|
|
293
|
+
gh pr create --title "Solution ${solutionId}" --body "Issue queue execution (main had uncommitted changes)"
|
|
294
|
+
git worktree remove "\${WORKTREE_PATH}"
|
|
295
|
+
fi
|
|
296
|
+
|
|
297
|
+
# Keep branch:
|
|
298
|
+
git worktree remove "\${WORKTREE_PATH}"
|
|
299
|
+
echo "Branch \${WORKTREE_NAME} kept for manual handling"
|
|
300
|
+
\`\`\`
|
|
301
|
+
|
|
302
|
+
**Parallel Execution Safety**: "Create PR" is the default and safest option for parallel executors, avoiding merge race conditions.
|
|
303
|
+
` : '';
|
|
304
|
+
|
|
148
305
|
const prompt = `
|
|
149
306
|
## Execute Solution ${solutionId}
|
|
150
|
-
|
|
307
|
+
${worktreeSetup}
|
|
151
308
|
### Step 1: Get Solution (read-only)
|
|
152
309
|
\`\`\`bash
|
|
153
310
|
ccw issue detail ${solutionId}
|
|
@@ -161,19 +318,41 @@ For each task:
|
|
|
161
318
|
1. Follow task.implementation steps
|
|
162
319
|
2. Run task.test commands
|
|
163
320
|
3. Verify task.acceptance criteria
|
|
164
|
-
|
|
321
|
+
(Do NOT commit after each task)
|
|
322
|
+
|
|
323
|
+
### Step 3: Commit Solution (Once)
|
|
324
|
+
After ALL tasks pass, commit once with formatted summary:
|
|
325
|
+
\`\`\`bash
|
|
326
|
+
git add <all-modified-files>
|
|
327
|
+
git commit -m "[type](scope): [solution.description]
|
|
328
|
+
|
|
329
|
+
## Solution Summary
|
|
330
|
+
- Solution-ID: ${solutionId}
|
|
331
|
+
- Tasks: T1, T2, ...
|
|
332
|
+
|
|
333
|
+
## Tasks Completed
|
|
334
|
+
- [T1] task1.title: action
|
|
335
|
+
- [T2] task2.title: action
|
|
336
|
+
|
|
337
|
+
## Files Modified
|
|
338
|
+
- file1.ts
|
|
339
|
+
- file2.ts
|
|
340
|
+
|
|
341
|
+
## Verification
|
|
342
|
+
- All tests passed
|
|
343
|
+
- All acceptance criteria verified"
|
|
344
|
+
\`\`\`
|
|
165
345
|
|
|
166
|
-
### Step
|
|
167
|
-
When ALL tasks in solution are done:
|
|
346
|
+
### Step 4: Report Completion
|
|
168
347
|
\`\`\`bash
|
|
169
|
-
ccw issue done ${solutionId} --result '{"summary": "...", "files_modified": [...], "tasks_completed": N}'
|
|
348
|
+
ccw issue done ${solutionId} --result '{"summary": "...", "files_modified": [...], "commit": {"hash": "...", "type": "feat"}, "tasks_completed": N}'
|
|
170
349
|
\`\`\`
|
|
171
350
|
|
|
172
351
|
If any task failed:
|
|
173
352
|
\`\`\`bash
|
|
174
|
-
ccw issue done ${solutionId} --fail --reason "
|
|
353
|
+
ccw issue done ${solutionId} --fail --reason '{"task_id": "TX", "error_type": "test_failure", "message": "..."}'
|
|
175
354
|
\`\`\`
|
|
176
|
-
`;
|
|
355
|
+
${worktreeCleanup}`;
|
|
177
356
|
|
|
178
357
|
if (executorType === 'codex') {
|
|
179
358
|
return Bash(
|
|
@@ -229,6 +408,7 @@ if (refreshedDag.ready_count > 0) {
|
|
|
229
408
|
│ │ detail S-1 │ │ detail S-2 │ │
|
|
230
409
|
│ │ → gets full solution │ │ → gets full solution │ │
|
|
231
410
|
│ │ [T1→T2→T3 sequential]│ │ [T1→T2 sequential] │ │
|
|
411
|
+
│ │ commit (1x solution) │ │ commit (1x solution) │ │
|
|
232
412
|
│ │ done S-1 │ │ done S-2 │ │
|
|
233
413
|
│ └──────────────────────┘ └──────────────────────┘ │
|
|
234
414
|
│ │
|
|
@@ -240,6 +420,7 @@ if (refreshedDag.ready_count > 0) {
|
|
|
240
420
|
**Why this works for parallel:**
|
|
241
421
|
- `detail <id>` is READ-ONLY → no race conditions
|
|
242
422
|
- Each executor handles **all tasks within a solution** sequentially
|
|
423
|
+
- **One commit per solution** with formatted summary (not per-task)
|
|
243
424
|
- `done <id>` updates only its own solution status
|
|
244
425
|
- `queue dag` recalculates ready solutions after each batch
|
|
245
426
|
- Solutions in same batch have NO file conflicts
|
|
@@ -304,6 +304,12 @@ Next: \`/issue:queue\` → \`/issue:execute\`
|
|
|
304
304
|
| User cancels selection | Skip issue, continue with others |
|
|
305
305
|
| File conflicts | Agent detects and suggests resolution order |
|
|
306
306
|
|
|
307
|
+
## Bash Compatibility
|
|
308
|
+
|
|
309
|
+
**Avoid**: `$(cmd)`, `$var`, `for` loops — will be escaped incorrectly
|
|
310
|
+
|
|
311
|
+
**Use**: Simple commands + `&&` chains, quote comma params `"pending,registered"`
|
|
312
|
+
|
|
307
313
|
## Quality Checklist
|
|
308
314
|
|
|
309
315
|
Before completing, verify:
|
|
@@ -319,6 +325,5 @@ Before completing, verify:
|
|
|
319
325
|
## Related Commands
|
|
320
326
|
|
|
321
327
|
- `/issue:queue` - Form execution queue from bound solutions
|
|
322
|
-
- `/issue:execute` - Execute queue with codex
|
|
323
328
|
- `ccw issue list` - List all issues
|
|
324
329
|
- `ccw issue status` - View issue and solution details
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: queue
|
|
3
3
|
description: Form execution queue from bound solutions using issue-queue-agent (solution-level)
|
|
4
|
-
argument-hint: "[--
|
|
4
|
+
argument-hint: "[--queues <n>] [--issue <id>]"
|
|
5
5
|
allowed-tools: TodoWrite(*), Task(*), Bash(*), Read(*), Write(*)
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -33,6 +33,7 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
|
|
|
33
33
|
| Get next item | `ccw issue next --json` | `Read('queues/*.json')` |
|
|
34
34
|
| Update status | `ccw issue update <id> --status ...` | Direct file edit |
|
|
35
35
|
| Sync from queue | `ccw issue update --from-queue` | Direct file edit |
|
|
36
|
+
| **Read solution (brief)** | `ccw issue solution <id> --brief` | `Read('solutions/*.jsonl')` |
|
|
36
37
|
|
|
37
38
|
**Output Options**:
|
|
38
39
|
- `--brief`: JSON with minimal fields (id, status, counts)
|
|
@@ -53,6 +54,7 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
|
|
|
53
54
|
|
|
54
55
|
# Examples
|
|
55
56
|
/issue:queue # Form NEW queue from all bound solutions
|
|
57
|
+
/issue:queue --queues 3 # Form 3 parallel queues (solutions distributed)
|
|
56
58
|
/issue:queue --issue GH-123 # Form queue for specific issue only
|
|
57
59
|
/issue:queue --append GH-124 # Append to active queue
|
|
58
60
|
/issue:queue --list # List all queues (history)
|
|
@@ -60,6 +62,7 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
|
|
|
60
62
|
/issue:queue --archive # Archive completed active queue
|
|
61
63
|
|
|
62
64
|
# Flags
|
|
65
|
+
--queues <n> Number of parallel queues (default: 1)
|
|
63
66
|
--issue <id> Form queue for specific issue only
|
|
64
67
|
--append <id> Append issue to active queue (don't create new)
|
|
65
68
|
|
|
@@ -73,45 +76,48 @@ ccw issue queue delete <queue-id> Delete queue from history
|
|
|
73
76
|
## Execution Process
|
|
74
77
|
|
|
75
78
|
```
|
|
76
|
-
Phase 1: Solution Loading
|
|
79
|
+
Phase 1: Solution Loading & Distribution
|
|
77
80
|
├─ Load issues.jsonl, filter by status='planned' + bound_solution_id
|
|
78
81
|
├─ Read solutions/{issue-id}.jsonl, find bound solution
|
|
79
82
|
├─ Extract files_touched from task modification_points
|
|
80
|
-
|
|
83
|
+
├─ Build solution objects array
|
|
84
|
+
└─ If --queues > 1: Partition solutions into N groups (minimize cross-group file conflicts)
|
|
81
85
|
|
|
82
86
|
Phase 2-4: Agent-Driven Queue Formation (issue-queue-agent)
|
|
83
|
-
├─
|
|
84
|
-
├─
|
|
87
|
+
├─ Generate N queue IDs (QUE-xxx-1, QUE-xxx-2, ...)
|
|
88
|
+
├─ If --queues == 1: Launch single issue-queue-agent
|
|
89
|
+
├─ If --queues > 1: Launch N issue-queue-agents IN PARALLEL
|
|
90
|
+
├─ Each agent performs:
|
|
85
91
|
│ ├─ Conflict analysis (5 types via Gemini CLI)
|
|
86
92
|
│ ├─ Build dependency DAG from conflicts
|
|
87
93
|
│ ├─ Calculate semantic priority per solution
|
|
88
94
|
│ └─ Assign execution groups (parallel/sequential)
|
|
89
|
-
└─
|
|
95
|
+
└─ Each agent writes: queue JSON + index update
|
|
90
96
|
|
|
91
97
|
Phase 5: Conflict Clarification (if needed)
|
|
92
|
-
├─
|
|
93
|
-
├─ If clarifications exist → AskUserQuestion
|
|
94
|
-
├─ Pass user decisions back to
|
|
95
|
-
└─
|
|
98
|
+
├─ Collect `clarifications` arrays from all agents
|
|
99
|
+
├─ If clarifications exist → AskUserQuestion (batched)
|
|
100
|
+
├─ Pass user decisions back to respective agents (resume)
|
|
101
|
+
└─ Agents update queues with resolved conflicts
|
|
96
102
|
|
|
97
103
|
Phase 6: Status Update & Summary
|
|
98
104
|
├─ Update issue statuses to 'queued'
|
|
99
|
-
└─ Display queue summary, next step: /issue:execute
|
|
105
|
+
└─ Display queue summary (N queues), next step: /issue:execute
|
|
100
106
|
```
|
|
101
107
|
|
|
102
108
|
## Implementation
|
|
103
109
|
|
|
104
|
-
### Phase 1: Solution Loading
|
|
110
|
+
### Phase 1: Solution Loading & Distribution
|
|
105
111
|
|
|
106
112
|
**Data Loading:**
|
|
107
|
-
-
|
|
113
|
+
- Use `ccw issue list --status planned --brief` to get planned issues with `bound_solution_id`
|
|
108
114
|
- If no planned issues found → display message, suggest `/issue:plan`
|
|
109
115
|
|
|
110
|
-
**Solution
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
116
|
+
**Solution Brief Loading** (for each planned issue):
|
|
117
|
+
```bash
|
|
118
|
+
ccw issue solution <issue-id> --brief
|
|
119
|
+
# Returns: [{ solution_id, is_bound, task_count, files_touched[] }]
|
|
120
|
+
```
|
|
115
121
|
|
|
116
122
|
**Build Solution Objects:**
|
|
117
123
|
```json
|
|
@@ -124,29 +130,39 @@ Phase 6: Status Update & Summary
|
|
|
124
130
|
}
|
|
125
131
|
```
|
|
126
132
|
|
|
127
|
-
**
|
|
133
|
+
**Multi-Queue Distribution** (if `--queues > 1`):
|
|
134
|
+
- Use `files_touched` from brief output for partitioning
|
|
135
|
+
- Group solutions with overlapping files into same queue
|
|
136
|
+
|
|
137
|
+
**Output:** Array of solution objects (or N arrays if multi-queue)
|
|
128
138
|
|
|
129
139
|
### Phase 2-4: Agent-Driven Queue Formation
|
|
130
140
|
|
|
131
|
-
**Generate Queue
|
|
141
|
+
**Generate Queue IDs** (command layer, pass to agent):
|
|
132
142
|
```javascript
|
|
133
|
-
const
|
|
143
|
+
const timestamp = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14);
|
|
144
|
+
const numQueues = args.queues || 1;
|
|
145
|
+
const queueIds = numQueues === 1
|
|
146
|
+
? [`QUE-${timestamp}`]
|
|
147
|
+
: Array.from({length: numQueues}, (_, i) => `QUE-${timestamp}-${i + 1}`);
|
|
134
148
|
```
|
|
135
149
|
|
|
136
|
-
**Agent Prompt
|
|
150
|
+
**Agent Prompt** (same for each queue, with assigned solutions):
|
|
137
151
|
```
|
|
138
152
|
## Order Solutions into Execution Queue
|
|
139
153
|
|
|
140
154
|
**Queue ID**: ${queueId}
|
|
141
155
|
**Solutions**: ${solutions.length} from ${issues.length} issues
|
|
142
156
|
**Project Root**: ${cwd}
|
|
157
|
+
**Queue Index**: ${queueIndex} of ${numQueues}
|
|
143
158
|
|
|
144
159
|
### Input
|
|
145
160
|
${JSON.stringify(solutions)}
|
|
161
|
+
// Each object: { issue_id, solution_id, task_count, files_touched[], priority }
|
|
146
162
|
|
|
147
163
|
### Workflow
|
|
148
164
|
|
|
149
|
-
Step 1: Build dependency graph from solutions (nodes=solutions, edges=file conflicts)
|
|
165
|
+
Step 1: Build dependency graph from solutions (nodes=solutions, edges=file conflicts via files_touched)
|
|
150
166
|
Step 2: Use Gemini CLI for conflict analysis (5 types: file, API, data, dependency, architecture)
|
|
151
167
|
Step 3: For high-severity conflicts without clear resolution → add to `clarifications`
|
|
152
168
|
Step 4: Calculate semantic priority (base from issue priority + task_count boost)
|
|
@@ -176,6 +192,7 @@ Step 6: Write queue JSON + update index
|
|
|
176
192
|
- Queue Item ID format: S-1, S-2, S-3, ...
|
|
177
193
|
- Use provided Queue ID (do NOT generate new)
|
|
178
194
|
- `clarifications` only present if high-severity unresolved conflicts exist
|
|
195
|
+
- Use `files_touched` from input (already extracted by orchestrator)
|
|
179
196
|
|
|
180
197
|
### Done Criteria
|
|
181
198
|
- [ ] Queue JSON written with all solutions ordered
|
|
@@ -185,39 +202,66 @@ Step 6: Write queue JSON + update index
|
|
|
185
202
|
- [ ] Return JSON matches required shape
|
|
186
203
|
```
|
|
187
204
|
|
|
188
|
-
**Launch
|
|
205
|
+
**Launch Agents** (parallel if multi-queue):
|
|
189
206
|
```javascript
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
207
|
+
const numQueues = args.queues || 1;
|
|
208
|
+
|
|
209
|
+
if (numQueues === 1) {
|
|
210
|
+
// Single queue: single agent call
|
|
211
|
+
const result = Task(
|
|
212
|
+
subagent_type="issue-queue-agent",
|
|
213
|
+
prompt=buildPrompt(queueIds[0], solutions),
|
|
214
|
+
description=`Order ${solutions.length} solutions`
|
|
215
|
+
);
|
|
216
|
+
} else {
|
|
217
|
+
// Multi-queue: parallel agent calls (single message with N Task calls)
|
|
218
|
+
const agentPromises = solutionGroups.map((group, i) =>
|
|
219
|
+
Task(
|
|
220
|
+
subagent_type="issue-queue-agent",
|
|
221
|
+
prompt=buildPrompt(queueIds[i], group, i + 1, numQueues),
|
|
222
|
+
description=`Queue ${i + 1}/${numQueues}: ${group.length} solutions`
|
|
223
|
+
)
|
|
224
|
+
);
|
|
225
|
+
// All agents launched in parallel via single message with multiple Task tool calls
|
|
226
|
+
}
|
|
195
227
|
```
|
|
196
228
|
|
|
229
|
+
**Multi-Queue Index Update:**
|
|
230
|
+
- First queue sets `active_queue_id`
|
|
231
|
+
- All queues added to `queues` array with `queue_group` field linking them
|
|
232
|
+
|
|
197
233
|
### Phase 5: Conflict Clarification
|
|
198
234
|
|
|
235
|
+
**Collect Agent Results** (multi-queue):
|
|
236
|
+
```javascript
|
|
237
|
+
// Collect clarifications from all agents
|
|
238
|
+
const allClarifications = results.flatMap((r, i) =>
|
|
239
|
+
(r.clarifications || []).map(c => ({ ...c, queue_id: queueIds[i], agent_id: agentIds[i] }))
|
|
240
|
+
);
|
|
241
|
+
```
|
|
242
|
+
|
|
199
243
|
**Check Agent Return:**
|
|
200
|
-
- Parse agent result JSON
|
|
201
|
-
- If `clarifications` array exists and non-empty → user decision required
|
|
244
|
+
- Parse agent result JSON (or all results if multi-queue)
|
|
245
|
+
- If any `clarifications` array exists and non-empty → user decision required
|
|
202
246
|
|
|
203
247
|
**Clarification Flow:**
|
|
204
248
|
```javascript
|
|
205
|
-
if (
|
|
206
|
-
for (const clarification of
|
|
249
|
+
if (allClarifications.length > 0) {
|
|
250
|
+
for (const clarification of allClarifications) {
|
|
207
251
|
// Present to user via AskUserQuestion
|
|
208
252
|
const answer = AskUserQuestion({
|
|
209
253
|
questions: [{
|
|
210
|
-
question: clarification.question
|
|
254
|
+
question: `[${clarification.queue_id}] ${clarification.question}`,
|
|
211
255
|
header: clarification.conflict_id,
|
|
212
256
|
options: clarification.options,
|
|
213
257
|
multiSelect: false
|
|
214
258
|
}]
|
|
215
259
|
});
|
|
216
260
|
|
|
217
|
-
// Resume agent with user decision
|
|
261
|
+
// Resume respective agent with user decision
|
|
218
262
|
Task(
|
|
219
263
|
subagent_type="issue-queue-agent",
|
|
220
|
-
resume=
|
|
264
|
+
resume=clarification.agent_id,
|
|
221
265
|
prompt=`Conflict ${clarification.conflict_id} resolved: ${answer.selected}`
|
|
222
266
|
);
|
|
223
267
|
}
|
|
@@ -282,9 +326,13 @@ ccw issue update <issue-id> --status queued
|
|
|
282
326
|
```json
|
|
283
327
|
{
|
|
284
328
|
"active_queue_id": "QUE-20251227-143000",
|
|
329
|
+
"active_queue_group": "QGR-20251227-143000",
|
|
285
330
|
"queues": [
|
|
286
331
|
{
|
|
287
|
-
"id": "QUE-20251227-143000",
|
|
332
|
+
"id": "QUE-20251227-143000-1",
|
|
333
|
+
"queue_group": "QGR-20251227-143000",
|
|
334
|
+
"queue_index": 1,
|
|
335
|
+
"total_queues": 3,
|
|
288
336
|
"status": "active",
|
|
289
337
|
"issue_ids": ["ISS-xxx", "ISS-yyy"],
|
|
290
338
|
"total_solutions": 3,
|
|
@@ -295,6 +343,12 @@ ccw issue update <issue-id> --status queued
|
|
|
295
343
|
}
|
|
296
344
|
```
|
|
297
345
|
|
|
346
|
+
**Multi-Queue Fields:**
|
|
347
|
+
- `queue_group`: Links queues created in same batch (format: `QGR-{timestamp}`)
|
|
348
|
+
- `queue_index`: Position in group (1-based)
|
|
349
|
+
- `total_queues`: Total queues in group
|
|
350
|
+
- `active_queue_group`: Current active group (for multi-queue execution)
|
|
351
|
+
|
|
298
352
|
**Note**: Queue file schema is produced by `issue-queue-agent`. See agent documentation for details.
|
|
299
353
|
## Error Handling
|
|
300
354
|
|
|
@@ -312,16 +366,17 @@ ccw issue update <issue-id> --status queued
|
|
|
312
366
|
Before completing, verify:
|
|
313
367
|
|
|
314
368
|
- [ ] All planned issues with `bound_solution_id` are included
|
|
315
|
-
- [ ] Queue JSON written to `queues/{queue-id}.json`
|
|
369
|
+
- [ ] Queue JSON written to `queues/{queue-id}.json` (N files if multi-queue)
|
|
316
370
|
- [ ] Index updated in `queues/index.json` with `active_queue_id`
|
|
371
|
+
- [ ] Multi-queue: All queues share same `queue_group`
|
|
317
372
|
- [ ] No circular dependencies in solution DAG
|
|
318
373
|
- [ ] All conflicts resolved (auto or via user clarification)
|
|
319
374
|
- [ ] Parallel groups have no file overlaps
|
|
375
|
+
- [ ] Cross-queue: No file overlaps between queues
|
|
320
376
|
- [ ] Issue statuses updated to `queued`
|
|
321
377
|
|
|
322
378
|
## Related Commands
|
|
323
379
|
|
|
324
|
-
- `/issue:plan` - Plan issues and bind solutions
|
|
325
380
|
- `/issue:execute` - Execute queue with codex
|
|
326
381
|
- `ccw issue queue list` - View current queue
|
|
327
382
|
- `ccw issue update --from-queue [queue-id]` - Sync issue statuses from queue
|