@zhuk/spego 0.12.0 → 0.13.1

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.
@@ -0,0 +1,466 @@
1
+ const ISO_DATE_PREFIX = /^\d{4}-\d{2}-\d{2}(T.*)?$/;
2
+ const STATUS_VALUES = {
3
+ active: true,
4
+ completed: true,
5
+ 'planning-incomplete': true,
6
+ unknown: true,
7
+ };
8
+ const WARNING_ORDER = {
9
+ 'adapter-unavailable': 0,
10
+ 'adapter-warning': 1,
11
+ 'archived-in-sprint': 2,
12
+ 'closable-sprint': 3,
13
+ 'dangling-dep': 4,
14
+ 'dep-cycle': 5,
15
+ 'orphan-epic': 6,
16
+ 'ungroomed-change': 7,
17
+ };
18
+ export function deriveMirror(input) {
19
+ const sortedChanges = [...input.changes].sort((a, b) => a.slug.localeCompare(b.slug));
20
+ const sortedEpics = sortArtifacts(input.epics);
21
+ const sortedSprintArtifacts = sortArtifacts(input.sprints);
22
+ const linkedById = new Map((input.linkedArtifacts ?? []).map((artifact) => [artifact.id, artifact]));
23
+ const inputChangeBySlug = new Map(sortedChanges.map((item) => [item.slug, item]));
24
+ const epicsBySlug = new Map(sortedEpics.map((item) => [item.slug, item]));
25
+ const changeStates = new Map();
26
+ for (const item of sortedChanges) {
27
+ changeStates.set(item.slug, {
28
+ slug: item.slug,
29
+ title: item.title,
30
+ status: item.archived ? 'completed' : item.status,
31
+ archived: item.archived === true,
32
+ });
33
+ }
34
+ for (const epic of sortedEpics) {
35
+ const current = changeStates.get(epic.slug);
36
+ if (current) {
37
+ current.title = epic.title;
38
+ current.epic = epic;
39
+ continue;
40
+ }
41
+ changeStates.set(epic.slug, {
42
+ slug: epic.slug,
43
+ title: epic.title,
44
+ status: statusFromMeta(epic.meta),
45
+ archived: false,
46
+ epic,
47
+ });
48
+ }
49
+ const sprints = sortedSprintArtifacts.map((artifact) => toSprintPlan(artifact));
50
+ sprints.sort(compareSprints);
51
+ sprints.forEach((sprint, index) => {
52
+ sprint.order = index;
53
+ });
54
+ const scheduled = new Set();
55
+ const scheduleBySlug = new Map();
56
+ for (const sprint of sprints) {
57
+ for (const slug of sprint.changes) {
58
+ scheduled.add(slug);
59
+ const current = scheduleBySlug.get(slug);
60
+ if (current === undefined || sprint.order < current)
61
+ scheduleBySlug.set(slug, sprint.order);
62
+ if (!changeStates.has(slug)) {
63
+ const discovered = inputChangeBySlug.get(slug);
64
+ changeStates.set(slug, {
65
+ slug,
66
+ title: discovered?.title ?? slug,
67
+ status: discovered?.archived ? 'completed' : discovered?.status ?? 'unknown',
68
+ archived: discovered?.archived === true,
69
+ epic: epicsBySlug.get(slug),
70
+ });
71
+ }
72
+ }
73
+ }
74
+ const knownSlugs = new Set(changeStates.keys());
75
+ const depsBySlug = new Map();
76
+ for (const [slug, state] of [...changeStates].sort((a, b) => a[0].localeCompare(b[0]))) {
77
+ depsBySlug.set(slug, uniqueStrings(state.epic?.meta.deps));
78
+ }
79
+ const cycleMembers = findCycleMembers([...knownSlugs].sort(), depsBySlug, knownSlugs);
80
+ const warnings = [...(input.warnings ?? [])];
81
+ for (const source of sortedChanges) {
82
+ for (const warning of source.warnings ?? []) {
83
+ warnings.push({
84
+ code: 'adapter-warning',
85
+ message: `${source.slug}: ${warning}`,
86
+ details: { change: source.slug, warning },
87
+ });
88
+ }
89
+ }
90
+ for (const source of sortedChanges) {
91
+ if (source.archived)
92
+ continue;
93
+ if (epicsBySlug.has(source.slug))
94
+ continue;
95
+ warnings.push({
96
+ code: 'ungroomed-change',
97
+ message: `Active change "${source.slug}" has no epic artifact.`,
98
+ details: { change: source.slug },
99
+ });
100
+ }
101
+ for (const epic of sortedEpics) {
102
+ const source = inputChangeBySlug.get(epic.slug);
103
+ if (!source) {
104
+ warnings.push({
105
+ code: 'orphan-epic',
106
+ message: `Epic "${epic.slug}" does not resolve to an OpenSpec change.`,
107
+ details: { change: epic.slug, reason: 'missing' },
108
+ });
109
+ continue;
110
+ }
111
+ if (source.archived) {
112
+ warnings.push({
113
+ code: 'orphan-epic',
114
+ message: `Epic "${epic.slug}" points at an archived OpenSpec change.`,
115
+ details: { change: epic.slug, reason: 'archived' },
116
+ });
117
+ }
118
+ }
119
+ for (const sprint of sprints) {
120
+ for (const slug of sprint.changes) {
121
+ if (!inputChangeBySlug.get(slug)?.archived)
122
+ continue;
123
+ warnings.push({
124
+ code: 'archived-in-sprint',
125
+ message: `Sprint "${sprint.artifact.slug}" includes archived change "${slug}".`,
126
+ details: { sprint: sprint.artifact.slug, change: slug },
127
+ });
128
+ }
129
+ }
130
+ for (const [slug, deps] of [...depsBySlug].sort((a, b) => a[0].localeCompare(b[0]))) {
131
+ for (const dep of deps) {
132
+ if (knownSlugs.has(dep))
133
+ continue;
134
+ warnings.push({
135
+ code: 'dangling-dep',
136
+ message: `Change "${slug}" depends on unknown change "${dep}".`,
137
+ details: { change: slug, dep },
138
+ });
139
+ }
140
+ }
141
+ for (const slug of [...cycleMembers].sort()) {
142
+ warnings.push({
143
+ code: 'dep-cycle',
144
+ message: `Change "${slug}" is part of a dependency cycle.`,
145
+ details: { change: slug, cycle: [...cycleMembers].sort() },
146
+ });
147
+ }
148
+ const cycleReach = new Map();
149
+ const blockersBySlug = new Map();
150
+ for (const slug of [...knownSlugs].sort()) {
151
+ blockersBySlug.set(slug, blockersFor(slug, depsBySlug, knownSlugs, changeStates, scheduleBySlug, cycleMembers, cycleReach));
152
+ }
153
+ const sortedWarnings = sortWarnings(warnings);
154
+ const warningCodesByChange = new Map();
155
+ for (const warning of sortedWarnings) {
156
+ const change = typeof warning.details?.change === 'string' ? warning.details.change : undefined;
157
+ if (!change)
158
+ continue;
159
+ const codes = warningCodesByChange.get(change) ?? [];
160
+ codes.push(warning.code);
161
+ warningCodesByChange.set(change, codes);
162
+ }
163
+ const missingBySlug = new Map();
164
+ const gapsBySlug = new Map();
165
+ for (const [slug, state] of [...changeStates].sort((a, b) => a[0].localeCompare(b[0]))) {
166
+ const epic = state.epic;
167
+ if (!epic) {
168
+ missingBySlug.set(slug, []);
169
+ gapsBySlug.set(slug, []);
170
+ continue;
171
+ }
172
+ const links = uniqueStrings(epic.meta.links);
173
+ const coveredTypes = new Set();
174
+ for (const id of links) {
175
+ const linked = linkedById.get(id);
176
+ if (linked)
177
+ coveredTypes.add(linked.type);
178
+ }
179
+ missingBySlug.set(slug, uniqueStrings(epic.meta.requires).filter((type) => !coveredTypes.has(type)).sort());
180
+ gapsBySlug.set(slug, gapsFromMeta(epic.meta.gaps));
181
+ }
182
+ const toMirrorChange = (slug) => {
183
+ const state = changeStates.get(slug);
184
+ return {
185
+ slug,
186
+ title: state?.title ?? slug,
187
+ status: state?.status ?? 'unknown',
188
+ blockers: blockersBySlug.get(slug) ?? [],
189
+ gaps: gapsBySlug.get(slug) ?? [],
190
+ missing: missingBySlug.get(slug) ?? [],
191
+ warnings: warningCodesByChange.get(slug) ?? [],
192
+ };
193
+ };
194
+ const sprintRows = sprints.map((sprint) => ({
195
+ slug: sprint.artifact.slug,
196
+ title: sprint.artifact.title,
197
+ status: sprint.status,
198
+ startDate: sprint.startDate,
199
+ endDate: sprint.endDate,
200
+ changes: sprint.changes.map((slug) => toMirrorChange(slug)),
201
+ }));
202
+ for (const sprint of sprintRows) {
203
+ if (sprint.status === 'closed')
204
+ continue;
205
+ if (sprint.changes.length === 0)
206
+ continue;
207
+ if (!sprint.changes.every((item) => item.status === 'completed'))
208
+ continue;
209
+ sortedWarnings.push({
210
+ code: 'closable-sprint',
211
+ message: `Sprint "${sprint.slug}" has no pending changes and can be closed.`,
212
+ details: { sprint: sprint.slug },
213
+ });
214
+ }
215
+ const finalWarnings = sortWarnings(sortedWarnings);
216
+ const finalWarningCodesByChange = new Map();
217
+ for (const warning of finalWarnings) {
218
+ const change = typeof warning.details?.change === 'string' ? warning.details.change : undefined;
219
+ if (!change)
220
+ continue;
221
+ const codes = finalWarningCodesByChange.get(change) ?? [];
222
+ codes.push(warning.code);
223
+ finalWarningCodesByChange.set(change, codes);
224
+ }
225
+ for (const sprint of sprintRows) {
226
+ sprint.changes = sprint.changes.map((item) => ({
227
+ ...item,
228
+ warnings: finalWarningCodesByChange.get(item.slug) ?? item.warnings,
229
+ }));
230
+ }
231
+ const ungrouped = [...changeStates.keys()]
232
+ .filter((slug) => !scheduled.has(slug))
233
+ .sort()
234
+ .map((slug) => {
235
+ const item = toMirrorChange(slug);
236
+ return { ...item, warnings: finalWarningCodesByChange.get(slug) ?? item.warnings };
237
+ });
238
+ return {
239
+ sprints: sprintRows,
240
+ ungrouped,
241
+ warnings: finalWarnings,
242
+ next: chooseNext(sprintRows),
243
+ };
244
+ }
245
+ export function filterMirrorGaps(board) {
246
+ return {
247
+ sprints: board.sprints.map((sprint) => ({
248
+ ...sprint,
249
+ changes: sprint.changes.filter(hasGapSignal),
250
+ })),
251
+ ungrouped: board.ungrouped.filter(hasGapSignal),
252
+ warnings: board.warnings,
253
+ next: board.next,
254
+ };
255
+ }
256
+ function sortArtifacts(artifacts) {
257
+ const copy = [...artifacts];
258
+ copy.sort((a, b) => {
259
+ const bySlug = a.slug.localeCompare(b.slug);
260
+ if (bySlug !== 0)
261
+ return bySlug;
262
+ return a.id.localeCompare(b.id);
263
+ });
264
+ return copy;
265
+ }
266
+ function statusFromMeta(meta) {
267
+ if (typeof meta.status === 'string' && STATUS_VALUES[meta.status]) {
268
+ return meta.status;
269
+ }
270
+ return 'unknown';
271
+ }
272
+ function toSprintPlan(artifact) {
273
+ const start = normalizeDateField(artifact.meta.startDate);
274
+ return {
275
+ artifact,
276
+ order: 0,
277
+ parsedStart: start.sortKey,
278
+ changes: uniqueStrings(artifact.meta.changes),
279
+ status: typeof artifact.meta.status === 'string' ? artifact.meta.status : 'planned',
280
+ startDate: start.value,
281
+ endDate: normalizeDateField(artifact.meta.endDate).value,
282
+ };
283
+ }
284
+ function normalizeDateField(value) {
285
+ if (typeof value !== 'string')
286
+ return { sortKey: Number.POSITIVE_INFINITY, value: null };
287
+ const trimmed = value.trim();
288
+ if (trimmed.length === 0)
289
+ return { sortKey: Number.POSITIVE_INFINITY, value: null };
290
+ if (!ISO_DATE_PREFIX.test(trimmed))
291
+ return { sortKey: Number.POSITIVE_INFINITY, value: trimmed };
292
+ const time = new Date(trimmed).getTime();
293
+ if (!Number.isFinite(time))
294
+ return { sortKey: Number.POSITIVE_INFINITY, value: trimmed };
295
+ return { sortKey: time, value: trimmed };
296
+ }
297
+ function compareSprints(a, b) {
298
+ const byDate = a.parsedStart - b.parsedStart;
299
+ if (!Number.isNaN(byDate) && byDate !== 0)
300
+ return byDate;
301
+ return a.artifact.slug.localeCompare(b.artifact.slug);
302
+ }
303
+ function uniqueStrings(value) {
304
+ if (!Array.isArray(value))
305
+ return [];
306
+ const out = [];
307
+ const seen = new Set();
308
+ for (const item of value) {
309
+ if (typeof item !== 'string')
310
+ continue;
311
+ if (seen.has(item))
312
+ continue;
313
+ seen.add(item);
314
+ out.push(item);
315
+ }
316
+ return out;
317
+ }
318
+ function gapsFromMeta(value) {
319
+ if (!Array.isArray(value))
320
+ return [];
321
+ const gaps = [];
322
+ for (const item of value) {
323
+ if (typeof item !== 'object' || item === null)
324
+ continue;
325
+ const record = item;
326
+ if (typeof record.flag !== 'string' || record.flag.length === 0)
327
+ continue;
328
+ const gap = { flag: record.flag };
329
+ if (typeof record.note === 'string')
330
+ gap.note = record.note;
331
+ gaps.push(gap);
332
+ }
333
+ return gaps;
334
+ }
335
+ function findCycleMembers(slugs, depsBySlug, knownSlugs) {
336
+ const state = new Map();
337
+ const stack = [];
338
+ const stackIndex = new Map();
339
+ const members = new Set();
340
+ let steps = 0;
341
+ const maxSteps = Math.max(100, slugs.length * slugs.length + slugs.length);
342
+ const visit = (slug) => {
343
+ if (state.get(slug) === 'done')
344
+ return;
345
+ if (steps > maxSteps) {
346
+ for (const item of stack)
347
+ members.add(item);
348
+ return;
349
+ }
350
+ steps += 1;
351
+ state.set(slug, 'visiting');
352
+ stackIndex.set(slug, stack.length);
353
+ stack.push(slug);
354
+ for (const dep of [...(depsBySlug.get(slug) ?? [])].sort()) {
355
+ if (!knownSlugs.has(dep))
356
+ continue;
357
+ const depState = state.get(dep);
358
+ if (depState === 'visiting') {
359
+ const start = stackIndex.get(dep) ?? 0;
360
+ for (const item of stack.slice(start))
361
+ members.add(item);
362
+ continue;
363
+ }
364
+ visit(dep);
365
+ }
366
+ stack.pop();
367
+ stackIndex.delete(slug);
368
+ state.set(slug, 'done');
369
+ };
370
+ for (const slug of slugs)
371
+ visit(slug);
372
+ return members;
373
+ }
374
+ function blockersFor(slug, depsBySlug, knownSlugs, states, scheduleBySlug, cycleMembers, cycleReach) {
375
+ const blockers = new Set();
376
+ if (cycleMembers.has(slug))
377
+ blockers.add('dep-cycle');
378
+ const currentSchedule = scheduleBySlug.get(slug);
379
+ for (const dep of depsBySlug.get(slug) ?? []) {
380
+ if (!knownSlugs.has(dep)) {
381
+ blockers.add(dep);
382
+ continue;
383
+ }
384
+ if (leadsToCycle(dep, depsBySlug, knownSlugs, cycleMembers, cycleReach, new Set())) {
385
+ blockers.add(dep);
386
+ continue;
387
+ }
388
+ if (states.get(dep)?.status === 'completed')
389
+ continue;
390
+ const depSchedule = scheduleBySlug.get(dep);
391
+ if (currentSchedule !== undefined && depSchedule !== undefined && depSchedule <= currentSchedule)
392
+ continue;
393
+ blockers.add(dep);
394
+ }
395
+ return [...blockers].sort();
396
+ }
397
+ function leadsToCycle(slug, depsBySlug, knownSlugs, cycleMembers, memo, seen) {
398
+ const cached = memo.get(slug);
399
+ if (cached !== undefined)
400
+ return cached;
401
+ if (cycleMembers.has(slug)) {
402
+ memo.set(slug, true);
403
+ return true;
404
+ }
405
+ if (seen.has(slug))
406
+ return false;
407
+ seen.add(slug);
408
+ for (const dep of depsBySlug.get(slug) ?? []) {
409
+ if (!knownSlugs.has(dep))
410
+ continue;
411
+ if (leadsToCycle(dep, depsBySlug, knownSlugs, cycleMembers, memo, seen)) {
412
+ memo.set(slug, true);
413
+ seen.delete(slug);
414
+ return true;
415
+ }
416
+ }
417
+ seen.delete(slug);
418
+ memo.set(slug, false);
419
+ return false;
420
+ }
421
+ function sortWarnings(warnings) {
422
+ const copy = [...warnings];
423
+ copy.sort((a, b) => {
424
+ const byCode = WARNING_ORDER[a.code] - WARNING_ORDER[b.code];
425
+ if (byCode !== 0)
426
+ return byCode;
427
+ const aDetail = warningSortKey(a);
428
+ const bDetail = warningSortKey(b);
429
+ return aDetail.localeCompare(bDetail);
430
+ });
431
+ return copy;
432
+ }
433
+ function warningSortKey(warning) {
434
+ const details = warning.details ?? {};
435
+ const change = typeof details.change === 'string' ? details.change : '';
436
+ const sprint = typeof details.sprint === 'string' ? details.sprint : '';
437
+ const dep = typeof details.dep === 'string' ? details.dep : '';
438
+ return `${change}\u0000${sprint}\u0000${dep}\u0000${warning.message}`;
439
+ }
440
+ function chooseNext(sprints) {
441
+ const active = sprints.filter((sprint) => sprint.status === 'active');
442
+ const candidates = active.length > 0 ? active : sprints.filter((sprint) => sprint.status === 'planned');
443
+ const source = active.length > 0 ? 'active sprint' : 'planned sprint';
444
+ for (const sprint of candidates) {
445
+ for (const change of sprint.changes) {
446
+ if (change.status === 'completed')
447
+ continue;
448
+ if (change.blockers.length > 0)
449
+ continue;
450
+ return {
451
+ change: change.slug,
452
+ sprint: sprint.slug,
453
+ reason: `first pending unblocked change in ${source}`,
454
+ };
455
+ }
456
+ }
457
+ return null;
458
+ }
459
+ function hasGapSignal(change) {
460
+ if (change.gaps.length > 0)
461
+ return true;
462
+ if (change.missing.length > 0)
463
+ return true;
464
+ return change.blockers.length > 0;
465
+ }
466
+ //# sourceMappingURL=mirror.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mirror.js","sourceRoot":"","sources":["../../src/delivery/mirror.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
- import type { DeliveryAdapter } from './types.js';
1
+ import { type DiscoveredChange } from './openspec-discover.js';
2
+ import type { DeliveryAdapter, DeliveryEpicLink } from './types.js';
2
3
  export declare function createOpenSpecAdapter(projectRoot: string): DeliveryAdapter;
