@keyou007/agent-bot 0.1.24-alpha.5 → 0.1.24-alpha.7

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 (105) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +29 -3
  3. package/README.zh.md +29 -3
  4. package/SECURITY.md +12 -0
  5. package/config.example.yaml +5 -0
  6. package/dist/cli/controlProtocol.js.map +1 -1
  7. package/dist/cli/serverStatus.js +1 -0
  8. package/dist/cli/serverStatus.js.map +1 -1
  9. package/dist/cli.js +6 -1
  10. package/dist/cli.js.map +1 -1
  11. package/dist/codex/CodexEventMapper.js +1 -0
  12. package/dist/codex/CodexEventMapper.js.map +1 -1
  13. package/dist/codex/CodexRuntime.js +247 -120
  14. package/dist/codex/CodexRuntime.js.map +1 -1
  15. package/dist/codex/ProviderSwitch.js +12 -13
  16. package/dist/codex/ProviderSwitch.js.map +1 -1
  17. package/dist/codex/TraePlanEntry.js +70 -0
  18. package/dist/codex/TraePlanEntry.js.map +1 -0
  19. package/dist/config/AgentExecutionDefaultsStore.js +4 -0
  20. package/dist/config/AgentExecutionDefaultsStore.js.map +1 -1
  21. package/dist/config/loadConfig.js +4 -0
  22. package/dist/config/loadConfig.js.map +1 -1
  23. package/dist/config/schema.js +3 -0
  24. package/dist/config/schema.js.map +1 -1
  25. package/dist/feishu/CardRenderer.js +92 -8
  26. package/dist/feishu/CardRenderer.js.map +1 -1
  27. package/dist/feishu/FeishuConnector.js +1 -0
  28. package/dist/feishu/FeishuConnector.js.map +1 -1
  29. package/dist/feishu/FeishuTurnPresenter.js +121 -17
  30. package/dist/feishu/FeishuTurnPresenter.js.map +1 -1
  31. package/dist/index.js +57 -7
  32. package/dist/index.js.map +1 -1
  33. package/dist/local-files/LocalFileViewerServer.js +51 -4
  34. package/dist/local-files/LocalFileViewerServer.js.map +1 -1
  35. package/dist/local-files/TurnPreviewPage.js +7 -2
  36. package/dist/local-files/TurnPreviewPage.js.map +1 -1
  37. package/dist/presentation/TurnStateReducer.js +41 -6
  38. package/dist/presentation/TurnStateReducer.js.map +1 -1
  39. package/dist/proxy/ProxySessionController.js +620 -214
  40. package/dist/proxy/ProxySessionController.js.map +1 -1
  41. package/dist/proxy/SessionOperationQueue.js +14 -0
  42. package/dist/proxy/SessionOperationQueue.js.map +1 -0
  43. package/dist/runtime/AcpRuntimeAdapter.js +4 -2
  44. package/dist/runtime/AcpRuntimeAdapter.js.map +1 -1
  45. package/dist/state/StateStore.js +22 -0
  46. package/dist/state/StateStore.js.map +1 -1
  47. package/dist/state/TurnPreviewJournal.js +19 -7
  48. package/dist/state/TurnPreviewJournal.js.map +1 -1
  49. package/dist/state/migrations.js +6 -0
  50. package/dist/state/migrations.js.map +1 -1
  51. package/dist/supervision/SafeRestartNotifier.js +33 -1
  52. package/dist/supervision/SafeRestartNotifier.js.map +1 -1
  53. package/dist/supervision/SafeRestartScheduler.js +22 -6
  54. package/dist/supervision/SafeRestartScheduler.js.map +1 -1
  55. package/dist/terminal/TerminalCards.js +13 -0
  56. package/dist/terminal/TerminalCards.js.map +1 -0
  57. package/dist/terminal/TerminalCommandTracker.js +74 -0
  58. package/dist/terminal/TerminalCommandTracker.js.map +1 -0
  59. package/dist/terminal/TerminalLinks.js +76 -0
  60. package/dist/terminal/TerminalLinks.js.map +1 -0
  61. package/dist/terminal/TerminalPage.js +212 -0
  62. package/dist/terminal/TerminalPage.js.map +1 -0
  63. package/dist/terminal/TerminalProcess.js +95 -0
  64. package/dist/terminal/TerminalProcess.js.map +1 -0
  65. package/dist/terminal/TerminalServer.js +676 -0
  66. package/dist/terminal/TerminalServer.js.map +1 -0
  67. package/docs/technical-reference.md +48 -0
  68. package/docs/technical-reference.zh.md +48 -0
  69. package/npm-shrinkwrap.json +55 -5
  70. package/package.json +11 -4
  71. package/skills/agent-bot/SKILL.md +11 -2
  72. package/src/cli/controlProtocol.ts +2 -1
  73. package/src/cli/serverStatus.ts +1 -0
  74. package/src/cli.ts +6 -1
  75. package/src/codex/CodexEventMapper.ts +1 -0
  76. package/src/codex/CodexRuntime.ts +244 -128
  77. package/src/codex/ProviderSwitch.ts +11 -12
  78. package/src/codex/TraePlanEntry.ts +63 -0
  79. package/src/config/AgentExecutionDefaultsStore.ts +2 -0
  80. package/src/config/loadConfig.ts +4 -0
  81. package/src/config/schema.ts +5 -1
  82. package/src/feishu/CardRenderer.ts +109 -8
  83. package/src/feishu/FeishuConnector.ts +1 -0
  84. package/src/feishu/FeishuTurnPresenter.ts +108 -16
  85. package/src/feishu/types.ts +1 -0
  86. package/src/index.ts +56 -8
  87. package/src/local-files/LocalFileViewerServer.ts +48 -4
  88. package/src/local-files/TurnPreviewPage.ts +7 -2
  89. package/src/presentation/TurnStateReducer.ts +46 -7
  90. package/src/presentation/turnViewTypes.ts +5 -0
  91. package/src/proxy/ProxySessionController.ts +629 -211
  92. package/src/proxy/SessionOperationQueue.ts +13 -0
  93. package/src/runtime/AcpRuntimeAdapter.ts +5 -3
  94. package/src/runtime/types.ts +8 -3
  95. package/src/state/StateStore.ts +38 -1
  96. package/src/state/TurnPreviewJournal.ts +19 -7
  97. package/src/state/migrations.ts +6 -0
  98. package/src/supervision/SafeRestartNotifier.ts +35 -2
  99. package/src/supervision/SafeRestartScheduler.ts +25 -6
  100. package/src/terminal/TerminalCards.ts +18 -0
  101. package/src/terminal/TerminalCommandTracker.ts +74 -0
  102. package/src/terminal/TerminalLinks.ts +61 -0
  103. package/src/terminal/TerminalPage.ts +213 -0
  104. package/src/terminal/TerminalProcess.ts +93 -0
  105. package/src/terminal/TerminalServer.ts +551 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalServer.js","sourceRoot":"","sources":["../../src/terminal/TerminalServer.ts"],"names":[],"mappings":"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"}
@@ -244,6 +244,42 @@ Feishu local commands beginning with `!` are persisted under `command-jobs/` bes
244
244
 
