@xopcai/xopc 0.0.298 → 0.0.301

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 (181) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-C-DSdak3.js → activity-store-sCQ2ErNm.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DQx3cICI.js → agent-avatar-dicebear-L6Vh9fL1.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-BdAFy0gE.js → agent-defaults-settings-panel-C22DdeJ6.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agents-9Q_62jYG.js → agents-CjwnFadx.js} +1 -1
  7. package/dist/gateway/static/root/assets/api-BjlN9GPQ.js +1 -0
  8. package/dist/gateway/static/root/assets/{api-DS4w0i5N.js → api-pwK0DxZJ.js} +1 -1
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-rZk3-w6S.js → app-management-settings-panel-BPanjQB6.js} +1 -1
  10. package/dist/gateway/static/root/assets/appearance-settings-CUWA2E_f.js +1 -0
  11. package/dist/gateway/static/root/assets/{apps-page-BeNbZ2aw.js → apps-page-D8hP1XhF.js} +1 -1
  12. package/dist/gateway/static/root/assets/{archive-plugin-CNi0DDvL.js → archive-plugin-BT7OnQyy.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-CThmC7i6.js → attachment-load-CQGhCfVn.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automations-page-BGe-cTjn.js → automations-page-CHeFkkKk.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-workspace-B_-VM4Va.js +6 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-Cv_aLtBz.js → binary-plugins-D_8pZaqQ.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-BkS6rDLR.js → block-editor-m48cnmng.js} +1 -1
  18. package/dist/gateway/static/root/assets/{browser-automation-inputs-DvwCwLOp.js → browser-automation-inputs-jciex8-r.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-automations-page-D93HlJH4.js → browser-automations-page-ct9dHGJF.js} +1 -1
  20. package/dist/gateway/static/root/assets/{browser-settings-page-BdHYYHIv.js → browser-settings-page-DNX0BZFM.js} +1 -1
  21. package/dist/gateway/static/root/assets/{capabilities-settings-panel-BJ5gZB8e.js → capabilities-settings-panel-nvCpR13B.js} +1 -1
  22. package/dist/gateway/static/root/assets/{channels-settings-CikNo086.js → channels-settings-BeDwuVtH.js} +1 -1
  23. package/dist/gateway/static/root/assets/{channels-status-swr-CgtFOwNh.js → channels-status-swr-Cz3X8Gfa.js} +1 -1
  24. package/dist/gateway/static/root/assets/{chat-terminal-dock-Dr3iyWHW.js → chat-terminal-dock-Bn_th7oe.js} +1 -1
  25. package/dist/gateway/static/root/assets/{computer-model-settings-CgDUQ9On.js → computer-model-settings-BOObauzH.js} +1 -1
  26. package/dist/gateway/static/root/assets/{computer-settings-page-unz5J8oW.js → computer-settings-page-BicG-IvN.js} +1 -1
  27. package/dist/gateway/static/root/assets/{connectors-page-EdtkQUqf.js → connectors-page-D9xCnhbY.js} +1 -1
  28. package/dist/gateway/static/root/assets/{cron-expression-DU3E4CbL.js → cron-expression-C0ogAVG7.js} +1 -1
  29. package/dist/gateway/static/root/assets/{date-picker-BjGxRWfE.js → date-picker-HtU776kx.js} +1 -1
  30. package/dist/gateway/static/root/assets/{dependency-picker-B9Fsdq_j.js → dependency-picker-DvDdN4Xu.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-BVIdx2PC.js → desktop-pet-BWi5FE7D.js} +1 -1
  32. package/dist/gateway/static/root/assets/{desktop-pet-settings-CjTgpDfw.js → desktop-pet-settings-CptAwdZd.js} +1 -1
  33. package/dist/gateway/static/root/assets/{device-pairing-wizard-CaSz5VAr.js → device-pairing-wizard-C8BiZYwP.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-debug-page-CMjMKdg0.js → extension-debug-page-nRRdMurF.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-Dm4ohyoF.js → extension-page-DxotmtcG.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-settings-page-jsjKLZ_n.js → extension-settings-page-BK2t7aFl.js} +1 -1
  37. package/dist/gateway/static/root/assets/figtree-latin-ext-wght-normal-DCwSJGxG.woff2 +0 -0
  38. package/dist/gateway/static/root/assets/figtree-latin-wght-normal-D_ZTVpCC.woff2 +0 -0
  39. package/dist/gateway/static/root/assets/{gateway-config-swr-B2xVR9gt.js → gateway-config-swr-COJzzscc.js} +1 -1
  40. package/dist/gateway/static/root/assets/{gateway-settings-CnMgDQVJ.js → gateway-settings-rIGo_jeB.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-startup-retry-c7s8h7px.js → gateway-startup-retry-211-jptU.js} +1 -1
  42. package/dist/gateway/static/root/assets/{heartbeat-settings-CJNc9fVz.js → heartbeat-settings-DAHqGRKZ.js} +1 -1
  43. package/dist/gateway/static/root/assets/{home-page-X0TcW6Fs.js → home-page-BU59mAGQ.js} +1 -1
  44. package/dist/gateway/static/root/assets/{image-generation-api-DUjbV88R.js → image-generation-api-sO31fQr_.js} +1 -1
  45. package/dist/gateway/static/root/assets/{imports-page-BaQmVh_d.js → imports-page-BQ4HTIVc.js} +1 -1
  46. package/dist/gateway/static/root/assets/{index-BwqBcOv1.js → index-54o0AGdj.js} +39 -41
  47. package/dist/gateway/static/root/assets/index-R89i_XYi.css +1 -0
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-7eX6_wx-.js → keyboard-shortcuts-settings-BSgsIe7E.js} +1 -1
  49. package/dist/gateway/static/root/assets/{local-app-workbench-page-C5Q12itI.js → local-app-workbench-page-BtEQDQeQ.js} +1 -1
  50. package/dist/gateway/static/root/assets/{local-apps-page-C9L4Hlw5.js → local-apps-page-BrEO9hz5.js} +1 -1
  51. package/dist/gateway/static/root/assets/{locale-store-CwuCkjo7.js → locale-store-DuG-kbsP.js} +1 -1
  52. package/dist/gateway/static/root/assets/{logs-page-BC131pzE.js → logs-page-DhXIIoc0.js} +1 -1
  53. package/dist/gateway/static/root/assets/{management-settings-CeDBuLQg.js → management-settings-DC67VTpr.js} +1 -1
  54. package/dist/gateway/static/root/assets/{markdown-view-3YQc6QFV.js → markdown-view-B1q2w6W_.js} +1 -1
  55. package/dist/gateway/static/root/assets/{media-plugins-DWfT8oeo.js → media-plugins-DdoSox1I.js} +1 -1
  56. package/dist/gateway/static/root/assets/messages-BYbx4OuI.js +3 -0
  57. package/dist/gateway/static/root/assets/{note-detail-panel-DkN6faxv.js → note-detail-panel-CCIA4VbP.js} +3 -3
  58. package/dist/gateway/static/root/assets/{notes-page-C4hKdQdj.js → notes-page-C8JeFMSH.js} +1 -1
  59. package/dist/gateway/static/root/assets/{page-tabs-BcTjkR5o.js → page-tabs-B_I0YuTK.js} +1 -1
  60. package/dist/gateway/static/root/assets/{preview-open-alternatives-DYH10UsL.js → preview-open-alternatives--5Zt1oSs.js} +1 -1
  61. package/dist/gateway/static/root/assets/{proactive-page-LEG1kQFJ.js → proactive-page-BBJZB2RV.js} +1 -1
  62. package/dist/gateway/static/root/assets/{product-open-page-DLm3cUhY.js → product-open-page-CKFPKr0A.js} +1 -1
  63. package/dist/gateway/static/root/assets/{project-detail-page-HxD09IfH.js → project-detail-page-DeTeDel1.js} +1 -1
  64. package/dist/gateway/static/root/assets/{projects-page-D2fC38bE.js → projects-page-BUsI5G7U.js} +1 -1
  65. package/dist/gateway/static/root/assets/{registry-api-Cxx1-pCg.js → registry-api-BDgFNu05.js} +1 -1
  66. package/dist/gateway/static/root/assets/{remote-access-hub-DvXeZ98_.js → remote-access-hub-DSGwCc4h.js} +1 -1
  67. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CXpFgOci.js → runtime-tools-settings-panel-BY9oD7eN.js} +1 -1
  68. package/dist/gateway/static/root/assets/{schema-form-DaT4vD2j.js → schema-form-CuIDQtYN.js} +1 -1
  69. package/dist/gateway/static/root/assets/sessions-page-zAeJa1Ae.js +1 -0
  70. package/dist/gateway/static/root/assets/settings-advanced-gate-BG4EILeB.js +1 -0
  71. package/dist/gateway/static/root/assets/{settings-form-section-B6ZUcWOA.js → settings-form-section-C4D1p0xR.js} +1 -1
  72. package/dist/gateway/static/root/assets/{settings-page-Chvn3lRv.js → settings-page-BBG4jliE.js} +1 -1
  73. package/dist/gateway/static/root/assets/{setup-status-panel-BS51qtzu.js → setup-status-panel-DXqDeXNi.js} +1 -1
  74. package/dist/gateway/static/root/assets/{share-preview-page-Brta3iG6.js → share-preview-page-DbE7gsDd.js} +1 -1
  75. package/dist/gateway/static/root/assets/{shares-settings-oSqDaSSF.js → shares-settings-BN_O6Dwt.js} +1 -1
  76. package/dist/gateway/static/root/assets/skill-reload-api-Sq-IWawl.js +1 -0
  77. package/dist/gateway/static/root/assets/{skills-page-cxh7-L-8.js → skills-page-Dh33NKoP.js} +1 -1
  78. package/dist/gateway/static/root/assets/{skills-page.utils-CM_4-WWk.js → skills-page.utils-BNz7GQvw.js} +1 -1
  79. package/dist/gateway/static/root/assets/{system-settings-panel-CCv2jppr.js → system-settings-panel-C3L8_KEq.js} +1 -1
  80. package/dist/gateway/static/root/assets/{task-detail-page-Dip4NJ1W.js → task-detail-page-CJ1WpRpN.js} +1 -1
  81. package/dist/gateway/static/root/assets/theme-store-JzZVUvEh.js +1 -0
  82. package/dist/gateway/static/root/assets/{tunnel-api-B0z39eec.js → tunnel-api-GLzwLaUZ.js} +1 -1
  83. package/dist/gateway/static/root/assets/{use-autosave-B2Vitgh0.js → use-autosave-DSrlXbBg.js} +1 -1
  84. package/dist/gateway/static/root/assets/{user-model-page-DARb0_C4.js → user-model-page-CX9eizCN.js} +1 -1
  85. package/dist/gateway/static/root/assets/{voice-api-key-field-XsHsCfWR.js → voice-api-key-field-9P97T0CT.js} +1 -1
  86. package/dist/gateway/static/root/assets/{voice-config-api-De1DTzxK.js → voice-config-api-DJvwbFbz.js} +1 -1
  87. package/dist/gateway/static/root/assets/{work-discovery-overlay-B5mnI1IB.js → work-discovery-overlay-CoVHgrQY.js} +1 -1
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DcFMhxC_.js → workflow-run-setup-panel-BR-S_IGS.js} +1 -1
  89. package/dist/gateway/static/root/assets/{workflows-page-CaaEc_f1.js → workflows-page-ea-j18xi.js} +1 -1
  90. package/dist/gateway/static/root/index.html +10 -10
  91. package/dist/package.js +1 -1
  92. package/dist/src/agent/agent-manager.js +4 -4
  93. package/dist/src/agent/background-review/run-background-review.js +1 -1
  94. package/dist/src/agent/embedded/model-runtime.js +1 -1
  95. package/dist/src/agent/embedded/run-for-session.js +1 -1
  96. package/dist/src/agent/image/tool-model-config.js +1 -1
  97. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  98. package/dist/src/agent/memory/compaction.js +1 -1
  99. package/dist/src/agent/service/direct-turn-helpers.js +11 -4
  100. package/dist/src/agent/service/process-direct-one-shot.js +1 -0
  101. package/dist/src/agent/service/process-direct-streaming.js +2 -1
  102. package/dist/src/agent/service.js +2 -2
  103. package/dist/src/agent/session/session-inspector.js +1 -1
  104. package/dist/src/agent/skills/hub-lock.js +1 -1
  105. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  106. package/dist/src/ai-assist/text-assist.js +1 -1
  107. package/dist/src/auth/credentials.js +2 -2
  108. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  109. package/dist/src/auth/profiles/store.js +1 -1
  110. package/dist/src/auth/sync-provider-auth.js +2 -2
  111. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  112. package/dist/src/chat-commands/agent-edit.js +1 -1
  113. package/dist/src/chat-commands/builtins/config.d.ts +1 -0
  114. package/dist/src/chat-commands/builtins/config.js +13 -9
  115. package/dist/src/chat-commands/builtins/model.js +2 -1
  116. package/dist/src/chat-commands/builtins/session.js +10 -7
  117. package/dist/src/chat-commands/builtins/skill.js +0 -1
  118. package/dist/src/chat-commands/builtins/thinking.js +12 -8
  119. package/dist/src/chat-commands/builtins/tts.js +7 -7
  120. package/dist/src/chat-commands/builtins/understanding.js +2 -1
  121. package/dist/src/chat-commands/command-parse.js +5 -6
  122. package/dist/src/chat-commands/context.js +19 -16
  123. package/dist/src/cli/commands/agent.js +1 -1
  124. package/dist/src/cli/commands/connectors.js +1 -1
  125. package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -3
  126. package/dist/src/cli/commands/models.js +1 -1
  127. package/dist/src/computer/runtime.js +1 -1
  128. package/dist/src/config/index.js +4 -4
  129. package/dist/src/config/loader.js +2 -2
  130. package/dist/src/config/models-json.js +2 -2
  131. package/dist/src/connectors/auth-provider-registry.js +1 -1
  132. package/dist/src/connectors/connected-source-ingestion.js +1 -1
  133. package/dist/src/connectors/connection-recovery-service.js +1 -1
  134. package/dist/src/connectors/health.js +1 -1
  135. package/dist/src/extensions/lockfile.js +1 -1
  136. package/dist/src/gateway/agents-admin.js +1 -1
  137. package/dist/src/gateway/automation-agent-session.js +4 -1
  138. package/dist/src/gateway/chat-stream/mapper.js +1 -0
  139. package/dist/src/gateway/chat-stream/protocol.d.ts +2 -1
  140. package/dist/src/gateway/file-path-classifier.js +1 -1
  141. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  142. package/dist/src/gateway/hono/routes/capabilities.js +1 -1
  143. package/dist/src/gateway/hono/routes/connectors.js +3 -3
  144. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  145. package/dist/src/gateway/hono/routes/models.js +1 -1
  146. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +3 -1
  147. package/dist/src/gateway/hono/routes/session-input-handler.js +21 -1
  148. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  149. package/dist/src/gateway/service/config-coordinator.js +1 -1
  150. package/dist/src/gateway/service/run-gateway-agent.js +2 -3
  151. package/dist/src/gateway/service.js +5 -5
  152. package/dist/src/notifications/plain-text.d.ts +1 -0
  153. package/dist/src/notifications/plain-text.js +14 -0
  154. package/dist/src/notifications/planner.js +2 -1
  155. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  156. package/dist/src/providers/index.js +2 -2
  157. package/dist/src/providers/model-catalog-persistence.js +1 -1
  158. package/dist/src/providers/model-registry.js +1 -1
  159. package/dist/src/providers/register-runtime-providers.js +1 -1
  160. package/dist/src/session/reset-triggers.d.ts +2 -0
  161. package/dist/src/session/reset-triggers.js +11 -1
  162. package/dist/src/storage/sqlite/session-repository.js +12 -1
  163. package/dist/src/storage/sqlite/transcript-repository.js +11 -2
  164. package/dist/src/tui/backends/embedded-backend.js +1 -1
  165. package/dist/src/tui/tui-commands.js +1 -1
  166. package/dist/src/tui/tui-startup-resources.js +2 -2
  167. package/dist/src/tui/tui.js +2 -2
  168. package/dist/src/user-context/config.js +2 -2
  169. package/dist/src/work-discovery/service.js +2 -2
  170. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  171. package/dist/src/workflows/service/workflow-session-bridge.js +5 -1
  172. package/package.json +3 -3
  173. package/dist/gateway/static/root/assets/api-BhJmc8E-.js +0 -1
  174. package/dist/gateway/static/root/assets/appearance-settings-CbIWkXlh.js +0 -1
  175. package/dist/gateway/static/root/assets/automations-workspace-rHXrY_xk.js +0 -6
  176. package/dist/gateway/static/root/assets/index-Bt6a_Yxc.css +0 -2
  177. package/dist/gateway/static/root/assets/messages-D6CRVWtT.js +0 -3
  178. package/dist/gateway/static/root/assets/sessions-page-T5S0FTQJ.js +0 -1
  179. package/dist/gateway/static/root/assets/settings-advanced-gate-Bi3puKV6.js +0 -1
  180. package/dist/gateway/static/root/assets/skill-reload-api-CITITcjJ.js +0 -1
  181. package/dist/gateway/static/root/assets/theme-store-Dt7ob2wD.js +0 -1
