@xopcai/xopc 0.0.94 → 0.0.96

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 (433) 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-OqhbJkMf.js → agents-DmIuSaOE.js} +3 -3
  19. package/dist/gateway/static/root/assets/{apps-page-OHXW9XP8.js → apps-page-DFcHBxLw.js} +1 -1
  20. package/dist/gateway/static/root/assets/{channels-settings-4N2R-jof.js → channels-settings-DDUf55C5.js} +1 -1
  21. package/dist/gateway/static/root/assets/{channels-status-swr-Bv6f9kDq.js → channels-status-swr-BxF-_nzD.js} +1 -1
  22. package/dist/gateway/static/root/assets/{cron-api-BtaQaHJq.js → cron-api-DylQtnb_.js} +1 -1
  23. package/dist/gateway/static/root/assets/{cron-page-Dah32HJK.js → cron-page-BO0d9Pf-.js} +1 -1
  24. package/dist/gateway/static/root/assets/{dist-BJfD9Qvs.js → dist-BskF0qDS.js} +1 -1
  25. package/dist/gateway/static/root/assets/{extension-debug-page-DnYuMzmH.js → extension-debug-page-BcZdTdjJ.js} +1 -1
  26. package/dist/gateway/static/root/assets/{extension-page-CJfc-6XV.js → extension-page-D2iuDa1D.js} +1 -1
  27. package/dist/gateway/static/root/assets/{extension-settings-page-BxdfYQMG.js → extension-settings-page-BKpQCgLc.js} +1 -1
  28. package/dist/gateway/static/root/assets/{fetch-B0aeeY0q.js → fetch-CtNDpjij.js} +1 -1
  29. package/dist/gateway/static/root/assets/{field-primitives-DOLHwowi.js → field-primitives-2PekrGZF.js} +1 -1
  30. package/dist/gateway/static/root/assets/{heartbeat-config-api-Bj2INAf5.js → heartbeat-config-api-D3D7SW8A.js} +1 -1
  31. package/dist/gateway/static/root/assets/index-BvEhL9RQ.css +1 -0
  32. package/dist/gateway/static/root/assets/{index-DuQ1XPoA.js → index-Db9fd_X4.js} +74 -74
  33. package/dist/gateway/static/root/assets/{logs-page-AsOgLNJE.js → logs-page-B3I1a26m.js} +1 -1
  34. package/dist/gateway/static/root/assets/{note-detail-page-24J4mVP-.js → note-detail-page-BOizhtJ8.js} +54 -53
  35. package/dist/gateway/static/root/assets/{note-detail-page-B91pLkEI.css → note-detail-page-D4ZIVQbk.css} +1 -1
  36. package/dist/gateway/static/root/assets/{note-time-JBszYV3s.js → note-time-CjUGtqKr.js} +1 -1
  37. package/dist/gateway/static/root/assets/notes-page-BB8-I0Of.js +1 -0
  38. package/dist/gateway/static/root/assets/{sessions-page-DX9huWsA.js → sessions-page-BcH-1K9i.js} +1 -1
  39. package/dist/gateway/static/root/assets/{settings-advanced-gate-DWvhsTuz.js → settings-advanced-gate-Czn8nnjN.js} +2 -2
  40. package/dist/gateway/static/root/assets/{settings-form-section-CxMjaMiy.js → settings-form-section-ZZWDwgVe.js} +1 -1
  41. package/dist/gateway/static/root/assets/settings-page-BX8c_zrN.js +3 -0
  42. package/dist/gateway/static/root/assets/share-preview-page-Ch3_6Qah.js +2 -0
  43. package/dist/gateway/static/root/assets/{skills-page-CGKGKfwe.js → skills-page-WO0bbJ54.js} +1 -1
  44. package/dist/gateway/static/root/assets/{theme-store-Cg_SuBw0.js → theme-store-XxRFRZDX.js} +1 -1
  45. package/dist/gateway/static/root/assets/url-6zpynn1R.js +3 -0
  46. package/dist/gateway/static/root/assets/{utils-BmlcxR2j.js → utils-uTYKh54l.js} +1 -1
  47. package/dist/gateway/static/root/assets/{voice-api-key-field-DaGm2N4J.js → voice-api-key-field-BIAYHRs-.js} +1 -1
  48. package/dist/gateway/static/root/assets/{workflow-page.utils-D0vsIGHD.js → workflow-page.utils-BbWhqD36.js} +1 -1
  49. package/dist/gateway/static/root/assets/{workflows-page-BFCrD3nw.js → workflows-page-D4RIF7E1.js} +2 -2
  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 +15 -9
  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 +3 -0
  58. package/dist/src/agent/bootstrap/bootstrap-cache.js +13 -3
  59. package/dist/src/agent/bootstrap/bootstrap-cache.js.map +1 -1
  60. package/dist/src/agent/bootstrap/bootstrap-files.d.ts +6 -0
  61. package/dist/src/agent/bootstrap/bootstrap-files.js +35 -12
  62. package/dist/src/agent/bootstrap/bootstrap-files.js.map +1 -1
  63. package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +5 -2
  64. package/dist/src/agent/bootstrap/load-bootstrap-files.js +12 -3
  65. package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +1 -1
  66. package/dist/src/agent/context/workspace-seed.js +8 -4
  67. package/dist/src/agent/context/workspace-seed.js.map +1 -1
  68. package/dist/src/agent/context/workspace-state.d.ts +52 -0
  69. package/dist/src/agent/context/workspace-state.js +101 -0
  70. package/dist/src/agent/context/workspace-state.js.map +1 -0
  71. package/dist/src/agent/embedded/index.d.ts +2 -2
  72. package/dist/src/agent/embedded/index.js +3 -3
  73. package/dist/src/agent/embedded/run-turn.js +0 -3
  74. package/dist/src/agent/embedded/run-turn.js.map +1 -1
  75. package/dist/src/agent/embedded/session-manager-init.d.ts +0 -17
  76. package/dist/src/agent/embedded/session-manager-init.js +1 -36
  77. package/dist/src/agent/embedded/session-manager-init.js.map +1 -1
  78. package/dist/src/agent/embedded/session-runner.d.ts +3 -12
  79. package/dist/src/agent/embedded/session-runner.js +12 -26
  80. package/dist/src/agent/embedded/session-runner.js.map +1 -1
  81. package/dist/src/agent/embedded/session-tool-result-guard.js +2 -4
  82. package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
  83. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.d.ts +10 -0
  84. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +34 -0
  85. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js.map +1 -0
  86. package/dist/src/agent/goals/goal-run-store.js +4 -4
  87. package/dist/src/agent/goals/persistent-goal-service.js +8 -15
  88. package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
  89. package/dist/src/agent/goals/post-turn.js +2 -2
  90. package/dist/src/agent/image/load-image-media.js +2 -2
  91. package/dist/src/agent/ipc/bus.js +1 -1
  92. package/dist/src/agent/ipc/inbox.js +2 -2
  93. package/dist/src/agent/ipc/socket.js +1 -1
  94. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  95. package/dist/src/agent/mcp/bundle-mcp-runtime.js +2 -2
  96. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  97. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  98. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  99. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  100. package/dist/src/agent/memory/dreaming/events.js +1 -1
  101. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  102. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  103. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  104. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  105. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  106. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  107. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  108. package/dist/src/agent/models/manager.js +1 -1
  109. package/dist/src/agent/prompt/memory/index.d.ts +1 -0
  110. package/dist/src/agent/prompt/memory/index.js +34 -80
  111. package/dist/src/agent/prompt/memory/index.js.map +1 -1
  112. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  113. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  114. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  115. package/dist/src/agent/sandbox/path-policy.js +2 -2
  116. package/dist/src/agent/service/build-direct-message-content.js +1 -1
  117. package/dist/src/agent/service/process-direct-one-shot.js +8 -17
  118. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  119. package/dist/src/agent/service/process-direct-streaming.js +14 -23
  120. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  121. package/dist/src/agent/service.js +7 -11
  122. package/dist/src/agent/service.js.map +1 -1
  123. package/dist/src/agent/session/session-inspector.js +1 -1
  124. package/dist/src/agent/skills/config.js +1 -1
  125. package/dist/src/agent/skills/hub-hash.js +2 -2
  126. package/dist/src/agent/skills/hub-lock.js +1 -1
  127. package/dist/src/agent/skills/hub-pull.js +3 -3
  128. package/dist/src/agent/skills/index.js +1 -1
  129. package/dist/src/agent/skills/managed-store.js +1 -1
  130. package/dist/src/agent/skills/scanner.js +1 -1
  131. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  132. package/dist/src/agent/skills/skill-manager.js +1 -1
  133. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  134. package/dist/src/agent/tools/factory.js +1 -1
  135. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  136. package/dist/src/agent/tools/index.d.ts +0 -1
  137. package/dist/src/agent/tools/index.js +1 -2
  138. package/dist/src/agent/tools/send-media.js +1 -1
  139. package/dist/src/agent/tools/session-search-tool.d.ts +0 -1
  140. package/dist/src/agent/tools/session-search-tool.js +11 -6
  141. package/dist/src/agent/tools/session-search-tool.js.map +1 -1
  142. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  143. package/dist/src/agent/tools/workflow-tool.js +1 -1
  144. package/dist/src/agent/tools/write.js +1 -1
  145. package/dist/src/agent/workflow/catalog.js +1 -1
  146. package/dist/src/auth/credentials.js +3 -3
  147. package/dist/src/auth/profiles/store.js +1 -1
  148. package/dist/src/auth/sync-provider-auth.js +1 -1
  149. package/dist/src/browser/cache-dir-policy.js +1 -1
  150. package/dist/src/browser/cdp-local-launcher.js +2 -2
  151. package/dist/src/browser/providers/browser-ext-install.js +4 -4
  152. package/dist/src/browser/providers/cloakbrowser.js +4 -4
  153. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  154. package/dist/src/browser/stealth.js +1 -1
  155. package/dist/src/channels/attachments/inbound-persist.js +1 -1
  156. package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
  157. package/dist/src/channels/outbound/persist-store.js +1 -1
  158. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  159. package/dist/src/channels/pairing/pairing-store.js +2 -2
  160. package/dist/src/chat-commands/agent-edit.js +2 -2
  161. package/dist/src/chat-commands/builtins/config.js +2 -2
  162. package/dist/src/chat-commands/context.js +1 -1
  163. package/dist/src/cli/commands/config.js +1 -1
  164. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  165. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  166. package/dist/src/cli/commands/doctor/checks/session-integrity.js +32 -95
  167. package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +1 -1
  168. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  169. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  170. package/dist/src/cli/commands/extension-dev.js +1 -1
  171. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  172. package/dist/src/cli/commands/extension-pack.js +1 -1
  173. package/dist/src/cli/commands/gateway/logs.js +1 -1
  174. package/dist/src/cli/commands/image.js +1 -1
  175. package/dist/src/cli/commands/init.js +5 -7
  176. package/dist/src/cli/commands/init.js.map +1 -1
  177. package/dist/src/cli/commands/onboard.js +1 -1
  178. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  179. package/dist/src/commands/agents.config.js +1 -1
  180. package/dist/src/config/agent-profile.js +1 -1
  181. package/dist/src/config/gateway-bind.js +1 -1
  182. package/dist/src/config/index.js +7 -8
  183. package/dist/src/config/index.js.map +1 -1
  184. package/dist/src/config/loader.js +2 -2
  185. package/dist/src/config/models-json.js +2 -2
  186. package/dist/src/config/paths-state.d.ts +3 -0
  187. package/dist/src/config/paths-state.js +7 -3
  188. package/dist/src/config/paths-state.js.map +1 -1
  189. package/dist/src/config/paths.d.ts +5 -35
  190. package/dist/src/config/paths.js +6 -50
  191. package/dist/src/config/paths.js.map +1 -1
  192. package/dist/src/config/profile.js +2 -2
  193. package/dist/src/config/schema.d.ts +15 -0
  194. package/dist/src/config/schema.js +11 -0
  195. package/dist/src/config/schema.js.map +1 -1
  196. package/dist/src/config/workspace-path.js +1 -1
  197. package/dist/src/cron/execution-types.d.ts +42 -0
  198. package/dist/src/cron/executor.js +2 -2
  199. package/dist/src/cron/persistence.js +1 -1
  200. package/dist/src/cron/run-log-store.d.ts +4 -8
  201. package/dist/src/cron/run-log-store.js +26 -78
  202. package/dist/src/cron/run-log-store.js.map +1 -1
  203. package/dist/src/cron/service.d.ts +3 -3
  204. package/dist/src/cron/service.js +2 -2
  205. package/dist/src/cron/service.js.map +1 -1
  206. package/dist/src/cron/types.d.ts +1 -42
  207. package/dist/src/daemon/constants.js +1 -1
  208. package/dist/src/daemon/install-plan.js +2 -2
  209. package/dist/src/daemon/launchd.js +2 -2
  210. package/dist/src/daemon/schtasks.js +2 -2
  211. package/dist/src/daemon/systemd.js +2 -2
  212. package/dist/src/extensions/bundle-mcp.js +1 -1
  213. package/dist/src/extensions/discover-extensions.js +1 -1
  214. package/dist/src/extensions/health.js +1 -1
  215. package/dist/src/extensions/loader.js +1 -1
  216. package/dist/src/extensions/lockfile.js +2 -2
  217. package/dist/src/extensions/update.js +1 -1
  218. package/dist/src/gateway/agents-admin.js +8 -3
  219. package/dist/src/gateway/agents-admin.js.map +1 -1
  220. package/dist/src/gateway/file-path-classifier.d.ts +0 -1
  221. package/dist/src/gateway/file-path-classifier.js +2 -8
  222. package/dist/src/gateway/file-path-classifier.js.map +1 -1
  223. package/dist/src/gateway/heartbeat/service.js +1 -1
  224. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  225. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  226. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  227. package/dist/src/gateway/hono/oauth.js +1 -1
  228. package/dist/src/gateway/hono/routes/agents.js +1 -1
  229. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  230. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  231. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  232. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  233. package/dist/src/gateway/hono/routes/models.js +1 -1
  234. package/dist/src/gateway/hono/routes/shares.js +1 -1
  235. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  236. package/dist/src/gateway/lock.js +3 -3
  237. package/dist/src/gateway/ports.js +1 -1
  238. package/dist/src/gateway/service/agent-runner.js +2 -2
  239. package/dist/src/gateway/service/marketplace-service.js +2 -2
  240. package/dist/src/gateway/service.js +5 -1
  241. package/dist/src/gateway/service.js.map +1 -1
  242. package/dist/src/gateway/session-reset-service.d.ts +1 -1
  243. package/dist/src/gateway/session-reset-service.js +1 -1
  244. package/dist/src/gateway/session-reset-service.js.map +1 -1
  245. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  246. package/dist/src/heartbeat/index.js +1 -1
  247. package/dist/src/infra/brew.js +1 -1
  248. package/dist/src/infra/node-sqlite.d.ts +1 -0
  249. package/dist/src/infra/node-sqlite.js +17 -0
  250. package/dist/src/infra/node-sqlite.js.map +1 -0
  251. package/dist/src/infra/package-json.js +1 -1
  252. package/dist/src/infra/package-update-steps.js +1 -1
  253. package/dist/src/infra/path-env.js +2 -2
  254. package/dist/src/infra/restart.js +2 -2
  255. package/dist/src/infra/sqlite-errors.d.ts +1 -0
  256. package/dist/src/infra/sqlite-errors.js +77 -0
  257. package/dist/src/infra/sqlite-errors.js.map +1 -0
  258. package/dist/src/infra/stable-node-path.js +1 -1
  259. package/dist/src/infra/unhandled-rejections.d.ts +1 -0
  260. package/dist/src/infra/unhandled-rejections.js +25 -0
  261. package/dist/src/infra/unhandled-rejections.js.map +1 -0
  262. package/dist/src/infra/update-check.js +1 -1
  263. package/dist/src/infra/update-global.js +1 -1
  264. package/dist/src/infra/update-lock.js +3 -3
  265. package/dist/src/infra/update-runner.js +1 -1
  266. package/dist/src/infra/update-startup.js +2 -2
  267. package/dist/src/infra/warning-filter.d.ts +7 -0
  268. package/dist/src/infra/warning-filter.js +59 -0
  269. package/dist/src/infra/warning-filter.js.map +1 -0
  270. package/dist/src/infra/write-file-atomic.js +2 -2
  271. package/dist/src/notes/store.d.ts +3 -9
  272. package/dist/src/notes/store.js +22 -196
  273. package/dist/src/notes/store.js.map +1 -1
  274. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  275. package/dist/src/providers/index.js +2 -2
  276. package/dist/src/providers/model-registry.js +1 -1
  277. package/dist/src/session/config-store.d.ts +6 -75
  278. package/dist/src/session/config-store.js +38 -144
  279. package/dist/src/session/config-store.js.map +1 -1
  280. package/dist/src/session/config-types.d.ts +15 -0
  281. package/dist/src/session/config-types.js +1 -0
  282. package/dist/src/session/index.d.ts +1 -3
  283. package/dist/src/session/index.js +3 -5
  284. package/dist/src/session/init-session-turn.d.ts +0 -6
  285. package/dist/src/session/init-session-turn.js +18 -18
  286. package/dist/src/session/init-session-turn.js.map +1 -1
  287. package/dist/src/session/lifecycle-timestamps.d.ts +5 -2
  288. package/dist/src/session/lifecycle-timestamps.js.map +1 -1
  289. package/dist/src/session/{parity/load-jsonl-entries.js → load-jsonl-entries.js} +1 -1
  290. package/dist/src/session/load-jsonl-entries.js.map +1 -0
  291. package/dist/src/session/manager.d.ts +5 -3
  292. package/dist/src/session/manager.js +1 -5
  293. package/dist/src/session/manager.js.map +1 -1
  294. package/dist/src/session/resolve-session.d.ts +3 -6
  295. package/dist/src/session/resolve-session.js +26 -31
  296. package/dist/src/session/resolve-session.js.map +1 -1
  297. package/dist/src/session/session-context-for-llm.js +5 -1
  298. package/dist/src/session/session-context-for-llm.js.map +1 -1
  299. package/dist/src/session/session-id.js +12 -0
  300. package/dist/src/session/session-id.js.map +1 -0
  301. package/dist/src/session/session-title.js +2 -2
  302. package/dist/src/session/session-workspace.d.ts +1 -1
  303. package/dist/src/session/session-workspace.js.map +1 -1
  304. package/dist/src/session/store.d.ts +14 -63
  305. package/dist/src/session/store.js +172 -847
  306. package/dist/src/session/store.js.map +1 -1
  307. package/dist/src/session/stored-rows-to-file-entries.d.ts +11 -0
  308. package/dist/src/session/stored-rows-to-file-entries.js +95 -0
  309. package/dist/src/session/stored-rows-to-file-entries.js.map +1 -0
  310. package/dist/src/session/transcript-events.d.ts +1 -2
  311. package/dist/src/session/transcript-events.js +5 -12
  312. package/dist/src/session/transcript-events.js.map +1 -1
  313. package/dist/src/session/transcript-format.d.ts +1 -1
  314. package/dist/src/session/transcript-format.js.map +1 -1
  315. package/dist/src/session/transcript-stats.d.ts +1 -0
  316. package/dist/src/session/transcript-stats.js +10 -0
  317. package/dist/src/session/transcript-stats.js.map +1 -0
  318. package/dist/src/share/share-auto.js +2 -2
  319. package/dist/src/share/share-store.js +3 -3
  320. package/dist/src/share/share-thumbnail.js +2 -2
  321. package/dist/src/share/share-zip.js +1 -1
  322. package/dist/src/share/site-share-store.js +3 -3
  323. package/dist/src/share/site-static-serve.js +1 -1
  324. package/dist/src/storage/sqlite/config-repository.d.ts +6 -0
  325. package/dist/src/storage/sqlite/config-repository.js +56 -0
  326. package/dist/src/storage/sqlite/config-repository.js.map +1 -0
  327. package/dist/src/storage/sqlite/connection.d.ts +38 -0
  328. package/dist/src/storage/sqlite/connection.js +258 -0
  329. package/dist/src/storage/sqlite/connection.js.map +1 -0
  330. package/dist/src/storage/sqlite/cron-run-repository.d.ts +5 -0
  331. package/dist/src/storage/sqlite/cron-run-repository.js +97 -0
  332. package/dist/src/storage/sqlite/cron-run-repository.js.map +1 -0
  333. package/dist/src/storage/sqlite/fts.d.ts +2 -0
  334. package/dist/src/storage/sqlite/fts.js +11 -0
  335. package/dist/src/storage/sqlite/fts.js.map +1 -0
  336. package/dist/src/storage/sqlite/index.d.ts +12 -0
  337. package/dist/src/storage/sqlite/index.js +13 -0
  338. package/dist/src/storage/sqlite/memory-index-repository.d.ts +18 -0
  339. package/dist/src/storage/sqlite/memory-index-repository.js +132 -0
  340. package/dist/src/storage/sqlite/memory-index-repository.js.map +1 -0
  341. package/dist/src/storage/sqlite/notes-repository.d.ts +11 -0
  342. package/dist/src/storage/sqlite/notes-repository.js +191 -0
  343. package/dist/src/storage/sqlite/notes-repository.js.map +1 -0
  344. package/dist/src/storage/sqlite/paths.d.ts +1 -0
  345. package/dist/src/storage/sqlite/paths.js +7 -0
  346. package/dist/src/storage/sqlite/paths.js.map +1 -0
  347. package/dist/src/storage/sqlite/row-mappers.d.ts +82 -0
  348. package/dist/src/storage/sqlite/row-mappers.js +164 -0
  349. package/dist/src/storage/sqlite/row-mappers.js.map +1 -0
  350. package/dist/src/storage/sqlite/schema.d.ts +5 -0
  351. package/dist/src/storage/sqlite/schema.js +43 -0
  352. package/dist/src/storage/sqlite/schema.js.map +1 -0
  353. package/dist/src/storage/sqlite/schema.sql +195 -0
  354. package/dist/src/storage/sqlite/session-metadata.d.ts +8 -0
  355. package/dist/src/storage/sqlite/session-metadata.js +83 -0
  356. package/dist/src/storage/sqlite/session-metadata.js.map +1 -0
  357. package/dist/src/storage/sqlite/session-repository.d.ts +29 -0
  358. package/dist/src/storage/sqlite/session-repository.js +268 -0
  359. package/dist/src/storage/sqlite/session-repository.js.map +1 -0
  360. package/dist/src/storage/sqlite/transaction.d.ts +11 -0
  361. package/dist/src/storage/sqlite/transaction.js +115 -0
  362. package/dist/src/storage/sqlite/transaction.js.map +1 -0
  363. package/dist/src/storage/sqlite/transcript-repository.d.ts +34 -0
  364. package/dist/src/storage/sqlite/transcript-repository.js +241 -0
  365. package/dist/src/storage/sqlite/transcript-repository.js.map +1 -0
  366. package/dist/src/tui/clipboard-image.js +3 -3
  367. package/dist/src/tui/theme-manager.js +1 -1
  368. package/dist/src/tui/tui-keybindings-file.js +1 -1
  369. package/dist/src/tui/tui-scoped-models.js +2 -2
  370. package/dist/src/tui/tui-settings.js +1 -1
  371. package/dist/src/tui/tui.js +3 -3
  372. package/dist/src/tunnel/frpc-binary.js +3 -3
  373. package/dist/src/tunnel/frpc-config.js +1 -1
  374. package/dist/src/tunnel/frpc-extract.js +1 -1
  375. package/dist/src/tunnel/tunnel-state.js +1 -1
  376. package/dist/src/utils/logger/audit.js +1 -1
  377. package/dist/src/utils/logger/log-store.js +1 -1
  378. package/dist/src/utils/logger/rotation.js +1 -1
  379. package/dist/src/voice/tts/audio.js +1 -1
  380. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  381. package/dist/src/workflows/service/workflow-session-bridge.js +41 -64
  382. package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
  383. package/dist/src/workflows/store/event-store.js +1 -1
  384. package/dist/src/workflows/store/run-store.js +1 -1
  385. package/package.json +3 -3
  386. package/dist/gateway/static/root/assets/index-Bj_l8QDp.css +0 -1
  387. package/dist/gateway/static/root/assets/notes-page-BApAirFB.js +0 -1
  388. package/dist/gateway/static/root/assets/settings-page-4VmUTzQs.js +0 -3
  389. package/dist/gateway/static/root/assets/share-preview-page-IX0TJvRd.js +0 -2
  390. package/dist/gateway/static/root/assets/url-BHHmdJYc.js +0 -3
  391. package/dist/src/agent/embedded/session-manager-cache.d.ts +0 -19
  392. package/dist/src/agent/embedded/session-manager-cache.js +0 -48
  393. package/dist/src/agent/embedded/session-manager-cache.js.map +0 -1
  394. package/dist/src/session/parity/artifacts.d.ts +0 -16
  395. package/dist/src/session/parity/artifacts.js +0 -80
  396. package/dist/src/session/parity/artifacts.js.map +0 -1
  397. package/dist/src/session/parity/jsonl-transcript-io.d.ts +0 -54
  398. package/dist/src/session/parity/jsonl-transcript-io.js +0 -236
  399. package/dist/src/session/parity/jsonl-transcript-io.js.map +0 -1
  400. package/dist/src/session/parity/load-jsonl-entries.js.map +0 -1
  401. package/dist/src/session/parity/session-id.js +0 -18
  402. package/dist/src/session/parity/session-id.js.map +0 -1
  403. package/dist/src/session/parity/sessions-json-cache.d.ts +0 -14
  404. package/dist/src/session/parity/sessions-json-cache.js +0 -98
  405. package/dist/src/session/parity/sessions-json-cache.js.map +0 -1
  406. package/dist/src/session/parity/sessions-json-file-read.d.ts +0 -6
  407. package/dist/src/session/parity/sessions-json-file-read.js +0 -19
  408. package/dist/src/session/parity/sessions-json-file-read.js.map +0 -1
  409. package/dist/src/session/parity/sessions-json-file.d.ts +0 -11
  410. package/dist/src/session/parity/sessions-json-file.js +0 -52
  411. package/dist/src/session/parity/sessions-json-file.js.map +0 -1
  412. package/dist/src/session/parity/sessions-json-patch.d.ts +0 -14
  413. package/dist/src/session/parity/sessions-json-patch.js +0 -40
  414. package/dist/src/session/parity/sessions-json-patch.js.map +0 -1
  415. package/dist/src/session/parity/transcript-file-lock.d.ts +0 -22
  416. package/dist/src/session/parity/transcript-file-lock.js +0 -142
  417. package/dist/src/session/parity/transcript-file-lock.js.map +0 -1
  418. package/dist/src/session/parity/transcript-pagination.d.ts +0 -29
  419. package/dist/src/session/parity/transcript-pagination.js +0 -132
  420. package/dist/src/session/parity/transcript-pagination.js.map +0 -1
  421. package/dist/src/session/parity/transcript-paths.d.ts +0 -13
  422. package/dist/src/session/parity/transcript-paths.js +0 -64
  423. package/dist/src/session/parity/transcript-paths.js.map +0 -1
  424. package/dist/src/session/parity/xopc-session-disk-entry.d.ts +0 -22
  425. package/dist/src/session/search-index-cache.d.ts +0 -6
  426. package/dist/src/session/search-index-cache.js +0 -44
  427. package/dist/src/session/search-index-cache.js.map +0 -1
  428. package/dist/src/session/search-index.d.ts +0 -20
  429. package/dist/src/session/search-index.js +0 -124
  430. package/dist/src/session/search-index.js.map +0 -1
  431. /package/dist/src/{session/parity/xopc-session-disk-entry.js → cron/execution-types.js} +0 -0
  432. /package/dist/src/session/{parity/load-jsonl-entries.d.ts → load-jsonl-entries.d.ts} +0 -0
  433. /package/dist/src/session/{parity/session-id.d.ts → session-id.d.ts} +0 -0