245
245
  At least one agent must be configured. `defaults.agent` must name a configured agent.
246
246
 
247
+ ## Interactive browser terminal
248
+
249
+ The server stores the source contextKey and command-card message ID from the trusted Shell job, never from browser input. Topic authorization replies to that command card with reply_in_thread=true; private/group-body conversations use their original destination. Recovery retains this route even if the task moves. Delivery failure does not fall back to another destination. Management actions carry the original contextKey so their feedback remains in the same topic.
250
+
251
+ An approved terminal with no PTY exposes Open Terminal and accepts a fresh recovery authorization for the same ID. Only explicit owner approval rotates browser access; it refreshes the unstarted authorization window, not the absolute lifetime. No PTY starts during page load, recovery request or approval. Actual WebSocket authentication starts at most one Shell. Pending safe restart blocks both requesting and approving this first-start recovery, while already-running PTYs remain recoverable.
252
+
253
+ The authorization card updates in place into a terminal management card in the command’s original conversation/topic showing a stable terminal ID, cwd and connection state, with Close, Refresh and a separate `/terminal/<8-character-token>` link. The link is not an execution credential. A new tab generates a browser key and requests a five-minute recovery approval; only matching-code owner approval revokes the old browser and reuses the original PTY. Requesting, denying, expiring or cancelling pending recovery does not interrupt the original Shell. Recovery requests and approvals do not extend the three-minute disconnect deadline; only an authenticated WebSocket reattachment cancels it and restarts the thirty-minute idle timeout. The absolute lifetime never resets. Feishu closure validates owner, card ID and action token, independently of browser credentials. Recovery of a running Shell remains available during pending safe restart without consuming another PTY slot, with separate pending-recovery limits and request rate limiting. Close/exit updates the cards; late approvals never respawn ended terminals. Card-update failures are logged and can be retried with Refresh. Closing a browser tab allows three minutes to reconnect before its Shell is terminated.
254
+
255
+ The WebSocket ready frame carries a bounded output snapshot and replay flag. Initial attachment permits normal startup query responses; subsequent snapshots restore display only. xterm input/automatic responses remain disabled until asynchronous replay parsing completes, before queued live output is parsed in order. ANSI and user input are not regex-filtered. Each connection has a fresh xterm instance; stale callbacks cannot write to a new connection or release its replay guard.
256
+
257
+ Switching to a background tab preserves an existing WebSocket; pagehide/offline transitions disconnect it and pause recovery. Hidden tabs without a socket pause polling; visibilitychange, pageshow (including bfcache), online and focus resume the existing authorization. Status requests time out after ten seconds; network/transient server failures retry with 1/2/4/8/10-second capped backoff. WebSocket readiness has a fifteen-second timeout. Recovery is single-flight and ignores stale request/socket results. Automatic retries and manual Reconnect do not revoke approval, request another session or replay terminal input. Rejection, expiry, close and explicit Shell errors stop recovery. Logs record browser observation of approval, WebSocket authentication and failure stages, never codes, credentials or terminal input/output.
258
+
259
+ The `!` command card's Open Terminal link is a launch reference, not an execution credential. GET only loads local xterm.js assets. POST requests an owner-only Feishu authorization card in the original command conversation/topic with a six-digit verification code. Approval binds the owner, exact card, request token and random browser key, and expires in five minutes. Only an authenticated browser WebSocket starts the Shell. The browser key lives in sessionStorage and POST/WebSocket bodies, never URLs or cookies. Preview tokens cannot authorize terminals. Do not approve unsolicited requests or share launch links publicly.
260
+
261
+ ```yaml
262
+ fileViewer:
263
+ enabled: true
264
+ host: "0.0.0.0"
265
+ port: 1423
266
+ # publicBaseUrl: "https://agentbot.example.com/bot"
267
+ terminal:
268
+ enabled: true
269
+ ```
270
+
271
+ Terminals mount at `<Preview base path>/terminal` on the same HTTP server. Protocol, host, port, physical-network address selection and `publicBaseUrl` all come from `fileViewer`. Thus `http://10.0.0.2:1423/preview/...` pairs with `http://10.0.0.2:1423/terminal/xxxxxxxx`; a `/bot` proxy prefix is retained for pages, assets, API and WebSocket. No separate terminal listener, port file or networking configuration exists. Disable either Preview or `terminal.enabled` to hide terminal links. URLs only use `/terminal/<8-character-token>` for both new-shell and recovery links with case-sensitive base64url tokens. Open-link mappings live in `<data>/terminal/open-links/<SHA256(token)>.json`, contain only the token and command-job ID, and survive restart. Tokens are keyed pseudorandom references; collisions retry without overwriting an existing mapping, and hashed filenames preserve case sensitivity on Windows. GET and request handling resolve existing records only; they never create mappings. Recovery references are random and bound to one process-local session; they cannot restore a stopped Shell. Their tokens are durably reserved in the same mapping directory without session credentials, so neither current nor retired recovery tokens can collide with command tokens. Server-side resolution selects the mode for both page rendering and authorization requests; the page receives this as a data attribute, never infers it from the URL. The key in `<data>/terminal/secret` is used for stable command-token generation. Browser keys, approval tokens, owner checks and request throttling remain unchanged. Preview tokens never authorize terminal execution.
272
+
273
+ HTTP works on trusted LANs, but terminal credentials/input/output are unencrypted and vulnerable to network interception or modification; owner approval does not replace TLS. Use HTTPS for untrusted/Internet access. With a reverse proxy, preserve Host/Origin and support WebSocket upgrades on the same Preview address (`ws` for HTTP, `wss` for HTTPS). Avoid logging terminal URLs, credentials or traffic. No additional origin or domain is required.
274
+
275
+ Sharing the address does not share authorization. Terminal requests validate Host/Origin, including rejection of sandboxed `null` origins, JSON/frame limits and owner/card/browser credentials. File and Turn routes still only accept read-only requests. Rendered HTML keeps an opaque-origin response sandbox with inline scripts allowed but no same-origin privilege/network requests; raw files use a no-script sandbox as well, including HTML/SVG/XML opened directly. These prevent untrusted preview documents from reading terminal sessionStorage or interacting with its page. Only application-owned scripts should ever run in the shared origin.
276
+
277
+ `node-pty` is optional so native build failures do not prevent Agent Bot installation. If missing, terminal startup reports an error; reinstall optional dependencies with node-pty's documented compiler prerequisites. Windows requires Windows 10 1903/Server 2022 or newer (using the bundled ConPTY). PowerShell profiles are retained (`pwsh`, then Windows PowerShell, then `cmd.exe`). Unix uses `$SHELL`, login Shell or platform fallback in interactive mode. Input syntax highlighting comes from the Shell; xterm renders ANSI rather than parsing command languages.
278
+
279
+ Only cwd is inherited from the command card, never its command or process state. Shells have full host-user permissions. Filtering Feishu/Agent Bot internal environment variables is not sandboxing: host files and other inherited credentials remain accessible. Input/output is not logged by the application. Replay keeps only the latest 256 Ki characters in memory, not an unlimited transcript or guaranteed exact full-screen application state. Three pending/approved/running sessions are allowed; at least ten seconds between requests and twenty requests per hour. Authorization/connection expires after five minutes. Once a Shell starts, losing its browser connection starts a three-minute deadline, enforced by a dedicated timer and checked on requests. Successful WebSocket reattachment cancels the timer; output, polling, resize and recovery approval do not extend it. A connected foreground page prevents idle closure. Authenticated visibility frames renew foreground presence every thirty seconds, valid for ninety seconds; hidden pages stop heartbeats. Hiding the page or losing fresh foreground presence starts thirty minutes of input/output inactivity. Repeated hidden reports, polling, resize and approval do not reset inactivity. Successful authenticated reconnection cancels the disconnect deadline and restarts thirty idle minutes; input/output refreshes idle time but never the disconnect deadline. Either background-idle or disconnect timeout closes the Shell. Visibility messages never reach the PTY. Absolute lifetime remains eight hours.
280
+
281
+ Closing a tab disconnects; the Shell ends after three minutes without a successful reconnection. Close Terminal ends the Shell; detached processes may survive. Owner changes revoke sessions. Terminals do not survive Worker restart. Safe restart/update counts them separately from Agent tasks, displays them on its card and waits for closure. New Shells are blocked once restart is scheduled, while existing terminals may reconnect. ForceRestart/service stop closes terminals. Existing background `!` jobs and their Cancel action remain independent.
282
+
247
283
  ## Agent Runtimes
