@tekmidian/pai 0.32.1 → 0.32.2

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 (27) hide show
  1. package/dist/{auto-route-BWGvvpcP.mjs → auto-route-C8xAfsds.mjs} +2 -2
  2. package/dist/{auto-route-BWGvvpcP.mjs.map → auto-route-C8xAfsds.mjs.map} +1 -1
  3. package/dist/cli/index.mjs +3 -3
  4. package/dist/cli/program.mjs +3 -3
  5. package/dist/daemon/index.mjs +6 -6
  6. package/dist/{daemon-1aYEoEQR.mjs → daemon-BhbX7XHt.mjs} +12 -12
  7. package/dist/{daemon-1aYEoEQR.mjs.map → daemon-BhbX7XHt.mjs.map} +1 -1
  8. package/dist/{detector-DExEQ5cW.mjs → detector-BU-bsDXs.mjs} +2 -2
  9. package/dist/{detector-DExEQ5cW.mjs.map → detector-BU-bsDXs.mjs.map} +1 -1
  10. package/dist/{factory-Bba0CG2s.mjs → factory-hmDHxTaJ.mjs} +2 -2
  11. package/dist/{factory-Bba0CG2s.mjs.map → factory-hmDHxTaJ.mjs.map} +1 -1
  12. package/dist/index.d.mts +0 -18
  13. package/dist/index.d.mts.map +1 -1
  14. package/dist/index.mjs +1 -1
  15. package/dist/{pick-B7UFLePe.mjs → pick-BBb6PiKa.mjs} +7 -7
  16. package/dist/{pick-B7UFLePe.mjs.map → pick-BBb6PiKa.mjs.map} +1 -1
  17. package/dist/{search-CpTv1I24.mjs → search-C32zQ0V0.mjs} +18 -2
  18. package/dist/search-C32zQ0V0.mjs.map +1 -0
  19. package/dist/{sqlite--BBAyXLH.mjs → sqlite-Cs_PXpyt.mjs} +2 -2
  20. package/dist/{sqlite--BBAyXLH.mjs.map → sqlite-Cs_PXpyt.mjs.map} +1 -1
  21. package/dist/{tools-DMAQxlOk.mjs → tools-B3BP_zjZ.mjs} +6 -6
  22. package/dist/{tools-DMAQxlOk.mjs.map → tools-B3BP_zjZ.mjs.map} +1 -1
  23. package/dist/{work-queue-worker-BAgwmMDl.mjs → work-queue-worker-CGMXpO_4.mjs} +2 -2
  24. package/dist/{work-queue-worker-BAgwmMDl.mjs.map → work-queue-worker-CGMXpO_4.mjs.map} +1 -1
  25. package/docker/init.sql +181 -0
  26. package/package.json +2 -1
  27. package/dist/search-CpTv1I24.mjs.map +0 -1
