conductor-bridge 1.0.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 (134) hide show
  1. package/README.md +69 -0
  2. package/dist/bridge/index.d.ts +8 -0
  3. package/dist/bridge/index.d.ts.map +1 -0
  4. package/dist/bridge/index.js +8 -0
  5. package/dist/bridge/index.js.map +1 -0
  6. package/dist/bridge/json-interchange.d.ts +94 -0
  7. package/dist/bridge/json-interchange.d.ts.map +1 -0
  8. package/dist/bridge/json-interchange.js +301 -0
  9. package/dist/bridge/json-interchange.js.map +1 -0
  10. package/dist/cli/commands/amend.d.ts +12 -0
  11. package/dist/cli/commands/amend.d.ts.map +1 -0
  12. package/dist/cli/commands/amend.js +205 -0
  13. package/dist/cli/commands/amend.js.map +1 -0
  14. package/dist/cli/commands/daemon.d.ts +12 -0
  15. package/dist/cli/commands/daemon.d.ts.map +1 -0
  16. package/dist/cli/commands/daemon.js +60 -0
  17. package/dist/cli/commands/daemon.js.map +1 -0
  18. package/dist/cli/commands/dispatch.d.ts +12 -0
  19. package/dist/cli/commands/dispatch.d.ts.map +1 -0
  20. package/dist/cli/commands/dispatch.js +207 -0
  21. package/dist/cli/commands/dispatch.js.map +1 -0
  22. package/dist/cli/commands/handoff.d.ts +31 -0
  23. package/dist/cli/commands/handoff.d.ts.map +1 -0
  24. package/dist/cli/commands/handoff.js +273 -0
  25. package/dist/cli/commands/handoff.js.map +1 -0
  26. package/dist/cli/commands/init.d.ts +12 -0
  27. package/dist/cli/commands/init.d.ts.map +1 -0
  28. package/dist/cli/commands/init.js +301 -0
  29. package/dist/cli/commands/init.js.map +1 -0
  30. package/dist/cli/commands/status.d.ts +12 -0
  31. package/dist/cli/commands/status.d.ts.map +1 -0
  32. package/dist/cli/commands/status.js +206 -0
  33. package/dist/cli/commands/status.js.map +1 -0
  34. package/dist/cli/index.d.ts +17 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +148 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/handoff/encryption.d.ts +85 -0
  39. package/dist/handoff/encryption.d.ts.map +1 -0
  40. package/dist/handoff/encryption.js +308 -0
  41. package/dist/handoff/encryption.js.map +1 -0
  42. package/dist/handoff/index.d.ts +8 -0
  43. package/dist/handoff/index.d.ts.map +1 -0
  44. package/dist/handoff/index.js +10 -0
  45. package/dist/handoff/index.js.map +1 -0
  46. package/dist/handoff/mycelium-arc.d.ts +116 -0
  47. package/dist/handoff/mycelium-arc.d.ts.map +1 -0
  48. package/dist/handoff/mycelium-arc.js +410 -0
  49. package/dist/handoff/mycelium-arc.js.map +1 -0
  50. package/dist/index.d.ts +38 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +71 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/parsers/index.d.ts +10 -0
  55. package/dist/parsers/index.d.ts.map +1 -0
  56. package/dist/parsers/index.js +12 -0
  57. package/dist/parsers/index.js.map +1 -0
  58. package/dist/parsers/plan-parser.d.ts +29 -0
  59. package/dist/parsers/plan-parser.d.ts.map +1 -0
  60. package/dist/parsers/plan-parser.js +503 -0
  61. package/dist/parsers/plan-parser.js.map +1 -0
  62. package/dist/parsers/spec-parser.d.ts +10 -0
  63. package/dist/parsers/spec-parser.d.ts.map +1 -0
  64. package/dist/parsers/spec-parser.js +382 -0
  65. package/dist/parsers/spec-parser.js.map +1 -0
  66. package/dist/parsers/state-parser.d.ts +21 -0
  67. package/dist/parsers/state-parser.d.ts.map +1 -0
  68. package/dist/parsers/state-parser.js +378 -0
  69. package/dist/parsers/state-parser.js.map +1 -0
  70. package/dist/parsers/types.d.ts +190 -0
  71. package/dist/parsers/types.d.ts.map +1 -0
  72. package/dist/parsers/types.js +7 -0
  73. package/dist/parsers/types.js.map +1 -0
  74. package/dist/schemas/cognitive-state.d.ts +1523 -0
  75. package/dist/schemas/cognitive-state.d.ts.map +1 -0
  76. package/dist/schemas/cognitive-state.js +328 -0
  77. package/dist/schemas/cognitive-state.js.map +1 -0
  78. package/dist/schemas/enums.d.ts +124 -0
  79. package/dist/schemas/enums.d.ts.map +1 -0
  80. package/dist/schemas/enums.js +108 -0
  81. package/dist/schemas/enums.js.map +1 -0
  82. package/dist/schemas/index.d.ts +9 -0
  83. package/dist/schemas/index.d.ts.map +1 -0
  84. package/dist/schemas/index.js +9 -0
  85. package/dist/schemas/index.js.map +1 -0
  86. package/dist/sync/adhd-continuity.d.ts +91 -0
  87. package/dist/sync/adhd-continuity.d.ts.map +1 -0
  88. package/dist/sync/adhd-continuity.js +302 -0
  89. package/dist/sync/adhd-continuity.js.map +1 -0
  90. package/dist/sync/convergence-tracker.d.ts +111 -0
  91. package/dist/sync/convergence-tracker.d.ts.map +1 -0
  92. package/dist/sync/convergence-tracker.js +299 -0
  93. package/dist/sync/convergence-tracker.js.map +1 -0
  94. package/dist/sync/index.d.ts +11 -0
  95. package/dist/sync/index.d.ts.map +1 -0
  96. package/dist/sync/index.js +15 -0
  97. package/dist/sync/index.js.map +1 -0
  98. package/dist/sync/state-sync.d.ts +105 -0
  99. package/dist/sync/state-sync.d.ts.map +1 -0
  100. package/dist/sync/state-sync.js +403 -0
  101. package/dist/sync/state-sync.js.map +1 -0
  102. package/dist/sync/watcher.d.ts +90 -0
  103. package/dist/sync/watcher.d.ts.map +1 -0
  104. package/dist/sync/watcher.js +281 -0
  105. package/dist/sync/watcher.js.map +1 -0
  106. package/dist/utils/atomic-write.d.ts +31 -0
  107. package/dist/utils/atomic-write.d.ts.map +1 -0
  108. package/dist/utils/atomic-write.js +69 -0
  109. package/dist/utils/atomic-write.js.map +1 -0
  110. package/dist/utils/error-handling.d.ts +70 -0
  111. package/dist/utils/error-handling.d.ts.map +1 -0
  112. package/dist/utils/error-handling.js +109 -0
  113. package/dist/utils/error-handling.js.map +1 -0
  114. package/dist/utils/file-lock.d.ts +46 -0
  115. package/dist/utils/file-lock.d.ts.map +1 -0
  116. package/dist/utils/file-lock.js +117 -0
  117. package/dist/utils/file-lock.js.map +1 -0
  118. package/dist/utils/index.d.ts +10 -0
  119. package/dist/utils/index.d.ts.map +1 -0
  120. package/dist/utils/index.js +12 -0
  121. package/dist/utils/index.js.map +1 -0
  122. package/dist/utils/rlm-navigator.d.ts +160 -0
  123. package/dist/utils/rlm-navigator.d.ts.map +1 -0
  124. package/dist/utils/rlm-navigator.js +368 -0
  125. package/dist/utils/rlm-navigator.js.map +1 -0
  126. package/dist/utils/safe-path.d.ts +44 -0
  127. package/dist/utils/safe-path.d.ts.map +1 -0
  128. package/dist/utils/safe-path.js +96 -0
  129. package/dist/utils/safe-path.js.map +1 -0
  130. package/dist/utils/timed-io.d.ts +51 -0
  131. package/dist/utils/timed-io.d.ts.map +1 -0
  132. package/dist/utils/timed-io.js +128 -0
  133. package/dist/utils/timed-io.js.map +1 -0
  134. package/package.json +88 -0