248
284
 
249
285
  The configured Agent standard name is the runtime isolation key. Every configured Agent owns a separate, lazily started child process and runtime instance, even when multiple Agents use the same `kind`. Tasks using different Agents never share a command, environment, protocol connection, session map, or event stream. Tasks using the same Agent share that Agent process while keeping separate protocol sessions.
@@ -309,6 +345,10 @@ Incoming Feishu rich-text `code_block` elements are converted to fenced Markdown
309
345
 
310
346
  Reasoning Preview receives `item/reasoning/summaryTextDelta`, `item/reasoning/textDelta`, and authoritative `item/completed` reasoning arrays. Optional `TurnViewState.reasoningItems` stores complete summary/content sections separately, anchored to existing activity IDs; legacy `reasoning:*:<summaryIndex>` activities remain a summary fallback. Only summary deltas continue through the existing card progress path. Content and completion updates persist without scheduling card refreshes. Preview extracts the first explicit leading Markdown heading or standalone bold title into the disclosure header, removes only that title from the expanded text, and renders all supplied summary/content sections without field labels. Linked/image headings retain their original body markup to preserve navigation and attachments; untitled text remains intact. Heading detection parses only a candidate first line, not the full Markdown. Preview details use `reasoning:<itemId>` keys and revision-aware lazy loading. No database schema migration or remote history backfill is performed.
311
347
 
348
+ Standalone rich-text/resource messages and merged forwards wait up to 1.5 seconds after acknowledgement/preparation for an associated attachment. Matching requires the same conversation and sender, an explicit parent-message ID, and a non-command attachment. An attachment reserves the pair on arrival, before awaiting its Reaction, so slow acknowledgement cannot split an already-matched pair. The combined request starts with the attached instruction, followed by the original reference text and resources; card Prompts and newly generated task titles use the instruction. Ordinary text, commands, and existing quoted messages do not enter this extra wait. Messages without an attachment proceed unchanged; later replies follow normal quote/steering behavior. The inbound representation has no separate forward flag: association uses message type, parent ID, and the short arrival window rather than guessing from message text.
349
+
350
+ Archiving (including Dismiss) reads task metadata and activity, not Turn history. On Codex's exact `thread/archive` error `no rollout found for thread id <id>`, empty-task cleanup is allowed only with a local binding and no recorded Turns, attempts (including failures), or inherited history. It rechecks remote metadata (empty preview, no fork parent, idle/notLoaded), local runtime activity, and that the reported rollout path is absent, then requires a successful `thread/unsubscribe` response before closing the local task. Other read/archive/release failures remain errors and leave the group intact; existing rollout files are never deleted or rewritten. If Feishu deletion fails after local archival, retrying the same confirmation retries group deletion only.
351
+
312
352
  ## Tasks, Projects, And External App Server Work
313
353
 
314
354
  `/sessions` reads tasks through `thread/list` from every configured App Server Agent. For Codex, this includes tasks created by Codex Desktop, CLI, Agent Bot, or another App Server client under the same `CODEX_HOME`; other Agents expose their own task stores through the same protocol. Tasks are sorted globally before pagination: the current task first, then other active tasks, followed by idle tasks in descending last-activity order. The first ten global results determine page membership. Those visible tasks are then grouped by project in first-appearance order, with each project's tasks kept in descending activity order. Expanding a task directly shows the first 50 Unicode characters of its latest user Prompt without a field label, followed by its update time and action menu; runtime IDs, directory, loading state, and other status details remain in the dedicated Status view. `Previous` and `Next` replace the current card contents instead of appending more tasks, while preserving search terms and task numbers that match the displayed order.
@@ -337,6 +377,14 @@ Project behavior:
337
377
 
338
378
  Forks use the latest available completed turn and do not interrupt an active source turn.
339
379
 
380
+ ### History-preserving Provider switches
381
+
382
+ Settings switching uses only the existing thread ID: no implicit thread/start, thread/fork, history rewrite, synthetic Turn, or completed-Turn boundary. The controller independently rejects a changed thread ID before persistence. Settings-only hydration bypasses the old Provider resume, but requires a verified resume before execution. thread/unsubscribe is a subscription operation, not proof of unloading or external ownership: notSubscribed is idempotent, and a timeout requires recovery rather than an unverified success. Failed switches restore the same-thread Provider/model; missing or partial Agent defaults are restored by replacing the known YAML keys, not merging the rejected target back in. Disconnects during asynchronous persistence preserve the need to revalidate on the next request. No model prompt is sent merely to validate settings, so configuration success does not prove endpoint authentication/availability.
383
+
384
+ ### Deferred Provider settings
385
+
386
+ `pending_provider_settings` stores a task-scoped target Provider/model/reasoning/permission bundle and the notification route independently of active session fields. Settings mutations and Turn starts are serialized per task, including multiple bound conversations. Cards use the pending Provider’s model catalog and mark the selection as pending; model/thinking callbacks carry the Provider ID to reject stale cards. Terminal events and startup recovery apply pending settings, and every Turn start checks them before submitting a Prompt. Failed switches restore the original Provider/model; a typed runtime error reports whether rollback succeeded. Only after verifying rollback and matching both runtime and persisted settings does the controller clear the draft, restore the card with a warning, and allow queued/new Prompts to continue. Failed or unverified rollback retains the draft and queued Prompts for explicit recovery. Archive clears the draft. Agent defaults are only persisted after the runtime confirms the actual Provider/model.
387
+
340
388
  ## Persistence And Recovery
341
389
 
342
390
  SQLite stores:
@@ -244,6 +244,42 @@ HTML 文本文件(`.html`、`.htm`,不区分大小写)支持预览与代
244
244
 
