@tutti-os/agent-gui 0.0.94 → 0.0.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/README.md +86 -38
  2. package/dist/AgentGUI-DWdvUV4x.d.ts +1038 -0
  3. package/dist/agent-conversation/index.d.ts +6 -7
  4. package/dist/agent-conversation/index.js +15 -10
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-env/index.d.ts +10 -36
  7. package/dist/agent-env/index.js +2 -57
  8. package/dist/agent-env/index.js.map +1 -1
  9. package/dist/agent-gui.d.ts +21 -0
  10. package/dist/agent-gui.js +39 -0
  11. package/dist/agent-message-center/index.d.ts +156 -124
  12. package/dist/agent-message-center/index.js +1656 -1463
  13. package/dist/agent-message-center/index.js.map +1 -1
  14. package/dist/{agentConversationVM-Cl4G0Lln.d.ts → agentConversationVM-C335TR6S.d.ts} +112 -7
  15. package/dist/agentFileMentionContracts-58IjMU-u.d.ts +108 -0
  16. package/dist/{agentGuiNodeTypes-CAioPXK9.d.ts → agentGuiNodeTypes-B9X4aWfv.d.ts} +123 -163
  17. package/dist/agentPlanPromptDispatch-C7cCMjve.d.ts +37 -0
  18. package/dist/agents.d.ts +13 -0
  19. package/dist/agents.js +13 -0
  20. package/dist/app/renderer/agentactivity.css +276 -83
  21. package/dist/app/renderer/assets/icons/agent-vinyls/tutti-vinyl.png +0 -0
  22. package/dist/app/renderer/assets/icons/open-link-lined.svg +4 -0
  23. package/dist/{chunk-7BUYFVRI.js → chunk-2HJEOO7W.js} +2931 -2946
  24. package/dist/chunk-2HJEOO7W.js.map +1 -0
  25. package/dist/{chunk-E5FOXRUM.js → chunk-3XXBDYAI.js} +293 -258
  26. package/dist/chunk-3XXBDYAI.js.map +1 -0
  27. package/dist/{chunk-ZUW4B5AT.js → chunk-3Y3F7CS5.js} +21 -32
  28. package/dist/chunk-3Y3F7CS5.js.map +1 -0
  29. package/dist/{chunk-SCLLP5DO.js → chunk-4PQPJ5OY.js} +50 -155
  30. package/dist/chunk-4PQPJ5OY.js.map +1 -0
  31. package/dist/chunk-4YG7YK7S.js +23 -0
  32. package/dist/chunk-4YG7YK7S.js.map +1 -0
  33. package/dist/chunk-5X7YDOC6.js +42 -0
  34. package/dist/chunk-5X7YDOC6.js.map +1 -0
  35. package/dist/{chunk-R2EWECUP.js → chunk-7BXWPI4F.js} +17 -2
  36. package/dist/{chunk-R2EWECUP.js.map → chunk-7BXWPI4F.js.map} +1 -1
  37. package/dist/chunk-AGT7MUTV.js +491 -0
  38. package/dist/chunk-AGT7MUTV.js.map +1 -0
  39. package/dist/chunk-C35SNDVZ.js +96 -0
  40. package/dist/chunk-C35SNDVZ.js.map +1 -0
  41. package/dist/{chunk-5FE7M42A.js → chunk-E4HQUTM3.js} +2 -2
  42. package/dist/chunk-FGLQZ6I4.js +9 -0
  43. package/dist/chunk-FGLQZ6I4.js.map +1 -0
  44. package/dist/chunk-H5F3QSCF.js +25 -0
  45. package/dist/chunk-H5F3QSCF.js.map +1 -0
  46. package/dist/chunk-H6IQ63DQ.js +14 -0
  47. package/dist/chunk-H6IQ63DQ.js.map +1 -0
  48. package/dist/{chunk-45FF4DQU.js → chunk-IYEXLOUE.js} +22 -27
  49. package/dist/chunk-IYEXLOUE.js.map +1 -0
  50. package/dist/{chunk-P72YLKC6.js → chunk-JKIZA7EJ.js} +3573 -3755
  51. package/dist/chunk-JKIZA7EJ.js.map +1 -0
  52. package/dist/chunk-KJQERFKX.js +259 -0
  53. package/dist/chunk-KJQERFKX.js.map +1 -0
  54. package/dist/{chunk-XW4CVBUH.js → chunk-L3GMMGRS.js} +25 -16
  55. package/dist/chunk-L3GMMGRS.js.map +1 -0
  56. package/dist/chunk-MASXZENX.js +231 -0
  57. package/dist/chunk-MASXZENX.js.map +1 -0
  58. package/dist/{chunk-BXVPOGYK.js → chunk-O3Q5SIJH.js} +505 -504
  59. package/dist/chunk-O3Q5SIJH.js.map +1 -0
  60. package/dist/{chunk-554VG7ZW.js → chunk-QVBF5BN5.js} +2 -2
  61. package/dist/{chunk-AWAIUYG4.js → chunk-RE4AXS27.js} +532 -565
  62. package/dist/chunk-RE4AXS27.js.map +1 -0
  63. package/dist/{chunk-7LMJXF4R.js → chunk-TVIGLNNI.js} +20 -16
  64. package/dist/chunk-TVIGLNNI.js.map +1 -0
  65. package/dist/{chunk-XDV4ZRVK.js → chunk-UGVI47X6.js} +98 -37
  66. package/dist/chunk-UGVI47X6.js.map +1 -0
  67. package/dist/{chunk-GAPTLVII.js → chunk-UHBCM6RO.js} +1 -1
  68. package/dist/chunk-UHBCM6RO.js.map +1 -0
  69. package/dist/{chunk-UBDPV34P.js → chunk-W6WAGPMD.js} +1385 -1305
  70. package/dist/chunk-W6WAGPMD.js.map +1 -0
  71. package/dist/chunk-WKSFPJHZ.js +33054 -0
  72. package/dist/chunk-WKSFPJHZ.js.map +1 -0
  73. package/dist/{chunk-IGY4ASUF.js → chunk-WMNS4MAQ.js} +1288 -1696
  74. package/dist/chunk-WMNS4MAQ.js.map +1 -0
  75. package/dist/{chunk-MATIJPGF.js → chunk-XPFHJMZP.js} +541 -401
  76. package/dist/chunk-XPFHJMZP.js.map +1 -0
  77. package/dist/chunk-YMXYBG7U.js +12 -0
  78. package/dist/chunk-YMXYBG7U.js.map +1 -0
  79. package/dist/context-mention-palette/index.d.ts +3 -2
  80. package/dist/context-mention-palette/index.js +17 -12
  81. package/dist/custom-mention.d.ts +42 -0
  82. package/dist/custom-mention.js +17 -0
  83. package/dist/custom-mention.js.map +1 -0
  84. package/dist/dock-icons.d.ts +4 -0
  85. package/dist/dock-icons.js +11 -0
  86. package/dist/dock-icons.js.map +1 -0
  87. package/dist/i18n/index.d.ts +880 -841
  88. package/dist/i18n/index.js +2 -2
  89. package/dist/index.d.ts +56 -1063
  90. package/dist/index.js +78 -35532
  91. package/dist/index.js.map +1 -1
  92. package/dist/mention-search.d.ts +226 -0
  93. package/dist/mention-search.js +29 -0
  94. package/dist/mention-search.js.map +1 -0
  95. package/dist/open-link-lined-JWEKUKME.svg +4 -0
  96. package/dist/pastedTextKinds-D-XuInaS.d.ts +4 -0
  97. package/dist/provider-icons.d.ts +6 -0
  98. package/dist/provider-icons.js +12 -0
  99. package/dist/provider-icons.js.map +1 -0
  100. package/dist/provider-identity.d.ts +9 -0
  101. package/dist/provider-identity.js +21 -0
  102. package/dist/provider-identity.js.map +1 -0
  103. package/dist/runtime-BBNdWgDU.d.ts +10 -0
  104. package/dist/startup-shell.d.ts +8 -0
  105. package/dist/startup-shell.js +184 -0
  106. package/dist/startup-shell.js.map +1 -0
  107. package/dist/{types-PLFZ8SBX.d.ts → types-CnT8rNUI.d.ts} +43 -87
  108. package/dist/workbench/contribution.d.ts +34 -41
  109. package/dist/workbench/contribution.js +10 -6
  110. package/dist/workbench/index.d.ts +5 -4
  111. package/dist/workbench/index.js +27 -25
  112. package/dist/workbench/launch.d.ts +4 -7
  113. package/dist/workbench/launch.js +4 -3
  114. package/dist/workbench/providerCatalog.d.ts +2 -2
  115. package/dist/workbench/providerCatalog.js +2 -1
  116. package/dist/workbench/sessionTitle.d.ts +11 -14
  117. package/dist/workbench/sessionTitle.js +6 -7
  118. package/dist/workbench/state.d.ts +1 -1
  119. package/dist/workbench/state.js +3 -2
  120. package/dist/workbench/types.d.ts +2 -4
  121. package/dist/workbench/types.js +1 -1
  122. package/dist/workspace-agent-generated-files.d.ts +20 -2
  123. package/dist/workspace-agent-generated-files.js +6 -5
  124. package/dist/workspaceAgentActivityListTypes-C7gPWYiA.d.ts +71 -0
  125. package/package.json +70 -26
  126. package/dist/AgentMentionSearchController-DD_WOred.d.ts +0 -241
  127. package/dist/AgentMessageMarkdown-DeYPURtF.d.ts +0 -7
  128. package/dist/chunk-45FF4DQU.js.map +0 -1
  129. package/dist/chunk-4HP6V2YA.js +0 -207
  130. package/dist/chunk-4HP6V2YA.js.map +0 -1
  131. package/dist/chunk-7BUYFVRI.js.map +0 -1
  132. package/dist/chunk-7LMJXF4R.js.map +0 -1
  133. package/dist/chunk-AWAIUYG4.js.map +0 -1
  134. package/dist/chunk-BXVPOGYK.js.map +0 -1
  135. package/dist/chunk-E5FOXRUM.js.map +0 -1
  136. package/dist/chunk-GAPTLVII.js.map +0 -1
  137. package/dist/chunk-IBIMGLCD.js +0 -66
  138. package/dist/chunk-IBIMGLCD.js.map +0 -1
  139. package/dist/chunk-IGY4ASUF.js.map +0 -1
  140. package/dist/chunk-LR4FA5X6.js +0 -368
  141. package/dist/chunk-LR4FA5X6.js.map +0 -1
  142. package/dist/chunk-MATIJPGF.js.map +0 -1
  143. package/dist/chunk-MKHDRIGN.js +0 -71
  144. package/dist/chunk-MKHDRIGN.js.map +0 -1
  145. package/dist/chunk-P72YLKC6.js.map +0 -1
  146. package/dist/chunk-SCLLP5DO.js.map +0 -1
  147. package/dist/chunk-UBDPV34P.js.map +0 -1
  148. package/dist/chunk-VAKFNNKT.js +0 -410
  149. package/dist/chunk-VAKFNNKT.js.map +0 -1
  150. package/dist/chunk-XDV4ZRVK.js.map +0 -1
  151. package/dist/chunk-XW4CVBUH.js.map +0 -1
  152. package/dist/chunk-ZUW4B5AT.js.map +0 -1
  153. package/dist/plan-decision-ops.d.ts +0 -70
  154. package/dist/plan-decision-ops.js +0 -19
  155. package/dist/queued-prompt-runtime.d.ts +0 -115
  156. package/dist/queued-prompt-runtime.js +0 -9
  157. package/dist/uiSettings-BQS9r2eo.d.ts +0 -6
  158. package/dist/workspaceAgentActivityListViewModel-BzV-cf0D.d.ts +0 -340
  159. package/dist/workspaceLinkActions-DS9LWqzI.d.ts +0 -74
  160. /package/dist/{plan-decision-ops.js.map → agent-gui.js.map} +0 -0
  161. /package/dist/{queued-prompt-runtime.js.map → agents.js.map} +0 -0
  162. /package/dist/{chunk-5FE7M42A.js.map → chunk-E4HQUTM3.js.map} +0 -0
  163. /package/dist/{chunk-554VG7ZW.js.map → chunk-QVBF5BN5.js.map} +0 -0
