@robota-sdk/agent-ui-web 3.0.0-beta.99 → 3.0.2
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.
- package/CHANGELOG.md +419 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,423 @@
|
|
|
1
1
|
# @robota-sdk/agent-ui-web
|
|
2
2
|
|
|
3
|
+
## 3.0.2
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- @robota-sdk/agent-interface-command@3.0.2
|
|
7
|
+
- @robota-sdk/agent-interface-execution@3.0.2
|
|
8
|
+
- @robota-sdk/agent-interface-session@3.0.2
|
|
9
|
+
- @robota-sdk/agent-interface-transport@3.0.2
|
|
10
|
+
- @robota-sdk/agent-transport@3.0.2
|
|
11
|
+
|
|
12
|
+
## 3.0.1
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- @robota-sdk/agent-interface-command@3.0.1
|
|
16
|
+
- @robota-sdk/agent-interface-execution@3.0.1
|
|
17
|
+
- @robota-sdk/agent-interface-session@3.0.1
|
|
18
|
+
- @robota-sdk/agent-interface-transport@3.0.1
|
|
19
|
+
- @robota-sdk/agent-transport@3.0.1
|
|
20
|
+
|
|
21
|
+
## 3.0.0
|
|
22
|
+
### Major Changes
|
|
23
|
+
|
|
24
|
+
- 7b72344: Every client can offer the session's commands and skills and show its status. The GUI uses them as a
|
|
25
|
+
desktop-style composer.
|
|
26
|
+
|
|
27
|
+
- `agent-interface-session` is **`major` because `IInteractiveSession` gains required members**:
|
|
28
|
+
`ISessionCommands.listSkills()` and a `statusRead` capability, `getStatusSnapshot()`. The snapshot
|
|
29
|
+
holds session, model, permission mode, effort, context and goal. An external implementation stops
|
|
30
|
+
compiling until it adds both.
|
|
31
|
+
- `agent-transport` is **`major` for the same reason on `IProtocolSession`**. It also gains the wire
|
|
32
|
+
messages `get-commands` → `commands` and `get-status` → `session_status`. Both are reads that the
|
|
33
|
+
observe role may send.
|
|
34
|
+
- `agent-interface-command` gains `ICommandSkillListEntry`, moved from `agent-framework`, which
|
|
35
|
+
re-exports it unchanged.
|
|
36
|
+
- `agent-ui-web` is **`major` because its state changes shape**:
|
|
37
|
+
- A command's outcome and a finished turn's tool calls are now conversation entries: `messages` is
|
|
38
|
+
`TConversationEntry[]`.
|
|
39
|
+
- The `uiIntentNotices` list, `dismissUiIntentNotice`, `applyUiIntentEvent`,
|
|
40
|
+
`removeUiIntentNotice` and `IUiIntentNotice` are removed. An intent now answers with an info
|
|
41
|
+
line in the conversation.
|
|
42
|
+
- Session notices keep only `session-error` and `protocol-error`.
|
|
43
|
+
- The state gains `commandCatalog` and `sessionStatus`.
|
|
44
|
+
- `agent-command` registers `/theme` and `/keybindings` even without a terminal. They then answer
|
|
45
|
+
that they belong to the configured CLI terminal, instead of being unknown.
|
|
46
|
+
- `agent-framework`:
|
|
47
|
+
- `InteractiveSession.getStatusSnapshot()`.
|
|
48
|
+
- The main-thread row previews the last chat message instead of the last record's type.
|
|
49
|
+
- `agent-cli` serves the full GUI web app, renamed from `agent-cli-web` to `agent-gui-web`, on
|
|
50
|
+
`robota --serve --open`.
|
|
51
|
+
- 6ae3f28: A served runtime can list its workspace's sessions, start a new one and switch to another without the
|
|
52
|
+
process or any client connection restarting. The GUI shows them in a sessions sidebar.
|
|
53
|
+
|
|
54
|
+
- `agent-interface-session` is **`major`** for two reasons:
|
|
55
|
+
- It adds `ISessionListing`, `ISessionDirectory` and `ISessionSwitchedEvent`.
|
|
56
|
+
- `IInteractiveSessionEvents` gains a required `session_switched` event. An exhaustive map over the
|
|
57
|
+
event names stops compiling until it classifies the new event.
|
|
58
|
+
- `agent-transport` is **`major`** for the same kind of reason:
|
|
59
|
+
- It adds the wire messages `list-sessions` → `sessions`/`sessions_error`, `new-session`,
|
|
60
|
+
`switch-session`, and the broadcast `session_switched`.
|
|
61
|
+
- It adds a `sessionDirectory` handler option. A refusal to switch comes back as a
|
|
62
|
+
`protocol_error` carrying the reason.
|
|
63
|
+
- An exhaustive map over message types must add the new variants.
|
|
64
|
+
- `agent-transport-ws` passes a configured `sessionDirectory` to every connection.
|
|
65
|
+
- `agent-framework` is **`major` because `IRuntimeHostHandle.session` is now a `SessionSlot`**, not the
|
|
66
|
+
`InteractiveSession`, and `bindTransports` receives the slot.
|
|
67
|
+
- The slot is an `IInteractiveSession` that forwards to the current session. Members outside that
|
|
68
|
+
interface are read through `host.session.current`, which changes on a switch.
|
|
69
|
+
- Adds `InteractiveSession.whenInitialized()`.
|
|
70
|
+
- Exports `listUnreadableSessions`.
|
|
71
|
+
- `agent-ui-web` is **`major`**:
|
|
72
|
+
- `IWsSessionState` gains session listing state and actions.
|
|
73
|
+
- It adds a `SessionSidebar`.
|
|
74
|
+
- `/resume` opens the sidebar.
|
|
75
|
+
- `agent-cli`: `robota --serve` provides the session directory, and refuses a switch that would lose
|
|
76
|
+
work in progress. External-event grants belong to the run: a switch reopens them on the new session,
|
|
77
|
+
as the TUI already does.
|
|
78
|
+
- External-event grant history (spent tokens, rate windows, revocations) belongs to the run. The new
|
|
79
|
+
option `externalEventGrantHistory` (from `createExternalEventGrantHistory()`) is shared by every
|
|
80
|
+
session that a served runtime or the TUI builds. A session switch therefore replays no spent token
|
|
81
|
+
and resets no rate limit. The TUI previously had this gap when it switched sessions.
|
|
82
|
+
|
|
83
|
+
### Minor Changes
|
|
84
|
+
|
|
85
|
+
- 9ecffed: `robota daemon start | status | stop | unlock` runs one long-lived runtime per workspace for clients to attach to.
|
|
86
|
+
|
|
87
|
+
- **What a daemon is.** A supervised session marked as the workspace's daemon.
|
|
88
|
+
- Its control socket answers `connect` with the loopback WebSocket address, and only to a caller that names the daemon's current start.
|
|
89
|
+
- The token never touches disk or argv. The daemon removes it from its own environment, so its tools do not inherit it.
|
|
90
|
+
- **Starting.** `daemon start --json` prints one line, `{"id","url"}`, for a client host to read.
|
|
91
|
+
- Starts in one workspace take turns through a lock.
|
|
92
|
+
- A lock left behind by a start that is gone is never removed automatically. The start refuses and names `robota daemon unlock`.
|
|
93
|
+
- A daemon that cannot hand over its address fails its start and is not left running.
|
|
94
|
+
- **The desktop app attaches** to the workspace daemon and starts one only when none is running.
|
|
95
|
+
- Closing the window leaves the daemon running.
|
|
96
|
+
- If the daemon stops while the window is open, the window says so and offers Reconnect.
|
|
97
|
+
- **`agent-ui-web`.** The WebSocket session client reports when its retries are exhausted (`onGiveUp`, and `onConnectionLost` in `useWsSession`).
|
|
98
|
+
- 57f57f5: A daemon keeps several sessions live, and each client is bound to its own: one client's switch moves
|
|
99
|
+
only that client.
|
|
100
|
+
|
|
101
|
+
- `agent-interface-session`: `ISessionBinder`/`ISessionBinding`, the session-change refusal codes with
|
|
102
|
+
`isSessionChangeRefusal`, and listing rows that may say `live` and `clients`.
|
|
103
|
+
- `agent-framework`: `SessionPool` and `SessionChangeRefusal`.
|
|
104
|
+
- `agent-transport` (**major**): a new server frame, `session_change_failed`, which an exhaustive
|
|
105
|
+
consumer must handle. A refused `new-session` or `switch-session` now answers with it, carrying a
|
|
106
|
+
`code`, instead of `protocol_error`; both requests take an optional `requestId` that it echoes.
|
|
107
|
+
- `agent-transport-ws`: the `sessionBinder` option binds each connection to its own session and
|
|
108
|
+
releases the binding when the connection closes.
|
|
109
|
+
- `agent-cli`: `robota --serve` and the daemon keep up to four sessions live. Each WebSocket client and
|
|
110
|
+
attached terminal is bound to its own session; leaving a busy session is no longer refused, and only
|
|
111
|
+
the last driver of a session with a pending prompt is kept from leaving it. Grants and the supervised
|
|
112
|
+
name stay on the runtime's first session, and its reported activity covers every live session.
|
|
113
|
+
- `agent-ui-web`: a refused new or switch shows the host's reason as a notice (an older host's
|
|
114
|
+
`protocol_error` still does); the session sidebar marks live sessions and counts the other clients
|
|
115
|
+
on each; after a reconnect to a host that keeps sessions live, the GUI returns to the session it was on.
|
|
116
|
+
- `agent-ui-terminal`: an attached terminal shows why a switch was refused, and the picker's switch
|
|
117
|
+
stays pending until the host answers; the session picker marks live sessions and their clients.
|
|
118
|
+
- 9721162: The command catalog says who runs a command, and which surfaces can run it.
|
|
119
|
+
|
|
120
|
+
- **`agent-interface-command` (major).**
|
|
121
|
+
- Adds `TCommandRunner` (`'runtime' | 'client'`) and `TCommandSurface` (`'terminal' | 'gui'`).
|
|
122
|
+
- `ICommand` gains optional `runner` and `surfaces`.
|
|
123
|
+
- `ICommandListEntry` gains optional `surfaces` and a **required** `runner`. An implementation of `listCommands()`, or any code that constructs an `ICommandListEntry`, must now emit `runner`; a command that declares none gets `'runtime'`.
|
|
124
|
+
- **`agent-framework` (minor).**
|
|
125
|
+
- `ISystemCommand` gains optional `runner` and `surfaces`, and the command listing carries both.
|
|
126
|
+
- An undeclared runner resolves to `'runtime'`.
|
|
127
|
+
- `SessionTerminalHandoffGate` is exported for a terminal client that hands its own terminal to a command.
|
|
128
|
+
- **`agent-command` (minor).**
|
|
129
|
+
- `/shell`, `/editor`, `/theme` and `/keybindings` declare `runner: 'client'` and `surfaces: ['terminal']`.
|
|
130
|
+
- `createTerminalClientCommands()` builds the same four commands, from the same execute functions, for a terminal client to run itself. The set follows the preset's module selection.
|
|
131
|
+
- **`agent-ui-web` (minor).** The `/` menu marks a command that runs in the terminal with a "terminal" badge.
|
|
132
|
+
- 227ff3a: The GUI session surface (desktop app, `robota --serve --open`) is redesigned as a calm desktop app: readable
|
|
133
|
+
type in a bundled Pretendard, monospace only for code and paths, surfaces separated by tone instead of
|
|
134
|
+
outlines, and light and dark themes that follow the system. Agent replies read as prose, your messages sit
|
|
135
|
+
in bubbles, tool calls are single quiet lines, and the composer carries the model, mode and effort. The
|
|
136
|
+
permission prompt now shows what the tool was asked to run, and the title bar names the current session.
|
|
137
|
+
- f8a8a4d: The GUI surface's design now applies inside an `agent-ui` scope that each of its root components opens,
|
|
138
|
+
so an app with design tokens of its own can embed the surface without either overriding the other. Such
|
|
139
|
+
an app imports `@robota-sdk/agent-ui-web/styles/surface.css` into its Tailwind entry; a page that is only
|
|
140
|
+
the surface keeps importing `styles/theme.css` and puts `agent-ui` on its `<html>`. `ProductMark` and
|
|
141
|
+
`ProductWordmark` are exported. The browser remote client (`RemoteClient`) follows the same design, with
|
|
142
|
+
its pairing states centred on the page.
|
|
143
|
+
- 29486da: A lost connection no longer drops a typed message or takes the person out of their session. While the
|
|
144
|
+
transport is not `connected`, the composer keeps its draft and Send explains why it cannot submit
|
|
145
|
+
("Not connected"). A banner above the conversation — never a full-screen replacement — says "Connection
|
|
146
|
+
lost. Reconnecting…" while retries continue, and once they give up either offers a working Reconnect
|
|
147
|
+
(a host that can restart the runtime) or says how to reopen the page (a browser served by
|
|
148
|
+
`robota --serve --open`). A desktop Reconnect remembers the session the person was in and returns to it
|
|
149
|
+
once the restart's reload reconnects.
|
|
150
|
+
- e8d70ac: A first run finds a provider, instead of a dead end. `robota --serve` (and the daemon it starts) no
|
|
151
|
+
longer refuses when no provider is configured: it starts in setup mode, and the GUI's conversation area
|
|
152
|
+
shows a "Connect a model provider to start" panel with a "Set up provider" button in place of the
|
|
153
|
+
composer. Answering it configures and swaps in the first provider live, with no restart. A startup
|
|
154
|
+
failure now says why — `robota daemon start --json` and the desktop app's fatal screen report the
|
|
155
|
+
child's own reason instead of a generic "readiness channel closed", and the fatal screen gets a Try
|
|
156
|
+
again button. `trust status --json` and the desktop trust dialog list only sources whose state trust
|
|
157
|
+
would actually change, instead of naming one this platform could not determine; the dialog shows one
|
|
158
|
+
sentence and a collapsed Details section. `robota --serve --open` in an untrusted folder now asks at
|
|
159
|
+
the terminal (trust it, start Restricted, or quit) when someone is there to ask, instead of refusing
|
|
160
|
+
outright.
|
|
161
|
+
- 0ba247b: A tool result can now carry a view its source declared (an MCP app), and a surface can invoke a
|
|
162
|
+
runtime tool through the session's permission gate with a prompt. This is the contract and wiring
|
|
163
|
+
layer: nothing produces a view yet, and the GUI does not yet host one.
|
|
164
|
+
|
|
165
|
+
- `agent-core` — `IToolResult.view` carries an `IToolAppView` (source, `ui://` resource, mime type,
|
|
166
|
+
HTML, structured content, callable tools, the call's input). `view` is now a typed key of
|
|
167
|
+
`IToolResult`, so an extension that already used a `view` key with another type must rename it.
|
|
168
|
+
The view is display data: it never enters model context or the size that decides a spill, and a
|
|
169
|
+
result replaced by its reference keeps it.
|
|
170
|
+
- `agent-interface-session` — `invokeRuntimeTool` takes `permissionInteraction` (`'interactive'` or
|
|
171
|
+
the default `'deny'`), a `driverId` (a host that attributes prompts names it as the requester) and
|
|
172
|
+
an `executionId` its events carry. A finished model call's `tool_end` names its view with
|
|
173
|
+
`IToolState.appView` (`viewId`, source, resource), and the new
|
|
174
|
+
`ISessionToolAppViews.readToolAppView(viewId)` reads the document. A permission handler may take
|
|
175
|
+
`{ signal }`, and aborting it withdraws the prompt.
|
|
176
|
+
- `agent-session` — a direct call asks a person only when its caller says so, and the handler is
|
|
177
|
+
given the call's own signal; the tool end event carries the view, never in the logged result data.
|
|
178
|
+
- `agent-framework` — the view of a model's call is kept under a `viewId` the session mints, in a
|
|
179
|
+
bounded per-session store (16 views, 4 MiB each, 16 MiB in all, measured on the whole serialized
|
|
180
|
+
view), and read on demand, so the document never rides `tool_end` to every surface, never enters
|
|
181
|
+
the recorded history, and a repeated provider tool-call id cannot overwrite another turn's view.
|
|
182
|
+
A malformed view is dropped. A direct call keeps and names no view, recognised by the id it was
|
|
183
|
+
started with. A submission or agent wakeup that arrives while a direct call holds the session is
|
|
184
|
+
queued behind it, as during a turn, instead of refused. A direct call acting for a driver
|
|
185
|
+
attributes its permission prompt and tool events to that driver, and aborting its signal withdraws
|
|
186
|
+
an open prompt from every surface.
|
|
187
|
+
- `agent-transport` — a driving connection sends `call-app-tool` (answered by `app_tool_result`) and
|
|
188
|
+
`read-app-view` (answered by `app_view`). A call names its view and reaches only the tools that
|
|
189
|
+
view's source declared; a call or read that decodes but cannot be served answers `protocol_error`
|
|
190
|
+
echoing the `requestId`, while an observer's attempt is refused like any non-read. A call still
|
|
191
|
+
waiting on its prompt is cancelled when its connection goes away (for the resume bridge, when the
|
|
192
|
+
bridge is disposed). `maxFrameBytes` bounds an app answer to what a carrier's channel carries;
|
|
193
|
+
the WebRTC carrier uses a history page's worth. `IProtocolSession` now includes the runtime-tool
|
|
194
|
+
and app-view roles.
|
|
195
|
+
- `agent-ui-web` — the two new server messages are recorded as not rendered until the app-view host
|
|
196
|
+
consumes them.
|
|
197
|
+
|
|
198
|
+
An implementation of `IInteractiveSession` or `IProtocolSession` outside this repository must add
|
|
199
|
+
`readToolAppView` (and, for `IProtocolSession`, `listRuntimeTools` and `invokeRuntimeTool`); the
|
|
200
|
+
members are required so a host cannot silently lack them.
|
|
201
|
+
- fbb287d: Show a finished MCP tool call's app in an opaque frame with a source-bound JSON-RPC bridge. App callbacks use the session's view authority and permission prompt. Session changes and frame disposal reject pending local requests.
|
|
202
|
+
|
|
203
|
+
Hosts can provide a sandbox URL through `SessionSurface`. The web GUI serves a separate sandbox document with content restrictions and `Connection-Allowlist` enforcement. App execution requires Chromium 158 or newer and native network isolation; other browsers and hosts without the response policy show an unavailable message and retain the text result. A surface without a sandbox URL never reads the app document.
|
|
204
|
+
- 1e3f91a: CMD-004 Phase 2 Stage E (breaking, beta line): the legacy `TCommandEffect` union and
|
|
205
|
+
`ICommandResult.effects` are DELETED. Commands emit the split contract directly —
|
|
206
|
+
`hostActions` (session-executed via `ICommandHostAdapters`; works headless and remote) and
|
|
207
|
+
`uiIntents` (requester-routed `ui_intent` session events with UI-neutral `show-*` names).
|
|
208
|
+
Final carriers for the former notification effects: `session_renamed` and the new
|
|
209
|
+
`history_cleared` are BROADCAST session events (forwarded to every WS surface, folded by the
|
|
210
|
+
TUI transcript/title and the GUI reducer's new `sessionName`/transcript-reset state);
|
|
211
|
+
`session-execution-started` rides `result.data.sessionExecution`; the plugin-registry refresh
|
|
212
|
+
rides `result.data.pluginRegistryReloaded`. A mechanical grep floor
|
|
213
|
+
(`command-effect-grep-floor.test.ts`) keeps `tui-requested`/`TCommandEffect`/`effects:` out of
|
|
214
|
+
every `packages/*/src` production tree.
|
|
215
|
+
- c402d98: Expose a separate product-bound CLI entry and desktop/native host helpers for npm-only consumer applications. Publish the product configuration and browser client contracts needed by those applications.
|
|
216
|
+
|
|
217
|
+
### Patch Changes
|
|
218
|
+
|
|
219
|
+
- 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.
|
|
220
|
+
|
|
221
|
+
- **`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.
|
|
222
|
+
- **`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.
|
|
223
|
+
- 6e6b06b: A wire client can now render the whole session the way the in-process terminal UI does: the full
|
|
224
|
+
history, the context window as it changes, when the history changes, and where each turn came from.
|
|
225
|
+
|
|
226
|
+
- `agent-interface-session` is **`major`**: `ISessionConversationRead` gains a required
|
|
227
|
+
`getFullHistory()`. Any implementation of it, or of `IInteractiveSession`, must add it.
|
|
228
|
+
- `agent-transport` is **`major`**:
|
|
229
|
+
- It adds `get-history { fromIndex? }` → `history { startIndex, total, entries }`. The history
|
|
230
|
+
crosses one bounded page at a time (at most 256 KiB of entries; a single larger entry is sent
|
|
231
|
+
alone), from `fromIndex` (default 0), so no reply grows with the session. The client asks for
|
|
232
|
+
the next page after the previous one arrived. Entries are `IWireHistoryEntry`: a history entry
|
|
233
|
+
with an ISO 8601 `timestamp`. An observer may send it.
|
|
234
|
+
- `complete` and `interrupted` carry the turn's result without the session's history
|
|
235
|
+
(`TWireExecutionResult`); a client reads the history with `get-history`.
|
|
236
|
+
- It adds `get-prompts`: the host sends the permission and ask prompts still open as the
|
|
237
|
+
`permission_request` / `ask_request` frames that asked them, for a client that attached later.
|
|
238
|
+
An observer may not send it.
|
|
239
|
+
- `pending` gains an optional `pendingCount`: a host sends it when it knows how many prompts are
|
|
240
|
+
queued, and a client that gets none counts the prompt it shows. The host sends `pending` in
|
|
241
|
+
reply to a `submit` once it has taken the prompt, so a prompt queued behind a running turn shows
|
|
242
|
+
as queued.
|
|
243
|
+
- `command` takes an optional `requestId`, which the host echoes on the command's
|
|
244
|
+
`command_result` or `protocol_error`.
|
|
245
|
+
- The session's `context_update` is pushed as the `context` frame that `get-context` answers with.
|
|
246
|
+
- `compact`, `skill_activation` and `memory_event` push the new `history_changed`; the client
|
|
247
|
+
reads the history again.
|
|
248
|
+
- `turn_source` is pushed as the new `turn_source` frame.
|
|
249
|
+
- An exhaustive map over `TClientMessage` or `TServerMessage` types must add the new variants,
|
|
250
|
+
and `IProtocolSession` now requires `getFullHistory()`.
|
|
251
|
+
- `agent-transport-http` is **`major`** only because `IHttpTransportSession` includes the conversation
|
|
252
|
+
read role, so a session handed to it must now provide `getFullHistory()`.
|
|
253
|
+
- `agent-framework`: `SessionSlot` forwards `getFullHistory()` to the current session.
|
|
254
|
+
- `agent-ui-web` receives the new frames and does not render them.
|
|
255
|
+
- 09e7e21: **An MCP server's form-mode elicitation during a tool call becomes a Robota ask prompt.**
|
|
256
|
+
|
|
257
|
+
`@robota-sdk/agent-mcp` opens a session with `elicitation: true` to declare form-mode elicitation and
|
|
258
|
+
answer it: a request the server raises while a tool call is in flight (a server→client
|
|
259
|
+
`elicitation/create` on the legacy era, an `input_required` round on 2026-07-28) is put to a person
|
|
260
|
+
through that call's ask port (`IMCPToolCallOptions.ask`, which the discovered tool fills from
|
|
261
|
+
`IToolExecutionContext.ask`) as one question titled with the configured server id and carrying the
|
|
262
|
+
server's message as one bounded line, with Respond and Decline, then one question per field
|
|
263
|
+
(choices, multi-select, yes/no, or free text validated against the field and re-asked once). The
|
|
264
|
+
answer continues the same call; the re-sent `tools/call` that carries it is the protocol's
|
|
265
|
+
continuation, not a replay, and a prompt is withdrawn when its call ends (an abort, or the call's
|
|
266
|
+
own timeout) — when the last in-flight call to that server ends, if there are several, since a
|
|
267
|
+
request names none of them. A request outside an in-flight call, or during a call that has no ask port, is
|
|
268
|
+
declined; a dismissal, a failing port or a second rejected answer cancels; a field named like a
|
|
269
|
+
credential is shown unmasked with a warning. URL mode is not offered. Without the opt-in nothing
|
|
270
|
+
changes: no capability is declared and an `input_required` result still closes the carrier. An
|
|
271
|
+
embedded request of another kind (sampling, roots) or more rounds than the client allows closes the
|
|
272
|
+
carrier as `input_required` does; an embedded elicitation the client refuses on its face (URL mode,
|
|
273
|
+
a malformed form) fails the call and leaves the carrier open.
|
|
274
|
+
|
|
275
|
+
`@robota-sdk/agent-cli` turns the opt-in on for the interactive terminal and the serve host driven by
|
|
276
|
+
the desktop app or the web GUI, which show the prompt, and leaves it off for print mode and for the
|
|
277
|
+
two serve-runtime hosts with no prompt surface, `mcp serve` and the ACP editor agent.
|
|
278
|
+
|
|
279
|
+
`@robota-sdk/agent-ui-web` renders an ask with `maxSelect` above 1 as a multi-select: options toggle
|
|
280
|
+
(click or 1–9), Submit answers with the ticked values once `minSelect` is met, and a toggle beyond
|
|
281
|
+
`maxSelect` is ignored, as in the terminal.
|
|
282
|
+
- c207a31: Keep automatic compaction aligned with the active model and pending input, preserve provider usage when estimating new context, and keep summary text out of the response stream. Display live context changes and successful automatic compaction in the shared app interface.
|
|
283
|
+
- df02568: Local OpenAI-compatible servers can be set up without saving a placeholder API key. Explicit credentials and environment references remain effective for authenticated servers and connection tests. Optional credentials are managed through the user-only provider edit command.
|
|
284
|
+
- 7d9cc66: Restore actual interactive tool observations, identities and outcomes from persisted event history.
|
|
285
|
+
Show denied calls as failed in live and restored GUI conversation views.
|
|
286
|
+
- Updated dependencies [9c19c50]
|
|
287
|
+
- Updated dependencies [5307f8a]
|
|
288
|
+
- Updated dependencies [b462ee7]
|
|
289
|
+
- Updated dependencies [37b4bd7]
|
|
290
|
+
- Updated dependencies [50d2c9f]
|
|
291
|
+
- Updated dependencies [724fabb]
|
|
292
|
+
- Updated dependencies [d877de2]
|
|
293
|
+
- Updated dependencies [d61e159]
|
|
294
|
+
- Updated dependencies [bfe8ed5]
|
|
295
|
+
- Updated dependencies [a5961c9]
|
|
296
|
+
- Updated dependencies [af2f2ad]
|
|
297
|
+
- Updated dependencies [3038eb7]
|
|
298
|
+
- Updated dependencies [c7f9203]
|
|
299
|
+
- Updated dependencies [18b52cc]
|
|
300
|
+
- Updated dependencies [7b72344]
|
|
301
|
+
- Updated dependencies [6ae3f28]
|
|
302
|
+
- Updated dependencies [57f57f5]
|
|
303
|
+
- Updated dependencies [ba822c1]
|
|
304
|
+
- Updated dependencies [9721162]
|
|
305
|
+
- Updated dependencies [6e6b06b]
|
|
306
|
+
- Updated dependencies [57280bf]
|
|
307
|
+
- Updated dependencies [18c0d5c]
|
|
308
|
+
- Updated dependencies [193a0bc]
|
|
309
|
+
- Updated dependencies [9a01e78]
|
|
310
|
+
- Updated dependencies [e8d70ac]
|
|
311
|
+
- Updated dependencies [2c612ba]
|
|
312
|
+
- Updated dependencies [3427887]
|
|
313
|
+
- Updated dependencies [c967c57]
|
|
314
|
+
- Updated dependencies [60f3965]
|
|
315
|
+
- Updated dependencies [115e104]
|
|
316
|
+
- Updated dependencies [04719a9]
|
|
317
|
+
- Updated dependencies [04a6de4]
|
|
318
|
+
- Updated dependencies [0ba247b]
|
|
319
|
+
- Updated dependencies [4c5148e]
|
|
320
|
+
- Updated dependencies [0116a29]
|
|
321
|
+
- Updated dependencies [e82215f]
|
|
322
|
+
- Updated dependencies [52b7346]
|
|
323
|
+
- Updated dependencies [9db63ee]
|
|
324
|
+
- Updated dependencies [b078afa]
|
|
325
|
+
- Updated dependencies [2ebff01]
|
|
326
|
+
- Updated dependencies [9db63ee]
|
|
327
|
+
- Updated dependencies [2ebff01]
|
|
328
|
+
- Updated dependencies [4772067]
|
|
329
|
+
- Updated dependencies [0f98419]
|
|
330
|
+
- Updated dependencies [64ba748]
|
|
331
|
+
- Updated dependencies [d312755]
|
|
332
|
+
- Updated dependencies [c207a31]
|
|
333
|
+
- Updated dependencies [3244fb8]
|
|
334
|
+
- Updated dependencies [1e3f91a]
|
|
335
|
+
- Updated dependencies [4f3c075]
|
|
336
|
+
- Updated dependencies [7669851]
|
|
337
|
+
- Updated dependencies [7d9cc66]
|
|
338
|
+
- Updated dependencies [4b76cfa]
|
|
339
|
+
- Updated dependencies [07b627f]
|
|
340
|
+
- Updated dependencies [dfb9b15]
|
|
341
|
+
- Updated dependencies [9665c6e]
|
|
342
|
+
- Updated dependencies [44393be]
|
|
343
|
+
- Updated dependencies [c7fa299]
|
|
344
|
+
- Updated dependencies [5134b3b]
|
|
345
|
+
- Updated dependencies [7911a7d]
|
|
346
|
+
- Updated dependencies [7d9cc66]
|
|
347
|
+
- Updated dependencies [9c6a8db]
|
|
348
|
+
- Updated dependencies [7d9cc66]
|
|
349
|
+
- Updated dependencies [5c5ff23]
|
|
350
|
+
- Updated dependencies [9814afc]
|
|
351
|
+
- Updated dependencies [9c6a8db]
|
|
352
|
+
- @robota-sdk/agent-interface-execution@3.0.0
|
|
353
|
+
- @robota-sdk/agent-interface-command@3.0.0
|
|
354
|
+
- @robota-sdk/agent-interface-session@3.0.0
|
|
355
|
+
- @robota-sdk/agent-interface-transport@3.0.0
|
|
356
|
+
- @robota-sdk/agent-transport@3.0.0
|
|
357
|
+
|
|
358
|
+
## 3.0.0-beta.106
|
|
359
|
+
### Patch Changes
|
|
360
|
+
|
|
361
|
+
- @robota-sdk/agent-interface-command@3.0.0-beta.106
|
|
362
|
+
- @robota-sdk/agent-interface-execution@3.0.0-beta.106
|
|
363
|
+
- @robota-sdk/agent-interface-session@3.0.0-beta.106
|
|
364
|
+
- @robota-sdk/agent-interface-transport@3.0.0-beta.106
|
|
365
|
+
- @robota-sdk/agent-transport@3.0.0-beta.106
|
|
366
|
+
|
|
367
|
+
## 3.0.0-beta.105
|
|
368
|
+
### Patch Changes
|
|
369
|
+
|
|
370
|
+
- @robota-sdk/agent-interface-command@3.0.0-beta.105
|
|
371
|
+
- @robota-sdk/agent-interface-execution@3.0.0-beta.105
|
|
372
|
+
- @robota-sdk/agent-interface-session@3.0.0-beta.105
|
|
373
|
+
- @robota-sdk/agent-interface-transport@3.0.0-beta.105
|
|
374
|
+
- @robota-sdk/agent-transport@3.0.0-beta.105
|
|
375
|
+
|
|
376
|
+
## 3.0.0-beta.104
|
|
377
|
+
### Patch Changes
|
|
378
|
+
|
|
379
|
+
- @robota-sdk/agent-interface-command@3.0.0-beta.104
|
|
380
|
+
- @robota-sdk/agent-interface-execution@3.0.0-beta.104
|
|
381
|
+
- @robota-sdk/agent-interface-session@3.0.0-beta.104
|
|
382
|
+
- @robota-sdk/agent-interface-transport@3.0.0-beta.104
|
|
383
|
+
- @robota-sdk/agent-transport@3.0.0-beta.104
|
|
384
|
+
|
|
385
|
+
## 3.0.0-beta.103
|
|
386
|
+
### Patch Changes
|
|
387
|
+
|
|
388
|
+
- @robota-sdk/agent-interface-command@3.0.0-beta.103
|
|
389
|
+
- @robota-sdk/agent-interface-execution@3.0.0-beta.103
|
|
390
|
+
- @robota-sdk/agent-interface-session@3.0.0-beta.103
|
|
391
|
+
- @robota-sdk/agent-interface-transport@3.0.0-beta.103
|
|
392
|
+
- @robota-sdk/agent-transport@3.0.0-beta.103
|
|
393
|
+
|
|
394
|
+
## 3.0.0-beta.102
|
|
395
|
+
### Patch Changes
|
|
396
|
+
|
|
397
|
+
- @robota-sdk/agent-interface-command@3.0.0-beta.102
|
|
398
|
+
- @robota-sdk/agent-interface-execution@3.0.0-beta.102
|
|
399
|
+
- @robota-sdk/agent-interface-session@3.0.0-beta.102
|
|
400
|
+
- @robota-sdk/agent-interface-transport@3.0.0-beta.102
|
|
401
|
+
- @robota-sdk/agent-transport@3.0.0-beta.102
|
|
402
|
+
|
|
403
|
+
## 3.0.0-beta.101
|
|
404
|
+
### Patch Changes
|
|
405
|
+
|
|
406
|
+
- @robota-sdk/agent-interface-command@3.0.0-beta.101
|
|
407
|
+
- @robota-sdk/agent-interface-execution@3.0.0-beta.101
|
|
408
|
+
- @robota-sdk/agent-interface-session@3.0.0-beta.101
|
|
409
|
+
- @robota-sdk/agent-interface-transport@3.0.0-beta.101
|
|
410
|
+
- @robota-sdk/agent-transport@3.0.0-beta.101
|
|
411
|
+
|
|
412
|
+
## 3.0.0-beta.100
|
|
413
|
+
### Patch Changes
|
|
414
|
+
|
|
415
|
+
- @robota-sdk/agent-interface-command@3.0.0-beta.100
|
|
416
|
+
- @robota-sdk/agent-interface-execution@3.0.0-beta.100
|
|
417
|
+
- @robota-sdk/agent-interface-session@3.0.0-beta.100
|
|
418
|
+
- @robota-sdk/agent-interface-transport@3.0.0-beta.100
|
|
419
|
+
- @robota-sdk/agent-transport@3.0.0-beta.100
|
|
420
|
+
|
|
3
421
|
## 3.0.0-beta.99
|
|
4
422
|
### Patch Changes
|
|
5
423
|
|
|
@@ -34,7 +452,7 @@
|
|
|
34
452
|
### Minor Changes
|
|
35
453
|
|
|
36
454
|
- fbb287d: Show a finished MCP tool call's app in an opaque frame with a source-bound JSON-RPC bridge. App callbacks use the session's view authority and permission prompt. Session changes and frame disposal reject pending local requests.
|
|
37
|
-
|
|
455
|
+
|
|
38
456
|
Hosts can provide a sandbox URL through `SessionSurface`. The web GUI serves a separate sandbox document with content restrictions and `Connection-Allowlist` enforcement. App execution requires Chromium 158 or newer and native network isolation; other browsers and hosts without the response policy show an unavailable message and retain the text result. A surface without a sandbox URL never reads the app document.
|
|
39
457
|
|
|
40
458
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@robota-sdk/agent-ui-web",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"description": "Browser-safe React session presentation, wire reducer, WebSocket client and runtime-host contract for consumer-owned agent renderers.",
|
|
5
5
|
"license": "AGPL-3.0-only OR LicenseRef-Commercial",
|
|
6
6
|
"type": "module",
|
|
@@ -58,11 +58,11 @@
|
|
|
58
58
|
"pretendard": "^1.3.9",
|
|
59
59
|
"react-markdown": "^10.1.0",
|
|
60
60
|
"remark-gfm": "^4.0.1",
|
|
61
|
-
"@robota-sdk/agent-interface-command": "3.0.
|
|
62
|
-
"@robota-sdk/agent-interface-
|
|
63
|
-
"@robota-sdk/agent-interface-
|
|
64
|
-
"@robota-sdk/agent-interface-transport": "3.0.
|
|
65
|
-
"@robota-sdk/agent-transport": "3.0.
|
|
61
|
+
"@robota-sdk/agent-interface-command": "3.0.2",
|
|
62
|
+
"@robota-sdk/agent-interface-session": "3.0.2",
|
|
63
|
+
"@robota-sdk/agent-interface-execution": "3.0.2",
|
|
64
|
+
"@robota-sdk/agent-interface-transport": "3.0.2",
|
|
65
|
+
"@robota-sdk/agent-transport": "3.0.2"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
68
|
"react": ">=18"
|