245
245
  必须至少配置一个 Agent,`defaults.agent` 必须指向已配置的 Agent。
246
246
 
247
+ ## 交互式网页终端
248
+
249
+ 路由从服务器保存的 Shell job 获取 contextKey 和命令卡片 ID,不接受浏览器指定。话题内授权通过 reply_in_thread=true 回复原命令卡;私聊与群正文沿用原目的地。重新授权保留该路由,不随任务后续移动而变化;投递失败不降级发往私聊或群正文。管理卡回调携带原 contextKey,反馈仍留在原话题。
250
+
251
+ 已授权但尚无 PTY 的终端提供“打开终端”,新网页可为同一个终端 ID 申请重新授权。仅所有者明确批准后才切换浏览器访问权,并刷新首次启动的授权时限,不延长绝对寿命。页面加载、申请或批准都不启动 Shell,实际 WebSocket 鉴权后最多启动一个 Shell。安全重启等待期间阻止这类首次启动恢复的申请和批准,但已运行 PTY 仍可恢复。
252
+
253
+ 授权卡在原命令会话中原位更新为终端管理卡,显示稳定终端 ID、目录和连接状态,可直接关闭或刷新,也可通过`/terminal/<8位token>` 短链接恢复。链接不是执行凭证:新标签页生成自己的浏览器密钥,申请五分钟有效的恢复授权;所有者核对验证码批准后,才撤销旧网页访问、连接原 PTY。请求、拒绝、过期或取消待批准恢复不会中断原 Shell;恢复申请或授权不延长三分钟断开时限,只有 WebSocket 鉴权并重新连接成功才取消断开计时并重置三十分钟空闲计时,绝对寿命不变。关闭操作校验所有者、卡片 ID 和操作令牌,不依赖浏览器凭证。已运行 Shell 的恢复不受新建终端的安全重启限制,也不额外占用 PTY 名额,但独立限制同时待批准恢复数和请求频率。关闭/退出更新管理卡,迟到批准不能重新创建已结束终端。卡片更新失败会记录警告,可用“刷新”重试;网页标签关闭后可在三分钟内重连,超时将结束 Shell。
254
+
255
+ WebSocket 就绪帧携带有界输出快照和回放标志:首次连接的启动输出允许正常查询响应,后续重连快照只恢复画面。回放期间禁用 xterm 输入/自动响应,等待异步解析完成后恢复,再按顺序解析实时输出;不会用正则删除 ANSI 或用户输入。每次连接使用独立的 xterm 实例,旧实例回调不能向新连接写入或解除其回放保护。
256
+
257
+ 切换后台标签页保留现有 WebSocket;pagehide/离线时断开并暂停恢复,无连接的隐藏页面暂停轮询。visibilitychange、pageshow(含 bfcache)、online/focus 恢复时查询原授权。状态请求十秒超时,网络/暂时性服务错误按 1/2/4/8/10 秒上限退避重试;WebSocket 十五秒未就绪会重新连接。并发恢复事件只产生一个查询/连接,旧请求/旧 socket 的迟到结果会被忽略。自动重试和手动“重新连接”不撤销原授权,不重复申请或执行输入;拒绝、过期、关闭或 Shell 错误明确停止。日志只记录授权被浏览器观察、WebSocket 鉴权及失败阶段,不记录验证码、令牌或终端输入输出。
258
+
259
+ `!` 命令卡片的 Open Terminal 链接只用于申请连接,不是执行凭证。GET 只加载本地 xterm.js 资源;POST 才向原命令所在会话/话题发送六位验证码授权卡,仅所有者可批准。授权绑定所有者、原始卡片、请求令牌和随机浏览器密钥,五分钟有效;原浏览器通过 WebSocket 鉴权才启动 Shell。密钥仅在 sessionStorage 和 POST/WebSocket 请求体中,不放在 URL/Cookie。Preview token 无法授权终端。不要批准非本人发起的请求或公开分享入口链接。
260
+
261
+ ```yaml
262
+ fileViewer:
263
+ enabled: true
264
+ host: "0.0.0.0"
265
+ port: 1423
266
+ # publicBaseUrl: "https://agentbot.example.com/bot"
267
+ terminal:
268
+ enabled: true
269
+ ```
270
+
271
+ 终端挂载到同一 HTTP 服务的 `<Preview 路径前缀>/terminal`。协议、主机、端口、物理网卡地址选择和 `publicBaseUrl` 全部来自 `fileViewer`。例如 `http://10.0.0.2:1423/preview/...` 对应 `http://10.0.0.2:1423/terminal/xxxxxxxx`;代理的 `/bot` 前缀会同时保留在页面、资源、API 和 WebSocket 路径中。不再单独监听端口、保存终端端口文件或提供终端网络配置。关闭 Preview 或 `terminal.enabled` 后不显示终端入口。链接仅支持 `/terminal/<8位token>`,新建和恢复共用这一格式,token 使用区分大小写的 base64url 字符。新建链接映射保存在 `<data>/terminal/open-links/<SHA256(token)>.json`,仅保存 token 和命令任务 ID,重启后仍有效。token 由密钥生成伪随机引用,冲突时重试且不覆盖已有映射;文件名哈希保证 Windows 下也能区分 token 大小写。GET 和请求授权只解析已有映射,不创建映射。恢复 token 随机生成,仅绑定当前进程的一个终端,不能恢复已关闭 Shell;同一映射目录永久保留 token 占位,不保存会话凭证,防止当前或过期的恢复 token 与命令 token 冲突。页面渲染和授权请求都由服务端解析 token 决定模式,通过 data 属性传给页面,不再从 URL 推断。`<data>/terminal/secret` 用于稳定生成新建 token;浏览器密钥、授权令牌、所有者检查和请求限频保持不变。Preview token 不能授权执行命令。
272
+
273
+ 可信局域网支持 HTTP,但终端凭证/输入/输出没有加密,可被网络监听或篡改;所有者授权不能替代 TLS。不可信网络/互联网访问请使用 HTTPS。反向代理保留 Host/Origin,并在同一 Preview 地址支持 WebSocket 升级(HTTP 用 `ws`,HTTPS 用 `wss`),避免记录终端 URL、凭证或流量。不需要额外域名/origin。
274
+
275
+ 共用地址不等于共用授权。终端仍校验 Host/Origin(拒绝沙箱的 `null` origin)、JSON/帧大小、所有者/原始卡片/浏览器凭证。文件和 Turn 路由仍只读。HTML 渲染保持响应级不透明 origin 沙箱,可执行内联脚本,但没有同源权限或网络访问;原始文件也使用禁止脚本的响应级沙箱,覆盖直接打开 HTML/SVG/XML,防止预览文档读取终端 sessionStorage 或操作终端页面。同源仅应运行应用自身脚本。
276
+
277
+ `node-pty` 为可选原生依赖,构建失败不阻塞 Agent Bot 安装,终端启动会提示错误;需按 node-pty 文档安装编译前置条件并重装可选依赖。Windows 需要 Windows 10 1903/Server 2022 或更新系统(使用 node-pty 随包提供的 ConPTY);保留 PowerShell profile,依次选择 `pwsh`、Windows PowerShell、`cmd.exe`。Unix 依次选择 `$SHELL`、登录 Shell、平台默认 Shell,以交互模式启动。输入高亮来自 Shell,xterm 渲染 ANSI,不解析命令语言。
278
+
279
+ 只继承卡片 cwd,不继承原命令或进程状态;Shell 有主机用户完整权限。过滤飞书/Agent Bot 内部环境变量不等于沙箱,主机文件和其他继承凭证仍可访问。应用不记录终端输入/输出;内存仅保留最后 256 Ki 字符用于重连,不保存无限历史或保证完全重建所有全屏程序画面。最多三个待授权/已授权/运行中会话;每十秒最多一次申请,每小时二十次。授权/连接五分钟未完成会回收。Shell 启动后,网页断开即开始三分钟计时,由独立定时器执行,并在请求时校验;只有 WebSocket 鉴权后重连成功才取消计时,输出、轮询、resize 和恢复授权均不延长时限。连接正常且处于前台时不因空闲关闭。前台页面每三十秒通过已鉴权 WebSocket 上报可见性,有效九十秒,后台停止心跳;切到后台或前台状态失效后开始三十分钟无输入/输出计时。重复后台状态、轮询、resize、仅授权不重置空闲计时;成功重连取消断开计时并重置三十分钟空闲时间,输入/输出刷新空闲时间但不延长断开时限。后台空闲或断开超时任一满足即关闭,可见性消息不写入 PTY,累计八小时的绝对寿命不变。
280
+
281
+ 关闭标签页后断开连接,三分钟内未成功重连则自动结束 Shell;“关闭终端”停止 Shell,脱离终端的后台进程可能继续运行。所有者变更撤销会话,Worker 重启不保留终端。安全重启/更新单独统计活动终端、在卡片提示并等待关闭;计划重启后禁止新建 Shell,已有终端可重连。ForceRestart/停止服务会关闭终端。原有后台 `!` 命令及 Cancel 行为不变。
282
+
247
283
  ## Agent Runtime
