@xopcai/xopc 0.0.95 → 0.0.97

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 (442) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  3. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  4. package/dist/extensions/telegram/src/plugin.js +1 -1
  5. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  6. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  7. package/dist/extensions/telegram/xopc.extension.json +1 -1
  8. package/dist/extensions/weixin/src/api/api.js +2 -2
  9. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  10. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  11. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  12. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  13. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  14. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  15. package/dist/extensions/weixin/src/plugin.js +1 -1
  16. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  17. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  18. package/dist/gateway/static/root/assets/{agents-CKe2LMnz.js → agents-B_YUvNi6.js} +2 -2
  19. package/dist/gateway/static/root/assets/{apps-page-Mi9mMIZ1.js → apps-page-BmwG5aur.js} +1 -1
  20. package/dist/gateway/static/root/assets/{channels-settings-BrdyC101.js → channels-settings-BiwkeKPb.js} +1 -1
  21. package/dist/gateway/static/root/assets/{channels-status-swr-D55Bu0nn.js → channels-status-swr-ChyN473C.js} +1 -1
  22. package/dist/gateway/static/root/assets/{cron-api-CPpx2l-E.js → cron-api-CvSifIfJ.js} +1 -1
  23. package/dist/gateway/static/root/assets/{cron-page-Bx2jB0YN.js → cron-page-BDqTDFy6.js} +1 -1
  24. package/dist/gateway/static/root/assets/{dist-D_AiG_Kg.js → dist-DxsUrjpy.js} +1 -1
  25. package/dist/gateway/static/root/assets/{extension-debug-page-6ieHsxRE.js → extension-debug-page-DV_Av5Jq.js} +1 -1
  26. package/dist/gateway/static/root/assets/{extension-page-B8nywHRO.js → extension-page-CwZwRhWw.js} +1 -1
  27. package/dist/gateway/static/root/assets/{extension-settings-page-DrskdEIV.js → extension-settings-page-Bb7TR1Se.js} +1 -1
  28. package/dist/gateway/static/root/assets/{fetch-B0aeeY0q.js → fetch-BLLOP2CM.js} +1 -1
  29. package/dist/gateway/static/root/assets/{field-primitives--9ooY8Xl.js → field-primitives-CyqVu1QR.js} +1 -1
  30. package/dist/gateway/static/root/assets/{heartbeat-config-api-DUZ_W1w-.js → heartbeat-config-api-Cd4M1eHt.js} +1 -1
  31. package/dist/gateway/static/root/assets/{index-Dj9FuxCm.js → index-0tS9lV85.js} +74 -74
  32. package/dist/gateway/static/root/assets/index-BJDmBCSl.css +1 -0
  33. package/dist/gateway/static/root/assets/{logs-page-CaXqhpKf.js → logs-page-BsAOSowN.js} +1 -1
  34. package/dist/gateway/static/root/assets/{note-detail-page-B91pLkEI.css → note-detail-page-D4ZIVQbk.css} +1 -1
  35. package/dist/gateway/static/root/assets/{note-detail-page-DYzym2B0.js → note-detail-page-Dlxoy6Ap.js} +54 -53
  36. package/dist/gateway/static/root/assets/{note-time-B-vSi2dR.js → note-time-B-r8yTpQ.js} +1 -1
  37. package/dist/gateway/static/root/assets/{notes-page-BkhWdGiT.js → notes-page-CHFcyqYW.js} +1 -1
  38. package/dist/gateway/static/root/assets/{sessions-page-53YFokoe.js → sessions-page-Ctu0kgt7.js} +1 -1
  39. package/dist/gateway/static/root/assets/{settings-advanced-gate-BaZmaklx.js → settings-advanced-gate-Dh0TyOOg.js} +1 -1
  40. package/dist/gateway/static/root/assets/{settings-form-section-DIJPKpTR.js → settings-form-section-DXMCEW1d.js} +1 -1
  41. package/dist/gateway/static/root/assets/{settings-page-Dvb230FF.js → settings-page-CIkZ7233.js} +1 -1
  42. package/dist/gateway/static/root/assets/{share-preview-page-CRyjTAG6.js → share-preview-page-7RV65xhJ.js} +1 -1
  43. package/dist/gateway/static/root/assets/{skills-page-C5ZJbfAe.js → skills-page-D_Az1SlU.js} +1 -1
  44. package/dist/gateway/static/root/assets/{theme-store-Cg_SuBw0.js → theme-store-e2q2yjs4.js} +1 -1
  45. package/dist/gateway/static/root/assets/url-DpFBIyN9.js +3 -0
  46. package/dist/gateway/static/root/assets/{utils-lMYoWhqo.js → utils-OA_b1q0Q.js} +1 -1
  47. package/dist/gateway/static/root/assets/{voice-api-key-field-Dda2pcUU.js → voice-api-key-field-SJml1hAt.js} +1 -1
  48. package/dist/gateway/static/root/assets/{workflow-page.utils-KIladUrU.js → workflow-page.utils-D90VVCzC.js} +1 -1
  49. package/dist/gateway/static/root/assets/{workflows-page-BTis4Z7Y.js → workflows-page-y7Btji0J.js} +1 -1
  50. package/dist/gateway/static/root/index.html +5 -5
  51. package/dist/package.js +1 -1
  52. package/dist/src/agent/agent-manager.js +12 -8
  53. package/dist/src/agent/agent-manager.js.map +1 -1
  54. package/dist/src/agent/agent-scope.d.ts +0 -1
  55. package/dist/src/agent/agent-scope.js +2 -5
  56. package/dist/src/agent/agent-scope.js.map +1 -1
  57. package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +2 -0
  58. package/dist/src/agent/bootstrap/bootstrap-cache.js +10 -1
  59. package/dist/src/agent/bootstrap/bootstrap-cache.js.map +1 -1
  60. package/dist/src/agent/bootstrap/bootstrap-files.d.ts +2 -1
  61. package/dist/src/agent/bootstrap/bootstrap-files.js +34 -12
  62. package/dist/src/agent/bootstrap/bootstrap-files.js.map +1 -1
  63. package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +1 -2
  64. package/dist/src/agent/bootstrap/load-bootstrap-files.js +6 -12
  65. package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +1 -1
  66. package/dist/src/agent/bootstrap/types.d.ts +5 -5
  67. package/dist/src/agent/context/workspace-seed.js +6 -6
  68. package/dist/src/agent/context/workspace-seed.js.map +1 -1
  69. package/dist/src/agent/context/workspace-state.d.ts +20 -0
  70. package/dist/src/agent/context/workspace-state.js +57 -0
  71. package/dist/src/agent/context/workspace-state.js.map +1 -0
  72. package/dist/src/agent/context/workspace-templates/AGENTS.md +0 -4
  73. package/dist/src/agent/embedded/index.d.ts +2 -2
  74. package/dist/src/agent/embedded/index.js +3 -3
  75. package/dist/src/agent/embedded/run-turn.js +0 -3
  76. package/dist/src/agent/embedded/run-turn.js.map +1 -1
  77. package/dist/src/agent/embedded/session-manager-init.d.ts +0 -17
  78. package/dist/src/agent/embedded/session-manager-init.js +1 -36
  79. package/dist/src/agent/embedded/session-manager-init.js.map +1 -1
  80. package/dist/src/agent/embedded/session-runner.d.ts +3 -12
  81. package/dist/src/agent/embedded/session-runner.js +12 -26
  82. package/dist/src/agent/embedded/session-runner.js.map +1 -1
  83. package/dist/src/agent/embedded/session-tool-result-guard.js +2 -4
  84. package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
  85. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.d.ts +10 -0
  86. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +34 -0
  87. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js.map +1 -0
  88. package/dist/src/agent/goals/goal-run-store.js +4 -4
  89. package/dist/src/agent/goals/persistent-goal-service.js +8 -15
  90. package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
  91. package/dist/src/agent/goals/post-turn.js +2 -2
  92. package/dist/src/agent/image/load-image-media.js +2 -2
  93. package/dist/src/agent/ipc/bus.js +1 -1
  94. package/dist/src/agent/ipc/inbox.js +2 -2
  95. package/dist/src/agent/ipc/socket.js +1 -1
  96. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  97. package/dist/src/agent/mcp/bundle-mcp-runtime.js +2 -2
  98. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  99. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  100. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  101. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  102. package/dist/src/agent/memory/dreaming/events.js +1 -1
  103. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  104. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  105. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  106. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  107. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  108. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  109. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  110. package/dist/src/agent/models/manager.js +1 -1
  111. package/dist/src/agent/prompt/memory/index.d.ts +1 -0
  112. package/dist/src/agent/prompt/memory/index.js +34 -80
  113. package/dist/src/agent/prompt/memory/index.js.map +1 -1
  114. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  115. package/dist/src/agent/prompt/system-prompt.js +0 -1
  116. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  117. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  118. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  119. package/dist/src/agent/sandbox/path-policy.js +2 -2
  120. package/dist/src/agent/service/build-direct-message-content.js +1 -1
  121. package/dist/src/agent/service/process-direct-one-shot.js +8 -17
  122. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  123. package/dist/src/agent/service/process-direct-streaming.js +14 -23
  124. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  125. package/dist/src/agent/service.js +7 -11
  126. package/dist/src/agent/service.js.map +1 -1
  127. package/dist/src/agent/session/session-inspector.js +1 -1
  128. package/dist/src/agent/skills/config.js +1 -1
  129. package/dist/src/agent/skills/hub-hash.js +2 -2
  130. package/dist/src/agent/skills/hub-lock.js +1 -1
  131. package/dist/src/agent/skills/hub-pull.js +3 -3
  132. package/dist/src/agent/skills/index.js +1 -1
  133. package/dist/src/agent/skills/managed-store.js +1 -1
  134. package/dist/src/agent/skills/scanner.js +1 -1
  135. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  136. package/dist/src/agent/skills/skill-manager.js +1 -1
  137. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  138. package/dist/src/agent/tools/factory.js +1 -1
  139. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  140. package/dist/src/agent/tools/index.d.ts +0 -1
  141. package/dist/src/agent/tools/index.js +1 -2
  142. package/dist/src/agent/tools/send-media.js +1 -1
  143. package/dist/src/agent/tools/session-search-tool.d.ts +0 -1
  144. package/dist/src/agent/tools/session-search-tool.js +11 -6
  145. package/dist/src/agent/tools/session-search-tool.js.map +1 -1
  146. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  147. package/dist/src/agent/tools/tool-paths.js +1 -3
  148. package/dist/src/agent/tools/tool-paths.js.map +1 -1
  149. package/dist/src/agent/tools/workflow-tool.js +1 -1
  150. package/dist/src/agent/tools/write.js +1 -1
  151. package/dist/src/agent/workflow/catalog.js +1 -1
  152. package/dist/src/auth/credentials.js +3 -3
  153. package/dist/src/auth/profiles/store.js +1 -1
  154. package/dist/src/auth/sync-provider-auth.js +1 -1
  155. package/dist/src/browser/cache-dir-policy.js +1 -1
  156. package/dist/src/browser/cdp-local-launcher.js +2 -2
  157. package/dist/src/browser/providers/browser-ext-install.js +4 -4
  158. package/dist/src/browser/providers/cloakbrowser.js +4 -4
  159. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  160. package/dist/src/browser/stealth.js +1 -1
  161. package/dist/src/channels/attachments/inbound-persist.js +1 -1
  162. package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
  163. package/dist/src/channels/outbound/persist-store.js +1 -1
  164. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  165. package/dist/src/channels/pairing/pairing-store.js +2 -2
  166. package/dist/src/chat-commands/agent-edit.js +3 -4
  167. package/dist/src/chat-commands/agent-edit.js.map +1 -1
  168. package/dist/src/chat-commands/builtins/config.js +2 -2
  169. package/dist/src/chat-commands/context.js +1 -1
  170. package/dist/src/cli/commands/config.js +1 -1
  171. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  172. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  173. package/dist/src/cli/commands/doctor/checks/session-integrity.js +32 -95
  174. package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +1 -1
  175. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  176. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  177. package/dist/src/cli/commands/extension-dev.js +1 -1
  178. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  179. package/dist/src/cli/commands/extension-pack.js +1 -1
  180. package/dist/src/cli/commands/gateway/logs.js +1 -1
  181. package/dist/src/cli/commands/image.js +1 -1
  182. package/dist/src/cli/commands/init.js +5 -7
  183. package/dist/src/cli/commands/init.js.map +1 -1
  184. package/dist/src/cli/commands/onboard.js +0 -8
  185. package/dist/src/cli/commands/onboard.js.map +1 -1
  186. package/dist/src/cli/templates.d.ts +3 -10
  187. package/dist/src/cli/templates.js +4 -32
  188. package/dist/src/cli/templates.js.map +1 -1
  189. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  190. package/dist/src/commands/agents.config.js +1 -1
  191. package/dist/src/config/agent-profile.js +1 -1
  192. package/dist/src/config/gateway-bind.js +1 -1
  193. package/dist/src/config/index.js +7 -8
  194. package/dist/src/config/index.js.map +1 -1
  195. package/dist/src/config/loader.js +2 -2
  196. package/dist/src/config/models-json.js +2 -2
  197. package/dist/src/config/paths-state.d.ts +3 -0
  198. package/dist/src/config/paths-state.js +7 -3
  199. package/dist/src/config/paths-state.js.map +1 -1
  200. package/dist/src/config/paths.d.ts +5 -36
  201. package/dist/src/config/paths.js +7 -52
  202. package/dist/src/config/paths.js.map +1 -1
  203. package/dist/src/config/profile.js +2 -2
  204. package/dist/src/config/schema.d.ts +15 -0
  205. package/dist/src/config/schema.js +11 -0
  206. package/dist/src/config/schema.js.map +1 -1
  207. package/dist/src/config/workspace-path.js +1 -1
  208. package/dist/src/cron/execution-types.d.ts +42 -0
  209. package/dist/src/cron/executor.js +2 -2
  210. package/dist/src/cron/persistence.js +1 -1
  211. package/dist/src/cron/run-log-store.d.ts +4 -8
  212. package/dist/src/cron/run-log-store.js +26 -78
  213. package/dist/src/cron/run-log-store.js.map +1 -1
  214. package/dist/src/cron/service.d.ts +3 -3
  215. package/dist/src/cron/service.js +2 -2
  216. package/dist/src/cron/service.js.map +1 -1
  217. package/dist/src/cron/types.d.ts +1 -42
  218. package/dist/src/daemon/constants.js +1 -1
  219. package/dist/src/daemon/install-plan.js +2 -2
  220. package/dist/src/daemon/launchd.js +2 -2
  221. package/dist/src/daemon/schtasks.js +2 -2
  222. package/dist/src/daemon/systemd.js +2 -2
  223. package/dist/src/extensions/bundle-mcp.js +1 -1
  224. package/dist/src/extensions/discover-extensions.js +1 -1
  225. package/dist/src/extensions/health.js +1 -1
  226. package/dist/src/extensions/loader.js +1 -1
  227. package/dist/src/extensions/lockfile.js +2 -2
  228. package/dist/src/extensions/update.js +1 -1
  229. package/dist/src/gateway/agents-admin.js +4 -4
  230. package/dist/src/gateway/agents-admin.js.map +1 -1
  231. package/dist/src/gateway/file-path-classifier.d.ts +0 -1
  232. package/dist/src/gateway/file-path-classifier.js +2 -8
  233. package/dist/src/gateway/file-path-classifier.js.map +1 -1
  234. package/dist/src/gateway/heartbeat/service.js +1 -1
  235. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  236. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  237. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  238. package/dist/src/gateway/hono/oauth.js +1 -1
  239. package/dist/src/gateway/hono/routes/agents.js +1 -1
  240. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  241. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  242. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  243. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  244. package/dist/src/gateway/hono/routes/models.js +1 -1
  245. package/dist/src/gateway/hono/routes/shares.js +1 -1
  246. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  247. package/dist/src/gateway/lock.js +3 -3
  248. package/dist/src/gateway/ports.js +1 -1
  249. package/dist/src/gateway/service/agent-runner.js +2 -2
  250. package/dist/src/gateway/service/marketplace-service.js +2 -2
  251. package/dist/src/gateway/service.js +5 -1
  252. package/dist/src/gateway/service.js.map +1 -1
  253. package/dist/src/gateway/session-reset-service.d.ts +1 -1
  254. package/dist/src/gateway/session-reset-service.js +1 -1
  255. package/dist/src/gateway/session-reset-service.js.map +1 -1
  256. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  257. package/dist/src/heartbeat/index.js +1 -1
  258. package/dist/src/infra/brew.js +1 -1
  259. package/dist/src/infra/node-sqlite.d.ts +1 -0
  260. package/dist/src/infra/node-sqlite.js +17 -0
  261. package/dist/src/infra/node-sqlite.js.map +1 -0
  262. package/dist/src/infra/package-json.js +1 -1
  263. package/dist/src/infra/package-update-steps.js +1 -1
  264. package/dist/src/infra/path-env.js +2 -2
  265. package/dist/src/infra/restart.js +2 -2
  266. package/dist/src/infra/sqlite-errors.d.ts +1 -0
  267. package/dist/src/infra/sqlite-errors.js +77 -0
  268. package/dist/src/infra/sqlite-errors.js.map +1 -0
  269. package/dist/src/infra/stable-node-path.js +1 -1
  270. package/dist/src/infra/unhandled-rejections.d.ts +1 -0
  271. package/dist/src/infra/unhandled-rejections.js +25 -0
  272. package/dist/src/infra/unhandled-rejections.js.map +1 -0
  273. package/dist/src/infra/update-check.js +1 -1
  274. package/dist/src/infra/update-global.js +1 -1
  275. package/dist/src/infra/update-lock.js +3 -3
  276. package/dist/src/infra/update-runner.js +1 -1
  277. package/dist/src/infra/update-startup.js +2 -2
  278. package/dist/src/infra/warning-filter.d.ts +7 -0
  279. package/dist/src/infra/warning-filter.js +59 -0
  280. package/dist/src/infra/warning-filter.js.map +1 -0
  281. package/dist/src/infra/write-file-atomic.js +2 -2
  282. package/dist/src/notes/store.d.ts +3 -9
  283. package/dist/src/notes/store.js +22 -196
  284. package/dist/src/notes/store.js.map +1 -1
  285. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  286. package/dist/src/providers/index.js +2 -2
  287. package/dist/src/providers/model-registry.js +1 -1
  288. package/dist/src/session/config-store.d.ts +6 -75
  289. package/dist/src/session/config-store.js +38 -144
  290. package/dist/src/session/config-store.js.map +1 -1
  291. package/dist/src/session/config-types.d.ts +15 -0
  292. package/dist/src/session/config-types.js +1 -0
  293. package/dist/src/session/index.d.ts +1 -3
  294. package/dist/src/session/index.js +3 -5
  295. package/dist/src/session/init-session-turn.d.ts +0 -6
  296. package/dist/src/session/init-session-turn.js +18 -18
  297. package/dist/src/session/init-session-turn.js.map +1 -1
  298. package/dist/src/session/lifecycle-timestamps.d.ts +5 -2
  299. package/dist/src/session/lifecycle-timestamps.js.map +1 -1
  300. package/dist/src/session/{parity/load-jsonl-entries.js → load-jsonl-entries.js} +1 -1
  301. package/dist/src/session/load-jsonl-entries.js.map +1 -0
  302. package/dist/src/session/manager.d.ts +5 -3
  303. package/dist/src/session/manager.js +1 -5
  304. package/dist/src/session/manager.js.map +1 -1
  305. package/dist/src/session/resolve-session.d.ts +3 -6
  306. package/dist/src/session/resolve-session.js +26 -31
  307. package/dist/src/session/resolve-session.js.map +1 -1
  308. package/dist/src/session/session-context-for-llm.js +5 -1
  309. package/dist/src/session/session-context-for-llm.js.map +1 -1
  310. package/dist/src/session/session-id.js +12 -0
  311. package/dist/src/session/session-id.js.map +1 -0
  312. package/dist/src/session/session-title.js +2 -2
  313. package/dist/src/session/session-workspace.d.ts +1 -1
  314. package/dist/src/session/session-workspace.js.map +1 -1
  315. package/dist/src/session/store.d.ts +14 -63
  316. package/dist/src/session/store.js +172 -847
  317. package/dist/src/session/store.js.map +1 -1
  318. package/dist/src/session/stored-rows-to-file-entries.d.ts +11 -0
  319. package/dist/src/session/stored-rows-to-file-entries.js +95 -0
  320. package/dist/src/session/stored-rows-to-file-entries.js.map +1 -0
  321. package/dist/src/session/transcript-events.d.ts +1 -2
  322. package/dist/src/session/transcript-events.js +5 -12
  323. package/dist/src/session/transcript-events.js.map +1 -1
  324. package/dist/src/session/transcript-format.d.ts +1 -1
  325. package/dist/src/session/transcript-format.js.map +1 -1
  326. package/dist/src/session/transcript-stats.d.ts +1 -0
  327. package/dist/src/session/transcript-stats.js +10 -0
  328. package/dist/src/session/transcript-stats.js.map +1 -0
  329. package/dist/src/share/share-auto.js +2 -2
  330. package/dist/src/share/share-store.js +3 -3
  331. package/dist/src/share/share-thumbnail.js +2 -2
  332. package/dist/src/share/share-zip.js +1 -1
  333. package/dist/src/share/site-share-store.js +3 -3
  334. package/dist/src/share/site-static-serve.js +1 -1
  335. package/dist/src/storage/sqlite/config-repository.d.ts +6 -0
  336. package/dist/src/storage/sqlite/config-repository.js +56 -0
  337. package/dist/src/storage/sqlite/config-repository.js.map +1 -0
  338. package/dist/src/storage/sqlite/connection.d.ts +38 -0
  339. package/dist/src/storage/sqlite/connection.js +258 -0
  340. package/dist/src/storage/sqlite/connection.js.map +1 -0
  341. package/dist/src/storage/sqlite/cron-run-repository.d.ts +5 -0
  342. package/dist/src/storage/sqlite/cron-run-repository.js +97 -0
  343. package/dist/src/storage/sqlite/cron-run-repository.js.map +1 -0
  344. package/dist/src/storage/sqlite/fts.d.ts +2 -0
  345. package/dist/src/storage/sqlite/fts.js +11 -0
  346. package/dist/src/storage/sqlite/fts.js.map +1 -0
  347. package/dist/src/storage/sqlite/index.d.ts +12 -0
  348. package/dist/src/storage/sqlite/index.js +13 -0
  349. package/dist/src/storage/sqlite/memory-index-repository.d.ts +18 -0
  350. package/dist/src/storage/sqlite/memory-index-repository.js +132 -0
  351. package/dist/src/storage/sqlite/memory-index-repository.js.map +1 -0
  352. package/dist/src/storage/sqlite/notes-repository.d.ts +11 -0
  353. package/dist/src/storage/sqlite/notes-repository.js +191 -0
  354. package/dist/src/storage/sqlite/notes-repository.js.map +1 -0
  355. package/dist/src/storage/sqlite/paths.d.ts +1 -0
  356. package/dist/src/storage/sqlite/paths.js +7 -0
  357. package/dist/src/storage/sqlite/paths.js.map +1 -0
  358. package/dist/src/storage/sqlite/row-mappers.d.ts +82 -0
  359. package/dist/src/storage/sqlite/row-mappers.js +164 -0
  360. package/dist/src/storage/sqlite/row-mappers.js.map +1 -0
  361. package/dist/src/storage/sqlite/schema.d.ts +5 -0
  362. package/dist/src/storage/sqlite/schema.js +43 -0
  363. package/dist/src/storage/sqlite/schema.js.map +1 -0
  364. package/dist/src/storage/sqlite/schema.sql +195 -0
  365. package/dist/src/storage/sqlite/session-metadata.d.ts +8 -0
  366. package/dist/src/storage/sqlite/session-metadata.js +83 -0
  367. package/dist/src/storage/sqlite/session-metadata.js.map +1 -0
  368. package/dist/src/storage/sqlite/session-repository.d.ts +29 -0
  369. package/dist/src/storage/sqlite/session-repository.js +268 -0
  370. package/dist/src/storage/sqlite/session-repository.js.map +1 -0
  371. package/dist/src/storage/sqlite/transaction.d.ts +11 -0
  372. package/dist/src/storage/sqlite/transaction.js +115 -0
  373. package/dist/src/storage/sqlite/transaction.js.map +1 -0
  374. package/dist/src/storage/sqlite/transcript-repository.d.ts +34 -0
  375. package/dist/src/storage/sqlite/transcript-repository.js +241 -0
  376. package/dist/src/storage/sqlite/transcript-repository.js.map +1 -0
  377. package/dist/src/tui/clipboard-image.js +3 -3
  378. package/dist/src/tui/theme-manager.js +1 -1
  379. package/dist/src/tui/tui-keybindings-file.js +1 -1
  380. package/dist/src/tui/tui-scoped-models.js +2 -2
  381. package/dist/src/tui/tui-settings.js +1 -1
  382. package/dist/src/tui/tui.js +3 -3
  383. package/dist/src/tunnel/frpc-binary.js +3 -3
  384. package/dist/src/tunnel/frpc-config.js +1 -1
  385. package/dist/src/tunnel/frpc-extract.js +1 -1
  386. package/dist/src/tunnel/tunnel-state.js +1 -1
  387. package/dist/src/utils/logger/audit.js +1 -1
  388. package/dist/src/utils/logger/log-store.js +1 -1
  389. package/dist/src/utils/logger/rotation.js +1 -1
  390. package/dist/src/voice/tts/audio.js +1 -1
  391. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  392. package/dist/src/workflows/service/workflow-session-bridge.js +41 -64
  393. package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
  394. package/dist/src/workflows/store/event-store.js +1 -1
  395. package/dist/src/workflows/store/run-store.js +1 -1
  396. package/package.json +2 -2
  397. package/dist/gateway/static/root/assets/index-Bj_l8QDp.css +0 -1
  398. package/dist/gateway/static/root/assets/url-BHHmdJYc.js +0 -3
  399. package/dist/src/agent/context/workspace-templates/BOOTSTRAP.md +0 -61
  400. package/dist/src/agent/embedded/session-manager-cache.d.ts +0 -19
  401. package/dist/src/agent/embedded/session-manager-cache.js +0 -48
  402. package/dist/src/agent/embedded/session-manager-cache.js.map +0 -1
  403. package/dist/src/session/parity/artifacts.d.ts +0 -16
  404. package/dist/src/session/parity/artifacts.js +0 -80
  405. package/dist/src/session/parity/artifacts.js.map +0 -1
  406. package/dist/src/session/parity/jsonl-transcript-io.d.ts +0 -54
  407. package/dist/src/session/parity/jsonl-transcript-io.js +0 -236
  408. package/dist/src/session/parity/jsonl-transcript-io.js.map +0 -1
  409. package/dist/src/session/parity/load-jsonl-entries.js.map +0 -1
  410. package/dist/src/session/parity/session-id.js +0 -18
  411. package/dist/src/session/parity/session-id.js.map +0 -1
  412. package/dist/src/session/parity/sessions-json-cache.d.ts +0 -14
  413. package/dist/src/session/parity/sessions-json-cache.js +0 -98
  414. package/dist/src/session/parity/sessions-json-cache.js.map +0 -1
  415. package/dist/src/session/parity/sessions-json-file-read.d.ts +0 -6
  416. package/dist/src/session/parity/sessions-json-file-read.js +0 -19
  417. package/dist/src/session/parity/sessions-json-file-read.js.map +0 -1
  418. package/dist/src/session/parity/sessions-json-file.d.ts +0 -11
  419. package/dist/src/session/parity/sessions-json-file.js +0 -52
  420. package/dist/src/session/parity/sessions-json-file.js.map +0 -1
  421. package/dist/src/session/parity/sessions-json-patch.d.ts +0 -14
  422. package/dist/src/session/parity/sessions-json-patch.js +0 -40
  423. package/dist/src/session/parity/sessions-json-patch.js.map +0 -1
  424. package/dist/src/session/parity/transcript-file-lock.d.ts +0 -22
  425. package/dist/src/session/parity/transcript-file-lock.js +0 -142
  426. package/dist/src/session/parity/transcript-file-lock.js.map +0 -1
  427. package/dist/src/session/parity/transcript-pagination.d.ts +0 -29
  428. package/dist/src/session/parity/transcript-pagination.js +0 -132
  429. package/dist/src/session/parity/transcript-pagination.js.map +0 -1
  430. package/dist/src/session/parity/transcript-paths.d.ts +0 -13
  431. package/dist/src/session/parity/transcript-paths.js +0 -64
  432. package/dist/src/session/parity/transcript-paths.js.map +0 -1
  433. package/dist/src/session/parity/xopc-session-disk-entry.d.ts +0 -22
  434. package/dist/src/session/search-index-cache.d.ts +0 -6
  435. package/dist/src/session/search-index-cache.js +0 -44
  436. package/dist/src/session/search-index-cache.js.map +0 -1
  437. package/dist/src/session/search-index.d.ts +0 -20
  438. package/dist/src/session/search-index.js +0 -124
  439. package/dist/src/session/search-index.js.map +0 -1
  440. /package/dist/src/{session/parity/xopc-session-disk-entry.js → cron/execution-types.js} +0 -0
  441. /package/dist/src/session/{parity/load-jsonl-entries.d.ts → load-jsonl-entries.d.ts} +0 -0
  442. /package/dist/src/session/{parity/session-id.d.ts → session-id.d.ts} +0 -0
