@swarmvaultai/engine 3.4.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,7 +23,7 @@ function isReportPath(value, cwd) {
23
23
  if (normalized.endsWith(reportNormalized)) {
24
24
  return true;
25
25
  }
26
- return path.resolve(cwd, value) === path.resolve(cwd, reportSuffix);
26
+ return path.resolve(cwd, value) === reportPath(cwd);
27
27
  }
28
28
  function collectCandidatePaths(node, acc = []) {
29
29
  if (typeof node === "string") {
@@ -59,12 +59,22 @@ function resolveToolName(input) {
59
59
  }
60
60
  async function hasReport(cwd) {
61
61
  try {
62
- await fs.access(path.join(cwd, "wiki", "graph", "report.md"));
62
+ await fs.access(reportPath(cwd));
63
63
  return true;
64
64
  } catch {
65
65
  return false;
66
66
  }
67
67
  }
68
+ function artifactRootDir(cwd) {
69
+ const override = process.env.SWARMVAULT_OUT?.trim();
70
+ if (!override) {
71
+ return path.resolve(cwd);
72
+ }
73
+ return path.isAbsolute(override) ? path.resolve(override) : path.resolve(cwd, override);
74
+ }
75
+ function reportPath(cwd) {
76
+ return path.join(artifactRootDir(cwd), "wiki", "graph", "report.md");
77
+ }
68
78
  async function markReportRead(cwd, agentKey) {
69
79
  const state = markerState(cwd, agentKey);
70
80
  await fs.mkdir(state.dir, { recursive: true });
@@ -86,6 +96,45 @@ async function resetSession(cwd, agentKey) {
86
96
  function isBroadSearchTool(toolName) {
87
97
  return /grep|glob|search|find/i.test(toolName);
88
98
  }
99
+ function collectCommandCandidates(node, acc = []) {
100
+ if (!node || typeof node !== "object") {
101
+ return acc;
102
+ }
103
+ if (Array.isArray(node)) {
104
+ for (const item of node) {
105
+ collectCommandCandidates(item, acc);
106
+ }
107
+ return acc;
108
+ }
109
+ for (const [key, value] of Object.entries(node)) {
110
+ if (["command", "cmd", "script", "bash", "shell"].includes(key) && typeof value === "string") {
111
+ acc.push(value);
112
+ continue;
113
+ }
114
+ collectCommandCandidates(value, acc);
115
+ }
116
+ return acc;
117
+ }
118
+ function commandLooksLikeBroadSearch(command) {
119
+ const tokens = command.replace(/[;&|()]/g, " ").split(/\s+/).map((token) => path.basename(token.replace(/^['"]|['"]$/g, ""))).filter(Boolean);
120
+ for (let index = 0; index < tokens.length; index += 1) {
121
+ const token = tokens[index];
122
+ if (["rg", "grep", "find", "fd", "ag", "ack"].includes(token)) {
123
+ return true;
124
+ }
125
+ if (token === "git" && tokens[index + 1] === "grep") {
126
+ return true;
127
+ }
128
+ }
129
+ return false;
130
+ }
131
+ function isBroadSearchInput(input) {
132
+ const toolName = resolveToolName(input);
133
+ if (isBroadSearchTool(toolName)) {
134
+ return true;
135
+ }
136
+ return collectCommandCandidates(input).some(commandLooksLikeBroadSearch);
137
+ }
89
138
  async function readHookInput() {
90
139
  let body = "";
91
140
  for await (const chunk of process.stdin) {
@@ -100,7 +149,7 @@ async function readHookInput() {
100
149
  return {};
101
150
  }
102
151
  }
103
- var REPORT_NOTE = "SwarmVault graph report exists at wiki/graph/report.md. Read it before broad grep/glob searching.";
152
+ var REPORT_NOTE = "SwarmVault graph report exists at wiki/graph/report.md, or at $SWARMVAULT_OUT/wiki/graph/report.md when SWARMVAULT_OUT is set. Read it before broad grep/glob searching.";
104
153
 
105
154
  // src/hooks/claude.ts
106
155
  var AGENT_KEY = "claude";
@@ -126,13 +175,12 @@ async function main() {
126
175
  });
127
176
  process.exit(0);
128
177
  }
129
- const toolName = resolveToolName(input);
130
178
  if (collectCandidatePaths(input).some((value) => isReportPath(value, cwd))) {
131
179
  await markReportRead(cwd, AGENT_KEY);
132
180
  emit({});
133
181
  process.exit(0);
134
182
  }
135
- if (isBroadSearchTool(toolName) && !await hasSeenReport(cwd, AGENT_KEY)) {
183
+ if (isBroadSearchInput(input) && !await hasSeenReport(cwd, AGENT_KEY)) {
136
184
  emit({
137
185
  hookSpecificOutput: {
138
186
  hookEventName: "PreToolUse",
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/hooks/marker-state.ts
4
+ import crypto from "crypto";
5
+ import fs from "fs/promises";
6
+ import os from "os";
7
+ import path from "path";
8
+ function markerState(cwd, agentKey) {
9
+ const hash = crypto.createHash("sha256").update(cwd).digest("hex");
10
+ const dir = path.join(os.tmpdir(), "swarmvault-agent-hooks", agentKey, hash);
11
+ return {
12
+ dir,
13
+ markerPath: path.join(dir, "report-read")
14
+ };
15
+ }
16
+ function isReportPath(value, cwd) {
17
+ if (typeof value !== "string" || value.length === 0) {
18
+ return false;
19
+ }
20
+ const reportSuffix = path.join("wiki", "graph", "report.md");
21
+ const normalized = value.replaceAll("\\", "/");
22
+ const reportNormalized = reportSuffix.replaceAll("\\", "/");
23
+ if (normalized.endsWith(reportNormalized)) {
24
+ return true;
25
+ }
26
+ return path.resolve(cwd, value) === reportPath(cwd);
27
+ }
28
+ function collectCandidatePaths(node, acc = []) {
29
+ if (typeof node === "string") {
30
+ acc.push(node);
31
+ return acc;
32
+ }
33
+ if (!node || typeof node !== "object") {
34
+ return acc;
35
+ }
36
+ if (Array.isArray(node)) {
37
+ for (const item of node) {
38
+ collectCandidatePaths(item, acc);
39
+ }
40
+ return acc;
41
+ }
42
+ for (const [key, value] of Object.entries(node)) {
43
+ if (["path", "filePath", "file_path", "paths", "target", "targets"].includes(key)) {
44
+ collectCandidatePaths(value, acc);
45
+ continue;
46
+ }
47
+ collectCandidatePaths(value, acc);
48
+ }
49
+ return acc;
50
+ }
51
+ function resolveInputCwd(input) {
52
+ const shaped = input ?? {};
53
+ const candidate = typeof shaped.cwd === "string" && shaped.cwd || typeof shaped.directory === "string" && shaped.directory || typeof shaped.workspace?.cwd === "string" && shaped.workspace.cwd || typeof shaped.toolInput?.cwd === "string" && shaped.toolInput.cwd || process.cwd();
54
+ return path.resolve(candidate);
55
+ }
56
+ function resolveToolName(input) {
57
+ const shaped = input ?? {};
58
+ return String(shaped.toolName ?? shaped.tool_name ?? shaped.tool?.name ?? shaped.name ?? "");
59
+ }
60
+ async function hasReport(cwd) {
61
+ try {
62
+ await fs.access(reportPath(cwd));
63
+ return true;
64
+ } catch {
65
+ return false;
66
+ }
67
+ }
68
+ function artifactRootDir(cwd) {
69
+ const override = process.env.SWARMVAULT_OUT?.trim();
70
+ if (!override) {
71
+ return path.resolve(cwd);
72
+ }
73
+ return path.isAbsolute(override) ? path.resolve(override) : path.resolve(cwd, override);
74
+ }
75
+ function reportPath(cwd) {
76
+ return path.join(artifactRootDir(cwd), "wiki", "graph", "report.md");
77
+ }
78
+ async function markReportRead(cwd, agentKey) {
79
+ const state = markerState(cwd, agentKey);
80
+ await fs.mkdir(state.dir, { recursive: true });
81
+ await fs.writeFile(state.markerPath, "seen\n", "utf8");
82
+ }
83
+ async function hasSeenReport(cwd, agentKey) {
84
+ const state = markerState(cwd, agentKey);
85
+ try {
86
+ await fs.access(state.markerPath);
87
+ return true;
88
+ } catch {
89
+ return false;
90
+ }
91
+ }
92
+ async function resetSession(cwd, agentKey) {
93
+ const state = markerState(cwd, agentKey);
94
+ await fs.rm(state.dir, { recursive: true, force: true });
95
+ }
96
+ function isBroadSearchTool(toolName) {
97
+ return /grep|glob|search|find/i.test(toolName);
98
+ }
99
+ function collectCommandCandidates(node, acc = []) {
100
+ if (!node || typeof node !== "object") {
101
+ return acc;
102
+ }
103
+ if (Array.isArray(node)) {
104
+ for (const item of node) {
105
+ collectCommandCandidates(item, acc);
106
+ }
107
+ return acc;
108
+ }
109
+ for (const [key, value] of Object.entries(node)) {
110
+ if (["command", "cmd", "script", "bash", "shell"].includes(key) && typeof value === "string") {
111
+ acc.push(value);
112
+ continue;
113
+ }
114
+ collectCommandCandidates(value, acc);
115
+ }
116
+ return acc;
117
+ }
118
+ function commandLooksLikeBroadSearch(command) {
119
+ const tokens = command.replace(/[;&|()]/g, " ").split(/\s+/).map((token) => path.basename(token.replace(/^['"]|['"]$/g, ""))).filter(Boolean);
120
+ for (let index = 0; index < tokens.length; index += 1) {
121
+ const token = tokens[index];
122
+ if (["rg", "grep", "find", "fd", "ag", "ack"].includes(token)) {
123
+ return true;
124
+ }
125
+ if (token === "git" && tokens[index + 1] === "grep") {
126
+ return true;
127
+ }
128
+ }
129
+ return false;
130
+ }
131
+ function isBroadSearchInput(input) {
132
+ const toolName = resolveToolName(input);
133
+ if (isBroadSearchTool(toolName)) {
134
+ return true;
135
+ }
136
+ return collectCommandCandidates(input).some(commandLooksLikeBroadSearch);
137
+ }
138
+ async function readHookInput() {
139
+ let body = "";
140
+ for await (const chunk of process.stdin) {
141
+ body += chunk;
142
+ }
143
+ if (!body.trim()) {
144
+ return {};
145
+ }
146
+ try {
147
+ return JSON.parse(body);
148
+ } catch {
149
+ return {};
150
+ }
151
+ }
152
+ var REPORT_NOTE = "SwarmVault graph report exists at wiki/graph/report.md, or at $SWARMVAULT_OUT/wiki/graph/report.md when SWARMVAULT_OUT is set. Read it before broad grep/glob searching.";
153
+
154
+ // src/hooks/codex.ts
155
+ var AGENT_KEY = "codex";
156
+ function emit(value) {
157
+ process.stdout.write(`${JSON.stringify(value)}
158
+ `);
159
+ }
160
+ function note() {
161
+ return {
162
+ priority: "IMPORTANT",
163
+ message: REPORT_NOTE
164
+ };
165
+ }
166
+ async function main() {
167
+ const mode = process.argv[2] ?? "";
168
+ const input = await readHookInput();
169
+ const cwd = resolveInputCwd(input);
170
+ if (!await hasReport(cwd)) {
171
+ emit({});
172
+ process.exit(0);
173
+ }
174
+ if (mode === "session-start") {
175
+ await resetSession(cwd, AGENT_KEY);
176
+ emit(note());
177
+ process.exit(0);
178
+ }
179
+ if (collectCandidatePaths(input).some((value) => isReportPath(value, cwd))) {
180
+ await markReportRead(cwd, AGENT_KEY);
181
+ emit({});
182
+ process.exit(0);
183
+ }
184
+ if (isBroadSearchInput(input) && !await hasSeenReport(cwd, AGENT_KEY)) {
185
+ emit(note());
186
+ process.exit(0);
187
+ }
188
+ emit({});
189
+ }
190
+ await main();
@@ -23,7 +23,7 @@ function isReportPath(value, cwd) {
23
23
  if (normalized.endsWith(reportNormalized)) {
24
24
  return true;
25
25
  }
26
- return path.resolve(cwd, value) === path.resolve(cwd, reportSuffix);
26
+ return path.resolve(cwd, value) === reportPath(cwd);
27
27
  }
28
28
  function collectCandidatePaths(node, acc = []) {
29
29
  if (typeof node === "string") {
@@ -59,12 +59,22 @@ function resolveToolName(input) {
59
59
  }
60
60
  async function hasReport(cwd) {
61
61
  try {
62
- await fs.access(path.join(cwd, "wiki", "graph", "report.md"));
62
+ await fs.access(reportPath(cwd));
63
63
  return true;
64
64
  } catch {
65
65
  return false;
66
66
  }
67
67
  }
68
+ function artifactRootDir(cwd) {
69
+ const override = process.env.SWARMVAULT_OUT?.trim();
70
+ if (!override) {
71
+ return path.resolve(cwd);
72
+ }
73
+ return path.isAbsolute(override) ? path.resolve(override) : path.resolve(cwd, override);
74
+ }
75
+ function reportPath(cwd) {
76
+ return path.join(artifactRootDir(cwd), "wiki", "graph", "report.md");
77
+ }
68
78
  async function markReportRead(cwd, agentKey) {
69
79
  const state = markerState(cwd, agentKey);
70
80
  await fs.mkdir(state.dir, { recursive: true });
@@ -100,7 +110,7 @@ async function readHookInput() {
100
110
  return {};
101
111
  }
102
112
  }
103
- var REPORT_NOTE = "SwarmVault graph report exists at wiki/graph/report.md. Read it before broad grep/glob searching.";
113
+ var REPORT_NOTE = "SwarmVault graph report exists at wiki/graph/report.md, or at $SWARMVAULT_OUT/wiki/graph/report.md when SWARMVAULT_OUT is set. Read it before broad grep/glob searching.";
104
114
 
105
115
  // src/hooks/copilot.ts
106
116
  var AGENT_KEY = "copilot";
@@ -23,7 +23,7 @@ function isReportPath(value, cwd) {
23
23
  if (normalized.endsWith(reportNormalized)) {
24
24
  return true;
25
25
  }
26
- return path.resolve(cwd, value) === path.resolve(cwd, reportSuffix);
26
+ return path.resolve(cwd, value) === reportPath(cwd);
27
27
  }
28
28
  function collectCandidatePaths(node, acc = []) {
29
29
  if (typeof node === "string") {
@@ -59,12 +59,22 @@ function resolveToolName(input) {
59
59
  }
60
60
  async function hasReport(cwd) {
61
61
  try {
62
- await fs.access(path.join(cwd, "wiki", "graph", "report.md"));
62
+ await fs.access(reportPath(cwd));
63
63
  return true;
64
64
  } catch {
65
65
  return false;
66
66
  }
67
67
  }
68
+ function artifactRootDir(cwd) {
69
+ const override = process.env.SWARMVAULT_OUT?.trim();
70
+ if (!override) {
71
+ return path.resolve(cwd);
72
+ }
73
+ return path.isAbsolute(override) ? path.resolve(override) : path.resolve(cwd, override);
74
+ }
75
+ function reportPath(cwd) {
76
+ return path.join(artifactRootDir(cwd), "wiki", "graph", "report.md");
77
+ }
68
78
  async function markReportRead(cwd, agentKey) {
69
79
  const state = markerState(cwd, agentKey);
70
80
  await fs.mkdir(state.dir, { recursive: true });
@@ -100,7 +110,7 @@ async function readHookInput() {
100
110
  return {};
101
111
  }
102
112
  }
103
- var REPORT_NOTE = "SwarmVault graph report exists at wiki/graph/report.md. Read it before broad grep/glob searching.";
113
+ var REPORT_NOTE = "SwarmVault graph report exists at wiki/graph/report.md, or at $SWARMVAULT_OUT/wiki/graph/report.md when SWARMVAULT_OUT is set. Read it before broad grep/glob searching.";
104
114
 
105
115
  // src/hooks/gemini.ts
106
116
  var AGENT_KEY = "gemini";
package/dist/index.d.ts CHANGED
@@ -116,13 +116,13 @@ type GuidedSourceSessionStatus = "awaiting_input" | "ready_to_stage" | "staged"
116
116
  type VaultProfilePreset = "reader" | "timeline" | "diligence" | "thesis";
117
117
  type VaultDashboardPack = "default" | "reader" | "diligence";
118
118
  type GuidedSessionMode = "insights_only" | "canonical_review";
119
- type SourceKind = "markdown" | "text" | "pdf" | "image" | "html" | "docx" | "epub" | "csv" | "xlsx" | "pptx" | "odt" | "odp" | "ods" | "jupyter" | "data" | "bibtex" | "rtf" | "org" | "asciidoc" | "transcript" | "chat_export" | "email" | "calendar" | "audio" | "youtube" | "binary" | "code";
119
+ type SourceKind = "markdown" | "text" | "pdf" | "image" | "html" | "docx" | "epub" | "csv" | "xlsx" | "pptx" | "odt" | "odp" | "ods" | "jupyter" | "data" | "bibtex" | "rtf" | "org" | "asciidoc" | "transcript" | "chat_export" | "email" | "calendar" | "audio" | "video" | "youtube" | "binary" | "code";
120
120
  type SourceCaptureType = "arxiv" | "doi" | "tweet" | "article" | "url";
121
121
  type SourceClass = "first_party" | "third_party" | "resource" | "generated";
122
122
  type ManagedSourceKind = "directory" | "file" | "github_repo" | "crawl_url";
123
123
  type ManagedSourceStatus = "ready" | "missing" | "error";
124
- type CodeLanguage = "javascript" | "jsx" | "typescript" | "tsx" | "bash" | "python" | "go" | "rust" | "java" | "kotlin" | "scala" | "dart" | "lua" | "zig" | "csharp" | "c" | "cpp" | "php" | "ruby" | "powershell" | "swift" | "elixir" | "ocaml" | "objc" | "rescript" | "solidity" | "html" | "css" | "vue";
125
- type CodeSymbolKind = "function" | "class" | "interface" | "type_alias" | "enum" | "variable" | "struct" | "trait";
124
+ type CodeLanguage = "javascript" | "jsx" | "typescript" | "tsx" | "bash" | "python" | "go" | "rust" | "java" | "kotlin" | "scala" | "dart" | "lua" | "zig" | "csharp" | "c" | "cpp" | "php" | "ruby" | "powershell" | "swift" | "elixir" | "ocaml" | "objc" | "rescript" | "solidity" | "html" | "css" | "vue" | "sql";
125
+ type CodeSymbolKind = "function" | "class" | "interface" | "type_alias" | "enum" | "variable" | "struct" | "trait" | "table" | "view";
126
126
  type OrchestrationRole = "research" | "audit" | "context" | "safety";
127
127
  declare const webSearchProviderTypeSchema: z.ZodEnum<{
128
128
  custom: "custom";
@@ -447,6 +447,7 @@ interface PromotionSession {
447
447
  }
448
448
  interface ResolvedPaths {
449
449
  rootDir: string;
450
+ artifactRootDir: string;
450
451
  schemaPath: string;
451
452
  rawDir: string;
452
453
  rawSourcesDir: string;
@@ -489,7 +490,7 @@ interface SourceAttachment {
489
490
  mimeType: string;
490
491
  originalPath?: string;
491
492
  }
492
- type ExtractionKind = "plain_text" | "html_readability" | "pdf_text" | "docx_text" | "epub_text" | "csv_text" | "xlsx_text" | "pptx_text" | "odt_text" | "odp_text" | "ods_text" | "jupyter_text" | "structured_data" | "bibtex_text" | "rtf_text" | "org_text" | "asciidoc_text" | "transcript_text" | "chat_export_text" | "email_text" | "calendar_text" | "image_vision" | "audio_transcription" | "youtube_transcript";
493
+ type ExtractionKind = "plain_text" | "html_readability" | "pdf_text" | "docx_text" | "epub_text" | "csv_text" | "xlsx_text" | "pptx_text" | "odt_text" | "odp_text" | "ods_text" | "jupyter_text" | "structured_data" | "bibtex_text" | "rtf_text" | "org_text" | "asciidoc_text" | "transcript_text" | "chat_export_text" | "email_text" | "calendar_text" | "image_vision" | "audio_transcription" | "video_transcription" | "youtube_transcript";
493
494
  interface ExtractionTerm {
494
495
  name: string;
495
496
  description: string;
@@ -528,6 +529,8 @@ interface IngestOptions {
528
529
  exclude?: string[];
529
530
  maxFiles?: number;
530
531
  gitignore?: boolean;
532
+ swarmvaultignore?: boolean;
533
+ video?: boolean;
531
534
  extractClasses?: SourceClass[];
532
535
  resume?: string;
533
536
  /**
@@ -676,6 +679,12 @@ interface CodeSymbol {
676
679
  extends: string[];
677
680
  implements: string[];
678
681
  }
682
+ interface CodeRelation {
683
+ sourceName?: string;
684
+ targetName: string;
685
+ relation: string;
686
+ confidence?: number;
687
+ }
679
688
  interface CodeAnalysis {
680
689
  moduleId: string;
681
690
  language: CodeLanguage;
@@ -686,6 +695,7 @@ interface CodeAnalysis {
686
695
  symbols: CodeSymbol[];
687
696
  exports: string[];
688
697
  diagnostics: CodeDiagnostic[];
698
+ relations?: CodeRelation[];
689
699
  }
690
700
  interface SourceRationale {
691
701
  id: string;
@@ -872,6 +882,70 @@ interface GraphArtifact {
872
882
  sources: SourceManifest[];
873
883
  pages: GraphPage[];
874
884
  }
885
+ interface GraphStatsResult {
886
+ generatedAt: string;
887
+ counts: {
888
+ sources: number;
889
+ pages: number;
890
+ nodes: number;
891
+ edges: number;
892
+ hyperedges: number;
893
+ communities: number;
894
+ };
895
+ nodeTypes: Partial<Record<GraphNode["type"], number>>;
896
+ evidenceClasses: Partial<Record<EvidenceClass, number>>;
897
+ sourceClasses: Record<SourceClass, {
898
+ sources: number;
899
+ pages: number;
900
+ nodes: number;
901
+ }>;
902
+ edgeRelations: Record<string, number>;
903
+ hyperedgeRelations: Record<string, number>;
904
+ }
905
+ interface GraphClusterRefreshResult {
906
+ graphPath: string;
907
+ nodeCount: number;
908
+ edgeCount: number;
909
+ communityCount: number;
910
+ changedPages: string[];
911
+ reportPath: string;
912
+ }
913
+ interface GraphCommunityResult {
914
+ generatedAt: string;
915
+ id: string;
916
+ label: string;
917
+ nodeCount: number;
918
+ pageCount: number;
919
+ edgeCount: number;
920
+ nodes: Array<{
921
+ id: string;
922
+ type: GraphNode["type"];
923
+ label: string;
924
+ pageId?: string;
925
+ sourceClass?: SourceClass;
926
+ degree?: number;
927
+ bridgeScore?: number;
928
+ confidence?: number;
929
+ }>;
930
+ pages: Array<{
931
+ id: string;
932
+ path: string;
933
+ title: string;
934
+ kind: PageKind;
935
+ sourceClass?: SourceClass;
936
+ freshness: Freshness;
937
+ }>;
938
+ edges: Array<{
939
+ id: string;
940
+ source: string;
941
+ target: string;
942
+ sourceLabel?: string;
943
+ targetLabel?: string;
944
+ relation: string;
945
+ evidenceClass: EvidenceClass;
946
+ confidence: number;
947
+ }>;
948
+ }
875
949
  interface GraphQueryMatch {
876
950
  type: "node" | "page" | "hyperedge";
877
951
  id: string;
@@ -1445,6 +1519,28 @@ interface WatchStatusResult {
1445
1519
  lastRun?: WatchRunRecord;
1446
1520
  pendingSemanticRefresh: PendingSemanticRefreshEntry[];
1447
1521
  }
1522
+ interface GraphStatusChange {
1523
+ path: string;
1524
+ repoRoot: string;
1525
+ changeType: "added" | "modified" | "removed";
1526
+ sourceId?: string;
1527
+ sourceKind?: SourceKind;
1528
+ refreshType: "code" | "semantic";
1529
+ }
1530
+ interface GraphStatusResult {
1531
+ generatedAt: string;
1532
+ graphExists: boolean;
1533
+ graphPath: string;
1534
+ reportExists: boolean;
1535
+ reportPath: string;
1536
+ trackedRepoRoots: string[];
1537
+ codeChangeCount: number;
1538
+ semanticChangeCount: number;
1539
+ pendingSemanticRefresh: PendingSemanticRefreshEntry[];
1540
+ stale: boolean;
1541
+ recommendedCommand: string | null;
1542
+ changes: GraphStatusChange[];
1543
+ }
1448
1544
  interface WatchController {
1449
1545
  close(): Promise<void>;
1450
1546
  }
@@ -2071,9 +2167,11 @@ declare function autoCommitWikiChanges(rootDir: string, operation: string, detai
2071
2167
  declare const DEFAULT_PROMOTION_CONFIG: CandidatePromotionConfig;
2072
2168
  declare function evaluateCandidateForPromotion(page: GraphPage, graph: GraphArtifact, history: CompileState["candidateHistory"] | undefined, config: CandidatePromotionConfig, now?: number): PromotionDecision;
2073
2169
 
2170
+ declare const SWARMVAULT_OUT_ENV = "SWARMVAULT_OUT";
2074
2171
  declare function defaultVaultConfig(profile?: VaultProfileConfig): VaultConfig;
2075
2172
  declare function defaultVaultSchema(profile?: string | VaultProfileConfig): string;
2076
2173
  declare function resolvePaths(rootDir: string, config?: VaultConfig, configPath?: string, schemaPath?: string): ResolvedPaths;
2174
+ declare function resolveArtifactRootDir(rootDir: string): string;
2077
2175
  declare function loadVaultConfig(rootDir: string): Promise<{
2078
2176
  config: VaultConfig;
2079
2177
  paths: ResolvedPaths;
@@ -2325,6 +2423,10 @@ declare function renderGraphShareSvg(artifact: GraphShareArtifact): string;
2325
2423
  declare function renderGraphSharePreviewHtml(artifact: GraphShareArtifact): string;
2326
2424
  declare function renderGraphShareBundleFiles(artifact: GraphShareArtifact): GraphShareBundleFile[];
2327
2425
 
2426
+ declare function getGraphStatus(rootDir: string, options?: {
2427
+ repoRoots?: string[];
2428
+ }): Promise<GraphStatusResult>;
2429
+
2328
2430
  declare function graphDiff(oldGraph: GraphArtifact, newGraph: GraphArtifact): GraphDiffResult;
2329
2431
  /**
2330
2432
  * Compute the blast radius of changing a file/module by tracing reverse import
@@ -2339,6 +2441,7 @@ declare function installGitHooks(rootDir: string): Promise<GitHookStatus>;
2339
2441
  declare function uninstallGitHooks(rootDir: string): Promise<GitHookStatus>;
2340
2442
 
2341
2443
  declare function listTrackedRepoRoots(rootDir: string): Promise<string[]>;
2444
+ declare function checkTrackedRepoChanges(rootDir: string, repoRoots?: string[]): Promise<GraphStatusChange[]>;
2342
2445
  declare function syncTrackedRepos(rootDir: string, options?: IngestOptions, repoRoots?: string[]): Promise<RepoSyncResult>;
2343
2446
  declare function syncTrackedReposForWatch(rootDir: string, options?: IngestOptions, repoRoots?: string[]): Promise<WatchRepoSyncResult>;
2344
2447
  declare function ingestInputDetailed(rootDir: string, input: string, options?: IngestOptions): Promise<InputIngestResult>;
@@ -2860,6 +2963,11 @@ declare function benchmarkVault(rootDir: string, options?: BenchmarkOptions): Pr
2860
2963
  declare function pathGraphVault(rootDir: string, from: string, to: string): Promise<GraphPathResult>;
2861
2964
  declare function explainGraphVault(rootDir: string, target: string): Promise<GraphExplainResult>;
2862
2965
  declare function listGraphHyperedges(rootDir: string, target?: string, limit?: number): Promise<GraphHyperedge[]>;
2966
+ declare function graphStatsVault(rootDir: string): Promise<GraphStatsResult>;
2967
+ declare function refreshGraphClusters(rootDir: string, options?: {
2968
+ resolution?: number;
2969
+ }): Promise<GraphClusterRefreshResult>;
2970
+ declare function getGraphCommunityVault(rootDir: string, target: string, limit?: number): Promise<GraphCommunityResult>;
2863
2971
  declare function readGraphReport(rootDir: string): Promise<GraphReportArtifact | null>;
2864
2972
  declare function listGodNodes(rootDir: string, limit?: number): Promise<GraphNode[]>;
2865
2973
  declare function blastRadiusVault(rootDir: string, target: string, options?: {
@@ -2959,4 +3067,4 @@ declare function createWebSearchAdapter(id: string, config: WebSearchProviderCon
2959
3067
  type WebSearchTaskId = "deepLintProvider" | "queryProvider" | "exploreProvider";
2960
3068
  declare function getWebSearchAdapterForTask(rootDir: string, task: WebSearchTaskId): Promise<WebSearchAdapter>;
2961
3069
 
2962
- export { ALL_MIGRATIONS, type AddOptions, type AddResult, type AgentMemoryDecision, type AgentMemoryNote, type AgentMemoryResumeFormat, type AgentMemoryTask, type AgentMemoryTaskResult, type AgentMemoryTaskStatus, type AgentMemoryTaskSummary, type AgentType, type AnalyzedTerm, type ApprovalBundleType, type ApprovalChangeType, type ApprovalDetail, type ApprovalDiffHunk, type ApprovalDiffLine, type ApprovalEntry, type ApprovalEntryDetail, type ApprovalEntryLabel, type ApprovalEntryStatus, type ApprovalFrontmatterChange, type ApprovalManifest, type ApprovalStructuredDiff, type ApprovalSummary, type AudioTranscriptionRequest, type AudioTranscriptionResponse, type BenchmarkArtifact, type BenchmarkByClassEntry, type BenchmarkOptions, type BenchmarkQuestionResult, type BenchmarkSummary, type BlastRadiusResult, type BuildContextPackOptions, type BuildContextPackResult, type CandidatePromotionConfig, type CandidateRecord, type ChartDatum, type ChartSpec, type ClaimStatus, type CodeAnalysis, type CodeDiagnostic, type CodeImport, type CodeIndexArtifact, type CodeIndexEntry, type CodeLanguage, type CodeSymbol, type CodeSymbolKind, type CommandRoleExecutorConfig, type CompileOptions, type CompileResult, type CompileState, type ConsolidationConfig, type ConsolidationPromotion, type ConsolidationResult, type ContextPack, type ContextPackFormat, type ContextPackItem, type ContextPackItemKind, type ContextPackOmittedItem, type ContextPackSummary, DEFAULT_CONSOLIDATION_CONFIG, DEFAULT_HALF_LIFE_DAYS, DEFAULT_HALF_LIFE_DAYS_BY_SOURCE_CLASS, DEFAULT_PROMOTION_CONFIG, DEFAULT_REDACTION_PATTERNS, DEFAULT_STALE_THRESHOLD, type DegradationOutcome, type DirectoryIngestFailure, type DirectoryIngestResult, type DirectoryIngestSkip, type EmbeddingCacheArtifact, type EmbeddingCacheEntry, type EvidenceClass, type ExploreOptions, type ExploreResult, type ExploreStepResult, type ExtractionClaim, type ExtractionKind, type ExtractionTerm, type FinishMemoryTaskOptions, type Freshness, type FreshnessConfig, type GenerationAttachment, type GenerationRequest, type GenerationResponse, type GitHookStatus, type GraphArtifact, type GraphDiffResult, type GraphEdge, type GraphExplainNeighbor, type GraphExplainResult, type GraphExportFormat, type GraphExportResult, type GraphHyperedge, type GraphNode, type GraphPage, type GraphPathResult, type GraphPushCounts, type GraphPushNeo4jOptions, type GraphPushResult, type GraphQueryMatch, type GraphQueryResult, type GraphReportArtifact, type GraphShareArtifact, type GraphShareBundleFile, type GuidedSessionMode, type GuidedSourceSessionAnswers, type GuidedSourceSessionQuestion, type GuidedSourceSessionRecord, type GuidedSourceSessionStatus, type ImageGenerationRequest, type ImageGenerationResponse, type ImageVisionExtraction, type InboxImportResult, type InboxImportSkip, type IngestOptions, type InitOptions, type InputIngestResult, type InstallAgentOptions, type InstallAgentResult, LARGE_REPO_NODE_THRESHOLD, LOCAL_WHISPER_MODEL_SIZES, type LintFinding, type LintOptions, type LocalWhisperAdapterOptions, type LocalWhisperBinaryDiscovery, LocalWhisperProviderAdapter, type LocalWhisperSetupStatus, type ManagedSourceAddOptions, type ManagedSourceAddResult, type ManagedSourceDeleteResult, type ManagedSourceKind, type ManagedSourceRecord, type ManagedSourceReloadOptions, type ManagedSourceReloadResult, type ManagedSourceStatus, type ManagedSourceSyncCounts, type ManagedSourcesArtifact, type MemoryTier, type MigrationPlan, type MigrationResult, type MigrationStep, type Neo4jGraphSinkConfig, OPENAI_COMPATIBLE_CAPABILITY_MATRIX, type OpenAiCompatiblePresetId, type OrchestrationConfig, type OrchestrationFinding, type OrchestrationProposal, type OrchestrationRole, type OrchestrationRoleConfig, type OrchestrationRoleResult, type OutputAsset, type OutputAssetRole, type OutputFormat, type OutputOrigin, type PageKind, type PageManager, type PageStatus, type PendingSemanticRefreshEntry, type Polarity, type PromotionDecision, type PromotionGateKind, type PromotionGateResult, type PromotionSession, type ProviderAdapter, type ProviderCapability, type ProviderConfig, type ProviderPresetCapability, type ProviderRegistrationOptions, type ProviderRegistrationResult, type ProviderRoleExecutorConfig, type ProviderType, type QueryOptions, type QueryResult, type RedactionMatchSummary, type RedactionPatternConfig, type RedactionSettings, type RedactionSummary, type RepoSyncResult, type ResolvedLargeRepoDefaults, type ResolvedPaths, type ResumeMemoryTaskOptions, type ResumeMemoryTaskResult, type RetrievalConfig, type RetrievalDoctorResult, type RetrievalManifest, type RetrievalStatus, type ReviewActionResult, type RoleExecutorConfig, type SceneElement, type SceneSpec, type ScheduleController, type ScheduleJobConfig, type ScheduleStateRecord, type ScheduleTriggerConfig, type ScheduledCompileTask, type ScheduledConsolidateTask, type ScheduledExploreTask, type ScheduledLintTask, type ScheduledQueryTask, type ScheduledRunResult, type ScheduledTaskConfig, type SearchResult, type SourceAnalysis, type SourceAttachment, type SourceCaptureType, type SourceClaim, type SourceClass, type SourceExtractionArtifact, type SourceGuideResult, type SourceKind, type SourceManifest, type SourceRationale, type SourceReviewResult, type StartMemoryTaskOptions, type SynthesizedHubEdge, type SynthesizedHubNode, type SynthesizedHyperedgeHubs, type UpdateMemoryTaskOptions, type VaultConfig, type VaultDashboardPack, type VaultDoctorAction, type VaultDoctorCheck, type VaultDoctorCounts, type VaultDoctorRecommendation, type VaultDoctorRecommendationPriority, type VaultDoctorReport, type VaultDoctorSafeAction, type VaultDoctorStatus, type VaultProfileConfig, type VaultProfilePreset, type VaultVersionRecord, type WatchConfig, type WatchController, type WatchOptions, type WatchRepoSyncResult, type WatchRunRecord, type WatchStatusResult, type WebSearchAdapter, type WebSearchProviderConfig, type WebSearchProviderType, type WebSearchResult, type WhisperRunResult, type WhisperRunner, acceptApproval, addInput, addManagedSource, addWatchedRoot, agentTypeSchema, applyDecayToPages, archiveCandidate, assertProviderCapability, autoCommitWikiChanges, benchmarkVault, blastRadius, blastRadiusVault, bootstrapDemo, buildConfiguredRedactor, buildContextPack, buildGraphShareArtifact, buildMemoryGraphElements, buildRedactor, compileVault, computeDecayScore, consolidateVault, createMcpServer, createProvider, createSupersessionEdge, createWebSearchAdapter, defaultVaultConfig, defaultVaultSchema, deleteContextPack, deleteManagedSource, detectVaultVersion, discoverLocalWhisperBinary, doctorRetrieval, doctorVault, downloadWhisperModel, ensureMemoryLedger, estimatePageTokens, estimateTokens, evaluateCandidateForPromotion, expectedModelPath, explainGraphVault, exploreVault, exportGraphFormat, exportGraphHtml, exportGraphReportHtml, exportObsidianCanvas, exportObsidianVault, finishMemoryTask, getGitHookStatus, getProviderForTask, getRetrievalStatus, getWatchStatus, getWebSearchAdapterForTask, getWorkspaceInfo, graphDiff, guideManagedSource, guideSourceScope, importInbox, ingestDirectory, ingestInput, ingestInputDetailed, initVault, initWorkspace, installAgent, installConfiguredAgents, installGitHooks, lintVault, listApprovals, listCandidates, listContextPacks, listGodNodes, listGraphHyperedges, listManagedSourceRecords, listManifests, listMemoryTasks, listPages, listSchedules, listTrackedRepoRoots, listWatchedRoots, loadMemoryTaskPages, loadVaultConfig, loadVaultSchema, loadVaultSchemas, lookupPresetCapabilities, markSuperseded, memoryTaskHashes, modelDownloadUrl, pathGraphVault, persistDecayFrontmatter, planMigration, previewCandidatePromotions, promoteCandidate, providerCapabilitySchema, providerTypeSchema, pushGraphNeo4j, queryGraphVault, queryVault, readApproval, readContextPack, readExtractedText, readGraphReport, readMemoryTask, readPage, rebuildRetrievalIndex, registerLocalWhisperProvider, rejectApproval, reloadManagedSources, removeWatchedRoot, renderContextPackLlms, renderContextPackMarkdown, renderGraphShareBundleFiles, renderGraphShareMarkdown, renderGraphSharePreviewHtml, renderGraphShareSvg, renderMemoryTaskMarkdown, resetDecay, resolveConsolidationConfig, resolveDecayConfig, resolveLargeRepoDefaults, resolvePaths, resolveRedactionPatterns, resolveRetrievalConfig, resolveWatchedRepoRoots, resumeMemoryTask, resumeSourceSession, reviewManagedSource, reviewSourceScope, runAutoPromotion, runConsolidation, runDecayPass, runMigration, runSchedule, runWatchCycle, searchVault, serveSchedules, stageGeneratedOutputPages, startGraphServer, startMcpServer, startMemoryTask, summarizeLocalWhisperSetup, syncTrackedRepos, syncTrackedReposForWatch, synthesizeHyperedgeHubs, trimToTokenBudget, uninstallGitHooks, updateMemoryTask, watchVault, webSearchProviderTypeSchema, withCapabilityFallback, writeRetrievalManifest };
3070
+ export { ALL_MIGRATIONS, type AddOptions, type AddResult, type AgentMemoryDecision, type AgentMemoryNote, type AgentMemoryResumeFormat, type AgentMemoryTask, type AgentMemoryTaskResult, type AgentMemoryTaskStatus, type AgentMemoryTaskSummary, type AgentType, type AnalyzedTerm, type ApprovalBundleType, type ApprovalChangeType, type ApprovalDetail, type ApprovalDiffHunk, type ApprovalDiffLine, type ApprovalEntry, type ApprovalEntryDetail, type ApprovalEntryLabel, type ApprovalEntryStatus, type ApprovalFrontmatterChange, type ApprovalManifest, type ApprovalStructuredDiff, type ApprovalSummary, type AudioTranscriptionRequest, type AudioTranscriptionResponse, type BenchmarkArtifact, type BenchmarkByClassEntry, type BenchmarkOptions, type BenchmarkQuestionResult, type BenchmarkSummary, type BlastRadiusResult, type BuildContextPackOptions, type BuildContextPackResult, type CandidatePromotionConfig, type CandidateRecord, type ChartDatum, type ChartSpec, type ClaimStatus, type CodeAnalysis, type CodeDiagnostic, type CodeImport, type CodeIndexArtifact, type CodeIndexEntry, type CodeLanguage, type CodeRelation, type CodeSymbol, type CodeSymbolKind, type CommandRoleExecutorConfig, type CompileOptions, type CompileResult, type CompileState, type ConsolidationConfig, type ConsolidationPromotion, type ConsolidationResult, type ContextPack, type ContextPackFormat, type ContextPackItem, type ContextPackItemKind, type ContextPackOmittedItem, type ContextPackSummary, DEFAULT_CONSOLIDATION_CONFIG, DEFAULT_HALF_LIFE_DAYS, DEFAULT_HALF_LIFE_DAYS_BY_SOURCE_CLASS, DEFAULT_PROMOTION_CONFIG, DEFAULT_REDACTION_PATTERNS, DEFAULT_STALE_THRESHOLD, type DegradationOutcome, type DirectoryIngestFailure, type DirectoryIngestResult, type DirectoryIngestSkip, type EmbeddingCacheArtifact, type EmbeddingCacheEntry, type EvidenceClass, type ExploreOptions, type ExploreResult, type ExploreStepResult, type ExtractionClaim, type ExtractionKind, type ExtractionTerm, type FinishMemoryTaskOptions, type Freshness, type FreshnessConfig, type GenerationAttachment, type GenerationRequest, type GenerationResponse, type GitHookStatus, type GraphArtifact, type GraphClusterRefreshResult, type GraphCommunityResult, type GraphDiffResult, type GraphEdge, type GraphExplainNeighbor, type GraphExplainResult, type GraphExportFormat, type GraphExportResult, type GraphHyperedge, type GraphNode, type GraphPage, type GraphPathResult, type GraphPushCounts, type GraphPushNeo4jOptions, type GraphPushResult, type GraphQueryMatch, type GraphQueryResult, type GraphReportArtifact, type GraphShareArtifact, type GraphShareBundleFile, type GraphStatsResult, type GraphStatusChange, type GraphStatusResult, type GuidedSessionMode, type GuidedSourceSessionAnswers, type GuidedSourceSessionQuestion, type GuidedSourceSessionRecord, type GuidedSourceSessionStatus, type ImageGenerationRequest, type ImageGenerationResponse, type ImageVisionExtraction, type InboxImportResult, type InboxImportSkip, type IngestOptions, type InitOptions, type InputIngestResult, type InstallAgentOptions, type InstallAgentResult, LARGE_REPO_NODE_THRESHOLD, LOCAL_WHISPER_MODEL_SIZES, type LintFinding, type LintOptions, type LocalWhisperAdapterOptions, type LocalWhisperBinaryDiscovery, LocalWhisperProviderAdapter, type LocalWhisperSetupStatus, type ManagedSourceAddOptions, type ManagedSourceAddResult, type ManagedSourceDeleteResult, type ManagedSourceKind, type ManagedSourceRecord, type ManagedSourceReloadOptions, type ManagedSourceReloadResult, type ManagedSourceStatus, type ManagedSourceSyncCounts, type ManagedSourcesArtifact, type MemoryTier, type MigrationPlan, type MigrationResult, type MigrationStep, type Neo4jGraphSinkConfig, OPENAI_COMPATIBLE_CAPABILITY_MATRIX, type OpenAiCompatiblePresetId, type OrchestrationConfig, type OrchestrationFinding, type OrchestrationProposal, type OrchestrationRole, type OrchestrationRoleConfig, type OrchestrationRoleResult, type OutputAsset, type OutputAssetRole, type OutputFormat, type OutputOrigin, type PageKind, type PageManager, type PageStatus, type PendingSemanticRefreshEntry, type Polarity, type PromotionDecision, type PromotionGateKind, type PromotionGateResult, type PromotionSession, type ProviderAdapter, type ProviderCapability, type ProviderConfig, type ProviderPresetCapability, type ProviderRegistrationOptions, type ProviderRegistrationResult, type ProviderRoleExecutorConfig, type ProviderType, type QueryOptions, type QueryResult, type RedactionMatchSummary, type RedactionPatternConfig, type RedactionSettings, type RedactionSummary, type RepoSyncResult, type ResolvedLargeRepoDefaults, type ResolvedPaths, type ResumeMemoryTaskOptions, type ResumeMemoryTaskResult, type RetrievalConfig, type RetrievalDoctorResult, type RetrievalManifest, type RetrievalStatus, type ReviewActionResult, type RoleExecutorConfig, SWARMVAULT_OUT_ENV, type SceneElement, type SceneSpec, type ScheduleController, type ScheduleJobConfig, type ScheduleStateRecord, type ScheduleTriggerConfig, type ScheduledCompileTask, type ScheduledConsolidateTask, type ScheduledExploreTask, type ScheduledLintTask, type ScheduledQueryTask, type ScheduledRunResult, type ScheduledTaskConfig, type SearchResult, type SourceAnalysis, type SourceAttachment, type SourceCaptureType, type SourceClaim, type SourceClass, type SourceExtractionArtifact, type SourceGuideResult, type SourceKind, type SourceManifest, type SourceRationale, type SourceReviewResult, type StartMemoryTaskOptions, type SynthesizedHubEdge, type SynthesizedHubNode, type SynthesizedHyperedgeHubs, type UpdateMemoryTaskOptions, type VaultConfig, type VaultDashboardPack, type VaultDoctorAction, type VaultDoctorCheck, type VaultDoctorCounts, type VaultDoctorRecommendation, type VaultDoctorRecommendationPriority, type VaultDoctorReport, type VaultDoctorSafeAction, type VaultDoctorStatus, type VaultProfileConfig, type VaultProfilePreset, type VaultVersionRecord, type WatchConfig, type WatchController, type WatchOptions, type WatchRepoSyncResult, type WatchRunRecord, type WatchStatusResult, type WebSearchAdapter, type WebSearchProviderConfig, type WebSearchProviderType, type WebSearchResult, type WhisperRunResult, type WhisperRunner, acceptApproval, addInput, addManagedSource, addWatchedRoot, agentTypeSchema, applyDecayToPages, archiveCandidate, assertProviderCapability, autoCommitWikiChanges, benchmarkVault, blastRadius, blastRadiusVault, bootstrapDemo, buildConfiguredRedactor, buildContextPack, buildGraphShareArtifact, buildMemoryGraphElements, buildRedactor, checkTrackedRepoChanges, compileVault, computeDecayScore, consolidateVault, createMcpServer, createProvider, createSupersessionEdge, createWebSearchAdapter, defaultVaultConfig, defaultVaultSchema, deleteContextPack, deleteManagedSource, detectVaultVersion, discoverLocalWhisperBinary, doctorRetrieval, doctorVault, downloadWhisperModel, ensureMemoryLedger, estimatePageTokens, estimateTokens, evaluateCandidateForPromotion, expectedModelPath, explainGraphVault, exploreVault, exportGraphFormat, exportGraphHtml, exportGraphReportHtml, exportObsidianCanvas, exportObsidianVault, finishMemoryTask, getGitHookStatus, getGraphCommunityVault, getGraphStatus, getProviderForTask, getRetrievalStatus, getWatchStatus, getWebSearchAdapterForTask, getWorkspaceInfo, graphDiff, graphStatsVault, guideManagedSource, guideSourceScope, importInbox, ingestDirectory, ingestInput, ingestInputDetailed, initVault, initWorkspace, installAgent, installConfiguredAgents, installGitHooks, lintVault, listApprovals, listCandidates, listContextPacks, listGodNodes, listGraphHyperedges, listManagedSourceRecords, listManifests, listMemoryTasks, listPages, listSchedules, listTrackedRepoRoots, listWatchedRoots, loadMemoryTaskPages, loadVaultConfig, loadVaultSchema, loadVaultSchemas, lookupPresetCapabilities, markSuperseded, memoryTaskHashes, modelDownloadUrl, pathGraphVault, persistDecayFrontmatter, planMigration, previewCandidatePromotions, promoteCandidate, providerCapabilitySchema, providerTypeSchema, pushGraphNeo4j, queryGraphVault, queryVault, readApproval, readContextPack, readExtractedText, readGraphReport, readMemoryTask, readPage, rebuildRetrievalIndex, refreshGraphClusters, registerLocalWhisperProvider, rejectApproval, reloadManagedSources, removeWatchedRoot, renderContextPackLlms, renderContextPackMarkdown, renderGraphShareBundleFiles, renderGraphShareMarkdown, renderGraphSharePreviewHtml, renderGraphShareSvg, renderMemoryTaskMarkdown, resetDecay, resolveArtifactRootDir, resolveConsolidationConfig, resolveDecayConfig, resolveLargeRepoDefaults, resolvePaths, resolveRedactionPatterns, resolveRetrievalConfig, resolveWatchedRepoRoots, resumeMemoryTask, resumeSourceSession, reviewManagedSource, reviewSourceScope, runAutoPromotion, runConsolidation, runDecayPass, runMigration, runSchedule, runWatchCycle, searchVault, serveSchedules, stageGeneratedOutputPages, startGraphServer, startMcpServer, startMemoryTask, summarizeLocalWhisperSetup, syncTrackedRepos, syncTrackedReposForWatch, synthesizeHyperedgeHubs, trimToTokenBudget, uninstallGitHooks, updateMemoryTask, watchVault, webSearchProviderTypeSchema, withCapabilityFallback, writeRetrievalManifest };