@selvakumaresra/specship 0.9.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.
Files changed (86) hide show
  1. package/commands/ss-domain.md +98 -0
  2. package/commands/ss-triage.md +177 -0
  3. package/dist/bin/specship.js +249 -0
  4. package/dist/bin/specship.js.map +1 -1
  5. package/dist/db/schema.sql +1 -1
  6. package/dist/db/spec-queries.d.ts +29 -0
  7. package/dist/db/spec-queries.d.ts.map +1 -1
  8. package/dist/db/spec-queries.js +63 -0
  9. package/dist/db/spec-queries.js.map +1 -1
  10. package/dist/enforce/enforce.d.ts +70 -0
  11. package/dist/enforce/enforce.d.ts.map +1 -0
  12. package/dist/enforce/enforce.js +125 -0
  13. package/dist/enforce/enforce.js.map +1 -0
  14. package/dist/extraction/specs/markdown-spec-extractor.d.ts +21 -0
  15. package/dist/extraction/specs/markdown-spec-extractor.d.ts.map +1 -1
  16. package/dist/extraction/specs/markdown-spec-extractor.js +144 -0
  17. package/dist/extraction/specs/markdown-spec-extractor.js.map +1 -1
  18. package/dist/fitness/fitness.d.ts +75 -0
  19. package/dist/fitness/fitness.d.ts.map +1 -0
  20. package/dist/fitness/fitness.js +204 -0
  21. package/dist/fitness/fitness.js.map +1 -0
  22. package/dist/graph/maintainability.d.ts +101 -0
  23. package/dist/graph/maintainability.d.ts.map +1 -0
  24. package/dist/graph/maintainability.js +278 -0
  25. package/dist/graph/maintainability.js.map +1 -0
  26. package/dist/index.d.ts +45 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +79 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/installer/instructions-template.d.ts +5 -4
  31. package/dist/installer/instructions-template.d.ts.map +1 -1
  32. package/dist/installer/instructions-template.js +10 -4
  33. package/dist/installer/instructions-template.js.map +1 -1
  34. package/dist/installer/targets/claude.d.ts.map +1 -1
  35. package/dist/installer/targets/claude.js +4 -0
  36. package/dist/installer/targets/claude.js.map +1 -1
  37. package/dist/installer/targets/shared.d.ts.map +1 -1
  38. package/dist/installer/targets/shared.js +4 -0
  39. package/dist/installer/targets/shared.js.map +1 -1
  40. package/dist/mcp/fitness-tool.d.ts +12 -0
  41. package/dist/mcp/fitness-tool.d.ts.map +1 -0
  42. package/dist/mcp/fitness-tool.js +46 -0
  43. package/dist/mcp/fitness-tool.js.map +1 -0
  44. package/dist/mcp/maintainability-tool.d.ts +13 -0
  45. package/dist/mcp/maintainability-tool.d.ts.map +1 -0
  46. package/dist/mcp/maintainability-tool.js +64 -0
  47. package/dist/mcp/maintainability-tool.js.map +1 -0
  48. package/dist/mcp/server-instructions.d.ts +1 -1
  49. package/dist/mcp/server-instructions.d.ts.map +1 -1
  50. package/dist/mcp/server-instructions.js +3 -2
  51. package/dist/mcp/server-instructions.js.map +1 -1
  52. package/dist/mcp/spec-tools.d.ts.map +1 -1
  53. package/dist/mcp/spec-tools.js +115 -1
  54. package/dist/mcp/spec-tools.js.map +1 -1
  55. package/dist/mcp/tools.d.ts +13 -0
  56. package/dist/mcp/tools.d.ts.map +1 -1
  57. package/dist/mcp/tools.js +75 -0
  58. package/dist/mcp/tools.js.map +1 -1
  59. package/dist/resolution/domain-gap-seed.d.ts +60 -0
  60. package/dist/resolution/domain-gap-seed.d.ts.map +1 -0
  61. package/dist/resolution/domain-gap-seed.js +87 -0
  62. package/dist/resolution/domain-gap-seed.js.map +1 -0
  63. package/dist/resolution/spec-link-resolver.d.ts +46 -1
  64. package/dist/resolution/spec-link-resolver.d.ts.map +1 -1
  65. package/dist/resolution/spec-link-resolver.js +78 -0
  66. package/dist/resolution/spec-link-resolver.js.map +1 -1
  67. package/dist/server/routes/domain.js +0 -0
  68. package/dist/server/routes/maintainability.js +18 -0
  69. package/dist/server/server.js +4 -0
  70. package/dist/types.d.ts +3 -1
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/types.js +6 -0
  73. package/dist/types.js.map +1 -1
  74. package/dist/web/chunk-EZZBWC7Z.js +1 -0
  75. package/dist/web/{chunk-UBOZGQNK.js → chunk-IZQXYQNQ.js} +1 -1
  76. package/dist/web/chunk-JQXCRIK2.js +1 -0
  77. package/dist/web/{chunk-ASZ77FMZ.js → chunk-JT2YIHPL.js} +1 -1
  78. package/dist/web/{chunk-WLIMNDS3.js → chunk-ONKHTXHJ.js} +1 -1
  79. package/dist/web/{chunk-FHZHD2ZG.js → chunk-P5JX67LT.js} +1 -1
  80. package/dist/web/{chunk-RJLLYZEQ.js → chunk-PDTQX2UL.js} +1 -1
  81. package/dist/web/{chunk-RASJHUXS.js → chunk-XWDR6MPC.js} +1 -1
  82. package/dist/web/{chunk-D5OCNEJA.js → chunk-ZG7H3XPL.js} +1 -1
  83. package/dist/web/index.html +1 -1
  84. package/dist/web/main-GYPY5V5H.js +1 -0
  85. package/package.json +1 -1
  86. package/dist/web/main-P33TUYUP.js +0 -1
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /**
3
+ * Domain gap-seed (REQ-DOMAIN-003).
4
+ *
5
+ * A read-only pass that surfaces what the domain knowledge layer does NOT yet
6
+ * cover, so an author (or the `/ss-domain` command, REQ-DOMAIN-004) can decide
7
+ * what to document next. It answers two questions against current DB state:
8
+ *
9
+ * - which structural code entities (classes, structs, interfaces, routes,
10
+ * components) are reached by NO domain fact; and
11
+ * - which non-domain specs (documents, requirements, …) have NO domain fact
12
+ * hanging off them.
13
+ *
14
+ * A domain fact carries no direct domain→code rows. It reaches code transitively
15
+ * through its spec-tier chain (`parentId` + `metadata.depends_on`), resolved by
16
+ * {@link SpecLinkResolver.getInheritedLinks} (REQ-DOMAIN-002). An entity is
17
+ * "documented" when some domain fact's inherited links resolve to that entity's
18
+ * node; a spec is "documented" when some domain fact's spec-tier chain reaches
19
+ * it. Everything else is a gap.
20
+ *
21
+ * COMPUTED from live state — writes nothing. Like the spec funnel
22
+ * (`computeSpecFunnel`), the result is always fresh and needs no bookkeeping.
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.computeDomainGapSeed = computeDomainGapSeed;
26
+ /** The structural node kinds the gap-seed considers "domain-worthy" entities. */
27
+ const IN_SCOPE_ENTITY_KINDS = [
28
+ 'class',
29
+ 'struct',
30
+ 'interface',
31
+ 'route',
32
+ 'component',
33
+ ];
34
+ /**
35
+ * Compute the domain gap-seed: the in-scope entities and non-domain specs that
36
+ * no domain fact yet covers. Read-only — issues only `SELECT`s through the
37
+ * passed query objects and the resolver's read-time `getInheritedLinks`.
38
+ */
39
+ function computeDomainGapSeed(queries, specQueries, resolver) {
40
+ // In-scope entities: every structural code symbol a domain fact could document.
41
+ const entities = IN_SCOPE_ENTITY_KINDS.flatMap((k) => queries.getNodesByKind(k));
42
+ // Build the documented sets by walking each domain fact's spec-tier chain.
43
+ const allSpecs = specQueries.getAllSpecs();
44
+ const documentedNodeIds = new Set();
45
+ const documentedSpecIds = new Set();
46
+ for (const spec of allSpecs) {
47
+ if (spec.kind !== 'domain')
48
+ continue;
49
+ const inherited = resolver.getInheritedLinks(spec);
50
+ for (const { link } of inherited.links) {
51
+ if (link.resolvedNodeId)
52
+ documentedNodeIds.add(link.resolvedNodeId);
53
+ }
54
+ // Every indexed spec the fact reaches counts as documented — even one that
55
+ // contributes no code link of its own (REQ-DOMAIN-003.A2).
56
+ for (const reached of inherited.visitedSpecIds) {
57
+ documentedSpecIds.add(reached);
58
+ }
59
+ }
60
+ // Gap entities: in-scope entities no domain fact resolves to (A1, A2).
61
+ const gapEntities = entities
62
+ .filter((n) => !documentedNodeIds.has(n.id))
63
+ .map((n) => ({
64
+ nodeId: n.id,
65
+ name: n.name,
66
+ qualifiedName: n.qualifiedName,
67
+ kind: n.kind,
68
+ filePath: n.filePath,
69
+ }));
70
+ // Non-domain specs are the spec-side universe; a domain fact is never its own
71
+ // documentation target.
72
+ const nonDomainSpecs = allSpecs.filter((s) => s.kind !== 'domain');
73
+ const gapSpecs = nonDomainSpecs
74
+ .filter((s) => !documentedSpecIds.has(s.id))
75
+ .map((s) => ({ id: s.id, title: s.title, kind: s.kind }));
76
+ // Coverage over the entity ∪ spec universe (A3): the denominator is the total
77
+ // count of in-scope entities plus non-domain specs, so documented + gaps
78
+ // always reconstitutes it exactly.
79
+ const gaps = gapEntities.length + gapSpecs.length;
80
+ const documented = entities.length + nonDomainSpecs.length - gaps;
81
+ return {
82
+ entities: gapEntities,
83
+ specs: gapSpecs,
84
+ coverage: { documented, gaps },
85
+ };
86
+ }
87
+ //# sourceMappingURL=domain-gap-seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-gap-seed.js","sourceRoot":"","sources":["../../src/resolution/domain-gap-seed.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;AAoDH,oDAyDC;AAtGD,iFAAiF;AACjF,MAAM,qBAAqB,GAAe;IACxC,OAAO;IACP,QAAQ;IACR,WAAW;IACX,OAAO;IACP,WAAW;CACZ,CAAC;AAiCF;;;;GAIG;AACH,SAAgB,oBAAoB,CAClC,OAAqB,EACrB,WAAwB,EACxB,QAA0B;IAE1B,gFAAgF;IAChF,MAAM,QAAQ,GAAW,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3D,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAC1B,CAAC;IAEF,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE5C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnD,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,cAAc;gBAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,CAAC;QACD,2EAA2E;QAC3E,2DAA2D;QAC3D,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;YAC/C,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,MAAM,WAAW,GAAoB,QAAQ;SAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,MAAM,EAAE,CAAC,CAAC,EAAE;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC,CAAC,CAAC;IAEN,8EAA8E;IAC9E,wBAAwB;IACxB,MAAM,cAAc,GAAW,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAkB,cAAc;SAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE5D,8EAA8E;IAC9E,yEAAyE;IACzE,mCAAmC;IACnC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;IAElE,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC/B,CAAC;AACJ,CAAC"}
@@ -27,7 +27,7 @@
27
27
  * Highest-confidence signal wins per logical key — `upsertSpecLink` enforces
