@tekmidian/pai 0.66.2 → 0.66.3

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 (82) hide show
  1. package/dist/{aibroker-client-CHEEvJZW.mjs → aibroker-client-Ck3p3k_-.mjs} +1 -1
  2. package/dist/{aibroker-client-Dfv7j1Od.mjs → aibroker-client-WCZi_tn-.mjs} +2 -2
  3. package/dist/{aibroker-client-Dfv7j1Od.mjs.map → aibroker-client-WCZi_tn-.mjs.map} +1 -1
  4. package/dist/{chain-D5876UQX.mjs → chain-Fz4NLm4D.mjs} +3 -3
  5. package/dist/{chain-D5876UQX.mjs.map → chain-Fz4NLm4D.mjs.map} +1 -1
  6. package/dist/cli/index.mjs +13 -13
  7. package/dist/cli/program.mjs +13 -13
  8. package/dist/{config-DKIA7wgF.mjs → config-CnsDMETf.mjs} +1 -1
  9. package/dist/{config-C-LiGlop.mjs → config-Ddc4DIPk.mjs} +5 -3
  10. package/dist/config-Ddc4DIPk.mjs.map +1 -0
  11. package/dist/{context-handover-cache-9PGvXRIw.mjs → context-handover-cache-DcPEW6vf.mjs} +244 -10
  12. package/dist/context-handover-cache-DcPEW6vf.mjs.map +1 -0
  13. package/dist/daemon/index.mjs +11 -11
  14. package/dist/{daemon-BUgNvMUh.mjs → daemon-Bl8TpHdM.mjs} +37 -18
  15. package/dist/daemon-Bl8TpHdM.mjs.map +1 -0
  16. package/dist/daemon-ZhHU6D0i.mjs +18 -0
  17. package/dist/daemon-mcp/index.mjs +9 -9
  18. package/dist/{embeddings-CEBGrzwu.mjs → embeddings-D0WOQpYR.mjs} +1 -1
  19. package/dist/{embeddings-DOLZnT1X.mjs → embeddings-DMVzpvRZ.mjs} +18 -9
  20. package/dist/embeddings-DMVzpvRZ.mjs.map +1 -0
  21. package/dist/{factory-Ypf8r0fK.mjs → factory-BUnZgnKW.mjs} +5 -5
  22. package/dist/{factory-Ypf8r0fK.mjs.map → factory-BUnZgnKW.mjs.map} +1 -1
  23. package/dist/{factory-DrBg24UT.mjs → factory-CrVlo2hY.mjs} +4 -4
  24. package/dist/{fallback-D51R4shY.mjs → fallback-awOmq_9A.mjs} +4 -4
  25. package/dist/{fallback-D51R4shY.mjs.map → fallback-awOmq_9A.mjs.map} +1 -1
  26. package/dist/hooks/block-sleep-poll.mjs +6 -5
  27. package/dist/hooks/block-sleep-poll.mjs.map +3 -3
  28. package/dist/hooks/context-compression-hook.mjs +1 -0
  29. package/dist/hooks/context-compression-hook.mjs.map +2 -2
  30. package/dist/hooks/load-project-context.mjs +6 -5
  31. package/dist/hooks/load-project-context.mjs.map +3 -3
  32. package/dist/hooks/post-compact-inject.mjs +6 -5
  33. package/dist/hooks/post-compact-inject.mjs.map +3 -3
  34. package/dist/hooks/route-agents-to-worker.mjs +6 -5
  35. package/dist/hooks/route-agents-to-worker.mjs.map +3 -3
  36. package/dist/hooks/security-validator.mjs +1 -0
  37. package/dist/hooks/security-validator.mjs.map +2 -2
  38. package/dist/hooks/whisper-rules.mjs +1 -0
  39. package/dist/hooks/whisper-rules.mjs.map +2 -2
  40. package/dist/hooks/worker-guard.mjs +6 -5
  41. package/dist/hooks/worker-guard.mjs.map +3 -3
  42. package/dist/hooks/worker-proxy.mjs +6 -5
  43. package/dist/hooks/worker-proxy.mjs.map +3 -3
  44. package/dist/hooks/worker-status-line.mjs +6 -5
  45. package/dist/hooks/worker-status-line.mjs.map +3 -3
  46. package/dist/hooks/worker-supervision.mjs +6 -5
  47. package/dist/hooks/worker-supervision.mjs.map +3 -3
  48. package/dist/{ipc-client-BLYX51nG.mjs → ipc-client-DkxRay-o.mjs} +2 -2
  49. package/dist/{ipc-client-BLYX51nG.mjs.map → ipc-client-DkxRay-o.mjs.map} +1 -1
  50. package/dist/{main-resolver-kVkMJZUD.mjs → main-resolver-CVGPICy-.mjs} +6 -6
  51. package/dist/{main-resolver-kVkMJZUD.mjs.map → main-resolver-CVGPICy-.mjs.map} +1 -1
  52. package/dist/main-resolver-DDShdDBm.mjs +7 -0
  53. package/dist/{pai-home-Cm9rcJgX.mjs → pai-home-UncxWxlX.mjs} +1 -1
  54. package/dist/{pai-home-Cm9rcJgX.mjs.map → pai-home-UncxWxlX.mjs.map} +1 -1
  55. package/dist/{planner-D5yt0EfA.mjs → planner-GdiYe2FO.mjs} +8 -8
  56. package/dist/{planner-D5yt0EfA.mjs.map → planner-GdiYe2FO.mjs.map} +1 -1
  57. package/dist/{postgres-BmLr0MUm.mjs → postgres-DKyiCA5V.mjs} +2 -2
  58. package/dist/{postgres-D3xc2RB4.mjs → postgres-H85VSYHI.mjs} +2 -2
  59. package/dist/{postgres-D3xc2RB4.mjs.map → postgres-H85VSYHI.mjs.map} +1 -1
  60. package/dist/{program-DIXRtAFy.mjs → program-D3MSfx86.mjs} +117 -82
  61. package/dist/program-D3MSfx86.mjs.map +1 -0
  62. package/dist/{query-feedback-B7FYE4JR.mjs → query-feedback-BPdapXKd.mjs} +2 -2
  63. package/dist/{query-feedback-B7FYE4JR.mjs.map → query-feedback-BPdapXKd.mjs.map} +1 -1
  64. package/dist/{run-CLYTOm0x.mjs → run-D9YbWsnL.mjs} +5 -5
  65. package/dist/{run-CLYTOm0x.mjs.map → run-D9YbWsnL.mjs.map} +1 -1
  66. package/dist/{run-env-Bnmf6bRI.mjs → run-env-CQRnxNht.mjs} +3 -3
  67. package/dist/{run-env-Bnmf6bRI.mjs.map → run-env-CQRnxNht.mjs.map} +1 -1
  68. package/dist/{runtime-paths-D3FKAm69.mjs → runtime-paths-Bw3Jk8qJ.mjs} +4 -2
  69. package/dist/runtime-paths-Bw3Jk8qJ.mjs.map +1 -0
  70. package/dist/{zettelkasten-BhZMvmoK.mjs → zettelkasten-BRIaHzFm.mjs} +2 -2
  71. package/dist/{zettelkasten-BhZMvmoK.mjs.map → zettelkasten-BRIaHzFm.mjs.map} +1 -1
  72. package/dist/{zettelkasten-BwV1pluL.mjs → zettelkasten-G0-ZTybr.mjs} +3 -3
  73. package/docs/commands/memory.md +2 -0
  74. package/package.json +1 -1
  75. package/dist/config-C-LiGlop.mjs.map +0 -1
  76. package/dist/context-handover-cache-9PGvXRIw.mjs.map +0 -1
  77. package/dist/daemon-BUgNvMUh.mjs.map +0 -1
  78. package/dist/daemon-DL0eglMJ.mjs +0 -18
  79. package/dist/embeddings-DOLZnT1X.mjs.map +0 -1
  80. package/dist/main-resolver-BYgP86C1.mjs +0 -7
  81. package/dist/program-DIXRtAFy.mjs.map +0 -1
  82. package/dist/runtime-paths-D3FKAm69.mjs.map +0 -1
