claude-code-workflow 6.3.43 → 6.3.46

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.
Files changed (78) hide show
  1. package/.claude/agents/tdd-developer.md +530 -0
  2. package/.claude/commands/ccw-coordinator.md +1042 -0
  3. package/.claude/commands/ccw.md +486 -0
  4. package/.claude/commands/issue/discover-by-prompt.md +5 -1
  5. package/.claude/commands/issue/discover.md +472 -468
  6. package/.claude/commands/issue/execute.md +580 -581
  7. package/.claude/commands/issue/new.md +417 -413
  8. package/.claude/commands/issue/plan.md +5 -1
  9. package/.claude/commands/issue/queue.md +445 -441
  10. package/.claude/commands/task/breakdown.md +207 -203
  11. package/.claude/commands/task/replan.md +440 -436
  12. package/.claude/commands/workflow/action-plan-verify.md +485 -447
  13. package/.claude/commands/workflow/brainstorm/artifacts.md +457 -453
  14. package/.claude/commands/workflow/brainstorm/auto-parallel.md +5 -1
  15. package/.claude/commands/workflow/brainstorm/synthesis.md +402 -398
  16. package/.claude/commands/workflow/clean.md +67 -35
  17. package/.claude/commands/workflow/debug-with-file.md +670 -666
  18. package/.claude/commands/workflow/debug.md +331 -327
  19. package/.claude/commands/workflow/develop-with-file.md +5 -1
  20. package/.claude/commands/workflow/execute.md +546 -498
  21. package/.claude/commands/workflow/lite-execute.md +44 -26
  22. package/.claude/commands/workflow/lite-fix.md +780 -730
  23. package/.claude/commands/workflow/lite-lite-lite.md +5 -1
  24. package/.claude/commands/workflow/lite-plan.md +87 -39
  25. package/.claude/commands/workflow/multi-cli-plan.md +572 -568
  26. package/.claude/commands/workflow/plan-verify.md +527 -0
  27. package/.claude/commands/workflow/plan.md +555 -551
  28. package/.claude/commands/workflow/replan.md +572 -515
  29. package/.claude/commands/workflow/review-fix.md +608 -610
  30. package/.claude/commands/workflow/session/complete.md +37 -14
  31. package/.claude/commands/workflow/session/solidify.md +303 -299
  32. package/.claude/commands/workflow/tdd-plan.md +630 -597
  33. package/.claude/commands/workflow/tdd-verify.md +391 -206
  34. package/.claude/commands/workflow/tools/conflict-resolution.md +24 -12
  35. package/.claude/commands/workflow/tools/task-generate-agent.md +583 -563
  36. package/.claude/commands/workflow/tools/task-generate-tdd.md +749 -517
  37. package/.claude/commands/workflow/ui-design/animation-extract.md +1154 -1150
  38. package/.claude/commands/workflow/ui-design/layout-extract.md +792 -788
  39. package/.claude/commands/workflow/ui-design/style-extract.md +777 -773
  40. package/.claude/skills/ccw-help/command.json +5 -5
  41. package/.claude/skills/ccw-help/scripts/analyze_commands.py +337 -337
  42. package/.claude/workflows/cli-templates/prompts/workflow-impl-plan-template.txt +1 -1
  43. package/ccw/dist/commands/issue.d.ts +4 -0
  44. package/ccw/dist/commands/issue.d.ts.map +1 -1
  45. package/ccw/dist/commands/issue.js +73 -6
  46. package/ccw/dist/commands/issue.js.map +1 -1
  47. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  48. package/ccw/dist/core/routes/cli-routes.js +32 -28
  49. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  50. package/ccw/dist/tools/claude-cli-tools.d.ts +10 -0
  51. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  52. package/ccw/dist/tools/claude-cli-tools.js +45 -0
  53. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  54. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  55. package/ccw/dist/tools/codex-lens.js +38 -11
  56. package/ccw/dist/tools/codex-lens.js.map +1 -1
  57. package/ccw/dist/tools/command-registry.d.ts +77 -0
  58. package/ccw/dist/tools/command-registry.d.ts.map +1 -0
  59. package/ccw/dist/tools/command-registry.js +265 -0
  60. package/ccw/dist/tools/command-registry.js.map +1 -0
  61. package/ccw/dist/tools/command-registry.test.d.ts +14 -0
  62. package/ccw/dist/tools/command-registry.test.d.ts.map +1 -0
  63. package/ccw/dist/tools/command-registry.test.js.map +1 -0
  64. package/ccw/dist/tools/index.d.ts +2 -0
  65. package/ccw/dist/tools/index.d.ts.map +1 -1
  66. package/ccw/dist/tools/index.js +2 -0
  67. package/ccw/dist/tools/index.js.map +1 -1
  68. package/ccw/src/commands/issue.ts +84 -6
  69. package/ccw/src/core/routes/cli-routes.ts +30 -25
  70. package/ccw/src/templates/dashboard-js/views/help.js +1 -1
  71. package/ccw/src/tools/claude-cli-tools.ts +50 -0
  72. package/ccw/src/tools/codex-lens.ts +40 -11
  73. package/ccw/src/tools/command-registry.test.ts +669 -0
  74. package/ccw/src/tools/command-registry.ts +308 -0
  75. package/ccw/src/tools/index.ts +4 -0
  76. package/package.json +1 -1
  77. package/.claude/skills/ccw/SKILL.md +0 -522
  78. package/.claude/skills/ccw/command.json +0 -641
