@tekmidian/pai 0.66.0 → 0.66.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 (165) hide show
  1. package/dist/{aibroker-client-B8c42Lh8.mjs → aibroker-client-CHEEvJZW.mjs} +2 -2
  2. package/dist/{aibroker-client-C5Fw7DNz.mjs → aibroker-client-Dfv7j1Od.mjs} +3 -3
  3. package/dist/{aibroker-client-C5Fw7DNz.mjs.map → aibroker-client-Dfv7j1Od.mjs.map} +1 -1
  4. package/dist/{auto-route-o0BOsXn7.mjs → auto-route-BnizyALK.mjs} +65 -4
  5. package/dist/auto-route-BnizyALK.mjs.map +1 -0
  6. package/dist/auto-route-D6fW1Q8z.mjs +3 -0
  7. package/dist/{chain-D4PuQ2c-.mjs → chain-D5876UQX.mjs} +3 -4
  8. package/dist/{chain-D4PuQ2c-.mjs.map → chain-D5876UQX.mjs.map} +1 -1
  9. package/dist/cli/index.mjs +18 -23
  10. package/dist/cli/index.mjs.map +1 -1
  11. package/dist/cli/program.mjs +17 -22
  12. package/dist/{config-BbLFD7Uf.mjs → config-C-LiGlop.mjs} +2 -2
  13. package/dist/{config-BbLFD7Uf.mjs.map → config-C-LiGlop.mjs.map} +1 -1
  14. package/dist/{config-YinjgXEJ.mjs → config-DKIA7wgF.mjs} +1 -1
  15. package/dist/{context-handover-cache-pkHzmL3c.mjs → context-handover-cache-9PGvXRIw.mjs} +984 -10
  16. package/dist/context-handover-cache-9PGvXRIw.mjs.map +1 -0
  17. package/dist/daemon/index.mjs +17 -19
  18. package/dist/daemon/index.mjs.map +1 -1
  19. package/dist/daemon-BUgNvMUh.mjs +5029 -0
  20. package/dist/daemon-BUgNvMUh.mjs.map +1 -0
  21. package/dist/daemon-DL0eglMJ.mjs +18 -0
  22. package/dist/daemon-mcp/index.mjs +15 -10
  23. package/dist/daemon-mcp/index.mjs.map +1 -1
  24. package/dist/{embeddings-CcscYWwk.mjs → embeddings-CEBGrzwu.mjs} +1 -1
  25. package/dist/{embeddings-Bx3q0QOY.mjs → embeddings-DOLZnT1X.mjs} +1 -1
  26. package/dist/{embeddings-Bx3q0QOY.mjs.map → embeddings-DOLZnT1X.mjs.map} +1 -1
  27. package/dist/{env-JNEIrQWg.mjs → env-DiolswKQ.mjs} +1 -1
  28. package/dist/{env-JNEIrQWg.mjs.map → env-DiolswKQ.mjs.map} +1 -1
  29. package/dist/factory-DrBg24UT.mjs +8 -0
  30. package/dist/factory-Ypf8r0fK.mjs +2892 -0
  31. package/dist/factory-Ypf8r0fK.mjs.map +1 -0
  32. package/dist/{fallback-B5svk75f.mjs → fallback-D51R4shY.mjs} +27 -13
  33. package/dist/fallback-D51R4shY.mjs.map +1 -0
  34. package/dist/{chunker-BH4i-F2b.mjs → helpers-CZsi_49C.mjs} +221 -2
  35. package/dist/helpers-CZsi_49C.mjs.map +1 -0
  36. package/dist/hooks/block-sleep-poll.mjs.map +2 -2
  37. package/dist/hooks/load-project-context.mjs.map +2 -2
  38. package/dist/hooks/worker-guard.mjs +5 -0
  39. package/dist/hooks/worker-guard.mjs.map +2 -2
  40. package/dist/hooks/worker-status-line.mjs +1 -0
  41. package/dist/hooks/worker-status-line.mjs.map +2 -2
  42. package/dist/index.mjs +6 -7
  43. package/dist/{ipc-client-D16Xw6Uo.mjs → ipc-client-BLYX51nG.mjs} +2 -2
  44. package/dist/{ipc-client-D16Xw6Uo.mjs.map → ipc-client-BLYX51nG.mjs.map} +1 -1
  45. package/dist/main-resolver-BYgP86C1.mjs +7 -0
  46. package/dist/{main-resolver-DPPwHNtn.mjs → main-resolver-kVkMJZUD.mjs} +6 -6
  47. package/dist/{main-resolver-DPPwHNtn.mjs.map → main-resolver-kVkMJZUD.mjs.map} +1 -1
  48. package/dist/{migrate-BD7D8EEh.mjs → migrate-Bq0esMOa.mjs} +2 -2
  49. package/dist/{migrate-BD7D8EEh.mjs.map → migrate-Bq0esMOa.mjs.map} +1 -1
  50. package/dist/{pai-marker-D1MMswkz.mjs → pai-marker-DXVpFsYz.mjs} +1 -1
  51. package/dist/{pai-marker-D1MMswkz.mjs.map → pai-marker-DXVpFsYz.mjs.map} +1 -1
  52. package/dist/{planner-EJPZnnif.mjs → planner-D5yt0EfA.mjs} +10 -7
  53. package/dist/{planner-EJPZnnif.mjs.map → planner-D5yt0EfA.mjs.map} +1 -1
  54. package/dist/postgres-BmLr0MUm.mjs +5 -0
  55. package/dist/{postgres-Ceqsa64C.mjs → postgres-D3xc2RB4.mjs} +364 -9
  56. package/dist/postgres-D3xc2RB4.mjs.map +1 -0
  57. package/dist/{program-DSETzrWg.mjs → program-DIXRtAFy.mjs} +80 -70
  58. package/dist/program-DIXRtAFy.mjs.map +1 -0
  59. package/dist/{query-feedback-BIaZTTFO.mjs → query-feedback-B7FYE4JR.mjs} +1 -1
  60. package/dist/{query-feedback-BIaZTTFO.mjs.map → query-feedback-B7FYE4JR.mjs.map} +1 -1
  61. package/dist/{reranker-DKv80KO5.mjs → reranker-3lnggwgq.mjs} +1 -1
  62. package/dist/{reranker-DKv80KO5.mjs.map → reranker-3lnggwgq.mjs.map} +1 -1
  63. package/dist/{reranker-CFiEzHQu.mjs → reranker-CZ2mP4cf.mjs} +1 -1
  64. package/dist/router-BK-hFeQ6.mjs +3 -0
  65. package/dist/{router-a5G7q8_3.mjs → router-BaTbc9VX.mjs} +2 -2
  66. package/dist/{router-a5G7q8_3.mjs.map → router-BaTbc9VX.mjs.map} +1 -1
  67. package/dist/{run-Z4akoa8G.mjs → run-CLYTOm0x.mjs} +764 -25
  68. package/dist/run-CLYTOm0x.mjs.map +1 -0
  69. package/dist/{run-env-DRcp7A8K.mjs → run-env-Bnmf6bRI.mjs} +2 -2
  70. package/dist/{run-env-DRcp7A8K.mjs.map → run-env-Bnmf6bRI.mjs.map} +1 -1
  71. package/dist/{runtime-paths-CHTg3ywb.mjs → runtime-paths-D3FKAm69.mjs} +1 -1
  72. package/dist/{runtime-paths-CHTg3ywb.mjs.map → runtime-paths-D3FKAm69.mjs.map} +1 -1
  73. package/dist/{search-BOSphCJ1.mjs → search-CNAGTiJP.mjs} +2 -2
  74. package/dist/{search-BOSphCJ1.mjs.map → search-CNAGTiJP.mjs.map} +1 -1
  75. package/dist/{sources-CijVso3n.mjs → sources-CM2g-CLT.mjs} +2 -2
  76. package/dist/{sources-CijVso3n.mjs.map → sources-CM2g-CLT.mjs.map} +1 -1
  77. package/dist/{stop-words-BdQuaE9K.mjs → stop-words-DtxaTWU_.mjs} +1 -1
  78. package/dist/{stop-words-BdQuaE9K.mjs.map → stop-words-DtxaTWU_.mjs.map} +1 -1
  79. package/dist/{utils-C9HsYDpO.mjs → utils-DddRwMsG.mjs} +2 -2
  80. package/dist/{utils-C9HsYDpO.mjs.map → utils-DddRwMsG.mjs.map} +1 -1
  81. package/dist/{zettelkasten-CtGHQWPU.mjs → zettelkasten-BhZMvmoK.mjs} +149 -7
  82. package/dist/zettelkasten-BhZMvmoK.mjs.map +1 -0
  83. package/dist/zettelkasten-BwV1pluL.mjs +5 -0
  84. package/docs/commands/worker.md +2 -0
  85. package/package.json +1 -1
  86. package/src/hooks/ts/lib/worker-guard.test.ts +12 -0
  87. package/src/hooks/ts/lib/worker-guard.ts +9 -0
  88. package/dist/async-C2Bm_Lal.mjs +0 -300
  89. package/dist/async-C2Bm_Lal.mjs.map +0 -1
  90. package/dist/auto-route-o0BOsXn7.mjs.map +0 -1
  91. package/dist/chunker-BH4i-F2b.mjs.map +0 -1
  92. package/dist/clusters-BCtD3fbe.mjs +0 -169
  93. package/dist/clusters-BCtD3fbe.mjs.map +0 -1
  94. package/dist/context-handover-cache-pkHzmL3c.mjs.map +0 -1
  95. package/dist/daemon-BEoVgVfJ.mjs +0 -1741
  96. package/dist/daemon-BEoVgVfJ.mjs.map +0 -1
  97. package/dist/daemon-DPAYU9hp.mjs +0 -19
  98. package/dist/detector-BEPFsINR.mjs +0 -3
  99. package/dist/detector-BRTtAWrM.mjs +0 -65
  100. package/dist/detector-BRTtAWrM.mjs.map +0 -1
  101. package/dist/factory-CNpPQQ-5.mjs +0 -249
  102. package/dist/factory-CNpPQQ-5.mjs.map +0 -1
  103. package/dist/factory-DY7x73mE.mjs +0 -3
  104. package/dist/fallback-B5svk75f.mjs.map +0 -1
  105. package/dist/federation-db-BTyoufBh.mjs +0 -139
  106. package/dist/federation-db-BTyoufBh.mjs.map +0 -1
  107. package/dist/federation-db-HfIFc7FG.mjs +0 -3
  108. package/dist/helpers-BRCJg0G3.mjs +0 -223
  109. package/dist/helpers-BRCJg0G3.mjs.map +0 -1
  110. package/dist/indexer-backend-DFF2FrYx.mjs +0 -5
  111. package/dist/indexer-backend-isSLg6yE.mjs +0 -1
  112. package/dist/kg-entity-DCOcsVFD.mjs +0 -29
  113. package/dist/kg-entity-DCOcsVFD.mjs.map +0 -1
  114. package/dist/latent-ideas-wwAXquGe.mjs +0 -191
  115. package/dist/latent-ideas-wwAXquGe.mjs.map +0 -1
  116. package/dist/link-boost-CnI7UVMJ.mjs +0 -34
  117. package/dist/link-boost-CnI7UVMJ.mjs.map +0 -1
  118. package/dist/main-resolver-BKz_OuEh.mjs +0 -7
  119. package/dist/merge-2gqRPFu2.mjs +0 -3
  120. package/dist/merge-DgU9OgZy.mjs +0 -6
  121. package/dist/merge-DgU9OgZy.mjs.map +0 -1
  122. package/dist/module-paths-DdRzbkUI.mjs +0 -44
  123. package/dist/module-paths-DdRzbkUI.mjs.map +0 -1
  124. package/dist/neighborhood-2FsmzoxG.mjs +0 -114
  125. package/dist/neighborhood-2FsmzoxG.mjs.map +0 -1
  126. package/dist/note-context-De63k8na.mjs +0 -106
  127. package/dist/note-context-De63k8na.mjs.map +0 -1
  128. package/dist/postgres-Ceqsa64C.mjs.map +0 -1
  129. package/dist/program-DSETzrWg.mjs.map +0 -1
  130. package/dist/query-feedback-B_iigYj-.mjs +0 -3
  131. package/dist/registry-db-C7voqML9.mjs +0 -213
  132. package/dist/registry-db-C7voqML9.mjs.map +0 -1
  133. package/dist/registry-db-JHPhA8vF.mjs +0 -3
  134. package/dist/registry-postgres-nOfyBSIW.mjs +0 -795
  135. package/dist/registry-postgres-nOfyBSIW.mjs.map +0 -1
  136. package/dist/registry-sqlite-DrCW1aRK.mjs +0 -593
  137. package/dist/registry-sqlite-DrCW1aRK.mjs.map +0 -1
  138. package/dist/router-CXUGsv85.mjs +0 -3
  139. package/dist/run-Z4akoa8G.mjs.map +0 -1
  140. package/dist/search-Bf3Kub3F.mjs +0 -3
  141. package/dist/server-DgmAHyFK.mjs +0 -403
  142. package/dist/server-DgmAHyFK.mjs.map +0 -1
  143. package/dist/session-keepalive-BDhytXEo.mjs +0 -582
  144. package/dist/session-keepalive-BDhytXEo.mjs.map +0 -1
  145. package/dist/sqlite-CqsTy6xo.mjs +0 -936
  146. package/dist/sqlite-CqsTy6xo.mjs.map +0 -1
  147. package/dist/state-DW8zdweW.mjs +0 -3
  148. package/dist/state-HyjqTihC.mjs +0 -76
  149. package/dist/state-HyjqTihC.mjs.map +0 -1
  150. package/dist/themes-CTaOj3e1.mjs +0 -148
  151. package/dist/themes-CTaOj3e1.mjs.map +0 -1
  152. package/dist/tools-BcOKPBtg.mjs +0 -1489
  153. package/dist/tools-BcOKPBtg.mjs.map +0 -1
  154. package/dist/tools-C-_l0o8Z.mjs +0 -6
  155. package/dist/trace-CtV0RO6n.mjs +0 -137
  156. package/dist/trace-CtV0RO6n.mjs.map +0 -1
  157. package/dist/utils-BrX9FLeK.mjs +0 -3
  158. package/dist/vault-indexer-BG1sEVyM.mjs +0 -537
  159. package/dist/vault-indexer-BG1sEVyM.mjs.map +0 -1
  160. package/dist/wakeup-D8n33hYV.mjs +0 -335
  161. package/dist/wakeup-D8n33hYV.mjs.map +0 -1
  162. package/dist/work-queue-worker-4tLa5gpQ.mjs +0 -567
  163. package/dist/work-queue-worker-4tLa5gpQ.mjs.map +0 -1
  164. package/dist/work-queue-worker-rFZvTO3p.mjs +0 -11
  165. package/dist/zettelkasten-CtGHQWPU.mjs.map +0 -1
