@swarmvaultai/engine 3.16.1 → 3.18.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.
Files changed (145) hide show
  1. package/dist/chunk-2CH2WWS4.js +1359 -0
  2. package/dist/chunk-2PN46RDI.js +26846 -0
  3. package/dist/chunk-333AMRSV.js +1056 -0
  4. package/dist/chunk-3GVEUYQZ.js +1641 -0
  5. package/dist/chunk-4MSSM2GH.js +1476 -0
  6. package/dist/chunk-563TZ4TZ.js +26573 -0
  7. package/dist/chunk-5GEPTIZE.js +26010 -0
  8. package/dist/chunk-5HNZ2WQI.js +1341 -0
  9. package/dist/chunk-5Q4IV4O3.js +1336 -0
  10. package/dist/chunk-65IRGGXX.js +27576 -0
  11. package/dist/chunk-6MO57J5C.js +988 -0
  12. package/dist/chunk-6UPHDGEB.js +1073 -0
  13. package/dist/chunk-75BU5TQ6.js +1690 -0
  14. package/dist/chunk-7O2HJSWQ.js +1686 -0
  15. package/dist/chunk-7QHDATCQ.js +1673 -0
  16. package/dist/chunk-B3FC4J3P.js +1214 -0
  17. package/dist/chunk-BTWPJEP2.js +1421 -0
  18. package/dist/chunk-CG67P2HB.js +1420 -0
  19. package/dist/chunk-CSPDMCON.js +26846 -0
  20. package/dist/chunk-CVFY54CF.js +24893 -0
  21. package/dist/chunk-CWLDFLH2.js +1163 -0
  22. package/dist/chunk-DAJAZPPO.js +26865 -0
  23. package/dist/chunk-DCSXDZAF.js +27698 -0
  24. package/dist/chunk-EEWB4WGH.js +1056 -0
  25. package/dist/chunk-EXD4RWT3.js +1131 -0
  26. package/dist/chunk-F7HZZ3VM.js +931 -0
  27. package/dist/chunk-FD3LJQ4T.js +1216 -0
  28. package/dist/chunk-G2TH6ZTA.js +1468 -0
  29. package/dist/chunk-H3CDZYRE.js +1701 -0
  30. package/dist/chunk-HFU5S5NO.js +838 -0
  31. package/dist/chunk-HKU2T5JX.js +25213 -0
  32. package/dist/chunk-HOJ7NSYC.js +937 -0
  33. package/dist/chunk-HORJDLXV.js +27614 -0
  34. package/dist/chunk-HRRPWXRZ.js +1335 -0
  35. package/dist/chunk-HW72C7O2.js +1690 -0
  36. package/dist/chunk-IAEYFTUS.js +1159 -0
  37. package/dist/chunk-IHMJCCXR.js +1146 -0
  38. package/dist/chunk-JEWLYIHN.js +27619 -0
  39. package/dist/chunk-JJDJF2P3.js +27012 -0
  40. package/dist/chunk-JTRE7C7P.js +26062 -0
  41. package/dist/chunk-L7DKPPV4.js +27339 -0
  42. package/dist/chunk-LEUV6TWJ.js +1131 -0
  43. package/dist/chunk-MB7HPUTR.js +1364 -0
  44. package/dist/chunk-MZSUYTSL.js +998 -0
  45. package/dist/chunk-N56FAH4N.js +1404 -0
  46. package/dist/chunk-NCSZ4AKP.js +1057 -0
  47. package/dist/chunk-NECZ4MUE.js +1416 -0
  48. package/dist/chunk-NHGS4LOI.js +1346 -0
  49. package/dist/chunk-NUWZUYE7.js +1701 -0
  50. package/dist/chunk-OK5752AP.js +1325 -0
  51. package/dist/chunk-PXZGMENW.js +27664 -0
  52. package/dist/chunk-QMW7OISM.js +1063 -0
  53. package/dist/chunk-RN56HUXA.js +26972 -0
  54. package/dist/chunk-RSQRF4FV.js +1424 -0
  55. package/dist/chunk-S2E65WRI.js +26062 -0
  56. package/dist/chunk-SRHM3HP4.js +944 -0
  57. package/dist/chunk-U7JO257M.js +25017 -0
  58. package/dist/chunk-UQCF65BN.js +1623 -0
  59. package/dist/chunk-USSP4GVB.js +25064 -0
  60. package/dist/chunk-V7KX3AQD.js +26010 -0
  61. package/dist/chunk-VSDBQVSE.js +27584 -0
  62. package/dist/chunk-WK2JR5H7.js +27694 -0
  63. package/dist/chunk-WOA5LSNB.js +26559 -0
  64. package/dist/chunk-WWP3VPEJ.js +26080 -0
  65. package/dist/chunk-YFKWMXJ6.js +26066 -0
  66. package/dist/chunk-Z552HHPV.js +26846 -0
  67. package/dist/chunk-ZQ5T64AR.js +1365 -0
  68. package/dist/hooks/claude.js +246 -24
  69. package/dist/hooks/codex.js +144 -11
  70. package/dist/hooks/copilot.js +95 -3
  71. package/dist/hooks/gemini.js +153 -5
  72. package/dist/hooks/opencode.js +4 -2
  73. package/dist/index.d.ts +36 -4
  74. package/dist/index.js +252 -12
  75. package/dist/memory-7OSGN7IU.js +32 -0
  76. package/dist/memory-A4VPLUBA.js +32 -0
  77. package/dist/memory-DNSQCDHC.js +32 -0
  78. package/dist/memory-ECS3TSGC.js +32 -0
  79. package/dist/memory-FVIBFROA.js +32 -0
  80. package/dist/memory-G6I3DBW4.js +32 -0
  81. package/dist/memory-GFOW2QWQ.js +32 -0
  82. package/dist/memory-GSCQ6F53.js +32 -0
  83. package/dist/memory-HE6VWUPV.js +32 -0
  84. package/dist/memory-HEA7XNKB.js +32 -0
  85. package/dist/memory-HMP3Y4PQ.js +32 -0
  86. package/dist/memory-JRYTVHNH.js +32 -0
  87. package/dist/memory-K3NL5E3K.js +32 -0
  88. package/dist/memory-KANI73CX.js +32 -0
  89. package/dist/memory-KI5G2A4C.js +32 -0
  90. package/dist/memory-PK55JUKG.js +32 -0
  91. package/dist/memory-PK5JJNAG.js +32 -0
  92. package/dist/memory-PQWSJ4RR.js +32 -0
  93. package/dist/memory-QCVKS3H4.js +32 -0
  94. package/dist/memory-QURNHGEZ.js +32 -0
  95. package/dist/memory-SAQPBIB4.js +32 -0
  96. package/dist/memory-SVGRP5KS.js +32 -0
  97. package/dist/memory-TQ46BGCI.js +32 -0
  98. package/dist/memory-UUPLB6O2.js +32 -0
  99. package/dist/memory-YKQWWIVY.js +32 -0
  100. package/dist/memory-Z7BP5OSC.js +32 -0
  101. package/dist/registry-2QC3VN7M.js +12 -0
  102. package/dist/registry-2REAPKPO.js +12 -0
  103. package/dist/registry-2XHXZDGH.js +12 -0
  104. package/dist/registry-4C55ZCPL.js +12 -0
  105. package/dist/registry-4QRMVAHX.js +12 -0
  106. package/dist/registry-5SYH3Y3U.js +12 -0
  107. package/dist/registry-6KZMA3XM.js +12 -0
  108. package/dist/registry-7QACDJQQ.js +12 -0
  109. package/dist/registry-B7UXRBW3.js +12 -0
  110. package/dist/registry-FKEREVDO.js +12 -0
  111. package/dist/registry-FLSGGY2R.js +12 -0
  112. package/dist/registry-G7NSRYCO.js +12 -0
  113. package/dist/registry-GH4O3A7H.js +12 -0
  114. package/dist/registry-IBH6K2KK.js +12 -0
  115. package/dist/registry-ILDEBNCW.js +12 -0
  116. package/dist/registry-JFEW5RUP.js +12 -0
  117. package/dist/registry-JQYQOZYN.js +12 -0
  118. package/dist/registry-JR5WY22P.js +12 -0
  119. package/dist/registry-KLO5YIHP.js +12 -0
  120. package/dist/registry-KVJAO5DF.js +12 -0
  121. package/dist/registry-MYJX6AEE.js +12 -0
  122. package/dist/registry-NBLIJHZT.js +12 -0
  123. package/dist/registry-NLRWSN5J.js +12 -0
  124. package/dist/registry-NMXDBYIZ.js +12 -0
  125. package/dist/registry-OUB6W3LM.js +12 -0
  126. package/dist/registry-P5KRT66L.js +12 -0
  127. package/dist/registry-PGZWRXMD.js +12 -0
  128. package/dist/registry-QAG2ZYH3.js +12 -0
  129. package/dist/registry-SUXWCWB4.js +12 -0
  130. package/dist/registry-SYCRRA65.js +12 -0
  131. package/dist/registry-TYROWPR5.js +12 -0
  132. package/dist/registry-U23ML76I.js +12 -0
  133. package/dist/registry-U76DBOV3.js +12 -0
  134. package/dist/registry-UA42LQUQ.js +12 -0
  135. package/dist/registry-W6ZFRI73.js +12 -0
  136. package/dist/registry-X5PMZTZY.js +12 -0
  137. package/dist/registry-XIL5F33J.js +12 -0
  138. package/dist/registry-XOPLQNZY.js +12 -0
  139. package/dist/registry-YDXVCE4Q.js +12 -0
  140. package/dist/registry-YGVTLIZH.js +12 -0
  141. package/dist/registry-ZNW3FDED.js +12 -0
  142. package/dist/viewer/assets/{index-Cq5HAlrV.js → index-BZE-2FtS.js} +37 -37
  143. package/dist/viewer/index.html +1 -1
  144. package/dist/viewer/lib.js +29 -1
  145. package/package.json +1 -1
