@guildai/cli 0.11.0 → 0.12.1

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 (203) hide show
  1. package/dist/auth-67G3BIAW.js +29 -0
  2. package/dist/auth-67G3BIAW.js.map +7 -0
  3. package/dist/chat-ALOJ22JR.js +303 -0
  4. package/dist/chat-ALOJ22JR.js.map +7 -0
  5. package/dist/chat-SG2I727J.js +33 -0
  6. package/dist/chat-SG2I727J.js.map +7 -0
  7. package/dist/chunk-56YCMGL3.js +522 -0
  8. package/dist/chunk-56YCMGL3.js.map +7 -0
  9. package/dist/chunk-6EX6E7WP.js +7042 -0
  10. package/dist/chunk-6EX6E7WP.js.map +7 -0
  11. package/dist/chunk-7JJT3RNI.js +97272 -0
  12. package/dist/chunk-7JJT3RNI.js.map +7 -0
  13. package/dist/chunk-ENKEEJ45.js +17 -0
  14. package/dist/chunk-ENKEEJ45.js.map +7 -0
  15. package/dist/chunk-EQUW4M5A.js +532 -0
  16. package/dist/chunk-EQUW4M5A.js.map +7 -0
  17. package/dist/chunk-F3F5CUO3.js +841 -0
  18. package/dist/chunk-F3F5CUO3.js.map +7 -0
  19. package/dist/chunk-JQRJ4A4S.js +19778 -0
  20. package/dist/chunk-JQRJ4A4S.js.map +7 -0
  21. package/dist/chunk-M347HP6M.js +22896 -0
  22. package/dist/chunk-M347HP6M.js.map +7 -0
  23. package/dist/chunk-OYQ476FQ.js +44 -0
  24. package/dist/chunk-OYQ476FQ.js.map +7 -0
  25. package/dist/chunk-PNCUR4OB.js +257 -0
  26. package/dist/chunk-PNCUR4OB.js.map +7 -0
  27. package/dist/chunk-RJHD6XTV.js +317 -0
  28. package/dist/chunk-RJHD6XTV.js.map +7 -0
  29. package/dist/chunk-VVSOU6ON.js +53 -0
  30. package/dist/chunk-VVSOU6ON.js.map +7 -0
  31. package/dist/chunk-X3ADGWOF.js +3643 -0
  32. package/dist/chunk-X3ADGWOF.js.map +7 -0
  33. package/dist/chunk-YQWI6SUV.js +3057 -0
  34. package/dist/chunk-YQWI6SUV.js.map +7 -0
  35. package/dist/commands/chat.d.ts +21 -0
  36. package/dist/commands/skill/create.d.ts +3 -0
  37. package/dist/commands/skill/get.d.ts +3 -0
  38. package/dist/commands/skill/list.d.ts +3 -0
  39. package/dist/commands/skill/update.d.ts +3 -0
  40. package/dist/commands/skill/version/create.d.ts +3 -0
  41. package/dist/commands/skill/version/get.d.ts +3 -0
  42. package/dist/commands/skill/version/list.d.ts +3 -0
  43. package/dist/devtools-AO7YSDOD.js +67 -0
  44. package/dist/devtools-AO7YSDOD.js.map +7 -0
  45. package/dist/dist-4CBK6X5H.js +1566 -0
  46. package/dist/dist-4CBK6X5H.js.map +7 -0
  47. package/dist/esm-FRAVZP4J.js +13 -0
  48. package/dist/esm-FRAVZP4J.js.map +7 -0
  49. package/dist/execa-XQMWSABC.js +35 -0
  50. package/dist/execa-XQMWSABC.js.map +7 -0
  51. package/dist/index.js +8230 -263
  52. package/dist/index.js.map +7 -0
  53. package/dist/lib/api-types.d.ts +44 -0
  54. package/dist/lib/config.d.ts +9 -0
  55. package/dist/lib/display-message.d.ts +11 -0
  56. package/dist/lib/errors.d.ts +1 -1
  57. package/dist/lib/markdown.d.ts +2 -9
  58. package/dist/lib/output.d.ts +11 -1
  59. package/dist/lib/response-stream-display-state.d.ts +51 -0
  60. package/dist/lib/session-events.d.ts +5 -1
  61. package/dist/lib/session-polling.d.ts +24 -1
  62. package/dist/lib/session-resume.d.ts +2 -6
  63. package/dist/lib/websocket-client.d.ts +46 -0
  64. package/dist/open-RF4X5MOP.js +13 -0
  65. package/dist/open-RF4X5MOP.js.map +7 -0
  66. package/dist/server-CKXFV2JC.js +27659 -0
  67. package/dist/server-CKXFV2JC.js.map +7 -0
  68. package/dist/test-VEA4ENOR.js +692 -0
  69. package/dist/test-VEA4ENOR.js.map +7 -0
  70. package/docs/skills/codex-agent-dev.md +2 -2
  71. package/package.json +8 -12
  72. package/dist/commands/agent/chat.js +0 -281
  73. package/dist/commands/agent/clone.js +0 -118
  74. package/dist/commands/agent/code.js +0 -87
  75. package/dist/commands/agent/fork.js +0 -220
  76. package/dist/commands/agent/get.js +0 -37
  77. package/dist/commands/agent/grep.js +0 -107
  78. package/dist/commands/agent/init.js +0 -403
  79. package/dist/commands/agent/list.js +0 -110
  80. package/dist/commands/agent/logs.js +0 -62
  81. package/dist/commands/agent/owners.js +0 -74
  82. package/dist/commands/agent/publish.js +0 -91
  83. package/dist/commands/agent/pull.js +0 -194
  84. package/dist/commands/agent/revalidate.js +0 -56
  85. package/dist/commands/agent/save.js +0 -345
  86. package/dist/commands/agent/search.js +0 -61
  87. package/dist/commands/agent/tags/add.js +0 -73
  88. package/dist/commands/agent/tags/list.js +0 -43
  89. package/dist/commands/agent/tags/remove.js +0 -84
  90. package/dist/commands/agent/tags/set.js +0 -71
  91. package/dist/commands/agent/test.js +0 -489
  92. package/dist/commands/agent/unpublish.js +0 -64
  93. package/dist/commands/agent/update.js +0 -118
  94. package/dist/commands/agent/versions.js +0 -55
  95. package/dist/commands/agent/workspaces.js +0 -54
  96. package/dist/commands/auth/login.js +0 -31
  97. package/dist/commands/auth/logout.js +0 -24
  98. package/dist/commands/auth/status.js +0 -38
  99. package/dist/commands/auth/token.js +0 -19
  100. package/dist/commands/chat.js +0 -1416
  101. package/dist/commands/config/get.js +0 -64
  102. package/dist/commands/config/list.js +0 -46
  103. package/dist/commands/config/path.js +0 -37
  104. package/dist/commands/config/set.js +0 -132
  105. package/dist/commands/credentials/endpoint-list.js +0 -88
  106. package/dist/commands/credentials/list.js +0 -50
  107. package/dist/commands/credentials/policy-create.js +0 -66
  108. package/dist/commands/credentials/policy-delete.js +0 -33
  109. package/dist/commands/credentials/policy-list.js +0 -45
  110. package/dist/commands/credentials/policy-update.js +0 -66
  111. package/dist/commands/doctor.js +0 -233
  112. package/dist/commands/integration/connect.js +0 -76
  113. package/dist/commands/integration/create.js +0 -298
  114. package/dist/commands/integration/get.js +0 -95
  115. package/dist/commands/integration/list.js +0 -62
  116. package/dist/commands/integration/operation/create.js +0 -164
  117. package/dist/commands/integration/operation/list.js +0 -92
  118. package/dist/commands/integration/update.js +0 -139
  119. package/dist/commands/integration/version/build.js +0 -86
  120. package/dist/commands/integration/version/create.js +0 -45
  121. package/dist/commands/integration/version/get.js +0 -72
  122. package/dist/commands/integration/version/list.js +0 -45
  123. package/dist/commands/integration/version/publish.js +0 -79
  124. package/dist/commands/integration/version/test.js +0 -104
  125. package/dist/commands/job/get-step.js +0 -40
  126. package/dist/commands/job/get.js +0 -44
  127. package/dist/commands/mcp.js +0 -34
  128. package/dist/commands/session/create.js +0 -59
  129. package/dist/commands/session/events.js +0 -56
  130. package/dist/commands/session/get.js +0 -33
  131. package/dist/commands/session/interrupt.js +0 -33
  132. package/dist/commands/session/list.js +0 -59
  133. package/dist/commands/session/send.js +0 -54
  134. package/dist/commands/session/tasks.js +0 -45
  135. package/dist/commands/setup.js +0 -260
  136. package/dist/commands/trigger/activate.js +0 -41
  137. package/dist/commands/trigger/create.js +0 -197
  138. package/dist/commands/trigger/deactivate.js +0 -41
  139. package/dist/commands/trigger/get.js +0 -33
  140. package/dist/commands/trigger/list.js +0 -57
  141. package/dist/commands/trigger/sessions.js +0 -48
  142. package/dist/commands/trigger/update.js +0 -128
  143. package/dist/commands/version.js +0 -24
  144. package/dist/commands/workspace/agent/add.js +0 -114
  145. package/dist/commands/workspace/agent/list.js +0 -78
  146. package/dist/commands/workspace/agent/remove.js +0 -78
  147. package/dist/commands/workspace/clear.js +0 -45
  148. package/dist/commands/workspace/context/edit.js +0 -107
  149. package/dist/commands/workspace/context/get.js +0 -47
  150. package/dist/commands/workspace/context/list.js +0 -51
  151. package/dist/commands/workspace/context/publish.js +0 -42
  152. package/dist/commands/workspace/create.js +0 -51
  153. package/dist/commands/workspace/current.js +0 -63
  154. package/dist/commands/workspace/get.js +0 -39
  155. package/dist/commands/workspace/list.js +0 -70
  156. package/dist/commands/workspace/select.js +0 -184
  157. package/dist/components/AgentInstallPrompt.js +0 -97
  158. package/dist/components/SplashAnimation.js +0 -321
  159. package/dist/components/TaskView.js +0 -268
  160. package/dist/lib/agent-helpers.js +0 -306
  161. package/dist/lib/alternate-screen.js +0 -59
  162. package/dist/lib/api-client.js +0 -154
  163. package/dist/lib/api-types.js +0 -10
  164. package/dist/lib/auth.js +0 -284
  165. package/dist/lib/braille-canvas.js +0 -321
  166. package/dist/lib/colors.js +0 -46
  167. package/dist/lib/config-cache.js +0 -45
  168. package/dist/lib/config.js +0 -153
  169. package/dist/lib/did-you-mean.js +0 -144
  170. package/dist/lib/errors.js +0 -375
  171. package/dist/lib/event-filter.js +0 -91
  172. package/dist/lib/generated-types.js +0 -56
  173. package/dist/lib/git.js +0 -176
  174. package/dist/lib/gk.js +0 -91
  175. package/dist/lib/guild-config.js +0 -178
  176. package/dist/lib/iap.js +0 -117
  177. package/dist/lib/integration-helpers.js +0 -38
  178. package/dist/lib/loading-messages.js +0 -72
  179. package/dist/lib/logo.js +0 -141
  180. package/dist/lib/lottie-serverside.js +0 -181
  181. package/dist/lib/markdown.js +0 -38
  182. package/dist/lib/npmrc.js +0 -59
  183. package/dist/lib/output-mode.js +0 -54
  184. package/dist/lib/output.js +0 -622
  185. package/dist/lib/owner-helpers.js +0 -112
  186. package/dist/lib/polling.js +0 -76
  187. package/dist/lib/progress.js +0 -324
  188. package/dist/lib/session-events-fetch.js +0 -25
  189. package/dist/lib/session-events.js +0 -126
  190. package/dist/lib/session-polling.js +0 -166
  191. package/dist/lib/session-resume.js +0 -229
  192. package/dist/lib/spinners.js +0 -770
  193. package/dist/lib/splash.js +0 -42
  194. package/dist/lib/stdin.js +0 -91
  195. package/dist/lib/svg-to-braille.js +0 -76
  196. package/dist/lib/table.js +0 -59
  197. package/dist/lib/update-check.js +0 -65
  198. package/dist/lib/validate-input-schema.js +0 -208
  199. package/dist/lib/version-helpers.js +0 -137
  200. package/dist/lib/workspace-helpers.js +0 -49
  201. package/dist/mcp/resources.js +0 -67
  202. package/dist/mcp/server.js +0 -64
  203. package/dist/mcp/tools.js +0 -753
