@xopcai/xopc 0.0.115 → 0.0.117

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 (578) hide show
  1. package/README.md +26 -10
  2. package/README.zh-CN.md +26 -10
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/demo-memory/src/index.d.ts +6 -0
  5. package/dist/extensions/demo-memory/src/index.js +132 -0
  6. package/dist/extensions/demo-memory/src/index.js.map +1 -0
  7. package/dist/extensions/demo-memory/xopc.extension.json +15 -0
  8. package/dist/extensions/feishu/src/schema/config-schema.d.ts +3 -3
  9. package/dist/extensions/telegram/src/command-handler.js +1 -2
  10. package/dist/extensions/telegram/src/command-handler.js.map +1 -1
  11. package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
  12. package/dist/extensions/telegram/xopc.extension.json +1 -1
  13. package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
  14. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DVnBfANm.js → agent-avatar-dicebear-BBLhJ2C6.js} +1 -1
  15. package/dist/gateway/static/root/assets/agents-C6xgagZd.js +71 -0
  16. package/dist/gateway/static/root/assets/app-management-settings-panel-CBpLONvG.js +1 -0
  17. package/dist/gateway/static/root/assets/{appearance-settings-BQpPSTHD.js → appearance-settings-CGcc54yj.js} +1 -1
  18. package/dist/gateway/static/root/assets/apps-page-DdDx0V4z.js +1 -0
  19. package/dist/gateway/static/root/assets/{archive-plugin-CXu-Csep.js → archive-plugin-DZsVqMhU.js} +1 -1
  20. package/dist/gateway/static/root/assets/{attachment-load-BAjgOoGY.js → attachment-load-CIol6JWX.js} +1 -1
  21. package/dist/gateway/static/root/assets/{binary-plugins-BSBgB2hO.js → binary-plugins-B3UauMfp.js} +1 -1
  22. package/dist/gateway/static/root/assets/{block-editor-BpXw9TTR.js → block-editor-2HJoFchH.js} +3 -3
  23. package/dist/gateway/static/root/assets/browser-settings-page-CUOO-PQk.js +8 -0
  24. package/dist/gateway/static/root/assets/capability-presets-api-XQoMTI0A.js +1 -0
  25. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CfqF-kGr.js +1 -0
  26. package/dist/gateway/static/root/assets/{channels-settings-BbPUpzWB.js → channels-settings-BYyRzsex.js} +1 -1
  27. package/dist/gateway/static/root/assets/connectors-page-DIvEz4NX.js +2 -0
  28. package/dist/gateway/static/root/assets/cron-api-R41aQCX9.js +1 -0
  29. package/dist/gateway/static/root/assets/cron-page-D97nFqQD.js +3 -0
  30. package/dist/gateway/static/root/assets/dreaming-settings-Bceaw1PG.js +1 -0
  31. package/dist/gateway/static/root/assets/{extension-debug-page-D9kgUHCc.js → extension-debug-page-DX5WRE_t.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-page-CGyhXqzR.js → extension-page-Buah7Bw-.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-settings-page-DL8Xquqd.js → extension-settings-page-DuroLVnf.js} +1 -1
  34. package/dist/gateway/static/root/assets/{fetch-D0VXA932.js → fetch-B5zdl27C.js} +1 -1
  35. package/dist/gateway/static/root/assets/{format-interval-label-Be8SmgUw.js → format-interval-label-Dn_QKIqb.js} +1 -1
  36. package/dist/gateway/static/root/assets/gateway-config-api-gT4ZhE7h.js +1 -0
  37. package/dist/gateway/static/root/assets/gateway-settings-iISWAZRm.js +1 -0
  38. package/dist/gateway/static/root/assets/{gateway-startup-retry-DERUH61L.js → gateway-startup-retry-B3kL8KGY.js} +1 -1
  39. package/dist/gateway/static/root/assets/goal-detail-page-DCUROLMQ.js +1 -0
  40. package/dist/gateway/static/root/assets/{goals-config-api-BPmqWk90.js → goals-config-api-AR-fVh0P.js} +1 -1
  41. package/dist/gateway/static/root/assets/goals-page-Cpb21ezg.js +2 -0
  42. package/dist/gateway/static/root/assets/goals-settings-CPAuFwoD.js +1 -0
  43. package/dist/gateway/static/root/assets/{heartbeat-config-api-Bfdzr8oV.js → heartbeat-config-api-D7bKFEeO.js} +1 -1
  44. package/dist/gateway/static/root/assets/heartbeat-settings-CC69vNx0.js +1 -0
  45. package/dist/gateway/static/root/assets/index-CwhK8qCh.js +122 -0
  46. package/dist/gateway/static/root/assets/index-CyfhARL-.css +1 -0
  47. package/dist/gateway/static/root/assets/{interval-presets-utKbuCRY.js → interval-presets-0DtsnxE0.js} +1 -1
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CjqS6c6V.js → keyboard-shortcuts-settings-BPREtN8B.js} +1 -1
  49. package/dist/gateway/static/root/assets/logs-page-DefCgF4o.js +2 -0
  50. package/dist/gateway/static/root/assets/{markdown-split-DW8C47iB.js → markdown-split-ChbR9LGO.js} +1 -1
  51. package/dist/gateway/static/root/assets/{media-plugins-D6HwDhDT.js → media-plugins-B82oP80n.js} +1 -1
  52. package/dist/gateway/static/root/assets/messages-Cf1O9JB0.js +3 -0
  53. package/dist/gateway/static/root/assets/models-hub-panel-DmKiIihT.js +2 -0
  54. package/dist/gateway/static/root/assets/note-detail-page-CxxfLRJZ.js +2 -0
  55. package/dist/gateway/static/root/assets/{note-image-lightbox-pJM35Pz5.js → note-image-lightbox-CDknITM3.js} +1 -1
  56. package/dist/gateway/static/root/assets/notes-page-X2slSx7V.js +1 -0
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-CVwHuyN6.js → preview-open-alternatives-DV3xQsWB.js} +1 -1
  58. package/dist/gateway/static/root/assets/remote-access-hub-BvmUWqgu.js +1 -0
  59. package/dist/gateway/static/root/assets/{save-bar-controls-Ba-UEk7x.js → save-bar-controls-BODCXnvY.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schedule-field-CNN9595U.js → schedule-field-CgJSCD3B.js} +1 -1
  61. package/dist/gateway/static/root/assets/{schema-form-DnNMmtD5.js → schema-form-qtfEI6QM.js} +1 -1
  62. package/dist/gateway/static/root/assets/sessions-page-B0yESuuL.js +1 -0
  63. package/dist/gateway/static/root/assets/settings-advanced-gate-q2M8RKOo.js +1 -0
  64. package/dist/gateway/static/root/assets/{settings-collapsible-section-CmOz80i5.js → settings-collapsible-section-BHZKjVcS.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-form-section-BmK7JJOV.js → settings-form-section-5i35D-J1.js} +1 -1
  66. package/dist/gateway/static/root/assets/settings-page-CGozabLD.js +1 -0
  67. package/dist/gateway/static/root/assets/setup-status-panel-FoOSe6nU.js +1 -0
  68. package/dist/gateway/static/root/assets/{share-preview-page-Dp2qGrHC.js → share-preview-page-B0H63tDv.js} +1 -1
  69. package/dist/gateway/static/root/assets/shares-settings-Cy5zWyYQ.js +1 -0
  70. package/dist/gateway/static/root/assets/skill-reload-api-DaZNFro9.js +1 -0
  71. package/dist/gateway/static/root/assets/skills-page-CnwtUzvw.js +2 -0
  72. package/dist/gateway/static/root/assets/system-settings-panel-DXs2VmBt.js +1 -0
  73. package/dist/gateway/static/root/assets/typed-models-lib-4gPuydz_.js +1 -0
  74. package/dist/gateway/static/root/assets/{use-channel-catalog-CHlO8J9G.js → use-channel-catalog-BCjP_VHb.js} +1 -1
  75. package/dist/gateway/static/root/assets/voice-api-key-field-DvKiOglO.js +1 -0
  76. package/dist/gateway/static/root/assets/{voice-player-store-DDDWYHvg.js → voice-player-store-BlF9V05n.js} +1 -1
  77. package/dist/gateway/static/root/assets/workflows-page-CAVZcONQ.js +18 -0
  78. package/dist/gateway/static/root/index.html +5 -5
  79. package/dist/package.js +1 -1
  80. package/dist/src/agent/agent-manager.d.ts +1 -1
  81. package/dist/src/agent/agent-manager.js +7 -8
  82. package/dist/src/agent/agent-manager.js.map +1 -1
  83. package/dist/src/agent/agent-scope.js +6 -8
  84. package/dist/src/agent/agent-scope.js.map +1 -1
  85. package/dist/src/agent/background-review/coordinator.js +0 -1
  86. package/dist/src/agent/background-review/coordinator.js.map +1 -1
  87. package/dist/src/agent/background-review/run-background-review.d.ts +0 -2
  88. package/dist/src/agent/background-review/run-background-review.js +2 -4
  89. package/dist/src/agent/background-review/run-background-review.js.map +1 -1
  90. package/dist/src/agent/background-review/settings.js +8 -7
  91. package/dist/src/agent/background-review/settings.js.map +1 -1
  92. package/dist/src/agent/bootstrap/bootstrap-context.d.ts +2 -2
  93. package/dist/src/agent/bootstrap/bootstrap-context.js +4 -4
  94. package/dist/src/agent/bootstrap/bootstrap-context.js.map +1 -1
  95. package/dist/src/agent/context/workspace-seed.js +1 -1
  96. package/dist/src/agent/embedded/run-for-session.js +1 -1
  97. package/dist/src/agent/embedded/run-for-session.js.map +1 -1
  98. package/dist/src/agent/fallback/candidates.js +6 -3
  99. package/dist/src/agent/fallback/candidates.js.map +1 -1
  100. package/dist/src/agent/goals/checklist-judge.d.ts +1 -0
  101. package/dist/src/agent/goals/checklist-judge.js +1 -1
  102. package/dist/src/agent/goals/checklist-judge.js.map +1 -1
  103. package/dist/src/agent/goals/evaluate-turn.d.ts +1 -0
  104. package/dist/src/agent/goals/evaluate-turn.js +1 -0
  105. package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
  106. package/dist/src/agent/goals/post-turn.js +8 -1
  107. package/dist/src/agent/goals/post-turn.js.map +1 -1
  108. package/dist/src/agent/image/generation/runtime-types.d.ts +2 -0
  109. package/dist/src/agent/image/generation/runtime.js +1 -1
  110. package/dist/src/agent/image/generation/runtime.js.map +1 -1
  111. package/dist/src/agent/image/image-helpers.d.ts +1 -1
  112. package/dist/src/agent/image/image-helpers.js +4 -17
  113. package/dist/src/agent/image/image-helpers.js.map +1 -1
  114. package/dist/src/agent/image/image-model-fallback.js +1 -1
  115. package/dist/src/agent/image/image-model-fallback.js.map +1 -1
  116. package/dist/src/agent/image/inbound-image-handling.js +1 -1
  117. package/dist/src/agent/image/inbound-image-handling.js.map +1 -1
  118. package/dist/src/agent/image/tool-model-config.d.ts +1 -1
  119. package/dist/src/agent/image/tool-model-config.js +2 -2
  120. package/dist/src/agent/image/tool-model-config.js.map +1 -1
  121. package/dist/src/agent/image/understanding/pi-ai-provider.js +5 -2
  122. package/dist/src/agent/image/understanding/pi-ai-provider.js.map +1 -1
  123. package/dist/src/agent/image/understanding/provider-registry.d.ts +1 -0
  124. package/dist/src/agent/image/understanding/provider-registry.js +16 -2
  125. package/dist/src/agent/image/understanding/provider-registry.js.map +1 -1
  126. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +1 -1
  127. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +1 -1
  128. package/dist/src/agent/media-generation/runtime-shared.d.ts +5 -2
  129. package/dist/src/agent/media-generation/runtime-shared.js +1 -1
  130. package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
  131. package/dist/src/agent/memory/builtin-memory-store.d.ts +2 -0
  132. package/dist/src/agent/memory/builtin-memory-store.js +4 -0
  133. package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
  134. package/dist/src/agent/memory/builtin-provider.d.ts +31 -9
  135. package/dist/src/agent/memory/builtin-provider.js +261 -11
  136. package/dist/src/agent/memory/builtin-provider.js.map +1 -1
  137. package/dist/src/agent/memory/context-assembler.d.ts +10 -0
  138. package/dist/src/agent/memory/context-assembler.js +26 -0
  139. package/dist/src/agent/memory/context-assembler.js.map +1 -0
  140. package/dist/src/agent/memory/create-memory-manager.js +25 -7
  141. package/dist/src/agent/memory/create-memory-manager.js.map +1 -1
  142. package/dist/src/agent/memory/dreaming/config.d.ts +1 -6
  143. package/dist/src/agent/memory/dreaming/config.js +8 -8
  144. package/dist/src/agent/memory/dreaming/config.js.map +1 -1
  145. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +2 -0
  146. package/dist/src/agent/memory/dreaming/deep-promotion.js +24 -0
  147. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
  148. package/dist/src/agent/memory/index.d.ts +1 -0
  149. package/dist/src/agent/memory/index.js +4 -3
  150. package/dist/src/agent/memory/inject-prefetch.js +6 -2
  151. package/dist/src/agent/memory/inject-prefetch.js.map +1 -1
  152. package/dist/src/agent/memory/manager.d.ts +37 -1
  153. package/dist/src/agent/memory/manager.js +332 -40
  154. package/dist/src/agent/memory/manager.js.map +1 -1
  155. package/dist/src/agent/memory/memory-config.js +12 -15
  156. package/dist/src/agent/memory/memory-config.js.map +1 -1
  157. package/dist/src/agent/memory/plugin-discovery.d.ts +19 -5
  158. package/dist/src/agent/memory/plugin-discovery.js +97 -31
  159. package/dist/src/agent/memory/plugin-discovery.js.map +1 -1
  160. package/dist/src/agent/memory/provider.d.ts +20 -15
  161. package/dist/src/agent/memory/stub-memory-provider.d.ts +17 -2
  162. package/dist/src/agent/memory/stub-memory-provider.js +20 -3
  163. package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
  164. package/dist/src/agent/memory/types.d.ts +136 -0
  165. package/dist/src/agent/models/manager.d.ts +1 -1
  166. package/dist/src/agent/models/manager.js +1 -1
  167. package/dist/src/agent/models/manager.js.map +1 -1
  168. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -1
  169. package/dist/src/agent/orchestration/agent-orchestrator.js +2 -1
  170. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  171. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +2 -2
  172. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
  173. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
  174. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +2 -6
  175. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +2 -8
  176. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +1 -1
  177. package/dist/src/agent/reply/post-compaction-context.js +11 -6
  178. package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
  179. package/dist/src/agent/reply/startup-context.js +8 -9
  180. package/dist/src/agent/reply/startup-context.js.map +1 -1
  181. package/dist/src/agent/service/process-direct-streaming.js +1 -4
  182. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  183. package/dist/src/agent/service/session-context-report.js +1 -1
  184. package/dist/src/agent/service/session-context-report.js.map +1 -1
  185. package/dist/src/agent/service.js +21 -25
  186. package/dist/src/agent/service.js.map +1 -1
  187. package/dist/src/agent/service.types.d.ts +1 -2
  188. package/dist/src/agent/session/session-hydrator.js +1 -2
  189. package/dist/src/agent/session/session-hydrator.js.map +1 -1
  190. package/dist/src/agent/session/session-inspector.d.ts +1 -1
  191. package/dist/src/agent/session/session-inspector.js +9 -14
  192. package/dist/src/agent/session/session-inspector.js.map +1 -1
  193. package/dist/src/agent/skills/hub-pull.js +1 -1
  194. package/dist/src/agent/starter-agents.d.ts +1 -3
  195. package/dist/src/agent/starter-agents.js +13 -21
  196. package/dist/src/agent/starter-agents.js.map +1 -1
  197. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -2
  198. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  199. package/dist/src/agent/tools/composio-tool.d.ts +8 -0
  200. package/dist/src/agent/tools/composio-tool.js +46 -0
  201. package/dist/src/agent/tools/composio-tool.js.map +1 -0
  202. package/dist/src/agent/tools/curated-memory-tool.d.ts +2 -5
  203. package/dist/src/agent/tools/curated-memory-tool.js +20 -16
  204. package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
  205. package/dist/src/agent/tools/factory.d.ts +0 -4
  206. package/dist/src/agent/tools/factory.js +32 -66
  207. package/dist/src/agent/tools/factory.js.map +1 -1
  208. package/dist/src/agent/tools/image-generate-tool.d.ts +1 -1
  209. package/dist/src/agent/tools/image-generate-tool.js +19 -14
  210. package/dist/src/agent/tools/image-generate-tool.js.map +1 -1
  211. package/dist/src/agent/tools/image-tool.js +1 -3
  212. package/dist/src/agent/tools/image-tool.js.map +1 -1
  213. package/dist/src/agent/tools/index.d.ts +1 -0
  214. package/dist/src/agent/tools/index.js +2 -1
  215. package/dist/src/agent/tools/memory-tool.d.ts +2 -2
  216. package/dist/src/agent/tools/memory-tool.js +39 -14
  217. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  218. package/dist/src/agent/tools/session-search-tool.js +1 -3
  219. package/dist/src/agent/tools/session-search-tool.js.map +1 -1
  220. package/dist/src/agent/tools/web-extract.js +6 -5
  221. package/dist/src/agent/tools/web-extract.js.map +1 -1
  222. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +1 -1
  223. package/dist/src/agent/workflow/builtins/audit-repo.js +15 -2
  224. package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
  225. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +1 -1
  226. package/dist/src/agent/workflow/builtins/client-proposal.js +10 -1
  227. package/dist/src/agent/workflow/builtins/client-proposal.js.map +1 -1
  228. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +1 -1
  229. package/dist/src/agent/workflow/builtins/competitor-scan.js +16 -2
  230. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +1 -1
  231. package/dist/src/agent/workflow/builtins/content-draft.d.ts +1 -1
  232. package/dist/src/agent/workflow/builtins/content-draft.js +15 -2
  233. package/dist/src/agent/workflow/builtins/content-draft.js.map +1 -1
  234. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +1 -1
  235. package/dist/src/agent/workflow/builtins/content-repurpose.js +10 -1
  236. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +1 -1
  237. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
  238. package/dist/src/agent/workflow/builtins/debug-incident.js +9 -1
  239. package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
  240. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +1 -1
  241. package/dist/src/agent/workflow/builtins/decision-compare.js +16 -2
  242. package/dist/src/agent/workflow/builtins/decision-compare.js.map +1 -1
  243. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +1 -1
  244. package/dist/src/agent/workflow/builtins/implementation-plan.js +11 -1
  245. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +1 -1
  246. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +1 -1
  247. package/dist/src/agent/workflow/builtins/inbox-triage.js +11 -1
  248. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +1 -1
  249. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +1 -1
  250. package/dist/src/agent/workflow/builtins/meeting-prep.js +9 -1
  251. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +1 -1
  252. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +1 -1
  253. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +9 -1
  254. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
  255. package/dist/src/agent/workflow/builtins/offer-design.d.ts +1 -1
  256. package/dist/src/agent/workflow/builtins/offer-design.js +10 -1
  257. package/dist/src/agent/workflow/builtins/offer-design.js.map +1 -1
  258. package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
  259. package/dist/src/agent/workflow/builtins/pr-review.js +9 -1
  260. package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
  261. package/dist/src/agent/workflow/builtins/release-check.d.ts +1 -1
  262. package/dist/src/agent/workflow/builtins/release-check.js +10 -1
  263. package/dist/src/agent/workflow/builtins/release-check.js.map +1 -1
  264. package/dist/src/agent/workflow/builtins/research.d.ts +1 -1
  265. package/dist/src/agent/workflow/builtins/research.js +16 -2
  266. package/dist/src/agent/workflow/builtins/research.js.map +1 -1
  267. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +1 -1
  268. package/dist/src/agent/workflow/builtins/weekly-review.js +9 -1
  269. package/dist/src/agent/workflow/builtins/weekly-review.js.map +1 -1
  270. package/dist/src/agent/workflow/subagent-runner.js +1 -3
  271. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  272. package/dist/src/agent-manifest/index.d.ts +4 -0
  273. package/dist/src/agent-manifest/index.js +10 -0
  274. package/dist/src/agent-manifest/index.js.map +1 -0
  275. package/dist/src/agent-manifest/prompt.d.ts +2 -0
  276. package/dist/src/agent-manifest/prompt.js +57 -0
  277. package/dist/src/agent-manifest/prompt.js.map +1 -0
  278. package/dist/src/agent-manifest/resolver.d.ts +11 -0
  279. package/dist/src/agent-manifest/resolver.js +93 -0
  280. package/dist/src/agent-manifest/resolver.js.map +1 -0
  281. package/dist/src/agent-manifest/schema.d.ts +778 -0
  282. package/dist/src/agent-manifest/schema.js +267 -0
  283. package/dist/src/agent-manifest/schema.js.map +1 -0
  284. package/dist/src/agent-manifest/validator.d.ts +24 -0
  285. package/dist/src/agent-manifest/validator.js +87 -0
  286. package/dist/src/agent-manifest/validator.js.map +1 -0
  287. package/dist/src/agent-runtime/boundary-guard.d.ts +12 -0
  288. package/dist/src/agent-runtime/boundary-guard.js +23 -0
  289. package/dist/src/agent-runtime/boundary-guard.js.map +1 -0
  290. package/dist/src/agent-runtime/index.d.ts +7 -0
  291. package/dist/src/agent-runtime/index.js +8 -0
  292. package/dist/src/agent-runtime/memory-runtime.d.ts +21 -0
  293. package/dist/src/agent-runtime/memory-runtime.js +50 -0
  294. package/dist/src/agent-runtime/memory-runtime.js.map +1 -0
  295. package/dist/src/agent-runtime/model-router.d.ts +11 -0
  296. package/dist/src/agent-runtime/model-router.js +16 -0
  297. package/dist/src/agent-runtime/model-router.js.map +1 -0
  298. package/dist/src/agent-runtime/run-trace.d.ts +27 -0
  299. package/dist/src/agent-runtime/run-trace.js +53 -0
  300. package/dist/src/agent-runtime/run-trace.js.map +1 -0
  301. package/dist/src/agent-runtime/runtime-profile.d.ts +24 -0
  302. package/dist/src/agent-runtime/runtime-profile.js +44 -0
  303. package/dist/src/agent-runtime/runtime-profile.js.map +1 -0
  304. package/dist/src/agent-runtime/tool-registry.d.ts +28 -0
  305. package/dist/src/agent-runtime/tool-registry.js +52 -0
  306. package/dist/src/agent-runtime/tool-registry.js.map +1 -0
  307. package/dist/src/agent-runtime/workflow-runtime.d.ts +31 -0
  308. package/dist/src/agent-runtime/workflow-runtime.js +34 -0
  309. package/dist/src/agent-runtime/workflow-runtime.js.map +1 -0
  310. package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
  311. package/dist/src/browser/actions/extension-registry-bridge.js.map +1 -1
  312. package/dist/src/browser/actions/registry.js +5 -8
  313. package/dist/src/browser/actions/registry.js.map +1 -1
  314. package/dist/src/browser/backend-from-config.d.ts +1 -1
  315. package/dist/src/browser/backend-from-config.js +50 -71
  316. package/dist/src/browser/backend-from-config.js.map +1 -1
  317. package/dist/src/browser/browser-command-timeout.d.ts +0 -1
  318. package/dist/src/browser/browser-command-timeout.js +3 -7
  319. package/dist/src/browser/browser-command-timeout.js.map +1 -1
  320. package/dist/src/browser/providers/browser-ext-install.d.ts +2 -12
  321. package/dist/src/browser/providers/browser-ext-install.js +3 -8
  322. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  323. package/dist/src/browser/readiness.js +16 -16
  324. package/dist/src/browser/readiness.js.map +1 -1
  325. package/dist/src/browser/schemas.js +1 -1
  326. package/dist/src/browser/schemas.js.map +1 -1
  327. package/dist/src/chat-commands/builtins/config.js +4 -4
  328. package/dist/src/chat-commands/builtins/config.js.map +1 -1
  329. package/dist/src/chat-commands/builtins/thinking.js +16 -42
  330. package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
  331. package/dist/src/chat-commands/config-paths.js +1 -1
  332. package/dist/src/chat-commands/config-paths.js.map +1 -1
  333. package/dist/src/chat-commands/context.js +3 -4
  334. package/dist/src/chat-commands/context.js.map +1 -1
  335. package/dist/src/cli/command-manifest.js +1 -1
  336. package/dist/src/cli/command-manifest.js.map +1 -1
  337. package/dist/src/cli/commands/agent.js +3 -1
  338. package/dist/src/cli/commands/agent.js.map +1 -1
  339. package/dist/src/cli/commands/agents.js +3 -6
  340. package/dist/src/cli/commands/agents.js.map +1 -1
  341. package/dist/src/cli/commands/browser-cli-helpers.js +9 -11
  342. package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
  343. package/dist/src/cli/commands/config.js +5 -5
  344. package/dist/src/cli/commands/config.js.map +1 -1
  345. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  346. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -17
  347. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
  348. package/dist/src/cli/commands/goal.js +1 -1
  349. package/dist/src/cli/commands/image.js +13 -372
  350. package/dist/src/cli/commands/image.js.map +1 -1
  351. package/dist/src/cli/commands/models.js +26 -10
  352. package/dist/src/cli/commands/models.js.map +1 -1
  353. package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
  354. package/dist/src/cli/commands/onboard/model.js +20 -22
  355. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  356. package/dist/src/cli/commands/onboard.js +1 -1
  357. package/dist/src/cli/commands/onboard.js.map +1 -1
  358. package/dist/src/cli/utils/init-workspace-core.d.ts +1 -4
  359. package/dist/src/cli/utils/init-workspace-core.js +7 -6
  360. package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
  361. package/dist/src/commands/agents.config.d.ts +0 -1
  362. package/dist/src/commands/agents.config.js +66 -12
  363. package/dist/src/commands/agents.config.js.map +1 -1
  364. package/dist/src/config/agent-profile.d.ts +5 -17
  365. package/dist/src/config/agent-profile.js +31 -64
  366. package/dist/src/config/agent-profile.js.map +1 -1
  367. package/dist/src/config/agent-typed-models.d.ts +1 -1
  368. package/dist/src/config/agent-typed-models.js +0 -1
  369. package/dist/src/config/agent-typed-models.js.map +1 -1
  370. package/dist/src/config/index.js +3 -3
  371. package/dist/src/config/integration.d.ts +1 -1
  372. package/dist/src/config/reload.js +1 -1
  373. package/dist/src/config/reload.js.map +1 -1
  374. package/dist/src/config/rules.js +6 -56
  375. package/dist/src/config/rules.js.map +1 -1
  376. package/dist/src/config/schema.d.ts +925 -781
  377. package/dist/src/config/schema.js +157 -424
  378. package/dist/src/config/schema.js.map +1 -1
  379. package/dist/src/connectors/composio-triggers.d.ts +10 -0
  380. package/dist/src/connectors/composio-triggers.js +32 -0
  381. package/dist/src/connectors/composio-triggers.js.map +1 -0
  382. package/dist/src/connectors/composio.d.ts +54 -0
  383. package/dist/src/connectors/composio.js +334 -0
  384. package/dist/src/connectors/composio.js.map +1 -0
  385. package/dist/src/connectors/health.js +16 -1
  386. package/dist/src/connectors/health.js.map +1 -1
  387. package/dist/src/connectors/install.d.ts +2 -1
  388. package/dist/src/connectors/install.js +50 -13
  389. package/dist/src/connectors/install.js.map +1 -1
  390. package/dist/src/connectors/instances.js +57 -6
  391. package/dist/src/connectors/instances.js.map +1 -1
  392. package/dist/src/connectors/lifecycle.d.ts +3 -0
  393. package/dist/src/connectors/lifecycle.js +23 -0
  394. package/dist/src/connectors/lifecycle.js.map +1 -0
  395. package/dist/src/connectors/materialize.js +2 -1
  396. package/dist/src/connectors/materialize.js.map +1 -1
  397. package/dist/src/connectors/providers.d.ts +1 -0
  398. package/dist/src/connectors/providers.js +10 -2
  399. package/dist/src/connectors/providers.js.map +1 -1
  400. package/dist/src/connectors/registries/modelscope.d.ts +2 -0
  401. package/dist/src/connectors/registries/modelscope.js +205 -0
  402. package/dist/src/connectors/registries/modelscope.js.map +1 -0
  403. package/dist/src/connectors/registries/official-mcp.d.ts +2 -0
  404. package/dist/src/connectors/registries/official-mcp.js +142 -0
  405. package/dist/src/connectors/registries/official-mcp.js.map +1 -0
  406. package/dist/src/connectors/registries/search.d.ts +12 -0
  407. package/dist/src/connectors/registries/search.js +89 -0
  408. package/dist/src/connectors/registries/search.js.map +1 -0
  409. package/dist/src/connectors/registries/smithery.d.ts +2 -0
  410. package/dist/src/connectors/registries/smithery.js +98 -0
  411. package/dist/src/connectors/registries/smithery.js.map +1 -0
  412. package/dist/src/connectors/registries/types.d.ts +20 -0
  413. package/dist/src/connectors/registries/types.js +1 -0
  414. package/dist/src/connectors/secret-store.js +4 -2
  415. package/dist/src/connectors/secret-store.js.map +1 -1
  416. package/dist/src/connectors/setup-secrets.d.ts +15 -0
  417. package/dist/src/connectors/setup-secrets.js +64 -0
  418. package/dist/src/connectors/setup-secrets.js.map +1 -0
  419. package/dist/src/connectors/supervisor.d.ts +15 -0
  420. package/dist/src/connectors/supervisor.js +73 -0
  421. package/dist/src/connectors/supervisor.js.map +1 -0
  422. package/dist/src/connectors/types.d.ts +27 -3
  423. package/dist/src/connectors/usage.js +6 -1
  424. package/dist/src/connectors/usage.js.map +1 -1
  425. package/dist/src/cron/index.js +1 -1
  426. package/dist/src/cron/service.js +1 -1
  427. package/dist/src/cron/validation.d.ts +3 -3
  428. package/dist/src/extensions/activation-context.js +13 -7
  429. package/dist/src/extensions/activation-context.js.map +1 -1
  430. package/dist/src/gateway/agents-admin.d.ts +17 -18
  431. package/dist/src/gateway/agents-admin.js +123 -88
  432. package/dist/src/gateway/agents-admin.js.map +1 -1
  433. package/dist/src/gateway/capability-presets-admin.d.ts +56 -0
  434. package/dist/src/gateway/capability-presets-admin.js +214 -0
  435. package/dist/src/gateway/capability-presets-admin.js.map +1 -0
  436. package/dist/src/gateway/hono/lib/agent-model.d.ts +1 -1
  437. package/dist/src/gateway/hono/lib/agent-model.js +1 -1
  438. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  439. package/dist/src/gateway/hono/lib/config-payload.d.ts +234 -127
  440. package/dist/src/gateway/hono/lib/config-payload.js +13 -37
  441. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  442. package/dist/src/gateway/hono/routes/agents.js +56 -33
  443. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  444. package/dist/src/gateway/hono/routes/browser.js +8 -15
  445. package/dist/src/gateway/hono/routes/browser.js.map +1 -1
  446. package/dist/src/gateway/hono/routes/capability-presets.d.ts +3 -0
  447. package/dist/src/gateway/hono/routes/capability-presets.js +145 -0
  448. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -0
  449. package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +1 -17
  450. package/dist/src/gateway/hono/routes/config-patch/agents.js +2 -443
  451. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  452. package/dist/src/gateway/hono/routes/config-patch/misc.js +7 -1
  453. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  454. package/dist/src/gateway/hono/routes/config.js +1 -1
  455. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  456. package/dist/src/gateway/hono/routes/connectors.js +230 -3
  457. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  458. package/dist/src/gateway/hono/routes/dreaming.js +7 -0
  459. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  460. package/dist/src/gateway/hono/routes/goals.js +52 -5
  461. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  462. package/dist/src/gateway/hono/routes/index.js +2 -0
  463. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  464. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  465. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  466. package/dist/src/gateway/hono/routes/memory.d.ts +3 -0
  467. package/dist/src/gateway/hono/routes/memory.js +290 -0
  468. package/dist/src/gateway/hono/routes/memory.js.map +1 -0
  469. package/dist/src/gateway/hono/routes/voice.js +14 -1
  470. package/dist/src/gateway/hono/routes/voice.js.map +1 -1
  471. package/dist/src/gateway/hono/sse.js.map +1 -1
  472. package/dist/src/gateway/service/agent-runner.d.ts +5 -12
  473. package/dist/src/gateway/service/agent-runner.js +8 -8
  474. package/dist/src/gateway/service/agent-runner.js.map +1 -1
  475. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -10
  476. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  477. package/dist/src/gateway/service.d.ts +2 -2
  478. package/dist/src/gateway/service.js +20 -16
  479. package/dist/src/gateway/service.js.map +1 -1
  480. package/dist/src/gateway/user-turn-input.d.ts +18 -0
  481. package/dist/src/gateway/user-turn-input.js +16 -0
  482. package/dist/src/gateway/user-turn-input.js.map +1 -0
  483. package/dist/src/goals/goal-queue-store.d.ts +2 -1
  484. package/dist/src/goals/goal-queue-store.js +2 -2
  485. package/dist/src/goals/goal-queue-store.js.map +1 -1
  486. package/dist/src/goals/goal-queue-types.d.ts +4 -3
  487. package/dist/src/goals/goal-runner.js +25 -3
  488. package/dist/src/goals/goal-runner.js.map +1 -1
  489. package/dist/src/goals/goal-service.d.ts +6 -1
  490. package/dist/src/goals/goal-service.js +9 -2
  491. package/dist/src/goals/goal-service.js.map +1 -1
  492. package/dist/src/goals/goal-store.d.ts +7 -1
  493. package/dist/src/goals/goal-store.js +42 -0
  494. package/dist/src/goals/goal-store.js.map +1 -1
  495. package/dist/src/goals/types.d.ts +10 -0
  496. package/dist/src/notes/agent-context.js +2 -2
  497. package/dist/src/providers/index.d.ts +2 -2
  498. package/dist/src/providers/index.js +10 -14
  499. package/dist/src/providers/index.js.map +1 -1
  500. package/dist/src/session/index.js +1 -1
  501. package/dist/src/session/session-workspace.js +7 -2
  502. package/dist/src/session/session-workspace.js.map +1 -1
  503. package/dist/src/session/store.js +5 -0
  504. package/dist/src/session/store.js.map +1 -1
  505. package/dist/src/session/thinking-resolve.d.ts +1 -1
  506. package/dist/src/session/thinking-resolve.js +1 -1
  507. package/dist/src/session/thinking-resolve.js.map +1 -1
  508. package/dist/src/storage/sqlite/connection.js +1 -1
  509. package/dist/src/storage/sqlite/index.d.ts +1 -0
  510. package/dist/src/storage/sqlite/index.js +2 -1
  511. package/dist/src/storage/sqlite/memory-records-repository.d.ts +101 -0
  512. package/dist/src/storage/sqlite/memory-records-repository.js +309 -0
  513. package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
  514. package/dist/src/storage/sqlite/migrations/011_goal_context_messages.sql +8 -0
  515. package/dist/src/storage/sqlite/migrations/012_memory_records.sql +63 -0
  516. package/dist/src/storage/sqlite/migrations/013_memory_trace_events.sql +21 -0
  517. package/dist/src/storage/sqlite/migrations/runner.d.ts +2 -2
  518. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  519. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  520. package/dist/src/storage/sqlite/migrations/runner.ts +2 -2
  521. package/dist/src/storage/sqlite/schema.js +3 -3
  522. package/dist/src/storage/sqlite/schema.sql +95 -0
  523. package/dist/src/tui/backends/embedded-backend.js +6 -4
  524. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  525. package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
  526. package/dist/src/voice/tts/openai-compatible-speech.d.ts +1 -1
  527. package/dist/src/voice/tts/openai-compatible-speech.js.map +1 -1
  528. package/dist/src/voice/tts/providers/edge-speech.js +14 -2
  529. package/dist/src/voice/tts/providers/edge-speech.js.map +1 -1
  530. package/dist/src/voice/tts/speak-core.js +3 -3
  531. package/dist/src/voice/tts/speak-core.js.map +1 -1
  532. package/dist/src/voice/tts/speech-provider-types.d.ts +2 -2
  533. package/dist/src/voice/tts/types.js +1 -1
  534. package/dist/src/voice/tts/types.js.map +1 -1
  535. package/dist/src/workflows/domain/result.d.ts +0 -1
  536. package/dist/src/workflows/engine/workflow-engine.js +7 -23
  537. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  538. package/dist/src/workflows/service/workflow-run-service.js +3 -4
  539. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  540. package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
  541. package/package.json +4 -3
  542. package/dist/gateway/static/root/assets/agent-browser-settings-page-DPXc4hz8.js +0 -6
  543. package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-CTJ0YnRQ.js +0 -1
  544. package/dist/gateway/static/root/assets/agents-zJXQfJ_W.js +0 -71
  545. package/dist/gateway/static/root/assets/app-management-settings-panel-DzGbdr04.js +0 -1
  546. package/dist/gateway/static/root/assets/apps-page-CPjfyzSD.js +0 -1
  547. package/dist/gateway/static/root/assets/config-api-NOoPiIYz.js +0 -3
  548. package/dist/gateway/static/root/assets/connectors-settings-CAXYMOdp.js +0 -2
  549. package/dist/gateway/static/root/assets/cron-api-C9BOqAXd.js +0 -1
  550. package/dist/gateway/static/root/assets/cron-page-DuUbBeKI.js +0 -3
  551. package/dist/gateway/static/root/assets/dreaming-settings-DQ4DtiK1.js +0 -1
  552. package/dist/gateway/static/root/assets/gateway-config-api-C-xjn__h.js +0 -1
  553. package/dist/gateway/static/root/assets/gateway-settings-BMPwIjKI.js +0 -1
  554. package/dist/gateway/static/root/assets/goal-detail-page-BJsyjJnF.js +0 -1
  555. package/dist/gateway/static/root/assets/goals-page-BerDgIhw.js +0 -2
  556. package/dist/gateway/static/root/assets/goals-settings-ByTjeAto.js +0 -1
  557. package/dist/gateway/static/root/assets/heartbeat-settings-TbHgcjTn.js +0 -1
  558. package/dist/gateway/static/root/assets/index-AkTrf6Pb.js +0 -122
  559. package/dist/gateway/static/root/assets/index-fh5sXTj9.css +0 -1
  560. package/dist/gateway/static/root/assets/logs-page-DGXuPf5B.js +0 -2
  561. package/dist/gateway/static/root/assets/messages-upgxw6Ub.js +0 -3
  562. package/dist/gateway/static/root/assets/models-hub-panel-Bot16nn7.js +0 -2
  563. package/dist/gateway/static/root/assets/note-detail-page-Brlyou8M.js +0 -2
  564. package/dist/gateway/static/root/assets/notes-page-DvZ4pwc-.js +0 -1
  565. package/dist/gateway/static/root/assets/remote-access-hub-BZEDmxbZ.js +0 -1
  566. package/dist/gateway/static/root/assets/sessions-page-DdGGlsfn.js +0 -1
  567. package/dist/gateway/static/root/assets/settings-advanced-gate-DlkEkPf9.js +0 -1
  568. package/dist/gateway/static/root/assets/settings-page-DFPTrsPF.js +0 -1
  569. package/dist/gateway/static/root/assets/setup-status-panel-CYCCfgh4.js +0 -1
  570. package/dist/gateway/static/root/assets/shares-settings-Bff1pGd0.js +0 -1
  571. package/dist/gateway/static/root/assets/skill-reload-api-CJGKpBur.js +0 -1
  572. package/dist/gateway/static/root/assets/skills-page-C6ocduTD.js +0 -2
  573. package/dist/gateway/static/root/assets/system-settings-panel-5jrIEr5b.js +0 -1
  574. package/dist/gateway/static/root/assets/use-agent-defaults-form-BuiXLIs5.js +0 -1
  575. package/dist/gateway/static/root/assets/use-settings-tab-guard-CW5JORnl.js +0 -1
  576. package/dist/gateway/static/root/assets/voice-api-key-field-DDoQyghO.js +0 -1
  577. package/dist/gateway/static/root/assets/workflow-page.utils-CKjeEGqx.js +0 -1
  578. package/dist/gateway/static/root/assets/workflows-page-B604ehHG.js +0 -18
