@xenosystem/agent-conversation 0.1.36 → 0.1.38

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 (86) hide show
  1. package/dist/adapters/xenoAgentHostCatalog.d.ts.map +1 -1
  2. package/dist/adapters/xenoAgentHostCatalog.js +20 -5
  3. package/dist/adapters/xenoAgentHostCatalog.js.map +1 -1
  4. package/dist/components/agent/AgentView.d.ts +9 -0
  5. package/dist/components/agent/AgentView.d.ts.map +1 -1
  6. package/dist/components/agent/AgentView.js +883 -1045
  7. package/dist/components/agent/AgentView.js.map +1 -1
  8. package/dist/components/agent/GhostTextArea.d.ts +6 -0
  9. package/dist/components/agent/GhostTextArea.d.ts.map +1 -1
  10. package/dist/components/agent/GhostTextArea.js +15 -5
  11. package/dist/components/agent/GhostTextArea.js.map +1 -1
  12. package/dist/components/agent/LiveConversationCollaboration.d.ts +3 -1
  13. package/dist/components/agent/LiveConversationCollaboration.d.ts.map +1 -1
  14. package/dist/components/agent/LiveConversationCollaboration.js +3 -1
  15. package/dist/components/agent/LiveConversationCollaboration.js.map +1 -1
  16. package/dist/components/agent/MessageText.d.ts +36 -0
  17. package/dist/components/agent/MessageText.d.ts.map +1 -0
  18. package/dist/components/agent/MessageText.js +76 -0
  19. package/dist/components/agent/MessageText.js.map +1 -0
  20. package/dist/components/agent/SdkSessionPanel.d.ts +2 -0
  21. package/dist/components/agent/SdkSessionPanel.d.ts.map +1 -1
  22. package/dist/components/agent/SdkSessionPanel.js +1 -1
  23. package/dist/components/agent/SdkSessionPanel.js.map +1 -1
  24. package/dist/components/agent/composer/Composer.d.ts +282 -0
  25. package/dist/components/agent/composer/Composer.d.ts.map +1 -0
  26. package/dist/components/agent/composer/Composer.js +393 -0
  27. package/dist/components/agent/composer/Composer.js.map +1 -0
  28. package/dist/components/agent/composer/EffortCells.d.ts +12 -0
  29. package/dist/components/agent/composer/EffortCells.d.ts.map +1 -0
  30. package/dist/components/agent/composer/EffortCells.js +146 -0
  31. package/dist/components/agent/composer/EffortCells.js.map +1 -0
  32. package/dist/components/agent/composer/Tip.d.ts +19 -0
  33. package/dist/components/agent/composer/Tip.d.ts.map +1 -0
  34. package/dist/components/agent/composer/Tip.js +86 -0
  35. package/dist/components/agent/composer/Tip.js.map +1 -0
  36. package/dist/components/agent/composer/TypedMenu.d.ts +56 -0
  37. package/dist/components/agent/composer/TypedMenu.d.ts.map +1 -0
  38. package/dist/components/agent/composer/TypedMenu.js +156 -0
  39. package/dist/components/agent/composer/TypedMenu.js.map +1 -0
  40. package/dist/components/agent/mainAssistant.d.ts +9 -2
  41. package/dist/components/agent/mainAssistant.d.ts.map +1 -1
  42. package/dist/components/agent/mainAssistant.js +9 -2
  43. package/dist/components/agent/mainAssistant.js.map +1 -1
  44. package/dist/components/agent/toolCallDerive.d.ts +82 -0
  45. package/dist/components/agent/toolCallDerive.d.ts.map +1 -0
  46. package/dist/components/agent/toolCallDerive.js +741 -0
  47. package/dist/components/agent/toolCallDerive.js.map +1 -0
  48. package/dist/components/agent/transcript/Transcript.d.ts +127 -0
  49. package/dist/components/agent/transcript/Transcript.d.ts.map +1 -0
  50. package/dist/components/agent/transcript/Transcript.js +544 -0
  51. package/dist/components/agent/transcript/Transcript.js.map +1 -0
  52. package/dist/components/agent/transcript/glyphs.d.ts +83 -0
  53. package/dist/components/agent/transcript/glyphs.d.ts.map +1 -0
  54. package/dist/components/agent/transcript/glyphs.js +124 -0
  55. package/dist/components/agent/transcript/glyphs.js.map +1 -0
  56. package/dist/components/agent/transcript/stepModel.d.ts +163 -0
  57. package/dist/components/agent/transcript/stepModel.d.ts.map +1 -0
  58. package/dist/components/agent/transcript/stepModel.js +701 -0
  59. package/dist/components/agent/transcript/stepModel.js.map +1 -0
  60. package/dist/components/agent/transcript/turnModel.d.ts +124 -0
  61. package/dist/components/agent/transcript/turnModel.d.ts.map +1 -0
  62. package/dist/components/agent/transcript/turnModel.js +166 -0
  63. package/dist/components/agent/transcript/turnModel.js.map +1 -0
  64. package/dist/components/agent/transcript/useAskActions.d.ts +23 -0
  65. package/dist/components/agent/transcript/useAskActions.d.ts.map +1 -0
  66. package/dist/components/agent/transcript/useAskActions.js +92 -0
  67. package/dist/components/agent/transcript/useAskActions.js.map +1 -0
  68. package/dist/parityFixture.d.ts +54 -0
  69. package/dist/parityFixture.d.ts.map +1 -0
  70. package/dist/parityFixture.js +195 -0
  71. package/dist/parityFixture.js.map +1 -0
  72. package/dist/platformApiTypes.d.ts +10 -1
  73. package/dist/platformApiTypes.d.ts.map +1 -1
  74. package/dist/stores/agentChatStore.d.ts +61 -1
  75. package/dist/stores/agentChatStore.d.ts.map +1 -1
  76. package/dist/stores/agentChatStore.js +89 -25
  77. package/dist/stores/agentChatStore.js.map +1 -1
  78. package/dist/types/agentPermissions.d.ts +3 -1
  79. package/dist/types/agentPermissions.d.ts.map +1 -1
  80. package/dist/utils/acpExecutionAuthority.d.ts.map +1 -1
  81. package/dist/utils/acpExecutionAuthority.js +2 -0
  82. package/dist/utils/acpExecutionAuthority.js.map +1 -1
  83. package/package.json +6 -5
  84. package/src/composer.css +337 -0
  85. package/src/styles.css +7 -0
  86. package/src/transcript.css +585 -0
