@selvakumaresra/specship 0.7.0 → 0.10.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.
- package/commands/ss-domain.md +98 -0
- package/commands/ss-triage.md +177 -0
- package/dist/bin/specship.js +308 -0
- package/dist/bin/specship.js.map +1 -1
- package/dist/db/migrations.d.ts +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +28 -1
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/schema.sql +26 -2
- package/dist/db/spec-queries.d.ts +29 -0
- package/dist/db/spec-queries.d.ts.map +1 -1
- package/dist/db/spec-queries.js +63 -0
- package/dist/db/spec-queries.js.map +1 -1
- package/dist/enforce/enforce.d.ts +70 -0
- package/dist/enforce/enforce.d.ts.map +1 -0
- package/dist/enforce/enforce.js +125 -0
- package/dist/enforce/enforce.js.map +1 -0
- package/dist/extraction/specs/markdown-spec-extractor.d.ts +21 -0
- package/dist/extraction/specs/markdown-spec-extractor.d.ts.map +1 -1
- package/dist/extraction/specs/markdown-spec-extractor.js +144 -0
- package/dist/extraction/specs/markdown-spec-extractor.js.map +1 -1
- package/dist/fitness/fitness.d.ts +75 -0
- package/dist/fitness/fitness.d.ts.map +1 -0
- package/dist/fitness/fitness.js +204 -0
- package/dist/fitness/fitness.js.map +1 -0
- package/dist/graph/maintainability.d.ts +101 -0
- package/dist/graph/maintainability.d.ts.map +1 -0
- package/dist/graph/maintainability.js +278 -0
- package/dist/graph/maintainability.js.map +1 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +149 -1
- package/dist/index.js.map +1 -1
- package/dist/installer/instructions-template.d.ts +5 -4
- package/dist/installer/instructions-template.d.ts.map +1 -1
- package/dist/installer/instructions-template.js +10 -4
- package/dist/installer/instructions-template.js.map +1 -1
- package/dist/installer/targets/claude.d.ts.map +1 -1
- package/dist/installer/targets/claude.js +4 -0
- package/dist/installer/targets/claude.js.map +1 -1
- package/dist/installer/targets/shared.d.ts.map +1 -1
- package/dist/installer/targets/shared.js +4 -0
- package/dist/installer/targets/shared.js.map +1 -1
- package/dist/mcp/fitness-tool.d.ts +12 -0
- package/dist/mcp/fitness-tool.d.ts.map +1 -0
- package/dist/mcp/fitness-tool.js +46 -0
- package/dist/mcp/fitness-tool.js.map +1 -0
- package/dist/mcp/maintainability-tool.d.ts +13 -0
- package/dist/mcp/maintainability-tool.d.ts.map +1 -0
- package/dist/mcp/maintainability-tool.js +64 -0
- package/dist/mcp/maintainability-tool.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +3 -2
- package/dist/mcp/server-instructions.js.map +1 -1
- package/dist/mcp/spec-tools.d.ts.map +1 -1
- package/dist/mcp/spec-tools.js +115 -1
- package/dist/mcp/spec-tools.js.map +1 -1
- package/dist/mcp/tools.d.ts +13 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +75 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reflect/apply.d.ts +31 -0
- package/dist/reflect/apply.d.ts.map +1 -0
- package/dist/reflect/apply.js +286 -0
- package/dist/reflect/apply.js.map +1 -0
- package/dist/reflect/hash.d.ts +20 -0
- package/dist/reflect/hash.d.ts.map +1 -0
- package/dist/reflect/hash.js +36 -0
- package/dist/reflect/hash.js.map +1 -0
- package/dist/reflect/index.d.ts +16 -0
- package/dist/reflect/index.d.ts.map +1 -0
- package/dist/reflect/index.js +43 -0
- package/dist/reflect/index.js.map +1 -0
- package/dist/reflect/miner.d.ts +21 -0
- package/dist/reflect/miner.d.ts.map +1 -0
- package/dist/reflect/miner.js +463 -0
- package/dist/reflect/miner.js.map +1 -0
- package/dist/reflect/store.d.ts +31 -0
- package/dist/reflect/store.d.ts.map +1 -0
- package/dist/reflect/store.js +101 -0
- package/dist/reflect/store.js.map +1 -0
- package/dist/reflect/sweep.d.ts +26 -0
- package/dist/reflect/sweep.d.ts.map +1 -0
- package/dist/reflect/sweep.js +42 -0
- package/dist/reflect/sweep.js.map +1 -0
- package/dist/reflect/targets.d.ts +52 -0
- package/dist/reflect/targets.d.ts.map +1 -0
- package/dist/reflect/targets.js +192 -0
- package/dist/reflect/targets.js.map +1 -0
- package/dist/reflect/types.d.ts +96 -0
- package/dist/reflect/types.d.ts.map +1 -0
- package/dist/reflect/types.js +13 -0
- package/dist/reflect/types.js.map +1 -0
- package/dist/resolution/domain-gap-seed.d.ts +60 -0
- package/dist/resolution/domain-gap-seed.d.ts.map +1 -0
- package/dist/resolution/domain-gap-seed.js +87 -0
- package/dist/resolution/domain-gap-seed.js.map +1 -0
- package/dist/resolution/spec-link-resolver.d.ts +46 -1
- package/dist/resolution/spec-link-resolver.d.ts.map +1 -1
- package/dist/resolution/spec-link-resolver.js +78 -0
- package/dist/resolution/spec-link-resolver.js.map +1 -1
- package/dist/server/routes/domain.js +0 -0
- package/dist/server/routes/events.js +20 -0
- package/dist/server/routes/maintainability.js +18 -0
- package/dist/server/routes/reflect.js +93 -0
- package/dist/server/server.js +6 -0
- package/dist/types.d.ts +4 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -1
- package/dist/web/chunk-EZZBWC7Z.js +1 -0
- package/dist/web/chunk-ITHLF4GI.js +1 -0
- package/dist/web/{chunk-UBOZGQNK.js → chunk-IZQXYQNQ.js} +1 -1
- package/dist/web/chunk-JBO7ZIPO.js +1 -0
- package/dist/web/chunk-JQXCRIK2.js +1 -0
- package/dist/web/{chunk-ASZ77FMZ.js → chunk-JT2YIHPL.js} +1 -1
- package/dist/web/{chunk-WLIMNDS3.js → chunk-ONKHTXHJ.js} +1 -1
- package/dist/web/{chunk-FHZHD2ZG.js → chunk-P5JX67LT.js} +1 -1
- package/dist/web/chunk-PDTQX2UL.js +6 -0
- package/dist/web/chunk-TPDB5GJN.js +1 -0
- package/dist/web/{chunk-RASJHUXS.js → chunk-XWDR6MPC.js} +1 -1
- package/dist/web/chunk-Y6WWDS4R.js +1 -0
- package/dist/web/chunk-Z5L3T5EO.js +1 -0
- package/dist/web/{chunk-D5OCNEJA.js → chunk-ZG7H3XPL.js} +1 -1
- package/dist/web/index.html +1 -1
- package/dist/web/main-GYPY5V5H.js +1 -0
- package/dist/workflows/executor.d.ts.map +1 -1
- package/dist/workflows/executor.js +3 -0
- package/dist/workflows/executor.js.map +1 -1
- package/dist/workflows/runners/prompt.d.ts +31 -8
- package/dist/workflows/runners/prompt.d.ts.map +1 -1
- package/dist/workflows/runners/prompt.js +117 -23
- package/dist/workflows/runners/prompt.js.map +1 -1
- package/dist/workflows/runners/types.d.ts +7 -1
- package/dist/workflows/runners/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/web/chunk-HGBF7AY5.js +0 -1
- package/dist/web/chunk-JQ534IB6.js +0 -6
- package/dist/web/chunk-MVOMVPYB.js +0 -1
- package/dist/web/chunk-NZEZCT65.js +0 -1
- package/dist/web/chunk-WQWYTRFN.js +0 -1
- package/dist/web/main-LHCYPOXF.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-link-resolver.d.ts","sourceRoot":"","sources":["../../src/resolution/spec-link-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAGL,IAAI,
|
|
1
|
+
{"version":3,"file":"spec-link-resolver.d.ts","sourceRoot":"","sources":["../../src/resolution/spec-link-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAGL,IAAI,EACJ,QAAQ,EAGT,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAY9D,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,oFAAoF;IACpF,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,iFAAiF;IACjF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAKD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,CAalD;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,IAAI,CAA0B;gBAGpC,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,WAAW,EACxB,IAAI,GAAE,uBAA4B;IAOpC;;;OAGG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,qBAAqB;IAQnE;;;OAGG;IACH,UAAU,IAAI,qBAAqB;IAQnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,cAAc;IA+CtB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;;OAGG;IACH,0BAA0B,CACxB,UAAU,EAAE,iBAAiB,EAAE,EAC/B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EACnC,KAAK,CAAC,EAAE,qBAAqB,GAC5B,IAAI;IAgCP;;;;;;;;;;OAUG;IACH,qBAAqB,CACnB,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,CAAC,EAAE,qBAAqB,GAC5B,IAAI;IA4CP;;;;;;;OAOG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAgB5D;;;;;;;;;;;;;;OAcG;IACH,iBAAiB,CACf,IAAI,EAAE,IAAI,EACV,QAAQ,GAAE,MAAiC,GAC1C,oBAAoB;IA4CvB,OAAO,CAAC,SAAS;CAUlB"}
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
*/
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
32
|
exports.SpecLinkResolver = void 0;
|
|
33
|
+
exports.sourceSpecIds = sourceSpecIds;
|
|
33
34
|
/** Pattern: `// @implements REQ-X` or `# @implements REQ-X` etc. */
|
|
34
35
|
const CODE_COMMENT_IMPL = /@implements\s+([A-Za-z][A-Za-z0-9_.-]*)/g;
|
|
35
36
|
/**
|
|
@@ -38,6 +39,31 @@ const CODE_COMMENT_IMPL = /@implements\s+([A-Za-z][A-Za-z0-9_.-]*)/g;
|
|
|
38
39
|
* `orphaned` won't become `implemented` again until the agent re-asserts.
|
|
39
40
|
*/
|
|
40
41
|
const STICKY_STATES = new Set(['verified', 'broken']);
|
|
42
|
+
/** Default cap on how deep the parent / depends_on chain is followed. */
|
|
43
|
+
const INHERITED_LINK_MAX_DEPTH = 5;
|
|
44
|
+
/**
|
|
45
|
+
* The spec ids a spec links to at the spec tier: its `parentId` plus every
|
|
46
|
+
* entry of `metadata.depends_on` (REQ-DOMAIN-002). `depends_on` may be a
|
|
47
|
+
* single string or a string[]; both normalize to a deduped list of non-empty
|
|
48
|
+
* ids.
|
|
49
|
+
*/
|
|
50
|
+
function sourceSpecIds(spec) {
|
|
51
|
+
const out = [];
|
|
52
|
+
if (typeof spec.parentId === 'string' && spec.parentId.length > 0) {
|
|
53
|
+
out.push(spec.parentId);
|
|
54
|
+
}
|
|
55
|
+
const dep = spec.metadata?.depends_on;
|
|
56
|
+
if (Array.isArray(dep)) {
|
|
57
|
+
for (const d of dep)
|
|
58
|
+
if (typeof d === 'string' && d.length > 0)
|
|
59
|
+
out.push(d);
|
|
60
|
+
}
|
|
61
|
+
else if (typeof dep === 'string' && dep.length > 0) {
|
|
62
|
+
out.push(dep);
|
|
63
|
+
}
|
|
64
|
+
// Dedup while preserving order.
|
|
65
|
+
return [...new Set(out)];
|
|
66
|
+
}
|
|
41
67
|
class SpecLinkResolver {
|
|
42
68
|
queries;
|
|
43
69
|
specQueries;
|
|
@@ -242,6 +268,58 @@ class SpecLinkResolver {
|
|
|
242
268
|
return count;
|
|
243
269
|
}
|
|
244
270
|
// ===========================================================================
|
|
271
|
+
// Transitive (spec-tier) inheritance — REQ-DOMAIN-002
|
|
272
|
+
// ===========================================================================
|
|
273
|
+
/**
|
|
274
|
+
* Compute the code links a spec inherits transitively through its
|
|
275
|
+
* spec→spec edges (`parentId` + `metadata.depends_on`). A `domain` fact
|
|
276
|
+
* carries NO direct domain→code rows; its code association and drift state
|
|
277
|
+
* are derived here by following those spec edges to requirement specs and
|
|
278
|
+
* reusing *their* `spec_links` — whose `resolved_node_id`/`state` the normal
|
|
279
|
+
* `resolveAll`/`resolveLinksForFiles` pass already refreshed this sync. So
|
|
280
|
+
* "re-resolved after each sync" holds with no stored domain rows, and drift
|
|
281
|
+
* surfaces automatically through each inherited link's live `state`.
|
|
282
|
+
*
|
|
283
|
+
* Read-time derivation only — writes nothing. Cycle-guarded via a visited
|
|
284
|
+
* `Set`, depth-capped (default {@link INHERITED_LINK_MAX_DEPTH}). A declared
|
|
285
|
+
* dependency that doesn't resolve to an indexed spec is returned in `gaps`
|
|
286
|
+
* (an unlinked/proposed fact, never an error — REQ-DOMAIN-002.A3).
|
|
287
|
+
*/
|
|
288
|
+
getInheritedLinks(spec, maxDepth = INHERITED_LINK_MAX_DEPTH) {
|
|
289
|
+
const links = [];
|
|
290
|
+
const gaps = [];
|
|
291
|
+
const visitedSpecIds = [];
|
|
292
|
+
const visited = new Set([spec.id]);
|
|
293
|
+
const seenLinkIds = new Set();
|
|
294
|
+
// BFS over the parent / depends_on chain.
|
|
295
|
+
const queue = sourceSpecIds(spec).map((id) => ({ id, depth: 1 }));
|
|
296
|
+
while (queue.length > 0) {
|
|
297
|
+
const { id, depth } = queue.shift();
|
|
298
|
+
if (visited.has(id))
|
|
299
|
+
continue;
|
|
300
|
+
visited.add(id);
|
|
301
|
+
const src = this.specQueries.getSpecById(id);
|
|
302
|
+
if (!src) {
|
|
303
|
+
gaps.push(id);
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
visitedSpecIds.push(id);
|
|
307
|
+
for (const link of this.specQueries.getLinksBySpec(id)) {
|
|
308
|
+
if (seenLinkIds.has(link.id))
|
|
309
|
+
continue;
|
|
310
|
+
seenLinkIds.add(link.id);
|
|
311
|
+
links.push({ viaSpecId: id, link });
|
|
312
|
+
}
|
|
313
|
+
if (depth < maxDepth) {
|
|
314
|
+
for (const nextId of sourceSpecIds(src)) {
|
|
315
|
+
if (!visited.has(nextId))
|
|
316
|
+
queue.push({ id: nextId, depth: depth + 1 });
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return { links, gaps, visitedSpecIds };
|
|
321
|
+
}
|
|
322
|
+
// ===========================================================================
|
|
245
323
|
// Helpers
|
|
246
324
|
// ===========================================================================
|
|
247
325
|
makeStats() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-link-resolver.js","sourceRoot":"","sources":["../../src/resolution/spec-link-resolver.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;;
|
|
1
|
+
{"version":3,"file":"spec-link-resolver.js","sourceRoot":"","sources":["../../src/resolution/spec-link-resolver.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;;AAyEH,sCAaC;AAxED,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,0CAA0C,CAAC;AAErE;;;;GAIG;AACH,MAAM,aAAa,GAAuB,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AA0C1E,yEAAyE;AACzE,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAEnC;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,IAAU;IACtC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,GAAG;YAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;SAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,gCAAgC;IAChC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,MAAa,gBAAgB;IACnB,OAAO,CAAe;IACtB,WAAW,CAAc;IACzB,IAAI,CAA0B;IAEtC,YACE,OAAqB,EACrB,WAAwB,EACxB,OAAgC,EAAE;QAElC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,YAAsB;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,QAAgB,EAAE,KAA4B;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,IAAc,EAAE,KAA4B;QACjE,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CACjC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,cAAc,CACpB,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,gEAAgE;YAChE,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC9D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChE,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBACrE,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,CAAC;YACD,OAAO;QACT,CAAC;QAED,gDAAgD;QAChD,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACjE,KAAK,CAAC,UAAU,EAAE,CAAC;QAEnB,qEAAqE;QACrE,sEAAsE;QACtE,oEAAoE;QACpE,2BAA2B;QAC3B,IACE,IAAI,CAAC,aAAa,KAAK,SAAS;YAChC,IAAI,CAAC,aAAa,KAAK,EAAE;YACzB,IAAI,CAAC,SAAS,KAAK,SAAS;YAC5B,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,aAAa;YACrC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAC9B,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACtE,KAAK,CAAC,WAAW,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACtB,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CACX,kCAAkC,IAAI,CAAC,mBAAmB,aAAa,IAAI,CAAC,MAAM,EAAE,CACrF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,iBAAiB,CACvB,QAAgB,EAChB,aAAqB,EACrB,IAAc;QAEd,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAC;QAC5E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEzC,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACnE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvC,iDAAiD;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACvD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,0CAA0C;QAC1C,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC7B,CAAC;IAED,8EAA8E;IAC9E,8DAA8D;IAC9D,8EAA8E;IAE9E;;;OAGG;IACH,0BAA0B,CACxB,UAA+B,EAC/B,gBAAmC,EACnC,KAA6B;QAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI;gBAAE,SAAS,CAAC,0EAA0E;YAE/F,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CACzC,CAAC,CAAC,cAAc,EAChB,CAAC,CAAC,mBAAmB,EACrB,CAAC,CAAC,cAAc,CACjB,CAAC;YAEF,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;gBAC9B,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,cAAc,EAAE,CAAC,CAAC,cAAc;gBAChC,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;gBAC1C,cAAc,EAAE,CAAC,CAAC,cAAc;gBAChC,cAAc,EAAE,YAAY,EAAE,EAAE;gBAChC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;gBAChD,SAAS,EAAE,IAAI;gBACf,cAAc,EAAE,IAAI,CAAC,WAAW;gBAChC,aAAa,EAAE,YAAY,EAAE,SAAS;gBACtC,UAAU,EAAE,kBAAwC;gBACpD,UAAU,EAAE,GAAG;gBACf,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;YACH,IAAI,KAAK;gBAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,qBAAqB,CACnB,YAAsB,EACtB,KAA6B;QAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CACrD,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAC;gBACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,wCAAwC;oBACxC,iBAAiB,CAAC,SAAS,GAAG,CAAC,CAAC;oBAChC,IAAI,KAA6B,CAAC;oBAClC,OAAO,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACzD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACxB,IAAI,CAAC,MAAM;4BAAE,SAAS;wBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBAClD,IAAI,CAAC,IAAI;4BAAE,SAAS;wBACpB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;4BAC9B,MAAM;4BACN,cAAc,EAAE,IAAI,CAAC,QAAQ;4BAC7B,mBAAmB,EAAE,IAAI,CAAC,aAAa;4BACvC,cAAc,EAAE,IAAI,CAAC,IAAI;4BACzB,cAAc,EAAE,IAAI,CAAC,EAAE;4BACvB,IAAI,EAAE,YAAY;4BAClB,KAAK,EAAE,aAAa;4BACpB,SAAS,EAAE,IAAI;4BACf,cAAc,EAAE,IAAI,CAAC,WAAW;4BAChC,aAAa,EAAE,IAAI,CAAC,SAAS;4BAC7B,UAAU,EAAE,cAAoC;4BAChD,UAAU,EAAE,GAAG;4BACf,SAAS,EAAE,GAAG;4BACd,SAAS,EAAE,GAAG;yBACf,CAAC,CAAC;wBACH,IAAI,KAAK;4BAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,sDAAsD;IACtD,8EAA8E;IAE9E;;;;;;;OAOG;IACH,eAAe,CAAC,MAAc,EAAE,WAAmB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC5C,IAAI,IAAI,CAAC,cAAc,KAAK,WAAW;gBAAE,SAAS;YAClD,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACtE,KAAK,EAAE,CAAC;QACV,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8EAA8E;IAC9E,sDAAsD;IACtD,8EAA8E;IAE9E;;;;;;;;;;;;;;OAcG;IACH,iBAAiB,CACf,IAAU,EACV,WAAmB,wBAAwB;QAE3C,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEtC,0CAA0C;QAC1C,MAAM,KAAK,GAAyC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CACzE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAC3B,CAAC;QAEF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YACrC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC9B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACd,SAAS;YACX,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAExB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACvC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC;YAED,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACrB,KAAK,MAAM,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;wBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IACzC,CAAC;IAED,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAEtE,SAAS;QACf,OAAO;YACL,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,iBAAiB,EAAE,CAAC;YACpB,mBAAmB,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;CACF;AAhUD,4CAgUC"}
|
|
Binary file
|
|
@@ -18,6 +18,10 @@ import path from 'node:path';
|
|
|
18
18
|
import { enumerate } from './projects.js';
|
|
19
19
|
const POLL_MS = 3000;
|
|
20
20
|
const KEEPALIVE_MS = 15000;
|
|
21
|
+
// Reflection sweep cadence — high-severity-only, roughly daily (REQ-REFLECT-006).
|
|
22
|
+
// The persisted reflect_proposals store dedupes across sweeps/connections, so a
|
|
23
|
+
// proposal is only ever notified once regardless of how often the sweep runs.
|
|
24
|
+
const SWEEP_MS = 24 * 60 * 60 * 1000;
|
|
21
25
|
export async function registerEventsRoutes(app) {
|
|
22
26
|
const claudeRoot = path.join(os.homedir(), '.claude', 'projects');
|
|
23
27
|
app.get('/api/events', async (req, reply) => {
|
|
@@ -28,6 +32,7 @@ export async function registerEventsRoutes(app) {
|
|
|
28
32
|
// Per-connection seen-state — emit only NEW transitions.
|
|
29
33
|
const lastStatus = new Map(); // `${slug}:${runId}` -> status
|
|
30
34
|
const seenDrift = new Set(); // `${slug}:${linkId}`
|
|
35
|
+
const lastSweep = new Map(); // slug -> last reflection sweep ms
|
|
31
36
|
let primed = false; // first pass seeds state silently (no burst on connect)
|
|
32
37
|
let closed = false;
|
|
33
38
|
const send = (ev) => {
|
|
@@ -94,6 +99,21 @@ export async function registerEventsRoutes(app) {
|
|
|
94
99
|
continue;
|
|
95
100
|
send({ kind: 'drift', project: p.slug, projectPath: p.path, id: String(l.id), title: 'Drift detected', detail: `${l.specId} → ${l.targetQualifiedName}` });
|
|
96
101
|
}
|
|
102
|
+
// Reflection sweep — throttled to ~daily. Notifies only on NEW
|
|
103
|
+
// high-severity proposals; the persisted store dedupes, so this is NOT
|
|
104
|
+
// gated on `primed` (a brand-new finding should alert even on connect,
|
|
105
|
+
// while an already-seen one never re-fires regardless of connection).
|
|
106
|
+
const now = Date.now();
|
|
107
|
+
if (now - (lastSweep.get(p.slug) ?? 0) >= SWEEP_MS) {
|
|
108
|
+
lastSweep.set(p.slug, now);
|
|
109
|
+
try {
|
|
110
|
+
const res = cg.reflectSweep();
|
|
111
|
+
for (const prop of res.notify) {
|
|
112
|
+
send({ kind: 'reflect', project: p.slug, projectPath: p.path, id: prop.contentHash, title: prop.title, detail: prop.evidence.detail });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch { /* ignore — a sweep failure must not break the stream */ }
|
|
116
|
+
}
|
|
97
117
|
}
|
|
98
118
|
primed = true;
|
|
99
119
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GET /api/maintainability (REQ-MAINT-003).
|
|
3
|
+
*
|
|
4
|
+
* Returns the active project's graph-derived maintainability report — coupling,
|
|
5
|
+
* size hotspots, dependency cycles, dead-code candidates. Project-scoped (uses
|
|
6
|
+
* the active instance, like the graph/spec routes), driven through the instance
|
|
7
|
+
* method `getMaintainability()` so the server never runtime-imports the package.
|
|
8
|
+
*/
|
|
9
|
+
export async function registerMaintainabilityRoutes(app) {
|
|
10
|
+
app.get('/api/maintainability', async (req, reply) => {
|
|
11
|
+
const cg = await app.activeCg(req);
|
|
12
|
+
if (!cg) {
|
|
13
|
+
reply.code(409).send({ error: 'no project selected', code: 'no_project' });
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
return cg.getMaintainability();
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reflection engine HTTP surface (REFLECT-DOC).
|
|
3
|
+
*
|
|
4
|
+
* GET /api/reflect — list persisted proposals (?state=open|applied|undone|dismissed)
|
|
5
|
+
* POST /api/reflect/analyze — run a reflection pass, persist, return open proposals
|
|
6
|
+
* GET /api/reflect/:hash/preview — non-mutating diff of the change a proposal would make
|
|
7
|
+
* POST /api/reflect/:hash/apply — preview-confirmed write (idempotent + reversible)
|
|
8
|
+
* POST /api/reflect/:hash/undo — reverse a previously applied proposal
|
|
9
|
+
* POST /api/reflect/:hash/dismiss — hide a proposal from future sweeps
|
|
10
|
+
*
|
|
11
|
+
* Like the tips engine, reflection reads the cross-project claude_* tables that
|
|
12
|
+
* live in the boot-time "primary" project's DB, so every handler resolves the
|
|
13
|
+
* primary instance and drives it through its `reflect*` methods. These are
|
|
14
|
+
* instance methods on the dynamically-loaded SpecShip — NOT a runtime package
|
|
15
|
+
* import — so the route never trips the stale-build hazard.
|
|
16
|
+
*/
|
|
17
|
+
export async function registerReflectRoutes(app) {
|
|
18
|
+
function requirePrimary(reply) {
|
|
19
|
+
if (!app.primaryCg) {
|
|
20
|
+
reply.code(409).send({ error: 'reflection unavailable: no primary project configured', code: 'no_primary' });
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return app.primaryCg;
|
|
24
|
+
}
|
|
25
|
+
// List persisted proposals, optionally filtered by state.
|
|
26
|
+
app.get('/api/reflect', async (req, reply) => {
|
|
27
|
+
const cg = requirePrimary(reply);
|
|
28
|
+
if (!cg)
|
|
29
|
+
return;
|
|
30
|
+
const state = req.query.state;
|
|
31
|
+
return { proposals: cg.reflectList(state) };
|
|
32
|
+
});
|
|
33
|
+
// Run a reflection pass: mine + persist + return the current open proposals.
|
|
34
|
+
app.post('/api/reflect/analyze', async (_req, reply) => {
|
|
35
|
+
const cg = requirePrimary(reply);
|
|
36
|
+
if (!cg)
|
|
37
|
+
return;
|
|
38
|
+
const result = cg.reflectAnalyze();
|
|
39
|
+
return { open: result.open, empty: result.empty };
|
|
40
|
+
});
|
|
41
|
+
// Non-mutating preview of a proposal's change (REQ-REFLECT-003).
|
|
42
|
+
app.get('/api/reflect/:hash/preview', async (req, reply) => {
|
|
43
|
+
const cg = requirePrimary(reply);
|
|
44
|
+
if (!cg)
|
|
45
|
+
return;
|
|
46
|
+
const preview = cg.reflectPreview(req.params.hash);
|
|
47
|
+
if (!preview) {
|
|
48
|
+
reply.code(404).send({ error: 'proposal not found', code: 'not_found' });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
return preview;
|
|
52
|
+
});
|
|
53
|
+
// Apply a proposal — preview-confirmed write (REQ-REFLECT-004).
|
|
54
|
+
app.post('/api/reflect/:hash/apply', async (req, reply) => {
|
|
55
|
+
const cg = requirePrimary(reply);
|
|
56
|
+
if (!cg)
|
|
57
|
+
return;
|
|
58
|
+
const outcome = cg.reflectApply(req.params.hash);
|
|
59
|
+
if (outcome === null) {
|
|
60
|
+
reply.code(404).send({ error: 'proposal not found', code: 'not_found' });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (outcome === 'conflict') {
|
|
64
|
+
reply.code(409).send({ error: 'a non-SpecShip file already occupies the target path', code: 'conflict' });
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
return { outcome, proposal: cg.reflectGet(req.params.hash) };
|
|
68
|
+
});
|
|
69
|
+
// Undo a previously applied proposal (REQ-REFLECT-004.A3).
|
|
70
|
+
app.post('/api/reflect/:hash/undo', async (req, reply) => {
|
|
71
|
+
const cg = requirePrimary(reply);
|
|
72
|
+
if (!cg)
|
|
73
|
+
return;
|
|
74
|
+
const outcome = cg.reflectUndo(req.params.hash);
|
|
75
|
+
if (outcome === null) {
|
|
76
|
+
reply.code(404).send({ error: 'proposal not found', code: 'not_found' });
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
return { outcome, proposal: cg.reflectGet(req.params.hash) };
|
|
80
|
+
});
|
|
81
|
+
// Dismiss a proposal so it does not resurface on later sweeps (REQ-REFLECT-007.A2).
|
|
82
|
+
app.post('/api/reflect/:hash/dismiss', async (req, reply) => {
|
|
83
|
+
const cg = requirePrimary(reply);
|
|
84
|
+
if (!cg)
|
|
85
|
+
return;
|
|
86
|
+
const ok = cg.reflectDismiss(req.params.hash);
|
|
87
|
+
if (!ok) {
|
|
88
|
+
reply.code(404).send({ error: 'proposal not found', code: 'not_found' });
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
return { ok: true, proposal: cg.reflectGet(req.params.hash) };
|
|
92
|
+
});
|
|
93
|
+
}
|
package/dist/server/server.js
CHANGED
|
@@ -28,6 +28,9 @@ import { registerStatusRoutes } from './routes/status.js';
|
|
|
28
28
|
import { registerMemoryRoutes } from './routes/memory.js';
|
|
29
29
|
import { registerProjectsRoutes } from './routes/projects.js';
|
|
30
30
|
import { registerEventsRoutes } from './routes/events.js';
|
|
31
|
+
import { registerReflectRoutes } from './routes/reflect.js';
|
|
32
|
+
import { registerMaintainabilityRoutes } from './routes/maintainability.js';
|
|
33
|
+
import { registerDomainRoutes } from './routes/domain.js';
|
|
31
34
|
/**
|
|
32
35
|
* Lazy-import the specship core. Two delivery shapes are supported:
|
|
33
36
|
*
|
|
@@ -166,6 +169,9 @@ export async function createServer(options) {
|
|
|
166
169
|
await registerMemoryRoutes(app);
|
|
167
170
|
await registerProjectsRoutes(app);
|
|
168
171
|
await registerEventsRoutes(app);
|
|
172
|
+
await registerReflectRoutes(app);
|
|
173
|
+
await registerMaintainabilityRoutes(app);
|
|
174
|
+
await registerDomainRoutes(app);
|
|
169
175
|
// Optional: serve the built Angular UI from `webDir` and fall back to
|
|
170
176
|
// index.html for client-side routes. Must register AFTER the /api/*
|
|
171
177
|
// routes so they take precedence over the SPA wildcard.
|
package/dist/types.d.ts
CHANGED
|
@@ -383,8 +383,10 @@ export interface FindRelevantContextOptions {
|
|
|
383
383
|
* - `acceptance`: an acceptance criterion under a requirement
|
|
384
384
|
* - `contract`: an API/data contract (OpenAPI, AsyncAPI, etc.)
|
|
385
385
|
* - `data_schema`: a data shape definition
|
|
386
|
+
* - `domain`: a human-confirmed domain fact (term / rule / decision /
|
|
387
|
+
* constraint), authored under `specs/domain/` (REQ-DOMAIN-001)
|
|
386
388
|
*/
|
|
387
|
-
export declare const SPEC_KINDS: readonly ["document", "requirement", "acceptance", "contract", "data_schema", "brief"];
|
|
389
|
+
export declare const SPEC_KINDS: readonly ["document", "requirement", "acceptance", "contract", "data_schema", "brief", "domain"];
|
|
388
390
|
export type SpecKind = (typeof SPEC_KINDS)[number];
|
|
389
391
|
/**
|
|
390
392
|
* Spec source format. Each format has its own extractor under
|
|
@@ -540,7 +542,7 @@ export type WorkflowNodeState = 'pending' | 'running' | 'completed' | 'failed' |
|
|
|
540
542
|
/**
|
|
541
543
|
* Event types emitted by the workflow executor.
|
|
542
544
|
*/
|
|
543
|
-
export type WorkflowEventType = 'step_started' | 'step_completed' | 'step_failed' | 'step_skipped' | 'tool_called' | 'artifact_created' | 'approval_requested' | 'approval_granted' | 'approval_rejected' | 'run_started' | 'run_completed' | 'run_failed' | 'run_cancelled' | 'run_paused';
|
|
545
|
+
export type WorkflowEventType = 'step_started' | 'step_completed' | 'step_failed' | 'step_skipped' | 'tool_called' | 'agent_message' | 'artifact_created' | 'approval_requested' | 'approval_granted' | 'approval_rejected' | 'run_started' | 'run_completed' | 'run_failed' | 'run_cancelled' | 'run_paused';
|
|
544
546
|
/**
|
|
545
547
|
* A workflow run record (one invocation of a workflow definition).
|
|
546
548
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -92,6 +92,8 @@ exports.LANGUAGES = [
|
|
|
92
92
|
* - `acceptance`: an acceptance criterion under a requirement
|
|
93
93
|
* - `contract`: an API/data contract (OpenAPI, AsyncAPI, etc.)
|
|
94
94
|
* - `data_schema`: a data shape definition
|
|
95
|
+
* - `domain`: a human-confirmed domain fact (term / rule / decision /
|
|
96
|
+
* constraint), authored under `specs/domain/` (REQ-DOMAIN-001)
|
|
95
97
|
*/
|
|
96
98
|
exports.SPEC_KINDS = [
|
|
97
99
|
'document',
|
|
@@ -103,6 +105,10 @@ exports.SPEC_KINDS = [
|
|
|
103
105
|
// spec lifecycle, indexed as a first-class entity so the idea → spec →
|
|
104
106
|
// implemented funnel is queryable (REQ-FUNNEL-001).
|
|
105
107
|
'brief',
|
|
108
|
+
// A domain fact (`specs/domain/*.md`) — the project's ubiquitous language,
|
|
109
|
+
// rules/invariants, decisions, and constraints. Its `type` (term / rule /
|
|
110
|
+
// decision / constraint) lives in the spec's `metadata` (REQ-DOMAIN-001).
|
|
111
|
+
'domain',
|
|
106
112
|
];
|
|
107
113
|
/**
|
|
108
114
|
* Spec source format. Each format has its own extractor under
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;;GAMG;AACU,QAAA,UAAU,GAAG;IACxB,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,WAAW;IACX,OAAO;IACP,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,UAAU;IACV,UAAU;IACV,MAAM;IACN,aAAa;IACb,YAAY;IACZ,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,WAAW;IACX,2EAA2E;IAC3E,qEAAqE;IACrE,yEAAyE;IACzE,yBAAyB;IACzB,MAAM;CACE,CAAC;AAuBX;;;GAGG;AACU,QAAA,SAAS,GAAG;IACvB,YAAY;IACZ,YAAY;IACZ,KAAK;IACL,KAAK;IACL,QAAQ;IACR,IAAI;IACJ,MAAM;IACN,MAAM;IACN,GAAG;IACH,KAAK;IACL,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,YAAY;IACZ,SAAS;CACD,CAAC;AA0eX,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;;GAMG;AACU,QAAA,UAAU,GAAG;IACxB,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,WAAW;IACX,OAAO;IACP,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,UAAU;IACV,UAAU;IACV,MAAM;IACN,aAAa;IACb,YAAY;IACZ,WAAW;IACX,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,WAAW;IACX,2EAA2E;IAC3E,qEAAqE;IACrE,yEAAyE;IACzE,yBAAyB;IACzB,MAAM;CACE,CAAC;AAuBX;;;GAGG;AACU,QAAA,SAAS,GAAG;IACvB,YAAY;IACZ,YAAY;IACZ,KAAK;IACL,KAAK;IACL,QAAQ;IACR,IAAI;IACJ,MAAM;IACN,MAAM;IACN,GAAG;IACH,KAAK;IACL,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,YAAY;IACZ,SAAS;CACD,CAAC;AA0eX,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF;;;;;;;;;;;GAWG;AACU,QAAA,UAAU,GAAG;IACxB,UAAU;IACV,aAAa;IACb,YAAY;IACZ,UAAU;IACV,aAAa;IACb,yEAAyE;IACzE,uEAAuE;IACvE,oDAAoD;IACpD,OAAO;IACP,2EAA2E;IAC3E,0EAA0E;IAC1E,0EAA0E;IAC1E,QAAQ;CACA,CAAC;AAIX;;;GAGG;AACU,QAAA,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as V}from"./chunk-EMGMOEVR.js";import{a as A}from"./chunk-X2HTISHL.js";import{a as N}from"./chunk-UYC52MBC.js";import{b as B}from"./chunk-HZA6NEAB.js";import{a as $}from"./chunk-WDU3WICG.js";import{c as k}from"./chunk-SHPTC4RL.js";import{c as z}from"./chunk-GR72OOCN.js";import{a as I}from"./chunk-7RNS77UP.js";import{a as R}from"./chunk-E44X4RH2.js";import{Aa as m,Ea as P,Fa as M,Ga as E,I as y,Ia as S,Ka as s,M as h,N as w,Va as r,Wa as x,Xa as v,Ya as b,bb as O,ea as i,ka as T,lb as _,ra as d,sa as p,ua as F,va as f,wa as u,xa as l,ya as o,za as a,zb as j}from"./chunk-PDN6QYGJ.js";import{a as C,b as D}from"./chunk-Q7L6LLAK.js";var q=()=>[0,1,2],G=(e,t)=>t.type,J=(e,t)=>t.id,K=(e,t)=>t.specId+t.symbol;function L(e,t){e&1&&m(0,"app-pick-project-empty",0)}function U(e,t){e&1&&m(0,"div",7)}function W(e,t){e&1&&f(0,U,1,0,"div",7,F),e&2&&u(O(0,q))}function X(e,t){e&1&&(o(0,"div",5),r(1,"No domain data \u2014 run "),o(2,"code"),r(3,"specship index"),a(),r(4," first."),a())}function Y(e,t){e&1&&(o(0,"app-empty",6)(1,"button",8),m(2,"app-icon",9),r(3," Capture knowledge "),a()()),e&2&&(i(2),l("size",12))}function Z(e,t){if(e&1&&(o(0,"div",16),r(1),a()),e&2){let n=s().$implicit;i(),x(n.body)}}function ee(e,t){if(e&1&&(o(0,"div",24),r(1),a()),e&2){let n=t.$implicit;i(),b("governs ",n.specId," \u2192 ",n.symbol)}}function te(e,t){if(e&1&&(o(0,"div",18),f(1,ee,2,2,"div",24,K),a()),e&2){let n=s().$implicit;i(),u(n.governs)}}function ne(e,t){e&1&&m(0,"app-state-pill",20),e&2&&l("state",t)}function ie(e,t){e&1&&(o(0,"app-pill",4),r(1,"No linked code yet"),a()),e&2&&l("color","var(--text-muted)")("bg","var(--bg-elevated)")}function oe(e,t){if(e&1){let n=E();o(0,"button",25),S("click",function(){h(n);let g=s(5);return w(g.review())}),m(1,"app-icon",26),r(2," Review "),a()}e&2&&(i(),l("size",12))}function ae(e,t){if(e&1&&(o(0,"div",13)(1,"div",14)(2,"div",15),r(3),a(),d(4,Z,2,1,"div",16),o(5,"div",17),r(6),a(),d(7,te,3,0,"div",18),a(),o(8,"div",19),d(9,ne,1,1,"app-state-pill",20)(10,ie,2,2,"app-pill",4),o(11,"div",21),d(12,oe,3,1,"button",22),o(13,"button",23),m(14,"app-icon",9),r(15," Capture "),a()()()()),e&2){let n,c=t.$implicit,g=s(4);i(3),x(c.title),i(),p(c.body?4:-1),i(2),x(c.id),i(),p(c.governs.length?7:-1),i(2),p((n=g.stateOf(c))?9:c.state==="none"&&c.governs.length===0?10:-1,n),i(3),p(g.needsReview(c)?12:-1),i(2),l("size",12)}}function re(e,t){if(e&1&&(o(0,"section",10)(1,"div",11),r(2),o(3,"span",12),r(4),a()(),f(5,ae,16,7,"div",13,J),a()),e&2){let n=t.$implicit;i(2),v("",n.label," "),i(2),x(n.facts.length),i(),u(n.facts)}}function ce(e,t){if(e&1&&f(0,re,7,2,"section",10,G),e&2){let n=s(2);u(n.sections())}}function le(e,t){if(e&1&&(o(0,"div",1)(1,"app-page-head",2),P(2,3),o(3,"app-pill",4),r(4),a(),o(5,"app-pill",4),r(6),a(),M(),a(),d(7,W,2,1)(8,X,5,0,"div",5)(9,Y,4,1,"app-empty",6)(10,ce,2,0),a()),e&2){let n=s();i(3),l("color","var(--success)")("bg","var(--success-soft)"),i(),v("",n.coverage().documented," documented"),i(),l("color","var(--warn)")("bg","var(--warn-soft)"),i(),b("",n.coverage().gaps," gap",n.coverage().gaps===1?"":"s"),i(),p(n.resource.state().loading?7:n.data()?n.isEmpty()?9:10:8)}}var H=[{type:"term",label:"Terms"},{type:"rule",label:"Rules"},{type:"decision",label:"Decisions"},{type:"constraint",label:"Constraints"},{type:"other",label:"Other"}],Q=class e{api=y(R);projects=y(I);router=y(k);resource=z(this.api,()=>`/api/domain${this.projects.projectQuery()}`);data=_(()=>this.resource.state().data);coverage=_(()=>this.data()?.coverage??{documented:0,gaps:0});sections=_(()=>{let t=this.data();return t?H.map(n=>D(C({},n),{facts:t.factsByType[n.type]??[]})).filter(n=>n.facts.length>0):[]});total=_(()=>{let t=this.data();return t?H.reduce((n,c)=>n+(t.factsByType[c.type]?.length??0),0):0});isEmpty=_(()=>{let t=this.resource.state();return!t.loading&&!t.noProject&&t.data!=null&&this.total()===0});stateOf(t){return t.state==="none"?null:t.state}needsReview(t){return t.state==="drifted"}review(){this.router.navigate(["/drift"])}static \u0275fac=function(n){return new(n||e)};static \u0275cmp=T({type:e,selectors:[["app-domain"]],decls:2,vars:1,consts:[["surface","The domain layer"],[1,"page","scroll-y"],["icon","book","title","Domain","sub","Human-confirmed knowledge \u2014 terms, rules, decisions, constraints"],["actions",""],[3,"color","bg"],[1,"empty"],["icon","book","title","No domain knowledge captured yet","body","Document the terms, rules, decisions, and constraints that the code can't tell you. Run /ss-domain to capture the first fact."],[1,"skel","card-skel"],["action","","type","button","title","Run /ss-domain to capture a domain fact",1,"btn","btn-primary","btn-sm"],["name","plus",3,"size"],[1,"sig","card"],[1,"sig-head"],[1,"n"],[1,"fact"],[1,"fact-main"],[1,"fact-title"],[1,"fact-body"],[1,"fact-id","mono"],[1,"fact-governs"],[1,"fact-side"],[3,"state"],[1,"fact-actions","row","gap-6"],["type","button",1,"btn","btn-secondary","btn-sm"],["type","button","title","Run /ss-domain to refine this fact",1,"btn","btn-secondary","btn-sm"],[1,"fact-governs-row","mono"],["type","button",1,"btn","btn-secondary","btn-sm",3,"click"],["name","drift",3,"size"]],template:function(n,c){n&1&&d(0,L,1,0,"app-pick-project-empty",0)(1,le,11,8,"div",1),n&2&&p(c.resource.state().noProject?0:1)},dependencies:[N,A,B,V,j,$],styles:[".page[_ngcontent-%COMP%]{padding:20px 24px 48px}.empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:64px 24px;color:var(--text-muted)}.empty[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);font-size:.92em}.card-skel[_ngcontent-%COMP%]{height:120px;border-radius:12px;margin-bottom:12px}.sig[_ngcontent-%COMP%]{padding:0;margin-bottom:14px;overflow:hidden}.sig-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:12px 16px;font-size:13px;font-weight:600;border-bottom:1px solid var(--border, color-mix(in srgb, var(--text) 12%, transparent))}.sig-head[_ngcontent-%COMP%] .n[_ngcontent-%COMP%]{font-size:11px;font-weight:600;color:var(--text-muted);background:var(--bg-elevated, color-mix(in srgb, var(--text) 7%, transparent));border-radius:999px;padding:1px 8px}.fact[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:16px;padding:12px 16px;border-top:1px solid var(--border-subtle, color-mix(in srgb, var(--text) 6%, transparent))}.fact[_ngcontent-%COMP%]:first-of-type{border-top:none}.fact-main[_ngcontent-%COMP%]{min-width:0;flex:1}.fact-title[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--text)}.fact-body[_ngcontent-%COMP%]{margin-top:3px;font-size:12.5px;line-height:1.5;color:var(--text-secondary, var(--text-muted))}.fact-id[_ngcontent-%COMP%]{margin-top:5px;font-size:11px;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fact-governs[_ngcontent-%COMP%]{margin-top:6px;display:flex;flex-direction:column;gap:2px}.fact-governs-row[_ngcontent-%COMP%]{font-size:11px;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fact-side[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-end;gap:8px;flex:0 0 auto}.fact-actions[_ngcontent-%COMP%]{flex-wrap:wrap;justify-content:flex-end}.mono[_ngcontent-%COMP%]{font-family:var(--font-mono, ui-monospace, monospace)}"],changeDetection:0})};export{Q as Domain};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as B}from"./chunk-HZA6NEAB.js";import{a as A,c as j}from"./chunk-SHPTC4RL.js";import{a as W}from"./chunk-7RNS77UP.js";import{a as V}from"./chunk-E44X4RH2.js";import{Aa as p,Ga as P,I as w,Ia as b,Ka as c,M as y,N as C,O,P as I,R as z,Ta as R,Ua as E,Va as l,W as _,Wa as x,Xa as T,ea as o,ka as $,lb as h,qa as D,ra as u,sa as m,va as M,wa as S,xa as g,ya as s,za as a,zb as F}from"./chunk-PDN6QYGJ.js";import"./chunk-Q7L6LLAK.js";var H=(i,t)=>t.from+t.to,N=(i,t)=>t.id;function q(i,t){if(i&1){let e=P();s(0,"button",24),b("click",function(){y(e);let r=c(2);return C(r.cancel())}),p(1,"app-icon",25),l(2," Cancel "),a()}if(i&2){let e=c(2);g("disabled",e.actionPending()!==null),o(),g("size",12)}}function Q(i,t){if(i&1&&(s(0,"span",17),l(1),a(),s(2,"span",18),l(3),a(),p(4,"app-state-pill",19)(5,"span",20),s(6,"span",21),p(7,"app-icon",22),l(8),a(),u(9,q,3,2,"button",23)),i&2){let e=t,n=c();o(),x(e.workflowName),o(2),x(e.id.slice(0,8)),o(),g("state",e.status)("pulse",e.status==="running"),o(3),g("size",11),o(),T(" ",n.fmtDuration(e.startedAt,e.completedAt)," "),o(),m(e.status==="running"||e.status==="paused"?9:-1)}}function U(i,t){i&1&&(s(0,"span",26),l(1,"Loading\u2026"),a(),p(2,"span",20))}function J(i,t){if(i&1&&(s(0,"span",27),l(1),a(),p(2,"span",20)),i&2){let e=c();o(),x(e.error())}}function K(i,t){if(i&1&&(s(0,"div",4),l(1),a()),i&2){let e=c();o(),T("Action failed: ",e.actionError())}}function X(i,t){i&1&&(s(0,"div",4),l(1),a()),i&2&&(o(),x(t))}function Y(i,t){if(i&1){let e=P();s(0,"div",5)(1,"span",28),p(2,"app-icon",29),a(),s(3,"div",20)(4,"div",30),l(5,"Approval required \u2014 review diff before merge"),a(),s(6,"div",31),l(7," Review the artifacts carefully before approving. "),a()(),s(8,"button",32),b("click",function(){y(e);let r=c();return C(r.activeTab.set("artifacts"))}),l(9," Inspect artifacts "),a(),s(10,"button",24),b("click",function(){y(e);let r=c();return C(r.reject())}),l(11," Reject "),a(),s(12,"button",33),b("click",function(){y(e);let r=c();return C(r.approve())}),p(13,"app-icon",34),l(14," Approve "),a()()}if(i&2){let e=c();o(2),g("size",18),o(8),g("disabled",e.actionPending()!==null),o(2),g("disabled",e.actionPending()!==null),o(),g("size",13)}}function Z(i,t){if(i&1&&(O(),p(0,"path",35)),i&2){let e=c(),n=c(2);D("d",n.edgePath(e,t))("stroke",e.status==="completed"?"var(--success)":"rgba(150,160,180,0.4)")("opacity",e.status==="completed"?"0.7":"0.5")}}function ee(i,t){if(i&1&&u(0,Z,1,3,":svg:path",35),i&2){let e,n=c().$implicit,r=c();m((e=r.nodeMap()[n.to])?0:-1,e)}}function te(i,t){if(i&1&&u(0,ee,1,1),i&2){let e,n=t.$implicit,r=c();m((e=r.nodeMap()[n.from])?0:-1,e)}}function ne(i,t){i&1&&p(0,"app-icon",38),i&2&&g("size",11)}function ie(i,t){i&1&&p(0,"app-icon",39),i&2&&g("size",11)}function re(i,t){i&1&&p(0,"app-icon",40),i&2&&g("size",10)}function oe(i,t){if(i&1){let e=P();s(0,"div",36),b("click",function(){let r=y(e).$implicit,d=c();return C(d.selectedNode.set(r.id))}),s(1,"span",37),u(2,ne,1,1,"app-icon",38)(3,ie,1,1,"app-icon",39)(4,re,1,1,"app-icon",40),a(),s(5,"div",41)(6,"div",42),l(7),a(),s(8,"div",43),l(9),a()()()}if(i&2){let e=t.$implicit,n=c();R("left",e.x/n.DAG_W*100,"%")("top",e.y,"px")("border-color",n.nodeBorderColor(e))("box-shadow",n.nodeBoxShadow(e)),E("rd-node-running",e.status==="running")("rd-node-selected",n.selectedNode()===e.id)("rd-node-pending",e.status==="pending")("rd-node-skipped",e.status==="skipped"),D("aria-label",e.id),o(),R("background",n.nodeDotBg(e))("border",n.nodeDotBorder(e)),E("rd-dot-spin",e.status==="running"),o(),m(e.status==="completed"?2:e.status==="failed"?3:e.status==="paused"?4:-1),o(5),x(e.label),o(2),x(e.kind)}}function ae(i,t){i&1&&(s(0,"span",45),l(1,"live"),a())}function se(i,t){if(i&1){let e=P();s(0,"button",44),b("click",function(){let r=y(e).$implicit,d=c();return C(d.activeTab.set(r.id))}),l(1),u(2,ae,2,0,"span",45),a()}if(i&2){let e=t.$implicit,n=c();E("rd-tab-active",n.activeTab()===e.id),o(),T(" ",e.label," "),o(),m(e.id==="events"&&n.streamStatus()==="live"?2:-1)}}function de(i,t){if(i&1&&(s(0,"div",46)(1,"span",48),l(2),a(),s(3,"span",49),l(4),a(),s(5,"span",50),l(6),a(),s(7,"span",51),l(8),a()()),i&2){let e=t.$implicit,n=c(2);D("data-event-type",e.eventType),o(2),x(n.fmtTime(e.createdAt)),o(),R("color",n.evColor(e.eventType)),o(),x(e.eventType),o(2),x(n.stepIdOf(e)),o(2),x(n.eventDetail(e))}}function le(i,t){i&1&&(s(0,"div",47),p(1,"span",52),l(2," streaming\u2026 "),a())}function ce(i,t){if(i&1&&(s(0,"div",14),M(1,de,9,7,"div",46,N),u(3,le,3,0,"div",47),a()),i&2){let e=c();o(),S(e.events()),o(2),m(e.streamStatus()==="live"||e.streamStatus()==="connecting"?3:-1)}}function pe(i,t){i&1&&(s(0,"div",15)(1,"div",53),l(2," No artifacts available from the API. "),a()())}function ue(i,t){i&1&&(s(0,"div",16)(1,"div",54),l(2,"Cost data is not available from the API."),a()())}var me={step_started:"var(--info)",step_completed:"var(--success)",tool_called:"var(--node-code)",agent_message:"var(--node-spec)",artifact_created:"var(--node-route)",approval_requested:"var(--warn)",run_started:"var(--info)",run_completed:"var(--success)",run_failed:"var(--error)",run_cancelled:"var(--text-muted)",run_paused:"var(--warn)"},G=class i{api=w(V);projects=w(W);route=w(A);router=w(j);destroyRef=w(z);runId=_("");run=_(null);events=_([]);loading=_(!0);error=_(null);streamStatus=_("connecting");actionPending=_(null);actionError=_(null);closeStream=null;status=h(()=>this.run()?.status??null);isTerminal=h(()=>{let t=this.status();return t==="completed"||t==="failed"||t==="cancelled"});approvalPending=h(()=>[...this.events()].reverse().find(e=>e.eventType==="approval_requested"||e.eventType==="approval_granted"||e.eventType==="approval_rejected")?.eventType==="approval_requested");TABS=[{id:"events",label:"Events"},{id:"artifacts",label:"Artifacts"},{id:"cost",label:"Cost"}];activeTab=_("events");DAG_W=920;DAG_H=180;dagNodes=h(()=>{let t=this.run(),e=this.stepStatusMap(),n=t?.metadata?.nodes;if(n?.length){let f=this.layoutCols(n.map(v=>v.id));return n.map((v,k)=>{let L=f[k]??k;return{id:v.id,label:v.id,kind:v.kind??"agent",status:e[v.id]??"pending",x:L*160+20,y:72}})}let r=[...new Set(this.events().map(f=>f.data?.stepId??f.stepId??"").filter(Boolean))];if(!r.length)return[];let d=Math.min(160,(this.DAG_W-40)/Math.max(r.length,1));return r.map((f,v)=>({id:f,label:f,kind:this.events().find(k=>(k.data?.stepId??k.stepId)===f)?.stepKind??"step",status:e[f]??"pending",x:v*d+20,y:72}))});dagEdges=h(()=>{let e=this.run()?.metadata?.edges;if(e?.length)return e;let n=this.dagNodes();return n.slice(0,-1).map((r,d)=>({from:r.id,to:n[d+1].id}))});nodeMap=h(()=>{let t={};for(let e of this.dagNodes())t[e.id]=e;return t});selectedNode=_("");stepStatusMap=h(()=>{let t={};for(let e of this.events()){let n=e.data?.stepId??e.stepId??"";if(n)switch(e.eventType){case"step_started":t[n]="running";break;case"step_completed":t[n]="completed";break;case"step_failed":t[n]="failed";break;case"step_skipped":t[n]="skipped";break}}if(this.status()==="paused")for(let e of Object.keys(t))t[e]==="running"&&(t[e]="paused");return t});ngOnInit(){let t=this.route.snapshot.paramMap.get("id")??"";if(!t){this.error.set("No run id"),this.loading.set(!1);return}this.runId.set(t),this.bootstrap(t)}ngOnDestroy(){this.closeStream?.(),this.closeStream=null}async bootstrap(t){try{let e=await this.api.get(`/api/workflows/runs/${encodeURIComponent(t)}${this.projects.projectQuery()}`);this.run.set(e.run),this.events.set(e.events??[]),this.loading.set(!1),this.isTerminal()?this.streamStatus.set("closed"):this.openStream(t)}catch(e){this.error.set(e instanceof Error?e.message:String(e)),this.loading.set(!1)}}openStream(t){this.streamStatus.set("connecting");let e=this.api.openEventStream(`/api/workflows/runs/${encodeURIComponent(t)}/events${this.projects.projectQuery()}`,(n,r)=>{if(n==="done"){this.streamStatus.set("closed"),this.refreshRun();return}let d=r;!d||typeof d!="object"||d.id==null||(this.streamStatus.set("live"),this.appendEvent(d),n.startsWith("run_")&&this.refreshRun())},()=>{this.streamStatus.set("error")});this.closeStream=e,this.destroyRef.onDestroy(()=>e())}appendEvent(t){this.events.update(e=>{if(e.some(r=>r.id===t.id))return e;let n=[...e,t];return n.sort((r,d)=>r.id-d.id),n})}async refreshRun(){try{let t=this.runId();if(!t)return;let e=await this.api.get(`/api/workflows/runs/${encodeURIComponent(t)}${this.projects.projectQuery()}`);this.run.set(e.run)}catch{}}async approve(){await this.action("approve")}async reject(){let t=prompt("Reason for rejecting?")??void 0;await this.action("reject",t?{reason:t}:void 0)}async cancel(){confirm("Cancel this run?")&&await this.action("cancel")}async resume(){await this.action("resume")}async action(t,e){this.actionPending.set(t),this.actionError.set(null);try{await this.api.post(`/api/workflows/runs/${encodeURIComponent(this.runId())}/${t}${this.projects.projectQuery()}`,e??{}),await this.refreshRun(),(t==="resume"||t==="approve")&&!this.isTerminal()&&!this.closeStream&&this.openStream(this.runId())}catch(n){this.actionError.set(n instanceof Error?n.message:String(n))}finally{this.actionPending.set(null)}}fmtTime(t){return t?new Date(t).toLocaleTimeString():"\u2014"}fmtDuration(t,e){if(!t)return"\u2014";let r=(e??Date.now())-t;return r>=6e4?Math.round(r/6e4)+"m "+Math.round(r%6e4/1e3)+"s":r>=1e3?(r/1e3).toFixed(1)+"s":r+"ms"}eventDetail(t){let e=t.data;if(!e)return"";let n=d=>d.length>200?d.slice(0,200)+"\u2026":d;if(typeof e.error=="string")return e.error;if(typeof e.text=="string")return n(e.text);if(typeof e.name=="string"){let d=typeof e.input=="string"?e.input:"";return n(d?`${e.name} ${d}`:e.name)}let r=e.output;if(typeof r=="string")return n(r);if(r!=null)try{return n(JSON.stringify(r))}catch{return""}return""}stepIdOf(t){return t.data?.stepId??t.stepId??""}evColor(t){return me[t]??"var(--text-secondary)"}back(){this.router.navigate(["/runs"])}edgePath(t,e){let n=t.x+150,r=t.y+18,d=e.x,f=e.y+18,v=(n+d)/2;return`M ${n} ${r} C ${v} ${r}, ${v} ${f}, ${d} ${f}`}nodeBorderColor(t){return this.selectedNode()===t.id?"var(--accent)":t.status==="pending"||t.status==="skipped"?"var(--border-subtle)":{running:"var(--info)",completed:"var(--success)",failed:"var(--error)",paused:"var(--warn)"}[t.status]??"var(--border-subtle)"}nodeBoxShadow(t){return t.status==="running"?"0 0 0 3px var(--info-soft)":this.selectedNode()===t.id?"0 4px 14px rgba(0,0,0,0.4)":"none"}nodeDotBg(t){return t.status==="completed"?"var(--success)":t.status==="failed"?"var(--error)":t.status==="paused"?"var(--warn)":"transparent"}nodeDotBorder(t){return t.status==="pending"||t.status==="running"||t.status==="skipped"?`1.5px solid ${{pending:"var(--text-muted)",running:"var(--info)",skipped:"var(--text-muted)"}[t.status]}`:"none"}layoutCols(t){return t.map((e,n)=>n)}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=$({type:i,selectors:[["app-run-detail"]],decls:27,vars:10,consts:[[1,"col","rd-root"],[1,"row","gap-10","rd-head"],["type","button",1,"btn","btn-ghost","btn-sm",3,"click"],["name","chevronLeft",3,"size"],[1,"rd-banner","rd-banner-error"],[1,"row","gap-12","rd-approval"],[1,"rd-dag"],["width","100%",1,"rd-dag-svg"],["id","rarrow","viewBox","0 0 10 10","refX","8","refY","5","markerWidth","6","markerHeight","6","orient","auto-start-reverse"],["d","M0 0 L10 5 L0 10 z","fill","rgba(160,170,190,0.6)"],["role","button",1,"rd-node",3,"rd-node-running","rd-node-selected","rd-node-pending","rd-node-skipped","left","top","border-color","box-shadow"],[1,"col","rd-panel"],[1,"row","gap-2","rd-tabs"],["type","button",1,"rd-tab",3,"rd-tab-active"],["aria-live","polite",1,"scroll-y","rd-events"],[1,"rd-artifacts","row"],[1,"rd-cost-wrap",2,"padding","16px"],[1,"mono","rd-wf-name"],[1,"mono","muted",2,"font-size","11.5px"],[3,"state","pulse"],[1,"grow"],[1,"mono","muted","row","gap-4",2,"font-size","11.5px"],["name","clock",3,"size"],["type","button",1,"btn","btn-destructive","btn-sm",3,"disabled"],["type","button",1,"btn","btn-destructive","btn-sm",3,"click","disabled"],["name","cancel",3,"size"],[1,"muted",2,"font-size","12px"],[1,"rd-error"],[2,"color","var(--warn)","flex-shrink","0"],["name","pause",3,"size"],[2,"font-weight","600","font-size","13px"],[1,"secondary",2,"font-size","12px","margin-top","1px"],["type","button",1,"btn","btn-secondary","btn-sm",3,"click"],["type","button",1,"btn","btn-primary","btn-sm",3,"click","disabled"],["name","check",3,"size"],["fill","none","stroke-width","1.6","marker-end","url(#rarrow)"],["role","button",1,"rd-node",3,"click"],[1,"rd-node-dot"],["name","check",2,"color","#fff",3,"size"],["name","x",2,"color","#fff",3,"size"],["name","pause",2,"color","#fff",3,"size"],[1,"grow",2,"min-width","0"],[1,"rd-node-label"],[1,"mono","muted","rd-node-type"],["type","button",1,"rd-tab",3,"click"],[1,"pill","rd-live-pill"],[1,"row","gap-10","rd-event-row"],[1,"row","gap-6","muted",2,"padding","6px 0"],[1,"muted","tabular","rd-event-time"],[1,"rd-event-kind"],[1,"muted","rd-event-node"],[1,"secondary","rd-event-text"],[1,"rd-stream-dot"],[1,"muted","rd-no-artifacts",2,"margin","auto","font-size","12.5px"],[1,"muted",2,"font-size","12.5px"]],template:function(e,n){if(e&1&&(s(0,"div",0)(1,"div",1)(2,"button",2),b("click",function(){return n.back()}),p(3,"app-icon",3),l(4," Runs "),a(),u(5,Q,10,7)(6,U,3,0)(7,J,3,1),a(),u(8,K,2,1,"div",4),u(9,X,2,1,"div",4),u(10,Y,15,4,"div",5),s(11,"div",6),O(),s(12,"svg",7)(13,"defs")(14,"marker",8),p(15,"path",9),a()(),M(16,te,1,1,null,null,H),a(),M(18,oe,10,26,"div",10,N),a(),I(),s(20,"div",11)(21,"div",12),M(22,se,3,4,"button",13,N),a(),u(24,ce,4,1,"div",14),u(25,pe,3,0,"div",15),u(26,ue,3,0,"div",16),a()()),e&2){let r,d;o(3),g("size",14),o(2),m((r=n.run())?5:n.loading()?6:n.error()?7:-1,r),o(3),m(n.actionError()?8:-1),o(),m((d=(d=n.run())==null?null:d.errorMessage)?9:-1,d),o(),m(n.approvalPending()?10:-1),o(2),D("height",n.DAG_H)("viewBox","0 0 "+n.DAG_W+" "+n.DAG_H),o(4),S(n.dagEdges()),o(2),S(n.dagNodes()),o(4),S(n.TABS),o(2),m(n.activeTab()==="events"?24:-1),o(),m(n.activeTab()==="artifacts"?25:-1),o(),m(n.activeTab()==="cost"?26:-1)}},dependencies:[B,F],styles:["[_nghost-%COMP%]{display:contents}.rd-root[_ngcontent-%COMP%]{flex:1;min-height:0}.rd-head[_ngcontent-%COMP%]{padding:12px 16px;border-bottom:1px solid var(--border-subtle);flex-shrink:0}.rd-wf-name[_ngcontent-%COMP%]{font-weight:600;font-size:14px}.rd-error[_ngcontent-%COMP%]{color:var(--error);font-size:12px}.rd-banner[_ngcontent-%COMP%]{padding:10px 16px;font-size:12.5px;flex-shrink:0}.rd-banner-error[_ngcontent-%COMP%]{background:var(--error-soft);color:var(--error);border-bottom:1px solid color-mix(in srgb,var(--error) 30%,transparent)}.rd-approval[_ngcontent-%COMP%]{padding:12px 16px;background:var(--warn-soft);border-bottom:1px solid rgba(229,165,10,.3);flex-shrink:0}.rd-dag[_ngcontent-%COMP%]{position:relative;height:180px;background:var(--bg-canvas-2, var(--bg-canvas));background-image:radial-gradient(circle,var(--dot-grid, rgba(255, 255, 255, .07)) 1px,transparent 1px);background-size:20px 20px;border-bottom:1px solid var(--border-subtle);overflow:hidden;flex-shrink:0}.rd-dag-svg[_ngcontent-%COMP%]{position:absolute;inset:0;pointer-events:none}.rd-node[_ngcontent-%COMP%]{position:absolute;width:150px;height:36px;display:flex;align-items:center;gap:8px;padding:0 11px;border-radius:8px;background:var(--bg-panel);border:1.5px solid var(--border-subtle);cursor:pointer;transition:border-color .12s,box-shadow .12s}.rd-node[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.rd-node-running[_ngcontent-%COMP%]{background:var(--info-soft)}.rd-node-pending[_ngcontent-%COMP%]{opacity:.6}.rd-node-skipped[_ngcontent-%COMP%]{border-style:dotted}.rd-node-dot[_ngcontent-%COMP%]{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;flex-shrink:0}.rd-dot-spin[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_rd-spin 1.4s linear infinite;border-top-color:transparent!important}@keyframes _ngcontent-%COMP%_rd-spin{to{transform:rotate(360deg)}}.rd-node-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rd-node-type[_ngcontent-%COMP%]{font-size:9px}.rd-panel[_ngcontent-%COMP%]{flex:1;min-height:0}.rd-tabs[_ngcontent-%COMP%]{padding:8px 14px 0;border-bottom:1px solid var(--border-subtle);flex-shrink:0}.rd-tab[_ngcontent-%COMP%]{padding:7px 13px;border:none;background:transparent;cursor:pointer;font-size:12.5px;font-weight:500;font-family:var(--font-ui);text-transform:capitalize;color:var(--text-muted);border-bottom:2px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:6px;transition:color .1s}.rd-tab[_ngcontent-%COMP%]:hover{color:var(--text-secondary)}.rd-tab-active[_ngcontent-%COMP%]{color:var(--text-primary);border-bottom-color:var(--accent)}.rd-live-pill[_ngcontent-%COMP%]{font-size:9px;background:var(--info-soft);color:var(--info)}.rd-events[_ngcontent-%COMP%]{flex:1;padding:8px 14px;font-family:var(--font-mono);font-size:11.5px;min-height:0}.rd-event-row[_ngcontent-%COMP%]{padding:4px 0;border-bottom:1px solid rgba(255,255,255,.03)}.rd-event-time[_ngcontent-%COMP%]{flex-shrink:0;width:80px;font-size:11px}.rd-event-kind[_ngcontent-%COMP%]{width:132px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rd-event-node[_ngcontent-%COMP%]{flex-shrink:0;width:80px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}.rd-event-text[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.rd-stream-dot[_ngcontent-%COMP%]{width:6px;height:6px;border-radius:50%;background:var(--info);animation:_ngcontent-%COMP%_rd-pulse 1s infinite}@keyframes _ngcontent-%COMP%_rd-pulse{0%,to{opacity:1}50%{opacity:.3}}.rd-artifacts[_ngcontent-%COMP%]{flex:1;min-height:0}.rd-no-artifacts[_ngcontent-%COMP%]{padding:40px;text-align:center}"],changeDetection:0})};export{G as RunDetail};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as I}from"./chunk-X2HTISHL.js";import{a as W}from"./chunk-UYC52MBC.js";import{a as
|
|
1
|
+
import{a as I}from"./chunk-X2HTISHL.js";import{a as W}from"./chunk-UYC52MBC.js";import{a as z,b as D}from"./chunk-HZA6NEAB.js";import{a as F}from"./chunk-WDU3WICG.js";import{a as A}from"./chunk-SUZYBYDW.js";import{c as E}from"./chunk-SHPTC4RL.js";import{c as P}from"./chunk-GR72OOCN.js";import{a as M}from"./chunk-7RNS77UP.js";import{a as O}from"./chunk-E44X4RH2.js";import{Aa as c,Ga as h,I as m,Ia as C,Ka as l,M as _,N as f,Va as a,W as b,Wa as y,Xa as p,ea as s,ka as R,lb as w,ra as x,sa as g,va as k,wa as S,xa as v,ya as r,za as i,zb as T}from"./chunk-PDN6QYGJ.js";import"./chunk-Q7L6LLAK.js";var N=(o,e)=>e.id;function V(o,e){o&1&&c(0,"app-pick-project-empty",0)}function $(o,e){o&1&&(r(0,"div",15),a(1,"No runs yet. Start one from the Workflows page."),i())}function H(o,e){if(o&1&&(r(0,"app-pill"),c(1,"app-icon",26),a(2),i()),o&2){let t=l().$implicit,n=l(3);s(),v("size",10),s(),p(" ",n.artifactsOf(t)," ")}}function Q(o,e){if(o&1){let t=h();r(0,"div",17),C("click",function(){let d=_(t).$implicit,u=l(3);return f(u.goToRun(d))})("keydown.enter",function(){let d=_(t).$implicit,u=l(3);return f(u.goToRun(d))}),r(1,"span",9),c(2,"app-state-pill",18),i(),r(3,"div",19)(4,"span",20),a(5),i(),r(6,"span",21),a(7),i(),x(8,H,3,2,"app-pill"),i(),r(9,"span",22),a(10),i(),r(11,"span",23),a(12),i(),r(13,"span",24),a(14),i(),r(15,"span",25),a(16),i()()}if(o&2){let t=e.$implicit,n=l(3);s(2),v("state",t.status)("pulse",t.status==="running"),s(3),y(t.workflowName),s(2),y(t.id.slice(0,8)),s(),g(n.artifactsOf(t)>0?8:-1),s(2),p(" ",n.durationOf(t)," "),s(2),p(" ",n.costOf(t)," "),s(2),p(" ",n.worktreeOf(t)," "),s(2),p(" ",n.timeAgo(t)," ")}}function q(o,e){if(o&1&&k(0,Q,17,9,"div",16,N),o&2){let t=l(2);S(t.runs())}}function B(o,e){if(o&1){let t=h();r(0,"div",1)(1,"div",2),c(2,"app-page-head",3),i(),r(3,"div",4)(4,"app-segmented",5),C("change",function(d){_(t);let u=l();return f(u.setFilter(d))}),i()(),r(5,"div",6)(6,"div",7)(7,"div",8)(8,"span",9),a(9,"Status"),i(),r(10,"span",10),a(11,"Workflow"),i(),r(12,"span",11),a(13,"Duration"),i(),r(14,"span",12),a(15,"Cost"),i(),r(16,"span",13),a(17,"Worktree"),i(),r(18,"span",14),a(19,"When"),i()(),x(20,$,2,0,"div",15)(21,q,2,0),i()()()}if(o&2){let t=l();s(4),v("options",t.filterOptions())("value",t.statusFilter()),s(16),g(t.runs().length===0&&!t.resource.state().loading?20:21)}}var j=class o{api=m(O);projects=m(M);router=m(E);resource=P(this.api,()=>`/api/workflows/runs?limit=100${this.projects.projectQuery("&")}`);allRuns=w(()=>this.resource.state().data?.runs??[]);statusFilter=b("all");filterOptions=w(()=>[{value:"all",label:"All"},...["running","paused","completed","failed","cancelled"].map(t=>({value:t,label:z[t]?.label??t}))]);runs=w(()=>{let e=this.statusFilter(),t=this.allRuns();return e==="all"?t:t.filter(n=>n.status===e)});setFilter(e){this.statusFilter.set(e)}goToRun(e){this.router.navigate(["/runs",e.id])}durationOf(e){if(!e.startedAt)return"\u2014";let n=(e.completedAt??e.lastActivityAt)-e.startedAt;return n>=6e4?Math.round(n/6e4)+"m "+Math.round(n%6e4/1e3)+"s":n>=1e3?Math.round(n/1e3)+"s":n+"ms"}timeAgo(e){let t=e.lastActivityAt;if(!t)return"";let n=Date.now()-t;return n<6e4?"just now":n<36e5?Math.round(n/6e4)+"m ago":n<864e5?Math.round(n/36e5)+"h ago":Math.round(n/864e5)+"d ago"}worktreeOf(e){return e.isolationEnvId??e.metadata?.isolationEnvId??"\u2014"}costOf(e){return"\u2014"}artifactsOf(e){return 0}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=R({type:o,selectors:[["app-runs"]],decls:2,vars:1,consts:[["surface","Runs"],[1,"col","runs-page"],[2,"padding","16px 18px 0"],["icon","play","title","Runs","sub","Recent workflow executions"],[1,"row","gap-6",2,"padding","0 18px 12px"],["size","sm",3,"change","options","value"],[2,"padding","0 18px 18px"],[1,"card","runs-table"],[1,"runs-header","row"],[2,"width","100px"],[1,"grow"],[2,"width","90px"],[2,"width","70px","text-align","right"],[2,"width","130px","text-align","right"],[2,"width","60px","text-align","right"],[1,"runs-empty"],["role","button","tabindex","0",1,"runs-row","row"],["role","button","tabindex","0",1,"runs-row","row",3,"click","keydown.enter"],[3,"state","pulse"],[1,"grow","row","gap-8"],[1,"mono",2,"font-size","12.5px"],[1,"mono","muted",2,"font-size","11px"],[1,"mono","tabular","muted",2,"width","90px","font-size","11.5px"],[1,"mono","tabular",2,"width","70px","text-align","right","font-size","12px"],[1,"mono","muted","runs-worktree",2,"width","130px","text-align","right","font-size","10.5px"],[1,"mono","muted",2,"width","60px","text-align","right","font-size","11px"],["name","box",3,"size"]],template:function(t,n){t&1&&x(0,V,1,0,"app-pick-project-empty",0)(1,B,22,3,"div",1),t&2&&g(n.resource.state().noProject?0:1)},dependencies:[F,W,D,A,I,T],styles:["[_nghost-%COMP%]{display:contents}.runs-page[_ngcontent-%COMP%]{flex:1;min-height:0}.runs-table[_ngcontent-%COMP%]{overflow:hidden}.runs-header[_ngcontent-%COMP%]{padding:8px 14px;border-bottom:1px solid var(--border-subtle);font-size:10.5px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-weight:600}.runs-row[_ngcontent-%COMP%]{padding:11px 14px;border-top:1px solid var(--border-subtle);cursor:pointer;transition:background 80ms}.runs-row[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.runs-row[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.runs-worktree[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.runs-empty[_ngcontent-%COMP%]{padding:40px;text-align:center;color:var(--text-muted);font-size:12.5px}"],changeDetection:0})};export{j as Runs};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as V}from"./chunk-X2HTISHL.js";import{a as A}from"./chunk-UYC52MBC.js";import{c as F}from"./chunk-GR72OOCN.js";import"./chunk-7RNS77UP.js";import{a as $}from"./chunk-E44X4RH2.js";import{Aa as f,Ea as z,Fa as R,Ga as w,I as S,Ia as y,Ka as p,M as b,N as C,Ta as T,Va as l,W as x,Wa as m,Xa as _,bb as H,ea as o,ka as O,lb as I,qa as k,ra as v,sa as u,ua as E,va as P,wa as M,xa as d,ya as a,za as r,zb as D}from"./chunk-PDN6QYGJ.js";import{a as g,b as h}from"./chunk-Q7L6LLAK.js";var B=()=>[0,1,2],L=(i,e)=>e.contentHash;function j(i,e){if(i&1&&(a(0,"div",6),l(1),r()),i&2){let t=p();o(),m(t.errorMsg())}}function U(i,e){i&1&&f(0,"div",9)}function W(i,e){i&1&&P(0,U,1,0,"div",9,E),i&2&&M(H(0,B))}function q(i,e){i&1&&(a(0,"div",7),f(1,"app-icon",5),a(2,"div",10),l(3,"No proposals yet"),r(),a(4,"div",11),l(5,"Run "),a(6,"strong"),l(7,"Analyze"),r(),l(8," to mine your ingested transcripts for recurring patterns worth turning into a durable rule, skill, or hook."),r()()),i&2&&(o(),d("size",28))}function G(i,e){if(i&1&&(a(0,"span",19),l(1),r()),i&2){let t=p().$implicit,n=p(2);o(),m(n.outcomeOf(t.contentHash))}}function J(i,e){i&1&&(a(0,"div",30),l(1,"Loading preview\u2026"),r())}function K(i,e){i&1&&(a(0,"div",31),l(1,"A non-SpecShip file already exists at this path \u2014 apply is blocked to avoid clobbering it."),r())}function Q(i,e){if(i&1&&(v(0,K,2,0,"div",31),a(1,"div",24),l(2,"Preview diff"),r(),a(3,"pre",32),l(4),r()),i&2){let t,n,s=p(2).$implicit,c=p(2);u((t=c.previewOf(s.contentHash))!=null&&t.conflict?0:-1),o(4),m((n=c.previewOf(s.contentHash))==null?null:n.diff)}}function X(i,e){if(i&1&&(a(0,"div",26),v(1,J,2,0,"div",30)(2,Q,5,2),r()),i&2){let t=p().$implicit,n=p(2);o(),u(n.previewOf(t.contentHash)===null?1:2)}}function Y(i,e){if(i&1){let t=w();a(0,"span",33),l(1,"applied"),r(),a(2,"button",34),y("click",function(){b(t);let s=p().$implicit,c=p(2);return C(c.undoProposal(s.contentHash))}),l(3,"Undo"),r()}if(i&2){let t=p().$implicit,n=p(2);o(2),d("disabled",n.isBusy(t.contentHash))}}function Z(i,e){if(i&1){let t=w();a(0,"button",34),y("click",function(){b(t);let s=p().$implicit,c=p(2);return C(c.dismissProposal(s.contentHash))}),l(1,"Dismiss"),r(),a(2,"button",4),y("click",function(){b(t);let s=p().$implicit,c=p(2);return C(c.applyProposal(s.contentHash))}),l(3),r()}if(i&2){let t,n=p().$implicit,s=p(2);d("disabled",s.isBusy(n.contentHash)),o(2),d("disabled",s.isBusy(n.contentHash)||((t=s.previewOf(n.contentHash))==null?null:t.conflict)),o(),_(" ",s.isBusy(n.contentHash)?"Applying\u2026":"Apply"," ")}}function ee(i,e){if(i&1){let t=w();a(0,"div",12),f(1,"div",13),a(2,"div",14)(3,"div",15)(4,"div",16)(5,"div",17)(6,"span",18),l(7),r(),a(8,"app-pill",3),l(9),r(),v(10,G,2,1,"span",19),r(),a(11,"div",20),l(12),r()()(),a(13,"div",21),l(14),r(),a(15,"div",22)(16,"div",23)(17,"div",24),l(18,"Evidence"),r(),a(19,"div",25),l(20),r()(),a(21,"div",23)(22,"div",24),l(23,"Writes to"),r(),a(24,"div",25),l(25),r()()(),v(26,X,3,1,"div",26),a(27,"div",27)(28,"button",28),y("click",function(){let s=b(t).$implicit,c=p(2);return C(c.togglePreview(s.contentHash))}),l(29),r(),f(30,"div",29),v(31,Y,4,1)(32,Z,4,3),r()()()}if(i&2){let t=e.$implicit,n=p(2);k("data-sev",t.severity),o(),T("background",n.sevColor(t.severity)),o(6),m(n.typeLabel(t.type)),o(),d("color",n.sevColor(t.severity))("bg","color-mix(in srgb, "+n.sevColor(t.severity)+" 16%, transparent)"),o(),m(t.severity),o(),u(n.outcomeOf(t.contentHash)?10:-1),o(2),m(t.title),o(2),m(t.body),o(6),m(t.evidence.detail),o(5),m(t.targetPath),o(),u(n.previewOf(t.contentHash)!==void 0?26:-1),o(3),_(" ",n.previewOf(t.contentHash)!==void 0?"Hide preview":"Preview"," "),o(2),u(t.state==="applied"?31:32)}}function te(i,e){if(i&1&&(a(0,"div",8),P(1,ee,33,15,"div",12,L),r()),i&2){let t=p();o(),M(t.proposals())}}var N=class i{api=S($);resource=F(this.api,()=>"/api/reflect?state=open");analyzing=x(!1);previews=x({});busy=x(new Set);outcomes=x({});errorMsg=x(null);proposals=I(()=>{let e=this.resource.state().data?.proposals??[],t={high:0,warn:1,info:2};return[...e].sort((n,s)=>(t[n.severity]??9)-(t[s.severity]??9))});counts=I(()=>{let e=this.resource.state().data?.proposals??[];return{high:e.filter(t=>t.severity==="high").length,warn:e.filter(t=>t.severity==="warn").length,info:e.filter(t=>t.severity==="info").length}});typeLabel(e){return e==="memory_rule"?"memory / rule":e==="skill"?"skill":"hook"}sevColor(e){return e==="high"?"var(--error)":e==="warn"?"var(--warn)":"var(--info)"}isBusy(e){return this.busy().has(e)}previewOf(e){return this.previews()[e]}outcomeOf(e){return this.outcomes()[e]}async analyze(){this.analyzing.set(!0),this.errorMsg.set(null);try{await this.api.post("/api/reflect/analyze",{}),this.resource.refetch()}catch(e){this.errorMsg.set(this.msg(e))}finally{this.analyzing.set(!1)}}async togglePreview(e){let t=this.previews();if(e in t){let n=g({},t);delete n[e],this.previews.set(n);return}this.previews.set(h(g({},t),{[e]:null}));try{let n=await this.api.get(`/api/reflect/${e}/preview`);this.previews.set(h(g({},this.previews()),{[e]:n}))}catch(n){this.errorMsg.set(this.msg(n));let s=g({},this.previews());delete s[e],this.previews.set(s)}}applyProposal(e){return this.mutate(e,`/api/reflect/${e}/apply`,"apply")}undoProposal(e){return this.mutate(e,`/api/reflect/${e}/undo`,"undo")}dismissProposal(e){return this.mutate(e,`/api/reflect/${e}/dismiss`,"dismiss")}async mutate(e,t,n){this.setBusy(e,!0),this.errorMsg.set(null);try{let s=await this.api.post(t,{}),c=s.outcome??(s.ok?"dismissed":"done");this.outcomes.set(h(g({},this.outcomes()),{[e]:c})),this.resource.refetch()}catch(s){this.errorMsg.set(`${n} failed: ${this.msg(s)}`)}finally{this.setBusy(e,!1)}}setBusy(e,t){this.busy.update(n=>{let s=new Set(n);return t?s.add(e):s.delete(e),s})}msg(e){return e instanceof Error?e.message:String(e)}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=O({type:i,selectors:[["app-improvements"]],decls:16,vars:14,consts:[[1,"page","scroll-y"],["icon","sparkles","title","Improvements","sub","Durable fixes mined from your transcripts \u2014 preview, then apply"],["actions",""],[3,"color","bg"],["type","button",1,"btn","btn-primary","btn-sm",3,"click","disabled"],["name","sparkles",3,"size"],[1,"banner-error"],[1,"empty"],[1,"prop-list"],[1,"skel","card-skel"],[1,"empty-title"],[1,"empty-sub"],[1,"prop-card","card"],[1,"sev-bar"],[1,"prop-body"],[1,"row","gap-10","head-row"],[1,"grow",2,"min-width","0"],[1,"row","gap-6","chips"],[1,"type-chip"],[1,"outcome"],[1,"prop-title"],[1,"prop-why"],[1,"prop-meta"],[1,"kv-block"],[1,"eyebrow"],[1,"mono","secondary","detail"],[1,"preview"],[1,"actions"],["type","button",1,"btn","btn-secondary","btn-sm",3,"click"],[1,"grow"],[1,"muted"],[1,"banner-error","small"],[1,"diff","mono"],[1,"applied-tag"],["type","button",1,"btn","btn-secondary","btn-sm",3,"click","disabled"]],template:function(t,n){t&1&&(a(0,"div",0)(1,"app-page-head",1),z(2,2),a(3,"app-pill",3),l(4),r(),a(5,"app-pill",3),l(6),r(),a(7,"app-pill",3),l(8),r(),a(9,"button",4),y("click",function(){return n.analyze()}),f(10,"app-icon",5),l(11),r(),R(),r(),v(12,j,2,1,"div",6),v(13,W,2,1)(14,q,9,1,"div",7)(15,te,3,0,"div",8),r()),t&2&&(o(3),d("color","var(--error)")("bg","var(--error-soft)"),o(),_("",n.counts().high," high"),o(),d("color","var(--warn)")("bg","var(--warn-soft)"),o(),_("",n.counts().warn," warn"),o(),d("color","var(--info)")("bg","var(--info-soft)"),o(),_("",n.counts().info," info"),o(),d("disabled",n.analyzing()),o(),d("size",13),o(),_(" ",n.analyzing()?"Analyzing\u2026":"Analyze"," "),o(),u(n.errorMsg()?12:-1),o(),u(n.resource.state().loading?13:n.proposals().length===0?14:15))},dependencies:[A,V,D],styles:[".page[_ngcontent-%COMP%]{padding:20px 24px 48px}.banner-error[_ngcontent-%COMP%]{background:var(--error-soft);color:var(--error);border:1px solid color-mix(in srgb,var(--error) 30%,transparent);border-radius:8px;padding:10px 12px;font-size:12.5px;margin-bottom:14px}.banner-error.small[_ngcontent-%COMP%]{margin:8px 0;padding:8px 10px;font-size:11.5px}.empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:64px 24px;color:var(--text-muted)}.empty[_ngcontent-%COMP%] .empty-title[_ngcontent-%COMP%]{font-size:15px;font-weight:600;color:var(--text)}.empty[_ngcontent-%COMP%] .empty-sub[_ngcontent-%COMP%]{font-size:12.5px;max-width:460px;line-height:1.5}.card-skel[_ngcontent-%COMP%]{height:132px;border-radius:12px;margin-bottom:12px}.prop-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.prop-card[_ngcontent-%COMP%]{position:relative;display:flex;overflow:hidden;padding:0}.prop-card[_ngcontent-%COMP%] .sev-bar[_ngcontent-%COMP%]{width:3px;flex:0 0 3px}.prop-card[_ngcontent-%COMP%] .prop-body[_ngcontent-%COMP%]{flex:1;min-width:0;padding:14px 16px}.head-row[_ngcontent-%COMP%]{margin-bottom:8px}.chips[_ngcontent-%COMP%]{margin-bottom:6px}.type-chip[_ngcontent-%COMP%]{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;color:var(--text-muted);background:var(--surface-2, color-mix(in srgb, var(--text) 7%, transparent));border-radius:5px;padding:2px 7px}.outcome[_ngcontent-%COMP%]{font-size:10.5px;color:var(--success);font-weight:600;text-transform:lowercase}.prop-title[_ngcontent-%COMP%]{font-size:14px;font-weight:600;color:var(--text);line-height:1.35}.prop-why[_ngcontent-%COMP%]{font-size:12.5px;color:var(--text-secondary, var(--text-muted));line-height:1.5;margin-bottom:10px}.prop-meta[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:10px}.prop-meta[_ngcontent-%COMP%] .detail[_ngcontent-%COMP%]{font-size:11px;margin-top:2px;word-break:break-all}.preview[_ngcontent-%COMP%]{margin:8px 0 12px}.preview[_ngcontent-%COMP%] .diff[_ngcontent-%COMP%]{background:var(--surface-2, color-mix(in srgb, var(--text) 5%, transparent));border:1px solid var(--border, color-mix(in srgb, var(--text) 12%, transparent));border-radius:8px;padding:10px 12px;font-size:11.5px;line-height:1.5;max-height:280px;overflow:auto;white-space:pre;margin-top:4px}.actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-top:4px}.applied-tag[_ngcontent-%COMP%]{font-size:11px;color:var(--success);font-weight:600}"],changeDetection:0})};export{N as Improvements};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as F}from"./chunk-X2HTISHL.js";import{a as z}from"./chunk-UYC52MBC.js";import{c as I}from"./chunk-GR72OOCN.js";import{a as O}from"./chunk-7RNS77UP.js";import{a as w}from"./chunk-E44X4RH2.js";import{Aa as c,Ea as M,Fa as S,I as u,Ka as g,Va as i,Wa as l,Xa as v,Ya as y,Za as P,bb as E,ea as a,ka as C,lb as f,ra as p,sa as s,ua as h,va as m,wa as x,xa as _,ya as o,za as r,zb as T}from"./chunk-PDN6QYGJ.js";import"./chunk-Q7L6LLAK.js";var D=()=>[0,1,2],b=(e,n)=>n.nodeId,j=(e,n)=>n.filePath,$=(e,n)=>n.files[0];function N(e,n){e&1&&c(0,"div",5)}function B(e,n){e&1&&m(0,N,1,0,"div",5,h),e&2&&x(E(0,D))}function L(e,n){e&1&&(o(0,"div",4),i(1,"Select a project to see its maintainability signals."),r())}function R(e,n){e&1&&(o(0,"div",4),i(1,"No maintainability data \u2014 run "),o(2,"code"),i(3,"specship index"),r(),i(4," first."),r())}function G(e,n){e&1&&(o(0,"div",4),c(1,"app-icon",6),o(2,"div",7),i(3,"Clean"),r(),o(4,"div",8),i(5,"Nothing crossed a threshold. Tune them in "),o(6,"code"),i(7,"specship.config.json"),r(),i(8,"."),r()()),e&2&&(a(),_("size",28))}function A(e,n){if(e&1&&(o(0,"div",14)(1,"span",15),i(2),r(),o(3,"span",16),i(4),r(),o(5,"span",17),i(6),r()()),e&2){let t=n.$implicit;a(2),l(t.name),a(2),l(t.reason),a(2),l(t.filePath)}}function H(e,n){if(e&1&&(o(0,"section",9)(1,"div",11),c(2,"span",12),i(3,"Coupling hotspots "),o(4,"span",13),i(5),r()(),m(6,A,7,3,"div",14,b),r()),e&2){let t=g(2);a(5),l(t.report().coupling.length),a(),x(t.report().coupling)}}function Q(e,n){if(e&1&&(o(0,"div",14)(1,"span",15),i(2),r(),o(3,"span",16),i(4),r(),o(5,"span",17),i(6),r()()),e&2){let t=n.$implicit;a(2),l(t.name),a(2),l(t.reason),a(2),y("",t.filePath,":",t.startLine)}}function q(e,n){if(e&1&&(o(0,"section",9)(1,"div",11),c(2,"span",18),i(3,"Oversized symbols "),o(4,"span",13),i(5),r()(),m(6,Q,7,4,"div",14,b),r()),e&2){let t=g(2);a(5),l(t.report().oversized.length),a(),x(t.report().oversized)}}function J(e,n){if(e&1&&(o(0,"div",14)(1,"span",19),i(2),r(),o(3,"span",16),i(4),r()()),e&2){let t=n.$implicit;a(2),l(t.filePath),a(2),l(t.reason)}}function K(e,n){if(e&1&&(o(0,"section",9)(1,"div",11),c(2,"span",18),i(3,"God files "),o(4,"span",13),i(5),r()(),m(6,J,5,2,"div",14,j),r()),e&2){let t=g(2);a(5),l(t.report().godFiles.length),a(),x(t.report().godFiles)}}function U(e,n){if(e&1&&(o(0,"div",14)(1,"span",19),i(2),r()()),e&2){let t=n.$implicit;a(2),l(t.files.join(" \u2192 "))}}function V(e,n){if(e&1&&(o(0,"section",9)(1,"div",11),c(2,"span",20),i(3,"Dependency cycles "),o(4,"span",13),i(5),r()(),m(6,U,3,1,"div",14,$),r()),e&2){let t=g(2);a(5),l(t.report().cycles.length),a(),x(t.report().cycles)}}function W(e,n){if(e&1&&(o(0,"div",14)(1,"span",15),i(2),r(),o(3,"span",19),i(4),r()()),e&2){let t=n.$implicit;a(2),l(t.name),a(2),y("",t.filePath,":",t.startLine)}}function X(e,n){if(e&1&&(o(0,"section",9)(1,"div",11),c(2,"span",21),i(3,"Dead-code candidates "),o(4,"span",13),i(5),r(),o(6,"span",22),i(7,"heuristic \u2014 verify before removing"),r()(),m(8,W,5,3,"div",14,b),r()),e&2){let t=g(2);a(5),l(t.report().deadCode.length),a(3),x(t.report().deadCode)}}function Y(e,n){if(e&1&&(p(0,H,8,1,"section",9),p(1,q,8,1,"section",9),p(2,K,8,1,"section",9),p(3,V,8,1,"section",9),p(4,X,10,1,"section",9),o(5,"div",10),i(6),o(7,"code"),i(8,"specship.config.json"),r(),i(9,". "),r()),e&2){let t=g();s(t.report().coupling.length?0:-1),a(),s(t.report().oversized.length?1:-1),a(),s(t.report().godFiles.length?2:-1),a(),s(t.report().cycles.length?3:-1),a(),s(t.report().deadCode.length?4:-1),a(2),P(" Thresholds \u2014 fan-in/out \u2265 ",t.report().thresholds.highDegree," \xB7 symbol \u2265 ",t.report().thresholds.largeSymbolLines," lines \xB7 god-file \u2265 ",t.report().thresholds.godFileSymbols," symbols. Override in ")}}var k=class e{api=u(w);projects=u(O);resource=I(this.api,()=>`/api/maintainability${this.projects.projectQuery()}`);report=f(()=>this.resource.state().data);counts=f(()=>{let n=this.resource.state().data;return{coupling:n?.coupling.length??0,oversized:n?.oversized.length??0,godFiles:n?.godFiles.length??0,cycles:n?.cycles.length??0,deadCode:n?.deadCode.length??0}});total=f(()=>{let n=this.counts();return n.coupling+n.oversized+n.godFiles+n.cycles+n.deadCode});base(n){return n.split("/").pop()||n}static \u0275fac=function(t){return new(t||e)};static \u0275cmp=C({type:e,selectors:[["app-maintainability"]],decls:16,vars:13,consts:[[1,"page","scroll-y"],["icon","wrench","title","Maintainability","sub","Graph-derived signals \u2014 coupling, size, cycles, dead code"],["actions",""],[3,"color","bg"],[1,"empty"],[1,"skel","card-skel"],["name","check",3,"size"],[1,"empty-title"],[1,"empty-sub"],[1,"sig","card"],[1,"thresholds"],[1,"sig-head"],[1,"dot",2,"background","var(--error)"],[1,"n"],[1,"row"],[1,"sym","mono"],[1,"why"],[1,"loc","mono"],[1,"dot",2,"background","var(--warn)"],[1,"loc","mono","grow"],[1,"dot",2,"background","var(--info)"],[1,"dot",2,"background","var(--text-muted)"],[1,"caveat"]],template:function(t,d){t&1&&(o(0,"div",0)(1,"app-page-head",1),M(2,2),o(3,"app-pill",3),i(4),r(),o(5,"app-pill",3),i(6),r(),o(7,"app-pill",3),i(8),r(),o(9,"app-pill",3),i(10),r(),S(),r(),p(11,B,2,1)(12,L,2,0,"div",4)(13,R,5,0,"div",4)(14,G,9,1,"div",4)(15,Y,10,8),r()),t&2&&(a(3),_("color","var(--error)")("bg","var(--error-soft)"),a(),v("",d.counts().coupling," coupling"),a(),_("color","var(--warn)")("bg","var(--warn-soft)"),a(),v("",d.counts().oversized+d.counts().godFiles," size"),a(),_("color","var(--info)")("bg","var(--info-soft)"),a(),v("",d.counts().cycles," cycles"),a(),_("color","var(--text-muted)")("bg","var(--bg-elevated)"),a(),v("",d.counts().deadCode," dead"),a(),s(d.resource.state().loading?11:d.resource.state().noProject?12:d.report()?d.report().clean?14:15:13))},dependencies:[z,F,T],styles:[".page[_ngcontent-%COMP%]{padding:20px 24px 48px}.empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:64px 24px;color:var(--text-muted)}.empty[_ngcontent-%COMP%] .empty-title[_ngcontent-%COMP%]{font-size:15px;font-weight:600;color:var(--text)}.empty[_ngcontent-%COMP%] .empty-sub[_ngcontent-%COMP%]{font-size:12.5px;max-width:460px;line-height:1.5}.empty[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);font-size:.92em}.card-skel[_ngcontent-%COMP%]{height:120px;border-radius:12px;margin-bottom:12px}.sig[_ngcontent-%COMP%]{padding:0;margin-bottom:14px;overflow:hidden}.sig-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:12px 16px;font-size:13px;font-weight:600;border-bottom:1px solid var(--border, color-mix(in srgb, var(--text) 12%, transparent))}.sig-head[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;flex:0 0 8px}.sig-head[_ngcontent-%COMP%] .n[_ngcontent-%COMP%]{font-size:11px;font-weight:600;color:var(--text-muted);background:var(--bg-elevated, color-mix(in srgb, var(--text) 7%, transparent));border-radius:999px;padding:1px 8px}.sig-head[_ngcontent-%COMP%] .caveat[_ngcontent-%COMP%]{margin-left:auto;font-size:11px;font-weight:400;color:var(--text-muted);font-style:italic}.row[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:12px;padding:8px 16px;font-size:12px;border-top:1px solid var(--border-subtle, color-mix(in srgb, var(--text) 6%, transparent))}.row[_ngcontent-%COMP%]:first-of-type{border-top:none}.row[_ngcontent-%COMP%] .sym[_ngcontent-%COMP%]{color:var(--text);font-weight:500;flex:0 0 auto;max-width:38%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row[_ngcontent-%COMP%] .why[_ngcontent-%COMP%]{color:var(--text-secondary, var(--text-muted));flex:0 0 auto}.row[_ngcontent-%COMP%] .loc[_ngcontent-%COMP%]{color:var(--text-muted);font-size:11px;margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row[_ngcontent-%COMP%] .grow[_ngcontent-%COMP%]{flex:1;margin-left:0}.mono[_ngcontent-%COMP%]{font-family:var(--font-mono, ui-monospace, monospace)}.thresholds[_ngcontent-%COMP%]{margin-top:8px;font-size:11.5px;color:var(--text-muted);line-height:1.5}.thresholds[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace)}"],changeDetection:0})};export{k as Maintainability};
|