@robota-sdk/agent-ui-web 3.2.1 → 3.3.0
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 +18 -0
- package/dist/index.cjs +80 -37
- package/dist/index.d.cts +4 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +80 -37
- package/dist/index.js.map +1 -1
- package/docs/SPEC.md +5 -0
- package/package.json +6 -6
- package/src/components/AgentActivityPanel.tsx +38 -31
- package/src/components/Composer.tsx +13 -10
- package/src/components/SessionSurface.tsx +65 -38
- package/src/hooks/server-message-handling.ts +2 -0
- package/src/hooks/session-client-types.ts +7 -1
- package/src/hooks/use-app-view-requests.ts +8 -1
- package/src/hooks/use-session-directory.ts +7 -2
- package/src/hooks/useSessionClient.ts +37 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @robota-sdk/agent-ui-web
|
|
2
2
|
|
|
3
|
+
## 3.3.0
|
|
4
|
+
### Minor Changes
|
|
5
|
+
|
|
6
|
+
- 5b02d9c: While observing, `SessionSurface` renders read-only: the conversation and its work without a composer or any control that changes the session.
|
|
7
|
+
- c869802: The session client learns its role from the host when it connects and, while observing, sends nothing an observer may not send.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 8d05c9b: Allow compatible SDK dependencies to update independently.
|
|
12
|
+
- be1504a: Recognize the `surface_role` server message.
|
|
13
|
+
- Updated dependencies [8d05c9b]
|
|
14
|
+
- Updated dependencies [be1504a]
|
|
15
|
+
- @robota-sdk/agent-interface-command@3.2.2
|
|
16
|
+
- @robota-sdk/agent-interface-execution@3.2.2
|
|
17
|
+
- @robota-sdk/agent-interface-session@3.2.2
|
|
18
|
+
- @robota-sdk/agent-interface-transport@3.2.2
|
|
19
|
+
- @robota-sdk/agent-transport@3.3.0
|
|
20
|
+
|
|
3
21
|
## 3.2.1
|
|
4
22
|
### Patch Changes
|
|
5
23
|
|
package/dist/index.cjs
CHANGED
|
@@ -21,6 +21,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
enumerable: true
|
|
22
22
|
}) : target, mod));
|
|
23
23
|
//#endregion
|
|
24
|
+
let _robota_sdk_agent_transport = require("@robota-sdk/agent-transport");
|
|
24
25
|
let react = require("react");
|
|
25
26
|
react = __toESM(react, 1);
|
|
26
27
|
let _robota_sdk_agent_transport_client = require("@robota-sdk/agent-transport/client");
|
|
@@ -332,6 +333,7 @@ const SERVER_MESSAGE_HANDLING = {
|
|
|
332
333
|
background_task_control_result: "visible-notice",
|
|
333
334
|
protocol_error: "visible-notice",
|
|
334
335
|
resume_gap: "transport-control",
|
|
336
|
+
surface_role: "reducer-state",
|
|
335
337
|
settings: "reducer-state",
|
|
336
338
|
settings_error: "reducer-state"
|
|
337
339
|
};
|
|
@@ -426,6 +428,7 @@ function nextRequestId$6(prefix) {
|
|
|
426
428
|
return `${prefix}_${requestCounter$6}_${Date.now()}`;
|
|
427
429
|
}
|
|
428
430
|
const CONNECTION_CLOSED = "The connection to the session closed.";
|
|
431
|
+
const READ_ONLY = "This session is read-only.";
|
|
429
432
|
/**
|
|
430
433
|
* The key a finished call's app view is read and called by, taken from the tool row's `appView`
|
|
431
434
|
* reference; `undefined` when the row gives none. Everything outside this module treats it as an
|
|
@@ -457,7 +460,7 @@ function callAppToolMessage(requestId, viewKey, name, args) {
|
|
|
457
460
|
* keeps its own entry. A reply that lost its connection never arrives: the owner of the connection
|
|
458
461
|
* rejects every outstanding request when it drops, is replaced or goes away (`rejectPendingAppRequests`).
|
|
459
462
|
*/
|
|
460
|
-
function useAppViewRequests(send, isConnected) {
|
|
463
|
+
function useAppViewRequests(send, isConnected, isObserving) {
|
|
461
464
|
const pendingRef = (0, react.useRef)(/* @__PURE__ */ new Map());
|
|
462
465
|
const [requestOwner] = (0, react.useState)(() => nextRequestId$6("app_request"));
|
|
463
466
|
const rejectPendingAppRequests = (0, react.useCallback)((reason = CONNECTION_CLOSED) => {
|
|
@@ -473,6 +476,10 @@ function useAppViewRequests(send, isConnected) {
|
|
|
473
476
|
reject(/* @__PURE__ */ new Error(signal?.aborted ? "The app view closed." : CONNECTION_CLOSED));
|
|
474
477
|
return;
|
|
475
478
|
}
|
|
479
|
+
if (isObserving()) {
|
|
480
|
+
reject(/* @__PURE__ */ new Error(READ_ONLY));
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
476
483
|
const requestId = nextRequestId$6(`${requestOwner}_${prefix}`);
|
|
477
484
|
const dispose = () => signal?.removeEventListener("abort", abort);
|
|
478
485
|
const abort = () => {
|
|
@@ -491,6 +498,7 @@ function useAppViewRequests(send, isConnected) {
|
|
|
491
498
|
}
|
|
492
499
|
}), [
|
|
493
500
|
isConnected,
|
|
501
|
+
isObserving,
|
|
494
502
|
requestOwner,
|
|
495
503
|
send
|
|
496
504
|
]);
|
|
@@ -1043,7 +1051,7 @@ function initialSidebarOpen() {
|
|
|
1043
1051
|
* on its primary one. After a reconnect to such a host this surface goes back to the session it was
|
|
1044
1052
|
* on; an older host has one session for everyone, so there is nothing to go back to.
|
|
1045
1053
|
*/
|
|
1046
|
-
function useSessionDirectoryState(send) {
|
|
1054
|
+
function useSessionDirectoryState(send, isObserving) {
|
|
1047
1055
|
const { storage: { browserNamespace } } = useProductIdentity();
|
|
1048
1056
|
const [sessionListing, setSessionListing] = (0, react.useState)(null);
|
|
1049
1057
|
const [sessionsError, setSessionsError] = (0, react.useState)(null);
|
|
@@ -1094,6 +1102,7 @@ function useSessionDirectoryState(send) {
|
|
|
1094
1102
|
if (target === null) return;
|
|
1095
1103
|
clearStoredRestoreId(browserNamespace);
|
|
1096
1104
|
if (target === listing.currentSessionId) return;
|
|
1105
|
+
if (isObserving()) return;
|
|
1097
1106
|
if (!keepsSessionsLive(listing)) return;
|
|
1098
1107
|
if (!listing.sessions.some((row) => row.id === target)) return;
|
|
1099
1108
|
send({
|
|
@@ -1101,7 +1110,11 @@ function useSessionDirectoryState(send) {
|
|
|
1101
1110
|
sessionId: target,
|
|
1102
1111
|
requestId: nextRequestId$1("session_change")
|
|
1103
1112
|
});
|
|
1104
|
-
}, [
|
|
1113
|
+
}, [
|
|
1114
|
+
send,
|
|
1115
|
+
browserNamespace,
|
|
1116
|
+
isObserving
|
|
1117
|
+
]);
|
|
1105
1118
|
return {
|
|
1106
1119
|
sessionListing,
|
|
1107
1120
|
sessionsError,
|
|
@@ -1396,6 +1409,9 @@ function buildConversationEntriesFromDisplaySegments(displaySegments) {
|
|
|
1396
1409
|
function useSessionClient(makeClient) {
|
|
1397
1410
|
const [status, setStatus] = (0, react.useState)("disconnected");
|
|
1398
1411
|
const statusRef = (0, react.useRef)("disconnected");
|
|
1412
|
+
const [role, setRole] = (0, react.useState)(null);
|
|
1413
|
+
const roleRef = (0, react.useRef)(null);
|
|
1414
|
+
const isObserving = (0, react.useCallback)(() => roleRef.current === "observe", []);
|
|
1399
1415
|
const [messages, setMessages] = (0, react.useState)([]);
|
|
1400
1416
|
const [activeTools, setActiveTools] = (0, react.useState)([]);
|
|
1401
1417
|
const [streamingText, setStreamingText] = (0, react.useState)("");
|
|
@@ -1463,8 +1479,9 @@ function useSessionClient(makeClient) {
|
|
|
1463
1479
|
const [executionDetailInput, setExecutionDetailInput] = (0, react.useState)();
|
|
1464
1480
|
const executionDetailInputRef = (0, react.useRef)(null);
|
|
1465
1481
|
const send = (0, react.useCallback)((msg) => {
|
|
1482
|
+
const refused = isObserving() && !(0, _robota_sdk_agent_transport.isObserverMessageType)(msg.type);
|
|
1466
1483
|
if (msg.type === "send-background-task") {
|
|
1467
|
-
if (executionDetailInputRef.current !== null) return;
|
|
1484
|
+
if (refused || executionDetailInputRef.current !== null) return;
|
|
1468
1485
|
executionDetailInputRef.current = msg.taskId;
|
|
1469
1486
|
setExecutionDetailInput({
|
|
1470
1487
|
taskId: msg.taskId,
|
|
@@ -1487,14 +1504,16 @@ function useSessionClient(makeClient) {
|
|
|
1487
1504
|
});
|
|
1488
1505
|
return;
|
|
1489
1506
|
}
|
|
1507
|
+
if (refused) return;
|
|
1490
1508
|
commandsInFlightRef.current += 1;
|
|
1491
1509
|
}
|
|
1510
|
+
if (refused) return;
|
|
1492
1511
|
if (msg.type === "switch-session" || msg.type === "new-session") {
|
|
1493
1512
|
sessionChangesInFlightRef.current += 1;
|
|
1494
1513
|
if (msg.requestId !== void 0) sessionChangeRequestIdsRef.current.add(msg.requestId);
|
|
1495
1514
|
}
|
|
1496
1515
|
clientRef.current?.send(msg);
|
|
1497
|
-
}, [appendEntry]);
|
|
1516
|
+
}, [appendEntry, isObserving]);
|
|
1498
1517
|
/** One session change this surface asked for has been answered. */
|
|
1499
1518
|
const settleSessionChange = (0, react.useCallback)((requestId) => {
|
|
1500
1519
|
sessionChangesInFlightRef.current = Math.max(0, sessionChangesInFlightRef.current - 1);
|
|
@@ -1530,8 +1549,8 @@ function useSessionClient(makeClient) {
|
|
|
1530
1549
|
const { handleExecutionDetailMessage, handleExecutionWorkspace, closeExecutionDetail, ...executionDetailState } = useExecutionDetailState(send);
|
|
1531
1550
|
const { handleModelListMessage, ...modelListState } = useModelListState(send);
|
|
1532
1551
|
const { handleProjectMessage, ...projectPanelState } = useProjectPanelState(send);
|
|
1533
|
-
const { handleAppViewMessage, rejectPendingAppRequests, readAppView, callAppTool } = useAppViewRequests(send, (0, react.useCallback)(() => statusRef.current === "connected", []));
|
|
1534
|
-
const { handleSessionsMessage, canListSessions, markCurrent, armRestore, ...sessionDirectoryState } = useSessionDirectoryState(send);
|
|
1552
|
+
const { handleAppViewMessage, rejectPendingAppRequests, readAppView, callAppTool } = useAppViewRequests(send, (0, react.useCallback)(() => statusRef.current === "connected", []), isObserving);
|
|
1553
|
+
const { handleSessionsMessage, canListSessions, markCurrent, armRestore, ...sessionDirectoryState } = useSessionDirectoryState(send, isObserving);
|
|
1535
1554
|
const { requestSessions, setSessionSidebarOpen } = sessionDirectoryState;
|
|
1536
1555
|
const { handleSettingsMessage, openSettings, refreshSettings, ...settingsState } = useSettingsState(send);
|
|
1537
1556
|
const settingsOpenRef = (0, react.useRef)(false);
|
|
@@ -1553,6 +1572,10 @@ function useSessionClient(makeClient) {
|
|
|
1553
1572
|
if (handleAgentDefinitionsMessage(msg)) return;
|
|
1554
1573
|
if (handleSchedulesMessage(msg)) return;
|
|
1555
1574
|
switch (msg.type) {
|
|
1575
|
+
case "surface_role":
|
|
1576
|
+
roleRef.current = msg.role;
|
|
1577
|
+
setRole(msg.role);
|
|
1578
|
+
break;
|
|
1556
1579
|
case "messages": {
|
|
1557
1580
|
const reconstructed = msg.display ? buildConversationEntriesFromDisplaySegments(msg.display) : msg.messages.flatMap((m) => {
|
|
1558
1581
|
if (m.role !== "user" && m.role !== "assistant") return [];
|
|
@@ -1924,6 +1947,10 @@ function useSessionClient(makeClient) {
|
|
|
1924
1947
|
const onStatusChange = (next) => {
|
|
1925
1948
|
statusRef.current = next;
|
|
1926
1949
|
setStatus(next);
|
|
1950
|
+
if (next !== "connected") {
|
|
1951
|
+
roleRef.current = null;
|
|
1952
|
+
setRole(null);
|
|
1953
|
+
}
|
|
1927
1954
|
if (next !== "connected") {
|
|
1928
1955
|
rejectPendingAppRequests();
|
|
1929
1956
|
clearCompactionNotices();
|
|
@@ -1942,6 +1969,7 @@ function useSessionClient(makeClient) {
|
|
|
1942
1969
|
sessionChangesInFlightRef.current = 0;
|
|
1943
1970
|
sessionChangeRequestIdsRef.current.clear();
|
|
1944
1971
|
pendingIntentRef.current = null;
|
|
1972
|
+
client.send({ type: "get-surface-role" });
|
|
1945
1973
|
client.send({ type: "get-commands" });
|
|
1946
1974
|
client.send({ type: "get-status" });
|
|
1947
1975
|
client.send({ type: "get-pending" });
|
|
@@ -1950,10 +1978,18 @@ function useSessionClient(makeClient) {
|
|
|
1950
1978
|
requestSchedules();
|
|
1951
1979
|
}
|
|
1952
1980
|
};
|
|
1953
|
-
const
|
|
1981
|
+
const inner = makeClient({
|
|
1954
1982
|
onMessage: handleMessage,
|
|
1955
1983
|
onStatusChange
|
|
1956
1984
|
});
|
|
1985
|
+
const client = {
|
|
1986
|
+
connect: () => inner.connect(),
|
|
1987
|
+
disconnect: () => inner.disconnect(),
|
|
1988
|
+
send: (msg) => {
|
|
1989
|
+
if (roleRef.current === "observe" && !(0, _robota_sdk_agent_transport.isObserverMessageType)(msg.type)) return;
|
|
1990
|
+
inner.send(msg);
|
|
1991
|
+
}
|
|
1992
|
+
};
|
|
1957
1993
|
clientRef.current = client;
|
|
1958
1994
|
client.connect();
|
|
1959
1995
|
return () => {
|
|
@@ -1982,6 +2018,7 @@ function useSessionClient(makeClient) {
|
|
|
1982
2018
|
commandCatalog,
|
|
1983
2019
|
sessionStatus,
|
|
1984
2020
|
ownDriverId,
|
|
2021
|
+
role,
|
|
1985
2022
|
send,
|
|
1986
2023
|
sendCommandSilently,
|
|
1987
2024
|
pendingPrompts,
|
|
@@ -3595,7 +3632,7 @@ function AgentActivityPanel({ tasks, schedules = [], goal = null, onPauseSchedul
|
|
|
3595
3632
|
task,
|
|
3596
3633
|
onPause: onPauseSchedule,
|
|
3597
3634
|
onResume: onResumeSchedule,
|
|
3598
|
-
onRequestDelete: () => setPendingDeleteId(task.id)
|
|
3635
|
+
onRequestDelete: onDeleteSchedule ? () => setPendingDeleteId(task.id) : void 0
|
|
3599
3636
|
}, task.id))
|
|
3600
3637
|
})] }),
|
|
3601
3638
|
goal && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
@@ -3696,33 +3733,33 @@ function ScheduleCard({ task, onPause, onResume, onRequestDelete }) {
|
|
|
3696
3733
|
describeScheduleStatus(task)
|
|
3697
3734
|
]
|
|
3698
3735
|
}),
|
|
3699
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3736
|
+
onResume || onPause || onRequestDelete ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
3700
3737
|
className: "mt-2 flex items-center gap-3",
|
|
3701
|
-
children: [isPaused ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
3738
|
+
children: [isPaused ? onResume && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
3702
3739
|
type: "button",
|
|
3703
|
-
onClick: () => onResume
|
|
3740
|
+
onClick: () => onResume(task.id),
|
|
3704
3741
|
className: "flex items-center gap-1.5 rounded-lg px-2 py-1 text-[13px] text-muted-foreground hover:bg-hover hover:text-foreground",
|
|
3705
3742
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Play, {
|
|
3706
3743
|
size: 11,
|
|
3707
3744
|
fill: "currentColor",
|
|
3708
3745
|
"aria-hidden": "true"
|
|
3709
3746
|
}), "Resume"]
|
|
3710
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
3747
|
+
}) : onPause && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
3711
3748
|
type: "button",
|
|
3712
|
-
onClick: () => onPause
|
|
3749
|
+
onClick: () => onPause(task.id),
|
|
3713
3750
|
className: "flex items-center gap-1.5 rounded-lg px-2 py-1 text-[13px] text-muted-foreground hover:bg-hover hover:text-foreground",
|
|
3714
3751
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Pause, {
|
|
3715
3752
|
size: 11,
|
|
3716
3753
|
fill: "currentColor",
|
|
3717
3754
|
"aria-hidden": "true"
|
|
3718
3755
|
}), "Pause"]
|
|
3719
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3756
|
+
}), onRequestDelete && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
3720
3757
|
type: "button",
|
|
3721
3758
|
onClick: onRequestDelete,
|
|
3722
3759
|
className: "flex items-center gap-1.5 rounded-lg px-2 py-1 text-[13px] text-destructive hover:bg-destructive/10",
|
|
3723
3760
|
children: "Delete…"
|
|
3724
3761
|
})]
|
|
3725
|
-
})
|
|
3762
|
+
}) : null
|
|
3726
3763
|
]
|
|
3727
3764
|
});
|
|
3728
3765
|
}
|
|
@@ -3746,7 +3783,7 @@ function GoalCard({ goal, onCancel }) {
|
|
|
3746
3783
|
className: "mt-1.5 pl-[26px] text-[13px] text-muted-foreground",
|
|
3747
3784
|
children: describeGoalStatus(goal)
|
|
3748
3785
|
}),
|
|
3749
|
-
goal.status === "active" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3786
|
+
goal.status === "active" && onCancel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
3750
3787
|
className: "mt-2 pl-[26px]",
|
|
3751
3788
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
3752
3789
|
type: "button",
|
|
@@ -6542,7 +6579,7 @@ function GoalBar({ status, onStop }) {
|
|
|
6542
6579
|
goal.maxIterations
|
|
6543
6580
|
]
|
|
6544
6581
|
}),
|
|
6545
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
6582
|
+
onStop && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
6546
6583
|
type: "button",
|
|
6547
6584
|
"aria-label": "Stop goal",
|
|
6548
6585
|
onClick: onStop,
|
|
@@ -8447,7 +8484,8 @@ function SetupPanel({ onSetUp, disabled }) {
|
|
|
8447
8484
|
* The full desktop layout over an `IWsSessionState`. `surface` is an optional label shown next to the
|
|
8448
8485
|
* mark (e.g. "app").
|
|
8449
8486
|
*/
|
|
8450
|
-
function SessionSurface({ state, surface, personalUsageEnabled = false, draftMode = "persistent", onReconnect, pickFiles, getPathForFile, onOpenMemoryInEditor, appViewSandboxUrl }) {
|
|
8487
|
+
function SessionSurface({ state, surface, personalUsageEnabled: personalUsageRequested = false, draftMode = "persistent", onReconnect, pickFiles, getPathForFile, onOpenMemoryInEditor, appViewSandboxUrl }) {
|
|
8488
|
+
const readOnly = state.role === "observe";
|
|
8451
8489
|
const [view, setView] = (0, react.useState)("chat");
|
|
8452
8490
|
const { identity } = useProductIdentity();
|
|
8453
8491
|
const appViewHost = (0, react.useMemo)(() => ({
|
|
@@ -8466,6 +8504,7 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8466
8504
|
identity.displayName,
|
|
8467
8505
|
surface
|
|
8468
8506
|
]);
|
|
8507
|
+
const personalUsageEnabled = personalUsageRequested && !readOnly;
|
|
8469
8508
|
const composerRef = (0, react.useRef)(null);
|
|
8470
8509
|
const tasks = state.executionWorkspace?.entries ?? [];
|
|
8471
8510
|
const hasTasks = tasks.some((entry) => entry.kind !== "main_thread");
|
|
@@ -8485,7 +8524,7 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8485
8524
|
const hasWorkInProgress = hasTasks || state.scheduledTasks.length > 0 || currentGoal !== null;
|
|
8486
8525
|
const isEmpty = state.messages.length === 0 && !state.streamingText && !state.isThinking && state.activeTools.length === 0;
|
|
8487
8526
|
const setupRequired = state.sessionStatus?.setupRequired === true;
|
|
8488
|
-
const hasSessionList = (state.sessionListing ?? null) !== null || state.sessionsError?.code === "list_failed";
|
|
8527
|
+
const hasSessionList = !readOnly && ((state.sessionListing ?? null) !== null || state.sessionsError?.code === "list_failed");
|
|
8489
8528
|
const sidebarOpen = hasSessionList && state.sessionSidebarOpen;
|
|
8490
8529
|
const usage = personalUsageEnabled && view === "usage";
|
|
8491
8530
|
const project = view === "project";
|
|
@@ -8555,7 +8594,7 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8555
8594
|
connectionLost: state.connectionLost ?? false
|
|
8556
8595
|
}), usage ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8557
8596
|
className: "min-h-0 flex-1",
|
|
8558
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PersonalUsageDashboard, { state }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PermissionPrompt, {
|
|
8597
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PersonalUsageDashboard, { state }), readOnly ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PermissionPrompt, {
|
|
8559
8598
|
layout: "modal",
|
|
8560
8599
|
prompts: state.pendingPrompts,
|
|
8561
8600
|
onAnswerPermission: state.answerPermission,
|
|
@@ -8567,7 +8606,7 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8567
8606
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProjectPanel, {
|
|
8568
8607
|
state,
|
|
8569
8608
|
onOpenMemoryInEditor
|
|
8570
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PermissionPrompt, {
|
|
8609
|
+
}), readOnly ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PermissionPrompt, {
|
|
8571
8610
|
layout: "modal",
|
|
8572
8611
|
prompts: state.pendingPrompts,
|
|
8573
8612
|
onAnswerPermission: state.answerPermission,
|
|
@@ -8587,7 +8626,7 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8587
8626
|
}),
|
|
8588
8627
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8589
8628
|
className: "min-h-0 flex-1 overflow-hidden",
|
|
8590
|
-
children: setupRequired ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SetupPanel, {
|
|
8629
|
+
children: setupRequired && !readOnly ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SetupPanel, {
|
|
8591
8630
|
onSetUp: () => state.send({
|
|
8592
8631
|
type: "command",
|
|
8593
8632
|
name: "provider",
|
|
@@ -8595,7 +8634,7 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8595
8634
|
}),
|
|
8596
8635
|
disabled: state.status !== "connected"
|
|
8597
8636
|
}) : isEmpty ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EmptyState, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AppViewHostContext.Provider, {
|
|
8598
|
-
value: appViewHost,
|
|
8637
|
+
value: readOnly ? null : appViewHost,
|
|
8599
8638
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ConversationView, {
|
|
8600
8639
|
messages: state.messages,
|
|
8601
8640
|
activeTools: state.activeTools,
|
|
@@ -8610,13 +8649,13 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8610
8649
|
children: [
|
|
8611
8650
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(GoalBar, {
|
|
8612
8651
|
status: state.sessionStatus ?? null,
|
|
8613
|
-
onStop: () => state.send({
|
|
8652
|
+
onStop: readOnly ? void 0 : () => state.send({
|
|
8614
8653
|
type: "command",
|
|
8615
8654
|
name: "goal",
|
|
8616
8655
|
args: "cancel"
|
|
8617
8656
|
})
|
|
8618
8657
|
}),
|
|
8619
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PermissionPrompt, {
|
|
8658
|
+
readOnly ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PermissionPrompt, {
|
|
8620
8659
|
layout: "dock",
|
|
8621
8660
|
prompts: state.pendingPrompts,
|
|
8622
8661
|
onAnswerPermission: state.answerPermission,
|
|
@@ -8624,7 +8663,11 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8624
8663
|
ownDriverId: state.ownDriverId,
|
|
8625
8664
|
onFocusReturn: () => composerRef.current?.focus()
|
|
8626
8665
|
}),
|
|
8627
|
-
|
|
8666
|
+
readOnly ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8667
|
+
role: "status",
|
|
8668
|
+
className: "rounded-2xl bg-card px-4 py-3 text-center text-[14px] text-muted-foreground",
|
|
8669
|
+
children: "Read-only: you are watching this session."
|
|
8670
|
+
}) : setupRequired ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Composer, {
|
|
8628
8671
|
ref: composerRef,
|
|
8629
8672
|
draftMode,
|
|
8630
8673
|
catalog: state.commandCatalog ?? null,
|
|
@@ -8679,13 +8722,13 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8679
8722
|
selectedEntryId: state.openEntryId ?? void 0,
|
|
8680
8723
|
onSelect: (entry) => state.openExecutionDetail(entry.id),
|
|
8681
8724
|
onReturnToConversation: () => state.closeExecutionDetail(),
|
|
8682
|
-
onStop: stopExecutionEntry,
|
|
8725
|
+
onStop: readOnly ? void 0 : stopExecutionEntry,
|
|
8683
8726
|
schedules: state.scheduledTasks,
|
|
8684
8727
|
goal: currentGoal,
|
|
8685
|
-
onPauseSchedule: state.pauseSchedule,
|
|
8686
|
-
onResumeSchedule: state.resumeSchedule,
|
|
8687
|
-
onDeleteSchedule: state.deleteSchedule,
|
|
8688
|
-
onCancelGoal: () => state.send({
|
|
8728
|
+
onPauseSchedule: readOnly ? void 0 : state.pauseSchedule,
|
|
8729
|
+
onResumeSchedule: readOnly ? void 0 : state.resumeSchedule,
|
|
8730
|
+
onDeleteSchedule: readOnly ? void 0 : state.deleteSchedule,
|
|
8731
|
+
onCancelGoal: readOnly ? void 0 : () => state.send({
|
|
8689
8732
|
type: "command",
|
|
8690
8733
|
name: "goal",
|
|
8691
8734
|
args: "cancel"
|
|
@@ -8700,18 +8743,18 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8700
8743
|
complete: state.executionDetailComplete,
|
|
8701
8744
|
onClose: () => state.closeExecutionDetail(),
|
|
8702
8745
|
onLoadMore: () => state.loadMoreExecutionDetail(),
|
|
8703
|
-
onStop: openEntry ? () => stopExecutionEntry(openEntry) : void 0,
|
|
8746
|
+
onStop: openEntry && !readOnly ? () => stopExecutionEntry(openEntry) : void 0,
|
|
8704
8747
|
inputState: state.executionDetailInput,
|
|
8705
8748
|
mode: state.executionDetailMode,
|
|
8706
8749
|
unreadable: state.executionDetailUnreadable,
|
|
8707
8750
|
onShowEarlier: state.showEarlierExecutionDetail,
|
|
8708
8751
|
onShowLive: state.showLiveExecutionDetail,
|
|
8709
|
-
onSend: openEntry ? (prompt) => state.send({
|
|
8752
|
+
onSend: openEntry && !readOnly ? (prompt) => state.send({
|
|
8710
8753
|
type: "send-background-task",
|
|
8711
8754
|
taskId: openEntry.sourceId,
|
|
8712
8755
|
input: { prompt }
|
|
8713
8756
|
}) : void 0,
|
|
8714
|
-
onContinue: openEntry?.resumeSessionId ? () => {
|
|
8757
|
+
onContinue: openEntry?.resumeSessionId && !readOnly ? () => {
|
|
8715
8758
|
if (openEntry.resumeSessionId) state.switchSession(openEntry.resumeSessionId);
|
|
8716
8759
|
} : void 0
|
|
8717
8760
|
})
|
|
@@ -8719,8 +8762,8 @@ function SessionSurface({ state, surface, personalUsageEnabled = false, draftMod
|
|
|
8719
8762
|
})]
|
|
8720
8763
|
}),
|
|
8721
8764
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SessionNotices, { state }),
|
|
8722
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsScreen, { state }),
|
|
8723
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AgentSwitcherSheet, { state }),
|
|
8765
|
+
readOnly ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsScreen, { state }),
|
|
8766
|
+
readOnly ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AgentSwitcherSheet, { state }),
|
|
8724
8767
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(HelpSheet, {
|
|
8725
8768
|
open: state.helpOpen,
|
|
8726
8769
|
onClose: () => state.closeHelp(),
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IWireAgentDefinitionSummary, TClientMessage, TClientMessage as TClientMessage$1, TServerMessage, TServerMessage as TServerMessage$1 } from "@robota-sdk/agent-transport";
|
|
1
|
+
import { IWireAgentDefinitionSummary, TClientMessage, TClientMessage as TClientMessage$1, TServerMessage, TServerMessage as TServerMessage$1, TSessionSurfaceRole } from "@robota-sdk/agent-transport";
|
|
2
2
|
import { TActionResponse } from "@robota-sdk/agent-interface-transport";
|
|
3
3
|
import { IAskRequestEvent, IDiffLine, IGoalState, IPermissionRequestEvent, ISettingsSnapshot, IToolAppViewRef, IToolState, TDriverId, TPermissionResultValue, TSettingsPatch } from "@robota-sdk/agent-interface-session";
|
|
4
4
|
import { IBackgroundTaskState, IExecutionDetailRecord, IExecutionWorkspaceEntry, IExecutionWorkspaceSnapshot } from "@robota-sdk/agent-interface-execution";
|
|
@@ -220,6 +220,8 @@ interface IWsSessionState<TStatus extends string = TConnectionStatus> {
|
|
|
220
220
|
sessionName: string | null;
|
|
221
221
|
/** This connection's own driver id, learned from the server's first frame; null until then. */
|
|
222
222
|
ownDriverId: TDriverId | null;
|
|
223
|
+
/** The role the host gave this connection, learned when it connects; null until the host answers. */
|
|
224
|
+
role: TSessionSurfaceRole | null;
|
|
223
225
|
/** Null until the session has answered; refreshed after every command. */
|
|
224
226
|
commandCatalog: TCommandCatalog | null;
|
|
225
227
|
/** Null until the session has answered; refreshed after every command and turn. */
|
|
@@ -582,7 +584,7 @@ declare function PersonalUsageDashboard({ state }: {
|
|
|
582
584
|
* The full desktop layout over an `IWsSessionState`. `surface` is an optional label shown next to the
|
|
583
585
|
* mark (e.g. "app").
|
|
584
586
|
*/
|
|
585
|
-
declare function SessionSurface({ state, surface, personalUsageEnabled, draftMode, onReconnect, pickFiles, getPathForFile, onOpenMemoryInEditor, appViewSandboxUrl }: {
|
|
587
|
+
declare function SessionSurface({ state, surface, personalUsageEnabled: personalUsageRequested, draftMode, onReconnect, pickFiles, getPathForFile, onOpenMemoryInEditor, appViewSandboxUrl }: {
|
|
586
588
|
state: IWsSessionState;
|
|
587
589
|
surface?: string;
|
|
588
590
|
/** Desktop shells opt in; embedded/session-only surfaces keep their existing chat-only contract. */
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/app-view/types.ts","../src/client/ws-session-client.ts","../src/hooks/prompt-state.ts","../src/hooks/session-client-types.ts","../src/hooks/useSessionClient.ts","../src/hooks/use-session-directory.ts","../src/client/desktop-session-client.ts","../src/components/composer-attachments.ts","../src/components/Composer.tsx","../src/client/runtime-host.ts","../src/hooks/ui-intent-state.ts","../src/components/ConversationView.tsx","../src/components/AgentActivityPanel.tsx","../src/components/AgentSwitcherSheet.tsx","../src/components/PermissionPrompt.tsx","../src/components/personal-usage-dashboard-types.ts","../src/components/PersonalUsageDashboard.tsx","../src/components/SessionSurface.tsx","../src/components/SessionSidebar.tsx","../src/components/SessionMonitor.tsx","../src/components/Dialog.tsx","../src/components/SettingsScreen.tsx","../src/components/HelpSheet.tsx","../src/components/Brand.tsx","../src/product-identity.tsx"],"mappings":";;;;;;;KAEY,WAAW,QAAQ;EAAkB;;KAErC,kBAAkB,KAC5B,QAAQ;EAAkB;;KAIhB,oBAAoB,QAAQ;EAAkB;;;;KCE9C;UAEK;EACf,YAAY,KAAK;EACjB,iBAAiB,QAAQ;;;;;EAKzB;;UAGe;EACf;EACA;EACA,OAAO,KAAK;EACZ,cAAc;;iBAMA,sBACd,aACA,WAAW,4BACV;;;;KCjBS;WACI;IAAuB;WACvB;IAAgB;;;;;;iBAOhB,iBACd,kBAAkB,kBAClB,KAAK,0BACK;;iBA4CI,mBAAmB,YAAY,QAAQ,yBAAyB;;iBAKhE,YAAY,YAAY,UAAU,kBAAkB;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/app-view/types.ts","../src/client/ws-session-client.ts","../src/hooks/prompt-state.ts","../src/hooks/session-client-types.ts","../src/hooks/useSessionClient.ts","../src/hooks/use-session-directory.ts","../src/client/desktop-session-client.ts","../src/components/composer-attachments.ts","../src/components/Composer.tsx","../src/client/runtime-host.ts","../src/hooks/ui-intent-state.ts","../src/components/ConversationView.tsx","../src/components/AgentActivityPanel.tsx","../src/components/AgentSwitcherSheet.tsx","../src/components/PermissionPrompt.tsx","../src/components/personal-usage-dashboard-types.ts","../src/components/PersonalUsageDashboard.tsx","../src/components/SessionSurface.tsx","../src/components/SessionSidebar.tsx","../src/components/SessionMonitor.tsx","../src/components/Dialog.tsx","../src/components/SettingsScreen.tsx","../src/components/HelpSheet.tsx","../src/components/Brand.tsx","../src/product-identity.tsx"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { IWireAgentDefinitionSummary, TClientMessage, TClientMessage as TClientMessage$1, TServerMessage, TServerMessage as TServerMessage$1, TSessionSurfaceRole } from "@robota-sdk/agent-transport";
|
|
1
2
|
import React$1, { ReactNode } from "react";
|
|
2
3
|
import { IAskRequestEvent, IDiffLine, IGoalState, IPermissionRequestEvent, ISettingsSnapshot, IToolAppViewRef, IToolState, TDriverId, TPermissionResultValue, TSettingsPatch } from "@robota-sdk/agent-interface-session";
|
|
3
|
-
import { IWireAgentDefinitionSummary, TClientMessage, TClientMessage as TClientMessage$1, TServerMessage, TServerMessage as TServerMessage$1 } from "@robota-sdk/agent-transport";
|
|
4
4
|
import { TActionResponse } from "@robota-sdk/agent-interface-transport";
|
|
5
5
|
import { IBackgroundTaskState, IExecutionDetailRecord, IExecutionWorkspaceEntry, IExecutionWorkspaceSnapshot } from "@robota-sdk/agent-interface-execution";
|
|
6
6
|
import { TCommandUiIntent } from "@robota-sdk/agent-interface-command";
|
|
@@ -220,6 +220,8 @@ interface IWsSessionState<TStatus extends string = TConnectionStatus> {
|
|
|
220
220
|
sessionName: string | null;
|
|
221
221
|
/** This connection's own driver id, learned from the server's first frame; null until then. */
|
|
222
222
|
ownDriverId: TDriverId | null;
|
|
223
|
+
/** The role the host gave this connection, learned when it connects; null until the host answers. */
|
|
224
|
+
role: TSessionSurfaceRole | null;
|
|
223
225
|
/** Null until the session has answered; refreshed after every command. */
|
|
224
226
|
commandCatalog: TCommandCatalog | null;
|
|
225
227
|
/** Null until the session has answered; refreshed after every command and turn. */
|
|
@@ -582,7 +584,7 @@ declare function PersonalUsageDashboard({ state }: {
|
|
|
582
584
|
* The full desktop layout over an `IWsSessionState`. `surface` is an optional label shown next to the
|
|
583
585
|
* mark (e.g. "app").
|
|
584
586
|
*/
|
|
585
|
-
declare function SessionSurface({ state, surface, personalUsageEnabled, draftMode, onReconnect, pickFiles, getPathForFile, onOpenMemoryInEditor, appViewSandboxUrl }: {
|
|
587
|
+
declare function SessionSurface({ state, surface, personalUsageEnabled: personalUsageRequested, draftMode, onReconnect, pickFiles, getPathForFile, onOpenMemoryInEditor, appViewSandboxUrl }: {
|
|
586
588
|
state: IWsSessionState;
|
|
587
589
|
surface?: string;
|
|
588
590
|
/** Desktop shells opt in; embedded/session-only surfaces keep their existing chat-only contract. */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/app-view/types.ts","../src/client/ws-session-client.ts","../src/hooks/prompt-state.ts","../src/hooks/session-client-types.ts","../src/hooks/useSessionClient.ts","../src/hooks/use-session-directory.ts","../src/client/desktop-session-client.ts","../src/components/composer-attachments.ts","../src/components/Composer.tsx","../src/client/runtime-host.ts","../src/hooks/ui-intent-state.ts","../src/components/ConversationView.tsx","../src/components/AgentActivityPanel.tsx","../src/components/AgentSwitcherSheet.tsx","../src/components/PermissionPrompt.tsx","../src/components/personal-usage-dashboard-types.ts","../src/components/PersonalUsageDashboard.tsx","../src/components/SessionSurface.tsx","../src/components/SessionSidebar.tsx","../src/components/SessionMonitor.tsx","../src/components/Dialog.tsx","../src/components/SettingsScreen.tsx","../src/components/HelpSheet.tsx","../src/components/Brand.tsx","../src/product-identity.tsx"],"mappings":";;;;;;;KAEY,WAAW,QAAQ;EAAkB;;KAErC,kBAAkB,KAC5B,QAAQ;EAAkB;;KAIhB,oBAAoB,QAAQ;EAAkB;;;;KCE9C;UAEK;EACf,YAAY,KAAK;EACjB,iBAAiB,QAAQ;;;;;EAKzB;;UAGe;EACf;EACA;EACA,OAAO,KAAK;EACZ,cAAc;;iBAMA,sBACd,aACA,WAAW,4BACV;;;;KCjBS;WACI;IAAuB;WACvB;IAAgB;;;;;;iBAOhB,iBACd,kBAAkB,kBAClB,KAAK,0BACK;;iBA4CI,mBAAmB,YAAY,QAAQ,yBAAyB;;iBAKhE,YAAY,YAAY,UAAU,kBAAkB;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/app-view/types.ts","../src/client/ws-session-client.ts","../src/hooks/prompt-state.ts","../src/hooks/session-client-types.ts","../src/hooks/useSessionClient.ts","../src/hooks/use-session-directory.ts","../src/client/desktop-session-client.ts","../src/components/composer-attachments.ts","../src/components/Composer.tsx","../src/client/runtime-host.ts","../src/hooks/ui-intent-state.ts","../src/components/ConversationView.tsx","../src/components/AgentActivityPanel.tsx","../src/components/AgentSwitcherSheet.tsx","../src/components/PermissionPrompt.tsx","../src/components/personal-usage-dashboard-types.ts","../src/components/PersonalUsageDashboard.tsx","../src/components/SessionSurface.tsx","../src/components/SessionSidebar.tsx","../src/components/SessionMonitor.tsx","../src/components/Dialog.tsx","../src/components/SettingsScreen.tsx","../src/components/HelpSheet.tsx","../src/components/Brand.tsx","../src/product-identity.tsx"],"mappings":"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"}
|