package/README.md CHANGED
@@ -5,25 +5,21 @@ UI. It is a UI package, not a host transport or business-core package.
5
5
 
6
6
  Before changing AgentGUI, AgentGuiNode, or the agent conversation module, read
7
7
  [AgentGuiNode Architecture and Troubleshooting](../../../docs/architecture/agent-gui-node.md).
8
- It records the source-of-truth rules, common chains, debugging playbooks, and
9
- the self-evolution loop for durable lessons.
8
+ It defines daemon, workspace-engine, GUI-module, provider, and desktop-host
9
+ ownership.
10
10
 
11
11
  ## Data Source
12
12
 
13
- `AgentActivityRuntime` is the AgentGUI source for agent activity data.
13
+ The injected workspace `AgentSessionEngine`, reached through
14
+ `AgentActivityRuntime`, is AgentGUI's only source for canonical agent activity
15
+ data.
14
16
 
15
17
  Runtime-owned data includes:
16
18
 
17
- - workspace activity snapshots
18
- - session lists
19
- - paged session messages
20
- - retained live session events
21
- - session event subscriptions
22
- - session create, activate, unactivate, input, cancel, interactive submit,
23
- delete, pin, settings update, control-state read, composer-options read, and
24
- get session operations
25
- - provider/session preparation hooks that directly gate activity flow, such as
26
- OpenClaw gateway warmup
19
+ - canonical sessions, turns, interactions, and operation state
20
+ - prompt queue and correlated optimistic intents
21
+ - stable selector projections
22
+ - semantic session, turn, prompt, interaction, settings, and goal commands
27
23
 
