@tekmidian/pai 1.0.2 → 1.0.4

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 (96) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/{auto-route-B4azPk4l.mjs → auto-route-21GdHL70.mjs} +2 -2
  3. package/dist/auto-route-C3S2W3Bc.mjs +11 -0
  4. package/dist/{budget-Dod6rnA9.mjs → budget-BrloTOZW.mjs} +1 -1
  5. package/dist/{chain-D-yvET_y.mjs → chain-D7PFur8Y.mjs} +2 -2
  6. package/dist/cli/index.mjs +82 -198
  7. package/dist/{cockpit-actions-BWunx3rY.mjs → cockpit-actions-BfRMr2sm.mjs} +6 -6
  8. package/dist/{cockpit-actions-C8GlTzts.mjs → cockpit-actions-OodH_vx_.mjs} +20 -18
  9. package/dist/{cockpit-memory-vTlFWV7F.mjs → cockpit-memory-teG9M8bG.mjs} +6 -6
  10. package/dist/config/defaults/config.yaml +6 -0
  11. package/dist/{controls-BcKFHeG1.mjs → controls-JLm6g0yP.mjs} +7 -5
  12. package/dist/daemon/index.mjs +23 -23
  13. package/dist/daemon-DeYImF1F.mjs +45 -0
  14. package/dist/daemon-mcp/index.mjs +21 -21
  15. package/dist/{daemon-ColVHwGZ.mjs → daemon-nXanenDM.mjs} +23 -19
  16. package/dist/{detect-9CZNO0yf.mjs → detect-BLKsUOgG.mjs} +2 -2
  17. package/dist/{detect-D1ziFFfA.mjs → detect-Rrimh0xc.mjs} +3 -3
  18. package/dist/{embed-pass-DIWjA68P.mjs → embed-pass-e64AwDCa.mjs} +1 -1
  19. package/dist/{endreason-C577xIQz.mjs → endreason-BC-v05H_.mjs} +17 -3
  20. package/dist/{factory-DjAAsqr_.mjs → factory-B7nv75rC.mjs} +2 -2
  21. package/dist/{factory-Bsib-qDG.mjs → factory-Bs9imVMq.mjs} +2 -2
  22. package/dist/{fallback-DFlItw1Z.mjs → fallback-CBWpp2F2.mjs} +227 -5
  23. package/dist/{health-Dnym-qcT.mjs → health-C4FQmkJn.mjs} +2 -2
  24. package/dist/{helpers-BD6V-p9w.mjs → helpers-DSNK_1KP.mjs} +2 -2
  25. package/dist/{helpers-CMGjy_0N.mjs → helpers-Dz7mjTSw.mjs} +3 -3
  26. package/dist/hooks/capture-all-events.mjs +21 -2
  27. package/dist/hooks/capture-tool-output.mjs +21 -2
  28. package/dist/hooks/worker-pool-host.mjs +167 -124
  29. package/dist/hooks/worker-status-line.mjs +34 -6
  30. package/dist/index.mjs +4 -4
  31. package/dist/{indexer-backend-_a6UNhXJ.mjs → indexer-backend-BdjeL4P8.mjs} +32 -229
  32. package/dist/{ipc-client-CaiGJnSM.mjs → ipc-client-CnYEF31R.mjs} +1 -1
  33. package/dist/{ipc-client-ZRmDKd5Z.mjs → ipc-client-DN7EvoVo.mjs} +1 -1
  34. package/dist/{kill-tree-EWYaEk5v.mjs → kill-tree-DleMNZX3.mjs} +2 -2
  35. package/dist/{kill-tree-BG7dRVtp.mjs → kill-tree-SV6hrIa3.mjs} +2 -2
  36. package/dist/{launch-Jh5NVeNe.mjs → launch-Di7N-J5X.mjs} +2 -2
  37. package/dist/{launch-CXVlZjHt.mjs → launch-DlZTKE3u.mjs} +2 -2
  38. package/dist/{main-config-ops-BEMpuhDz.mjs → main-config-ops-kTXR8Pyv.mjs} +1 -1
  39. package/dist/{main-resolver-3Ns1HPmS.mjs → main-resolver-yp_puSSb.mjs} +5 -5
  40. package/dist/{model-inventory-BFVSNFT3.mjs → model-inventory-h6Z9fN_o.mjs} +1 -1
  41. package/dist/{models-add-BtB3Se6f.mjs → models-add-TVni3A7V.mjs} +22 -22
  42. package/dist/{pai-marker-DurzIbw8.mjs → pai-marker-BcZyJguM.mjs} +2 -2
  43. package/dist/{pane-audit-BQytYa60.mjs → pane-audit-Lqy9N_Ki.mjs} +23 -5
  44. package/dist/{planner-BM27GBfC.mjs → planner-j77ndkBf.mjs} +14 -14
  45. package/dist/{pool-BRvoOkv6.mjs → pool-Dh-q3iJi.mjs} +43 -4
  46. package/dist/{pool-cli-B_YR8_Gl.mjs → pool-cli-BggU8GRp.mjs} +2 -2
  47. package/dist/{pool-cli-DkZTAlSW.mjs → pool-cli-DQ6OzRy2.mjs} +2 -2
  48. package/dist/{postgres-BdBNkL_l.mjs → postgres-BK4FP9Zg.mjs} +1 -1
  49. package/dist/{postgres-C6ti4haA.mjs → postgres-DNIOQijl.mjs} +17 -7
  50. package/dist/{project-setup-CfpApz5o.mjs → project-setup-CBRtFFh0.mjs} +16 -236
  51. package/dist/{providers-CblTFrhz.mjs → providers-C9QC0TtO.mjs} +2 -2
  52. package/dist/{providers-BeDiVEb-.mjs → providers-FvCLzFge.mjs} +2 -2
  53. package/dist/{query-feedback-BRfPtqki.mjs → query-feedback-DN52N9C5.mjs} +1 -1
  54. package/dist/{registrable-C7b6givx.mjs → registrable-BzH4TObg.mjs} +3 -3
  55. package/dist/{registrable-Uzgmfyhz.mjs → registrable-DpyTtajg.mjs} +2 -2
  56. package/dist/{render-Cc2j5QG9.mjs → render-B35bQTE-.mjs} +4 -4
  57. package/dist/{render-CwIrgxLi.mjs → render-C84BqQRC.mjs} +3 -3
  58. package/dist/{root-BWy0c2Lq.mjs → root-C4oXlXS_.mjs} +7 -7
  59. package/dist/{root-wC_6Fx0B.mjs → root-DD1xx_Vu.mjs} +16 -16
  60. package/dist/route-table-FEfDuhIV.mjs +15 -0
  61. package/dist/{routing-BAAST9vT.mjs → routing-DmkheCRH.mjs} +126 -8
  62. package/dist/{routing-CENt4HH1.mjs → routing-f2zulGwD.mjs} +1 -1
  63. package/dist/{run-6Q9kCPem.mjs → run-BwZKBJZZ.mjs} +28 -14
  64. package/dist/{scan-ZQWm-_se.mjs → scan-BBGvU5EB.mjs} +4 -4
  65. package/dist/{session-Bok2PqRS.mjs → session-BAhtXdxj.mjs} +15 -15
  66. package/dist/{session-DVUExUnX.mjs → session-Dn5OJXlg.mjs} +23 -23
  67. package/dist/{session-scan-BJI_ZO8M.mjs → session-scan-B57dNuA4.mjs} +1 -1
  68. package/dist/{session-scan-W-gbwJHM.mjs → session-scan-DUn10MBd.mjs} +2 -2
  69. package/dist/session-usage-CPvXvSkw.mjs +222 -0
  70. package/dist/{sources-ESUkZaWv.mjs → sources-CiE3rZek.mjs} +1 -1
  71. package/dist/{viewer-MWBVJP3u.mjs → viewer-DEySE4c_.mjs} +8 -8
  72. package/dist/{viewer-DcpJwGKE.mjs → viewer-wfKnvnrI.mjs} +6 -6
  73. package/dist/{worker-config-gmAq_-rI.mjs → worker-config-CO5FXLAT.mjs} +21 -21
  74. package/dist/{worker-config-BDYNxbYz.mjs → worker-config-eY5Qy4vl.mjs} +322 -25
  75. package/dist/{worktree-CrnOqTBW.mjs → worktree-CRs2gyg0.mjs} +2 -2
  76. package/dist/{zettelkasten-BzMm8REH.mjs → zettelkasten-_h_tUm2T.mjs} +1 -1
  77. package/dist/{zettelkasten-B_rRRRvD.mjs → zettelkasten-tpCRBYvH.mjs} +2 -2
  78. package/docs/cockpit.md +1 -0
  79. package/docs/images/architecture.png +0 -0
  80. package/gemini-extension.json +1 -1
  81. package/package.json +1 -1
  82. package/pai-plugin.json +1 -1
  83. package/plugins/context-preservation/plugin.json +1 -1
  84. package/plugins/core/plugin.json +1 -1
  85. package/plugins/creative/plugin.json +1 -1
  86. package/plugins/observability/plugin.json +1 -1
  87. package/plugins/productivity/plugin.json +1 -1
  88. package/plugins/semantic-search/plugin.json +1 -1
  89. package/plugins/ui/plugin.json +1 -1
  90. package/plugins/zettelkasten/plugin.json +1 -1
  91. package/src/hooks/ts/capture-all-events.ts +15 -3
  92. package/src/hooks/ts/lib/raw-capture.ts +7 -0
  93. package/src/hooks/ts/post-tool-use/capture-tool-output.ts +13 -3
  94. package/dist/auto-route-BjoMHKyI.mjs +0 -11
  95. package/dist/daemon-N7WhYi6I.mjs +0 -45
  96. package/dist/route-table-B7zpoypi.mjs +0 -15
