chiasmus 0.1.15 → 0.1.17

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 (55) hide show
  1. package/README.md +37 -4
  2. package/dist/graph/analyses.d.ts +26 -2
  3. package/dist/graph/analyses.d.ts.map +1 -1
  4. package/dist/graph/analyses.js +72 -6
  5. package/dist/graph/analyses.js.map +1 -1
  6. package/dist/graph/cache.d.ts +72 -0
  7. package/dist/graph/cache.d.ts.map +1 -0
  8. package/dist/graph/cache.js +335 -0
  9. package/dist/graph/cache.js.map +1 -0
  10. package/dist/graph/community.d.ts +18 -0
  11. package/dist/graph/community.d.ts.map +1 -0
  12. package/dist/graph/community.js +116 -0
  13. package/dist/graph/community.js.map +1 -0
  14. package/dist/graph/diff.d.ts +25 -0
  15. package/dist/graph/diff.d.ts.map +1 -0
  16. package/dist/graph/diff.js +124 -0
  17. package/dist/graph/diff.js.map +1 -0
  18. package/dist/graph/entry-points.d.ts +22 -0
  19. package/dist/graph/entry-points.d.ts.map +1 -0
  20. package/dist/graph/entry-points.js +52 -0
  21. package/dist/graph/entry-points.js.map +1 -0
  22. package/dist/graph/extractor.d.ts +9 -1
  23. package/dist/graph/extractor.d.ts.map +1 -1
  24. package/dist/graph/extractor.js +316 -14
  25. package/dist/graph/extractor.js.map +1 -1
  26. package/dist/graph/facts.d.ts +11 -1
  27. package/dist/graph/facts.d.ts.map +1 -1
  28. package/dist/graph/facts.js +52 -1
  29. package/dist/graph/facts.js.map +1 -1
  30. package/dist/graph/graph-util.d.ts +19 -0
  31. package/dist/graph/graph-util.d.ts.map +1 -0
  32. package/dist/graph/graph-util.js +59 -0
  33. package/dist/graph/graph-util.js.map +1 -0
  34. package/dist/graph/index.d.ts +12 -1
  35. package/dist/graph/index.d.ts.map +1 -1
  36. package/dist/graph/index.js +6 -0
  37. package/dist/graph/index.js.map +1 -1
  38. package/dist/graph/insights.d.ts +35 -0
  39. package/dist/graph/insights.d.ts.map +1 -0
  40. package/dist/graph/insights.js +77 -0
  41. package/dist/graph/insights.js.map +1 -0
  42. package/dist/graph/map.d.ts +108 -0
  43. package/dist/graph/map.d.ts.map +1 -0
  44. package/dist/graph/map.js +344 -0
  45. package/dist/graph/map.js.map +1 -0
  46. package/dist/graph/types.d.ts +41 -0
  47. package/dist/graph/types.d.ts.map +1 -1
  48. package/dist/mcp-server.d.ts.map +1 -1
  49. package/dist/mcp-server.js +254 -34
  50. package/dist/mcp-server.js.map +1 -1
  51. package/dist/review.d.ts +8 -0
  52. package/dist/review.d.ts.map +1 -1
  53. package/dist/review.js +43 -3
  54. package/dist/review.js.map +1 -1
  55. package/package.json +7 -1
package/README.md CHANGED
@@ -122,9 +122,40 @@ chiasmus_graph files=["main.go", "handler.go"] analysis="impact" target="Query"
122
122
  → { analysis: "impact", result: ["Handle", "main"] }
