@namzu/cli 12.1.0 → 13.0.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 (199) hide show
  1. package/README.md +25 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +119 -60
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/acp.d.ts +24 -8
  6. package/dist/commands/acp.d.ts.map +1 -1
  7. package/dist/commands/acp.js +221 -80
  8. package/dist/commands/acp.js.map +1 -1
  9. package/dist/commands/drain.d.ts.map +1 -1
  10. package/dist/commands/drain.js +45 -9
  11. package/dist/commands/drain.js.map +1 -1
  12. package/dist/commands/prior-messages.d.ts +11 -0
  13. package/dist/commands/prior-messages.d.ts.map +1 -0
  14. package/dist/commands/prior-messages.js +280 -0
  15. package/dist/commands/prior-messages.js.map +1 -0
  16. package/dist/commands/resume.d.ts.map +1 -1
  17. package/dist/commands/resume.js +21 -19
  18. package/dist/commands/resume.js.map +1 -1
  19. package/dist/commands/run-stream.d.ts +5 -3
  20. package/dist/commands/run-stream.d.ts.map +1 -1
  21. package/dist/commands/run-stream.js +66 -62
  22. package/dist/commands/run-stream.js.map +1 -1
  23. package/dist/commands/run.d.ts.map +1 -1
  24. package/dist/commands/run.js +50 -37
  25. package/dist/commands/run.js.map +1 -1
  26. package/dist/config/debug.d.ts +55 -0
  27. package/dist/config/debug.d.ts.map +1 -0
  28. package/dist/config/debug.js +126 -0
  29. package/dist/config/debug.js.map +1 -0
  30. package/dist/config/load.d.ts +88 -4
  31. package/dist/config/load.d.ts.map +1 -1
  32. package/dist/config/load.js +386 -56
  33. package/dist/config/load.js.map +1 -1
  34. package/dist/config/schema.d.ts +87 -5
  35. package/dist/config/schema.d.ts.map +1 -1
  36. package/dist/config/schema.js +5 -5
  37. package/dist/config/schema.js.map +1 -1
  38. package/dist/config/trusted-project-context.d.ts +11 -0
  39. package/dist/config/trusted-project-context.d.ts.map +1 -0
  40. package/dist/config/trusted-project-context.js +28 -0
  41. package/dist/config/trusted-project-context.js.map +1 -0
  42. package/dist/context/project-path.d.ts +3 -0
  43. package/dist/context/project-path.d.ts.map +1 -0
  44. package/dist/context/project-path.js +16 -0
  45. package/dist/context/project-path.js.map +1 -0
  46. package/dist/context/project-tracker.d.ts +30 -0
  47. package/dist/context/project-tracker.d.ts.map +1 -0
  48. package/dist/context/project-tracker.js +217 -0
  49. package/dist/context/project-tracker.js.map +1 -0
  50. package/dist/context/sandbox.d.ts +29 -9
  51. package/dist/context/sandbox.d.ts.map +1 -1
  52. package/dist/context/sandbox.js +8 -0
  53. package/dist/context/sandbox.js.map +1 -1
  54. package/dist/exit-codes.d.ts +5 -4
  55. package/dist/exit-codes.d.ts.map +1 -1
  56. package/dist/exit-codes.js +5 -4
  57. package/dist/exit-codes.js.map +1 -1
  58. package/dist/index.d.ts +2 -2
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +2 -2
  61. package/dist/index.js.map +1 -1
  62. package/dist/integrations/clipboard/text.d.ts +43 -0
  63. package/dist/integrations/clipboard/text.d.ts.map +1 -0
  64. package/dist/integrations/clipboard/text.js +43 -0
  65. package/dist/integrations/clipboard/text.js.map +1 -0
  66. package/dist/integrations/mcp/servers.d.ts +9 -0
  67. package/dist/integrations/mcp/servers.d.ts.map +1 -1
  68. package/dist/integrations/mcp/servers.js +11 -4
  69. package/dist/integrations/mcp/servers.js.map +1 -1
  70. package/dist/integrations/notifications/terminal.d.ts +32 -0
  71. package/dist/integrations/notifications/terminal.d.ts.map +1 -0
  72. package/dist/integrations/notifications/terminal.js +46 -0
  73. package/dist/integrations/notifications/terminal.js.map +1 -0
  74. package/dist/integrations/plugins/runtime.d.ts +17 -0
  75. package/dist/integrations/plugins/runtime.d.ts.map +1 -0
  76. package/dist/integrations/plugins/runtime.js +100 -0
  77. package/dist/integrations/plugins/runtime.js.map +1 -0
  78. package/dist/integrations/providers/credential-store.d.ts +17 -0
  79. package/dist/integrations/providers/credential-store.d.ts.map +1 -1
  80. package/dist/integrations/providers/credential-store.js +114 -2
  81. package/dist/integrations/providers/credential-store.js.map +1 -1
  82. package/dist/integrations/providers/index.d.ts +2 -2
  83. package/dist/integrations/providers/index.d.ts.map +1 -1
  84. package/dist/integrations/providers/index.js +2 -2
  85. package/dist/integrations/providers/index.js.map +1 -1
  86. package/dist/integrations/providers/keychain.d.ts +0 -13
  87. package/dist/integrations/providers/keychain.d.ts.map +1 -1
  88. package/dist/integrations/providers/keychain.js +0 -76
  89. package/dist/integrations/providers/keychain.js.map +1 -1
  90. package/dist/integrations/providers/oauth.d.ts +45 -16
  91. package/dist/integrations/providers/oauth.d.ts.map +1 -1
  92. package/dist/integrations/providers/oauth.js +170 -43
  93. package/dist/integrations/providers/oauth.js.map +1 -1
  94. package/dist/integrations/providers/subscription-login.d.ts +2 -0
  95. package/dist/integrations/providers/subscription-login.d.ts.map +1 -1
  96. package/dist/integrations/providers/subscription-login.js +117 -14
  97. package/dist/integrations/providers/subscription-login.js.map +1 -1
  98. package/dist/integrations/sessions/store.d.ts +111 -1
  99. package/dist/integrations/sessions/store.d.ts.map +1 -1
  100. package/dist/integrations/sessions/store.js +400 -7
  101. package/dist/integrations/sessions/store.js.map +1 -1
  102. package/dist/integrations/sessions/transcript-export.d.ts +25 -0
  103. package/dist/integrations/sessions/transcript-export.d.ts.map +1 -0
  104. package/dist/integrations/sessions/transcript-export.js +441 -0
  105. package/dist/integrations/sessions/transcript-export.js.map +1 -0
  106. package/dist/integrations/sessions/turn-evidence.d.ts +138 -0
  107. package/dist/integrations/sessions/turn-evidence.d.ts.map +1 -0
  108. package/dist/integrations/sessions/turn-evidence.js +506 -0
  109. package/dist/integrations/sessions/turn-evidence.js.map +1 -0
  110. package/dist/integrations/subagents/runtime.d.ts +7 -12
  111. package/dist/integrations/subagents/runtime.d.ts.map +1 -1
  112. package/dist/integrations/subagents/runtime.js +19 -10
  113. package/dist/integrations/subagents/runtime.js.map +1 -1
  114. package/dist/integrations/trust/store.d.ts.map +1 -1
  115. package/dist/integrations/trust/store.js +27 -13
  116. package/dist/integrations/trust/store.js.map +1 -1
  117. package/dist/permissions/canonical-project.d.ts +9 -0
  118. package/dist/permissions/canonical-project.d.ts.map +1 -0
  119. package/dist/permissions/canonical-project.js +13 -0
  120. package/dist/permissions/canonical-project.js.map +1 -0
  121. package/dist/permissions/checks.d.ts +65 -0
  122. package/dist/permissions/checks.d.ts.map +1 -0
  123. package/dist/permissions/checks.js +122 -0
  124. package/dist/permissions/checks.js.map +1 -0
  125. package/dist/permissions/headless-trust.d.ts +9 -5
  126. package/dist/permissions/headless-trust.d.ts.map +1 -1
  127. package/dist/permissions/headless-trust.js +18 -4
  128. package/dist/permissions/headless-trust.js.map +1 -1
  129. package/dist/permissions/rules.d.ts +16 -7
  130. package/dist/permissions/rules.d.ts.map +1 -1
  131. package/dist/permissions/rules.js +78 -13
  132. package/dist/permissions/rules.js.map +1 -1
  133. package/dist/tui/App.d.ts +5 -2
  134. package/dist/tui/App.d.ts.map +1 -1
  135. package/dist/tui/App.js +1555 -143
  136. package/dist/tui/App.js.map +1 -1
  137. package/dist/tui/Composer.d.ts +14 -3
  138. package/dist/tui/Composer.d.ts.map +1 -1
  139. package/dist/tui/Composer.js +53 -15
  140. package/dist/tui/Composer.js.map +1 -1
  141. package/dist/tui/EditPromptPicker.d.ts +8 -0
  142. package/dist/tui/EditPromptPicker.d.ts.map +1 -0
  143. package/dist/tui/EditPromptPicker.js +18 -0
  144. package/dist/tui/EditPromptPicker.js.map +1 -0
  145. package/dist/tui/LiveActivity.d.ts.map +1 -1
  146. package/dist/tui/LiveActivity.js +2 -1
  147. package/dist/tui/LiveActivity.js.map +1 -1
  148. package/dist/tui/Markdown.d.ts.map +1 -1
  149. package/dist/tui/Markdown.js +2 -1
  150. package/dist/tui/Markdown.js.map +1 -1
  151. package/dist/tui/PermissionOverlay.d.ts.map +1 -1
  152. package/dist/tui/PermissionOverlay.js +7 -1
  153. package/dist/tui/PermissionOverlay.js.map +1 -1
  154. package/dist/tui/Picker.d.ts +4 -4
  155. package/dist/tui/Picker.d.ts.map +1 -1
  156. package/dist/tui/Picker.js +86 -7
  157. package/dist/tui/Picker.js.map +1 -1
  158. package/dist/tui/ResumePicker.d.ts.map +1 -1
  159. package/dist/tui/ResumePicker.js +1 -1
  160. package/dist/tui/ResumePicker.js.map +1 -1
  161. package/dist/tui/Transcript.d.ts +4 -2
  162. package/dist/tui/Transcript.d.ts.map +1 -1
  163. package/dist/tui/Transcript.js +31 -5
  164. package/dist/tui/Transcript.js.map +1 -1
  165. package/dist/tui/agent.d.ts +123 -19
  166. package/dist/tui/agent.d.ts.map +1 -1
  167. package/dist/tui/agent.js +665 -143
  168. package/dist/tui/agent.js.map +1 -1
  169. package/dist/tui/compact-transcript.d.ts +24 -0
  170. package/dist/tui/compact-transcript.d.ts.map +1 -0
  171. package/dist/tui/compact-transcript.js +46 -0
  172. package/dist/tui/compact-transcript.js.map +1 -0
  173. package/dist/tui/conversation-history.d.ts +33 -0
  174. package/dist/tui/conversation-history.d.ts.map +1 -0
  175. package/dist/tui/conversation-history.js +42 -0
  176. package/dist/tui/conversation-history.js.map +1 -0
  177. package/dist/tui/edit-prompts.d.ts +23 -0
  178. package/dist/tui/edit-prompts.d.ts.map +1 -0
  179. package/dist/tui/edit-prompts.js +35 -0
  180. package/dist/tui/edit-prompts.js.map +1 -0
  181. package/dist/tui/live-window.d.ts +3 -1
  182. package/dist/tui/live-window.d.ts.map +1 -1
  183. package/dist/tui/live-window.js +20 -8
  184. package/dist/tui/live-window.js.map +1 -1
  185. package/dist/tui/slashCommands.d.ts +178 -9
  186. package/dist/tui/slashCommands.d.ts.map +1 -1
  187. package/dist/tui/slashCommands.js +339 -15
  188. package/dist/tui/slashCommands.js.map +1 -1
  189. package/dist/tui/terminal-display.d.ts +12 -0
  190. package/dist/tui/terminal-display.d.ts.map +1 -0
  191. package/dist/tui/terminal-display.js +65 -0
  192. package/dist/tui/terminal-display.js.map +1 -0
  193. package/dist/tui/types.d.ts +14 -2
  194. package/dist/tui/types.d.ts.map +1 -1
  195. package/dist/tui/workspace-diff.d.ts +40 -0
  196. package/dist/tui/workspace-diff.d.ts.map +1 -0
  197. package/dist/tui/workspace-diff.js +101 -0
  198. package/dist/tui/workspace-diff.js.map +1 -0
  199. package/package.json +7 -7
