@hraness/wordcell 0.21.2 → 0.22.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 (87) hide show
  1. package/README.md +196 -66
  2. package/dist/{authority-4sp9d552.js → authority-1pgftmwq.js} +55 -10
  3. package/dist/benchmark.js +3 -3
  4. package/dist/capture.js +6 -5
  5. package/dist/cli.js +61 -3800
  6. package/dist/clip/acquire.js +3 -2
  7. package/dist/clip/cli.js +6 -5
  8. package/dist/clip/doctor.js +4 -3
  9. package/dist/clip/jobs.js +3 -3
  10. package/dist/clip/refresh.js +1 -1
  11. package/dist/evaluation-builder.js +18 -17
  12. package/dist/evaluation-kb.js +14 -13
  13. package/dist/graph-authority.js +3 -3
  14. package/dist/graph-percolation.js +5 -5
  15. package/dist/index-0dqfnrz9.js +1985 -0
  16. package/dist/{index-0k2x4nn9.js → index-1tm7bgx7.js} +16 -4
  17. package/dist/{index-vdw5yjfa.js → index-2hf27mws.js} +108 -18
  18. package/dist/index-3agn8scn.js +306 -0
  19. package/dist/index-4ag64rc1.js +4299 -0
  20. package/dist/index-4knsp9qj.js +34 -0
  21. package/dist/index-66pshdtx.js +341 -0
  22. package/dist/index-9rf81m0p.js +368 -0
  23. package/dist/{index-59ssmqqm.js → index-a6kbv718.js} +1 -1
  24. package/dist/{index-51bap0mq.js → index-avbce90h.js} +9 -9
  25. package/dist/{index-180zbkkt.js → index-de2w8crk.js} +14 -13
  26. package/dist/{index-pbr6rv47.js → index-e6p9e926.js} +6 -6
  27. package/dist/{index-bcfn9xah.js → index-famy7fhs.js} +5 -5
  28. package/dist/{index-by0pbant.js → index-fc4dr114.js} +5 -2
  29. package/dist/{index-x6m57nfc.js → index-g5vsqmdy.js} +28 -57
  30. package/dist/{index-115b07ap.js → index-hcw140eb.js} +5 -5
  31. package/dist/index-j70m75wd.js +217 -0
  32. package/dist/{index-3ehtt59c.js → index-qwgsmtsz.js} +1 -1
  33. package/dist/{index-bgfzwt4h.js → index-t2bs9xdr.js} +4 -4
  34. package/dist/index.js +285 -93
  35. package/dist/portfolio.js +14 -13
  36. package/dist/publish-model.js +36 -0
  37. package/dist/publish-reader/reader.css +1042 -0
  38. package/dist/publish-reader/reader.js +1534 -0
  39. package/dist/publish-reader/theme.js +92 -0
  40. package/dist/publish-search.js +52 -0
  41. package/dist/publish.js +36 -0
  42. package/dist/rerank-typesafe.js +13 -0
  43. package/dist/rerank.js +14 -0
  44. package/dist/sdk.js +14 -11
  45. package/dist/search.js +2 -2
  46. package/dist/semantic.js +4 -4
  47. package/dist/support-mywv1em0.js +140 -0
  48. package/dist/workflows/decision-context.js +13 -12
  49. package/dist/workflows/index.js +13 -12
  50. package/package.json +68 -7
  51. package/skills/wordcell/AGENTS.md +1 -0
  52. package/skills/wordcell/SKILL.md +21 -1
  53. package/skills/wordcell/agents/openai.yaml +1 -1
  54. package/skills/wordcell/references/publish.md +93 -0
  55. package/skills/wordcell/references/query.md +22 -0
  56. package/src/cli-program.ts +353 -9
  57. package/src/cli.ts +12 -1
  58. package/src/clip/acquire.ts +2 -0
  59. package/src/clip/doctor.ts +2 -0
  60. package/src/clip/media.ts +2 -0
  61. package/src/index.ts +4 -0
  62. package/src/oh/authority.ts +14 -5
  63. package/src/oh/canonical-rust.ts +127 -0
  64. package/src/oh/projection-rust.ts +63 -0
  65. package/src/oh-adoption.ts +7 -1
  66. package/src/publish-graph.ts +0 -0
  67. package/src/publish-index.ts +195 -0
  68. package/src/publish-markdown.ts +617 -0
  69. package/src/publish-model.ts +599 -0
  70. package/src/publish-nav.ts +204 -0
  71. package/src/publish-pages.ts +382 -0
  72. package/src/publish-reader/reader.css +1042 -0
  73. package/src/publish-reader/reader.ts +1017 -0
  74. package/src/publish-reader/theme.ts +97 -0
  75. package/src/publish-search.ts +418 -0
  76. package/src/publish-select.ts +419 -0
  77. package/src/publish-theme.ts +106 -0
  78. package/src/publish.ts +904 -0
  79. package/src/rerank-credentials.ts +56 -0
  80. package/src/rerank-typesafe.ts +472 -0
  81. package/src/rerank.ts +389 -0
  82. package/src/sdk.ts +157 -6
  83. package/src/serve.ts +180 -0
  84. package/src/support-profile.ts +7 -0
  85. package/src/support.ts +73 -0
  86. package/src/vault.ts +23 -9
  87. package/dist/{index-why54q5p.js → index-gm9t95d9.js} +3 -3