@@ -10565,6 +10565,7 @@ var init_pane_audit = __esm({
10565
10565
  init_ledger();
10566
10566
  init_paths();
10567
10567
  init_kill_tree();
10568
+ init_endreason();
10568
10569
  init_status();
10569
10570
  init_plan_status();
10570
10571
  init_pane_run();
@@ -18041,6 +18042,17 @@ var init_kg_triples = __esm({
18041
18042
  async function ensureObservationTables(pool) {
18042
18043
  if (_tablesEnsured) return;
18043
18044
  await pool.query(SCHEMA_SQL);
18045
+ const colCheck = await pool.query(
18046
+ `SELECT column_name FROM information_schema.columns
18047
+ WHERE table_name = 'pai_observations' AND column_name IN ('source', 'fidelity')`
18048
+ );
18049
+ const existing = new Set(colCheck.rows.map((r) => r.column_name));
18050
+ if (!existing.has("source")) {
18051
+ await pool.query("ALTER TABLE pai_observations ADD COLUMN IF NOT EXISTS source TEXT");
18052
+ }
18053
+ if (!existing.has("fidelity")) {
18054
+ await pool.query("ALTER TABLE pai_observations ADD COLUMN IF NOT EXISTS fidelity TEXT");
18055
+ }
18044
18056
  _tablesEnsured = true;
18045
18057
  }
18046
18058
  async function ensureSkillTelemetryTable(pool) {
@@ -18068,8 +18080,9 @@ async function storeObservation(pool, obs) {
18068
18080
  const result = await pool.query(
18069
18081
  `INSERT INTO pai_observations
18070
18082
  (session_id, project_id, project_slug, type, title, narrative,
18071
- tool_name, tool_input_summary, files_read, files_modified, concepts, content_hash)
18072
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9::jsonb, $10::jsonb, $11::jsonb, $12)
18083
+ tool_name, tool_input_summary, files_read, files_modified, concepts, content_hash,
18084
+ source, fidelity)
18085
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9::jsonb, $10::jsonb, $11::jsonb, $12, $13, $14)
18073
18086
  RETURNING id`,
18074
18087
  [
18075
18088
  obs.session_id,
@@ -18083,7 +18096,9 @@ async function storeObservation(pool, obs) {
18083
18096
  JSON.stringify(obs.files_read),
18084
18097
  JSON.stringify(obs.files_modified),
18085
18098
  JSON.stringify(obs.concepts),
18086
- hash
18099
+ hash,
18100
+ obs.source ?? null,
18101
+ obs.fidelity ?? null
18087
18102
  ]
18088
18103
  );
18089
18104
  return result.rows[0]?.id ?? null;
@@ -18125,7 +18140,7 @@ async function queryObservations(pool, opts = {}) {
18125
18140
  `SELECT id, session_id, project_id, project_slug, type, title, narrative,
18126
18141
  tool_name, tool_input_summary,
18127
18142
  files_read, files_modified, concepts,
18128
- content_hash, created_at
18143
+ content_hash, source, fidelity, created_at
18129
18144
  FROM pai_observations
18130
18145
  ${where}
18131
18146
  ORDER BY created_at DESC
@@ -18140,7 +18155,7 @@ async function queryRecentObservations(pool, projectId, limit) {
18140
18155
  `SELECT id, session_id, project_id, project_slug, type, title, narrative,
18141
18156
  tool_name, tool_input_summary,
18142
18157
  files_read, files_modified, concepts,
18143
- content_hash, created_at
18158
+ content_hash, source, fidelity, created_at
18144
18159
  FROM pai_observations
18145
18160
  WHERE project_id = $1
18146
18161
  ORDER BY created_at DESC
@@ -18155,7 +18170,7 @@ async function querySessionObservations(pool, sessionId) {
18155
18170
  `SELECT id, session_id, project_id, project_slug, type, title, narrative,
18156
18171
  tool_name, tool_input_summary,
18157
18172
  files_read, files_modified, concepts,
18158
- content_hash, created_at
18173
+ content_hash, source, fidelity, created_at
18159
18174
  FROM pai_observations
18160
18175
  WHERE session_id = $1
18161
18176
  ORDER BY created_at ASC`,
@@ -18325,6 +18340,8 @@ CREATE TABLE IF NOT EXISTS pai_observations (
18325
18340
  files_modified JSONB DEFAULT '[]'::jsonb,
18326
18341
  concepts JSONB DEFAULT '[]'::jsonb,
18327
18342
  content_hash TEXT,
18343
+ source TEXT,
18344
+ fidelity TEXT,
18328
18345
  created_at TIMESTAMPTZ DEFAULT NOW()
18329
18346
  );
18330
18347
 
@@ -24629,6 +24646,16 @@ var init_loopback_guard = __esm({
24629
24646
  }
24630
24647
  });
24631
24648
 
24649
+ // src/router/cockpit-auth.ts
24650
+ var init_cockpit_auth = __esm({
24651
+ "src/router/cockpit-auth.ts"() {
24652
+ "use strict";
24653
+ init_pai_home();
24654
+ init_loopback();
24655
+ init_timeouts();
24656
+ }
24657
+ });
24658
+
24632
24659
  // src/router/router.ts
24633
24660
  var init_router2 = __esm({
24634
24661
  "src/router/router.ts"() {
@@ -24647,6 +24674,7 @@ var init_router2 = __esm({
24647
24674
  init_local_instances();
24648
24675
  init_route_table();
24649
24676
  init_loopback_guard();
24677
+ init_cockpit_auth();
24650
24678
  }
24651
24679
  });
24652
24680
 
package/dist/index.mjs CHANGED
@@ -3,11 +3,11 @@ import { a as slugify, i as parseSessionFilename, n as decodeEncodedDir, r as mi
3
3
  import "./config-XpZWOYOG.mjs";
4
4
  import "./config-Bu1_vbY8.mjs";
5
5
  import "./paths-CHifubDh.mjs";
6
- import "./worktree-CrnOqTBW.mjs";
6
+ import "./worktree-CRs2gyg0.mjs";
7
7
  import "./status-ggJ7lgVg.mjs";
8
- import "./pool-BRvoOkv6.mjs";
9
- import "./registrable-Uzgmfyhz.mjs";
10
- import { n as ensurePaiMarker, r as readPaiMarker, t as discoverPaiMarkers } from "./pai-marker-DurzIbw8.mjs";
8
+ import "./pool-Dh-q3iJi.mjs";
9
+ import "./registrable-DpyTtajg.mjs";
10
+ import { n as ensurePaiMarker, r as readPaiMarker, t as discoverPaiMarkers } from "./pai-marker-BcZyJguM.mjs";
11
11
  import { d as estimateTokens, l as buildOutline, p as parseHeadings, r as detectTier, u as chunkMarkdown } from "./helpers-CRuBUas3.mjs";
12
12
  import { i as populateSlugs, n as buildFtsQuery } from "./search-RSyeQqj1.mjs";
13
13
  import { n as rerankResults, t as configureRerankerModel } from "./reranker-CqCbpGnX.mjs";
@@ -3,21 +3,21 @@ import { t as writeFileAtomic } from "./atomic-file-BorMa4T3.mjs";
3
3
  import { N as resolveModelCapability, d as defaultWorkersConfig, j as readWorkersSection, wt as appendLedger } from "./config-XpZWOYOG.mjs";
4
4
  import { O as writeJsonAtomic, c as loadConfig, f as readMainConfigRaw, n as CONFIG_FILE, p as writeMainConfigRaw } from "./config-Bu1_vbY8.mjs";
5
5
  import { n as ensureNoMcpConfig, u as workersLogDir } from "./paths-CHifubDh.mjs";
6
- import { w as worktreesDir } from "./worktree-CrnOqTBW.mjs";
6
+ import { w as worktreesDir } from "./worktree-CRs2gyg0.mjs";
7
7
  import { B as loadStatusConfig, W as writeContinueToForge } from "./status-ggJ7lgVg.mjs";
8
8
  import { i as itermUuid, l as sessionMapPath } from "./scope-D-h6F6DN.mjs";
9
- import { _ as resolveTarget, mt as loopbackRouterChoice, ut as buildRunEnv } from "./routing-BAAST9vT.mjs";
10
- import { i as getRegistryBackend, r as createStorageBackend } from "./factory-DjAAsqr_.mjs";
11
- import { c as ensureProxyRunning, l as proxyPort } from "./launch-Jh5NVeNe.mjs";
9
+ import { _ as resolveTarget, mt as loopbackRouterChoice, ut as buildRunEnv } from "./routing-DmkheCRH.mjs";
10
+ import { i as getRegistryBackend, r as createStorageBackend } from "./factory-B7nv75rC.mjs";
11
+ import { c as ensureProxyRunning, l as proxyPort } from "./launch-Di7N-J5X.mjs";
12
12
  import { n as fetchLiveSessions, r as sendToSession } from "./aibroker-client-CQPGqLxL.mjs";
13
- import { E as probeRouter, z as recordSystemJobStart } from "./run-6Q9kCPem.mjs";
14
- import { bt as psTableOrNull } from "./controls-BcKFHeG1.mjs";
15
- import { createReadStream, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
13
+ import { E as probeRouter, z as recordSystemJobStart } from "./run-BwZKBJZZ.mjs";
14
+ import { bt as psTableOrNull } from "./controls-JLm6g0yP.mjs";
15
+ import { n as isRealUserPrompt, t as extractUserPromptText } from "./session-usage-CPvXvSkw.mjs";
16
+ import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
16
17
  import { randomUUID } from "node:crypto";
17
18
  import { basename, delimiter, dirname, join } from "node:path";
18
19
  import { homedir, setPriority, userInfo } from "node:os";
19
20
  import { spawn, spawnSync } from "node:child_process";
20
- import { createInterface } from "node:readline";
21
21
  import { copyFileSync as copyFileSync$1, existsSync as existsSync$1, linkSync as linkSync$1, mkdirSync as mkdirSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, renameSync as renameSync$1, writeFileSync as writeFileSync$1 } from "fs";
22
22
  import { basename as basename$1, join as join$1, resolve as resolve$1 } from "path";
23
23
  import { homedir as homedir$1 } from "os";
@@ -945,223 +945,6 @@ function startQuietWatcher() {
945
945
  if (timer.unref) timer.unref();
946
946
  }
947
947
 
948
- //#endregion
949
- //#region src/audit/session-usage.ts
950
- /**
951
- * session-usage.ts — parse the usage numbers out of a Claude Code session
952
- * (or subagent, or pai-worker event-mirror) JSONL transcript.
953
- *
954
- * All three log shapes share the same assistant-message envelope
955
- * ({ type: "assistant", message: { id, model, usage } }), so one parser
956
- * covers `pai audit tokens session` and the per-log readings feeding
957
- * `pai audit tokens spawn`.
958
- *
959
- * Streaming writes one JSONL line per content block of the same logical
960
- * turn, repeating message.id and usage each time — summing every line would
961
- * multiply usage by the block count. Keeping only the first line seen per
962
- * message.id is what the reference script (and this parser) count instead.
963
- */
964
- const USAGE_KEYS = [
965
- "cache_read_input_tokens",
966
- "cache_creation_input_tokens",
967
- "input_tokens",
968
- "output_tokens"
969
- ];
970
- function emptyTotals() {
971
- return {
972
- cache_read_input_tokens: 0,
973
- cache_creation_input_tokens: 0,
974
- input_tokens: 0,
975
- output_tokens: 0
976
- };
977
- }
978
- /**
979
- * `type:"system"` `subtype:"compact_boundary"` lines mark a compaction.
980
- * turnIndex is the count of assistant turns already folded when it fired,
981
- * so it lines up with the turn numbering the text/JSON report prints.
982
- */
983
- function isCompactBoundary(line) {
984
- return line.type === "system" && line.subtype === "compact_boundary";
985
- }
986
- function parseCompactionEvent(line, turnIndex) {
987
- const meta = line.compactMetadata;
988
- if (!meta || typeof meta.preTokens !== "number") return null;
989
- return {
990
- trigger: meta.trigger ?? "unknown",
991
- preTokens: meta.preTokens,
992
- turnIndex
993
- };
994
- }
995
- /**
996
- * `type:"system"` `subtype:"model_refusal_fallback"` lines mark an
997
- * automatic model switch fired by an API safety refusal (e.g. "cyber"
998
- * category), not a user or config choice — worth flagging separately since
999
- * it can rebuild the whole prompt cache mid-session.
1000
- */
1001
- function isModelFallback(line) {
1002
- return line.type === "system" && line.subtype === "model_refusal_fallback";
1003
- }
1004
- function parseFallbackEvent(line, turnIndex) {
1005
- return {
1006
- turnIndex,
1007
- from: line.originalModel ?? "unknown",
1008
- to: line.fallbackModel ?? "unknown",
1009
- category: line.apiRefusalCategory ?? "unknown",
1010
- scope: line.scope ?? "unknown"
1011
- };
1012
- }
1013
- /**
1014
- * Fold one already-parsed JSONL line into a report being accumulated.
1015
- * Exported separately so both the streaming file reader below and tests
1016
- * (which build fixtures as arrays of objects, not files) share one path.
1017
- * Returns the turn's context value when a new turn was counted, else null
1018
- * (non-assistant line, no usage, or a duplicate message.id already seen).
1019
- */
1020
- function foldAssistantLine(report, seenIds, line, threshold) {
1021
- if (line.type !== "assistant") return null;
1022
- const message = line.message;
1023
- const usage = message?.usage;
1024
- if (!usage) return null;
1025
- const id = message?.id ?? line.uuid;
1026
- if (id) {
1027
- if (seenIds.has(id)) return null;
1028
- seenIds.add(id);
1029
- }
1030
- report.turns++;
1031
- for (const key of USAGE_KEYS) {
1032
- const v = usage[key];
1033
- if (typeof v === "number") report.totals[key] += v;
1034
- }
1035
- const context = (Number(usage.cache_read_input_tokens) || 0) + (Number(usage.cache_creation_input_tokens) || 0) + (Number(usage.input_tokens) || 0);
1036
- if (report.firstTurnContext === null) {
1037
- report.firstTurnContext = context;
1038
- report.firstTurnAt = line.timestamp ?? null;
1039
- }
1040
- const atMs = line.timestamp ? Date.parse(line.timestamp) : NaN;
1041
- if (!Number.isNaN(atMs)) {
1042
- if (report.lastTurnAtMs !== null && atMs - report.lastTurnAtMs > 3600 * 1e3) report.idleGapsOver60min++;
1043
- report.lastTurnAtMs = atMs;
1044
- }
1045
- report.lastTurnContext = context;
1046
- report.maxContext = report.maxContext === null ? context : Math.max(report.maxContext, context);
1047
- if (context > threshold) report.turnsAboveThreshold++;
1048
- if ((Number(usage.cache_creation_input_tokens) || 0) > 2e4) report.cacheRebuildTurns++;
1049
- const model = message?.model ?? "unknown";
1050
- report.models[model] = (report.models[model] ?? 0) + 1;
1051
- if (report.lastModel !== null && report.lastModel !== model) report.modelSwitches.push({
1052
- turnIndex: report.turns,
1053
- from: report.lastModel,
1054
- to: model,
1055
- cacheRead: Number(usage.cache_read_input_tokens) || 0,
1056
- cacheCreation: Number(usage.cache_creation_input_tokens) || 0
1057
- });
1058
- report.lastModel = model;
1059
- const split = usage.cache_creation;
1060
- if (split) {
1061
- report.cacheCreationSplit.ephemeral5m += Number(split.ephemeral_5m_input_tokens) || 0;
1062
- report.cacheCreationSplit.ephemeral1h += Number(split.ephemeral_1h_input_tokens) || 0;
1063
- }
1064
- return context;
1065
- }
1066
- /**
1067
- * True for a real human-authored `type:"user"` prompt line: content is a
1068
- * plain string, or a content array with no `tool_result` block. Claude Code
1069
- * encodes tool results as `type:"user"` messages whose content array is
1070
- * entirely (or partly) tool_result blocks — those must not count as prompts.
1071
- */
1072
- function isRealUserPrompt(line) {
1073
- if (line.type !== "user") return false;
1074
- if (line.isMeta) return false;
1075
- if (line.origin?.kind && line.origin.kind !== "human") return false;
1076
- const content = line.message?.content;
1077
- if (typeof content === "string") return true;
1078
- if (Array.isArray(content)) return !content.some((block) => block?.type === "tool_result");
1079
- return false;
1080
- }
1081
- /** Plain text of a real user prompt: the string content, or its first text block. */
1082
- function extractUserPromptText(line) {
1083
- const content = line.message?.content;
1084
- if (typeof content === "string") return content;
1085
- if (Array.isArray(content)) return content.find((b) => b?.type === "text")?.text ?? "";
1086
- return "";
1087
- }
1088
- /**
1089
- * Parse a session/subagent/worker-event JSONL file into a usage report.
1090
- * `keepaliveWord`, when given, counts real user prompts whose text exactly
1091
- * matches it (trimmed) — the sessions.cacheKeepalive beat prompt — into
1092
- * `keepaliveBeats`; omitted, `keepaliveBeats` stays null.
1093
- */
1094
- async function parseSessionUsage(path, threshold = 2e5, keepaliveWord) {
1095
- const report = {
1096
- path,
1097
- sizeBytes: existsSync(path) ? readFileSync(path).byteLength : 0,
1098
- turns: 0,
1099
- totals: emptyTotals(),
1100
- models: {},
1101
- firstTurnContext: null,
1102
- lastTurnContext: null,
1103
- cacheCreationSplit: {
1104
- ephemeral5m: 0,
1105
- ephemeral1h: 0
1106
- },
1107
- avgContext: null,
1108
- maxContext: null,
1109
- turnsAboveThreshold: 0,
1110
- cacheRebuildTurns: 0,
1111
- userPrompts: 0,
1112
- promptExposure: 0,
1113
- compactions: [],
1114
- firstTurnAt: null,
1115
- lastModel: null,
1116
- modelSwitches: [],
1117
- fallbacks: [],
1118
- lastTurnAtMs: null,
1119
- idleGapsOver60min: 0,
1120
- keepaliveBeats: keepaliveWord ? 0 : null
1121
- };
1122
- const seenIds = /* @__PURE__ */ new Set();
1123
- let contextSum = 0;
1124
- const rl = createInterface({
1125
- input: createReadStream(path, "utf8"),
1126
- crlfDelay: Infinity
1127
- });
1128
- for await (const raw of rl) {
1129
- if (!raw.trim()) continue;
1130
- let obj;
1131
- try {
1132
- obj = JSON.parse(raw);
1133
- } catch {
1134
- continue;
1135
- }
1136
- if (obj.type === "user") {
1137
- if (isRealUserPrompt(obj)) {
1138
- report.userPrompts++;
1139
- if (keepaliveWord && extractUserPromptText(obj).trim() === keepaliveWord) report.keepaliveBeats = (report.keepaliveBeats ?? 0) + 1;
1140
- }
1141
- continue;
1142
- }
1143
- if (isCompactBoundary(obj)) {
1144
- const event = parseCompactionEvent(obj, report.turns);
1145
- if (event) report.compactions.push(event);
1146
- continue;
1147
- }
1148
- if (isModelFallback(obj)) {
1149
- report.fallbacks.push(parseFallbackEvent(obj, report.turns));
1150
- continue;
1151
- }
1152
- const context = foldAssistantLine(report, seenIds, obj, threshold);
1153
- if (context !== null) {
1154
- contextSum += context;
1155
- report.promptExposure += report.userPrompts;
1156
- }
1157
- }
1158
- report.avgContext = report.turns > 0 ? Math.round(contextSum / report.turns) : null;
1159
- return report;
1160
- }
1161
- function totalUsageTokens(totals) {
1162
- return totals.cache_read_input_tokens + totals.cache_creation_input_tokens + totals.input_tokens + totals.output_tokens;
1163
- }
1164
-
1165
948
  //#endregion
1166
949
  //#region src/daemon/session-keepalive.ts
1167
950
  /**
@@ -3777,10 +3560,30 @@ async function handleSessionSummary(payload) {
3777
3560
  process.stderr.write(`[session-summary] ${selectedModel} produced ${summaryText.length} char summary.\n`);
3778
3561
  const notePath = writeSessionNote(cwd, summaryText, extracted.filesModified, sessionId);
3779
3562
  if (notePath) process.stderr.write(`[session-summary] Session note written: ${basename(notePath)}\n`);
3563
+ const effectiveSlug = projectSlug ?? basename(cwd);
3564
+ const projectId = projectSlug ? await lookupProjectId(projectSlug) : null;
3565
+ if (storageBackend?.supportsPostgresFeatures) try {
3566
+ await storageBackend.storeObservation({
3567
+ session_id: sessionId ?? cwd,
3568
+ project_id: projectId,
3569
+ project_slug: effectiveSlug,
3570
+ type: "discovery",
3571
+ title: `session summary (${selectedModel})`,
3572
+ narrative: summaryText.slice(0, 2e3),
3573
+ tool_name: "session-summary",
3574
+ files_read: [],
3575
+ files_modified: extracted.filesModified,
3576
+ concepts: [],
3577
+ source: "daemon",
3578
+ fidelity: "inferred"
3579
+ });
3580
+ } catch (err) {
3581
+ process.stderr.write(`[session-summary] Summary observation failed: ${err}\n`);
3582
+ }
3780
3583
  await extractAndStoreTriples({
3781
3584
  summaryText,
3782
- projectSlug: projectSlug ?? basename(cwd),
3783
- projectId: projectSlug ? await lookupProjectId(projectSlug) : null,
3585
+ projectSlug: effectiveSlug,
3586
+ projectId,
3784
3587
  sessionId: sessionId ?? cwd,
3785
3588
  gitLog,
3786
3589
  model: selectedModel
@@ -4341,5 +4144,5 @@ function reexecBackground() {
4341
4144
  }
4342
4145
 
4343
4146
  //#endregion
4344
- export { setStartTime as $, indexSchedulerTimer as A, readQuiet as At, setDaemonConfig as B, appendCheckpointToNote as Bt, migrateSummaryCooldowns as C, runSessionKeepaliveTick as Ct, embedInProgress as D, deferIfQuiet as Dt, daemonConfig as E, totalUsageTokens as Et, lastVaultIndexTime as F, removeDaemonPidfile as Ft, setLastEmbedPass as G, restartRouter as Gt, setEmbedSchedulerTimer as H, findLatestNote as Ht, notificationConfig as I, resolveDaemonPid as It, setLastIndexTime as J, setLastEmbedTime as K, passFailures as L, writeDaemonPidfile as Lt, lastEmbedTime as M, startQuietWatcher as Mt, lastIndexPass as N, writeQuiet as Nt, embedSchedulerTimer as O, describeQuiet as Ot, lastIndexTime as P, LAUNCHD_LABEL as Pt, setShutdownRequested as Q, registryBackend as R, readContextHandoverCache as Rt, handleSessionSummary as S, loadSessionKeepaliveState as St, cacheKeepaliveTimer as T, parseSessionUsage as Tt, setIndexInProgress as U, findNotesDir$1 as Ut, setEmbedInProgress as V, applyContinue as Vt, setIndexSchedulerTimer as W, readBodyFile as Wt, setNotificationConfig as X, setLastVaultIndexTime as Y, setRegistryBackend as Z, markFailed as _, buildWakeupContext as _t, runPassChild as a, vaultIndexInProgress as at, findLatestJsonl as b, reapJob as bt, NonRetryableError as c, addWorkToSessionNote as ct, enqueue as d, getCurrentNotePath as dt, setStorageBackend as et, enqueueCoalesced as f, archiveSessionFilesToSessionsDir as ft, markCompleted as g, vaultIndexEnabled as gt, loadQueue as h, obsidianEnabled as ht, reexecBackground as i, storageBackend as it, lastEmbedPass as j, registerQuietRunner as jt, indexInProgress as k, nextOccurrence as kt, cleanup as l, appendCheckpoint as lt, hasPendingOrProcessingOfType as m, OBSIDIAN_DISABLED_MESSAGE as mt, buildPassCommand as n, shutdownRequested as nt, backfillKgFromNotes as o, sessionIdFromTranscript as ot, getStats as p, findNotesDir as pt, setLastIndexPass as q, cliEntry as r, startTime as rt, migrateKgBackfillState as s, updateTodoContinue as st, PassSpawnError as t, setVaultIndexInProgress as tt, dequeue as u, finalizeSessionNote as ut, migrateWorkQueue as v, migrateIdentityFile as vt, spawnSummarizer as w, sessionKeepaliveLedgerSummary as wt, getGitContext as x, sweepOrphans as xt, contentToText as y, jobPaths as yt, setCacheKeepaliveTimer as z, writeContextHandoverCache as zt };
4345
- //# sourceMappingURL=indexer-backend-_a6UNhXJ.mjs.map
4147
+ export { setStartTime as $, indexSchedulerTimer as A, startQuietWatcher as At, setDaemonConfig as B, findLatestNote as Bt, migrateSummaryCooldowns as C, runSessionKeepaliveTick as Ct, embedInProgress as D, nextOccurrence as Dt, daemonConfig as E, describeQuiet as Et, lastVaultIndexTime as F, writeDaemonPidfile as Ft, setLastEmbedPass as G, setEmbedSchedulerTimer as H, readBodyFile as Ht, notificationConfig as I, readContextHandoverCache as It, setLastIndexTime as J, setLastEmbedTime as K, passFailures as L, writeContextHandoverCache as Lt, lastEmbedTime as M, LAUNCHD_LABEL as Mt, lastIndexPass as N, removeDaemonPidfile as Nt, embedSchedulerTimer as O, readQuiet as Ot, lastIndexTime as P, resolveDaemonPid as Pt, setShutdownRequested as Q, registryBackend as R, appendCheckpointToNote as Rt, handleSessionSummary as S, loadSessionKeepaliveState as St, cacheKeepaliveTimer as T, deferIfQuiet as Tt, setIndexInProgress as U, restartRouter as Ut, setEmbedInProgress as V, findNotesDir$1 as Vt, setIndexSchedulerTimer as W, setNotificationConfig as X, setLastVaultIndexTime as Y, setRegistryBackend as Z, markFailed as _, buildWakeupContext as _t, runPassChild as a, vaultIndexInProgress as at, findLatestJsonl as b, reapJob as bt, NonRetryableError as c, addWorkToSessionNote as ct, enqueue as d, getCurrentNotePath as dt, setStorageBackend as et, enqueueCoalesced as f, archiveSessionFilesToSessionsDir as ft, markCompleted as g, vaultIndexEnabled as gt, loadQueue as h, obsidianEnabled as ht, reexecBackground as i, storageBackend as it, lastEmbedPass as j, writeQuiet as jt, indexInProgress as k, registerQuietRunner as kt, cleanup as l, appendCheckpoint as lt, hasPendingOrProcessingOfType as m, OBSIDIAN_DISABLED_MESSAGE as mt, buildPassCommand as n, shutdownRequested as nt, backfillKgFromNotes as o, sessionIdFromTranscript as ot, getStats as p, findNotesDir as pt, setLastIndexPass as q, cliEntry as r, startTime as rt, migrateKgBackfillState as s, updateTodoContinue as st, PassSpawnError as t, setVaultIndexInProgress as tt, dequeue as u, finalizeSessionNote as ut, migrateWorkQueue as v, migrateIdentityFile as vt, spawnSummarizer as w, sessionKeepaliveLedgerSummary as wt, getGitContext as x, sweepOrphans as xt, contentToText as y, jobPaths as yt, setCacheKeepaliveTimer as z, applyContinue as zt };
4148
+ //# sourceMappingURL=indexer-backend-BdjeL4P8.mjs.map
@@ -155,4 +155,4 @@ var PaiClient = class {
155
155
 
156
156
  //#endregion
157
157
  export { PaiClient as n, IPC_SOCKET_PATH as t };
158
- //# sourceMappingURL=ipc-client-CaiGJnSM.mjs.map
158
+ //# sourceMappingURL=ipc-client-CnYEF31R.mjs.map
@@ -1,3 +1,3 @@
1
- import { n as PaiClient, t as IPC_SOCKET_PATH } from "./ipc-client-CaiGJnSM.mjs";
1
+ import { n as PaiClient, t as IPC_SOCKET_PATH } from "./ipc-client-CnYEF31R.mjs";
2
2
 
3
3
  export { IPC_SOCKET_PATH, PaiClient };
@@ -3,7 +3,7 @@ import { i as ledgerPath } from "./paths-CHifubDh.mjs";
3
3
  import { D as pidAlive, P as waitForTerminalStatus, k as saveStatus, v as loadStatus, w as ownsPid, y as loadStatuses } from "./status-ggJ7lgVg.mjs";
4
4
  import { i as itermUuid } from "./scope-D-h6F6DN.mjs";
5
5
  import { a as buildsDir, d as releaseBuildsOf, t as callerIdentity } from "./caller-identity-yLFb7CKq.mjs";
6
- import { n as callerDescription, s as requestKill, t as appendStopEvent } from "./endreason-C577xIQz.mjs";
6
+ import { n as callerDescription, s as requestKill, t as appendStopEvent } from "./endreason-BC-v05H_.mjs";
7
7
  import { readFileSync } from "node:fs";
8
8
  import { join } from "node:path";
9
9
  import { homedir } from "node:os";
@@ -257,4 +257,4 @@ async function killTree(logDir, id, opts = {}) {
257
257
 
258
258
  //#endregion
259
259
  export { killTree as i, isOwner as n, killRefusal as r, descendantsLeavesFirst as t };
260
- //# sourceMappingURL=kill-tree-EWYaEk5v.mjs.map
260
+ //# sourceMappingURL=kill-tree-DleMNZX3.mjs.map
@@ -4,7 +4,7 @@ import "./paths-CHifubDh.mjs";
4
4
  import "./status-ggJ7lgVg.mjs";
5
5
  import "./scope-D-h6F6DN.mjs";
6
6
  import "./caller-identity-yLFb7CKq.mjs";
7
- import "./endreason-C577xIQz.mjs";
8
- import { i as killTree, n as isOwner, r as killRefusal, t as descendantsLeavesFirst } from "./kill-tree-EWYaEk5v.mjs";
7
+ import "./endreason-BC-v05H_.mjs";
8
+ import { i as killTree, n as isOwner, r as killRefusal, t as descendantsLeavesFirst } from "./kill-tree-DleMNZX3.mjs";
9
9
 
10
10
  export { killTree };
@@ -1,5 +1,5 @@
1
1
  import { I as LOOPBACK_HOST, _ as maskKey, a as MODEL_CAPABILITIES, b as nativeOrchestratorModel, c as WorkersConfigError, j as readWorkersSection, p as getProviderOrNative, t as ANTHROPIC_NATIVE, y as nativeAnthropicProvider } from "./config-XpZWOYOG.mjs";
2
- import { _t as nativeRoutePreflight, b as SESSION_PROVIDER_ENV, ut as buildRunEnv, yt as pinnedSettingsArgs } from "./routing-BAAST9vT.mjs";
2
+ import { _t as nativeRoutePreflight, b as SESSION_PROVIDER_ENV, ut as buildRunEnv, yt as pinnedSettingsArgs } from "./routing-DmkheCRH.mjs";
3
3
  import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
4
4
  import { dirname, join } from "node:path";
5
5
  import { spawn } from "node:child_process";
@@ -258,4 +258,4 @@ function maskLaunchEnv(env) {
258
258
 
259
259
  //#endregion
260
260
  export { detectCurrentProviderName as a, ensureProxyRunning as c, detectCurrentModel as i, proxyPort as l, buildLaunchPlan as n, launchableProviderNames as o, buildLaunchRows as r, maskLaunchEnv as s, LaunchError as t, stopProxy as u };
261
- //# sourceMappingURL=launch-Jh5NVeNe.mjs.map
261
+ //# sourceMappingURL=launch-Di7N-J5X.mjs.map
@@ -1,6 +1,6 @@
1
1
  import { i as err } from "./utils-J2b9y8PC.mjs";
2
2
  import { j as readWorkersSection, t as ANTHROPIC_NATIVE, vt as stripModelVariant } from "./config-XpZWOYOG.mjs";
3
- import { _t as nativeRoutePreflight, b as SESSION_PROVIDER_ENV, dt as claudeCommand, gt as nativeLaunchSettingsArgs, ht as nativeLaunchEnv, ut as buildRunEnv, xt as routeVerdictLine, yt as pinnedSettingsArgs } from "./routing-BAAST9vT.mjs";
3
+ import { _t as nativeRoutePreflight, b as SESSION_PROVIDER_ENV, dt as claudeCommand, gt as nativeLaunchSettingsArgs, ht as nativeLaunchEnv, ut as buildRunEnv, xt as routeVerdictLine, yt as pinnedSettingsArgs } from "./routing-DmkheCRH.mjs";
4
4
  import { closeSync, copyFileSync, existsSync, fstatSync, linkSync, openSync, readSync, realpathSync } from "node:fs";
5
5
  import { join } from "node:path";
6
6
  import chalk from "chalk";
@@ -740,4 +740,4 @@ function launchInDir(dir, name, opts = {}) {
740
740
 
741
741
  //#endregion
742
742
  export { providerResumePlan as a, resumeOfferBlock as c, printExitDir as d, probeResume as i, resumeRouteFor as l, launchInDir as n, restoreTopLevel as o, launchPrompt as r, resumeArgvText as s, hasConversation as t, transcriptModelFor as u };
743
- //# sourceMappingURL=launch-CXVlZjHt.mjs.map
743
+ //# sourceMappingURL=launch-DlZTKE3u.mjs.map
@@ -239,4 +239,4 @@ function unsetConfigValueOp(dottedPath) {
239
239
 
240
240
  //#endregion
241
241
  export { listConfigOp as a, getConfigValueOp as i, formatConfigGetOutput as n, setConfigValueOp as o, formatConfigSource as r, unsetConfigValueOp as s, MainConfigOpsError as t };
242
- //# sourceMappingURL=main-config-ops-BEMpuhDz.mjs.map
242
+ //# sourceMappingURL=main-config-ops-kTXR8Pyv.mjs.map
@@ -4,7 +4,7 @@ import "./config-Bu1_vbY8.mjs";
4
4
  import "./paths-CHifubDh.mjs";
5
5
  import "./status-ggJ7lgVg.mjs";
6
6
  import { d as terminalHasName } from "./scope-D-h6F6DN.mjs";
7
- import "./routing-BAAST9vT.mjs";
7
+ import "./routing-DmkheCRH.mjs";
8
8
  import "./tool-errors-7E13StWd.mjs";
9
9
  import "./wait-ByV0OyMZ.mjs";
10
10
  import "./local-tiers-BE4jGaMa.mjs";
@@ -12,9 +12,9 @@ import "./caller-identity-yLFb7CKq.mjs";
12
12
  import "./capacity-DEveQdFV.mjs";
13
13
  import "./local-instances-DOxSgT_L.mjs";
14
14
  import "./local-candidate-DLdwQt0s.mjs";
15
- import { c as resumeOfferBlock, l as resumeRouteFor, n as launchInDir } from "./launch-CXVlZjHt.mjs";
15
+ import { c as resumeOfferBlock, l as resumeRouteFor, n as launchInDir } from "./launch-DlZTKE3u.mjs";
16
16
  import { i as switchToSession, n as fetchLiveSessions } from "./aibroker-client-CQPGqLxL.mjs";
17
- import { s as scanSessions, t as fmtAge } from "./session-scan-W-gbwJHM.mjs";
17
+ import { s as scanSessions, t as fmtAge } from "./session-scan-DUn10MBd.mjs";
18
18
  import { createReadStream, existsSync, realpathSync } from "node:fs";
19
19
  import { basename, join } from "node:path";
20
20
  import chalk from "chalk";
@@ -600,7 +600,7 @@ async function openMatch(entry, allSessions, dryRun, resume, auto) {
600
600
  }
601
601
  async function getRegisteredProjects(all = false) {
602
602
  try {
603
- const { getRegistryBackend } = await import("./factory-Bsib-qDG.mjs");
603
+ const { getRegistryBackend } = await import("./factory-Bs9imVMq.mjs");
604
604
  return await (await getRegistryBackend()).listProjectsWithSessionStats(all ? {} : { status: "active" });
605
605
  } catch {
606
606
  return [];
@@ -784,4 +784,4 @@ async function cmdMain(query, pickN, opts) {
784
784
 
785
785
  //#endregion
786
786
  export { cmdMain };
787
- //# sourceMappingURL=main-resolver-3Ns1HPmS.mjs.map
787
+ //# sourceMappingURL=main-resolver-yp_puSSb.mjs.map
@@ -3,7 +3,7 @@ import "./config-Bu1_vbY8.mjs";
3
3
  import "./paths-CHifubDh.mjs";
4
4
  import "./status-ggJ7lgVg.mjs";
5
5
  import "./scope-D-h6F6DN.mjs";
6
- import { $ as parseFootprint, B as MODEL_INVENTORY_MAX_AGE_MS, G as fmtMem, H as ProbeHold, J as inventoryRows, K as fmtMemMapped, Q as modelLabel, R as DOWN_AFTER_MISSES, U as computeInventory, V as MODEL_INVENTORY_REFRESH_MS, W as currentInventory, X as liveDeps, Y as inventoryText, Z as modelKind, at as readInventoryInput, ct as writeInventory, et as parseSizeMb, it as readInventory, nt as processTreeMemory, ot as readModelLabels, q as inventoryPath, rt as processTreeRssMb, st as startInventoryRefresh, tt as parseTable, z as INVENTORY_HEADERS } from "./routing-BAAST9vT.mjs";
6
+ import { $ as parseFootprint, B as MODEL_INVENTORY_MAX_AGE_MS, G as fmtMem, H as ProbeHold, J as inventoryRows, K as fmtMemMapped, Q as modelLabel, R as DOWN_AFTER_MISSES, U as computeInventory, V as MODEL_INVENTORY_REFRESH_MS, W as currentInventory, X as liveDeps, Y as inventoryText, Z as modelKind, at as readInventoryInput, ct as writeInventory, et as parseSizeMb, it as readInventory, nt as processTreeMemory, ot as readModelLabels, q as inventoryPath, rt as processTreeRssMb, st as startInventoryRefresh, tt as parseTable, z as INVENTORY_HEADERS } from "./routing-DmkheCRH.mjs";
7
7
  import "./tool-errors-7E13StWd.mjs";
8
8
  import "./wait-ByV0OyMZ.mjs";
9
9
  import "./local-tiers-BE4jGaMa.mjs";
@@ -2,12 +2,12 @@ import "./utils-J2b9y8PC.mjs";
2
2
  import { tt as workersYamlPath } from "./config-XpZWOYOG.mjs";
3
3
  import "./config-Bu1_vbY8.mjs";
4
4
  import "./paths-CHifubDh.mjs";
5
- import "./worktree-CrnOqTBW.mjs";
5
+ import "./worktree-CRs2gyg0.mjs";
6
6
  import "./status-ggJ7lgVg.mjs";
7
- import "./pool-BRvoOkv6.mjs";
7
+ import "./pool-Dh-q3iJi.mjs";
8
8
  import "./helpers-CRuBUas3.mjs";
9
9
  import "./scope-D-h6F6DN.mjs";
10
- import "./routing-BAAST9vT.mjs";
10
+ import "./routing-DmkheCRH.mjs";
11
11
  import "./tool-errors-7E13StWd.mjs";
12
12
  import "./wait-ByV0OyMZ.mjs";
13
13
  import { g as planStart, m as parseLocalConfig, o as defaultLauncher, y as shellQuote } from "./local-tiers-BE4jGaMa.mjs";
@@ -15,28 +15,28 @@ import "./caller-identity-yLFb7CKq.mjs";
15
15
  import "./capacity-DEveQdFV.mjs";
16
16
  import "./local-instances-DOxSgT_L.mjs";
17
17
  import "./local-candidate-DLdwQt0s.mjs";
18
- import "./factory-DjAAsqr_.mjs";
19
- import "./postgres-C6ti4haA.mjs";
18
+ import "./factory-B7nv75rC.mjs";
19
+ import "./postgres-DNIOQijl.mjs";
20
20
  import "./embedding-gate-6rZrWRXa.mjs";
21
21
  import "./embeddings-BVq3esBF.mjs";
22
22
  import "./router-CQSc3lk3.mjs";
23
- import "./launch-Jh5NVeNe.mjs";
24
- import "./health-Dnym-qcT.mjs";
25
- import "./run-6Q9kCPem.mjs";
26
- import "./controls-BcKFHeG1.mjs";
27
- import "./endreason-C577xIQz.mjs";
28
- import "./render-CwIrgxLi.mjs";
23
+ import "./launch-Di7N-J5X.mjs";
24
+ import "./health-C4FQmkJn.mjs";
25
+ import "./run-BwZKBJZZ.mjs";
26
+ import "./controls-JLm6g0yP.mjs";
27
+ import "./endreason-BC-v05H_.mjs";
28
+ import "./render-C84BqQRC.mjs";
29
29
  import "./operator-CyuB3aVw.mjs";
30
- import "./kill-tree-EWYaEk5v.mjs";
31
- import "./pool-cli-B_YR8_Gl.mjs";
32
- import "./pane-audit-BQytYa60.mjs";
33
- import "./providers-CblTFrhz.mjs";
34
- import { H as canBind, U as sizeOnDiskGb, V as allocatePort, at as defaultRegistryCtx, f as killInstance, g as portListeners, ot as hashText, p as launchDetached, st as saveRegistry, u as healthOk } from "./worker-config-BDYNxbYz.mjs";
35
- import "./main-config-ops-BEMpuhDz.mjs";
36
- import "./cockpit-actions-C8GlTzts.mjs";
37
- import "./ipc-client-CaiGJnSM.mjs";
38
- import "./embed-pass-DIWjA68P.mjs";
39
- import "./fallback-DFlItw1Z.mjs";
30
+ import "./kill-tree-DleMNZX3.mjs";
31
+ import "./pool-cli-BggU8GRp.mjs";
32
+ import "./pane-audit-Lqy9N_Ki.mjs";
33
+ import "./fallback-CBWpp2F2.mjs";
34
+ import "./providers-C9QC0TtO.mjs";
35
+ import { H as canBind, U as sizeOnDiskGb, V as allocatePort, ct as saveRegistry, f as killInstance, g as portListeners, ot as defaultRegistryCtx, p as launchDetached, st as hashText, u as healthOk } from "./worker-config-eY5Qy4vl.mjs";
36
+ import "./main-config-ops-kTXR8Pyv.mjs";
37
+ import "./cockpit-actions-OodH_vx_.mjs";
38
+ import "./ipc-client-CnYEF31R.mjs";
39
+ import "./embed-pass-e64AwDCa.mjs";
40
40
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
41
41
  import { basename, join } from "node:path";
42
42
  import { homedir } from "node:os";
@@ -332,4 +332,4 @@ async function smokeTest(cfg, name, d = {}) {
332
332
 
333
333
  //#endregion
334
334
  export { addModel };
335
- //# sourceMappingURL=models-add-BtB3Se6f.mjs.map
335
+ //# sourceMappingURL=models-add-TVni3A7V.mjs.map
@@ -1,5 +1,5 @@
1
1
  import { t as writeFileAtomic } from "./atomic-file-BorMa4T3.mjs";
2
- import { s as worktreeReason } from "./registrable-Uzgmfyhz.mjs";
2
+ import { s as worktreeReason } from "./registrable-DpyTtajg.mjs";
3
3
  import { existsSync, mkdirSync, readFileSync, readdirSync, statSync } from "node:fs";
4
4
  import { join, resolve } from "node:path";
5
5
  import { homedir } from "node:os";
@@ -228,4 +228,4 @@ function discoverPaiMarkers(searchDirs) {
228
228
 
229
229
  //#endregion
230
230
  export { ensurePaiMarker as n, readPaiMarker as r, discoverPaiMarkers as t };
231
- //# sourceMappingURL=pai-marker-DurzIbw8.mjs.map
231
+ //# sourceMappingURL=pai-marker-BcZyJguM.mjs.map