@@ -0,0 +1,18 @@
1
+ import "./utils-DddRwMsG.mjs";
2
+ import "./migrate-Bq0esMOa.mjs";
3
+ import "./helpers-CZsi_49C.mjs";
4
+ import "./reranker-3lnggwgq.mjs";
5
+ import "./postgres-H85VSYHI.mjs";
6
+ import "./factory-BUnZgnKW.mjs";
7
+ import "./embeddings-DMVzpvRZ.mjs";
8
+ import "./router-BaTbc9VX.mjs";
9
+ import "./config-Ddc4DIPk.mjs";
10
+ import "./context-handover-cache-DcPEW6vf.mjs";
11
+ import "./run-env-CQRnxNht.mjs";
12
+ import "./run-D9YbWsnL.mjs";
13
+ import "./ipc-client-DkxRay-o.mjs";
14
+ import "./aibroker-client-WCZi_tn-.mjs";
15
+ import { t as serve } from "./daemon-Bl8TpHdM.mjs";
16
+ import "./zettelkasten-BRIaHzFm.mjs";
17
+
18
+ export { serve };
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import "../helpers-CZsi_49C.mjs";
3
- import "../postgres-D3xc2RB4.mjs";
4
- import "../factory-Ypf8r0fK.mjs";
5
- import "../embeddings-DOLZnT1X.mjs";
3
+ import "../postgres-H85VSYHI.mjs";
4
+ import "../factory-BUnZgnKW.mjs";
5
+ import "../embeddings-DMVzpvRZ.mjs";
6
6
  import "../router-BaTbc9VX.mjs";
