@robota-sdk/agent-ui-terminal 3.0.0-beta.100

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 (348) hide show
  1. package/CHANGELOG.md +1204 -0
  2. package/LICENSE +661 -0
  3. package/README.md +50 -0
  4. package/dist/node/index.d.ts +1224 -0
  5. package/dist/node/index.d.ts.map +1 -0
  6. package/dist/node/index.js +33 -0
  7. package/dist/node/index.js.map +1 -0
  8. package/package.json +88 -0
  9. package/src/App.tsx +157 -0
  10. package/src/AppPresentation.tsx +190 -0
  11. package/src/AppView.tsx +26 -0
  12. package/src/BackgroundTaskPanel.tsx +73 -0
  13. package/src/CjkTextInput.tsx +336 -0
  14. package/src/ConfirmPrompt.tsx +140 -0
  15. package/src/ContextWarningBanner.tsx +45 -0
  16. package/src/ExecutionWorkspaceDetailPane.tsx +85 -0
  17. package/src/ExecutionWorkspaceSwitcher.tsx +213 -0
  18. package/src/HistorySearchOverlay.tsx +150 -0
  19. package/src/InputArea.tsx +338 -0
  20. package/src/ListPicker.tsx +158 -0
  21. package/src/MenuSelect.tsx +159 -0
  22. package/src/MessageList.tsx +308 -0
  23. package/src/MultiSelectList.tsx +294 -0
  24. package/src/PendingActionPrompt.tsx +121 -0
  25. package/src/PermissionPrompt.tsx +236 -0
  26. package/src/PluginTUI.tsx +258 -0
  27. package/src/RoleLabel.tsx +72 -0
  28. package/src/SafeText.tsx +66 -0
  29. package/src/SessionEventNotices.tsx +27 -0
  30. package/src/SessionPicker.tsx +92 -0
  31. package/src/SessionStatusBar.tsx +80 -0
  32. package/src/SlashAutocomplete.tsx +154 -0
  33. package/src/StatusBar.tsx +308 -0
  34. package/src/StreamingIndicator.tsx +145 -0
  35. package/src/SupervisedSessionView.tsx +872 -0
  36. package/src/TextPrompt.tsx +112 -0
  37. package/src/ThemePicker.tsx +366 -0
  38. package/src/ToolCommandOutput.tsx +48 -0
  39. package/src/ToolDiffBlock.tsx +44 -0
  40. package/src/TransportTUI.tsx +166 -0
  41. package/src/TuiInteractionChannel.ts +530 -0
  42. package/src/UpdateNotice.tsx +18 -0
  43. package/src/UsageSummaryEntry.tsx +49 -0
  44. package/src/WaveText.tsx +70 -0
  45. package/src/__tests__/ListPicker.test.tsx +188 -0
  46. package/src/__tests__/MenuSelect.test.tsx +127 -0
  47. package/src/__tests__/PendingActionPrompt.test.tsx +193 -0
  48. package/src/__tests__/PluginTUI.test.tsx +167 -0
  49. package/src/__tests__/SlashAutocomplete.test.tsx +162 -0
  50. package/src/__tests__/SupervisedSessionView-render.test.tsx +52 -0
  51. package/src/__tests__/SupervisedSessionView.test.tsx +1112 -0
  52. package/src/__tests__/TextPrompt.test.tsx +112 -0
  53. package/src/__tests__/TransportTUI.test.tsx +124 -0
  54. package/src/__tests__/TuiInteractionChannel.askUser.test.ts +124 -0
  55. package/src/__tests__/TuiInteractionChannel.display-contract.test.ts +294 -0
  56. package/src/__tests__/TuiInteractionChannel.lifecycle.test.ts +650 -0
  57. package/src/__tests__/UpdateNotice.test.tsx +15 -0
  58. package/src/__tests__/__fixtures__/korean-text.json +17 -0
  59. package/src/__tests__/abort-after-permission.test.tsx +160 -0
  60. package/src/__tests__/abort-streaming-e2e.test.tsx +183 -0
  61. package/src/__tests__/attached-app-session-switch.test.tsx +317 -0
  62. package/src/__tests__/attention-bell-and-marks.test.ts +144 -0
  63. package/src/__tests__/autocomplete-editing-keys.test.tsx +127 -0
  64. package/src/__tests__/background-task-panel-countdown.test.tsx +75 -0
  65. package/src/__tests__/background-task-panel.test.tsx +98 -0
  66. package/src/__tests__/background-task-row-format.test.ts +152 -0
  67. package/src/__tests__/channel-factory-integration.test.ts +150 -0
  68. package/src/__tests__/checkpoint-store-per-channel.test.ts +81 -0
  69. package/src/__tests__/cjk-defer-submit.test.tsx +68 -0
  70. package/src/__tests__/cjk-fallback-render.test.tsx +89 -0
  71. package/src/__tests__/cjk-text-input-flow.test.ts +187 -0
  72. package/src/__tests__/cjk-text-input.test.ts +196 -0
  73. package/src/__tests__/command-handoff-pty-e2e.test.ts +107 -0
  74. package/src/__tests__/command-output-summary.test.ts +95 -0
  75. package/src/__tests__/command-result-handler.test.ts +171 -0
  76. package/src/__tests__/compact-event-bridge.test.ts +20 -0
  77. package/src/__tests__/confirm-permission-flow.test.ts +149 -0
  78. package/src/__tests__/confirm-prompt.test.tsx +103 -0
  79. package/src/__tests__/contextual-keybindings-input.test.tsx +158 -0
  80. package/src/__tests__/default-tui-cli-adapter-host-settings.test.ts +47 -0
  81. package/src/__tests__/effort-reaches-the-session.test.ts +41 -0
  82. package/src/__tests__/execution-workspace-switcher.test.tsx +147 -0
  83. package/src/__tests__/execution-workspace-view-model.test.ts +94 -0
  84. package/src/__tests__/external-prompt-notice.test.tsx +100 -0
  85. package/src/__tests__/fixtures/command-handoff-driver.tsx +114 -0
  86. package/src/__tests__/fixtures/fake-editor.sh +7 -0
  87. package/src/__tests__/fixtures/terminal-handoff-driver.tsx +90 -0
  88. package/src/__tests__/fork-attach.test.tsx +235 -0
  89. package/src/__tests__/grant-history-reaches-the-session.test.ts +31 -0
  90. package/src/__tests__/helpers/terminal-profiles.ts +152 -0
  91. package/src/__tests__/helpers/vt-cursor-interpreter.ts +175 -0
  92. package/src/__tests__/history-clear-broadcast.test.ts +66 -0
  93. package/src/__tests__/history-search-overlay.test.tsx +329 -0
  94. package/src/__tests__/humanize-tool-name.test.ts +30 -0
  95. package/src/__tests__/input-area-bottom-border.test.tsx +45 -0
  96. package/src/__tests__/input-area-flow.test.ts +199 -0
  97. package/src/__tests__/input-area-focus-handoff.test.tsx +77 -0
  98. package/src/__tests__/interaction-channel-charter.test.ts +13 -0
  99. package/src/__tests__/key-hint-consistency.test.tsx +249 -0
  100. package/src/__tests__/key-hint-footer.test.tsx +69 -0
  101. package/src/__tests__/live-trace-reaches-session.test.ts +14 -0
  102. package/src/__tests__/message-list-rendering.test.tsx +474 -0
  103. package/src/__tests__/numbered-selection-chunk.test.tsx +41 -0
  104. package/src/__tests__/org-policy-reaches-the-channel.test.ts +77 -0
  105. package/src/__tests__/output-style-reaches-session.test.ts +35 -0
  106. package/src/__tests__/palette-consistency.test.ts +329 -0
  107. package/src/__tests__/permission-prompt-arming.test.tsx +153 -0
  108. package/src/__tests__/permission-prompt-availability.test.tsx +23 -0
  109. package/src/__tests__/permission-prompt-peer.test.tsx +34 -0
  110. package/src/__tests__/permission-prompt-requester.test.tsx +34 -0
  111. package/src/__tests__/product-display-name.test.tsx +79 -0
  112. package/src/__tests__/prompt-queue.test.tsx +260 -0
  113. package/src/__tests__/provider-definitions-reach-the-session.test.ts +75 -0
  114. package/src/__tests__/pty/ask-user-question.ptytest.ts +72 -0
  115. package/src/__tests__/pty/background-work-switcher.ptytest.ts +53 -0
  116. package/src/__tests__/pty/behavior-2437-git.ptytest.ts +350 -0
  117. package/src/__tests__/pty/fixtures/ask-user-question.jsonl +3 -0
  118. package/src/__tests__/pty/fixtures/replay-conversation.jsonl +4 -0
  119. package/src/__tests__/pty/fixtures/screen-005-ask-shapes.jsonl +5 -0
  120. package/src/__tests__/pty/fixtures/screen-005-permission.jsonl +3 -0
  121. package/src/__tests__/pty/fixtures/screen-006-colors.jsonl +3 -0
  122. package/src/__tests__/pty/fixtures/screen-2002-themes.jsonl +5 -0
  123. package/src/__tests__/pty/flag-tui.ptytest.ts +56 -0
  124. package/src/__tests__/pty/flow-2006-deep-link.ptytest.ts +320 -0
  125. package/src/__tests__/pty/ime-cursor-tmux.ptytest.ts +211 -0
  126. package/src/__tests__/pty/ime-cursor.ptytest.ts +187 -0
  127. package/src/__tests__/pty/isolated-home.ts +97 -0
  128. package/src/__tests__/pty/org-policy.ptytest.ts +71 -0
  129. package/src/__tests__/pty/provider-setup.ptytest.ts +61 -0
  130. package/src/__tests__/pty/pty-driver.ts +155 -0
  131. package/src/__tests__/pty/replay-conversation.ptytest.ts +68 -0
  132. package/src/__tests__/pty/screen-005-prompt-footers.ptytest.ts +135 -0
  133. package/src/__tests__/pty/screen-006-no-color.ptytest.ts +140 -0
  134. package/src/__tests__/pty/screen-010-scrollback.ptytest.ts +123 -0
  135. package/src/__tests__/pty/screen-1993-scrollback.ptytest.ts +124 -0
  136. package/src/__tests__/pty/screen-2002-themes.ptytest.ts +292 -0
  137. package/src/__tests__/pty/screen-2670-prepark.ptytest.ts +228 -0
  138. package/src/__tests__/pty/screen-reader-mode.ptytest.ts +228 -0
  139. package/src/__tests__/pty/session-attach.ptytest.ts +182 -0
  140. package/src/__tests__/pty/settings-screen.ptytest.ts +49 -0
  141. package/src/__tests__/pty/spawn-pty.test.ts +120 -0
  142. package/src/__tests__/pty/spawn-pty.ts +229 -0
  143. package/src/__tests__/pty/terminal-handoff.ptytest.ts +79 -0
  144. package/src/__tests__/pty/trust-prompt.ptytest.ts +134 -0
  145. package/src/__tests__/pty/tui-pty.ptytest.ts +65 -0
  146. package/src/__tests__/pty-driver-dispose.test.ts +43 -0
  147. package/src/__tests__/real-cursor-positioning.test.tsx +264 -0
  148. package/src/__tests__/rename-broadcast-persistence.test.tsx +140 -0
  149. package/src/__tests__/render-channel-options.test.ts +201 -0
  150. package/src/__tests__/render-lifecycle.test.ts +36 -0
  151. package/src/__tests__/render-markdown.test.ts +164 -0
  152. package/src/__tests__/rendered-markdown-styling.test.tsx +98 -0
  153. package/src/__tests__/safe-text-boundary.test.tsx +75 -0
  154. package/src/__tests__/sandbox-reaches-the-session.test.ts +37 -0
  155. package/src/__tests__/screen-reader-input.test.tsx +106 -0
  156. package/src/__tests__/screen-reader-labels.test.ts +91 -0
  157. package/src/__tests__/screen-reader-menus.test.tsx +200 -0
  158. package/src/__tests__/screen-reader-pacing.test.ts +230 -0
  159. package/src/__tests__/screen-reader-prepark-echo.test.tsx +200 -0
  160. package/src/__tests__/screen-reader-render-options.test.ts +262 -0
  161. package/src/__tests__/screen-reader-stdout.test.ts +322 -0
  162. package/src/__tests__/screen-reader-turn-marks-port.test.tsx +85 -0
  163. package/src/__tests__/screen-reader-turn-signals.test.tsx +125 -0
  164. package/src/__tests__/sec-019-terminal-sanitizer.test.ts +276 -0
  165. package/src/__tests__/sec-019-tool-label-render.test.tsx +207 -0
  166. package/src/__tests__/selection-flow.test.ts +61 -0
  167. package/src/__tests__/session-event-notices.test.tsx +31 -0
  168. package/src/__tests__/session-init-poller.test.ts +102 -0
  169. package/src/__tests__/session-picker.test.tsx +93 -0
  170. package/src/__tests__/session-switch-channel.test.tsx +470 -0
  171. package/src/__tests__/shutdown-signal.test.ts +34 -0
  172. package/src/__tests__/status-activity.test.ts +71 -0
  173. package/src/__tests__/status-bar.test.tsx +290 -0
  174. package/src/__tests__/status-glyph.test.ts +30 -0
  175. package/src/__tests__/streaming-indicator.test.tsx +178 -0
  176. package/src/__tests__/terminal-capabilities.test.ts +153 -0
  177. package/src/__tests__/terminal-handoff-controller.test.ts +173 -0
  178. package/src/__tests__/terminal-handoff-pty-e2e.test.ts +77 -0
  179. package/src/__tests__/text-prompt-flow.test.ts +77 -0
  180. package/src/__tests__/theme-picker.test.tsx +345 -0
  181. package/src/__tests__/transport-boundary.test.ts +11 -0
  182. package/src/__tests__/tui-app-channel-port.test.ts +31 -0
  183. package/src/__tests__/tui-channel-init-failure.test.ts +70 -0
  184. package/src/__tests__/tui-channel-lifecycle-coordinator.test.ts +258 -0
  185. package/src/__tests__/tui-interaction-queues.test.ts +149 -0
  186. package/src/__tests__/tui-preset-capabilities.test.ts +33 -0
  187. package/src/__tests__/tui-state-manager.error-stall.test.ts +169 -0
  188. package/src/__tests__/tui-state-manager.test.ts +482 -0
  189. package/src/__tests__/ui-intent-rendering.test.tsx +291 -0
  190. package/src/__tests__/wave-text.test.tsx +133 -0
  191. package/src/__tests__/wire-tui-channel.test.ts +1457 -0
  192. package/src/__tests__/wire-tui-client-commands.test.ts +243 -0
  193. package/src/app-banner.tsx +42 -0
  194. package/src/app-static-items.ts +35 -0
  195. package/src/app-view-model.ts +140 -0
  196. package/src/attached-session-connection.ts +14 -0
  197. package/src/attention/__tests__/attention-coordinator.test.ts +166 -0
  198. package/src/attention/__tests__/attention-tracker.test.ts +103 -0
  199. package/src/attention/__tests__/countdown.test.ts +15 -0
  200. package/src/attention/__tests__/focus-input-filter.test.ts +93 -0
  201. package/src/attention/__tests__/interval-recap.test.ts +49 -0
  202. package/src/attention/attention-coordinator.ts +71 -0
  203. package/src/attention/attention-tracker.ts +124 -0
  204. package/src/attention/countdown.ts +24 -0
  205. package/src/attention/focus-input-filter.ts +131 -0
  206. package/src/attention/interval-recap.ts +148 -0
  207. package/src/attention/time-units.ts +6 -0
  208. package/src/attention-bell.ts +79 -0
  209. package/src/attributed-user-echo.ts +30 -0
  210. package/src/background-task-row-format.ts +99 -0
  211. package/src/command-interaction.ts +8 -0
  212. package/src/command-output-summary.ts +129 -0
  213. package/src/create-default-tui-cli-adapter.ts +45 -0
  214. package/src/execution-workspace-switcher-selection.ts +118 -0
  215. package/src/execution-workspace-view-model.ts +139 -0
  216. package/src/external-prompt-notice.tsx +38 -0
  217. package/src/flows/__tests__/background-focus-flow.test.ts +48 -0
  218. package/src/flows/__tests__/defer-submit.test.ts +88 -0
  219. package/src/flows/__tests__/real-cursor-flow.test.ts +139 -0
  220. package/src/flows/background-focus-flow.ts +44 -0
  221. package/src/flows/cjk-cursor-motion.ts +75 -0
  222. package/src/flows/cjk-text-deletion.ts +53 -0
  223. package/src/flows/cjk-text-input-flow.ts +248 -0
  224. package/src/flows/cjk-text-input-types.ts +24 -0
  225. package/src/flows/confirm-prompt-flow.ts +90 -0
  226. package/src/flows/defer-submit.ts +67 -0
  227. package/src/flows/fork-attach-flow.ts +62 -0
  228. package/src/flows/input-area-flow.ts +188 -0
  229. package/src/flows/permission-prompt-flow.ts +108 -0
  230. package/src/flows/real-cursor-flow.ts +83 -0
  231. package/src/flows/selection-flow.ts +205 -0
  232. package/src/flows/session-init-poller.ts +76 -0
  233. package/src/flows/text-prompt-flow.ts +93 -0
  234. package/src/history-search/__tests__/history-search-flow.test.ts +86 -0
  235. package/src/history-search/history-search-flow.ts +94 -0
  236. package/src/history-search/useHistorySearch.ts +336 -0
  237. package/src/hooks/__tests__/use-app-detach-key.test.tsx +72 -0
  238. package/src/hooks/__tests__/use-app-loop-escape.test.tsx +87 -0
  239. package/src/hooks/__tests__/use-plugin-callbacks.test.ts +18 -0
  240. package/src/hooks/__tests__/use-tui-channel-stability.test.tsx +100 -0
  241. package/src/hooks/__tests__/useAppThemeState.test.tsx +130 -0
  242. package/src/hooks/command-result-handler.ts +44 -0
  243. package/src/hooks/side-effects-types.ts +45 -0
  244. package/src/hooks/useAppController.ts +271 -0
  245. package/src/hooks/useAppInputBindings.ts +163 -0
  246. package/src/hooks/useAppInteractionState.ts +84 -0
  247. package/src/hooks/useAppLifecycleState.ts +81 -0
  248. package/src/hooks/useAppOverlays.ts +90 -0
  249. package/src/hooks/useAppScreenState.ts +81 -0
  250. package/src/hooks/useAppSubmissionState.ts +45 -0
  251. package/src/hooks/useAppThemeState.ts +157 -0
  252. package/src/hooks/useAppWorkspaceState.ts +149 -0
  253. package/src/hooks/useAppearanceSettings.ts +30 -0
  254. package/src/hooks/useAutocomplete.ts +101 -0
  255. package/src/hooks/useBackgroundPanel.ts +58 -0
  256. package/src/hooks/useCountdownTick.ts +24 -0
  257. package/src/hooks/useExecutionDetailPage.ts +69 -0
  258. package/src/hooks/useForkAttach.ts +60 -0
  259. package/src/hooks/useInputAreaHistorySearch.ts +72 -0
  260. package/src/hooks/useInputAreaKeys.ts +114 -0
  261. package/src/hooks/useNumberedSelection.ts +93 -0
  262. package/src/hooks/usePluginCallbacks.ts +38 -0
  263. package/src/hooks/usePluginScreenData.ts +85 -0
  264. package/src/hooks/useRealCursorPosition.ts +125 -0
  265. package/src/hooks/useRenderMarkdown.ts +38 -0
  266. package/src/hooks/useScreenReaderTurnSignals.ts +113 -0
  267. package/src/hooks/useSideEffects.ts +144 -0
  268. package/src/hooks/useStatusLineSettings.ts +50 -0
  269. package/src/hooks/useTerminalHandoffSuspension.ts +30 -0
  270. package/src/hooks/useTuiChannel.ts +141 -0
  271. package/src/humanize-tool-name.ts +51 -0
  272. package/src/index.ts +72 -0
  273. package/src/input-area-rules.tsx +71 -0
  274. package/src/json-value.ts +18 -0
  275. package/src/key-hint-footer.tsx +54 -0
  276. package/src/keybindings/__tests__/keybinding-registry.test.ts +228 -0
  277. package/src/keybindings/__tests__/node-keybindings-source.test.ts +118 -0
  278. package/src/keybindings/keybinding-catalogue.ts +171 -0
  279. package/src/keybindings/keybinding-registry.ts +303 -0
  280. package/src/keybindings/keybinding-syntax.ts +155 -0
  281. package/src/keybindings/keybindings-context.tsx +124 -0
  282. package/src/keybindings/node-keybindings-source.ts +189 -0
  283. package/src/numbered-list.tsx +113 -0
  284. package/src/plugin-tui-handlers.ts +163 -0
  285. package/src/product-display-name-context.tsx +30 -0
  286. package/src/render-markdown.ts +209 -0
  287. package/src/render.tsx +746 -0
  288. package/src/sanitize-terminal-text.ts +171 -0
  289. package/src/screen-reader-announcement.ts +52 -0
  290. package/src/screen-reader-context.tsx +32 -0
  291. package/src/screen-reader-labels.ts +64 -0
  292. package/src/screen-reader-pacing-context.tsx +47 -0
  293. package/src/screen-reader-pacing.ts +178 -0
  294. package/src/screen-reader-stdout.ts +328 -0
  295. package/src/short-session-id.ts +9 -0
  296. package/src/shutdown-signal.ts +34 -0
  297. package/src/slash-command-input.ts +11 -0
  298. package/src/status-activity.ts +70 -0
  299. package/src/status-glyph.ts +78 -0
  300. package/src/terminal-capabilities-context.tsx +27 -0
  301. package/src/terminal-capabilities.ts +77 -0
  302. package/src/terminal-focus-reporting.ts +50 -0
  303. package/src/terminal-handoff-controller.ts +98 -0
  304. package/src/terminal-marks.ts +63 -0
  305. package/src/theme/__tests__/built-in-themes.test.ts +117 -0
  306. package/src/theme/__tests__/color-vision.test.ts +82 -0
  307. package/src/theme/__tests__/theme-context.test.tsx +146 -0
  308. package/src/theme/__tests__/theme-document.test.ts +222 -0
  309. package/src/theme/__tests__/theme-registry.test.ts +138 -0
  310. package/src/theme/__tests__/theme-styles.test.ts +233 -0
  311. package/src/theme/built-in-themes.ts +342 -0
  312. package/src/theme/color-vision.ts +171 -0
  313. package/src/theme/index.ts +45 -0
  314. package/src/theme/theme-context.tsx +81 -0
  315. package/src/theme/theme-contracts.ts +139 -0
  316. package/src/theme/theme-document.ts +278 -0
  317. package/src/theme/theme-registry.ts +127 -0
  318. package/src/theme/theme-styles.ts +177 -0
  319. package/src/tool-summary-status.ts +59 -0
  320. package/src/tui-app-channel-port.ts +111 -0
  321. package/src/tui-channel-lifecycle-coordinator.ts +149 -0
  322. package/src/tui-channel-options.ts +184 -0
  323. package/src/tui-cli-adapter-context.tsx +13 -0
  324. package/src/tui-cli-adapter.ts +24 -0
  325. package/src/tui-interaction-queues.ts +171 -0
  326. package/src/tui-session-binding.ts +52 -0
  327. package/src/tui-session-event-projector.ts +149 -0
  328. package/src/tui-session-events.ts +89 -0
  329. package/src/tui-session-notice-store.ts +43 -0
  330. package/src/tui-session-options.ts +134 -0
  331. package/src/tui-state-manager.ts +347 -0
  332. package/src/types.ts +21 -0
  333. package/src/use-terminal-title.ts +29 -0
  334. package/src/utils/__tests__/edit-diff.test.ts +426 -0
  335. package/src/utils/__tests__/paste-detection.test.ts +116 -0
  336. package/src/utils/__tests__/paste-labels.test.ts +46 -0
  337. package/src/utils/__tests__/tool-call-extractor.test.ts +227 -0
  338. package/src/utils/__tests__/tool-diff-summary.test.ts +104 -0
  339. package/src/utils/edit-diff.ts +151 -0
  340. package/src/utils/input-top-border.ts +19 -0
  341. package/src/utils/paste-labels.ts +9 -0
  342. package/src/utils/tool-call-extractor.ts +92 -0
  343. package/src/utils/tool-diff-summary.ts +75 -0
  344. package/src/waiting-loop-stop-notice.ts +23 -0
  345. package/src/wire-history-sync.ts +159 -0
  346. package/src/wire-tui-channel.ts +963 -0
  347. package/src/wire-tui-client-commands.ts +142 -0
  348. package/src/wire-tui-projection.ts +136 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,1204 @@
