@ginkoai/cli 1.6.1 → 1.7.0

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 (246) hide show
  1. package/README.md +34 -0
  2. package/dist/commands/agent/agent-client.d.ts +150 -0
  3. package/dist/commands/agent/agent-client.d.ts.map +1 -0
  4. package/dist/commands/agent/agent-client.js +170 -0
  5. package/dist/commands/agent/agent-client.js.map +1 -0
  6. package/dist/commands/agent/index.d.ts +22 -0
  7. package/dist/commands/agent/index.d.ts.map +1 -0
  8. package/dist/commands/agent/index.js +121 -0
  9. package/dist/commands/agent/index.js.map +1 -0
  10. package/dist/commands/agent/list.d.ts +22 -0
  11. package/dist/commands/agent/list.d.ts.map +1 -0
  12. package/dist/commands/agent/list.js +119 -0
  13. package/dist/commands/agent/list.js.map +1 -0
  14. package/dist/commands/agent/register.d.ts +21 -0
  15. package/dist/commands/agent/register.d.ts.map +1 -0
  16. package/dist/commands/agent/register.js +97 -0
  17. package/dist/commands/agent/register.js.map +1 -0
  18. package/dist/commands/agent/status.d.ts +19 -0
  19. package/dist/commands/agent/status.d.ts.map +1 -0
  20. package/dist/commands/agent/status.js +271 -0
  21. package/dist/commands/agent/status.js.map +1 -0
  22. package/dist/commands/agent/work.d.ts +22 -0
  23. package/dist/commands/agent/work.d.ts.map +1 -0
  24. package/dist/commands/agent/work.js +459 -0
  25. package/dist/commands/agent/work.js.map +1 -0
  26. package/dist/commands/checkpoint/create.d.ts +27 -0
  27. package/dist/commands/checkpoint/create.d.ts.map +1 -0
  28. package/dist/commands/checkpoint/create.js +82 -0
  29. package/dist/commands/checkpoint/create.js.map +1 -0
  30. package/dist/commands/checkpoint/index.d.ts +23 -0
  31. package/dist/commands/checkpoint/index.d.ts.map +1 -0
  32. package/dist/commands/checkpoint/index.js +91 -0
  33. package/dist/commands/checkpoint/index.js.map +1 -0
  34. package/dist/commands/checkpoint/list.d.ts +27 -0
  35. package/dist/commands/checkpoint/list.d.ts.map +1 -0
  36. package/dist/commands/checkpoint/list.js +115 -0
  37. package/dist/commands/checkpoint/list.js.map +1 -0
  38. package/dist/commands/checkpoint/show.d.ts +23 -0
  39. package/dist/commands/checkpoint/show.d.ts.map +1 -0
  40. package/dist/commands/checkpoint/show.js +102 -0
  41. package/dist/commands/checkpoint/show.js.map +1 -0
  42. package/dist/commands/dlq.d.ts +24 -0
  43. package/dist/commands/dlq.d.ts.map +1 -0
  44. package/dist/commands/dlq.js +172 -0
  45. package/dist/commands/dlq.js.map +1 -0
  46. package/dist/commands/epic.d.ts +29 -0
  47. package/dist/commands/epic.d.ts.map +1 -0
  48. package/dist/commands/epic.js +322 -0
  49. package/dist/commands/epic.js.map +1 -0
  50. package/dist/commands/escalation/create.d.ts +22 -0
  51. package/dist/commands/escalation/create.d.ts.map +1 -0
  52. package/dist/commands/escalation/create.js +122 -0
  53. package/dist/commands/escalation/create.js.map +1 -0
  54. package/dist/commands/escalation/escalation-client.d.ts +101 -0
  55. package/dist/commands/escalation/escalation-client.d.ts.map +1 -0
  56. package/dist/commands/escalation/escalation-client.js +129 -0
  57. package/dist/commands/escalation/escalation-client.js.map +1 -0
  58. package/dist/commands/escalation/index.d.ts +22 -0
  59. package/dist/commands/escalation/index.d.ts.map +1 -0
  60. package/dist/commands/escalation/index.js +94 -0
  61. package/dist/commands/escalation/index.js.map +1 -0
  62. package/dist/commands/escalation/list.d.ts +24 -0
  63. package/dist/commands/escalation/list.d.ts.map +1 -0
  64. package/dist/commands/escalation/list.js +170 -0
  65. package/dist/commands/escalation/list.js.map +1 -0
  66. package/dist/commands/escalation/resolve.d.ts +20 -0
  67. package/dist/commands/escalation/resolve.d.ts.map +1 -0
  68. package/dist/commands/escalation/resolve.js +102 -0
  69. package/dist/commands/escalation/resolve.js.map +1 -0
  70. package/dist/commands/graph/api-client.d.ts +222 -1
  71. package/dist/commands/graph/api-client.d.ts.map +1 -1
  72. package/dist/commands/graph/api-client.js +82 -0
  73. package/dist/commands/graph/api-client.js.map +1 -1
  74. package/dist/commands/handoff.d.ts.map +1 -1
  75. package/dist/commands/handoff.js +9 -1
  76. package/dist/commands/handoff.js.map +1 -1
  77. package/dist/commands/log.d.ts +3 -0
  78. package/dist/commands/log.d.ts.map +1 -1
  79. package/dist/commands/log.js +110 -16
  80. package/dist/commands/log.js.map +1 -1
  81. package/dist/commands/notifications/history.d.ts +21 -0
  82. package/dist/commands/notifications/history.d.ts.map +1 -0
  83. package/dist/commands/notifications/history.js +160 -0
  84. package/dist/commands/notifications/history.js.map +1 -0
  85. package/dist/commands/notifications/index.d.ts +22 -0
  86. package/dist/commands/notifications/index.d.ts.map +1 -0
  87. package/dist/commands/notifications/index.js +87 -0
  88. package/dist/commands/notifications/index.js.map +1 -0
  89. package/dist/commands/notifications/list.d.ts +19 -0
  90. package/dist/commands/notifications/list.d.ts.map +1 -0
  91. package/dist/commands/notifications/list.js +132 -0
  92. package/dist/commands/notifications/list.js.map +1 -0
  93. package/dist/commands/notifications/test.d.ts +19 -0
  94. package/dist/commands/notifications/test.d.ts.map +1 -0
  95. package/dist/commands/notifications/test.js +217 -0
  96. package/dist/commands/notifications/test.js.map +1 -0
  97. package/dist/commands/orchestrate.d.ts +25 -0
  98. package/dist/commands/orchestrate.d.ts.map +1 -0
  99. package/dist/commands/orchestrate.js +858 -0
  100. package/dist/commands/orchestrate.js.map +1 -0
  101. package/dist/commands/sprint/deps.d.ts +29 -0
  102. package/dist/commands/sprint/deps.d.ts.map +1 -0
  103. package/dist/commands/sprint/deps.js +269 -0
  104. package/dist/commands/sprint/deps.js.map +1 -0
  105. package/dist/commands/sprint/index.d.ts +10 -5
  106. package/dist/commands/sprint/index.d.ts.map +1 -1
  107. package/dist/commands/sprint/index.js +26 -5
  108. package/dist/commands/sprint/index.js.map +1 -1
  109. package/dist/commands/start/index.d.ts.map +1 -1
  110. package/dist/commands/start/index.js +6 -0
  111. package/dist/commands/start/index.js.map +1 -1
  112. package/dist/commands/start/start-reflection.d.ts +11 -0
  113. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  114. package/dist/commands/start/start-reflection.js +150 -12
  115. package/dist/commands/start/start-reflection.js.map +1 -1
  116. package/dist/commands/verify.d.ts +17 -0
  117. package/dist/commands/verify.d.ts.map +1 -0
  118. package/dist/commands/verify.js +232 -0
  119. package/dist/commands/verify.js.map +1 -0
  120. package/dist/core/session-log-manager.d.ts +1 -1
  121. package/dist/core/session-log-manager.d.ts.map +1 -1
  122. package/dist/core/session-log-manager.js +12 -3
  123. package/dist/core/session-log-manager.js.map +1 -1
  124. package/dist/index.js +98 -1
  125. package/dist/index.js.map +1 -1
  126. package/dist/lib/__tests__/task-timeout.test.d.ts +12 -0
  127. package/dist/lib/__tests__/task-timeout.test.d.ts.map +1 -0
  128. package/dist/lib/__tests__/task-timeout.test.js +278 -0
  129. package/dist/lib/__tests__/task-timeout.test.js.map +1 -0
  130. package/dist/lib/agent-heartbeat.d.ts +68 -0
  131. package/dist/lib/agent-heartbeat.d.ts.map +1 -0
  132. package/dist/lib/agent-heartbeat.js +117 -0
  133. package/dist/lib/agent-heartbeat.js.map +1 -0
  134. package/dist/lib/checkpoint.d.ts +85 -0
  135. package/dist/lib/checkpoint.d.ts.map +1 -0
  136. package/dist/lib/checkpoint.js +323 -0
  137. package/dist/lib/checkpoint.js.map +1 -0
  138. package/dist/lib/context-metrics.d.ts +230 -0
  139. package/dist/lib/context-metrics.d.ts.map +1 -0
  140. package/dist/lib/context-metrics.js +372 -0
  141. package/dist/lib/context-metrics.js.map +1 -0
  142. package/dist/lib/dead-letter-queue.d.ts +108 -0
  143. package/dist/lib/dead-letter-queue.d.ts.map +1 -0
  144. package/dist/lib/dead-letter-queue.js +378 -0
  145. package/dist/lib/dead-letter-queue.js.map +1 -0
  146. package/dist/lib/event-logger.d.ts +9 -1
  147. package/dist/lib/event-logger.d.ts.map +1 -1
  148. package/dist/lib/event-logger.js +45 -3
  149. package/dist/lib/event-logger.js.map +1 -1
  150. package/dist/lib/event-queue.d.ts.map +1 -1
  151. package/dist/lib/event-queue.js +13 -2
  152. package/dist/lib/event-queue.js.map +1 -1
  153. package/dist/lib/examples/timeout-demo.d.ts +13 -0
  154. package/dist/lib/examples/timeout-demo.d.ts.map +1 -0
  155. package/dist/lib/examples/timeout-demo.js +102 -0
  156. package/dist/lib/examples/timeout-demo.js.map +1 -0
  157. package/dist/lib/examples/timeout-integration-example.d.ts +17 -0
  158. package/dist/lib/examples/timeout-integration-example.d.ts.map +1 -0
  159. package/dist/lib/examples/timeout-integration-example.js +223 -0
  160. package/dist/lib/examples/timeout-integration-example.js.map +1 -0
  161. package/dist/lib/notification-hooks.d.ts +103 -0
  162. package/dist/lib/notification-hooks.d.ts.map +1 -0
  163. package/dist/lib/notification-hooks.js +223 -0
  164. package/dist/lib/notification-hooks.js.map +1 -0
  165. package/dist/lib/notifications/discord.d.ts +20 -0
  166. package/dist/lib/notifications/discord.d.ts.map +1 -0
  167. package/dist/lib/notifications/discord.js +140 -0
  168. package/dist/lib/notifications/discord.js.map +1 -0
  169. package/dist/lib/notifications/index.d.ts +66 -0
  170. package/dist/lib/notifications/index.d.ts.map +1 -0
  171. package/dist/lib/notifications/index.js +120 -0
  172. package/dist/lib/notifications/index.js.map +1 -0
  173. package/dist/lib/notifications/slack.d.ts +20 -0
  174. package/dist/lib/notifications/slack.d.ts.map +1 -0
  175. package/dist/lib/notifications/slack.js +186 -0
  176. package/dist/lib/notifications/slack.js.map +1 -0
  177. package/dist/lib/notifications/teams.d.ts +20 -0
  178. package/dist/lib/notifications/teams.d.ts.map +1 -0
  179. package/dist/lib/notifications/teams.js +146 -0
  180. package/dist/lib/notifications/teams.js.map +1 -0
  181. package/dist/lib/notifications/webhook.d.ts +23 -0
  182. package/dist/lib/notifications/webhook.d.ts.map +1 -0
  183. package/dist/lib/notifications/webhook.js +65 -0
  184. package/dist/lib/notifications/webhook.js.map +1 -0
  185. package/dist/lib/orchestrator-state.d.ts +194 -0
  186. package/dist/lib/orchestrator-state.d.ts.map +1 -0
  187. package/dist/lib/orchestrator-state.js +332 -0
  188. package/dist/lib/orchestrator-state.js.map +1 -0
  189. package/dist/lib/output-formatter.d.ts +25 -1
  190. package/dist/lib/output-formatter.d.ts.map +1 -1
  191. package/dist/lib/output-formatter.js +37 -17
  192. package/dist/lib/output-formatter.js.map +1 -1
  193. package/dist/lib/realtime-cursor.d.ts +107 -0
  194. package/dist/lib/realtime-cursor.d.ts.map +1 -0
  195. package/dist/lib/realtime-cursor.js +260 -0
  196. package/dist/lib/realtime-cursor.js.map +1 -0
  197. package/dist/lib/rollback.d.ts +86 -0
  198. package/dist/lib/rollback.d.ts.map +1 -0
  199. package/dist/lib/rollback.js +405 -0
  200. package/dist/lib/rollback.js.map +1 -0
  201. package/dist/lib/sprint-loader.d.ts +41 -2
  202. package/dist/lib/sprint-loader.d.ts.map +1 -1
  203. package/dist/lib/sprint-loader.js +335 -9
  204. package/dist/lib/sprint-loader.js.map +1 -1
  205. package/dist/lib/stale-agent-detector.d.ts +102 -0
  206. package/dist/lib/stale-agent-detector.d.ts.map +1 -0
  207. package/dist/lib/stale-agent-detector.js +156 -0
  208. package/dist/lib/stale-agent-detector.js.map +1 -0
  209. package/dist/lib/task-dependencies.d.ts +143 -0
  210. package/dist/lib/task-dependencies.d.ts.map +1 -0
  211. package/dist/lib/task-dependencies.js +357 -0
  212. package/dist/lib/task-dependencies.js.map +1 -0
  213. package/dist/lib/task-timeout.d.ts +153 -0
  214. package/dist/lib/task-timeout.d.ts.map +1 -0
  215. package/dist/lib/task-timeout.js +505 -0
  216. package/dist/lib/task-timeout.js.map +1 -0
  217. package/dist/lib/verification/build-check.d.ts +55 -0
  218. package/dist/lib/verification/build-check.d.ts.map +1 -0
  219. package/dist/lib/verification/build-check.js +111 -0
  220. package/dist/lib/verification/build-check.js.map +1 -0
  221. package/dist/lib/verification/index.d.ts +19 -0
  222. package/dist/lib/verification/index.d.ts.map +1 -0
  223. package/dist/lib/verification/index.js +17 -0
  224. package/dist/lib/verification/index.js.map +1 -0
  225. package/dist/lib/verification/lint-check.d.ts +34 -0
  226. package/dist/lib/verification/lint-check.d.ts.map +1 -0
  227. package/dist/lib/verification/lint-check.js +215 -0
  228. package/dist/lib/verification/lint-check.js.map +1 -0
  229. package/dist/lib/verification/test-runner.d.ts +50 -0
  230. package/dist/lib/verification/test-runner.d.ts.map +1 -0
  231. package/dist/lib/verification/test-runner.js +225 -0
  232. package/dist/lib/verification/test-runner.js.map +1 -0
  233. package/dist/templates/ai-instructions-template.d.ts +3 -2
  234. package/dist/templates/ai-instructions-template.d.ts.map +1 -1
  235. package/dist/templates/ai-instructions-template.js +104 -2
  236. package/dist/templates/ai-instructions-template.js.map +1 -1
  237. package/dist/templates/epic-template.md +319 -0
  238. package/dist/utils/command-helpers.d.ts +10 -0
  239. package/dist/utils/command-helpers.d.ts.map +1 -1
  240. package/dist/utils/command-helpers.js +59 -1
  241. package/dist/utils/command-helpers.js.map +1 -1
  242. package/dist/utils/pattern-confidence.d.ts +82 -0
  243. package/dist/utils/pattern-confidence.d.ts.map +1 -0
  244. package/dist/utils/pattern-confidence.js +172 -0
  245. package/dist/utils/pattern-confidence.js.map +1 -0
  246. package/package.json +1 -1
