ai-spector 0.7.0 → 0.7.2

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 (98) hide show
  1. package/dist/core/graph/InMemoryGraph.d.ts +20 -1
  2. package/dist/core/graph/InMemoryGraph.d.ts.map +1 -1
  3. package/dist/core/graph/InMemoryGraph.js +238 -1
  4. package/dist/core/graph/InMemoryGraph.js.map +1 -1
  5. package/dist/core/graph/config.d.ts +18 -0
  6. package/dist/core/graph/config.d.ts.map +1 -0
  7. package/dist/core/graph/config.js +30 -0
  8. package/dist/core/graph/config.js.map +1 -0
  9. package/dist/core/graph/expand-path-nodes.d.ts +28 -0
  10. package/dist/core/graph/expand-path-nodes.d.ts.map +1 -0
  11. package/dist/core/graph/expand-path-nodes.js +84 -0
  12. package/dist/core/graph/expand-path-nodes.js.map +1 -0
  13. package/dist/core/graph/health.d.ts +18 -0
  14. package/dist/core/graph/health.d.ts.map +1 -0
  15. package/dist/core/graph/health.js +45 -0
  16. package/dist/core/graph/health.js.map +1 -0
  17. package/dist/core/graph/impact.d.ts +52 -3
  18. package/dist/core/graph/impact.d.ts.map +1 -1
  19. package/dist/core/graph/impact.js +199 -2
  20. package/dist/core/graph/impact.js.map +1 -1
  21. package/dist/core/graph/index.d.ts +34 -0
  22. package/dist/core/graph/index.d.ts.map +1 -0
  23. package/dist/core/graph/index.js +18 -0
  24. package/dist/core/graph/index.js.map +1 -0
  25. package/dist/core/graph/knowledge.d.ts +80 -3
  26. package/dist/core/graph/knowledge.d.ts.map +1 -1
  27. package/dist/core/graph/knowledge.js +84 -1
  28. package/dist/core/graph/knowledge.js.map +1 -1
  29. package/dist/core/graph/layer-audit.d.ts +62 -3
  30. package/dist/core/graph/layer-audit.d.ts.map +1 -1
  31. package/dist/core/graph/layer-audit.js +239 -21
  32. package/dist/core/graph/layer-audit.js.map +1 -1
  33. package/dist/core/graph/patch.d.ts +22 -0
  34. package/dist/core/graph/patch.d.ts.map +1 -0
  35. package/dist/core/graph/patch.js +62 -0
  36. package/dist/core/graph/patch.js.map +1 -0
  37. package/dist/core/graph/path-target-edges.d.ts +4 -1
  38. package/dist/core/graph/path-target-edges.d.ts.map +1 -1
  39. package/dist/core/graph/path-target-edges.js +8 -1
  40. package/dist/core/graph/path-target-edges.js.map +1 -1
  41. package/dist/core/graph/project.d.ts +77 -0
  42. package/dist/core/graph/project.d.ts.map +1 -0
  43. package/dist/core/graph/project.js +147 -0
  44. package/dist/core/graph/project.js.map +1 -0
  45. package/dist/core/graph/query.d.ts +18 -2
  46. package/dist/core/graph/query.d.ts.map +1 -1
  47. package/dist/core/graph/query.js +147 -1
  48. package/dist/core/graph/query.js.map +1 -1
  49. package/dist/core/graph/registry.d.ts +37 -0
  50. package/dist/core/graph/registry.d.ts.map +1 -0
  51. package/dist/core/graph/registry.js +51 -0
  52. package/dist/core/graph/registry.js.map +1 -0
  53. package/dist/core/graph/resolve.d.ts +30 -3
  54. package/dist/core/graph/resolve.d.ts.map +1 -1
  55. package/dist/core/graph/resolve.js +238 -4
  56. package/dist/core/graph/resolve.js.map +1 -1
  57. package/dist/core/graph/rules/default-impact.json +24 -0
  58. package/dist/core/graph/session.d.ts +34 -0
  59. package/dist/core/graph/session.d.ts.map +1 -0
  60. package/dist/core/graph/session.js +64 -0
  61. package/dist/core/graph/session.js.map +1 -0
  62. package/dist/core/graph/state.d.ts +21 -0
  63. package/dist/core/graph/state.d.ts.map +1 -0
  64. package/dist/core/graph/state.js +20 -0
  65. package/dist/core/graph/state.js.map +1 -0
  66. package/dist/core/graph/stats.d.ts +10 -0
  67. package/dist/core/graph/stats.d.ts.map +1 -0
  68. package/dist/core/graph/stats.js +23 -0
  69. package/dist/core/graph/stats.js.map +1 -0
  70. package/dist/core/graph/translation-queue.d.ts +111 -0
  71. package/dist/core/graph/translation-queue.d.ts.map +1 -0
  72. package/dist/core/graph/translation-queue.js +109 -0
  73. package/dist/core/graph/translation-queue.js.map +1 -0
  74. package/dist/core/operations/cocoindex.d.ts +1 -1
  75. package/dist/core/operations/cocoindex.d.ts.map +1 -1
  76. package/dist/core/operations/graph-impact.d.ts +1 -1
  77. package/dist/core/operations/graph-impact.d.ts.map +1 -1
  78. package/dist/core/operations/graph-query.d.ts +1 -1
  79. package/dist/core/operations/graph-query.d.ts.map +1 -1
  80. package/dist/core/operations/graph-report.d.ts +2 -3
  81. package/dist/core/operations/graph-report.d.ts.map +1 -1
  82. package/dist/core/operations/graph-report.js +22 -1
  83. package/dist/core/operations/graph-report.js.map +1 -1
  84. package/dist/core/visualize/stats.d.ts +3 -3
  85. package/dist/core/visualize/stats.d.ts.map +1 -1
  86. package/dist/core/visualize/stats.js +2 -2
  87. package/dist/core/visualize/stats.js.map +1 -1
  88. package/dist/interfaces/cli/format/graph.d.ts +1 -1
  89. package/dist/interfaces/cli/format/graph.d.ts.map +1 -1
  90. package/dist/interfaces/mcp/schemas.d.ts +2 -2
  91. package/dist/interfaces/sdk/index.d.ts +2 -2
  92. package/dist/interfaces/sdk/index.d.ts.map +1 -1
  93. package/dist/interfaces/sdk/index.js +2 -2
  94. package/dist/interfaces/sdk/index.js.map +1 -1
  95. package/package.json +3 -7
  96. package/scaffold/cursor/skills/ai-spector-setup/SKILL.md +16 -9
  97. package/scaffold/cursor/skills/ai-spector-setup/references/cli-setup.md +66 -0
  98. package/scaffold/cursor/skills/ai-spector-setup/references/runbook.md +74 -20