28
24
  Runtime-owned capability declarations are optional and default to enabled:
29
25
 
@@ -31,9 +27,25 @@ Runtime-owned capability declarations are optional and default to enabled:
31
27
  - `canSubmitInteractive`: shows approval, ask-user, and plan-decision
32
28
  interaction entries.
33
29
  - `canGoalControl`: shows goal banner controls, `/goal`, and the goal badge.
34
- - `canUploadAttachment`: enables prompt attachment upload paths such as pasted
35
- images, pasted large text, and dropped or host-local files. Ordinary `@`
36
- references and workspace-reference mentions remain available.
30
+ - `canUploadAttachment`: enables prompt attachment paths. Pasted large text
31
+ additionally requires the explicit `AgentActivityRuntime.stagePastedText`
32
+ host method; AgentGUI does not infer that capability from generic file
33
+ upload support. Ordinary `@` references and workspace-reference mentions
34
+ remain available.
35
+
36
+ ## Pasted Text Staging
37
+
38
+ AgentGUI classifies plain-text clipboard content before delegating structured
39
+ mention HTML. A trimmed payload of at least 5,000 characters is never inserted
40
+ into the prompt automatically. It becomes a pasted-text draft attachment and
41
+ is passed as raw text to `AgentActivityRuntime.stagePastedText`; the host owns
42
+ local persistence and returns `{ path, name, sizeBytes }`.
43
+
44
+ If the method is absent or staging fails, the attachment remains in an explicit
45
+ failed state and retains its in-memory text. AgentGUI must not silently put the
46
+ payload back into the input. The user can explicitly choose “Show in text
47
+ field” to do that. Generic `uploadPromptContent` remains the contract for
48
+ images and host-local files; it is not a pasted-text capability signal.
37
49
 