@@ -0,0 +1,503 @@
1
+ /**
2
+ * Plan Parser
3
+ *
4
+ * Parses Conductor plan.md files into structured data.
5
+ * Implements checkbox state machine for task tracking.
6
+ */
7
+ import matter from 'gray-matter';
8
+ // ============================================================================
9
+ // Patterns
10
+ // ============================================================================
11
+ // Checkbox: - [ ] content, - [x] content, - [~] content, - [!] content
12
+ const CHECKBOX_PATTERN = /^(\s*)-\s+\[([ x~!])\]\s+(.+)$/;
13
+ // Track header: ## Track: name or ## Phase N: name
14
+ const TRACK_HEADER_PATTERN = /^##\s+(?:Track:\s*|Phase\s+\d+:\s*)(.+)$/;
15
+ // Track metadata: - **Key**: value
16
+ const TRACK_METADATA_PATTERN = /^-\s+\*\*(\w+)\*\*:\s*(.*)$/;
17
+ // Section header within track: ### Tasks, ### Artifacts, ### Notes
18
+ const SUBSECTION_PATTERN = /^###\s+(\w+)$/;
19
+ // Summary table row: | Key | Value |
20
+ const TABLE_ROW_PATTERN = /^\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|$/;
21
+ // Amendment link: [AMEND-001](path)
22
+ const AMENDMENT_LINK_PATTERN = /\[AMEND-(\d+)\]\(([^)]+)\)/;
23
+ // Changelog row: | version | date | agent | summary |
24
+ const CHANGELOG_ROW_PATTERN = /^\|\s*(\d+)\s*\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|$/;
25
+ // ============================================================================
26
+ // Checkbox State Machine
27
+ // ============================================================================
28
+ /**
29
+ * Convert checkbox marker to state
30
+ */
31
+ function checkboxToState(marker) {
32
+ switch (marker) {
33
+ case 'x':
34
+ return 'complete';
35
+ case '~':
36
+ return 'in_progress';
37
+ case '!':
38
+ return 'blocked';
39
+ default:
40
+ return 'pending';
41
+ }
42
+ }
43
+ /**
44
+ * Convert state to checkbox marker
45
+ */
46
+ export function stateToCheckbox(state) {
47
+ switch (state) {
48
+ case 'complete':
49
+ return 'x';
50
+ case 'in_progress':
51
+ return '~';
52
+ case 'blocked':
53
+ return '!';
54
+ default:
55
+ return ' ';
56
+ }
57
+ }
58
+ /**
59
+ * Valid state transitions
60
+ */
61
+ const VALID_TRANSITIONS = {
62
+ pending: ['in_progress', 'blocked'],
63
+ in_progress: ['complete', 'blocked', 'pending'],
64
+ complete: ['pending'], // Can be reopened
65
+ blocked: ['pending', 'in_progress'],
66
+ };
67
+ /**
68
+ * Check if state transition is valid
69
+ */
70
+ export function isValidTransition(from, to) {
71
+ return VALID_TRANSITIONS[from]?.includes(to) ?? false;
72
+ }
73
+ function parseTaskLines(content, startLine) {
74
+ const lines = content.split('\n');
75
+ const tasks = [];
76
+ for (let i = 0; i < lines.length; i++) {
77
+ const line = lines[i] ?? '';
78
+ const match = line.match(CHECKBOX_PATTERN);
79
+ if (match) {
80
+ const indent = (match[1]?.length ?? 0) / 2; // Assume 2-space indentation
81
+ tasks.push({
82
+ indent,
83
+ state: checkboxToState(match[2] ?? ' '),
84
+ content: match[3]?.trim() ?? '',
85
+ line: startLine + i,
86
+ });
87
+ }
88
+ }
89
+ return tasks;
90
+ }
91
+ /**
92
+ * Build task hierarchy from flat list
93
+ */
94
+ function buildTaskHierarchy(taskLines) {
95
+ const tasks = [];
96
+ const stack = [];
97
+ let taskIndex = 0;
98
+ for (const line of taskLines) {
99
+ taskIndex++;
100
+ const task = {
101
+ id: `task-${taskIndex}`,
102
+ content: line.content,
103
+ state: line.state,
104
+ subtasks: [],
105
+ line: line.line,
106
+ indent: line.indent,
107
+ };
108
+ // Pop stack until we find a parent with lower indent
109
+ while (stack.length > 0 && stack[stack.length - 1].indent >= line.indent) {
110
+ stack.pop();
111
+ }
112
+ if (stack.length === 0) {
113
+ // Top-level task
114
+ tasks.push(task);
115
+ }
116
+ else {
117
+ // Subtask
118
+ stack[stack.length - 1].task.subtasks.push(task);
119
+ }
120
+ stack.push({ task, indent: line.indent });
121
+ }
122
+ return tasks;
123
+ }
124
+ function extractTracks(content) {
125
+ const lines = content.split('\n');
126
+ const tracks = [];
127
+ let currentTrack = null;
128
+ for (let i = 0; i < lines.length; i++) {
129
+ const line = lines[i] ?? '';
130
+ const trackMatch = line.match(TRACK_HEADER_PATTERN);
131
+ if (trackMatch) {
132
+ // Save previous track
133
+ if (currentTrack) {
134
+ currentTrack.endLine = i - 1;
135
+ currentTrack.content = lines
136
+ .slice(currentTrack.startLine + 1, i)
137
+ .join('\n');
138
+ tracks.push(currentTrack);
139
+ }
140
+ // Start new track
141
+ currentTrack = {
142
+ name: trackMatch[1]?.trim() ?? '',
143
+ description: '',
144
+ startLine: i,
145
+ endLine: lines.length - 1,
146
+ content: '',
147
+ };
148
+ // Look for description (blockquote after header)
149
+ const nextLine = lines[i + 1];
150
+ if (nextLine?.startsWith('>')) {
151
+ currentTrack.description = nextLine.slice(1).trim();
152
+ }
153
+ }
154
+ }
155
+ // Save final track
156
+ if (currentTrack) {
157
+ currentTrack.content = lines.slice(currentTrack.startLine + 1).join('\n');
158
+ tracks.push(currentTrack);
159
+ }
160
+ return tracks;
161
+ }
162
+ function parseTrackMetadata(content) {
163
+ const metadata = {};
164
+ const lines = content.split('\n');
165
+ for (const line of lines) {
166
+ const match = line.match(TRACK_METADATA_PATTERN);
167
+ if (match && match[1] && match[2] !== undefined) {
168
+ metadata[match[1].toLowerCase()] = match[2].trim();
169
+ }
170
+ }
171
+ return metadata;
172
+ }
173
+ function extractSubsection(content, name) {
174
+ const lines = content.split('\n');
175
+ let inSection = false;
176
+ const sectionLines = [];
177
+ for (let i = 0; i < lines.length; i++) {
178
+ const line = lines[i] ?? '';
179
+ const subsectionMatch = line.match(SUBSECTION_PATTERN);
180
+ if (subsectionMatch) {
181
+ if (subsectionMatch[1]?.toLowerCase() === name.toLowerCase()) {
182
+ inSection = true;
183
+ continue;
184
+ }
185
+ else if (inSection) {
186
+ // End of our section
187
+ break;
188
+ }
189
+ }
190
+ if (inSection) {
191
+ sectionLines.push(line);
192
+ }
193
+ }
194
+ return sectionLines.join('\n').trim();
195
+ }
196
+ function parseTrack(section, trackIndex) {
197
+ const metadata = parseTrackMetadata(section.content);
198
+ // Parse tasks
199
+ const tasksContent = extractSubsection(section.content, 'Tasks');
200
+ const taskLines = parseTaskLines(tasksContent, section.startLine);
201
+ const tasks = buildTaskHierarchy(taskLines);
202
+ // Parse artifacts
203
+ const artifactsContent = extractSubsection(section.content, 'Artifacts');
204
+ const artifacts = artifactsContent
205
+ .split('\n')
206
+ .filter((l) => l.trim().startsWith('-') || l.trim().startsWith('*'))
207
+ .map((l) => l.replace(/^[-*]\s*/, '').trim().replace(/`/g, ''));
208
+ // Parse notes (fenced code block)
209
+ const notesContent = extractSubsection(section.content, 'Notes');
210
+ const notesMatch = notesContent.match(/```[\s\S]*?\n([\s\S]*?)```/);
211
+ const notes = notesMatch?.[1]?.trim() ?? '';
212
+ // Derive track status from tasks
213
+ let status = 'pending';
214
+ if (tasks.length > 0) {
215
+ const allComplete = tasks.every((t) => t.state === 'complete');
216
+ const anyInProgress = tasks.some((t) => t.state === 'in_progress');
217
+ const anyBlocked = tasks.some((t) => t.state === 'blocked');
218
+ if (allComplete) {
219
+ status = 'complete';
220
+ }
221
+ else if (anyBlocked) {
222
+ status = 'blocked';
223
+ }
224
+ else if (anyInProgress) {
225
+ status = 'in_progress';
226
+ }
227
+ }
228
+ // Override with explicit status if present
229
+ if (metadata.status) {
230
+ const explicitStatus = metadata.status.toLowerCase();
231
+ if (['pending', 'in_progress', 'complete', 'blocked'].includes(explicitStatus)) {
232
+ status = explicitStatus;
233
+ }
234
+ }
235
+ return {
236
+ id: `track-${trackIndex + 1}`,
237
+ name: section.name,
238
+ description: section.description,
239
+ agent: metadata.agent ?? 'unassigned',
240
+ status,
241
+ dependencies: metadata.dependencies
242
+ ? metadata.dependencies.split(',').map((d) => d.trim())
243
+ : [],
244
+ tasks,
245
+ artifacts,
246
+ notes,
247
+ started: metadata.started,
248
+ completed: metadata.completed,
249
+ line: section.startLine,
250
+ };
251
+ }
252
+ // ============================================================================
253
+ // Summary Parser
254
+ // ============================================================================
255
+ function parseSummaryTable(content) {
256
+ const summary = {
257
+ totalTracks: 0,
258
+ completedTracks: 0,
259
+ progress: 0,
260
+ };
261
+ const lines = content.split('\n');
262
+ for (const line of lines) {
263
+ const match = line.match(TABLE_ROW_PATTERN);
264
+ if (match && match[1] && match[2]) {
265
+ const key = match[1].trim().toLowerCase();
266
+ const value = match[2].trim();
267
+ switch (key) {
268
+ case 'total tracks':
269
+ summary.totalTracks = parseInt(value, 10) || 0;
270
+ break;
271
+ case 'completed':
272
+ summary.completedTracks = parseInt(value, 10) || 0;
273
+ break;
274
+ case 'progress':
275
+ summary.progress = parseInt(value.replace('%', ''), 10) || 0;
276
+ break;
277
+ }
278
+ }
279
+ }
280
+ return summary;
281
+ }
282
+ // ============================================================================
283
+ // Amendment Parser
284
+ // ============================================================================
285
+ function parsePendingAmendments(content) {
286
+ const amendments = [];
287
+ const lines = content.split('\n');
288
+ for (const line of lines) {
289
+ const match = line.match(AMENDMENT_LINK_PATTERN);
290
+ if (match && match[1] && match[2]) {
291
+ // Extract title after the link
292
+ const titleMatch = line.match(/\]\([^)]+\)\s*[—–-]\s*(.+)$/);
293
+ amendments.push({
294
+ id: `AMEND-${match[1].padStart(3, '0')}`,
295
+ title: titleMatch?.[1]?.trim() ?? '',
296
+ path: match[2],
297
+ });
298
+ }
299
+ }
300
+ return amendments;
301
+ }
302
+ // ============================================================================
303
+ // Changelog Parser
304
+ // ============================================================================
305
+ function parseChangelog(content) {
306
+ const changelog = [];
307
+ const lines = content.split('\n');
308
+ for (const line of lines) {
309
+ const match = line.match(CHANGELOG_ROW_PATTERN);
310
+ if (match && match[1] && match[2] && match[3] && match[4]) {
311
+ changelog.push({
312
+ version: parseInt(match[1], 10),
313
+ date: match[2].trim(),
314
+ agent: match[3].trim(),
315
+ summary: match[4].trim(),
316
+ });
317
+ }
318
+ }
319
+ return changelog;
320
+ }
321
+ // ============================================================================
322
+ // Main Parser
323
+ // ============================================================================
324
+ export function parsePlan(content) {
325
+ const errors = [];
326
+ const warnings = [];
327
+ try {
328
+ // Parse frontmatter
329
+ const { data: frontmatter, content: body } = matter(content);
330
+ // Validate required frontmatter
331
+ if (!frontmatter.conductor) {
332
+ errors.push({
333
+ message: 'Missing required frontmatter field: conductor',
334
+ severity: 'error',
335
+ });
336
+ }
337
+ if (!frontmatter.spec) {
338
+ errors.push({
339
+ message: 'Missing required frontmatter field: spec',
340
+ severity: 'error',
341
+ });
342
+ }
343
+ // Extract title
344
+ const titleMatch = body.match(/^#\s+(.+)$/m);
345
+ const title = titleMatch?.[1]?.trim() ?? '';
346
+ // Extract summary section (text before first ## Track)
347
+ const summaryMatch = body.match(/^##\s+Summary\n([\s\S]*?)(?=\n##\s+(?:Track|Phase))/);
348
+ const summaryContent = summaryMatch?.[1] ?? '';
349
+ const summaryText = summaryContent.split('\n')[0]?.trim() ?? '';
350
+ const metrics = parseSummaryTable(summaryContent);
351
+ // Extract tracks
352
+ const trackSections = extractTracks(body);
353
+ const tracks = trackSections.map((section, index) => parseTrack(section, index));
354
+ // Update metrics from actual tracks
355
+ metrics.totalTracks = tracks.length;
356
+ metrics.completedTracks = tracks.filter((t) => t.status === 'complete').length;
357
+ metrics.progress =
358
+ tracks.length > 0
359
+ ? Math.round((metrics.completedTracks / tracks.length) * 100)
360
+ : 0;
361
+ // Extract pending amendments section
362
+ const amendmentsMatch = body.match(/##\s+Pending Amendments\n([\s\S]*?)(?=\n##|$)/);
363
+ const pendingAmendments = amendmentsMatch
364
+ ? parsePendingAmendments(amendmentsMatch[1] ?? '')
365
+ : [];
366
+ // Extract changelog
367
+ const changelogMatch = body.match(/##\s+Change Log\n([\s\S]*?)(?=\n##|$)/);
368
+ const changelog = changelogMatch
369
+ ? parseChangelog(changelogMatch[1] ?? '')
370
+ : [];
371
+ // Warnings
372
+ if (tracks.length === 0) {
373
+ warnings.push({
374
+ message: 'No tracks found in plan',
375
+ severity: 'warning',
376
+ });
377
+ }
378
+ const blockedTracks = tracks.filter((t) => t.status === 'blocked');
379
+ if (blockedTracks.length > 0) {
380
+ warnings.push({
381
+ message: `${blockedTracks.length} track(s) are blocked`,
382
+ severity: 'warning',
383
+ });
384
+ }
385
+ if (errors.length > 0) {
386
+ return { success: false, errors, warnings };
387
+ }
388
+ return {
389
+ success: true,
390
+ data: {
391
+ frontmatter: {
392
+ conductor: frontmatter.conductor ?? '1.0',
393
+ spec: frontmatter.spec ?? '',
394
+ spec_version: frontmatter.spec_version ?? '1.0.0',
395
+ plan_version: frontmatter.plan_version ?? 1,
396
+ status: frontmatter.status ?? 'pending',
397
+ created: frontmatter.created ?? '',
398
+ updated: frontmatter.updated ?? '',
399
+ },
400
+ title,
401
+ summary: summaryText,
402
+ metrics,
403
+ tracks,
404
+ pendingAmendments,
405
+ changelog,
406
+ raw: content,
407
+ },
408
+ errors: [],
409
+ warnings,
410
+ };
411
+ }
412
+ catch (error) {
413
+ return {
414
+ success: false,
415
+ errors: [
416
+ {
417
+ message: `Failed to parse plan: ${error instanceof Error ? error.message : String(error)}`,
418
+ severity: 'error',
419
+ },
420
+ ],
421
+ warnings: [],
422
+ };
423
+ }
424
+ }
425
+ // ============================================================================
426
+ // Task Operations
427
+ // ============================================================================
428
+ /**
429
+ * Find a task by ID in a plan
430
+ */
431
+ export function findTask(plan, taskId) {
432
+ for (const track of plan.tracks) {
433
+ const found = findTaskInList(track.tasks, taskId);
434
+ if (found)
435
+ return found;
436
+ }
437
+ return null;
438
+ }
439
+ function findTaskInList(tasks, taskId) {
440
+ for (const task of tasks) {
441
+ if (task.id === taskId)
442
+ return task;
443
+ const found = findTaskInList(task.subtasks, taskId);
444
+ if (found)
445
+ return found;
446
+ }
447
+ return null;
448
+ }
449
+ /**
450
+ * Count tasks by state
451
+ */
452
+ export function countTasksByState(plan) {
453
+ const counts = {
454
+ pending: 0,
455
+ in_progress: 0,
456
+ complete: 0,
457
+ blocked: 0,
458
+ };
459
+ for (const track of plan.tracks) {
460
+ countTasksInList(track.tasks, counts);
461
+ }
462
+ return counts;
463
+ }
464
+ function countTasksInList(tasks, counts) {
465
+ for (const task of tasks) {
466
+ counts[task.state]++;
467
+ countTasksInList(task.subtasks, counts);
468
+ }
469
+ }
470
+ /**
471
+ * Get next pending task
472
+ */
473
+ export function getNextPendingTask(plan) {
474
+ for (const track of plan.tracks) {
475
+ if (track.status === 'blocked')
476
+ continue;
477
+ // Check dependencies
478
+ const depsComplete = track.dependencies.every((depName) => {
479
+ const depTrack = plan.tracks.find((t) => t.name === depName);
480
+ return depTrack?.status === 'complete';
481
+ });
482
+ if (!depsComplete)
483
+ continue;
484
+ const pending = findPendingInList(track.tasks);
485
+ if (pending)
486
+ return pending;
487
+ }
488
+ return null;
489
+ }
490
+ function findPendingInList(tasks) {
491
+ for (const task of tasks) {
492
+ if (task.state === 'pending')
493
+ return task;
494
+ if (task.state === 'in_progress') {
495
+ // Check subtasks
496
+ const pending = findPendingInList(task.subtasks);
497
+ if (pending)
498
+ return pending;
499
+ }
500
+ }
501
+ return null;
502
+ }
503
+ //# sourceMappingURL=plan-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-parser.js","sourceRoot":"","sources":["../../src/parsers/plan-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Spec Parser
3
+ *
4
+ * Parses Conductor spec.md files into structured data.
5
+ * Extracts frontmatter, success criteria, constraints, ADRs, and interfaces.
6
+ */
7
+ import type { ParsedSpec, ParseResult, ParseError } from './types.js';
8
+ export declare function parseSpec(content: string): ParseResult<ParsedSpec>;
9
+ export declare function validateSpec(spec: ParsedSpec): ParseError[];
10
+ //# sourceMappingURL=spec-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/spec-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,UAAU,EAKV,WAAW,EACX,UAAU,EACX,MAAM,YAAY,CAAC;AAmSpB,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAkIlE;AAMD,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,CAsB3D"}