@@ -0,0 +1,441 @@
1
+ /** Verified Markdown projection of one CLI conversation. */
2
+ import { randomUUID } from 'node:crypto';
3
+ import { link, lstat, open, readdir, stat, unlink } from 'node:fs/promises';
4
+ import { homedir } from 'node:os';
5
+ import { basename, dirname, join, resolve } from 'node:path';
6
+ import { isDeepStrictEqual } from 'node:util';
7
+ import { DefaultPathBuilder, readRunEventsIn, readRunMessagesIn, } from '@namzu/sdk';
8
+ import { visibleProjectInstructionPath } from '../../context/project-path.js';
9
+ export class ConversationTranscriptUnavailableError extends Error {
10
+ reason;
11
+ constructor(reason, detail) {
12
+ super(`Complete conversation export unavailable: ${detail}`);
13
+ this.name = 'ConversationTranscriptUnavailableError';
14
+ this.reason = reason;
15
+ }
16
+ }
17
+ /**
18
+ * Reconstruct a conversation from caller/run correlation plus the SDK's
19
+ * strictly read, event-head-verified run records.
20
+ */
21
+ export async function conversationMarkdown(sessions, sessionId) {
22
+ const evidenceStore = sessions.turnEvidence;
23
+ if (!evidenceStore) {
24
+ throw unavailable('evidence-not-recorded', 'this host did not provide the CLI turn-evidence store');
25
+ }
26
+ const evidence = await evidenceStore.read(sessionId);
27
+ if (evidence.kind === 'not-recorded') {
28
+ throw unavailable('evidence-not-recorded', `conversation ${sessionId} predates durable turn/run correlation`);
29
+ }
30
+ if (evidence.origin.origin.kind === 'fork-unresolved') {
31
+ throw unavailable('fork-lineage-unavailable', `conversation ${sessionId} is a fork whose copied prefix is not yet tied to stable source turns`);
32
+ }
33
+ let lineage;
34
+ try {
35
+ lineage = await evidenceStore.resolveLineage(sessionId);
36
+ }
37
+ catch (error) {
38
+ throw unavailable('fork-lineage-unavailable', `conversation ${sessionId} has invalid fork lineage: ${messageOf(error)}`);
39
+ }
40
+ if (lineage.kind === 'unavailable') {
41
+ throw unavailable('fork-lineage-unavailable', lineage.detail);
42
+ }
43
+ if (lineage.turns.length === 0) {
44
+ throw unavailable('nothing-to-export', `conversation ${sessionId} has no recorded turns`);
45
+ }
46
+ const paths = new DefaultPathBuilder(sessions.root);
47
+ const runsRoot = join(paths.sessionDir(sessions.projectId, sessionId), 'runs');
48
+ const onDiskRunIds = await listRunIds(runsRoot);
49
+ const boundRunIds = new Set(lineage.localTurns.map((turn) => turn.started.runId));
50
+ const unbound = onDiskRunIds.filter((runId) => !boundRunIds.has(runId));
51
+ if (unbound.length > 0) {
52
+ throw unavailable('unbound-run', `session ${sessionId} contains run evidence with no CLI turn binding: ${unbound.join(', ')}`);
53
+ }
54
+ const lines = ['# Namzu conversation', '', `Conversation: \`${sessionId}\``, ''];
55
+ for (const inherited of lineage.turns) {
56
+ const turn = inherited.evidence;
57
+ lines.push(...renderUser(turn), '');
58
+ const runDir = paths.runDir(sessions.projectId, inherited.reference.sessionId, turn.started.runId);
59
+ if (!(await isDirectory(runDir))) {
60
+ if (turn.settled?.outcome === 'cancelled' && turn.settled.assistantText.length === 0) {
61
+ lines.push('## Activity', '', 'Run was cancelled before model execution began; no SDK run record was published.', '');
62
+ continue;
63
+ }
64
+ if (turn.settled) {
65
+ throw unavailable('turn-run-mismatch', `turn ${turn.started.turnId} settled in the host but run ${turn.started.runId} has no SDK record`);
66
+ }
67
+ lines.push('## Activity', '', 'Run did not start; no SDK run record was published.', '');
68
+ continue;
69
+ }
70
+ let events;
71
+ try {
72
+ events = await readRunEventsIn(runDir, { integrity: 'strict' });
73
+ }
74
+ catch (error) {
75
+ throw unavailable('run-record-corrupt', `run ${turn.started.runId} cannot be read strictly: ${messageOf(error)}`);
76
+ }
77
+ if (events.length === 0 ||
78
+ events[0]?.type !== 'run_started' ||
79
+ events.some((event) => event.runId !== turn.started.runId)) {
80
+ throw unavailable('run-record-corrupt', `run ${turn.started.runId} is empty, lacks its start record, or contains another run's events`);
81
+ }
82
+ const terminal = terminalEvent(events);
83
+ if (terminal.kind === 'invalid' || (terminal.kind === 'absent' && !turn.settled)) {
84
+ throw unavailable('run-incomplete', `run ${turn.started.runId} has no unique terminal event at the durable log head and no host settlement that can close an interrupted turn`);
85
+ }
86
+ let snapshot;
87
+ try {
88
+ snapshot = await readRunMessagesIn(runDir);
89
+ }
90
+ catch (error) {
91
+ throw unavailable('run-record-corrupt', `run ${turn.started.runId} has an invalid message snapshot: ${messageOf(error)}`);
92
+ }
93
+ if (snapshot.kind === 'unavailable') {
94
+ throw unavailable('run-snapshot-unavailable', `run ${turn.started.runId} never published its survivor snapshot`);
95
+ }
96
+ if (snapshot.kind === 'legacy-unverified') {
97
+ throw unavailable('run-snapshot-unverified', `run ${turn.started.runId} has a legacy snapshot with no event-log boundary`);
98
+ }
99
+ const eventHead = events.at(-1)?.seq ?? 0;
100
+ if (snapshot.throughEventSeq !== eventHead) {
101
+ throw unavailable('run-snapshot-out-of-sync', `run ${turn.started.runId} snapshot ends at event ${snapshot.throughEventSeq}, while its log ends at ${eventHead}`);
102
+ }
103
+ const fullMessages = [
104
+ ...events.flatMap((event) => (event.type === 'compaction_shed' ? event.messages : [])),
105
+ ...snapshot.messages,
106
+ ];
107
+ const userIndex = findExactUser(fullMessages, turn.started.user);
108
+ if (userIndex < 0) {
109
+ throw unavailable('turn-run-mismatch', `run ${turn.started.runId} does not contain the exact user message bound before it started`);
110
+ }
111
+ const produced = fullMessages.slice(userIndex + 1);
112
+ const assistants = produced.filter((message) => message.role === 'assistant');
113
+ const completions = events.filter((event) => event.type === 'message_completed');
114
+ if (completions.length !== assistants.length) {
115
+ throw unavailable('turn-run-mismatch', `run ${turn.started.runId} records ${completions.length} completed model messages but its verified history contains ${assistants.length}`);
116
+ }
117
+ for (let index = 0; index < completions.length; index += 1) {
118
+ const recorded = completions[index]?.content;
119
+ const persisted = assistants[index]?.content;
120
+ if (recorded !== undefined && recorded !== (typeof persisted === 'string' ? persisted : '')) {
121
+ throw unavailable('turn-run-mismatch', `run ${turn.started.runId} message completion disagrees with its verified history`);
122
+ }
123
+ }
124
+ const completedText = assistants
125
+ .map((message) => (typeof message.content === 'string' ? message.content : ''))
126
+ .join('');
127
+ let hostOnlyPartial = '';
128
+ if (turn.settled) {
129
+ const expectedOutcome = terminal.kind === 'present' ? terminalOutcome(terminal.event) : 'cancelled';
130
+ if (turn.settled.outcome !== expectedOutcome ||
131
+ !turn.settled.assistantText.startsWith(completedText)) {
132
+ throw unavailable('turn-settlement-mismatch', `turn ${turn.started.turnId} settlement disagrees with terminal run ${turn.started.runId}`);
133
+ }
134
+ hostOnlyPartial = turn.settled.assistantText.slice(completedText.length);
135
+ }
136
+ else if (terminal.kind !== 'present' || terminal.event.type !== 'run_completed') {
137
+ throw unavailable('run-incomplete', `turn ${turn.started.turnId} lacks host settlement evidence after ${terminal.kind === 'present' ? terminal.event.type : 'an unterminated run'}`);
138
+ }
139
+ lines.push(...renderProducedMessages(produced));
140
+ if (hostOnlyPartial.length > 0) {
141
+ lines.push('## Assistant', '', '_Partial output captured by the terminal host before the model message closed._', '', hostOnlyPartial, '');
142
+ }
143
+ lines.push(...renderRecordedActivity(events, produced), '');
144
+ }
145
+ return {
146
+ sessionId,
147
+ turns: lineage.turns.length,
148
+ markdown: `${trimBlankTail(lines).join('\n')}\n`,
149
+ };
150
+ }
151
+ /** Write through a same-directory temporary inode, then link without clobbering. */
152
+ export async function writeConversationExport(markdown, destination, cwd) {
153
+ const target = resolveExportPath(destination, cwd);
154
+ const parent = dirname(target);
155
+ let parentStat;
156
+ try {
157
+ parentStat = await stat(parent);
158
+ }
159
+ catch (error) {
160
+ throw new Error(`Export directory is unavailable: ${parent} (${messageOf(error)})`);
161
+ }
162
+ if (!parentStat.isDirectory())
163
+ throw new Error(`Export parent is not a directory: ${parent}`);
164
+ const temporary = join(parent, `.${basename(target)}.tmp-${randomUUID()}`);
165
+ let handle;
166
+ try {
167
+ handle = await open(temporary, 'wx', 0o600);
168
+ await handle.writeFile(markdown, 'utf-8');
169
+ await handle.sync();
170
+ await handle.close();
171
+ handle = undefined;
172
+ try {
173
+ await link(temporary, target);
174
+ }
175
+ catch (error) {
176
+ if (isCode(error, 'EEXIST')) {
177
+ throw new Error(`Export target already exists; nothing was overwritten: ${target}`);
178
+ }
179
+ throw error;
180
+ }
181
+ return { path: target, bytes: Buffer.byteLength(markdown, 'utf-8') };
182
+ }
183
+ finally {
184
+ await handle?.close();
185
+ await unlink(temporary).catch((error) => {
186
+ if (!isCode(error, 'ENOENT'))
187
+ throw error;
188
+ });
189
+ }
190
+ }
191
+ function renderUser(turn) {
192
+ if (turn.started.user.source?.type === 'goal-round') {
193
+ const source = turn.started.user.source;
194
+ return [
195
+ `## Goal round ${source.round} / ${source.maxGoalRounds}`,
196
+ '',
197
+ `Objective: ${source.objective}`,
198
+ '',
199
+ 'Model-visible continuation prompt:',
200
+ '',
201
+ turn.started.user.content,
202
+ ];
203
+ }
204
+ const lines = ['## User', '', turn.started.displayText];
205
+ const attachments = turn.started.user.attachments ?? [];
206
+ if (attachments.length > 0) {
207
+ lines.push('', 'Attachments:', ...attachments.map((attachment) => `- ${attachmentLabel(attachment)}`));
208
+ }
209
+ return lines;
210
+ }
211
+ function renderProducedMessages(messages) {
212
+ const lines = [];
213
+ for (const message of messages) {
214
+ switch (message.role) {
215
+ case 'assistant': {
216
+ if (typeof message.content === 'string' && message.content.length > 0) {
217
+ lines.push('## Assistant', '', message.content, '');
218
+ }
219
+ if (message.citations && message.citations.length > 0) {
220
+ lines.push('### Citations', '', ...message.citations.flatMap((citation) => [
221
+ `- ${citation.documentTitle ?? `Document ${citation.documentIndex + 1}`} — ${citationLocation(citation.location)}`,
222
+ ...indentQuote(citation.citedText),
223
+ ]), '');
224
+ }
225
+ for (const call of message.toolCalls ?? []) {
226
+ lines.push('## Activity', '', `Tool started: \`${call.function.name}\``, '', ...fence(call.function.arguments, 'json'), '');
227
+ }
228
+ break;
229
+ }
230
+ case 'tool':
231
+ lines.push('## Activity', '', `Tool result for \`${message.toolCallId}\``, '', ...renderToolContent(message), '');
232
+ break;
233
+ case 'user':
234
+ if (message.source?.type === 'project-instructions') {
235
+ lines.push('## Project instructions', '', ...message.source.files.map((file) => `- ${visibleProjectInstructionPath(file)}`), '', message.content, '');
236
+ }
237
+ else if (message.source?.type === 'goal-round') {
238
+ lines.push(`## Goal round ${message.source.round} / ${message.source.maxGoalRounds}`, '', `Objective: ${message.source.objective}`, '', message.content, '');
239
+ }
240
+ else
241
+ lines.push('## User', '', message.content, '');
242
+ break;
243
+ case 'system':
244
+ // System and working-memory messages are model context, not operator
245
+ // conversation. Compaction itself is rendered from its durable event.
246
+ break;
247
+ }
248
+ }
249
+ return lines;
250
+ }
251
+ function renderRecordedActivity(events, produced) {
252
+ const representedTools = new Set();
253
+ for (const message of produced) {
254
+ if (message.role === 'assistant') {
255
+ for (const call of message.toolCalls ?? [])
256
+ representedTools.add(call.id);
257
+ }
258
+ if (message.role === 'tool')
259
+ representedTools.add(message.toolCallId);
260
+ }
261
+ const lines = [];
262
+ const activity = (text, detail, language = '') => {
263
+ lines.push('## Activity', '', text);
264
+ if (detail !== undefined && detail.length > 0)
265
+ lines.push('', ...fence(detail, language));
266
+ lines.push('');
267
+ };
268
+ for (const event of events) {
269
+ switch (event.type) {
270
+ case 'tool_executing':
271
+ if (event.via || !representedTools.has(event.toolUseId)) {
272
+ activity(`Nested tool started: \`${event.toolName}\`${event.via ? ` via \`${event.via.tool}\`` : ''}`, jsonText(event.input), 'json');
273
+ }
274
+ break;
275
+ case 'tool_completed':
276
+ if (event.via || !representedTools.has(event.toolUseId)) {
277
+ activity(`Nested tool ${event.isError ? 'failed' : 'completed'}: \`${event.toolName}\`${event.outputTruncated ? ' (output preview; full output was spilled)' : ''}`, event.result);
278
+ }
279
+ break;
280
+ case 'provider_fallback':
281
+ activity(`Provider fallback: ${event.fromProviderId}${event.fromModel ? `/${event.fromModel}` : ''} → ${event.toProviderId}${event.toModel ? `/${event.toModel}` : ''} (${event.reason})`);
282
+ break;
283
+ case 'capability_warning':
284
+ activity(`Capability warning (${event.capability}): ${event.message}`);
285
+ break;
286
+ case 'message_history_repaired':
287
+ activity(`Tool history repaired (${event.source}): ${event.duplicateToolResultsRemoved} duplicate result(s) removed, ${event.orphanedToolResultsRemoved} orphaned result(s) removed, ${event.syntheticToolResultsInserted} interrupted call(s) closed with unknown outcome.`);
288
+ break;
289
+ case 'compaction_completed':
290
+ activity(`Context compacted: ${event.messagesBefore} → ${event.messagesAfter} messages; ${event.tokensBefore.toLocaleString()} → ${event.tokensAfter.toLocaleString()} tokens.`);
291
+ break;
292
+ case 'compaction_tool_results_cleared':
293
+ activity(`Context relief cleared ${event.clearedCount} oversized tool result${event.clearedCount === 1 ? '' : 's'} (~${event.reclaimedTokens.toLocaleString()} tokens).`);
294
+ break;
295
+ case 'compaction_failed':
296
+ activity(`Context compaction did not change history (${event.cause}).`);
297
+ break;
298
+ case 'guardrail_triggered':
299
+ activity(`${event.stage === 'input' ? 'Input' : 'Output'} guardrail ${event.action}${event.guardrail ? ` (${event.guardrail})` : ''}${event.reason ? `: ${event.reason}` : '.'}`);
300
+ break;
301
+ case 'task_created':
302
+ activity(`Task ${event.status}: ${event.subject}`);
303
+ break;
304
+ case 'task_updated':
305
+ if (event.status === 'completed')
306
+ activity(`Task completed: ${event.subject}`);
307
+ break;
308
+ case 'run_completed':
309
+ if (event.stopReason && event.stopReason !== 'end_turn') {
310
+ activity(`Run stopped: ${event.stopReason}.`);
311
+ }
312
+ break;
313
+ case 'run_failed':
314
+ activity(`Run failed${event.failure ? ` [${event.failure.code}]` : ''}: ${event.error}`);
315
+ break;
316
+ case 'run_paused':
317
+ activity(`Run paused: ${event.reason}`);
318
+ break;
319
+ }
320
+ }
321
+ return lines;
322
+ }
323
+ function terminalEvent(events) {
324
+ const terminals = events.filter((event) => event.type === 'run_completed' || event.type === 'run_failed' || event.type === 'run_paused');
325
+ if (terminals.length === 0)
326
+ return { kind: 'absent' };
327
+ const terminal = terminals[0];
328
+ return terminals.length === 1 && terminal === events.at(-1)
329
+ ? { kind: 'present', event: terminal }
330
+ : { kind: 'invalid' };
331
+ }
332
+ function terminalOutcome(event) {
333
+ if (event.type === 'run_failed')
334
+ return 'failed';
335
+ if (event.type === 'run_paused')
336
+ return 'stopped';
337
+ if (event.stopReason === 'cancelled')
338
+ return 'cancelled';
339
+ return event.stopReason === undefined || event.stopReason === 'end_turn' ? 'completed' : 'stopped';
340
+ }
341
+ function findExactUser(messages, expected) {
342
+ for (let index = messages.length - 1; index >= 0; index -= 1) {
343
+ if (messages[index]?.role === 'user' && isDeepStrictEqual(messages[index], expected))
344
+ return index;
345
+ }
346
+ return -1;
347
+ }
348
+ function renderToolContent(message) {
349
+ if (typeof message.content === 'string')
350
+ return fence(message.content);
351
+ const rendered = message.content.map((block) => {
352
+ if (block.type === 'text')
353
+ return block.text;
354
+ if (block.type === 'image')
355
+ return `[Image result: ${block.mediaType}; binary data omitted]`;
356
+ return `[Document result: ${block.name ?? 'unnamed'} · ${block.mediaType}; binary data omitted]`;
357
+ });
358
+ return fence(rendered.join('\n'));
359
+ }
360
+ function attachmentLabel(attachment) {
361
+ if (attachment.type === 'stored') {
362
+ return `${attachment.kind === 'image' ? 'Image' : 'Document'}: ${attachment.name ?? 'unnamed'} · ${attachment.mediaType} (stored reference; binary data omitted)`;
363
+ }
364
+ if (attachment.type === 'document') {
365
+ return `Document: ${attachment.name ?? 'unnamed'} · ${attachment.mediaType} (binary data omitted)`;
366
+ }
367
+ return `Image: ${attachment.mediaType} (binary data omitted)`;
368
+ }
369
+ function citationLocation(location) {
370
+ return `${location.kind} ${location.start}${location.end === location.start ? '' : `–${location.end}`}`;
371
+ }
372
+ function indentQuote(text) {
373
+ return text.split('\n').map((line) => ` > ${line}`);
374
+ }
375
+ function fence(content, language = '') {
376
+ const longest = Math.max(0, ...[...content.matchAll(/`+/g)].map((match) => match[0].length));
377
+ const marker = '`'.repeat(Math.max(3, longest + 1));
378
+ return [`${marker}${language}`, content, marker];
379
+ }
380
+ function jsonText(value) {
381
+ const encoded = JSON.stringify(value, null, 2);
382
+ return encoded === undefined ? String(value) : encoded;
383
+ }
384
+ function trimBlankTail(lines) {
385
+ while (lines.at(-1) === '')
386
+ lines.pop();
387
+ return lines;
388
+ }
389
+ async function listRunIds(root) {
390
+ let entries;
391
+ try {
392
+ entries = await readdir(root, { withFileTypes: true, encoding: 'utf-8' });
393
+ }
394
+ catch (error) {
395
+ if (isCode(error, 'ENOENT'))
396
+ return [];
397
+ throw error;
398
+ }
399
+ const ids = [];
400
+ for (const entry of entries) {
401
+ if (!entry.isDirectory())
402
+ continue;
403
+ if (!/^run_[a-z0-9]+$/.test(entry.name)) {
404
+ throw unavailable('run-record-corrupt', `session run directory has an invalid name: ${entry.name}`);
405
+ }
406
+ ids.push(entry.name);
407
+ }
408
+ return ids.sort();
409
+ }
410
+ async function isDirectory(path) {
411
+ try {
412
+ const value = await lstat(path);
413
+ if (value.isSymbolicLink()) {
414
+ throw unavailable('run-record-corrupt', `run path is a symbolic link: ${path}`);
415
+ }
416
+ return value.isDirectory();
417
+ }
418
+ catch (error) {
419
+ if (isCode(error, 'ENOENT'))
420
+ return false;
421
+ throw error;
422
+ }
423
+ }
424
+ function resolveExportPath(destination, cwd) {
425
+ const expanded = destination === '~'
426
+ ? homedir()
427
+ : destination.startsWith('~/')
428
+ ? join(homedir(), destination.slice(2))
429
+ : destination;
430
+ return resolve(cwd, expanded);
431
+ }
432
+ function unavailable(reason, detail) {
433
+ return new ConversationTranscriptUnavailableError(reason, detail);
434
+ }
435
+ function messageOf(error) {
436
+ return error instanceof Error ? error.message : String(error);
437
+ }
438
+ function isCode(error, code) {
439
+ return typeof error === 'object' && error !== null && 'code' in error && error.code === code;
440
+ }
441
+ //# sourceMappingURL=transcript-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-export.js","sourceRoot":"","sources":["../../../src/integrations/sessions/transcript-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Durable correlation between one CLI conversation and the SDK runs that
3
+ * carried its turns.
4
+ *
5
+ * The SDK already owns run events and the verified survivor snapshot. This
6
+ * file deliberately does not copy either. It records the fact the SDK cannot
7
+ * infer: which exact user message the operator submitted as this turn, and
8
+ * which caller-chosen run id was reserved for it before execution began.
9
+ */
10
+ import { type ProjectId, type RunId, type SessionId, type UserMessage } from '@namzu/sdk';
11
+ declare const FORMAT: "namzu.cli-turn-evidence.v1";
12
+ export type ConversationOrigin = {
13
+ readonly kind: 'new';
14
+ } | {
15
+ /**
16
+ * Immutable turn boundary copied from the source conversation. The
17
+ * references are flattened, so later source turns and deeper fork chains
18
+ * cannot change what this conversation inherited.
19
+ */
20
+ readonly kind: 'fork';
21
+ readonly sourceSessionId: SessionId;
22
+ readonly copiedMessages: number;
23
+ readonly turns: readonly ConversationTurnReference[];
24
+ } | {
25
+ /**
26
+ * The copied model history has no stable turn boundary yet. The source
27
+ * is kept so a later lineage migration has evidence to work from, while
28
+ * the current exporter refuses instead of guessing.
29
+ */
30
+ readonly kind: 'fork-unresolved';
31
+ readonly sourceSessionId: SessionId;
32
+ readonly copiedMessages: number;
33
+ };
34
+ export interface ConversationTurnReference {
35
+ readonly sessionId: SessionId;
36
+ readonly turnId: string;
37
+ }
38
+ export type ConversationTurnOutcome = 'completed' | 'stopped' | 'failed' | 'cancelled';
39
+ export interface ConversationOriginRecord {
40
+ readonly format: typeof FORMAT;
41
+ readonly type: 'conversation_started';
42
+ readonly projectId: ProjectId;
43
+ readonly sessionId: SessionId;
44
+ readonly recordedAt: number;
45
+ readonly origin: ConversationOrigin;
46
+ }
47
+ export interface ConversationTurnStartedRecord {
48
+ readonly format: typeof FORMAT;
49
+ readonly type: 'turn_started';
50
+ readonly projectId: ProjectId;
51
+ readonly sessionId: SessionId;
52
+ readonly turnId: string;
53
+ readonly runId: RunId;
54
+ readonly recordedAt: number;
55
+ /** What the operator saw, before `@file` mentions were expanded. */
56
+ readonly displayText: string;
57
+ /** Exactly what the provider received, including expanded mentions. */
58
+ readonly user: UserMessage;
59
+ }
60
+ export interface ConversationTurnSettledRecord {
61
+ readonly format: typeof FORMAT;
62
+ readonly type: 'turn_settled';
63
+ readonly projectId: ProjectId;
64
+ readonly sessionId: SessionId;
65
+ readonly turnId: string;
66
+ readonly runId: RunId;
67
+ readonly recordedAt: number;
68
+ readonly outcome: ConversationTurnOutcome;
69
+ /** Raw assistant Markdown accumulated by the host; may be empty. */
70
+ readonly assistantText: string;
71
+ }
72
+ export type ConversationEvidenceRecord = ConversationOriginRecord | ConversationTurnStartedRecord | ConversationTurnSettledRecord;
73
+ export interface ConversationTurnEvidence {
74
+ readonly started: ConversationTurnStartedRecord;
75
+ readonly settled?: ConversationTurnSettledRecord;
76
+ }
77
+ export interface ConversationLineageTurn {
78
+ readonly reference: ConversationTurnReference;
79
+ readonly evidence: ConversationTurnEvidence;
80
+ }
81
+ export type ConversationEvidenceRead = {
82
+ readonly kind: 'not-recorded';
83
+ } | {
84
+ readonly kind: 'available';
85
+ readonly origin: ConversationOriginRecord;
86
+ readonly turns: readonly ConversationTurnEvidence[];
87
+ };
88
+ export type ConversationLineageRead = {
89
+ readonly kind: 'unavailable';
90
+ readonly detail: string;
91
+ } | {
92
+ readonly kind: 'available';
93
+ readonly origin: ConversationOriginRecord;
94
+ /** Turns physically recorded in the requested conversation. */
95
+ readonly localTurns: readonly ConversationTurnEvidence[];
96
+ /** Inherited turns followed by local turns, at the immutable fork boundary. */
97
+ readonly turns: readonly ConversationLineageTurn[];
98
+ };
99
+ export declare class ConversationEvidenceCorruptionError extends Error {
100
+ constructor(message: string);
101
+ }
102
+ export interface DiskConversationEvidenceOptions {
103
+ readonly root: string;
104
+ readonly projectId: ProjectId;
105
+ readonly now?: () => number;
106
+ }
107
+ export declare class DiskConversationEvidence {
108
+ private readonly paths;
109
+ private readonly projectId;
110
+ private readonly now;
111
+ private tail;
112
+ constructor(options: DiskConversationEvidenceOptions);
113
+ recordOrigin(sessionId: SessionId, origin: ConversationOrigin): Promise<void>;
114
+ recordTurnStarted(input: {
115
+ readonly sessionId: SessionId;
116
+ readonly runId: RunId;
117
+ readonly displayText: string;
118
+ readonly user: UserMessage;
119
+ }): Promise<ConversationTurnStartedRecord>;
120
+ recordTurnSettled(input: {
121
+ readonly sessionId: SessionId;
122
+ readonly turnId: string;
123
+ readonly runId: RunId;
124
+ readonly outcome: ConversationTurnOutcome;
125
+ readonly assistantText: string;
126
+ }): Promise<ConversationTurnSettledRecord>;
127
+ read(sessionId: SessionId): Promise<ConversationEvidenceRead>;
128
+ /** Resolve and verify the immutable turn sequence visible to one conversation. */
129
+ resolveLineage(sessionId: SessionId): Promise<ConversationLineageRead>;
130
+ private serialize;
131
+ private path;
132
+ private append;
133
+ private requireAvailable;
134
+ private readUnlocked;
135
+ private resolveReferencesUnlocked;
136
+ }
137
+ export {};
138
+ //# sourceMappingURL=turn-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-evidence.d.ts","sourceRoot":"","sources":["../../../src/integrations/sessions/turn-evidence.ts"],"names":[],"mappings":"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"}