@xopcai/xopc 0.0.136 → 0.0.138

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 (271) hide show
  1. package/README.md +4 -0
  2. package/README.zh-CN.md +4 -0
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/demo-memory/src/index.js +4 -0
  5. package/dist/extensions/demo-memory/src/index.js.map +1 -1
  6. package/dist/extensions/telegram/xopc.extension.json +1 -1
  7. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CER17NHM.js → agent-avatar-dicebear-CIsGDJzd.js} +1 -1
  8. package/dist/gateway/static/root/assets/agents-fX97A6iN.js +2 -0
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-B3Ap_wpX.js → app-management-settings-panel-ByM4Bzwm.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-3kBO22Xd.js → appearance-settings-BF_poRd3.js} +1 -1
  11. package/dist/gateway/static/root/assets/{apps-page-BHYbGQcZ.js → apps-page-BssdA5Qc.js} +1 -1
  12. package/dist/gateway/static/root/assets/{archive-plugin-D_vGeNB8.js → archive-plugin-DJaYoyGn.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-hWV_8pHL.js → attachment-load-xx6dBaZU.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automation-suggestion-card-DVKmVTIo.js → automation-suggestion-card-BMvGqYob.js} +1 -1
  15. package/dist/gateway/static/root/assets/{automations-page-BCTXpOBp.js → automations-page-Dip8ZFmx.js} +1 -1
  16. package/dist/gateway/static/root/assets/{binary-plugins-BuXIeSPc.js → binary-plugins-CuPLWibr.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-C1m0u-UU.js → block-editor-bzfvlJnh.js} +58 -54
  18. package/dist/gateway/static/root/assets/{browser-settings-page-ChUF08V5.js → browser-settings-page-lbx_8Dku.js} +4 -4
  19. package/dist/gateway/static/root/assets/{capability-presets-api-B7WWYaEh.js → capability-presets-api-X4Imbf8n.js} +1 -1
  20. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-D_Bh1PnA.js → capability-presets-settings-panel-v9JgKjJu.js} +1 -1
  21. package/dist/gateway/static/root/assets/{channel-recipient-api-sV06LCht.js → channel-recipient-api-DllrPmp-.js} +1 -1
  22. package/dist/gateway/static/root/assets/{channels-settings-BI2ChQc7.js → channels-settings-CED7Oy5Y.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-status-swr-EUwWYx8l.js +1 -0
  24. package/dist/gateway/static/root/assets/{connectors-page-qgvEp09M.js → connectors-page-BMfp0jWL.js} +1 -1
  25. package/dist/gateway/static/root/assets/{desktop-pet-BxMJlvb-.js → desktop-pet-oTig6qFO.js} +1 -1
  26. package/dist/gateway/static/root/assets/{desktop-pet-settings-DCvpDImn.js → desktop-pet-settings-DXJiPL_H.js} +1 -1
  27. package/dist/gateway/static/root/assets/{directory-picker-path-field-D1nxs9PA.js → directory-picker-path-field-CltkXSR2.js} +1 -1
  28. package/dist/gateway/static/root/assets/{dreaming-settings-EAWkpOgw.js → dreaming-settings-CYrZQxoL.js} +1 -1
  29. package/dist/gateway/static/root/assets/{extension-debug-page-LUQ8dE8z.js → extension-debug-page-C-4BOy1R.js} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-page-B_mnhoRd.js → extension-page-C8nMpXqh.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-settings-page-BWQsGmvW.js → extension-settings-page-CXWYOwka.js} +1 -1
  32. package/dist/gateway/static/root/assets/{fetch-BWXmBizE.js → fetch-BID89uCH.js} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-config-api-M9bzPASf.js → gateway-config-api-B3TGdim5.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-settings-CbgtpprN.js → gateway-settings-D7tOnGAJ.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-startup-retry-BALL91S7.js → gateway-startup-retry-BkrLLlpE.js} +1 -1
  36. package/dist/gateway/static/root/assets/{goal-create-dialog-CbP4t9aM.js → goal-create-dialog-BL_cRshf.js} +1 -1
  37. package/dist/gateway/static/root/assets/{goal-detail-page-DlwI-MZZ.js → goal-detail-page-T1vg6Ng_.js} +1 -1
  38. package/dist/gateway/static/root/assets/{goals-config-api-BBhFVzBS.js → goals-config-api-D-WZWhP2.js} +1 -1
  39. package/dist/gateway/static/root/assets/{goals-page-D26r7knp.js → goals-page-1vzWXl5W.js} +1 -1
  40. package/dist/gateway/static/root/assets/{goals-settings-DdmVG_TR.js → goals-settings-DgGwvLVC.js} +1 -1
  41. package/dist/gateway/static/root/assets/{heartbeat-settings-DZW2Xq-U.js → heartbeat-settings-yh0bEIwQ.js} +1 -1
  42. package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +1 -0
  43. package/dist/gateway/static/root/assets/index-NwiCnzI-.js +262 -0
  44. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-1IWd88-T.js → keyboard-shortcuts-settings-CnxRFbgA.js} +1 -1
  45. package/dist/gateway/static/root/assets/{logs-page-DxoKJO7-.js → logs-page-DebnvTpD.js} +1 -1
  46. package/dist/gateway/static/root/assets/{markdown-split-BtdBj32h.js → markdown-split-BU69Nof8.js} +1 -1
  47. package/dist/gateway/static/root/assets/{media-plugins-CpoPj3s8.js → media-plugins-CDs7OvWt.js} +1 -1
  48. package/dist/gateway/static/root/assets/messages-DbNQuFdA.js +3 -0
  49. package/dist/gateway/static/root/assets/{models-hub-panel-D1Rp__dV.js → models-hub-panel-Ca_jy26S.js} +1 -1
  50. package/dist/gateway/static/root/assets/{notes-page-CgR1bO2W.js → notes-page-DTpeaI65.js} +1 -1
  51. package/dist/gateway/static/root/assets/{notes-workbench-ozsnmDTV.js → notes-workbench-uKMYsjUU.js} +2 -2
  52. package/dist/gateway/static/root/assets/{page-tabs-CVLqCfQB.js → page-tabs-CROo8Vgz.js} +1 -1
  53. package/dist/gateway/static/root/assets/{preview-open-alternatives-CKUXJk2t.js → preview-open-alternatives-BxsS9i1G.js} +1 -1
  54. package/dist/gateway/static/root/assets/{project-detail-page-B4dqFAQF.js → project-detail-page-BWKOhshy.js} +1 -1
  55. package/dist/gateway/static/root/assets/{projects-page-DlRGXv4a.js → projects-page-CoowiCLe.js} +1 -1
  56. package/dist/gateway/static/root/assets/{remote-access-hub-rZEYQMZV.js → remote-access-hub-CiOaX1wd.js} +1 -1
  57. package/dist/gateway/static/root/assets/{save-bar-controls-BtGni268.js → save-bar-controls-B4N17dMG.js} +1 -1
  58. package/dist/gateway/static/root/assets/{schedule-field-BDGzKVWn.js → schedule-field-ClJzQ2vz.js} +1 -1
  59. package/dist/gateway/static/root/assets/{schema-form-DQJsKMCE.js → schema-form-oZvQUfDg.js} +1 -1
  60. package/dist/gateway/static/root/assets/{sessions-page-DxGoCGU8.js → sessions-page-Sx9Gc0cv.js} +1 -1
  61. package/dist/gateway/static/root/assets/settings-advanced-gate-CnbVdze4.js +1 -0
  62. package/dist/gateway/static/root/assets/{settings-collapsible-section-c8XGd4-8.js → settings-collapsible-section-B0kOLXUf.js} +1 -1
  63. package/dist/gateway/static/root/assets/{settings-form-section-By0YiDWo.js → settings-form-section-DoVPlVFd.js} +1 -1
  64. package/dist/gateway/static/root/assets/{settings-loading-skeleton-SYCPY-WM.js → settings-loading-skeleton-C7J96bLc.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-page-D9NwvnBt.js → settings-page-CXiAByF0.js} +1 -1
  66. package/dist/gateway/static/root/assets/{settings-page-layout-CrICyGob.js → settings-page-layout-R-6ArlMI.js} +1 -1
  67. package/dist/gateway/static/root/assets/{setup-status-panel-IjK-hDxf.js → setup-status-panel-Drz23n9l.js} +1 -1
  68. package/dist/gateway/static/root/assets/{share-preview-page-Dfnk9M_m.js → share-preview-page-Bn1umseg.js} +1 -1
  69. package/dist/gateway/static/root/assets/{shares-settings-vQiRBra7.js → shares-settings-Bb-pcMWg.js} +1 -1
  70. package/dist/gateway/static/root/assets/skill-reload-api-DE9HCHct.js +1 -0
  71. package/dist/gateway/static/root/assets/{skills-page-CruV215G.js → skills-page-B6cDPqkk.js} +1 -1
  72. package/dist/gateway/static/root/assets/{system-settings-panel-BBVbSDFD.js → system-settings-panel-CtEddAy-.js} +1 -1
  73. package/dist/gateway/static/root/assets/{typed-models-lib-CwFayhxu.js → typed-models-lib-BkhSnYq7.js} +1 -1
  74. package/dist/gateway/static/root/assets/{use-channel-catalog-BKtHOM50.js → use-channel-catalog-EA4hfbsP.js} +1 -1
  75. package/dist/gateway/static/root/assets/{user-profile-settings-panel-_KDWzagh.js → user-profile-settings-panel-BssTVOBS.js} +1 -1
  76. package/dist/gateway/static/root/assets/{utils-BiUjIHb4.js → utils-CI3ywKLT.js} +1 -1
  77. package/dist/gateway/static/root/assets/{voice-api-key-field-agJqlm4o.js → voice-api-key-field-DXMEGw9O.js} +1 -1
  78. package/dist/gateway/static/root/assets/{work-item-detail-page-Bdw4ATCb.js → work-item-detail-page-DsFqU0tK.js} +1 -1
  79. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-D-Dy6mTy.js → workflow-run-setup-panel-DImBi-m6.js} +1 -1
  80. package/dist/gateway/static/root/assets/{workflow-start-dialog-GammZ2GK.js → workflow-start-dialog-DuPpKAAc.js} +1 -1
  81. package/dist/gateway/static/root/assets/{workflows-page-Cw5zrqti.js → workflows-page-DfTVzTNY.js} +1 -1
  82. package/dist/gateway/static/root/index.html +5 -5
  83. package/dist/package.js +1 -1
  84. package/dist/src/agent/agent-instance-gateway.d.ts +3 -3
  85. package/dist/src/agent/agent-manager.d.ts +7 -8
  86. package/dist/src/agent/agent-manager.js +24 -25
  87. package/dist/src/agent/agent-manager.js.map +1 -1
  88. package/dist/src/agent/background-review/coordinator.d.ts +9 -23
  89. package/dist/src/agent/background-review/coordinator.js +45 -54
  90. package/dist/src/agent/background-review/coordinator.js.map +1 -1
  91. package/dist/src/agent/background-review/prompts.d.ts +2 -4
  92. package/dist/src/agent/background-review/prompts.js +7 -19
  93. package/dist/src/agent/background-review/prompts.js.map +1 -1
  94. package/dist/src/agent/background-review/run-background-review.d.ts +0 -8
  95. package/dist/src/agent/background-review/run-background-review.js +87 -72
  96. package/dist/src/agent/background-review/run-background-review.js.map +1 -1
  97. package/dist/src/agent/background-review/settings.d.ts +4 -4
  98. package/dist/src/agent/background-review/settings.js +25 -10
  99. package/dist/src/agent/background-review/settings.js.map +1 -1
  100. package/dist/src/agent/code-intelligence/binary.d.ts +1 -0
  101. package/dist/src/agent/code-intelligence/binary.js +42 -0
  102. package/dist/src/agent/code-intelligence/binary.js.map +1 -0
  103. package/dist/src/agent/code-intelligence/index.d.ts +4 -0
  104. package/dist/src/agent/code-intelligence/index.js +4 -0
  105. package/dist/src/agent/code-intelligence/runtime.d.ts +34 -0
  106. package/dist/src/agent/code-intelligence/runtime.js +282 -0
  107. package/dist/src/agent/code-intelligence/runtime.js.map +1 -0
  108. package/dist/src/agent/code-intelligence/tools.d.ts +6 -0
  109. package/dist/src/agent/code-intelligence/tools.js +268 -0
  110. package/dist/src/agent/code-intelligence/tools.js.map +1 -0
  111. package/dist/src/agent/code-intelligence/types.d.ts +22 -0
  112. package/dist/src/agent/code-intelligence/types.js +1 -0
  113. package/dist/src/agent/memory/builtin-provider.d.ts +1 -2
  114. package/dist/src/agent/memory/builtin-provider.js +31 -12
  115. package/dist/src/agent/memory/builtin-provider.js.map +1 -1
  116. package/dist/src/agent/memory/context/planner.d.ts +11 -0
  117. package/dist/src/agent/memory/context/planner.js +163 -0
  118. package/dist/src/agent/memory/context/planner.js.map +1 -0
  119. package/dist/src/agent/memory/context/types.d.ts +19 -0
  120. package/dist/src/agent/memory/context/types.js +1 -0
  121. package/dist/src/agent/memory/context-fence.d.ts +3 -3
  122. package/dist/src/agent/memory/context-fence.js +9 -9
  123. package/dist/src/agent/memory/context-fence.js.map +1 -1
  124. package/dist/src/agent/memory/index.d.ts +6 -4
  125. package/dist/src/agent/memory/index.js +5 -5
  126. package/dist/src/agent/memory/manager.d.ts +16 -4
  127. package/dist/src/agent/memory/manager.js +32 -34
  128. package/dist/src/agent/memory/manager.js.map +1 -1
  129. package/dist/src/agent/memory/memory-config.d.ts +1 -1
  130. package/dist/src/agent/memory/memory-config.js +2 -2
  131. package/dist/src/agent/memory/memory-config.js.map +1 -1
  132. package/dist/src/agent/memory/provider.d.ts +1 -3
  133. package/dist/src/agent/memory/stub-memory-provider.d.ts +0 -1
  134. package/dist/src/agent/memory/stub-memory-provider.js +0 -5
  135. package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
  136. package/dist/src/agent/memory/types.d.ts +31 -2
  137. package/dist/src/agent/memory/understanding/correction.d.ts +3 -0
  138. package/dist/src/agent/memory/understanding/correction.js +41 -0
  139. package/dist/src/agent/memory/understanding/correction.js.map +1 -0
  140. package/dist/src/agent/memory/understanding/quality.d.ts +8 -0
  141. package/dist/src/agent/memory/understanding/quality.js +20 -0
  142. package/dist/src/agent/memory/understanding/quality.js.map +1 -0
  143. package/dist/src/agent/memory/understanding/service.d.ts +26 -0
  144. package/dist/src/agent/memory/understanding/service.js +233 -0
  145. package/dist/src/agent/memory/understanding/service.js.map +1 -0
  146. package/dist/src/agent/memory/understanding/types.d.ts +22 -0
  147. package/dist/src/agent/memory/understanding/types.js +1 -0
  148. package/dist/src/agent/memory/user-context-coordinator.d.ts +21 -0
  149. package/dist/src/agent/memory/user-context-coordinator.js +90 -0
  150. package/dist/src/agent/memory/user-context-coordinator.js.map +1 -0
  151. package/dist/src/agent/orchestration/agent-event-handler.d.ts +1 -0
  152. package/dist/src/agent/orchestration/agent-event-handler.js +1 -1
  153. package/dist/src/agent/orchestration/agent-event-handler.js.map +1 -1
  154. package/dist/src/agent/orchestration/agent-orchestrator.js +2 -2
  155. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  156. package/dist/src/agent/orchestration/index.d.ts +1 -1
  157. package/dist/src/agent/orchestration/index.js +2 -2
  158. package/dist/src/agent/prompt/sections/tooling.js +10 -0
  159. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  160. package/dist/src/agent/prompt/system-prompt.js +2 -0
  161. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  162. package/dist/src/agent/service/direct-turn-helpers.js +2 -2
  163. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  164. package/dist/src/agent/service.js +7 -1
  165. package/dist/src/agent/service.js.map +1 -1
  166. package/dist/src/agent/session/session-inspector.d.ts +1 -0
  167. package/dist/src/agent/session/session-inspector.js +8 -2
  168. package/dist/src/agent/session/session-inspector.js.map +1 -1
  169. package/dist/src/agent/tools/factory.d.ts +3 -0
  170. package/dist/src/agent/tools/factory.js +17 -10
  171. package/dist/src/agent/tools/factory.js.map +1 -1
  172. package/dist/src/agent/tools/index.d.ts +1 -0
  173. package/dist/src/agent/tools/index.js +2 -1
  174. package/dist/src/agent/workspace-runtime/registry.d.ts +2 -0
  175. package/dist/src/agent/workspace-runtime/registry.js +11 -3
  176. package/dist/src/agent/workspace-runtime/registry.js.map +1 -1
  177. package/dist/src/agent-manifest/index.js +2 -2
  178. package/dist/src/agent-manifest/schema.d.ts +91 -0
  179. package/dist/src/agent-manifest/schema.js +27 -5
  180. package/dist/src/agent-manifest/schema.js.map +1 -1
  181. package/dist/src/agent-runtime/memory-runtime.d.ts +1 -1
  182. package/dist/src/agent-runtime/memory-runtime.js.map +1 -1
  183. package/dist/src/automations/domain/validation.d.ts +22 -22
  184. package/dist/src/automations/draft/automation-draft-validator.d.ts +4 -4
  185. package/dist/src/cli/command-loaders.js +1 -0
  186. package/dist/src/cli/command-loaders.js.map +1 -1
  187. package/dist/src/cli/command-manifest.js +4 -0
  188. package/dist/src/cli/command-manifest.js.map +1 -1
  189. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  190. package/dist/src/cli/commands/resume.d.ts +1 -0
  191. package/dist/src/cli/commands/resume.js +31 -0
  192. package/dist/src/cli/commands/resume.js.map +1 -0
  193. package/dist/src/cli/commands/tui-runner.d.ts +9 -0
  194. package/dist/src/cli/commands/tui-runner.js +40 -0
  195. package/dist/src/cli/commands/tui-runner.js.map +1 -0
  196. package/dist/src/cli/commands/tui.js +4 -28
  197. package/dist/src/cli/commands/tui.js.map +1 -1
  198. package/dist/src/config/agent-profile.js +1 -1
  199. package/dist/src/config/index.js +2 -2
  200. package/dist/src/config/schema.d.ts +115 -0
  201. package/dist/src/config/schema.js +53 -4
  202. package/dist/src/config/schema.js.map +1 -1
  203. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  204. package/dist/src/gateway/agent-builtin-tools.js +5 -0
  205. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  206. package/dist/src/gateway/agents-admin.js +1 -1
  207. package/dist/src/gateway/hono/lib/config-payload.d.ts +18 -4
  208. package/dist/src/gateway/hono/routes/home.js +37 -2
  209. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  210. package/dist/src/gateway/hono/routes/memory.js +129 -4
  211. package/dist/src/gateway/hono/routes/memory.js.map +1 -1
  212. package/dist/src/gateway/hono/routes/projects.js +16 -0
  213. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  214. package/dist/src/knowledge/index.d.ts +2 -0
  215. package/dist/src/knowledge/index.js +2 -0
  216. package/dist/src/knowledge/ingestion-service.d.ts +20 -0
  217. package/dist/src/knowledge/ingestion-service.js +75 -0
  218. package/dist/src/knowledge/ingestion-service.js.map +1 -0
  219. package/dist/src/knowledge/types.d.ts +70 -0
  220. package/dist/src/knowledge/types.js +1 -0
  221. package/dist/src/projects/project-kind.js +0 -1
  222. package/dist/src/projects/project-kind.js.map +1 -1
  223. package/dist/src/providers/presentation.js +1 -1
  224. package/dist/src/providers/presentation.js.map +1 -1
  225. package/dist/src/storage/sqlite/index.d.ts +2 -1
  226. package/dist/src/storage/sqlite/index.js +3 -2
  227. package/dist/src/storage/sqlite/knowledge-repository.d.ts +50 -0
  228. package/dist/src/storage/sqlite/knowledge-repository.js +237 -0
  229. package/dist/src/storage/sqlite/knowledge-repository.js.map +1 -0
  230. package/dist/src/storage/sqlite/memory-records-repository.d.ts +80 -2
  231. package/dist/src/storage/sqlite/memory-records-repository.js +271 -9
  232. package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -1
  233. package/dist/src/storage/sqlite/migrations/029_user_understanding.sql +133 -0
  234. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  235. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  236. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  237. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  238. package/dist/src/storage/sqlite/schema.js +1 -1
  239. package/dist/src/tui/tui-picker-overlay.d.ts +6 -1
  240. package/dist/src/tui/tui-picker-overlay.js +4 -1
  241. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  242. package/dist/src/tui/tui-types.d.ts +2 -0
  243. package/dist/src/tui/tui-types.js.map +1 -1
  244. package/dist/src/tui/tui.js +17 -2
  245. package/dist/src/tui/tui.js.map +1 -1
  246. package/dist/src/work-items/work-item-service.d.ts +1 -0
  247. package/dist/src/work-items/work-item-service.js +3 -0
  248. package/dist/src/work-items/work-item-service.js.map +1 -1
  249. package/dist/src/work-items/work-item-store.d.ts +1 -0
  250. package/dist/src/work-items/work-item-store.js +13 -0
  251. package/dist/src/work-items/work-item-store.js.map +1 -1
  252. package/package.json +2 -1
  253. package/dist/gateway/static/root/assets/agents-Bv5R-N8Q.js +0 -2
  254. package/dist/gateway/static/root/assets/channels-status-swr-MY4Xh4fM.js +0 -1
  255. package/dist/gateway/static/root/assets/index-CPwVzi9x.css +0 -1
  256. package/dist/gateway/static/root/assets/index-DZOm5_ex.js +0 -262
  257. package/dist/gateway/static/root/assets/messages-CQ_k8RHj.js +0 -3
  258. package/dist/gateway/static/root/assets/settings-advanced-gate-4e8ZQwxr.js +0 -1
  259. package/dist/gateway/static/root/assets/skill-reload-api-BIWv778A.js +0 -1
  260. package/dist/src/agent/memory/candidate-extractor.d.ts +0 -6
  261. package/dist/src/agent/memory/candidate-extractor.js +0 -60
  262. package/dist/src/agent/memory/candidate-extractor.js.map +0 -1
  263. package/dist/src/agent/memory/context-assembler.d.ts +0 -10
  264. package/dist/src/agent/memory/context-assembler.js +0 -26
  265. package/dist/src/agent/memory/context-assembler.js.map +0 -1
  266. package/dist/src/agent/memory/inject-prefetch.d.ts +0 -6
  267. package/dist/src/agent/memory/inject-prefetch.js +0 -48
  268. package/dist/src/agent/memory/inject-prefetch.js.map +0 -1
  269. package/dist/src/agent/memory/prefetch-coordinator.d.ts +0 -37
  270. package/dist/src/agent/memory/prefetch-coordinator.js +0 -45
  271. package/dist/src/agent/memory/prefetch-coordinator.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","names":[],"sources":["../../../../src/agent/background-review/settings.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\n\nexport interface BackgroundReviewSettings {\n enabled: boolean;\n memoryNudgeInterval: number;\n skillNudgeInterval: number;\n maxToolRounds: number;\n maxHistoryMessages: number;\n maxDurationMs: number;\n}\n\nexport function resolveBackgroundReviewSettings(_config: Config | undefined): BackgroundReviewSettings {\n const numberOrDefault = (value: unknown, fallback: number): number =>\n typeof value === 'number' && Number.isFinite(value) && value > 0 ? Math.trunc(value) : fallback;\n\n return {\n enabled: false,\n memoryNudgeInterval: numberOrDefault(undefined, 10),\n skillNudgeInterval: numberOrDefault(undefined, 10),\n maxToolRounds: numberOrDefault(undefined, 8),\n maxHistoryMessages: numberOrDefault(undefined, 80),\n maxDurationMs: numberOrDefault(undefined, 120_000),\n };\n}\n"],"mappings":";AAWA,SAAgB,gCAAgC,SAAuD;CACrG,MAAM,mBAAmB,OAAgB,aACvC,OAAO,UAAU,YAAY,OAAO,SAAS,MAAM,IAAI,QAAQ,IAAI,KAAK,MAAM,MAAM,GAAG;AAEzF,QAAO;EACL,SAAS;EACT,qBAAqB,gBAAgB,KAAA,GAAW,GAAG;EACnD,oBAAoB,gBAAgB,KAAA,GAAW,GAAG;EAClD,eAAe,gBAAgB,KAAA,GAAW,EAAE;EAC5C,oBAAoB,gBAAgB,KAAA,GAAW,GAAG;EAClD,eAAe,gBAAgB,KAAA,GAAW,KAAQ;EACnD"}
