@zhuk/spego 0.13.1 → 0.14.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.
- package/CHANGELOG.md +25 -6
- package/README.md +9 -10
- package/dist/cli/commands/artifact.js +3 -3
- package/dist/cli/commands/artifact.js.map +1 -1
- package/dist/cli/commands/board.d.ts +2 -0
- package/dist/cli/commands/{mirror.js → board.js} +10 -127
- package/dist/cli/commands/board.js.map +1 -0
- package/dist/cli/commands/delivery.d.ts +3 -2
- package/dist/cli/commands/delivery.js +44 -38
- package/dist/cli/commands/delivery.js.map +1 -1
- package/dist/cli/commands/index-rebuild.js +3 -4
- package/dist/cli/commands/index-rebuild.js.map +1 -1
- package/dist/cli/commands/meta.js +3 -3
- package/dist/cli/commands/meta.js.map +1 -1
- package/dist/cli/commands/sprints.d.ts +6 -0
- package/dist/cli/commands/sprints.js +35 -0
- package/dist/cli/commands/sprints.js.map +1 -0
- package/dist/cli/commands/view.d.ts +0 -3
- package/dist/cli/commands/view.js +3 -14
- package/dist/cli/commands/view.js.map +1 -1
- package/dist/cli/commands/workspace.js +52 -4
- package/dist/cli/commands/workspace.js.map +1 -1
- package/dist/cli/render.d.ts +6 -0
- package/dist/cli/render.js +9 -0
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/runtime.d.ts +0 -1
- package/dist/cli/runtime.js +1 -1
- package/dist/cli/runtime.js.map +1 -1
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/command-meta/registry.d.ts +1 -0
- package/dist/command-meta/registry.js +18 -8
- package/dist/command-meta/registry.js.map +1 -1
- package/dist/delivery/load.d.ts +13 -0
- package/dist/delivery/load.js +124 -0
- package/dist/delivery/load.js.map +1 -0
- package/dist/delivery/mirror.d.ts +11 -0
- package/dist/delivery/mirror.js +14 -0
- package/dist/delivery/mirror.js.map +1 -1
- package/dist/generator/claude.d.ts +1 -1
- package/dist/generator/claude.js +11 -4
- package/dist/generator/claude.js.map +1 -1
- package/dist/workflows/registry.js +5 -5
- package/dist/workflows/registry.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/mirror.d.ts +0 -2
- package/dist/cli/commands/mirror.js.map +0 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sprint listing: `spego sprints` — a read-only view over `sprint-plan`
|
|
3
|
+
* artifacts in board order. Membership stays owned by the groom workflow.
|
|
4
|
+
*/
|
|
5
|
+
import { toMirrorArtifact } from '../../delivery/load.js';
|
|
6
|
+
import { summarizeSprints } from '../../delivery/mirror.js';
|
|
7
|
+
import { renderSection, renderTable } from '../render.js';
|
|
8
|
+
import { runEngineCommand } from '../runtime.js';
|
|
9
|
+
function sprintRow(sprint) {
|
|
10
|
+
const window = sprint.startDate || sprint.endDate
|
|
11
|
+
? `${sprint.startDate ?? '…'} → ${sprint.endDate ?? '…'}`
|
|
12
|
+
: '—';
|
|
13
|
+
return [sprint.slug, sprint.status, window, String(sprint.changes.length), sprint.title];
|
|
14
|
+
}
|
|
15
|
+
export function registerSprints(program) {
|
|
16
|
+
program
|
|
17
|
+
.command('sprints')
|
|
18
|
+
.description('List sprint plans in board order')
|
|
19
|
+
.option('--cwd <dir>', 'project root')
|
|
20
|
+
.action(async (opts) => {
|
|
21
|
+
await runEngineCommand({ program, cwd: opts.cwd }, async (engine) => {
|
|
22
|
+
const sprints = summarizeSprints(engine.list({ type: 'sprint-plan' }).map(toMirrorArtifact));
|
|
23
|
+
return {
|
|
24
|
+
payload: sprints,
|
|
25
|
+
human: () => {
|
|
26
|
+
if (sprints.length === 0)
|
|
27
|
+
return renderSection('🏃', 'Sprints', 'No sprint plans.');
|
|
28
|
+
const table = renderTable(['sprint', 'status', 'window', 'changes', 'title'], sprints.map(sprintRow), { maxWidth: 48 });
|
|
29
|
+
return renderSection('🏃', 'Sprints', table);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=sprints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprints.js","sourceRoot":"","sources":["../../../src/cli/commands/sprints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAsB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,SAAS,SAAS,CAAC,MAAqB;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO;QAC/C,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,IAAI,GAAG,EAAE;QACzD,CAAC,CAAC,GAAG,CAAC;IACR,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAClE,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7F,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,GAAG,EAAE;oBACV,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;oBACpF,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxH,OAAO,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC/C,CAAC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bundle export: `spego view`.
|
|
3
|
-
*
|
|
4
|
-
* Honors the deprecated `--format` flag during the deprecation window in
|
|
5
|
-
* addition to the global `--json` flag.
|
|
6
3
|
*/
|
|
7
4
|
import type { Command } from 'commander';
|
|
8
5
|
export declare function registerView(program: Command): void;
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bundle export: `spego view`.
|
|
3
|
-
*
|
|
4
|
-
* Honors the deprecated `--format` flag during the deprecation window in
|
|
5
|
-
* addition to the global `--json` flag.
|
|
6
3
|
*/
|
|
7
4
|
import { z } from 'zod';
|
|
8
5
|
import { SpegoError } from '../../errors.js';
|
|
9
6
|
import { viewArtifacts } from '../../export/view.js';
|
|
10
|
-
import { intersperseBundleDividers,
|
|
11
|
-
import {
|
|
12
|
-
import { getJsonMode, runEngineCommand } from '../runtime.js';
|
|
7
|
+
import { intersperseBundleDividers, renderSection } from '../render.js';
|
|
8
|
+
import { runEngineCommand } from '../runtime.js';
|
|
13
9
|
export function registerView(program) {
|
|
14
10
|
program
|
|
15
11
|
.command('view')
|
|
@@ -18,19 +14,12 @@ export function registerView(program) {
|
|
|
18
14
|
.option('--id <id>', 'limit to a single artifact')
|
|
19
15
|
.option('--revision <n>', 'specific revision (requires --id)')
|
|
20
16
|
.option('--include-deleted', 'include soft-deleted artifacts', false)
|
|
21
|
-
.option('--format <fmt>', '[deprecated] markdown | json — use the global --json flag instead')
|
|
22
17
|
.option('--cwd <dir>', 'project root')
|
|
23
18
|
.action(async (opts) => {
|
|
24
|
-
const globalJson = getJsonMode(program);
|
|
25
|
-
if (opts.format !== undefined) {
|
|
26
|
-
deprecate(globalJson, '--format is deprecated; use the global --json flag');
|
|
27
|
-
}
|
|
28
|
-
const wantJson = globalJson || opts.format === 'json';
|
|
29
19
|
let revision;
|
|
30
20
|
await runEngineCommand({
|
|
31
21
|
program,
|
|
32
22
|
cwd: opts.cwd,
|
|
33
|
-
jsonOverride: wantJson,
|
|
34
23
|
validate: () => {
|
|
35
24
|
if (opts.revision === undefined)
|
|
36
25
|
return;
|
|
@@ -53,7 +42,7 @@ export function registerView(program) {
|
|
|
53
42
|
const body = intersperseBundleDividers(view.markdown.content);
|
|
54
43
|
return {
|
|
55
44
|
payload: view.json,
|
|
56
|
-
human: () =>
|
|
45
|
+
human: () => renderSection('📦', 'Artifact bundle', body),
|
|
57
46
|
};
|
|
58
47
|
});
|
|
59
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/cli/commands/view.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/cli/commands/view.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC5C,OAAO;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACzC,MAAM,CAAC,WAAW,EAAE,4BAA4B,CAAC;SACjD,MAAM,CAAC,gBAAgB,EAAE,mCAAmC,CAAC;SAC7D,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,EAAE,KAAK,CAAC;SACpE,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,QAA4B,CAAC;QACjC,MAAM,gBAAgB,CACrB;YACC,OAAO;YACP,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,GAAG,EAAE;gBACd,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAAE,OAAO;gBACxC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;oBACvB,OAAO;gBACR,CAAC;gBACD,MAAM,IAAI,UAAU,CAAC,mBAAmB,EAAE,iDAAiD,EAAE;oBAC5F,MAAM,EAAE,YAAY;iBACpB,CAAC,CAAC;YACJ,CAAC;SACD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;gBACxC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,QAAQ;gBACR,cAAc,EAAE,IAAI,CAAC,cAAc;aACnC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO;gBACN,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,KAAK,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC;aACzD,CAAC;QACH,CAAC,CACD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,9 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Workspace lifecycle commands: `init` and `status`.
|
|
3
3
|
*/
|
|
4
|
+
import { ArtifactEngine } from '../../artifacts/engine.js';
|
|
5
|
+
import { loadBoardState } from '../../delivery/load.js';
|
|
4
6
|
import { initWorkspace, workspaceStatus } from '../../workspace/init.js';
|
|
5
|
-
import { renderBox,
|
|
7
|
+
import { renderBox, renderSection } from '../render.js';
|
|
6
8
|
import { runCommand } from '../runtime.js';
|
|
9
|
+
const DRIFT_CODES = new Set([
|
|
10
|
+
'dangling-dep', 'dep-cycle', 'ungroomed-change', 'orphan-epic', 'archived-in-sprint', 'closable-sprint',
|
|
11
|
+
]);
|
|
12
|
+
/**
|
|
13
|
+
* Drift is advisory: any failure to derive the board (no OpenSpec workspace,
|
|
14
|
+
* broken adapter) silently yields no summary so `status` never breaks.
|
|
15
|
+
*/
|
|
16
|
+
async function collectDrift(cwd) {
|
|
17
|
+
let engine;
|
|
18
|
+
try {
|
|
19
|
+
engine = await ArtifactEngine.open({ projectRoot: cwd });
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const { board } = await loadBoardState(engine, cwd);
|
|
26
|
+
if (board.warnings.some((warning) => warning.code === 'adapter-unavailable'))
|
|
27
|
+
return undefined;
|
|
28
|
+
const codes = {};
|
|
29
|
+
let warnings = 0;
|
|
30
|
+
for (const warning of board.warnings) {
|
|
31
|
+
if (!DRIFT_CODES.has(warning.code))
|
|
32
|
+
continue;
|
|
33
|
+
warnings += 1;
|
|
34
|
+
codes[warning.code] = (codes[warning.code] ?? 0) + 1;
|
|
35
|
+
}
|
|
36
|
+
return { warnings, codes };
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
engine.close();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function driftLine(drift) {
|
|
46
|
+
const parts = Object.entries(drift.codes)
|
|
47
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
48
|
+
.map(([code, count]) => (count > 1 ? `${code} ×${count}` : code));
|
|
49
|
+
return `Delivery drift: ${parts.join(', ')} — run the spego-groom workflow.`;
|
|
50
|
+
}
|
|
7
51
|
export function registerWorkspace(program) {
|
|
8
52
|
program
|
|
9
53
|
.command('init')
|
|
@@ -31,7 +75,7 @@ export function registerWorkspace(program) {
|
|
|
31
75
|
['index', summary.indexPath],
|
|
32
76
|
['agents', summary.config.agents.join(', ')],
|
|
33
77
|
]);
|
|
34
|
-
return
|
|
78
|
+
return renderSection('📦', headerLabel, box);
|
|
35
79
|
};
|
|
36
80
|
return { payload: summary, human };
|
|
37
81
|
});
|
|
@@ -43,6 +87,7 @@ export function registerWorkspace(program) {
|
|
|
43
87
|
.action(async (opts) => {
|
|
44
88
|
await runCommand({ program }, async () => {
|
|
45
89
|
const status = await workspaceStatus(opts.cwd);
|
|
90
|
+
const drift = status.initialized ? await collectDrift(opts.cwd) : undefined;
|
|
46
91
|
const human = () => {
|
|
47
92
|
if (!status.initialized)
|
|
48
93
|
return `No spego workspace; run: spego init`;
|
|
@@ -52,9 +97,12 @@ export function registerWorkspace(program) {
|
|
|
52
97
|
['artifacts', status.artifactsRoot ?? ''],
|
|
53
98
|
['index', status.indexPath ?? ''],
|
|
54
99
|
]);
|
|
55
|
-
|
|
100
|
+
const blocks = [box];
|
|
101
|
+
if (drift && drift.warnings > 0)
|
|
102
|
+
blocks.push(driftLine(drift));
|
|
103
|
+
return renderSection('📦', 'Workspace ready', ...blocks);
|
|
56
104
|
};
|
|
57
|
-
return { payload: status, human };
|
|
105
|
+
return { payload: drift === undefined ? status : { ...status, drift }, human };
|
|
58
106
|
});
|
|
59
107
|
});
|
|
60
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/cli/commands/workspace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/cli/commands/workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/render.d.ts
CHANGED
|
@@ -40,6 +40,12 @@ export declare function renderTable(columns: string[], rows: string[][], opts?:
|
|
|
40
40
|
}): string;
|
|
41
41
|
/** Render a single-line section header prefixed by an emoji. */
|
|
42
42
|
export declare function renderHeader(emoji: string, label: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Render a section: emoji header, one blank line, then content blocks
|
|
45
|
+
* separated by blank lines. Every command's human output goes through this
|
|
46
|
+
* so spacing stays uniform across the surface.
|
|
47
|
+
*/
|
|
48
|
+
export declare function renderSection(emoji: string, label: string, ...blocks: string[]): string;
|
|
43
49
|
/** Render a `─` divider of the given width (default 60). */
|
|
44
50
|
export declare function renderDivider(width?: number): string;
|
|
45
51
|
/**
|
package/dist/cli/render.js
CHANGED
|
@@ -83,6 +83,15 @@ export function renderTable(columns, rows, opts = {}) {
|
|
|
83
83
|
export function renderHeader(emoji, label) {
|
|
84
84
|
return `${emoji} ${label}`;
|
|
85
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Render a section: emoji header, one blank line, then content blocks
|
|
88
|
+
* separated by blank lines. Every command's human output goes through this
|
|
89
|
+
* so spacing stays uniform across the surface.
|
|
90
|
+
*/
|
|
91
|
+
export function renderSection(emoji, label, ...blocks) {
|
|
92
|
+
const content = blocks.filter((block) => block.length > 0).join('\n\n');
|
|
93
|
+
return `${renderHeader(emoji, label)}\n\n${content}`;
|
|
94
|
+
}
|
|
86
95
|
/** Render a `─` divider of the given width (default 60). */
|
|
87
96
|
export function renderDivider(width = 60) {
|
|
88
97
|
return '─'.repeat(Math.max(1, width));
|
package/dist/cli/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/cli/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,iFAAiF;AACjF,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,KAAa;IACnD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC5B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACzC,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,KAAa;IACnD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,IAA6B;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,8CAA8C;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,+BAA+B;IAEpE,uEAAuE;IACvE,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;IAE7C,MAAM,IAAI,GAAG,IAAI;SACd,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;IAC/C,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC;AAC5F,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CACzB,OAAiB,EACjB,IAAgB,EAChB,OAA8B,EAAE;IAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,uBAAuB,CAAC;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,CAAC,KAAe,EAAU,EAAE,CAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAEtF,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE,CAAC;AACxF,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,KAAa;IACvD,OAAO,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE;IAC9C,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,gBAAgB,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YAC5B,CAAC;YACD,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/cli/render.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/runtime.d.ts
CHANGED
|
@@ -22,7 +22,6 @@ export declare function runCommand<T>(ctx: RuntimeContext, fn: (json: boolean) =
|
|
|
22
22
|
/** Run a command body that needs an `ArtifactEngine`; the engine is closed on every exit path. */
|
|
23
23
|
export declare function runEngineCommand<T>(ctx: RuntimeContext & {
|
|
24
24
|
cwd?: string;
|
|
25
|
-
jsonOverride?: boolean;
|
|
26
25
|
validate?: () => Promise<void> | void;
|
|
27
26
|
}, fn: (engine: ArtifactEngine, json: boolean) => Promise<CommandResult<T>>): Promise<void>;
|
|
28
27
|
export {};
|
package/dist/cli/runtime.js
CHANGED
|
@@ -26,7 +26,7 @@ export async function runCommand(ctx, fn) {
|
|
|
26
26
|
}
|
|
27
27
|
/** Run a command body that needs an `ArtifactEngine`; the engine is closed on every exit path. */
|
|
28
28
|
export async function runEngineCommand(ctx, fn) {
|
|
29
|
-
const json =
|
|
29
|
+
const json = getJsonMode(ctx.program);
|
|
30
30
|
let engine;
|
|
31
31
|
try {
|
|
32
32
|
await ctx.validate?.();
|
package/dist/cli/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/cli/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAWnC,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC3C,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,IAAe,CAAC;AACvC,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,GAAmB,EACnB,EAAgD;IAEhD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC;QACJ,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjB,CAAC;AACF,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/cli/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAWnC,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC3C,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,IAAe,CAAC;AACvC,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,GAAmB,EACnB,EAAgD;IAEhD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC;QACJ,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjB,CAAC;AACF,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,GAA6E,EAC7E,EAAwE;IAExE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,MAAsB,CAAC;IAC3B,IAAI,CAAC;QACJ,MAAM,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QACvB,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjB,CAAC;YAAS,CAAC;QACV,MAAM,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACF,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -19,7 +19,8 @@ import { registerView } from './cli/commands/view.js';
|
|
|
19
19
|
import { registerIndex } from './cli/commands/index-rebuild.js';
|
|
20
20
|
import { registerSkills } from './cli/commands/skills.js';
|
|
21
21
|
import { registerDelivery } from './cli/commands/delivery.js';
|
|
22
|
-
import {
|
|
22
|
+
import { registerBoard } from './cli/commands/board.js';
|
|
23
|
+
import { registerSprints } from './cli/commands/sprints.js';
|
|
23
24
|
export function buildProgram() {
|
|
24
25
|
const program = new Command();
|
|
25
26
|
program
|
|
@@ -50,7 +51,8 @@ export function buildProgram() {
|
|
|
50
51
|
registerIndex(program);
|
|
51
52
|
registerSkills(program);
|
|
52
53
|
registerDelivery(program);
|
|
53
|
-
|
|
54
|
+
registerBoard(program);
|
|
55
|
+
registerSprints(program);
|
|
54
56
|
return program;
|
|
55
57
|
}
|
|
56
58
|
/**
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,7 +92,6 @@ export const COMMAND_REGISTRY = [
|
|
|
92
92
|
id: { name: 'id', type: 'string', required: false, description: 'Limit to a single artifact' },
|
|
93
93
|
revision: { name: 'revision', type: 'number', required: false, description: 'Specific revision (requires --id)' },
|
|
94
94
|
includeDeleted: { name: 'includeDeleted', type: 'boolean', required: false, description: 'Include soft-deleted artifacts' },
|
|
95
|
-
format: { name: 'format', type: 'string', required: false, description: 'Output format: markdown | json' },
|
|
96
95
|
},
|
|
97
96
|
outputModes: ['markdown', 'json'],
|
|
98
97
|
},
|
|
@@ -116,22 +115,33 @@ export const COMMAND_REGISTRY = [
|
|
|
116
115
|
},
|
|
117
116
|
{
|
|
118
117
|
name: 'epics',
|
|
119
|
-
description: 'List epics',
|
|
118
|
+
description: 'List epics or get a single epic by change name',
|
|
120
119
|
slashName: '/spego:epics',
|
|
121
120
|
category: 'planning',
|
|
122
|
-
inputSchema: {
|
|
121
|
+
inputSchema: {
|
|
122
|
+
name: { name: 'name', type: 'string', required: false, description: 'Change name to get a single epic', positional: true },
|
|
123
|
+
},
|
|
123
124
|
outputModes: ['markdown', 'json'],
|
|
124
125
|
},
|
|
125
126
|
{
|
|
126
127
|
name: 'tasks',
|
|
127
|
-
description: 'List tasks for a change',
|
|
128
|
+
description: 'List tasks for a change or get a single task',
|
|
128
129
|
slashName: '/spego:tasks',
|
|
129
130
|
category: 'planning',
|
|
130
131
|
inputSchema: {
|
|
131
|
-
change: { name: 'change', type: 'string', required: true, description: 'Change or epic name' },
|
|
132
|
+
change: { name: 'change', type: 'string', required: true, description: 'Change or epic name', positional: true },
|
|
133
|
+
task: { name: 'task', type: 'string', required: false, description: 'Task id to get a single task', positional: true },
|
|
132
134
|
},
|
|
133
135
|
outputModes: ['markdown', 'json'],
|
|
134
136
|
},
|
|
137
|
+
{
|
|
138
|
+
name: 'sprints',
|
|
139
|
+
description: 'List sprint plans in board order',
|
|
140
|
+
slashName: '/spego:sprints',
|
|
141
|
+
category: 'planning',
|
|
142
|
+
inputSchema: {},
|
|
143
|
+
outputModes: ['markdown', 'json'],
|
|
144
|
+
},
|
|
135
145
|
{
|
|
136
146
|
name: 'workflows',
|
|
137
147
|
description: 'List available workflow skills',
|
|
@@ -141,9 +151,9 @@ export const COMMAND_REGISTRY = [
|
|
|
141
151
|
outputModes: ['markdown', 'json'],
|
|
142
152
|
},
|
|
143
153
|
{
|
|
144
|
-
name: '
|
|
145
|
-
description: 'Show delivery
|
|
146
|
-
slashName: '/spego:
|
|
154
|
+
name: 'board',
|
|
155
|
+
description: 'Show the delivery board (sprints, blockers, gaps)',
|
|
156
|
+
slashName: '/spego:board',
|
|
147
157
|
category: 'planning',
|
|
148
158
|
inputSchema: {
|
|
149
159
|
graph: { name: 'graph', type: 'boolean', required: false, description: 'Show dependency graph' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/command-meta/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/command-meta/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads mirror input from the engine plus the delivery adapter and derives
|
|
3
|
+
* the board. Shared by the `board` command and the `status` drift summary.
|
|
4
|
+
*/
|
|
5
|
+
import type { ArtifactEngine } from '../artifacts/engine.js';
|
|
6
|
+
import type { IndexedArtifact } from '../index/indexer.js';
|
|
7
|
+
import { type MirrorArtifact, type MirrorBoard, type MirrorInput } from './mirror.js';
|
|
8
|
+
export interface BoardState {
|
|
9
|
+
input: MirrorInput;
|
|
10
|
+
board: MirrorBoard;
|
|
11
|
+
}
|
|
12
|
+
export declare function loadBoardState(engine: ArtifactEngine, cwd: string | undefined): Promise<BoardState>;
|
|
13
|
+
export declare function toMirrorArtifact(artifact: IndexedArtifact): MirrorArtifact;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads mirror input from the engine plus the delivery adapter and derives
|
|
3
|
+
* the board. Shared by the `board` command and the `status` drift summary.
|
|
4
|
+
*/
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { SpegoError } from '../errors.js';
|
|
7
|
+
import { readConfig } from '../workspace/config.js';
|
|
8
|
+
import { resolveWorkspacePaths } from '../workspace/paths.js';
|
|
9
|
+
import { assertWorkspace, discoverChanges } from './openspec-discover.js';
|
|
10
|
+
import { listEpicsFromDiscovered } from './openspec-adapter.js';
|
|
11
|
+
import { resolveAdapter } from './resolve.js';
|
|
12
|
+
import { deriveMirror, } from './mirror.js';
|
|
13
|
+
export async function loadBoardState(engine, cwd) {
|
|
14
|
+
const projectRoot = path.resolve(cwd ?? process.cwd());
|
|
15
|
+
const wsPaths = resolveWorkspacePaths(projectRoot);
|
|
16
|
+
const config = await readConfig(wsPaths.configPath);
|
|
17
|
+
const adapter = resolveAdapter(projectRoot, config);
|
|
18
|
+
try {
|
|
19
|
+
const input = await collectMirrorInput(engine, projectRoot, adapter);
|
|
20
|
+
return { input, board: deriveMirror(input) };
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
if (err instanceof SpegoError && err.code === 'DELIVERY_ADAPTER_ERROR') {
|
|
24
|
+
const warning = {
|
|
25
|
+
code: 'adapter-unavailable',
|
|
26
|
+
message: 'OpenSpec workspace unavailable; mirror board is empty.',
|
|
27
|
+
details: err.details,
|
|
28
|
+
};
|
|
29
|
+
const input = {
|
|
30
|
+
changes: [],
|
|
31
|
+
epics: [],
|
|
32
|
+
sprints: [],
|
|
33
|
+
linkedArtifacts: [],
|
|
34
|
+
warnings: [warning],
|
|
35
|
+
};
|
|
36
|
+
return { input, board: deriveMirror(input) };
|
|
37
|
+
}
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function collectMirrorInput(engine, projectRoot, adapter) {
|
|
42
|
+
if (adapter.name === 'openspec')
|
|
43
|
+
await assertWorkspace(projectRoot);
|
|
44
|
+
const discovered = await discoverChanges(projectRoot);
|
|
45
|
+
const adapterEpics = adapter.name === 'openspec'
|
|
46
|
+
? await listEpicsFromDiscovered(projectRoot, discovered.filter((change) => !change.archived))
|
|
47
|
+
: await adapter.listEpics();
|
|
48
|
+
const adapterBySlug = new Map(adapterEpics.map((epic) => [epic.externalId, epic]));
|
|
49
|
+
const seen = new Set();
|
|
50
|
+
const changes = discovered
|
|
51
|
+
.map((item) => {
|
|
52
|
+
seen.add(item.name);
|
|
53
|
+
const adapterEpic = adapterBySlug.get(item.name);
|
|
54
|
+
return sourceChange(item.name, item.archived, adapterEpic);
|
|
55
|
+
})
|
|
56
|
+
.sort((a, b) => a.slug.localeCompare(b.slug));
|
|
57
|
+
for (const epic of adapterEpics) {
|
|
58
|
+
if (seen.has(epic.externalId))
|
|
59
|
+
continue;
|
|
60
|
+
changes.push(sourceChange(epic.externalId, false, epic));
|
|
61
|
+
}
|
|
62
|
+
changes.sort((a, b) => a.slug.localeCompare(b.slug));
|
|
63
|
+
const epics = engine.list({ type: 'epic' }).map(toMirrorArtifact);
|
|
64
|
+
const sprints = engine.list({ type: 'sprint-plan' }).map(toMirrorArtifact);
|
|
65
|
+
const linkedArtifacts = await resolveLinkedArtifacts(engine, epics);
|
|
66
|
+
return { changes, epics, sprints, linkedArtifacts, warnings: [] };
|
|
67
|
+
}
|
|
68
|
+
function sourceChange(slug, archived, epic) {
|
|
69
|
+
const status = archived ? 'completed' : (epic?.status ?? 'unknown');
|
|
70
|
+
return {
|
|
71
|
+
slug,
|
|
72
|
+
title: epic?.title ?? slug,
|
|
73
|
+
status,
|
|
74
|
+
archived,
|
|
75
|
+
warnings: epic?.warnings,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export function toMirrorArtifact(artifact) {
|
|
79
|
+
return {
|
|
80
|
+
id: artifact.id,
|
|
81
|
+
type: artifact.type,
|
|
82
|
+
slug: artifact.slug,
|
|
83
|
+
title: artifact.title,
|
|
84
|
+
meta: artifact.meta,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async function resolveLinkedArtifacts(engine, epics) {
|
|
88
|
+
const ids = new Set();
|
|
89
|
+
for (const epic of epics) {
|
|
90
|
+
const links = epic.meta.links;
|
|
91
|
+
if (!Array.isArray(links))
|
|
92
|
+
continue;
|
|
93
|
+
for (const link of links) {
|
|
94
|
+
if (typeof link === 'string')
|
|
95
|
+
ids.add(link);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const artifacts = [];
|
|
99
|
+
for (const id of [...ids].sort()) {
|
|
100
|
+
try {
|
|
101
|
+
const record = await engine.readById(id);
|
|
102
|
+
artifacts.push({
|
|
103
|
+
id: record.frontmatter.id,
|
|
104
|
+
type: record.frontmatter.type,
|
|
105
|
+
slug: record.frontmatter.slug,
|
|
106
|
+
title: record.frontmatter.title,
|
|
107
|
+
meta: record.frontmatter.meta,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (err instanceof SpegoError && err.code === 'ARTIFACT_NOT_FOUND')
|
|
112
|
+
continue;
|
|
113
|
+
throw err;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
artifacts.sort((a, b) => {
|
|
117
|
+
const bySlug = a.slug.localeCompare(b.slug);
|
|
118
|
+
if (bySlug !== 0)
|
|
119
|
+
return bySlug;
|
|
120
|
+
return a.id.localeCompare(b.id);
|
|
121
|
+
});
|
|
122
|
+
return artifacts;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/delivery/load.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,YAAY,GAKb,MAAM,aAAa,CAAC;AAQrB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAsB,EAAE,GAAuB;IAClF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACrE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACvE,MAAM,OAAO,GAAkB;gBAC7B,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,wDAAwD;gBACjE,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC;YACF,MAAM,KAAK,GAAgB;gBACzB,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,EAAE;gBACX,eAAe,EAAE,EAAE;gBACnB,QAAQ,EAAE,CAAC,OAAO,CAAC;aACpB,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAsB,EACtB,WAAmB,EACnB,OAAwB;IAExB,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU;QAAE,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,KAAK,UAAU;QACzB,CAAC,CAAC,MAAM,uBAAuB,CAC7B,WAAW,EACX,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAChD;QACD,CAAC,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAG,UAAU;SACvB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,SAAS;QACxC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3E,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,QAAiB,EAAE,IAAkC;IACvF,MAAM,MAAM,GAAmB,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;IACpF,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI;QAC1B,MAAM;QACN,QAAQ;QACR,QAAQ,EAAE,IAAI,EAAE,QAAQ;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAyB;IACxD,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAAsB,EACtB,KAAuB;IAEvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC;gBACb,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE;gBACzB,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;gBAC7B,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;gBAC7B,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK;gBAC/B,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;aAC9B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB;gBAAE,SAAS;YAC7E,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAChC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -60,3 +60,14 @@ export interface MirrorBoard {
|
|
|
60
60
|
}
|
|
61
61
|
export declare function deriveMirror(input: MirrorInput): MirrorBoard;
|
|
62
62
|
export declare function filterMirrorGaps(board: MirrorBoard): MirrorBoard;
|
|
63
|
+
export interface SprintSummary {
|
|
64
|
+
id: string;
|
|
65
|
+
slug: string;
|
|
66
|
+
title: string;
|
|
67
|
+
status: string;
|
|
68
|
+
startDate: string | null;
|
|
69
|
+
endDate: string | null;
|
|
70
|
+
changes: string[];
|
|
71
|
+
}
|
|
72
|
+
/** Sprint-plan listing in the same order the board uses: start date, undated last, then slug. */
|
|
73
|
+
export declare function summarizeSprints(artifacts: MirrorArtifact[]): SprintSummary[];
|
package/dist/delivery/mirror.js
CHANGED
|
@@ -253,6 +253,20 @@ export function filterMirrorGaps(board) {
|
|
|
253
253
|
next: board.next,
|
|
254
254
|
};
|
|
255
255
|
}
|
|
256
|
+
/** Sprint-plan listing in the same order the board uses: start date, undated last, then slug. */
|
|
257
|
+
export function summarizeSprints(artifacts) {
|
|
258
|
+
const plans = sortArtifacts(artifacts).map(toSprintPlan);
|
|
259
|
+
plans.sort(compareSprints);
|
|
260
|
+
return plans.map((plan) => ({
|
|
261
|
+
id: plan.artifact.id,
|
|
262
|
+
slug: plan.artifact.slug,
|
|
263
|
+
title: plan.artifact.title,
|
|
264
|
+
status: plan.status,
|
|
265
|
+
startDate: plan.startDate,
|
|
266
|
+
endDate: plan.endDate,
|
|
267
|
+
changes: plan.changes,
|
|
268
|
+
}));
|
|
269
|
+
}
|
|
256
270
|
function sortArtifacts(artifacts) {
|
|
257
271
|
const copy = [...artifacts];
|
|
258
272
|
copy.sort((a, b) => {
|