7
- import { p as MainConfigError, s as loadConfig } from "../config-C-LiGlop.mjs";
8
- import { D as readWorkersSection, b as getProviderOrNative, d as MODEL_CAPABILITIES, i as CAPABILITY_NAME_RE } from "../run-env-Bnmf6bRI.mjs";
9
- import { G as loadStatus, I as ledgerSummary, K as loadStatuses, Z as setWorkerLabel, a as deadlineLabel, c as handoffFromInside, dt as ledgerPath, l as readInbox, n as runWorker, pt as workersLogDir, r as testProvider, u as sayToWorker, y as endLabel, z as alive } from "../run-CLYTOm0x.mjs";
10
- import { t as PaiClient } from "../ipc-client-BLYX51nG.mjs";
11
- import { A as getConfigValueOp, C as setWorkersEnabled, D as useProvider, E as updateProvider, M as setConfigValueOp, N as unsetConfigValueOp, O as MainConfigOpsError, S as setProviderModel, T as unsetClass, _ as removeProvider, b as setClass, d as addProvider, f as classTargetText, g as modelPrefsText, h as describeProviders, i as fallbackStatusText, j as listConfigOp, l as readSpecPrompt, m as describeModels, n as fallbackOn, o as psOutput, p as describeCapabilities, r as fallbackStatus, s as replayOutput, t as fallbackOff, u as resolveSpecPath, v as resolveProviderName, w as unsetCapabilityPreference, x as setProviderEnabled, y as setCapabilityPreference } from "../fallback-D51R4shY.mjs";
12
- import { t as runChain } from "../chain-D5876UQX.mjs";
7
+ import { p as MainConfigError, s as loadConfig } from "../config-Ddc4DIPk.mjs";
8
+ import { D as readWorkersSection, b as getProviderOrNative, d as MODEL_CAPABILITIES, i as CAPABILITY_NAME_RE } from "../run-env-CQRnxNht.mjs";
9
+ import { G as loadStatus, I as ledgerSummary, K as loadStatuses, Z as setWorkerLabel, a as deadlineLabel, c as handoffFromInside, dt as ledgerPath, l as readInbox, n as runWorker, pt as workersLogDir, r as testProvider, u as sayToWorker, y as endLabel, z as alive } from "../run-D9YbWsnL.mjs";
10
+ import { t as PaiClient } from "../ipc-client-DkxRay-o.mjs";
11
+ import { A as getConfigValueOp, C as setWorkersEnabled, D as useProvider, E as updateProvider, M as setConfigValueOp, N as unsetConfigValueOp, O as MainConfigOpsError, S as setProviderModel, T as unsetClass, _ as removeProvider, b as setClass, d as addProvider, f as classTargetText, g as modelPrefsText, h as describeProviders, i as fallbackStatusText, j as listConfigOp, l as readSpecPrompt, m as describeModels, n as fallbackOn, o as psOutput, p as describeCapabilities, r as fallbackStatus, s as replayOutput, t as fallbackOff, u as resolveSpecPath, v as resolveProviderName, w as unsetCapabilityPreference, x as setProviderEnabled, y as setCapabilityPreference } from "../fallback-awOmq_9A.mjs";
12
+ import { t as runChain } from "../chain-Fz4NLm4D.mjs";
13
13
  import { t as dropItermBundleId } from "../env-DiolswKQ.mjs";