1
+ # @robota-sdk/agent-ui-terminal
2
+
3
+ ## 3.0.0-beta.100
4
+ ### Patch Changes
5
+
6
+ - @robota-sdk/agent-core@3.0.0-beta.100
7
+ - @robota-sdk/agent-framework@3.0.0-beta.100
8
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.100
9
+ - @robota-sdk/agent-interface-command@3.0.0-beta.100
10
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.100
11
+ - @robota-sdk/agent-interface-session@3.0.0-beta.100
12
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.100
13
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.100
14
+ - @robota-sdk/agent-transport@3.0.0-beta.100
15
+
16
+ ## 3.0.0-beta.99
17
+ ### Patch Changes
18
+
19
+ - @robota-sdk/agent-core@3.0.0-beta.99
20
+ - @robota-sdk/agent-framework@3.0.0-beta.99
21
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.99
22
+ - @robota-sdk/agent-interface-command@3.0.0-beta.99
23
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.99
24
+ - @robota-sdk/agent-interface-session@3.0.0-beta.99
25
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.99
26
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.99
27
+ - @robota-sdk/agent-transport@3.0.0-beta.99
28
+
29
+ ## 3.0.0-beta.98
30
+ ### Patch Changes
31
+
32
+ - @robota-sdk/agent-core@3.0.0-beta.98
33
+ - @robota-sdk/agent-framework@3.0.0-beta.98
34
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.98
35
+ - @robota-sdk/agent-interface-command@3.0.0-beta.98
36
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.98
37
+ - @robota-sdk/agent-interface-session@3.0.0-beta.98
38
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.98
39
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.98
40
+ - @robota-sdk/agent-transport@3.0.0-beta.98
41
+
42
+ ## 3.0.0-beta.97
43
+ ### Patch Changes
44
+
45
+ - Updated dependencies [c207a31]
46
+ - Updated dependencies [9b4f63b]
47
+ - Updated dependencies [7911a7d]
48
+ - Updated dependencies [23a30cd]
49
+ - @robota-sdk/agent-core@3.0.0-beta.97
50
+ - @robota-sdk/agent-transport@3.0.0-beta.97
51
+ - @robota-sdk/agent-interface-session@3.0.0-beta.97
52
+ - @robota-sdk/agent-framework@3.0.0-beta.97
53
+ - @robota-sdk/agent-interface-command@3.0.0-beta.97
54
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.97
55
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.97
56
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.97
57
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.97
58
+
59
+ ## 3.0.0-beta.96
60
+ ### Patch Changes
61
+
62
+ - @robota-sdk/agent-core@3.0.0-beta.96
63
+ - @robota-sdk/agent-framework@3.0.0-beta.96
64
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.96
65
+ - @robota-sdk/agent-interface-command@3.0.0-beta.96
66
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.96
67
+ - @robota-sdk/agent-interface-session@3.0.0-beta.96
68
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.96
69
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.96
70
+ - @robota-sdk/agent-transport@3.0.0-beta.96
71
+
72
+ ## 3.0.0-beta.95
73
+ ### Patch Changes
74
+
75
+ - 04a6de4: **Reasoning text a provider streams now reaches the editor as an ACP `agent_thought_chunk`, through a new `thinking_delta` session event.**
76
+
77
+ `IChatOptions.onThinkingDelta`, `IRunOptions.onThinkingDelta` and `IResumeExecutionOptions.onThinkingDelta`
78
+ (typed `TThinkingDeltaCallback`) carry reasoning text from a provider through the run, and the session
79
+ options (`ISessionOptions.onThinkingDelta`, `ICreateSessionOptions.onThinkingDelta`) hand it to the
80
+ session's owner. `InteractiveSession` emits it as `thinking_delta(delta)`, beside `text_delta`. The
81
+ text is never part of the reply: it is not appended to the conversation, not streamed through
82
+ `onTextDelta`, and the core adds no record of its own for it (no text-delta log entry, no
83
+ `provider_stream_raw_delta`); a provider's own native payload capture and response metadata keep
84
+ what the provider sent, as before. A reasoning delta counts as provider activity for the idle
85
+ timeout whether or not anyone listens to it, so a model that is only thinking is not cut off. The
86
+ existing `thinking(isThinking)` event is unchanged and remains the busy indicator. Where a provider
87
+ sends no reasoning text, nothing is emitted and nothing new is switched on.
88
+
89
+ `@robota-sdk/agent-interface-session` is a major change because a new session event name makes an
90
+ exhaustive map over the event names stop compiling until it classifies the event.
91
+
92
+ `@robota-sdk/agent-transport-acp` sends each non-empty `thinking_delta` to the editor as an
93
+ `agent_thought_chunk`, in order with the message chunks, so `robota acp` shows the model's reasoning
94
+ in the editor. A turn that streamed only thoughts still shows its result text, because only reply
95
+ text marks a turn as streamed. The WebSocket wire, the HTTP stream, headless stream-json, `query()`
96
+ and the terminal UI do not carry the new event in this change (`@robota-sdk/agent-transport` and
97
+ `@robota-sdk/agent-ui-terminal` classify it as non-surface). A forked skill and an in-process subagent
98
+ pass their reply text up but not their reasoning.
99
+
100
+ Two providers already receive reasoning text and now report it. `@robota-sdk/agent-provider-openai`
101
+ passes `response.reasoning_summary_text.delta` events of a streamed Responses call to
102
+ `onThinkingDelta`; the API sends them only when the provider profile asks for a reasoning summary, and
103
+ no request option changed; a summary streamed in several parts, and the summary of a later reasoning
104
+ item, each start on a new paragraph (`\n\n`) so the parts do not run together.
105
+ `@robota-sdk/agent-provider-openai-compatible` reports the text of Gemma's thought channel, which the
106
+ provider already removed from the reply, as it streams across chunk boundaries, with each later
107
+ channel of one reply on a new paragraph; the reply text is unchanged. No other provider reports
108
+ reasoning, and Anthropic thinking is not enabled. A model fallback chain still moves to the next model when only reasoning had streamed.
109
+
110
+ The scripted test provider (`@robota-sdk/agent-core/testing`) accepts an optional `thinking` string on
111
+ a turn and delivers it through `onThinkingDelta` before the turn's text; the scripted session harness
112
+ collects `thinking_delta` and now keeps a scripted tool-call turn's `usage`, which it used to drop.
113
+ - Updated dependencies [c967c57]
114
+ - Updated dependencies [60f3965]
115
+ - Updated dependencies [115e104]
116
+ - Updated dependencies [04719a9]
117
+ - Updated dependencies [04a6de4]
118
+ - Updated dependencies [0ba247b]
119
+ - Updated dependencies [02053ec]
120
+ - @robota-sdk/agent-transport@3.0.0-beta.95
121
+ - @robota-sdk/agent-interface-session@3.0.0-beta.95
122
+ - @robota-sdk/agent-framework@3.0.0-beta.95
123
+ - @robota-sdk/agent-core@3.0.0-beta.95
124
+ - @robota-sdk/agent-interface-command@3.0.0-beta.95
125
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.95
126
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.95
127
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.95
128
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.95
129
+
130
+ ## 3.0.0-beta.94
131
+ ### Patch Changes
132
+
133
+ - Updated dependencies [e079992]
134
+ - Updated dependencies [e706b43]
135
+ - Updated dependencies [fef3a50]
136
+ - @robota-sdk/agent-framework@3.0.0-beta.94
137
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.94
138
+ - @robota-sdk/agent-interface-session@3.0.0-beta.94
139
+ - @robota-sdk/agent-transport@3.0.0-beta.94
140
+ - @robota-sdk/agent-core@3.0.0-beta.94
141
+ - @robota-sdk/agent-interface-command@3.0.0-beta.94
142
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.94
143
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.94
144
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.94
145
+
146
+ ## 3.0.0-beta.93
147
+ ### Patch Changes
148
+
149
+ - Release the integrated provider credential isolation and consumer runtime and interaction composition updates.
150
+ - Updated dependencies
151
+ - @robota-sdk/agent-core@3.0.0-beta.93
152
+ - @robota-sdk/agent-framework@3.0.0-beta.93
153
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.93
154
+ - @robota-sdk/agent-interface-command@3.0.0-beta.93
155
+ - @robota-sdk/agent-interface-session@3.0.0-beta.93
156
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.93
157
+ - @robota-sdk/agent-transport@3.0.0-beta.93
158
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.93
159
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.93
160
+
161
+ ## 3.0.0-beta.92
162
+ ### Patch Changes
163
+
164
+ - Updated dependencies
165
+ - @robota-sdk/agent-core@3.0.0-beta.92
166
+ - @robota-sdk/agent-framework@3.0.0-beta.92
167
+ - @robota-sdk/agent-interface-command@3.0.0-beta.92
168
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.92
169
+ - @robota-sdk/agent-interface-session@3.0.0-beta.92
170
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.92
171
+ - @robota-sdk/agent-transport@3.0.0-beta.92
172
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.92
173
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.92
174
+
175
+ ## 3.0.0-beta.91
176
+ ### Patch Changes
177
+
178
+ - Updated dependencies [bad976f]
179
+ - @robota-sdk/agent-framework@3.0.0-beta.91
180
+ - @robota-sdk/agent-core@3.0.0-beta.91
181
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.91
182
+ - @robota-sdk/agent-interface-command@3.0.0-beta.91
183
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.91
184
+ - @robota-sdk/agent-interface-session@3.0.0-beta.91
185
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.91
186
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.91
187
+ - @robota-sdk/agent-transport@3.0.0-beta.91
188
+
189
+ ## 3.0.0-beta.90
190
+ ### Patch Changes
191
+
192
+ - Updated dependencies [7116367]
193
+ - Updated dependencies [5bb675a]
194
+ - @robota-sdk/agent-framework@3.0.0-beta.90
195
+ - @robota-sdk/agent-core@3.0.0-beta.90
196
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.90
197
+ - @robota-sdk/agent-interface-command@3.0.0-beta.90
198
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.90
199
+ - @robota-sdk/agent-interface-session@3.0.0-beta.90
200
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.90
201
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.90
202
+ - @robota-sdk/agent-transport@3.0.0-beta.90
203
+
204
+ ## 3.0.0-beta.89
205
+ ### Patch Changes
206
+
207
+ - Updated dependencies [3427887]
208
+ - @robota-sdk/agent-transport@3.0.0-beta.89
209
+ - @robota-sdk/agent-framework@3.0.0-beta.89
210
+ - @robota-sdk/agent-core@3.0.0-beta.89
211
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.89
212
+ - @robota-sdk/agent-interface-command@3.0.0-beta.89
213
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.89
214
+ - @robota-sdk/agent-interface-session@3.0.0-beta.89
215
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.89
216
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.89
217
+
218
+ ## 3.0.0-beta.88
219
+
220
+ ### Patch Changes
221
+
222
+ - @robota-sdk/agent-framework@3.0.0-beta.88
223
+ - @robota-sdk/agent-core@3.0.0-beta.88
224
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.88
225
+ - @robota-sdk/agent-interface-command@3.0.0-beta.88
226
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.88
227
+ - @robota-sdk/agent-interface-session@3.0.0-beta.88
228
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.88
229
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.88
230
+ - @robota-sdk/agent-transport@3.0.0-beta.88
231
+
232
+ ## 3.0.0-beta.87
233
+
234
+ ### Minor Changes
235
+
236
+ - 7d9cc66: Preserve an explicitly supplied host tool scheduling policy through session assembly and CLI presentation modes, retaining permission admission and conservative handling of undeclared resources.
237
+
238
+ ### Patch Changes
239
+
240
+ - Release the migrated Robota product with its public SDK namespace, robota command, compatible SDK exports, internal product configuration, and verified CLI startup and delivery corrections.
241
+ - Updated dependencies
242
+ - Updated dependencies [66af868]
243
+ - Updated dependencies [7d9cc66]
244
+ - Updated dependencies [7d9cc66]
245
+ - Updated dependencies [7d9cc66]
246
+ - Updated dependencies [7d9cc66]
247
+ - Updated dependencies [7d9cc66]
248
+ - Updated dependencies [7d9cc66]
249
+ - Updated dependencies [7d9cc66]
250
+ - Updated dependencies [7d9cc66]
251
+ - Updated dependencies [7d9cc66]
252
+ - Updated dependencies [7d9cc66]
253
+ - Updated dependencies [7d9cc66]
254
+ - Updated dependencies [7d9cc66]
255
+ - Updated dependencies [7d9cc66]
256
+ - Updated dependencies [7d9cc66]
257
+ - Updated dependencies [7d9cc66]
258
+ - Updated dependencies [7d9cc66]
259
+ - Updated dependencies [7d9cc66]
260
+ - Updated dependencies [7d9cc66]
261
+ - Updated dependencies [7d9cc66]
262
+ - @robota-sdk/agent-core@3.0.0-beta.87
263
+ - @robota-sdk/agent-framework@3.0.0-beta.87
264
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.87
265
+ - @robota-sdk/agent-interface-command@3.0.0-beta.87
266
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.87
267
+ - @robota-sdk/agent-interface-session@3.0.0-beta.87
268
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.87
269
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.87
270
+ - @robota-sdk/agent-transport@3.0.0-beta.87
271
+
272
+ ## 3.0.0-beta.86
273
+
274
+ ### Patch Changes
275
+
276
+ - @robota-sdk/agent-core@3.0.0-beta.86
277
+ - @robota-sdk/agent-framework@3.0.0-beta.86
278
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.86
279
+ - @robota-sdk/agent-interface-command@3.0.0-beta.86
280
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.86
281
+ - @robota-sdk/agent-interface-session@3.0.0-beta.86
282
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.86
283
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.86
284
+ - @robota-sdk/agent-transport@3.0.0-beta.86
285
+
286
+ ## 3.0.0-beta.85
287
+
288
+ ### Patch Changes
289
+
290
+ - Updated dependencies [4e11579]
291
+ - Updated dependencies [41cca13]
292
+ - Updated dependencies [193a0bc]
293
+ - Updated dependencies [54e2848]
294
+ - Updated dependencies [9a01e78]
295
+ - Updated dependencies [3c1967f]
296
+ - Updated dependencies [ada3841]
297
+ - Updated dependencies [5093a30]
298
+ - Updated dependencies [5684612]
299
+ - Updated dependencies [6ee8725]
300
+ - Updated dependencies [6072e9a]
301
+ - Updated dependencies [94b2c87]
302
+ - Updated dependencies [3ab2eca]
303
+ - Updated dependencies [2e07cad]
304
+ - @robota-sdk/agent-framework@3.0.0-beta.85
305
+ - @robota-sdk/agent-core@3.0.0-beta.85
306
+ - @robota-sdk/agent-interface-command@3.0.0-beta.85
307
+ - @robota-sdk/agent-transport@3.0.0-beta.85
308
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.85
309
+ - @robota-sdk/agent-interface-session@3.0.0-beta.85
310
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.85
311
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.85
312
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.85
313
+
314
+ ## 3.0.0-beta.84
315
+
316
+ ### Minor Changes
317
+
318
+ - 4f35721: Starting a session from `robota session view` in a folder that is not trusted asks what to do
319
+ instead of failing. The question names the folder and lists what trust would load. The choices are
320
+ `y` to trust the folder and start, `r` to start it Restricted, and `n` to cancel. A Restricted answer
321
+ holds even if the folder was trusted meanwhile. Before, the view showed only "Start failed".
322
+
323
+ - `agent-cli` (patch):
324
+ - A background session started Restricted runs with `--restricted-workspace`.
325
+ - A headless start that asked to run Restricted is no longer refused for want of trust, the same
326
+ as `--safe-mode`.
327
+ - `agent-ui-terminal` (minor): the session view takes `startTrustQuestion`, which returns the
328
+ folder and what trust would load (`ISupervisedStartTrustQuestion`). `onStart` receives the person's
329
+ choice (`TSupervisedStartTrustChoice`).
330
+
331
+ ### Patch Changes
332
+
333
+ - Updated dependencies [9f46375]
334
+ - Updated dependencies [e8d70ac]
335
+ - Updated dependencies [9c6a8db]
336
+ - Updated dependencies [9c6a8db]
337
+ - Updated dependencies [9c6a8db]
338
+ - Updated dependencies [9c6a8db]
339
+ - @robota-sdk/agent-core@3.0.0-beta.84
340
+ - @robota-sdk/agent-framework@3.0.0-beta.84
341
+ - @robota-sdk/agent-interface-session@3.0.0-beta.84
342
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.84
343
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.84
344
+ - @robota-sdk/agent-transport@3.0.0-beta.84
345
+ - @robota-sdk/agent-interface-command@3.0.0-beta.84
346
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.84
347
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.84
348
+
349
+ ## 3.0.0-beta.83
350
+
351
+ ### Major Changes
352
+
353
+ - ba822c1: An attached client reads a workspace entry's detail, stops a waiting self-paced loop, completes
354
+ subcommands, and sees status changes another client made.
355
+
356
+ - `agent-interface-session` (major): `IInteractiveSession` gains the required roles
357
+ `ISessionExecutionDetail` and `ISessionSelfPacedLoopControl` (`TWaitingLoopStopOutcome`), and the
358
+ exhaustively mapped event map gains `status_changed`.
359
+ - `agent-transport` (major): `IProtocolSession` gains both roles; the wire unions gain
360
+ `read-execution-detail`, `stop-waiting-loop`, `execution_detail`, `execution_detail_error` and
361
+ `waiting_loop_stop`; `status_changed` is pushed as `session_status`; `isObserverMessageType` is
362
+ exported from the root and `./client`.
363
+ - `agent-interface-command` (minor): `ICommandListEntry` gains optional `argumentHint` and
364
+ `subcommands` (`ICommandSubcommandEntry`).
365
+ - `agent-cli` (minor):
366
+ - `robota session attach` and an attach from `robota session view` open the full terminal UI,
367
+ the one `robota --attach` opens, in drive mode or, with `--observe`, read-only. The reduced
368
+ attached view is gone.
369
+ - A served runtime names each of its sessions after the session's first real turn.
370
+ - `agent-framework` (minor):
371
+ - `InteractiveSession` gains `stopWaitingSelfPacedLoop(reason?)`: it stops the one waiting loop,
372
+ or stops none and names `/loop stop` when several wait. `SessionSlot` forwards it and
373
+ `readExecutionWorkspaceDetail`.
374
+ - The session emits `status_changed` when its mode, model, effort, goal or name changes, after a
375
+ command, a turn, a rename or a goal or plan transition.
376
+ - A new option `autoName: true` makes the session name itself once, after its first turn, with its
377
+ current provider; it keeps a name it already has and lets a rename made meanwhile win. Off by
378
+ default.
379
+ - The command catalog carries each command's `argumentHint` and `subcommands`.
380
+ - `agent-ui-terminal` (major):
381
+ - The full terminal UI attached to a host's session reads a workspace entry's detail, sends input
382
+ to a background task, stops a waiting self-paced loop on Esc, and completes subcommands.
383
+ - `renderAttachedApp` takes `mode: 'drive' | 'observe'` (default `'drive'`) and `announce`. In
384
+ observe mode the terminal sends only what an observer may send, refuses prompts, host commands,
385
+ abort and loop stop with a read-only notice, still runs `/exit` and its own commands, and its
386
+ status bar says it is observing. `ITuiChannelSnapshot` gains `readOnly`.
387
+ - The in-process terminal no longer names sessions; it builds its session with `autoName: true`.
388
+ `ITuiInteractionChannelOptions.onAutoNamed` is removed.
389
+
390
+ ### Minor Changes
391
+
392
+ - 617b795: `robota session attach <id> [--observe]` puts this terminal on a live supervised session.
393
+
394
+ - It asks first, on the controlling terminal, naming the session and the role: drive (send prompts,
395
+ answer its questions) or observe (read only). The yes holds only for the process start it named: if
396
+ the session restarted meanwhile, the attach is refused.
397
+ - It needs an interactive terminal. Without one (a script, or an agent running shell commands) it is
398
+ refused and prints the command for the user to run. It is not available as a slash command or a
399
+ model tool.
400
+ - The terminal view shows the conversation so far, then follows the session live: streaming replies,
401
+ tools, other terminals' prompts, queued input and questions. In drive mode it sends prompts and
402
+ `/commands` and answers permission prompts and questions; a question answered on another surface is
403
+ dismissed. Observe mode is labelled read-only and sends nothing but reads.
404
+ - `/exit`, `/quit`, Ctrl-C and Ctrl-] detach. Nothing is sent to the session, so its turn continues and
405
+ it keeps running; stop it with `robota session stop` or from `robota session view`.
406
+ - The attached terminal is the full terminal UI (`renderAttachedApp` in `agent-ui-terminal`).
407
+ - A handshake from a connection that already closed no longer holds one of the session's attach slots.
408
+
409
+ - 724fabb: External-event grants are given at start, carried exactly to a background session, listed without their
410
+ principal, and revoked by the owner.
411
+
412
+ - `agent-framework` (breaking) — `openExternalEventSource` and `ExternalEventIngress.open` take only
413
+ `{ grant, audit? }`: the session builds each grant's verifier from `grant.verifier` with the
414
+ `externalEventVerifierFactory` its host passed when the session was built (without one, no grant opens), and an
415
+ open that supplies a verifier or a factory is refused. `IExternalEventSource.revoke()` stops the grant's queued and running turns,
416
+ refuses its later events as `grant-revoked`, and keeps the label from being opened again. A submission the
417
+ session refuses is `shutting-down` only while it shuts down, and `session-unavailable` otherwise. New command
418
+ host adapter `externalEvents` (`ICommandExternalEventsAdapter`).
419
+ - `agent-ui-terminal` — forwards `externalEventVerifierFactory` from the render options to the session.
420
+ - `agent-interface-transport` — `TExternalEventRefusal` gains `session-unavailable`.
421
+ - `agent-command` — `/events` lists the session's grants (label, principal kind, state, counts) and
422
+ `/events revoke <grant-id>` withdraws one. User-only.
423
+ - `agent-cli` — a grant file (`grantId`, `issuer`, `resource` ending in `/events/<grantId>`, exactly one of
424
+ `subject` or `client`, `scopes`, optional `algorithms` and `rate`) is validated before anything starts, with a
425
+ reason that names the grant and no configured value. `robota --external-event-grant <file>` (TUI) and
426
+ `robota session start --background --external-event-grant <file>` open every grant or fail the start; a
427
+ background session receives its grants through a private file, opens them before it reports ready, and the
428
+ launcher refuses a readiness that names other grants. `robota session events list <id> [--json]` and
429
+ `robota session events revoke <id> <grant-id>` work over the generation-bound control socket, and
430
+ `robota session list --format json` shows each grant's counts. The retired `--external-event-allow` now points
431
+ at `--external-event-grant`.
432
+
433
+ - 1706d29: `robota session view` attaches to and peeks at sessions.
434
+
435
+ - `a` attaches to the selected session to drive it, and `p` peeks at it read-only. Both are offered, in
436
+ the footer and in help, only on a row that is alive, controllable and verified. The view asks first,
437
+ naming the role. The yes is held to the process start the row showed: if the session restarted or
438
+ lost control meanwhile, the attach is refused. Detaching returns to the view, on the same row and
439
+ grouping, without printing the screen-reader line again.
440
+ - **Breaking:** opening a row's linked PR moves from `p` to `o`.
441
+ - The attached view shows the keys for what is on screen: sending, answering a permission, or
442
+ answering a question. With a screen reader it words every line ("Prompt from attach:2: …",
443
+ "Tool started: …", "Permission needed: …") and uses no symbols.
444
+ - Questions wait their turn: a second permission request or question no longer replaces the one on
445
+ screen, and one settled elsewhere leaves the queue.
446
+ - Line breaks inside pasted text become spaces instead of sending the text. In a masked answer they are
447
+ dropped, so a copied key that ends with a line break is kept exactly.
448
+ - `robota session attach` accepts `--screen-reader` and `--no-screen-reader`.
449
+ - The attach client closes a connection that sends more frames than it can hold before the view reads
450
+ them.
451
+
452
+ - 57f57f5: A daemon keeps several sessions live, and each client is bound to its own: one client's switch moves
453
+ only that client.
454
+
455
+ - `agent-interface-session`: `ISessionBinder`/`ISessionBinding`, the session-change refusal codes with
456
+ `isSessionChangeRefusal`, and listing rows that may say `live` and `clients`.
457
+ - `agent-framework`: `SessionPool` and `SessionChangeRefusal`.
458
+ - `agent-transport` (**major**): a new server frame, `session_change_failed`, which an exhaustive
459
+ consumer must handle. A refused `new-session` or `switch-session` now answers with it, carrying a
460
+ `code`, instead of `protocol_error`; both requests take an optional `requestId` that it echoes.
461
+ - `agent-transport-ws`: the `sessionBinder` option binds each connection to its own session and
462
+ releases the binding when the connection closes.
463
+ - `agent-cli`: `robota --serve` and the daemon keep up to four sessions live. Each WebSocket client and
464
+ attached terminal is bound to its own session; leaving a busy session is no longer refused, and only
465
+ the last driver of a session with a pending prompt is kept from leaving it. Grants and the supervised
466
+ name stay on the runtime's first session, and its reported activity covers every live session.
467
+ - `agent-ui-web`: a refused new or switch shows the host's reason as a notice (an older host's
468
+ `protocol_error` still does); the session sidebar marks live sessions and counts the other clients
469
+ on each; after a reconnect to a host that keeps sessions live, the GUI returns to the session it was on.
470
+ - `agent-ui-terminal`: an attached terminal shows why a switch was refused, and the picker's switch
471
+ stays pending until the host answers; the session picker marks live sessions and their clients.
472
+
473
+ - 6e6b06b: `robota --attach` puts the full terminal UI on this workspace's running daemon.
474
+
475
+ - **`agent-ui-terminal`:**
476
+ - `renderAttachedApp` renders the same App over a wire connection, through `WireTuiChannel`, a second implementation of the TUI's channel port.
477
+ - Leaving detaches; the daemon keeps running.
478
+ - The session picker lists and switches the daemon's sessions. It opens on the daemon's answer to `/resume`; a daemon that cannot list its sessions says why instead.
479
+ - With no saved sessions to resume, `/resume` says so and keeps the prompt, instead of opening an empty picker that blocks input. This applies to the in-process TUI too.
480
+ - The session picker lists an unnamed session by the part of its id that differs, not by the `session_` prefix every id shares. This applies to the in-process TUI too.
481
+ - The status bar names the daemon's current session: its name, or else its short id.
482
+ - A question already open when the terminal attaches is shown, and a long session's history reaches the terminal without the daemon cutting it off.
483
+ - Features that belong to the runtime process say they are unavailable while attached: the plugin manager, background task details and sending to an agent job.
484
+ - **`agent-cli`:**
485
+ - `robota --attach` finds the workspace daemon and asks the user to confirm on the terminal, as `robota session attach` does, then attaches.
486
+ - Options that shape a session are refused, because the daemon shapes its session.
487
+ - A terminal attached over the supervised socket can now list, start and switch sessions.
488
+ - A client's command no longer stops or restarts the workspace daemon. `/language`, `/reset`, `/exit` and provider setup or switch keep their saved change, and the client is told to run `robota daemon stop`, then `robota daemon start`.
489
+ - `robota --attach` installs the plain TUI's process guards, so an error the plain TUI survives no longer ends the attached terminal.
490
+ - A client's command no longer stops or restarts any supervised session either; the client is told to run `robota session stop <id>`, and the saved change applies to a new session from `robota session start --background`.
491
+
492
+ - caaab20: `/rewind` works again. Every session the CLI builds for a trusted workspace captures edit
493
+ checkpoints; before, none did, and `/rewind` failed everywhere with "Edit checkpoints require
494
+ project authority."
495
+
496
+ - `agent-cli` (patch): a trusted workspace composes an edit checkpoint store for the terminal UI, a
497
+ print run, a served runtime and each session a daemon keeps live. Every session gets its own
498
+ store, pooled or switched to in the terminal UI, since two can run turns at the same time. On a host that cannot prove a project write
499
+ stays inside the project (every platform but Linux), none is composed: a checkpoint could be
500
+ neither saved nor restored there.
501
+ - `agent-command` (patch): where a session has no checkpoints, `/rewind` says why: a restricted
502
+ workspace is told to run `robota trust --yes` and restart Robota, and a host that cannot write
503
+ the project safely says so. `/rewind list` reports this as a failed command instead of throwing.
504
+ - `agent-framework` (minor): a checkpoint operation on a session without a store throws
505
+ `EditCheckpointsUnavailableError`, whose `reason` is `host-cannot-write-project`,
506
+ `restricted-workspace` or `no-checkpoint-store`. It is a `WorkspaceAuthorityRequiredError`, as
507
+ before, named `EditCheckpointsUnavailableError`. `HeadlessInteractionChannel` takes an
508
+ `editCheckpointStore` option.
509
+ - `agent-ui-terminal` (minor): `renderApp` takes `createEditCheckpointStore` in place of
510
+ `editCheckpointStore`, and builds each session its own store, since a session switch can build the
511
+ next session before the old one's turn ends. `TuiInteractionChannel` keeps `editCheckpointStore`:
512
+ a channel runs one session.
513
+
514
+ - f01868f: `sandbox.autoAllowBashIfSandboxed` takes effect. The CLI confined shell commands in the OS sandbox,
515
+ but no session learned about the sandbox, so a confined command still asked for approval in the
516
+ terminal UI, a served runtime and MCP serve, and a print run with no one to approve it refused it.
517
+
518
+ - `agent-cli` (patch): a served session, and each session a daemon keeps live, receives the sandbox
519
+ the shell tools run under.
520
+ - `agent-framework` (minor): `HeadlessInteractionChannel` takes a `sandboxClient` option and hands it
521
+ to the session.
522
+ - `agent-ui-terminal` (minor): `renderApp` and `TuiInteractionChannel` take a `sandboxClient` option
523
+ and hand it to each session they build.
524
+
525
+ ### Patch Changes
526
+
527
+ - 8625a14: Supervised session control is bound to one process start.
528
+
529
+ - Each supervised session start writes a fresh random generation into its private registration. Its
530
+ control endpoint echoes that generation in every reply and refuses any request that carries a
531
+ different one, or none.
532
+ - `session view` keeps the generation each row was verified with. Stop and linked-PR opening send it,
533
+ so a session that restarted under the same id since the row was shown is refused instead of acted
534
+ on. A stop confirmation also refuses when the row's generation changed while it was open.
535
+ - `session stop`, `rename`, `link-pr` and `unlink-pr` read the generation at request time and the
536
+ session itself checks it, closing the window between the liveness check and the action.
537
+ - A registration without a generation (written by an earlier version) is listed but never
538
+ controllable; restart that session to control it again.
539
+ - The generation is never printed by `session list` in text or JSON.
540
+
541
+ - 6ae3f28: A served runtime can list its workspace's sessions, start a new one and switch to another without the
542
+ process or any client connection restarting. The GUI shows them in a sessions sidebar.
543
+
544
+ - `agent-interface-session` is **`major`** for two reasons:
545
+ - It adds `ISessionListing`, `ISessionDirectory` and `ISessionSwitchedEvent`.
546
+ - `IInteractiveSessionEvents` gains a required `session_switched` event. An exhaustive map over the
547
+ event names stops compiling until it classifies the new event.
548
+ - `agent-transport` is **`major`** for the same kind of reason:
549
+ - It adds the wire messages `list-sessions` → `sessions`/`sessions_error`, `new-session`,
550
+ `switch-session`, and the broadcast `session_switched`.
551
+ - It adds a `sessionDirectory` handler option. A refusal to switch comes back as a
552
+ `protocol_error` carrying the reason.
553
+ - An exhaustive map over message types must add the new variants.
554
+ - `agent-transport-ws` passes a configured `sessionDirectory` to every connection.
555
+ - `agent-framework` is **`major` because `IRuntimeHostHandle.session` is now a `SessionSlot`**, not the
556
+ `InteractiveSession`, and `bindTransports` receives the slot.
557
+ - The slot is an `IInteractiveSession` that forwards to the current session. Members outside that
558
+ interface are read through `host.session.current`, which changes on a switch.
559
+ - Adds `InteractiveSession.whenInitialized()`.
560
+ - Exports `listUnreadableSessions`.
561
+ - `agent-ui-web` is **`major`**:
562
+ - `IWsSessionState` gains session listing state and actions.
563
+ - It adds a `SessionSidebar`.
564
+ - `/resume` opens the sidebar.
565
+ - `agent-cli`: `robota --serve` provides the session directory, and refuses a switch that would lose
566
+ work in progress. External-event grants belong to the run: a switch reopens them on the new session,
567
+ as the TUI already does.
568
+ - External-event grant history (spent tokens, rate windows, revocations) belongs to the run. The new
569
+ option `externalEventGrantHistory` (from `createExternalEventGrantHistory()`) is shared by every
570
+ session that a served runtime or the TUI builds. A session switch therefore replays no spent token
571
+ and resets no rate limit. The TUI previously had this gap when it switched sessions.
572
+
573
+ - 9721162: A key typed just as a prompt appears no longer answers it: in the terminal UI the permission prompt, and in the web UI both the permission and the ask dock.
574
+
575
+ - **`agent-ui-terminal`:** the permission prompt ignores its keys for a short pause after it appears (`PERMISSION_PROMPT_ARM_DELAY_MS`). While it waits it shows "keys answer in a moment" and no selection cursor. In screen-reader mode, a number typed during the pause, or typed for the previous request, is not kept for a later Enter.
576
+ - **`agent-ui-web`:** the docked permission or ask prompt waits a short pause (`PROMPT_ARM_DELAY_MS`) before it takes focus, so keys typed during that pause stay in the composer. While it waits it says so. A mouse click on a button answers at once, and Esc still denies or cancels; Enter or Space on a focused button waits like any other key, and a button focused to answer one prompt hands focus back to the dock when the next appears.
577
+
578
+ - 57280bf: Every published package now declares `"engines": { "node": ">=22.12.0" }`. Before, 27 of the 38
579
+ packages declared no floor (`agent-core`, `agent-tools` and every provider among them),
580
+ `agent-session` and `agent-file-authority` declared `>=20.19.0`, and the other nine declared
581
+ `>=22.0.0`, so a consumer on Node 20 saw at most a warning from a transitive dependency.
582
+
583
+ Why 22.12: `agent-cli` and `agent-ui-terminal` need Node 22 through `ink` 7, and the CommonJS entries
584
+ of `agent-tools` and its dependents, `agent-transport`/`node` and its dependents, and
585
+ `agent-ui-terminal` `require()` ESM-only dependencies (`p-limit`, `jose`, `chalk`), which Node 22
586
+ supports unflagged only from 22.12. `engines` is advisory unless the consumer enables `engine-strict`.
587
+
588
+ No code changes: `tsdown` now reads `node22.12.0` as its build target from the field.
589
+
590
+ - 1efb124: `@robota-sdk/agent-cli` and `@robota-sdk/agent-ui-terminal` are now ESM-only. Their CommonJS entry
591
+ could never load: it pulls in Ink, whose `yoga-layout` dependency starts with a top-level `await`, so
592
+ `require()` failed on every Node version with `ERR_REQUIRE_ASYNC_MODULE`. The packages no longer
593
+ declare a `require` condition or ship `index.cjs`/`index.d.cts`, so `require()` now fails at resolution
594
+ with `ERR_PACKAGE_PATH_NOT_EXPORTED`. Load them with `import` or `import()`, which is unchanged. The
595
+ `robota` executable is unaffected.
596
+ - 18c0d5c: Every published package now exports `./package.json`, so `require('<package>/package.json')` and
597
+ `import('<package>/package.json', { with: { type: 'json' } })` work instead of failing with
598
+ `ERR_PACKAGE_PATH_NOT_EXPORTED`, and each tarball now ships the package's `CHANGELOG.md`.
599
+ - Updated dependencies [3c81769]
600
+ - Updated dependencies [724fabb]
601
+ - Updated dependencies [d877de2]
602
+ - Updated dependencies [d61e159]
603
+ - Updated dependencies [997f2fb]
604
+ - Updated dependencies [bfe8ed5]
605
+ - Updated dependencies [e689c8e]
606
+ - Updated dependencies [4241fc5]
607
+ - Updated dependencies [4f49d14]
608
+ - Updated dependencies [7b72344]
609
+ - Updated dependencies [6ae3f28]
610
+ - Updated dependencies [9721162]
611
+ - Updated dependencies [be0e53c]
612
+ - Updated dependencies [57f57f5]
613
+ - Updated dependencies [ba822c1]
614
+ - Updated dependencies [9721162]
615
+ - Updated dependencies [6e6b06b]
616
+ - Updated dependencies [7d77ce4]
617
+ - Updated dependencies [8bd5fac]
618
+ - Updated dependencies [57280bf]
619
+ - Updated dependencies [5033dd9]
620
+ - Updated dependencies [18c0d5c]
621
+ - Updated dependencies [dbd888d]
622
+ - Updated dependencies [1887e54]
623
+ - Updated dependencies [caaab20]
624
+ - Updated dependencies [f01868f]
625
+ - Updated dependencies [e8779c9]
626
+ - Updated dependencies [5a0ee96]
627
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.83
628
+ - @robota-sdk/agent-framework@3.0.0-beta.83
629
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.83
630
+ - @robota-sdk/agent-transport@3.0.0-beta.83
631
+ - @robota-sdk/agent-core@3.0.0-beta.83
632
+ - @robota-sdk/agent-interface-session@3.0.0-beta.83
633
+ - @robota-sdk/agent-interface-command@3.0.0-beta.83
634
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.83
635
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.83
636
+
637
+ ## 3.0.0-beta.82
638
+
639
+ ### Patch Changes
640
+
641
+ - Updated dependencies [c7f9203]
642
+ - @robota-sdk/agent-core@3.0.0-beta.82
643
+ - @robota-sdk/agent-framework@3.0.0-beta.82
644
+ - @robota-sdk/agent-interface-command@3.0.0-beta.82
645
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.82
646
+ - @robota-sdk/agent-interface-session@3.0.0-beta.82
647
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.82
648
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.82
649
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.82
650
+
651
+ ## 3.0.0-beta.81
652
+
653
+ ### Patch Changes
654
+
655
+ - 18b52cc: Built-in commands are offered to the model deliberately, each described for the model, and never
656
+ with a trust, credential or permission-widening action.
657
+
658
+ - `agent-interface-command` — `ICommand` gains `modelDescription?` (what the model is told, beside the
659
+ short `/help` line), and `modelInvocable` on a subcommand entry now narrows what the model may run.
660
+ - `agent-framework` — `ISystemCommand` gains `modelDescription?` and `modelRequiresPermission?`.
661
+ Once any subcommand of a model-invocable command declares `modelInvocable`, the model may run only
662
+ the bare command and the subcommands declared `true`; everything else, including an alias or an
663
+ undeclared subcommand, is refused before the command runs. The model-facing descriptor lists only
664
+ that subset. A model-requested monitor's command is now decided by the shell tool's gate (its
665
+ Bash/Shell rules, the mode and the prompt) and a refusal rejects with the new
666
+ `MonitorCommandRefusedError`. The `scriptedSession` test harness accepts `permissions` patterns.
667
+ - `agent-session` — `Session.checkToolPermission(toolName, toolArgs)` decides an action that has a
668
+ tool's effect by another route: that tool's PreToolUse hooks, then the gate's rules, mode,
669
+ remembered consent and prompt — never the command sandbox's auto-approval, since the action does
670
+ not run inside the sandbox.
671
+ - `agent-framework` also: `ICommandMCPActivationAdapter.userActionSurface?` tells `/mcp` whether the
672
+ user can type a session command, so the model's status names the terminal sign-in otherwise.
673
+ - `agent-command` — `/context` (bare and `list`), `/cost` (the report, not `budget`) and `/mcp`
674
+ (`status` only, without a prompt) are now model-invocable; `/memory approve` and `/memory reject`
675
+ are now user-only; the model's `/monitor` is decided by the shell gate rather than by consent to
676
+ the command's name. Every model-invocable command carries a model-facing description. The model's
677
+ `/mcp status` shows only safe names, states and the command to suggest, and a caller that does not
678
+ identify itself gets that view. `/context list` accounts only for turns still in context. New
679
+ `mcpUserActionNotice`, `mcpUserActionCommand` and `mcpUnavailableServersNotice` build the fixed
680
+ notices.
681
+ - `agent-command-workflows` — `/workflows` carries a model-facing description.
682
+ - `agent-mcp` — `createDiscoveredTool` accepts `authFailureNotice`: a call the server refuses for
683
+ authentication returns that host text instead of the generic failure.
684
+ - `agent-cli` — an MCP server that did not start because the user must approve it, trust the
685
+ workspace or sign in is named to the model at the start of an interactive session with the
686
+ command to suggest, and a
687
+ signed-in OAuth server that refuses a call tells the model to suggest `/mcp login <server>` — or, in print and serve runs, the terminal
688
+ `robota mcp login <server>`.
689
+
690
+ A command whose bare form is a complete action declares `runsBare`, so choosing `/cost` or `/mcp`
691
+ from the autocomplete menu still runs it even though they now declare subcommands.
692
+
693
+ - Updated dependencies [3038eb7]
694
+ - Updated dependencies [02b7452]
695
+ - Updated dependencies [ec5e477]
696
+ - Updated dependencies [007fd90]
697
+ - Updated dependencies [18b52cc]
698
+ - Updated dependencies [9843fe6]
699
+ - @robota-sdk/agent-core@3.0.0-beta.81
700
+ - @robota-sdk/agent-interface-session@3.0.0-beta.81
701
+ - @robota-sdk/agent-framework@3.0.0-beta.81
702
+ - @robota-sdk/agent-interface-command@3.0.0-beta.81
703
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.81
704
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.81
705
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.81
706
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.81
707
+
708
+ ## 3.0.0-beta.80
709
+
710
+ ### Major Changes
711
+
712
+ - e82215f: **ARCH-011: replace the ambiguous transport lifecycle stub with executable conformance.**
713
+
714
+ `ITransportAdapter` now requires a frozen `service | runner` lifecycle descriptor. `start()` resolves
715
+ at the concrete transport's documented readiness boundary; start before attach and repeated active
716
+ start reject a stable lifecycle error, repeated stop is safe, and stopped adapters can reattach and
717
+ restart.
718
+
719
+ Runner adapters launch separately and expose a typed terminal outcome through
720
+ `waitForCompletion()`. The registry accepts base adapters, rejects duplicate names, keeps
721
+ configuration as an optional capability, returns complete ordered records whose pending slots become
722
+ registry-owned `abandoned` outcomes on stop/rollback, and exposes a real-runner-only first-failure
723
+ wait. It serializes startup/stop, rejects active restart before mutation, and reverses partial startup
724
+ from the currently failing adapter with typed safe rollback details. Runtime host and serve mode
725
+ propagate real nonzero runner results without treating normal shutdown abandonment as failure.
726
+
727
+ HTTP, MCP, both WebSocket adapters, WebRTC, and headless invoke one shared public conformance kit.
728
+ The former `TuiTransport` export is removed because it ignored the attached session; use `renderApp`
729
+ or `TuiInteractionChannel`, which honestly own their session lifecycle.
730
+
731
+ - 2ebff01: Stop presenting `TuiInteractionChannel` as an `IInteractionChannel`: the TUI owns its session and
732
+ subscribes to the full session-event surface, so its unused no-op `write()` method is removed.
733
+ - 64ba748: **BREAKING — ARCH-042: project filesystem access is now an explicit, host-issued authority instead of an ambient consequence of `cwd`.**
734
+
735
+ `@robota-sdk/agent-framework` adds `WorkspaceTrustService` and the opaque
736
+ `IWorkspaceProjectAuthority`, plus bounded reader, settings-writer, state-storage, and mutation
737
+ facets. Public session, settings, context, checkpoint, memory, contribution, query, and replay
738
+ contracts consume those facets. A caller that does not supply `projectAccess` is deliberately
739
+ restricted to user-owned host state and receives no project filesystem capability.
740
+
741
+ The framework removes or renames ambient Node/project exports. Migrate `checkSettingsFile` to
742
+ `checkNodeHostSettingsFile`, `readMergedProviderSettingsFromPaths` to
743
+ `readMergedProviderSettingsFromSources`, `resolveProviderSettingsWriteTargetPath` to
744
+ `resolveProviderSettingsWriteTarget`, `FileSystemMemoryStore` / `createFileSystemMemoryStore` to
745
+ `WorkspaceMemoryStore` / `createWorkspaceMemoryStore`, and `PluginSettingsStore` to
746
+ `NodeHostPluginSettingsStore`. Host-only git helpers now carry the `FromNodeHost` suffix.
747
+ `projectPaths`, `resolveSettingsPathForScope`, and `getProviderSettingsPaths` are removed; project
748
+ consumers must use the authority facets rather than recover absolute paths.
749
+
750
+ `@robota-sdk/agent-session` renames the Node filesystem implementation `SessionStore` to
751
+ `NodeSessionStore` and adds explicit session-log/external-payload source and sink ports. Session
752
+ replay no longer resolves external payload files from an ambient directory.
753
+
754
+ `@robota-sdk/agent-interface-transport` changes `ISkillExecutionPort.loadCommands(cwd, home?)` to
755
+ the authority-bound `loadCommands()` and removes the optional absolute-path leak
756
+ `IInteractiveSessionStore.getFilePath`. `@robota-sdk/agent-command` consequently replaces the
757
+ `cwd` option of `createSkillsCommandModule` with required `contributionSources`; default command
758
+ composition accepts explicit contribution sources and discovers no project skills when none are
759
+ provided.
760
+
761
+ `@robota-sdk/agent-cli`, `@robota-sdk/agent-transport`, and
762
+ `@robota-sdk/agent-transport-tui` thread the trusted-or-restricted project decision through every
763
+ session surface. Embedded callers that need project settings, state, context, skills, checkpoints,
764
+ or mutation must mint access through `WorkspaceTrustService` and pass the returned
765
+ `projectAccess` (and a separately approved mutation/settings facet where required). Omitting it is
766
+ still type-compatible but is behaviorally breaking: the surface now fails closed instead of
767
+ reading or writing the current directory.
768
+
769
+ - f3fe3db: The terminal renderer no longer reads `PRODUCT_SCREEN_READER_STARTUP_QUIET_MS` or
770
+ `PRODUCT_SCREEN_READER_PREPARK_MS` from the process environment. SDK hosts calling `renderApp`
771
+ directly should pass raw timing choices and diagnostic labels through the new optional
772
+ `screenReaderPacing` render option. Without it, the renderer uses its existing 900 ms startup
773
+ quiet period and 50 ms pre-write park when screen-reader mode is enabled. The Robota CLI still
774
+ reads the same environment variables and preserves their validation, bounds, and warnings.
775
+ - 724d5b6: The terminal renderer no longer reads `PRODUCT_IME_CURSOR` or `PRODUCT_TURN_MARKS` from the process environment. SDK hosts calling `renderApp` directly should pass cursor and turn-mark choices through the optional `terminalCapabilities` render option. Without a host choice, the renderer keeps its terminal and TTY defaults. The Robota CLI still reads both environment variables and preserves its exact `1` and `0` overrides.
776
+
777
+ ### Minor Changes
778
+
779
+ - 9c19c50: `/fork [name] [--same-dir]` copies the live conversation into a background session.
780
+
781
+ The session writes a copy of its own record under a fresh id — messages, system prompt, tool schemas
782
+ and full history, and deliberately not the sandbox snapshot, goal, plan or branch — then spawns a
783
+ background job carrying only `resumeSessionId`. The child restores that record itself, so no
784
+ conversation crosses the child-process boundary and the worker start payload's key set is unchanged.
785
+ The background panel gains an `attach` control that switches the terminal onto the forked session; it
786
+ is a view switch, never a merge, and a missing record or a terminal task is refused with the task's
787
+ own status.
788
+
789
+ **`@robota-sdk/agent-framework` is `major` for one reason: `ICommandHostSessionAccess` gains a
790
+ required member.** `forkSession({ name? })` is not optional, so an external implementation of that
791
+ role port stops compiling until it adds the method. Every other change in this set is additive:
792
+
793
+ - `agent-interface-execution` — `TExecutionControl` gains `'attach'`.
794
+ - `agent-interface-command` — `TCommandUiIntent` gains `{ type: 'switch-session'; sessionId }`.
795
+ - `agent-subagent-runner` — `ISubagentWorkerComposition` gains the optional `openSessionStore`, and
796
+ the worker resumes a record when the job names one. A composition that registers no store and
797
+ receives no `resumeSessionId` behaves exactly as before.
798
+ - `agent-framework` also gains the fork-record builder, `SessionTurnMemory`, and
799
+ `IAgentBackgroundTaskRequest.resumeSessionId?`; `loadSessionRecord` now returns
800
+ `restoredSystemPrompt`, which makes a record field that was written and never read take effect on
801
+ restore.
802
+ - `agent-executor`, `agent-command`, `agent-transport-tui`, `agent-cli` — the spawn input, the
803
+ `/fork` module and the attach control that carry it to the surface.
804
+
805
+ - af2f2ad: `/cd <directory>` continues the conversation in another directory.
806
+
807
+ - **A move is a new session in the target directory.** In the TUI, Robota saves a copy of the
808
+ conversation where the target's session store will find it, ends the current run through its
809
+ normal end-of-life flow, and starts again in the target directory resuming that copy. The target's
810
+ settings, trust decision, tools, skills and `AGENTS.md` apply, exactly as if Robota had been
811
+ launched there. The process boundary makes the move atomic, so no tool call can straddle it.
812
+ - **The system prompt is kept as recorded**, so a provider's prompt cache survives. One appended
813
+ `<workspace-move>` message tells the model the new directory, and which project instructions now
814
+ apply.
815
+ - **Refused** while a turn is running or a background task is still running, for a missing directory
816
+ or the current one, and for a target a `Cd(...)` deny rule names.
817
+ - **Access never widens:** a restricted session stays restricted after a move, and a trusted session
818
+ takes the target's own trust decision.
819
+ - New contracts: the `workspace-move` host action, `ICommandWorkspaceAdapter` /
820
+ `IWorkspaceMoveRequest`, `InteractiveSession.moveWorkspace`, and the `workspaceMovedFrom` session
821
+ option. The CLI's `--moved-from` and `--restricted-workspace` flags are internal.
822
+
823
+ - 4c5148e: ARCH-005 Stage S2 — `robota` is now expressed as an `IProductProfile` and assembled by `assembleProduct`;
824
+ the hand-wired composition root in `agent-cli` is gone.
825
+
826
+ - **`@robota-sdk/agent-product`** — provider construction returns IN-KERNEL. `assembleProduct` builds the
827
+ provider from `providerDefinitions` + the shell's already-resolved `providerSettings` via agent-core's
828
+ pure `createProviderFromConfig`; `provider` is now an OPTIONAL injected override. Both are optional, so a
829
+ Mode A profile can carry only `providerDefinitions`. The fold stays pure and IO-free — every
830
+ settings/env/file read still happens in the shell. Adds `IAssembledProduct.buildRuntimeOptions`, the pure
831
+ overlay `buildRuntime` delegates through, and `IAssembledProduct.providerDefinitions`.
832
+ **Breaking for pre-release consumers:** `IProductProfile.providerDefinitions` is now required and
833
+ `IProductProfile.provider` / `IAssembledProduct.provider` are now optional.
834
+ - **`@robota-sdk/agent-framework`** — a scoped, additive session seam: `agentDefinitions` on
835
+ `TInteractiveSessionOptions` / `ICreateSessionOptions`, composed into the built-in agent tier ahead of
836
+ `BUILT_IN_AGENTS`, so capability-pack subagents actually reach the runtime. Precedence: discovered
837
+ project/user definitions > injected > built-in. `AgentDefinitionLoader` now dedupes within that tier
838
+ (first wins). Absent ⇒ unchanged behavior.
839
+ - **`@robota-sdk/agent-transport` / `@robota-sdk/agent-transport-tui`** — forward the optional
840
+ `agentDefinitions` through the headless and TUI channels so every Robota surface carries the seam.
841
+ - **`@robota-sdk/agent-cli`** — `robota`'s identity (branding, provider surface, presets,
842
+ `packs: [codingPack]`, base command modules, injected transports/runners/subagent factory) is declared as
843
+ data in a product profile and folded by `assembleProduct`. The coding command modules (`/shell`,
844
+ `/editor`) now come from `pack-coding` rather than the base set, so the pack is load-bearing. What remains
845
+ in the CLI is product-shell only: arg parsing, settings/file IO, terminal notices, first-run/init/
846
+ `--configure`, memory + session-resume UX, and print/serve/TUI mode dispatch.
847
+
848
+ End-user `robota` behavior is unchanged in substance — the assembled command-module set, provider surface,
849
+ tool set, subagent roster, and preset resolution all match the pre-change assembly — with one accepted
850
+ cosmetic delta: `/shell` and `/editor` now appear at the END of `/help` output and of the slash-command
851
+ autocomplete popup rather than mid-list, because they arrive from `pack-coding` and both surfaces render in
852
+ module-insertion order. Same commands, same behavior, different position.
853
+
854
+ - 0116a29: ARCH-006 completion — Robota's capability packs now OWN its tool surface, and `pack-coding` is built by a
855
+ context-bound factory.
856
+
857
+ - **`@robota-sdk/pack-coding` (BREAKING)** — the module-level `codingPack` constant is **removed** and
858
+ replaced by `createCodingPack({ cwd, sandboxClient })`, with `cwd` **required**. This is a safety change,
859
+ not a style one: `agent-tools` disarms its working-directory path guard when `cwd` is `undefined`, so a
860
+ pack whose file tools are built with no options contributes an **unsandboxed** `Read`/`Write`/`Edit`.
861
+ That was inert while `agent-framework` always supplied its own context-bound default tier, but ARCH-006
862
+ lets a product hand the whole tool surface to its packs (`defaultTools: []`) — and a context-free pack in
863
+ that position is a real hole. Keeping a zero-option export beside that seam would be a loaded gun, so it
864
+ is gone rather than deprecated. Each call returns fresh instances bound to the supplied context, so two
865
+ products in one process get independently-scoped file tools. Migration: replace `codingPack` with
866
+ `createCodingPack({ cwd: process.cwd() })`.
867
+ - **`@robota-sdk/agent-cli`** — `robota`'s packs are built from the shell's resolved `cwd`
868
+ (`createProductCapabilityPacks({ cwd })`) before command setup, and the runtime seam passes
869
+ `PRODUCT_PACKS_OWN_TOOL_SURFACE` (an empty `defaultTools`) so the framework's `createDefaultTools()` tier
870
+ is REPLACED. Every tool Robota runs now arrives from a capability pack: dropping a pack drops its tools,
871
+ exactly as it already dropped its command modules and subagents.
872
+ - **`@robota-sdk/agent-transport` / `@robota-sdk/agent-transport-tui`** — forward the optional
873
+ `additionalTools` and `defaultTools` through the headless and TUI channels, mirroring the existing
874
+ `agentDefinitions` pass-through, so print, serve and TUI carry an identical tool surface.
875
+
876
+ End-user `robota` behavior is unchanged, including the security property: the real binary still answers a
877
+ read outside the working directory with `Access denied: "…" is outside the working directory`.
878
+
879
+ - 2ebff01: Emit the complete persisted checkpoint and branch lifecycle, forward plan, context-refresh, and
880
+ branch events through protocol transports, and render deterministic bounded notices in the TUI.
881
+ Transport-owned delivery failures now enter the owning carrier cleanup lifecycle without reversing
882
+ an already-committed session operation.
883
+ - 1e3f91a: CMD-004 Phase 2 Stage E (breaking, beta line): the legacy `TCommandEffect` union and
884
+ `ICommandResult.effects` are DELETED. Commands emit the split contract directly —
885
+ `hostActions` (session-executed via `ICommandHostAdapters`; works headless and remote) and
886
+ `uiIntents` (requester-routed `ui_intent` session events with UI-neutral `show-*` names).
887
+ Final carriers for the former notification effects: `session_renamed` and the new
888
+ `history_cleared` are BROADCAST session events (forwarded to every WS surface, folded by the
889
+ TUI transcript/title and the GUI reducer's new `sessionName`/transcript-reset state);
890
+ `session-execution-started` rides `result.data.sessionExecution`; the plugin-registry refresh
891
+ rides `result.data.pluginRegistryReloaded`. A mechanical grep floor
892
+ (`command-effect-grep-floor.test.ts`) keeps `tui-requested`/`TCommandEffect`/`effects:` out of
893
+ every `packages/*/src` production tree.
894
+ - 90e7a10: The default background observer warning code and exported `OBSERVER_FAILURE_WARNING_CODE` value
895
+ change from `PRODUCT_BACKGROUND_OBSERVER_FAILURE` to `BACKGROUND_OBSERVER_FAILURE`. Hosts matching
896
+ the old warning code should match the new neutral code or provide `observerFailureWarningCode` in
897
+ their background manager or session options. The Robota CLI supplies its existing code explicitly
898
+ across print, goal, serve, MCP, and TUI sessions.
899
+ - 44393be: Add the `/remote-control` enable path (REMOTE-008 Stage B4-2b) — turn on P2P remote control locally, get
900
+ a QR + link, and a paired device co-drives the SAME live session over pairing-gated WebRTC. The command
901
+ is a declarative trigger returning `remote-control-enable-requested`/`-stop-requested` effects (SSOT
902
+ agent-interface-transport) and reads state via a new `ICommandHostAdapters.remoteControl.getStatus()`;
903
+ the TUI dispatches the effects to injected callbacks; all transport construction lives at the agent-cli
904
+ composition root (`WsSignalingClient` + pairing-gated `WebRtcTransport`, relay URL from
905
+ `transports.webrtc.options.relayUrl`, QR/link rendered into history). Fail-closed: no relay configured ⇒
906
+ does nothing; pairing mismatch/timeout ⇒ the session is never exposed. Consumes REMOTE-007 so a paired
907
+ remote owner answers their own permission/ask prompts over the WebRTC channel.
908
+ - fde558e: Forward organization policy through TUI, print, and goal sessions so blocked commands are enforced consistently. Preserve print/goal preset generation, language, prompt-seed, and structured-response options through the headless channel, and guard declared session-capability projections against silent field loss.
909
+
910
+ ### Patch Changes
911
+
912
+ - 9368d00: Advisor escalation: the main model can consult a second model at the decision points it chooses.
913
+
914
+ With an advisor configured (`--advisor <profile>[:<model>]`, or the `advisorModel` setting that
915
+ `/advisor` saves; the flag wins), the session gets an `Advisor({ question? })` tool. The advisor reads
916
+ the whole conversation — system prompt, messages, tool calls and results — serialized into one prompt
917
+ and sent with `toolChoice: 'none'`, truncated from the front to fit its window with the system prompt
918
+ kept, and declines when even that does not fit. Its answer comes back framed as guidance to verify;
919
+ an empty or refusing answer reads as declined. Calls are limited to two per turn and a fixed number
920
+ per session, parallel calls in one round share those limits, and a repeated question in the same
921
+ turn returns the earlier answer. A request that was sent counts even when the provider failed (the
922
+ decline is reported by class, never by its text); only a call declined before sending gives its slot
923
+ back.
924
+
925
+ Advisor usage, including in-process subagents', is recorded where each turn's usage is recorded —
926
+ the persisted session history, under the advisor's own provider and model — so `/cost`, usage reports
927
+ and resumed sessions include it. `/cost` now totals that history and prices each part on its own
928
+ model, showing "mixed" when more than one model was priced.
929
+
930
+ `/advisor <model>` and `/advisor off` change only where calls go, never the tool list, so the main
931
+ model's prompt cache is not invalidated mid-session; the tool is added only when a session starts
932
+ with an advisor. Sending history to a destination (provider type and endpoint host) the main model
933
+ does not already use needs a one-time consent per destination, kept in the user settings file; a
934
+ refusal is remembered for the session. The organization's `allowedProviders` applies, and
935
+ `PRODUCT_DISABLE_ADVISOR=1` turns it off completely. In-process subagents inherit the advisor, bound
936
+ to their own conversation; child-process subagents do not get it.
937
+
938
+ **`@robota-sdk/agent-framework` is `major` for one reason: `ICommandHostSessionAccess` gains a
939
+ required member,** `getSessionUsage()`, the session's persisted usage records. An external
940
+ implementation of that role port stops compiling until it adds the method. The rest is additive.
941
+
942
+ - `agent-session` — `formatConversationEntries`, the one text rendering of a conversation, now used
943
+ by compaction too. It keeps tool calls and results, marks a user message a peer session sent
944
+ (`user [from "peer:<id>"]`), and JSON-encodes every message onto one line so no content can forge
945
+ another entry; compaction previously flattened all of this. `Session.getProvider()` returns the
946
+ provider the session currently uses.
947
+ - `agent-framework` — `AdvisorController`, `createAdvisorTool`, the advisor spec helpers, provider
948
+ destinations (`describeProviderDestination`, `rememberProviderDestination`), `getSessionUsage` and
949
+ `ISessionUsageRecord`, the `onUsageRecorded` session option, and the optional `advisor` command
950
+ host adapter. Session assembly binds a host-supplied Advisor tool to the session holding it.
951
+ - `agent-command` — the `/advisor` command module; `/cost` reads the session's persisted usage.
952
+ - `agent-cli` — the `--advisor` flag, `advisorModel` setting, per-destination consent store and kill
953
+ switch.
954
+ - `agent-ui-terminal` — a usage line from another source (the advisor, a background task) names that
955
+ source and leaves out the context window it does not have.
956
+ - `agent-session-analytics` — personal usage counts an advisor call's tokens and cost toward its
957
+ turn without counting it as a turn.
958
+
959
+ - 2711ec6: One broken skill or agent file no longer stops the session.
960
+
961
+ Skill, command and agent definitions are shared with other hosts through `.claude`, and those hosts
962
+ define fields of their own. The frontmatter decoder now validates only the fields Robota owns and
963
+ ignores the rest (nested `metadata` entries included); a malformed value of an owned field is still
964
+ refused. A refused file is skipped with a single warning and still claims its name, so a
965
+ lower-priority definition cannot stand in for it. An empty `argument-hint` reads as no hint. When
966
+ initialization does fail, the session reports the cause to readiness probes instead of "not
967
+ initialized", so the terminal shows the reason at once rather than a 15-second timeout.
968
+
969
+ The terminal also stops printing type names for message-less telemetry records, keeps its own notices
970
+ in place across a history sync so the following answer is not skipped, and CLI diagnostics print
971
+ their context instead of `[object Object]`, through the console so Ink renders them above the frame.
972
+
973
+ - 2ebff01: Remove the obsolete session-level permission and ask callback options and the stale
974
+ `permission-resolved` display event. Prompt requests now settle exclusively through the canonical
975
+ request events and session resolution methods, while leaf adapters fail closed when callbacks reject.
976
+ - 3a8876b: ARCH-029: decompose the command host into role ports
977
+
978
+ `ICommandHostContext`, `ICommandSessionRuntime` and `IAgentJobHostContext` are now empty `extends`
979
+ aggregates over 26 named role ports, so a command declares only the capability it uses. A role port
980
+ is a supertype of the aggregate, so narrowing a declared parameter still satisfies
981
+ `ISystemCommand.execute` by contravariance.
982
+
983
+ All 79 members are preserved (46 + 18 + 15) with the declaration kind unchanged, so implementors and
984
+ callers stay source-compatible.
985
+
986
+ **Breaking:** every role-port member is now required except the adapter bag, whose contents are
987
+ genuinely variational. 38 members went from optional to required. A host that previously omitted a
988
+ member must now provide one — including `validateCurrentSessionReplayLog`, which was an override
989
+ with a framework-computed default and no implementor. `createTestCommandHost`,
990
+ `createTestAgentJobHost` and `createTestSessionRuntime` are published from
991
+ `@robota-sdk/agent-framework/testing` as conformant, cast-free doubles for exactly this.
992
+
993
+ Also removed: the `clearConversationHistory` fallback that reached past the host into
994
+ `getSession().clearHistory()`. Those were never the same operation — the host path also broadcasts
995
+ `history_cleared` to every attached surface, so a fallback clear left other surfaces still showing
996
+ the transcript.
997
+
998
+ - 4f3c075: Assemble complete, verified package generations before switching build output; preserve the previous generation on build failure and pack only verified regular-file images. Include copied CLI web assets in affected-build ordering and artifact transfer. Preserve the CLI version in managed build paths. Public runtime contracts remain compatible (patch).
999
+ - 07b627f: A local peer can now be answered, and what its turn may do depends on where it runs.
1000
+
1001
+ - `agent-core`: the permission evaluator takes a peer turn's authority as one more input
1002
+ (`IPermissionEvaluationContext.peerTurn`), decided after the deny list and ceiling and before
1003
+ bypass and allow rules. A peer on another host uses no tool. A peer on the same host may use an
1004
+ inspect-class tool that declares `workspacePaths`, only when every named location resolves inside
1005
+ the workspace and is not a credential (`isSecretPath`); write and execute tools are refused unless
1006
+ enabled, and then every use asks. A tool declaring `repliesToPeer` exists only in a peer turn and
1007
+ asks once the turn used another tool. New: `isToolAvailableInPeerTurn`, `TPeerReach`,
1008
+ `IPeerTurnAuthority`. `IRunOptions.withholdHostedTools` leaves a provider's hosted tools out of a
1009
+ run's requests (`nativeWebTools` with `false` withholds a hosted tool for one call).
1010
+ - `agent-tools`: `Read` and `Glob` declare the arguments that say where they look. `Grep` does not:
1011
+ it reads files it was never named, so a peer turn does not get it.
1012
+ - `agent-session`: `ISessionRunOptions.peerReach` makes a run a peer turn for the permission policy;
1013
+ every ask in it needs a fresh approval, and its requests carry no provider-hosted tool. `ISessionOptions.allowPeerChanges` enables write and execute
1014
+ tools for same-host peer turns.
1015
+ - `agent-interface-session`: `ISubmitOptions.peer` (`IPeerTurnContext`) carries a peer turn's reach,
1016
+ the message it answers and the session a reply goes to.
1017
+ - `agent-interface-session-mobility`: `IPeerMessage.inReplyTo` threads a conversation;
1018
+ `peerReachOf(admission)` maps admission to a reach.
1019
+ - `agent-framework`: a peer turn is offered what its origin allows, and a new `peer_reply` tool
1020
+ answers the peer that sent the message, threaded to it. The setting `peers.allowChanges` enables
1021
+ write and execute tools for same-host peer turns.
1022
+ - `agent-ui-terminal`: a permission prompt in a peer turn names the requesting peer.
1023
+ - `agent-cli`: incoming peer turns carry their reach and reply route; a conversation is limited in
1024
+ depth and in how often this session answers it, and a reply over a limit is not sent and the
1025
+ operator is told.
1026
+ - `agent-provider-anthropic`, `agent-provider-openai-compatible` (Qwen): a request whose
1027
+ `nativeWebTools` sets a hosted tool to `false` is sent without it.
1028
+
1029
+ - 9665c6e: Make the permission and "ask the user" flows transport-neutral (REMOTE-007 / B4-2a). A session now
1030
+ emits `permission_request` / `ask_request` / `prompt_resolved` events and exposes
1031
+ `resolvePermission` / `resolveAsk`, so any attached surface — local TUI, a WS/WebRTC driver, or a web
1032
+ UI — can render and answer the SAME prompt (local == remote). The framework builds event-emitting
1033
+ default handlers bound to the session emitter (id-keyed parking, fail-closed on zero listeners / on
1034
+ detach / backstop, teardown drain on abort/cancelQueue/shutdown), replacing the injected
1035
+ askHandler/permissionHandler at their source. `getUserInteraction()` is gated on the `ask_request`
1036
+ listener count so the headless "no-human ⇒ proceed" contract is preserved. The WS protocol carries the
1037
+ new events + `permission-response` / `ask-response` verbs, and WebRTC gets them for free via the shared
1038
+ handler. No `/remote-control` enable path is added.
1039
+ - c7fa299: REMOTE-003 + REMOTE-006 (merged — net behavior; the interim deny-by-default gate never appeared in a
1040
+ published version): commands now carry an invocation source. A `'remote'` value is added to the command
1041
+ invocation source (SSOT relocated to `@robota-sdk/agent-interface-transport`, re-exported by
1042
+ `agent-framework`) and an optional `source` is threaded into
1043
+ `IInteractiveSession.executeCommand(name, args, source?)` (defaults to `'user'`, so all local callers are
1044
+ unchanged). The shared `createWsHandler` tags transport-origin commands `'remote'`. Policy: local == remote
1045
+ (owner principle) — pairing is the sole trust boundary, so a transport-origin command runs exactly as a
1046
+ locally-typed one under the universal permission system (permission modes + PermissionEnforcer + the
1047
+ ask/approval handler); `createDefaultRemoteCommandPolicy()` allows by default. The `IRemoteCommandPolicy`
1048
+ seam remains as an OPTIONAL, user-configured restriction, and the genuinely-remote WebRTC path stays
1049
+ pairing-gated.
1050
+ - 1c8fbdf: Stabilize the TUI input box bottom border during active output: hand-draw it as a `<Text>` row (mirroring the top border) instead of a Yoga-synthesized Box border, which could drop glyphs under rapid re-render at full terminal height (SCREEN-003).
1051
+ - Updated dependencies [9c19c50]
1052
+ - Updated dependencies [7b6234c]
1053
+ - Updated dependencies [5307f8a]
1054
+ - Updated dependencies [b462ee7]
1055
+ - Updated dependencies [08a9bd6]
1056
+ - Updated dependencies [37b4bd7]
1057
+ - Updated dependencies [818f0c8]
1058
+ - Updated dependencies [4eea54b]
1059
+ - Updated dependencies [1698be4]
1060
+ - Updated dependencies [a5961c9]
1061
+ - Updated dependencies [9368d00]
1062
+ - Updated dependencies [d4189b9]
1063
+ - Updated dependencies [9edae52]
1064
+ - Updated dependencies [4078a72]
1065
+ - Updated dependencies [4c73a0b]
1066
+ - Updated dependencies [af2f2ad]
1067
+ - Updated dependencies [267af5f]
1068
+ - Updated dependencies [196a900]
1069
+ - Updated dependencies [f336838]
1070
+ - Updated dependencies [34e50f0]
1071
+ - Updated dependencies [722e88a]
1072
+ - Updated dependencies [a5cc36e]
1073
+ - Updated dependencies [d23c848]
1074
+ - Updated dependencies [b70fa3d]
1075
+ - Updated dependencies [2711ec6]
1076
+ - Updated dependencies [4dd45cc]
1077
+ - Updated dependencies [4c5148e]
1078
+ - Updated dependencies [37af5dc]
1079
+ - Updated dependencies [807d161]
1080
+ - Updated dependencies [fec722f]
1081
+ - Updated dependencies [e82215f]
1082
+ - Updated dependencies [52b7346]
1083
+ - Updated dependencies [9db63ee]
1084
+ - Updated dependencies [b078afa]
1085
+ - Updated dependencies [2ebff01]
1086
+ - Updated dependencies [9db63ee]
1087
+ - Updated dependencies [2ebff01]
1088
+ - Updated dependencies [2d3b2c0]
1089
+ - Updated dependencies [b078afa]
1090
+ - Updated dependencies [2d3b2c0]
1091
+ - Updated dependencies [baa6863]
1092
+ - Updated dependencies [2d3b2c0]
1093
+ - Updated dependencies [3a8876b]
1094
+ - Updated dependencies [4772067]
1095
+ - Updated dependencies [7b85767]
1096
+ - Updated dependencies [0f98419]
1097
+ - Updated dependencies [64ba748]
1098
+ - Updated dependencies [9fbab1b]
1099
+ - Updated dependencies [d312755]
1100
+ - Updated dependencies [a009f5b]
1101
+ - Updated dependencies [1e3f91a]
1102
+ - Updated dependencies [4f3c075]
1103
+ - Updated dependencies [475e085]
1104
+ - Updated dependencies [e477440]
1105
+ - Updated dependencies [9dcb5da]
1106
+ - Updated dependencies [a95ca85]
1107
+ - Updated dependencies [b6d14ce]
1108
+ - Updated dependencies [0382a51]
1109
+ - Updated dependencies [93d061d]
1110
+ - Updated dependencies [39554a1]
1111
+ - Updated dependencies [d28430a]
1112
+ - Updated dependencies [bed26ea]
1113
+ - Updated dependencies [fe48835]
1114
+ - Updated dependencies [1e40b5b]
1115
+ - Updated dependencies [7669851]
1116
+ - Updated dependencies [4b76cfa]
1117
+ - Updated dependencies [d9bd9ec]
1118
+ - Updated dependencies [8865acf]
1119
+ - Updated dependencies [90e7a10]
1120
+ - Updated dependencies [fcb0da3]
1121
+ - Updated dependencies [07b627f]
1122
+ - Updated dependencies [d0de5b2]
1123
+ - Updated dependencies [9665c6e]
1124
+ - Updated dependencies [44393be]
1125
+ - Updated dependencies [c7fa299]
1126
+ - Updated dependencies [5134b3b]
1127
+ - Updated dependencies [dd444c1]
1128
+ - Updated dependencies [1f57e7f]
1129
+ - Updated dependencies [833afe1]
1130
+ - Updated dependencies [d6b9404]
1131
+ - Updated dependencies [7863b16]
1132
+ - Updated dependencies [fde558e]
1133
+ - Updated dependencies [db5c439]
1134
+ - Updated dependencies [4a01a87]
1135
+ - Updated dependencies [cbee54e]
1136
+ - Updated dependencies [5c5ff23]
1137
+ - Updated dependencies [9814afc]
1138
+ - Updated dependencies [242a644]
1139
+ - @robota-sdk/agent-interface-execution@3.0.0-beta.80
1140
+ - @robota-sdk/agent-interface-command@3.0.0-beta.80
1141
+ - @robota-sdk/agent-framework@3.0.0-beta.80
1142
+ - @robota-sdk/agent-core@3.0.0-beta.80
1143
+ - @robota-sdk/agent-interface-session@3.0.0-beta.80
1144
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.80
1145
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.80
1146
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.80
1147
+
1148
+ ## 3.0.0-beta.79
1149
+
1150
+ ### Patch Changes
1151
+
1152
+ - @robota-sdk/agent-core@3.0.0-beta.79
1153
+ - @robota-sdk/agent-framework@3.0.0-beta.79
1154
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.79
1155
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.79
1156
+
1157
+ ## 3.0.0-beta.78
1158
+
1159
+ ### Patch Changes
1160
+
1161
+ - Updated dependencies [6f308d1]
1162
+ - @robota-sdk/agent-core@3.0.0-beta.78
1163
+ - @robota-sdk/agent-framework@3.0.0-beta.78
1164
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.78
1165
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.78
1166
+
1167
+ ## 3.0.0-beta.77
1168
+
1169
+ ### Patch Changes
1170
+
1171
+ - Updated dependencies
1172
+ - @robota-sdk/agent-core@3.0.0-beta.77
1173
+ - @robota-sdk/agent-framework@3.0.0-beta.77
1174
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.77
1175
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.77
1176
+
1177
+ ## 3.0.0-beta.76
1178
+
1179
+ ### Minor Changes
1180
+
1181
+ - 9df3a88: Split the consolidated `@robota-sdk/agent-transport` package into per-concern transport packages (DQ-AUDIT-005) so unrelated heavy dependencies (React/Ink, ws, Hono, MCP SDK) no longer share one publishable unit and are not dragged into non-TUI consumers' graphs:
1182
+
1183
+ - `@robota-sdk/agent-transport` — lean core: headless adapter + `TransportRegistry` + scripted-provider testing fixtures (no external runtime deps).
1184
+ - `@robota-sdk/agent-transport-tui` — React + Ink terminal UI.
1185
+ - `@robota-sdk/agent-transport-ws` — WebSocket transport + protocol (`agent-web-ui` now depends only on this for WS types).
1186
+ - `@robota-sdk/agent-transport-http` — Hono HTTP transport.
1187
+ - `@robota-sdk/agent-transport-mcp` — MCP server transport.
1188
+
1189
+ The default transport-registry wiring (pre-registering `WsTransport`) moves to the CLI composition root, removing the core→ws edge.
1190
+
1191
+ ### Patch Changes
1192
+
1193
+ - DQ-AUDIT-003 — restore agent-interface-tui to type-contracts only by removing its runtime type-guards (`isPickerInteraction`/`isConfirmInteraction`, which had zero call sites); narrow `TAnyTuiCommandInteraction` on its `onMissingArgs` discriminant instead. Documented the type-only downward references in agent-interface-transport.
1194
+ - Updated dependencies
1195
+ - Updated dependencies
1196
+ - Updated dependencies [c0a6287]
1197
+ - Updated dependencies [9df3a88]
1198
+ - Updated dependencies
1199
+ - Updated dependencies
1200
+ - Updated dependencies [576af62]
1201
+ - @robota-sdk/agent-core@3.0.0-beta.76
1202
+ - @robota-sdk/agent-interface-tui@3.0.0-beta.76
1203
+ - @robota-sdk/agent-framework@3.0.0-beta.76
1204
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.76