specweave 1.0.235 → 1.0.239

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 (196) hide show
  1. package/README.md +89 -193
  2. package/dist/plugins/specweave-github/lib/github-ac-comment-poster.d.ts +37 -0
  3. package/dist/plugins/specweave-github/lib/github-ac-comment-poster.d.ts.map +1 -0
  4. package/dist/plugins/specweave-github/lib/github-ac-comment-poster.js +176 -0
  5. package/dist/plugins/specweave-github/lib/github-ac-comment-poster.js.map +1 -0
  6. package/dist/plugins/specweave-github/lib/github-batch-sync.d.ts +36 -0
  7. package/dist/plugins/specweave-github/lib/github-batch-sync.d.ts.map +1 -0
  8. package/dist/plugins/specweave-github/lib/github-batch-sync.js +115 -0
  9. package/dist/plugins/specweave-github/lib/github-batch-sync.js.map +1 -0
  10. package/dist/plugins/specweave-github/lib/github-board-resolver-v2.d.ts +37 -0
  11. package/dist/plugins/specweave-github/lib/github-board-resolver-v2.d.ts.map +1 -0
  12. package/dist/plugins/specweave-github/lib/github-board-resolver-v2.js +56 -0
  13. package/dist/plugins/specweave-github/lib/github-board-resolver-v2.js.map +1 -0
  14. package/dist/plugins/specweave-github/lib/github-conflict-resolver.d.ts +68 -0
  15. package/dist/plugins/specweave-github/lib/github-conflict-resolver.d.ts.map +1 -0
  16. package/dist/plugins/specweave-github/lib/github-conflict-resolver.js +102 -0
  17. package/dist/plugins/specweave-github/lib/github-conflict-resolver.js.map +1 -0
  18. package/dist/plugins/specweave-github/lib/github-cross-repo-sync.d.ts +64 -0
  19. package/dist/plugins/specweave-github/lib/github-cross-repo-sync.d.ts.map +1 -0
  20. package/dist/plugins/specweave-github/lib/github-cross-repo-sync.js +162 -0
  21. package/dist/plugins/specweave-github/lib/github-cross-repo-sync.js.map +1 -0
  22. package/dist/plugins/specweave-github/lib/github-field-sync.d.ts +50 -0
  23. package/dist/plugins/specweave-github/lib/github-field-sync.d.ts.map +1 -0
  24. package/dist/plugins/specweave-github/lib/github-field-sync.js +107 -0
  25. package/dist/plugins/specweave-github/lib/github-field-sync.js.map +1 -0
  26. package/dist/plugins/specweave-github/lib/github-graphql-client.d.ts +53 -0
  27. package/dist/plugins/specweave-github/lib/github-graphql-client.d.ts.map +1 -0
  28. package/dist/plugins/specweave-github/lib/github-graphql-client.js +138 -0
  29. package/dist/plugins/specweave-github/lib/github-graphql-client.js.map +1 -0
  30. package/dist/plugins/specweave-github/lib/github-issue-body-generator.d.ts +40 -0
  31. package/dist/plugins/specweave-github/lib/github-issue-body-generator.d.ts.map +1 -0
  32. package/dist/plugins/specweave-github/lib/github-issue-body-generator.js +50 -0
  33. package/dist/plugins/specweave-github/lib/github-issue-body-generator.js.map +1 -0
  34. package/dist/plugins/specweave-github/lib/github-issue-body-parser.d.ts +30 -0
  35. package/dist/plugins/specweave-github/lib/github-issue-body-parser.d.ts.map +1 -0
  36. package/dist/plugins/specweave-github/lib/github-issue-body-parser.js +75 -0
  37. package/dist/plugins/specweave-github/lib/github-issue-body-parser.js.map +1 -0
  38. package/dist/plugins/specweave-github/lib/github-pull-sync.d.ts +94 -0
  39. package/dist/plugins/specweave-github/lib/github-pull-sync.d.ts.map +1 -0
  40. package/dist/plugins/specweave-github/lib/github-pull-sync.js +232 -0
  41. package/dist/plugins/specweave-github/lib/github-pull-sync.js.map +1 -0
  42. package/dist/plugins/specweave-github/lib/github-push-sync.d.ts +50 -0
  43. package/dist/plugins/specweave-github/lib/github-push-sync.d.ts.map +1 -0
  44. package/dist/plugins/specweave-github/lib/github-push-sync.js +114 -0
  45. package/dist/plugins/specweave-github/lib/github-push-sync.js.map +1 -0
  46. package/dist/plugins/specweave-github/lib/github-rate-limiter.d.ts +53 -0
  47. package/dist/plugins/specweave-github/lib/github-rate-limiter.d.ts.map +1 -0
  48. package/dist/plugins/specweave-github/lib/github-rate-limiter.js +109 -0
  49. package/dist/plugins/specweave-github/lib/github-rate-limiter.js.map +1 -0
  50. package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.d.ts +21 -0
  51. package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.d.ts.map +1 -0
  52. package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.js +161 -0
  53. package/dist/plugins/specweave-github/lib/github-spec-frontmatter-updater.js.map +1 -0
  54. package/dist/plugins/specweave-github/lib/github-sync-orchestrator.d.ts +46 -0
  55. package/dist/plugins/specweave-github/lib/github-sync-orchestrator.d.ts.map +1 -0
  56. package/dist/plugins/specweave-github/lib/github-sync-orchestrator.js +99 -0
  57. package/dist/plugins/specweave-github/lib/github-sync-orchestrator.js.map +1 -0
  58. package/dist/plugins/specweave-github/lib/github-us-auto-closer.d.ts +43 -0
  59. package/dist/plugins/specweave-github/lib/github-us-auto-closer.d.ts.map +1 -0
  60. package/dist/plugins/specweave-github/lib/github-us-auto-closer.js +153 -0
  61. package/dist/plugins/specweave-github/lib/github-us-auto-closer.js.map +1 -0
  62. package/dist/plugins/specweave-github/lib/index.d.ts +1 -4
  63. package/dist/plugins/specweave-github/lib/index.d.ts.map +1 -1
  64. package/dist/plugins/specweave-github/lib/index.js +1 -4
  65. package/dist/plugins/specweave-github/lib/index.js.map +1 -1
  66. package/dist/plugins/specweave-testing/lib/playwright-ci-defaults.d.ts +7 -0
  67. package/dist/plugins/specweave-testing/lib/playwright-ci-defaults.d.ts.map +1 -0
  68. package/dist/plugins/specweave-testing/lib/playwright-ci-defaults.js +15 -0
  69. package/dist/plugins/specweave-testing/lib/playwright-ci-defaults.js.map +1 -0
  70. package/dist/plugins/specweave-testing/lib/playwright-cli-detector.d.ts +10 -0
  71. package/dist/plugins/specweave-testing/lib/playwright-cli-detector.d.ts.map +1 -0
  72. package/dist/plugins/specweave-testing/lib/playwright-cli-detector.js +36 -0
  73. package/dist/plugins/specweave-testing/lib/playwright-cli-detector.js.map +1 -0
  74. package/dist/plugins/specweave-testing/lib/playwright-cli-runner.d.ts +25 -0
  75. package/dist/plugins/specweave-testing/lib/playwright-cli-runner.d.ts.map +1 -0
  76. package/dist/plugins/specweave-testing/lib/playwright-cli-runner.js +57 -0
  77. package/dist/plugins/specweave-testing/lib/playwright-cli-runner.js.map +1 -0
  78. package/dist/plugins/specweave-testing/lib/playwright-routing.d.ts +7 -0
  79. package/dist/plugins/specweave-testing/lib/playwright-routing.d.ts.map +1 -0
  80. package/dist/plugins/specweave-testing/lib/playwright-routing.js +17 -0
  81. package/dist/plugins/specweave-testing/lib/playwright-routing.js.map +1 -0
  82. package/dist/src/cli/commands/auto.d.ts.map +1 -1
  83. package/dist/src/cli/commands/auto.js +1 -2
  84. package/dist/src/cli/commands/auto.js.map +1 -1
  85. package/dist/src/cli/commands/cancel-auto.js +1 -2
  86. package/dist/src/cli/commands/cancel-auto.js.map +1 -1
  87. package/dist/src/cli/commands/living-docs.js +2 -2
  88. package/dist/src/cli/commands/living-docs.js.map +1 -1
  89. package/dist/src/cli/commands/update.d.ts.map +1 -1
  90. package/dist/src/cli/commands/update.js +1 -2
  91. package/dist/src/cli/commands/update.js.map +1 -1
  92. package/dist/src/core/config/types.d.ts +8 -0
  93. package/dist/src/core/config/types.d.ts.map +1 -1
  94. package/dist/src/core/config/types.js +3 -0
  95. package/dist/src/core/config/types.js.map +1 -1
  96. package/dist/src/core/types/sync-profile.d.ts +72 -0
  97. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  98. package/dist/src/core/types/sync-profile.js +6 -0
  99. package/dist/src/core/types/sync-profile.js.map +1 -1
  100. package/package.json +2 -2
  101. package/plugins/specweave/hooks/hooks.json +2 -2
  102. package/plugins/specweave/hooks/startup-health-check.sh +1 -1
  103. package/plugins/specweave/hooks/stop-auto-v5.sh +166 -0
  104. package/plugins/specweave/hooks/user-prompt-submit.sh +10 -0
  105. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +21 -1
  106. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +1 -1
  107. package/plugins/specweave/skills/auto/SKILL.md +71 -251
  108. package/plugins/specweave/skills/team-build/SKILL.md +370 -0
  109. package/plugins/specweave/skills/team-merge/SKILL.md +123 -0
  110. package/plugins/specweave/skills/team-orchestrate/SKILL.md +800 -0
  111. package/plugins/specweave/skills/team-status/SKILL.md +89 -0
  112. package/plugins/specweave-github/MULTI-PROJECT-SYNC-ARCHITECTURE.md +94 -8
  113. package/plugins/specweave-github/commands/sync.md +17 -3
  114. package/plugins/specweave-github/hooks/github-ac-sync-handler.sh +255 -0
  115. package/plugins/specweave-github/hooks/github-auto-create-handler.sh +455 -0
  116. package/plugins/specweave-github/lib/github-ac-comment-poster.js +150 -0
  117. package/plugins/specweave-github/lib/github-ac-comment-poster.ts +245 -0
  118. package/plugins/specweave-github/lib/github-batch-sync.js +93 -0
  119. package/plugins/specweave-github/lib/github-batch-sync.ts +152 -0
  120. package/plugins/specweave-github/lib/github-board-resolver-v2.js +47 -0
  121. package/plugins/specweave-github/lib/github-board-resolver-v2.ts +73 -0
  122. package/plugins/specweave-github/lib/github-conflict-resolver.js +90 -0
  123. package/plugins/specweave-github/lib/github-conflict-resolver.ts +154 -0
  124. package/plugins/specweave-github/lib/github-cross-repo-sync.js +168 -0
  125. package/plugins/specweave-github/lib/github-cross-repo-sync.ts +252 -0
  126. package/plugins/specweave-github/lib/github-field-sync.js +116 -0
  127. package/plugins/specweave-github/lib/github-field-sync.ts +165 -0
  128. package/plugins/specweave-github/lib/github-graphql-client.js +129 -0
  129. package/plugins/specweave-github/lib/github-graphql-client.ts +181 -0
  130. package/plugins/specweave-github/lib/github-issue-body-generator.js +30 -0
  131. package/plugins/specweave-github/lib/github-issue-body-generator.ts +76 -0
  132. package/plugins/specweave-github/lib/github-issue-body-parser.js +55 -0
  133. package/plugins/specweave-github/lib/github-issue-body-parser.ts +92 -0
  134. package/plugins/specweave-github/lib/github-pull-sync.js +185 -0
  135. package/plugins/specweave-github/lib/github-pull-sync.ts +343 -0
  136. package/plugins/specweave-github/lib/github-push-sync.js +119 -0
  137. package/plugins/specweave-github/lib/github-push-sync.ts +174 -0
  138. package/plugins/specweave-github/lib/github-rate-limiter.js +96 -0
  139. package/plugins/specweave-github/lib/github-rate-limiter.ts +143 -0
  140. package/plugins/specweave-github/lib/github-spec-frontmatter-updater.js +117 -0
  141. package/plugins/specweave-github/lib/github-spec-frontmatter-updater.ts +180 -0
  142. package/plugins/specweave-github/lib/github-sync-orchestrator.js +84 -0
  143. package/plugins/specweave-github/lib/github-sync-orchestrator.ts +156 -0
  144. package/plugins/specweave-github/lib/github-us-auto-closer.js +134 -0
  145. package/plugins/specweave-github/lib/github-us-auto-closer.ts +226 -0
  146. package/plugins/specweave-github/lib/index.js +1 -7
  147. package/plugins/specweave-github/lib/index.ts +1 -4
  148. package/plugins/specweave-github/skills/github-sync/SKILL.md +76 -4
  149. package/plugins/specweave-testing/commands/e2e-setup.md +18 -0
  150. package/plugins/specweave-testing/commands/ui-automate.md +2 -0
  151. package/plugins/specweave-testing/commands/ui-inspect.md +8 -0
  152. package/plugins/specweave-testing/lib/playwright-ci-defaults.d.ts +6 -0
  153. package/plugins/specweave-testing/lib/playwright-ci-defaults.js +14 -0
  154. package/plugins/specweave-testing/lib/playwright-ci-defaults.ts +24 -0
  155. package/plugins/specweave-testing/lib/playwright-cli-detector.js +33 -0
  156. package/plugins/specweave-testing/lib/playwright-cli-detector.ts +48 -0
  157. package/plugins/specweave-testing/lib/playwright-cli-runner.js +58 -0
  158. package/plugins/specweave-testing/lib/playwright-cli-runner.ts +80 -0
  159. package/plugins/specweave-testing/lib/playwright-routing.js +16 -0
  160. package/plugins/specweave-testing/lib/playwright-routing.ts +38 -0
  161. package/plugins/specweave-testing/skills/e2e-testing/SKILL.md +38 -0
  162. package/src/templates/CLAUDE.md.template +7 -0
  163. package/src/templates/config.json.template +9 -1
  164. package/dist/plugins/specweave-github/lib/subtask-sync.d.ts +0 -51
  165. package/dist/plugins/specweave-github/lib/subtask-sync.d.ts.map +0 -1
  166. package/dist/plugins/specweave-github/lib/subtask-sync.js +0 -147
  167. package/dist/plugins/specweave-github/lib/subtask-sync.js.map +0 -1
  168. package/dist/plugins/specweave-github/lib/task-parser.d.ts +0 -37
  169. package/dist/plugins/specweave-github/lib/task-parser.d.ts.map +0 -1
  170. package/dist/plugins/specweave-github/lib/task-parser.js +0 -211
  171. package/dist/plugins/specweave-github/lib/task-parser.js.map +0 -1
  172. package/dist/plugins/specweave-github/lib/task-sync.d.ts +0 -56
  173. package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +0 -1
  174. package/dist/plugins/specweave-github/lib/task-sync.js +0 -375
  175. package/dist/plugins/specweave-github/lib/task-sync.js.map +0 -1
  176. package/plugins/specweave/hooks/validate-completion-conditions.sh +0 -474
  177. package/plugins/specweave-github/lib/subtask-sync.d.ts +0 -51
  178. package/plugins/specweave-github/lib/subtask-sync.d.ts.map +0 -1
  179. package/plugins/specweave-github/lib/subtask-sync.js +0 -154
  180. package/plugins/specweave-github/lib/subtask-sync.js.map +0 -1
  181. package/plugins/specweave-github/lib/subtask-sync.ts +0 -225
  182. package/plugins/specweave-github/lib/task-parser.d.js +0 -0
  183. package/plugins/specweave-github/lib/task-parser.d.ts +0 -37
  184. package/plugins/specweave-github/lib/task-parser.d.ts.map +0 -1
  185. package/plugins/specweave-github/lib/task-parser.js +0 -195
  186. package/plugins/specweave-github/lib/task-parser.js.map +0 -1
  187. package/plugins/specweave-github/lib/task-parser.ts +0 -246
  188. package/plugins/specweave-github/lib/task-sync.d.js +0 -0
  189. package/plugins/specweave-github/lib/task-sync.d.ts +0 -51
  190. package/plugins/specweave-github/lib/task-sync.d.ts.map +0 -1
  191. package/plugins/specweave-github/lib/task-sync.js +0 -415
  192. package/plugins/specweave-github/lib/task-sync.js.map +0 -1
  193. package/plugins/specweave-github/lib/task-sync.ts +0 -451
  194. package/plugins/specweave-github/skills/github-issue-tracker/SKILL.md +0 -496
  195. /package/plugins/specweave/hooks/{stop-auto.sh → _archive/stop-auto-v4-legacy.sh} +0 -0
  196. /package/plugins/{specweave-github/lib/subtask-sync.d.js → specweave-testing/lib/playwright-ci-defaults.d.js} +0 -0
