claude-code-workflow 6.3.12 → 6.3.15
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/agents/issue-plan-agent.md +62 -36
- package/.claude/agents/issue-queue-agent.md +110 -57
- package/.claude/commands/issue/execute.md +53 -40
- package/.claude/commands/issue/new.md +226 -380
- package/.claude/commands/issue/plan.md +122 -125
- package/.claude/commands/issue/queue.md +198 -321
- package/.claude/skills/issue-manage/SKILL.md +63 -22
- package/.claude/workflows/cli-templates/schemas/discovery-finding-schema.json +3 -3
- package/.claude/workflows/cli-templates/schemas/issues-jsonl-schema.json +141 -168
- package/.claude/workflows/cli-templates/schemas/queue-schema.json +0 -5
- package/.claude/workflows/cli-templates/schemas/solution-schema.json +3 -2
- package/.codex/prompts/issue-execute.md +3 -3
- package/.codex/prompts/issue-plan.md +16 -19
- package/.codex/prompts/issue-queue.md +3 -4
- package/README.md +1 -0
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +3 -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 +45 -3
- package/ccw/dist/commands/cli.js.map +1 -1
- package/ccw/dist/commands/issue.d.ts +3 -1
- package/ccw/dist/commands/issue.d.ts.map +1 -1
- package/ccw/dist/commands/issue.js +383 -30
- package/ccw/dist/commands/issue.js.map +1 -1
- package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/issue-routes.js +77 -16
- package/ccw/dist/core/routes/issue-routes.js.map +1 -1
- package/ccw/dist/tools/cli-executor.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor.js +117 -4
- package/ccw/dist/tools/cli-executor.js.map +1 -1
- package/ccw/dist/tools/litellm-executor.d.ts +4 -0
- package/ccw/dist/tools/litellm-executor.d.ts.map +1 -1
- package/ccw/dist/tools/litellm-executor.js +54 -1
- package/ccw/dist/tools/litellm-executor.js.map +1 -1
- package/ccw/dist/tools/ui-generate-preview.d.ts +18 -0
- package/ccw/dist/tools/ui-generate-preview.d.ts.map +1 -1
- package/ccw/dist/tools/ui-generate-preview.js +26 -10
- package/ccw/dist/tools/ui-generate-preview.js.map +1 -1
- package/ccw/src/cli.ts +3 -1
- package/ccw/src/commands/cli.ts +47 -3
- package/ccw/src/commands/issue.ts +442 -34
- package/ccw/src/core/routes/issue-routes.ts +82 -16
- package/ccw/src/tools/cli-executor.ts +125 -4
- package/ccw/src/tools/litellm-executor.ts +107 -24
- package/ccw/src/tools/ui-generate-preview.js +60 -37
- package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/config.py +25 -2
- package/codex-lens/src/codexlens/entities.py +5 -1
- package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/indexing/symbol_extractor.py +243 -243
- package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.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 +256 -256
- package/codex-lens/src/codexlens/parsers/treesitter_parser.py +335 -335
- package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.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-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/chain_search.py +30 -1
- package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/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__/vector_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/embedder.py +6 -9
- package/codex-lens/src/codexlens/semantic/vector_store.py +271 -200
- package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/sqlite_store.py +184 -108
- package/package.json +88 -83
- package/.claude/commands/issue/manage.md +0 -113
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: issue-manage
|
|
3
|
-
description: Interactive issue management with menu-driven CRUD operations. Use when managing issues, viewing issue status, editing issue fields,
|
|
3
|
+
description: Interactive issue management with menu-driven CRUD operations. Use when managing issues, viewing issue status, editing issue fields, performing bulk operations, or viewing issue history. Triggers on "manage issue", "list issues", "edit issue", "delete issue", "bulk update", "issue dashboard", "issue history", "completed issues".
|
|
4
4
|
allowed-tools: Bash, Read, Write, AskUserQuestion, Task, Glob
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -16,17 +16,22 @@ Ask me:
|
|
|
16
16
|
- "Edit issue priority" → Modify fields
|
|
17
17
|
- "Delete old issues" → Remove with confirmation
|
|
18
18
|
- "Bulk update status" → Batch operations
|
|
19
|
+
- "Show completed issues" → View issue history
|
|
20
|
+
- "Archive old issues" → Move to history
|
|
19
21
|
|
|
20
22
|
## CLI Endpoints
|
|
21
23
|
|
|
22
24
|
```bash
|
|
23
25
|
# Core operations
|
|
24
|
-
ccw issue list # List
|
|
26
|
+
ccw issue list # List active issues
|
|
25
27
|
ccw issue list <id> --json # Get issue details
|
|
28
|
+
ccw issue history # List completed issues (from history)
|
|
29
|
+
ccw issue history --json # Completed issues as JSON
|
|
26
30
|
ccw issue status <id> # Detailed status
|
|
27
31
|
ccw issue init <id> --title "..." # Create issue
|
|
28
32
|
ccw issue task <id> --title "..." # Add task
|
|
29
33
|
ccw issue bind <id> <solution-id> # Bind solution
|
|
34
|
+
ccw issue update <id> --status completed # Complete & auto-archive
|
|
30
35
|
|
|
31
36
|
# Queue management
|
|
32
37
|
ccw issue queue # List current queue
|
|
@@ -37,6 +42,7 @@ ccw issue queue archive # Archive queue
|
|
|
37
42
|
ccw issue queue delete <queue-id> # Delete queue
|
|
38
43
|
ccw issue next # Get next task
|
|
39
44
|
ccw issue done <queue-id> # Mark completed
|
|
45
|
+
ccw issue update --from-queue # Sync statuses from queue
|
|
40
46
|
```
|
|
41
47
|
|
|
42
48
|
## Operations
|
|
@@ -113,7 +119,29 @@ This will also remove:
|
|
|
113
119
|
3. Clean up `solutions/<id>.jsonl`
|
|
114
120
|
4. Remove from `queue.json`
|
|
115
121
|
|
|
116
|
-
### 5.
|
|
122
|
+
### 5. HISTORY 📚
|
|
123
|
+
|
|
124
|
+
View and manage completed issues:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
┌─ Issue History ─────────────────────┐
|
|
128
|
+
│ ID Completed Title │
|
|
129
|
+
│ ISS-001 2025-12-28 12:00 Fix bug │
|
|
130
|
+
│ ISS-002 2025-12-27 15:30 Feature │
|
|
131
|
+
└──────────────────────────────────────┘
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Flow**:
|
|
135
|
+
1. Fetch `ccw issue history --json`
|
|
136
|
+
2. Display table: ID | Completed At | Title
|
|
137
|
+
3. Optional: Filter by date range
|
|
138
|
+
|
|
139
|
+
**Auto-Archive**: When issue status → `completed`:
|
|
140
|
+
- Issue moves from `issues.jsonl` → `issue-history.jsonl`
|
|
141
|
+
- Solutions remain in `solutions/<id>.jsonl`
|
|
142
|
+
- Queue items marked completed
|
|
143
|
+
|
|
144
|
+
### 6. BULK 📦
|
|
117
145
|
|
|
118
146
|
Batch operations:
|
|
119
147
|
|
|
@@ -125,25 +153,34 @@ Batch operations:
|
|
|
125
153
|
| Delete Multiple | Bulk removal |
|
|
126
154
|
| Queue All Planned | Add all planned to queue |
|
|
127
155
|
| Retry All Failed | Reset failed tasks |
|
|
156
|
+
| Sync from Queue | Update statuses from active queue |
|
|
128
157
|
|
|
129
158
|
## Workflow
|
|
130
159
|
|
|
131
160
|
```
|
|
132
|
-
|
|
133
|
-
│
|
|
134
|
-
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐
|
|
135
|
-
│ │List│ │View│ │Edit│ │Bulk│
|
|
136
|
-
│ └──┬─┘ └──┬─┘ └──┬─┘ └──┬─┘
|
|
137
|
-
|
|
138
|
-
│ │ │ │
|
|
139
|
-
▼ ▼ ▼ ▼
|
|
140
|
-
Filter Detail Fields Multi
|
|
141
|
-
Select Actions Update Select
|
|
142
|
-
│ │ │ │
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
161
|
+
┌────────────────────────────────────────────────┐
|
|
162
|
+
│ Main Menu │
|
|
163
|
+
│ ┌────┐ ┌────┐ ┌────┐ ┌─────┐ ┌────┐ │
|
|
164
|
+
│ │List│ │View│ │Edit│ │Hist.│ │Bulk│ │
|
|
165
|
+
│ └──┬─┘ └──┬─┘ └──┬─┘ └──┬──┘ └──┬─┘ │
|
|
166
|
+
└─────┼──────┼──────┼──────┼───────┼─────────────┘
|
|
167
|
+
│ │ │ │ │
|
|
168
|
+
▼ ▼ ▼ ▼ ▼
|
|
169
|
+
Filter Detail Fields History Multi
|
|
170
|
+
Select Actions Update Browse Select
|
|
171
|
+
│ │ │ │ │
|
|
172
|
+
└──────┴──────┴──────┴───────┘
|
|
173
|
+
│
|
|
174
|
+
▼
|
|
175
|
+
Back to Menu
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Issue Lifecycle**:
|
|
179
|
+
```
|
|
180
|
+
registered → planned → queued → executing → completed
|
|
181
|
+
│
|
|
182
|
+
▼
|
|
183
|
+
issue-history.jsonl
|
|
147
184
|
```
|
|
148
185
|
|
|
149
186
|
## Implementation Guide
|
|
@@ -163,10 +200,11 @@ await showMainMenu(issueId);
|
|
|
163
200
|
```javascript
|
|
164
201
|
// 1. Fetch dashboard data
|
|
165
202
|
const issues = JSON.parse(Bash('ccw issue list --json') || '[]');
|
|
203
|
+
const history = JSON.parse(Bash('ccw issue history --json 2>/dev/null') || '[]');
|
|
166
204
|
const queue = JSON.parse(Bash('ccw issue queue --json 2>/dev/null') || '{}');
|
|
167
205
|
|
|
168
206
|
// 2. Display summary
|
|
169
|
-
console.log(`
|
|
207
|
+
console.log(`Active: ${issues.length} | Completed: ${history.length} | Queue: ${queue.pending_count || 0} pending`);
|
|
170
208
|
|
|
171
209
|
// 3. Ask action via AskUserQuestion
|
|
172
210
|
const action = AskUserQuestion({
|
|
@@ -174,9 +212,10 @@ const action = AskUserQuestion({
|
|
|
174
212
|
question: 'What would you like to do?',
|
|
175
213
|
header: 'Action',
|
|
176
214
|
options: [
|
|
177
|
-
{ label: 'List Issues', description: 'Browse
|
|
215
|
+
{ label: 'List Issues', description: 'Browse active issues' },
|
|
178
216
|
{ label: 'View Issue', description: 'Detail view' },
|
|
179
217
|
{ label: 'Edit Issue', description: 'Modify fields' },
|
|
218
|
+
{ label: 'View History', description: 'Completed issues' },
|
|
180
219
|
{ label: 'Bulk Operations', description: 'Batch actions' }
|
|
181
220
|
]
|
|
182
221
|
}]
|
|
@@ -223,9 +262,11 @@ const issuesPath = '.workflow/issues/issues.jsonl';
|
|
|
223
262
|
|
|
224
263
|
| File | Purpose |
|
|
225
264
|
|------|---------|
|
|
226
|
-
| `.workflow/issues/issues.jsonl` |
|
|
265
|
+
| `.workflow/issues/issues.jsonl` | Active issue records |
|
|
266
|
+
| `.workflow/issues/issue-history.jsonl` | Completed issues (archived) |
|
|
227
267
|
| `.workflow/issues/solutions/<id>.jsonl` | Solutions per issue |
|
|
228
|
-
| `.workflow/issues/
|
|
268
|
+
| `.workflow/issues/queues/index.json` | Queue index (multi-queue) |
|
|
269
|
+
| `.workflow/issues/queues/<queue-id>.json` | Individual queue files |
|
|
229
270
|
|
|
230
271
|
## Error Handling
|
|
231
272
|
|
|
@@ -118,10 +118,10 @@
|
|
|
118
118
|
"maximum": 5,
|
|
119
119
|
"description": "Priority 1-5 (1=critical, 5=low)"
|
|
120
120
|
},
|
|
121
|
-
"
|
|
121
|
+
"tags": {
|
|
122
122
|
"type": "array",
|
|
123
123
|
"items": { "type": "string" },
|
|
124
|
-
"description": "Suggested
|
|
124
|
+
"description": "Suggested tags for the issue"
|
|
125
125
|
}
|
|
126
126
|
},
|
|
127
127
|
"description": "Pre-filled issue suggestion for export"
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
"title": "Add null check in user validation",
|
|
206
206
|
"type": "bug",
|
|
207
207
|
"priority": 2,
|
|
208
|
-
"
|
|
208
|
+
"tags": ["bug", "auth"]
|
|
209
209
|
},
|
|
210
210
|
"external_reference": null,
|
|
211
211
|
"confidence": 0.85,
|
|
@@ -1,168 +1,141 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"title": "Issues JSONL Schema",
|
|
4
|
-
"description": "Schema for each line in issues.jsonl (flat storage)",
|
|
5
|
-
"type": "object",
|
|
6
|
-
"required": ["id", "title", "status", "created_at"],
|
|
7
|
-
"properties": {
|
|
8
|
-
"id": {
|
|
9
|
-
"type": "string",
|
|
10
|
-
"description": "Issue ID (GH-123, ISS-xxx, DSC-001)"
|
|
11
|
-
},
|
|
12
|
-
"title": {
|
|
13
|
-
"type": "string"
|
|
14
|
-
},
|
|
15
|
-
"status": {
|
|
16
|
-
"type": "string",
|
|
17
|
-
"enum": ["registered", "planning", "planned", "queued", "executing", "completed", "failed", "paused"],
|
|
18
|
-
"default": "registered"
|
|
19
|
-
},
|
|
20
|
-
"priority": {
|
|
21
|
-
"type": "integer",
|
|
22
|
-
"minimum": 1,
|
|
23
|
-
"maximum": 5,
|
|
24
|
-
"default": 3,
|
|
25
|
-
"description": "1=critical, 2=high, 3=medium, 4=low, 5=trivial"
|
|
26
|
-
},
|
|
27
|
-
"context": {
|
|
28
|
-
"type": "string",
|
|
29
|
-
"description": "Issue context/description (markdown)"
|
|
30
|
-
},
|
|
31
|
-
"source": {
|
|
32
|
-
"type": "string",
|
|
33
|
-
"enum": ["github", "text", "discovery"],
|
|
34
|
-
"description": "Source of the issue"
|
|
35
|
-
},
|
|
36
|
-
"source_url": {
|
|
37
|
-
"type": "string",
|
|
38
|
-
"description": "Original source URL (for GitHub issues)"
|
|
39
|
-
},
|
|
40
|
-
"
|
|
41
|
-
"type": "array",
|
|
42
|
-
"items": { "type": "string" },
|
|
43
|
-
"description": "Issue
|
|
44
|
-
},
|
|
45
|
-
"
|
|
46
|
-
"type": "object",
|
|
47
|
-
"description": "
|
|
48
|
-
"properties": {
|
|
49
|
-
"
|
|
50
|
-
"type": "string",
|
|
51
|
-
"description": "
|
|
52
|
-
},
|
|
53
|
-
"
|
|
54
|
-
"type": "string",
|
|
55
|
-
"
|
|
56
|
-
},
|
|
57
|
-
"
|
|
58
|
-
"type": "string",
|
|
59
|
-
"description": "
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
},
|
|
79
|
-
"
|
|
80
|
-
"type": "string",
|
|
81
|
-
"
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
"
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
"
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
"priority": 1,
|
|
143
|
-
"context": "Connection pool cleanup only happens when MAX_POOL_SIZE is reached...",
|
|
144
|
-
"source": "discovery",
|
|
145
|
-
"labels": ["bug", "resource-leak", "critical"],
|
|
146
|
-
"discovery_context": {
|
|
147
|
-
"discovery_id": "DSC-20251228-182237",
|
|
148
|
-
"perspective": "bug",
|
|
149
|
-
"category": "resource-leak",
|
|
150
|
-
"file": "storage/sqlite_store.py",
|
|
151
|
-
"line": 59,
|
|
152
|
-
"snippet": "if len(self._pool) >= self.MAX_POOL_SIZE:\n self._cleanup_stale_connections()",
|
|
153
|
-
"confidence": 0.85,
|
|
154
|
-
"suggested_fix": "Implement periodic cleanup or weak references"
|
|
155
|
-
},
|
|
156
|
-
"affected_components": ["storage/sqlite_store.py"],
|
|
157
|
-
"lifecycle_requirements": {
|
|
158
|
-
"test_strategy": "unit",
|
|
159
|
-
"regression_scope": "affected",
|
|
160
|
-
"acceptance_type": "automated",
|
|
161
|
-
"commit_strategy": "per-task"
|
|
162
|
-
},
|
|
163
|
-
"bound_solution_id": null,
|
|
164
|
-
"solution_count": 0,
|
|
165
|
-
"created_at": "2025-12-28T18:22:37Z"
|
|
166
|
-
}
|
|
167
|
-
]
|
|
168
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Issues JSONL Schema",
|
|
4
|
+
"description": "Schema for each line in issues.jsonl (flat storage)",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["id", "title", "status", "created_at"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"id": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "Issue ID (GH-123, ISS-xxx, DSC-001)"
|
|
11
|
+
},
|
|
12
|
+
"title": {
|
|
13
|
+
"type": "string"
|
|
14
|
+
},
|
|
15
|
+
"status": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"enum": ["registered", "planning", "planned", "queued", "executing", "completed", "failed", "paused"],
|
|
18
|
+
"default": "registered"
|
|
19
|
+
},
|
|
20
|
+
"priority": {
|
|
21
|
+
"type": "integer",
|
|
22
|
+
"minimum": 1,
|
|
23
|
+
"maximum": 5,
|
|
24
|
+
"default": 3,
|
|
25
|
+
"description": "1=critical, 2=high, 3=medium, 4=low, 5=trivial"
|
|
26
|
+
},
|
|
27
|
+
"context": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Issue context/description (markdown)"
|
|
30
|
+
},
|
|
31
|
+
"source": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"enum": ["github", "text", "discovery"],
|
|
34
|
+
"description": "Source of the issue"
|
|
35
|
+
},
|
|
36
|
+
"source_url": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"description": "Original source URL (for GitHub issues)"
|
|
39
|
+
},
|
|
40
|
+
"tags": {
|
|
41
|
+
"type": "array",
|
|
42
|
+
"items": { "type": "string" },
|
|
43
|
+
"description": "Issue tags"
|
|
44
|
+
},
|
|
45
|
+
"extended_context": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"description": "Minimal extended context for planning hints",
|
|
48
|
+
"properties": {
|
|
49
|
+
"location": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "file:line format (e.g., 'src/auth.ts:42')"
|
|
52
|
+
},
|
|
53
|
+
"suggested_fix": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "Suggested remediation"
|
|
56
|
+
},
|
|
57
|
+
"notes": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"description": "Additional notes (user clarifications or discovery hints)"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"affected_components": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"items": { "type": "string" },
|
|
66
|
+
"description": "Files/modules affected"
|
|
67
|
+
},
|
|
68
|
+
"lifecycle_requirements": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"properties": {
|
|
71
|
+
"test_strategy": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"enum": ["unit", "integration", "e2e", "manual", "auto"]
|
|
74
|
+
},
|
|
75
|
+
"regression_scope": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"enum": ["affected", "related", "full"]
|
|
78
|
+
},
|
|
79
|
+
"acceptance_type": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"enum": ["automated", "manual", "both"]
|
|
82
|
+
},
|
|
83
|
+
"commit_strategy": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"enum": ["per-task", "squash", "atomic"]
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"bound_solution_id": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"description": "ID of the bound solution (null if none bound)"
|
|
92
|
+
},
|
|
93
|
+
"solution_count": {
|
|
94
|
+
"type": "integer",
|
|
95
|
+
"default": 0,
|
|
96
|
+
"description": "Number of candidate solutions"
|
|
97
|
+
},
|
|
98
|
+
"created_at": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"format": "date-time"
|
|
101
|
+
},
|
|
102
|
+
"updated_at": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"format": "date-time"
|
|
105
|
+
},
|
|
106
|
+
"planned_at": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"format": "date-time"
|
|
109
|
+
},
|
|
110
|
+
"completed_at": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"format": "date-time"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"examples": [
|
|
116
|
+
{
|
|
117
|
+
"id": "DSC-001",
|
|
118
|
+
"title": "Fix: SQLite connection pool memory leak",
|
|
119
|
+
"status": "registered",
|
|
120
|
+
"priority": 1,
|
|
121
|
+
"context": "Connection pool cleanup only happens when MAX_POOL_SIZE is reached...",
|
|
122
|
+
"source": "discovery",
|
|
123
|
+
"tags": ["bug", "resource-leak", "critical"],
|
|
124
|
+
"extended_context": {
|
|
125
|
+
"location": "storage/sqlite_store.py:59",
|
|
126
|
+
"suggested_fix": "Implement periodic cleanup or weak references",
|
|
127
|
+
"notes": null
|
|
128
|
+
},
|
|
129
|
+
"affected_components": ["storage/sqlite_store.py"],
|
|
130
|
+
"lifecycle_requirements": {
|
|
131
|
+
"test_strategy": "unit",
|
|
132
|
+
"regression_scope": "affected",
|
|
133
|
+
"acceptance_type": "automated",
|
|
134
|
+
"commit_strategy": "per-task"
|
|
135
|
+
},
|
|
136
|
+
"bound_solution_id": null,
|
|
137
|
+
"solution_count": 0,
|
|
138
|
+
"created_at": "2025-12-28T18:22:37Z"
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
}
|
|
@@ -120,10 +120,6 @@
|
|
|
120
120
|
"maximum": 1,
|
|
121
121
|
"description": "Semantic importance score (0.0-1.0)"
|
|
122
122
|
},
|
|
123
|
-
"assigned_executor": {
|
|
124
|
-
"type": "string",
|
|
125
|
-
"enum": ["codex", "gemini", "agent"]
|
|
126
|
-
},
|
|
127
123
|
"queued_at": { "type": "string", "format": "date-time" },
|
|
128
124
|
"started_at": { "type": "string", "format": "date-time" },
|
|
129
125
|
"completed_at": { "type": "string", "format": "date-time" },
|
|
@@ -160,7 +156,6 @@
|
|
|
160
156
|
"execution_group": { "type": "string" },
|
|
161
157
|
"depends_on": { "type": "array", "items": { "type": "string" } },
|
|
162
158
|
"semantic_priority": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
163
|
-
"assigned_executor": { "type": "string", "enum": ["codex", "gemini", "agent"] },
|
|
164
159
|
"queued_at": { "type": "string", "format": "date-time" },
|
|
165
160
|
"started_at": { "type": "string", "format": "date-time" },
|
|
166
161
|
"completed_at": { "type": "string", "format": "date-time" },
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
"properties": {
|
|
8
8
|
"id": {
|
|
9
9
|
"type": "string",
|
|
10
|
-
"description": "Unique solution identifier",
|
|
11
|
-
"pattern": "^SOL
|
|
10
|
+
"description": "Unique solution identifier: SOL-{issue-id}-{seq}",
|
|
11
|
+
"pattern": "^SOL-.+-[0-9]+$",
|
|
12
|
+
"examples": ["SOL-GH-123-1", "SOL-ISS-20251229-1"]
|
|
12
13
|
},
|
|
13
14
|
"description": {
|
|
14
15
|
"type": "string",
|
|
@@ -40,7 +40,7 @@ ccw issue next
|
|
|
40
40
|
This returns JSON with the full solution definition:
|
|
41
41
|
- `item_id`: Solution identifier in queue (e.g., "S-1")
|
|
42
42
|
- `issue_id`: Parent issue ID (e.g., "ISS-20251227-001")
|
|
43
|
-
- `solution_id`: Solution ID (e.g., "SOL-20251227-001")
|
|
43
|
+
- `solution_id`: Solution ID (e.g., "SOL-ISS-20251227-001-1")
|
|
44
44
|
- `solution`: Full solution with all tasks
|
|
45
45
|
- `execution_hints`: Timing and executor hints
|
|
46
46
|
|
|
@@ -54,10 +54,10 @@ Expected solution structure:
|
|
|
54
54
|
{
|
|
55
55
|
"item_id": "S-1",
|
|
56
56
|
"issue_id": "ISS-20251227-001",
|
|
57
|
-
"solution_id": "SOL-20251227-001",
|
|
57
|
+
"solution_id": "SOL-ISS-20251227-001-1",
|
|
58
58
|
"status": "pending",
|
|
59
59
|
"solution": {
|
|
60
|
-
"id": "SOL-20251227-001",
|
|
60
|
+
"id": "SOL-ISS-20251227-001-1",
|
|
61
61
|
"description": "Description of solution approach",
|
|
62
62
|
"tasks": [
|
|
63
63
|
{
|
|
@@ -71,25 +71,22 @@ Task rules (from schema):
|
|
|
71
71
|
|
|
72
72
|
### Step 5: Register & bind solutions via CLI
|
|
73
73
|
|
|
74
|
-
Create
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
- Register each via `ccw issue bind <issue-id> <solution-id> --solution <import-file>` (do NOT bind yet).
|
|
91
|
-
- Present the alternatives in `pending_selection` and stop for user choice.
|
|
92
|
-
- Bind chosen solution with: `ccw issue bind <issue-id> <solution-id>`.
|
|
74
|
+
**Create solution** (via CLI endpoint):
|
|
75
|
+
```bash
|
|
76
|
+
ccw issue solution <issue-id> --data '{"description":"...", "approach":"...", "tasks":[...]}'
|
|
77
|
+
# Output: {"id":"SOL-{issue-id}-1", ...}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**CLI Features:**
|
|
81
|
+
| Feature | Description |
|
|
82
|
+
|---------|-------------|
|
|
83
|
+
| Auto-increment ID | `SOL-{issue-id}-{seq}` (e.g., `SOL-GH-123-1`) |
|
|
84
|
+
| Multi-solution | Appends to existing JSONL, supports multiple per issue |
|
|
85
|
+
| Trailing newline | Proper JSONL format, no corruption |
|
|
86
|
+
|
|
87
|
+
**Binding:**
|
|
88
|
+
- **Single solution**: Auto-bind: `ccw issue bind <issue-id> <solution-id>`
|
|
89
|
+
- **Multiple solutions**: Present alternatives in `pending_selection`, wait for user choice
|
|
93
90
|
|
|
94
91
|
### Step 6: Detect cross-issue file conflicts (best-effort)
|
|
95
92
|
|
|
@@ -78,8 +78,8 @@ Build a file → solutions mapping:
|
|
|
78
78
|
|
|
79
79
|
```javascript
|
|
80
80
|
fileModifications = {
|
|
81
|
-
"src/auth.ts": ["SOL-001", "SOL-003"],
|
|
82
|
-
"src/api.ts": ["SOL-002"]
|
|
81
|
+
"src/auth.ts": ["SOL-ISS-001-1", "SOL-ISS-003-1"],
|
|
82
|
+
"src/api.ts": ["SOL-ISS-002-1"]
|
|
83
83
|
}
|
|
84
84
|
```
|
|
85
85
|
|
|
@@ -129,13 +129,12 @@ Group assignment:
|
|
|
129
129
|
{
|
|
130
130
|
"item_id": "S-1",
|
|
131
131
|
"issue_id": "ISS-001",
|
|
132
|
-
"solution_id": "SOL-001",
|
|
132
|
+
"solution_id": "SOL-ISS-001-1",
|
|
133
133
|
"status": "pending",
|
|
134
134
|
"execution_order": 1,
|
|
135
135
|
"execution_group": "P1",
|
|
136
136
|
"depends_on": [],
|
|
137
137
|
"semantic_priority": 0.8,
|
|
138
|
-
"assigned_executor": "codex",
|
|
139
138
|
"files_touched": ["src/auth.ts"],
|
|
140
139
|
"task_count": 3
|
|
141
140
|
}
|
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
[](https://www.npmjs.com/package/claude-code-workflow)
|
|
10
10
|
[](LICENSE)
|
|
11
11
|
[]()
|
|
12
|
+
[](https://github.com/catlog22/Claude-Code-Workflow/actions/workflows/visual-tests.yml)
|
|
12
13
|
|
|
13
14
|
**Languages:** [English](README.md) | [中文](README_CN.md)
|
|
14
15
|
|
package/ccw/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAuEA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAuEA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6NxC"}
|