@@ -57,6 +57,10 @@ function resolveToolName(input) {
57
57
  const shaped = input ?? {};
58
58
  return String(shaped.toolName ?? shaped.tool_name ?? shaped.tool?.name ?? shaped.name ?? "");
59
59
  }
60
+ function resolveToolInput(input) {
61
+ const shaped = input ?? {};
62
+ return shaped.toolInput ?? shaped.tool_input ?? {};
63
+ }
60
64
  async function hasReport(cwd) {
61
65
  try {
62
66
  await fs.access(reportPath(cwd));
@@ -96,6 +100,102 @@ async function resetSession(cwd, agentKey) {
96
100
  function isBroadSearchTool(toolName) {
97
101
  return /grep|glob|search|find/i.test(toolName);
98
102
  }
103
+ function collectCommandCandidates(node, acc = []) {
104
+ if (!node || typeof node !== "object") {
105
+ return acc;
106
+ }
107
+ if (Array.isArray(node)) {
108
+ for (const item of node) {
109
+ collectCommandCandidates(item, acc);
110
+ }
111
+ return acc;
112
+ }
113
+ for (const [key, value] of Object.entries(node)) {
114
+ if (["command", "cmd", "script", "bash", "shell"].includes(key) && typeof value === "string") {
115
+ acc.push(value);
116
+ continue;
117
+ }
118
+ collectCommandCandidates(value, acc);
119
+ }
120
+ return acc;
121
+ }
122
+ var VAULT_ARTIFACT_SEGMENTS = ["wiki", "raw", "state", "agent", "inbox"];
123
+ function isVaultArtifactSearch(input, cwd) {
124
+ const artifactRoot = artifactRootDir(cwd);
125
+ const candidates = [...collectCandidatePaths(input), ...collectCommandCandidates(input)];
126
+ return candidates.some((candidate) => {
127
+ if (typeof candidate !== "string" || candidate.length === 0) {
128
+ return false;
129
+ }
130
+ const normalized = candidate.replaceAll("\\", "/");
131
+ if (VAULT_ARTIFACT_SEGMENTS.some(
132
+ (segment) => normalized.includes(`${segment}/`) && normalized.match(new RegExp(`(^|[\\s'"=/])${segment}/`))
133
+ )) {
134
+ return true;
135
+ }
136
+ const resolved = path.resolve(cwd, candidate);
137
+ return VAULT_ARTIFACT_SEGMENTS.some(
138
+ (segment) => resolved.startsWith(path.join(artifactRoot, segment) + path.sep) || resolved === path.join(artifactRoot, segment)
139
+ );
140
+ });
141
+ }
142
+ async function isNarrowSearch(input) {
143
+ const toolInput = resolveToolInput(input);
144
+ const candidate = toolInput?.path;
145
+ if (typeof candidate !== "string" || candidate.length === 0) {
146
+ return false;
147
+ }
148
+ try {
149
+ const stats = await fs.stat(candidate);
150
+ return stats.isFile();
151
+ } catch {
152
+ return false;
153
+ }
154
+ }
155
+ async function resolveGraphFirstMode(cwd) {
156
+ const fromEnv = process.env.SWARMVAULT_GRAPH_FIRST?.trim().toLowerCase();
157
+ if (fromEnv === "deny" || fromEnv === "context" || fromEnv === "off") {
158
+ return fromEnv;
159
+ }
160
+ try {
161
+ const raw = await fs.readFile(path.join(cwd, "swarmvault.config.json"), "utf8");
162
+ const parsed = JSON.parse(raw);
163
+ const fromConfig = typeof parsed?.hooks?.graphFirst === "string" ? parsed.hooks.graphFirst.toLowerCase() : "";
164
+ if (fromConfig === "deny" || fromConfig === "context" || fromConfig === "off") {
165
+ return fromConfig;
166
+ }
167
+ } catch {
168
+ }
169
+ return "context";
170
+ }
171
+ async function readWatchStaleness(cwd) {
172
+ const watchDir = path.join(artifactRootDir(cwd), "state", "watch");
173
+ let lastRunAt;
174
+ let lastRunSuccess;
175
+ let pendingCount = 0;
176
+ let found = false;
177
+ try {
178
+ const raw = await fs.readFile(path.join(watchDir, "status.json"), "utf8");
179
+ const parsed = JSON.parse(raw);
180
+ lastRunAt = typeof parsed?.lastRun?.finishedAt === "string" ? parsed.lastRun.finishedAt : void 0;
181
+ lastRunSuccess = typeof parsed?.lastRun?.success === "boolean" ? parsed.lastRun.success : void 0;
182
+ found = true;
183
+ } catch {
184
+ }
185
+ try {
186
+ const raw = await fs.readFile(path.join(watchDir, "pending-semantic-refresh.json"), "utf8");
187
+ const parsed = JSON.parse(raw);
188
+ if (Array.isArray(parsed)) {
189
+ pendingCount = parsed.length;
190
+ found = true;
191
+ }
192
+ } catch {
193
+ }
194
+ if (!found) {
195
+ return null;
196
+ }
197
+ return { lastRunAt, lastRunSuccess, pendingSemanticRefreshCount: pendingCount };
198
+ }
99
199
  async function readHookInput() {
100
200
  let body = "";
101
201
  for await (const chunk of process.stdin) {
@@ -110,7 +210,52 @@ async function readHookInput() {
110
210
  return {};
111
211
  }
112
212
  }
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.";
213
+ var GRAPH_FIRST_COMMANDS = [
214
+ '- `swarmvault graph query "<seed>"` \u2014 top matches with page paths plus an inline excerpt of the best page; usually answers where-is/what-calls in one command',
215
+ '- `swarmvault graph explain "<node>"` \u2014 compact node summary with neighbors and its wiki page',
216
+ "- `swarmvault graph blast <target>` \u2014 reverse-import impact analysis for change-impact questions",
217
+ "- `wiki/graph/report.md` \u2014 orientation report (architecture, communities, key nodes)",
218
+ "Do not add `--json` to these \u2014 the plain output is far smaller and already structured.",
219
+ "Trust the graph/wiki answer for orientation questions; verify in source only when you are about to edit or the evidence conflicts. Answer directly in chat \u2014 do not write answer files unless asked for a durable artifact."
220
+ ];
221
+ function buildGraphFirstNote(staleness) {
222
+ const lines = [
223
+ "This repo has a SwarmVault code graph. To save tokens, answer code-understanding questions (where is X, what calls Y, how is Z structured, impact of changing W) from the graph instead of reading or grepping source files:",
224
+ ...GRAPH_FIRST_COMMANDS,
225
+ "Read source files directly only when you are about to edit them, or when the graph lacks the detail you need.",
226
+ "After your edits the SwarmVault hook refreshes the graph automatically."
227
+ ];
228
+ if (staleness?.pendingSemanticRefreshCount) {
229
+ lines.push(
230
+ `Note: ${staleness.pendingSemanticRefreshCount} non-code change(s) await semantic refresh \u2014 run \`swarmvault compile\` when convenient.`
231
+ );
232
+ }
233
+ if (staleness?.lastRunSuccess === false) {
234
+ lines.push(
235
+ "Note: the last graph refresh failed \u2014 run `swarmvault graph status` then `swarmvault graph update` before relying on the graph."
236
+ );
237
+ }
238
+ return lines.join("\n");
239
+ }
240
+ function extractSearchTerm(input) {
241
+ const toolInput = resolveToolInput(input);
242
+ for (const key of ["pattern", "query", "regex"]) {
243
+ const value = toolInput?.[key];
244
+ if (typeof value === "string" && value.length > 0) {
245
+ return value;
246
+ }
247
+ }
248
+ return "<your term>";
249
+ }
250
+ function buildDenyReason(toolName, input) {
251
+ const term = extractSearchTerm(input).slice(0, 120);
252
+ return [
253
+ `SwarmVault graph-first: this repo has a compiled code graph that answers structure questions in far fewer tokens than ${toolName || "broad search"}.`,
254
+ `Run: swarmvault graph query "${term}" \u2014 it prints the top matches with page paths plus an inline excerpt of the best page, which usually answers the question without reading source. Add --context calls for caller/impact questions. Do not add --json (much larger output).`,
255
+ "Trust that answer for orientation questions instead of re-verifying in source files.",
256
+ "If the graph does not answer, repeat this exact search \u2014 it will be allowed for the rest of the session."
257
+ ].join(" ");
258
+ }
114
259
 
115
260
  // src/hooks/gemini.ts
116
261
  var AGENT_KEY = "gemini";
@@ -128,11 +273,12 @@ async function main() {
128
273
  }
129
274
  if (mode === "session-start") {
130
275
  await resetSession(cwd, AGENT_KEY);
276
+ const graphFirstNote = buildGraphFirstNote(await readWatchStaleness(cwd));
131
277
  emit({
132
- systemMessage: REPORT_NOTE,
278
+ systemMessage: graphFirstNote,
133
279
  hookSpecificOutput: {
134
280
  hookEventName: "SessionStart",
135
- additionalContext: "SwarmVault graph report: wiki/graph/report.md"
281
+ additionalContext: graphFirstNote
136
282
  }
137
283
  });
138
284
  process.exit(0);
@@ -143,8 +289,10 @@ async function main() {
143
289
  emit({});
144
290
  process.exit(0);
145
291
  }
146
- if (isBroadSearchTool(toolName) && !await hasSeenReport(cwd, AGENT_KEY)) {
147
- emit({ systemMessage: REPORT_NOTE });
292
+ const graphFirstMode = await resolveGraphFirstMode(cwd);
293
+ if (graphFirstMode !== "off" && isBroadSearchTool(toolName) && !isVaultArtifactSearch(input, cwd) && !await isNarrowSearch(input) && !await hasSeenReport(cwd, AGENT_KEY)) {
294
+ await markReportRead(cwd, AGENT_KEY);
295
+ emit({ systemMessage: buildDenyReason(toolName, input) });
148
296
  process.exit(0);
149
297
  }
150
298
  emit({});
@@ -20,12 +20,13 @@ async function swarmvaultGraphFirst({ client }) {
20
20
  });
21
21
  }
22
22
  }
23
+ const graphFirstNote = "SwarmVault graph-first: this repo has a compiled code graph. Answer structure questions (where is X, what calls Y) with `swarmvault graph query|explain|path --json`, `swarmvault query`, or wiki/graph/report.md instead of broad grep/glob. Read source files only when editing them or when the graph lacks detail.";
23
24
  return {
24
25
  async "session.created"(input) {
25
26
  reportSeen = false;
26
27
  const cwd = input?.session?.cwd ?? process.cwd();
27
28
  if (await hasReport(cwd)) {
28
- await note("SwarmVault graph report exists. Read wiki/graph/report.md before broad workspace searching.");
29
+ await note(graphFirstNote);
29
30
  }
30
31
  },
31
32
  async "tool.execute.before"(input) {
@@ -39,7 +40,8 @@ async function swarmvaultGraphFirst({ client }) {
39
40
  return;
40
41
  }
41
42
  if (!reportSeen && ["glob", "grep"].includes(String(input?.tool ?? ""))) {
42
- await note("SwarmVault graph report exists. Read wiki/graph/report.md before broad workspace searching.");
43
+ reportSeen = true;
44
+ await note(graphFirstNote);
43
45
  }
44
46
  }
45
47
  };
package/dist/index.d.ts CHANGED
@@ -1007,6 +1007,8 @@ interface GraphQueryResult {
1007
1007
  communities: string[];
1008
1008
  summary: string;
1009
1009
  matches: GraphQueryMatch[];
1010
+ /** Wiki-relative page path for the top match, when one resolves. */
1011
+ topMatchPagePath?: string;
1010
1012
  filters?: GraphQueryFilters;
1011
1013
  filterStats?: GraphQueryFilterStats;
1012
1014
  }
@@ -1597,6 +1599,12 @@ interface WatchOptions {
1597
1599
  overrideRoots?: string[];
1598
1600
  force?: boolean;
1599
1601
  maxGraphShrinkRatio?: number;
1602
+ /**
1603
+ * Explicit file fast path: refresh only these files (code-only) instead of
1604
+ * walking every tracked repo root. Used by agent post-edit hooks and
1605
+ * `swarmvault graph update --file <path>`.
1606
+ */
1607
+ files?: string[];
1600
1608
  }
1601
1609
  interface GraphShrinkDimension {
1602
1610
  before: number;
@@ -1686,6 +1694,14 @@ interface WatchController {
1686
1694
  interface InstallAgentOptions {
1687
1695
  hook?: boolean;
1688
1696
  scope?: "project" | "user";
1697
+ /** Register the SwarmVault MCP server in the agent's project MCP config. */
1698
+ mcp?: boolean;
1699
+ /**
1700
+ * Persist `hooks.graphFirst` in swarmvault.config.json. Enforcement
1701
+ * ("deny") is opt-in at install time; the hook default without config is
1702
+ * advisory "context".
1703
+ */
1704
+ graphFirst?: "deny" | "context" | "off";
1689
1705
  }
1690
1706
  interface InstallAgentResult {
1691
1707
  agent: AgentType;
@@ -2694,14 +2710,28 @@ declare function buildGraphTree(graph: GraphArtifact, options?: GraphTreeOptions
2694
2710
  declare function renderGraphTreeHtml(tree: GraphTreeNode, graph: GraphArtifact): string;
2695
2711
  declare function exportGraphTree(rootDir: string, outputPath?: string, options?: GraphTreeOptions): Promise<GraphTreeExportResult>;
2696
2712
 
2697
- declare function getGitHookStatus(rootDir: string): Promise<GitHookStatus>;
2698
- declare function installGitHooks(rootDir: string): Promise<GitHookStatus>;
2699
- declare function uninstallGitHooks(rootDir: string): Promise<GitHookStatus>;
2713
+ interface GitHookTargetOptions {
2714
+ /**
2715
+ * Git repo to install hooks into, when it is not above the vault root —
2716
+ * e.g. a vault at the workspace parent tracking repos in subdirectories.
2717
+ * The hook block still `cd`s back to the vault root before refreshing.
2718
+ */
2719
+ repoPath?: string;
2720
+ }
2721
+ declare function getGitHookStatus(rootDir: string, options?: GitHookTargetOptions): Promise<GitHookStatus>;
2722
+ declare function installGitHooks(rootDir: string, options?: GitHookTargetOptions): Promise<GitHookStatus>;
2723
+ declare function uninstallGitHooks(rootDir: string, options?: GitHookTargetOptions): Promise<GitHookStatus>;
2700
2724
 
2701
2725
  declare function listTrackedRepoRoots(rootDir: string): Promise<string[]>;
2702
2726
  declare function checkTrackedRepoChanges(rootDir: string, repoRoots?: string[]): Promise<GraphStatusChange[]>;
2703
2727
  declare function syncTrackedRepos(rootDir: string, options?: IngestOptions, repoRoots?: string[]): Promise<RepoSyncResult>;
2704
2728
  declare function syncTrackedReposForWatch(rootDir: string, options?: IngestOptions, repoRoots?: string[]): Promise<WatchRepoSyncResult>;
2729
+ /**
2730
+ * Per-file variant of `syncTrackedReposForWatch`: refreshes only the given
2731
+ * files instead of walking every tracked repo root. Powers
2732
+ * `swarmvault graph update --file <path>` (the agent post-edit fast path).
2733
+ */
2734
+ declare function syncTrackedFiles(rootDir: string, filePaths: string[], options?: IngestOptions): Promise<WatchRepoSyncResult>;
2705
2735
  declare function ingestInputDetailed(rootDir: string, input: string, options?: IngestOptions): Promise<InputIngestResult>;
2706
2736
  declare function ingestInput(rootDir: string, input: string, options?: IngestOptions): Promise<SourceManifest>;
2707
2737
  declare function addInput(rootDir: string, input: string, options?: AddOptions): Promise<AddResult>;
@@ -3301,6 +3331,8 @@ type WatchCycleResult = {
3301
3331
  pendingSemanticRefreshPaths: string[];
3302
3332
  changedPages: string[];
3303
3333
  lintFindingCount?: number;
3334
+ /** Files deferred to the next refresh because another refresh held the lock. */
3335
+ queuedFiles?: string[];
3304
3336
  };
3305
3337
  /**
3306
3338
  * Compute the effective list of repository roots that `swarmvault watch --repo` should track.
@@ -3339,4 +3371,4 @@ declare function createWebSearchAdapter(id: string, config: WebSearchProviderCon
3339
3371
  type WebSearchTaskId = "deepLintProvider" | "queryProvider" | "exploreProvider";
3340
3372
  declare function getWebSearchAdapterForTask(rootDir: string, task: WebSearchTaskId): Promise<WebSearchAdapter>;
3341
3373
 
3342
- export { ALL_MIGRATIONS, type AddOptions, type AddResult, type AgentInstallStatus, type AgentInstallTargetStatus, type AgentMemoryDecision, type AgentMemoryNote, type AgentMemoryResumeFormat, type AgentMemoryTask, type AgentMemoryTaskResult, type AgentMemoryTaskStatus, type AgentMemoryTaskSummary, type AgentType, type AiExportFile, type AiExportOptions, type AiExportResult, 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 AskChatOptions, type AskChatResult, 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 GraphCycle, type GraphCycleResult, 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 GraphQueryFilterStats, type GraphQueryFilters, type GraphQueryMatch, type GraphQueryRelationGroup, type GraphQueryResult, type GraphReportArtifact, type GraphShareArtifact, type GraphShareBundleFile, type GraphShrinkDimension, type GraphShrinkGuardResult, type GraphStatsResult, type GraphStatusChange, type GraphStatusResult, type GraphValidationIssue, type GraphValidationResult, type GraphValidationSeverity, 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 ProviderConfigAddOptions, type ProviderConfigAddResult, type ProviderConfigEntry, type ProviderConfigRemoveOptions, type ProviderConfigRemoveResult, type ProviderPresetCapability, type ProviderRegistrationOptions, type ProviderRegistrationResult, type ProviderRoleExecutorConfig, type ProviderTaskKey, 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 VaultChatSession, type VaultChatSessionSummary, type VaultChatTurn, 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, addProviderConfig, addWatchedRoot, agentTypeSchema, applyDecayToPages, archiveCandidate, askChatSession, assertProviderCapability, autoCommitWikiChanges, benchmarkVault, blastRadius, blastRadiusVault, bootstrapDemo, buildConfiguredRedactor, buildContextPack, buildGraphShareArtifact, buildGraphTree, buildMemoryGraphElements, buildRedactor, checkTrackedRepoChanges, compileVault, computeDecayScore, consolidateVault, createMcpServer, createProvider, createSupersessionEdge, createWebSearchAdapter, defaultVaultConfig, defaultVaultSchema, deleteChatSession, deleteContextPack, deleteManagedSource, detectVaultVersion, discoverLocalWhisperBinary, doctorRetrieval, doctorVault, downloadWhisperModel, ensureMemoryLedger, estimatePageTokens, estimateTokens, evaluateCandidateForPromotion, evaluateGraphShrinkGuard, expectedModelPath, explainGraphVault, exploreVault, exportAiPack, exportGraphFormat, exportGraphHtml, exportGraphReportHtml, exportGraphTree, exportObsidianCanvas, exportObsidianVault, findGraphCycles, finishMemoryTask, getAgentInstallStatus, getGitHookStatus, getGraphCommunityVault, getGraphStatus, getProviderConfigEntry, getProviderForTask, getRetrievalStatus, getWatchStatus, getWebSearchAdapterForTask, getWorkspaceInfo, graphDiff, graphStats, graphStatsVault, guideManagedSource, guideSourceScope, importInbox, ingestDirectory, ingestInput, ingestInputDetailed, initVault, initWorkspace, installAgent, installConfiguredAgents, installGitHooks, lintVault, listApprovals, listCandidates, listChatSessions, listContextPacks, listGodNodes, listGraphHyperedges, listManagedSourceRecords, listManifests, listMemoryTasks, listPages, listProviderConfigEntries, listSchedules, listTrackedRepoRoots, listWatchedRoots, loadMemoryTaskPages, loadVaultConfig, loadVaultSchema, loadVaultSchemas, lookupPresetCapabilities, markSuperseded, memoryTaskHashes, mergeGraphFiles, modelDownloadUrl, pathGraphVault, persistDecayFrontmatter, planMigration, previewCandidatePromotions, projectGraphAfterRemovals, promoteCandidate, providerCapabilitySchema, providerTypeSchema, pushGraphNeo4j, queryGraphVault, queryVault, readApproval, readChatSession, readContextPack, readExtractedText, readGraphReport, readMemoryTask, readPage, rebuildRetrievalIndex, refreshGraphClusters, registerLocalWhisperProvider, rejectApproval, reloadManagedSources, removeProviderConfig, removeWatchedRoot, renderContextPackLlms, renderContextPackMarkdown, renderGraphShareBundleFiles, renderGraphShareMarkdown, renderGraphSharePreviewHtml, renderGraphShareSvg, renderGraphTreeHtml, 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, validateGraphArtifact, validateGraphVault, watchVault, webSearchProviderTypeSchema, withCapabilityFallback, writeRetrievalManifest };
3374
+ export { ALL_MIGRATIONS, type AddOptions, type AddResult, type AgentInstallStatus, type AgentInstallTargetStatus, type AgentMemoryDecision, type AgentMemoryNote, type AgentMemoryResumeFormat, type AgentMemoryTask, type AgentMemoryTaskResult, type AgentMemoryTaskStatus, type AgentMemoryTaskSummary, type AgentType, type AiExportFile, type AiExportOptions, type AiExportResult, 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 AskChatOptions, type AskChatResult, 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 GraphCycle, type GraphCycleResult, 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 GraphQueryFilterStats, type GraphQueryFilters, type GraphQueryMatch, type GraphQueryRelationGroup, type GraphQueryResult, type GraphReportArtifact, type GraphShareArtifact, type GraphShareBundleFile, type GraphShrinkDimension, type GraphShrinkGuardResult, type GraphStatsResult, type GraphStatusChange, type GraphStatusResult, type GraphValidationIssue, type GraphValidationResult, type GraphValidationSeverity, 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 ProviderConfigAddOptions, type ProviderConfigAddResult, type ProviderConfigEntry, type ProviderConfigRemoveOptions, type ProviderConfigRemoveResult, type ProviderPresetCapability, type ProviderRegistrationOptions, type ProviderRegistrationResult, type ProviderRoleExecutorConfig, type ProviderTaskKey, 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 VaultChatSession, type VaultChatSessionSummary, type VaultChatTurn, 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, addProviderConfig, addWatchedRoot, agentTypeSchema, applyDecayToPages, archiveCandidate, askChatSession, assertProviderCapability, autoCommitWikiChanges, benchmarkVault, blastRadius, blastRadiusVault, bootstrapDemo, buildConfiguredRedactor, buildContextPack, buildGraphShareArtifact, buildGraphTree, buildMemoryGraphElements, buildRedactor, checkTrackedRepoChanges, compileVault, computeDecayScore, consolidateVault, createMcpServer, createProvider, createSupersessionEdge, createWebSearchAdapter, defaultVaultConfig, defaultVaultSchema, deleteChatSession, deleteContextPack, deleteManagedSource, detectVaultVersion, discoverLocalWhisperBinary, doctorRetrieval, doctorVault, downloadWhisperModel, ensureMemoryLedger, estimatePageTokens, estimateTokens, evaluateCandidateForPromotion, evaluateGraphShrinkGuard, expectedModelPath, explainGraphVault, exploreVault, exportAiPack, exportGraphFormat, exportGraphHtml, exportGraphReportHtml, exportGraphTree, exportObsidianCanvas, exportObsidianVault, findGraphCycles, finishMemoryTask, getAgentInstallStatus, getGitHookStatus, getGraphCommunityVault, getGraphStatus, getProviderConfigEntry, getProviderForTask, getRetrievalStatus, getWatchStatus, getWebSearchAdapterForTask, getWorkspaceInfo, graphDiff, graphStats, graphStatsVault, guideManagedSource, guideSourceScope, importInbox, ingestDirectory, ingestInput, ingestInputDetailed, initVault, initWorkspace, installAgent, installConfiguredAgents, installGitHooks, lintVault, listApprovals, listCandidates, listChatSessions, listContextPacks, listGodNodes, listGraphHyperedges, listManagedSourceRecords, listManifests, listMemoryTasks, listPages, listProviderConfigEntries, listSchedules, listTrackedRepoRoots, listWatchedRoots, loadMemoryTaskPages, loadVaultConfig, loadVaultSchema, loadVaultSchemas, lookupPresetCapabilities, markSuperseded, memoryTaskHashes, mergeGraphFiles, modelDownloadUrl, pathGraphVault, persistDecayFrontmatter, planMigration, previewCandidatePromotions, projectGraphAfterRemovals, promoteCandidate, providerCapabilitySchema, providerTypeSchema, pushGraphNeo4j, queryGraphVault, queryVault, readApproval, readChatSession, readContextPack, readExtractedText, readGraphReport, readMemoryTask, readPage, rebuildRetrievalIndex, refreshGraphClusters, registerLocalWhisperProvider, rejectApproval, reloadManagedSources, removeProviderConfig, removeWatchedRoot, renderContextPackLlms, renderContextPackMarkdown, renderGraphShareBundleFiles, renderGraphShareMarkdown, renderGraphSharePreviewHtml, renderGraphShareSvg, renderGraphTreeHtml, 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, syncTrackedFiles, syncTrackedRepos, syncTrackedReposForWatch, synthesizeHyperedgeHubs, trimToTokenBudget, uninstallGitHooks, updateMemoryTask, validateGraphArtifact, validateGraphVault, watchVault, webSearchProviderTypeSchema, withCapabilityFallback, writeRetrievalManifest };