@@ -2,6 +2,11 @@
2
2
  import {
3
3
  classifyPlatformUrl
4
4
  } from "./index-hgve9rh2.js";
5
+ import {
6
+ filterCookieProviderResult,
7
+ readCookieFile,
8
+ renderCookieHeader
9
+ } from "./index-2gv8y733.js";
5
10
  import {
6
11
  startNetworkProxy
7
12
  } from "./index-w2zc0vwa.js";
@@ -20,63 +25,28 @@ import {
20
25
  sanitizeArtifactUrl
21
26
  } from "./index-mxxxytys.js";
22
27
  import {
23
- filterCookieProviderResult,
24
- readCookieFile,
25
- renderCookieHeader
26
- } from "./index-2gv8y733.js";
28
+ findKbPackageRoot,
29
+ resolvePackageDirectory
30
+ } from "./index-4knsp9qj.js";
27
31
 
28
32
  // src/clip/acquire.ts
29
33
  import {
30
34
  chmodSync,
31
- existsSync as existsSync2,
35
+ existsSync,
32
36
  lstatSync,
33
37
  mkdtempSync,
34
- readFileSync as readFileSync2,
38
+ readFileSync,
35
39
  realpathSync,
36
40
  rmSync,
37
41
  statSync,
38
42
  writeFileSync
39
43
  } from "fs";
40
44
  import { homedir, tmpdir } from "os";
41
- import { basename, dirname as dirname2, isAbsolute, join as join2, relative, resolve as resolve2, sep } from "path";
45
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "path";
42
46
  import { getCookies } from "@steipete/sweet-cookie";
43
-
44
- // src/clip/package-root.ts
45
- import { existsSync, readFileSync } from "fs";
46
- import { createRequire } from "module";
47
- import { dirname, join, resolve } from "path";
48
- function isPackageManifest(value) {
49
- return typeof value === "object" && value !== null && !Array.isArray(value);
50
- }
51
- function findKbPackageRoot(startDirectory = import.meta.dir, dependencies = {}) {
52
- const exists = dependencies.exists ?? existsSync;
53
- const readText = dependencies.readText ?? ((path) => readFileSync(path, "utf8"));
54
- let directory = resolve(startDirectory);
55
- for (let depth = 0;depth < 8; depth += 1) {
56
- const manifestPath = join(directory, "package.json");
57
- if (exists(manifestPath)) {
58
- try {
59
- const parsed = JSON.parse(readText(manifestPath));
60
- if (isPackageManifest(parsed) && typeof parsed.name === "string" && parsed.name === "@hraness/wordcell" && typeof parsed.version === "string")
61
- return directory;
62
- } catch {}
63
- }
64
- const parent = dirname(directory);
65
- if (parent === directory)
66
- break;
67
- directory = parent;
68
- }
69
- throw new Error("Could not locate the wordcell package root.");
70
- }
71
- function resolvePackageDirectory(packageName, parentUrl = import.meta.url) {
72
- const manifest = createRequire(parentUrl).resolve(`${packageName}/package.json`);
73
- return dirname(manifest);
74
- }
75
-
76
- // src/clip/acquire.ts
77
- var agentBrowserBinDirectory = join2(resolvePackageDirectory("agent-browser"), "bin");
47
+ var agentBrowserBinDirectory = join(resolvePackageDirectory("agent-browser"), "bin");
78
48
  function agentBrowserCommand() {
79
- return [process.execPath, join2(agentBrowserBinDirectory, "agent-browser.js")];
49
+ return [process.execPath, join(agentBrowserBinDirectory, "agent-browser.js")];
80
50
  }