@@ -1,166 +0,0 @@
1
- // Copyright 2026 Guild.ai
2
- // SPDX-License-Identifier: Apache-2.0
3
- import { debug, isDebugMode } from './errors.js';
4
- import { shouldShowEvent } from './event-filter.js';
5
- import { fetchEvents } from './session-events-fetch.js';
6
- import { applyResponseStreamText, getAgentNotificationText, isDoneResponseStreamEvent, isResponseStreamEvent, isRootTaskEvent, } from './session-events.js';
7
- /**
8
- * Poll for agent response using from_id cursor.
9
- *
10
- * Handles both multi-turn agents (which emit agent_notification_message)
11
- * and one-shot agents (which may only emit runtime_done with output content).
12
- *
13
- * Priority:
14
- * 1. root agent_notification_message — preferred, immediate return
15
- * 2. root runtime_error — fail fast
16
- * 3. root runtime_done content — fallback for one-shot agents
17
- * 4. root done response-stream after root runtime_done — streaming fallback
18
- */
19
- export async function pollForResponse(client, sessionId, afterEventId, maxWaitTime = 60000) {
20
- const startTime = Date.now();
21
- let fromId = afterEventId;
22
- let responseStreamDone = null;
23
- const responseStreamTexts = new Map();
24
- while (Date.now() - startTime < maxWaitTime) {
25
- const events = await fetchEvents(client, sessionId, { fromId });
26
- let lastAgentRuntimeDone = null;
27
- let rootRuntimeDone = false;
28
- for (const event of events) {
29
- debug(`pollForResponse event: ${event.type}`);
30
- if (event.type === 'agent_notification_message') {
31
- if (isResponseStreamEvent(event)) {
32
- const streamText = applyResponseStreamText(responseStreamTexts.get(event.content.stream_id) ?? '', event.content);
33
- responseStreamTexts.set(event.content.stream_id, streamText);
34
- if (isRootTaskEvent(event) && isDoneResponseStreamEvent(event)) {
35
- responseStreamDone = {
36
- response: streamText,
37
- lastEventId: event.id,
38
- };
39
- }
40
- continue;
41
- }
42
- if (!isRootTaskEvent(event))
43
- continue;
44
- return {
45
- response: getAgentNotificationText(event),
46
- lastEventId: event.id,
47
- };
48
- }
49
- if (event.type === 'runtime_done' &&
50
- event.task &&
51
- 'agent' in event.task &&
52
- isRootTaskEvent(event)) {
53
- rootRuntimeDone = true;
54
- if (event.content !== undefined) {
55
- lastAgentRuntimeDone = JSON.stringify(event.content);
56
- }
57
- }
58
- if (event.type === 'runtime_error' &&
59
- event.task &&
60
- 'agent' in event.task &&
61
- isRootTaskEvent(event)) {
62
- return {
63
- response: JSON.stringify({ error: event.content }),
64
- lastEventId: event.id,
65
- };
66
- }
67
- if (event.type === 'agent_console' && isDebugMode()) {
68
- process.stderr.write(`[console.${event.level}] ${event.content}\n`);
69
- }
70
- }
71
- if (events.length > 0) {
72
- fromId = events[events.length - 1].id;
73
- }
74
- if (lastAgentRuntimeDone !== null) {
75
- return { response: lastAgentRuntimeDone, lastEventId: fromId };
76
- }
77
- if (rootRuntimeDone && responseStreamDone !== null) {
78
- return { response: responseStreamDone.response, lastEventId: fromId };
79
- }
80
- await new Promise((resolve) => setTimeout(resolve, 2000));
81
- }
82
- return responseStreamDone
83
- ? { response: responseStreamDone.response, lastEventId: fromId }
84
- : { response: null, lastEventId: fromId };
85
- }
86
- /**
87
- * Poll for agent response while streaming matching events to stdout as JSONL.
88
- *
89
- * Same completion logic as pollForResponse(), but writes each event that
90
- * passes the filter to stdout so callers get intermediate output (console.log,
91
- * progress, etc.) in JSON/JSONL automation modes.
92
- */
93
- export async function pollForResponseWithEvents(client, sessionId, eventFilter, afterEventId, maxWaitTime = 60000) {
94
- const startTime = Date.now();
95
- let fromId = afterEventId;
96
- let responseStreamDone = null;
97
- const responseStreamTexts = new Map();
98
- while (Date.now() - startTime < maxWaitTime) {
99
- const events = await fetchEvents(client, sessionId, { fromId });
100
- let lastAgentRuntimeDone = null;
101
- let rootRuntimeDone = false;
102
- for (const event of events) {
103
- debug(`pollForResponseWithEvents event: ${event.type}`);
104
- // Stream matching events to stdout as JSONL. Response-stream events are
105
- // transient drafts, so keep automation output stable and wait for the
106
- // final agent message or terminal fallback.
107
- if (shouldShowEvent(event.type, eventFilter) && !isResponseStreamEvent(event)) {
108
- process.stdout.write(JSON.stringify(event) + '\n');
109
- }
110
- if (event.type === 'agent_notification_message') {
111
- if (isResponseStreamEvent(event)) {
112
- const streamText = applyResponseStreamText(responseStreamTexts.get(event.content.stream_id) ?? '', event.content);
113
- responseStreamTexts.set(event.content.stream_id, streamText);
114
- if (isRootTaskEvent(event) && isDoneResponseStreamEvent(event)) {
115
- responseStreamDone = {
116
- response: streamText,
117
- lastEventId: event.id,
118
- };
119
- }
120
- continue;
121
- }
122
- if (!isRootTaskEvent(event))
123
- continue;
124
- return {
125
- response: getAgentNotificationText(event),
126
- lastEventId: event.id,
127
- };
128
- }
129
- if (event.type === 'runtime_done' &&
130
- event.task &&
131
- 'agent' in event.task &&
132
- isRootTaskEvent(event)) {
133
- rootRuntimeDone = true;
134
- if (event.content !== undefined) {
135
- lastAgentRuntimeDone = JSON.stringify(event.content);
136
- }
137
- }
138
- if (event.type === 'runtime_error' &&
139
- event.task &&
140
- 'agent' in event.task &&
141
- isRootTaskEvent(event)) {
142
- return {
143
- response: JSON.stringify({ error: event.content }),
144
- lastEventId: event.id,
145
- };
146
- }
147
- if (event.type === 'agent_console' && isDebugMode()) {
148
- process.stderr.write(`[console.${event.level}] ${event.content}\n`);
149
- }
150
- }
151
- if (events.length > 0) {
152
- fromId = events[events.length - 1].id;
153
- }
154
- if (lastAgentRuntimeDone !== null) {
155
- return { response: lastAgentRuntimeDone, lastEventId: fromId };
156
- }
157
- if (rootRuntimeDone && responseStreamDone !== null) {
158
- return { response: responseStreamDone.response, lastEventId: fromId };
159
- }
160
- await new Promise((resolve) => setTimeout(resolve, 2000));
161
- }
162
- return responseStreamDone
163
- ? { response: responseStreamDone.response, lastEventId: fromId }
164
- : { response: null, lastEventId: fromId };
165
- }
166
- //# sourceMappingURL=session-polling.js.map
@@ -1,229 +0,0 @@
1
- // Copyright 2026 Guild.ai
2
- // SPDX-License-Identifier: Apache-2.0
3
- /**
4
- * Session resume utilities - shared helpers for printing resume hints
5
- * and fetching/converting session events for resume.
6
- */
7
- import chalk from 'chalk';
8
- import { marked } from 'marked';
9
- import { markedTerminal } from 'marked-terminal';
10
- import { applyResponseStreamText, getAgentNotificationText, isResponseStreamEvent, isRootTaskEvent, } from './session-events.js';
11
- import { fetchEvents } from './session-events-fetch.js';
12
- import { brand, code as codeColor } from './colors.js';
13
- // Configure marked for terminal rendering (same config as chat.tsx)
14
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
- marked.use(markedTerminal({}, { theme: {} }));
16
- /**
17
- * Render markdown text to ANSI terminal output.
18
- * Matches the live message rendering pipeline in chat.tsx.
19
- */
20
- function renderMarkdown(text) {
21
- let rendered = marked.parse(text);
22
- // Fix unrendered inline markdown in list items (marked-terminal bug)
23
- rendered = rendered.replace(/\*\*([^*]+)\*\*/g, (_, content) => chalk.bold(content));
24
- rendered = rendered.replace(/`([^`]+)`/g, (_, content) => codeColor(content));
25
- rendered = rendered.replace(/(?<![\\w])_([^_]+)_(?![\\w])/g, (_, content) => chalk.italic(content));
26
- return rendered;
27
- }
28
- /**
29
- * Print a dimmed resume hint to stderr on session exit.
30
- * Only call when a session ID is available.
31
- */
32
- export function printResumeHint(sessionId, command) {
33
- console.error('');
34
- console.error(chalk.dim('[Session interrupted]'));
35
- console.error(chalk.dim('Resume this session later with:'));
36
- console.error(chalk.dim(` ${command} --resume ${sessionId}`));
37
- }
38
- /**
39
- * Fetch all events for a session from the API.
40
- */
41
- export async function fetchSessionEvents(client, sessionId) {
42
- return fetchEvents(client, sessionId);
43
- }
44
- /**
45
- * Fetch an existing session by ID.
46
- */
47
- export async function fetchSession(client, sessionId) {
48
- const session = (await client.get(`/sessions/${sessionId}`));
49
- return session;
50
- }
51
- function renderAssistantText(key, text, timestamp) {
52
- const rendered = renderMarkdown(text);
53
- const messageContent = `${chalk.green('●')} ${chalk.bold('assistant')}\n${rendered.trim()}`;
54
- return {
55
- key,
56
- content: messageContent,
57
- type: 'assistant',
58
- timestamp,
59
- };
60
- }
61
- function textMatches(left, right) {
62
- return left === right;
63
- }
64
- function formatDisplayTimestamp(timestamp) {
65
- if (timestamp === undefined)
66
- return undefined;
67
- const date = new Date(timestamp);
68
- if (Number.isNaN(date.getTime()))
69
- return timestamp;
70
- return date.toLocaleTimeString();
71
- }
72
- function upsertResponseStreamEvent(events, event) {
73
- const existingIndex = events.findIndex((existing) => existing.content.sequence === event.content.sequence);
74
- if (existingIndex === -1) {
75
- events.push(event);
76
- }
77
- else {
78
- events[existingIndex] = event;
79
- }
80
- }
81
- function collectResponseStreamResumeEntries(events) {
82
- const responseStreamGroups = new Map();
83
- const finalMessagesByTask = new Map();
84
- for (const [index, event] of events.entries()) {
85
- if (event.type !== 'agent_notification_message')
86
- continue;
87
- if (!isRootTaskEvent(event))
88
- continue;
89
- if (isResponseStreamEvent(event)) {
90
- const streamId = event.content.stream_id;
91
- const current = responseStreamGroups.get(streamId);
92
- if (current) {
93
- upsertResponseStreamEvent(current.events, event);
94
- // Insertion order and sequence can diverge if backfilled events arrive out
95
- // of order; use insertion index only for "later final message" dedupe.
96
- current.lastIndex = Math.max(current.lastIndex, index);
97
- }
98
- else {
99
- responseStreamGroups.set(streamId, {
100
- events: [event],
101
- lastIndex: index,
102
- });
103
- }
104
- continue;
105
- }
106
- const taskId = event.task?.id;
107
- if (!taskId)
108
- continue;
109
- const text = getAgentNotificationText(event);
110
- if (!text.trim())
111
- continue;
112
- const finalMessages = finalMessagesByTask.get(taskId) ?? [];
113
- finalMessages.push({ index, text });
114
- finalMessagesByTask.set(taskId, finalMessages);
115
- }
116
- const entries = [];
117
- for (const [streamId, streamGroup] of responseStreamGroups.entries()) {
118
- const streamEvents = [...streamGroup.events].sort((left, right) => left.content.sequence - right.content.sequence);
119
- const latest = streamEvents[streamEvents.length - 1];
120
- const text = streamEvents.reduce((currentText, streamEvent) => applyResponseStreamText(currentText, streamEvent.content), '');
121
- const taskId = latest.task?.id;
122
- const matchingLaterFinalMessage = taskId !== undefined &&
123
- (finalMessagesByTask.get(taskId) ?? []).some((message) => message.index > streamGroup.lastIndex && textMatches(text, message.text));
124
- if (latest.content.status !== 'aborted' &&
125
- !matchingLaterFinalMessage &&
126
- text.trim()) {
127
- entries.push({
128
- streamId,
129
- key: `response-stream-${streamId}`,
130
- contents: streamEvents.map((event) => event.content),
131
- text,
132
- status: latest.content.status,
133
- timestamp: formatDisplayTimestamp(latest.created_at),
134
- taskId,
135
- });
136
- }
137
- }
138
- return entries;
139
- }
140
- function responseStreamResumeStateFromEntries(entries) {
141
- const state = {
142
- keys: new Map(),
143
- contents: new Map(),
144
- texts: new Map(),
145
- timestamps: new Map(),
146
- statuses: new Map(),
147
- keysByTask: new Map(),
148
- };
149
- for (const entry of entries) {
150
- state.keys.set(entry.streamId, entry.key);
151
- state.contents.set(entry.streamId, entry.contents);
152
- state.texts.set(entry.streamId, entry.text);
153
- state.statuses.set(entry.streamId, entry.status);
154
- if (entry.timestamp !== undefined) {
155
- state.timestamps.set(entry.streamId, entry.timestamp);
156
- }
157
- if (entry.taskId !== undefined) {
158
- const keys = state.keysByTask.get(entry.taskId) ?? new Set();
159
- keys.add(entry.key);
160
- state.keysByTask.set(entry.taskId, keys);
161
- }
162
- }
163
- return state;
164
- }
165
- export function responseStreamResumeStateFromEvents(events) {
166
- return responseStreamResumeStateFromEntries(collectResponseStreamResumeEntries(events));
167
- }
168
- function eventsToDisplayMessagesWithResponseStreamEntries(events, responseStreamEntries) {
169
- const messages = [];
170
- const responseStreamEntriesById = new Map(responseStreamEntries.map((entry) => [entry.streamId, entry]));
171
- const renderedResponseStreamIds = new Set();
172
- for (const event of events) {
173
- if (event.type === 'user_message') {
174
- messages.push({
175
- key: event.id,
176
- content: `${brand('>')} ${event.content}`,
177
- type: 'user',
178
- timestamp: event.created_at,
179
- });
180
- }
181
- else if (event.type === 'agent_notification_message') {
182
- if (isResponseStreamEvent(event)) {
183
- if (!isRootTaskEvent(event))
184
- continue;
185
- const streamId = event.content.stream_id;
186
- if (renderedResponseStreamIds.has(streamId))
187
- continue;
188
- const streamEntry = responseStreamEntriesById.get(streamId);
189
- if (!streamEntry)
190
- continue;
191
- renderedResponseStreamIds.add(streamId);
192
- messages.push(renderAssistantText(streamEntry.key, streamEntry.text, streamEntry.timestamp));
193
- continue;
194
- }
195
- const text = getAgentNotificationText(event);
196
- if (text.trim()) {
197
- messages.push(renderAssistantText(event.id, text, event.created_at));
198
- }
199
- }
200
- else if (event.type === 'agent_notification_error') {
201
- const text = typeof event.content === 'string' ? event.content : event.content?.data || '';
202
- if (text.trim()) {
203
- messages.push({
204
- key: event.id,
205
- content: `${chalk.red('●')} ${chalk.bold('assistant')}\n${chalk.red(text)}`,
206
- type: 'assistant',
207
- timestamp: event.created_at,
208
- });
209
- }
210
- }
211
- }
212
- return messages;
213
- }
214
- export function prepareSessionResumeDisplay(events) {
215
- const responseStreamEntries = collectResponseStreamResumeEntries(events);
216
- return {
217
- displayMessages: eventsToDisplayMessagesWithResponseStreamEntries(events, responseStreamEntries),
218
- responseStreamState: responseStreamResumeStateFromEntries(responseStreamEntries),
219
- };
220
- }
221
- /**
222
- * Convert session events to display messages for resume.
223
- * Maps user_message, agent_notification_message, and agent_notification_error
224
- * to DisplayMessage objects. Skips progress, console, runtime events.
225
- */
226
- export function eventsToDisplayMessages(events) {
227
- return prepareSessionResumeDisplay(events).displayMessages;
228
- }
229
- //# sourceMappingURL=session-resume.js.map