@@ -1,13 +0,0 @@
1
- export type SessionFilePathOptions = {
2
- agentId?: string;
3
- sessionsDir?: string;
4
- };
5
- export declare function resolveSessionTranscriptPathInDir(sessionId: string, sessionsDir: string, topicId?: string | number): string;
6
- export declare function resolveSessionFilePath(sessionId: string, entry?: {
7
- sessionFile?: string;
8
- }, opts?: SessionFilePathOptions): string;
9
- /**
10
- * Candidate transcript paths for a session (xopc state only — no external legacy dirs).
11
- */
12
- export declare function resolveSessionTranscriptCandidates(sessionId: string, storePath: string | undefined, sessionFile?: string, _agentId?: string): string[];
13
- export declare function archiveFileOnDisk(filePath: string, reason: 'reset' | 'deleted' | 'bak'): string;
@@ -1,64 +0,0 @@
1
- import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
- import { formatSessionArchiveTimestamp, init_artifacts } from "./artifacts.js";
3
- import { init_session_id, validateSessionId } from "./session-id.js";
4
- import { dirname, relative, resolve } from "node:path";
5
- import fs from "node:fs";
6
- //#region src/session/parity/transcript-paths.ts
7
- function resolveSessionsDir(opts) {
8
- const sessionsDir = opts?.sessionsDir?.trim();
9
- if (!sessionsDir) throw new Error("sessionsDir is required for session transcript path resolution");
10
- return resolve(sessionsDir);
11
- }
12
- function resolvePathWithinSessionsDir(sessionsDir, candidate) {
13
- const trimmed = candidate.trim();
14
- if (!trimmed) throw new Error("Session file path must not be empty");
15
- const resolvedBase = resolve(sessionsDir);
16
- const normalized = resolve(resolvedBase, trimmed);
17
- const rel = relative(resolvedBase, normalized);
18
- if (rel.startsWith("..") || rel === "") throw new Error("Session file path must be within sessions directory");
19
- return normalized;
20
- }
21
- function resolveSessionTranscriptPathInDir(sessionId, sessionsDir, topicId) {
22
- const safeSessionId = validateSessionId(sessionId);
23
- const safeTopicId = typeof topicId === "string" ? encodeURIComponent(topicId) : typeof topicId === "number" ? String(topicId) : void 0;
24
- return resolvePathWithinSessionsDir(sessionsDir, safeTopicId !== void 0 ? `${safeSessionId}-topic-${safeTopicId}.jsonl` : `${safeSessionId}.jsonl`);
25
- }
26
- function resolveSessionFilePath(sessionId, entry, opts) {
27
- const sessionsDir = resolveSessionsDir(opts);
28
- const candidate = entry?.sessionFile?.trim();
29
- if (candidate) try {
30
- return resolvePathWithinSessionsDir(sessionsDir, candidate);
31
- } catch {}
32
- return resolveSessionTranscriptPathInDir(sessionId, sessionsDir);
33
- }
34
- /**
35
- * Candidate transcript paths for a session (xopc state only — no external legacy dirs).
36
- */
37
- function resolveSessionTranscriptCandidates(sessionId, storePath, sessionFile, _agentId) {
38
- const candidates = [];
39
- const push = (p) => {
40
- if (!candidates.includes(p)) candidates.push(p);
41
- };
42
- if (storePath) {
43
- const sessionsDir = dirname(storePath);
44
- if (sessionFile?.trim()) try {
45
- push(resolveSessionFilePath(sessionId, { sessionFile }, { sessionsDir }));
46
- } catch {}
47
- push(resolveSessionTranscriptPathInDir(sessionId, sessionsDir));
48
- } else if (sessionFile?.trim()) push(resolve(sessionFile.trim()));
49
- return candidates;
50
- }
51
- function archiveFileOnDisk(filePath, reason) {
52
- const archived = `${filePath}.${reason}.${formatSessionArchiveTimestamp()}`;
53
- fs.renameSync(filePath, archived);
54
- return archived;
55
- }
56
- var init_transcript_paths = __esmMin((() => {
57
- init_artifacts();
58
- init_session_id();
59
- }));
60
- //#endregion
61
- init_transcript_paths();
62
- export { archiveFileOnDisk, init_transcript_paths, resolveSessionFilePath, resolveSessionTranscriptCandidates, resolveSessionTranscriptPathInDir };
63
-
64
- //# sourceMappingURL=transcript-paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcript-paths.js","names":[],"sources":["../../../../src/session/parity/transcript-paths.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { dirname, relative, resolve } from 'node:path';\n\nimport { formatSessionArchiveTimestamp } from './artifacts.js';\nimport { validateSessionId } from './session-id.js';\n\nexport type SessionFilePathOptions = {\n agentId?: string;\n sessionsDir?: string;\n};\n\nfunction resolveSessionsDir(opts?: SessionFilePathOptions): string {\n const sessionsDir = opts?.sessionsDir?.trim();\n if (!sessionsDir) {\n throw new Error('sessionsDir is required for session transcript path resolution');\n }\n return resolve(sessionsDir);\n}\n\nfunction resolvePathWithinSessionsDir(sessionsDir: string, candidate: string): string {\n const trimmed = candidate.trim();\n if (!trimmed) {\n throw new Error('Session file path must not be empty');\n }\n const resolvedBase = resolve(sessionsDir);\n const normalized = resolve(resolvedBase, trimmed);\n const rel = relative(resolvedBase, normalized);\n if (rel.startsWith('..') || rel === '') {\n throw new Error('Session file path must be within sessions directory');\n }\n return normalized;\n}\n\nexport function resolveSessionTranscriptPathInDir(\n sessionId: string,\n sessionsDir: string,\n topicId?: string | number,\n): string {\n const safeSessionId = validateSessionId(sessionId);\n const safeTopicId =\n typeof topicId === 'string'\n ? encodeURIComponent(topicId)\n : typeof topicId === 'number'\n ? String(topicId)\n : undefined;\n const fileName =\n safeTopicId !== undefined\n ? `${safeSessionId}-topic-${safeTopicId}.jsonl`\n : `${safeSessionId}.jsonl`;\n return resolvePathWithinSessionsDir(sessionsDir, fileName);\n}\n\nexport function resolveSessionFilePath(\n sessionId: string,\n entry?: { sessionFile?: string },\n opts?: SessionFilePathOptions,\n): string {\n const sessionsDir = resolveSessionsDir(opts);\n const candidate = entry?.sessionFile?.trim();\n if (candidate) {\n try {\n return resolvePathWithinSessionsDir(sessionsDir, candidate);\n } catch {\n /* fall through */\n }\n }\n return resolveSessionTranscriptPathInDir(sessionId, sessionsDir);\n}\n\n/**\n * Candidate transcript paths for a session (xopc state only — no external legacy dirs).\n */\nexport function resolveSessionTranscriptCandidates(\n sessionId: string,\n storePath: string | undefined,\n sessionFile?: string,\n _agentId?: string,\n): string[] {\n const candidates: string[] = [];\n const push = (p: string): void => {\n if (!candidates.includes(p)) {\n candidates.push(p);\n }\n };\n\n if (storePath) {\n const sessionsDir = dirname(storePath);\n if (sessionFile?.trim()) {\n try {\n push(resolveSessionFilePath(sessionId, { sessionFile }, { sessionsDir }));\n } catch {\n /* ignore */\n }\n }\n push(resolveSessionTranscriptPathInDir(sessionId, sessionsDir));\n } else if (sessionFile?.trim()) {\n push(resolve(sessionFile.trim()));\n }\n\n return candidates;\n}\n\nexport function archiveFileOnDisk(filePath: string, reason: 'reset' | 'deleted' | 'bak'): string {\n const ts = formatSessionArchiveTimestamp();\n const archived = `${filePath}.${reason}.${ts}`;\n fs.renameSync(filePath, archived);\n return archived;\n}\n"],"mappings":";;;;;;AAWA,SAAS,mBAAmB,MAAuC;CACjE,MAAM,cAAc,MAAM,aAAa,MAAM;AAC7C,KAAI,CAAC,YACH,OAAM,IAAI,MAAM,iEAAiE;AAEnF,QAAO,QAAQ,YAAY;;AAG7B,SAAS,6BAA6B,aAAqB,WAA2B;CACpF,MAAM,UAAU,UAAU,MAAM;AAChC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,sCAAsC;CAExD,MAAM,eAAe,QAAQ,YAAY;CACzC,MAAM,aAAa,QAAQ,cAAc,QAAQ;CACjD,MAAM,MAAM,SAAS,cAAc,WAAW;AAC9C,KAAI,IAAI,WAAW,KAAK,IAAI,QAAQ,GAClC,OAAM,IAAI,MAAM,sDAAsD;AAExE,QAAO;;AAGT,SAAgB,kCACd,WACA,aACA,SACQ;CACR,MAAM,gBAAgB,kBAAkB,UAAU;CAClD,MAAM,cACJ,OAAO,YAAY,WACf,mBAAmB,QAAQ,GAC3B,OAAO,YAAY,WACjB,OAAO,QAAQ,GACf,KAAA;AAKR,QAAO,6BAA6B,aAHlC,gBAAgB,KAAA,IACZ,GAAG,cAAc,SAAS,YAAY,UACtC,GAAG,cAAc,QACmC;;AAG5D,SAAgB,uBACd,WACA,OACA,MACQ;CACR,MAAM,cAAc,mBAAmB,KAAK;CAC5C,MAAM,YAAY,OAAO,aAAa,MAAM;AAC5C,KAAI,UACF,KAAI;AACF,SAAO,6BAA6B,aAAa,UAAU;SACrD;AAIV,QAAO,kCAAkC,WAAW,YAAY;;;;;AAMlE,SAAgB,mCACd,WACA,WACA,aACA,UACU;CACV,MAAM,aAAuB,EAAE;CAC/B,MAAM,QAAQ,MAAoB;AAChC,MAAI,CAAC,WAAW,SAAS,EAAE,CACzB,YAAW,KAAK,EAAE;;AAItB,KAAI,WAAW;EACb,MAAM,cAAc,QAAQ,UAAU;AACtC,MAAI,aAAa,MAAM,CACrB,KAAI;AACF,QAAK,uBAAuB,WAAW,EAAE,aAAa,EAAE,EAAE,aAAa,CAAC,CAAC;UACnE;AAIV,OAAK,kCAAkC,WAAW,YAAY,CAAC;YACtD,aAAa,MAAM,CAC5B,MAAK,QAAQ,YAAY,MAAM,CAAC,CAAC;AAGnC,QAAO;;AAGT,SAAgB,kBAAkB,UAAkB,QAA6C;CAE/F,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,GAD5B,+BACiC;AAC5C,IAAG,WAAW,UAAU,SAAS;AACjC,QAAO;;;iBAvGsD;kBACX"}
@@ -1,22 +0,0 @@
1
- import type { SessionMetadata } from '../types.js';
2
- /**
3
- * One value in `sessions.json` (OpenClaw SessionEntry–shaped subset + xopc metadata bag).
4
- */
5
- export interface XopcSessionDiskEntry extends Record<string, unknown> {
6
- sessionId: string;
7
- updatedAt: number;
8
- sessionStartedAt?: number;
9
- /** Last user/channel interaction (ms) — extends idle reset lifetime. */
10
- lastInteractionAt?: number;
11
- /** Persisted thinking level (OpenClaw SessionEntry parity). */
12
- thinkingLevel?: string;
13
- /** Persisted verbose level (OpenClaw SessionEntry parity). */
14
- verboseLevel?: string;
15
- sessionFile?: string;
16
- pluginExtensions?: {
17
- xopc?: {
18
- /** Full {@link SessionMetadata} including `key`. */
19
- metadata: SessionMetadata;
20
- };
21
- };
22
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * Shared cache for {@link SessionSearchIndex} builds (invalidated on session writes).
3
- */
4
- import { SessionSearchIndex } from './search-index.js';
5
- export declare function invalidateSessionSearchIndexCache(): void;
6
- export declare function getOrLoadSessionSearchIndex(sessionsRoot: string): Promise<SessionSearchIndex>;
@@ -1,44 +0,0 @@
1
- import { FILENAMES, init_paths } from "../config/paths.js";
2
- import { SessionSearchIndex } from "./search-index.js";
3
- import { join } from "node:path";
4
- import { stat } from "node:fs/promises";
5
- //#region src/session/search-index-cache.ts
6
- /**
7
- * Shared cache for {@link SessionSearchIndex} builds (invalidated on session writes).
8
- */
9
- init_paths();
10
- const INDEX_CACHE_TTL_MS = 9e4;
11
- let indexCache = null;
12
- function invalidateSessionSearchIndexCache() {
13
- indexCache = null;
14
- }
15
- async function getOrLoadSessionSearchIndex(sessionsRoot) {
16
- const indexPath = join(sessionsRoot, FILENAMES.SESSIONS_MAP);
17
- let mtime = 0;
18
- try {
19
- mtime = (await stat(indexPath)).mtimeMs;
20
- } catch {
21
- mtime = 0;
22
- }
23
- const now = Date.now();
24
- if (indexCache && indexCache.root === sessionsRoot && indexCache.indexFileMtime === mtime && now - indexCache.builtAt < INDEX_CACHE_TTL_MS) return indexCache.index;
25
- const idx = new SessionSearchIndex();
26
- await idx.buildIndex(sessionsRoot);
27
- let m2 = mtime;
28
- try {
29
- m2 = (await stat(indexPath)).mtimeMs;
30
- } catch {
31
- m2 = Date.now();
32
- }
33
- indexCache = {
34
- root: sessionsRoot,
35
- index: idx,
36
- indexFileMtime: m2,
37
- builtAt: Date.now()
38
- };
39
- return idx;
40
- }
41
- //#endregion
42
- export { getOrLoadSessionSearchIndex, invalidateSessionSearchIndexCache };
43
-
44
- //# sourceMappingURL=search-index-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-index-cache.js","names":[],"sources":["../../../src/session/search-index-cache.ts"],"sourcesContent":["/**\n * Shared cache for {@link SessionSearchIndex} builds (invalidated on session writes).\n */\n\nimport { stat } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { FILENAMES } from '../config/paths.js';\nimport { SessionSearchIndex } from './search-index.js';\n\nconst INDEX_CACHE_TTL_MS = 90_000;\n\nlet indexCache: {\n root: string;\n index: SessionSearchIndex;\n indexFileMtime: number;\n builtAt: number;\n} | null = null;\n\nexport function invalidateSessionSearchIndexCache(): void {\n indexCache = null;\n}\n\nexport async function getOrLoadSessionSearchIndex(sessionsRoot: string): Promise<SessionSearchIndex> {\n const indexPath = join(sessionsRoot, FILENAMES.SESSIONS_MAP);\n let mtime = 0;\n try {\n mtime = (await stat(indexPath)).mtimeMs;\n } catch {\n mtime = 0;\n }\n const now = Date.now();\n if (\n indexCache &&\n indexCache.root === sessionsRoot &&\n indexCache.indexFileMtime === mtime &&\n now - indexCache.builtAt < INDEX_CACHE_TTL_MS\n ) {\n return indexCache.index;\n }\n\n const idx = new SessionSearchIndex();\n await idx.buildIndex(sessionsRoot);\n\n let m2 = mtime;\n try {\n m2 = (await stat(indexPath)).mtimeMs;\n } catch {\n m2 = Date.now();\n }\n\n indexCache = {\n root: sessionsRoot,\n index: idx,\n indexFileMtime: m2,\n builtAt: Date.now(),\n };\n return idx;\n}\n"],"mappings":";;;;;;;;YAO+C;AAG/C,MAAM,qBAAqB;AAE3B,IAAI,aAKO;AAEX,SAAgB,oCAA0C;AACxD,cAAa;;AAGf,eAAsB,4BAA4B,cAAmD;CACnG,MAAM,YAAY,KAAK,cAAc,UAAU,aAAa;CAC5D,IAAI,QAAQ;AACZ,KAAI;AACF,WAAS,MAAM,KAAK,UAAU,EAAE;SAC1B;AACN,UAAQ;;CAEV,MAAM,MAAM,KAAK,KAAK;AACtB,KACE,cACA,WAAW,SAAS,gBACpB,WAAW,mBAAmB,SAC9B,MAAM,WAAW,UAAU,mBAE3B,QAAO,WAAW;CAGpB,MAAM,MAAM,IAAI,oBAAoB;AACpC,OAAM,IAAI,WAAW,aAAa;CAElC,IAAI,KAAK;AACT,KAAI;AACF,QAAM,MAAM,KAAK,UAAU,EAAE;SACvB;AACN,OAAK,KAAK,KAAK;;AAGjB,cAAa;EACX,MAAM;EACN,OAAO;EACP,gBAAgB;EAChB,SAAS,KAAK,KAAK;EACpB;AACD,QAAO"}
@@ -1,20 +0,0 @@
1
- /**
2
- * In-memory inverted index over session transcripts (`sessions.json` + JSONL).
3
- */
4
- import type { AgentMessage } from '@earendil-works/pi-agent-core';
5
- export declare class SessionSearchIndex {
6
- private sessions;
7
- private globalWordIndex;
8
- /**
9
- * Scan `sessionsRoot` (flat `sessions.json` + per-session `.jsonl` transcripts).
10
- */
11
- buildIndex(sessionsRoot: string): Promise<void>;
12
- search(query: string, limit?: number): Array<{
13
- key: string;
14
- score: number;
15
- }>;
16
- getSessionMessages(key: string): AgentMessage[];
17
- private buildWordIndex;
18
- private mergeContextTextIntoWordIndex;
19
- private mergeIntoGlobalIndex;
20
- }
@@ -1,124 +0,0 @@
1
- import { init_transcript_paths, resolveSessionFilePath } from "./parity/transcript-paths.js";
2
- import { FILENAMES, init_paths } from "../config/paths.js";
3
- import { isTranscriptContextEntry } from "./session-context-for-llm.js";
4
- import { readTranscriptRowsFromFile, rowsToLlmMessages } from "./parity/jsonl-transcript-io.js";
5
- import { join } from "node:path";
6
- import { readFile } from "node:fs/promises";
7
- //#region src/session/search-index.ts
8
- /**
9
- * In-memory inverted index over session transcripts (`sessions.json` + JSONL).
10
- */
11
- init_paths();
12
- init_transcript_paths();
13
- var SessionSearchIndex = class {
14
- sessions = /* @__PURE__ */ new Map();
15
- globalWordIndex = /* @__PURE__ */ new Map();
16
- /**
17
- * Scan `sessionsRoot` (flat `sessions.json` + per-session `.jsonl` transcripts).
18
- */
19
- async buildIndex(sessionsRoot) {
20
- this.sessions.clear();
21
- this.globalWordIndex.clear();
22
- const mapPath = join(sessionsRoot, FILENAMES.SESSIONS_MAP);
23
- let raw;
24
- try {
25
- raw = await readFile(mapPath, "utf-8");
26
- } catch {
27
- return;
28
- }
29
- let map;
30
- try {
31
- const parsed = JSON.parse(raw);
32
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return;
33
- map = parsed;
34
- } catch {
35
- return;
36
- }
37
- for (const [sessionKey, entry] of Object.entries(map)) {
38
- if (!entry?.sessionId) continue;
39
- try {
40
- const rows = await readTranscriptRowsFromFile(resolveSessionFilePath(entry.sessionId, entry, { sessionsDir: sessionsRoot }));
41
- const messages = rowsToLlmMessages(rows);
42
- const wordIndex = this.buildWordIndex(messages);
43
- this.mergeContextTextIntoWordIndex(wordIndex, rows, messages.length);
44
- const indexed = {
45
- key: sessionKey,
46
- messages,
47
- wordIndex
48
- };
49
- this.sessions.set(sessionKey, indexed);
50
- this.mergeIntoGlobalIndex(sessionKey, wordIndex);
51
- } catch {}
52
- }
53
- }
54
- search(query, limit = 10) {
55
- const queryWords = tokenizeWords(query);
56
- if (queryWords.length === 0) return [];
57
- const scores = /* @__PURE__ */ new Map();
58
- for (const word of queryWords) {
59
- const matchingSessions = this.globalWordIndex.get(word);
60
- if (!matchingSessions) continue;
61
- for (const sessionKey of matchingSessions) scores.set(sessionKey, (scores.get(sessionKey) || 0) + 1);
62
- }
63
- return Array.from(scores.entries()).map(([key, score]) => ({
64
- key,
65
- score: score / queryWords.length
66
- })).sort((a, b) => b.score - a.score).slice(0, limit);
67
- }
68
- getSessionMessages(key) {
69
- return this.sessions.get(key)?.messages ?? [];
70
- }
71
- buildWordIndex(messages) {
72
- const index = /* @__PURE__ */ new Map();
73
- for (let i = 0; i < messages.length; i++) {
74
- const words = tokenizeWords(extractIndexableText(messages[i].content));
75
- for (const word of words) {
76
- if (!index.has(word)) index.set(word, /* @__PURE__ */ new Set());
77
- index.get(word).add(i);
78
- }
79
- }
80
- return index;
81
- }
82
- mergeContextTextIntoWordIndex(wordIndex, rows, llmMessageCount) {
83
- let slot = 0;
84
- for (const r of rows) {
85
- if (!isTranscriptContextEntry(r)) continue;
86
- const parts = [];
87
- if (typeof r.text === "string" && r.text.trim()) parts.push(r.text);
88
- if (typeof r.id === "string" && r.id.trim()) parts.push(r.id);
89
- const blob = parts.join(" ");
90
- if (!blob.trim()) continue;
91
- const words = tokenizeWords(blob);
92
- const idx = llmMessageCount + slot;
93
- slot += 1;
94
- for (const word of words) {
95
- if (!wordIndex.has(word)) wordIndex.set(word, /* @__PURE__ */ new Set());
96
- wordIndex.get(word).add(idx);
97
- }
98
- }
99
- }
100
- mergeIntoGlobalIndex(sessionKey, wordIndex) {
101
- for (const word of wordIndex.keys()) {
102
- if (!this.globalWordIndex.has(word)) this.globalWordIndex.set(word, /* @__PURE__ */ new Set());
103
- this.globalWordIndex.get(word).add(sessionKey);
104
- }
105
- }
106
- };
107
- function tokenizeWords(text) {
108
- return text.toLowerCase().split(/[\W_]+/).map((w) => w.trim()).filter(Boolean);
109
- }
110
- function extractIndexableText(content) {
111
- if (typeof content === "string") return content;
112
- if (!Array.isArray(content)) return "";
113
- const parts = [];
114
- for (const item of content) {
115
- if (typeof item !== "object" || item === null || !("type" in item)) continue;
116
- const c = item;
117
- if (c.type === "text" && typeof c.text === "string") parts.push(c.text);
118
- }
119
- return parts.join(" ");
120
- }
121
- //#endregion
122
- export { SessionSearchIndex };
123
-
124
- //# sourceMappingURL=search-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-index.js","names":[],"sources":["../../../src/session/search-index.ts"],"sourcesContent":["/**\n * In-memory inverted index over session transcripts (`sessions.json` + JSONL).\n */\n\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport { FILENAMES } from '../config/paths.js';\nimport { resolveSessionFilePath } from './parity/transcript-paths.js';\nimport { readTranscriptRowsFromFile, rowsToLlmMessages } from './parity/jsonl-transcript-io.js';\nimport { isTranscriptContextEntry, type TranscriptStoredRow } from './session-context-for-llm.js';\nimport type { XopcSessionDiskEntry } from './parity/xopc-session-disk-entry.js';\n\ninterface IndexedSession {\n key: string;\n messages: AgentMessage[];\n wordIndex: Map<string, Set<number>>;\n}\n\nexport class SessionSearchIndex {\n private sessions = new Map<string, IndexedSession>();\n private globalWordIndex = new Map<string, Set<string>>();\n\n /**\n * Scan `sessionsRoot` (flat `sessions.json` + per-session `.jsonl` transcripts).\n */\n async buildIndex(sessionsRoot: string): Promise<void> {\n this.sessions.clear();\n this.globalWordIndex.clear();\n\n const mapPath = join(sessionsRoot, FILENAMES.SESSIONS_MAP);\n let raw: string;\n try {\n raw = await readFile(mapPath, 'utf-8');\n } catch {\n return;\n }\n let map: Record<string, XopcSessionDiskEntry>;\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return;\n }\n map = parsed as Record<string, XopcSessionDiskEntry>;\n } catch {\n return;\n }\n\n for (const [sessionKey, entry] of Object.entries(map)) {\n if (!entry?.sessionId) {\n continue;\n }\n try {\n const transcriptPath = resolveSessionFilePath(entry.sessionId, entry, { sessionsDir: sessionsRoot });\n const rows = await readTranscriptRowsFromFile(transcriptPath);\n const messages = rowsToLlmMessages(rows);\n const wordIndex = this.buildWordIndex(messages);\n this.mergeContextTextIntoWordIndex(wordIndex, rows, messages.length);\n const indexed: IndexedSession = { key: sessionKey, messages, wordIndex };\n this.sessions.set(sessionKey, indexed);\n this.mergeIntoGlobalIndex(sessionKey, wordIndex);\n } catch {\n /* skip */\n }\n }\n }\n\n search(query: string, limit = 10): Array<{ key: string; score: number }> {\n const queryWords = tokenizeWords(query);\n if (queryWords.length === 0) {\n return [];\n }\n const scores = new Map<string, number>();\n for (const word of queryWords) {\n const matchingSessions = this.globalWordIndex.get(word);\n if (!matchingSessions) {\n continue;\n }\n for (const sessionKey of matchingSessions) {\n scores.set(sessionKey, (scores.get(sessionKey) || 0) + 1);\n }\n }\n return Array.from(scores.entries())\n .map(([key, score]) => ({ key, score: score / queryWords.length }))\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n }\n\n getSessionMessages(key: string): AgentMessage[] {\n return this.sessions.get(key)?.messages ?? [];\n }\n\n private buildWordIndex(messages: AgentMessage[]): Map<string, Set<number>> {\n const index = new Map<string, Set<number>>();\n for (let i = 0; i < messages.length; i++) {\n const text = extractIndexableText((messages[i] as { content?: unknown }).content);\n const words = tokenizeWords(text);\n for (const word of words) {\n if (!index.has(word)) {\n index.set(word, new Set());\n }\n index.get(word)!.add(i);\n }\n }\n return index;\n }\n\n private mergeContextTextIntoWordIndex(\n wordIndex: Map<string, Set<number>>,\n rows: TranscriptStoredRow[],\n llmMessageCount: number,\n ): void {\n let slot = 0;\n for (const r of rows) {\n if (!isTranscriptContextEntry(r)) {\n continue;\n }\n const parts: string[] = [];\n if (typeof r.text === 'string' && r.text.trim()) {\n parts.push(r.text);\n }\n if (typeof r.id === 'string' && r.id.trim()) {\n parts.push(r.id);\n }\n const blob = parts.join(' ');\n if (!blob.trim()) {\n continue;\n }\n const words = tokenizeWords(blob);\n const idx = llmMessageCount + slot;\n slot += 1;\n for (const word of words) {\n if (!wordIndex.has(word)) {\n wordIndex.set(word, new Set());\n }\n wordIndex.get(word)!.add(idx);\n }\n }\n }\n\n private mergeIntoGlobalIndex(sessionKey: string, wordIndex: Map<string, Set<number>>): void {\n for (const word of wordIndex.keys()) {\n if (!this.globalWordIndex.has(word)) {\n this.globalWordIndex.set(word, new Set());\n }\n this.globalWordIndex.get(word)!.add(sessionKey);\n }\n }\n}\n\nfunction tokenizeWords(text: string): string[] {\n return text\n .toLowerCase()\n .split(/[\\W_]+/)\n .map((w) => w.trim())\n .filter(Boolean);\n}\n\nfunction extractIndexableText(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n const parts: string[] = [];\n for (const item of content) {\n if (typeof item !== 'object' || item === null || !('type' in item)) {\n continue;\n }\n const c = item as { type?: string; text?: string };\n if (c.type === 'text' && typeof c.text === 'string') {\n parts.push(c.text);\n }\n }\n return parts.join(' ');\n}\n"],"mappings":"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"}