@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.
- package/README.md +25 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +119 -60
- package/dist/cli.js.map +1 -1
- package/dist/commands/acp.d.ts +24 -8
- package/dist/commands/acp.d.ts.map +1 -1
- package/dist/commands/acp.js +221 -80
- package/dist/commands/acp.js.map +1 -1
- package/dist/commands/drain.d.ts.map +1 -1
- package/dist/commands/drain.js +45 -9
- package/dist/commands/drain.js.map +1 -1
- package/dist/commands/prior-messages.d.ts +11 -0
- package/dist/commands/prior-messages.d.ts.map +1 -0
- package/dist/commands/prior-messages.js +280 -0
- package/dist/commands/prior-messages.js.map +1 -0
- package/dist/commands/resume.d.ts.map +1 -1
- package/dist/commands/resume.js +21 -19
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/run-stream.d.ts +5 -3
- package/dist/commands/run-stream.d.ts.map +1 -1
- package/dist/commands/run-stream.js +66 -62
- package/dist/commands/run-stream.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +50 -37
- package/dist/commands/run.js.map +1 -1
- package/dist/config/debug.d.ts +55 -0
- package/dist/config/debug.d.ts.map +1 -0
- package/dist/config/debug.js +126 -0
- package/dist/config/debug.js.map +1 -0
- package/dist/config/load.d.ts +88 -4
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +386 -56
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +87 -5
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +5 -5
- package/dist/config/schema.js.map +1 -1
- package/dist/config/trusted-project-context.d.ts +11 -0
- package/dist/config/trusted-project-context.d.ts.map +1 -0
- package/dist/config/trusted-project-context.js +28 -0
- package/dist/config/trusted-project-context.js.map +1 -0
- package/dist/context/project-path.d.ts +3 -0
- package/dist/context/project-path.d.ts.map +1 -0
- package/dist/context/project-path.js +16 -0
- package/dist/context/project-path.js.map +1 -0
- package/dist/context/project-tracker.d.ts +30 -0
- package/dist/context/project-tracker.d.ts.map +1 -0
- package/dist/context/project-tracker.js +217 -0
- package/dist/context/project-tracker.js.map +1 -0
- package/dist/context/sandbox.d.ts +29 -9
- package/dist/context/sandbox.d.ts.map +1 -1
- package/dist/context/sandbox.js +8 -0
- package/dist/context/sandbox.js.map +1 -1
- package/dist/exit-codes.d.ts +5 -4
- package/dist/exit-codes.d.ts.map +1 -1
- package/dist/exit-codes.js +5 -4
- package/dist/exit-codes.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/clipboard/text.d.ts +43 -0
- package/dist/integrations/clipboard/text.d.ts.map +1 -0
- package/dist/integrations/clipboard/text.js +43 -0
- package/dist/integrations/clipboard/text.js.map +1 -0
- package/dist/integrations/mcp/servers.d.ts +9 -0
- package/dist/integrations/mcp/servers.d.ts.map +1 -1
- package/dist/integrations/mcp/servers.js +11 -4
- package/dist/integrations/mcp/servers.js.map +1 -1
- package/dist/integrations/notifications/terminal.d.ts +32 -0
- package/dist/integrations/notifications/terminal.d.ts.map +1 -0
- package/dist/integrations/notifications/terminal.js +46 -0
- package/dist/integrations/notifications/terminal.js.map +1 -0
- package/dist/integrations/plugins/runtime.d.ts +17 -0
- package/dist/integrations/plugins/runtime.d.ts.map +1 -0
- package/dist/integrations/plugins/runtime.js +100 -0
- package/dist/integrations/plugins/runtime.js.map +1 -0
- package/dist/integrations/providers/credential-store.d.ts +17 -0
- package/dist/integrations/providers/credential-store.d.ts.map +1 -1
- package/dist/integrations/providers/credential-store.js +114 -2
- package/dist/integrations/providers/credential-store.js.map +1 -1
- package/dist/integrations/providers/index.d.ts +2 -2
- package/dist/integrations/providers/index.d.ts.map +1 -1
- package/dist/integrations/providers/index.js +2 -2
- package/dist/integrations/providers/index.js.map +1 -1
- package/dist/integrations/providers/keychain.d.ts +0 -13
- package/dist/integrations/providers/keychain.d.ts.map +1 -1
- package/dist/integrations/providers/keychain.js +0 -76
- package/dist/integrations/providers/keychain.js.map +1 -1
- package/dist/integrations/providers/oauth.d.ts +45 -16
- package/dist/integrations/providers/oauth.d.ts.map +1 -1
- package/dist/integrations/providers/oauth.js +170 -43
- package/dist/integrations/providers/oauth.js.map +1 -1
- package/dist/integrations/providers/subscription-login.d.ts +2 -0
- package/dist/integrations/providers/subscription-login.d.ts.map +1 -1
- package/dist/integrations/providers/subscription-login.js +117 -14
- package/dist/integrations/providers/subscription-login.js.map +1 -1
- package/dist/integrations/sessions/store.d.ts +111 -1
- package/dist/integrations/sessions/store.d.ts.map +1 -1
- package/dist/integrations/sessions/store.js +400 -7
- package/dist/integrations/sessions/store.js.map +1 -1
- package/dist/integrations/sessions/transcript-export.d.ts +25 -0
- package/dist/integrations/sessions/transcript-export.d.ts.map +1 -0
- package/dist/integrations/sessions/transcript-export.js +441 -0
- package/dist/integrations/sessions/transcript-export.js.map +1 -0
- package/dist/integrations/sessions/turn-evidence.d.ts +138 -0
- package/dist/integrations/sessions/turn-evidence.d.ts.map +1 -0
- package/dist/integrations/sessions/turn-evidence.js +506 -0
- package/dist/integrations/sessions/turn-evidence.js.map +1 -0
- package/dist/integrations/subagents/runtime.d.ts +7 -12
- package/dist/integrations/subagents/runtime.d.ts.map +1 -1
- package/dist/integrations/subagents/runtime.js +19 -10
- package/dist/integrations/subagents/runtime.js.map +1 -1
- package/dist/integrations/trust/store.d.ts.map +1 -1
- package/dist/integrations/trust/store.js +27 -13
- package/dist/integrations/trust/store.js.map +1 -1
- package/dist/permissions/canonical-project.d.ts +9 -0
- package/dist/permissions/canonical-project.d.ts.map +1 -0
- package/dist/permissions/canonical-project.js +13 -0
- package/dist/permissions/canonical-project.js.map +1 -0
- package/dist/permissions/checks.d.ts +65 -0
- package/dist/permissions/checks.d.ts.map +1 -0
- package/dist/permissions/checks.js +122 -0
- package/dist/permissions/checks.js.map +1 -0
- package/dist/permissions/headless-trust.d.ts +9 -5
- package/dist/permissions/headless-trust.d.ts.map +1 -1
- package/dist/permissions/headless-trust.js +18 -4
- package/dist/permissions/headless-trust.js.map +1 -1
- package/dist/permissions/rules.d.ts +16 -7
- package/dist/permissions/rules.d.ts.map +1 -1
- package/dist/permissions/rules.js +78 -13
- package/dist/permissions/rules.js.map +1 -1
- package/dist/tui/App.d.ts +5 -2
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +1555 -143
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/Composer.d.ts +14 -3
- package/dist/tui/Composer.d.ts.map +1 -1
- package/dist/tui/Composer.js +53 -15
- package/dist/tui/Composer.js.map +1 -1
- package/dist/tui/EditPromptPicker.d.ts +8 -0
- package/dist/tui/EditPromptPicker.d.ts.map +1 -0
- package/dist/tui/EditPromptPicker.js +18 -0
- package/dist/tui/EditPromptPicker.js.map +1 -0
- package/dist/tui/LiveActivity.d.ts.map +1 -1
- package/dist/tui/LiveActivity.js +2 -1
- package/dist/tui/LiveActivity.js.map +1 -1
- package/dist/tui/Markdown.d.ts.map +1 -1
- package/dist/tui/Markdown.js +2 -1
- package/dist/tui/Markdown.js.map +1 -1
- package/dist/tui/PermissionOverlay.d.ts.map +1 -1
- package/dist/tui/PermissionOverlay.js +7 -1
- package/dist/tui/PermissionOverlay.js.map +1 -1
- package/dist/tui/Picker.d.ts +4 -4
- package/dist/tui/Picker.d.ts.map +1 -1
- package/dist/tui/Picker.js +86 -7
- package/dist/tui/Picker.js.map +1 -1
- package/dist/tui/ResumePicker.d.ts.map +1 -1
- package/dist/tui/ResumePicker.js +1 -1
- package/dist/tui/ResumePicker.js.map +1 -1
- package/dist/tui/Transcript.d.ts +4 -2
- package/dist/tui/Transcript.d.ts.map +1 -1
- package/dist/tui/Transcript.js +31 -5
- package/dist/tui/Transcript.js.map +1 -1
- package/dist/tui/agent.d.ts +123 -19
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +665 -143
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/compact-transcript.d.ts +24 -0
- package/dist/tui/compact-transcript.d.ts.map +1 -0
- package/dist/tui/compact-transcript.js +46 -0
- package/dist/tui/compact-transcript.js.map +1 -0
- package/dist/tui/conversation-history.d.ts +33 -0
- package/dist/tui/conversation-history.d.ts.map +1 -0
- package/dist/tui/conversation-history.js +42 -0
- package/dist/tui/conversation-history.js.map +1 -0
- package/dist/tui/edit-prompts.d.ts +23 -0
- package/dist/tui/edit-prompts.d.ts.map +1 -0
- package/dist/tui/edit-prompts.js +35 -0
- package/dist/tui/edit-prompts.js.map +1 -0
- package/dist/tui/live-window.d.ts +3 -1
- package/dist/tui/live-window.d.ts.map +1 -1
- package/dist/tui/live-window.js +20 -8
- package/dist/tui/live-window.js.map +1 -1
- package/dist/tui/slashCommands.d.ts +178 -9
- package/dist/tui/slashCommands.d.ts.map +1 -1
- package/dist/tui/slashCommands.js +339 -15
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/terminal-display.d.ts +12 -0
- package/dist/tui/terminal-display.d.ts.map +1 -0
- package/dist/tui/terminal-display.js +65 -0
- package/dist/tui/terminal-display.js.map +1 -0
- package/dist/tui/types.d.ts +14 -2
- package/dist/tui/types.d.ts.map +1 -1
- package/dist/tui/workspace-diff.d.ts +40 -0
- package/dist/tui/workspace-diff.d.ts.map +1 -0
- package/dist/tui/workspace-diff.js +101 -0
- package/dist/tui/workspace-diff.js.map +1 -0
- package/package.json +7 -7
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
14
14
|
import { join } from 'node:path';
|
|
15
|
-
import {
|
|
15
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
16
|
+
import { DiskSessionGoalStore, DiskSessionStore, UNKNOWN_TENANT_ID, asProjectId, asSessionId, asTopicId, requireOpenProject, } from '@namzu/sdk';
|
|
17
|
+
import { DiskConversationEvidence, } from './turn-evidence.js';
|
|
16
18
|
// `UNKNOWN_TENANT_ID` is already a `TenantId`; the assertion this replaced
|
|
17
19
|
// re-stated a type the constant carries.
|
|
18
20
|
const TENANT = UNKNOWN_TENANT_ID;
|
|
@@ -47,9 +49,19 @@ export async function openSessions(cwd) {
|
|
|
47
49
|
const project = await store.createProject({ tenantId: TENANT, name: 'namzu CLI' }, TENANT);
|
|
48
50
|
projectId = project.id;
|
|
49
51
|
mkdirSync(root, { recursive: true });
|
|
50
|
-
writeFileSync(pointerPath, `${JSON.stringify({ projectId }, null, 2)}\n`, {
|
|
52
|
+
writeFileSync(pointerPath, `${JSON.stringify({ projectId }, null, 2)}\n`, {
|
|
53
|
+
mode: 0o600,
|
|
54
|
+
});
|
|
51
55
|
}
|
|
52
|
-
return {
|
|
56
|
+
return {
|
|
57
|
+
store,
|
|
58
|
+
goals: new DiskSessionGoalStore({ rootDir: root, sessions: store }),
|
|
59
|
+
projectId,
|
|
60
|
+
topicId: THREAD,
|
|
61
|
+
tenantId: TENANT,
|
|
62
|
+
root,
|
|
63
|
+
turnEvidence: new DiskConversationEvidence({ root, projectId }),
|
|
64
|
+
};
|
|
53
65
|
}
|
|
54
66
|
// Maps an embedder's own session key (e.g. a desktop host's uuid) to a
|
|
55
67
|
// namzu conversation id, so reopening that session resumes the same
|
|
@@ -78,8 +90,11 @@ export async function resolveConversation(s, key) {
|
|
|
78
90
|
// function already knows what to do about that — mint a fresh one.
|
|
79
91
|
if (existing?.startsWith('ses_')) {
|
|
80
92
|
const mapped = asSessionId(existing);
|
|
81
|
-
|
|
93
|
+
const session = await s.store.getSession(mapped, s.tenantId);
|
|
94
|
+
if (session) {
|
|
95
|
+
await requireWritableConversation(s, mapped, 'continue keyed conversation');
|
|
82
96
|
return mapped;
|
|
97
|
+
}
|
|
83
98
|
}
|
|
84
99
|
const id = await startConversation(s);
|
|
85
100
|
map[key] = id;
|
|
@@ -103,40 +118,418 @@ export async function resolveConversation(s, key) {
|
|
|
103
118
|
* the first run could never have shown this.
|
|
104
119
|
*/
|
|
105
120
|
export async function startConversation(s) {
|
|
121
|
+
const id = await createConversation(s);
|
|
122
|
+
await s.turnEvidence?.recordOrigin(id, { kind: 'new' });
|
|
123
|
+
return id;
|
|
124
|
+
}
|
|
125
|
+
async function createConversation(s) {
|
|
106
126
|
await requireOpenProject(s.store, s.projectId, s.tenantId, 'cli-session');
|
|
107
127
|
const session = await s.store.createSession({ topicId: s.topicId, projectId: s.projectId, currentActor: null }, s.tenantId);
|
|
108
128
|
return session.id;
|
|
109
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Resolve a conversation through the cwd-owned Project and CLI Topic.
|
|
132
|
+
*
|
|
133
|
+
* `SessionId` is globally locatable inside a store root, so successfully
|
|
134
|
+
* loading one proves existence and tenant ownership, not that it belongs to
|
|
135
|
+
* this `CliSessions` handle. The fixed CLI topic id makes the Project check
|
|
136
|
+
* load-bearing: two Projects in one root can legitimately carry the same
|
|
137
|
+
* topic id.
|
|
138
|
+
*/
|
|
139
|
+
async function requireConversationInScope(s, sessionId, op) {
|
|
140
|
+
const session = await s.store.getSession(sessionId, s.tenantId);
|
|
141
|
+
if (!session) {
|
|
142
|
+
throw new Error(`Conversation ${sessionId} was not found — ${op} rejected`);
|
|
143
|
+
}
|
|
144
|
+
if (session.projectId !== s.projectId || session.topicId !== s.topicId) {
|
|
145
|
+
throw new Error(`Conversation ${sessionId} does not belong to this workspace — ${op} rejected`);
|
|
146
|
+
}
|
|
147
|
+
return session;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Sequential admission gate for a turn or conversation mutation.
|
|
151
|
+
*
|
|
152
|
+
* This establishes the state observed immediately before the operation. It is
|
|
153
|
+
* deliberately not described as a cross-process transaction: Project archive
|
|
154
|
+
* and Session mutation live in separate store records, so serializing an
|
|
155
|
+
* archive racing a live turn requires a durable lease shared by both paths.
|
|
156
|
+
* What this gate does guarantee is that a target already closed, archived or
|
|
157
|
+
* outside the current Project never silently reaches the requested operation.
|
|
158
|
+
*/
|
|
159
|
+
export async function requireWritableConversation(s, sessionId, op = 'continue conversation') {
|
|
160
|
+
const session = await requireConversationInScope(s, sessionId, op);
|
|
161
|
+
await requireOpenProject(s.store, s.projectId, s.tenantId, op);
|
|
162
|
+
if (session.status === 'archived') {
|
|
163
|
+
throw new Error(`Conversation ${sessionId} is archived and read-only — ${op} rejected. Its history remains available for inspection.`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
110
166
|
/** Append messages (in order) to a conversation. */
|
|
111
167
|
export async function appendMessages(s, sessionId, messages) {
|
|
168
|
+
await requireWritableConversation(s, sessionId, 'append conversation messages');
|
|
112
169
|
for (const m of messages) {
|
|
113
170
|
await s.store.appendMessage(sessionId, m, s.tenantId);
|
|
114
171
|
}
|
|
115
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Replace the durable conversation view with a compacted history.
|
|
175
|
+
*
|
|
176
|
+
* The store writes this as one replacement record inside its append-only log,
|
|
177
|
+
* so a crash cannot expose the first half of a compacted conversation. Before
|
|
178
|
+
* replacing, pin the derived title without calling it a chosen name: the
|
|
179
|
+
* opening user message may be among the turns compacted away, and `/resume`
|
|
180
|
+
* must neither rename nor quote the conversation as a side effect of making
|
|
181
|
+
* it smaller.
|
|
182
|
+
*/
|
|
183
|
+
export async function replaceConversation(s, sessionId, messages) {
|
|
184
|
+
await requireWritableConversation(s, sessionId, 'replace conversation history');
|
|
185
|
+
const existing = await loadConversation(s, sessionId);
|
|
186
|
+
const titles = readTitles(s.root);
|
|
187
|
+
if (titles[sessionId] === undefined) {
|
|
188
|
+
titles[sessionId] = {
|
|
189
|
+
title: conversationTitle(existing),
|
|
190
|
+
named: false,
|
|
191
|
+
};
|
|
192
|
+
writeTitles(s.root, titles);
|
|
193
|
+
}
|
|
194
|
+
await s.store.replaceMessages(sessionId, messages, s.tenantId);
|
|
195
|
+
}
|
|
116
196
|
/** Load a conversation's full message history. */
|
|
117
197
|
export async function loadConversation(s, sessionId) {
|
|
198
|
+
await requireConversationInScope(s, sessionId, 'load conversation history');
|
|
118
199
|
return [...(await s.store.loadMessages(sessionId, s.tenantId))];
|
|
119
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Load one conversation for a new model turn.
|
|
203
|
+
*
|
|
204
|
+
* Reading an archived conversation remains legitimate — `history` and export
|
|
205
|
+
* are inspection surfaces — but resuming it would turn a tombstone back into a
|
|
206
|
+
* live writer without a restore operation. The Project gate is separate for
|
|
207
|
+
* the same reason: closing a workspace must not make its history disappear,
|
|
208
|
+
* while it must stop a later turn from starting there.
|
|
209
|
+
*/
|
|
210
|
+
export async function loadResumableConversation(s, sessionId) {
|
|
211
|
+
const checked = asSessionId(sessionId);
|
|
212
|
+
await requireWritableConversation(s, checked, 'resume conversation');
|
|
213
|
+
return [...(await s.store.loadMessages(checked, s.tenantId))];
|
|
214
|
+
}
|
|
120
215
|
/** Recent non-empty conversations, newest first — for the `/resume` list. */
|
|
121
216
|
export async function listRecent(s, limit = 20) {
|
|
217
|
+
await requireOpenProject(s.store, s.projectId, s.tenantId, 'list resumable conversations');
|
|
122
218
|
const sessions = await s.store.listSessionsByTopic(s.topicId, s.tenantId);
|
|
219
|
+
const titles = readTitles(s.root);
|
|
123
220
|
const out = [];
|
|
124
221
|
for (const sess of sessions) {
|
|
222
|
+
// The CLI topic id is intentionally stable, so a store root that contains
|
|
223
|
+
// an older Project can contain the same topic id more than once. The cwd's
|
|
224
|
+
// cli.json pointer — `s.projectId` — is the authority; topic membership
|
|
225
|
+
// alone is not. Archived Session records are tombstones, not resume rows.
|
|
226
|
+
if (sess.projectId !== s.projectId || sess.status === 'archived')
|
|
227
|
+
continue;
|
|
125
228
|
const messages = await s.store.loadMessages(sess.id, s.tenantId);
|
|
126
229
|
if (messages.length === 0)
|
|
127
230
|
continue;
|
|
231
|
+
const stored = titles[sess.id];
|
|
128
232
|
out.push({
|
|
129
233
|
id: sess.id,
|
|
130
|
-
title: conversationTitle(messages),
|
|
234
|
+
title: stored?.title ?? conversationTitle(messages),
|
|
235
|
+
named: stored?.named ?? false,
|
|
131
236
|
updatedAt: toIso(sess.updatedAt),
|
|
132
237
|
count: messages.length,
|
|
133
238
|
});
|
|
134
239
|
}
|
|
135
240
|
return out.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt)).slice(0, limit);
|
|
136
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Conversation titles that must survive their opening message, in a file
|
|
244
|
+
* beside the sessions. `named` distinguishes a person's choice from a derived
|
|
245
|
+
* title pinned before compaction removes the message it came from.
|
|
246
|
+
*
|
|
247
|
+
* A sidecar rather than a field on the SDK's `Session`. Naming a conversation
|
|
248
|
+
* is an operator-application concern: the kernel has no view that lists them
|
|
249
|
+
* and nothing in it would read the name. Putting it in the entity would widen
|
|
250
|
+
* a store interface every host implements, to carry a string only this package
|
|
251
|
+
* writes and only this package displays.
|
|
252
|
+
*
|
|
253
|
+
* The cost is that the two can disagree — a session deleted outside this
|
|
254
|
+
* process leaves its name behind. That is why nothing here treats the file as
|
|
255
|
+
* a list of sessions: it is consulted BY id, from a list the store produced,
|
|
256
|
+
* so a stale entry is never reachable and never has to be reconciled.
|
|
257
|
+
*/
|
|
258
|
+
const TITLES_FILE = 'titles.json';
|
|
259
|
+
function titlesPath(root) {
|
|
260
|
+
return join(root, TITLES_FILE);
|
|
261
|
+
}
|
|
262
|
+
function readTitles(root) {
|
|
263
|
+
try {
|
|
264
|
+
const parsed = JSON.parse(readFileSync(titlesPath(root), 'utf-8'));
|
|
265
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
266
|
+
return {};
|
|
267
|
+
// Filtered rather than trusted. This file is on disk where a person can
|
|
268
|
+
// edit it, and a malformed value reaching the renderer as a title is a
|
|
269
|
+
// crash in a list nobody could then get out of. Strings are the v1 shape:
|
|
270
|
+
// every one was written by `/title`, so each remains a chosen name.
|
|
271
|
+
const titles = {};
|
|
272
|
+
for (const [id, value] of Object.entries(parsed)) {
|
|
273
|
+
if (typeof value === 'string') {
|
|
274
|
+
titles[id] = { title: value, named: true };
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
if (typeof value !== 'object' || value === null)
|
|
278
|
+
continue;
|
|
279
|
+
const candidate = value;
|
|
280
|
+
if (typeof candidate.title === 'string' && typeof candidate.named === 'boolean') {
|
|
281
|
+
titles[id] = { title: candidate.title, named: candidate.named };
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return titles;
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
// Absent, unreadable, or not JSON. A conversation with no chosen name
|
|
288
|
+
// still has a derived one, so the honest fallback is "nobody named
|
|
289
|
+
// anything" rather than a failure the operator cannot act on.
|
|
290
|
+
return {};
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
function writeTitles(root, titles) {
|
|
294
|
+
mkdirSync(root, { recursive: true });
|
|
295
|
+
writeFileSync(titlesPath(root), `${JSON.stringify(titles, null, 2)}\n`, 'utf-8');
|
|
296
|
+
}
|
|
297
|
+
/** The name a person gave this conversation, or `undefined`. */
|
|
298
|
+
export function titleOf(s, sessionId) {
|
|
299
|
+
const stored = readTitles(s.root)[sessionId];
|
|
300
|
+
return stored?.named ? stored.title : undefined;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Name a conversation, or with an empty name, take the name away.
|
|
304
|
+
*
|
|
305
|
+
* Removing rather than storing `''` is what keeps "named" a real distinction:
|
|
306
|
+
* an empty string is not a name, and leaving one behind would make `/resume`
|
|
307
|
+
* show a blank row that reads as a conversation with nothing in it.
|
|
308
|
+
*/
|
|
309
|
+
export function setTitle(s, sessionId, title) {
|
|
310
|
+
const titles = readTitles(s.root);
|
|
311
|
+
const trimmed = title.trim();
|
|
312
|
+
if (trimmed === '')
|
|
313
|
+
delete titles[sessionId];
|
|
314
|
+
else
|
|
315
|
+
titles[sessionId] = { title: trimmed, named: true };
|
|
316
|
+
writeTitles(s.root, titles);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Continue in a copy, leaving the original where it is.
|
|
320
|
+
*
|
|
321
|
+
* The copy is a real Session with the transcript written into it, not a
|
|
322
|
+
* pointer: the two diverge from here, and a pointer would make the original's
|
|
323
|
+
* later turns appear in the fork.
|
|
324
|
+
*
|
|
325
|
+
* **The fork is always named, and that is the load-bearing part.** Both
|
|
326
|
+
* conversations start with the same first message, so both DERIVE the same
|
|
327
|
+
* title — and `/resume` would show two rows a person cannot tell apart, which
|
|
328
|
+
* is a worse outcome than not being able to fork at all. The name is taken
|
|
329
|
+
* from the source's own, so a fork of a fork stays readable, and it is
|
|
330
|
+
* numbered against the names already in use so a second fork does not collide
|
|
331
|
+
* with the first.
|
|
332
|
+
*/
|
|
333
|
+
export async function forkConversation(s, sourceId) {
|
|
334
|
+
await requireWritableConversation(s, sourceId, 'fork conversation');
|
|
335
|
+
const messages = await loadConversation(s, sourceId);
|
|
336
|
+
if (messages.length === 0) {
|
|
337
|
+
// Refused rather than served. A fork of nothing is an empty session
|
|
338
|
+
// that shows up in `/resume` forever and answers no question.
|
|
339
|
+
throw new Error('There is nothing to fork yet — this conversation has no messages.');
|
|
340
|
+
}
|
|
341
|
+
const { id, title } = await writeFork(s, sourceId, messages, messages, {
|
|
342
|
+
kind: 'all',
|
|
343
|
+
});
|
|
344
|
+
return { id, title, copied: messages.length };
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Fork immediately before one durable user message.
|
|
348
|
+
*
|
|
349
|
+
* `userOrdinal` is zero-based among user messages, not among every message.
|
|
350
|
+
* The expected message is a compare-and-swap guard: a picker selects from an
|
|
351
|
+
* in-memory history, then this helper reloads disk. If another write changed
|
|
352
|
+
* that position, it refuses BEFORE creating a session instead of branching at
|
|
353
|
+
* a boundary the operator did not select.
|
|
354
|
+
*
|
|
355
|
+
* An empty prefix is valid. Editing the first prompt creates an empty branch
|
|
356
|
+
* and restores that prompt to the composer; refusing it would make the most
|
|
357
|
+
* common first-turn correction the one prompt this feature cannot edit.
|
|
358
|
+
*/
|
|
359
|
+
export async function forkConversationBeforeUser(s, sourceId, userOrdinal, expected) {
|
|
360
|
+
if (!Number.isInteger(userOrdinal) || userOrdinal < 0) {
|
|
361
|
+
throw new Error('The selected user-message position is invalid.');
|
|
362
|
+
}
|
|
363
|
+
await requireWritableConversation(s, sourceId, 'fork conversation before a prompt');
|
|
364
|
+
const messages = await loadConversation(s, sourceId);
|
|
365
|
+
let seen = -1;
|
|
366
|
+
const messageIndex = messages.findIndex((message) => {
|
|
367
|
+
if (message.role !== 'user')
|
|
368
|
+
return false;
|
|
369
|
+
seen += 1;
|
|
370
|
+
return seen === userOrdinal;
|
|
371
|
+
});
|
|
372
|
+
const selected = messages[messageIndex];
|
|
373
|
+
if (messageIndex < 0 || selected?.role !== 'user') {
|
|
374
|
+
throw new Error('The selected user message no longer exists in this conversation.');
|
|
375
|
+
}
|
|
376
|
+
if (!isDeepStrictEqual(selected, expected)) {
|
|
377
|
+
throw new Error('The conversation changed after the prompt was selected. Nothing was forked; open the editor again from the current history.');
|
|
378
|
+
}
|
|
379
|
+
const prefix = messages.slice(0, messageIndex);
|
|
380
|
+
const { id, title } = await writeFork(s, sourceId, messages, prefix, {
|
|
381
|
+
kind: 'before-user',
|
|
382
|
+
userOrdinal,
|
|
383
|
+
});
|
|
384
|
+
return { id, title, messages: prefix, selected };
|
|
385
|
+
}
|
|
386
|
+
/** Create and name one fork after every boundary decision has been validated. */
|
|
387
|
+
async function writeFork(s, sourceId, sourceMessages, copiedMessages, boundary) {
|
|
388
|
+
const source = readTitles(s.root)[sourceId]?.title ?? conversationTitle(sourceMessages);
|
|
389
|
+
const origin = await forkOrigin(s, sourceId, sourceMessages, copiedMessages.length, boundary);
|
|
390
|
+
const id = await createConversation(s);
|
|
391
|
+
// The copied model context is published as one replacement record and read
|
|
392
|
+
// back before lineage is committed. If the process dies before origin, export
|
|
393
|
+
// refuses; once origin exists, a restart cannot observe a half-copied prefix.
|
|
394
|
+
await s.store.replaceMessages(id, copiedMessages, s.tenantId);
|
|
395
|
+
const copiedBack = await loadConversation(s, id);
|
|
396
|
+
if (!isDeepStrictEqual(copiedBack, copiedMessages)) {
|
|
397
|
+
throw new Error(`The forked conversation did not preserve its exact copied history. No lineage record was published for ${id}.`);
|
|
398
|
+
}
|
|
399
|
+
await s.turnEvidence?.recordOrigin(id, origin);
|
|
400
|
+
const title = nextForkName(Object.fromEntries(Object.entries(readTitles(s.root)).map(([key, value]) => [key, value.title])), source);
|
|
401
|
+
setTitle(s, id, title);
|
|
402
|
+
return { id, title };
|
|
403
|
+
}
|
|
404
|
+
async function forkOrigin(s, sourceId, sourceMessages, copiedMessages, boundary) {
|
|
405
|
+
const unresolved = {
|
|
406
|
+
kind: 'fork-unresolved',
|
|
407
|
+
sourceSessionId: sourceId,
|
|
408
|
+
copiedMessages,
|
|
409
|
+
};
|
|
410
|
+
if (!s.turnEvidence)
|
|
411
|
+
return unresolved;
|
|
412
|
+
try {
|
|
413
|
+
const lineage = await s.turnEvidence.resolveLineage(sourceId);
|
|
414
|
+
if (lineage.kind !== 'available')
|
|
415
|
+
return unresolved;
|
|
416
|
+
const durableTurns = durableTurnProjections(sourceMessages);
|
|
417
|
+
if (!durableTurns || durableTurns.length === 0)
|
|
418
|
+
return unresolved;
|
|
419
|
+
const selected = boundary.kind === 'all'
|
|
420
|
+
? uniqueLineageIndex(durableTurns, lineage.turns, durableTurns.length - 1)
|
|
421
|
+
: uniqueLineageIndex(durableTurns, lineage.turns, boundary.userOrdinal);
|
|
422
|
+
if (selected === undefined)
|
|
423
|
+
return unresolved;
|
|
424
|
+
const copiedTurnCount = boundary.kind === 'all' ? selected + 1 : selected;
|
|
425
|
+
return {
|
|
426
|
+
kind: 'fork',
|
|
427
|
+
sourceSessionId: sourceId,
|
|
428
|
+
copiedMessages,
|
|
429
|
+
turns: lineage.turns
|
|
430
|
+
.slice(0, copiedTurnCount)
|
|
431
|
+
.map((turn) => ({ ...turn.reference })),
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
catch {
|
|
435
|
+
// Forking model history remains useful when old/foreign evidence cannot
|
|
436
|
+
// prove lineage. The origin says so explicitly, and complete export refuses.
|
|
437
|
+
return unresolved;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
function durableTurnProjections(messages) {
|
|
441
|
+
const turns = [];
|
|
442
|
+
for (const message of messages) {
|
|
443
|
+
if (message.role === 'user') {
|
|
444
|
+
turns.push({ user: message });
|
|
445
|
+
continue;
|
|
446
|
+
}
|
|
447
|
+
if (message.role !== 'assistant')
|
|
448
|
+
continue;
|
|
449
|
+
const turn = turns.at(-1);
|
|
450
|
+
if (!turn || turn.assistantText !== undefined || typeof message.content !== 'string') {
|
|
451
|
+
return undefined;
|
|
452
|
+
}
|
|
453
|
+
turn.assistantText = message.content;
|
|
454
|
+
}
|
|
455
|
+
return turns;
|
|
456
|
+
}
|
|
457
|
+
/** Unique source-turn boundary for one user selected from a possibly compacted suffix. */
|
|
458
|
+
function uniqueLineageIndex(durable, lineage, selectedUser) {
|
|
459
|
+
if (selectedUser < 0 || selectedUser >= durable.length)
|
|
460
|
+
return undefined;
|
|
461
|
+
const prefix = alignmentTable(durable, lineage);
|
|
462
|
+
const reversedDurable = [...durable].reverse();
|
|
463
|
+
const reversedLineage = [...lineage].reverse();
|
|
464
|
+
const suffix = alignmentTable(reversedDurable, reversedLineage);
|
|
465
|
+
const candidates = [];
|
|
466
|
+
for (let index = 0; index < lineage.length; index += 1) {
|
|
467
|
+
if (!projectionMatches(durable[selectedUser], lineage[index]))
|
|
468
|
+
continue;
|
|
469
|
+
const beforeFits = prefix[selectedUser]?.[index] === true;
|
|
470
|
+
const durableAfter = durable.length - selectedUser - 1;
|
|
471
|
+
const lineageAfter = lineage.length - index - 1;
|
|
472
|
+
const afterFits = suffix[durableAfter]?.[lineageAfter] === true;
|
|
473
|
+
if (beforeFits && afterFits)
|
|
474
|
+
candidates.push(index);
|
|
475
|
+
}
|
|
476
|
+
return candidates.length === 1 ? candidates[0] : undefined;
|
|
477
|
+
}
|
|
478
|
+
/** DP table: whether the first i needles embed, in order, within the first j haystack values. */
|
|
479
|
+
function alignmentTable(needles, haystack) {
|
|
480
|
+
const table = Array.from({ length: needles.length + 1 }, () => Array.from({ length: haystack.length + 1 }, () => false));
|
|
481
|
+
for (let column = 0; column <= haystack.length; column += 1)
|
|
482
|
+
table[0][column] = true;
|
|
483
|
+
for (let row = 1; row <= needles.length; row += 1) {
|
|
484
|
+
for (let column = 1; column <= haystack.length; column += 1) {
|
|
485
|
+
table[row][column] =
|
|
486
|
+
table[row]?.[column - 1] === true ||
|
|
487
|
+
(table[row - 1]?.[column - 1] === true &&
|
|
488
|
+
projectionMatches(needles[row - 1], haystack[column - 1]));
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
return table;
|
|
492
|
+
}
|
|
493
|
+
function projectionMatches(durable, lineage) {
|
|
494
|
+
if (!durable || !lineage || !isDeepStrictEqual(durable.user, lineage.evidence.started.user)) {
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
const settled = lineage.evidence.settled;
|
|
498
|
+
if (!settled)
|
|
499
|
+
return false;
|
|
500
|
+
return durable.assistantText === undefined
|
|
501
|
+
? settled.assistantText.trim().length === 0
|
|
502
|
+
: settled.assistantText === durable.assistantText;
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* `X (fork)`, then `X (fork 2)`, `X (fork 3)`.
|
|
506
|
+
*
|
|
507
|
+
* Numbered against the names in use rather than against a count of forks,
|
|
508
|
+
* because a name that was removed frees its number and a fork that was renamed
|
|
509
|
+
* never held one.
|
|
510
|
+
*/
|
|
511
|
+
export function nextForkName(taken, source) {
|
|
512
|
+
const used = new Set(Object.values(taken));
|
|
513
|
+
const first = `${source} (fork)`;
|
|
514
|
+
if (!used.has(first))
|
|
515
|
+
return first;
|
|
516
|
+
for (let n = 2; n < 1000; n += 1) {
|
|
517
|
+
const candidate = `${source} (fork ${n})`;
|
|
518
|
+
if (!used.has(candidate))
|
|
519
|
+
return candidate;
|
|
520
|
+
}
|
|
521
|
+
// A thousand forks of one conversation is not a case worth a cleverer
|
|
522
|
+
// answer, and a name that repeats is better than a refusal here.
|
|
523
|
+
return `${source} (fork)`;
|
|
524
|
+
}
|
|
137
525
|
function conversationTitle(messages) {
|
|
138
|
-
const
|
|
139
|
-
const
|
|
526
|
+
const firstHuman = messages.find((message) => message.role === 'user' && message.source === undefined);
|
|
527
|
+
const firstGoal = messages.find((message) => message.role === 'user' && message.source?.type === 'goal-round');
|
|
528
|
+
const raw = firstHuman?.role === 'user'
|
|
529
|
+
? firstHuman.content
|
|
530
|
+
: firstGoal?.role === 'user' && firstGoal.source?.type === 'goal-round'
|
|
531
|
+
? firstGoal.source.objective
|
|
532
|
+
: 'Conversation';
|
|
140
533
|
const text = raw.replace(/\s+/g, ' ').trim();
|
|
141
534
|
return text.length > 60 ? `${text.slice(0, 59)}…` : text || 'Conversation';
|
|
142
535
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/integrations/sessions/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/integrations/sessions/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Verified Markdown projection of one CLI conversation. */
|
|
2
|
+
import { type SessionId } from '@namzu/sdk';
|
|
3
|
+
import type { CliSessions } from './store.js';
|
|
4
|
+
export type ConversationTranscriptUnavailableReason = 'evidence-not-recorded' | 'fork-lineage-unavailable' | 'nothing-to-export' | 'unbound-run' | 'run-record-corrupt' | 'run-incomplete' | 'run-snapshot-unavailable' | 'run-snapshot-unverified' | 'run-snapshot-out-of-sync' | 'turn-run-mismatch' | 'turn-settlement-mismatch';
|
|
5
|
+
export declare class ConversationTranscriptUnavailableError extends Error {
|
|
6
|
+
readonly reason: ConversationTranscriptUnavailableReason;
|
|
7
|
+
constructor(reason: ConversationTranscriptUnavailableReason, detail: string);
|
|
8
|
+
}
|
|
9
|
+
export interface ConversationMarkdownExport {
|
|
10
|
+
readonly sessionId: SessionId;
|
|
11
|
+
readonly turns: number;
|
|
12
|
+
readonly markdown: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reconstruct a conversation from caller/run correlation plus the SDK's
|
|
16
|
+
* strictly read, event-head-verified run records.
|
|
17
|
+
*/
|
|
18
|
+
export declare function conversationMarkdown(sessions: CliSessions, sessionId: SessionId): Promise<ConversationMarkdownExport>;
|
|
19
|
+
export interface WriteConversationExportResult {
|
|
20
|
+
readonly path: string;
|
|
21
|
+
readonly bytes: number;
|
|
22
|
+
}
|
|
23
|
+
/** Write through a same-directory temporary inode, then link without clobbering. */
|
|
24
|
+
export declare function writeConversationExport(markdown: string, destination: string, cwd: string): Promise<WriteConversationExportResult>;
|
|
25
|
+
//# sourceMappingURL=transcript-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-export.d.ts","sourceRoot":"","sources":["../../../src/integrations/sessions/transcript-export.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAQ5D,OAAO,EAKN,KAAK,SAAS,EAId,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAO7C,MAAM,MAAM,uCAAuC,GAChD,uBAAuB,GACvB,0BAA0B,GAC1B,mBAAmB,GACnB,aAAa,GACb,oBAAoB,GACpB,gBAAgB,GAChB,0BAA0B,GAC1B,yBAAyB,GACzB,0BAA0B,GAC1B,mBAAmB,GACnB,0BAA0B,CAAA;AAE7B,qBAAa,sCAAuC,SAAQ,KAAK;IAChE,QAAQ,CAAC,MAAM,EAAE,uCAAuC,CAAA;gBAE5C,MAAM,EAAE,uCAAuC,EAAE,MAAM,EAAE,MAAM;CAK3E;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CACzB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACzC,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,0BAA0B,CAAC,CAgNrC;AAED,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,oFAAoF;AACpF,wBAAsB,uBAAuB,CAC5C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,6BAA6B,CAAC,CAkCxC"}
|