@@ -1,6 +1,203 @@
1
1
  import { readJson } from "../util/fs.js";
2
- import { parseImpactRules, } from "ai-spector-graph";
3
- export { computeImpact, mergeImpactResults, parseImpactRules, DEFAULT_IMPACT_RULES, } from "ai-spector-graph";
2
+ import { projectionPathForNode } from "./query.js";
3
+ import { createRequire } from "module";
4
+ const _require = createRequire(import.meta.url);
5
+ const defaultImpactRules = _require("./rules/default-impact.json");
6
+ function maxDepth(d) {
7
+ return d === "unbounded" ? 10_000 : d;
8
+ }
9
+ function runBfs(g, seeds, rules, globalSeen, maxNodes) {
10
+ const provenance = new Map();
11
+ const queue = seeds.map((id) => ({ id, depth: 0 }));
12
+ const cap = maxNodes;
13
+ let capped = false;
14
+ while (queue.length > 0) {
15
+ const { id: current, depth } = queue.shift();
16
+ if (depth >= cap) {
17
+ capped = true;
18
+ continue;
19
+ }
20
+ for (const [edgeType, rule] of Object.entries(rules)) {
21
+ const limit = maxDepth(rule.depth);
22
+ if (depth >= limit)
23
+ continue;
24
+ if (rule.direction === "out") {
25
+ for (const e of g.outEdges.get(current) ?? []) {
26
+ if (e.type !== edgeType || globalSeen.has(e.to))
27
+ continue;
28
+ globalSeen.add(e.to);
29
+ provenance.set(e.to, { fromId: current, edgeType });
30
+ queue.push({ id: e.to, depth: depth + 1 });
31
+ }
32
+ }
33
+ else {
34
+ for (const e of g.inEdges.get(current) ?? []) {
35
+ if (e.type !== edgeType || globalSeen.has(e.from))
36
+ continue;
37
+ globalSeen.add(e.from);
38
+ provenance.set(e.from, { fromId: current, edgeType });
39
+ queue.push({ id: e.from, depth: depth + 1 });
40
+ }
41
+ }
42
+ }
43
+ }
44
+ return { provenance, capped };
45
+ }
46
+ function makeEntry(g, id, prov) {
47
+ const node = g.nodesById.get(id);
48
+ return {
49
+ id,
50
+ type: node.type,
51
+ reason: `${prov.edgeType} from ${prov.fromId}`,
52
+ projectionPath: projectionPathForNode(g, id),
53
+ };
54
+ }
55
+ export function parseImpactRules(json) {
56
+ const raw = json;
57
+ if (raw.version !== 2) {
58
+ throw new Error(`rules.impact.json version ${raw.version ?? "unknown"} is not supported. Expected version 2.`);
59
+ }
60
+ return json;
61
+ }
62
+ export const DEFAULT_IMPACT_RULES = parseImpactRules(defaultImpactRules);
63
+ export function computeImpact(g, originId, change, rules) {
64
+ const origin = g.nodesById.get(originId);
65
+ if (!origin)
66
+ throw new Error(`Unknown node: ${originId}`);
67
+ const result = {
68
+ origin: { id: originId, type: origin.type, change },
69
+ regenerate: [],
70
+ review: [],
71
+ affectedOutputPaths: [],
72
+ };
73
+ const regenerateTypes = new Set(rules.buckets.regenerate);
74
+ const reviewTypes = new Set(rules.buckets.review);
75
+ const globalSeen = new Set([originId]);
76
+ let truncated = false;
77
+ const maxNodes = rules.maxNodes ?? 500;
78
+ const { provenance: p1, capped: c1 } = runBfs(g, [originId], rules.pass1_expand, globalSeen, maxNodes);
79
+ if (c1)
80
+ truncated = true;
81
+ const domainSeeds = [];
82
+ for (const [id, prov] of p1) {
83
+ const node = g.nodesById.get(id);
84
+ if (!node)
85
+ continue;
86
+ if (regenerateTypes.has(node.type)) {
87
+ result.regenerate.push(makeEntry(g, id, prov));
88
+ }
89
+ else if (reviewTypes.has(node.type)) {
90
+ result.review.push(makeEntry(g, id, prov));
91
+ domainSeeds.push(id);
92
+ }
93
+ }
94
+ if (reviewTypes.has(origin.type)) {
95
+ domainSeeds.push(originId);
96
+ }
97
+ if (domainSeeds.length > 0) {
98
+ const { provenance: p2, capped: c2 } = runBfs(g, domainSeeds, rules.pass2_downstream, globalSeen, maxNodes);
99
+ if (c2)
100
+ truncated = true;
101
+ for (const [id, prov] of p2) {
102
+ const node = g.nodesById.get(id);
103
+ if (!node)
104
+ continue;
105
+ if (regenerateTypes.has(node.type)) {
106
+ result.regenerate.push(makeEntry(g, id, prov));
107
+ }
108
+ else if (reviewTypes.has(node.type)) {
109
+ result.review.push(makeEntry(g, id, prov));
110
+ }
111
+ }
112
+ }
113
+ if (truncated)
114
+ result.truncated = true;
115
+ result.regenerate.sort((a, b) => a.id.localeCompare(b.id));
116
+ result.review.sort((a, b) => a.id.localeCompare(b.id));
117
+ for (const entry of result.regenerate) {
118
+ for (const e of g.outEdges.get(entry.id) ?? []) {
119
+ if (e.type === "rendersTo")
120
+ result.affectedOutputPaths.push(e.to);
121
+ }
122
+ }
123
+ result.affectedOutputPaths.sort();
124
+ const affectedDocIds = new Set(result.regenerate.filter((e) => g.nodesById.get(e.id)?.type === "document").map((e) => e.id));
125
+ if (origin.type === "document")
126
+ affectedDocIds.add(originId);
127
+ const staleTranslations = [];
128
+ for (const docId of affectedDocIds) {
129
+ for (const e of g.inEdges.get(docId) ?? []) {
130
+ if (e.type !== "translationOf")
131
+ continue;
132
+ const n = g.nodesById.get(e.from);
133
+ if (!n)
134
+ continue;
135
+ staleTranslations.push({
136
+ id: e.from,
137
+ type: n.type,
138
+ reason: `translationOf ${docId}`,
139
+ projectionPath: projectionPathForNode(g, e.from),
140
+ });
141
+ }
142
+ }
143
+ if (staleTranslations.length > 0) {
144
+ staleTranslations.sort((a, b) => a.id.localeCompare(b.id));
145
+ result.staleTranslations = staleTranslations;
146
+ }
147
+ return result;
148
+ }
149
+ export function mergeImpactResults(results, gitSeeds) {
150
+ if (results.length === 0)
151
+ throw new Error("mergeImpactResults requires at least one result");
152
+ if (results.length === 1) {
153
+ const single = { ...results[0] };
154
+ if (gitSeeds?.length)
155
+ single.gitSeeds = gitSeeds;
156
+ return single;
157
+ }
158
+ const merged = {
159
+ origin: {
160
+ id: results.map((r) => r.origin.id).join(","),
161
+ type: "multi",
162
+ change: results[0].origin.change,
163
+ },
164
+ regenerate: [],
165
+ review: [],
166
+ affectedOutputPaths: [],
167
+ gitSeeds: gitSeeds ??
168
+ results.map((r) => ({
169
+ id: r.origin.id,
170
+ type: r.origin.type,
171
+ reason: r.resolvedFrom?.reason ?? "git diff seed",
172
+ })),
173
+ };
174
+ if (results.some((r) => r.truncated))
175
+ merged.truncated = true;
176
+ const seen = new Set();
177
+ for (const key of ["regenerate", "review"]) {
178
+ for (const r of results) {
179
+ for (const e of r[key]) {
180
+ const dk = `${key}:${e.id}`;
181
+ if (seen.has(dk))
182
+ continue;
183
+ seen.add(dk);
184
+ merged[key].push(e);
185
+ }
186
+ }
187
+ merged[key].sort((a, b) => a.id.localeCompare(b.id));
188
+ }
189
+ const pathSeen = new Set();
190
+ for (const r of results) {
191
+ for (const p of r.affectedOutputPaths) {
192
+ if (!pathSeen.has(p)) {
193
+ pathSeen.add(p);
194
+ merged.affectedOutputPaths.push(p);
195
+ }
196
+ }
197
+ }
198
+ merged.affectedOutputPaths.sort();
199
+ return merged;
200
+ }
4
201
  export async function loadImpactRules(path) {
5
202
  return parseImpactRules(await readJson(path));
6
203
  }