@@ -43,7 +43,7 @@ Core requirements, objectives, technical approach summary (2-3 paragraphs max).
43
43
 
44
44
  **Quality Gates**:
45
45
  - concept-verify: ✅ Passed (0 ambiguities remaining) | ⏭️ Skipped (user decision) | ⏳ Pending
46
- - action-plan-verify: ⏳ Pending (recommended before /workflow:execute)
46
+ - plan-verify: ⏳ Pending (recommended before /workflow:execute)
47
47
 
48
48
  **Context Package Summary**:
49
49
  - **Focus Paths**: {list key directories from context-package.json}
@@ -168,6 +168,10 @@ interface IssueOptions {
168
168
  limit?: number;
169
169
  labels?: string;
170
170
  }
171
+ /**
172
+ * Clear cached project root (for testing)
173
+ */
174
+ export declare function clearProjectRootCache(): void;
171
175
  export declare function readIssues(): Issue[];
172
176
  export declare function writeIssues(issues: Issue[]): void;
173
177
  export declare function readSolutions(issueId: string): Solution[];
@@ -1 +1 @@
1
- {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,25 @@ process.stdout.on('error', (err) => {
26
26
  });
27
27
  const ISSUES_DIR = '.workflow/issues';
28
28
  // ============ Storage Layer (JSONL) ============
29
+ /**
30
+ * Cached project root to avoid repeated git command execution
31
+ */
32
+ let cachedProjectRoot = null;
33
+ /**
34
+ * Clear cached project root (for testing)
35
+ */
36
+ export function clearProjectRootCache() {
37
+ cachedProjectRoot = null;
38
+ }
39
+ /**
40
+ * Debug logging helper (enabled via CCW_DEBUG=true)
41
+ */
42
+ const DEBUG = process.env.CCW_DEBUG === 'true';
43
+ function debugLog(msg) {
44
+ if (DEBUG) {
45
+ console.log(`[ccw:worktree] ${msg}`);
46
+ }
47
+ }
29
48
  /**
30
49
  * Normalize path for comparison (handles Windows case sensitivity)
31
50
  */
@@ -63,7 +82,29 @@ function resolveMainRepoFromGitFile(gitFilePath) {
63
82
  * This ensures .workflow/issues/ is always accessed from the main repo.
64
83
  */
65
84
  function getProjectRoot() {
66
- // First, try to detect if we're in a git worktree using git commands
85
+ // Return cached result if available
86
+ if (cachedProjectRoot) {
87
+ debugLog(`Using cached project root: ${cachedProjectRoot}`);
88
+ return cachedProjectRoot;
89
+ }
90
+ debugLog(`Detecting project root from cwd: ${process.cwd()}`);
91
+ // Priority 1: Check CCW_MAIN_REPO environment variable
92
+ const envMainRepo = process.env.CCW_MAIN_REPO;
93
+ if (envMainRepo) {
94
+ debugLog(`Found CCW_MAIN_REPO env: ${envMainRepo}`);
95
+ const hasWorkflow = existsSync(join(envMainRepo, '.workflow'));
96
+ const hasGit = existsSync(join(envMainRepo, '.git'));
97
+ if (hasWorkflow || hasGit) {
98
+ debugLog(`CCW_MAIN_REPO validated (workflow=${hasWorkflow}, git=${hasGit})`);
99
+ cachedProjectRoot = envMainRepo;
100
+ return envMainRepo;
101
+ }
102
+ else {
103
+ console.warn('[ccw] CCW_MAIN_REPO is set but path is invalid (no .workflow or .git)');
104
+ console.warn(`[ccw] Path: ${envMainRepo}`);
105
+ }
106
+ }
107
+ // Priority 2: Try to detect if we're in a git worktree using git commands
67
108
  try {
68
109
  // Get the common git directory (points to main repo's .git)
69
110
  const gitCommonDir = execSync('git rev-parse --git-common-dir', {
@@ -77,6 +118,8 @@ function getProjectRoot() {
77
118
  stdio: ['pipe', 'pipe', 'pipe'],
78
119
  timeout: EXEC_TIMEOUTS.GIT_QUICK,
79
120
  }).trim();
121
+ debugLog(`Git common dir: ${gitCommonDir}`);
122
+ debugLog(`Git dir: ${gitDir}`);
80
123
  // Normalize paths for comparison (Windows case insensitive)
81
124
  const normalizedCommon = normalizePath(gitCommonDir);
82
125
  const normalizedGit = normalizePath(gitDir);
@@ -86,8 +129,11 @@ function getProjectRoot() {
86
129
  const absoluteCommonDir = resolve(process.cwd(), gitCommonDir);
87
130
  // .git directory's parent is the repo root
88
131
  const mainRepoRoot = resolve(absoluteCommonDir, '..');
132
+ debugLog(`Detected worktree, main repo: ${mainRepoRoot}`);
89
133
  // Verify .workflow or .git exists in main repo
90
134
  if (existsSync(join(mainRepoRoot, '.workflow')) || existsSync(join(mainRepoRoot, '.git'))) {
135
+ debugLog(`Main repo validated, returning: ${mainRepoRoot}`);
136
+ cachedProjectRoot = mainRepoRoot;
91
137
  return mainRepoRoot;
92
138
  }
93
139
  }
@@ -96,9 +142,10 @@ function getProjectRoot() {
96
142
  if (isExecTimeoutError(err)) {
97
143
  console.warn(`[issue] git rev-parse timed out after ${EXEC_TIMEOUTS.GIT_QUICK}ms; falling back to filesystem detection`);
98
144
  }
145
+ debugLog(`Git command failed, falling back to filesystem detection`);
99
146
  // Git command failed - fall through to manual detection
100
147
  }
101
- // Standard detection with worktree file support: walk up to find .workflow or .git
148
+ // Priority 3: Standard detection with worktree file support: walk up to find .workflow or .git
102
149
  let dir = process.cwd();
103
150
  while (dir !== resolve(dir, '..')) {
104
151
  const gitPath = join(dir, '.git');
@@ -109,22 +156,42 @@ function getProjectRoot() {
109
156
  if (gitStat.isFile()) {
110
157
  // .git is a file - this is a worktree, try to resolve main repo
111
158
  const mainRepo = resolveMainRepoFromGitFile(gitPath);
112
- if (mainRepo && existsSync(join(mainRepo, '.workflow'))) {
113
- return mainRepo;
159
+ debugLog(`Parsed .git file, main repo: ${mainRepo}`);
160
+ if (mainRepo) {
161
+ // Verify main repo has .git directory (always true for main repo)
162
+ // Don't require .workflow - it may not exist yet in a new repo
163
+ const hasGit = existsSync(join(mainRepo, '.git'));
164
+ const hasWorkflow = existsSync(join(mainRepo, '.workflow'));
165
+ if (hasGit || hasWorkflow) {
166
+ if (!hasWorkflow) {
167
+ console.warn('[ccw] Worktree detected but main repo has no .workflow directory');
168
+ console.warn(`[ccw] Main repo: ${mainRepo}`);
169
+ console.warn('[ccw] Issue commands may fail until .workflow is created');
170
+ console.warn('[ccw] Set CCW_MAIN_REPO environment variable to override detection');
171
+ }
172
+ debugLog(`Main repo validated via .git file (git=${hasGit}, workflow=${hasWorkflow})`);
173
+ cachedProjectRoot = mainRepo;
174
+ return mainRepo;
175
+ }
114
176
  }
115
- // If main repo doesn't have .workflow, fall back to current worktree
116
177
  }
117
178
  }
118
179
  catch {
119
180
  // stat failed, continue with normal logic
181
+ debugLog(`Failed to stat ${gitPath}, continuing`);
120
182
  }
121
183
  }
122
184
  if (existsSync(join(dir, '.workflow')) || existsSync(gitPath)) {
185
+ debugLog(`Found project root at: ${dir}`);
186
+ cachedProjectRoot = dir;
123
187
  return dir;
124
188
  }
125
189
  dir = resolve(dir, '..');
126
190
  }
127
- return process.cwd();
191
+ debugLog(`No project root found, using cwd: ${process.cwd()}`);
192
+ const fallback = process.cwd();
193
+ cachedProjectRoot = fallback;
194
+ return fallback;
128
195
  }
129
196
  function getIssuesDir() {
130
197
  return join(getProjectRoot(), ISSUES_DIR);