123
123
  ```
124
124
 
125
- Analyses: `summary`, `callers`, `callees`, `reachability`, `dead-code`, `cycles`, `path`, `impact`, `facts`.
125
+ Analyses: `summary`, `callers`, `callees`, `reachability`, `dead-code`, `cycles`, `path`, `impact`, `layer-violation`, `communities`, `hubs`, `bridges`, `surprises`, `diff`, `entry-points`, `facts`.
126
126
 
127
- Reachability-heavy analyses (`cycles`, `reachability`, `path`, `impact`, `dead-code`, `callers`, `callees`) run on native O(V+E) graph algorithms and scale to codebases with thousands of functions. The `facts` analysis still emits raw Prolog for use with `chiasmus_verify`, capped at 10 MB — above that limit the result is `{ error, size, limit }` rather than a program string, so narrow the file set or call a specific analysis directly.
127
+ Reachability-heavy analyses (`cycles`, `reachability`, `path`, `impact`, `dead-code`, `callers`, `callees`) run on native O(V+E) graph algorithms and scale to codebases with thousands of functions. `communities` uses Louvain; `bridges` uses exact betweenness centrality. The `facts` analysis emits raw Prolog for use with `chiasmus_verify`, capped at 10 MB — above that limit the result is `{ error, size, limit }` rather than a program string, so narrow the file set or call a specific analysis directly. Opt in to `include_insights=true` on `facts` to also emit `community/2`, `cohesion/2`, `hub/2`, `bridge/2` predicates.
128
+
129
+ ### Persistent cache and PR diff
130
+
131
+ Pass `cache=true` on `chiasmus_graph` to enable a per-file content-hash cache — unchanged files skip re-parsing across calls. On a 42-file TypeScript repo, warm hits run at ~2.5ms vs ~170ms cold (60× speedup). Cache lives under `$CHIASMUS_CACHE_DIR` (default `~/.cache/chiasmus`) with an LRU budget per repo.
132
+
133
+ ```
134
+ chiasmus_graph files=[...] analysis="summary" cache=true save_snapshot="main"
135
+ → extracts + saves the current graph as the "main" baseline
136
+
137
+ # After branch changes:
138
+ chiasmus_graph files=[...] analysis="diff" against="main" cache=true
139
+ → { addedNodes, removedNodes, addedEdges, removedEdges, summary }
140
+ ```
141
+
142
+ `chiasmus_review` accepts `delta_against="<snapshot>"` — when set, a phase 0 diffs against the snapshot, impact-checks removed symbols, and scopes later phases to what the PR actually changed.
143
+
144
+ **`chiasmus_map`** — Pre-built codebase map for agents to consult **before** bulk file reads. Reuses the same tree-sitter extraction + cache as `chiasmus_graph`; returns a compact outline so an LLM can answer "what's in this repo" / "what does this file expose" / "where is X defined" without opening source.
145
+
146
+ ```
147
+ chiasmus_map files=["src/**/*.ts"]
148
+ → markdown outline: per-file headlines, exports with signatures,
149
+ token estimates, leading doc comments
150
+
151
+ chiasmus_map files=[...] mode="file" path="src/server.ts" format="json"
152
+ → { exports, imports grouped by source, all top-level symbols }
153
+
154
+ chiasmus_map files=[...] mode="symbol" name="handleRequest"
155
+ → { defines: [{file, line, signature}], callers, callees }
156
+ ```
157
+
158
+ Modes: `overview` (default), `file`, `symbol`. Output: `markdown` (default) or `json`. `include` globs and `max_exports` (clamped to ≥0) scope the overview. `cache=true` reuses the shared per-file cache.
128
159
 
129
160
  **`chiasmus_skills`** — Search the template library. Ships with 8 starter templates covering authorization, configuration, dependency resolution, validation, rule inference, and graph reachability. By-name lookups include related template suggestions.
130
161
 
@@ -174,7 +205,7 @@ Each action carries an `interpret` field describing how to score the result. Aft
174
205
 
175
206
  ## Recommended Workflow
176
207
 
177
- The calling LLM (Claude, GPT, etc.) drives the process — no API key needed:
208
+ The calling LLM (GLM, GPT, etc.) drives the process — no API key needed:
178
209
 
179
210
  1. `chiasmus_formalize problem="Can our RBAC rules ever conflict?"` → get template + slot instructions
180
211
  2. Fill the template slots using your knowledge of the user's codebase
@@ -383,7 +414,7 @@ library.close();
383
414
  |---------|---------|
384
415
  | `chiasmus` | All public APIs (barrel export) |
385
416
  | `chiasmus/solvers` | `SolverSession`, `createZ3Solver`, `createPrologSolver`, `correctionLoop`, solver types |
386
- | `chiasmus/graph` | `extractGraph`, `runAnalysis`, `runAnalysisFromGraph`, `buildFactsResult`, `DEFAULT_FACTS_MAX_BYTES`, `parseMermaid`, `graphToProlog`, adapter registry, graph types |
417
+ | `chiasmus/graph` | `extractGraph`, `runAnalysis`, `runAnalysisFromGraph`, `buildFactsResult`, `graphToProlog`, `parseMermaid`, `detectCommunities`, `detectHubs`, `detectBridges`, `detectSurprisingConnections`, `detectEntryPoints`, `graphDiff`, `saveSnapshot`/`loadSnapshot`/`listSnapshots`, cache APIs, adapter registry, graph types |
387
418
  | `chiasmus/formalize` | `lintSpec`, `classifyFeedback`, `extractPrologQuery`, `FormalizationEngine`, result types |
388
419
  | `chiasmus/skills` | `SkillLibrary`, `SkillLearner`, `craftTemplate`, `validateTemplate`, skill types |
389
420
  | `chiasmus/llm` | `createLLMFromEnv`, `AnthropicAdapter`, `OpenAICompatibleAdapter`, LLM types |
@@ -394,6 +425,8 @@ library.close();
394
425
  | Variable | Default | Purpose |
395
426
  |----------|---------|---------|
396
427
  | `CHIASMUS_HOME` | `~/.chiasmus/` | Database, skill storage, and config |
428
+ | `CHIASMUS_CACHE_DIR` | `~/.cache/chiasmus` | Per-file extraction cache + graph snapshots (when `cache=true`) |
429
+ | `CHIASMUS_CACHE_MAX_PER_REPO` | `67108864` (64 MB) | Per-repo cache byte budget — LRU eviction above this |
397
430
  | `ANTHROPIC_API_KEY` | — | Optional: Anthropic provider for autonomous mode |
398
431
  | `DEEPSEEK_API_KEY` | — | Optional: DeepSeek provider for autonomous mode |
399
432
  | `OPENAI_API_KEY` | — | Optional: OpenAI provider for autonomous mode |
@@ -1,4 +1,6 @@
1
+ import { type CacheOptions } from "./cache.js";
1
2
  import type { CodeGraph } from "./types.js";
3
+ export declare const MAX_FILE_SIZE: number;
2
4
  /**
3
5
  * Maximum byte size of a `facts` analysis response. Above this the Prolog
4
6
  * program dump is refused and an error object is returned instead, because
@@ -19,14 +21,36 @@ export interface FactsOversizeError {
19
21
  * callers (and the MCP transport) can surface a clear failure instead of
20
22
  * timing out mid-serialize.
21
23
  */
22
- export declare function buildFactsResult(graph: CodeGraph, entryPoints: string[] | undefined, maxBytes?: number): string | FactsOversizeError;
23
- export type AnalysisType = "summary" | "callers" | "callees" | "reachability" | "dead-code" | "cycles" | "path" | "impact" | "facts" | "layer-violation";
24
+ export declare function buildFactsResult(graph: CodeGraph, entryPoints: string[] | undefined, maxBytes?: number, prologOpts?: {
25
+ includeInsights?: boolean;
26
+ }): string | FactsOversizeError;
27
+ export type AnalysisType = "summary" | "callers" | "callees" | "reachability" | "dead-code" | "cycles" | "path" | "impact" | "facts" | "layer-violation" | "communities" | "hubs" | "bridges" | "surprises" | "diff" | "entry-points";
24
28
  export interface AnalysisRequest {
25
29
  analysis: AnalysisType;
26
30
  target?: string;
27
31
  from?: string;
28
32
  to?: string;
29
33
  entryPoints?: string[];
34
+ /** Snapshot name to diff against (required when analysis="diff"). */
35
+ against?: string;
36
+ /**
37
+ * When set, the extracted graph is saved under this snapshot name after
38
+ * analysis completes. Useful for capturing a baseline ("main") that a
39
+ * later `diff` call can compare against.
40
+ */
41
+ saveSnapshot?: string;
42
+ /**
43
+ * For analysis="facts" only: also emit community/2, cohesion/2, hub/2,
44
+ * bridge/2 facts alongside the base fact set. Off by default since these
45
+ * add O(V+E) work and bloat the fact dump.
46
+ */
47
+ includeInsights?: boolean;
48
+ /**
49
+ * Enable persistent per-file extraction cache. Supply an object (with
50
+ * optional cacheDir/repoKey/budget overrides) to opt in. Omit or pass
51
+ * undefined to extract fresh every call.
52
+ */
53
+ cache?: CacheOptions;
30
54
  }
31
55
  export interface AnalysisResult {
32
56
  analysis: AnalysisType;
@@ -1 +1 @@
1
- {"version":3,"file":"analyses.d.ts","sourceRoot":"","sources":["../../src/graph/analyses.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AAExD,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,EACjC,QAAQ,GAAE,MAAgC,GACzC,MAAM,GAAG,kBAAkB,CAa7B;AAED,MAAM,MAAM,YAAY,GACpB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAClD,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GACpD,iBAAiB,CAAC;AAEtB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qDAAqD;AACrD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAgCzB;AAED,yEAAyE;AACzE,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAEzB"}
1
+ {"version":3,"file":"analyses.d.ts","sourceRoot":"","sources":["../../src/graph/analyses.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAc3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,aAAa,QAAmB,CAAC;AAE9C;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AAExD,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,EACjC,QAAQ,GAAE,MAAgC,EAC1C,UAAU,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC,MAAM,GAAG,kBAAkB,CAa7B;AAED,MAAM,MAAM,YAAY,GACpB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAClD,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GACpD,iBAAiB,GACjB,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAChD,MAAM,GAAG,cAAc,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qDAAqD;AACrD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAqEzB;AAED,yEAAyE;AACzE,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAEzB"}
@@ -1,8 +1,13 @@
1
1
  import { readFileSync, statSync } from "node:fs";
2
2
  import { extractGraph } from "./extractor.js";
3
3
  import { graphToProlog } from "./facts.js";
4
+ import { loadSnapshot, saveSnapshot } from "./cache.js";
5
+ import { detectCommunities } from "./community.js";
6
+ import { detectHubs, detectBridges, detectSurprisingConnections } from "./insights.js";
7
+ import { graphDiff } from "./diff.js";
8
+ import { detectEntryPoints } from "./entry-points.js";
4
9
  import { cycles as nativeCycles, reachability as nativeReachability, path as nativePath, impact as nativeImpact, deadCode as nativeDeadCode, callers as nativeCallers, callees as nativeCallees, } from "./native-analyses.js";
5
- const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
10
+ export const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
6
11
  /**
7
12
  * Maximum byte size of a `facts` analysis response. Above this the Prolog
8
13
  * program dump is refused and an error object is returned instead, because
@@ -17,8 +22,8 @@ export const DEFAULT_FACTS_MAX_BYTES = 10 * 1024 * 1024;
17
22
  * callers (and the MCP transport) can surface a clear failure instead of
18
23
  * timing out mid-serialize.
19
24
  */
20
- export function buildFactsResult(graph, entryPoints, maxBytes = DEFAULT_FACTS_MAX_BYTES) {
21
- const program = graphToProlog(graph, entryPoints);
25
+ export function buildFactsResult(graph, entryPoints, maxBytes = DEFAULT_FACTS_MAX_BYTES, prologOpts) {
26
+ const program = graphToProlog(graph, entryPoints, prologOpts);
22
27
  if (program.length > maxBytes) {
23
28
  return {
24
29
  error: `Prolog fact dump is ${program.length} bytes, exceeds the ${maxBytes} byte cap. ` +
@@ -59,7 +64,36 @@ export async function runAnalysis(filePaths, request) {
59
64
  warnings,
60
65
  };
61
66
  }
62
- const graph = await extractGraph(files);
67
+ // Guard: if the caller both saves AND diffs against the same snapshot
68
+ // name, the save would clobber the baseline before the diff runs,
69
+ // producing a silent "no changes" result. Reject explicitly.
70
+ if (request.saveSnapshot &&
71
+ request.analysis === "diff" &&
72
+ request.against === request.saveSnapshot) {
73
+ return {
74
+ analysis: request.analysis,
75
+ result: {
76
+ error: `saveSnapshot and against cannot name the same snapshot ('${request.saveSnapshot}') — ` +
77
+ "the save would overwrite the baseline before the diff runs. " +
78
+ "Use distinct names (e.g. save_snapshot='feature-branch', against='main').",
79
+ },
80
+ warnings: warnings.length > 0 ? warnings : undefined,
81
+ };
82
+ }
83
+ const graph = await extractGraph(files, request.cache ? { cache: request.cache } : {});
84
+ if (request.saveSnapshot) {
85
+ if (!request.cache) {
86
+ warnings.push("saveSnapshot ignored: cache option is required to persist snapshots");
87
+ }
88
+ else {
89
+ try {
90
+ await saveSnapshot(request.saveSnapshot, graph, request.cache);
91
+ }
92
+ catch (e) {
93
+ warnings.push(`Failed to save snapshot ${request.saveSnapshot}: ${e instanceof Error ? e.message : String(e)}`);
94
+ }
95
+ }
96
+ }
63
97
  const base = await runOnGraph(graph, request);
64
98
  return warnings.length > 0 ? { ...base, warnings } : base;
65
99
  }
@@ -78,7 +112,12 @@ export async function runAnalysisFromGraph(graph, request) {
78
112
  async function runOnGraph(graph, request) {
79
113
  switch (request.analysis) {
80
114
  case "facts":
81
- return { analysis: "facts", result: buildFactsResult(graph, request.entryPoints) };
115
+ return {
116
+ analysis: "facts",
117
+ result: buildFactsResult(graph, request.entryPoints, DEFAULT_FACTS_MAX_BYTES, {
118
+ includeInsights: request.includeInsights ?? false,
119
+ }),
120
+ };
82
121
  case "summary":
83
122
  return { analysis: "summary", result: buildSummary(graph) };
84
123
  case "layer-violation":
@@ -110,6 +149,29 @@ async function runOnGraph(graph, request) {
110
149
  if (!request.target)
111
150
  return missingParams("impact");
112
151
  return { analysis: "impact", result: nativeImpact(graph, request.target) };
152
+ case "communities":
153
+ return { analysis: "communities", result: detectCommunities(graph) };
154
+ case "hubs":
155
+ return { analysis: "hubs", result: detectHubs(graph) };
156
+ case "bridges":
157
+ return { analysis: "bridges", result: detectBridges(graph) };
158
+ case "surprises":
159
+ return { analysis: "surprises", result: detectSurprisingConnections(graph) };
160
+ case "entry-points":
161
+ return { analysis: "entry-points", result: detectEntryPoints(graph) };
162
+ case "diff": {
163
+ if (!request.against) {
164
+ return { analysis: "diff", result: { error: "Missing required parameter 'against' — specify a snapshot name to diff against" } };
165
+ }
166
+ if (!request.cache) {
167
+ return { analysis: "diff", result: { error: "diff requires a cache option so snapshots can be located on disk" } };
168
+ }
169
+ const baseline = await loadSnapshot(request.against, request.cache);
170
+ if (!baseline) {
171
+ return { analysis: "diff", result: { error: `Snapshot '${request.against}' not found. Save one first via saveSnapshot.` } };
172
+ }
173
+ return { analysis: "diff", result: graphDiff(baseline, graph) };
174
+ }
113
175
  default:
114
176
  return { analysis: request.analysis, result: { error: `Unknown analysis: ${request.analysis}` } };
115
177
  }
@@ -167,7 +229,7 @@ function buildSummary(graph) {
167
229
  const files = new Set(graph.defines.map((d) => d.file));
168
230
  const functions = graph.defines.filter((d) => d.kind === "function" || d.kind === "method").length;
169
231
  const classes = graph.defines.filter((d) => d.kind === "class").length;
170
- return {
232
+ const summary = {
171
233
  files: files.size,
172
234
  functions,
173
235
  classes,
@@ -175,5 +237,9 @@ function buildSummary(graph) {
175
237
  imports: graph.imports.length,
176
238
  exports: graph.exports.length,
177
239
  };
240
+ if (graph.hyperedges && graph.hyperedges.length > 0) {
241
+ summary.hyperedges = graph.hyperedges.length;
242
+ }
243
+ return summary;
178
244
  }
179
245
  //# sourceMappingURL=analyses.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyses.js","sourceRoot":"","sources":["../../src/graph/analyses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyses.js","sourceRoot":"","sources":["../../src/graph/analyses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * On-disk cache for per-file CodeGraph extraction results.
3
+ *
4
+ * Layout:
5
+ * <cacheDir>/<repoKey>/
6
+ * .lock proper-lockfile target
7
+ * manifest.json { schemaVersion, entries: {absPath: {hash, size, savedAt}} }
8
+ * files/<hash>.json one serialized CodeGraph fragment per cached file
9
+ * snapshots/<name>.json full serialized graph at a point in time
10
+ *
11
+ * All manifest read-modify-write sequences serialize through `withRepoLock`.
12
+ * Readers tolerate a racing eviction by treating a missing file as a miss.
13
+ * LRU is tracked via file mtime: `utimes` bumps the entry on every hit, and
14
+ * eviction sorts oldest-first.
15
+ */
16
+ import type { CodeGraph } from "./types.js";
17
+ export declare const CACHE_SCHEMA_VERSION = "2";
18
+ export interface CacheOptions {
19
+ /** Root cache directory. Defaults to $CHIASMUS_CACHE_DIR or ~/.cache/chiasmus. */
20
+ cacheDir?: string;
21
+ /** Identifier for a specific repository/project. Defaults to "default". */
22
+ repoKey?: string;
23
+ /**
24
+ * Per-repo byte budget. Defaults to $CHIASMUS_CACHE_MAX_PER_REPO or 64 MB.
25
+ */
26
+ maxBytesPerRepo?: number;
27
+ }
28
+ export interface CachePaths {
29
+ cacheDir: string;
30
+ repoDir: string;
31
+ filesDir: string;
32
+ manifestPath: string;
33
+ lockPath: string;
34
+ }
35
+ /** Deterministic repoKey derived from a working directory — safe across sessions. */
36
+ export declare function defaultRepoKey(cwd?: string): string;
37
+ export declare function resolveCachePaths(opts?: CacheOptions): CachePaths;
38
+ /**
39
+ * Per-file content hash. The path suffix prevents two distinct files with
40
+ * identical content from colliding.
41
+ */
42
+ export declare function fileHash(content: string, absPath: string): string;
43
+ export declare function checkFileCache(files: Array<{
44
+ path: string;
45
+ content: string;
46
+ }>, opts?: CacheOptions): Promise<{
47
+ hits: Array<{
48
+ path: string;
49
+ graph: CodeGraph;
50
+ }>;
51
+ misses: Array<{
52
+ path: string;
53
+ content: string;
54
+ }>;
55
+ }>;
56
+ export declare function saveFileCache(items: Array<{
57
+ path: string;
58
+ content: string;
59
+ graph: CodeGraph;
60
+ }>, opts?: CacheOptions): Promise<void>;
61
+ /**
62
+ * Public eviction entry point. Prefer the in-save fast path; use this only
63
+ * when invoking eviction independently of a save (e.g. to reclaim space
64
+ * after a budget change).
65
+ */
66
+ export declare function evictLRU(opts?: CacheOptions): Promise<void>;
67
+ export declare function clearRepoCache(opts?: CacheOptions): Promise<void>;
68
+ export declare function saveSnapshot(name: string, graph: CodeGraph, opts?: CacheOptions): Promise<void>;
69
+ export declare function loadSnapshot(name: string, opts?: CacheOptions): Promise<CodeGraph | null>;
70
+ export declare function listSnapshots(opts?: CacheOptions): Promise<string[]>;
71
+ export declare function deleteSnapshot(name: string, opts?: CacheOptions): Promise<void>;
72
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/graph/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAIxC,MAAM,WAAW,YAAY;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AA2BD,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAElE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,YAAiB,GAAG,UAAU,CAWrE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMjE;AAsED,wBAAsB,cAAc,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC;IACT,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAChD,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD,CAAC,CA2CD;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC,EACjE,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAsCf;AA0DD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOrE;AAED,wBAAsB,cAAc,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E;AAgBD,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAQ3B;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ9E;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAKf"}