@@ -1 +1 @@
1
- {"version":3,"file":"impact.js","sourceRoot":"","sources":["../../../src/core/graph/impact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,OAAO,gBAAgB,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"impact.js","sourceRoot":"","sources":["../../../src/core/graph/impact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export { GraphSession } from "./session.js";
2
+ export type { GraphSessionOptions, ResolveOriginsHints, ImpactOptions, } from "./session.js";
3
+ export { ProjectSession } from "./project.js";
4
+ export type { ProjectBundle, ProjectSessionOptions } from "./project.js";
5
+ export { isKnowledgePayload, parseKnowledge, knowledgeHasDomainEntries, computeKnowledgeStats, knowledgeGraphCoverage, } from "./knowledge.js";
6
+ export type { AnalysisKnowledge, KnowledgeActor, KnowledgeUseCase, KnowledgeFeature, KnowledgeRequirement, KnowledgeEntity, KnowledgeStats, KnowledgeCategory, KnowledgeCoverageRow, KnowledgeCoverageCategory, KnowledgeCoverageReport, } from "./knowledge.js";
7
+ export { parseSectionRegistry, findRegistryDocument, findRegistrySection, sectionHeading, sectionLabel, documentTemplate, registryDocuments, allRegistrySections, } from "./registry.js";
8
+ export type { RegistrySection, RegistryDocument, SectionRegistry, } from "./registry.js";
9
+ export { parseDocflowConfig, primaryLanguage, languageCodes, } from "./config.js";
10
+ export type { DocflowConfig, DocflowProjectPaths, LanguageConfig, } from "./config.js";
11
+ export { parseProjectState, lastIndexRunAt, lastGraphMergedAt, } from "./state.js";
12
+ export type { ProjectState, ProjectAnalysisState, ProjectIndexState, } from "./state.js";
13
+ export { auditGraphLayers, BUNDLE_SOURCE_ID, BUNDLE_BUSINESS_ID, } from "./layer-audit.js";
14
+ export type { LayerAuditLayers, LayerAuditReport, LayerAuditOptions, } from "./layer-audit.js";
15
+ export { normalizePatch, parseExtractPatch, simulatePatch, } from "./patch.js";
16
+ export type { ExtractPatch, PatchSimulationResult } from "./patch.js";
17
+ export { parseDocFilePath, resolveDocPath, jobGroupKey, parsePendingQueue, parseFailedJobs, parseResolvedJobs, parseFingerprints, parseTranslationQueueBundle, computeTranslationQueueStats, jobsForProjectionPath, linkStaleTranslationsToQueue, pendingTargetLangs, } from "./translation-queue.js";
18
+ export type { SyncDirection, FailReason, DocType, FileChangeRecord, TranslationTarget, TranslationJob, PendingQueueFile, ResolvedTranslationJob, FailedTranslationJob, FileFingerprint, FingerprintsFile, TranslationQueueBundleInput, TranslationQueueData, TranslationQueueStats, StaleTranslationLink, } from "./translation-queue.js";
19
+ export { summarizeValidation, layersNeedingWork, graphHealthSummary, } from "./health.js";
20
+ export type { GraphHealthSummary } from "./health.js";
21
+ export { InMemoryGraph } from "./InMemoryGraph.js";
22
+ export { PATH_TARGET_EDGE_TYPES, isPathTargetEdge, } from "./path-target-edges.js";
23
+ export { querySubgraph, resolveDocumentForNode, projectionPathForNode, dataSourcePathsForNode, } from "./query.js";
24
+ export type { QueryOptions, GraphQueryResult } from "./query.js";
25
+ export { computeImpact, mergeImpactResults, parseImpactRules, DEFAULT_IMPACT_RULES, } from "./impact.js";
26
+ export type { ImpactRulesFile, ImpactEntry, ImpactResult, } from "./impact.js";
27
+ export { resolveImpactOrigins, pickPrimaryImpactOrigin, findDocumentNodeIdForPath, findSectionNodeIdByAnchor, findSectionNodeIdsByHeading, findNodeIdsByText, looksLikeExplicitNodeId, globToRegExp, } from "./resolve.js";
28
+ export type { ResolveHints, ResolvedOrigin } from "./resolve.js";
29
+ export { computeGraphStats } from "./stats.js";
30
+ export type { GraphStats } from "./stats.js";
31
+ export { expandPathTargetNodes, nodesForVisualization, fileNodeId, sourceNodeId, } from "./expand-path-nodes.js";
32
+ export type { SyntheticPathNode, SyntheticNodeType, ExpandPathTargetOptions, ExpandedPathTargets, } from "./expand-path-nodes.js";
33
+ export type { NodeType, EdgeType, GraphNode, GraphEdge, TraceabilityGraph, ValidationIssue, } from "../../types.js";
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/graph/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export { GraphSession } from "./session.js";
2
+ export { ProjectSession } from "./project.js";
3
+ export { isKnowledgePayload, parseKnowledge, knowledgeHasDomainEntries, computeKnowledgeStats, knowledgeGraphCoverage, } from "./knowledge.js";
4
+ export { parseSectionRegistry, findRegistryDocument, findRegistrySection, sectionHeading, sectionLabel, documentTemplate, registryDocuments, allRegistrySections, } from "./registry.js";
5
+ export { parseDocflowConfig, primaryLanguage, languageCodes, } from "./config.js";
6
+ export { parseProjectState, lastIndexRunAt, lastGraphMergedAt, } from "./state.js";
7
+ export { auditGraphLayers, BUNDLE_SOURCE_ID, BUNDLE_BUSINESS_ID, } from "./layer-audit.js";
8
+ export { normalizePatch, parseExtractPatch, simulatePatch, } from "./patch.js";
9
+ export { parseDocFilePath, resolveDocPath, jobGroupKey, parsePendingQueue, parseFailedJobs, parseResolvedJobs, parseFingerprints, parseTranslationQueueBundle, computeTranslationQueueStats, jobsForProjectionPath, linkStaleTranslationsToQueue, pendingTargetLangs, } from "./translation-queue.js";
10
+ export { summarizeValidation, layersNeedingWork, graphHealthSummary, } from "./health.js";
11
+ export { InMemoryGraph } from "./InMemoryGraph.js";
12
+ export { PATH_TARGET_EDGE_TYPES, isPathTargetEdge, } from "./path-target-edges.js";
13
+ export { querySubgraph, resolveDocumentForNode, projectionPathForNode, dataSourcePathsForNode, } from "./query.js";
14
+ export { computeImpact, mergeImpactResults, parseImpactRules, DEFAULT_IMPACT_RULES, } from "./impact.js";
15
+ export { resolveImpactOrigins, pickPrimaryImpactOrigin, findDocumentNodeIdForPath, findSectionNodeIdByAnchor, findSectionNodeIdsByHeading, findNodeIdsByText, looksLikeExplicitNodeId, globToRegExp, } from "./resolve.js";
16
+ export { computeGraphStats } from "./stats.js";
17
+ export { expandPathTargetNodes, nodesForVisualization, fileNodeId, sourceNodeId, } from "./expand-path-nodes.js";
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAexB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAOvB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,GACd,MAAM,aAAa,CAAC;AAOrB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAOpB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAmBhC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAOrB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAC"}
@@ -1,11 +1,88 @@
1
- import type { AnalysisKnowledge } from "ai-spector-graph";
2
1
  import type { GraphEdge, GraphNode } from "../../types.js";
3
- export type { AnalysisKnowledge, KnowledgeActor, KnowledgeUseCase, KnowledgeFeature, KnowledgeRequirement, KnowledgeEntity, } from "ai-spector-graph";
4
- export { isKnowledgePayload, knowledgeHasDomainEntries, } from "ai-spector-graph";
2
+ import type { InMemoryGraph } from "./InMemoryGraph.js";
3
+ import type { NodeType } from "../../types.js";
4
+ export interface AnalysisKnowledge {
5
+ knowledgeVersion?: number;
6
+ actors?: KnowledgeActor[];
7
+ useCases?: KnowledgeUseCase[];
8
+ features?: KnowledgeFeature[];
9
+ functionalRequirements?: KnowledgeRequirement[];
10
+ nfrs?: KnowledgeRequirement[];
11
+ entities?: KnowledgeEntity[];
12
+ }
13
+ export interface KnowledgeActor {
14
+ id: string;
15
+ name?: string;
16
+ title?: string;
17
+ description?: string;
18
+ listedInSection?: string;
19
+ }
20
+ export interface KnowledgeUseCase {
21
+ id: string;
22
+ title: string;
23
+ priority?: string;
24
+ description?: string;
25
+ listedInSection?: string;
26
+ }
27
+ export interface KnowledgeFeature {
28
+ id: string;
29
+ title: string;
30
+ description?: string;
31
+ listedInSection?: string;
32
+ satisfies?: string[];
33
+ }
34
+ export interface KnowledgeRequirement {
35
+ id: string;
36
+ title: string;
37
+ description?: string;
38
+ listedInSection?: string;
39
+ tracesTo?: string[];
40
+ }
41
+ export interface KnowledgeEntity {
42
+ id: string;
43
+ name: string;
44
+ description?: string;
45
+ listedInSection?: string;
46
+ }
47
+ export interface KnowledgeStats {
48
+ present: boolean;
49
+ actors: number;
50
+ useCases: number;
51
+ features: number;
52
+ functionalRequirements: number;
53
+ nfrs: number;
54
+ entities: number;
55
+ }
56
+ export type KnowledgeCategory = "actor" | "useCase" | "feature" | "requirement" | "nfr" | "dataEntity";
57
+ export interface KnowledgeCoverageRow {
58
+ id: string;
59
+ category: KnowledgeCategory;
60
+ inGraph: boolean;
61
+ graphNodeType?: NodeType;
62
+ /** Raw knowledge fields for UI display (title, name, priority, satisfies, tracesTo, …). */
63
+ data: Record<string, unknown>;
64
+ }
65
+ export interface KnowledgeCoverageCategory {
66
+ category: KnowledgeCategory;
67
+ label: string;
68
+ total: number;
69
+ inGraph: number;
70
+ rows: KnowledgeCoverageRow[];
71
+ }
72
+ export interface KnowledgeCoverageReport {
73
+ present: boolean;
74
+ categories: KnowledgeCoverageCategory[];
75
+ }
5
76
  export interface ExtractPatch {
6
77
  version: 1;
7
78
  nodes: GraphNode[];
8
79
  edges: GraphEdge[];
9
80
  }
81
+ export declare function isKnowledgePayload(data: unknown): data is AnalysisKnowledge;
82
+ export declare function parseKnowledge(json: unknown): AnalysisKnowledge | null;
83
+ export declare function knowledgeHasDomainEntries(knowledge: AnalysisKnowledge): boolean;
84
+ export declare function computeKnowledgeStats(knowledge: AnalysisKnowledge | null): KnowledgeStats;
85
+ /** Compare knowledge.json entries against merged graph nodes (parity with graph visualize Knowledge tab). */
86
+ export declare function knowledgeGraphCoverage(knowledge: AnalysisKnowledge | null, g: InMemoryGraph): KnowledgeCoverageReport;
10
87
  export declare function knowledgeToPatch(knowledge: AnalysisKnowledge): ExtractPatch;
11
88
  //# sourceMappingURL=knowledge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../src/core/graph/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAMlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3D,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAsBD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,GAAG,YAAY,CA8D3E"}
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../src/core/graph/knowledge.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,88 @@
1
1
  import { DEFAULT_LISTED_IN } from "./defaults.js";
2
- export { isKnowledgePayload, knowledgeHasDomainEntries, } from "ai-spector-graph";
2
+ const CATEGORY_META = [
3
+ { key: "actors", category: "actor", label: "Actors" },
4
+ { key: "useCases", category: "useCase", label: "Use cases" },
5
+ { key: "features", category: "feature", label: "Features" },
6
+ { key: "functionalRequirements", category: "requirement", label: "Functional requirements" },
7
+ { key: "nfrs", category: "nfr", label: "NFRs" },
8
+ { key: "entities", category: "dataEntity", label: "Data entities" },
9
+ ];
10
+ export function isKnowledgePayload(data) {
11
+ if (!data || typeof data !== "object") {
12
+ return false;
13
+ }
14
+ const k = data;
15
+ return ("knowledgeVersion" in k ||
16
+ Array.isArray(k.useCases) ||
17
+ Array.isArray(k.features) ||
18
+ Array.isArray(k.actors));
19
+ }
20
+ export function parseKnowledge(json) {
21
+ return isKnowledgePayload(json) ? json : null;
22
+ }
23
+ export function knowledgeHasDomainEntries(knowledge) {
24
+ return ((knowledge.useCases?.length ?? 0) > 0 ||
25
+ (knowledge.features?.length ?? 0) > 0 ||
26
+ (knowledge.actors?.length ?? 0) > 0 ||
27
+ (knowledge.functionalRequirements?.length ?? 0) > 0 ||
28
+ (knowledge.nfrs?.length ?? 0) > 0 ||
29
+ (knowledge.entities?.length ?? 0) > 0);
30
+ }
31
+ export function computeKnowledgeStats(knowledge) {
32
+ if (!knowledge) {
33
+ return {
34
+ present: false,
35
+ actors: 0,
36
+ useCases: 0,
37
+ features: 0,
38
+ functionalRequirements: 0,
39
+ nfrs: 0,
40
+ entities: 0,
41
+ };
42
+ }
43
+ return {
44
+ present: knowledgeHasDomainEntries(knowledge),
45
+ actors: knowledge.actors?.length ?? 0,
46
+ useCases: knowledge.useCases?.length ?? 0,
47
+ features: knowledge.features?.length ?? 0,
48
+ functionalRequirements: knowledge.functionalRequirements?.length ?? 0,
49
+ nfrs: knowledge.nfrs?.length ?? 0,
50
+ entities: knowledge.entities?.length ?? 0,
51
+ };
52
+ }
53
+ function rowData(item) {
54
+ const { id: _id, ...rest } = item;
55
+ return rest;
56
+ }
57
+ function coverageCategory(g, label, category, items) {
58
+ const rows = (items ?? []).map((item) => {
59
+ const node = g.nodesById.get(item.id);
60
+ return {
61
+ id: item.id,
62
+ category,
63
+ inGraph: Boolean(node),
64
+ graphNodeType: node?.type,
65
+ data: rowData(item),
66
+ };
67
+ });
68
+ const inGraph = rows.filter((r) => r.inGraph).length;
69
+ return { category, label, total: rows.length, inGraph, rows };
70
+ }
71
+ /** Compare knowledge.json entries against merged graph nodes (parity with graph visualize Knowledge tab). */
72
+ export function knowledgeGraphCoverage(knowledge, g) {
73
+ if (!knowledge || !knowledgeHasDomainEntries(knowledge)) {
74
+ return { present: false, categories: [] };
75
+ }
76
+ const categories = [];
77
+ for (const { key, category, label } of CATEGORY_META) {
78
+ const items = knowledge[key];
79
+ if (!items?.length) {
80
+ continue;
81
+ }
82
+ categories.push(coverageCategory(g, label, category, items));
83
+ }
84
+ return { present: true, categories };
85
+ }
3
86
  function pickNodeFields(item, id, type) {
4
87
  const node = { id, type };
5
88
  for (const [key, value] of Object.entries(item)) {
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../../src/core/graph/knowledge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../../src/core/graph/knowledge.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,64 @@
1
- import { type LayerAuditReport } from "ai-spector-graph";
2
1
  import type { InMemoryGraph } from "./InMemoryGraph.js";
3
- export type { LayerAuditLayers, LayerAuditReport } from "ai-spector-graph";
4
- export declare function auditGraphLayers(graph: InMemoryGraph, projectRoot?: string): Promise<LayerAuditReport>;
2
+ export declare const BUNDLE_SOURCE_ID = "bundle.source";
3
+ export declare const BUNDLE_BUSINESS_ID = "bundle.business";
4
+ export interface LayerAuditLayers {
5
+ structure: {
6
+ documents: number;
7
+ sections: number;
8
+ ok: boolean;
9
+ };
10
+ specInstances: {
11
+ useCaseDocs: number;
12
+ featureDocs: number;
13
+ sections: number;
14
+ ok: boolean;
15
+ missingOnDisk: string[];
16
+ };
17
+ domain: {
18
+ useCases: number;
19
+ features: number;
20
+ actors: number;
21
+ ok: boolean;
22
+ };
23
+ sourceHub: {
24
+ bundlePresent: boolean;
25
+ sourceFiles: number;
26
+ ok: boolean;
27
+ };
28
+ businessHub: {
29
+ bundlePresent: boolean;
30
+ domainMembers: number;
31
+ ok: boolean;
32
+ };
33
+ provenance: {
34
+ derivedFrom: number;
35
+ domainsWithoutSource: string[];
36
+ ok: boolean;
37
+ };
38
+ semanticLinks: {
39
+ relatesTo: number;
40
+ domainsWithoutSemanticLinks: string[];
41
+ ok: boolean;
42
+ };
43
+ }
44
+ export interface LayerAuditReport {
45
+ layers: LayerAuditLayers;
46
+ suggestedCommand?: string;
47
+ suggestedAgentCommand?: string;
48
+ }
49
+ export interface LayerAuditOptions {
50
+ /**
51
+ * Repo-relative paths known to exist on disk (from your backend).
52
+ * Used to populate specInstances.missingOnDisk — UC detail files on disk but not in graph.
53
+ */
54
+ existingPaths?: Iterable<string>;
55
+ /**
56
+ * Override the regex used to identify UC detail files on disk.
57
+ * Defaults to /docs\/srs\/.*\/uc-\d+.*\.md$/i — projects with a different
58
+ * folder structure should supply their own pattern here.
59
+ */
60
+ ucDetailPathPattern?: RegExp;
61
+ }
62
+ /** Tri-layer health report (parity with `ai-spector graph report`). Sync, browser-safe. */
63
+ export declare function auditGraphLayers(graph: InMemoryGraph, options?: LayerAuditOptions): LayerAuditReport;
5
64
  //# sourceMappingURL=layer-audit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layer-audit.d.ts","sourceRoot":"","sources":["../../../src/core/graph/layer-audit.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAkB3E,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,aAAa,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAQ3B"}
1
+ {"version":3,"file":"layer-audit.d.ts","sourceRoot":"","sources":["../../../src/core/graph/layer-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAapD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,OAAO,CAAC;KACb,CAAC;IACF,aAAa,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,OAAO,CAAC;QACZ,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,EAAE,OAAO,CAAC;KACb,CAAC;IACF,SAAS,EAAE;QACT,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,EAAE,EAAE,OAAO,CAAC;KACb,CAAC;IACF,WAAW,EAAE;QACX,aAAa,EAAE,OAAO,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,EAAE,EAAE,OAAO,CAAC;KACb,CAAC;IACF,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,EAAE,EAAE,OAAO,CAAC;KACb,CAAC;IACF,aAAa,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,2BAA2B,EAAE,MAAM,EAAE,CAAC;QACtC,EAAE,EAAE,OAAO,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AA0LD,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,EACpB,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CAmFlB"}