ai-spector 0.2.1 → 0.2.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.
- package/README.md +1 -0
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/graphify-update.d.ts +2 -0
- package/dist/commands/graphify-update.d.ts.map +1 -1
- package/dist/commands/graphify-update.js +41 -6
- package/dist/commands/graphify-update.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +30 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/graph/InMemoryGraph.d.ts.map +1 -1
- package/dist/graph/InMemoryGraph.js +4 -4
- package/dist/graph/InMemoryGraph.js.map +1 -1
- package/dist/graph/merge.d.ts.map +1 -1
- package/dist/graph/merge.js +13 -5
- package/dist/graph/merge.js.map +1 -1
- package/dist/graph/path-target-edges.d.ts +5 -0
- package/dist/graph/path-target-edges.d.ts.map +1 -0
- package/dist/graph/path-target-edges.js +9 -0
- package/dist/graph/path-target-edges.js.map +1 -0
- package/dist/graph/provenance.d.ts +20 -0
- package/dist/graph/provenance.d.ts.map +1 -0
- package/dist/graph/provenance.js +221 -0
- package/dist/graph/provenance.js.map +1 -0
- package/dist/graph/query.d.ts +1 -0
- package/dist/graph/query.d.ts.map +1 -1
- package/dist/graph/query.js +16 -3
- package/dist/graph/query.js.map +1 -1
- package/dist/graph/source-refs.d.ts +2 -0
- package/dist/graph/source-refs.d.ts.map +1 -0
- package/dist/graph/source-refs.js +30 -0
- package/dist/graph/source-refs.js.map +1 -0
- package/dist/graphify/graph-index.d.ts +28 -0
- package/dist/graphify/graph-index.d.ts.map +1 -0
- package/dist/graphify/graph-index.js +52 -0
- package/dist/graphify/graph-index.js.map +1 -0
- package/dist/graphify/sources.d.ts +22 -0
- package/dist/graphify/sources.d.ts.map +1 -1
- package/dist/graphify/sources.js +104 -4
- package/dist/graphify/sources.js.map +1 -1
- package/dist/visualize/html.d.ts.map +1 -1
- package/dist/visualize/html.js +82 -7
- package/dist/visualize/html.js.map +1 -1
- package/package.json +1 -1
- package/scaffold/.cursor/commands/_cli-failures.md +3 -3
- package/scaffold/.cursor/commands/index.md +3 -1
- package/schemas/rules.impact.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/graphify/sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/graphify/sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;AAEnF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IAC9C,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,OAAO;IACP,SAAS;IACT,SAAS;IACT,MAAM;IACN,KAAK;IACL,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,KAAK;IACL,QAAQ;IACR,KAAK;IACL,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,IAAI;IACJ,KAAK;IACL,KAAK;IACL,MAAM;IACN,SAAS;IACT,QAAQ;IACR,OAAO;IACP,IAAI;IACJ,KAAK;IACL,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,OAAO;IACP,OAAO;CACR,CAAC,CAAC;AASH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,WAAmB,EACnB,UAAkB;IAElB,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,KAAK,GAA4B,EAAE,CAAC;IAE1C,KAAK,UAAU,IAAI,CAAC,GAAW;QAC7B,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChF,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC;AAeD,gFAAgF;AAChF,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EACnB,aAAsB;IAEtB,MAAM,GAAG,GACP,aAAa,IAAI,yCAAyC,CAAC;IAC7D,OAAO,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,SAAiB;IAEjB,OAAO,CAAC,MAAM,2BAA2B,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,KAAK,OAAO,CAAC;AACjF,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,SAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC,CACpE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB,EACnB,SAAiB;IAEjB,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC,CACpE,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;AAC1C,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAmB,EACnB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACzE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAEzD,yEAAyE;AACzE,MAAM,UAAU,2BAA2B,CACzC,MAAc,EACd,MAAc,EACd,QAAgB;IAEhB,OAAO,QAAQ,KAAK,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAA6B;IAE7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAyB,EAAE,CAAC;IAErC,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB,IAAI,kBAAkB,CAAC;IAC/D,GAAG,CAAC,OAAO,CAAC,CAAC;IAEb,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,CAAC;IACT,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QACxC,GAAG,CAAC,CAAC,CAAC,CAAC;IACT,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAmB,EACnB,SAAiB;IAEjB,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAmB,EACnB,KAA2B,EAC3B,YAAgD,EAChD,KAAc;IAEd,MAAM,MAAM,GAA2B,EAAE,GAAG,YAAY,EAAE,CAAC;IAC3D,MAAM,KAAK,GAAyB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACxB,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/visualize/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;CAChC;AAMD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/visualize/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;CAChC;AAMD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAshBxE"}
|
package/dist/visualize/html.js
CHANGED
|
@@ -183,6 +183,8 @@ export function buildVisualizationHtml(payload) {
|
|
|
183
183
|
const NODE_COLORS = {
|
|
184
184
|
document: "#3b82f6",
|
|
185
185
|
file: "#38bdf8",
|
|
186
|
+
source: "#14b8a6",
|
|
187
|
+
graphify: "#2dd4bf",
|
|
186
188
|
section: "#64748b",
|
|
187
189
|
table: "#475569",
|
|
188
190
|
diagram: "#475569",
|
|
@@ -322,10 +324,12 @@ export function buildVisualizationHtml(payload) {
|
|
|
322
324
|
filtered.filter((n) => DOMAIN_TYPES.has(n.type)).map((n) => n.id),
|
|
323
325
|
);
|
|
324
326
|
const linked = domainLinkedStructureIds(domainIds);
|
|
327
|
+
const sourceLinked = domainLinkedSourceIds(domainIds);
|
|
325
328
|
return filtered.filter(
|
|
326
329
|
(n) =>
|
|
327
330
|
DOMAIN_TYPES.has(n.type) ||
|
|
328
331
|
linked.has(n.id) ||
|
|
332
|
+
sourceLinked.has(n.id) ||
|
|
329
333
|
(n.type === "document" && linked.has(n.id)),
|
|
330
334
|
);
|
|
331
335
|
}
|
|
@@ -334,6 +338,25 @@ export function buildVisualizationHtml(payload) {
|
|
|
334
338
|
return "file:" + path;
|
|
335
339
|
}
|
|
336
340
|
|
|
341
|
+
function sourceNodeId(path) {
|
|
342
|
+
return "source:" + path;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function domainLinkedSourceIds(domainIds) {
|
|
346
|
+
const linked = new Set();
|
|
347
|
+
for (const e of P.graph.edges) {
|
|
348
|
+
if (e.type !== "derivedFrom" || !domainIds.has(e.from)) {
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
if (e.to.startsWith("graphify:")) {
|
|
352
|
+
linked.add(e.to);
|
|
353
|
+
} else {
|
|
354
|
+
linked.add(sourceNodeId(e.to));
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return linked;
|
|
358
|
+
}
|
|
359
|
+
|
|
337
360
|
function buildVisData(viewMode, search) {
|
|
338
361
|
const nodes = filterNodes(viewMode, search);
|
|
339
362
|
const ids = new Set(nodes.map((n) => n.id));
|
|
@@ -343,7 +366,35 @@ export function buildVisualizationHtml(payload) {
|
|
|
343
366
|
.map((n) => n.output),
|
|
344
367
|
);
|
|
345
368
|
const fileNodes = new Map();
|
|
369
|
+
const sourceNodes = new Map();
|
|
370
|
+
const graphifyNodes = new Map();
|
|
346
371
|
for (const e of P.graph.edges) {
|
|
372
|
+
if (e.type === "derivedFrom" && ids.has(e.from)) {
|
|
373
|
+
if (e.to.startsWith("graphify:")) {
|
|
374
|
+
const gid = e.to;
|
|
375
|
+
if (!graphifyNodes.has(gid)) {
|
|
376
|
+
const label = gid.slice("graphify:".length);
|
|
377
|
+
graphifyNodes.set(gid, {
|
|
378
|
+
id: gid,
|
|
379
|
+
type: "graphify",
|
|
380
|
+
title: label,
|
|
381
|
+
graphifyId: label,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
} else {
|
|
385
|
+
const sid = sourceNodeId(e.to);
|
|
386
|
+
if (!sourceNodes.has(sid)) {
|
|
387
|
+
const base = e.to.split("/").pop() || e.to;
|
|
388
|
+
sourceNodes.set(sid, {
|
|
389
|
+
id: sid,
|
|
390
|
+
type: "source",
|
|
391
|
+
title: base,
|
|
392
|
+
output: e.to,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
347
398
|
if (e.type !== "rendersTo" || !ids.has(e.from)) {
|
|
348
399
|
continue;
|
|
349
400
|
}
|
|
@@ -370,7 +421,11 @@ export function buildVisualizationHtml(payload) {
|
|
|
370
421
|
pathToDocId.set(n.output, n.id);
|
|
371
422
|
}
|
|
372
423
|
}
|
|
373
|
-
const allNodes = nodes.concat(
|
|
424
|
+
const allNodes = nodes.concat(
|
|
425
|
+
[...fileNodes.values()],
|
|
426
|
+
[...sourceNodes.values()],
|
|
427
|
+
[...graphifyNodes.values()],
|
|
428
|
+
);
|
|
374
429
|
const allIds = new Set(allNodes.map((n) => n.id));
|
|
375
430
|
function resolveEdgeTarget(to) {
|
|
376
431
|
if (allIds.has(to)) {
|
|
@@ -383,6 +438,12 @@ export function buildVisualizationHtml(payload) {
|
|
|
383
438
|
if (fileNodes.has(fileNodeId(to))) {
|
|
384
439
|
return fileNodeId(to);
|
|
385
440
|
}
|
|
441
|
+
if (sourceNodes.has(sourceNodeId(to))) {
|
|
442
|
+
return sourceNodeId(to);
|
|
443
|
+
}
|
|
444
|
+
if (graphifyNodes.has(to)) {
|
|
445
|
+
return to;
|
|
446
|
+
}
|
|
386
447
|
return null;
|
|
387
448
|
}
|
|
388
449
|
const visNodes = allNodes.map((n) => ({
|
|
@@ -391,8 +452,8 @@ export function buildVisualizationHtml(payload) {
|
|
|
391
452
|
title: "<pre style=\\"margin:0;font-size:11px\\">" + escapeHtml(JSON.stringify(n, null, 2)) + "</pre>",
|
|
392
453
|
color: NODE_COLORS[n.type] || "#94a3b8",
|
|
393
454
|
font: { color: "#e7ecf3", size: 11 },
|
|
394
|
-
shape: n.type === "document" || n.type === "file" ? "box" : "dot",
|
|
395
|
-
size: n.type === "section" ? 10 : STRUCTURE.has(n.type) ? 12 : n.type === "file" ? 14 : 18,
|
|
455
|
+
shape: n.type === "document" || n.type === "file" || n.type === "source" || n.type === "graphify" ? "box" : "dot",
|
|
456
|
+
size: n.type === "section" ? 10 : STRUCTURE.has(n.type) ? 12 : n.type === "file" || n.type === "source" || n.type === "graphify" ? 14 : 18,
|
|
396
457
|
}));
|
|
397
458
|
const visEdges = P.graph.edges
|
|
398
459
|
.map((e) => ({ e, to: resolveEdgeTarget(e.to) }))
|
|
@@ -403,7 +464,10 @@ export function buildVisualizationHtml(payload) {
|
|
|
403
464
|
to,
|
|
404
465
|
label: e.type,
|
|
405
466
|
font: { size: 9, color: "#8b9cb3", strokeWidth: 0 },
|
|
406
|
-
color: {
|
|
467
|
+
color: {
|
|
468
|
+
color: e.type === "derivedFrom" ? "#14b8a6" : "#4b5563",
|
|
469
|
+
highlight: e.type === "derivedFrom" ? "#2dd4bf" : "#60a5fa",
|
|
470
|
+
},
|
|
407
471
|
arrows: "to",
|
|
408
472
|
}));
|
|
409
473
|
return { nodes: new vis.DataSet(visNodes), edges: new vis.DataSet(visEdges) };
|
|
@@ -438,9 +502,20 @@ export function buildVisualizationHtml(payload) {
|
|
|
438
502
|
P.graph.nodes.find((n) => n.id === id) ||
|
|
439
503
|
(id.startsWith("file:")
|
|
440
504
|
? { id, type: "file", output: id.slice(5) }
|
|
441
|
-
:
|
|
442
|
-
|
|
443
|
-
|
|
505
|
+
: id.startsWith("source:")
|
|
506
|
+
? { id, type: "source", output: id.slice(7) }
|
|
507
|
+
: id.startsWith("graphify:")
|
|
508
|
+
? { id, type: "graphify", graphifyId: id.slice(9) }
|
|
509
|
+
: null);
|
|
510
|
+
const pathTail = id.startsWith("file:") ? id.slice(5) : id.startsWith("source:") ? id.slice(7) : null;
|
|
511
|
+
const out = P.graph.edges.filter(
|
|
512
|
+
(e) => e.from === id || (pathTail && (e.to === pathTail || e.to === id)),
|
|
513
|
+
);
|
|
514
|
+
const inc = P.graph.edges.filter(
|
|
515
|
+
(e) =>
|
|
516
|
+
e.to === id ||
|
|
517
|
+
(pathTail && (e.type === "rendersTo" || e.type === "derivedFrom") && e.to === pathTail),
|
|
518
|
+
);
|
|
444
519
|
detail.textContent =
|
|
445
520
|
JSON.stringify(node, null, 2) +
|
|
446
521
|
"\\n\\n--- outgoing (" + out.length + ") ---\\n" +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/visualize/html.ts"],"names":[],"mappings":"AAaA,SAAS,mBAAmB,CAAC,IAAa;IACxC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAyB;IAC9D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE9C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDA4KwC,QAAQ
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/visualize/html.ts"],"names":[],"mappings":"AAaA,SAAS,mBAAmB,CAAC,IAAa;IACxC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAyB;IAC9D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE9C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDA4KwC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsWjD,CAAC;AACT,CAAC"}
|
package/package.json
CHANGED
|
@@ -100,10 +100,10 @@ When any `ai-spector` command **fails** (non-zero exit, throws, or empty/invalid
|
|
|
100
100
|
- **Means:** Agent used `graphify update <path> --graph <file>`. The `update` subcommand does **not** accept `--graph` (only `query`, `explain`, `path`, `cluster-only` do).
|
|
101
101
|
- **Fix:** Run **`ai-spector graphify update`** (sets absolute `GRAPHIFY_OUT` and project-root cwd). Do not pass `--graph` on `update`.
|
|
102
102
|
|
|
103
|
-
### `graphify update` — `No code files found` (exit 1) on
|
|
103
|
+
### `graphify update` — `No code files found` (exit 1) on `docs/srs` / `docs/basic-design`
|
|
104
104
|
|
|
105
|
-
- **Means:**
|
|
106
|
-
- **Fix:** **`ai-spector index`** / **`ai-spector graphify update`** skip empty sources automatically.
|
|
105
|
+
- **Means:** Those paths are empty or markdown-only; Graphify `update` AST-indexes **code** extensions (`.py`, `.ts`, `.js`, …), not SRS markdown alone.
|
|
106
|
+
- **Fix:** **`ai-spector index`** / **`ai-spector graphify update`** skip empty and markdown-only sources automatically (success, not failure). Use **`docs/data-source`** for code Graphify indexing; SRS/basic-design semantics come from index doc-extract, not `graphify update`.
|
|
107
107
|
|
|
108
108
|
### `graphify update` — output under `docs/data-source/.ai-spector/...`
|
|
109
109
|
|
|
@@ -31,7 +31,9 @@ After **`/generate-srs`** (recommended):
|
|
|
31
31
|
ai-spector index
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Index steps (default): registry/bootstrap → knowledge merge → **SRS/docs body extract** → Graphify (changed paths only) → validate → doc indexes.
|
|
34
|
+
Index steps (default): registry/bootstrap → knowledge merge → **SRS/docs body extract** → Graphify (changed paths only) → **data-source provenance (`derivedFrom`)** → validate → doc indexes.
|
|
35
|
+
|
|
36
|
+
**Provenance:** UC/F/requirement/actor nodes get **`derivedFrom`** edges to `docs/data-source/**` paths (from `knowledge.json` source fields, SRS detail `Source:` lines, or inline path mentions) and optionally **`graphify:<nodeId>`** when Graphify `graph.json` matches a single symbol in that file. No evidence → no edge.
|
|
35
37
|
|
|
36
38
|
Flags:
|
|
37
39
|
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
"satisfies": { "direction": "in", "depth": 1 },
|
|
8
8
|
"dependsOn": { "direction": "out", "depth": "unbounded" },
|
|
9
9
|
"definedIn": { "direction": "in", "depth": 1 },
|
|
10
|
-
"listedIn": { "direction": "in", "depth": 1 }
|
|
10
|
+
"listedIn": { "direction": "in", "depth": 1 },
|
|
11
|
+
"derivedFrom": { "direction": "out", "depth": 1 }
|
|
11
12
|
},
|
|
12
13
|
"buckets": {
|
|
13
14
|
"regenerate": ["section", "document"],
|