@@ -1,225 +0,0 @@
1
- /**
2
- * Subtask synchronization with GitHub issue checkboxes
3
- * Updates GitHub issue body when subtasks complete
4
- */
5
-
6
- import { GitHubClient } from './github-client';
7
- import { TaskParser } from './task-parser';
8
- import { Task, Subtask } from './types';
9
- import * as path from 'path';
10
-
11
- export class SubtaskSync {
12
- private client: GitHubClient;
13
- private incrementPath: string;
14
-
15
- constructor(incrementPath: string, repo?: string) {
16
- this.incrementPath = incrementPath;
17
- this.client = new GitHubClient(repo);
18
- }
19
-
20
- /**
21
- * Update subtask status in GitHub issue
22
- */
23
- async updateSubtaskStatus(
24
- taskId: string,
25
- subtaskId: string,
26
- completed: boolean
27
- ): Promise<void> {
28
- // 1. Parse tasks to get task info
29
- const tasks = TaskParser.parseTasksFile(this.incrementPath);
30
- const task = tasks.find(t => t.id === taskId);
31
-
32
- if (!task) {
33
- throw new Error(`Task ${taskId} not found`);
34
- }
35
-
36
- if (!task.githubIssue) {
37
- console.warn(`Task ${taskId} not synced to GitHub. Skipping subtask sync.`);
38
- return;
39
- }
40
-
41
- // 2. Get current issue
42
- const issue = await this.client.getIssue(task.githubIssue);
43
-
44
- // 3. Update subtask checkbox in issue body
45
- const updatedBody = this.updateSubtaskCheckbox(
46
- issue.body,
47
- subtaskId,
48
- completed
49
- );
50
-
51
- // 4. Update GitHub issue
52
- await this.client.updateIssueBody(task.githubIssue, updatedBody);
53
-
54
- // 5. Check if all subtasks done
55
- const allDone = this.areAllSubtasksDone(updatedBody);
56
- if (allDone) {
57
- await this.client.addComment(
58
- task.githubIssue,
59
- '✅ All subtasks completed!'
60
- );
61
- }
62
-
63
- console.log(`✅ Updated subtask ${subtaskId} in GitHub issue #${task.githubIssue}`);
64
- }
65
-
66
- /**
67
- * Sync all subtasks for a task
68
- */
69
- async syncAllSubtasks(taskId: string): Promise<void> {
70
- const tasks = TaskParser.parseTasksFile(this.incrementPath);
71
- const task = tasks.find(t => t.id === taskId);
72
-
73
- if (!task || !task.githubIssue || !task.subtasks) {
74
- return;
75
- }
76
-
77
- const issue = await this.client.getIssue(task.githubIssue);
78
- let updatedBody = issue.body;
79
-
80
- // Update all subtasks
81
- for (const subtask of task.subtasks) {
82
- updatedBody = this.updateSubtaskCheckbox(
83
- updatedBody,
84
- subtask.id,
85
- subtask.completed
86
- );
87
- }
88
-
89
- await this.client.updateIssueBody(task.githubIssue, updatedBody);
90
- console.log(`✅ Synced all subtasks for ${taskId} to GitHub issue #${task.githubIssue}`);
91
- }
92
-
93
- /**
94
- * Update checkbox in issue body
95
- */
96
- private updateSubtaskCheckbox(
97
- body: string,
98
- subtaskId: string,
99
- completed: boolean
100
- ): string {
101
- const checkbox = completed ? '[x]' : '[ ]';
102
-
103
- // Try to find by subtask ID
104
- const idPattern = new RegExp(`^(- \\[[ x]\\]\\s+${this.escapeRegex(subtaskId)}:.+)$`, 'm');
105
- if (idPattern.test(body)) {
106
- return body.replace(idPattern, (match) => {
107
- return match.replace(/\[[ x]\]/, checkbox);
108
- });
109
- }
110
-
111
- // Fallback: try to find by description (less reliable)
112
- // This is a basic approach - could be enhanced
113
- return body;
114
- }
115
-
116
- /**
117
- * Check if all subtasks are done
118
- */
119
- private areAllSubtasksDone(body: string): boolean {
120
- const subtaskLines = body.match(/^- \[[ x]\] S-\d+-\d+:.+$/gm);
121
- if (!subtaskLines || subtaskLines.length === 0) {
122
- return false;
123
- }
124
-
125
- return subtaskLines.every(line => line.includes('[x]'));
126
- }
127
-
128
- /**
129
- * Escape special regex characters
130
- */
131
- private escapeRegex(str: string): string {
132
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
133
- }
134
-
135
- /**
136
- * Post task completion comment to GitHub issue
137
- */
138
- async postTaskCompletionComment(
139
- taskId: string,
140
- stats: {
141
- filesModified?: number;
142
- linesAdded?: number;
143
- linesDeleted?: number;
144
- testsAdded?: number;
145
- actualDuration?: string;
146
- estimatedDuration?: string;
147
- summary?: string;
148
- nextTask?: string;
149
- progress?: { completed: number; total: number };
150
- }
151
- ): Promise<void> {
152
- const tasks = TaskParser.parseTasksFile(this.incrementPath);
153
- const task = tasks.find(t => t.id === taskId);
154
-
155
- if (!task || !task.githubIssue) {
156
- return;
157
- }
158
-
159
- const {
160
- filesModified = 0,
161
- linesAdded = 0,
162
- linesDeleted = 0,
163
- testsAdded = 0,
164
- actualDuration = 'Unknown',
165
- estimatedDuration = task.estimate,
166
- summary = 'No summary provided',
167
- nextTask = 'None',
168
- progress
169
- } = stats;
170
-
171
- const comment = `✅ **Task Completed**
172
-
173
- **Files Modified**: ${filesModified} files (+${linesAdded}/-${linesDeleted} lines)
174
- **Tests**: ${testsAdded > 0 ? `All passing (${testsAdded} new tests)` : 'All passing'}
175
- **Duration**: ${actualDuration} (estimated: ${estimatedDuration})
176
-
177
- **What Changed**:
178
- ${summary}
179
-
180
- **Next Task**: ${nextTask}
181
-
182
- ---
183
- ${progress ? `Progress: ${progress.completed}/${progress.total} tasks (${Math.round(progress.completed / progress.total * 100)}%)` : ''}
184
- 🤖 Posted by SpecWeave`;
185
-
186
- await this.client.addComment(task.githubIssue, comment);
187
- console.log(`✅ Posted completion comment to issue #${task.githubIssue}`);
188
- }
189
-
190
- /**
191
- * Update epic issue progress
192
- */
193
- async updateEpicProgress(epicIssueNumber: number, completed: number, total: number): Promise<void> {
194
- const epic = await this.client.getIssue(epicIssueNumber);
195
-
196
- // Update checkboxes in epic body
197
- const tasks = TaskParser.parseTasksFile(this.incrementPath);
198
- let updatedBody = epic.body;
199
-
200
- for (const task of tasks) {
201
- if (task.status === 'completed') {
202
- // Find and check the checkbox for this task
203
- const taskPattern = new RegExp(`^(- \\[[ x]\\] \\[${this.escapeRegex(task.id)}\\].+)$`, 'm');
204
- if (taskPattern.test(updatedBody)) {
205
- updatedBody = updatedBody.replace(taskPattern, (match) => {
206
- return match.replace(/\[[ x]\]/, '[x]');
207
- });
208
- }
209
- }
210
- }
211
-
212
- await this.client.updateIssueBody(epicIssueNumber, updatedBody);
213
-
214
- // Post progress comment
215
- const progressComment = `📊 **Progress Update**
216
-
217
- ${completed}/${total} tasks completed (${Math.round(completed / total * 100)}%)
218
-
219
- ---
220
- 🤖 Updated by SpecWeave`;
221
-
222
- await this.client.addComment(epicIssueNumber, progressComment);
223
- console.log(`✅ Updated epic issue #${epicIssueNumber} progress`);
224
- }
225
- }
File without changes
@@ -1,37 +0,0 @@
1
- /**
2
- * Parser for tasks.md files
3
- * Extracts task information for GitHub sync
4
- */
5
- import { Task } from './types';
6
- export declare class TaskParser {
7
- /**
8
- * Parse tasks.md file and extract all tasks
9
- */
10
- static parseTasksFile(incrementPath: string): Task[];
11
- /**
12
- * Parse task content into structured Task objects
13
- */
14
- static parseTasks(content: string): Task[];
15
- /**
16
- * Parse individual task section
17
- */
18
- private static parseTask;
19
- private static extractPriority;
20
- private static extractEstimate;
21
- private static extractStatus;
22
- private static extractDescription;
23
- private static extractGitHubIssue;
24
- private static extractAssignee;
25
- private static extractSubtasks;
26
- private static extractFiles;
27
- private static extractImplementation;
28
- private static extractAcceptanceCriteria;
29
- private static extractDependencies;
30
- private static extractBlocks;
31
- private static extractPhase;
32
- /**
33
- * Update tasks.md file with GitHub issue numbers
34
- */
35
- static updateTasksWithGitHubIssues(incrementPath: string, taskIssueMap: Record<string, number>): void;
36
- }
37
- //# sourceMappingURL=task-parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-parser.d.ts","sourceRoot":"","sources":["task-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,IAAI,EAAW,MAAM,SAAS,CAAC;AAExC,qBAAa,UAAU;IACrB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,EAAE;IAWpD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE;IAwB1C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IA8BxB,OAAO,CAAC,MAAM,CAAC,eAAe;IAK9B,OAAO,CAAC,MAAM,CAAC,eAAe;IAK9B,OAAO,CAAC,MAAM,CAAC,aAAa;IAS5B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAKjC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAKjC,OAAO,CAAC,MAAM,CAAC,eAAe;IAK9B,OAAO,CAAC,MAAM,CAAC,eAAe;IA6B9B,OAAO,CAAC,MAAM,CAAC,YAAY;IAS3B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAKpC,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAQxC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAQlC,OAAO,CAAC,MAAM,CAAC,aAAa;IAQ5B,OAAO,CAAC,MAAM,CAAC,YAAY;IAe3B;;OAEG;IACH,MAAM,CAAC,2BAA2B,CAChC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,IAAI;CAuCR"}
@@ -1,195 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- class TaskParser {
4
- /**
5
- * Parse tasks.md file and extract all tasks
6
- */
7
- static parseTasksFile(incrementPath) {
8
- const tasksPath = path.join(incrementPath, "tasks.md");
9
- if (!fs.existsSync(tasksPath)) {
10
- throw new Error(`tasks.md not found at ${tasksPath}`);
11
- }
12
- const content = fs.readFileSync(tasksPath, "utf-8");
13
- return this.parseTasks(content);
14
- }
15
- /**
16
- * Parse task content into structured Task objects
17
- */
18
- static parseTasks(content) {
19
- const tasks = [];
20
- const taskPattern = /###\s+(T-\d+(?:-[A-Z])?):\s+(.+?)$/gm;
21
- const matches = [...content.matchAll(taskPattern)];
22
- for (let i = 0; i < matches.length; i++) {
23
- const match = matches[i];
24
- const taskId = match[1];
25
- const taskTitle = match[2].trim();
26
- const startIndex = match.index;
27
- const endIndex = i < matches.length - 1 ? matches[i + 1].index : content.length;
28
- const taskContent = content.substring(startIndex, endIndex);
29
- const task = this.parseTask(taskId, taskTitle, taskContent);
30
- if (task) {
31
- tasks.push(task);
32
- }
33
- }
34
- return tasks;
35
- }
36
- /**
37
- * Parse individual task section
38
- */
39
- static parseTask(taskId, taskTitle, content) {
40
- try {
41
- const task = {
42
- id: taskId,
43
- title: taskTitle,
44
- priority: this.extractPriority(content),
45
- estimate: this.extractEstimate(content),
46
- status: this.extractStatus(content),
47
- description: this.extractDescription(content)
48
- };
49
- task.githubIssue = this.extractGitHubIssue(content);
50
- task.assignee = this.extractAssignee(content);
51
- task.subtasks = this.extractSubtasks(content);
52
- task.filesToCreate = this.extractFiles(content, "Files to Create");
53
- task.filesToModify = this.extractFiles(content, "Files to Modify");
54
- task.implementation = this.extractImplementation(content);
55
- task.acceptanceCriteria = this.extractAcceptanceCriteria(content);
56
- task.dependencies = this.extractDependencies(content);
57
- task.blocks = this.extractBlocks(content);
58
- task.phase = this.extractPhase(content);
59
- return task;
60
- } catch (error) {
61
- console.error(`Error parsing task ${taskId}:`, error);
62
- return null;
63
- }
64
- }
65
- static extractPriority(content) {
66
- const match = content.match(/\*\*Priority\*\*:\s+(P[0-3])/);
67
- return match?.[1] || "P1";
68
- }
69
- static extractEstimate(content) {
70
- const match = content.match(/\*\*Estimate\*\*:\s+(.+?)$/m);
71
- return match?.[1]?.trim() || "Unknown";
72
- }
73
- static extractStatus(content) {
74
- const match = content.match(/\*\*Status\*\*:\s+(\w+)/);
75
- const status = match?.[1];
76
- if (status === "pending" || status === "in_progress" || status === "completed" || status === "blocked") {
77
- return status;
78
- }
79
- return "pending";
80
- }
81
- static extractDescription(content) {
82
- const match = content.match(/\*\*Description\*\*:\s*\n(.+?)(?=\n\*\*|$)/s);
83
- return match?.[1]?.trim() || "";
84
- }
85
- static extractGitHubIssue(content) {
86
- const match = content.match(/\*\*GitHub Issue\*\*:\s+#(\d+)/);
87
- return match ? parseInt(match[1], 10) : void 0;
88
- }
89
- static extractAssignee(content) {
90
- const match = content.match(/\*\*Assignee\*\*:\s+@?(\w+)/);
91
- return match?.[1];
92
- }
93
- static extractSubtasks(content) {
94
- const subtaskSection = content.match(/\*\*Subtasks\*\*:?\s*\n((?:- \[.\] .+\n?)+)/);
95
- if (!subtaskSection) return void 0;
96
- const subtaskLines = subtaskSection[1].match(/- \[(x| )\] (.+?)(?:\((.+?)\))?$/gm);
97
- if (!subtaskLines) return void 0;
98
- return subtaskLines.map((line) => {
99
- const match = line.match(/- \[(x| )\] (.+?)(?:\((.+?)\))?$/);
100
- if (!match) return null;
101
- const completed = match[1] === "x";
102
- const description = match[2].trim();
103
- const estimate = match[3]?.trim() || "Unknown";
104
- const idMatch = description.match(/^(S-\d+-\d+):\s*(.+)/);
105
- const id = idMatch ? idMatch[1] : `S-${Date.now()}`;
106
- const cleanDescription = idMatch ? idMatch[2] : description;
107
- return {
108
- id,
109
- description: cleanDescription,
110
- estimate,
111
- completed
112
- };
113
- }).filter((st) => st !== null);
114
- }
115
- static extractFiles(content, section) {
116
- const pattern = new RegExp(`\\*\\*${section}\\*\\*:?\\s*\\n((?:- \`.+?\`\\n?)+)`, "s");
117
- const match = content.match(pattern);
118
- if (!match) return void 0;
119
- const files = match[1].match(/- `(.+?)`/g);
120
- return files?.map((f) => f.replace(/- `(.+?)`/, "$1"));
121
- }
122
- static extractImplementation(content) {
123
- const match = content.match(/\*\*Implementation\*\*:?\s*\n```[\w]*\n([\s\S]+?)\n```/);
124
- return match?.[1]?.trim();
125
- }
126
- static extractAcceptanceCriteria(content) {
127
- const match = content.match(/\*\*Acceptance Criteria\*\*:?\s*\n((?:- .+\n?)+)/);
128
- if (!match) return void 0;
129
- const criteria = match[1].match(/- (.+)/g);
130
- return criteria?.map((c) => c.replace(/^- /, "").replace(/^✅\s*/, ""));
131
- }
132
- static extractDependencies(content) {
133
- const match = content.match(/\*\*Dependencies\*\*:?\s*\n((?:- .+\n?)+)/);
134
- if (!match) return void 0;
135
- const deps = match[1].match(/- (T-\d+(?:-[A-Z])?)/g);
136
- return deps?.map((d) => d.replace(/^- /, "").match(/(T-\d+(?:-[A-Z])?)/)?.[1]).filter((d) => !!d);
137
- }
138
- static extractBlocks(content) {
139
- const match = content.match(/\*\*Blocks\*\*:?\s*\n((?:- .+\n?)+)/);
140
- if (!match) return void 0;
141
- const blocks = match[1].match(/- (T-\d+(?:-[A-Z])?)/g);
142
- return blocks?.map((b) => b.replace(/^- /, "").match(/(T-\d+(?:-[A-Z])?)/)?.[1]).filter((b) => !!b);
143
- }
144
- static extractPhase(content) {
145
- const lines = content.split("\n");
146
- for (let i = 0; i < lines.length; i++) {
147
- const line = lines[i];
148
- if (line.startsWith("##") && !line.startsWith("###")) {
149
- const phaseMatch = line.match(/##\s+(.+?)(?:\s+-\s+\d+\s+tasks)?$/);
150
- if (phaseMatch) {
151
- return phaseMatch[1].trim();
152
- }
153
- }
154
- }
155
- return void 0;
156
- }
157
- /**
158
- * Update tasks.md file with GitHub issue numbers
159
- */
160
- static updateTasksWithGitHubIssues(incrementPath, taskIssueMap) {
161
- const tasksPath = path.join(incrementPath, "tasks.md");
162
- let content = fs.readFileSync(tasksPath, "utf-8");
163
- for (const [taskId, issueNumber] of Object.entries(taskIssueMap)) {
164
- const taskHeaderPattern = new RegExp(`(###\\s+${taskId}:.+?$)`, "m");
165
- const match = content.match(taskHeaderPattern);
166
- if (!match) continue;
167
- const taskStart = match.index;
168
- const nextTaskPattern = /###\s+T-\d+(?:-[A-Z])?:/g;
169
- nextTaskPattern.lastIndex = taskStart + match[0].length;
170
- const nextMatch = nextTaskPattern.exec(content);
171
- const taskEnd = nextMatch ? nextMatch.index : content.length;
172
- const taskSection = content.substring(taskStart, taskEnd);
173
- if (taskSection.includes("**GitHub Issue**:")) {
174
- const updatedSection = taskSection.replace(
175
- /\*\*GitHub Issue\*\*:.+$/m,
176
- `**GitHub Issue**: #${issueNumber}`
177
- );
178
- content = content.substring(0, taskStart) + updatedSection + content.substring(taskEnd);
179
- } else {
180
- const statusLinePattern = /(\*\*Status\*\*:.+?$)/m;
181
- const statusMatch = taskSection.match(statusLinePattern);
182
- if (statusMatch) {
183
- const insertPoint = taskStart + taskSection.indexOf(statusMatch[0]) + statusMatch[0].length;
184
- const insertion = `
185
- **GitHub Issue**: #${issueNumber}`;
186
- content = content.substring(0, insertPoint) + insertion + content.substring(insertPoint);
187
- }
188
- }
189
- }
190
- fs.writeFileSync(tasksPath, content, "utf-8");
191
- }
192
- }
193
- export {
194
- TaskParser
195
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-parser.js","sourceRoot":"","sources":["task-parser.ts"],"names":[],"mappings":"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"}