@@ -1,29 +1,22 @@
1
- import { _ as warn$1, a as fmtDate, c as ok$1, d as resolvePath, f as scaffoldProjectDirs, g as smartDecodeDir, h as slugify, i as err, m as slugFromPath, n as dim$1, o as header, p as shortenPath, r as encodeDir, s as now, t as bold$1, u as renderTable } from "./utils-C9HsYDpO.mjs";
2
- import { a as slugify$1, i as parseSessionFilename } from "./migrate-BD7D8EEh.mjs";
3
- import { n as ensurePaiMarker } from "./pai-marker-D1MMswkz.mjs";
4
- import { t as STOP_WORDS } from "./stop-words-BdQuaE9K.mjs";
5
- import { t as applyRecencyBoost } from "./search-BOSphCJ1.mjs";
6
- import { n as resolveFromModule, t as packageRoot } from "./module-paths-DdRzbkUI.mjs";
7
- import { a as getStorageBackend, i as getRegistryBackend, r as createStorageBackend, s as humanDuration } from "./factory-CNpPQQ-5.mjs";
8
- import { a as formatDetectionJson, i as formatDetection, n as migrateIdentityFile, r as detectProject } from "./wakeup-D8n33hYV.mjs";
9
- import { B as claudeProjectsDir, C as findLatestNote, H as scanTranscriptFolders, I as resolveHome, L as saveScanConfig, M as cmdScan, N as loadScanConfig, P as migrateScanConfig, R as upsertProject, S as applyContinue, T as readBodyFile, U as transcriptFiles, V as findMovedProjects, d as migrateWorkQueue, g as migrateSummaryCooldowns, t as readContextHandoverCache, v as extractAndStoreTriples, w as findNotesDir$1, x as appendCheckpointToNote, z as upsertSession } from "./context-handover-cache-pkHzmL3c.mjs";
1
+ import { a as fmtDate, c as ok$1, d as scaffoldProjectDirs, f as shortenPath, g as warn$1, h as smartDecodeDir, i as err, l as renderTable, m as slugify, n as dim$1, o as header, p as slugFromPath, r as encodeDir, s as now, t as bold$1, u as resolvePath } from "./utils-DddRwMsG.mjs";
2
+ import { a as slugify$1, i as parseSessionFilename } from "./migrate-Bq0esMOa.mjs";
3
+ import { n as ensurePaiMarker } from "./pai-marker-DXVpFsYz.mjs";
4
+ import { t as STOP_WORDS } from "./stop-words-DtxaTWU_.mjs";
5
+ import { t as applyRecencyBoost } from "./search-CNAGTiJP.mjs";
6
+ import { o as packageRoot, r as indexProjectWithBackend, s as resolveFromModule } from "./postgres-D3xc2RB4.mjs";
7
+ import { a as getStorageBackend, c as MergeError, f as humanDuration, i as getRegistryBackend, l as federationDbPath, o as oldRegistryPath, r as createStorageBackend, s as registryDbPath, u as oldFederationPath } from "./factory-Ypf8r0fK.mjs";
8
+ import { b as OWNER_LABEL_PREFIX, c as migrateConfigFile, d as readMainConfigRaw, f as writeMainConfigRaw, h as resolvedMainConfigPath, l as paiConfigFilePath, m as migrateMainConfigToYaml, n as CONFIG_FILE$2, o as expandHome, p as MainConfigError, s as loadConfig, t as CONFIG_DIR, u as paiConfigYamlFilePath, v as readJsonStrict, x as UNROUTED, y as writeJsonAtomic } from "./config-C-LiGlop.mjs";
9
+ import { a as schedulerLogPath, i as paiSocketPath, n as daemonLogPath, r as daemonPidPath } from "./runtime-paths-D3FKAm69.mjs";
10
10
  import { a as paiHomePath, i as paiHomeDir, n as migratePaiDir, o as resolvePaiFile, r as migratePaiFile, t as PaiFileMigrationError } from "./pai-home-Cm9rcJgX.mjs";