38
50
  Slash commands come from the runtime session command snapshot. AgentGUI keeps
39
51
  legacy provider-default slash entries unless the host passes
@@ -49,34 +61,29 @@ render-state changes, and caught errors. Set
49
61
  fallback. Production builds stay silent unless the host provides
50
62
  `reportDiagnostic`.
51
63
 
52
- `AgentHostApi` is still accepted for host capabilities that are not agent
53
- activity data:
64
+ Host capabilities remain separate from activity data. `AgentHostApi` is still
65
+ accepted for host capabilities that are not agent activity data:
54
66
 
55
67
  - workspace files and file references
56
68
  - clipboard
57
- - runtime metadata and diagnostics
58
69
  - account/user lookup
59
70
  - user-project selection
60
71
  - local file picking/reading and batch export helpers
61
72
 
62
- Production AgentGUI must receive `agentActivityRuntime` and must not use legacy
63
- Host API methods as an agent data fallback. Compatibility helpers remain only
64
- for projection boundaries, non-desktop legacy hosts, and tests.
73
+ AgentGUI has no host-API activity fallback. A host must inject the runtime and
74
+ the grouped `AgentGUINodeProps` responsibility objects.
65
75
 
66
76
  ## Boundary Rule
67
77
 
68
78
  `AgentActivity*` types from `@tutti-os/agent-activity-core` are the canonical