14
14
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
15
15
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
@@ -1,3 +1,3 @@
1
- import { a as generateEmbeddings, i as generateEmbedding, n as cosineSimilarity, o as serializeEmbedding, r as deserializeEmbedding, t as configureEmbeddingModel } from "./embeddings-DOLZnT1X.mjs";
1
+ import { a as generateEmbeddings, i as generateEmbedding, n as cosineSimilarity, o as serializeEmbedding, r as deserializeEmbedding, t as configureEmbeddingModel } from "./embeddings-DMVzpvRZ.mjs";
2
2
 
3
3
  export { generateEmbedding, generateEmbeddings, serializeEmbedding };
@@ -1,5 +1,7 @@
1
1
  //#region src/memory/embeddings.ts
2
2
  const DEFAULT_EMBEDDING_MODEL = "Snowflake/snowflake-arctic-embed-m-v1.5";
3
+ /** Texts per forward pass in generateEmbeddings (length-sorted, see there). */
4
+ const SUB_BATCH = 16;
3
5
  /** Query prefix required by Snowflake Arctic Embed for retrieval tasks. */
4
6
  const QUERY_PREFIX = "Represent this sentence for searching relevant passages: ";
5
7
  let _embeddingPipeline = null;
@@ -59,14 +61,21 @@ async function generateEmbedding(text, isQuery = false) {
59
61
  async function generateEmbeddings(texts) {
60
62
  if (texts.length === 0) return [];
61
63
  if (texts.length === 1) return [await generateEmbedding(texts[0])];
62
- const flat = (await (await getEmbedder())(texts, {
63
- pooling: "cls",
64
- normalize: true
65
- })).data;
66
- const dim = flat.length / texts.length;
67
- if (!Number.isInteger(dim)) throw new Error(`Batched embedding returned ${flat.length} values for ${texts.length} inputs — not divisible`);
68
- const out = [];
69
- for (let i = 0; i < texts.length; i++) out.push(new Float32Array(flat.slice(i * dim, (i + 1) * dim)));
64
+ const extractor = await getEmbedder();
65
+ const order = texts.map((_, i) => i).sort((a, b) => texts[a].length - texts[b].length);
66
+ const out = new Array(texts.length);
67
+ for (let s = 0; s < order.length; s += SUB_BATCH) {
68
+ const idx = order.slice(s, s + SUB_BATCH);
69
+ const flat = (await extractor(idx.map((i) => texts[i]), {
70
+ pooling: "cls",
71
+ normalize: true
72
+ })).data;
73
+ const dim = flat.length / idx.length;
74
+ if (!Number.isInteger(dim)) throw new Error(`Batched embedding returned ${flat.length} values for ${idx.length} inputs — not divisible`);
75
+ idx.forEach((orig, k) => {
76
+ out[orig] = new Float32Array(flat.slice(k * dim, (k + 1) * dim));
77
+ });
78
+ }
70
79
  return out;
71
80
  }
72
81
  /**
@@ -106,4 +115,4 @@ function cosineSimilarity(a, b) {
106
115
 
107
116
  //#endregion
108
117
  export { generateEmbeddings as a, generateEmbedding as i, cosineSimilarity as n, serializeEmbedding as o, deserializeEmbedding as r, configureEmbeddingModel as t };
109
- //# sourceMappingURL=embeddings-DOLZnT1X.mjs.map
118
+ //# sourceMappingURL=embeddings-DMVzpvRZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings-DMVzpvRZ.mjs","names":[],"sources":["../src/memory/embeddings.ts"],"sourcesContent":["/**\n * Embedding generation for the PAI federation memory engine (Phase 2.5).\n *\n * Uses @huggingface/transformers with the Snowflake/snowflake-arctic-embed-m-v1.5 model\n * (768 dims, q8 quantization, MTEB strong retrieval quality).\n *\n * The model uses CLS pooling (first token) — NOT mean pooling.\n * For retrieval, queries require a prefix: \"Represent this sentence for searching relevant passages: \"\n * Documents should be embedded WITHOUT a prefix.\n *\n * The pipeline is a lazy singleton — loaded on first call, reused thereafter.\n * This avoids loading the heavy ML model on every CLI invocation.\n */\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nexport const EMBEDDING_DIM = 768;\nconst DEFAULT_EMBEDDING_MODEL = \"Snowflake/snowflake-arctic-embed-m-v1.5\";\n\n/** Texts per forward pass in generateEmbeddings (length-sorted, see there). */\nconst SUB_BATCH = 16;\n\n/** Query prefix required by Snowflake Arctic Embed for retrieval tasks. */\nconst QUERY_PREFIX = \"Represent this sentence for searching relevant passages: \";\n\n// ---------------------------------------------------------------------------\n// Lazy pipeline singleton\n// ---------------------------------------------------------------------------\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet _embeddingPipeline: any = null;\nlet _currentModel: string | null = null;\n\n/**\n * Configure the embedding model to use.\n * Must be called before the first generateEmbedding() call.\n * If the pipeline is already loaded with a different model, it will be reloaded.\n *\n * @param model HuggingFace model ID (e.g. \"Snowflake/snowflake-arctic-embed-m-v1.5\").\n * Pass undefined or empty string to use the default model.\n */\nexport function configureEmbeddingModel(model?: string): void {\n const resolved = model?.trim() || DEFAULT_EMBEDDING_MODEL;\n if (_currentModel !== null && _currentModel !== resolved) {\n // Model changed — force reload on next call\n _embeddingPipeline = null;\n }\n _currentModel = resolved;\n}\n\nasync function getEmbedder() {\n const model = _currentModel ?? DEFAULT_EMBEDDING_MODEL;\n if (!_embeddingPipeline) {\n // Dynamic import to avoid loading the ML runtime on startup\n const { pipeline } = await import(\"@huggingface/transformers\");\n _embeddingPipeline = await pipeline(\n \"feature-extraction\",\n model,\n { dtype: \"q8\" },\n );\n }\n return _embeddingPipeline;\n}\n\n// ---------------------------------------------------------------------------\n// Embedding generation\n// ---------------------------------------------------------------------------\n\n/**\n * Generate a normalized 768-dim embedding for the given text.\n *\n * Uses CLS pooling (first token) and L2 normalization (cosine similarity ready).\n *\n * @param text The text to embed.\n * @param isQuery If true, prepend the Snowflake query prefix. Use for search queries.\n * Documents should be embedded without the prefix (default: false).\n */\nexport async function generateEmbedding(text: string, isQuery: boolean = false): Promise<Float32Array> {\n const prefix = isQuery ? QUERY_PREFIX : \"\";\n const input = prefix + text;\n const extractor = await getEmbedder();\n // Snowflake Arctic Embed uses CLS pooling (first token), not mean pooling\n const output = await extractor(input, { pooling: \"cls\", normalize: true });\n return new Float32Array(output.data);\n}\n\n/**\n * Generate normalized embeddings for several documents in one forward pass.\n *\n * The model call dominates embedding cost, and calling it once per chunk leaves\n * most of the available throughput unused: measured on this machine, one-at-a-\n * time runs at ~5 chunks/s, which turns a six-figure backlog into days of\n * work. Batching amortises the per-call overhead across the batch.\n *\n * The pipeline returns one flat buffer for the whole batch, so it is sliced\n * back apart by row. Order is preserved: result[i] corresponds to texts[i].\n *\n * Documents only — queries take the prefixed single-text path, since a search\n * embeds exactly one string and gains nothing here.\n */\nexport async function generateEmbeddings(texts: string[]): Promise<Float32Array[]> {\n if (texts.length === 0) return [];\n if (texts.length === 1) return [await generateEmbedding(texts[0])];\n\n const extractor = await getEmbedder();\n\n // A batch is padded to its longest text, and cost grows with padded length.\n // Sorting by length and running small sub-batches keeps neighbours similar:\n // measured 2.1x faster on mixed-length texts (5.5 -> 11.7 chunks/s).\n const order = texts.map((_, i) => i).sort((a, b) => texts[a].length - texts[b].length);\n const out: Float32Array[] = new Array(texts.length);\n for (let s = 0; s < order.length; s += SUB_BATCH) {\n const idx = order.slice(s, s + SUB_BATCH);\n const output = await extractor(idx.map((i) => texts[i]), { pooling: \"cls\", normalize: true });\n const flat = output.data as Float32Array;\n\n const dim = flat.length / idx.length;\n if (!Number.isInteger(dim)) {\n throw new Error(\n `Batched embedding returned ${flat.length} values for ${idx.length} inputs — not divisible`\n );\n }\n idx.forEach((orig, k) => {\n // Copy rather than subarray: the caller stores these, and a view would\n // pin the whole batch buffer in memory for the lifetime of one vector.\n out[orig] = new Float32Array(flat.slice(k * dim, (k + 1) * dim));\n });\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Serialization helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Serialize a Float32Array to a Buffer for storage in a SQLite BLOB column.\n */\nexport function serializeEmbedding(vec: Float32Array): Buffer {\n return Buffer.from(vec.buffer, vec.byteOffset, vec.byteLength);\n}\n\n/**\n * Deserialize a Buffer (from a SQLite BLOB column) back into a Float32Array.\n */\nexport function deserializeEmbedding(blob: Buffer): Float32Array {\n return new Float32Array(blob.buffer, blob.byteOffset, blob.byteLength / 4);\n}\n\n// ---------------------------------------------------------------------------\n// Similarity computation\n// ---------------------------------------------------------------------------\n\n/**\n * Compute cosine similarity between two normalized embedding vectors.\n *\n * Since both vectors are already L2-normalized by the embedding model,\n * cosine similarity reduces to a dot product — but we compute the full\n * formula for correctness when embeddings may not be pre-normalized.\n *\n * Returns a value in [-1, 1] where 1 = identical.\n */\nexport function cosineSimilarity(a: Float32Array, b: Float32Array): number {\n let dot = 0;\n let normA = 0;\n let normB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n const denom = Math.sqrt(normA) * Math.sqrt(normB);\n if (denom === 0) return 0;\n return dot / denom;\n}\n"],"mappings":";AAmBA,MAAM,0BAA0B;;AAGhC,MAAM,YAAY;;AAGlB,MAAM,eAAe;AAOrB,IAAI,qBAA0B;AAC9B,IAAI,gBAA+B;;;;;;;;;AAUnC,SAAgB,wBAAwB,OAAsB;CAC5D,MAAM,WAAW,OAAO,MAAM,IAAI;AAClC,KAAI,kBAAkB,QAAQ,kBAAkB,SAE9C,sBAAqB;AAEvB,iBAAgB;;AAGlB,eAAe,cAAc;CAC3B,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,CAAC,oBAAoB;EAEvB,MAAM,EAAE,aAAa,MAAM,OAAO;AAClC,uBAAqB,MAAM,SACzB,sBACA,OACA,EAAE,OAAO,MAAM,CAChB;;AAEH,QAAO;;;;;;;;;;;AAgBT,eAAsB,kBAAkB,MAAc,UAAmB,OAA8B;CAErG,MAAM,SADS,UAAU,eAAe,MACjB;CAGvB,MAAM,SAAS,OAFG,MAAM,aAAa,EAEN,OAAO;EAAE,SAAS;EAAO,WAAW;EAAM,CAAC;AAC1E,QAAO,IAAI,aAAa,OAAO,KAAK;;;;;;;;;;;;;;;;AAiBtC,eAAsB,mBAAmB,OAA0C;AACjF,KAAI,MAAM,WAAW,EAAG,QAAO,EAAE;AACjC,KAAI,MAAM,WAAW,EAAG,QAAO,CAAC,MAAM,kBAAkB,MAAM,GAAG,CAAC;CAElE,MAAM,YAAY,MAAM,aAAa;CAKrC,MAAM,QAAQ,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,MAAM,GAAG,SAAS,MAAM,GAAG,OAAO;CACtF,MAAM,MAAsB,IAAI,MAAM,MAAM,OAAO;AACnD,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,WAAW;EAChD,MAAM,MAAM,MAAM,MAAM,GAAG,IAAI,UAAU;EAEzC,MAAM,QADS,MAAM,UAAU,IAAI,KAAK,MAAM,MAAM,GAAG,EAAE;GAAE,SAAS;GAAO,WAAW;GAAM,CAAC,EACzE;EAEpB,MAAM,MAAM,KAAK,SAAS,IAAI;AAC9B,MAAI,CAAC,OAAO,UAAU,IAAI,CACxB,OAAM,IAAI,MACR,8BAA8B,KAAK,OAAO,cAAc,IAAI,OAAO,yBACpE;AAEH,MAAI,SAAS,MAAM,MAAM;AAGvB,OAAI,QAAQ,IAAI,aAAa,KAAK,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,CAAC;IAChE;;AAEJ,QAAO;;;;;AAUT,SAAgB,mBAAmB,KAA2B;AAC5D,QAAO,OAAO,KAAK,IAAI,QAAQ,IAAI,YAAY,IAAI,WAAW;;;;;AAMhE,SAAgB,qBAAqB,MAA4B;AAC/D,QAAO,IAAI,aAAa,KAAK,QAAQ,KAAK,YAAY,KAAK,aAAa,EAAE;;;;;;;;;;;AAgB5E,SAAgB,iBAAiB,GAAiB,GAAyB;CACzE,IAAI,MAAM;CACV,IAAI,QAAQ;CACZ,IAAI,QAAQ;AACZ,MAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,SAAO,EAAE,KAAK,EAAE;AAChB,WAAS,EAAE,KAAK,EAAE;AAClB,WAAS,EAAE,KAAK,EAAE;;CAEpB,MAAM,QAAQ,KAAK,KAAK,MAAM,GAAG,KAAK,KAAK,MAAM;AACjD,KAAI,UAAU,EAAG,QAAO;AACxB,QAAO,MAAM"}
@@ -1,11 +1,11 @@
1
1
  import { a as parseSessionTitleChunk, c as yieldToEventLoop, f as fileContentHash, h as sha256File, i as isPathTooBroadForContentScan, n as chunkId, o as walkContentFiles, r as detectTier, s as walkMdFiles, t as INDEX_YIELD_EVERY, u as chunkMarkdown } from "./helpers-CZsi_49C.mjs";