@@ -86,13 +86,6 @@ var CommandContextImpl = class {
86
86
  await this.clearSession();
87
87
  return;
88
88
  }
89
- await this.deps.bus.publishOutbound({
90
- channel: this.source,
91
- chat_id: this.chatId,
92
- content: "✅ New session started. Previous transcript archived; model and session overrides kept.",
93
- type: "message",
94
- metadata: this.outboundMetadata()
95
- });
96
89
  log.info({ conversationId: this.conversationId }, "Session reset");
97
90
  }
98
91
  async clearSession() {
@@ -120,15 +113,25 @@ var CommandContextImpl = class {
120
113
  log.info({ conversationId: this.conversationId }, "Session archived");
121
114
  }
122
115
  async listSessions() {
123
- const messages = await this.getSession();
124
- return [{
125
- key: this.conversationId,
126
- name: getSessionDisplayName(this.conversationId),
127
- messageCount: messages.length,
128
- createdAt: /* @__PURE__ */ new Date(),
129
- updatedAt: /* @__PURE__ */ new Date(),
130
- isActive: true
131
- }];
116
+ const { items } = await this.deps.sessionStore.list({
117
+ channel: this.channelId,
118
+ limit: 100,
119
+ sortBy: "updatedAt",
120
+ sortOrder: "desc"
121
+ });
122
+ return items.filter((item) => {
123
+ if (this.channelId === "webchat") return true;
124
+ const routing = item.routing;
125
+ if (!routing) return item.key === this.conversationId;
126
+ return routing.peerId === this.chatId && (!this.accountId || routing.accountId === this.accountId) && (!this.threadId || routing.threadId === this.threadId);
127
+ }).map((item) => ({
128
+ key: item.key,
129
+ name: item.name ?? getSessionDisplayName(item.key),
130
+ messageCount: item.messageCount,
131
+ createdAt: new Date(item.createdAt),
132
+ updatedAt: new Date(item.updatedAt),
133
+ isActive: item.key === this.conversationId
134
+ }));
132
135
  }
133
136
  async switchSession(conversationId) {
134
137
  log.info({
@@ -2,8 +2,8 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
4
4
  import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
5
- import { loadConfig } from "../../config/loader.js";
6
5
  import { init_agent_session_key, resolveAgentMainConversationId } from "../../routing/agent-session-key.js";
6
+ import { loadConfig } from "../../config/loader.js";
7
7
  import { ExtensionLoader } from "../../extensions/loader.js";
8
8
  import "../../extensions/index.js";
9
9
  import { MessageBus, MessageBusShutdownError } from "../../infra/bus/queue.js";
@@ -1,6 +1,6 @@
1
1
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
2
- import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../capabilities/store-connector.js";
3
2
  import { register } from "../registry.js";
3
+ import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../capabilities/store-connector.js";
4
4
  import { confirm } from "@inquirer/prompts";
5
5
  import { Command } from "commander";
6
6
  //#region src/cli/commands/connectors.ts
@@ -1,9 +1,9 @@
1
1
  import { getAgentDefaultModelRef, init_schema, parseModelRef } from "../../../../config/schema.js";
2
- import { PROVIDER_ENV_MAP, init_env_keys } from "../../../../providers/env-keys.js";
2
+ import { getDefaultAgentId, init_resolve_route } from "../../../../routing/resolve-route.js";
3
+ import { init_loader, loadConfig } from "../../../../config/loader.js";
3
4
  import { getModelOAuthProviderIds, init_registry } from "../../../../auth/oauth/registry.js";
5
+ import { PROVIDER_ENV_MAP, init_env_keys } from "../../../../providers/env-keys.js";
4
6
  import { CredentialResolver, init_credentials } from "../../../../auth/credentials.js";
5
- import { init_loader, loadConfig } from "../../../../config/loader.js";
6
- import { getDefaultAgentId, init_resolve_route } from "../../../../routing/resolve-route.js";
7
7
  import { existsSync } from "node:fs";
8
8
  //#region src/cli/commands/doctor/checks/provider-auth.ts
9
9
  init_credentials();
@@ -1,6 +1,6 @@
1
1
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
2
- import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
3
2
  import { loadConfig, saveConfig } from "../../config/loader.js";
3
+ import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
4
4
  import { getAllModels, getAvailableModels, getConfiguredProviders, getProviderAuthState, getProviderDisplayName, init_providers, isProviderConfigured, providerSupportsApiKey, providerSupportsOAuth, resolveModel } from "../../providers/index.js";
5
5
  import { formatExamples, register } from "../registry.js";
6
6
  import { getContextWithOpts } from "../context.js";
@@ -1,9 +1,9 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
+ import { resolveEffectiveAgentConfigForSession } from "../config/agent-profile.js";
3
4
  import { COMPUTER_CONTROL_TOOL, ComputerAppSchema, ComputerObservationSchema, ComputerWindowSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
4
5
  import { ComputerServiceLimitsSchema, computerModelProfile, init_model_policy } from "./model-policy.js";
5
6
  import { getApiKey, init_providers, resolveModel } from "../providers/index.js";
6
- import { resolveEffectiveAgentConfigForSession } from "../config/agent-profile.js";
7
7
  import { enterComputerControl, leaveComputerControl } from "./control-guard.js";
8
8
  import { ComputerDiagnosticSchema, ComputerOperationError, computerDiagnostic, computerRecovery } from "./errors.js";
9
9
  import { ComputerModelAdapter, predictComputerStep, readComputerJson } from "./model-adapter.js";
@@ -2,15 +2,15 @@ import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXop
2
2
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
3
3
  import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
4
4
  import { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GatewayWebchatConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpOAuthConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, RuntimeToolsConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
5
- import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
5
+ import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
6
6
  import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
7
7
  import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
8
8
  import { resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
9
+ import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
9
10
  import { FILENAMES, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMcpOAuthPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
10
- import { CustomModelSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
11
11
  import { init_loader, loadConfig, saveConfig } from "./loader.js";
12
- import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
13
- import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
12
+ import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
13
+ import { CustomModelSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
14
14
  import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
15
15
  import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
16
16
  import { getWorkspacePath } from "./workspace-path-helpers.js";
@@ -2,10 +2,10 @@ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
4
  import { ConfigSchema, init_schema } from "./schema.js";
5
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
6
5
  import { init_paths, resolveConfigPath } from "./paths.js";
7
- import { init_resolution, setActivePlatformDiscovery } from "../platform/resolution.js";
6
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
8
7
  import { assertChannelPluginConfigs, init_validate_channel_configs } from "./validate-channel-configs.js";
8
+ import { init_resolution, setActivePlatformDiscovery } from "../platform/resolution.js";
9
9
  import { dirname } from "path";
10
10
  import { existsSync, mkdirSync, promises, readFileSync } from "fs";
11
11
  import { config } from "dotenv";
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
3
- import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
4
2
  import { init_paths, resolveModelsJsonPath } from "./paths.js";
3
+ import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
4
+ import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
5
5
  import { init_model_policy, isComputerModel } from "../computer/model-policy.js";
6
6
  import { existsSync, readFileSync } from "fs";
7
7
  import { z } from "zod";
@@ -1,7 +1,7 @@
1
1
  import { startComposioAuthorize } from "./composio.js";
2
+ import { getMcpOAuthManager } from "../agent/mcp/oauth/mcp-oauth-manager.js";
2
3
  import { isManagedConnectorServer } from "./materialize.js";
3
4
  import { getConnectorInstance } from "./instances.js";
4
- import { getMcpOAuthManager } from "../agent/mcp/oauth/mcp-oauth-manager.js";
5
5
  //#region src/connectors/auth-provider-registry.ts
6
6
  async function startConnectorAuthorization(definition, config, instanceId) {
7
7
  if (definition.auth.mode !== "oauth") throw new Error(`Connector "${definition.id}" does not use OAuth.`);
@@ -6,8 +6,8 @@ import { ComposioSessionsAdapter } from "./composio-sessions.js";
6
6
  import { decodeConnectedSourceCursor, encodeConnectedSourceCursor } from "./connected-source-cursor.js";
7
7
  import { scopeForComposioAction } from "./composio.js";
8
8
  import { getConnectorDefinition } from "./catalog.js";
9
- import { getConnectorInstance } from "./instances.js";
10
9
  import { getWorkspacePath } from "../config/workspace-path-helpers.js";
10
+ import { getConnectorInstance } from "./instances.js";
11
11
  import { KnowledgeIngestionService } from "../knowledge/ingestion-service.js";
12
12
  import { ConnectedKnowledgePipeline } from "../knowledge/connected-knowledge-pipeline.js";
13
13
  import { LocalFolderKnowledgeSourceAdapter } from "../knowledge/local-folder-adapter.js";
@@ -13,9 +13,9 @@ import { getConnectorDefinition } from "./catalog.js";
13
13
  import { capabilityActions, isToolInputSchema, missingConnectionCapabilities } from "./connection-capabilities.js";
14
14
  import { connectorPrincipalForSession } from "./principal.js";
15
15
  import { resolveConnectionCandidate } from "./connection-candidates.js";
16
+ import { persistConfigMutation } from "../config/config-mutation.js";
16
17
  import { listConnectorInstances } from "./instances.js";
17
18
  import { installConnector } from "./install.js";
18
- import { persistConfigMutation } from "../config/config-mutation.js";
19
19
  import { randomUUID } from "node:crypto";
20
20
  //#region src/connectors/connection-recovery-service.ts
21
21
  init_transaction();
@@ -1,6 +1,6 @@
1
+ import { getWorkspacePath } from "../config/workspace-path-helpers.js";
1
2
  import { materializeConnectorMcpServer } from "./materialize.js";
2
3
  import { getConnectorInstance } from "./instances.js";
3
- import { getWorkspacePath } from "../config/workspace-path-helpers.js";
4
4
  import { listBundleMcpServerCapabilitiesForGateway } from "../agent/mcp/bundle-mcp-gateway.js";
5
5
  //#region src/connectors/health.ts
6
6
  function classifyConnectorHealthError(error) {
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
3
  import { init_paths, resolveExtensionsDir, resolveExtensionsLockPath } from "../config/paths.js";
4
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
5
5
  import { dirname, join } from "path";
6
6
  import { existsSync } from "fs";
7
7
  import { mkdir, readFile } from "fs/promises";
@@ -1,6 +1,6 @@
1
1
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
2
- import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
3
2
  import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
3
+ import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
4
4
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
5
5
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
6
6
  import { seedAgentProfileMarkdownFiles } from "../agent/context/workspace-seed.js";
@@ -3,7 +3,10 @@ async function prepareAutomationAgentSession(store, projects, input) {
3
3
  await store.resolveTranscriptPath(input.conversationId, { metadata: {
4
4
  hiddenFromSessionList: true,
5
5
  name: input.automationName,
6
- customData: { titleSource: "provisional" },
6
+ customData: {
7
+ titleSource: "provisional",
8
+ deferVisibilityUntilOutput: true
9
+ },
7
10
  projectId: input.projectId,
8
11
  sourceChannel: "automation",
9
12
  sourceChatId: `default:dm:${input.peerId}`,
@@ -110,6 +110,7 @@ var ChatStreamMapper = class {
110
110
  const outcome = parseTurnOutcome(event.outcome);
111
111
  return outcome ? [this.make("turn_outcome", outcome)] : [];
112
112
  }
113
+ case "session_config_updated": return [this.make("session_config_updated", {})];
113
114
  case "error": return [this.make("error", {
114
115
  code: "AGENT_RUN_ERROR",
115
116
  message: String(event.content ?? event.message ?? "Unknown error"),
@@ -143,6 +143,7 @@ export type TurnDiffEvent = ChatStreamEnvelope<'turn_diff', {
143
143
  removed: number;
144
144
  }>;
145
145
  export type TurnOutcomeEvent = ChatStreamEnvelope<'turn_outcome', TurnOutcome>;
146
+ export type SessionConfigUpdatedEvent = ChatStreamEnvelope<'session_config_updated', Record<string, never>>;
146
147
  export type ReviewStartEvent = ChatStreamEnvelope<'review_start', {
147
148
  messageId: string;
148
149
  reviewId: string;
@@ -220,4 +221,4 @@ export type StreamErrorEvent = ChatStreamEnvelope<'error', {
220
221
  recoverable?: boolean;
221
222
  petFeedback: PetFeedback;
222
223
  }>;
223
- export type ChatStreamEvent = RunStartEvent | UserMessageEvent | UserTranscriptEvent | AssistantMessageStartEvent | AssistantDeltaEvent | ThinkingDeltaEvent | ThinkingEndEvent | ToolStartEvent | ToolUpdateEvent | ToolEndEvent | CommandStartedEvent | CommandOutputDeltaEvent | CommandCompletedEvent | PatchAppliedEvent | TurnPlanUpdatedEvent | TaskPlanUpdatedEvent | TurnDiffEvent | TurnOutcomeEvent | ReviewStartEvent | ReviewDeltaEvent | ReviewEndEvent | ReviewEvent | AssistantMessageEndEvent | ProgressEvent | CompactionEvent | TtsAudioEvent | ClarifyRequestEvent | RunEndEvent | StreamErrorEvent;
224
+ export type ChatStreamEvent = RunStartEvent | UserMessageEvent | UserTranscriptEvent | AssistantMessageStartEvent | AssistantDeltaEvent | ThinkingDeltaEvent | ThinkingEndEvent | ToolStartEvent | ToolUpdateEvent | ToolEndEvent | CommandStartedEvent | CommandOutputDeltaEvent | CommandCompletedEvent | PatchAppliedEvent | TurnPlanUpdatedEvent | TaskPlanUpdatedEvent | TurnDiffEvent | TurnOutcomeEvent | SessionConfigUpdatedEvent | ReviewStartEvent | ReviewDeltaEvent | ReviewEndEvent | ReviewEvent | AssistantMessageEndEvent | ProgressEvent | CompactionEvent | TtsAudioEvent | ClarifyRequestEvent | RunEndEvent | StreamErrorEvent;
@@ -1,7 +1,7 @@
1
1
  import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
2
2
  import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
3
- import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
4
3
  import { extractProfileAgentId } from "../config/agent-profile.js";
4
+ import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
5
5
  import { isBareProfileMarkdownFileName, resolveProfileMarkdownPathIfBareName } from "../agent/tools/tool-paths.js";
6
6
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
7
7
  import { basename, isAbsolute, resolve } from "node:path";
@@ -1,9 +1,9 @@
1
1
  import { ContextPlanningConfigSchema, KnowledgeMemoryConfigSchema, UserModelConfigSchema, init_config } from "../../../user-context/config.js";
2
2
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
3
3
  import { resolveModelsJsonPath } from "../../../config/paths.js";
4
+ import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, getChannelSetupStatus, init_channel_catalog_service } from "../../../channels/catalog/channel-catalog-service.js";
4
5
  import { init_models_json, loadModelsJson } from "../../../config/models-json.js";
5
6
  import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
6
- import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, getChannelSetupStatus, init_channel_catalog_service } from "../../../channels/catalog/channel-catalog-service.js";
7
7
  import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
8
8
  import { getAllProviders, init_providers, isProviderConfigured } from "../../../providers/index.js";
9
9
  import { normalizeConfiguredMcpServers } from "../../../config/mcp-config-normalize.js";
@@ -1,5 +1,5 @@
1
- import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../../capabilities/store-connector.js";
2
1
  import { ConfigPersistenceError, persistConfigMutation } from "../../../config/config-mutation.js";
2
+ import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../../capabilities/store-connector.js";
3
3
  //#region src/gateway/hono/routes/capabilities.ts
4
4
  function errorMessage(error) {
5
5
  return error instanceof Error ? error.message : String(error);
@@ -12,16 +12,16 @@ import { createConnectorSetupSecretRequest, submitConnectorSetupSecret } from ".
12
12
  import { configureComposioApiKey, executeComposioTool, getComposioInstallationPolicy, getComposioToolkitAuthState, getComposioToolkitScope, inspectComposioConnectorHealth, listComposioConnections, listComposioTools, refreshComposioConnection, revokeComposioConnection, setComposioToolkitScope, updateComposioConnection, updateComposioInstallationPolicy } from "../../../connectors/composio.js";
13
13
  import { listConnectorProviders } from "../../../connectors/providers.js";
14
14
  import { getConnectorDefinition, listConnectorCatalog } from "../../../connectors/catalog.js";
15
+ import { ConfigPersistenceError, persistConfigMutation } from "../../../config/config-mutation.js";
16
+ import { getMcpOAuthManager } from "../../../agent/mcp/oauth/mcp-oauth-manager.js";
15
17
  import { recordConnectorHealthUsage } from "../../../connectors/usage.js";
16
18
  import { getConnectorInstance, getInstalledConnectorDefinition, listConnectorInstances } from "../../../connectors/instances.js";
17
- import { installConnector, installConnectorDefinition, uninstallConnector, updateConnectorConfig } from "../../../connectors/install.js";
18
- import { getMcpOAuthManager } from "../../../agent/mcp/oauth/mcp-oauth-manager.js";
19
19
  import { startConnectorAuthorization } from "../../../connectors/auth-provider-registry.js";
20
20
  import { composioLogoResponse } from "../../../connectors/composio-logo.js";
21
21
  import { inspectManagedComposioStatus } from "../../../connectors/composio-managed-client.js";
22
22
  import { appendComposioTriggerEvent, listComposioTriggerEvents } from "../../../connectors/composio-triggers.js";
23
23
  import { ingestLocalFolderSource } from "../../../connectors/connected-source-ingestion.js";
24
- import { ConfigPersistenceError, persistConfigMutation } from "../../../config/config-mutation.js";
24
+ import { installConnector, installConnectorDefinition, uninstallConnector, updateConnectorConfig } from "../../../connectors/install.js";
25
25
  import { previewConnectorDefinition, testConnectorInstance } from "../../../connectors/health.js";
26
26
  import { listUnderstandingSourceGrants, revokeUnderstandingSourceGrant } from "../../../user-context/sources/repository.js";
27
27
  import { setConnectorEnabled } from "../../../connectors/lifecycle.js";
@@ -1,8 +1,8 @@
1
1
  import { canonicalizeConfiguredMcpServer, normalizeConfiguredMcpServers } from "../../../config/mcp-config-normalize.js";
2
2
  import { loadMergedBundleMcpConfig } from "../../../agent/mcp/bundle-mcp-config.js";
3
- import { isManagedConnectorServer } from "../../../connectors/materialize.js";
4
3
  import { getWorkspacePath } from "../../../config/workspace-path-helpers.js";
5
4
  import { getMcpOAuthManager } from "../../../agent/mcp/oauth/mcp-oauth-manager.js";
5
+ import { isManagedConnectorServer } from "../../../connectors/materialize.js";
6
6
  import { listBundleMcpServerCapabilitiesForGateway, listBundleMcpServerToolsForGateway } from "../../../agent/mcp/bundle-mcp-gateway.js";
7
7
  //#region src/gateway/hono/routes/mcp.ts
8
8
  function registerMcpRoutes(authenticated, deps) {
@@ -1,5 +1,5 @@
1
- import { init_resolve_config_value, testApiKeyResolution } from "../../../config/resolve-config-value.js";
2
1
  import { resolveModelsJsonPath } from "../../../config/paths.js";
2
+ import { init_resolve_config_value, testApiKeyResolution } from "../../../config/resolve-config-value.js";
3
3
  import { computerModelProfile, init_model_policy } from "../../../computer/model-policy.js";
4
4
  import { init_models_json, loadModelsJson, saveModelsJson, validateModelsConfig } from "../../../config/models-json.js";
5
5
  import { getModelCatalogStore, init_model_catalog_store } from "../../../providers/model-catalog-store.js";
@@ -1,6 +1,8 @@
1
1
  import type { Context } from 'hono';
2
2
  import type { AuthenticatedRouteDeps } from './deps.js';
3
- export declare function submitSessionInput(c: Context, deps: AuthenticatedRouteDeps, conversationId: string): Promise<(Response & import("hono").TypedResponse<{
3
+ export declare function submitSessionInput(c: Context, deps: AuthenticatedRouteDeps, conversationId: string, options?: {
4
+ taskConversation?: boolean;
5
+ }): Promise<(Response & import("hono").TypedResponse<{
4
6
  ok: false;
5
7
  error: {
6
8
  code: string;
@@ -3,6 +3,11 @@ import { init_src } from "../../../../packages/gateway-contract/src/index.js";
3
3
  import { endpointTurnClaimSchema, init_src as init_src$1 } from "../../../../packages/endpoint-tools-protocol/src/index.js";
4
4
  import { init_providers, resolveModel } from "../../../providers/index.js";
5
5
  import { validateWebchatAttachments, validateWebchatContent } from "../../chat-limits.js";
6
+ import { isTaskDestructiveCommand } from "../../../session/reset-triggers.js";
7
+ import { parseSlashCommand } from "../../../chat-commands/command-parse.js";
8
+ import { commandRegistry } from "../../../chat-commands/registry.js";
9
+ import "../../../chat-commands/index.js";
10
+ import { isVoiceLikeAttachment } from "../../../channels/attachments/voice-stt-webchat.js";
6
11
  import { parseTurnContextRefs } from "../../../agent/source-context/types.js";
7
12
  import { getModelThinking } from "../../../providers/model-thinking.js";
8
13
  import { withModelConfigLock } from "../../../session/model-config-lock.js";
@@ -12,7 +17,7 @@ init_src();
12
17
  init_src$1();
13
18
  init_providers();
14
19
  const MAX_TURN_CONTEXTS = 5;
15
- async function submitSessionInput(c, deps, conversationId) {
20
+ async function submitSessionInput(c, deps, conversationId, options) {
16
21
  const body = await c.req.json().catch(() => null);
17
22
  if (!body || !conversationId) return c.json({
18
23
  ok: false,
@@ -39,6 +44,21 @@ async function submitSessionInput(c, deps, conversationId) {
39
44
  }
40
45
  }, 400);
41
46
  const content = typeof body.content === "string" ? body.content : "";
47
+ if (options?.taskConversation && isTaskDestructiveCommand(content)) return c.json({
48
+ ok: false,
49
+ error: {
50
+ code: "BAD_REQUEST",
51
+ message: "A task has one continuous conversation."
52
+ }
53
+ }, 400);
54
+ const parsedCommand = parseSlashCommand(content);
55
+ if (parsedCommand && commandRegistry.has(parsedCommand.command) && attachments?.some((attachment) => !isVoiceLikeAttachment(attachment))) return c.json({
56
+ ok: false,
57
+ error: {
58
+ code: "BAD_REQUEST",
59
+ message: "Slash commands do not accept file or image attachments."
60
+ }
61
+ }, 400);
42
62
  const contentError = validateWebchatContent(content);
43
63
  if (contentError) return c.json({
44
64
  ok: false,
@@ -222,7 +222,7 @@ function registerTaskRoutes(authenticated, deps) {
222
222
  message: "Task executor changed; refresh the conversation"
223
223
  }
224
224
  }, 409);
225
- return submitSessionInput(c, deps, active.conversationId);
225
+ return submitSessionInput(c, deps, active.conversationId, { taskConversation: true });
226
226
  });
227
227
  authenticated.patch("/api/tasks/:id/conversation/config", taskRateLimit, async (c) => {
228
228
  const body = await c.req.json().catch(() => null);
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { getModelRegistry } from "../../providers/model-registry.js";
4
3
  import { loadConfig, saveConfig } from "../../config/loader.js";
4
+ import { getModelRegistry } from "../../providers/model-registry.js";
5
5
  import { init_providers } from "../../providers/index.js";
6
6
  import { disposeAllSessionMcpRuntimes } from "../../agent/mcp/bundle-mcp-runtime.js";
7
7
  import { reloadImageGenerationProviders } from "../../agent/image/generation/provider-registry.js";
@@ -12,6 +12,7 @@ import { TaskRunCoordinator } from "../../tasks/task-run-coordinator.js";
12
12
  import { formatAgentRunErrorForClient } from "../../agent/client-error-format.js";
13
13
  import "../chat-limits.js";
14
14
  import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
15
+ import { markdownNotificationPreview } from "../../notifications/plain-text.js";
15
16
  import { ChatStreamMapper } from "../chat-stream/mapper.js";
16
17
  import { resolveWebchatConversationId } from "../resolve-webchat-session-key.js";
17
18
  import { recordExplicitRelationshipFollowUp } from "../../user-context/relationship-continuity.js";
@@ -326,9 +327,7 @@ async function* runGatewayAgent(deps, message, channel, chatId, origin, attachme
326
327
  }
327
328
  if (webchatConversationId) {
328
329
  const metaAfter = await sessionIndex.getSessionMetadata(webchatConversationId).catch(() => void 0);
329
- const normalizedResponse = terminalStatus === "success" ? mapper.getLastAssistantText().replace(/\s+/g, " ").trim() : "";
330
- const responseCharacters = Array.from(normalizedResponse);
331
- const responsePreview = responseCharacters.length > 180 ? `${responseCharacters.slice(0, 179).join("")}…` : normalizedResponse;
330
+ const responsePreview = terminalStatus === "success" ? markdownNotificationPreview(mapper.getLastAssistantText(), 180) : "";
332
331
  if (metaAfter?.name) emit("session.updated", {
333
332
  key: webchatConversationId,
334
333
  name: metaAfter.name
@@ -13,17 +13,17 @@ import { getSessionConfig } from "../storage/sqlite/config-repository.js";
13
13
  import "../storage/sqlite/index.js";
14
14
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
15
15
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
16
+ import { init_agent_session_key, resolveAgentMainConversationId } from "../routing/agent-session-key.js";
17
+ import { init_session_key, resolveConversationId, sanitizeSegment } from "../routing/session-key.js";
18
+ import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
19
+ import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
16
20
  import { init_paths, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
17
- import { prewarmModelRegistry } from "../providers/model-registry.js";
18
21
  import { areExtensionsGloballyDisabled } from "../extensions/discover-extensions.js";
19
22
  import { buildExtensionMetadataSnapshot } from "../extensions/extension-metadata-snapshot.js";
20
23
  import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, init_channel_catalog_service } from "../channels/catalog/channel-catalog-service.js";
21
24
  import { loadConfig, saveConfig } from "../config/loader.js";
22
- import { init_agent_session_key, resolveAgentMainConversationId } from "../routing/agent-session-key.js";
23
- import { init_session_key, resolveConversationId, sanitizeSegment } from "../routing/session-key.js";
24
- import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
25
+ import { prewarmModelRegistry } from "../providers/model-registry.js";
25
26
  import { init_providers, providers_exports } from "../providers/index.js";
26
- import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
27
27
  import { TaskRepository } from "../tasks/task-repository.js";
28
28
  import { TaskConversationRepository } from "../tasks/task-conversation-repository.js";
29
29
  import { getEmbeddedExecutionSession } from "../agent/embedded/execution-context.js";
@@ -0,0 +1 @@
1
+ export declare function markdownNotificationPreview(markdown: string, maxCharacters: number): string;
@@ -0,0 +1,14 @@
1
+ import { markdownToIR } from "../markdown/ir.js";
2
+ import "../markdown/index.js";
3
+ //#region src/notifications/plain-text.ts
4
+ function markdownNotificationPreview(markdown, maxCharacters) {
5
+ const plainText = markdownToIR(markdown, {
6
+ enableSpoilers: true,
7
+ linkify: true,
8
+ tableMode: "bullets"
9
+ }).text.replace(/\s+/g, " ").trim();
10
+ const characters = Array.from(plainText);
11
+ return characters.length > maxCharacters ? `${characters.slice(0, Math.max(0, maxCharacters - 1)).join("")}…` : plainText;
12
+ }
13
+ //#endregion
14
+ export { markdownNotificationPreview };
@@ -1,5 +1,6 @@
1
1
  import { NotificationTargetSchema } from "../../packages/gateway-contract/src/notifications.js";
2
2
  import { init_src } from "../../packages/gateway-contract/src/index.js";
3
+ import { markdownNotificationPreview } from "./plain-text.js";
3
4
  //#region src/notifications/planner.ts
4
5
  init_src();
5
6
  function chatPlan(payload) {
@@ -16,7 +17,7 @@ function chatPlan(payload) {
16
17
  zh: "打开对话查看结果。"
17
18
  };
18
19
  const sessionTitle = typeof event.sessionTitle === "string" ? event.sessionTitle.trim().slice(0, 120) : "";
19
- const responsePreview = completed && typeof event.responsePreview === "string" ? Array.from(event.responsePreview.trim()).slice(0, 180).join("") : "";
20
+ const responsePreview = completed && typeof event.responsePreview === "string" ? markdownNotificationPreview(event.responsePreview, 180) : "";
20
21
  return {
21
22
  dedupeKey: `${type}:${event.runId}`,
22
23
  notification: {
@@ -1,5 +1,5 @@
1
- import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
2
1
  import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
2
+ import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
3
3
  import { getDefaultAuthProfileStore } from "./auth-profile-store.js";
4
4
  //#region src/providers/auth-runtime/resolve-auth.ts
5
5
  init_env_keys();
@@ -1,11 +1,11 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
3
+ import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
4
+ import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
3
5
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
4
6
  import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
5
7
  import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
6
- import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
7
8
  import { CredentialResolver, hasCredentials, init_credentials } from "../auth/credentials.js";
8
- import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
9
9
  import { EXTENSION_PROVIDER_BASE_URL, init_constants } from "./constants.js";
10
10
  import { applyOfficialModelMetadataCorrections, getSupplementalModels, init_model_supplements } from "./model-supplements.js";
11
11
  import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_paths_state, resolveXopcCloudCatalogCachePath } from "../config/paths-state.js";
3
- import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
4
3
  import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
+ import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
5
5
  import { voiceManifestSchema } from "../../packages/realtime-protocol/src/voice-catalog.js";
6
6
  import { init_voice } from "../../packages/realtime-protocol/src/voice.js";
7
7
  import { readFileSync, rmSync } from "node:fs";
@@ -1,8 +1,8 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
5
4
  import { resolveModelsJsonPath } from "../config/paths.js";
5
+ import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
6
6
  import { getDefaultModelValues, init_models_json, validateModelsConfig } from "../config/models-json.js";
7
7
  import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
8
8
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
3
2
  import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
3
+ import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
4
4
  import { XOPC_CLOUD_PROVIDER_ID, init_xopc_cloud_config, resolveXopcModelRouterUrl } from "./xopc-cloud-config.js";
5
5
  //#region src/providers/register-runtime-providers.ts
6
6
  function registerRuntimeProvider(modelRuntime, source) {
@@ -17,4 +17,6 @@ export declare function resolveResetTriggers(configured?: string[]): readonly st
17
17
  export declare function bareResetAckMessage(matchedTrigger?: string): string;
18
18
  /** Slash command names that overlap reset triggers — skip when init already reset. */
19
19
  export declare const RESET_OVERLAP_COMMANDS: Set<string>;
20
+ export declare const TASK_DESTRUCTIVE_COMMANDS: Set<string>;
21
+ export declare function isTaskDestructiveCommand(body: string): boolean;
20
22
  export declare function shouldSkipResetOverlapCommand(command: string | undefined, resetTriggered: boolean): boolean;
@@ -53,9 +53,19 @@ const RESET_OVERLAP_COMMANDS = new Set([
53
53
  "reset",
54
54
  "restart"
55
55
  ]);
56
+ const TASK_DESTRUCTIVE_COMMANDS = new Set([
57
+ ...RESET_OVERLAP_COMMANDS,
58
+ "clear",
59
+ "archive"
60
+ ]);
61
+ function isTaskDestructiveCommand(body) {
62
+ const normalized = stripLeadingEnvelopeTimestamp(body.trim());
63
+ const match = /^\/([^\s@]+)(?:@[^\s]+)?(?:\s|$)/.exec(normalized);
64
+ return Boolean(match && TASK_DESTRUCTIVE_COMMANDS.has(match[1].toLowerCase()));
65
+ }
56
66
  function shouldSkipResetOverlapCommand(command, resetTriggered) {
57
67
  if (!resetTriggered || !command) return false;
58
68
  return RESET_OVERLAP_COMMANDS.has(command.toLowerCase());
59
69
  }
60
70
  //#endregion
61
- export { DEFAULT_RESET_TRIGGERS, RESET_OVERLAP_COMMANDS, bareResetAckMessage, matchResetTriggers, resolveResetTriggers, shouldSkipResetOverlapCommand, stripLeadingEnvelopeTimestamp };
71
+ export { DEFAULT_RESET_TRIGGERS, RESET_OVERLAP_COMMANDS, TASK_DESTRUCTIVE_COMMANDS, bareResetAckMessage, isTaskDestructiveCommand, matchResetTriggers, resolveResetTriggers, shouldSkipResetOverlapCommand, stripLeadingEnvelopeTimestamp };
@@ -71,7 +71,18 @@ function listSessionMetadata(query = {}) {
71
71
  const db = getSqliteDatabase();
72
72
  const conditions = [];
73
73
  const params = [];
74
- if (!query.includeHidden) conditions.push(`s.hidden_from_session_list = 0`);
74
+ if (!query.includeHidden) {
75
+ conditions.push(`s.hidden_from_session_list = 0`);
76
+ conditions.push(`(
77
+ s.source_channel NOT IN ('automation', 'workflow')
78
+ OR COALESCE(TRIM(s.name), '') != ''
79
+ OR EXISTS (
80
+ SELECT 1 FROM transcript_entries visible_output
81
+ WHERE visible_output.transcript_id = s.active_transcript_id
82
+ AND visible_output.role IN ('assistant', 'toolResult')
83
+ )
84
+ )`);
85
+ }
75
86
  if (query.sessionTypes?.length) {
76
87
  conditions.push(`s.session_type IN (${query.sessionTypes.map(() => "?").join(", ")})`);
77
88
  params.push(...query.sessionTypes);