69
- frontend agent activity model.
70
-
71
- `AgentHostWorkspaceAgent*` DTOs are allowed only in compatibility/projection
72
- code that adapts legacy AgentGUI internals. New production read paths should use
73
- `useAgentActivityRuntime()` or `useOptionalAgentActivityRuntime()` instead of
74
- calling `workspaceAgents.list`, `workspaceAgents.listSessionMessages`,
75
- `agentSessions.retainEventStream`, `agentSessions.subscribeEvents`, or
76
- `agentSessions.getState` directly. Production writes should call runtime methods
77
- instead of `agentSessions.activate`, `agentSessions.unactivate`,
78
- `agentSessions.exec`, `agentSessions.cancel`, `agentSessions.submitInteractive`,
79
- `agentSessions.updateSettings`, or `agentSessions.pinSession`.
79
+ frontend agent activity model. Production reads use exported engine selectors;
80
+ production writes use engine commands. GUI modules must not read entity maps,
81
+ subscribe to daemon streams, or reconstruct session/turn lifecycle from
82
+ messages.
83
+
84
+ Runtime identity is explicit: each consumer resolves the injected engine and
85
+ verifies its `(workspaceId, origin)` identity. Module-global runtime slots and
86
+ hidden origin registries are forbidden.
80
87
 
81
88
  Run this boundary check after changing AgentGUI data flow:
82
89
 
@@ -84,6 +91,27 @@ Run this boundary check after changing AgentGUI data flow:
84
91
  pnpm check:agent-activity-runtime-boundaries