81
51
  var inheritedProxyKeys = new Set([
82
52
  "ALL_PROXY",
@@ -99,9 +69,9 @@ function isolatedAgentBrowserEnvironment(source, socketDirectory) {
99
69
  return environment;
100
70
  }
101
71
  function createAgentBrowserIsolation(directory) {
102
- const configPath = join2(directory, "agent-browser.config.json");
72
+ const configPath = join(directory, "agent-browser.config.json");
103
73
  const socketRoot = process.platform === "win32" ? tmpdir() : "/tmp";
104
- const socketDirectory = mkdtempSync(join2(socketRoot, "jc-ab-"));
74
+ const socketDirectory = mkdtempSync(join(socketRoot, "jc-ab-"));
105
75
  try {
106
76
  chmodSync(socketDirectory, 448);
107
77
  writeFileSync(configPath, `{}
@@ -125,6 +95,7 @@ async function readBoundedStream(stream, maxBytes) {
125
95
  }
126
96
  async function runCommand(command, timeoutMs, maxOutputBytes, isolation, stdin) {
127
97
  const child = Bun.spawn([...command], {
98
+ env: process.env,
128
99
  stdin: stdin === undefined ? "ignore" : new Blob([stdin]),
129
100
  stdout: "pipe",
130
101
  stderr: "pipe",
@@ -208,7 +179,7 @@ async function runAgentBrowserBatch(globalArgs, commands, options) {
208
179
  throw new Error("agent-browser batch failed");
209
180
  }
210
181
  async function discoverChromeProfiles(timeoutMs = 15000) {
211
- const directory = mkdtempSync(join2(tmpdir(), "hraness-wordcell-profiles-"));
182
+ const directory = mkdtempSync(join(tmpdir(), "hraness-wordcell-profiles-"));
212
183
  chmodSync(directory, 448);
213
184
  let socketDirectory = null;
214
185
  try {
@@ -500,10 +471,10 @@ function browserNavigationReachedTarget(target, before, after, navigationCommand
500
471
  return navigationCommandSucceeded && before !== null && navigationIdentity(before) !== afterIdentity;
501
472
  }
502
473
  async function terminateAgentBrowserSession(session, socketDirectory) {
503
- const pidPath = join2(socketDirectory, `${session}.pid`);
504
- if (!existsSync2(pidPath))
474
+ const pidPath = join(socketDirectory, `${session}.pid`);
475
+ if (!existsSync(pidPath))
505
476
  return;
506
- const rawPid = readFileSync2(pidPath, "utf8").trim();
477
+ const rawPid = readFileSync(pidPath, "utf8").trim();
507
478
  if (!/^\d+$/.test(rawPid))
508
479
  return;
509
480
  const pid = Number(rawPid);
@@ -528,7 +499,7 @@ function pathInside(root, target) {
528
499
  }
529
500
  function canonicalPotentialPath(value, label) {
530
501
  const suffix = [];
531
- let ancestor = resolve2(value);
502
+ let ancestor = resolve(value);
532
503
  while (true) {
533
504
  try {
534
505
  lstatSync(ancestor);
@@ -538,12 +509,12 @@ function canonicalPotentialPath(value, label) {
538
509
  } catch {
539
510
  throw new Error(`${label} contains an unresolved symbolic link.`);
540
511
  }
541
- return resolve2(canonicalAncestor, ...suffix);
512
+ return resolve(canonicalAncestor, ...suffix);
542
513
  } catch (error) {
543
514
  if (error.code !== "ENOENT")
544
515
  throw error;
545
516
  }
546
- const parent = dirname2(ancestor);
517
+ const parent = dirname(ancestor);
547
518
  if (parent === ancestor)
548
519
  throw new Error(`${label} has no resolvable filesystem ancestor.`);
549
520
  suffix.unshift(basename(ancestor));
@@ -554,7 +525,7 @@ function profilePath(value) {
554
525
  const pathLike = isAbsolute(value) || value.startsWith(`.${sep}`) || value.startsWith(`..${sep}`) || value.startsWith(`~${sep}`) || value.includes("/") || value.includes("\\");
555
526
  if (!pathLike)
556
527
  return null;
557
- const expanded = value.startsWith(`~${sep}`) ? join2(homedir(), value.slice(2)) : resolve2(value);
528
+ const expanded = value.startsWith(`~${sep}`) ? join(homedir(), value.slice(2)) : resolve(value);
558
529
  return canonicalPotentialPath(expanded, "Persistent browser profile");
559
530
  }
560
531
  function assertSafePersistentProfile(options) {
@@ -827,7 +798,7 @@ async function acquireBrowser(options, temporaryDirectory, useDiscoveredProfile
827
798
  warnings.push("Rendered text was truncated at its configured output boundary.");
828
799
  let screenshotPath;
829
800
  if ((options.evidence === "screenshot" || options.evidence === "all") && browserPageProvenanceIntact) {
830
- const requestedScreenshotPath = join2(temporaryDirectory, "page.png");
801
+ const requestedScreenshotPath = join(temporaryDirectory, "page.png");
831
802
  screenshotPath = requestedScreenshotPath;
832
803
  try {
833
804
  await runBrowser(globalArgs, ["screenshot", requestedScreenshotPath], {
@@ -840,7 +811,7 @@ async function acquireBrowser(options, temporaryDirectory, useDiscoveredProfile
840
811
  rmSync(requestedScreenshotPath, { force: true });
841
812
  warnings.push("Browser screenshot changed pages during capture and was discarded.");
842
813
  screenshotPath = undefined;
843
- } else if (!existsSync2(requestedScreenshotPath)) {
814
+ } else if (!existsSync(requestedScreenshotPath)) {
844
815
  warnings.push("Browser screenshot was requested but agent-browser did not create it.");
845
816
  screenshotPath = undefined;
846
817
  }
@@ -1027,7 +998,7 @@ async function acquireFile(options) {
1027
998
  if (stats.size > options.maxHtmlBytes) {
1028
999
  throw new Error(`HTML input is ${stats.size} bytes; limit is ${options.maxHtmlBytes}`);
1029
1000
  }
1030
- return readFileSync2(options.htmlFile, "utf8");
1001
+ return readFileSync(options.htmlFile, "utf8");
1031
1002
  })();
1032
1003
  return {
1033
1004
  body,
@@ -1038,4 +1009,4 @@ async function acquireFile(options) {
1038
1009
  };
1039
1010
  }
1040
1011
 
1041
- export { findKbPackageRoot, agentBrowserCommand, isolatedAgentBrowserEnvironment, discoverChromeProfiles, mergeRenderedTextSnapshots, browserExpansionLimits, browserExpansionScript, readBrowserExpansionTelemetry, browserExpansionWarnings, browserExpansionStayedOnPage, browserNavigationReachedTarget, assertSafePersistentProfile, browserCookieCommands, seedOwnedBrowserCookies, browserProxyArguments, acquireBrowser, acquireHttp, acquireCookieHttp, createCookieRecordReader, createCookieHeaderReader, acquireCookieRecords, acquireCookieHeader, acquireFile };
1012
+ export { agentBrowserCommand, isolatedAgentBrowserEnvironment, discoverChromeProfiles, mergeRenderedTextSnapshots, browserExpansionLimits, browserExpansionScript, readBrowserExpansionTelemetry, browserExpansionWarnings, browserExpansionStayedOnPage, browserNavigationReachedTarget, assertSafePersistentProfile, browserCookieCommands, seedOwnedBrowserCookies, browserProxyArguments, acquireBrowser, acquireHttp, acquireCookieHttp, createCookieRecordReader, createCookieHeaderReader, acquireCookieRecords, acquireCookieHeader, acquireFile };
@@ -1,15 +1,15 @@
1
1
  // @bun
2
+ import {
3
+ fuseRankedCandidates,
4
+ validateSearchQuery
5
+ } from "./index-gm9t95d9.js";
2
6
  import {
3
7
  MAX_NOTE_UTF8_BYTES,
4
8
  MAX_SCANNED_NOTES,
5
9
  MAX_VAULT_UTF8_BYTES,
6
10
  VaultScanBudgetError,
7
11
  scanVault
8
- } from "./index-0k2x4nn9.js";
9
- import {
10
- fuseRankedCandidates,
11
- validateSearchQuery
12
- } from "./index-why54q5p.js";
12
+ } from "./index-1tm7bgx7.js";
13
13
 
14
14
  // src/semantic.ts
15
15
  import { createHash as createHash2 } from "crypto";
@@ -0,0 +1,217 @@
1
+ // @bun
2
+ // src/rerank.ts
3
+ var MAX_RERANK_CANDIDATES = 25;
4
+ var MAX_RERANK_SNIPPET_BYTES = 512;
5
+ var MAX_RERANK_STATE_BYTES = 24 * 1024;
6
+ var MALFORMED_RERANK_RESULT_MESSAGE = "Rerank engine returned a malformed result.";
7
+ var MAX_RERANK_DIAGNOSTIC_BYTES = 512;
8
+ var MAX_RERANK_MODEL_BYTES = 128;
9
+ var MAX_RERANK_TOKEN_COUNT = 1e9;
10
+ function dataRecord(value) {
11
+ if (typeof value !== "object" || value === null || Array.isArray(value))
12
+ return null;
13
+ const prototype = Object.getPrototypeOf(value);
14
+ if (prototype !== Object.prototype && prototype !== null)
15
+ return null;
16
+ const keys = Reflect.ownKeys(value);
17
+ if (keys.length > MAX_RERANK_CANDIDATES)
18
+ return null;
19
+ const output = Object.create(null);
20
+ for (const key of keys) {
21
+ if (typeof key !== "string")
22
+ return null;
23
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
24
+ if (descriptor === undefined || !("value" in descriptor) || !descriptor.enumerable)
25
+ return null;
26
+ output[key] = descriptor.value;
27
+ }
28
+ return output;
29
+ }
30
+ function hasOnlyKeys(value, allowed) {
31
+ return Object.keys(value).every((key) => allowed.includes(key));
32
+ }
33
+ function boundedDiagnostic(value) {
34
+ return typeof value === "string" && value !== "" && Buffer.byteLength(value, "utf8") <= MAX_RERANK_DIAGNOSTIC_BYTES && !/[\u0000-\u001f\u007f]/u.test(value);
35
+ }
36
+ function tokenCount(value) {
37
+ return Number.isSafeInteger(value) && value >= 0 && value <= MAX_RERANK_TOKEN_COUNT;
38
+ }
39
+ function inspectRerankDetails(result) {
40
+ const model = result["model"];
41
+ if (model !== undefined && (typeof model !== "string" || !/^[\x20-\x7e]+$/u.test(model) || Buffer.byteLength(model, "utf8") > MAX_RERANK_MODEL_BYTES)) {
42
+ return null;
43
+ }
44
+ const rawUsage = result["usage"];
45
+ let usage;
46
+ if (rawUsage !== undefined) {
47
+ const usageRecord = dataRecord(rawUsage);
48
+ if (usageRecord === null || !hasOnlyKeys(usageRecord, ["inputTokens", "outputTokens"]) || usageRecord["inputTokens"] !== undefined && !tokenCount(usageRecord["inputTokens"]) || usageRecord["outputTokens"] !== undefined && !tokenCount(usageRecord["outputTokens"])) {
49
+ return null;
50
+ }
51
+ usage = {
52
+ ...usageRecord["inputTokens"] === undefined ? {} : { inputTokens: usageRecord["inputTokens"] },
53
+ ...usageRecord["outputTokens"] === undefined ? {} : { outputTokens: usageRecord["outputTokens"] }
54
+ };
55
+ }
56
+ const rawAccounting = result["accounting"];
57
+ let accounting;
58
+ if (rawAccounting !== undefined) {
59
+ const record = dataRecord(rawAccounting);
60
+ if (record === null || !hasOnlyKeys(record, ["candidates", "attempted", "completed", "elapsedMs", "usageComplete"]))
61
+ return null;
62
+ const { candidates, attempted, completed, elapsedMs, usageComplete } = record;
63
+ if (!Number.isSafeInteger(candidates) || candidates < 0 || candidates > MAX_RERANK_CANDIDATES || !Number.isSafeInteger(attempted) || attempted < 0 || attempted > candidates || !Number.isSafeInteger(completed) || completed < 0 || completed > attempted || typeof elapsedMs !== "number" || !Number.isFinite(elapsedMs) || elapsedMs < 0 || elapsedMs > 86400000 || typeof usageComplete !== "boolean" || usageComplete && (completed !== attempted || attempted > 0 && (usage?.inputTokens === undefined || usage.outputTokens === undefined)))
64
+ return null;
65
+ accounting = Object.freeze({
66
+ candidates,
67
+ attempted,
68
+ completed,
69
+ elapsedMs,
70
+ usageComplete
71
+ });
72
+ }
73
+ return {
74
+ ...model === undefined ? {} : { model },
75
+ ...usage === undefined ? {} : { usage: Object.freeze(usage) },
76
+ ...accounting === undefined ? {} : { accounting }
77
+ };
78
+ }
79
+ function inspectRerankResult(value) {
80
+ let details = {};
81
+ const malformed = () => ({
82
+ status: "failed",
83
+ message: MALFORMED_RERANK_RESULT_MESSAGE,
84
+ ...details
85
+ });
86
+ try {
87
+ const result = dataRecord(value);
88
+ if (result === null || typeof result["status"] !== "string") {
89
+ return malformed();
90
+ }
91
+ const inspectedDetails = inspectRerankDetails(result);
92
+ if (inspectedDetails === null)
93
+ return malformed();
94
+ details = inspectedDetails;
95
+ if (result["status"] === "failed" || result["status"] === "unavailable") {
96
+ if (!hasOnlyKeys(result, ["status", "message", "model", "usage", "accounting"]) || !boundedDiagnostic(result["message"])) {
97
+ return malformed();
98
+ }
99
+ return { status: result["status"], message: result["message"], ...details };
100
+ }
101
+ if (result["status"] !== "ready" || !hasOnlyKeys(result, ["status", "ordering", "probabilities", "confidence", "model", "usage", "accounting"])) {
102
+ return malformed();
103
+ }
104
+ if (!Array.isArray(result["ordering"]) || result["ordering"].length > MAX_RERANK_CANDIDATES) {
105
+ return malformed();
106
+ }
107
+ const ordering = [];
108
+ const rawOrdering = result["ordering"];
109
+ for (let index = 0;index < rawOrdering.length; index += 1) {
110
+ const descriptor = Object.getOwnPropertyDescriptor(rawOrdering, String(index));
111
+ const id = descriptor !== undefined && "value" in descriptor ? descriptor.value : undefined;
112
+ if (typeof id !== "string" || id === "" || Buffer.byteLength(id, "utf8") > MAX_RERANK_STATE_BYTES) {
113
+ return malformed();
114
+ }
115
+ ordering.push(id);
116
+ }
117
+ const rawProbabilities = dataRecord(result["probabilities"]);
118
+ if (rawProbabilities === null) {
119
+ return malformed();
120
+ }
121
+ const probabilities = Object.create(null);
122
+ for (const [id, probability] of Object.entries(rawProbabilities)) {
123
+ if (typeof probability !== "number" || !Number.isFinite(probability) || probability < 0 || probability > 1) {
124
+ return malformed();
125
+ }
126
+ probabilities[id] = probability;
127
+ }
128
+ const confidence = result["confidence"];
129
+ if (confidence !== undefined && (typeof confidence !== "number" || !Number.isFinite(confidence) || confidence < 0 || confidence > 1)) {
130
+ return malformed();
131
+ }
132
+ return {
133
+ status: "ready",
134
+ ordering: Object.freeze(ordering),
135
+ probabilities,
136
+ ...confidence === undefined ? {} : { confidence },
137
+ ...details
138
+ };
139
+ } catch {
140
+ return malformed();
141
+ }
142
+ }
143
+ function failedRerank(hits, message, details) {
144
+ const result = {
145
+ status: "failed",
146
+ message,
147
+ ...details.model === undefined ? {} : { model: details.model },
148
+ ...details.usage === undefined ? {} : { usage: details.usage },
149
+ ...details.accounting === undefined ? {} : { accounting: details.accounting }
150
+ };
151
+ return { status: "failed", hits, placements: new Map, result, message };
152
+ }
153
+ function applyRerank(hits, result, expectedWindowIds) {
154
+ const inspected = inspectRerankResult(result);
155
+ if (inspected.status !== "ready") {
156
+ return {
157
+ status: inspected.status,
158
+ hits,
159
+ placements: new Map,
160
+ result: inspected,
161
+ message: inspected.message
162
+ };
163
+ }
164
+ const ordering = inspected.ordering;
165
+ if (expectedWindowIds !== undefined && (ordering.length !== expectedWindowIds.length || expectedWindowIds.some((id) => !ordering.includes(id)))) {
166
+ return failedRerank(hits, MALFORMED_RERANK_RESULT_MESSAGE, inspected);
167
+ }
168
+ const windowIds = new Set;
169
+ for (const id of ordering) {
170
+ if (windowIds.has(id)) {
171
+ return failedRerank(hits, "Rerank ordering contained a duplicate candidate id.", inspected);
172
+ }
173
+ windowIds.add(id);
174
+ }
175
+ const window = hits.slice(0, ordering.length);
176
+ const windowById = new Map(window.map((hit) => [hit.id, hit]));
177
+ for (const id of ordering) {
178
+ if (!windowById.has(id)) {
179
+ return failedRerank(hits, "Rerank ordering contained an unknown candidate id.", inspected);
180
+ }
181
+ }
182
+ for (const hit of window) {
183
+ if (!windowIds.has(hit.id)) {
184
+ return failedRerank(hits, "Rerank ordering omitted a window candidate id.", inspected);
185
+ }
186
+ }
187
+ const probabilityKeys = Object.keys(inspected.probabilities);
188
+ for (const id of probabilityKeys) {
189
+ if (!windowIds.has(id)) {
190
+ return failedRerank(hits, "Rerank probabilities contained an unknown candidate id.", inspected);
191
+ }
192
+ }
193
+ for (const id of ordering) {
194
+ if (inspected.probabilities[id] === undefined) {
195
+ return failedRerank(hits, "Rerank probability for a candidate id was missing or invalid.", inspected);
196
+ }
197
+ }
198
+ const probabilityOf = (id) => inspected.probabilities[id];
199
+ const sorted = window.toSorted((left, right) => Number(right.identity === true) - Number(left.identity === true) || probabilityOf(right.id) - probabilityOf(left.id) || left.rank - right.rank || left.id.localeCompare(right.id));
200
+ const placements = new Map;
201
+ const reordered = sorted.map((hit, index) => {
202
+ placements.set(hit.id, {
203
+ baselineRank: hit.rank,
204
+ rerankRank: index + 1,
205
+ probability: probabilityOf(hit.id)
206
+ });
207
+ return hit.rank === index + 1 ? hit : { ...hit, rank: index + 1 };
208
+ });
209
+ return {
210
+ status: "ready",
211
+ hits: Object.freeze([...reordered, ...hits.slice(ordering.length)]),
212
+ placements,
213
+ result: inspected
214
+ };
215
+ }
216
+
217
+ export { MAX_RERANK_CANDIDATES, MAX_RERANK_SNIPPET_BYTES, MAX_RERANK_STATE_BYTES, applyRerank };
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  fuseRankedCandidates
4
- } from "./index-why54q5p.js";
4
+ } from "./index-gm9t95d9.js";
5
5
 
6
6
  // src/benchmark.ts
7
7
  var MAX_BENCHMARK_CASES = 500;
@@ -1,15 +1,15 @@
1
1
  // @bun
2
+ import {
3
+ percolateVault
4
+ } from "./index-nd6nynv2.js";
2
5
  import {
3
6
  createGraphSnapshot,
4
7
  openGraphAuthority
5
- } from "./index-bcfn9xah.js";
8
+ } from "./index-famy7fhs.js";
6
9
  import {
7
10
  GraphAuthorityError,
8
11
  validateGraphPercolationOptions
9
12
  } from "./index-11621h23.js";
10
- import {
11
- percolateVault
12
- } from "./index-nd6nynv2.js";
13
13
  import {
14
14
  analyzeVault,
15
15
  lookupNote,