@@ -241,8 +241,8 @@ export declare const JobDataSchema: z.ZodObject<{
241
241
  }, z.core.$strict>>;
242
242
  }, z.core.$strict>;
243
243
  export declare const AddJobRequestSchema: z.ZodObject<{
244
- agentId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
245
244
  description: z.ZodOptional<z.ZodString>;
245
+ agentId: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
246
246
  workingDirectory: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
247
247
  sessionKey: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
248
248
  deleteAfterRun: z.ZodOptional<z.ZodBoolean>;
@@ -368,10 +368,10 @@ export declare const AddJobRequestSchema: z.ZodObject<{
368
368
  }, z.core.$strict>>;
369
369
  }, z.core.$strict>;
370
370
  export declare const UpdateJobRequestSchema: z.ZodObject<{
371
+ description: z.ZodOptional<z.ZodOptional<z.ZodString>>;
371
372
  enabled: z.ZodOptional<z.ZodBoolean>;
372
- agentId: z.ZodOptional<z.ZodPreprocess<z.ZodOptional<z.ZodString>>>;
373
373
  name: z.ZodOptional<z.ZodString>;
374
- description: z.ZodOptional<z.ZodOptional<z.ZodString>>;
374
+ agentId: z.ZodOptional<z.ZodPreprocess<z.ZodOptional<z.ZodString>>>;
375
375
  workingDirectory: z.ZodOptional<z.ZodPreprocess<z.ZodOptional<z.ZodString>>>;
376
376
  sessionKey: z.ZodOptional<z.ZodPreprocess<z.ZodOptional<z.ZodString>>>;
377
377
  state: z.ZodOptional<z.ZodDefault<z.ZodObject<{
@@ -91,14 +91,20 @@ function collectConfiguredProviderIds(config) {
91
91
  function defaultModelId(config) {
92
92
  const agents = config?.agents;
93
93
  if (!isRecord(agents)) return void 0;
94
- const defaults = agents.defaults;
95
- if (!isRecord(defaults)) return void 0;
96
- const models = defaults.models;
94
+ const list = agents.list;
95
+ if (!Array.isArray(list)) return void 0;
96
+ const defaultId = typeof agents.default === "string" ? agents.default : void 0;
97
+ const entry = list.find((candidate) => isRecord(candidate) && candidate.id === defaultId) ?? list.find((candidate) => isRecord(candidate) && candidate.enabled !== false);
98
+ if (!isRecord(entry)) return void 0;
99
+ const models = entry.models;
97
100
  if (!isRecord(models)) return void 0;
98
- const model = models.chat;
99
- if (isRecord(model)) {
100
- const primary = model.primary;
101
- if (typeof primary === "string" && primary.trim().length > 0) return primary;
101
+ const defaultRole = typeof models.defaultRole === "string" ? models.defaultRole : void 0;
102
+ const roles = models.roles;
103
+ if (!defaultRole || !isRecord(roles)) return void 0;
104
+ const role = roles[defaultRole];
105
+ if (isRecord(role)) {
106
+ const model = role.model;
107
+ if (typeof model === "string" && model.trim().length > 0) return model;
102
108
  }
103
109
  }
104
110
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"activation-context.js","names":["root"],"sources":["../../../src/extensions/activation-context.ts"],"sourcesContent":["/**\n * Build ActivationContext from app config + optional overrides.\n */\n\nimport type { Config } from '../config/config-surface.js';\nimport { mergeSttConfigFromAppConfig } from '../channels/attachments/voice-stt-webchat.js';\nimport { collectSttProviderConfigEntries } from '../voice/stt/config-slice.js';\nimport { isSttProviderConfigured } from '../voice/stt/list-providers.js';\nimport { collectTtsProviderConfigEntries } from '../voice/tts/config-slice.js';\nimport { isProviderConfigured } from '../voice/tts/factory.js';\nimport { mergeTtsConfigFromAppConfig } from '../voice/tts/merge-config.js';\nimport { isProviderConfiguredSync } from '../providers/index.js';\nimport { PROVIDER_ENV_MAP } from '../providers/env-keys.js';\nimport type { ActivationContext } from './activation-planner.js';\n\nfunction isRecord(x: unknown): x is Record<string, unknown> {\n return typeof x === 'object' && x !== null && !Array.isArray(x);\n}\n\nfunction telegramConfigured(ch: Record<string, unknown> | undefined): boolean {\n if (!ch) return false;\n if (ch.enabled === true) return true;\n const accounts = ch.accounts;\n if (isRecord(accounts)) {\n for (const acc of Object.values(accounts)) {\n if (!isRecord(acc)) continue;\n if (acc.enabled === false) continue;\n if (typeof acc.botToken === 'string' && acc.botToken.trim().length > 0) return true;\n }\n }\n return false;\n}\n\nfunction weixinConfigured(ch: Record<string, unknown> | undefined): boolean {\n if (!ch) return false;\n if (ch.enabled === true) return true;\n const accounts = ch.accounts;\n if (isRecord(accounts) && Object.keys(accounts).length > 0) {\n for (const acc of Object.values(accounts)) {\n if (isRecord(acc) && acc.enabled === false) continue;\n return true;\n }\n }\n return false;\n}\n\n/**\n * Derive configured channel plugin ids from `channels.*` config.\n */\nexport function collectConfiguredChannelIds(config: unknown): string[] | undefined {\n const root = config as Record<string, unknown> | undefined;\n const channels = root?.channels;\n if (!isRecord(channels)) return undefined;\n\n const ids: string[] = [];\n\n if (telegramConfigured(channels.telegram as Record<string, unknown> | undefined)) {\n ids.push('telegram');\n }\n if (weixinConfigured(channels.weixin as Record<string, unknown> | undefined)) {\n ids.push('weixin');\n }\n\n for (const [key, value] of Object.entries(channels)) {\n if (key === 'telegram' || key === 'weixin') continue;\n if (isRecord(value) && value.enabled === true && !ids.includes(key)) {\n ids.push(key);\n }\n }\n\n return ids.length ? ids : undefined;\n}\n\nfunction collectConfiguredLlmProviderIds(config: unknown): string[] {\n const root = config as Record<string, unknown> | undefined;\n const candidateIds = new Set<string>(Object.keys(PROVIDER_ENV_MAP));\n const providers = root?.providers;\n if (isRecord(providers)) {\n for (const key of Object.keys(providers)) {\n candidateIds.add(key);\n }\n }\n const ids: string[] = [];\n for (const key of candidateIds) {\n if (isProviderConfiguredSync(key)) {\n ids.push(key);\n }\n }\n return ids;\n}\n\nfunction collectConfiguredSpeechProviderIds(config: unknown): string[] {\n const root = config as Record<string, unknown> | undefined;\n const messages = root?.messages;\n if (!isRecord(messages) || !isRecord(messages.tts)) {\n return [];\n }\n\n const ttsConfig = mergeTtsConfigFromAppConfig(messages.tts);\n const ids = new Set<string>();\n const primary = ttsConfig.provider?.trim();\n if (primary && isProviderConfigured(primary, ttsConfig)) {\n ids.add(primary);\n }\n for (const providerId of Object.keys(collectTtsProviderConfigEntries(ttsConfig))) {\n if (isProviderConfigured(providerId, ttsConfig)) {\n ids.add(providerId);\n }\n }\n return [...ids];\n}\n\nfunction collectConfiguredMediaUnderstandingProviderIds(config: unknown): string[] {\n const root = config as Record<string, unknown> | undefined;\n const tools = root?.tools;\n if (!isRecord(tools) || !isRecord(tools.media)) {\n return [];\n }\n\n const sttConfig = mergeSttConfigFromAppConfig(\n tools.media.audio as Parameters<typeof mergeSttConfigFromAppConfig>[0],\n tools.media as Parameters<typeof mergeSttConfigFromAppConfig>[1],\n );\n const ids = new Set<string>();\n const primary = sttConfig.provider?.trim();\n if (primary && isSttProviderConfigured(primary, sttConfig)) {\n ids.add(primary);\n }\n for (const providerId of Object.keys(collectSttProviderConfigEntries(sttConfig))) {\n if (isSttProviderConfigured(providerId, sttConfig)) {\n ids.add(providerId);\n }\n }\n return [...ids];\n}\n\n/**\n * Derive configured provider ids for extension activation (LLM + speech + STT).\n */\nexport function collectConfiguredProviderIds(config: unknown): string[] | undefined {\n const ids = new Set<string>([\n ...collectConfiguredLlmProviderIds(config),\n ...collectConfiguredSpeechProviderIds(config),\n ...collectConfiguredMediaUnderstandingProviderIds(config),\n ]);\n return ids.size > 0 ? [...ids] : undefined;\n}\n\nfunction defaultModelId(config: unknown): string | undefined {\n const root = config as Record<string, unknown> | undefined;\n const agents = root?.agents;\n if (!isRecord(agents)) return undefined;\n const defaults = agents.defaults;\n if (!isRecord(defaults)) return undefined;\n const models = defaults.models;\n if (!isRecord(models)) return undefined;\n const model = models.chat;\n if (isRecord(model)) {\n const primary = model.primary;\n if (typeof primary === 'string' && primary.trim().length > 0) return primary;\n }\n return undefined;\n}\n\n/**\n * Merge partial activation context over values inferred from loaded app config.\n */\nexport function mergeActivationContext(\n appConfig: Config | Record<string, unknown> | undefined,\n partial?: Partial<ActivationContext>,\n): ActivationContext {\n const ext = appConfig && isRecord((appConfig as Record<string, unknown>).extensions)\n ? ((appConfig as Record<string, unknown>).extensions as Record<string, unknown>)\n : undefined;\n\n const base: ActivationContext = {\n enabledIds: Array.isArray(ext?.enabled)\n ? ext!.enabled.filter((x): x is string => typeof x === 'string')\n : undefined,\n disabledIds: Array.isArray(ext?.disabled)\n ? ext!.disabled.filter((x): x is string => typeof x === 'string')\n : undefined,\n requestedModelId: defaultModelId(appConfig),\n configuredProviderIds: collectConfiguredProviderIds(appConfig),\n configuredChannelIds: collectConfiguredChannelIds(appConfig),\n env: process.env,\n };\n\n return {\n env: partial?.env ?? base.env,\n enabledIds: partial?.enabledIds !== undefined ? partial.enabledIds : base.enabledIds,\n disabledIds: partial?.disabledIds !== undefined ? partial.disabledIds : base.disabledIds,\n requestedModelId:\n partial?.requestedModelId !== undefined ? partial.requestedModelId : base.requestedModelId,\n configuredProviderIds:\n partial?.configuredProviderIds !== undefined\n ? partial.configuredProviderIds\n : base.configuredProviderIds,\n configuredChannelIds:\n partial?.configuredChannelIds !== undefined\n ? partial.configuredChannelIds\n : base.configuredChannelIds,\n };\n}\n"],"mappings":";;;;;;;;;gBAWiE;eACL;AAG5D,SAAS,SAAS,GAA0C;AAC1D,QAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,CAAC,MAAM,QAAQ,EAAE;;AAGjE,SAAS,mBAAmB,IAAkD;AAC5E,KAAI,CAAC,GAAI,QAAO;AAChB,KAAI,GAAG,YAAY,KAAM,QAAO;CAChC,MAAM,WAAW,GAAG;AACpB,KAAI,SAAS,SAAS,CACpB,MAAK,MAAM,OAAO,OAAO,OAAO,SAAS,EAAE;AACzC,MAAI,CAAC,SAAS,IAAI,CAAE;AACpB,MAAI,IAAI,YAAY,MAAO;AAC3B,MAAI,OAAO,IAAI,aAAa,YAAY,IAAI,SAAS,MAAM,CAAC,SAAS,EAAG,QAAO;;AAGnF,QAAO;;AAGT,SAAS,iBAAiB,IAAkD;AAC1E,KAAI,CAAC,GAAI,QAAO;AAChB,KAAI,GAAG,YAAY,KAAM,QAAO;CAChC,MAAM,WAAW,GAAG;AACpB,KAAI,SAAS,SAAS,IAAI,OAAO,KAAK,SAAS,CAAC,SAAS,EACvD,MAAK,MAAM,OAAO,OAAO,OAAO,SAAS,EAAE;AACzC,MAAI,SAAS,IAAI,IAAI,IAAI,YAAY,MAAO;AAC5C,SAAO;;AAGX,QAAO;;;;;AAMT,SAAgB,4BAA4B,QAAuC;CAEjF,MAAM,WAAWA,QAAM;AACvB,KAAI,CAAC,SAAS,SAAS,CAAE,QAAO,KAAA;CAEhC,MAAM,MAAgB,EAAE;AAExB,KAAI,mBAAmB,SAAS,SAAgD,CAC9E,KAAI,KAAK,WAAW;AAEtB,KAAI,iBAAiB,SAAS,OAA8C,CAC1E,KAAI,KAAK,SAAS;AAGpB,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,SAAS,EAAE;AACnD,MAAI,QAAQ,cAAc,QAAQ,SAAU;AAC5C,MAAI,SAAS,MAAM,IAAI,MAAM,YAAY,QAAQ,CAAC,IAAI,SAAS,IAAI,CACjE,KAAI,KAAK,IAAI;;AAIjB,QAAO,IAAI,SAAS,MAAM,KAAA;;AAG5B,SAAS,gCAAgC,QAA2B;CAClE,MAAM,OAAO;CACb,MAAM,eAAe,IAAI,IAAY,OAAO,KAAK,iBAAiB,CAAC;CACnE,MAAM,YAAY,MAAM;AACxB,KAAI,SAAS,UAAU,CACrB,MAAK,MAAM,OAAO,OAAO,KAAK,UAAU,CACtC,cAAa,IAAI,IAAI;CAGzB,MAAM,MAAgB,EAAE;AACxB,MAAK,MAAM,OAAO,aAChB,KAAI,yBAAyB,IAAI,CAC/B,KAAI,KAAK,IAAI;AAGjB,QAAO;;AAGT,SAAS,mCAAmC,QAA2B;CAErE,MAAM,WAAWA,QAAM;AACvB,KAAI,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,SAAS,IAAI,CAChD,QAAO,EAAE;CAGX,MAAM,YAAY,4BAA4B,SAAS,IAAI;CAC3D,MAAM,sBAAM,IAAI,KAAa;CAC7B,MAAM,UAAU,UAAU,UAAU,MAAM;AAC1C,KAAI,WAAW,qBAAqB,SAAS,UAAU,CACrD,KAAI,IAAI,QAAQ;AAElB,MAAK,MAAM,cAAc,OAAO,KAAK,gCAAgC,UAAU,CAAC,CAC9E,KAAI,qBAAqB,YAAY,UAAU,CAC7C,KAAI,IAAI,WAAW;AAGvB,QAAO,CAAC,GAAG,IAAI;;AAGjB,SAAS,+CAA+C,QAA2B;CAEjF,MAAM,QAAQA,QAAM;AACpB,KAAI,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,MAAM,CAC5C,QAAO,EAAE;CAGX,MAAM,YAAY,4BAChB,MAAM,MAAM,OACZ,MAAM,MACP;CACD,MAAM,sBAAM,IAAI,KAAa;CAC7B,MAAM,UAAU,UAAU,UAAU,MAAM;AAC1C,KAAI,WAAW,wBAAwB,SAAS,UAAU,CACxD,KAAI,IAAI,QAAQ;AAElB,MAAK,MAAM,cAAc,OAAO,KAAK,gCAAgC,UAAU,CAAC,CAC9E,KAAI,wBAAwB,YAAY,UAAU,CAChD,KAAI,IAAI,WAAW;AAGvB,QAAO,CAAC,GAAG,IAAI;;;;;AAMjB,SAAgB,6BAA6B,QAAuC;CAClF,MAAM,MAAM,IAAI,IAAY;EAC1B,GAAG,gCAAgC,OAAO;EAC1C,GAAG,mCAAmC,OAAO;EAC7C,GAAG,+CAA+C,OAAO;EAC1D,CAAC;AACF,QAAO,IAAI,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG,KAAA;;AAGnC,SAAS,eAAe,QAAqC;CAE3D,MAAM,SAASA,QAAM;AACrB,KAAI,CAAC,SAAS,OAAO,CAAE,QAAO,KAAA;CAC9B,MAAM,WAAW,OAAO;AACxB,KAAI,CAAC,SAAS,SAAS,CAAE,QAAO,KAAA;CAChC,MAAM,SAAS,SAAS;AACxB,KAAI,CAAC,SAAS,OAAO,CAAE,QAAO,KAAA;CAC9B,MAAM,QAAQ,OAAO;AACrB,KAAI,SAAS,MAAM,EAAE;EACnB,MAAM,UAAU,MAAM;AACtB,MAAI,OAAO,YAAY,YAAY,QAAQ,MAAM,CAAC,SAAS,EAAG,QAAO;;;;;;AAQzE,SAAgB,uBACd,WACA,SACmB;CACnB,MAAM,MAAM,aAAa,SAAU,UAAsC,WAAW,GAC9E,UAAsC,aACxC,KAAA;CAEJ,MAAM,OAA0B;EAC9B,YAAY,MAAM,QAAQ,KAAK,QAAQ,GACnC,IAAK,QAAQ,QAAQ,MAAmB,OAAO,MAAM,SAAS,GAC9D,KAAA;EACJ,aAAa,MAAM,QAAQ,KAAK,SAAS,GACrC,IAAK,SAAS,QAAQ,MAAmB,OAAO,MAAM,SAAS,GAC/D,KAAA;EACJ,kBAAkB,eAAe,UAAU;EAC3C,uBAAuB,6BAA6B,UAAU;EAC9D,sBAAsB,4BAA4B,UAAU;EAC5D,KAAK,QAAQ;EACd;AAED,QAAO;EACL,KAAK,SAAS,OAAO,KAAK;EAC1B,YAAY,SAAS,eAAe,KAAA,IAAY,QAAQ,aAAa,KAAK;EAC1E,aAAa,SAAS,gBAAgB,KAAA,IAAY,QAAQ,cAAc,KAAK;EAC7E,kBACE,SAAS,qBAAqB,KAAA,IAAY,QAAQ,mBAAmB,KAAK;EAC5E,uBACE,SAAS,0BAA0B,KAAA,IAC/B,QAAQ,wBACR,KAAK;EACX,sBACE,SAAS,yBAAyB,KAAA,IAC9B,QAAQ,uBACR,KAAK;EACZ"}
1
+ {"version":3,"file":"activation-context.js","names":["root"],"sources":["../../../src/extensions/activation-context.ts"],"sourcesContent":["/**\n * Build ActivationContext from app config + optional overrides.\n */\n\nimport type { Config } from '../config/config-surface.js';\nimport { mergeSttConfigFromAppConfig } from '../channels/attachments/voice-stt-webchat.js';\nimport { collectSttProviderConfigEntries } from '../voice/stt/config-slice.js';\nimport { isSttProviderConfigured } from '../voice/stt/list-providers.js';\nimport { collectTtsProviderConfigEntries } from '../voice/tts/config-slice.js';\nimport { isProviderConfigured } from '../voice/tts/factory.js';\nimport { mergeTtsConfigFromAppConfig } from '../voice/tts/merge-config.js';\nimport { isProviderConfiguredSync } from '../providers/index.js';\nimport { PROVIDER_ENV_MAP } from '../providers/env-keys.js';\nimport type { ActivationContext } from './activation-planner.js';\n\nfunction isRecord(x: unknown): x is Record<string, unknown> {\n return typeof x === 'object' && x !== null && !Array.isArray(x);\n}\n\nfunction telegramConfigured(ch: Record<string, unknown> | undefined): boolean {\n if (!ch) return false;\n if (ch.enabled === true) return true;\n const accounts = ch.accounts;\n if (isRecord(accounts)) {\n for (const acc of Object.values(accounts)) {\n if (!isRecord(acc)) continue;\n if (acc.enabled === false) continue;\n if (typeof acc.botToken === 'string' && acc.botToken.trim().length > 0) return true;\n }\n }\n return false;\n}\n\nfunction weixinConfigured(ch: Record<string, unknown> | undefined): boolean {\n if (!ch) return false;\n if (ch.enabled === true) return true;\n const accounts = ch.accounts;\n if (isRecord(accounts) && Object.keys(accounts).length > 0) {\n for (const acc of Object.values(accounts)) {\n if (isRecord(acc) && acc.enabled === false) continue;\n return true;\n }\n }\n return false;\n}\n\n/**\n * Derive configured channel plugin ids from `channels.*` config.\n */\nexport function collectConfiguredChannelIds(config: unknown): string[] | undefined {\n const root = config as Record<string, unknown> | undefined;\n const channels = root?.channels;\n if (!isRecord(channels)) return undefined;\n\n const ids: string[] = [];\n\n if (telegramConfigured(channels.telegram as Record<string, unknown> | undefined)) {\n ids.push('telegram');\n }\n if (weixinConfigured(channels.weixin as Record<string, unknown> | undefined)) {\n ids.push('weixin');\n }\n\n for (const [key, value] of Object.entries(channels)) {\n if (key === 'telegram' || key === 'weixin') continue;\n if (isRecord(value) && value.enabled === true && !ids.includes(key)) {\n ids.push(key);\n }\n }\n\n return ids.length ? ids : undefined;\n}\n\nfunction collectConfiguredLlmProviderIds(config: unknown): string[] {\n const root = config as Record<string, unknown> | undefined;\n const candidateIds = new Set<string>(Object.keys(PROVIDER_ENV_MAP));\n const providers = root?.providers;\n if (isRecord(providers)) {\n for (const key of Object.keys(providers)) {\n candidateIds.add(key);\n }\n }\n const ids: string[] = [];\n for (const key of candidateIds) {\n if (isProviderConfiguredSync(key)) {\n ids.push(key);\n }\n }\n return ids;\n}\n\nfunction collectConfiguredSpeechProviderIds(config: unknown): string[] {\n const root = config as Record<string, unknown> | undefined;\n const messages = root?.messages;\n if (!isRecord(messages) || !isRecord(messages.tts)) {\n return [];\n }\n\n const ttsConfig = mergeTtsConfigFromAppConfig(messages.tts);\n const ids = new Set<string>();\n const primary = ttsConfig.provider?.trim();\n if (primary && isProviderConfigured(primary, ttsConfig)) {\n ids.add(primary);\n }\n for (const providerId of Object.keys(collectTtsProviderConfigEntries(ttsConfig))) {\n if (isProviderConfigured(providerId, ttsConfig)) {\n ids.add(providerId);\n }\n }\n return [...ids];\n}\n\nfunction collectConfiguredMediaUnderstandingProviderIds(config: unknown): string[] {\n const root = config as Record<string, unknown> | undefined;\n const tools = root?.tools;\n if (!isRecord(tools) || !isRecord(tools.media)) {\n return [];\n }\n\n const sttConfig = mergeSttConfigFromAppConfig(\n tools.media.audio as Parameters<typeof mergeSttConfigFromAppConfig>[0],\n tools.media as Parameters<typeof mergeSttConfigFromAppConfig>[1],\n );\n const ids = new Set<string>();\n const primary = sttConfig.provider?.trim();\n if (primary && isSttProviderConfigured(primary, sttConfig)) {\n ids.add(primary);\n }\n for (const providerId of Object.keys(collectSttProviderConfigEntries(sttConfig))) {\n if (isSttProviderConfigured(providerId, sttConfig)) {\n ids.add(providerId);\n }\n }\n return [...ids];\n}\n\n/**\n * Derive configured provider ids for extension activation (LLM + speech + STT).\n */\nexport function collectConfiguredProviderIds(config: unknown): string[] | undefined {\n const ids = new Set<string>([\n ...collectConfiguredLlmProviderIds(config),\n ...collectConfiguredSpeechProviderIds(config),\n ...collectConfiguredMediaUnderstandingProviderIds(config),\n ]);\n return ids.size > 0 ? [...ids] : undefined;\n}\n\nfunction defaultModelId(config: unknown): string | undefined {\n const root = config as Record<string, unknown> | undefined;\n const agents = root?.agents;\n if (!isRecord(agents)) return undefined;\n const list = agents.list;\n if (!Array.isArray(list)) return undefined;\n const defaultId = typeof agents.default === 'string' ? agents.default : undefined;\n const entry =\n list.find((candidate) => isRecord(candidate) && candidate.id === defaultId) ??\n list.find((candidate) => isRecord(candidate) && candidate.enabled !== false);\n if (!isRecord(entry)) return undefined;\n const models = entry.models;\n if (!isRecord(models)) return undefined;\n const defaultRole = typeof models.defaultRole === 'string' ? models.defaultRole : undefined;\n const roles = models.roles;\n if (!defaultRole || !isRecord(roles)) return undefined;\n const role = roles[defaultRole];\n if (isRecord(role)) {\n const model = role.model;\n if (typeof model === 'string' && model.trim().length > 0) return model;\n }\n return undefined;\n}\n\n/**\n * Merge partial activation context over values inferred from loaded app config.\n */\nexport function mergeActivationContext(\n appConfig: Config | Record<string, unknown> | undefined,\n partial?: Partial<ActivationContext>,\n): ActivationContext {\n const ext = appConfig && isRecord((appConfig as Record<string, unknown>).extensions)\n ? ((appConfig as Record<string, unknown>).extensions as Record<string, unknown>)\n : undefined;\n\n const base: ActivationContext = {\n enabledIds: Array.isArray(ext?.enabled)\n ? ext!.enabled.filter((x): x is string => typeof x === 'string')\n : undefined,\n disabledIds: Array.isArray(ext?.disabled)\n ? ext!.disabled.filter((x): x is string => typeof x === 'string')\n : undefined,\n requestedModelId: defaultModelId(appConfig),\n configuredProviderIds: collectConfiguredProviderIds(appConfig),\n configuredChannelIds: collectConfiguredChannelIds(appConfig),\n env: process.env,\n };\n\n return {\n env: partial?.env ?? base.env,\n enabledIds: partial?.enabledIds !== undefined ? partial.enabledIds : base.enabledIds,\n disabledIds: partial?.disabledIds !== undefined ? partial.disabledIds : base.disabledIds,\n requestedModelId:\n partial?.requestedModelId !== undefined ? partial.requestedModelId : base.requestedModelId,\n configuredProviderIds:\n partial?.configuredProviderIds !== undefined\n ? partial.configuredProviderIds\n : base.configuredProviderIds,\n configuredChannelIds:\n partial?.configuredChannelIds !== undefined\n ? partial.configuredChannelIds\n : base.configuredChannelIds,\n };\n}\n"],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * Gateway REST helpers for multi-agent management.
3
3
  */
4
+ import { type ResolveManifestResult } from '../agent-manifest/resolver.js';
4
5
  import type { AgentModelsConfig, Config } from '../config/schema.js';
5
6
  import type { AgentTypedModel } from '../config/schema.js';
6
7
  export type GatewayAgentTypedModelsInfo = {
7
- defaults: AgentTypedModel[];
8
+ defaultRole: string;
9
+ preset: AgentTypedModel[];
8
10
  entry?: AgentTypedModel[];
9
11
  effective: AgentTypedModel[];
10
12
  };
@@ -23,14 +25,15 @@ export type GatewayAgentRow = {
23
25
  fallbacks?: string[];
24
26
  };
25
27
  typedModels: GatewayAgentTypedModelsInfo;
28
+ extends: string[];
26
29
  isDefault: boolean;
27
30
  skills: {
28
- defaults: string[];
31
+ preset: string[];
29
32
  entry?: string[];
30
33
  effectiveAllowlist?: string[];
31
34
  };
32
35
  tools: {
33
- defaultsDisable: string[];
36
+ presetDenied: string[];
34
37
  entryDisable: string[];
35
38
  effectiveDisable: string[];
36
39
  };
@@ -40,6 +43,7 @@ export type GatewayAgentsListResponse = {
40
43
  agents: GatewayAgentRow[];
41
44
  builtinToolIds: string[];
42
45
  };
46
+ export type GatewayAgentEffectiveManifestResponse = ResolveManifestResult;
43
47
  /** Extract `**Avatar:**` value from profile IDENTITY.md (same line shape as the gateway console parser). */
44
48
  export declare function extractAvatarFromIdentityMarkdown(content: string): string | undefined;
45
49
  export declare function parseIdentityMarkdown(content: string): {
@@ -51,18 +55,16 @@ export declare function parseIdentityMarkdown(content: string): {
51
55
  export declare function listGatewayAgents(cfg: Config, _options?: {
52
56
  locale?: string;
53
57
  }): Promise<GatewayAgentsListResponse>;
58
+ export declare function getGatewayAgentEffectiveManifest(cfg: Config, agentIdRaw: string): AgentAdminResult<GatewayAgentEffectiveManifestResponse>;
54
59
  export type CreateAgentBody = {
55
60
  /** Optional id seed; normalized agent id defaults from `profileFiles["IDENTITY.md"]` name when omitted. */
56
61
  id?: string;
57
62
  workspace: string;
58
63
  models?: AgentModelsConfig;
59
- agentDir?: string;
60
64
  /** Initial `agents.list[].skills` for the new entry. */
61
65
  skills?: string[];
62
66
  /** Initial `agents.list[].tools` for the new entry. */
63
- tools?: {
64
- disable?: string[];
65
- };
67
+ tools?: NonNullable<Config['agents']['list']>[number]['tools'];
66
68
  /** Profile markdown files to write after seeding (e.g. `IDENTITY.md`, `SOUL.md`). */
67
69
  profileFiles?: Record<string, string>;
68
70
  /** Clone from an existing agent id — copies config entry fields and profile directory. */
@@ -88,24 +90,21 @@ export declare function finalizeCreateAgentDirs(cfg: Config, agentId: string, op
88
90
  }): Promise<AgentAdminResult<void>>;
89
91
  export type UpdateAgentBody = {
90
92
  workspace?: string;
93
+ extends?: string[];
91
94
  models?: {
92
- chat?: {
93
- primary: string;
94
- fallbacks?: string[];
95
- } | null;
95
+ defaultRole?: string | null;
96
96
  roles?: Record<string, {
97
97
  model: string;
98
98
  description?: string;
99
- }> | null;
99
+ }>;
100
100
  } | null;
101
- agentDir?: string | null;
102
101
  setDefault?: boolean;
103
- /** Replace `agents.list[].skills`; `null` removes the key (inherit defaults). */
102
+ /** Replace `agents.list[].skills`; `null` resets to all skills. */
104
103
  skills?: string[] | null;
105
- /** Replace `agents.list[].tools`; `null` removes the key (inherit defaults). */
106
- tools?: {
107
- disable?: string[] | null;
108
- } | null;
104
+ /** Replace `agents.list[].tools`; `null` resets to no explicit policies. */
105
+ tools?: NonNullable<Config['agents']['list']>[number]['tools'] | null;
106
+ /** Replace `agents.list[].memory`; every agent manifest owns its memory policy. */
107
+ memory?: NonNullable<Config['agents']['list']>[number]['memory'];
109
108
  };
110
109
  export declare function prepareUpdateAgent(cfg: Config, agentIdRaw: string, body: UpdateAgentBody): AgentAdminResult<{
111
110
  nextConfig: Config;
@@ -1,3 +1,4 @@
1
+ import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
1
2
  import { DEFAULT_AGENT_ID, init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
2
3
  import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
3
4
  import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
@@ -54,9 +55,8 @@ function parseIdentityMarkdown(content) {
54
55
  async function listGatewayAgents(cfg, _options = {}) {
55
56
  const defaultId = resolveDefaultAgentId(cfg);
56
57
  const agents = [];
57
- const defaultsSkills = cfg.agents?.defaults?.skills;
58
- const defaultsDisable = cfg.agents?.defaults?.tools?.disable ?? [];
59
- const defaultsTypedModels = rolesToTypedModels(cfg.agents?.defaults?.models?.roles);
58
+ const presetDenied = [];
59
+ const presetTypedModels = [];
60
60
  for (const id of collectAgentIdsForList(cfg)) {
61
61
  const profile = resolveEffectiveAgentProfile(cfg, id);
62
62
  const entry = listAgentEntries(cfg).find((e) => normalizeAgentId(e.id) === id);
@@ -64,8 +64,8 @@ async function listGatewayAgents(cfg, _options = {}) {
64
64
  ...profile.primaryModelRef ? { primary: profile.primaryModelRef } : {},
65
65
  ...profile.fallbacks.length > 0 ? { fallbacks: profile.fallbacks } : {}
66
66
  } : void 0;
67
- const entrySkills = entry?.skills;
68
- const entryDisable = entry?.tools?.disable ?? [];
67
+ const entrySkills = entry?.skills.mode === "allowlist" ? entry.skills.allow ?? [] : void 0;
68
+ const entryDisable = Object.entries(entry?.tools.builtin ?? {}).filter(([, policy]) => policy.mode === "deny").map(([name]) => name);
69
69
  const entryTypedModels = rolesToTypedModels(entry?.models?.roles);
70
70
  const effectiveTypedModels = [...resolveEffectiveTypedModels(cfg, id).values()].sort((a, b) => a.id.localeCompare(b.id));
71
71
  let identity = {};
@@ -82,20 +82,22 @@ async function listGatewayAgents(cfg, _options = {}) {
82
82
  profileDir: resolveAgentProfileDir(cfg, id),
83
83
  ...model ? { model } : {},
84
84
  typedModels: {
85
- defaults: [...defaultsTypedModels],
85
+ defaultRole: profile.manifest.models.defaultRole,
86
+ preset: [...presetTypedModels],
86
87
  ...entryTypedModels.length > 0 ? { entry: entryTypedModels } : {},
87
88
  effective: effectiveTypedModels
88
89
  },
90
+ extends: [...entry?.extends ?? []],
89
91
  isDefault: id === defaultId,
90
92
  skills: {
91
- defaults: defaultsSkills ? [...defaultsSkills] : [],
93
+ preset: [],
92
94
  ...entrySkills !== void 0 ? { entry: [...entrySkills] } : {},
93
95
  ...profile.skillsAllowlist !== void 0 ? { effectiveAllowlist: [...profile.skillsAllowlist] } : {}
94
96
  },
95
97
  tools: {
96
- defaultsDisable: [...defaultsDisable],
98
+ presetDenied: [...presetDenied],
97
99
  entryDisable: [...entryDisable],
98
- effectiveDisable: [...profile.tools.disable].sort((a, b) => a.localeCompare(b))
100
+ effectiveDisable: [...profile.tools.denied].sort((a, b) => a.localeCompare(b))
99
101
  }
100
102
  });
101
103
  }
@@ -106,6 +108,30 @@ async function listGatewayAgents(cfg, _options = {}) {
106
108
  builtinToolIds: [...GATEWAY_BUILTIN_TOOL_IDS]
107
109
  };
108
110
  }
111
+ function getGatewayAgentEffectiveManifest(cfg, agentIdRaw) {
112
+ const agentId = normalizeAgentId(agentIdRaw);
113
+ const entry = listAgentEntries(cfg).find((e) => normalizeAgentId(e.id) === agentId);
114
+ if (!entry) return {
115
+ ok: false,
116
+ error: `agent "${agentId}" not found`,
117
+ status: 404
118
+ };
119
+ try {
120
+ return {
121
+ ok: true,
122
+ data: resolveEffectiveAgentManifest({
123
+ agent: entry,
124
+ presets: cfg.agents.capabilityPresets
125
+ })
126
+ };
127
+ } catch (err) {
128
+ return {
129
+ ok: false,
130
+ error: err instanceof Error ? err.message : String(err),
131
+ status: 400
132
+ };
133
+ }
134
+ }
109
135
  function requireNonMain(id) {
110
136
  if (normalizeAgentId(id) === "main") return {
111
137
  ok: false,
@@ -166,39 +192,26 @@ function prepareCreateAgent(cfg, body) {
166
192
  };
167
193
  }
168
194
  const wsAbs = resolveUserPath(workspace);
169
- const effectiveModels = body.models ?? cloneSourceEntry?.models;
170
- let next = applyAgentConfig(cfg, {
171
- agentId,
172
- workspace: wsAbs,
173
- ...effectiveModels ? { models: effectiveModels } : {},
174
- ...body.agentDir?.trim() ? { agentDir: body.agentDir.trim() } : {},
175
- ...body.skills !== void 0 ? { skills: body.skills.map((s) => String(s).trim()).filter(Boolean) } : cloneSourceEntry?.skills !== void 0 && body.cloneFrom ? { skills: [...cloneSourceEntry.skills] } : {}
176
- });
177
- const tools = body.tools ?? cloneSourceEntry?.tools;
178
- if (tools !== void 0) {
179
- const list = [...listAgentEntries(next)];
180
- const idx = findAgentEntryIndex(list, agentId);
181
- if (idx >= 0) {
182
- const entry = { ...list[idx] };
183
- const disable = tools.disable?.map((s) => String(s).trim()).filter(Boolean) ?? [];
184
- entry.tools = {
185
- ...entry.tools,
186
- ...disable.length > 0 ? { disable } : {}
187
- };
188
- list[idx] = entry;
189
- next = {
190
- ...next,
191
- agents: {
192
- ...next.agents,
193
- list
194
- }
195
- };
196
- }
197
- }
195
+ const rawModels = body.models ?? cloneSourceEntry?.models;
196
+ const effectiveModels = rawModels?.roles ? {
197
+ defaultRole: rawModels.defaultRole ?? Object.keys(rawModels.roles)[0] ?? "deep",
198
+ roles: rawModels.roles
199
+ } : void 0;
200
+ if (effectiveModels && !effectiveModels.roles[effectiveModels.defaultRole]) return {
201
+ ok: false,
202
+ error: "models.defaultRole must reference models.roles",
203
+ status: 400
204
+ };
198
205
  return {
199
206
  ok: true,
200
207
  data: {
201
- nextConfig: next,
208
+ nextConfig: applyAgentConfig(cfg, {
209
+ agentId,
210
+ workspace: wsAbs,
211
+ ...effectiveModels ? { models: effectiveModels } : {},
212
+ ...body.skills !== void 0 ? { skills: body.skills.map((s) => String(s).trim()).filter(Boolean) } : cloneSourceEntry?.skills.mode === "allowlist" && body.cloneFrom ? { skills: [...cloneSourceEntry.skills.allow ?? []] } : {},
213
+ ...body.tools !== void 0 ? { tools: body.tools } : cloneSourceEntry?.tools && body.cloneFrom ? { tools: cloneSourceEntry.tools } : {}
214
+ }),
202
215
  agentId,
203
216
  workspace: wsAbs
204
217
  }
@@ -247,7 +260,32 @@ function prepareUpdateAgent(cfg, agentIdRaw, body) {
247
260
  if (idx < 0 && agentId === resolveDefaultAgentId(cfg)) {
248
261
  list = [...list, {
249
262
  id: agentId,
250
- enabled: true
263
+ enabled: true,
264
+ identity: {
265
+ name: agentId,
266
+ role: "Agent",
267
+ language: "en",
268
+ tone: "direct"
269
+ },
270
+ responsibilities: { primary: ["Help the user complete tasks"] },
271
+ workspace: { root: `~/.xopc/workspace/${agentId}` },
272
+ models: {
273
+ defaultRole: "deep",
274
+ roles: { deep: { model: "openai/gpt-4.1" } }
275
+ },
276
+ tools: { builtin: {} },
277
+ skills: { mode: "all" },
278
+ memory: {
279
+ mode: "confirmWrite",
280
+ sources: ["session", "curated"],
281
+ writePolicy: { curated: "confirm" }
282
+ },
283
+ workflows: {},
284
+ boundaries: {
285
+ requiresConfirmation: [],
286
+ forbidden: [],
287
+ escalation: []
288
+ }
251
289
  }];
252
290
  idx = list.length - 1;
253
291
  }
@@ -259,34 +297,37 @@ function prepareUpdateAgent(cfg, agentIdRaw, body) {
259
297
  const entry = { ...list[idx] };
260
298
  if (body.workspace !== void 0) {
261
299
  const w = body.workspace.trim();
262
- if (w) entry.workspace = resolveUserPath(w);
300
+ if (w) entry.workspace = { root: resolveUserPath(w) };
263
301
  }
264
- if (body.models !== void 0) if (body.models === null) delete entry.models;
302
+ if (body.extends !== void 0) {
303
+ const nextExtends = Array.from(new Set(body.extends.map((id) => normalizeAgentId(id)).filter(Boolean)));
304
+ for (const presetId of nextExtends) if (!cfg.agents.capabilityPresets[presetId]) return {
305
+ ok: false,
306
+ error: `capability preset "${presetId}" not found`,
307
+ status: 400
308
+ };
309
+ if (nextExtends.length > 0) entry.extends = nextExtends;
310
+ else delete entry.extends;
311
+ }
312
+ if (body.models !== void 0) if (body.models === null) return {
313
+ ok: false,
314
+ error: "models cannot be null; every agent manifest needs model roles",
315
+ status: 400
316
+ };
265
317
  else {
266
- if (Object.hasOwn(body.models, "chat")) {
267
- if (body.models.chat === null) {
268
- if (entry.models) delete entry.models.chat;
269
- } else if (body.models.chat !== void 0) {
270
- const primary = body.models.chat.primary.trim();
271
- if (!primary) return {
272
- ok: false,
273
- error: "models.chat.primary must be a non-empty string",
274
- status: 400
275
- };
276
- const fallbacks = body.models.chat.fallbacks?.map((s) => s.trim()).filter(Boolean);
277
- entry.models = {
278
- ...entry.models,
279
- chat: {
280
- primary,
281
- ...fallbacks && fallbacks.length > 0 ? { fallbacks } : {}
282
- }
283
- };
284
- }
318
+ if (body.models.defaultRole !== void 0) {
319
+ if (body.models.defaultRole === null || !body.models.defaultRole.trim()) return {
320
+ ok: false,
321
+ error: "models.defaultRole must be a non-empty string",
322
+ status: 400
323
+ };
324
+ entry.models = {
325
+ ...entry.models,
326
+ defaultRole: body.models.defaultRole.trim()
327
+ };
285
328
  }
286
329
  if (Object.hasOwn(body.models, "roles")) {
287
- if (body.models.roles === null) {
288
- if (entry.models) delete entry.models.roles;
289
- } else if (body.models.roles !== void 0) {
330
+ if (body.models.roles !== void 0) {
290
331
  const roles = Object.fromEntries(Object.entries(body.models.roles).map(([id, row]) => ({
291
332
  id: id.trim(),
292
333
  model: row.model.trim(),
@@ -301,33 +342,27 @@ function prepareUpdateAgent(cfg, agentIdRaw, body) {
301
342
  };
302
343
  }
303
344
  }
304
- if (entry.models && Object.keys(entry.models).length === 0) delete entry.models;
345
+ if (!entry.models.roles[entry.models.defaultRole]) return {
346
+ ok: false,
347
+ error: "models.defaultRole must reference models.roles",
348
+ status: 400
349
+ };
305
350
  }
306
- if (body.agentDir !== void 0) if (body.agentDir === null || String(body.agentDir).trim() === "") delete entry.agentDir;
307
- else entry.agentDir = String(body.agentDir).trim();
308
- if (body.skills !== void 0) if (body.skills === null) delete entry.skills;
351
+ if (body.skills !== void 0) if (body.skills === null) entry.skills = { mode: "all" };
309
352
  else {
310
353
  const next = body.skills.map((s) => String(s).trim()).filter(Boolean);
311
- if (next.length === 0) entry.skills = [];
312
- else entry.skills = next;
313
- }
314
- if (body.tools !== void 0) {
315
- if (body.tools === null) delete entry.tools;
316
- else if (Object.hasOwn(body.tools, "disable")) {
317
- if (body.tools.disable === null) {
318
- if (entry.tools) {
319
- delete entry.tools.disable;
320
- if (Object.keys(entry.tools).length === 0) delete entry.tools;
321
- }
322
- } else if (body.tools.disable !== void 0) {
323
- const next = body.tools.disable.map((s) => String(s).trim()).filter(Boolean);
324
- entry.tools = {
325
- ...entry.tools,
326
- disable: next
327
- };
328
- }
329
- }
354
+ if (next.length === 0) entry.skills = {
355
+ mode: "allowlist",
356
+ allow: []
357
+ };
358
+ else entry.skills = {
359
+ mode: "allowlist",
360
+ allow: next
361
+ };
330
362
  }
363
+ if (body.tools !== void 0) if (body.tools === null) entry.tools = { builtin: {} };
364
+ else entry.tools = body.tools;
365
+ if (body.memory !== void 0) entry.memory = body.memory;
331
366
  list[idx] = entry;
332
367
  let next = {
333
368
  ...cfg,
@@ -633,6 +668,6 @@ async function deleteAgentAvatarFile(cfg, agentId) {
633
668
  };
634
669
  }
635
670
  //#endregion
636
- export { deleteAgentAvatarFile, extractAvatarFromIdentityMarkdown, finalizeCreateAgentDirs, listAgentProfileFiles, listGatewayAgents, parseIdentityMarkdown, prepareCreateAgent, prepareDeleteAgent, prepareUpdateAgent, readAgentAvatarFile, readAgentProfileFile, runAfterDeletePurge, writeAgentAvatarFromBase64, writeAgentProfileFile };
671
+ export { deleteAgentAvatarFile, extractAvatarFromIdentityMarkdown, finalizeCreateAgentDirs, getGatewayAgentEffectiveManifest, listAgentProfileFiles, listGatewayAgents, parseIdentityMarkdown, prepareCreateAgent, prepareDeleteAgent, prepareUpdateAgent, readAgentAvatarFile, readAgentProfileFile, runAfterDeletePurge, writeAgentAvatarFromBase64, writeAgentProfileFile };
637
672
 
638
673
  //# sourceMappingURL=agents-admin.js.map