hammoc 1.1.6 → 1.2.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 +8 -2
- package/bin/hammoc.js +12 -0
- package/package.json +3 -3
- package/packages/client/dist/assets/{index-BQASJJka.js → index-Bz_ljWO0.js} +1 -1
- package/packages/client/dist/assets/index-Cc_AX5QV.css +32 -0
- package/packages/client/dist/assets/index-DjVOQMst.js +1451 -0
- package/packages/client/dist/index.html +2 -2
- package/packages/client/dist/sw.js +1 -1
- package/packages/server/dist/app.d.ts.map +1 -1
- package/packages/server/dist/app.js +3 -0
- package/packages/server/dist/app.js.map +1 -1
- package/packages/server/dist/controllers/queueController.d.ts +1 -0
- package/packages/server/dist/controllers/queueController.d.ts.map +1 -1
- package/packages/server/dist/controllers/queueController.js +12 -0
- package/packages/server/dist/controllers/queueController.js.map +1 -1
- package/packages/server/dist/controllers/serverController.d.ts.map +1 -1
- package/packages/server/dist/controllers/serverController.js +20 -2
- package/packages/server/dist/controllers/serverController.js.map +1 -1
- package/packages/server/dist/controllers/sessionController.d.ts +5 -10
- package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
- package/packages/server/dist/controllers/sessionController.js +65 -80
- package/packages/server/dist/controllers/sessionController.js.map +1 -1
- package/packages/server/dist/handlers/streamCallbacks.d.ts +4 -0
- package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
- package/packages/server/dist/handlers/streamCallbacks.js +9 -3
- package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
- package/packages/server/dist/handlers/websocket.d.ts +9 -15
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +668 -120
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +3 -1
- package/packages/server/dist/locales/es/server.json +3 -1
- package/packages/server/dist/locales/ja/server.json +3 -1
- package/packages/server/dist/locales/ko/server.json +3 -1
- package/packages/server/dist/locales/pt/server.json +3 -1
- package/packages/server/dist/locales/zh-CN/server.json +3 -1
- package/packages/server/dist/routes/images.d.ts +7 -0
- package/packages/server/dist/routes/images.d.ts.map +1 -0
- package/packages/server/dist/routes/images.js +51 -0
- package/packages/server/dist/routes/images.js.map +1 -0
- package/packages/server/dist/routes/queue.d.ts.map +1 -1
- package/packages/server/dist/routes/queue.js +2 -1
- package/packages/server/dist/routes/queue.js.map +1 -1
- package/packages/server/dist/routes/sessions.d.ts.map +1 -1
- package/packages/server/dist/routes/sessions.js +2 -3
- package/packages/server/dist/routes/sessions.js.map +1 -1
- package/packages/server/dist/services/chatService.d.ts +2 -0
- package/packages/server/dist/services/chatService.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.js +33 -1
- package/packages/server/dist/services/chatService.js.map +1 -1
- package/packages/server/dist/services/historyParser.d.ts +1 -11
- package/packages/server/dist/services/historyParser.d.ts.map +1 -1
- package/packages/server/dist/services/historyParser.js +144 -182
- package/packages/server/dist/services/historyParser.js.map +1 -1
- package/packages/server/dist/services/imageStorageService.d.ts +28 -0
- package/packages/server/dist/services/imageStorageService.d.ts.map +1 -0
- package/packages/server/dist/services/imageStorageService.js +108 -0
- package/packages/server/dist/services/imageStorageService.js.map +1 -0
- package/packages/server/dist/services/ptyService.d.ts +6 -0
- package/packages/server/dist/services/ptyService.d.ts.map +1 -1
- package/packages/server/dist/services/ptyService.js +59 -0
- package/packages/server/dist/services/ptyService.js.map +1 -1
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +23 -2
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/sessionBufferManager.d.ts +26 -0
- package/packages/server/dist/services/sessionBufferManager.d.ts.map +1 -0
- package/packages/server/dist/services/sessionBufferManager.js +113 -0
- package/packages/server/dist/services/sessionBufferManager.js.map +1 -0
- package/packages/server/dist/services/sessionService.d.ts +26 -1
- package/packages/server/dist/services/sessionService.d.ts.map +1 -1
- package/packages/server/dist/services/sessionService.js +168 -39
- package/packages/server/dist/services/sessionService.js.map +1 -1
- package/packages/server/dist/services/summarizeService.d.ts +25 -0
- package/packages/server/dist/services/summarizeService.d.ts.map +1 -0
- package/packages/server/dist/services/summarizeService.js +122 -0
- package/packages/server/dist/services/summarizeService.js.map +1 -0
- package/packages/server/dist/utils/imageUtils.d.ts +11 -0
- package/packages/server/dist/utils/imageUtils.d.ts.map +1 -0
- package/packages/server/dist/utils/imageUtils.js +37 -0
- package/packages/server/dist/utils/imageUtils.js.map +1 -0
- package/packages/server/dist/utils/messageTree.d.ts +56 -0
- package/packages/server/dist/utils/messageTree.d.ts.map +1 -0
- package/packages/server/dist/utils/messageTree.js +356 -0
- package/packages/server/dist/utils/messageTree.js.map +1 -0
- package/packages/server/package.json +3 -1
- package/packages/shared/dist/constants/index.d.ts +3 -0
- package/packages/shared/dist/constants/index.d.ts.map +1 -0
- package/packages/shared/dist/constants/index.js +3 -0
- package/packages/shared/dist/constants/index.js.map +1 -0
- package/packages/shared/dist/constants/messageTree.d.ts +6 -0
- package/packages/shared/dist/constants/messageTree.d.ts.map +1 -0
- package/packages/shared/dist/constants/messageTree.js +7 -0
- package/packages/shared/dist/constants/messageTree.js.map +1 -0
- package/packages/shared/dist/index.d.ts +1 -1
- package/packages/shared/dist/index.d.ts.map +1 -1
- package/packages/shared/dist/index.js +1 -1
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/types/history.d.ts +21 -8
- package/packages/shared/dist/types/history.d.ts.map +1 -1
- package/packages/shared/dist/types/message.d.ts +10 -0
- package/packages/shared/dist/types/message.d.ts.map +1 -1
- package/packages/shared/dist/types/message.js.map +1 -1
- package/packages/shared/dist/types/preferences.d.ts +2 -1
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/sdk.d.ts +8 -0
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/session.d.ts +1 -0
- package/packages/shared/dist/types/session.d.ts.map +1 -1
- package/packages/shared/dist/types/session.js.map +1 -1
- package/packages/shared/dist/types/websocket.d.ts +59 -5
- package/packages/shared/dist/types/websocket.d.ts.map +1 -1
- package/scripts/spike-25.9-output.log +47 -0
- package/packages/client/dist/assets/index-Dr2X4keZ.css +0 -32
- package/packages/client/dist/assets/index-zjjTVZ6W.js +0 -1418
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side message tree building utilities
|
|
3
|
+
* Story 25.4: Branch-aware Message Pagination
|
|
4
|
+
*
|
|
5
|
+
* Pure functions that work with RawJSONLMessage to build a tree,
|
|
6
|
+
* extract active branch paths, and compute branch points.
|
|
7
|
+
*/
|
|
8
|
+
import { ROOT_BRANCH_KEY } from '@hammoc/shared';
|
|
9
|
+
import { createLogger } from './logger.js';
|
|
10
|
+
const log = createLogger('messageTree');
|
|
11
|
+
// --- Helpers ---
|
|
12
|
+
/** Message types that participate in the conversation tree for branch selection */
|
|
13
|
+
const CONVERSATION_TYPES = new Set(['user', 'assistant', 'system']);
|
|
14
|
+
/**
|
|
15
|
+
* Detect task-notification user messages injected by background tasks.
|
|
16
|
+
* These are user-type messages whose content starts with <task-notification> —
|
|
17
|
+
* they should not count as branch-creating user messages since they are
|
|
18
|
+
* system-injected and can arrive concurrently with real user input.
|
|
19
|
+
*/
|
|
20
|
+
function isTaskNotification(node) {
|
|
21
|
+
const content = node.message.message?.content;
|
|
22
|
+
if (typeof content === 'string')
|
|
23
|
+
return content.trimStart().startsWith('<task-notification>');
|
|
24
|
+
if (Array.isArray(content)) {
|
|
25
|
+
const first = content.find((c) => c.type === 'text');
|
|
26
|
+
return first?.text?.trimStart().startsWith('<task-notification>') ?? false;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Extract base UUID from a potentially split message UUID.
|
|
32
|
+
* Split IDs follow patterns: {uuid}-text-{n}, {uuid}-tool-{id}, {uuid}-thinking
|
|
33
|
+
*/
|
|
34
|
+
function getBaseUuid(uuid) {
|
|
35
|
+
const match = uuid.match(/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:-(text-\d+|tool-.+|thinking))?$/);
|
|
36
|
+
return match ? match[1] : uuid;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Group children into logical branches by UUID prefix.
|
|
40
|
+
* A true branch exists only when there are multiple user-type groups.
|
|
41
|
+
* Mirrors client-side groupChildrenIntoBranches logic.
|
|
42
|
+
*/
|
|
43
|
+
export function groupRawChildrenIntoBranches(children) {
|
|
44
|
+
// Step 1: group split fragments by base UUID
|
|
45
|
+
const groups = new Map();
|
|
46
|
+
for (const child of children) {
|
|
47
|
+
const base = getBaseUuid(child.message.uuid);
|
|
48
|
+
if (!groups.has(base))
|
|
49
|
+
groups.set(base, []);
|
|
50
|
+
groups.get(base).push(child);
|
|
51
|
+
}
|
|
52
|
+
const uuidGroups = Array.from(groups.values());
|
|
53
|
+
if (uuidGroups.length <= 1)
|
|
54
|
+
return uuidGroups;
|
|
55
|
+
// Step 2: detect true branches — only user-type groups count.
|
|
56
|
+
// A group "leads to a user" if it directly contains a user-type node OR
|
|
57
|
+
// if it contains a non-conversation intermediary (e.g. attachment, progress)
|
|
58
|
+
// whose subtree contains any conversation node. This handles chains like
|
|
59
|
+
// user → attachment → attachment → assistant (normal flow through attachments)
|
|
60
|
+
// and assistant → progress → user (resumeSessionAt asymmetry).
|
|
61
|
+
function hasConversationDescendant(n, depth) {
|
|
62
|
+
if (depth > 10)
|
|
63
|
+
return false;
|
|
64
|
+
if (CONVERSATION_TYPES.has(n.message.type))
|
|
65
|
+
return true;
|
|
66
|
+
return n.children.some((c) => hasConversationDescendant(c, depth + 1));
|
|
67
|
+
}
|
|
68
|
+
function groupLeadsToUser(g) {
|
|
69
|
+
return g.some((n) => (n.message.type === 'user' && !isTaskNotification(n)) ||
|
|
70
|
+
(!CONVERSATION_TYPES.has(n.message.type) && hasConversationDescendant(n, 0)));
|
|
71
|
+
}
|
|
72
|
+
const userGroupCount = uuidGroups.filter(groupLeadsToUser).length;
|
|
73
|
+
if (userGroupCount <= 1) {
|
|
74
|
+
// No real branches — all children are sequential flow
|
|
75
|
+
return [children];
|
|
76
|
+
}
|
|
77
|
+
// Multiple user groups = true branch point.
|
|
78
|
+
// Fold non-user groups into the nearest preceding user group.
|
|
79
|
+
const branches = [];
|
|
80
|
+
for (const group of uuidGroups) {
|
|
81
|
+
if (groupLeadsToUser(group)) {
|
|
82
|
+
branches.push([...group]);
|
|
83
|
+
}
|
|
84
|
+
else if (branches.length > 0) {
|
|
85
|
+
branches[branches.length - 1].push(...group);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
branches.push([...group]);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return branches;
|
|
92
|
+
}
|
|
93
|
+
// --- Core Functions ---
|
|
94
|
+
/**
|
|
95
|
+
* Build a raw message tree from JSONL messages using parentUuid links.
|
|
96
|
+
* Handles orphans (missing parent) and circular references defensively.
|
|
97
|
+
*/
|
|
98
|
+
export function buildRawMessageTree(messages) {
|
|
99
|
+
const nodeMap = new Map();
|
|
100
|
+
const roots = [];
|
|
101
|
+
// Phase 1: Create all nodes
|
|
102
|
+
for (const msg of messages) {
|
|
103
|
+
nodeMap.set(msg.uuid, { message: msg, children: [] });
|
|
104
|
+
}
|
|
105
|
+
// Phase 2: Link parent→children, detect orphans
|
|
106
|
+
for (const msg of messages) {
|
|
107
|
+
const node = nodeMap.get(msg.uuid);
|
|
108
|
+
if (!msg.parentUuid) {
|
|
109
|
+
roots.push(node);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const parent = nodeMap.get(msg.parentUuid);
|
|
113
|
+
if (!parent) {
|
|
114
|
+
log.warn(`Orphan message "${msg.uuid}" references non-existent parent "${msg.parentUuid}", treating as root`);
|
|
115
|
+
roots.push(node);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
parent.children.push(node);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Phase 3: Detect circular references
|
|
123
|
+
const visited = new Set();
|
|
124
|
+
const inStack = new Set();
|
|
125
|
+
function detectCycle(node) {
|
|
126
|
+
if (inStack.has(node.message.uuid))
|
|
127
|
+
return true;
|
|
128
|
+
if (visited.has(node.message.uuid))
|
|
129
|
+
return false;
|
|
130
|
+
visited.add(node.message.uuid);
|
|
131
|
+
inStack.add(node.message.uuid);
|
|
132
|
+
for (const child of node.children) {
|
|
133
|
+
if (detectCycle(child)) {
|
|
134
|
+
log.warn(`Circular reference detected at "${child.message.uuid}", breaking link and treating as root`);
|
|
135
|
+
node.children = node.children.filter((c) => c !== child);
|
|
136
|
+
roots.push(child);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
inStack.delete(node.message.uuid);
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
for (const root of [...roots]) {
|
|
143
|
+
detectCycle(root);
|
|
144
|
+
}
|
|
145
|
+
// Phase 3b: Promote unvisited nodes (rootless cycles)
|
|
146
|
+
for (const node of nodeMap.values()) {
|
|
147
|
+
if (!visited.has(node.message.uuid)) {
|
|
148
|
+
log.warn(`Unreachable node "${node.message.uuid}" promoted to root`);
|
|
149
|
+
roots.push(node);
|
|
150
|
+
detectCycle(node);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return { roots, nodeMap };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Find default branch selections by tracing from the newest leaf to root.
|
|
157
|
+
* Returns a Record<string, number> mapping branch point UUIDs to selected indices.
|
|
158
|
+
*/
|
|
159
|
+
export function getDefaultRawBranchSelections(roots) {
|
|
160
|
+
const selections = {};
|
|
161
|
+
if (roots.length === 0)
|
|
162
|
+
return selections;
|
|
163
|
+
// Find newest leaf
|
|
164
|
+
let newestLeaf = null;
|
|
165
|
+
let newestTime = '';
|
|
166
|
+
function findLeaves(node) {
|
|
167
|
+
const branches = groupRawChildrenIntoBranches(node.children);
|
|
168
|
+
if (branches.length === 0) {
|
|
169
|
+
// Only consider conversation-relevant types (user, assistant, system) as
|
|
170
|
+
// leaf candidates. Metadata types (queue-operation, file-history-snapshot,
|
|
171
|
+
// progress, last-prompt) are often isolated roots with no children — if
|
|
172
|
+
// their timestamp is newer than the last conversation message they would
|
|
173
|
+
// be incorrectly selected, causing getActiveRawBranch to pick an empty root.
|
|
174
|
+
if (!CONVERSATION_TYPES.has(node.message.type))
|
|
175
|
+
return;
|
|
176
|
+
const ts = node.message.timestamp || '';
|
|
177
|
+
if (ts > newestTime || !newestLeaf) {
|
|
178
|
+
newestTime = ts;
|
|
179
|
+
newestLeaf = node;
|
|
180
|
+
}
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
for (const branch of branches) {
|
|
184
|
+
for (const child of branch) {
|
|
185
|
+
findLeaves(child);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
for (const root of roots) {
|
|
190
|
+
findLeaves(root);
|
|
191
|
+
}
|
|
192
|
+
if (!newestLeaf)
|
|
193
|
+
return selections;
|
|
194
|
+
// Build parent map for reverse traversal
|
|
195
|
+
const parentMap = new Map();
|
|
196
|
+
function buildParentMap(node) {
|
|
197
|
+
for (const child of node.children) {
|
|
198
|
+
parentMap.set(child.message.uuid, node);
|
|
199
|
+
buildParentMap(child);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
for (const root of roots) {
|
|
203
|
+
buildParentMap(root);
|
|
204
|
+
}
|
|
205
|
+
// Walk up from leaf
|
|
206
|
+
let current = newestLeaf;
|
|
207
|
+
while (current) {
|
|
208
|
+
const parent = parentMap.get(current.message.uuid);
|
|
209
|
+
if (parent) {
|
|
210
|
+
const branches = groupRawChildrenIntoBranches(parent.children);
|
|
211
|
+
if (branches.length > 1) {
|
|
212
|
+
const branchIdx = branches.findIndex((branch) => branch.some((n) => n.message.uuid === current.message.uuid));
|
|
213
|
+
if (branchIdx >= 0) {
|
|
214
|
+
selections[parent.message.uuid] = branchIdx;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// current is a root — check multi-root selection
|
|
220
|
+
// Use conversation-relevant roots only (matching getActiveRawBranch)
|
|
221
|
+
const convRoots = roots.filter((r) => r.children.length > 0 || CONVERSATION_TYPES.has(r.message.type));
|
|
222
|
+
if (convRoots.length > 1) {
|
|
223
|
+
const rootIdx = convRoots.indexOf(current);
|
|
224
|
+
if (rootIdx >= 0) {
|
|
225
|
+
selections[ROOT_BRANCH_KEY] = rootIdx;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
current = parent || null;
|
|
230
|
+
}
|
|
231
|
+
return selections;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Extract the active branch as a flat RawJSONLMessage array,
|
|
235
|
+
* following branch selections. Unselected branch points default to last (newest) branch.
|
|
236
|
+
* Also computes branchPoints info for the response.
|
|
237
|
+
*/
|
|
238
|
+
export function getActiveRawBranch(roots, branchSelections) {
|
|
239
|
+
const messages = [];
|
|
240
|
+
const branchPoints = {};
|
|
241
|
+
if (roots.length === 0)
|
|
242
|
+
return { messages, branchPoints };
|
|
243
|
+
// Handle multi-root
|
|
244
|
+
// Filter to conversation-relevant roots: roots that either have children
|
|
245
|
+
// (part of a conversation chain) or are displayable types (user/assistant/system).
|
|
246
|
+
// Isolated metadata roots (queue-operation, file-history-snapshot, progress
|
|
247
|
+
// without children, last-prompt) are noise and must not participate in
|
|
248
|
+
// branch selection — otherwise they inflate the root count and cause the
|
|
249
|
+
// wrong root to be selected as the active conversation epoch.
|
|
250
|
+
let activeRoots;
|
|
251
|
+
const conversationRoots = roots.filter((r) => r.children.length > 0 || CONVERSATION_TYPES.has(r.message.type));
|
|
252
|
+
if (conversationRoots.length > 1) {
|
|
253
|
+
const userRootCount = conversationRoots.filter((r) => r.message.type === 'user').length;
|
|
254
|
+
const hasCompactBoundary = conversationRoots.some((r) => r.message.type === 'system' && r.message.subtype === 'compact_boundary');
|
|
255
|
+
if (userRootCount > 1 || hasCompactBoundary) {
|
|
256
|
+
const selectedIdx = branchSelections[ROOT_BRANCH_KEY] ?? conversationRoots.length - 1;
|
|
257
|
+
const clampedIdx = Math.max(0, Math.min(selectedIdx, conversationRoots.length - 1));
|
|
258
|
+
const selectedRoot = conversationRoots[clampedIdx];
|
|
259
|
+
const rootKey = selectedRoot.message.type === 'user' ? selectedRoot.message.uuid : ROOT_BRANCH_KEY;
|
|
260
|
+
branchPoints[rootKey] = { total: conversationRoots.length, current: clampedIdx, selectionKey: ROOT_BRANCH_KEY };
|
|
261
|
+
activeRoots = [selectedRoot];
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// Sequential orphan roots — display all conversation roots
|
|
265
|
+
activeRoots = conversationRoots;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// 0 or 1 conversation root — traverse all conversation roots (+ metadata
|
|
270
|
+
// roots with children, already included via the filter)
|
|
271
|
+
activeRoots = conversationRoots.length > 0 ? conversationRoots : roots;
|
|
272
|
+
}
|
|
273
|
+
function traverse(node) {
|
|
274
|
+
messages.push(node.message);
|
|
275
|
+
const branches = groupRawChildrenIntoBranches(node.children);
|
|
276
|
+
if (branches.length === 0)
|
|
277
|
+
return;
|
|
278
|
+
if (branches.length > 1) {
|
|
279
|
+
const selectedIdx = branchSelections[node.message.uuid] ?? branches.length - 1;
|
|
280
|
+
const clampedIdx = Math.max(0, Math.min(selectedIdx, branches.length - 1));
|
|
281
|
+
// Tag the first user message in the selected branch with branch info.
|
|
282
|
+
// If no direct user child exists, check one level deeper (handles
|
|
283
|
+
// assistant → progress → user pattern where progress is intermediary).
|
|
284
|
+
const selectedBranch = branches[clampedIdx];
|
|
285
|
+
const firstUserInBranch = selectedBranch.find((n) => n.message.type === 'user')
|
|
286
|
+
|| selectedBranch.flatMap((n) => n.children).find((c) => c.message.type === 'user');
|
|
287
|
+
const branchKey = firstUserInBranch ? firstUserInBranch.message.uuid : node.message.uuid;
|
|
288
|
+
branchPoints[branchKey] = { total: branches.length, current: clampedIdx, selectionKey: node.message.uuid };
|
|
289
|
+
for (const child of selectedBranch) {
|
|
290
|
+
traverse(child);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
for (const child of branches[0]) {
|
|
295
|
+
traverse(child);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
for (const root of activeRoots) {
|
|
300
|
+
traverse(root);
|
|
301
|
+
}
|
|
302
|
+
return { messages, branchPoints };
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Find branch selections that lead to a specific message UUID.
|
|
306
|
+
* Returns a branchSelections record suitable for getActiveRawBranch,
|
|
307
|
+
* or null if the UUID is not found in the tree.
|
|
308
|
+
*/
|
|
309
|
+
export function findBranchSelectionsForUuid(roots, targetUuid) {
|
|
310
|
+
const selections = {};
|
|
311
|
+
function containsUuid(node) {
|
|
312
|
+
if (node.message.uuid === targetUuid)
|
|
313
|
+
return true;
|
|
314
|
+
return node.children.some(containsUuid);
|
|
315
|
+
}
|
|
316
|
+
function traverse(node) {
|
|
317
|
+
if (node.message.uuid === targetUuid)
|
|
318
|
+
return true;
|
|
319
|
+
const branches = groupRawChildrenIntoBranches(node.children);
|
|
320
|
+
if (branches.length === 0)
|
|
321
|
+
return false;
|
|
322
|
+
for (let i = 0; i < branches.length; i++) {
|
|
323
|
+
if (branches[i].some(containsUuid)) {
|
|
324
|
+
if (branches.length > 1) {
|
|
325
|
+
selections[node.message.uuid] = i;
|
|
326
|
+
}
|
|
327
|
+
for (const child of branches[i]) {
|
|
328
|
+
if (traverse(child))
|
|
329
|
+
return true;
|
|
330
|
+
}
|
|
331
|
+
return true;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
// Handle multi-root: check which root tree contains the target
|
|
337
|
+
const conversationRoots = roots.filter((r) => r.children.length > 0 || CONVERSATION_TYPES.has(r.message.type));
|
|
338
|
+
if (conversationRoots.length > 1) {
|
|
339
|
+
for (let i = 0; i < conversationRoots.length; i++) {
|
|
340
|
+
if (containsUuid(conversationRoots[i])) {
|
|
341
|
+
selections[ROOT_BRANCH_KEY] = i;
|
|
342
|
+
if (traverse(conversationRoots[i]))
|
|
343
|
+
return selections;
|
|
344
|
+
return selections;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
const searchRoots = conversationRoots.length > 0 ? conversationRoots : roots;
|
|
350
|
+
for (const root of searchRoots) {
|
|
351
|
+
if (traverse(root))
|
|
352
|
+
return selections;
|
|
353
|
+
}
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=messageTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageTree.js","sourceRoot":"","sources":["../../src/utils/messageTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"js-yaml": "^4.1.1",
|
|
28
28
|
"multer": "^2.1.1",
|
|
29
29
|
"node-pty": "^1.0.0",
|
|
30
|
+
"sharp": "^0.34.5",
|
|
30
31
|
"simple-git": "^3.27.0",
|
|
31
32
|
"socket.io": "^4.8.0",
|
|
32
33
|
"web-push": "^3.6.7",
|
|
@@ -41,12 +42,13 @@
|
|
|
41
42
|
"@types/js-yaml": "^4.0.9",
|
|
42
43
|
"@types/multer": "^2.1.0",
|
|
43
44
|
"@types/node": "^22.0.0",
|
|
45
|
+
"@types/sharp": "^0.31.1",
|
|
44
46
|
"@types/supertest": "^6.0.3",
|
|
45
47
|
"@types/web-push": "^3.6.4",
|
|
46
48
|
"@vitest/coverage-v8": "^2.0.0",
|
|
47
49
|
"supertest": "^7.2.2",
|
|
48
50
|
"tsx": "^4.19.0",
|
|
49
51
|
"typescript": "^5.6.0",
|
|
50
|
-
"vitest": "^2.
|
|
52
|
+
"vitest": "^2.1.9"
|
|
51
53
|
}
|
|
52
54
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageTree.d.ts","sourceRoot":"","sources":["../../src/constants/messageTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,eAAe,EAAG,UAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageTree.js","sourceRoot":"","sources":["../../src/constants/messageTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAmB,CAAC"}
|
|
@@ -2,7 +2,7 @@ export * from './types/sdk.js';
|
|
|
2
2
|
export * from './types/streaming.js';
|
|
3
3
|
export * from './types/websocket.js';
|
|
4
4
|
export * from './types/message.js';
|
|
5
|
-
export * from './constants/
|
|
5
|
+
export * from './constants/index.js';
|
|
6
6
|
export * from './types/session.js';
|
|
7
7
|
export * from './types/cli.js';
|
|
8
8
|
export { AuthConfig, PasswordValidationResult, MIN_PASSWORD_LENGTH, AuthConfigError, } from './types/auth.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AAGrC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AAGrC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAIrC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIrF,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,4BAA4B,EAC5B,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,2BAA2B,EAC3B,6BAA6B,EAC7B,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG/E,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAG/F,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -6,7 +6,7 @@ export * from './types/streaming.js';
|
|
|
6
6
|
export * from './types/websocket.js';
|
|
7
7
|
// Story 5.5: Attachment, ImageAttachment, IMAGE_CONSTRAINTS
|
|
8
8
|
export * from './types/message.js';
|
|
9
|
-
export * from './constants/
|
|
9
|
+
export * from './constants/index.js';
|
|
10
10
|
// Story 1.6: Session types for session management
|
|
11
11
|
// Story 3.3: Session List API types (SessionListItem, SessionListResponse, SESSION_ERRORS)
|
|
12
12
|
export * from './types/session.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,cAAc,gBAAgB,CAAC;AAE/B,+CAA+C;AAC/C,cAAc,sBAAsB,CAAC;AAErC,2CAA2C;AAC3C,cAAc,sBAAsB,CAAC;AAErC,4DAA4D;AAC5D,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,cAAc,gBAAgB,CAAC;AAE/B,+CAA+C;AAC/C,cAAc,sBAAsB,CAAC;AAErC,2CAA2C;AAC3C,cAAc,sBAAsB,CAAC;AAErC,4DAA4D;AAC5D,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAErC,kDAAkD;AAClD,2FAA2F;AAC3F,cAAc,oBAAoB,CAAC;AAEnC,iDAAiD;AACjD,cAAc,gBAAgB,CAAC;AAE/B,mDAAmD;AACnD,OAAO,EAGL,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,yBAAyB;AACzB,OAAO,EAKL,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,0CAA0C;AAC1C,OAAO,EAGL,gBAAgB,GAGjB,MAAM,iBAAiB,CAAC;AAEzB,iCAAiC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAKtD,gDAAgD;AAChD,kDAAkD;AAClD,OAAO,EAGL,cAAc,GAYf,MAAM,oBAAoB,CAAC;AAM5B,gDAAgD;AAChD,OAAO,EAIL,mBAAmB,EASnB,mBAAmB,GAEpB,MAAM,wBAAwB,CAAC;AAiBhC,qEAAqE;AACrE,cAAc,uBAAuB,CAAC;AAEtC,uDAAuD;AACvD,cAAc,uBAAuB,CAAC;AAEtC,iCAAiC;AACjC,cAAc,kBAAkB,CAAC;AAEjC,kCAAkC;AAClC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE/E,uCAAuC;AACvC,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE/F,kCAAkC;AAClC,cAAc,gBAAgB,CAAC;AAE/B,2CAA2C;AAC3C,cAAc,qBAAqB,CAAC;AAEpC,8BAA8B;AAC9B,cAAc,sBAAsB,CAAC;AAErC,oCAAoC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,kDAAkD;AAClD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* History Message Types
|
|
3
3
|
* Story 3.5: Session History Loading
|
|
4
4
|
*/
|
|
5
|
+
import type { ImageRef } from './message.js';
|
|
5
6
|
/**
|
|
6
7
|
* Content block types used in Claude Code messages
|
|
7
8
|
*/
|
|
@@ -53,6 +54,7 @@ export interface RawJSONLMessage {
|
|
|
53
54
|
toolInput?: Record<string, unknown>;
|
|
54
55
|
result?: string;
|
|
55
56
|
error?: string;
|
|
57
|
+
subtype?: string;
|
|
56
58
|
isMeta?: boolean;
|
|
57
59
|
}
|
|
58
60
|
/**
|
|
@@ -60,15 +62,13 @@ export interface RawJSONLMessage {
|
|
|
60
62
|
*/
|
|
61
63
|
export interface HistoryMessage {
|
|
62
64
|
id: string;
|
|
63
|
-
type: 'user' | 'assistant' | 'tool_use' | 'tool_result' | 'task_notification';
|
|
65
|
+
type: 'user' | 'assistant' | 'tool_use' | 'tool_result' | 'task_notification' | 'system';
|
|
64
66
|
content: string;
|
|
65
67
|
timestamp: string;
|
|
68
|
+
parentId?: string;
|
|
69
|
+
subtype?: string;
|
|
66
70
|
thinking?: string;
|
|
67
|
-
images?:
|
|
68
|
-
mimeType: string;
|
|
69
|
-
data: string;
|
|
70
|
-
name: string;
|
|
71
|
-
}>;
|
|
71
|
+
images?: ImageRef[];
|
|
72
72
|
toolName?: string;
|
|
73
73
|
toolInput?: Record<string, unknown>;
|
|
74
74
|
toolResult?: {
|
|
@@ -81,6 +81,12 @@ export interface HistoryMessage {
|
|
|
81
81
|
taskStatus?: 'completed' | 'failed' | 'stopped';
|
|
82
82
|
taskSummary?: string;
|
|
83
83
|
taskToolUseId?: string;
|
|
84
|
+
/** Branch info attached directly by server — client renders as-is */
|
|
85
|
+
branchInfo?: {
|
|
86
|
+
total: number;
|
|
87
|
+
current: number;
|
|
88
|
+
selectionKey: string;
|
|
89
|
+
};
|
|
84
90
|
}
|
|
85
91
|
/**
|
|
86
92
|
* Pagination information
|
|
@@ -99,6 +105,12 @@ export interface HistoryMessagesResponse {
|
|
|
99
105
|
pagination: PaginationInfo;
|
|
100
106
|
/** Last slash command found in user messages (for agent detection across pagination) */
|
|
101
107
|
lastAgentCommand?: string | null;
|
|
108
|
+
/** Branch points with total sibling count and current selection index */
|
|
109
|
+
branchPoints?: Record<string, {
|
|
110
|
+
total: number;
|
|
111
|
+
current: number;
|
|
112
|
+
selectionKey?: string;
|
|
113
|
+
}>;
|
|
102
114
|
}
|
|
103
115
|
/**
|
|
104
116
|
* Pagination options for getSessionMessages
|
|
@@ -110,8 +122,9 @@ export interface PaginationOptions {
|
|
|
110
122
|
* messages from an active stream period (covered by buffer replay). */
|
|
111
123
|
streamStartedAt?: number | null;
|
|
112
124
|
/** Start timestamp of the currently running stream only (excludes completed
|
|
113
|
-
* buffer start). Used to preserve user messages from the active turn
|
|
114
|
-
* trimMessagesAfterLastUser() on the client works correctly. */
|
|
125
|
+
* buffer start). Used to preserve user messages from the active turn. */
|
|
115
126
|
runningStreamStartedAt?: number | null;
|
|
127
|
+
/** Branch selections for branch-aware pagination. Maps branch point UUID to selected branch index. */
|
|
128
|
+
branchSelections?: Record<string, number>;
|
|
116
129
|
}
|
|
117
130
|
//# sourceMappingURL=history.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/types/history.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,MAAM,YAAY,GACpB,gBAAgB,GAChB,oBAAoB,GACpB,mBAAmB,GACnB,sBAAsB,GACtB,iBAAiB,CAAC;AAEtB;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,iBAAiB,CAAC;IAC7G,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;KAClC,CAAC;IAEF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/types/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,16 @@ export interface ImageAttachment {
|
|
|
22
22
|
data: string;
|
|
23
23
|
name: string;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* URL-based image reference for client rendering (replaces base64 data in broadcasts/history)
|
|
27
|
+
* Story 27.2: Image Server Storage
|
|
28
|
+
*/
|
|
29
|
+
export interface ImageRef {
|
|
30
|
+
url: string;
|
|
31
|
+
thumbnailUrl?: string;
|
|
32
|
+
mimeType: string;
|
|
33
|
+
name: string;
|
|
34
|
+
}
|
|
25
35
|
/**
|
|
26
36
|
* Image constraint constants
|
|
27
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,cAAc,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO;IACzC,SAAS,EAAE,CAAC;IACZ,cAAc,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,CAAU;IAC/E,aAAa,EAAE,2CAA2C;CAClD,CAAC"}
|
|
@@ -40,8 +40,9 @@ export interface UserPreferences {
|
|
|
40
40
|
language?: SupportedLanguage;
|
|
41
41
|
permissionSyncPolicy?: PermissionSyncPolicy;
|
|
42
42
|
panelDefaultOpen?: boolean;
|
|
43
|
-
panelDefaultSide?: 'left' | 'right';
|
|
43
|
+
panelDefaultSide?: 'left' | 'right' | 'last';
|
|
44
44
|
allowedReadPaths?: string[];
|
|
45
|
+
autoApproveSafetyChecks?: boolean;
|
|
45
46
|
}
|
|
46
47
|
/** Controls when permission mode changes are broadcast to other browsers viewing the same session */
|
|
47
48
|
export type PermissionSyncPolicy = 'streaming' | 'always';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../src/types/preferences.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/D,yCAAyC;AACzC,eAAO,MAAM,mBAAmB,kDAAmD,CAAC;AACpF,MAAM,MAAM,iBAAiB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAEnE;;GAEG;AACH,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpC,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,cAAc,GAAG,QAAQ,CAAC;IACvC,cAAc,CAAC,EAAE,cAAc,GAAG,QAAQ,CAAC;IAC3C,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,cAAc,CAAC;IACpC,gBAAgB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,cAAc,CAAC;IAE/B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAE7B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAE5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../src/types/preferences.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../../src/types/preferences.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,yCAAyC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../../src/types/preferences.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,yCAAyC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAsDpF,yCAAyC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAA4H;IAC1J,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,SAAS;IACzB,aAAa,EAAE,MAAM;IACrB,oBAAoB,EAAE,MAAM;CAC7B,CAAC"}
|