@@ -26,7 +26,7 @@ async function autoRoute(registryDb, federation, cwd, context) {
26
26
  const markerResult = findMarkerUpward(registryDb, target);
27
27
  if (markerResult) return markerResult;
28
28
  if (context && context.trim().length > 0) {
29
- const { detectTopicShift } = await import("./detector-DExEQ5cW.mjs").then((n) => n.n);
29
+ const { detectTopicShift } = await import("./detector-BU-bsDXs.mjs").then((n) => n.n);
30
30
  const topicResult = await detectTopicShift(registryDb, federation, {
31
31
  context,
32
32
  threshold: .5
@@ -83,4 +83,4 @@ function formatAutoRouteJson(result) {
83
83
 
84
84
  //#endregion
85
85
  export { autoRoute, formatAutoRouteJson };
86
- //# sourceMappingURL=auto-route-BWGvvpcP.mjs.map
86
+ //# sourceMappingURL=auto-route-C8xAfsds.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-route-BWGvvpcP.mjs","names":[],"sources":["../src/session/auto-route.ts"],"sourcesContent":["/**\n * Auto-route: automatic project routing suggestion on session start.\n *\n * Given a working directory (and optional conversation context), determine\n * which registered project the session belongs to.\n *\n * Strategy (in priority order):\n * 1. Path match — exact or parent-directory match in the project registry\n * 2. Marker walk — walk up from cwd looking for Notes/PAI.md, resolve slug\n * 3. Topic match — BM25 keyword search against memory (requires context text)\n *\n * The function is stateless and works with direct DB access (no daemon\n * required), making it fast and safe to call during session startup.\n */\n\nimport type { Database } from \"better-sqlite3\";\nimport type { StorageBackend } from \"../storage/interface.js\";\nimport { resolve, dirname } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { readPaiMarker } from \"../registry/pai-marker.js\";\nimport { detectProject } from \"../cli/commands/detect.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type AutoRouteMethod = \"path\" | \"marker\" | \"topic\";\n\nexport interface AutoRouteResult {\n /** Project slug */\n slug: string;\n /** Human-readable project name */\n display_name: string;\n /** Absolute path to the project root */\n root_path: string;\n /** How the project was detected */\n method: AutoRouteMethod;\n /** Confidence [0,1]: 1.0 for path/marker matches, BM25 fraction for topic */\n confidence: number;\n}\n\n// ---------------------------------------------------------------------------\n// Core function\n// ---------------------------------------------------------------------------\n\n/**\n * Determine which project a session should be routed to.\n *\n * @param registryDb Open PAI registry database\n * @param federation Memory storage backend (needed only for topic fallback)\n * @param cwd Working directory to detect from (defaults to process.cwd())\n * @param context Optional conversation text for topic-based fallback\n * @returns Best project match, or null if nothing matched\n */\nexport async function autoRoute(\n registryDb: Database,\n federation: Database | StorageBackend,\n cwd?: string,\n context?: string\n): Promise<AutoRouteResult | null> {\n const target = resolve(cwd ?? process.cwd());\n\n // -------------------------------------------------------------------------\n // Strategy 1: Path match via registry\n // -------------------------------------------------------------------------\n\n const pathMatch = detectProject(registryDb, target);\n\n if (pathMatch) {\n return {\n slug: pathMatch.slug,\n display_name: pathMatch.display_name,\n root_path: pathMatch.root_path,\n method: \"path\",\n confidence: 1.0,\n };\n }\n\n // -------------------------------------------------------------------------\n // Strategy 2: PAI.md marker file walk\n //\n // Walk up from cwd, checking <dir>/Notes/PAI.md at each level.\n // Once found, resolve the slug against the registry to get full project info.\n // -------------------------------------------------------------------------\n\n const markerResult = findMarkerUpward(registryDb, target);\n if (markerResult) {\n return markerResult;\n }\n\n // -------------------------------------------------------------------------\n // Strategy 3: Topic detection (requires context text)\n // -------------------------------------------------------------------------\n\n if (context && context.trim().length > 0) {\n // Lazy import to avoid bundler pulling in daemon/index.mjs at module load time\n const { detectTopicShift } = await import(\"../topics/detector.js\");\n const topicResult = await detectTopicShift(registryDb, federation, {\n context,\n threshold: 0.5, // Lower threshold for initial routing (vs shift detection)\n });\n\n if (topicResult.suggestedProject && topicResult.confidence > 0) {\n // Look up the full project info from the registry\n const projectRow = registryDb\n .prepare(\n \"SELECT slug, display_name, root_path FROM projects WHERE slug = ? AND status != 'archived'\"\n )\n .get(topicResult.suggestedProject) as\n | { slug: string; display_name: string; root_path: string }\n | undefined;\n\n if (projectRow) {\n return {\n slug: projectRow.slug,\n display_name: projectRow.display_name,\n root_path: projectRow.root_path,\n method: \"topic\",\n confidence: topicResult.confidence,\n };\n }\n }\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Marker walk helper\n// ---------------------------------------------------------------------------\n\n/**\n * Walk up the directory tree from `startDir`, checking each level for a\n * `Notes/PAI.md` file. If found, read the slug and look up the project.\n *\n * Stops at the filesystem root or after 20 levels (safety guard).\n */\nfunction findMarkerUpward(\n registryDb: Database,\n startDir: string\n): AutoRouteResult | null {\n let current = startDir;\n let depth = 0;\n\n while (depth < 20) {\n const markerPath = `${current}/Notes/PAI.md`;\n\n if (existsSync(markerPath)) {\n const marker = readPaiMarker(current);\n\n if (marker && marker.status !== \"archived\") {\n // Resolve slug to full project info in the registry\n const projectRow = registryDb\n .prepare(\n \"SELECT slug, display_name, root_path FROM projects WHERE slug = ? AND status != 'archived'\"\n )\n .get(marker.slug) as\n | { slug: string; display_name: string; root_path: string }\n | undefined;\n\n if (projectRow) {\n return {\n slug: projectRow.slug,\n display_name: projectRow.display_name,\n root_path: projectRow.root_path,\n method: \"marker\",\n confidence: 1.0,\n };\n }\n }\n }\n\n const parent = dirname(current);\n if (parent === current) break; // Reached filesystem root\n current = parent;\n depth++;\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Format helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Format an AutoRouteResult as a human-readable string for CLI output.\n */\nexport function formatAutoRoute(result: AutoRouteResult): string {\n const lines: string[] = [\n `slug: ${result.slug}`,\n `display_name: ${result.display_name}`,\n `root_path: ${result.root_path}`,\n `method: ${result.method}`,\n `confidence: ${(result.confidence * 100).toFixed(0)}%`,\n ];\n return lines.join(\"\\n\");\n}\n\n/**\n * Format an AutoRouteResult as JSON for machine consumption.\n */\nexport function formatAutoRouteJson(result: AutoRouteResult): string {\n return JSON.stringify(result, null, 2);\n}\n"],"mappings":";;;;;;;;;;;;;;;AAsDA,eAAsB,UACpB,YACA,YACA,KACA,SACiC;CACjC,MAAM,SAAS,QAAQ,OAAO,QAAQ,KAAK,CAAC;CAM5C,MAAM,YAAY,cAAc,YAAY,OAAO;AAEnD,KAAI,UACF,QAAO;EACL,MAAM,UAAU;EAChB,cAAc,UAAU;EACxB,WAAW,UAAU;EACrB,QAAQ;EACR,YAAY;EACb;CAUH,MAAM,eAAe,iBAAiB,YAAY,OAAO;AACzD,KAAI,aACF,QAAO;AAOT,KAAI,WAAW,QAAQ,MAAM,CAAC,SAAS,GAAG;EAExC,MAAM,EAAE,qBAAqB,MAAM,OAAO;EAC1C,MAAM,cAAc,MAAM,iBAAiB,YAAY,YAAY;GACjE;GACA,WAAW;GACZ,CAAC;AAEF,MAAI,YAAY,oBAAoB,YAAY,aAAa,GAAG;GAE9D,MAAM,aAAa,WAChB,QACC,6FACD,CACA,IAAI,YAAY,iBAAiB;AAIpC,OAAI,WACF,QAAO;IACL,MAAM,WAAW;IACjB,cAAc,WAAW;IACzB,WAAW,WAAW;IACtB,QAAQ;IACR,YAAY,YAAY;IACzB;;;AAKP,QAAO;;;;;;;;AAaT,SAAS,iBACP,YACA,UACwB;CACxB,IAAI,UAAU;CACd,IAAI,QAAQ;AAEZ,QAAO,QAAQ,IAAI;AAGjB,MAAI,WAFe,GAAG,QAAQ,eAEJ,EAAE;GAC1B,MAAM,SAAS,cAAc,QAAQ;AAErC,OAAI,UAAU,OAAO,WAAW,YAAY;IAE1C,MAAM,aAAa,WAChB,QACC,6FACD,CACA,IAAI,OAAO,KAAK;AAInB,QAAI,WACF,QAAO;KACL,MAAM,WAAW;KACjB,cAAc,WAAW;KACzB,WAAW,WAAW;KACtB,QAAQ;KACR,YAAY;KACb;;;EAKP,MAAM,SAAS,QAAQ,QAAQ;AAC/B,MAAI,WAAW,QAAS;AACxB,YAAU;AACV;;AAGF,QAAO;;;;;AAwBT,SAAgB,oBAAoB,QAAiC;AACnE,QAAO,KAAK,UAAU,QAAQ,MAAM,EAAE"}
1
+ {"version":3,"file":"auto-route-C8xAfsds.mjs","names":[],"sources":["../src/session/auto-route.ts"],"sourcesContent":["/**\n * Auto-route: automatic project routing suggestion on session start.\n *\n * Given a working directory (and optional conversation context), determine\n * which registered project the session belongs to.\n *\n * Strategy (in priority order):\n * 1. Path match — exact or parent-directory match in the project registry\n * 2. Marker walk — walk up from cwd looking for Notes/PAI.md, resolve slug\n * 3. Topic match — BM25 keyword search against memory (requires context text)\n *\n * The function is stateless and works with direct DB access (no daemon\n * required), making it fast and safe to call during session startup.\n */\n\nimport type { Database } from \"better-sqlite3\";\nimport type { StorageBackend } from \"../storage/interface.js\";\nimport { resolve, dirname } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { readPaiMarker } from \"../registry/pai-marker.js\";\nimport { detectProject } from \"../cli/commands/detect.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type AutoRouteMethod = \"path\" | \"marker\" | \"topic\";\n\nexport interface AutoRouteResult {\n /** Project slug */\n slug: string;\n /** Human-readable project name */\n display_name: string;\n /** Absolute path to the project root */\n root_path: string;\n /** How the project was detected */\n method: AutoRouteMethod;\n /** Confidence [0,1]: 1.0 for path/marker matches, BM25 fraction for topic */\n confidence: number;\n}\n\n// ---------------------------------------------------------------------------\n// Core function\n// ---------------------------------------------------------------------------\n\n/**\n * Determine which project a session should be routed to.\n *\n * @param registryDb Open PAI registry database\n * @param federation Memory storage backend (needed only for topic fallback)\n * @param cwd Working directory to detect from (defaults to process.cwd())\n * @param context Optional conversation text for topic-based fallback\n * @returns Best project match, or null if nothing matched\n */\nexport async function autoRoute(\n registryDb: Database,\n federation: Database | StorageBackend,\n cwd?: string,\n context?: string\n): Promise<AutoRouteResult | null> {\n const target = resolve(cwd ?? process.cwd());\n\n // -------------------------------------------------------------------------\n // Strategy 1: Path match via registry\n // -------------------------------------------------------------------------\n\n const pathMatch = detectProject(registryDb, target);\n\n if (pathMatch) {\n return {\n slug: pathMatch.slug,\n display_name: pathMatch.display_name,\n root_path: pathMatch.root_path,\n method: \"path\",\n confidence: 1.0,\n };\n }\n\n // -------------------------------------------------------------------------\n // Strategy 2: PAI.md marker file walk\n //\n // Walk up from cwd, checking <dir>/Notes/PAI.md at each level.\n // Once found, resolve the slug against the registry to get full project info.\n // -------------------------------------------------------------------------\n\n const markerResult = findMarkerUpward(registryDb, target);\n if (markerResult) {\n return markerResult;\n }\n\n // -------------------------------------------------------------------------\n // Strategy 3: Topic detection (requires context text)\n // -------------------------------------------------------------------------\n\n if (context && context.trim().length > 0) {\n // Lazy import to avoid bundler pulling in daemon/index.mjs at module load time\n const { detectTopicShift } = await import(\"../topics/detector.js\");\n const topicResult = await detectTopicShift(registryDb, federation, {\n context,\n threshold: 0.5, // Lower threshold for initial routing (vs shift detection)\n });\n\n if (topicResult.suggestedProject && topicResult.confidence > 0) {\n // Look up the full project info from the registry\n const projectRow = registryDb\n .prepare(\n \"SELECT slug, display_name, root_path FROM projects WHERE slug = ? AND status != 'archived'\"\n )\n .get(topicResult.suggestedProject) as\n | { slug: string; display_name: string; root_path: string }\n | undefined;\n\n if (projectRow) {\n return {\n slug: projectRow.slug,\n display_name: projectRow.display_name,\n root_path: projectRow.root_path,\n method: \"topic\",\n confidence: topicResult.confidence,\n };\n }\n }\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Marker walk helper\n// ---------------------------------------------------------------------------\n\n/**\n * Walk up the directory tree from `startDir`, checking each level for a\n * `Notes/PAI.md` file. If found, read the slug and look up the project.\n *\n * Stops at the filesystem root or after 20 levels (safety guard).\n */\nfunction findMarkerUpward(\n registryDb: Database,\n startDir: string\n): AutoRouteResult | null {\n let current = startDir;\n let depth = 0;\n\n while (depth < 20) {\n const markerPath = `${current}/Notes/PAI.md`;\n\n if (existsSync(markerPath)) {\n const marker = readPaiMarker(current);\n\n if (marker && marker.status !== \"archived\") {\n // Resolve slug to full project info in the registry\n const projectRow = registryDb\n .prepare(\n \"SELECT slug, display_name, root_path FROM projects WHERE slug = ? AND status != 'archived'\"\n )\n .get(marker.slug) as\n | { slug: string; display_name: string; root_path: string }\n | undefined;\n\n if (projectRow) {\n return {\n slug: projectRow.slug,\n display_name: projectRow.display_name,\n root_path: projectRow.root_path,\n method: \"marker\",\n confidence: 1.0,\n };\n }\n }\n }\n\n const parent = dirname(current);\n if (parent === current) break; // Reached filesystem root\n current = parent;\n depth++;\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Format helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Format an AutoRouteResult as a human-readable string for CLI output.\n */\nexport function formatAutoRoute(result: AutoRouteResult): string {\n const lines: string[] = [\n `slug: ${result.slug}`,\n `display_name: ${result.display_name}`,\n `root_path: ${result.root_path}`,\n `method: ${result.method}`,\n `confidence: ${(result.confidence * 100).toFixed(0)}%`,\n ];\n return lines.join(\"\\n\");\n}\n\n/**\n * Format an AutoRouteResult as JSON for machine consumption.\n */\nexport function formatAutoRouteJson(result: AutoRouteResult): string {\n return JSON.stringify(result, null, 2);\n}\n"],"mappings":";;;;;;;;;;;;;;;AAsDA,eAAsB,UACpB,YACA,YACA,KACA,SACiC;CACjC,MAAM,SAAS,QAAQ,OAAO,QAAQ,KAAK,CAAC;CAM5C,MAAM,YAAY,cAAc,YAAY,OAAO;AAEnD,KAAI,UACF,QAAO;EACL,MAAM,UAAU;EAChB,cAAc,UAAU;EACxB,WAAW,UAAU;EACrB,QAAQ;EACR,YAAY;EACb;CAUH,MAAM,eAAe,iBAAiB,YAAY,OAAO;AACzD,KAAI,aACF,QAAO;AAOT,KAAI,WAAW,QAAQ,MAAM,CAAC,SAAS,GAAG;EAExC,MAAM,EAAE,qBAAqB,MAAM,OAAO;EAC1C,MAAM,cAAc,MAAM,iBAAiB,YAAY,YAAY;GACjE;GACA,WAAW;GACZ,CAAC;AAEF,MAAI,YAAY,oBAAoB,YAAY,aAAa,GAAG;GAE9D,MAAM,aAAa,WAChB,QACC,6FACD,CACA,IAAI,YAAY,iBAAiB;AAIpC,OAAI,WACF,QAAO;IACL,MAAM,WAAW;IACjB,cAAc,WAAW;IACzB,WAAW,WAAW;IACtB,QAAQ;IACR,YAAY,YAAY;IACzB;;;AAKP,QAAO;;;;;;;;AAaT,SAAS,iBACP,YACA,UACwB;CACxB,IAAI,UAAU;CACd,IAAI,QAAQ;AAEZ,QAAO,QAAQ,IAAI;AAGjB,MAAI,WAFe,GAAG,QAAQ,eAEJ,EAAE;GAC1B,MAAM,SAAS,cAAc,QAAQ;AAErC,OAAI,UAAU,OAAO,WAAW,YAAY;IAE1C,MAAM,aAAa,WAChB,QACC,6FACD,CACA,IAAI,OAAO,KAAK;AAInB,QAAI,WACF,QAAO;KACL,MAAM,WAAW;KACjB,cAAc,WAAW;KACzB,WAAW,WAAW;KACtB,QAAQ;KACR,YAAY;KACb;;;EAKP,MAAM,SAAS,QAAQ,QAAQ;AAC/B,MAAI,WAAW,QAAS;AACxB,YAAU;AACV;;AAGF,QAAO;;;;;AAwBT,SAAgB,oBAAoB,QAAiC;AACnE,QAAO,KAAK,UAAU,QAAQ,MAAM,EAAE"}
@@ -6,13 +6,13 @@ import "../db-CYmBWcjh.mjs";
6
6
  import "../helpers-crDEr6S2.mjs";
7
7
  import "../sync--BoxBBok.mjs";
8
8
  import "../embeddings-Bn86ssxR.mjs";
9
- import "../search-CpTv1I24.mjs";
10
- import "../pick-B7UFLePe.mjs";
9
+ import "../search-C32zQ0V0.mjs";
10
+ import "../pick-BBb6PiKa.mjs";
11
11
  import "../checkpoint-block-DYq9RmMU.mjs";
12
12
  import "../indexer-AEcT8wHf.mjs";
13
13
  import "../ipc-client-aVKVERjJ.mjs";
14
14
  import "../config-CcdkNSWa.mjs";
15
- import "../factory-Bba0CG2s.mjs";
15
+ import "../factory-hmDHxTaJ.mjs";
16
16
  import "../main-resolver-DjyUDJrv.mjs";
17
17
  import { buildProgram } from "./program.mjs";
18
18
 
@@ -5,13 +5,13 @@ import "../db-CYmBWcjh.mjs";
5
5
  import "../helpers-crDEr6S2.mjs";
6
6
  import "../sync--BoxBBok.mjs";
7
7
  import "../embeddings-Bn86ssxR.mjs";
8
- import "../search-CpTv1I24.mjs";
9
- import { A as registerProjectsCommands, C as registerRestoreCommands, D as registerIdentityCommands, E as registerMcpCommands, M as resolveIdentifier, O as registerMemoryCommands, S as registerSetupCommand, T as registerDaemonCommands, _ as registerUpdateCommand, a as cmdEnd, b as registerZettelCommands, c as cmdGoto, d as registerHelpCommand, f as registerDbCommands, g as registerNotifyCommands, h as registerTaskCommands, i as cmdPauseAll, j as findMovedPath, k as registerRegistryCommands, l as cmdPause, m as registerTopicCommands, n as cmdFind, o as registerSessionCleanupCommand, p as registerKgCommands, r as cmdClearNames, s as registerSessionCommands, t as cmdPick, u as cmdList, v as registerSkillCommands, w as registerBackupCommands, x as registerObsidianCommands, y as registerObservationCommands } from "../pick-B7UFLePe.mjs";
8
+ import "../search-C32zQ0V0.mjs";
9
+ import { A as registerProjectsCommands, C as registerRestoreCommands, D as registerIdentityCommands, E as registerMcpCommands, M as resolveIdentifier, O as registerMemoryCommands, S as registerSetupCommand, T as registerDaemonCommands, _ as registerUpdateCommand, a as cmdEnd, b as registerZettelCommands, c as cmdGoto, d as registerHelpCommand, f as registerDbCommands, g as registerNotifyCommands, h as registerTaskCommands, i as cmdPauseAll, j as findMovedPath, k as registerRegistryCommands, l as cmdPause, m as registerTopicCommands, n as cmdFind, o as registerSessionCleanupCommand, p as registerKgCommands, r as cmdClearNames, s as registerSessionCommands, t as cmdPick, u as cmdList, v as registerSkillCommands, w as registerBackupCommands, x as registerObsidianCommands, y as registerObservationCommands } from "../pick-BBb6PiKa.mjs";
10
10
  import "../checkpoint-block-DYq9RmMU.mjs";
11
11
  import "../indexer-AEcT8wHf.mjs";
12
12
  import "../ipc-client-aVKVERjJ.mjs";
13
13
  import "../config-CcdkNSWa.mjs";
14
- import "../factory-Bba0CG2s.mjs";
14
+ import "../factory-hmDHxTaJ.mjs";
15
15
  import { t as cmdMain } from "../main-resolver-DjyUDJrv.mjs";
16
16
  import { existsSync, readFileSync } from "node:fs";
17
17
  import { basename, dirname, join } from "node:path";
@@ -6,18 +6,18 @@ import "../db-CYmBWcjh.mjs";
6
6
  import "../helpers-crDEr6S2.mjs";
7
7
  import "../sync--BoxBBok.mjs";
8
8
  import "../embeddings-Bn86ssxR.mjs";
9
- import "../search-CpTv1I24.mjs";
9
+ import "../search-C32zQ0V0.mjs";
10
10
  import "../checkpoint-block-DYq9RmMU.mjs";
11
11
  import "../indexer-AEcT8wHf.mjs";
12
12
  import { t as PaiClient } from "../ipc-client-aVKVERjJ.mjs";
13
13
  import { i as ensureConfigDir, o as loadConfig } from "../config-CcdkNSWa.mjs";
14
- import "../factory-Bba0CG2s.mjs";
15
- import { n as serve } from "../daemon-1aYEoEQR.mjs";
14
+ import "../factory-hmDHxTaJ.mjs";
15
+ import { n as serve } from "../daemon-BhbX7XHt.mjs";
16
16
  import "../state-DTvy-jRB.mjs";
17
17
  import "../router-i9S19Usg.mjs";
18
- import "../tools-DMAQxlOk.mjs";
19
- import "../detector-DExEQ5cW.mjs";
20
- import "../work-queue-worker-BAgwmMDl.mjs";
18
+ import "../tools-B3BP_zjZ.mjs";
19
+ import "../detector-BU-bsDXs.mjs";
20
+ import "../work-queue-worker-CGMXpO_4.mjs";
21
21
  import { Command } from "commander";
22
22
 
23
23
  //#region src/daemon/index.ts
@@ -5,12 +5,12 @@ import { d as sha256 } from "./helpers-crDEr6S2.mjs";
5
5
  import { n as indexAll } from "./sync--BoxBBok.mjs";
6
6
  import { t as configureEmbeddingModel } from "./embeddings-Bn86ssxR.mjs";
7
7
  import { l as DEFAULT_NOTIFICATION_CONFIG, n as CONFIG_FILE, t as CONFIG_DIR } from "./config-CcdkNSWa.mjs";
8
- import { r as getBackendOutage, t as createStorageBackend } from "./factory-Bba0CG2s.mjs";
8
+ import { r as getBackendOutage, t as createStorageBackend } from "./factory-hmDHxTaJ.mjs";
9
9
  import { C as setStorageBackend, E as startTime, O as storageBackend, S as setStartTime, T as shutdownRequested, _ as setLastIndexTime, a as indexSchedulerTimer, b as setRegistryDb, c as lastVaultIndexTime, d as setDaemonConfig, f as setEmbedInProgress, g as setLastEmbedTime, h as setIndexSchedulerTimer, i as indexInProgress, k as vaultIndexInProgress, l as notificationConfig, m as setIndexInProgress, n as embedInProgress, o as lastEmbedTime, p as setEmbedSchedulerTimer, r as embedSchedulerTimer, s as lastIndexTime, t as daemonConfig, u as registryDb, v as setLastVaultIndexTime, w as setVaultIndexInProgress, x as setShutdownRequested, y as setNotificationConfig } from "./state-DTvy-jRB.mjs";
10
10
  import { t as routeNotification } from "./router-i9S19Usg.mjs";
11
- import { a as toolMemoryWakeup, c as toolSessionRoute, d as toolProjectInfo, f as toolProjectList, h as toolMemorySearch, i as toolMemoryTaxonomy, l as toolProjectDetect, m as toolMemoryGet, n as toolMemoryKgSearch, o as toolRegistrySearch, p as toolProjectTodo, r as toolMemoryFeedback, s as toolSessionList, u as toolProjectHealth } from "./tools-DMAQxlOk.mjs";
12
- import { t as detectTopicShift } from "./detector-DExEQ5cW.mjs";
13
- import { a as enqueue, n as startWorker, o as getStats, r as stopWorker, s as loadQueue, t as notifyNewWork } from "./work-queue-worker-BAgwmMDl.mjs";
11
+ import { a as toolMemoryWakeup, c as toolSessionRoute, d as toolProjectInfo, f as toolProjectList, h as toolMemorySearch, i as toolMemoryTaxonomy, l as toolProjectDetect, m as toolMemoryGet, n as toolMemoryKgSearch, o as toolRegistrySearch, p as toolProjectTodo, r as toolMemoryFeedback, s as toolSessionList, u as toolProjectHealth } from "./tools-B3BP_zjZ.mjs";
12
+ import { t as detectTopicShift } from "./detector-BU-bsDXs.mjs";
13
+ import { a as enqueue, n as startWorker, o as getStats, r as stopWorker, s as loadQueue, t as notifyNewWork } from "./work-queue-worker-CGMXpO_4.mjs";
14
14
  import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
15
15
  import { setPriority } from "node:os";
16
16
  import { connect, createServer } from "node:net";
@@ -111,7 +111,7 @@ async function runIndex() {
111
111
  try {
112
112
  process.stderr.write("[pai-daemon] Starting scheduled index run...\n");
113
113
  if (storageBackend.backendType === "sqlite") {
114
- const { SQLiteBackend } = await import("./sqlite--BBAyXLH.mjs");
114
+ const { SQLiteBackend } = await import("./sqlite-Cs_PXpyt.mjs");
115
115
  if (storageBackend instanceof SQLiteBackend) {
116
116
  const { projects, result } = await indexAll(storageBackend.getRawDb(), registryDb);
117
117
  const elapsed = Date.now() - t0;
@@ -210,7 +210,7 @@ async function runEmbed() {
210
210
  const count = await embedChunksWithBackend(storageBackend, () => shutdownRequested, projectNames, { maxMillis: 24e4 });
211
211
  let vaultEmbedCount = 0;
212
212
  if (daemonConfig.vaultPath) try {
213
- const { SQLiteBackend } = await import("./sqlite--BBAyXLH.mjs");
213
+ const { SQLiteBackend } = await import("./sqlite-Cs_PXpyt.mjs");
214
214
  const { openFederation } = await import("./db-CYmBWcjh.mjs").then((n) => n.t);
215
215
  const federationDb = openFederation();
216
216
  const vaultSqliteBackend = new SQLiteBackend(federationDb);
@@ -265,12 +265,12 @@ const REGISTRY_SCAN_STARTUP_DELAY_MS = 1e4;
265
265
  function startRegistryScanScheduler() {
266
266
  process.stderr.write("[pai-daemon] Registry scan scheduler: every 30min (first in 10s)\n");
267
267
  setTimeout(() => {
268
- import("./work-queue-worker-BAgwmMDl.mjs").then((n) => n.i).then(({ enqueueRegistryScan }) => enqueueRegistryScan()).catch((e) => {
268
+ import("./work-queue-worker-CGMXpO_4.mjs").then((n) => n.i).then(({ enqueueRegistryScan }) => enqueueRegistryScan()).catch((e) => {
269
269
  process.stderr.write(`[pai-daemon] Startup registry scan error: ${e}\n`);
270
270
  });
271
271
  }, REGISTRY_SCAN_STARTUP_DELAY_MS);
272
272
  const timer = setInterval(() => {
273
- import("./work-queue-worker-BAgwmMDl.mjs").then((n) => n.i).then(({ enqueueRegistryScan }) => enqueueRegistryScan()).catch((e) => {
273
+ import("./work-queue-worker-CGMXpO_4.mjs").then((n) => n.i).then(({ enqueueRegistryScan }) => enqueueRegistryScan()).catch((e) => {
274
274
  process.stderr.write(`[pai-daemon] Scheduled registry scan error: ${e}\n`);
275
275
  });
276
276
  }, REGISTRY_SCAN_INTERVAL_MS);
@@ -580,7 +580,7 @@ async function dispatchTool(method, params) {
580
580
  case "zettel_themes":
581
581
  case "zettel_god_notes":
582
582
  case "zettel_communities": {
583
- const { toolZettelExplore, toolZettelHealth, toolZettelSurprise, toolZettelSuggest, toolZettelConverse, toolZettelThemes, toolZettelGodNotes, toolZettelCommunities } = await import("./tools-DMAQxlOk.mjs").then((n) => n.t);
583
+ const { toolZettelExplore, toolZettelHealth, toolZettelSurprise, toolZettelSuggest, toolZettelConverse, toolZettelThemes, toolZettelGodNotes, toolZettelCommunities } = await import("./tools-B3BP_zjZ.mjs").then((n) => n.t);
584
584
  switch (method) {
585
585
  case "zettel_explore": return toolZettelExplore(storageBackend, p);
586
586
  case "zettel_health": return toolZettelHealth(storageBackend, p);
@@ -622,7 +622,7 @@ async function dispatchTool(method, params) {
622
622
  case "kg_query":
623
623
  case "kg_invalidate":
624
624
  case "kg_contradictions": {
625
- const { toolKgAdd, toolKgQuery, toolKgInvalidate, toolKgContradictions } = await import("./tools-DMAQxlOk.mjs").then((n) => n.t);
625
+ const { toolKgAdd, toolKgQuery, toolKgInvalidate, toolKgContradictions } = await import("./tools-B3BP_zjZ.mjs").then((n) => n.t);
626
626
  const pgPool = storageBackend.getPool?.() ?? null;
627
627
  if (!pgPool) throw new Error(`${method} requires a Postgres storage backend`);
628
628
  switch (method) {
@@ -634,7 +634,7 @@ async function dispatchTool(method, params) {
634
634
  break;
635
635
  }
636
636
  case "memory_tunnels": {
637
- const { toolMemoryTunnels } = await import("./tools-DMAQxlOk.mjs").then((n) => n.t);
637
+ const { toolMemoryTunnels } = await import("./tools-B3BP_zjZ.mjs").then((n) => n.t);
638
638
  return toolMemoryTunnels(registryDb, storageBackend, p);
639
639
  }
640
640
  case "memory_feedback": {
@@ -1353,4 +1353,4 @@ var daemon_exports = /* @__PURE__ */ __exportAll({ serve: () => serve });
1353
1353
 
1354
1354
  //#endregion
1355
1355
  export { serve as n, daemon_exports as t };
1356
- //# sourceMappingURL=daemon-1aYEoEQR.mjs.map
1356
+ //# sourceMappingURL=daemon-BhbX7XHt.mjs.map