1
+ {"version":3,"file":"settings.js","names":[],"sources":["../../../../src/agent/background-review/settings.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { resolveEffectiveAgentManifestForSession } from '../../config/agent-profile.js';\n\nexport interface BackgroundReviewSettings {\n enabled: boolean;\n agentId?: string;\n adaptiveCadence: boolean;\n reviewIntervalTurns: number;\n maxHistoryMessages: number;\n maxDurationMs: number;\n}\n\nconst DEFAULT_SETTINGS: BackgroundReviewSettings = {\n enabled: false,\n adaptiveCadence: true,\n reviewIntervalTurns: 10,\n maxHistoryMessages: 80,\n maxDurationMs: 120_000,\n};\n\nexport function resolveBackgroundReviewSettings(\n config: Config | undefined,\n sessionKey?: string,\n): BackgroundReviewSettings {\n if (!config) return DEFAULT_SETTINGS;\n\n try {\n const manifest = resolveEffectiveAgentManifestForSession(config, sessionKey);\n const memory = manifest.memory;\n const understanding = memory.understanding;\n const writeCapable = memory.mode === 'confirmWrite' || memory.mode === 'auto';\n return {\n enabled: writeCapable && (understanding?.enabled ?? true),\n agentId: manifest.id,\n adaptiveCadence: understanding?.adaptiveCadence ?? true,\n reviewIntervalTurns: understanding?.reviewIntervalTurns ?? DEFAULT_SETTINGS.reviewIntervalTurns,\n maxHistoryMessages: understanding?.maxHistoryMessages ?? DEFAULT_SETTINGS.maxHistoryMessages,\n maxDurationMs: understanding?.maxDurationMs ?? DEFAULT_SETTINGS.maxDurationMs,\n };\n } catch {\n return DEFAULT_SETTINGS;\n }\n}\n"],"mappings":";;AAYA,MAAM,mBAA6C;CACjD,SAAS;CACT,iBAAiB;CACjB,qBAAqB;CACrB,oBAAoB;CACpB,eAAe;CAChB;AAED,SAAgB,gCACd,QACA,YAC0B;AAC1B,KAAI,CAAC,OAAQ,QAAO;AAEpB,KAAI;EACF,MAAM,WAAW,wCAAwC,QAAQ,WAAW;EAC5E,MAAM,SAAS,SAAS;EACxB,MAAM,gBAAgB,OAAO;AAE7B,SAAO;GACL,UAFmB,OAAO,SAAS,kBAAkB,OAAO,SAAS,YAE3C,eAAe,WAAW;GACpD,SAAS,SAAS;GAClB,iBAAiB,eAAe,mBAAmB;GACnD,qBAAqB,eAAe,uBAAuB,iBAAiB;GAC5E,oBAAoB,eAAe,sBAAsB,iBAAiB;GAC1E,eAAe,eAAe,iBAAiB,iBAAiB;GACjE;SACK;AACN,SAAO"}
@@ -0,0 +1 @@
1
+ export declare function resolveCodebaseMemoryBinary(explicitPath?: string): string;
@@ -0,0 +1,42 @@
1
+ import { createRequire } from "node:module";
2
+ import { dirname, join, resolve } from "node:path";
3
+ import { accessSync, constants, existsSync, realpathSync } from "node:fs";
4
+ //#region src/agent/code-intelligence/binary.ts
5
+ const require = createRequire(import.meta.url);
6
+ function binaryName() {
7
+ return process.platform === "win32" ? "codebase-memory-mcp.exe" : "codebase-memory-mcp";
8
+ }
9
+ function isUsableBinary(path) {
10
+ if (!existsSync(path)) return false;
11
+ try {
12
+ accessSync(path, process.platform === "win32" ? constants.F_OK : constants.X_OK);
13
+ return true;
14
+ } catch {
15
+ return false;
16
+ }
17
+ }
18
+ function packageBinaryPath() {
19
+ try {
20
+ return join(dirname(require.resolve("codebase-memory-mcp/package.json")), "bin", binaryName());
21
+ } catch {
22
+ return;
23
+ }
24
+ }
25
+ function resolveCodebaseMemoryBinary(explicitPath) {
26
+ const resourcesPath = process.resourcesPath;
27
+ const candidates = [
28
+ explicitPath,
29
+ process.env.XOPC_CBM_BINARY,
30
+ resourcesPath ? join(resourcesPath, "bin", binaryName()) : void 0,
31
+ packageBinaryPath()
32
+ ].filter((value) => Boolean(value?.trim()));
33
+ for (const candidate of candidates) {
34
+ const absolute = resolve(candidate);
35
+ if (isUsableBinary(absolute)) return realpathSync(absolute);
36
+ }
37
+ throw new Error(`codebase-memory-mcp binary is unavailable; checked ${candidates.join(", ") || "no candidate paths"}`);
38
+ }
39
+ //#endregion
40
+ export { resolveCodebaseMemoryBinary };
41
+
42
+ //# sourceMappingURL=binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","names":[],"sources":["../../../../src/agent/code-intelligence/binary.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { accessSync, constants, existsSync, realpathSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\n\nconst require = createRequire(import.meta.url);\n\nfunction binaryName(): string {\n return process.platform === 'win32' ? 'codebase-memory-mcp.exe' : 'codebase-memory-mcp';\n}\n\nfunction isUsableBinary(path: string): boolean {\n if (!existsSync(path)) return false;\n try {\n accessSync(path, process.platform === 'win32' ? constants.F_OK : constants.X_OK);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction packageBinaryPath(): string | undefined {\n try {\n const packageJson = require.resolve('codebase-memory-mcp/package.json');\n return join(dirname(packageJson), 'bin', binaryName());\n } catch {\n return undefined;\n }\n}\n\nexport function resolveCodebaseMemoryBinary(explicitPath?: string): string {\n const resourcesPath = (process as NodeJS.Process & { resourcesPath?: string }).resourcesPath;\n const candidates = [\n explicitPath,\n process.env.XOPC_CBM_BINARY,\n resourcesPath ? join(resourcesPath, 'bin', binaryName()) : undefined,\n packageBinaryPath(),\n ].filter((value): value is string => Boolean(value?.trim()));\n\n for (const candidate of candidates) {\n const absolute = resolve(candidate);\n if (isUsableBinary(absolute)) {\n return realpathSync(absolute);\n }\n }\n\n throw new Error(\n `codebase-memory-mcp binary is unavailable; checked ${candidates.join(', ') || 'no candidate paths'}`,\n );\n}\n"],"mappings":";;;;AAIA,MAAM,UAAU,cAAc,OAAO,KAAK,IAAI;AAE9C,SAAS,aAAqB;AAC5B,QAAO,QAAQ,aAAa,UAAU,4BAA4B;;AAGpE,SAAS,eAAe,MAAuB;AAC7C,KAAI,CAAC,WAAW,KAAK,CAAE,QAAO;AAC9B,KAAI;AACF,aAAW,MAAM,QAAQ,aAAa,UAAU,UAAU,OAAO,UAAU,KAAK;AAChF,SAAO;SACD;AACN,SAAO;;;AAIX,SAAS,oBAAwC;AAC/C,KAAI;AAEF,SAAO,KAAK,QADQ,QAAQ,QAAQ,mCACL,CAAC,EAAE,OAAO,YAAY,CAAC;SAChD;AACN;;;AAIJ,SAAgB,4BAA4B,cAA+B;CACzE,MAAM,gBAAiB,QAAwD;CAC/E,MAAM,aAAa;EACjB;EACA,QAAQ,IAAI;EACZ,gBAAgB,KAAK,eAAe,OAAO,YAAY,CAAC,GAAG,KAAA;EAC3D,mBAAmB;EACpB,CAAC,QAAQ,UAA2B,QAAQ,OAAO,MAAM,CAAC,CAAC;AAE5D,MAAK,MAAM,aAAa,YAAY;EAClC,MAAM,WAAW,QAAQ,UAAU;AACnC,MAAI,eAAe,SAAS,CAC1B,QAAO,aAAa,SAAS;;AAIjC,OAAM,IAAI,MACR,sDAAsD,WAAW,KAAK,KAAK,IAAI,uBAChF"}
@@ -0,0 +1,4 @@
1
+ export { resolveCodebaseMemoryBinary } from './binary.js';
2
+ export { CodeIntelligenceRuntime } from './runtime.js';
3
+ export { createCodeIntelligenceTools, type CodeIntelligenceToolDeps } from './tools.js';
4
+ export type { CodeIntelligenceRuntimeLike, CodeIntelligenceState, CodeIntelligenceStatus, CodeIntelligenceToolResult, } from './types.js';
@@ -0,0 +1,4 @@
1
+ import { createCodeIntelligenceTools } from "./tools.js";
2
+ import { resolveCodebaseMemoryBinary } from "./binary.js";
3
+ import { CodeIntelligenceRuntime } from "./runtime.js";
4
+ export { CodeIntelligenceRuntime, createCodeIntelligenceTools, resolveCodebaseMemoryBinary };
@@ -0,0 +1,34 @@
1
+ import type { Config } from '../../config/schema.js';
2
+ import type { CodeIntelligenceRuntimeLike, CodeIntelligenceStatus, CodeIntelligenceToolResult } from './types.js';
3
+ export declare class CodeIntelligenceRuntime implements CodeIntelligenceRuntimeLike {
4
+ private readonly workspace;
5
+ private readonly project;
6
+ private readonly getConfig;
7
+ private state;
8
+ private coverage;
9
+ private indexedAt;
10
+ private errorMessage;
11
+ private dirtyPaths;
12
+ private dirtyVersion;
13
+ private refreshTimer;
14
+ private connectionPromise;
15
+ private indexPromise;
16
+ private client;
17
+ private transport;
18
+ private availableTools;
19
+ private disposed;
20
+ constructor(options: {
21
+ workspace: string;
22
+ getConfig: () => Config;
23
+ });
24
+ getStatus(): CodeIntelligenceStatus;
25
+ supportsTool(name: string): boolean;
26
+ prime(): Promise<void>;
27
+ markDirty(paths: readonly string[]): void;
28
+ callTool(toolNames: string | readonly string[], input: Record<string, unknown>, signal?: AbortSignal): Promise<CodeIntelligenceToolResult>;
29
+ private ensureConnected;
30
+ private refreshIndex;
31
+ private callRaw;
32
+ private resetConnection;
33
+ dispose(): Promise<void>;
34
+ }
@@ -0,0 +1,282 @@
1
+ import { resolveStateDir } from "../../config/paths-state.js";
2
+ import { createLogger } from "../../utils/logger/index.js";
3
+ import { init_logger } from "../../utils/logger.js";
4
+ import { init_paths } from "../../config/paths.js";
5
+ import { XopcStdioClientTransport } from "../mcp/mcp-stdio-transport.js";
6
+ import { resolveCodebaseMemoryBinary } from "./binary.js";
7
+ import { isAbsolute, join, relative, resolve, sep } from "node:path";
8
+ import { mkdirSync } from "node:fs";
9
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
10
+ //#region src/agent/code-intelligence/runtime.ts
11
+ init_paths();
12
+ init_logger();
13
+ const log = createLogger("CodeIntelligence");
14
+ function deriveProjectName(workspace) {
15
+ return workspace.replace(/^[\\/]+/, "").replace(/[\\/:]+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
16
+ }
17
+ function timeout(promise, timeoutMs, operation) {
18
+ return new Promise((resolvePromise, reject) => {
19
+ const timer = setTimeout(() => reject(/* @__PURE__ */ new Error(`${operation} timed out after ${timeoutMs}ms`)), timeoutMs);
20
+ promise.then((value) => {
21
+ clearTimeout(timer);
22
+ resolvePromise(value);
23
+ }, (error) => {
24
+ clearTimeout(timer);
25
+ reject(error);
26
+ });
27
+ });
28
+ }
29
+ function resultText(result) {
30
+ const parts = [];
31
+ for (const item of result.content ?? []) if (item.type === "text" && typeof item.text === "string") parts.push(item.text);
32
+ return parts.join("\n").trim();
33
+ }
34
+ function parseJsonRecord(text) {
35
+ try {
36
+ const parsed = JSON.parse(text);
37
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : void 0;
38
+ } catch {
39
+ return;
40
+ }
41
+ }
42
+ function abortError() {
43
+ return new DOMException("Code intelligence operation aborted", "AbortError");
44
+ }
45
+ var CodeIntelligenceRuntime = class {
46
+ workspace;
47
+ project;
48
+ getConfig;
49
+ state = "idle";
50
+ coverage = "unknown";
51
+ indexedAt;
52
+ errorMessage;
53
+ dirtyPaths = /* @__PURE__ */ new Set();
54
+ dirtyVersion = 0;
55
+ refreshTimer;
56
+ connectionPromise;
57
+ indexPromise;
58
+ client;
59
+ transport;
60
+ availableTools = /* @__PURE__ */ new Set();
61
+ disposed = false;
62
+ constructor(options) {
63
+ this.workspace = resolve(options.workspace);
64
+ this.project = deriveProjectName(this.workspace);
65
+ this.getConfig = options.getConfig;
66
+ }
67
+ getStatus() {
68
+ return {
69
+ state: this.state,
70
+ workspace: this.workspace,
71
+ project: this.project,
72
+ indexedAt: this.indexedAt,
73
+ dirtyPaths: [...this.dirtyPaths].toSorted(),
74
+ coverage: this.coverage,
75
+ errorMessage: this.errorMessage
76
+ };
77
+ }
78
+ supportsTool(name) {
79
+ return this.availableTools.has(name);
80
+ }
81
+ async prime() {
82
+ const config = this.getConfig().codeIntelligence;
83
+ if (!config.enabled || !config.autoIndex || this.disposed) return;
84
+ if (this.indexPromise) return this.indexPromise;
85
+ if (this.indexedAt && this.dirtyPaths.size === 0) return;
86
+ await this.refreshIndex();
87
+ }
88
+ markDirty(paths) {
89
+ const config = this.getConfig().codeIntelligence;
90
+ if (!config.enabled || !config.autoRefresh || this.disposed) return;
91
+ let changed = false;
92
+ for (const input of paths) {
93
+ if (!input?.trim()) continue;
94
+ const absolute = isAbsolute(input) ? resolve(input) : resolve(this.workspace, input);
95
+ const rel = relative(this.workspace, absolute);
96
+ if (!rel || rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel)) continue;
97
+ this.dirtyPaths.add(rel.split(sep).join("/"));
98
+ changed = true;
99
+ }
100
+ if (!changed) return;
101
+ this.dirtyVersion += 1;
102
+ if (this.state === "ready" || this.state === "degraded") this.state = "dirty";
103
+ if (this.refreshTimer) clearTimeout(this.refreshTimer);
104
+ this.refreshTimer = setTimeout(() => {
105
+ this.refreshTimer = void 0;
106
+ this.refreshIndex().catch(() => {});
107
+ }, config.refreshDebounceMs);
108
+ this.refreshTimer.unref?.();
109
+ }
110
+ async callTool(toolNames, input, signal) {
111
+ if (signal?.aborted) throw abortError();
112
+ const config = this.getConfig().codeIntelligence;
113
+ if (!config.enabled) throw new Error("Code intelligence is disabled");
114
+ if (config.autoIndex && (this.indexedAt === void 0 || this.state === "idle" || this.dirtyPaths.size > 0)) await this.refreshIndex();
115
+ else await this.ensureConnected();
116
+ if (signal?.aborted) throw abortError();
117
+ const names = typeof toolNames === "string" ? [toolNames] : [...toolNames];
118
+ const toolName = names.find((name) => this.availableTools.has(name));
119
+ if (!toolName) throw new Error(`CBM does not expose a supported tool: ${names.join(" or ")}`);
120
+ const result = await this.callRaw(toolName, input, config.queryTimeoutMs);
121
+ const text = resultText(result);
122
+ if (result.isError) throw new Error(text || `CBM ${toolName} failed`);
123
+ return {
124
+ text,
125
+ status: this.getStatus()
126
+ };
127
+ }
128
+ async ensureConnected() {
129
+ if (this.disposed) throw new Error("Code intelligence runtime is disposed");
130
+ if (this.client && this.transport) return;
131
+ if (this.connectionPromise) return this.connectionPromise;
132
+ this.connectionPromise = (async () => {
133
+ this.state = "connecting";
134
+ const config = this.getConfig().codeIntelligence;
135
+ const binary = resolveCodebaseMemoryBinary(config.binaryPath);
136
+ const cacheDir = join(resolveStateDir(), "code-intelligence", "cbm");
137
+ mkdirSync(cacheDir, { recursive: true });
138
+ const transport = new XopcStdioClientTransport({
139
+ command: binary,
140
+ cwd: this.workspace,
141
+ env: {
142
+ CBM_ALLOWED_ROOT: this.workspace,
143
+ CBM_CACHE_DIR: cacheDir,
144
+ CBM_LOG_LEVEL: process.env.XOPC_LOG_LEVEL === "debug" ? "debug" : "warn"
145
+ },
146
+ stderr: "pipe"
147
+ });
148
+ const client = new Client({
149
+ name: "xopc-code-intelligence",
150
+ version: "1.0.0"
151
+ });
152
+ transport.stderr?.on("data", (chunk) => {
153
+ for (const line of String(chunk).split(/\r?\n/)) if (line.trim()) log.debug({ workspace: this.workspace }, `CBM: ${line.trim()}`);
154
+ });
155
+ try {
156
+ await timeout(client.connect(transport), 3e4, "CBM connection");
157
+ const toolNames = /* @__PURE__ */ new Set();
158
+ let cursor;
159
+ do {
160
+ const page = await timeout(client.listTools(cursor ? { cursor } : void 0), 2e4, "CBM tool discovery");
161
+ for (const tool of page.tools) toolNames.add(tool.name);
162
+ cursor = page.nextCursor;
163
+ } while (cursor);
164
+ this.client = client;
165
+ this.transport = transport;
166
+ this.availableTools = toolNames;
167
+ this.state = this.dirtyPaths.size > 0 ? "dirty" : "idle";
168
+ this.errorMessage = void 0;
169
+ log.info({
170
+ workspace: this.workspace,
171
+ project: this.project,
172
+ toolCount: this.availableTools.size
173
+ }, "Code intelligence runtime connected");
174
+ } catch (error) {
175
+ await transport.close().catch(() => {});
176
+ await client.close().catch(() => {});
177
+ throw error;
178
+ }
179
+ })();
180
+ try {
181
+ await this.connectionPromise;
182
+ } catch (error) {
183
+ this.state = "unavailable";
184
+ this.errorMessage = error instanceof Error ? error.message : String(error);
185
+ log.warn({
186
+ err: error,
187
+ workspace: this.workspace,
188
+ project: this.project
189
+ }, `Code intelligence unavailable: ${this.errorMessage}`);
190
+ throw error;
191
+ } finally {
192
+ this.connectionPromise = void 0;
193
+ }
194
+ }
195
+ async refreshIndex() {
196
+ if (this.disposed) throw new Error("Code intelligence runtime is disposed");
197
+ if (this.indexPromise) return this.indexPromise;
198
+ const versionAtStart = this.dirtyVersion;
199
+ this.indexPromise = (async () => {
200
+ await this.ensureConnected();
201
+ const config = this.getConfig().codeIntelligence;
202
+ this.state = "indexing";
203
+ const result = await this.callRaw("index_repository", {
204
+ repo_path: this.workspace,
205
+ name: this.project,
206
+ mode: config.indexMode,
207
+ persistence: false
208
+ }, config.indexTimeoutMs);
209
+ const text = resultText(result);
210
+ const parsed = parseJsonRecord(text);
211
+ const resultStatus = typeof parsed?.status === "string" ? parsed.status : "indexed";
212
+ if (result.isError || resultStatus === "error") throw new Error(text || "CBM indexing failed");
213
+ this.indexedAt = (/* @__PURE__ */ new Date()).toISOString();
214
+ this.coverage = resultStatus === "degraded" ? "partial" : "unknown";
215
+ this.errorMessage = void 0;
216
+ if (versionAtStart === this.dirtyVersion) {
217
+ this.dirtyPaths.clear();
218
+ this.state = resultStatus === "degraded" ? "degraded" : "ready";
219
+ } else this.state = "dirty";
220
+ log.info({
221
+ workspace: this.workspace,
222
+ project: this.project,
223
+ indexMode: config.indexMode,
224
+ status: resultStatus,
225
+ dirtyPaths: this.dirtyPaths.size
226
+ }, "Code intelligence index refreshed");
227
+ })();
228
+ try {
229
+ await this.indexPromise;
230
+ } catch (error) {
231
+ this.state = "degraded";
232
+ this.coverage = "unknown";
233
+ this.errorMessage = error instanceof Error ? error.message : String(error);
234
+ log.warn({
235
+ err: error,
236
+ workspace: this.workspace,
237
+ project: this.project
238
+ }, `Code intelligence indexing failed: ${this.errorMessage}`);
239
+ throw error;
240
+ } finally {
241
+ this.indexPromise = void 0;
242
+ if (!this.disposed && this.dirtyPaths.size > 0 && versionAtStart !== this.dirtyVersion) queueMicrotask(() => void this.refreshIndex().catch(() => {}));
243
+ }
244
+ }
245
+ async callRaw(toolName, input, timeoutMs) {
246
+ await this.ensureConnected();
247
+ if (!this.client) throw new Error("CBM client is not connected");
248
+ if (!this.availableTools.has(toolName)) throw new Error(`CBM tool is unavailable: ${toolName}`);
249
+ try {
250
+ return await timeout(this.client.callTool({
251
+ name: toolName,
252
+ arguments: input
253
+ }), timeoutMs, `CBM ${toolName}`);
254
+ } catch (error) {
255
+ this.state = "unavailable";
256
+ this.errorMessage = error instanceof Error ? error.message : String(error);
257
+ await this.resetConnection();
258
+ throw error;
259
+ }
260
+ }
261
+ async resetConnection() {
262
+ const transport = this.transport;
263
+ const client = this.client;
264
+ this.transport = void 0;
265
+ this.client = void 0;
266
+ this.availableTools.clear();
267
+ await client?.close().catch(() => {});
268
+ await transport?.close().catch(() => {});
269
+ }
270
+ async dispose() {
271
+ if (this.disposed) return;
272
+ this.disposed = true;
273
+ this.state = "disposed";
274
+ if (this.refreshTimer) clearTimeout(this.refreshTimer);
275
+ this.refreshTimer = void 0;
276
+ await this.resetConnection();
277
+ }
278
+ };
279
+ //#endregion
280
+ export { CodeIntelligenceRuntime };
281
+
282
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","names":[],"sources":["../../../../src/agent/code-intelligence/runtime.ts"],"sourcesContent":["import { mkdirSync } from 'node:fs';\nimport { isAbsolute, join, relative, resolve, sep } from 'node:path';\n\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\nimport type { Config } from '../../config/schema.js';\nimport { resolveStateDir } from '../../config/paths.js';\nimport { createLogger } from '../../utils/logger.js';\nimport { XopcStdioClientTransport } from '../mcp/mcp-stdio-transport.js';\nimport { resolveCodebaseMemoryBinary } from './binary.js';\nimport type {\n CodeIntelligenceRuntimeLike,\n CodeIntelligenceState,\n CodeIntelligenceStatus,\n CodeIntelligenceToolResult,\n} from './types.js';\n\nconst log = createLogger('CodeIntelligence');\n\ntype JsonRecord = Record<string, unknown>;\n\nfunction deriveProjectName(workspace: string): string {\n return workspace\n .replace(/^[\\\\/]+/, '')\n .replace(/[\\\\/:]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\nfunction timeout<T>(promise: Promise<T>, timeoutMs: number, operation: string): Promise<T> {\n return new Promise<T>((resolvePromise, reject) => {\n const timer = setTimeout(\n () => reject(new Error(`${operation} timed out after ${timeoutMs}ms`)),\n timeoutMs,\n );\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolvePromise(value);\n },\n (error) => {\n clearTimeout(timer);\n reject(error);\n },\n );\n });\n}\n\nfunction resultText(result: CallToolResult): string {\n const parts: string[] = [];\n for (const item of result.content ?? []) {\n if (item.type === 'text' && typeof item.text === 'string') {\n parts.push(item.text);\n }\n }\n return parts.join('\\n').trim();\n}\n\nfunction parseJsonRecord(text: string): JsonRecord | undefined {\n try {\n const parsed = JSON.parse(text) as unknown;\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as JsonRecord\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction abortError(): Error {\n return new DOMException('Code intelligence operation aborted', 'AbortError');\n}\n\nexport class CodeIntelligenceRuntime implements CodeIntelligenceRuntimeLike {\n private readonly workspace: string;\n private readonly project: string;\n private readonly getConfig: () => Config;\n private state: CodeIntelligenceState = 'idle';\n private coverage: CodeIntelligenceStatus['coverage'] = 'unknown';\n private indexedAt: string | undefined;\n private errorMessage: string | undefined;\n private dirtyPaths = new Set<string>();\n private dirtyVersion = 0;\n private refreshTimer: ReturnType<typeof setTimeout> | undefined;\n private connectionPromise: Promise<void> | undefined;\n private indexPromise: Promise<void> | undefined;\n private client: Client | undefined;\n private transport: XopcStdioClientTransport | undefined;\n private availableTools = new Set<string>();\n private disposed = false;\n\n constructor(options: { workspace: string; getConfig: () => Config }) {\n this.workspace = resolve(options.workspace);\n this.project = deriveProjectName(this.workspace);\n this.getConfig = options.getConfig;\n }\n\n getStatus(): CodeIntelligenceStatus {\n return {\n state: this.state,\n workspace: this.workspace,\n project: this.project,\n indexedAt: this.indexedAt,\n dirtyPaths: [...this.dirtyPaths].toSorted(),\n coverage: this.coverage,\n errorMessage: this.errorMessage,\n };\n }\n\n supportsTool(name: string): boolean {\n return this.availableTools.has(name);\n }\n\n async prime(): Promise<void> {\n const config = this.getConfig().codeIntelligence;\n if (!config.enabled || !config.autoIndex || this.disposed) return;\n if (this.indexPromise) return this.indexPromise;\n if (this.indexedAt && this.dirtyPaths.size === 0) return;\n await this.refreshIndex();\n }\n\n markDirty(paths: readonly string[]): void {\n const config = this.getConfig().codeIntelligence;\n if (!config.enabled || !config.autoRefresh || this.disposed) return;\n\n let changed = false;\n for (const input of paths) {\n if (!input?.trim()) continue;\n const absolute = isAbsolute(input) ? resolve(input) : resolve(this.workspace, input);\n const rel = relative(this.workspace, absolute);\n if (!rel || rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel)) continue;\n this.dirtyPaths.add(rel.split(sep).join('/'));\n changed = true;\n }\n if (!changed) return;\n\n this.dirtyVersion += 1;\n if (this.state === 'ready' || this.state === 'degraded') {\n this.state = 'dirty';\n }\n if (this.refreshTimer) clearTimeout(this.refreshTimer);\n this.refreshTimer = setTimeout(() => {\n this.refreshTimer = undefined;\n void this.refreshIndex().catch(() => {});\n }, config.refreshDebounceMs);\n this.refreshTimer.unref?.();\n }\n\n async callTool(\n toolNames: string | readonly string[],\n input: Record<string, unknown>,\n signal?: AbortSignal,\n ): Promise<CodeIntelligenceToolResult> {\n if (signal?.aborted) throw abortError();\n const config = this.getConfig().codeIntelligence;\n if (!config.enabled) {\n throw new Error('Code intelligence is disabled');\n }\n\n if (\n config.autoIndex &&\n (this.indexedAt === undefined || this.state === 'idle' || this.dirtyPaths.size > 0)\n ) {\n await this.refreshIndex();\n } else {\n await this.ensureConnected();\n }\n if (signal?.aborted) throw abortError();\n\n const names = typeof toolNames === 'string' ? [toolNames] : [...toolNames];\n const toolName = names.find((name) => this.availableTools.has(name));\n if (!toolName) {\n throw new Error(`CBM does not expose a supported tool: ${names.join(' or ')}`);\n }\n const result = await this.callRaw(toolName, input, config.queryTimeoutMs);\n const text = resultText(result);\n if (result.isError) {\n throw new Error(text || `CBM ${toolName} failed`);\n }\n return { text, status: this.getStatus() };\n }\n\n private async ensureConnected(): Promise<void> {\n if (this.disposed) throw new Error('Code intelligence runtime is disposed');\n if (this.client && this.transport) return;\n if (this.connectionPromise) return this.connectionPromise;\n\n this.connectionPromise = (async () => {\n this.state = 'connecting';\n const config = this.getConfig().codeIntelligence;\n const binary = resolveCodebaseMemoryBinary(config.binaryPath);\n const cacheDir = join(resolveStateDir(), 'code-intelligence', 'cbm');\n mkdirSync(cacheDir, { recursive: true });\n const transport = new XopcStdioClientTransport({\n command: binary,\n cwd: this.workspace,\n env: {\n CBM_ALLOWED_ROOT: this.workspace,\n CBM_CACHE_DIR: cacheDir,\n CBM_LOG_LEVEL: process.env.XOPC_LOG_LEVEL === 'debug' ? 'debug' : 'warn',\n },\n stderr: 'pipe',\n });\n const client = new Client({ name: 'xopc-code-intelligence', version: '1.0.0' });\n transport.stderr?.on('data', (chunk: Buffer | string) => {\n for (const line of String(chunk).split(/\\r?\\n/)) {\n if (line.trim()) log.debug({ workspace: this.workspace }, `CBM: ${line.trim()}`);\n }\n });\n\n try {\n await timeout(client.connect(transport), 30_000, 'CBM connection');\n const toolNames = new Set<string>();\n let cursor: string | undefined;\n do {\n const page = await timeout(\n client.listTools(cursor ? { cursor } : undefined),\n 20_000,\n 'CBM tool discovery',\n );\n for (const tool of page.tools) toolNames.add(tool.name);\n cursor = page.nextCursor;\n } while (cursor);\n this.client = client;\n this.transport = transport;\n this.availableTools = toolNames;\n this.state = this.dirtyPaths.size > 0 ? 'dirty' : 'idle';\n this.errorMessage = undefined;\n log.info(\n { workspace: this.workspace, project: this.project, toolCount: this.availableTools.size },\n 'Code intelligence runtime connected',\n );\n } catch (error) {\n await transport.close().catch(() => {});\n await client.close().catch(() => {});\n throw error;\n }\n })();\n\n try {\n await this.connectionPromise;\n } catch (error) {\n this.state = 'unavailable';\n this.errorMessage = error instanceof Error ? error.message : String(error);\n log.warn(\n { err: error, workspace: this.workspace, project: this.project },\n `Code intelligence unavailable: ${this.errorMessage}`,\n );\n throw error;\n } finally {\n this.connectionPromise = undefined;\n }\n }\n\n private async refreshIndex(): Promise<void> {\n if (this.disposed) throw new Error('Code intelligence runtime is disposed');\n if (this.indexPromise) return this.indexPromise;\n\n const versionAtStart = this.dirtyVersion;\n this.indexPromise = (async () => {\n await this.ensureConnected();\n const config = this.getConfig().codeIntelligence;\n this.state = 'indexing';\n const result = await this.callRaw(\n 'index_repository',\n {\n repo_path: this.workspace,\n name: this.project,\n mode: config.indexMode,\n persistence: false,\n },\n config.indexTimeoutMs,\n );\n const text = resultText(result);\n const parsed = parseJsonRecord(text);\n const resultStatus = typeof parsed?.status === 'string' ? parsed.status : 'indexed';\n if (result.isError || resultStatus === 'error') {\n throw new Error(text || 'CBM indexing failed');\n }\n\n this.indexedAt = new Date().toISOString();\n this.coverage = resultStatus === 'degraded' ? 'partial' : 'unknown';\n this.errorMessage = undefined;\n if (versionAtStart === this.dirtyVersion) {\n this.dirtyPaths.clear();\n this.state = resultStatus === 'degraded' ? 'degraded' : 'ready';\n } else {\n this.state = 'dirty';\n }\n log.info(\n {\n workspace: this.workspace,\n project: this.project,\n indexMode: config.indexMode,\n status: resultStatus,\n dirtyPaths: this.dirtyPaths.size,\n },\n 'Code intelligence index refreshed',\n );\n })();\n\n try {\n await this.indexPromise;\n } catch (error) {\n this.state = 'degraded';\n this.coverage = 'unknown';\n this.errorMessage = error instanceof Error ? error.message : String(error);\n log.warn(\n { err: error, workspace: this.workspace, project: this.project },\n `Code intelligence indexing failed: ${this.errorMessage}`,\n );\n throw error;\n } finally {\n this.indexPromise = undefined;\n if (!this.disposed && this.dirtyPaths.size > 0 && versionAtStart !== this.dirtyVersion) {\n queueMicrotask(() => void this.refreshIndex().catch(() => {}));\n }\n }\n }\n\n private async callRaw(\n toolName: string,\n input: Record<string, unknown>,\n timeoutMs: number,\n ): Promise<CallToolResult> {\n await this.ensureConnected();\n if (!this.client) throw new Error('CBM client is not connected');\n if (!this.availableTools.has(toolName)) {\n throw new Error(`CBM tool is unavailable: ${toolName}`);\n }\n try {\n return await timeout(\n this.client.callTool({ name: toolName, arguments: input }) as Promise<CallToolResult>,\n timeoutMs,\n `CBM ${toolName}`,\n );\n } catch (error) {\n this.state = 'unavailable';\n this.errorMessage = error instanceof Error ? error.message : String(error);\n await this.resetConnection();\n throw error;\n }\n }\n\n private async resetConnection(): Promise<void> {\n const transport = this.transport;\n const client = this.client;\n this.transport = undefined;\n this.client = undefined;\n this.availableTools.clear();\n await client?.close().catch(() => {});\n await transport?.close().catch(() => {});\n }\n\n async dispose(): Promise<void> {\n if (this.disposed) return;\n this.disposed = true;\n this.state = 'disposed';\n if (this.refreshTimer) clearTimeout(this.refreshTimer);\n this.refreshTimer = undefined;\n await this.resetConnection();\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AgentTool } from '@earendil-works/pi-agent-core';
2
+ import type { CodeIntelligenceRuntimeLike } from './types.js';
3
+ export interface CodeIntelligenceToolDeps {
4
+ getRuntime: () => CodeIntelligenceRuntimeLike;
5
+ }
6
+ export declare function createCodeIntelligenceTools(deps: CodeIntelligenceToolDeps): AgentTool[];