ai-spector 0.1.7 → 0.1.8

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 CHANGED
@@ -30,7 +30,7 @@ Put your source files in `docs/data-source/`, open the folder in Cursor, turn on
30
30
  | **`/generate-basic-design`** | All, listed files, or request (confirm) — graph + SRS context, by waves |
31
31
  | **`/generate-detail-design`** | Detail design from the graph |
32
32
  | **`/impact`** [what changed] | Shows what to regenerate after you change something (agent resolves graph seed) |
33
- | **`/index`** (or `ai-spector index`) | Rebuild graph structure, re-merge knowledge, Graphify storage, doc indexes after manual file edits |
33
+ | **`/index`** (or `ai-spector index`) | Rebuild graph, merge knowledge, parse UC/F from SRS bodies, Graphify on changed paths, doc indexes run after `/generate-srs` |
34
34
  | **`/summary`** (optional) | Build `.ai-spector/index/*.md` doc summaries — not the same as full `/index` |
35
35
 
36
36
  **Typical path:**
@@ -145,9 +145,9 @@ npm run init:example
145
145
  | `ai-spector graph visualize [--open]` | HTML report |
146
146
  | `ai-spector graph query <id> --json` | Context for generation |
147
147
  | `ai-spector graph impact <id> --json` | Regen scope (or `--file` / `--heading` / `--git` for current diff) |
148
- | `ai-spector index` | Refresh graph + knowledge merge + Graphify + `.ai-spector/index/` (see flags below) |
148
+ | `ai-spector index` | Refresh graph + knowledge merge + SRS body extract + Graphify + `.ai-spector/index/` (see flags below) |
149
149
 
150
- **`ai-spector index` flags:** `--graph-only`, `--docs-only`, `--skip-graphify`, `--skip-docs`, `--skip-merge`, `--skip-validate`
150
+ **`ai-spector index` flags:** `--graph-only`, `--docs-only`, `--skip-graphify`, `--skip-docs`, `--skip-merge`, `--skip-doc-semantics`, `--force-graphify`, `--skip-validate`
151
151
 
152
152
  Option: `-r <path>` to point at another project root.
153
153
 
package/dist/cli.js CHANGED
@@ -45,6 +45,8 @@ program
45
45
  .option("--skip-graphify", "Skip Graphify update (code graph / graphify-index)")
46
46
  .option("--skip-docs", "Skip .ai-spector/index document indexes")
47
47
  .option("--skip-merge", "Skip merging knowledge.json into graph")
48
+ .option("--skip-doc-semantics", "Skip parsing docs/srs and docs/basic-design for UC/F/actor ids into the graph")
49
+ .option("--force-graphify", "Re-run Graphify update on all sources even when unchanged")
48
50
  .option("--skip-validate", "Skip graph validate after refresh")
49
51
  .action(async (opts, cmd) => {
50
52
  await runIndex({
@@ -54,6 +56,8 @@ program
54
56
  skipGraphify: opts.skipGraphify,
55
57
  skipDocs: opts.skipDocs,
56
58
  skipMerge: opts.skipMerge,
59
+ skipDocSemantics: opts.skipDocSemantics,
60
+ forceGraphify: opts.forceGraphify,
57
61
  skipValidate: opts.skipValidate,
58
62
  });
59
63
  });
@@ -71,11 +75,13 @@ graphify
71
75
  .command("update [path]")
72
76
  .description("Run graphify update on data-source with output under .ai-spector/.docflow/graph/graphify-out")
73
77
  .option("--keep-stale", "Do not delete docs/data-source/graphify-out if Graphify wrote it there by mistake")
78
+ .option("--force", "Re-run update on all configured sources even when content hash unchanged")
74
79
  .action(async (path, opts, cmd) => {
75
80
  await runGraphifyUpdate({
76
81
  root: projectRootOpt(cmd),
77
82
  sourcePath: path,
78
83
  removeStaleOutput: !opts.keepStale,
84
+ force: opts.force,
79
85
  });
80
86
  });
81
87
  const graph = program.command("graph").description("Traceability graph operations");
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,13 @@ export interface GraphifyUpdateOptions {
2
2
  root?: string;
3
3
  sourcePath?: string;
4
4
  removeStaleOutput?: boolean;
5
+ /** Re-run graphify update on all configured sources even when content hash unchanged */
6
+ force?: boolean;
5
7
  }
6
- export declare function runGraphifyUpdate(opts: GraphifyUpdateOptions): Promise<void>;
8
+ export interface GraphifyUpdateResult {
9
+ sourcesRun: string[];
10
+ sourcesSkipped: string[];
11
+ sourceHashes: Record<string, string>;
12
+ }
13
+ export declare function runGraphifyUpdate(opts?: GraphifyUpdateOptions): Promise<GraphifyUpdateResult>;
7
14
  //# sourceMappingURL=graphify-update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphify-update.d.ts","sourceRoot":"","sources":["../../src/commands/graphify-update.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAgDD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DlF"}