11
- import { b as OWNER_LABEL_PREFIX, c as migrateConfigFile, d as readMainConfigRaw, f as writeMainConfigRaw, h as resolvedMainConfigPath, l as paiConfigFilePath, m as migrateMainConfigToYaml, n as CONFIG_FILE$2, o as expandHome, p as MainConfigError, s as loadConfig, t as CONFIG_DIR, u as paiConfigYamlFilePath, v as readJsonStrict, x as UNROUTED, y as writeJsonAtomic } from "./config-BbLFD7Uf.mjs";
12
- import { a as schedulerLogPath, i as paiSocketPath, n as daemonLogPath, r as daemonPidPath } from "./runtime-paths-CHTg3ywb.mjs";
13
- import { B as DEFAULT_CONTEXT_WINDOW, C as maskKey, D as readWorkersSection, F as needsWorkersYamlRelocation, H as stripModelVariant, I as parseWorkersYamlDocument, L as relocateWorkersYaml, M as initWorkersYaml, N as inlineWorkersYamlKeys, P as migrateWorkersToYaml, R as workersYamlLegacyNotice, V as contextWindowFromModelId, b as getProviderOrNative, d as MODEL_CAPABILITIES, h as WorkersConfigError, p as PROVIDER_TAGS, r as ANTHROPIC_NATIVE, t as buildRunEnv, w as nativeAnthropicProvider, x as isModelCapability, y as expandHome$1, z as workersYamlPath } from "./run-env-DRcp7A8K.mjs";
14
- import { $ as projectLaunchConfig, B as isLive, D as mergeWorker, E as git, G as ownsPid, H as loadStatuses, J as waitForTerminalStatus, K as saveStatus, N as UNLABELED, O as uncommittedPaths, Q as pinNotices, T as gcWorktrees, V as loadStatus, X as parseRunnerArgs, Y as longInlinePromptHint, c as handoffFromInside, et as describeMcp, f as checkPaneForWorker, g as markControlsHeld, h as clickrControlsArgv, i as usageContextTokens, j as appendLedger, k as verifyWorker, m as openPaneForWorker, n as runWorker, o as parseWorkerReport, p as openFollowPane, q as setWorkerLabel, r as testProvider, tt as expandMcpNames, u as sayToWorker, w as discardWorker, z as isChatPane } from "./run-Z4akoa8G.mjs";
15
- import { t as MergeError } from "./merge-DgU9OgZy.mjs";
16
- import { n as oldFederationPath, t as federationDbPath } from "./federation-db-BTyoufBh.mjs";
17
- import { r as registryDbPath, t as oldRegistryPath } from "./registry-db-C7voqML9.mjs";
18
- import { i as indexProjectWithBackend } from "./async-C2Bm_Lal.mjs";
19
- import { t as PaiClient } from "./ipc-client-D16Xw6Uo.mjs";
20
- 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, a as followWorkers, b as setClass, c as statusLineOutput, d as addProvider, f as classTargetText, g as modelPrefsText, h as describeProviders, i as fallbackStatusText, j as listConfigOp, k as formatConfigGetOutput, 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-B5svk75f.mjs";
21
- import { _ as resolveSessionByNameOrId, a as buildDeduped, c as hasConversation, d as providerResumePlan, f as restoreTopLevel, g as migrateSessionScanCache, h as fmtAge$1, l as launchInDir, m as printExitDir, o as normalizeName$2, p as resumeArgvText, s as renderDedupedSessions, t as cmdMain, u as launchPrompt, v as scanCacheFilePath, y as scanSessions } from "./main-resolver-DPPwHNtn.mjs";
22
- import { n as queriesDirPath, t as migrateQueriesDir } from "./query-feedback-BIaZTTFO.mjs";
23
- import { _ as statusPath, h as ledgerPath, m as eventsPath, n as ensureProxyRunning, p as ensureNoMcpConfig, r as stopProxy, t as DEFAULT_PROXY_PORT, v as workersLogDir } from "./server-DgmAHyFK.mjs";
24
- import { i as sendToSession, n as fetchLiveSessions, r as revealItermSession, t as callAiBroker } from "./aibroker-client-C5Fw7DNz.mjs";
25
- import { a as totalUsageTokens, i as parseSessionUsage, r as sessionKeepaliveLedgerSummary, t as loadSessionKeepaliveState } from "./session-keepalive-BDhytXEo.mjs";
26
- import { t as runChain } from "./chain-D4PuQ2c-.mjs";
11
+ import { At as formatDetectionJson, Ct as upsertSession, Dt as transcriptFiles, Et as scanTranscriptFolders, Ot as detectProject, St as upsertProject, Tt as findMovedProjects, _t as loadScanConfig, a as sessionKeepaliveLedgerSummary, at as findLatestNote, bt as resolveHome, et as extractAndStoreTriples, g as migrateWorkQueue, gt as cmdScan, ht as migrateIdentityFile, it as applyContinue, kt as formatDetection, o as parseSessionUsage, ot as findNotesDir$1, r as loadSessionKeepaliveState, rt as appendCheckpointToNote, s as totalUsageTokens, st as readBodyFile, t as readContextHandoverCache, vt as migrateScanConfig, wt as claudeProjectsDir, x as migrateSummaryCooldowns, xt as saveScanConfig } from "./context-handover-cache-9PGvXRIw.mjs";
12
+ import { B as DEFAULT_CONTEXT_WINDOW, C as maskKey, D as readWorkersSection, F as needsWorkersYamlRelocation, H as stripModelVariant, I as parseWorkersYamlDocument, L as relocateWorkersYaml, M as initWorkersYaml, N as inlineWorkersYamlKeys, P as migrateWorkersToYaml, R as workersYamlLegacyNotice, V as contextWindowFromModelId, b as getProviderOrNative, d as MODEL_CAPABILITIES, h as WorkersConfigError, p as PROVIDER_TAGS, r as ANTHROPIC_NATIVE, t as buildRunEnv, w as nativeAnthropicProvider, x as isModelCapability, y as expandHome$1, z as workersYamlPath } from "./run-env-Bnmf6bRI.mjs";
13
+ import { $ as longInlinePromptHint, A as git, F as appendLedger, G as loadStatus, K as loadStatuses, L as UNLABELED, M as uncommittedPaths, N as verifyWorker, O as discardWorker, Q as waitForTerminalStatus, U as isChatPane, W as isLive, X as saveStatus, Y as ownsPid, Z as setWorkerLabel, _ as markControlsHeld, _t as expandMcpNames, b as requestKill, c as handoffFromInside, dt as ledgerPath, et as parseRunnerArgs, f as checkPaneForWorker, ft as statusPath, g as clickrControlsArgv, gt as describeMcp, h as openPaneForWorker, ht as projectLaunchConfig, i as usageContextTokens, it as stopProxy, j as mergeWorker, k as gcWorktrees, lt as ensureNoMcpConfig, m as openFollowPane, mt as pinNotices, n as runWorker, nt as DEFAULT_PROXY_PORT, o as parseWorkerReport, p as closeEndedPanes, pt as workersLogDir, r as testProvider, rt as ensureProxyRunning, u as sayToWorker, ut as eventsPath, v as callerDescription } from "./run-CLYTOm0x.mjs";
14
+ import { t as PaiClient } from "./ipc-client-BLYX51nG.mjs";
15
+ 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, a as followWorkers, b as setClass, c as statusLineOutput, d as addProvider, f as classTargetText, g as modelPrefsText, h as describeProviders, i as fallbackStatusText, j as listConfigOp, k as formatConfigGetOutput, 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";
16
+ import { _ as resolveSessionByNameOrId, a as buildDeduped, c as hasConversation, d as providerResumePlan, f as restoreTopLevel, g as migrateSessionScanCache, h as fmtAge$1, l as launchInDir, m as printExitDir, o as normalizeName$2, p as resumeArgvText, s as renderDedupedSessions, t as cmdMain, u as launchPrompt, v as scanCacheFilePath, y as scanSessions } from "./main-resolver-kVkMJZUD.mjs";
17
+ import { n as queriesDirPath, t as migrateQueriesDir } from "./query-feedback-B7FYE4JR.mjs";
18
+ import { i as sendToSession, n as fetchLiveSessions, r as revealItermSession, t as callAiBroker } from "./aibroker-client-Dfv7j1Od.mjs";
19
+ import { t as runChain } from "./chain-D5876UQX.mjs";
27
20
  import { appendFileSync, chmodSync, closeSync, copyFileSync, cpSync, createReadStream, existsSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, readlinkSync, realpathSync, renameSync, statSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
28
21
  import { homedir, platform, tmpdir, userInfo } from "node:os";
29
22
  import { basename, dirname, join, relative, resolve, sep } from "node:path";
@@ -31,6 +24,7 @@ import chalk from "chalk";
31
24
  import { createHash, randomUUID } from "node:crypto";
32
25
  import { Command, InvalidArgumentError } from "commander";
33
26
  import { fileURLToPath } from "node:url";
27
+ import pg from "pg";
34
28
  import { execFile, execFileSync, execSync, spawn, spawnSync } from "node:child_process";
35
29
  import { parseDocument } from "yaml";
36
30
  import BetterSqlite3 from "better-sqlite3";
@@ -38,7 +32,6 @@ import { createInterface } from "node:readline";
38
32
  import { createConnection } from "net";
39
33
  import { getEncoding } from "js-tiktoken";
40
34
  import { promisify } from "node:util";
41
- import pg from "pg";
42
35
 
43
36
  //#region src/registry/registrable.ts
44
37
  /**
@@ -162,7 +155,7 @@ async function cmdPromote(opts) {
162
155
  console.error(dim$1(` Pick a durable location for the new project.`));
163
156
  process.exit(1);
164
157
  }
165
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
158
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
166
159
  const registryBackend = await getRegistryBackend();
167
160
  const encodedDir = encodeDir(targetPath);
168
161
  if (await registryBackend.getProjectBySlug(slug) ?? await registryBackend.getProjectByRootPath(targetPath) ?? await registryBackend.getProjectByEncodedDir(encodedDir)) {
@@ -2046,7 +2039,7 @@ async function cmdUnregister(slug, opts = {}) {
2046
2039
  //#region src/cli/commands/project/projects-index.ts
2047
2040
  function registerProjectsCommands(projectsCmd) {
2048
2041
  projectsCmd.command("list", { isDefault: true }).description("Show the unified deduped listing (same as `pai`).\nUse --all to include cold / zero-session / archived projects.").option("--all", "Show all entries including cold / zero-session / archived projects").option("-n, --n <count>", "Max rows to show", "20").action(async (opts) => {
2049
- const { cmdMain } = await import("./main-resolver-BKz_OuEh.mjs");
2042
+ const { cmdMain } = await import("./main-resolver-BYgP86C1.mjs");
2050
2043
  await cmdMain(void 0, void 0, opts);
2051
2044
  });
2052
2045
  projectsCmd.command("list-raw").description("Raw registry listing with slug, path, status, last_active columns").option("--all", "Include archived projects (default: active only)").option("--status <status>", "Filter by status: active | archived").option("--tag <tag>", "Filter by tag").option("--type <type>", "Filter by type").action(async (opts) => {
@@ -2912,7 +2905,7 @@ const DEFAULT_PAGE_SIZE = 500;
2912
2905
  async function runEmbed(backend, projectId, projectSlug, batchSize = 50, pageSize = DEFAULT_PAGE_SIZE) {
2913
2906
  const label = projectSlug ? `project ${projectSlug}` : "all projects";
2914
2907
  console.log(dim$1(`Generating embeddings for ${label} (this may take a while on first run)...`));
2915
- const { generateEmbeddings, serializeEmbedding } = await import("./embeddings-CcscYWwk.mjs");
2908
+ const { generateEmbeddings, serializeEmbedding } = await import("./embeddings-CEBGrzwu.mjs");
2916
2909
  const { chunks: totalEstimate } = projectId !== void 0 ? await backend.getProjectStats(projectId) : await backend.getStats();
2917
2910
  let done = 0;
2918
2911
  let after = null;
@@ -3076,7 +3069,7 @@ function registerSearchCommand(memoryCmd) {
3076
3069
  let results;
3077
3070
  if (mode === "keyword") results = await backend.searchKeyword(query, searchOpts);
3078
3071
  else {
3079
- const { generateEmbedding } = await import("./embeddings-CcscYWwk.mjs");
3072
+ const { generateEmbedding } = await import("./embeddings-CEBGrzwu.mjs");
3080
3073
  console.log(dim$1("Generating query embedding..."));
3081
3074
  const queryEmbedding = await generateEmbedding(query, true);
3082
3075
  if (mode === "semantic") results = await backend.searchSemantic(queryEmbedding, searchOpts);
@@ -3122,7 +3115,7 @@ function registerSearchCommand(memoryCmd) {
3122
3115
  return;
3123
3116
  }
3124
3117
  if (opts.rerank !== false) {
3125
- const { rerankResults } = await import("./reranker-CFiEzHQu.mjs");
3118
+ const { rerankResults } = await import("./reranker-CZ2mP4cf.mjs");
3126
3119
  console.log(dim$1("Reranking with cross-encoder..."));
3127
3120
  results = await rerankResults(query, results, { topK: maxResults });
3128
3121
  }
@@ -3261,9 +3254,9 @@ function registerStatsCommands(memoryCmd) {
3261
3254
  //#region src/cli/commands/memory/sources-cmd.ts
3262
3255
  function registerSourcesCommand(memoryCmd) {
3263
3256
  memoryCmd.command("sources").description("Show what the indexer has taken in: composition by source, which roots\ncontent enters from, the heaviest single files, and how many chunks are\nrewritten per day (which distinguishes a finite backlog from a treadmill).").option("--limit <n>", "Rows per section (default 8)", "8").action(async (opts) => {
3264
- const { createStorageBackend } = await import("./factory-DY7x73mE.mjs");
3265
- const { loadConfig } = await import("./config-YinjgXEJ.mjs");
3266
- const { cmdMemorySources } = await import("./sources-CijVso3n.mjs");
3257
+ const { createStorageBackend } = await import("./factory-DrBg24UT.mjs");
3258
+ const { loadConfig } = await import("./config-DKIA7wgF.mjs");
3259
+ const { cmdMemorySources } = await import("./sources-CM2g-CLT.mjs");
3267
3260
  let backend;
3268
3261
  try {
3269
3262
  backend = await createStorageBackend(loadConfig());
@@ -3963,8 +3956,8 @@ async function escalate(task, headline, detail, state, now, opts) {
3963
3956
  state.alarmedAt[task.id] = now;
3964
3957
  let delivered = false;
3965
3958
  try {
3966
- const { routeNotification } = await import("./router-CXUGsv85.mjs");
3967
- const { loadConfig } = await import("./config-YinjgXEJ.mjs");
3959
+ const { routeNotification } = await import("./router-BK-hFeQ6.mjs");
3960
+ const { loadConfig } = await import("./config-DKIA7wgF.mjs");
3968
3961
  delivered = (await routeNotification({
3969
3962
  event: "error",
3970
3963
  title: `PAI: ${headline}`,
@@ -3999,7 +3992,7 @@ async function escalate(task, headline, detail, state, now, opts) {
3999
3992
  async function alertParked(task, reason) {
4000
3993
  const text = `PAI parked "${task.title}" (${task.id}) — the scheduler will not retry it.\nReason: ${reason}\nTo release it: fix the cause, then move the due date — due_string, natural language only (e.g. "tomorrow 9am").`;
4001
3994
  try {
4002
- const { callAiBroker } = await import("./aibroker-client-B8c42Lh8.mjs");
3995
+ const { callAiBroker } = await import("./aibroker-client-CHEEvJZW.mjs");
4003
3996
  await callAiBroker("pailot_send", { text }, 8e3);
4004
3997
  } catch (e) {
4005
3998
  console.error(`[pai-poller] parked-task alert not delivered to PAILot (${e instanceof Error ? e.message : String(e)}): ${text}`);
@@ -6621,6 +6614,10 @@ function formatStorageHealth(s, now = Date.now()) {
6621
6614
  text: `${outage.attempts} attempts — ${outage.lastError}`
6622
6615
  });
6623
6616
  }
6617
+ for (const [name, f] of Object.entries(s.passFailures ?? {})) lines.push({
6618
+ severity: "error",
6619
+ text: `last ${name}: FAILED ${f.at} ${f.error}` + (f.gaveUp ? " (retries exhausted)" : ` (attempt ${f.attempts}, retrying)`)
6620
+ });
6624
6621
  const queue = queueLine(s.workQueue, outage !== null);
6625
6622
  if (queue) lines.push(queue);
6626
6623
  if (outage) lines.push({
@@ -7097,8 +7094,8 @@ function cmdLogs(opts) {
7097
7094
  }
7098
7095
  function registerDaemonCommands(daemonCmd) {
7099
7096
  daemonCmd.command("serve").description("Start the PAI daemon in the foreground").action(async () => {
7100
- const { serve } = await import("./daemon-DPAYU9hp.mjs");
7101
- const { loadConfig: lc, ensureConfigDir } = await import("./config-YinjgXEJ.mjs");
7097
+ const { serve } = await import("./daemon-DL0eglMJ.mjs");
7098
+ const { loadConfig: lc, ensureConfigDir } = await import("./config-DKIA7wgF.mjs");
7102
7099
  ensureConfigDir();
7103
7100
  await serve(lc());
7104
7101
  });
@@ -9724,7 +9721,7 @@ async function cmdExplore(note, opts) {
9724
9721
  const depth = parseInt(opts.depth ?? "3", 10);
9725
9722
  const direction = opts.direction ?? "both";
9726
9723
  const mode = opts.mode ?? "all";
9727
- const { zettelExplore } = await import("./zettelkasten-CtGHQWPU.mjs");
9724
+ const { zettelExplore } = await import("./zettelkasten-BwV1pluL.mjs");
9728
9725
  const result = await zettelExplore(await getFedBackend(), {
9729
9726
  startNote: note,
9730
9727
  depth,
@@ -9789,7 +9786,7 @@ async function cmdHealth(opts) {
9789
9786
  const projectPath = opts.project;
9790
9787
  const recentDays = parseInt(opts.days ?? "30", 10);
9791
9788
  const includeTypes = opts.include ? opts.include.split(",").map((s) => s.trim()) : void 0;
9792
- const { zettelHealth } = await import("./zettelkasten-CtGHQWPU.mjs");
9789
+ const { zettelHealth } = await import("./zettelkasten-BwV1pluL.mjs");
9793
9790
  const result = await zettelHealth(await getFedBackend(), {
9794
9791
  scope,
9795
9792
  projectPath,
@@ -9860,7 +9857,7 @@ async function cmdSurprise(note, opts) {
9860
9857
  const limit = parseInt(opts.limit ?? "10", 10);
9861
9858
  const minSimilarity = parseFloat(opts.minSimilarity ?? "0.3");
9862
9859
  const minGraphDistance = parseInt(opts.minDistance ?? "3", 10);
9863
- const { zettelSurprise } = await import("./zettelkasten-CtGHQWPU.mjs");
9860
+ const { zettelSurprise } = await import("./zettelkasten-BwV1pluL.mjs");
9864
9861
  const backend = await getFedBackend();
9865
9862
  console.log();
9866
9863
  console.log(header(" PAI Zettel Surprise"));
@@ -9915,7 +9912,7 @@ async function cmdSuggest(note, opts) {
9915
9912
  const vaultProjectId = parseInt(opts.vaultProjectId, 10);
9916
9913
  const limit = parseInt(opts.limit ?? "5", 10);
9917
9914
  const excludeLinked = opts.excludeLinked !== false;
9918
- const { zettelSuggest } = await import("./zettelkasten-CtGHQWPU.mjs");
9915
+ const { zettelSuggest } = await import("./zettelkasten-BwV1pluL.mjs");
9919
9916
  const backend = await getFedBackend();
9920
9917
  console.log();
9921
9918
  console.log(header(" PAI Zettel Suggest"));
@@ -9968,7 +9965,7 @@ async function cmdConverse(question, opts) {
9968
9965
  const vaultProjectId = parseInt(opts.vaultProjectId, 10);
9969
9966
  const depth = parseInt(opts.depth ?? "2", 10);
9970
9967
  const limit = parseInt(opts.limit ?? "15", 10);
9971
- const { zettelConverse } = await import("./zettelkasten-CtGHQWPU.mjs");
9968
+ const { zettelConverse } = await import("./zettelkasten-BwV1pluL.mjs");
9972
9969
  const backend = await getFedBackend();
9973
9970
  console.log();
9974
9971
  console.log(header(" PAI Zettel Converse"));
@@ -10031,7 +10028,7 @@ async function cmdThemes(opts) {
10031
10028
  const minClusterSize = parseInt(opts.minSize ?? "3", 10);
10032
10029
  const maxThemes = parseInt(opts.maxThemes ?? "10", 10);
10033
10030
  const similarityThreshold = parseFloat(opts.threshold ?? "0.65");
10034
- const { zettelThemes } = await import("./zettelkasten-CtGHQWPU.mjs");
10031
+ const { zettelThemes } = await import("./zettelkasten-BwV1pluL.mjs");
10035
10032
  const backend = await getFedBackend();
10036
10033
  console.log();
10037
10034
  console.log(header(" PAI Zettel Themes"));
@@ -16106,7 +16103,7 @@ async function migrateToPostgres(opts = {}) {
16106
16103
  const dump = pgDump(container, pgConfig, dumpPath);
16107
16104
  if (!dump.ok) return refused(dump.reason, dryRun);
16108
16105
  }
16109
- const { PostgresBackend } = await import("./postgres-Ceqsa64C.mjs");
16106
+ const { PostgresBackend } = await import("./postgres-BmLr0MUm.mjs");
16110
16107
  await PostgresBackend.ensureDatabase(pgConfig);
16111
16108
  const sqlite = new BetterSqlite3(sqliteFederationPath, { readonly: true });
16112
16109
  const registrySqlite = sqliteRegistryPath === sqliteFederationPath ? sqlite : new BetterSqlite3(sqliteRegistryPath, { readonly: true });
@@ -16677,7 +16674,7 @@ async function getSessionTags(registryBackend, sessionId) {
16677
16674
  * Session CRUD commands: list, info, rename, slug, tag, route, active, auto-route.
16678
16675
  */
16679
16676
  async function cmdList(projectSlug, opts) {
16680
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
16677
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
16681
16678
  const registryBackend = await getRegistryBackend();
16682
16679
  const limit = parseInt(opts.limit ?? "20", 10);
16683
16680
  let project;
@@ -16742,7 +16739,7 @@ async function cmdList(projectSlug, opts) {
16742
16739
  console.log(dim$1(` ${rows.length} session(s) shown (limit: ${limit})`));
16743
16740
  }
16744
16741
  async function cmdInfo(projectSlug, sessionNumber) {
16745
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
16742
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
16746
16743
  const registryBackend = await getRegistryBackend();
16747
16744
  const project = await getProject$1(registryBackend, projectSlug);
16748
16745
  if (!project) {
@@ -16766,7 +16763,7 @@ async function cmdInfo(projectSlug, sessionNumber) {
16766
16763
  console.log();
16767
16764
  }
16768
16765
  async function cmdRename(projectSlug, numberOrLatest, newSlug) {
16769
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
16766
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
16770
16767
  await cmdRenameWith(await getRegistryBackend(), projectSlug, numberOrLatest, newSlug);
16771
16768
  }
16772
16769
  async function cmdRenameWith(registryBackend, projectSlug, numberOrLatest, newSlug) {
@@ -16829,7 +16826,7 @@ async function cmdRenameWith(registryBackend, projectSlug, numberOrLatest, newSl
16829
16826
  console.log();
16830
16827
  }
16831
16828
  async function cmdSlug(projectSlug, numberOrLatest, opts) {
16832
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
16829
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
16833
16830
  const registryBackend = await getRegistryBackend();
16834
16831
  const project = await getProject$1(registryBackend, projectSlug);
16835
16832
  if (!project) {
@@ -16859,7 +16856,7 @@ async function cmdSlug(projectSlug, numberOrLatest, opts) {
16859
16856
  }
16860
16857
  }
16861
16858
  async function cmdTag(projectSlug, sessionNumber, rawTags) {
16862
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
16859
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
16863
16860
  const registryBackend = await getRegistryBackend();
16864
16861
  const project = await getProject$1(registryBackend, projectSlug);
16865
16862
  if (!project) {
@@ -16899,7 +16896,7 @@ async function cmdTag(projectSlug, sessionNumber, rawTags) {
16899
16896
  console.log();
16900
16897
  }
16901
16898
  async function cmdRoute(projectSlug, sessionNumber, targetProjectSlug, opts) {
16902
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
16899
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
16903
16900
  const registryBackend = await getRegistryBackend();
16904
16901
  const project = await getProject$1(registryBackend, projectSlug);
16905
16902
  if (!project) {
@@ -16941,7 +16938,7 @@ async function cmdRoute(projectSlug, sessionNumber, targetProjectSlug, opts) {
16941
16938
  console.log();
16942
16939
  }
16943
16940
  async function cmdActive(opts) {
16944
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
16941
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
16945
16942
  const registryBackend = await getRegistryBackend();
16946
16943
  const minutes = parseInt(opts.minutes ?? "60", 10);
16947
16944
  const cutoff = Date.now() - minutes * 60 * 1e3;
@@ -17028,9 +17025,9 @@ async function cmdActive(opts) {
17028
17025
  ], rows));
17029
17026
  }
17030
17027
  async function cmdAutoRoute(opts) {
17031
- const { autoRoute, formatAutoRouteJson } = await import("./auto-route-o0BOsXn7.mjs");
17032
- const { getRegistryBackend, createStorageBackend } = await import("./factory-DY7x73mE.mjs");
17033
- const { loadConfig } = await import("./config-YinjgXEJ.mjs");
17028
+ const { autoRoute, formatAutoRouteJson } = await import("./auto-route-D6fW1Q8z.mjs");
17029
+ const { getRegistryBackend, createStorageBackend } = await import("./factory-DrBg24UT.mjs");
17030
+ const { loadConfig } = await import("./config-DKIA7wgF.mjs");
17034
17031
  const config = loadConfig();
17035
17032
  const registryBackend = await getRegistryBackend();
17036
17033
  const federation = await createStorageBackend(config);
@@ -17266,7 +17263,7 @@ async function cmdPause(opts) {
17266
17263
  process.exitCode = 1;
17267
17264
  return;
17268
17265
  }
17269
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
17266
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
17270
17267
  const registryBackend = await getRegistryBackend();
17271
17268
  const cwd = process.cwd();
17272
17269
  const project = await resolveProjectByCwd(registryBackend, cwd);
@@ -17661,7 +17658,7 @@ function buildStopBody(project, sessionId) {
17661
17658
  }
17662
17659
  }
17663
17660
  async function cmdHandover(projectSlug, numberOrLatest, sessionId) {
17664
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
17661
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
17665
17662
  const registryBackend = await getRegistryBackend();
17666
17663
  let project;
17667
17664
  if (projectSlug) {
@@ -17957,7 +17954,7 @@ function touchSentinel(rootPath) {
17957
17954
  async function cmdAutosave(opts) {
17958
17955
  const minGap = parseInt(opts.minGap ?? String(DEFAULT_MIN_GAP), 10);
17959
17956
  const cwd = process.cwd();
17960
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
17957
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
17961
17958
  const registryBackend = await getRegistryBackend();
17962
17959
  const project = await resolveProjectByCwd(registryBackend, cwd);
17963
17960
  if (!project) return;
@@ -19365,10 +19362,20 @@ function registerWorkerCommands(workerCmd) {
19365
19362
  process.exitCode = code ?? 1;
19366
19363
  });
19367
19364
  });
19368
- workerCmd.command("pane [id]").description("Open the follow pane for a worker (tmux split when $TMUX is set, else iTerm2 on macOS, else prints the follow command)").option("--check", "Only report whether the pane is open, plus the profile file's path, font, and the hosting window's bounds").action(async (id, opts) => {
19365
+ workerCmd.command("pane [id]").description("Open the follow pane for a worker (tmux split when $TMUX is set, else iTerm2 on macOS, else prints the follow command)").option("--check", "Only report whether the pane is open, plus the profile file's path, font, and the hosting window's bounds").option("--close-ended", "Close every open follow pane whose worker has ended (registry, then iTerm/tmux discovery)").option("--dry-run", "With --close-ended: only list what would be closed").action(async (id, opts) => {
19369
19366
  try {
19370
19367
  const { workers } = readWorkersSection();
19371
19368
  const logDir = currentLogDir();
19369
+ if (opts.closeEnded) {
19370
+ const r = await closeEndedPanes(logDir, (wid) => {
19371
+ const st = loadStatus(logDir, wid);
19372
+ return st !== null && st.state !== "running";
19373
+ }, opts.dryRun === true);
19374
+ for (const l of r.closed) console.log(`${opts.dryRun ? "would close" : "closed"} ${l}`);
19375
+ for (const l of r.kept) console.log(`kept ${l}`);
19376
+ if (!r.closed.length) console.log("no ended worker panes open");
19377
+ return;
19378
+ }
19372
19379
  const term = process.env.ITERM_SESSION_ID ?? "";
19373
19380
  if (id) {
19374
19381
  const msg = opts.check ? await checkPaneForWorker(id, workers.pane.fontSize, term) : (await openPaneForWorker(logDir, workers, id, term)).message;
@@ -19532,12 +19539,15 @@ function registerWorkerCommands(workerCmd) {
19532
19539
  return;
19533
19540
  }
19534
19541
  try {
19542
+ requestKill(logDir, ledgerPath(logDir), id);
19535
19543
  process.kill(status.pid, "SIGTERM");
19536
19544
  if (!await waitForTerminalStatus(logDir, id)) {
19537
19545
  const latest = loadStatus(logDir, id) ?? status;
19538
19546
  latest.state = "killed";
19539
19547
  latest.rc = latest.rc ?? 143;
19540
19548
  latest.last = latest.last || "killed by signal SIGTERM";
19549
+ latest.endReason = "pai-worker-kill";
19550
+ latest.endBy = callerDescription();
19541
19551
  saveStatus(logDir, latest);
19542
19552
  }
19543
19553
  console.log(`sent SIGTERM to worker ${id} (pid ${status.pid})`);
@@ -20391,8 +20401,8 @@ async function analyzeProject(registryBackend, project) {
20391
20401
  async function countVectorDbPaths(oldPaths) {
20392
20402
  if (oldPaths.length === 0) return 0;
20393
20403
  try {
20394
- const { loadConfig } = await import("./config-YinjgXEJ.mjs");
20395
- const { createStorageBackend } = await import("./factory-DY7x73mE.mjs");
20404
+ const { loadConfig } = await import("./config-DKIA7wgF.mjs");
20405
+ const { createStorageBackend } = await import("./factory-DrBg24UT.mjs");
20396
20406
  const config = loadConfig();
20397
20407
  if (config.storageBackend !== "postgres") return 0;
20398
20408
  const backend = await createStorageBackend(config);
@@ -20409,8 +20419,8 @@ async function countVectorDbPaths(oldPaths) {
20409
20419
  async function updateVectorDbPaths(moves) {
20410
20420
  if (moves.length === 0) return 0;
20411
20421
  try {
20412
- const { loadConfig } = await import("./config-YinjgXEJ.mjs");
20413
- const { createStorageBackend } = await import("./factory-DY7x73mE.mjs");
20422
+ const { loadConfig } = await import("./config-DKIA7wgF.mjs");
20423
+ const { createStorageBackend } = await import("./factory-DrBg24UT.mjs");
20414
20424
  const config = loadConfig();
20415
20425
  if (config.storageBackend !== "postgres") return 0;
20416
20426
  const backend = await createStorageBackend(config);
@@ -20497,7 +20507,7 @@ async function displayDryRun(plans) {
20497
20507
  console.log();
20498
20508
  }
20499
20509
  async function executeCleanup(plans, skipReindex) {
20500
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
20510
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
20501
20511
  const registryBackend = await getRegistryBackend();
20502
20512
  let deleted = 0;
20503
20513
  let renamed = 0;
@@ -20694,7 +20704,7 @@ async function executeCleanup(plans, skipReindex) {
20694
20704
  //#region src/cli/commands/session-cleanup/index.ts
20695
20705
  function registerSessionCleanupCommand(sessionCmd) {
20696
20706
  sessionCmd.command("cleanup [project-slug]").description("Clean up session notes: delete empties, auto-name unnamed, move into YYYY/MM/ hierarchy, renumber").option("--execute", "Actually perform the cleanup (default is dry-run)").option("--no-renumber", "Skip renumbering sessions after deletions").option("--no-reindex", "Skip triggering memory re-index after moves").action(async (projectSlug, opts) => {
20697
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
20707
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
20698
20708
  const registryBackend = await getRegistryBackend();
20699
20709
  const dryRun = !opts.execute;
20700
20710
  const skipReindex = opts.reindex === false;
@@ -20764,7 +20774,7 @@ function finalizeNote(notePath) {
20764
20774
  }
20765
20775
  async function cmdEnd(opts) {
20766
20776
  await cmdPause(opts);
20767
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
20777
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
20768
20778
  const registryBackend = await getRegistryBackend();
20769
20779
  const cwd = process.cwd();
20770
20780
  const project = await registryBackend.findProjectByCwdPrefix(cwd);
@@ -21212,7 +21222,7 @@ async function cmdFind(query, opts) {
21212
21222
  */
21213
21223
  async function getProjects(includeArchived) {
21214
21224
  try {
21215
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
21225
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
21216
21226
  const rows = await (await getRegistryBackend()).listProjectsWithSessionStats();
21217
21227
  return includeArchived ? rows : rows.filter((p) => p.status === "active");
21218
21228
  } catch {
@@ -21686,7 +21696,7 @@ async function cmdPick(opts = {}) {
21686
21696
  const onRemove = async (rec) => {
21687
21697
  if (!rec.slug) return false;
21688
21698
  try {
21689
- const { getRegistryBackend } = await import("./factory-DY7x73mE.mjs");
21699
+ const { getRegistryBackend } = await import("./factory-DrBg24UT.mjs");
21690
21700
  const registryBackend = await getRegistryBackend();
21691
21701
  const project = await registryBackend.getProjectBySlug(rec.slug);
21692
21702
  if (!project || project.status !== "active") return false;
@@ -21971,4 +21981,4 @@ claude() {
21971
21981
 
21972
21982
  //#endregion
21973
21983
  export { drainStdio as n, buildProgram as t };
21974
- //# sourceMappingURL=program-DSETzrWg.mjs.map
21984
+ //# sourceMappingURL=program-DIXRtAFy.mjs.map