248
284
 
249
285
  Agent 配置的标准名是运行时隔离键。每个配置的 Agent 都拥有独立、按需启动的子进程和 Runtime 实例,即使多个 Agent 使用相同的 `kind` 也不会合并。不同 Agent 的任务不会共享命令、环境变量、协议连接、会话映射或事件流;同一 Agent 的多个任务共享该 Agent 进程,但使用独立的协议会话。
@@ -309,6 +345,10 @@ Fork 从未绑定过 Agent Bot 的任务前,Agent Bot 会先读取不含 Turns
309
345
 
310
346
  思考 Preview 接收 `item/reasoning/summaryTextDelta`、`item/reasoning/textDelta` 和 `item/completed` 中的完整 reasoning 数组。可选的 `TurnViewState.reasoningItems` 独立保存完整摘要/正文及活动位置锚点,旧版 `reasoning:*:<summaryIndex>` 活动作为摘要回退。只有摘要 delta 继续进入原有卡片进度路径,正文和完成更新仅持久化、不触发卡片刷新。Preview 将首个明确的开头 Markdown 标题或独立加粗标题移到折叠栏,展开区只移除该标题,并直接呈现全部已有摘要/正文,不添加字段标签。带链接或图片的标题保留原有正文标记,避免丢失跳转或附件;无标题原文完整保留。标题识别只解析候选首行,不渲染全文。Preview 详情使用 `reasoning:<itemId>` 键和版本校验按需加载。不迁移数据库结构,也不自动回填远端历史。
311
347
 
348
+ 独立富文本、资源消息及合并转发在确认收到并完成前置准备后,最多等待 1.5 秒以合并关联附言。仅匹配同一会话、同一发送者、显式引用原消息 ID 的非命令消息;附言到达时先占位,再等待其 Reaction,避免慢确认拆散已匹配的消息。合并请求以附言作为主指令,随后保留原始参考文字及资源,卡片 Prompt 和新生成的任务标题使用附言。普通文本、命令及已有引用消息不增加此等待;没有附言则按原消息执行,窗口结束后的回复维持正常引用和追加行为。入站数据未单独保留转发标记,因此按消息类型、父消息 ID 和短时间窗口关联,不根据文字内容猜测是否为转发。
349
+
350
+ 归档(包括 Dismiss)只读取任务元信息及活动状态,不查询 Turn 历史。Codex 的 `thread/archive` 精确返回 `no rollout found for thread id <id>` 时,仅对本地已绑定、没有任何 Turn、提交尝试(包括失败)和继承历史的任务允许空任务清理。再次确认远端预览为空、无 Fork 父任务、状态为 idle/notLoaded、本地运行时没有活动,且返回的 rollout 路径确实不存在后,必须成功执行 `thread/unsubscribe` 才会关闭本地任务。其他读取、归档或释放错误仍会阻止解散,不删除或改写已有历史文件。任务已归档但飞书解散失败时,重试同一确认卡片只重试解散群。
351
+
312
352
  ## 任务、项目与外部 App Server 工作
313
353
 
314
354
  `/sessions` 通过 `thread/list` 读取每个已配置 App Server Agent 的任务。对于 Codex,可发现同一 `CODEX_HOME` 下由 Codex Desktop、CLI、Agent Bot 或其他 App Server 客户端创建的任务;其他 Agent 通过同一协议暴露各自的任务存储。任务会在分页前进行全局排序:当前任务最优先,其次是其他活跃任务,其余任务按最后活跃时间倒序排列。全局前 10 个任务只用于确定当前页成员;展示时再按项目首次出现顺序聚拢,每个项目内部继续按活跃时间倒序。展开任务后会直接显示最后一个用户 Prompt 的前 50 个 Unicode 字符,不再显示字段标签,之后是更新时间和操作菜单;运行时任务 ID、目录、加载状态等详情统一留在专门的 Status 视图中。`Previous` 和 `Next` 会替换当前卡片内容而不是继续追加任务,同时保留搜索条件以及与展示顺序一致的任务序号。
@@ -337,6 +377,14 @@ Agent Bot 内部保留本地路由键以关联飞书卡片和投递状态,但
337
377
 
338
378
  分支使用最新可用的已完成 turn,不会中断来源任务的活动 turn。
339
379
 