2
2
  import { t as STOP_WORDS } from "./stop-words-DtxaTWU_.mjs";
3
3
  import { n as buildFtsQuery, r as isQuerySyntaxError } from "./search-CNAGTiJP.mjs";
4
- import { i as entityContentId, t as PostgresBackend } from "./postgres-D3xc2RB4.mjs";
5
- import { n as cosineSimilarity, r as deserializeEmbedding } from "./embeddings-DOLZnT1X.mjs";
4
+ import { i as entityContentId, t as PostgresBackend } from "./postgres-H85VSYHI.mjs";
5
+ import { n as cosineSimilarity, r as deserializeEmbedding } from "./embeddings-DMVzpvRZ.mjs";
6
6
  import { t as routeNotification } from "./router-BaTbc9VX.mjs";
7
- import { s as loadConfig } from "./config-C-LiGlop.mjs";
8
- import { a as paiHomePath, o as resolvePaiFile } from "./pai-home-Cm9rcJgX.mjs";
7
+ import { s as loadConfig } from "./config-Ddc4DIPk.mjs";
8
+ import { a as paiHomePath, o as resolvePaiFile } from "./pai-home-UncxWxlX.mjs";
9
9
  import { existsSync, mkdirSync, readFileSync, statSync } from "node:fs";
10
10
  import { homedir } from "node:os";
11
11
  import { basename, dirname, join, relative } from "node:path";
@@ -2889,4 +2889,4 @@ async function closeStorage() {
2889
2889
 
2890
2890
  //#endregion
2891
2891
  export { getStorageBackend as a, MergeError as c, getBackendOutage as d, humanDuration as f, getRegistryBackend as i, federationDbPath as l, createRegistryBackend as n, oldRegistryPath as o, createStorageBackend as r, registryDbPath as s, closeStorage as t, oldFederationPath as u };
2892
- //# sourceMappingURL=factory-Ypf8r0fK.mjs.map
2892
+ //# sourceMappingURL=factory-BUnZgnKW.mjs.map