1
+ {"version":3,"file":"graphify-update.d.ts","sourceRoot":"","sources":["../../src/commands/graphify-update.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAgDD,wBAAsB,iBAAiB,CACrC,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CA2G/B"}
@@ -2,7 +2,8 @@ import { spawn } from "node:child_process";
2
2
  import { rm } from "node:fs/promises";
3
3
  import { join, resolve } from "node:path";
4
4
  import { loadDocflowConfig } from "../config/load.js";
5
- import { pathExists, readJson } from "../util/fs.js";
5
+ import { filterSourcesByHashChange, resolveGraphifySources, } from "../graphify/sources.js";
6
+ import { pathExists, readJson, writeJson } from "../util/fs.js";
6
7
  function runCommand(command, args, cwd, env) {
7
8
  return new Promise((resolvePromise, reject) => {
8
9
  const child = spawn(command, args, {
@@ -39,48 +40,85 @@ async function runGraphifyCli(args, cwd, env) {
39
40
  return { ...viaUv, command: `uv ${uvArgs.join(" ")}` };
40
41
  }
41
42
  }
42
- export async function runGraphifyUpdate(opts) {
43
+ export async function runGraphifyUpdate(opts = {}) {
43
44
  const { root: projectRoot } = await loadDocflowConfig(opts.root);
44
45
  const configPath = join(projectRoot, ".ai-spector/.docflow/config/analyze.graphify.json");
45
46
  const config = await readJson(configPath);
46
47
  const g = config.graphify ?? {};
47
- const sourceRel = opts.sourcePath ?? g.defaultDataSource ?? "docs/data-source";
48
- const sourcePath = resolve(projectRoot, sourceRel);
49
48
  const outputPath = resolve(projectRoot, g.outputPath ?? ".ai-spector/.docflow/graph/graphify-out");
50
- if (!(await pathExists(sourcePath))) {
51
- throw new Error(`Data source not found: ${sourcePath}`);
49
+ const statePath = join(projectRoot, ".ai-spector/.docflow/state.json");
50
+ const state = await readJson(statePath).catch(() => ({
51
+ version: 1,
52
+ graphify: {},
53
+ }));
54
+ const graphifyState = state.graphify ?? {};
55
+ const storedHashes = graphifyState.sourceHashes;
56
+ let specs = resolveGraphifySources(g);
57
+ if (opts.sourcePath) {
58
+ specs = [{ path: opts.sourcePath, key: opts.sourcePath }];
59
+ }
60
+ const { toRun, hashes } = await filterSourcesByHashChange(projectRoot, specs, storedHashes, opts.force === true);
61
+ const sourcesRun = [];
62
+ const sourcesSkipped = specs
63
+ .filter((s) => !toRun.some((r) => r.key === s.key))
64
+ .map((s) => s.path);
65
+ if (toRun.length === 0) {
66
+ console.log("Graphify update: all sources unchanged (use --force to re-index)");
67
+ for (const s of specs) {
68
+ console.log(` ○ ${s.path} (hash ${hashes[s.key] ?? "—"})`);
69
+ }
70
+ return { sourcesRun, sourcesSkipped, sourceHashes: hashes };
52
71
  }
53
72
  const env = {
54
73
  ...process.env,
55
74
  GRAPHIFY_OUT: outputPath,
56
75
  };
57
- console.log(`Graphify update: ${sourceRel}`);
76
+ console.log(`Graphify update (${toRun.length} source(s), ${sourcesSkipped.length} unchanged)`);
58
77
  console.log(` GRAPHIFY_OUT → ${g.outputPath ?? outputPath}`);
59
78
  console.log(" (do not pass --graph to graphify update — use GRAPHIFY_OUT instead)");
60
79
  console.log("");
61
- const result = await runGraphifyCli(["update", sourceRel], projectRoot, env);
62
- if (result.stdout.trim()) {
63
- console.log(result.stdout.trimEnd());
64
- }
65
- if (result.stderr.trim()) {
66
- console.error(result.stderr.trimEnd());
67
- }
68
- if (result.exitCode !== 0) {
69
- console.error("");
70
- console.error(`Failed: ${result.command} (exit ${result.exitCode})`);
71
- throw new Error(`graphify update failed with exit code ${result.exitCode}`);
80
+ for (const spec of toRun) {
81
+ const sourcePath = resolve(projectRoot, spec.path);
82
+ if (!(await pathExists(sourcePath))) {
83
+ console.log(` ⊘ skip ${spec.path} (not found)`);
84
+ continue;
85
+ }
86
+ console.log(` ▶ ${spec.path} (hash ${hashes[spec.key] ?? "—"})`);
87
+ const result = await runGraphifyCli(["update", spec.path], projectRoot, env);
88
+ if (result.stdout.trim()) {
89
+ console.log(result.stdout.trimEnd());
90
+ }
91
+ if (result.stderr.trim()) {
92
+ console.error(result.stderr.trimEnd());
93
+ }
94
+ if (result.exitCode !== 0) {
95
+ console.error("");
96
+ console.error(`Failed: ${result.command} (exit ${result.exitCode})`);
97
+ throw new Error(`graphify update failed for ${spec.path} (exit ${result.exitCode})`);
98
+ }
99
+ sourcesRun.push(spec.path);
72
100
  }
73
101
  const graphJson = join(outputPath, "graph.json");
74
102
  if (!(await pathExists(graphJson))) {
75
103
  throw new Error(`Expected graph.json at ${g.graphJsonPath ?? graphJson} after update — check Graphify install (graphify or uv + graphifyy)`);
76
104
  }
77
- const staleOut = join(sourcePath, "graphify-out");
105
+ const primaryRel = g.defaultDataSource ?? "docs/data-source";
106
+ const staleOut = join(resolve(projectRoot, primaryRel), "graphify-out");
78
107
  if (opts.removeStaleOutput !== false && (await pathExists(staleOut))) {
79
108
  await rm(staleOut, { recursive: true, force: true });
80
109
  console.log("");
81
- console.log(`Removed stale ${sourceRel}/graphify-out/ (wrong default location)`);
110
+ console.log(`Removed stale ${primaryRel}/graphify-out/ (wrong default location)`);
82
111
  }
112
+ graphifyState.lastRunAt = new Date().toISOString();
113
+ graphifyState.sourceHashes = hashes;
114
+ graphifyState.sourcesRun = sourcesRun;
115
+ state.graphify = graphifyState;
116
+ await writeJson(statePath, state);
83
117
  console.log("");
84
118
  console.log(`OK — ${g.graphJsonPath ?? ".ai-spector/.docflow/graph/graphify-out/graph.json"}`);
119
+ if (sourcesSkipped.length > 0) {
120
+ console.log(`Skipped (unchanged): ${sourcesSkipped.join(", ")}`);
121
+ }
122
+ return { sourcesRun, sourcesSkipped, sourceHashes: hashes };
85
123
  }
86
124
  //# sourceMappingURL=graphify-update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphify-update.js","sourceRoot":"","sources":["../../src/commands/graphify-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphify-update.js","sourceRoot":"","sources":["../../src/commands/graphify-update.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,10 @@ export interface IndexOptions {
12
12
  skipGraphify?: boolean;
13
13
  skipDocs?: boolean;
14
14
  skipMerge?: boolean;
15
+ skipDocSemantics?: boolean;
15
16
  skipValidate?: boolean;
17
+ /** Re-run Graphify on all sources even when content hash unchanged */
18
+ forceGraphify?: boolean;
16
19
  }
17
20
  export interface IndexReport {
18
21
  steps: IndexStepResult[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AA4BA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,QAAQ,CAC5B,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,WAAW,CAAC,CA+RtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAgCA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,QAAQ,CAC5B,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,WAAW,CAAC,CAkVtB"}
@@ -5,6 +5,7 @@ import { bootstrapFromRegistry } from "./bootstrap.js";
5
5
  import { validateGraph, formatIssues } from "./validate.js";
6
6
  import { runGraphMerge } from "./graph-merge.js";
7
7
  import { runGraphifyUpdate } from "./graphify-update.js";
8
+ import { knowledgeStaleWarning, runDocSemanticMerge, } from "../index/doc-semantics.js";
8
9
  import { resolveProjectPaths } from "../util/paths.js";
9
10
  import { pathExists, readJson, writeJson } from "../util/fs.js";
10
11
  import { loadDocflowConfig } from "../config/load.js";
@@ -131,14 +132,65 @@ export async function runIndex(opts = {}) {
131
132
  }
132
133
  }
133
134
  }
135
+ if (!opts.skipDocSemantics && !failed) {
136
+ try {
137
+ const docResult = await runDocSemanticMerge({
138
+ projectRoot,
139
+ graphPath: paths.graph,
140
+ });
141
+ if (docResult.merged) {
142
+ graphJson = await readJson(paths.graph);
143
+ const stale = await knowledgeStaleWarning(projectRoot, docResult.sourceHashes);
144
+ record({
145
+ id: "docs-semantic-merge",
146
+ label: "SRS/docs → graph (body extract)",
147
+ status: "ok",
148
+ detail: stale ? `${docResult.detail}\n ⚠ ${stale}` : docResult.detail,
149
+ });
150
+ }
151
+ else {
152
+ record({
153
+ id: "docs-semantic-merge",
154
+ label: "SRS/docs → graph (body extract)",
155
+ status: "skipped",
156
+ detail: docResult.detail,
157
+ });
158
+ }
159
+ }
160
+ catch (err) {
161
+ record({
162
+ id: "docs-semantic-merge",
163
+ label: "SRS/docs → graph (body extract)",
164
+ status: "failed",
165
+ detail: err instanceof Error ? err.message : String(err),
166
+ });
167
+ }
168
+ }
169
+ else if (opts.skipDocSemantics) {
170
+ record({
171
+ id: "docs-semantic-merge",
172
+ label: "SRS/docs → graph (body extract)",
173
+ status: "skipped",
174
+ detail: "--skip-doc-semantics",
175
+ });
176
+ }
134
177
  if (runGraphify && !failed) {
135
178
  try {
136
- await runGraphifyUpdate({ root: projectRoot });
179
+ const gf = await runGraphifyUpdate({
180
+ root: projectRoot,
181
+ force: opts.forceGraphify,
182
+ });
183
+ const runDetail = gf.sourcesRun.length > 0
184
+ ? `updated: ${gf.sourcesRun.join(", ")}`
185
+ : "no source changes";
186
+ const skipDetail = gf.sourcesSkipped.length > 0
187
+ ? `; unchanged: ${gf.sourcesSkipped.join(", ")}`
188
+ : "";
137
189
  record({
138
190
  id: "graphify-storage",
139
191
  label: "Graphify index & graph.json",
140
192
  status: "ok",
141
- detail: ".ai-spector/.docflow/graph/graphify-out/",
193
+ detail: `${runDetail}${skipDetail}`,
142
194
  });
143
195
  }
144
196
  catch (err) {
@@ -309,7 +361,8 @@ function printIndexSummary(steps, failed) {
309
361
  }
310
362
  else {
311
363
  console.log("All requested steps completed.");
312
- console.log("Semantic knowledge re-extract still requires /analyze in Cursor (Graphify MCP).");
364
+ console.log("Full semantic re-extract (actors, NFRs, data model) still uses /analyze + Graphify MCP → knowledge.json.");
365
+ console.log("Index merges existing knowledge plus UC/F/actor ids parsed from docs/srs and docs/basic-design bodies.");
313
366
  }
314
367
  }
315
368
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { ExtractPatch } from "./knowledge.js";
2
+ export interface DocExtractEntry {
3
+ relativePath: string;
4
+ content: string;
5
+ }
6
+ export interface DocExtractResult {
7
+ useCases: number;
8
+ features: number;
9
+ actors: number;
10
+ filesScanned: number;
11
+ }
12
+ /** Normalize UC-1 → UC-01, F-2 → F-02; leaves placeholders (UC-XX) unchanged */
13
+ export declare function normalizeDomainId(raw: string): string;
14
+ interface ParsedDomain {
15
+ useCases: Map<string, {
16
+ title?: string;
17
+ }>;
18
+ features: Map<string, {
19
+ title?: string;
20
+ }>;
21
+ actors: Map<string, {
22
+ title?: string;
23
+ }>;
24
+ satisfies: Array<{
25
+ from: string;
26
+ to: string;
27
+ }>;
28
+ }
29
+ export declare function extractDomainFromMarkdown(content: string, relativePath: string): ParsedDomain;
30
+ export declare function parsedDomainToPatch(parsed: ParsedDomain, relativePath: string): ExtractPatch;
31
+ export declare function mergeParsedDomains(domains: ParsedDomain[]): ParsedDomain;
32
+ export declare function buildDocExtractPatch(entries: DocExtractEntry[]): {
33
+ patch: ExtractPatch;
34
+ stats: DocExtractResult;
35
+ };
36
+ export {};
37
+ //# sourceMappingURL=doc-extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-extract.d.ts","sourceRoot":"","sources":["../../src/graph/doc-extract.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAWD,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAcrD;AA0BD,UAAU,YAAY;IACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxC,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAmDD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,YAAY,CA2Ed;AAUD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,GACnB,YAAY,CAsDd;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,CAexE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG;IAChE,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC;CACzB,CA2CA"}
@@ -0,0 +1,278 @@
1
+ import { DEFAULT_LISTED_IN } from "./defaults.js";
2
+ const UC_ID_RE = /\b(UC-\d+)\b/gi;
3
+ const F_ID_RE = /\b(F-\d+)\b/gi;
4
+ const USE_CASE_ID_LINE = /\*\*Use Case ID:\*\*\s*(UC-\d+)/i;
5
+ const USE_CASE_NAME_LINE = /\*\*Use Case Name:\*\*\s*(.+)/i;
6
+ const FEATURE_NAME_HEADING = /^#{1,3}\s+(F-\d+)\s*[:\-–—]\s*(.+)$/im;
7
+ const UC_HEADING = /^#{1,3}\s+(UC-\d+)\s*[:\-–—]\s*(.+)$/im;
8
+ const TABLE_ROW_UC = /^\|\s*(UC-\d+)\s*\|/im;
9
+ const TABLE_ROW_F = /^\|\s*(F-\d+)\s*\|/im;
10
+ /** Normalize UC-1 → UC-01, F-2 → F-02; leaves placeholders (UC-XX) unchanged */
11
+ export function normalizeDomainId(raw) {
12
+ const t = raw.trim();
13
+ if (/XX$/i.test(t)) {
14
+ return t;
15
+ }
16
+ const uc = t.match(/^UC-(\d+)$/i);
17
+ if (uc) {
18
+ return `UC-${uc[1].padStart(2, "0")}`;
19
+ }
20
+ const f = t.match(/^F-(\d+)$/i);
21
+ if (f) {
22
+ return `F-${f[1].padStart(2, "0")}`;
23
+ }
24
+ return t;
25
+ }
26
+ function isRealDomainId(id) {
27
+ return /^(UC|F)-\d+$/i.test(id) && !/XX$/i.test(id);
28
+ }
29
+ function listedInForPath(relativePath, kind) {
30
+ const p = relativePath.replace(/\\/g, "/").toLowerCase();
31
+ if (kind === "useCase") {
32
+ if (p.includes("use-case") || p.includes("use-cases") || /\/3-/.test(p)) {
33
+ return DEFAULT_LISTED_IN.useCase;
34
+ }
35
+ }
36
+ if (kind === "feature") {
37
+ if (p.includes("system-features") || p.includes("04-system-features") || /\/4-/.test(p)) {
38
+ return DEFAULT_LISTED_IN.feature;
39
+ }
40
+ }
41
+ if (kind === "actor") {
42
+ if (p.includes("overall-description") || /\/2-/.test(p)) {
43
+ return DEFAULT_LISTED_IN.actor;
44
+ }
45
+ }
46
+ return DEFAULT_LISTED_IN[kind];
47
+ }
48
+ function emptyParsed() {
49
+ return {
50
+ useCases: new Map(),
51
+ features: new Map(),
52
+ actors: new Map(),
53
+ satisfies: [],
54
+ };
55
+ }
56
+ function addUseCase(parsed, id, title) {
57
+ const norm = normalizeDomainId(id);
58
+ const prev = parsed.useCases.get(norm);
59
+ if (!prev?.title && title?.trim()) {
60
+ parsed.useCases.set(norm, { title: title.trim() });
61
+ }
62
+ else if (!prev) {
63
+ parsed.useCases.set(norm, { title: title?.trim() });
64
+ }
65
+ }
66
+ function addFeature(parsed, id, title) {
67
+ const norm = normalizeDomainId(id);
68
+ const prev = parsed.features.get(norm);
69
+ if (!prev?.title && title?.trim()) {
70
+ parsed.features.set(norm, { title: title.trim() });
71
+ }
72
+ else if (!prev) {
73
+ parsed.features.set(norm, { title: title?.trim() });
74
+ }
75
+ }
76
+ function parseTableSatisfies(line, parsed) {
77
+ const cells = line
78
+ .split("|")
79
+ .map((c) => c.trim())
80
+ .filter(Boolean);
81
+ if (cells.length < 2) {
82
+ return;
83
+ }
84
+ const fMatch = cells[0]?.match(/^F-(\d+)$/i);
85
+ if (!fMatch) {
86
+ return;
87
+ }
88
+ const from = normalizeDomainId(cells[0]);
89
+ for (const cell of cells.slice(1)) {
90
+ for (const m of cell.matchAll(UC_ID_RE)) {
91
+ parsed.satisfies.push({ from, to: normalizeDomainId(m[1]) });
92
+ }
93
+ }
94
+ }
95
+ export function extractDomainFromMarkdown(content, relativePath) {
96
+ const parsed = emptyParsed();
97
+ const lines = content.split(/\r?\n/);
98
+ let pendingUcId;
99
+ for (let i = 0; i < lines.length; i++) {
100
+ const line = lines[i];
101
+ const ucIdLine = line.match(USE_CASE_ID_LINE);
102
+ if (ucIdLine) {
103
+ pendingUcId = normalizeDomainId(ucIdLine[1]);
104
+ addUseCase(parsed, pendingUcId);
105
+ continue;
106
+ }
107
+ if (pendingUcId) {
108
+ const nameLine = line.match(USE_CASE_NAME_LINE);
109
+ if (nameLine) {
110
+ addUseCase(parsed, pendingUcId, nameLine[1]);
111
+ pendingUcId = undefined;
112
+ continue;
113
+ }
114
+ if (line.startsWith("### ") || line.startsWith("## ")) {
115
+ pendingUcId = undefined;
116
+ }
117
+ }
118
+ const ucHeading = line.match(UC_HEADING);
119
+ if (ucHeading) {
120
+ addUseCase(parsed, ucHeading[1], ucHeading[2]);
121
+ }
122
+ const fHeading = line.match(FEATURE_NAME_HEADING);
123
+ if (fHeading) {
124
+ addFeature(parsed, fHeading[1], fHeading[2]);
125
+ }
126
+ const ucRow = line.match(TABLE_ROW_UC);
127
+ if (ucRow) {
128
+ const cells = line.split("|").map((c) => c.trim());
129
+ const title = cells[2] || cells[1];
130
+ addUseCase(parsed, ucRow[1], title && !/^UC-/i.test(title) ? title : undefined);
131
+ }
132
+ const fRow = line.match(TABLE_ROW_F);
133
+ if (fRow) {
134
+ const cells = line.split("|").map((c) => c.trim());
135
+ const title = cells[2] || cells[1];
136
+ addFeature(parsed, fRow[1], title && !/^F-/i.test(title) ? title : undefined);
137
+ parseTableSatisfies(line, parsed);
138
+ }
139
+ else if (/^\|.*F-\d+/i.test(line) && /UC-/i.test(line)) {
140
+ parseTableSatisfies(line, parsed);
141
+ }
142
+ }
143
+ for (const m of content.matchAll(UC_ID_RE)) {
144
+ if (m[1] && isRealDomainId(m[1])) {
145
+ addUseCase(parsed, m[1]);
146
+ }
147
+ }
148
+ for (const m of content.matchAll(F_ID_RE)) {
149
+ if (m[1] && isRealDomainId(m[1])) {
150
+ addFeature(parsed, m[1]);
151
+ }
152
+ }
153
+ const actorSection = /(?:\*\*Primary Actor:\*\*|Primary Actor:)\s*\*?\*?\s*([^\n*]+)/gi;
154
+ for (const m of content.matchAll(actorSection)) {
155
+ const name = m[1]?.trim();
156
+ if (name && !/^tbd$/i.test(name) && name.length > 1) {
157
+ const id = `actor.${slugActorId(name)}`;
158
+ parsed.actors.set(id, { title: name });
159
+ }
160
+ }
161
+ return parsed;
162
+ }
163
+ function slugActorId(name) {
164
+ return name
165
+ .toLowerCase()
166
+ .replace(/[^a-z0-9]+/g, "-")
167
+ .replace(/^-|-$/g, "")
168
+ .slice(0, 48) || "unknown";
169
+ }
170
+ export function parsedDomainToPatch(parsed, relativePath) {
171
+ const nodes = [];
172
+ const edges = [];
173
+ for (const [id, meta] of parsed.useCases) {
174
+ const node = { id, type: "useCase", title: meta.title ?? id };
175
+ if (meta.title) {
176
+ node.description = meta.title;
177
+ }
178
+ nodes.push(node);
179
+ edges.push({
180
+ type: "listedIn",
181
+ from: id,
182
+ to: listedInForPath(relativePath, "useCase"),
183
+ });
184
+ }
185
+ for (const [id, meta] of parsed.features) {
186
+ const node = { id, type: "feature", title: meta.title ?? id };
187
+ nodes.push(node);
188
+ edges.push({
189
+ type: "listedIn",
190
+ from: id,
191
+ to: listedInForPath(relativePath, "feature"),
192
+ });
193
+ }
194
+ for (const [id, meta] of parsed.actors) {
195
+ nodes.push({
196
+ id,
197
+ type: "actor",
198
+ title: meta.title ?? id,
199
+ name: meta.title,
200
+ });
201
+ edges.push({
202
+ type: "describedIn",
203
+ from: id,
204
+ to: listedInForPath(relativePath, "actor"),
205
+ });
206
+ }
207
+ const seenSatisfies = new Set();
208
+ for (const { from, to } of parsed.satisfies) {
209
+ const key = `${from}->${to}`;
210
+ if (seenSatisfies.has(key)) {
211
+ continue;
212
+ }
213
+ seenSatisfies.add(key);
214
+ if (parsed.features.has(from) && parsed.useCases.has(to)) {
215
+ edges.push({ type: "satisfies", from, to });
216
+ }
217
+ }
218
+ return { version: 1, nodes, edges };
219
+ }
220
+ export function mergeParsedDomains(domains) {
221
+ const out = emptyParsed();
222
+ for (const d of domains) {
223
+ for (const [id, meta] of d.useCases) {
224
+ addUseCase(out, id, meta.title);
225
+ }
226
+ for (const [id, meta] of d.features) {
227
+ addFeature(out, id, meta.title);
228
+ }
229
+ for (const [id, meta] of d.actors) {
230
+ out.actors.set(id, meta);
231
+ }
232
+ out.satisfies.push(...d.satisfies);
233
+ }
234
+ return out;
235
+ }
236
+ export function buildDocExtractPatch(entries) {
237
+ const perFile = [];
238
+ for (const e of entries) {
239
+ perFile.push(extractDomainFromMarkdown(e.content, e.relativePath));
240
+ }
241
+ const merged = mergeParsedDomains(perFile);
242
+ const allNodes = [];
243
+ const allEdges = [];
244
+ const edgeKeys = new Set();
245
+ for (const e of entries) {
246
+ const single = extractDomainFromMarkdown(e.content, e.relativePath);
247
+ const patch = parsedDomainToPatch(single, e.relativePath);
248
+ for (const n of patch.nodes) {
249
+ if (!allNodes.some((x) => x.id === n.id && x.type === n.type)) {
250
+ allNodes.push(n);
251
+ }
252
+ else {
253
+ const idx = allNodes.findIndex((x) => x.id === n.id);
254
+ const existing = allNodes[idx];
255
+ if (!existing.title && n.title) {
256
+ allNodes[idx] = { ...existing, ...n };
257
+ }
258
+ }
259
+ }
260
+ for (const edge of patch.edges) {
261
+ const key = `${edge.type}:${edge.from}:${edge.to}`;
262
+ if (!edgeKeys.has(key)) {
263
+ edgeKeys.add(key);
264
+ allEdges.push(edge);
265
+ }
266
+ }
267
+ }
268
+ return {
269
+ patch: { version: 1, nodes: allNodes, edges: allEdges },
270
+ stats: {
271
+ useCases: merged.useCases.size,
272
+ features: merged.features.size,
273
+ actors: merged.actors.size,
274
+ filesScanned: entries.length,
275
+ },
276
+ };
277
+ }
278
+ //# sourceMappingURL=doc-extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-extract.js","sourceRoot":"","sources":["../../src/graph/doc-extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface SourceFileFingerprint {
2
+ relativePath: string;
3
+ contentHash: string;
4
+ }
5
+ export declare function discoverSourceFingerprints(projectRoot: string, sourceRoot: string): Promise<SourceFileFingerprint[]>;
6
+ export interface GraphifySourceSpec {
7
+ /** CLI path relative to project root */
8
+ path: string;
9
+ /** Key for state.graphify.sourceHashes */
10
+ key: string;
11
+ }
12
+ export interface GraphifySourcesConfig {
13
+ defaultDataSource?: string;
14
+ include?: string[];
15
+ docSources?: string[];
16
+ }
17
+ export declare function resolveGraphifySources(config: GraphifySourcesConfig): GraphifySourceSpec[];
18
+ export declare function computeSourceContentHash(projectRoot: string, sourceRel: string): Promise<string | undefined>;
19
+ export declare function filterSourcesByHashChange(projectRoot: string, specs: GraphifySourceSpec[], storedHashes: Record<string, string> | undefined, force: boolean): Promise<{
20
+ toRun: GraphifySourceSpec[];
21
+ hashes: Record<string, string>;
22
+ }>;
23
+ //# sourceMappingURL=sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/graphify/sources.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAiClC;AAED,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,qBAAqB,GAC5B,kBAAkB,EAAE,CAwBtB;AAED,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW7B;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,kBAAkB,EAAE,EAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAChD,KAAK,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAgB1E"}
@@ -0,0 +1,87 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readdir, readFile } from "node:fs/promises";
3
+ import { join, relative, resolve } from "node:path";
4
+ import { pathExists } from "../util/fs.js";
5
+ const SKIP_DIRS = new Set(["node_modules", ".git", "graphify-out", ".ai-spector"]);
6
+ export async function discoverSourceFingerprints(projectRoot, sourceRoot) {
7
+ const rootAbs = resolve(projectRoot, sourceRoot);
8
+ const files = [];
9
+ async function walk(dir) {
10
+ let entries;
11
+ try {
12
+ entries = await readdir(dir, { withFileTypes: true });
13
+ }
14
+ catch {
15
+ return;
16
+ }
17
+ for (const ent of entries) {
18
+ const abs = join(dir, ent.name);
19
+ if (ent.isDirectory()) {
20
+ if (ent.name.startsWith(".") || SKIP_DIRS.has(ent.name)) {
21
+ continue;
22
+ }
23
+ await walk(abs);
24
+ continue;
25
+ }
26
+ if (!ent.isFile()) {
27
+ continue;
28
+ }
29
+ const rel = relative(projectRoot, abs).replace(/\\/g, "/");
30
+ const raw = await readFile(abs);
31
+ const contentHash = createHash("sha256").update(raw).digest("hex").slice(0, 16);
32
+ files.push({ relativePath: rel, contentHash });
33
+ }
34
+ }
35
+ await walk(rootAbs);
36
+ files.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
37
+ return files;
38
+ }
39
+ export function resolveGraphifySources(config) {
40
+ const seen = new Set();
41
+ const out = [];
42
+ const add = (path) => {
43
+ const norm = path.replace(/\\/g, "/").replace(/\/$/, "");
44
+ if (seen.has(norm)) {
45
+ return;
46
+ }
47
+ seen.add(norm);
48
+ out.push({ path: norm, key: norm });
49
+ };
50
+ const primary = config.defaultDataSource ?? "docs/data-source";
51
+ add(primary);
52
+ for (const p of config.include ?? []) {
53
+ add(p);
54
+ }
55
+ for (const p of config.docSources ?? []) {
56
+ add(p);
57
+ }
58
+ return out;
59
+ }
60
+ export async function computeSourceContentHash(projectRoot, sourceRel) {
61
+ const abs = resolve(projectRoot, sourceRel);
62
+ if (!(await pathExists(abs))) {
63
+ return undefined;
64
+ }
65
+ const files = await discoverSourceFingerprints(projectRoot, sourceRel);
66
+ if (files.length === 0) {
67
+ return createHash("sha256").update(`empty:${sourceRel}`).digest("hex").slice(0, 16);
68
+ }
69
+ const payload = files.map((f) => `${f.relativePath}:${f.contentHash}`).join("\n");
70
+ return createHash("sha256").update(payload).digest("hex").slice(0, 16);
71
+ }
72
+ export async function filterSourcesByHashChange(projectRoot, specs, storedHashes, force) {
73
+ const hashes = { ...storedHashes };
74
+ const toRun = [];
75
+ for (const spec of specs) {
76
+ const hash = await computeSourceContentHash(projectRoot, spec.path);
77
+ if (hash === undefined) {
78
+ continue;
79
+ }
80
+ hashes[spec.key] = hash;
81
+ if (force || storedHashes?.[spec.key] !== hash) {
82
+ toRun.push(spec);
83
+ }
84
+ }
85
+ return { toRun, hashes };
86
+ }
87
+ //# sourceMappingURL=sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/graphify/sources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type IndexDocsConfig } from "./docs-config.js";
2
+ export interface DocSemanticMergeOptions {
3
+ projectRoot: string;
4
+ graphPath: string;
5
+ config?: IndexDocsConfig;
6
+ }
7
+ export interface DocSemanticMergeResult {
8
+ merged: boolean;
9
+ detail: string;
10
+ sourceHashes: Record<string, string>;
11
+ }
12
+ export declare function runDocSemanticMerge(opts: DocSemanticMergeOptions): Promise<DocSemanticMergeResult>;
13
+ export declare function knowledgeStaleWarning(projectRoot: string, docHashes: Record<string, string>): Promise<string | undefined>;
14
+ //# sourceMappingURL=doc-semantics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-semantics.d.ts","sourceRoot":"","sources":["../../src/index/doc-semantics.ts"],"names":[],"mappings":"AASA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG7E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CA2EjC;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwB7B"}
@@ -0,0 +1,86 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { mergePatch } from "../graph/merge.js";
4
+ import { loadInMemoryGraph } from "../graph/loadGraph.js";
5
+ import { buildDocExtractPatch } from "../graph/doc-extract.js";
6
+ import { computeIndexSourceHash, discoverMarkdownFiles, } from "./docs-build.js";
7
+ import { indexDocsConfigPath } from "./docs-config.js";
8
+ import { pathExists, readJson, writeJson } from "../util/fs.js";
9
+ export async function runDocSemanticMerge(opts) {
10
+ const configPath = indexDocsConfigPath(opts.projectRoot);
11
+ if (!(await pathExists(configPath))) {
12
+ return {
13
+ merged: false,
14
+ detail: `Missing ${configPath}`,
15
+ sourceHashes: {},
16
+ };
17
+ }
18
+ const config = opts.config ?? (await readJson(configPath));
19
+ const entries = [];
20
+ const sourceHashes = {};
21
+ for (const key of ["srs", "basicDesign"]) {
22
+ const source = config.sources[key];
23
+ if (!source?.root) {
24
+ continue;
25
+ }
26
+ const files = await discoverMarkdownFiles(opts.projectRoot, source.root, source.glob ?? "**/*.md");
27
+ sourceHashes[key] = computeIndexSourceHash(files);
28
+ for (const f of files) {
29
+ const content = await readFile(join(opts.projectRoot, f.relativePath), "utf8");
30
+ entries.push({ relativePath: f.relativePath, content });
31
+ }
32
+ }
33
+ if (entries.length === 0) {
34
+ return {
35
+ merged: false,
36
+ detail: "No markdown under docs/srs or docs/basic-design",
37
+ sourceHashes,
38
+ };
39
+ }
40
+ const { patch, stats } = buildDocExtractPatch(entries);
41
+ if (patch.nodes.length === 0 && patch.edges.length === 0) {
42
+ return {
43
+ merged: false,
44
+ detail: `Scanned ${stats.filesScanned} files — no UC/F/actor ids found in body text`,
45
+ sourceHashes,
46
+ };
47
+ }
48
+ const graph = await loadInMemoryGraph(opts.graphPath);
49
+ const { stats: mergeStats } = mergePatch(graph, patch);
50
+ await writeJson(opts.graphPath, graph.toTraceabilityGraph());
51
+ const statePath = join(opts.projectRoot, ".ai-spector/.docflow/state.json");
52
+ const state = await readJson(statePath).catch(() => ({
53
+ version: 1,
54
+ docsSemantic: {},
55
+ }));
56
+ const docsSemantic = state.docsSemantic ?? {};
57
+ docsSemantic.lastRunAt = new Date().toISOString();
58
+ docsSemantic.sourceHashes = sourceHashes;
59
+ docsSemantic.lastStats = stats;
60
+ state.docsSemantic = docsSemantic;
61
+ await writeJson(statePath, state);
62
+ return {
63
+ merged: true,
64
+ detail: `${stats.filesScanned} files → ${stats.useCases} use cases, ${stats.features} features, ${stats.actors} actors` +
65
+ ` (+${mergeStats.nodesCreated} nodes, ~${mergeStats.nodesUpdated} updated, +${mergeStats.edgesAdded} edges)`,
66
+ sourceHashes,
67
+ };
68
+ }
69
+ export async function knowledgeStaleWarning(projectRoot, docHashes) {
70
+ const knowledgePath = join(projectRoot, ".ai-spector/.docflow/analysis/knowledge.json");
71
+ if (!(await pathExists(knowledgePath))) {
72
+ return undefined;
73
+ }
74
+ const statePath = join(projectRoot, ".ai-spector/.docflow/state.json");
75
+ const state = await readJson(statePath).catch(() => null);
76
+ const indexHashes = state?.index
77
+ ?.sourceHashes;
78
+ if (!indexHashes?.srs || !docHashes.srs) {
79
+ return undefined;
80
+ }
81
+ if (indexHashes.srs === docHashes.srs) {
82
+ return undefined;
83
+ }
84
+ return ("docs/srs changed since last index — knowledge.json may be stale; run /analyze for full Graphify MCP re-extract, or rely on doc semantic merge from file bodies");
85
+ }
86
+ //# sourceMappingURL=doc-semantics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-semantics.js","sourceRoot":"","sources":["../../src/index/doc-semantics.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-spector",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Cursor-first documentation workflow: traceability graph, SRS/basic/detail design templates, and ai-spector CLI",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -15,6 +15,10 @@
15
15
  "include": [
16
16
  "docs/data-source"
17
17
  ],
18
+ "docSources": [
19
+ "docs/srs",
20
+ "docs/basic-design"
21
+ ],
18
22
  "exclude": [
19
23
  ".git/**",
20
24
  "node_modules/**",
@@ -22,8 +26,6 @@
22
26
  "build/**",
23
27
  ".next/**",
24
28
  "coverage/**",
25
- "docs/srs/**",
26
- "docs/basic-design/**",
27
29
  "docs/detail-design/**",
28
30
  "docs/data-source/graphify-out/**",
29
31
  "**/graphify-out/**",
@@ -112,10 +112,11 @@ When any `ai-spector` command **fails** (non-zero exit, throws, or empty/invalid
112
112
  - **Means:** Changed paths are not linked to `document` / `section` nodes (e.g. only `README.md` or `src/`).
113
113
  - **Fix:** Run impact on doc paths under `docs/` or `.ai-spector/`; or **`/impact`** with a short description of the traceability change.
114
114
 
115
- ### Stale graph or indexes after manual edits
115
+ ### Stale graph or indexes after manual edits or `/generate-srs`
116
116
 
117
- - **Means:** User changed `docs/data-source/`, SRS outputs, or templates without re-running ingest.
118
- - **Fix:** Run **`ai-spector index`** (or **`/index`** in Cursor). For semantic re-extract of actors/use cases, still run **`/analyze`** after index fixes structure.
117
+ - **Means:** User changed `docs/data-source/`, SRS outputs, or templates without re-running ingest; graph still shows template-only domain nodes.
118
+ - **Fix:** Run **`ai-spector index`** (or **`/index`**). Index merges `knowledge.json`, parses UC/F/actor ids from `docs/srs/` bodies, and runs Graphify on **changed** paths (`docs/data-source`, `docs/srs`, `docs/basic-design`). Use **`--force-graphify`** if Graphify output must rebuild entirely.
119
+ - **Still stale domain detail?** Re-run **`/analyze`** for Graphify MCP → fresh `knowledge.json`.
119
120
 
120
121
  ### Graphify wrote `docs/data-source/graphify-out/`
121
122
 
@@ -21,7 +21,7 @@ Add source material under `docs/data-source/`, open the project in Cursor, **rel
21
21
  | 2 | **`/validate-graph`** | `ai-spector graph validate` |
22
22
  | 3 | **`/generate-srs`** [paths or request] — all, listed files, or described scope (**confirm** if described) → waves → merge (see `generate-srs.md`) |
23
23
  | 4 | **`/summary srs`** (optional) | Doc summaries under `.ai-spector/index/` (fallback browse; graph is primary) |
24
- | — | **`/index`** | After manual edits: `ai-spector index` (graph + knowledge merge + Graphify + doc indexes) |
24
+ | — | **`/index`** | After manual edits or **`/generate-srs`**: `ai-spector index` (structure + knowledge merge + **SRS body extract** + Graphify on changed paths + doc indexes) |
25
25
  | 5 | **`/generate-basic-design`** [paths or request] — same targeting + waves as SRS (`generate-basic-design.md`) |
26
26
  | 6 | **`/generate-detail-design`** | same `graph query` pattern |
27
27
  | After edits | **`/impact`** [what changed] | Empty args → `git diff` + resolve seeds; else describe change → `graph impact <id> --json` (or `--git` / `--file`) |
@@ -37,6 +37,7 @@ docs/data-source/ ← add files
37
37
  /analyze
38
38
  /validate-graph
39
39
  /generate-srs
40
+ /index
40
41
  ```
41
42
 
42
43
  ## If something fails
@@ -146,6 +146,13 @@ Append to `.ai-spector/.docflow/logs/generate-srs.log` (create if needed): times
146
146
  ### 4. Finish
147
147
 
148
148
  - Final `ai-spector graph validate`.
149
+ - **Refresh indexes and semantic graph** (parses UC/F/actor ids from generated markdown + updates Graphify on changed paths):
150
+
151
+ ```bash
152
+ ai-spector index
153
+ ```
154
+
155
+ Use `ai-spector index --force-graphify` if Graphify storage should rebuild even when file hashes are unchanged.
149
156
  - Optional: `/visualize-graph` for user review.
150
157
  - Suggest `/summary srs` only after graph ingest is complete.
151
158
 
@@ -15,7 +15,9 @@ Rebuild **graph**, re-merge **knowledge** staging, refresh **Graphify storage**,
15
15
  - Graph validate fails due to stale structure
16
16
  - `.ai-spector/index/*.md` is out of date vs `docs/srs/` or `docs/basic-design/`
17
17
 
18
- **Does not replace `/analyze` for semantic extract** `knowledge.json` is still produced by Graphify MCP during `/analyze`. This command re-merges existing knowledge and rebuilds structure/indexes.
18
+ **Partial semantic refresh without `/analyze`:** After `/generate-srs`, index parses **UC/F/actor ids from markdown bodies** under `docs/srs/` and `docs/basic-design/` into the traceability graph, and runs **Graphify `update` on changed sources** (`docs/data-source`, `docs/srs`, `docs/basic-design`).
19
+
20
+ **Still requires `/analyze` for:** full Graphify MCP extract → `knowledge.json` (NFRs, data model, rich descriptions). Index re-merges existing `knowledge.json` when present; warns if SRS changed but knowledge is stale.
19
21
 
20
22
  ## Required Behavior (agent runs CLI)
21
23
 
@@ -23,6 +25,23 @@ Rebuild **graph**, re-merge **knowledge** staging, refresh **Graphify storage**,
23
25
  ai-spector index
24
26
  ```
25
27
 
28
+ After **`/generate-srs`** (recommended):
29
+
30
+ ```bash
31
+ ai-spector index
32
+ ```
33
+
34
+ Index steps (default): registry/bootstrap → knowledge merge → **SRS/docs body extract** → Graphify (changed paths only) → validate → doc indexes.
35
+
36
+ Flags:
37
+
38
+ | Flag | Effect |
39
+ |------|--------|
40
+ | `--force-graphify` | Re-index all Graphify sources even when content hash unchanged |
41
+ | `--skip-doc-semantics` | Skip UC/F parsing from `docs/srs` and `docs/basic-design` |
42
+ | `--skip-merge` | Skip `knowledge.json` merge |
43
+ | `--skip-graphify` | Skip Graphify CLI entirely |
44
+
26
45
  On Graphify missing or CI without `uv`:
27
46
 
28
47
  ```bash