28
28
  * this.
29
29
  */
30
- import { Spec } from '../types';
30
+ import { Spec, SpecLink } from '../types';
31
31
  import { QueryBuilder } from '../db/queries';
32
32
  import { SpecQueries } from '../db/spec-queries';
33
33
  import { SpecLinkCandidate } from '../extraction/specs/types';
@@ -45,6 +45,35 @@ export interface SpecLinkResolverStats {
45
45
  candidatesApplied: number;
46
46
  commentLinksApplied: number;
47
47
  }
48
+ /** One code link inherited by a spec through a spec→spec dependency edge. */
49
+ export interface InheritedLink {
50
+ /** The dependency spec id whose `implements` link this is. */
51
+ viaSpecId: string;
52
+ /** The inherited link itself (carries live `state` / `driftAxis`). */
53
+ link: SpecLink;
54
+ }
55
+ /** Result of {@link SpecLinkResolver.getInheritedLinks}. */
56
+ export interface InheritedLinksResult {
57
+ /** Code links reached transitively through the spec's parent / depends_on chain. */
58
+ links: InheritedLink[];
59
+ /** Declared dependency spec ids that don't resolve to an indexed spec (gaps). */
60
+ gaps: string[];
61
+ /**
62
+ * Every *indexed* spec id reached through the spec-tier chain (excludes the
63
+ * originating spec and the unresolved `gaps`). A spec a fact reaches but that
64
+ * contributes no code link still appears here, so consumers like the domain
65
+ * gap-seed (REQ-DOMAIN-003) can treat "reached by a domain fact" as documented
66
+ * even when the reached spec carries no `spec_links` of its own.
67
+ */
68
+ visitedSpecIds: string[];
69
+ }
70
+ /**
71
+ * The spec ids a spec links to at the spec tier: its `parentId` plus every
72
+ * entry of `metadata.depends_on` (REQ-DOMAIN-002). `depends_on` may be a
73
+ * single string or a string[]; both normalize to a deduped list of non-empty
74
+ * ids.
75
+ */
76
+ export declare function sourceSpecIds(spec: Spec): string[];
48
77
  export declare class SpecLinkResolver {
49
78
  private queries;
50
79
  private specQueries;
@@ -98,6 +127,22 @@ export declare class SpecLinkResolver {
98
127
  * needed, call specship_link_verify to take state back to `verified`.
99
128
  */
100
129
  markSpecDrifted(specId: string, newSpecHash: string): number;
130
+ /**
131
+ * Compute the code links a spec inherits transitively through its
132
+ * spec→spec edges (`parentId` + `metadata.depends_on`). A `domain` fact
133
+ * carries NO direct domain→code rows; its code association and drift state
134
+ * are derived here by following those spec edges to requirement specs and
135
+ * reusing *their* `spec_links` — whose `resolved_node_id`/`state` the normal
136
+ * `resolveAll`/`resolveLinksForFiles` pass already refreshed this sync. So
137
+ * "re-resolved after each sync" holds with no stored domain rows, and drift
138
+ * surfaces automatically through each inherited link's live `state`.
139
+ *
140
+ * Read-time derivation only — writes nothing. Cycle-guarded via a visited
141
+ * `Set`, depth-capped (default {@link INHERITED_LINK_MAX_DEPTH}). A declared
142
+ * dependency that doesn't resolve to an indexed spec is returned in `gaps`
143
+ * (an unlinked/proposed fact, never an error — REQ-DOMAIN-002.A3).
144
+ */
145
+ getInheritedLinks(spec: Spec, maxDepth?: number): InheritedLinksResult;
101
146
  private makeStats;
102
147
  }
103
148
  //# sourceMappingURL=spec-link-resolver.d.ts.map
@@ -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,EAIL,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,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,OAAO,CAAC,SAAS;CAUlB"}
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":"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"}
1
+ {"version":3,"file":"spec-link-resolver.js","sourceRoot":"","sources":["../../src/resolution/spec-link-resolver.ts"],"names":[],"mappings":"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"}
Binary file
@@ -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
+ }
@@ -29,6 +29,8 @@ import { registerMemoryRoutes } from './routes/memory.js';
29
29
  import { registerProjectsRoutes } from './routes/projects.js';
