@guildai/cli 0.11.0 → 0.12.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.
Files changed (198) hide show
  1. package/dist/auth-CRMO5O3N.js +29 -0
  2. package/dist/auth-CRMO5O3N.js.map +7 -0
  3. package/dist/chat-5VX2WJH2.js +303 -0
  4. package/dist/chat-5VX2WJH2.js.map +7 -0
  5. package/dist/chat-SIKDYZQK.js +31 -0
  6. package/dist/chat-SIKDYZQK.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-B7VAF5UG.js +532 -0
  12. package/dist/chunk-B7VAF5UG.js.map +7 -0
  13. package/dist/chunk-DOIYVBNY.js +3057 -0
  14. package/dist/chunk-DOIYVBNY.js.map +7 -0
  15. package/dist/chunk-ENKEEJ45.js +17 -0
  16. package/dist/chunk-ENKEEJ45.js.map +7 -0
  17. package/dist/chunk-IBRKVGMZ.js +97041 -0
  18. package/dist/chunk-IBRKVGMZ.js.map +7 -0
  19. package/dist/chunk-LFMQJOKC.js +19778 -0
  20. package/dist/chunk-LFMQJOKC.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-RIG2HZWM.js +317 -0
  28. package/dist/chunk-RIG2HZWM.js.map +7 -0
  29. package/dist/chunk-SPZPZXUN.js +826 -0
  30. package/dist/chunk-SPZPZXUN.js.map +7 -0
  31. package/dist/chunk-VVSOU6ON.js +53 -0
  32. package/dist/chunk-VVSOU6ON.js.map +7 -0
  33. package/dist/chunk-X3ADGWOF.js +3643 -0
  34. package/dist/chunk-X3ADGWOF.js.map +7 -0
  35. package/dist/commands/skill/create.d.ts +3 -0
  36. package/dist/commands/skill/get.d.ts +3 -0
  37. package/dist/commands/skill/list.d.ts +3 -0
  38. package/dist/commands/skill/update.d.ts +3 -0
  39. package/dist/commands/skill/version/create.d.ts +3 -0
  40. package/dist/commands/skill/version/get.d.ts +3 -0
  41. package/dist/commands/skill/version/list.d.ts +3 -0
  42. package/dist/devtools-AO7YSDOD.js +67 -0
  43. package/dist/devtools-AO7YSDOD.js.map +7 -0
  44. package/dist/dist-4CBK6X5H.js +1566 -0
  45. package/dist/dist-4CBK6X5H.js.map +7 -0
  46. package/dist/esm-FRAVZP4J.js +13 -0
  47. package/dist/esm-FRAVZP4J.js.map +7 -0
  48. package/dist/execa-XQMWSABC.js +35 -0
  49. package/dist/execa-XQMWSABC.js.map +7 -0
  50. package/dist/index.js +8230 -263
  51. package/dist/index.js.map +7 -0
  52. package/dist/lib/api-types.d.ts +44 -0
  53. package/dist/lib/config.d.ts +9 -0
  54. package/dist/lib/errors.d.ts +1 -1
  55. package/dist/lib/output.d.ts +11 -1
  56. package/dist/lib/session-events.d.ts +1 -1
  57. package/dist/lib/session-polling.d.ts +24 -1
  58. package/dist/lib/websocket-client.d.ts +46 -0
  59. package/dist/open-RF4X5MOP.js +13 -0
  60. package/dist/open-RF4X5MOP.js.map +7 -0
  61. package/dist/server-JYVH64FD.js +27659 -0
  62. package/dist/server-JYVH64FD.js.map +7 -0
  63. package/dist/test-SNIYRJ32.js +692 -0
  64. package/dist/test-SNIYRJ32.js.map +7 -0
  65. package/docs/skills/codex-agent-dev.md +2 -2
  66. package/package.json +8 -12
  67. package/dist/commands/agent/chat.js +0 -281
  68. package/dist/commands/agent/clone.js +0 -118
  69. package/dist/commands/agent/code.js +0 -87
  70. package/dist/commands/agent/fork.js +0 -220
  71. package/dist/commands/agent/get.js +0 -37
  72. package/dist/commands/agent/grep.js +0 -107
  73. package/dist/commands/agent/init.js +0 -403
  74. package/dist/commands/agent/list.js +0 -110
  75. package/dist/commands/agent/logs.js +0 -62
  76. package/dist/commands/agent/owners.js +0 -74
  77. package/dist/commands/agent/publish.js +0 -91
  78. package/dist/commands/agent/pull.js +0 -194
  79. package/dist/commands/agent/revalidate.js +0 -56
  80. package/dist/commands/agent/save.js +0 -345
  81. package/dist/commands/agent/search.js +0 -61
  82. package/dist/commands/agent/tags/add.js +0 -73
  83. package/dist/commands/agent/tags/list.js +0 -43
  84. package/dist/commands/agent/tags/remove.js +0 -84
  85. package/dist/commands/agent/tags/set.js +0 -71
  86. package/dist/commands/agent/test.js +0 -489
  87. package/dist/commands/agent/unpublish.js +0 -64
  88. package/dist/commands/agent/update.js +0 -118
  89. package/dist/commands/agent/versions.js +0 -55
  90. package/dist/commands/agent/workspaces.js +0 -54
  91. package/dist/commands/auth/login.js +0 -31
  92. package/dist/commands/auth/logout.js +0 -24
  93. package/dist/commands/auth/status.js +0 -38
  94. package/dist/commands/auth/token.js +0 -19
  95. package/dist/commands/chat.js +0 -1416
  96. package/dist/commands/config/get.js +0 -64
  97. package/dist/commands/config/list.js +0 -46
  98. package/dist/commands/config/path.js +0 -37
  99. package/dist/commands/config/set.js +0 -132
  100. package/dist/commands/credentials/endpoint-list.js +0 -88
  101. package/dist/commands/credentials/list.js +0 -50
  102. package/dist/commands/credentials/policy-create.js +0 -66
  103. package/dist/commands/credentials/policy-delete.js +0 -33
  104. package/dist/commands/credentials/policy-list.js +0 -45
  105. package/dist/commands/credentials/policy-update.js +0 -66
  106. package/dist/commands/doctor.js +0 -233
  107. package/dist/commands/integration/connect.js +0 -76
  108. package/dist/commands/integration/create.js +0 -298
  109. package/dist/commands/integration/get.js +0 -95
  110. package/dist/commands/integration/list.js +0 -62
  111. package/dist/commands/integration/operation/create.js +0 -164
  112. package/dist/commands/integration/operation/list.js +0 -92
  113. package/dist/commands/integration/update.js +0 -139
  114. package/dist/commands/integration/version/build.js +0 -86
  115. package/dist/commands/integration/version/create.js +0 -45
  116. package/dist/commands/integration/version/get.js +0 -72
  117. package/dist/commands/integration/version/list.js +0 -45
  118. package/dist/commands/integration/version/publish.js +0 -79
  119. package/dist/commands/integration/version/test.js +0 -104
  120. package/dist/commands/job/get-step.js +0 -40
  121. package/dist/commands/job/get.js +0 -44
  122. package/dist/commands/mcp.js +0 -34
  123. package/dist/commands/session/create.js +0 -59
  124. package/dist/commands/session/events.js +0 -56
  125. package/dist/commands/session/get.js +0 -33
  126. package/dist/commands/session/interrupt.js +0 -33
  127. package/dist/commands/session/list.js +0 -59
  128. package/dist/commands/session/send.js +0 -54
  129. package/dist/commands/session/tasks.js +0 -45
  130. package/dist/commands/setup.js +0 -260
  131. package/dist/commands/trigger/activate.js +0 -41
  132. package/dist/commands/trigger/create.js +0 -197
  133. package/dist/commands/trigger/deactivate.js +0 -41
  134. package/dist/commands/trigger/get.js +0 -33
  135. package/dist/commands/trigger/list.js +0 -57
  136. package/dist/commands/trigger/sessions.js +0 -48
  137. package/dist/commands/trigger/update.js +0 -128
  138. package/dist/commands/version.js +0 -24
  139. package/dist/commands/workspace/agent/add.js +0 -114
  140. package/dist/commands/workspace/agent/list.js +0 -78
  141. package/dist/commands/workspace/agent/remove.js +0 -78
  142. package/dist/commands/workspace/clear.js +0 -45
  143. package/dist/commands/workspace/context/edit.js +0 -107
  144. package/dist/commands/workspace/context/get.js +0 -47
  145. package/dist/commands/workspace/context/list.js +0 -51
  146. package/dist/commands/workspace/context/publish.js +0 -42
  147. package/dist/commands/workspace/create.js +0 -51
  148. package/dist/commands/workspace/current.js +0 -63
  149. package/dist/commands/workspace/get.js +0 -39
  150. package/dist/commands/workspace/list.js +0 -70
  151. package/dist/commands/workspace/select.js +0 -184
  152. package/dist/components/AgentInstallPrompt.js +0 -97
  153. package/dist/components/SplashAnimation.js +0 -321
  154. package/dist/components/TaskView.js +0 -268
  155. package/dist/lib/agent-helpers.js +0 -306
  156. package/dist/lib/alternate-screen.js +0 -59
  157. package/dist/lib/api-client.js +0 -154
  158. package/dist/lib/api-types.js +0 -10
  159. package/dist/lib/auth.js +0 -284
  160. package/dist/lib/braille-canvas.js +0 -321
  161. package/dist/lib/colors.js +0 -46
  162. package/dist/lib/config-cache.js +0 -45
  163. package/dist/lib/config.js +0 -153
  164. package/dist/lib/did-you-mean.js +0 -144
  165. package/dist/lib/errors.js +0 -375
  166. package/dist/lib/event-filter.js +0 -91
  167. package/dist/lib/generated-types.js +0 -56
  168. package/dist/lib/git.js +0 -176
  169. package/dist/lib/gk.js +0 -91
  170. package/dist/lib/guild-config.js +0 -178
  171. package/dist/lib/iap.js +0 -117
  172. package/dist/lib/integration-helpers.js +0 -38
  173. package/dist/lib/loading-messages.js +0 -72
  174. package/dist/lib/logo.js +0 -141
  175. package/dist/lib/lottie-serverside.js +0 -181
  176. package/dist/lib/markdown.js +0 -38
  177. package/dist/lib/npmrc.js +0 -59
  178. package/dist/lib/output-mode.js +0 -54
  179. package/dist/lib/output.js +0 -622
  180. package/dist/lib/owner-helpers.js +0 -112
  181. package/dist/lib/polling.js +0 -76
  182. package/dist/lib/progress.js +0 -324
  183. package/dist/lib/session-events-fetch.js +0 -25
  184. package/dist/lib/session-events.js +0 -126
  185. package/dist/lib/session-polling.js +0 -166
  186. package/dist/lib/session-resume.js +0 -229
  187. package/dist/lib/spinners.js +0 -770
  188. package/dist/lib/splash.js +0 -42
  189. package/dist/lib/stdin.js +0 -91
  190. package/dist/lib/svg-to-braille.js +0 -76
  191. package/dist/lib/table.js +0 -59
  192. package/dist/lib/update-check.js +0 -65
  193. package/dist/lib/validate-input-schema.js +0 -208
  194. package/dist/lib/version-helpers.js +0 -137
  195. package/dist/lib/workspace-helpers.js +0 -49
  196. package/dist/mcp/resources.js +0 -67
  197. package/dist/mcp/server.js +0 -64
  198. 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