4
+ export declare function listEpicsFromDiscovered(projectRoot: string, changes: DiscoveredChange[]): Promise<DeliveryEpicLink[]>;
@@ -1,55 +1,38 @@
1
1
  import { SpegoError } from '../errors.js';
2
- import { assertWorkspace, discoverChanges, fetchCliStatus } from './openspec-discover.js';
2
+ import { assertWorkspace, discoverChanges } from './openspec-discover.js';
3
3
  import { parseTasks, readProposalTitle } from './openspec-parse.js';
4
4
  export function createOpenSpecAdapter(projectRoot) {
5
5
  return {
6
6
  name: 'openspec',
7
7
  async listEpics() {
8
8
  await assertWorkspace(projectRoot);
9
- const changes = (await discoverChanges(projectRoot)).filter(c => !c.archived);
10
- const epics = [];
11
- for (const change of changes) {
12
- const title = await readProposalTitle(projectRoot, change.relPath);
13
- const { total, done, status, warnings } = await resolveEpicStatus(projectRoot, change.name, change.relPath);
14
- epics.push({
15
- adapterName: 'openspec',
16
- externalId: change.name,
17
- title,
18
- status,
19
- sourcePath: change.relPath,
20
- taskCount: total,
21
- tasksDone: done,
22
- warnings,
23
- });
24
- }
25
- return epics;
9
+ const changes = (await discoverChanges(projectRoot)).filter((change) => !change.archived);
10
+ return listEpicsFromDiscovered(projectRoot, changes);
26
11
  },
27
12
  async getEpic(externalId) {
28
13
  await assertWorkspace(projectRoot);
29
14
  const changes = await discoverChanges(projectRoot);
30
- const change = changes.find(c => c.name === externalId);
15
+ const change = changes.find((item) => item.name === externalId);
31
16
  if (!change || change.archived) {
32
17
  throw new SpegoError('DELIVERY_ADAPTER_ERROR', `Change "${externalId}" not found`, {
33
18
  changeName: externalId,
34
19
  });
35
20
  }
36
- const title = await readProposalTitle(projectRoot, change.relPath);
37
- const { total, done, status, warnings } = await resolveEpicStatus(projectRoot, change.name, change.relPath);
21
+ const { title, taskCount, tasksDone, status } = await resolveEpic(projectRoot, change);
38
22
  return {
39
23
  adapterName: 'openspec',
40
24
  externalId: change.name,
41
25
  title,
42
26
  status,
43
27
  sourcePath: change.relPath,
44
- taskCount: total,
45
- tasksDone: done,
46
- warnings,
28
+ taskCount,
29
+ tasksDone,
47
30
  };
48
31
  },
49
32
  async listTasks(externalId) {
50
33
  await assertWorkspace(projectRoot);
51
34
  const changes = await discoverChanges(projectRoot);
52
- const change = changes.find(c => c.name === externalId);
35
+ const change = changes.find((item) => item.name === externalId);
53
36
  if (!change || change.archived) {
54
37
  throw new SpegoError('DELIVERY_ADAPTER_ERROR', `Change "${externalId}" not found`, {
55
38
  changeName: externalId,
@@ -60,7 +43,7 @@ export function createOpenSpecAdapter(projectRoot) {
60
43
  },
61
44
  async getTask(externalId, taskId) {
62
45
  const tasks = await this.listTasks(externalId);
63
- const task = tasks.find(t => t.externalId === taskId);
46
+ const task = tasks.find((item) => item.externalId === taskId);
64
47
  if (!task) {
65
48
  throw new SpegoError('DELIVERY_ADAPTER_ERROR', `Task "${taskId}" not found in change "${externalId}"`, {
66
49
  changeName: externalId,
@@ -71,16 +54,30 @@ export function createOpenSpecAdapter(projectRoot) {
71
54
  },
72
55
  };
73
56
  }
74
- async function resolveEpicStatus(projectRoot, changeName, changeRelPath) {
75
- const cli = await fetchCliStatus(projectRoot, changeName);
76
- if (cli && typeof cli.taskCount === 'number' && typeof cli.tasksDone === 'number') {
77
- const total = cli.taskCount;
78
- const done = cli.tasksDone;
79
- if (total === 0)
80
- return { total: 0, done: 0, status: 'planning-incomplete' };
81
- return { total, done, status: done === total ? 'completed' : 'active' };
82
- }
83
- const result = await parseTasks(projectRoot, changeRelPath, changeName);
84
- return { ...result, warnings: ['OpenSpec CLI status unavailable, using filesystem fallback'] };
57
+ export async function listEpicsFromDiscovered(projectRoot, changes) {
58
+ return Promise.all(changes.map(async (change) => {
59
+ const { title, status, taskCount, tasksDone } = await resolveEpic(projectRoot, change);
60
+ return {
61
+ adapterName: 'openspec',
62
+ externalId: change.name,
63
+ title,
64
+ status,
65
+ sourcePath: change.relPath,
66
+ taskCount,
67
+ tasksDone,
68
+ };
69
+ }));
70
+ }
71
+ async function resolveEpic(projectRoot, change) {
72
+ const [title, { total, done, status }] = await Promise.all([
73
+ readProposalTitle(projectRoot, change.relPath),
74
+ parseTasks(projectRoot, change.relPath, change.name),
75
+ ]);
76
+ return {
77
+ title,
78
+ taskCount: total,
79
+ tasksDone: done,
80
+ status,
81
+ };
85
82
  }
86
83
  //# sourceMappingURL=openspec-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openspec-adapter.js","sourceRoot":"","sources":["../../src/delivery/openspec-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openspec-adapter.js","sourceRoot":"","sources":["../../src/delivery/openspec-adapter.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,3 @@ export interface DiscoveredChange {
5
5
  }
6
6
  export declare function assertWorkspace(projectRoot: string): Promise<void>;
7
7
  export declare function discoverChanges(projectRoot: string): Promise<DiscoveredChange[]>;
8
- export declare function fetchCliStatus(projectRoot: string, changeName: string): Promise<Record<string, unknown> | null>;