380
+ ### 保留历史的 Provider 切换
381
+
382
+ 设置切换只使用现有线程 ID:不隐式调用 thread/start、thread/fork,不改写历史、不制造轮次,也不寻找已完成轮次边界。控制器在持久化前独立拒绝不同线程 ID。设置专用加载不依赖旧 Provider 的恢复成功,但执行前仍必须验证恢复结果。thread/unsubscribe 是订阅操作,不代表已卸载,也不能据此断言其他客户端占用;notSubscribed 按幂等结果处理,超时必须恢复验证而非报告成功。失败回退在同一线程验证原 Provider/模型,原本缺省或不完整的 Agent 默认值通过替换 YAML 已知字段恢复,不把失败目标重新合并进去。异步持久化期间断线会保留下一次请求前重新验证的标记。切设置不会偷偷发送模型 Prompt 测连,配置成功不等于端点认证或服务可用。
383
+
384
+ ### Provider 延迟切换
385
+
386
+ `pending_provider_settings` 按任务保存目标 Provider、模型、思考强度、权限和通知路由,与实际 session 字段分离。设置修改和轮次启动按任务串行,覆盖多个会话绑定同一任务的情况。卡片使用目标 Provider 的模型列表并标注待生效,模型和思考强度回调携带 Provider ID,避免旧卡误操作。终态事件和启动恢复应用待生效设置,每次启动新轮次前也会检查。切换失败回退原 Provider/模型,运行时通过结构化错误报告回退结果。只有确认回退成功且运行时、持久化设置都与原设置一致时,才清除待生效选择、恢复卡片并显示警告,排队及新 Prompt 继续使用原设置。回退失败或无法确认时保留选择和排队 Prompt 等待手动恢复;归档清理待生效设置。仅在运行时确认实际 Provider/模型后才保存 Agent 默认值。
387
+
340
388
  ## 持久化与恢复
341
389
 
342
390
  SQLite 保存:
@@ -1,24 +1,27 @@
1
1
  {
2
2
  "name": "@keyou007/agent-bot",
3
- "version": "0.1.24-alpha.5",
3
+ "version": "0.1.24-alpha.7",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@keyou007/agent-bot",
9
- "version": "0.1.24-alpha.5",
9
+ "version": "0.1.24-alpha.7",
10
10
  "license": "GPL-3.0-only",
11
11
  "dependencies": {
12
12
  "@agentclientprotocol/sdk": "1.2.1",
13
13
  "@clack/prompts": "1.7.0",
14
14
  "@larksuiteoapi/node-sdk": "1.73.0",
15
15
  "@resvg/resvg-js": "2.6.2",
16
+ "@xterm/addon-fit": "0.11.0",
17
+ "@xterm/xterm": "6.0.0",
16
18
  "better-sqlite3": "12.11.1",
17
19
  "dotenv": "17.4.2",
18
20
  "highlight.js": "11.12.0",
19
21
  "markdown-it": "15.0.1",
20
22
  "mermaid": "11.17.2",
21
23
  "pino": "10.3.1",
24
+ "ws": "8.21.3",
22
25
  "yaml": "2.9.0",
23
26
  "zod": "4.4.3"
24
27
  },
@@ -29,6 +32,7 @@
29
32
  "devDependencies": {
30
33
  "@types/better-sqlite3": "7.6.13",
31
34
  "@types/node": "22.18.11",
35
+ "@types/ws": "8.18.1",
32
36
  "eslint": "10.6.0",
33
37
  "linkedom": "0.18.13",
34
38
  "prettier": "3.9.5",
@@ -38,6 +42,9 @@
38
42
  },
39
43
  "engines": {
40
44
  "node": ">=22"
45
+ },
46
+ "optionalDependencies": {
47
+ "node-pty": "1.1.0"
41
48
  }
42
49
  },
43
50
  "node_modules/@agentclientprotocol/sdk": {
@@ -1742,6 +1749,16 @@
1742
1749
  "license": "MIT",
1743
1750
  "optional": true
1744
1751
  },
1752
+ "node_modules/@types/ws": {
1753
+ "version": "8.18.1",
1754
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
1755
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
1756
+ "dev": true,
1757
+ "license": "MIT",
1758
+ "dependencies": {
1759
+ "@types/node": "*"
1760
+ }
1761
+ },
1745
1762
  "node_modules/@typescript/typescript-aix-ppc64": {
1746
1763
  "version": "7.0.2",
1747
1764
  "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz",
@@ -2205,6 +2222,21 @@
2205
2222
  "url": "https://opencollective.com/vitest"
2206
2223
  }
2207
2224
  },
2225
+ "node_modules/@xterm/addon-fit": {
2226
+ "version": "0.11.0",
2227
+ "resolved": "https://registry.npmjs.org/@xterm/addon-fit/-/addon-fit-0.11.0.tgz",
2228
+ "integrity": "sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==",
2229
+ "license": "MIT"
2230
+ },
2231
+ "node_modules/@xterm/xterm": {
2232
+ "version": "6.0.0",
2233
+ "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-6.0.0.tgz",
2234
+ "integrity": "sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg==",
2235
+ "license": "MIT",
2236
+ "workspaces": [
2237
+ "addons/*"
2238
+ ]
2239
+ },
2208
2240
  "node_modules/acorn": {
2209
2241
  "version": "8.17.0",
2210
2242
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
@@ -4781,6 +4813,24 @@
4781
4813
  "node": ">=10"
4782
4814
  }
4783
4815
  },
4816
+ "node_modules/node-addon-api": {
4817
+ "version": "7.1.1",
4818
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
4819
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
4820
+ "license": "MIT",
4821
+ "optional": true
4822
+ },
4823
+ "node_modules/node-pty": {
4824
+ "version": "1.1.0",
4825
+ "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.1.0.tgz",
4826
+ "integrity": "sha512-20JqtutY6JPXTUnL0ij1uad7Qe1baT46lyolh2sSENDd4sTzKZ4nmAFkeAARDKwmlLjPx6XKRlwRUxwjOy+lUg==",
4827
+ "hasInstallScript": true,
4828
+ "license": "MIT",
4829
+ "optional": true,
4830
+ "dependencies": {
4831
+ "node-addon-api": "^7.1.0"
4832
+ }
4833
+ },
4784
4834
  "node_modules/nth-check": {
4785
4835
  "version": "3.0.1",
4786
4836
  "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-3.0.1.tgz",
@@ -6004,9 +6054,9 @@
6004
6054
  "license": "ISC"
6005
6055
  },