@@ -38,6 +38,29 @@ async function findGitRoot() {
38
38
  return process.cwd();
39
39
  }
40
40
  }
41
+ /**
42
+ * Parse YAML frontmatter from markdown content
43
+ *
44
+ * @param content - Markdown content with optional frontmatter
45
+ * @returns Parsed frontmatter object or empty object
46
+ */
47
+ function parseFrontmatter(content) {
48
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
49
+ if (!frontmatterMatch) {
50
+ return {};
51
+ }
52
+ const frontmatter = {};
53
+ const lines = frontmatterMatch[1].split('\n');
54
+ for (const line of lines) {
55
+ const colonIndex = line.indexOf(':');
56
+ if (colonIndex > 0) {
57
+ const key = line.slice(0, colonIndex).trim();
58
+ const value = line.slice(colonIndex + 1).trim();
59
+ frontmatter[key] = value;
60
+ }
61
+ }
62
+ return frontmatter;
63
+ }
41
64
  /**
42
65
  * Find active sprint file
43
66
  *
@@ -45,6 +68,15 @@ async function findGitRoot() {
45
68
  * 1. Check CURRENT-SPRINT.md for "Between Sprints" status → return null
46
69
  * 2. Check CURRENT-SPRINT.md for sprint reference → return that file
47
70
  * 3. Fall back to scanning SPRINT-*.md files for first incomplete one
71
+ * - Respects frontmatter `status` field: active > not_started > (skip paused/complete)
72
+ *
73
+ * Valid status values:
74
+ * - active: Currently being worked on
75
+ * - not_started: Planned but not yet started
76
+ * - paused: Temporarily on hold (skipped by auto-detection)
77
+ * - complete: Finished (skipped by auto-detection)
78
+ * - proposed: Not yet approved (skipped by auto-detection)
79
+ * - abandoned: Cancelled (skipped by auto-detection)
48
80
  *
49
81
  * @param projectRoot - Project root directory
50
82
  * @returns Path to active sprint file or null (if between sprints)
@@ -84,22 +116,54 @@ export async function findActiveSprint(projectRoot) {
84
116
  .filter(f => f.startsWith('SPRINT-') && f.endsWith('.md') && f !== 'CURRENT-SPRINT.md')
85
117
  .sort()
86
118
  .reverse();
87
- // Find first sprint that's not complete
119
+ const candidates = [];
120
+ // Status values that should be skipped during auto-detection
121
+ const skipStatuses = ['paused', 'complete', 'proposed', 'abandoned'];
88
122
  for (const file of sprintFiles) {
89
123
  const filePath = path.join(sprintsDir, file);
90
124
  const content = await fs.readFile(filePath, 'utf-8');
125
+ // Parse frontmatter for status field
126
+ const frontmatter = parseFrontmatter(content);
127
+ const frontmatterStatus = frontmatter.status?.toLowerCase();
128
+ // Skip sprints with paused/complete/proposed/abandoned status in frontmatter
129
+ if (frontmatterStatus && skipStatuses.includes(frontmatterStatus)) {
130
+ continue;
131
+ }
91
132
  // Check if sprint is marked complete
92
- const statusMatch = content.match(/\*\*Sprint Status\*\*:\s*(.+)/);
93
- const progressMatch = content.match(/\*\*Progress\*\*:\s*(\d+)%/);
133
+ // Note: Support both **Progress:** and **Progress**: formats
134
+ const statusMatch = content.match(/\*\*Sprint Status:?\*\*:?\s*(.+)/);
135
+ const progressMatch = content.match(/\*\*Progress:?\*\*:?\s*(\d+)%/);
94
136
  // Skip if explicitly marked complete or 100% progress
95
137
  if (statusMatch && statusMatch[1].toLowerCase().includes('complete') &&
96
138
  !statusMatch[1].includes('[@]')) {
97
139
  continue;
98
140
  }
99
- if (progressMatch && parseInt(progressMatch[1]) === 100) {
141
+ const progress = progressMatch ? parseInt(progressMatch[1]) : 0;
142
+ if (progress === 100) {
100
143
  continue;
101
144
  }
102
- return filePath;
145
+ // Check for in-progress tasks ([@] markers)
146
+ const hasInProgress = content.includes('[@]') || (progress > 0 && progress < 100);
147
+ candidates.push({ file: filePath, progress, hasInProgress, frontmatterStatus });
148
+ }
149
+ // Prioritize by frontmatter status first, then by progress
150
+ // Priority: active > in-progress work > not_started
151
+ const activeSprints = candidates.filter(c => c.frontmatterStatus === 'active');
152
+ if (activeSprints.length > 0) {
153
+ // Return the active sprint with highest progress
154
+ activeSprints.sort((a, b) => b.progress - a.progress);
155
+ return activeSprints[0].file;
156
+ }
157
+ // Prioritize in-progress sprints over not-started ones
158
+ const inProgressSprints = candidates.filter(c => c.hasInProgress);
159
+ if (inProgressSprints.length > 0) {
160
+ // Return the one with highest progress (closest to completion)
161
+ inProgressSprints.sort((a, b) => b.progress - a.progress);
162
+ return inProgressSprints[0].file;
163
+ }
164
+ // Fall back to first not-started sprint
165
+ if (candidates.length > 0) {
166
+ return candidates[0].file;
103
167
  }
104
168
  // No active sprint found
105
169
  return null;
@@ -112,7 +176,7 @@ export async function findActiveSprint(projectRoot) {
112
176
  /**
113
177
  * Parse task state from checkbox symbol
114
178
  *
115
- * @param symbol - Checkbox content: ' ', '@', or 'x'
179
+ * @param symbol - Checkbox content: ' ', '@', 'Z', or 'x'
116
180
  * @returns Task state enum
117
181
  */