30
30
  import { registerEventsRoutes } from './routes/events.js';
31
31
  import { registerReflectRoutes } from './routes/reflect.js';
32
+ import { registerMaintainabilityRoutes } from './routes/maintainability.js';
33
+ import { registerDomainRoutes } from './routes/domain.js';
32
34
  /**
33
35
  * Lazy-import the specship core. Two delivery shapes are supported:
34
36
  *
@@ -168,6 +170,8 @@ export async function createServer(options) {
168
170
  await registerProjectsRoutes(app);
169
171
  await registerEventsRoutes(app);
170
172
  await registerReflectRoutes(app);
173
+ await registerMaintainabilityRoutes(app);
174
+ await registerDomainRoutes(app);
171
175
  // Optional: serve the built Angular UI from `webDir` and fall back to
172
176
  // index.html for client-side routes. Must register AFTER the /api/*
173
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
@@ -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;;;;;;;;;GASG;AACU,QAAA,UAAU,GAAG;IACxB,UAAU;IACV,aAAa;IACb,YAAY;IACZ,UAAU;IACV,aAAa;IACb,yEAAyE;IACzE,uEAAuE;IACvE,oDAAoD;IACpD,OAAO;CACC,CAAC;AAIX;;;GAGG;AACU,QAAA,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC"}
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};
@@ -1 +1 @@
1
- import{a as I}from"./chunk-X2HTISHL.js";import{a as W}from"./chunk-UYC52MBC.js";import{a as F}from"./chunk-WDU3WICG.js";import{a as z,b as D}from"./chunk-HZA6NEAB.js";import{a as A}from"./chunk-SUZYBYDW.js";import{c as P}from"./chunk-GR72OOCN.js";import{c as E}from"./chunk-SHPTC4RL.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};
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 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};
@@ -1 +1 @@
1
- import{a as W}from"./chunk-X2HTISHL.js";import{a as Q}from"./chunk-UYC52MBC.js";import{a as U}from"./chunk-SUZYBYDW.js";import{b as Y,c as G}from"./chunk-GR72OOCN.js";import{d as B}from"./chunk-SHPTC4RL.js";import{a as H}from"./chunk-7RNS77UP.js";import{a as $}from"./chunk-E44X4RH2.js";import{Aa as m,Ea as T,Fa as O,I as c,Ia as S,Ka as C,R,Ta as D,Ua as I,Va as s,W as f,Wa as g,X as E,Xa as h,Za as z,bb as u,cb as F,ea as a,eb as j,gb as L,ib as N,ka as P,lb as w,qa as M,ra as v,sa as x,ua as k,va as y,vb as A,wa as b,xa as d,ya as r,za as o,zb as J}from"./chunk-PDN6QYGJ.js";import"./chunk-Q7L6LLAK.js";var K=()=>({value:"time",label:"Latest"}),V=()=>({value:"cost",label:"Cost"}),X=()=>({value:"prompts",label:"Prompts"}),Z=(i,e,t)=>[i,e,t],ee=()=>[0,1,2,3,4],te=i=>["/sessions",i],ne=(i,e)=>e.fullId;function ie(i,e){i&1&&(r(0,"span",10),s(1,"\u26A0 refresh failed"),o()),i&2&&d("title",e)}function re(i,e){i&1&&(r(0,"div",20),m(1,"div",21),o())}function oe(i,e){i&1&&y(0,re,2,0,"div",20,k),i&2&&b(u(0,ee))}function se(i,e){i&1&&(r(0,"div",19),s(1," No sessions in this range. Either nothing's been logged yet, or the JSONL ingest watcher hasn't caught up \u2014 click Refresh. "),o())}function ae(i,e){if(i&1&&(r(0,"a",22)(1,"span",23),s(2),o(),r(3,"span",17)(4,"app-pill"),s(5),o()(),r(6,"span",24),s(7),o(),r(8,"span",25),s(9),o(),r(10,"span",25),s(11),L(12,"number"),o(),r(13,"span",26),s(14),o()()),i&2){let t=e.$implicit,n=C(2);d("routerLink",F(15,te,t.fullId)),M("aria-label","Open session "+t.id),a(2),g(t.id),a(3),g(t.project),a(2),z(" ",t.started," \u2013 ",t.ended," \xB7 ",t.model," "),a(2),g(t.prompts),a(),D("color",n.cacheColor(t.cache)),a(),h(" ",N(12,12,t.cache*100,"1.0-0"),"% "),a(3),h(" $",t.cost.toFixed(2)," ")}}function le(i,e){if(i&1&&y(0,ae,15,17,"a",22,ne),i&2){let t=C();b(t.sorted())}}var de=1e4,q=class i{api=c($);projects=c(H);refresh=c(Y);destroyRef=c(R);range=f("all");sort=f("time");ranges=["today","week","month","all"];localRefreshing=f(!1);resource=G(this.api,()=>`/api/claude/sessions?range=${this.range()}&limit=200${this.projects.projectQuery("&")}`);rows=w(()=>(this.resource.state().data?.sessions??[]).map(t=>this.adapt(t)));sorted=w(()=>{let e=this.sort();return[...this.rows()].sort((t,n)=>e==="cost"?n.cost-t.cost:e==="prompts"?n.prompts-t.prompts:n.startedAt-t.startedAt)});constructor(){let e=null,t=()=>{e===null&&(e=setInterval(()=>{typeof document<"u"&&document.visibilityState==="visible"&&this.resource.refetch()},de))},n=()=>{e!==null&&(clearInterval(e),e=null)},l=()=>{typeof document>"u"||document.visibilityState==="visible"&&this.resource.refetch()};t(),typeof document<"u"&&document.addEventListener("visibilitychange",l),this.destroyRef.onDestroy(()=>{n(),typeof document<"u"&&document.removeEventListener("visibilitychange",l)}),E(()=>{!this.resource.state().loading&&this.localRefreshing()&&this.localRefreshing.set(!1)})}async forceRefresh(){this.localRefreshing.set(!0),await this.refresh.triggerGlobalRefresh()}adapt(e){let t=(e.total_input_tokens||0)+(e.total_cache_creation_tokens||0)+(e.total_cache_read_tokens||0);return{id:(e.id||"").slice(0,8),fullId:e.id,project:(e.project_path||"").split("/").filter(Boolean).pop()||"?",startedAt:e.started_at||0,started:this.fmtTime(e.started_at),ended:this.fmtTime(e.ended_at).split(" ").pop()||"",prompts:e.prompt_count||0,cost:e.total_cost_usd||0,cache:t>0?(e.total_cache_read_tokens||0)/t:0,model:e.last_model||"unknown"}}fmtTime(e){if(!e)return"";try{let t=new Date(e),n=new Date;n.setHours(0,0,0,0);let l=864e5,p=n.getTime()-new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),_=t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});return p===0?"Today "+_:p===l?"Yest "+_:t.toLocaleDateString([],{month:"short",day:"numeric"})+" "+_}catch{return String(e)}}setSort(e){this.sort.set(e)}setRange(e){this.range.set(e)}cacheColor(e){return e>=.7?"var(--success)":e>=.5?"var(--warn)":"var(--error)"}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=P({type:i,selectors:[["app-sessions"]],decls:35,vars:18,consts:[[1,"page"],[2,"padding","16px 18px 12px"],["icon","sessions","title","Sessions",3,"sub"],["actions",""],["type","button","title","Force refresh: sync the index + re-ingest Claude Code transcripts","aria-label","Refresh sessions",1,"btn","btn-secondary","btn-sm","refresh-btn",3,"click","disabled"],["name","refresh",3,"size"],[1,"filter-bar",2,"padding","0 18px 12px"],["name","filter",2,"color","var(--text-muted)",3,"size"],[1,"input",2,"font-size","12px","padding","4px 8px"],[1,"grow"],[2,"color","var(--warn)","font-size","11.5px","cursor","help",3,"title"],[1,"muted",2,"font-size","11.5px"],["size","sm",3,"change","value","options"],[1,"scroll-y",2,"flex","1","padding","0 18px 18px"],[1,"card",2,"overflow","hidden"],[1,"row",2,"padding","8px 14px","font-size","10.5px","color","var(--text-muted)","text-transform","uppercase","letter-spacing","0.05em","font-weight","600","border-bottom","1px solid var(--border-subtle)"],[2,"width","90px"],[2,"width","110px"],[2,"width","70px","text-align","right"],[2,"padding","28px 18px","text-align","center","color","var(--text-secondary)","font-size","12.5px","line-height","1.5"],[1,"row",2,"padding","10px 14px","border-top","1px solid var(--border-subtle)"],[1,"skel",2,"flex","1","height","18px"],[1,"row","session-row",2,"padding","11px 14px","border-top","1px solid var(--border-subtle)","display","flex","align-items","center","gap","0","text-decoration","none","color","inherit","cursor","pointer",3,"routerLink"],[1,"mono",2,"width","90px","font-size","12px"],[1,"mono","muted","grow",2,"font-size","11.5px","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"],[1,"mono","tabular",2,"width","70px","text-align","right","font-size","12px"],[1,"mono","tabular",2,"width","70px","text-align","right","font-size","12.5px","font-weight","600"]],template:function(t,n){if(t&1&&(r(0,"div",0)(1,"div",1)(2,"app-page-head",2),T(3,3),r(4,"button",4),S("click",function(){return n.forceRefresh()}),m(5,"app-icon",5),s(6),o(),O(),o()(),r(7,"div",6),m(8,"app-icon",7),r(9,"select",8)(10,"option"),s(11,"All models"),o()(),m(12,"div",9),v(13,ie,2,1,"span",10),r(14,"span",11),s(15,"sort"),o(),r(16,"app-segmented",12),S("change",function(p){return n.setSort(p)}),o()(),r(17,"div",13)(18,"div",14)(19,"div",15)(20,"span",16),s(21,"Session"),o(),r(22,"span",17),s(23,"Project"),o(),r(24,"span",9),s(25,"Window"),o(),r(26,"span",18),s(27,"Prompts"),o(),r(28,"span",18),s(29,"Cache"),o(),r(30,"span",18),s(31,"Cost"),o()(),v(32,oe,2,1)(33,se,2,0,"div",19)(34,le,2,0),o()()()),t&2){let l;a(2),d("sub",n.resource.state().loading?"loading\u2026":n.sorted().length+" sessions \xB7 across all projects"),a(2),I("spinning",n.localRefreshing()||n.refresh.loading()),d("disabled",n.refresh.loading()),a(),d("size",13),a(),h(" ",n.localRefreshing()||n.refresh.loading()?"Refreshing\u2026":"Refresh"," "),a(2),d("size",13),a(5),x((l=n.refresh.error())?13:-1,l),a(3),d("value",n.sort())("options",j(14,Z,u(11,K),u(12,V),u(13,X))),a(16),x(n.resource.state().loading&&n.sorted().length===0?32:n.sorted().length===0?33:34)}},dependencies:[B,J,Q,U,W,A],styles:["[_nghost-%COMP%]{display:contents}.page[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0}.filter-bar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.card[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:var(--r-lg)}.row[_ngcontent-%COMP%]{display:flex;align-items:center}.session-row[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.session-row[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.skel[_ngcontent-%COMP%]{background:var(--bg-elevated);border-radius:5px;animation:_ngcontent-%COMP%_skeleton 1.4s ease-in-out infinite}@keyframes _ngcontent-%COMP%_skeleton{0%,to{opacity:.5}50%{opacity:.9}}.refresh-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px}.refresh-btn.spinning[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_spin .9s linear infinite;color:var(--accent)}.refresh-btn[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.8}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"],changeDetection:0})};export{q as Sessions};
1
+ import{a as W}from"./chunk-X2HTISHL.js";import{a as Q}from"./chunk-UYC52MBC.js";import{a as U}from"./chunk-SUZYBYDW.js";import{d as B}from"./chunk-SHPTC4RL.js";import{b as Y,c as G}from"./chunk-GR72OOCN.js";import{a as H}from"./chunk-7RNS77UP.js";import{a as $}from"./chunk-E44X4RH2.js";import{Aa as m,Ea as T,Fa as O,I as c,Ia as S,Ka as C,R,Ta as D,Ua as I,Va as s,W as f,Wa as g,X as E,Xa as h,Za as z,bb as u,cb as F,ea as a,eb as j,gb as L,ib as N,ka as P,lb as w,qa as M,ra as v,sa as x,ua as k,va as y,vb as A,wa as b,xa as d,ya as r,za as o,zb as J}from"./chunk-PDN6QYGJ.js";import"./chunk-Q7L6LLAK.js";var K=()=>({value:"time",label:"Latest"}),V=()=>({value:"cost",label:"Cost"}),X=()=>({value:"prompts",label:"Prompts"}),Z=(i,e,t)=>[i,e,t],ee=()=>[0,1,2,3,4],te=i=>["/sessions",i],ne=(i,e)=>e.fullId;function ie(i,e){i&1&&(r(0,"span",10),s(1,"\u26A0 refresh failed"),o()),i&2&&d("title",e)}function re(i,e){i&1&&(r(0,"div",20),m(1,"div",21),o())}function oe(i,e){i&1&&y(0,re,2,0,"div",20,k),i&2&&b(u(0,ee))}function se(i,e){i&1&&(r(0,"div",19),s(1," No sessions in this range. Either nothing's been logged yet, or the JSONL ingest watcher hasn't caught up \u2014 click Refresh. "),o())}function ae(i,e){if(i&1&&(r(0,"a",22)(1,"span",23),s(2),o(),r(3,"span",17)(4,"app-pill"),s(5),o()(),r(6,"span",24),s(7),o(),r(8,"span",25),s(9),o(),r(10,"span",25),s(11),L(12,"number"),o(),r(13,"span",26),s(14),o()()),i&2){let t=e.$implicit,n=C(2);d("routerLink",F(15,te,t.fullId)),M("aria-label","Open session "+t.id),a(2),g(t.id),a(3),g(t.project),a(2),z(" ",t.started," \u2013 ",t.ended," \xB7 ",t.model," "),a(2),g(t.prompts),a(),D("color",n.cacheColor(t.cache)),a(),h(" ",N(12,12,t.cache*100,"1.0-0"),"% "),a(3),h(" $",t.cost.toFixed(2)," ")}}function le(i,e){if(i&1&&y(0,ae,15,17,"a",22,ne),i&2){let t=C();b(t.sorted())}}var de=1e4,q=class i{api=c($);projects=c(H);refresh=c(Y);destroyRef=c(R);range=f("all");sort=f("time");ranges=["today","week","month","all"];localRefreshing=f(!1);resource=G(this.api,()=>`/api/claude/sessions?range=${this.range()}&limit=200${this.projects.projectQuery("&")}`);rows=w(()=>(this.resource.state().data?.sessions??[]).map(t=>this.adapt(t)));sorted=w(()=>{let e=this.sort();return[...this.rows()].sort((t,n)=>e==="cost"?n.cost-t.cost:e==="prompts"?n.prompts-t.prompts:n.startedAt-t.startedAt)});constructor(){let e=null,t=()=>{e===null&&(e=setInterval(()=>{typeof document<"u"&&document.visibilityState==="visible"&&this.resource.refetch()},de))},n=()=>{e!==null&&(clearInterval(e),e=null)},l=()=>{typeof document>"u"||document.visibilityState==="visible"&&this.resource.refetch()};t(),typeof document<"u"&&document.addEventListener("visibilitychange",l),this.destroyRef.onDestroy(()=>{n(),typeof document<"u"&&document.removeEventListener("visibilitychange",l)}),E(()=>{!this.resource.state().loading&&this.localRefreshing()&&this.localRefreshing.set(!1)})}async forceRefresh(){this.localRefreshing.set(!0),await this.refresh.triggerGlobalRefresh()}adapt(e){let t=(e.total_input_tokens||0)+(e.total_cache_creation_tokens||0)+(e.total_cache_read_tokens||0);return{id:(e.id||"").slice(0,8),fullId:e.id,project:(e.project_path||"").split("/").filter(Boolean).pop()||"?",startedAt:e.started_at||0,started:this.fmtTime(e.started_at),ended:this.fmtTime(e.ended_at).split(" ").pop()||"",prompts:e.prompt_count||0,cost:e.total_cost_usd||0,cache:t>0?(e.total_cache_read_tokens||0)/t:0,model:e.last_model||"unknown"}}fmtTime(e){if(!e)return"";try{let t=new Date(e),n=new Date;n.setHours(0,0,0,0);let l=864e5,p=n.getTime()-new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),_=t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});return p===0?"Today "+_:p===l?"Yest "+_:t.toLocaleDateString([],{month:"short",day:"numeric"})+" "+_}catch{return String(e)}}setSort(e){this.sort.set(e)}setRange(e){this.range.set(e)}cacheColor(e){return e>=.7?"var(--success)":e>=.5?"var(--warn)":"var(--error)"}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=P({type:i,selectors:[["app-sessions"]],decls:35,vars:18,consts:[[1,"page"],[2,"padding","16px 18px 12px"],["icon","sessions","title","Sessions",3,"sub"],["actions",""],["type","button","title","Force refresh: sync the index + re-ingest Claude Code transcripts","aria-label","Refresh sessions",1,"btn","btn-secondary","btn-sm","refresh-btn",3,"click","disabled"],["name","refresh",3,"size"],[1,"filter-bar",2,"padding","0 18px 12px"],["name","filter",2,"color","var(--text-muted)",3,"size"],[1,"input",2,"font-size","12px","padding","4px 8px"],[1,"grow"],[2,"color","var(--warn)","font-size","11.5px","cursor","help",3,"title"],[1,"muted",2,"font-size","11.5px"],["size","sm",3,"change","value","options"],[1,"scroll-y",2,"flex","1","padding","0 18px 18px"],[1,"card",2,"overflow","hidden"],[1,"row",2,"padding","8px 14px","font-size","10.5px","color","var(--text-muted)","text-transform","uppercase","letter-spacing","0.05em","font-weight","600","border-bottom","1px solid var(--border-subtle)"],[2,"width","90px"],[2,"width","110px"],[2,"width","70px","text-align","right"],[2,"padding","28px 18px","text-align","center","color","var(--text-secondary)","font-size","12.5px","line-height","1.5"],[1,"row",2,"padding","10px 14px","border-top","1px solid var(--border-subtle)"],[1,"skel",2,"flex","1","height","18px"],[1,"row","session-row",2,"padding","11px 14px","border-top","1px solid var(--border-subtle)","display","flex","align-items","center","gap","0","text-decoration","none","color","inherit","cursor","pointer",3,"routerLink"],[1,"mono",2,"width","90px","font-size","12px"],[1,"mono","muted","grow",2,"font-size","11.5px","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"],[1,"mono","tabular",2,"width","70px","text-align","right","font-size","12px"],[1,"mono","tabular",2,"width","70px","text-align","right","font-size","12.5px","font-weight","600"]],template:function(t,n){if(t&1&&(r(0,"div",0)(1,"div",1)(2,"app-page-head",2),T(3,3),r(4,"button",4),S("click",function(){return n.forceRefresh()}),m(5,"app-icon",5),s(6),o(),O(),o()(),r(7,"div",6),m(8,"app-icon",7),r(9,"select",8)(10,"option"),s(11,"All models"),o()(),m(12,"div",9),v(13,ie,2,1,"span",10),r(14,"span",11),s(15,"sort"),o(),r(16,"app-segmented",12),S("change",function(p){return n.setSort(p)}),o()(),r(17,"div",13)(18,"div",14)(19,"div",15)(20,"span",16),s(21,"Session"),o(),r(22,"span",17),s(23,"Project"),o(),r(24,"span",9),s(25,"Window"),o(),r(26,"span",18),s(27,"Prompts"),o(),r(28,"span",18),s(29,"Cache"),o(),r(30,"span",18),s(31,"Cost"),o()(),v(32,oe,2,1)(33,se,2,0,"div",19)(34,le,2,0),o()()()),t&2){let l;a(2),d("sub",n.resource.state().loading?"loading\u2026":n.sorted().length+" sessions \xB7 across all projects"),a(2),I("spinning",n.localRefreshing()||n.refresh.loading()),d("disabled",n.refresh.loading()),a(),d("size",13),a(),h(" ",n.localRefreshing()||n.refresh.loading()?"Refreshing\u2026":"Refresh"," "),a(2),d("size",13),a(5),x((l=n.refresh.error())?13:-1,l),a(3),d("value",n.sort())("options",j(14,Z,u(11,K),u(12,V),u(13,X))),a(16),x(n.resource.state().loading&&n.sorted().length===0?32:n.sorted().length===0?33:34)}},dependencies:[B,J,Q,U,W,A],styles:["[_nghost-%COMP%]{display:contents}.page[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0}.filter-bar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.card[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:var(--r-lg)}.row[_ngcontent-%COMP%]{display:flex;align-items:center}.session-row[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.session-row[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.skel[_ngcontent-%COMP%]{background:var(--bg-elevated);border-radius:5px;animation:_ngcontent-%COMP%_skeleton 1.4s ease-in-out infinite}@keyframes _ngcontent-%COMP%_skeleton{0%,to{opacity:.5}50%{opacity:.9}}.refresh-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px}.refresh-btn.spinning[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_spin .9s linear infinite;color:var(--accent)}.refresh-btn[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.8}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"],changeDetection:0})};export{q as Sessions};