@@ -0,0 +1,195 @@
1
+ import { createConversationRuntimeBinding, runtimeSelectionForSdk } from './utils/conversationRuntime.js';
2
+ export const PARITY_FRAMES = ['chat', 'agent', 'machine'];
3
+ export function isParityFrame(value) {
4
+ return value === 'chat' || value === 'agent' || value === 'machine';
5
+ }
6
+ const PROJECT_ROOT = 'C:\\xeno\\xeno-agent-interface';
7
+ /**
8
+ * The bench's agent frame shows the project's branch and a `+1 −1` diff, which the panel reads from
9
+ * the host's git status. The preview's fixture host has no git, so in the agent frame ONLY the bridge
10
+ * answers that one call with the bench's values — at the bridge boundary, the one the panel reads, and
11
+ * nowhere else. Every other call passes through untouched.
12
+ */
13
+ export function withParityGitStatus(bridge, frame) {
14
+ if (frame !== 'agent')
15
+ return bridge;
16
+ const engineering = bridge.engineering || {};
17
+ return {
18
+ ...bridge,
19
+ engineering: {
20
+ ...engineering,
21
+ gitStatus: async () => ({ success: true, isGitRepo: true, branch: 'feat/panel-identity', files: [{ path: 'packages/ui/src/composer.css', additions: 1, deletions: 1 }] }),
22
+ },
23
+ };
24
+ }
25
+ /**
26
+ * The bench's frames are all drawn on a computer that answers — its Machine lane is offered in the
27
+ * chat and agent frames too, not only when the machine frame is selected. The fixture host has no
28
+ * XENO Use device, so for every parity frame the bridge's device query answers with one fixture
29
+ * device — at the same boundary as the git status above, so the panel's own probe runs unchanged
30
+ * and every surface (preview or real shell) reaches the frame through the same code path.
31
+ */
32
+ export function withParityMachine(bridge, _frame) {
33
+ const machine = bridge.machine || {};
34
+ return {
35
+ ...bridge,
36
+ machine: {
37
+ ...machine,
38
+ devices: async () => ({ success: true, devices: [{ deviceId: 'parity-fixture-device', kind: 'desktop', os: 'fixture', width: 1920, height: 1080, verbs: [] }] }),
39
+ },
40
+ };
41
+ }
42
+ /** Both bench-only overrides, for the frame being seeded. */
43
+ export function withParityBridge(bridge, frame) {
44
+ return withParityMachine(withParityGitStatus(bridge, frame), frame);
45
+ }
46
+ /** A Cloud turn on `model` at effort High — the bench's pill reads High in all three frames. */
47
+ function cloudRuntime(model) {
48
+ return createConversationRuntimeBinding({ selection: runtimeSelectionForSdk(), model, reasoningModel: model, inferenceMode: 'cloud', reasoningOptionId: 'high' });
49
+ }
50
+ /** A timestamp today at hh:mm — the bench prints wall-clock times on its messages. */
51
+ function todayAt(hours, minutes) {
52
+ const at = new Date();
53
+ at.setHours(hours, minutes, 0, 0);
54
+ return at.getTime();
55
+ }
56
+ export function seedParityConversation(store, agentId, frame) {
57
+ const state = store.getState();
58
+ const now = Date.now();
59
+ const id = state.createConversation(agentId);
60
+ const append = (message) => state.appendMessage(id, message);
61
+ if (frame === 'chat') {
62
+ append({ id: 'parity-chat-u1', role: 'user', content: 'Draft a two-line status for the team on the Friday demo.', timestamp: todayAt(12, 41) });
63
+ append({
64
+ id: 'parity-chat-a1', role: 'assistant', timestamp: todayAt(12, 41) + 2_000, model: 'claude-sonnet-5',
65
+ // the host's terminal event, 2 s after the turn began — the receipt's `Sonnet 5 · 2s`
66
+ endedAt: todayAt(12, 41) + 4_000,
67
+ content: 'Here’s a version:\n\n> Demo is Friday at 3. Build 0.4 runs offline; slides land Thursday.\n\nWant it shorter, or with the room?',
68
+ });
69
+ append({ id: 'parity-chat-u2', role: 'user', content: 'What did Lil Bro say about the demo? Check my mail — @gmail', timestamp: now - 1_000 });
70
+ append({
71
+ id: 'parity-chat-a2', role: 'assistant', timestamp: now - 1_000, isStreaming: true, content: '',
72
+ thinkingMs: 1_000,
73
+ thinking: 'Reading the mail thread first — the question is about what he said\nChecking whether the build he mentions is public',
74
+ isThinking: false,
75
+ segments: [
76
+ { id: 'pc-s1', kind: 'tool_call', createdAt: 1, toolCallId: 'pc-read' },
77
+ { id: 'pc-s2', kind: 'tool_call', createdAt: 2, toolCallId: 'pc-ask' },
78
+ ],
79
+ toolCalls: [
80
+ {
81
+ id: 'pc-read', toolName: 'mcp__gmail__list_threads', params: { from: 'Lil Bro' }, status: 'done', success: true,
82
+ result: 'Re: demo on Friday — Thu 18:02\ndemo build — Wed 09:41\n(no subject) — Tue 22:10',
83
+ },
84
+ {
85
+ id: 'pc-ask', toolName: 'askuser', status: 'running',
86
+ askUserRequest: { askUserId: 'pc-ask-1', question: 'Three threads match — which one do you mean?', options: ['Re: demo on Friday', 'demo build', '(no subject)'], status: 'pending' },
87
+ },
88
+ ],
89
+ });
90
+ // the mention the bench draws as a chip, recorded the way the composer's picker records one
91
+ // 25% of Sonnet 5's 1M-token window — the bench's meter — as the host reports usage after a turn
92
+ state.updateConversation(id, { title: 'Friday demo', workspaceMode: 'chat', model: 'claude-sonnet-5', runtime: cloudRuntime('claude-sonnet-5'), sessionUi: { referenceTokens: { '@gmail': 'message' }, runtimeTokenUsage: { input: 240_000, output: 10_000, total: 250_000 } } });
93
+ }
94
+ if (frame === 'agent') {
95
+ append({ id: 'parity-agent-u1', role: 'user', content: 'Fold the composer captions into tooltips in @packages/ui/, then run the tests.', timestamp: now - 1_000 });
96
+ append({
97
+ id: 'parity-agent-a1', role: 'assistant', timestamp: now - 1_000, isStreaming: true, content: '', model: 'claude-opus-5',
98
+ thinkingMs: 1_000,
99
+ thinking: 'Reading how the captions are laid out\nFinding every place they are rendered\nA tooltip on the control keeps the sentence and gives the space back',
100
+ isThinking: false,
101
+ segments: [{ id: 'pa-s1', kind: 'tool_call', createdAt: 1, toolCallId: 'pa-plan' }],
102
+ // the plan is written and the agent is waiting for a go — the bench's `.xrow.plan.ask`
103
+ toolCalls: [
104
+ {
105
+ id: 'pa-plan', toolName: 'exitplanmode', status: 'running',
106
+ permissionRequest: { permissionId: 'pa-plan-1', toolName: 'exitplanmode', path: '', directory: '', status: 'pending' },
107
+ },
108
+ ],
109
+ });
110
+ state.updateConversation(id, {
111
+ title: 'Composer captions',
112
+ workspaceMode: 'agent',
113
+ rootDirectory: PROJECT_ROOT,
114
+ grantedDirectories: [PROJECT_ROOT],
115
+ model: 'claude-opus-5',
116
+ runtime: cloudRuntime('claude-opus-5'),
117
+ sessionUi: { referenceTokens: { '@packages/ui/': 'file' } },
118
+ tasks: ['Read the composer', 'Move the captions into tooltips', 'Run the tests', 'Post the result in Discord', 'Report what changed']
119
+ .map((text, index) => ({ id: `parity-agent-k${index}`, sourceMessageId: 'parity-agent-a1', text, status: 'pending', createdAt: now - 1_000, updatedAt: now - 1_000 })),
120
+ });
121
+ }
122
+ if (frame === 'machine') {
123
+ append({ id: 'parity-machine-u1', role: 'user', content: 'Ask him what’s up, in Lil Bro — Discord', timestamp: now - 1_000 });
124
+ append({
125
+ id: 'parity-machine-a1', role: 'assistant', timestamp: now - 1_000, isStreaming: true, content: '',
126
+ segments: [
127
+ { id: 'pm-s1', kind: 'tool_call', createdAt: 1, toolCallId: 'pm-find' },
128
+ { id: 'pm-s2', kind: 'text', createdAt: 2, text: 'I’ll send it. Discord is open; I need the go-ahead to act in it.' },
129
+ { id: 'pm-s3', kind: 'tool_call', createdAt: 3, toolCallId: 'pm-grant' },
130
+ ],
131
+ toolCalls: [
132
+ { id: 'pm-find', toolName: 'computer', params: { action: 'list_apps' }, status: 'done', success: true, result: 'Discord' },
133
+ {
134
+ id: 'pm-grant', toolName: 'openapp', params: { app: 'Discord' }, status: 'running',
135
+ permissionRequest: { permissionId: 'pm-grant-1', toolName: 'openapp', path: '', directory: '', status: 'pending' },
136
+ },
137
+ ],
138
+ });
139
+ // Machine: a chat-profile conversation the person pointed at this computer (`sessionUi.machine`)
140
+ state.updateConversation(id, { title: 'Lil Bro', workspaceMode: 'chat', model: 'claude-sonnet-5', runtime: cloudRuntime('claude-sonnet-5'), sessionUi: { machine: true, referenceTokens: { 'Lil Bro — Discord': 'app-window' } } });
141
+ }
142
+ // The live turn must be live to the HOST, not just to the store. The runtime projection treats a
143
+ // pending ask on a turn with no runtime events as state left over from a previous process and
144
+ // cancels it ("Cancelled because Hub restarted…") — correct behaviour, and why the first two renders
145
+ // of this fixture showed the question as "Cancelled — no answer". Marking the turn active in the
146
+ // store was NOT enough (that was the first attempt); a host's first event for a turn is. Sent last,
147
+ // so no later `sessionUi` write can replace it.
148
+ const liveTurn = { chat: 'parity-chat-a2', agent: 'parity-agent-a1', machine: 'parity-machine-a1' }[frame];
149
+ /*
150
+ * The rail's order now travels through `appendMessage` itself — each turn above declares its own
151
+ * `segments`, and the store carries them.
152
+ *
153
+ * 🔴 It used to be written here, onto the store, AFTER the fact: `appendMessage` built its message
154
+ * field by field and `segments` was not one of them, so the words a turn said BETWEEN two steps
155
+ * (the machine frame's "I'll send it…" note) could not reach the rail through the normal path.
156
+ * That was a product limitation, not a fixture convenience — a replayed turn could not state the
157
+ * order it happened in — and this workaround is what made it invisible. Fixed 2026-09-15; see
158
+ * `agentChatStore.turnSegments.test.ts`, which fails without it.
159
+ */
160
+ store.getState().appendRuntimeEvent(liveTurn, { id: `${liveTurn}:started`, type: 'turn.started', timestamp: new Date().toISOString(), requestId: liveTurn, conversationId: id });
161
+ store.setState({ activeConversationId: id, activeRequestId: liveTurn, activeTurnsByConversation: { [id]: liveTurn } });
162
+ return id;
163
+ }
164
+ /** The live turn's first beat: the tool calls that had already landed before the ask arrived. */
165
+ const FIRST_BEAT = { chat: [], agent: [], machine: ['pm-find'] };
166
+ /**
167
+ * A turn ARRIVES; it is not mounted whole. The bench's `#fast` mode runs each turn through its
168
+ * beats — the thought, then the step, then the ask — and the clock line's ticker carries the marks
169
+ * of that history (`.in` on an item that replaced another, `.first` on the one that opened). A
170
+ * fixture written in one write lands the ticker on `.first` for an item the bench reached by
171
+ * replacement, and the two never pair.
172
+ *
173
+ * So the live turn is held at its first beat — the thought still live, or the first step alone —
174
+ * and the surface advances it one beat later, exactly the sequence a host produces. The message
175
+ * the store holds is the SAME normalized record both times; only its last beat is withheld.
176
+ */
177
+ export function holdParityTurnAtItsFirstBeat(store, frame, conversationId) {
178
+ const liveTurn = { chat: 'parity-chat-a2', agent: 'parity-agent-a1', machine: 'parity-machine-a1' }[frame];
179
+ const first = new Set(FIRST_BEAT[frame]);
180
+ const read = () => store.getState().conversations;
181
+ const write = (patch) => {
182
+ const conversations = read();
183
+ const current = conversations[conversationId];
184
+ store.setState({ conversations: { ...conversations, [conversationId]: { ...current, messages: current.messages.map((message) => (message.id === liveTurn ? patch(message) : message)) } } });
185
+ };
186
+ const whole = read()[conversationId].messages.find((message) => message.id === liveTurn);
187
+ write((message) => ({
188
+ ...message,
189
+ ...(message.thinking ? { isThinking: true } : {}),
190
+ toolCalls: (message.toolCalls || []).filter((call) => first.has(call.id)),
191
+ segments: (message.segments || []).filter((segment) => segment.kind === 'tool_call' && !!segment.toolCallId && first.has(segment.toolCallId)),
192
+ }));
193
+ return () => write(() => whole);
194
+ }
195
+ //# sourceMappingURL=parityFixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parityFixture.js","sourceRoot":"","sources":["../src/parityFixture.ts"],"names":[],"mappings":"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"}
@@ -131,8 +131,17 @@ export interface XenoAPI {
131
131
  workspaceRules?: {
132
132
  request(input: import('@xenosystem/agent-interface-contract').AgentWorkspaceRulesRequest): Promise<import('@xenosystem/agent-interface-contract').AgentWorkspaceRulesResult>;
133
133
  };
134
+ /** Machine use (D11): the grants the host holds for a conversation, and the way to give one back. */
135
+ machine?: {
136
+ devices(input: Omit<import('@xenosystem/agent-interface-contract').AgentMachineDevicesRequest, 'client'>): Promise<import('@xenosystem/agent-interface-contract').AgentMachineDevicesResult>;
137
+ grant(input: Omit<import('@xenosystem/agent-interface-contract').AgentMachineGrantRequest, 'client'>): Promise<import('@xenosystem/agent-interface-contract').AgentMachineGrantResult>;
138
+ grants(input: Omit<import('@xenosystem/agent-interface-contract').AgentMachineGrantsRequest, 'client'>): Promise<import('@xenosystem/agent-interface-contract').AgentMachineGrantsResult>;
139
+ revoke(input: Omit<import('@xenosystem/agent-interface-contract').AgentMachineRevokeRequest, 'client'>): Promise<import('@xenosystem/agent-interface-contract').AgentMachineRevokeResult>;
140
+ act(input: Omit<import('@xenosystem/agent-interface-contract').AgentMachineActRequest, 'client'>): Promise<import('@xenosystem/agent-interface-contract').AgentMachineActResult>;
141
+ };
134
142
  account?: {
135
143
  request(input: import('@xenosystem/agent-interface-contract').AgentAccountRequest): Promise<import('@xenosystem/agent-interface-contract').AgentAccountResult>;
144
+ onStateChanged?(listener: (pending: boolean) => void): () => void;
136
145
  };
137
146
  workforce?: {
138
147
  request(input: import('@xenosystem/agent-interface-contract').AgentWorkforceRequest): Promise<import('@xenosystem/agent-interface-contract').AgentWorkforceResult>;
@@ -852,7 +861,7 @@ export interface XenoAPI {
852
861
  imageGeneration?: boolean;
853
862
  dataAnalysis?: boolean;
854
863
  };
855
- permissionProfile?: 'standard' | 'read-only' | 'edit-with-approval' | 'trusted-workspace' | 'plan';
864
+ permissionProfile?: 'standard' | 'read-only' | 'edit-with-approval' | 'trusted-workspace' | 'plan' | 'full-access';
856
865
  allowedDirectories?: string[];
857
866
  approvalRules?: Array<Record<string, unknown>>;
858
867
  contextCompaction?: AgentContextCompactionMetrics;