118
182
  function parseTaskState(symbol) {
@@ -121,15 +185,139 @@ function parseTaskState(symbol) {
121
185
  return 'complete';
122
186
  if (trimmed === '@')
123
187
  return 'in_progress';
188
+ if (trimmed === 'Z' || trimmed === 'z')
189
+ return 'paused';
124
190
  return 'todo';
125
191
  }
192
+ /**
193
+ * Detect acceptance criterion type from description (EPIC-004 Sprint 3 TASK-1)
194
+ *
195
+ * Pattern matching based on keywords:
196
+ * - test: "test", "spec", "unit", "integration"
197
+ * - build: "build", "compile", "tsc"
198
+ * - lint: "lint", "eslint", "prettier", "format"
199
+ * - performance: "response", "latency", "ms", "seconds", "<", ">"
200
+ * - manual: "review", "approve", "verify manually"
201
+ * - custom: anything else
202
+ *
203
+ * @param description - Criterion description text
204
+ * @returns Detected criterion type
205
+ */
206
+ function detectCriterionType(description) {
207
+ const lower = description.toLowerCase();
208
+ // Test criteria
209
+ if (/\b(test|spec|unit|integration|e2e|coverage)\b/.test(lower)) {
210
+ return 'test';
211
+ }
212
+ // Build criteria
213
+ if (/\b(build|compile|tsc|typescript|compilation)\b/.test(lower)) {
214
+ return 'build';
215
+ }
216
+ // Lint criteria
217
+ if (/\b(lint|eslint|prettier|format|style)\b/.test(lower)) {
218
+ return 'lint';
219
+ }
220
+ // Performance criteria (contains time thresholds)
221
+ if (/\b(response|latency|performance|load\s+time)\b/.test(lower) ||
222
+ /[<>]\s*\d+\s*(ms|seconds?|s\b)/.test(lower) ||
223
+ /under\s+\d+\s*(ms|seconds?)/.test(lower)) {
224
+ return 'performance';
225
+ }
226
+ // Manual criteria
227
+ if (/\b(review|approve|manual|verify\s+manually|human)\b/.test(lower)) {
228
+ return 'manual';
229
+ }
230
+ return 'custom';
231
+ }
232
+ /**
233
+ * Parse performance threshold from description (EPIC-004 Sprint 3 TASK-1)
234
+ *
235
+ * Examples:
236
+ * - "API response < 200ms" → 200
237
+ * - "Load time under 3 seconds" → 3000
238
+ * - "Latency below 50 ms" → 50
239
+ *
240
+ * @param description - Criterion description
241
+ * @returns Threshold in milliseconds, or undefined if not found
242
+ */
243
+ function parsePerformanceThreshold(description) {
244
+ // Match patterns like "< 200ms", "> 100ms", "under 3 seconds"
245
+ const patterns = [
246
+ /[<>]\s*(\d+)\s*ms\b/i, // < 200ms, > 100ms
247
+ /[<>]\s*(\d+)\s*seconds?\b/i, // < 3 seconds
248
+ /under\s+(\d+)\s*ms\b/i, // under 200ms
249
+ /under\s+(\d+)\s*seconds?\b/i, // under 3 seconds
250
+ /below\s+(\d+)\s*ms\b/i, // below 200ms
251
+ /below\s+(\d+)\s*seconds?\b/i, // below 3 seconds
252
+ /within\s+(\d+)\s*ms\b/i, // within 200ms
253
+ /within\s+(\d+)\s*seconds?\b/i, // within 3 seconds
254
+ ];
255
+ for (const pattern of patterns) {
256
+ const match = description.match(pattern);
257
+ if (match) {
258
+ const value = parseInt(match[1], 10);
259
+ // Convert seconds to milliseconds if needed
260
+ if (/seconds?/i.test(match[0])) {
261
+ return value * 1000;
262
+ }
263
+ return value;
264
+ }
265
+ }
266
+ return undefined;
267
+ }
268
+ /**
269
+ * Parse acceptance criteria from task section (EPIC-004 Sprint 3 TASK-1)
270
+ *
271
+ * Looks for:
272
+ * ```
273
+ * **Acceptance:**
274
+ * - [ ] Unit tests pass
275
+ * - [ ] Build succeeds
276
+ * ```
277
+ *
278
+ * @param lines - Lines from the task section
279
+ * @param startIndex - Starting line index
280
+ * @returns Array of parsed acceptance criteria
281
+ */
282
+ function parseAcceptanceCriteria(lines, startIndex) {
283
+ const criteria = [];
284
+ let criterionIndex = 1;
285
+ for (let i = startIndex; i < lines.length; i++) {
286
+ const line = lines[i];
287
+ // Stop at next section (### or **Heading:**)
288
+ if (line.match(/^###\s+/) || (line.match(/^\*\*[A-Z]/) && !line.startsWith('**Acceptance'))) {
289
+ break;
290
+ }
291
+ // Match criterion lines: - [ ] Description or - [x] Description
292
+ const criterionMatch = line.match(/^-\s+\[[x\s]\]\s+(.+)/i);
293
+ if (criterionMatch) {
294
+ const description = criterionMatch[1].trim();
295
+ const type = detectCriterionType(description);
296
+ const criterion = {
297
+ id: `AC-${criterionIndex}`,
298
+ description,
299
+ type,
300
+ };
301
+ // Add threshold for performance criteria
302
+ if (type === 'performance') {
303
+ const threshold = parsePerformanceThreshold(description);
304
+ if (threshold !== undefined) {
305
+ criterion.threshold = threshold;
306
+ }
307
+ }
308
+ criteria.push(criterion);
309
+ criterionIndex++;
310
+ }
311
+ }
312
+ return criteria;
313
+ }
126
314
  /**
127
315
  * Parse sprint markdown into task checklist
128
316
  *
129
317
  * Looks for:
130
318
  * - Sprint name from title (# SPRINT: ...)
131
319
  * - Tasks from ## Sprint Tasks or ### TASK-N sections
132
- * - Checkbox states: [ ], [@], [x]
320
+ * - Checkbox states: [ ], [@], [Z], [x]
133
321
  * - Task metadata (files, priority, effort)
134
322
  *
135
323
  * @param markdown - Sprint markdown content
@@ -174,6 +362,20 @@ export function parseSprintChecklist(markdown, filePath) {
174
362
  parsingTask.priority = priorityMatch[1].trim();
175
363
  continue;
176
364
  }
365
+ // Match task dependencies: **Depends:** TASK-1, TASK-2 (EPIC-004 Sprint 4)
366
+ const dependsMatch = line.match(/\*\*Depends:\*\*\s*(.+)/i);
367
+ if (dependsMatch && parsingTask) {
368
+ const depsString = dependsMatch[1].trim();
369
+ // Parse comma-separated task IDs
370
+ const deps = depsString.split(/[,\s]+/)
371
+ .map(d => d.trim())
372
+ .filter(d => /^TASK-\d+$/i.test(d))
373
+ .map(d => d.toUpperCase());
374
+ if (deps.length > 0) {
375
+ parsingTask.dependsOn = deps;
376
+ }
377
+ continue;
378
+ }
177
379
  // Match files section
178
380
  if (line.match(/^\*\*Files:\*\*/) && parsingTask) {
179
381
  // Look ahead for file list
@@ -188,7 +390,15 @@ export function parseSprintChecklist(markdown, filePath) {
188
390
  }
189
391
  continue;
190
392
  }