@@ -1,11 +1,11 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
2
3
  import { createLogger } from "../utils/logger/index.js";
3
4
  import { init_logger } from "../utils/logger.js";
4
- import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveCredentialsDir, resolveOAuthPath } from "../config/paths.js";
5
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
6
5
  import { getApiKeyFromEnv, init_env_keys } from "../providers/env-keys.js";
7
- import { dirname, join } from "path";
6
+ import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveCredentialsDir, resolveOAuthPath } from "../config/paths.js";
8
7
  import { mkdir, readFile, rm } from "fs/promises";
8
+ import { dirname, join } from "path";
9
9
  //#region src/auth/credentials.ts
10
10
  function getCredentialResolver(options) {
11
11
  return new CredentialResolver(options);
@@ -1,6 +1,6 @@
1
1
  import { init_write_file_atomic, writeTextAtomicSync } from "../../infra/write-file-atomic.js";
2
- import path from "node:path";
3
2
  import { chmodSync, existsSync, mkdirSync, readFileSync } from "node:fs";
3
+ import path from "node:path";
4
4
  import { homedir } from "os";
5
5
  //#region src/auth/profiles/store.ts
6
6
  /**
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
3
2
  import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveOAuthPath } from "../config/paths.js";
4
3
  import { init_loader, loadConfig } from "../config/loader.js";
4
+ import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
5
5
  import { existsSync, readFileSync } from "node:fs";
6
6
  //#region src/auth/sync-provider-auth.ts
7
7
  /**
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { homedir } from "node:os";
3
2
  import { isAbsolute, relative, resolve, sep } from "node:path";
3
+ import { homedir } from "node:os";
4
4
  //#region src/browser/cache-dir-policy.ts
5
5
  function expandHome(input) {
6
6
  if (input === "~") return homedir();
@@ -2,10 +2,10 @@ import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { loadPlaywrightCoreModule } from "./providers/playwright-doctor.js";
4
4
  import { pickFreePort } from "./free-port.js";
5
- import { homedir, platform } from "node:os";
6
- import { join } from "node:path";
7
5
  import { existsSync } from "node:fs";
8
6
  import { mkdir, rm } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ import { homedir, platform } from "node:os";
9
9
  import { spawn } from "node:child_process";
10
10
  //#region src/browser/cdp-local-launcher.ts
11
11
  /**
@@ -1,15 +1,15 @@
1
1
  import { PACKAGE_VERSION, init_package_version } from "../../package-version.js";
2
- import { assertCacheDir, init_cache_dir_policy } from "../cache-dir-policy.js";
2
+ import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
3
3
  import { createLogger } from "../../utils/logger/index.js";
4
4
  import { init_logger } from "../../utils/logger.js";
5
5
  import { init_paths, resolveBinDir } from "../../config/paths.js";
6
- import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
6
+ import { assertCacheDir, init_cache_dir_policy } from "../cache-dir-policy.js";
7
7
  import { resolvePackageRoot } from "../../infra/update-check.js";
8
- import { dirname, join } from "node:path";
9
8
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
10
9
  import { readFile, readdir, rm } from "node:fs/promises";
11
- import { spawn } from "node:child_process";
10
+ import { dirname, join } from "node:path";
12
11
  import { fileURLToPath } from "node:url";
12
+ import { spawn } from "node:child_process";
13
13
  //#region src/browser/providers/browser-ext-install.ts
14
14
  /**
15
15
  * Install bundled Chrome extension artifacts into {resolveBinDir()}/browser-ext/.
@@ -1,15 +1,15 @@
1
- import { assertCacheDir, expandHome, init_cache_dir_policy } from "../cache-dir-policy.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
4
3
  import { init_paths, resolveBinDir } from "../../config/paths.js";
4
+ import { assertCacheDir, expandHome, init_cache_dir_policy } from "../cache-dir-policy.js";
5
5
  import { loadPlaywrightCoreModule } from "./playwright-doctor.js";
6
6
  import { WEBDRIVER_OVERRIDE_SCRIPT, buildStealthArgs, filterCloakBrowserExtraArgs, generateFingerprintSeed, makeExecutable, removeQuarantineAttr } from "../stealth.js";
7
7
  import { pickFreePort } from "../free-port.js";
8
- import { arch, platform, tmpdir } from "node:os";
9
- import { join, resolve } from "node:path";
10
- import { createReadStream, createWriteStream } from "node:fs";
11
8
  import { createHash } from "node:crypto";
9
+ import { createReadStream, createWriteStream } from "node:fs";
12
10
  import { mkdir, mkdtemp, rm, stat } from "node:fs/promises";
11
+ import { join, resolve } from "node:path";
12
+ import { arch, platform, tmpdir } from "node:os";
13
13
  import { spawn } from "node:child_process";
14
14
  import { Readable, Transform } from "node:stream";
15
15
  import AdmZip from "adm-zip";
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from "node:module";
2
- import { dirname, join } from "node:path";
3
2
  import { existsSync } from "node:fs";
4
3
  import { stat } from "node:fs/promises";
4
+ import { dirname, join } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
  //#region src/browser/providers/playwright-doctor.ts
7
7
  /** Root directory of the `playwright-core` package (Electron extraResources or node_modules). */
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
- import { platform } from "node:os";
4
3
  import { chmod, stat } from "node:fs/promises";
4
+ import { platform } from "node:os";
5
5
  import { exec } from "node:child_process";
6
6
  import { promisify } from "node:util";
7
7
  //#region src/browser/stealth.ts
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { join, resolve } from "path";
4
3
  import { mkdir, writeFile } from "fs/promises";
4
+ import { join, resolve } from "path";
5
5
  import { randomBytes } from "crypto";
6
6
  //#region src/channels/attachments/inbound-persist.ts
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { join, resolve } from "path";
4
3
  import { mkdir, writeFile } from "fs/promises";
4
+ import { join, resolve } from "path";
5
5
  import { randomBytes } from "crypto";
6
6
  //#region src/channels/attachments/outbound-tts-persist.ts
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { init_write_file_atomic, writeTextAtomicSync } from "../../infra/write-file-atomic.js";
2
+ import { randomUUID } from "node:crypto";
2
3
  import { join } from "path";
3
4
  import { existsSync, mkdirSync, readFileSync } from "fs";
4
- import { randomUUID } from "node:crypto";
5
5
  //#region src/channels/outbound/persist-store.ts
6
6
  /**
7
7
  * Durable outbound queue (crash recovery): JSON file under agent internal dir.
@@ -1,5 +1,5 @@
1
- import path from "node:path";
2
1
  import fs from "node:fs";
2
+ import path from "node:path";
3
3
  //#region src/channels/pairing/allow-from-file.ts
4
4
  function readAllowFromFile(filePath) {
5
5
  try {
@@ -1,8 +1,8 @@
1
1
  import { appendAllowFromIdSync } from "./allow-from-file.js";
2
2
  import "./pairing-constants.js";
3
- import path from "node:path";
4
- import fs from "node:fs";
5
3
  import crypto from "node:crypto";
4
+ import fs from "node:fs";
5
+ import path from "node:path";
6
6
  //#region src/channels/pairing/pairing-store.ts
7
7
  const PAIRING_CODE_LENGTH = 8;
8
8
  const PAIRING_CODE_ALPHABET = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
@@ -1,9 +1,9 @@
1
1
  import { init_agent_scope, normalizeAgentId, resolveAgentProfileDir } from "../agent/agent-scope.js";
2
- import { init_agent_session_key, resolveAgentIdFromSessionKey } from "../routing/agent-session-key.js";
3
2
  import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
3
+ import { init_agent_session_key, resolveAgentIdFromSessionKey } from "../routing/agent-session-key.js";
4
4
  import { commandRegistry } from "./registry.js";
5
- import { join } from "node:path";
6
5
  import { readFile } from "node:fs/promises";
6
+ import { join } from "node:path";
7
7
  //#region src/chat-commands/agent-edit.ts
8
8
  /**
9
9
  * /agent-edit — open the current chat as an agent profile editing session.
@@ -1,9 +1,9 @@
1
- import { ConfigSchema, init_schema } from "../../config/schema.js";
2
- import { init_session_key, parseSessionKey } from "../../routing/session-key.js";
3
1
  import { createLogger } from "../../utils/logger/index.js";
4
2
  import { init_logger } from "../../utils/logger.js";
5
3
  import { init_paths, resolveConfigPath } from "../../config/paths.js";
4
+ import { ConfigSchema, init_schema } from "../../config/schema.js";
6
5
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
6
+ import { init_session_key, parseSessionKey } from "../../routing/session-key.js";
7
7
  import { commandRegistry } from "../registry.js";
8
8
  import { resolveAllowlistMatchSimple } from "../../channels/security.js";
9
9
  import { parseConfigValue } from "../config-value.js";
@@ -4,8 +4,8 @@ import { init_loader, saveConfig } from "../config/loader.js";
4
4
  import { effectiveWorkspacePathForSession } from "../session/session-workspace.js";
5
5
  import { getRoutingInfo, getSessionDisplayName } from "./session-key.js";
6
6
  import { wrapMarkdownExportAsHtml } from "../session/chat-export.js";
7
- import { join } from "path";
8
7
  import { mkdir, writeFile } from "fs/promises";
8
+ import { join } from "path";
9
9
  //#region src/chat-commands/context.ts
10
10
  init_logger();
11
11
  init_loader();
@@ -1,5 +1,5 @@
1
- import { ConfigSchema, init_schema } from "../../config/schema.js";
2
1
  import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
2
+ import { ConfigSchema, init_schema } from "../../config/schema.js";
3
3
  import { resolveGatewayLocalClientHost } from "../../config/gateway-bind.js";
4
4
  import { formatExamples, register } from "../registry.js";
5
5
  import { existsSync, readFileSync } from "fs";
@@ -1,7 +1,7 @@
1
1
  import { ConfigSchema, init_schema } from "../../../../config/schema.js";
2
2
  import { init_loader, loadConfig, saveConfig } from "../../../../config/loader.js";
3
- import { dirname } from "node:path";
4
3
  import { existsSync, mkdirSync, readFileSync } from "node:fs";
4
+ import { dirname } from "node:path";
5
5
  //#region src/cli/commands/doctor/checks/config-health.ts
6
6
  init_loader();
7
7
  init_schema();
@@ -1,6 +1,6 @@
1
+ import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "../../../../providers/env-keys.js";
1
2
  import { getAgentDefaultModelRef, init_schema, parseModelRef } from "../../../../config/schema.js";
2
3
  import { init_loader, loadConfig } from "../../../../config/loader.js";
3
- import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "../../../../providers/env-keys.js";
4
4
  import { existsSync } from "node:fs";
5
5
  //#region src/cli/commands/doctor/checks/provider-auth.ts
6
6
  init_loader();
@@ -1,42 +1,11 @@
1
- import { init_agent_scope, listAgentEntries, resolveDefaultAgentId } from "../../../../agent/agent-scope.js";
2
- import { init_session_key, parseSessionKey } from "../../../../routing/session-key.js";
3
- import { init_transcript_paths, resolveSessionFilePath } from "../../../../session/parity/transcript-paths.js";
4
- import { FILENAMES, init_paths, resolveSessionsDir } from "../../../../config/paths.js";
5
1
  import { init_loader, loadConfig } from "../../../../config/loader.js";
6
- import { basename, join } from "node:path";
7
- import { existsSync, readFileSync, readdirSync } from "node:fs";
2
+ import { requireXopcDatabase } from "../../../../storage/sqlite/connection.js";
3
+ import { getSqliteDatabase } from "../../../../storage/sqlite/transaction.js";
4
+ import { getCurrentTranscriptId, listSessionMetadata } from "../../../../storage/sqlite/session-repository.js";
5
+ import "../../../../storage/sqlite/index.js";
6
+ import { existsSync } from "node:fs";
8
7
  //#region src/cli/commands/doctor/checks/session-integrity.ts
9
- init_agent_scope();
10
8
  init_loader();
11
- init_paths();
12
- init_session_key();
13
- init_transcript_paths();
14
- function discoverSessionMapLocations(config, stateDir) {
15
- const agentIds = new Set([resolveDefaultAgentId(config), ...listAgentEntries(config).map((agent) => agent.id)]);
16
- const agentsRoot = join(stateDir, "agents");
17
- if (existsSync(agentsRoot)) {
18
- for (const entry of readdirSync(agentsRoot, { withFileTypes: true })) if (entry.isDirectory()) agentIds.add(entry.name);
19
- }
20
- const seenMapPaths = /* @__PURE__ */ new Set();
21
- const locations = [];
22
- for (const agentId of agentIds) {
23
- const sessionsDir = resolveSessionsDir(config, agentId);
24
- const mapPath = join(sessionsDir, FILENAMES.SESSIONS_MAP);
25
- if (seenMapPaths.has(mapPath)) continue;
26
- seenMapPaths.add(mapPath);
27
- locations.push({
28
- agentId,
29
- sessionsDir,
30
- mapPath
31
- });
32
- }
33
- return locations;
34
- }
35
- function readSessionMap(mapPath) {
36
- const parsed = JSON.parse(readFileSync(mapPath, "utf-8"));
37
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error("invalid sessions map");
38
- return parsed;
39
- }
40
9
  async function checkSessionIntegrity(ctx) {
41
10
  if (!ctx.options.deep) return {
42
11
  id: "session-integrity",
@@ -52,81 +21,49 @@ async function checkSessionIntegrity(ctx) {
52
21
  message: "No config file; skipped.",
53
22
  hints: []
54
23
  };
55
- let config;
56
24
  try {
57
- config = loadConfig(ctx.configPath);
25
+ loadConfig(ctx.configPath);
58
26
  } catch {
59
27
  return {
60
28
  id: "session-integrity",
61
29
  label: "Sessions",
62
- status: "skip",
63
- message: "Config could not be loaded; skipped.",
64
- hints: []
30
+ status: "warn",
31
+ message: "Config invalid; session scan skipped.",
32
+ hints: ["Fix xopc.json before running session integrity checks."]
65
33
  };
66
34
  }
67
- const locations = discoverSessionMapLocations(config, ctx.stateDir);
68
- const missingMaps = [];
69
- const invalidMaps = [];
70
- const missingTranscripts = [];
71
- const agentMismatches = [];
72
- const orphanTranscripts = [];
73
- let sessionCount = 0;
74
- for (const location of locations) {
75
- if (!existsSync(location.sessionsDir)) continue;
76
- if (!existsSync(location.mapPath)) {
77
- missingMaps.push(location.mapPath);
35
+ requireXopcDatabase();
36
+ const issues = [];
37
+ const db = getSqliteDatabase();
38
+ const integrityFailures = db.prepare("PRAGMA integrity_check").all().map((row) => row.integrity_check).filter((value) => value !== "ok");
39
+ for (const failure of integrityFailures) issues.push(`database integrity: ${failure}`);
40
+ const { items } = listSessionMetadata({ limit: 1e5 });
41
+ for (const session of items) {
42
+ const transcriptId = getCurrentTranscriptId(session.key);
43
+ if (!transcriptId) {
44
+ issues.push(`missing transcript for ${session.key}`);
78
45
  continue;
79
46
  }
80
- let map;
81
- try {
82
- map = readSessionMap(location.mapPath);
83
- } catch {
84
- invalidMaps.push(location.mapPath);
85
- continue;
86
- }
87
- const referencedTranscriptFiles = /* @__PURE__ */ new Set();
88
- for (const [sessionKey, entry] of Object.entries(map)) {
89
- sessionCount++;
90
- const parsed = parseSessionKey(sessionKey);
91
- if (parsed && parsed.agentId !== location.agentId) agentMismatches.push(`${sessionKey} in agent ${location.agentId}`);
92
- if (!entry?.sessionId) {
93
- missingTranscripts.push(sessionKey);
94
- continue;
95
- }
96
- try {
97
- const transcriptPath = resolveSessionFilePath(entry.sessionId, entry, { sessionsDir: location.sessionsDir });
98
- referencedTranscriptFiles.add(basename(transcriptPath));
99
- if (!existsSync(transcriptPath)) missingTranscripts.push(sessionKey);
100
- } catch {
101
- missingTranscripts.push(sessionKey);
102
- }
103
- }
104
- for (const file of readdirSync(location.sessionsDir, { withFileTypes: true })) {
105
- if (!file.isFile() || !file.name.endsWith(".jsonl") || file.name.includes(".checkpoint.")) continue;
106
- if (!referencedTranscriptFiles.has(file.name)) orphanTranscripts.push(join(location.sessionsDir, file.name));
107
- }
47
+ if (transcriptId !== session.transcriptId) issues.push(`transcript id mismatch for ${session.key}`);
48
+ if (!db.prepare(`SELECT transcript_id FROM transcripts WHERE transcript_id = ? AND status = 'active'`).get(transcriptId)?.transcript_id) issues.push(`active transcript row missing for ${session.key}`);
108
49
  }
109
- const hints = [
110
- ...missingMaps.slice(0, 3).map((path) => `Missing sessions.json: ${path}`),
111
- ...invalidMaps.slice(0, 3).map((path) => `Invalid sessions.json: ${path}`),
112
- ...agentMismatches.slice(0, 3).map((item) => `Session key agent mismatch: ${item}`),
113
- ...missingTranscripts.slice(0, 3).map((key) => `Missing transcript for: ${key}`),
114
- ...orphanTranscripts.slice(0, 3).map((path) => `Orphan transcript: ${path}`)
115
- ];
116
- const warningCount = missingMaps.length + invalidMaps.length + missingTranscripts.length + agentMismatches.length + orphanTranscripts.length;
117
- if (warningCount > 0) return {
50
+ const orphanTranscripts = db.prepare(`SELECT t.transcript_id FROM transcripts t
51
+ LEFT JOIN sessions s ON s.current_transcript_id = t.transcript_id
52
+ WHERE t.status = 'active' AND s.session_key IS NULL`).all();
53
+ for (const row of orphanTranscripts) issues.push(`orphan active transcript ${row.transcript_id}`);
54
+ if (issues.length === 0) return {
118
55
  id: "session-integrity",
119
56
  label: "Sessions",
120
- status: "warn",
121
- message: `Scanned ${locations.length} agent session dir(s), ${sessionCount} session(s); found ${warningCount} issue(s).`,
122
- hints
57
+ status: "pass",
58
+ message: `SQLite session store OK (${items.length} session(s)).`,
59
+ hints: []
123
60
  };
124
61
  return {
125
62
  id: "session-integrity",
126
63
  label: "Sessions",
127
- status: "pass",
128
- message: `Scanned ${locations.length} agent session dir(s), ${sessionCount} session(s); session maps and JSONL transcripts are consistent.`,
129
- hints: []
64
+ status: "warn",
65
+ message: `${issues.length} session integrity issue(s).`,
66
+ hints: issues.slice(0, 8)
130
67
  };
131
68
  }
132
69
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"session-integrity.js","names":[],"sources":["../../../../../../src/cli/commands/doctor/checks/session-integrity.ts"],"sourcesContent":["import { existsSync, readdirSync, readFileSync } from 'node:fs';\nimport { basename, join } from 'node:path';\n\nimport { listAgentEntries, resolveDefaultAgentId } from '../../../../agent/agent-scope.js';\nimport { loadConfig } from '../../../../config/loader.js';\nimport type { Config } from '../../../../config/schema.js';\nimport { FILENAMES, resolveSessionsDir } from '../../../../config/paths.js';\nimport { parseSessionKey } from '../../../../routing/session-key.js';\nimport { resolveSessionFilePath } from '../../../../session/parity/transcript-paths.js';\nimport type { XopcSessionDiskEntry } from '../../../../session/parity/xopc-session-disk-entry.js';\nimport type { CheckResult, DoctorContext } from '../types.js';\n\ninterface SessionMapLocation {\n agentId: string;\n sessionsDir: string;\n mapPath: string;\n}\n\nfunction discoverSessionMapLocations(config: Config, stateDir: string): SessionMapLocation[] {\n const agentIds = new Set<string>([\n resolveDefaultAgentId(config),\n ...listAgentEntries(config).map((agent) => agent.id),\n ]);\n\n const agentsRoot = join(stateDir, 'agents');\n if (existsSync(agentsRoot)) {\n for (const entry of readdirSync(agentsRoot, { withFileTypes: true })) {\n if (entry.isDirectory()) {\n agentIds.add(entry.name);\n }\n }\n }\n\n const seenMapPaths = new Set<string>();\n const locations: SessionMapLocation[] = [];\n for (const agentId of agentIds) {\n const sessionsDir = resolveSessionsDir(config, agentId);\n const mapPath = join(sessionsDir, FILENAMES.SESSIONS_MAP);\n if (seenMapPaths.has(mapPath)) {\n continue;\n }\n seenMapPaths.add(mapPath);\n locations.push({ agentId, sessionsDir, mapPath });\n }\n return locations;\n}\n\nfunction readSessionMap(mapPath: string): Record<string, XopcSessionDiskEntry> {\n const parsed = JSON.parse(readFileSync(mapPath, 'utf-8')) as unknown;\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('invalid sessions map');\n }\n return parsed as Record<string, XopcSessionDiskEntry>;\n}\n\nexport async function checkSessionIntegrity(ctx: DoctorContext): Promise<CheckResult> {\n if (!ctx.options.deep) {\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'skip',\n message: 'Deep mode off; session scan skipped.',\n hints: ['Run: xopc doctor --deep'],\n };\n }\n\n if (!existsSync(ctx.configPath)) {\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'skip',\n message: 'No config file; skipped.',\n hints: [],\n };\n }\n\n let config: Config;\n try {\n config = loadConfig(ctx.configPath);\n } catch {\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'skip',\n message: 'Config could not be loaded; skipped.',\n hints: [],\n };\n }\n\n const locations = discoverSessionMapLocations(config, ctx.stateDir);\n const missingMaps: string[] = [];\n const invalidMaps: string[] = [];\n const missingTranscripts: string[] = [];\n const agentMismatches: string[] = [];\n const orphanTranscripts: string[] = [];\n let sessionCount = 0;\n\n for (const location of locations) {\n if (!existsSync(location.sessionsDir)) {\n continue;\n }\n if (!existsSync(location.mapPath)) {\n missingMaps.push(location.mapPath);\n continue;\n }\n\n let map: Record<string, XopcSessionDiskEntry>;\n try {\n map = readSessionMap(location.mapPath);\n } catch {\n invalidMaps.push(location.mapPath);\n continue;\n }\n\n const referencedTranscriptFiles = new Set<string>();\n for (const [sessionKey, entry] of Object.entries(map)) {\n sessionCount++;\n const parsed = parseSessionKey(sessionKey);\n if (parsed && parsed.agentId !== location.agentId) {\n agentMismatches.push(`${sessionKey} in agent ${location.agentId}`);\n }\n if (!entry?.sessionId) {\n missingTranscripts.push(sessionKey);\n continue;\n }\n try {\n const transcriptPath = resolveSessionFilePath(entry.sessionId, entry, { sessionsDir: location.sessionsDir });\n referencedTranscriptFiles.add(basename(transcriptPath));\n if (!existsSync(transcriptPath)) {\n missingTranscripts.push(sessionKey);\n }\n } catch {\n missingTranscripts.push(sessionKey);\n }\n }\n\n for (const file of readdirSync(location.sessionsDir, { withFileTypes: true })) {\n if (!file.isFile() || !file.name.endsWith('.jsonl') || file.name.includes('.checkpoint.')) {\n continue;\n }\n if (!referencedTranscriptFiles.has(file.name)) {\n orphanTranscripts.push(join(location.sessionsDir, file.name));\n }\n }\n }\n\n const hints = [\n ...missingMaps.slice(0, 3).map((path) => `Missing sessions.json: ${path}`),\n ...invalidMaps.slice(0, 3).map((path) => `Invalid sessions.json: ${path}`),\n ...agentMismatches.slice(0, 3).map((item) => `Session key agent mismatch: ${item}`),\n ...missingTranscripts.slice(0, 3).map((key) => `Missing transcript for: ${key}`),\n ...orphanTranscripts.slice(0, 3).map((path) => `Orphan transcript: ${path}`),\n ];\n\n const warningCount =\n missingMaps.length + invalidMaps.length + missingTranscripts.length + agentMismatches.length + orphanTranscripts.length;\n\n if (warningCount > 0) {\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'warn',\n message: `Scanned ${locations.length} agent session dir(s), ${sessionCount} session(s); found ${warningCount} issue(s).`,\n hints,\n };\n }\n\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'pass',\n message: `Scanned ${locations.length} agent session dir(s), ${sessionCount} session(s); session maps and JSONL transcripts are consistent.`,\n hints: [],\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"session-integrity.js","names":[],"sources":["../../../../../../src/cli/commands/doctor/checks/session-integrity.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\n\nimport { loadConfig } from '../../../../config/loader.js';\nimport {\n getCurrentTranscriptId,\n getSqliteDatabase,\n requireXopcDatabase,\n listSessionMetadata,\n} from '../../../../storage/sqlite/index.js';\nimport type { CheckResult, DoctorContext } from '../types.js';\n\nexport async function checkSessionIntegrity(ctx: DoctorContext): Promise<CheckResult> {\n if (!ctx.options.deep) {\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'skip',\n message: 'Deep mode off; session scan skipped.',\n hints: ['Run: xopc doctor --deep'],\n };\n }\n\n if (!existsSync(ctx.configPath)) {\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'skip',\n message: 'No config file; skipped.',\n hints: [],\n };\n }\n\n try {\n loadConfig(ctx.configPath);\n } catch {\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'warn',\n message: 'Config invalid; session scan skipped.',\n hints: ['Fix xopc.json before running session integrity checks.'],\n };\n }\n\n requireXopcDatabase();\n\n const issues: string[] = [];\n const db = getSqliteDatabase();\n\n const integrity = db.prepare('PRAGMA integrity_check').all() as Array<{ integrity_check: string }>;\n const integrityFailures = integrity\n .map((row) => row.integrity_check)\n .filter((value) => value !== 'ok');\n for (const failure of integrityFailures) {\n issues.push(`database integrity: ${failure}`);\n }\n\n const { items } = listSessionMetadata({ limit: 100_000 });\n\n for (const session of items) {\n const transcriptId = getCurrentTranscriptId(session.key);\n if (!transcriptId) {\n issues.push(`missing transcript for ${session.key}`);\n continue;\n }\n if (transcriptId !== session.transcriptId) {\n issues.push(`transcript id mismatch for ${session.key}`);\n }\n const transcript = db\n .prepare(`SELECT transcript_id FROM transcripts WHERE transcript_id = ? AND status = 'active'`)\n .get(transcriptId) as { transcript_id?: string } | undefined;\n if (!transcript?.transcript_id) {\n issues.push(`active transcript row missing for ${session.key}`);\n }\n }\n\n const orphanTranscripts = db\n .prepare(\n `SELECT t.transcript_id FROM transcripts t\n LEFT JOIN sessions s ON s.current_transcript_id = t.transcript_id\n WHERE t.status = 'active' AND s.session_key IS NULL`,\n )\n .all() as Array<{ transcript_id: string }>;\n for (const row of orphanTranscripts) {\n issues.push(`orphan active transcript ${row.transcript_id}`);\n }\n\n if (issues.length === 0) {\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'pass',\n message: `SQLite session store OK (${items.length} session(s)).`,\n hints: [],\n };\n }\n\n return {\n id: 'session-integrity',\n label: 'Sessions',\n status: 'warn',\n message: `${issues.length} session integrity issue(s).`,\n hints: issues.slice(0, 8),\n };\n}\n"],"mappings":";;;;;;;aAE0D;AAS1D,eAAsB,sBAAsB,KAA0C;AACpF,KAAI,CAAC,IAAI,QAAQ,KACf,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,CAAC,0BAA0B;EACnC;AAGH,KAAI,CAAC,WAAW,IAAI,WAAW,CAC7B,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS;EACT,OAAO,EAAE;EACV;AAGH,KAAI;AACF,aAAW,IAAI,WAAW;SACpB;AACN,SAAO;GACL,IAAI;GACJ,OAAO;GACP,QAAQ;GACR,SAAS;GACT,OAAO,CAAC,yDAAyD;GAClE;;AAGH,sBAAqB;CAErB,MAAM,SAAmB,EAAE;CAC3B,MAAM,KAAK,mBAAmB;CAG9B,MAAM,oBADY,GAAG,QAAQ,yBAAyB,CAAC,KACpB,CAChC,KAAK,QAAQ,IAAI,gBAAgB,CACjC,QAAQ,UAAU,UAAU,KAAK;AACpC,MAAK,MAAM,WAAW,kBACpB,QAAO,KAAK,uBAAuB,UAAU;CAG/C,MAAM,EAAE,UAAU,oBAAoB,EAAE,OAAO,KAAS,CAAC;AAEzD,MAAK,MAAM,WAAW,OAAO;EAC3B,MAAM,eAAe,uBAAuB,QAAQ,IAAI;AACxD,MAAI,CAAC,cAAc;AACjB,UAAO,KAAK,0BAA0B,QAAQ,MAAM;AACpD;;AAEF,MAAI,iBAAiB,QAAQ,aAC3B,QAAO,KAAK,8BAA8B,QAAQ,MAAM;AAK1D,MAAI,CAHe,GAChB,QAAQ,sFAAsF,CAC9F,IAAI,aACQ,EAAE,cACf,QAAO,KAAK,qCAAqC,QAAQ,MAAM;;CAInE,MAAM,oBAAoB,GACvB,QACC;;4DAGD,CACA,KAAK;AACR,MAAK,MAAM,OAAO,kBAChB,QAAO,KAAK,4BAA4B,IAAI,gBAAgB;AAG9D,KAAI,OAAO,WAAW,EACpB,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS,4BAA4B,MAAM,OAAO;EAClD,OAAO,EAAE;EACV;AAGH,QAAO;EACL,IAAI;EACJ,OAAO;EACP,QAAQ;EACR,SAAS,GAAG,OAAO,OAAO;EAC1B,OAAO,OAAO,MAAM,GAAG,EAAE;EAC1B"}
@@ -1,5 +1,5 @@
1
- import { join } from "node:path";
2
1
  import { accessSync, chmodSync, constants, existsSync, mkdirSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
3
  //#region src/cli/commands/doctor/checks/state-integrity.ts
4
4
  function isWritable(dir) {
5
5
  try {
@@ -1,8 +1,8 @@
1
1
  import { init_agent_scope, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../../../agent/agent-scope.js";
2
2
  import { WORKSPACE_FILES, init_paths } from "../../../../config/paths.js";
3
3
  import { init_loader, loadConfig } from "../../../../config/loader.js";
4
- import { join } from "node:path";
5
4
  import { existsSync } from "node:fs";
5
+ import { join } from "node:path";
6
6
  //#region src/cli/commands/doctor/checks/workspace-status.ts
7
7
  init_agent_scope();
8
8
  init_loader();
@@ -12,8 +12,8 @@ import { runGatewayLoop } from "../../gateway/run-loop.js";
12
12
  import "../../gateway/index.js";
13
13
  import { colors } from "../utils/colors.js";
14
14
  import { initWorkspace } from "../utils/init-workspace.js";
15
- import { join, resolve } from "node:path";
16
15
  import { existsSync, mkdirSync, readFileSync, symlinkSync, unlinkSync, watch } from "node:fs";
16
+ import { join, resolve } from "node:path";
17
17
  import { Command } from "commander";
18
18
  //#region src/cli/commands/extension-dev.ts
19
19
  init_loader();
@@ -7,8 +7,8 @@ import { installExtensionFromStoreZip, installFromLocal, installFromNpm, peekExt
7
7
  import { fetchRegistry, findExtension, getExtensionMarketplaceStoreBaseUrl, listExtensions, searchExtensions } from "../../extensions/marketplace.js";
8
8
  import { downloadExtensionStoreZipBuffer, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl } from "../../agent/skills/marketplace/adapters/store/store-api-client.js";
9
9
  import { colors } from "../utils/colors.js";
10
- import { join, resolve } from "node:path";
11
10
  import { existsSync, readFileSync, rmSync, statSync } from "node:fs";
11
+ import { join, resolve } from "node:path";
12
12
  import { execSync } from "node:child_process";
13
13
  import { Command } from "commander";
14
14
  import semver from "semver";
@@ -4,8 +4,8 @@ import { init_logger } from "../../utils/logger.js";
4
4
  import { normalizeExtensionManifest } from "../../extensions/normalize-manifest.js";
5
5
  import { checkEngineCompatibility } from "../../extensions/engine-check.js";
6
6
  import { colors } from "../utils/colors.js";
7
- import { isAbsolute, join, resolve } from "node:path";
8
7
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync } from "node:fs";
8
+ import { isAbsolute, join, resolve } from "node:path";
9
9
  import { execSync } from "node:child_process";
10
10
  import { Command } from "commander";
11
11
  //#region src/cli/commands/extension-pack.ts
@@ -1,7 +1,7 @@
1
1
  import { getContextWithOpts } from "../../context.js";
2
- import path from "node:path";
3
2
  import { existsSync, statSync, watch } from "node:fs";
4
3
  import { readFile } from "node:fs/promises";
4
+ import path from "node:path";
5
5
  import { Command } from "commander";
6
6
  //#region src/cli/commands/gateway/logs.ts
7
7
  function parseLineCount(value) {
@@ -8,8 +8,8 @@ import { formatExamples, register } from "../registry.js";
8
8
  import { getContextWithOpts } from "../context.js";
9
9
  import "../../agent/image/index.js";
10
10
  import { colors } from "../utils/colors.js";
11
- import { join, resolve } from "node:path";
12
11
  import { mkdir, writeFile } from "node:fs/promises";
12
+ import { join, resolve } from "node:path";
13
13
  import { Command } from "commander";
14
14
  //#region src/cli/commands/image.ts
15
15
  init_loader();
@@ -1,14 +1,14 @@
1
- import { resolveStateDir } from "../../config/paths-state.js";
2
- import { resolveAgentWorkspaceDir } from "../../agent/agent-scope.js";
1
+ import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
3
2
  import { createLogger } from "../../utils/logger/index.js";
4
3
  import { init_logger } from "../../utils/logger.js";
5
- import { WORKSPACE_FILES, init_paths, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAgentProfileDir, resolveBinDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveExtensionsDir, resolveInboxDir, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogsDir, resolveSessionsDir, resolveSkillsDir, resolveToolsDir, resolveWorkspaceStateDir, resolveWorkspaceStatePath } from "../../config/paths.js";
6
- import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
4
+ import { resolveStateDir } from "../../config/paths-state.js";
5
+ import { resolveAgentWorkspaceDir } from "../../agent/agent-scope.js";
6
+ import { WORKSPACE_FILES, init_paths, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAgentProfileDir, resolveBinDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveExtensionsDir, resolveInboxDir, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogsDir, resolveSkillsDir, resolveToolsDir, resolveWorkspaceStateDir, resolveWorkspaceStatePath } from "../../config/paths.js";
7
7
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
8
8
  import { formatExamples, register } from "../registry.js";
9
+ import { mkdir, writeFile } from "fs/promises";
9
10
  import { join } from "path";
10
11
  import { existsSync } from "fs";
11
- import { mkdir, writeFile } from "fs/promises";
12
12
  import { Command } from "commander";
13
13
  //#region src/cli/commands/init.ts
14
14
  init_write_file_atomic();
@@ -47,8 +47,6 @@ async function initCommand(options = {}) {
47
47
  const cfg = loadConfig(configPath);
48
48
  await mkdir(resolveAgentHomeDir(cfg, agentId), { recursive: true });
49
49
  await mkdir(resolveAgentProfileDir(cfg, agentId), { recursive: true });
50
- await mkdir(resolveSessionsDir(cfg, agentId), { recursive: true });
51
- await mkdir(join(resolveSessionsDir(cfg, agentId), "archive"), { recursive: true });
52
50
  await mkdir(resolveAgentDir(cfg, agentId), { recursive: true });
53
51
  await mkdir(join(resolveAgentDir(cfg, agentId), "credentials"), { recursive: true });
54
52
  const wsRoot = resolveAgentWorkspaceDir(cfg, agentId);