@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 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
- }, [send, browserNamespace]);
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 client = makeClient({
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?.(task.id),
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?.(task.id),
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
- setupRequired ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Composer, {
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. */
@@ -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":"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"}
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. */
@@ -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":"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"}
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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"}