191
- // Extract ADR references from any line in task section (EPIC-002 Phase 1)
393
+ // Match acceptance criteria section (EPIC-004 Sprint 3 TASK-1)
394
+ if (line.match(/^\*\*Acceptance:\*\*/) && parsingTask) {
395
+ const criteria = parseAcceptanceCriteria(lines, i + 1);
396
+ if (criteria.length > 0) {
397
+ parsingTask.acceptanceCriteria = criteria;
398
+ }
399
+ continue;
400
+ }
401
+ // Extract ADR references from any line in task section (EPIC-002 Sprint 1)
192
402
  if (parsingTask) {
193
403
  const adrMatches = line.matchAll(/ADR-(\d+)/gi);
194
404
  for (const match of adrMatches) {
@@ -198,6 +408,58 @@ export function parseSprintChecklist(markdown, filePath) {
198
408
  parsingTask.relatedADRs.push(adrId);
199
409
  }
200
410
  }
411
+ // Extract pattern references from any line in task section (EPIC-002 Sprint 2)
412
+ // Patterns can be referenced as:
413
+ // - "Use pattern from file.ts" or "pattern in file.ts"
414
+ // - "See file.ts for example"
415
+ // - Explicit pattern names like "retry-pattern", "event-queue-pattern"
416
+ const patternFromFileMatches = line.matchAll(/(?:use|apply|see|follow)\s+(?:the\s+)?(?:pattern|example)\s+(?:from|in)\s+[`"]?([a-zA-Z0-9_\-./]+\.[a-zA-Z]+)[`"]?/gi);
417
+ for (const match of patternFromFileMatches) {
418
+ const patternId = match[1];
419
+ parsingTask.relatedPatterns = parsingTask.relatedPatterns || [];
420
+ if (!parsingTask.relatedPatterns.includes(patternId)) {
421
+ parsingTask.relatedPatterns.push(patternId);
422
+ }
423
+ }
424
+ // Match explicit pattern names (kebab-case with -pattern suffix)
425
+ const explicitPatternMatches = line.matchAll(/\b([a-z][a-z0-9]*(?:-[a-z0-9]+)*-pattern)\b/gi);
426
+ for (const match of explicitPatternMatches) {
427
+ const patternId = match[1].toLowerCase();
428
+ parsingTask.relatedPatterns = parsingTask.relatedPatterns || [];
429
+ if (!parsingTask.relatedPatterns.includes(patternId)) {
430
+ parsingTask.relatedPatterns.push(patternId);
431
+ }
432
+ }
433
+ // Extract gotcha references from any line in task section (EPIC-002 Sprint 2)
434
+ // Priority: explicit kebab-case gotcha names like "timer-gotcha", "async-gotcha"
435
+ const explicitGotchaMatches = line.matchAll(/\b([a-z][a-z0-9]*(?:-[a-z0-9]+)*-gotcha)\b/gi);
436
+ for (const match of explicitGotchaMatches) {
437
+ const gotchaId = match[1].toLowerCase();
438
+ parsingTask.relatedGotchas = parsingTask.relatedGotchas || [];
439
+ if (!parsingTask.relatedGotchas.includes(gotchaId)) {
440
+ parsingTask.relatedGotchas.push(gotchaId);
441
+ }
442
+ }
443
+ // Fallback: extract from warning phrases only if no explicit gotcha found on this line
444
+ // - "Avoid gotcha: timer keeps process alive"
445
+ // - "Watch out for X"
446
+ // - "Beware of Y"
447
+ if (!line.match(/[a-z][a-z0-9]*(?:-[a-z0-9]+)*-gotcha/i)) {
448
+ const gotchaWarningMatches = line.matchAll(/(?:avoid|watch out for|beware of|gotcha:)\s+[`"]?([^`".\n]+)[`"]?/gi);
449
+ for (const match of gotchaWarningMatches) {
450
+ // Skip if the phrase contains "gotcha" - it's likely referring to an explicit gotcha
451
+ if (match[1].toLowerCase().includes('gotcha'))
452
+ continue;
453
+ const gotchaId = match[1].trim().toLowerCase().replace(/\s+/g, '-');
454
+ // Only add if reasonably short (likely a gotcha name, not a sentence)
455
+ if (gotchaId.length <= 40) {
456
+ parsingTask.relatedGotchas = parsingTask.relatedGotchas || [];
457
+ if (!parsingTask.relatedGotchas.includes(gotchaId)) {
458
+ parsingTask.relatedGotchas.push(gotchaId);
459
+ }
460
+ }
461
+ }
462
+ }
201
463
  }
202
464
  }
203
465
  // Save last task
@@ -207,6 +469,7 @@ export function parseSprintChecklist(markdown, filePath) {
207
469
  // Calculate progress
208
470
  const complete = tasks.filter(t => t.state === 'complete').length;
209
471
  const inProgress = tasks.filter(t => t.state === 'in_progress').length;
472
+ const paused = tasks.filter(t => t.state === 'paused').length;
210
473
  const todo = tasks.filter(t => t.state === 'todo').length;
211
474
  // Find current task: first [@], or first [ ] if no [@] exists
212
475
  const firstInProgress = tasks.find(t => t.state === 'in_progress');
@@ -215,18 +478,69 @@ export function parseSprintChecklist(markdown, filePath) {
215
478
  // Recent completions: last 3 completed tasks
216
479
  const completedTasks = tasks.filter(t => t.state === 'complete');
217
480
  const recentCompletions = completedTasks.slice(-3).reverse();
481
+ // Validate dependencies (EPIC-004 Sprint 4)
482
+ const dependencyWarnings = [];
483
+ const taskIds = new Set(tasks.map(t => t.id));
484
+ // Check for missing dependencies
485
+ for (const task of tasks) {
486
+ if (task.dependsOn) {
487
+ for (const depId of task.dependsOn) {
488
+ if (!taskIds.has(depId)) {
489
+ dependencyWarnings.push(`${task.id} depends on non-existent task: ${depId}`);
490
+ }
491
+ }
492
+ }
493
+ }
494
+ // Check for circular dependencies using DFS
495
+ const visited = new Set();
496
+ const inStack = new Set();
497
+ function detectCycle(taskId, path) {
498
+ if (inStack.has(taskId)) {
499
+ const cycleStart = path.indexOf(taskId);
500
+ return [...path.slice(cycleStart), taskId];
501
+ }
502
+ if (visited.has(taskId))
503
+ return null;
504
+ visited.add(taskId);
505
+ inStack.add(taskId);
506
+ path.push(taskId);
507
+ const task = tasks.find(t => t.id === taskId);
508
+ if (task?.dependsOn) {
509
+ for (const depId of task.dependsOn) {
510
+ if (taskIds.has(depId)) {
511
+ const cycle = detectCycle(depId, path);
512
+ if (cycle)
513
+ return cycle;
514
+ }
515
+ }
516
+ }
517
+ path.pop();
518
+ inStack.delete(taskId);
519
+ return null;
520
+ }
521
+ for (const task of tasks) {
522
+ if (!visited.has(task.id)) {
523
+ const cycle = detectCycle(task.id, []);
524
+ if (cycle) {
525
+ dependencyWarnings.push(`Circular dependency: ${cycle.join(' → ')}`);
526
+ break; // Only report first cycle
527
+ }
528
+ }
529
+ }
218
530
  return {
219
531
  name: sprintName,
220
532
  file: filePath,
221
533
  progress: {
222
534
  complete,
223
535
  inProgress,
536
+ paused,
224
537
  todo,
225
538
  total: tasks.length,
226
539
  },
227
540
  tasks,
228
541
  currentTask,
229
542
  recentCompletions,
543
+ dependencyWarnings: dependencyWarnings.length > 0 ? dependencyWarnings : undefined,
230
544
  };
231
545
  }
232
546
  /**
@@ -270,6 +584,9 @@ export function formatSprintChecklist(checklist, maxTasks = 7) {
270
584
  if (progress.inProgress > 0) {
271
585
  progressLine += `, ${progress.inProgress} in progress`;
272
586
  }
587
+ if (progress.paused > 0) {
588
+ progressLine += `, ${progress.paused} paused`;
589
+ }
273
590
  progressLine += ` (${progressPercent}%)`;
274
591
  output += progressLine + '\n\n';
275
592
  // Sprint complete celebration
@@ -282,7 +599,8 @@ export function formatSprintChecklist(checklist, maxTasks = 7) {
282
599
  const displayTasks = tasks.slice(0, maxTasks);
283
600
  for (const task of displayTasks) {
284
601
  const symbol = task.state === 'complete' ? '[x]' :
285
- task.state === 'in_progress' ? '[@]' : '[ ]';
602
+ task.state === 'in_progress' ? '[@]' :
603
+ task.state === 'paused' ? '[Z]' : '[ ]';
286
604
  const marker = currentTask && task.id === currentTask.id ? ' ← RESUME HERE' : '';
287
605
  output += ` ${symbol} ${task.id}: ${task.title}${marker}\n`;
288
606
  }
@@ -325,6 +643,14 @@ export function formatCurrentTaskDetails(task) {
325
643
  if (task.effort) {
326
644
  output += ` Effort: ${task.effort}\n`;
327
645
  }
646
+ // EPIC-002 Sprint 3: Show pattern guidance (TASK-1)
647
+ if (task.relatedPatterns && task.relatedPatterns.length > 0) {
648
+ output += ` Apply: ${task.relatedPatterns.join(', ')}\n`;
649
+ }
650
+ // EPIC-002 Sprint 3: Show gotcha warnings (TASK-1)
651
+ if (task.relatedGotchas && task.relatedGotchas.length > 0) {
652
+ output += ` Avoid: ${task.relatedGotchas.join(', ')}\n`;
653
+ }
328
654
  return output;
329
655
  }
330
656
  //# sourceMappingURL=sprint-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sprint-loader.js","sourceRoot":"","sources":["../../src/lib/sprint-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sprint-loader.js","sourceRoot":"","sources":["../../src/lib/sprint-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [agent, stale-detection, epic-004, multi-agent, resilience]
6
+ * @related: [agent-heartbeat.ts, ../commands/graph/api-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: []
10
+ */
11
+ /**
12
+ * Stale Agent Detector
13
+ *
14
+ * Detects agents that have stopped sending heartbeats and releases their claimed tasks.
15
+ *
16
+ * Pattern:
17
+ * - Agents stale if no heartbeat for grace period (default 5 minutes)
18
+ * - Stale agents marked offline
19
+ * - Tasks claimed by stale agents released for re-claiming
20
+ * - Events logged for audit trail
21
+ *
22
+ * Usage:
23
+ * ```typescript
24
+ * const { detectStaleAgents, releaseStaleAgentTasks } = require('./stale-agent-detector');
25
+ *
26
+ * // Detect and handle stale agents (typically in periodic job)
27
+ * const staleAgents = await detectStaleAgents();
28
+ * for (const agent of staleAgents) {
29
+ * await releaseStaleAgentTasks(agent.agentId);
30
+ * }
31
+ *
32
+ * // Check specific agent heartbeat
33
+ * const lastHeartbeat = await getAgentLastHeartbeat('agent_123456_abc');
34
+ * ```
35
+ */
36
+ /**
37
+ * Stale agent information
38
+ */
39
+ export interface StaleAgent {
40
+ agentId: string;
41
+ lastHeartbeat: Date;
42
+ staleSince: Date;
43
+ claimedTasks: string[];
44
+ }
45
+ /**
46
+ * Released task information
47
+ */
48
+ export interface ReleasedTask {
49
+ taskId: string;
50
+ previousAgent: string;
51
+ releasedAt: Date;
52
+ }
53
+ /**
54
+ * Configuration for stale detection
55
+ */
56
+ export interface StaleDetectionConfig {
57
+ gracePeriodMinutes?: number;
58
+ graphId?: string;
59
+ }
60
+ /**
61
+ * Detect stale agents
62
+ *
63
+ * Identifies agents that haven't sent a heartbeat within the grace period
64
+ * and are not already marked as offline.
65
+ *
66
+ * @param config - Optional configuration overrides
67
+ * @returns Array of stale agents with their claimed tasks
68
+ */
69
+ export declare function detectStaleAgents(config?: StaleDetectionConfig): Promise<StaleAgent[]>;
70
+ /**
71
+ * Release tasks claimed by a stale agent
72
+ *
73
+ * Marks agent as offline and releases all tasks it has claimed,
74
+ * making them available for other agents to claim.
75
+ *
76
+ * @param agentId - Agent ID to release tasks for
77
+ * @param config - Optional configuration overrides
78
+ * @returns Array of released tasks
79
+ */
80
+ export declare function releaseStaleAgentTasks(agentId: string, config?: StaleDetectionConfig): Promise<ReleasedTask[]>;
81
+ /**
82
+ * Get last heartbeat timestamp for an agent
83
+ *
84
+ * @param agentId - Agent ID to check
85
+ * @param config - Optional configuration overrides
86
+ * @returns Last heartbeat timestamp or null if not found
87
+ */
88
+ export declare function getAgentLastHeartbeat(agentId: string, config?: StaleDetectionConfig): Promise<Date | null>;
89
+ /**
90
+ * Detect and release all stale agents
91
+ *
92
+ * Convenience method that detects stale agents and releases their tasks.
93
+ * Typically used in periodic cleanup jobs.
94
+ *
95
+ * @param config - Optional configuration overrides
96
+ * @returns Summary of stale agents and released tasks
97
+ */
98
+ export declare function detectAndReleaseStaleAgents(config?: StaleDetectionConfig): Promise<{
99
+ staleAgents: StaleAgent[];
100
+ releasedTasks: ReleasedTask[];
101
+ }>;
102
+ //# sourceMappingURL=stale-agent-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale-agent-detector.d.ts","sourceRoot":"","sources":["../../src/lib/stale-agent-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,IAAI,CAAC;IACpB,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,UAAU,EAAE,CAAC,CAsCvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC,CA0CzB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAwCtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC;IACT,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B,CAAC,CAgCD"}