6006
6056
  "node_modules/ws": {
6007
- "version": "8.21.0",
6008
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
6009
- "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
6057
+ "version": "8.21.3",
6058
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz",
6059
+ "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==",
6010
6060
  "license": "MIT",
6011
6061
  "engines": {
6012
6062
  "node": ">=10.0.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keyou007/agent-bot",
3
- "version": "0.1.24-alpha.5",
3
+ "version": "0.1.24-alpha.7",
4
4
  "type": "module",
5
5
  "description": "Use Codex, TraeX, and compatible coding agents from Lark/Feishu.",
6
6
  "license": "GPL-3.0-only",
@@ -53,8 +53,8 @@
53
53
  "start:once": "node dist/index.js",
54
54
  "cli": "node dist/cli.js",
55
55
  "test": "npm run test:unit && npm run test:process && npm run test:render",
56
- "test:unit": "vitest run --exclude tests/shell/ShellCommandJobManager.test.ts --exclude tests/scripts/prepare-release.test.ts --exclude tests/feishu/GroupAvatarGenerator.test.ts",
57
- "test:process": "vitest run tests/shell/ShellCommandJobManager.test.ts tests/scripts/prepare-release.test.ts --maxWorkers=1",
56
+ "test:unit": "vitest run --exclude tests/shell/ShellCommandJobManager.test.ts --exclude tests/scripts/prepare-release.test.ts --exclude tests/feishu/GroupAvatarGenerator.test.ts --exclude tests/terminal/TerminalPty.process.test.ts",
57
+ "test:process": "vitest run tests/shell/ShellCommandJobManager.test.ts tests/scripts/prepare-release.test.ts tests/terminal/TerminalPty.process.test.ts --maxWorkers=1",
58
58
  "test:render": "vitest run tests/feishu/GroupAvatarGenerator.test.ts --maxWorkers=1",
59
59
  "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json",
60
60
  "verify": "npm run typecheck && npm test",
@@ -71,18 +71,22 @@
71
71
  "@clack/prompts": "1.7.0",
72
72
  "@larksuiteoapi/node-sdk": "1.73.0",
73
73
  "@resvg/resvg-js": "2.6.2",
74
+ "@xterm/addon-fit": "0.11.0",
75
+ "@xterm/xterm": "6.0.0",
74
76
  "better-sqlite3": "12.11.1",
75
77
  "dotenv": "17.4.2",
76
78
  "highlight.js": "11.12.0",
77
79
  "markdown-it": "15.0.1",
78
80
  "mermaid": "11.17.2",
79
81
  "pino": "10.3.1",
82
+ "ws": "8.21.3",
80
83
  "yaml": "2.9.0",
81
84
  "zod": "4.4.3"
82
85
  },
83
86
  "devDependencies": {
84
87
  "@types/better-sqlite3": "7.6.13",
85
88
  "@types/node": "22.18.11",
89
+ "@types/ws": "8.18.1",
86
90
  "eslint": "10.6.0",
87
91
  "linkedom": "0.18.13",
88
92
  "prettier": "3.9.5",
@@ -96,5 +100,8 @@
96
100
  "engines": {
97
101
  "node": ">=22"
98
102
  },
99
- "packageManager": "npm@11.12.1"
103
+ "packageManager": "npm@11.12.1",
104
+ "optionalDependencies": {
105
+ "node-pty": "1.1.0"
106
+ }
100
107
  }
@@ -77,6 +77,7 @@ agentbot task title "<title>"
77
77
  - `stop` requests an Agent interrupt; it does not kill the Agent process.
78
78
  - `release` sends a Lark confirmation card for releasing the Agent's shared App Server. It never releases automatically; the user must click **Release** or **Release Now** on the card.
79
79
  - `dismiss --yes` irreversibly dissolves the task's current Feishu group and archives its current task. Use it only after the user explicitly confirms.
80
+ - Newly created tasks can be archived or dismissed before their first Prompt. Do not send a dummy Prompt to create history; Agent Bot safely releases a confirmed empty task when Codex has no rollout to archive.
80
81
 
81
82
  From Feishu, `/release` sends a confirmation card for handing App Server tasks back to Codex Desktop without archiving them. It lists the current Agent's running and queued work and never releases automatically. **Release** confirms an idle release, **Release Now** interrupts active work and clears queued Prompts, and **Cancel** cancels the pending release. Because each App Server Agent is shared, releasing affects every task loaded by that Agent process.
82
83
 
@@ -114,7 +115,7 @@ Feishu group renames update only the group's currently bound task title, not top
114
115
 
115
116
  Fork creation stores source-task and branch-Turn references without synchronizing the full local Turn list. The Feishu Turn card reuses local records and loads only the summary pages needed for the requested page, not the entire history. `task turns` loads the first page if necessary and returns available local records. This does not change the Agent's inherited context. Retry listing Turns after a temporary history-read failure; unsupported summary pagination never falls back to downloading full history.
116
117
 
117
- If a TraeX task stops producing output, check its progress card for a pending plan-mode confirmation. `Approve Plan` / `Enter Plan Mode`, `Reject`, and `Cancel Request` require the user's explicit choice, even with automatic permissions. Preview displays the plan but cannot approve it. Cancelling a request does not itself stop the task; waiting turns still block safe restart. Never approve, stop, or force-restart merely to clear that wait. Notifications dropped by an older running version are not automatically replayed after upgrading.
118
+ TraeX plan-mode confirmations follow the task permission mode. With `auto`, Agent Bot automatically accepts Enter Plan Mode and Approve Plan; do not also approve or send a continuation prompt. With `confirm`, `Approve Plan` / `Enter Plan Mode`, `Reject`, and `Cancel Request` require the user's choice. Approval requests and decisions stay in the same thinking card and live Preview, explicitly labeling automatic approvals. If TraeX reports no pending request after automatically entering Plan mode, Agent Bot verifies the matching completed EnterPlanMode call before recording success. Missing requests alone are not proof of approval. Unverified automatic failures still offer manual confirmation with an error notice; never pretend they succeeded. Approved implementation continues in the same task and card. Explicit discussion-only or no-implementation instructions still apply. Preview cannot approve, cancelling a request does not itself stop the task, and waiting turns still block safe restart. Do not stop or force-restart merely to clear that wait. Missed notifications from older versions are not automatically replayed.
118
119
 
119
120
  ## Change Settings
120
121
 
@@ -136,7 +137,9 @@ A successful Provider switch confirms settings, not inference connectivity. Mode
136
137
 
137
138
  Providers such as a Responses bridge may omit assistant message phases. Unphased text stays in the progress timeline; successful completion promotes only the last message not followed by a tool start. Do not diagnose progress text in the answer area as a CSS issue without checking message phases. Old snapshots are not automatically backfilled.
138
139
 
139
- Provider changes require an idle task and verify the actual Provider and model before saving. Custom Providers discover models through their OpenAI-compatible `/models` endpoint when available. Switching keeps the previous model when supported, otherwise uses the Provider default or its first model. A missing model-list endpoint falls back to the current or configured model and does not by itself block switching. Wait for active work to finish; do not stop it without the user's request. Switching unloads only the selected thread, not the shared App Server. On failure, previous settings are retained and recovery is attempted. If recovery fails, resolve the reported configuration or ownership issue and retry the Provider switch before sending another prompt. Never replace a forked task with an empty task to work around a switch failure.
140
+ Provider changes during an Agent Bot turn are staged until it ends; do not stop the turn. The settings card and CLI show the pending Provider/model, and model/thinking/permission selections edit that pending configuration. The latest selection is applied before the next turn, including queued/retried turns. Pending settings survive restart, remain separate from actual task settings, and are verified before saving Agent defaults. Deferred failures roll back to the original Provider/model. After the runtime confirms rollback, the card returns to the original settings, the pending selection is cleared, and queued prompts continue with the original settings. Failed or unverified rollback still pauses queued prompts and requires explicit recovery; never claim rollback success based only on unchanged local fields. Custom Providers discover models through their OpenAI-compatible `/models` endpoint when available. Switching keeps the previous model when supported, otherwise uses the Provider default or its first model. A missing model-list endpoint falls back to the current or configured model and does not by itself block switching. Wait for active work to finish; do not stop it without the user's request. Switching unloads only the selected thread, not the shared App Server. On failure, previous settings are retained and recovery is attempted. If recovery fails, resolve the reported configuration or ownership issue and retry the Provider switch before sending another prompt. Never replace a forked task with an empty task to work around a switch failure.
141
+
142
+ Provider changes must keep the same remote task ID and complete history. Never use Fork, thread replacement, synthetic Turns, or history repair to change settings. A rejected switch must report the reason and verify rollback; if App Server retains a stale Provider, suggest an explicit safe restart and retry rather than restarting the shared process implicitly. Settings inspection and selection must remain available when the old Provider cannot resume.
140
143
 
141
144
  ## Goals And Turns
142
145
 
@@ -175,8 +178,12 @@ For group mention-only mode (ordinary @ Prompts also receive bounded recent text
175
178
  agentbot task mute on|off
176
179
  ```
177
180
 
181
+ Feishu `!` command cards offer **Open Terminal** for an independent browser Shell in the card's cwd. The owner requests it in the browser and approves the matching code in the original command conversation/topic; never approve it on the user's behalf or replay the original command. Execution uses full host-user permissions, not an Agent sandbox. Terminal links share the Preview protocol, host, port and base path (`fileViewer` settings), using `/terminal/<8-character-token>` for both command and recovery links; the server selects behavior from the token; there is no separate terminal address. Case-sensitive short tokens only locate commands or sessions, never authorize execution. Open links persist across restart; resume links cannot restore a Shell from a previous process. Only `/terminal/<8-character-token>` links are supported. HTTP works only as a trusted-network deployment choice; use HTTPS on untrusted networks. Owner authorization stays independent, and Preview documents must remain sandboxed. Disabling Preview also disables terminals. Closing a page starts a three-minute disconnect timeout; successful reconnection cancels it, but output and recovery approval do not extend it. Successful authenticated reconnection also restarts thirty idle minutes. A connected foreground page with fresh visibility heartbeats prevents idle closure; hiding the page starts the thirty-minute input/output idle timeout. Either background-idle or disconnect timeout closes the Shell. Close Terminal ends the Shell immediately. Active terminals block safe restart, new ones are blocked while restart is scheduled, and sessions do not survive service restart.
182
+
178
183
  ## Manage The Service
179
184
 
185
+ If a terminal tab is lost, direct the user to its terminal management card in the original Feishu conversation/topic: Open Terminal is available before the first connection; Reopen restores the same running Shell after fresh code approval, and Close Terminal works without the webpage. Refresh retries card state updates. Old browser access is revoked only after approved recovery. Recovery of an already-running Shell and closure remain usable while safe restart waits; starting an unconnected Shell remains blocked; do not force restart or approve recovery on the user's behalf. The original command card's Open Terminal creates a new Shell, not a recovery.
186
+
180
187
  ```powershell
181
188
  agentbot server start
182
189
  agentbot server status
@@ -200,6 +207,8 @@ The safe-restart card has matching `Cancel` and `ForceRestart` actions. Clicking
200
207
 
201
208
  Each displayed running task on that card has a `Stop` action targeting its exact task, even across conversations. It uses normal Agent interruption and leaves the restart scheduled; the card updates as tasks stop. Only stop a task when the user requests it.
202
209
 
210
+ Blocking terminals are listed on the safe-restart card by their eight-character token, directory, activity/connection state, and current command when available. Activity means a connected foreground page, a known running command, or input/output within 30 seconds; inactive Shells still block restart. PowerShell/PSReadLine reports commands; other Shells may report only a foreground process or unknown. The owner-only End Terminal action stops exactly that Shell and waits for its exit without forcing restart. Never end a user's terminal merely to complete your own restart; require their explicit request. Stale/cancelled cards cannot close terminals.
211
+
203
212
  A bare `agentbot server restart` invoked inside an Agent Bot-started Agent returns restart status to the source task conversation. The same command from an ordinary terminal uses the configured user's private chat. Add `--task <task>` only to override either default.
204
213
 
205
214
  Never use `taskkill`, `Stop-Process`, or equivalent commands for routine restart management.
@@ -9,7 +9,7 @@ import type {
9
9
  RemoteSessionSummary,
10
10
  RuntimeGoal,
11
11
  } from "../runtime/types.js";
12
- import type { SessionRecord } from "../state/StateStore.js";
12
+ import type { SessionRecord, PendingProviderSettings } from "../state/StateStore.js";
13
13
  import type { ShellCommandResult } from "../utils/executeShellCommand.js";
14
14
 
15
15
  export type ControlRequest =
@@ -136,6 +136,7 @@ export interface TaskAgentControlData {
136
136
  }
137
137
 
138
138
  export interface TaskSettingsControlData {
139
+ pendingProvider?: PendingProviderSettings;
139
140
  session: SessionRecord;
140
141
  providers: ModelProviderOption[];
141
142
  models: ModelOption[];
@@ -38,6 +38,7 @@ export function formatServerStatus(data: unknown, language: CliLanguage = cliLan
38
38
  `${cliText("Supervisor: ", "Supervisor:", language)}${value.supervised ? cliText("enabled", "已启用", language) : cliText("disabled", "未启用", language)}`,
39
39
  ...agents,
40
40
  `${cliText("Running tasks: ", "运行中任务:", language)}${activity.runningSessions ?? 0}`,
41
+ ...(activity.activeTerminals ? [`${cliText("Active terminals: ", "活动终端:", language)}${activity.activeTerminals}`] : []),
41
42
  `${cliText("Pending final deliveries: ", "待发送最终结果:", language)}${activity.pendingFinalDeliveries ?? 0}`,
42
43
  `${cliText("Safe restart: ", "安全重启:", language)}${safeRestart}`,
43
44
  "",
package/src/cli.ts CHANGED
@@ -1832,7 +1832,12 @@ function printTaskSettings(
1832
1832
  result: TaskSettingsControlData,
1833
1833
  setting: "provider" | "model" | "thinking" | "permissions",
1834
1834
  ): void {
1835
- const session = result.session;
1835
+ const session = result.pendingProvider?.settings ?? result.session;
1836
+ if (result.pendingProvider) {
1837
+ const status = cliText("Pending Provider switch (after current turn)", "Provider 待切换(本轮结束后生效)");
1838
+ const error = result.pendingProvider.error ? `: ${result.pendingProvider.error}` : "";
1839
+ process.stdout.write(`${status}${error}\n`);
1840
+ }
1836
1841
  process.stdout.write(`${cliText("Provider: ", "Provider:")}${session.modelProvider ?? cliText("Agent default", "Agent 默认")}\n`);
1837
1842
  process.stdout.write(`${cliText("Model: ", "模型:")}${session.model ?? cliText("default", "默认")}\n`);
1838
1843
  process.stdout.write(`${cliText("Thinking: ", "思考强度:")}${session.reasoningEffort ?? cliText("automatic", "自动")}\n`);
@@ -4,6 +4,7 @@ import type { PlanStep, ToolState } from "../runtime/types.js";
4
4
  const modeChangeRequest = z.object({
5
5
  requestId: z.string().min(1),
6
6
  targetMode: z.enum(["plan", "default"]),
7
+ sourceToolCallId: z.string().min(1).nullish(),
7
8
  reason: z.string(),
8
9
  allowedPrompts: z.array(z.object({ tool: z.string(), prompt: z.string() })).optional(),
9
10
  });