85
92
  ```
86
93
 
94
+ ## Node Contract
95
+
96
+ `AgentGUINodeProps` has eight required top-level responsibilities:
97
+ `identity`, `workspace`, `frame`, `state`, `runtimeRequests`,
98
+ `hostCapabilities`, `hostActions`, and `renderSlots`. Extend the owning object;
99
+ do not restore flat compatibility props.
100
+
101
+ ## Home Suggestions
102
+
103
+ The five starter entries below the empty new-session composer are enabled by
104
+ default. External hosts can hide individual entries with the public
105
+ `AgentGUI.disabled` array:
106
+
107
+ ```tsx
108
+ <AgentGUI disabled={["meet-tutti", "import-session"]} {...props} />
109
+ ```
110
+
111
+ The supported stable IDs are `meet-tutti`, `task-breakdown`, `quality-review`,
112
+ `agent-interaction`, and `import-session`. Omitting `disabled` (or passing an
113
+ empty array) renders all five entries.
114
+
87
115
  ## Agent Directory
88
116
 
89
117
  `AgentGUI` requires the host's `/agents` projection through its `agents` prop.
@@ -95,6 +123,7 @@ export interface AgentGUIAgent {
95
123
  agentTargetId: string;
96
124
  name: string;
97
125
  iconUrl: string;
126
+ heroImageUrl?: string | null;
98
127
  description?: string | null;
99
128
  owner?: {
100
129
  name?: string | null;
@@ -121,9 +150,14 @@ may share the same `provider` and remain distinct. `provider` is runtime metadat
121
150
  for provider-native execution, composer policy, probes, and capabilities; it
122
151
  must not be used to group, deduplicate, name, icon, or select agents.
123
152
 
124
- Agent names and primary icons always come from `agents[].name` and
125
- `agents[].iconUrl`. `owner.avatarUrl` is rendered separately as an ownership
126
- badge. Invalid entries and duplicate `agentTargetId` values are discarded by
153
+ Runnable provider targets are host-supplied. If the target catalog is absent,
154
+ AgentGUI presents an explicit unavailable state; it does not synthesize local
155
+ targets from presentation metadata.
156
+
157
+ Agent names, primary icons, and optional home-carousel artwork come from
158
+ `agents[].name`, `agents[].iconUrl`, and `agents[].heroImageUrl`.
159
+ `owner.avatarUrl` is rendered separately as an ownership badge. Invalid entries
160
+ and duplicate `agentTargetId` values are discarded by
127
161
  `normalizeAgentGUIAgents`, with the first occurrence preserving host order.
128
162
 
129
163
  With one agent, AgentGUI hides the aggregate `All` entry and renders that agent
@@ -131,6 +165,19 @@ directly. With multiple agents, it shows `All` plus the host-ordered agent rail
131
165
  and empty-home carousel. Hosts may customize the aggregate icon with
132
166
  `allAgentsPresentation.iconUrl`.
133
167
 
168
+ Hosts adapting daemon-owned agent targets must resolve the target's descriptor
169
+ `iconKey` instead of assuming it equals the provider ID. The narrow
170
+ `@tutti-os/agent-gui/provider-icons` subpath exports
171
+ `resolveProviderIconAsset(iconKey, variant)` for that adapter seam. Unknown
172
+ keys return `null`; hosts should render a neutral icon rather than silently
173
+ substituting another provider's icon.
174
+
175
+ Hosts that need provider identity presentation may call
176
+ `resolveAgentGUIProviderIdentity(value)` from the narrow
177
+ `@tutti-os/agent-gui/provider-identity` subpath. Migrated providers resolve from
178
+ the generated descriptor catalog, which is checked against the daemon provider
179
+ registry and OpenAPI provider enums.
180
+
134
181
  Inside AgentGUI, normalized directory entries use the canonical
135
182
  `AgentGUIAgentTarget` / `agentTargets` vocabulary. `provider` is execution
136
183
  metadata, not target identity. Rail tiles, the single-agent empty state, and
@@ -143,8 +190,9 @@ for that asset. The WebGL carousel keeps a local programmatic owner marker when
143
190
  the remote image cannot be decoded or uploaded safely, while DOM avatar
144
191
  surfaces continue using the same shared presentation.
145
192
 
146
- Use `agentsLoading` for directory hydration and `renderAgentsEmpty` for a
147
- host-specific loaded-empty state. Use `renderAgentUnavailableState` or
193
+ Pass the full `agentDirectory` lifecycle snapshot for directory hydration and
194
+ use `renderAgentsEmpty` for a host-specific loaded-empty state. Use
195
+ `renderAgentUnavailableState` or
148
196
  `renderAgentReadinessState` for host-specific availability presentation, and
149
197
  handle install/login/refresh requests through `onAgentAvailabilityAction`.
150
198