spec-cat 0.1.22 → 0.1.23
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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{NsKpYGKU.js → -EMqkm_u.js} +1 -1
- package/.output/public/_nuxt/{CXuoBUW5.js → BDd_kh9e.js} +1 -1
- package/.output/public/_nuxt/{CXlw6va7.js → BJKzOiTU.js} +1 -1
- package/.output/public/_nuxt/{B6Qdx9x3.js → Bk4uZfKR.js} +1 -1
- package/.output/public/_nuxt/{D2jWy6Yv.js → C9Qk2Hno.js} +1 -1
- package/.output/public/_nuxt/{DuDc88rI.js → CDLI67Cr.js} +1 -1
- package/.output/public/_nuxt/{BDt4jGdk.js → CLPz4Oer.js} +1 -1
- package/.output/public/_nuxt/{hWTomhWa.js → CYVeOpC3.js} +1 -1
- package/.output/public/_nuxt/{DYq0avGL.js → CZbP5QXb.js} +1 -1
- package/.output/public/_nuxt/DQtVbA-s.js +150 -0
- package/.output/public/_nuxt/DXWMFGmi.js +1 -0
- package/.output/public/_nuxt/{CnyGP5yJ.js → DgiJut-o.js} +1 -1
- package/.output/public/_nuxt/{xDSloGc6.js → FbKhJXKu.js} +2 -2
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/53b5c409-86a8-4624-8a0f-5bf31ab82deb.json +1 -0
- package/.output/public/_nuxt/useTheme.Dp77PlfC.css +1 -0
- package/.output/server/chunks/_/conversationStore.mjs +13 -1
- package/.output/server/chunks/_/conversationStore.mjs.map +1 -1
- package/.output/server/chunks/_/jobPersister.mjs +326 -0
- package/.output/server/chunks/_/jobPersister.mjs.map +1 -0
- package/.output/server/chunks/_/jobQueue.mjs +714 -0
- package/.output/server/chunks/_/jobQueue.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/client.precomputed.mjs.map +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +655 -647
- package/.output/server/chunks/routes/_ws.mjs +133 -527
- package/.output/server/chunks/routes/_ws.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +25 -14
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get2.mjs +14 -141
- package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +167 -0
- package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -0
- package/.output/server/chunks/routes/api/index.post.mjs +77 -116
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post2.mjs +149 -0
- package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -0
- package/.output/server/chunks/routes/api/jobs/_id/cancel.post.mjs +48 -0
- package/.output/server/chunks/routes/api/jobs/_id/cancel.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/jobs/_id_.get.mjs +55 -0
- package/.output/server/chunks/routes/api/jobs/_id_.get.mjs.map +1 -0
- package/.output/server/package.json +1 -1
- package/package.json +1 -1
- package/.output/public/_nuxt/Ce5fR5lE.js +0 -150
- package/.output/public/_nuxt/builds/meta/23707bc3-d223-45cd-b9db-ffcc7aca2680.json +0 -1
- package/.output/public/_nuxt/useTheme.CYXKgjUm.css +0 -1
- package/.output/public/_nuxt/z5m_gN1E.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"53b5c409-86a8-4624-8a0f-5bf31ab82deb","timestamp":1774063107243}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"53b5c409-86a8-4624-8a0f-5bf31ab82deb","timestamp":1774063107243,"prerendered":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.streaming-border[data-v-3d162cc0]{animation:streaming-bg-sweep-3d162cc0 3s ease-in-out infinite;background-image:linear-gradient(270deg,rgb(var(--color-retro-cyan)/.04),rgb(var(--color-retro-cyan)/.12),rgb(var(--color-retro-cyan)/.04),rgb(var(--color-retro-cyan)/.12))!important;border-color:rgb(var(--color-retro-cyan)/.4)!important}.streaming-active-border[data-v-3d162cc0],.streaming-border[data-v-3d162cc0]{background-color:transparent!important;background-size:300% 100%!important;overflow:hidden;position:relative}.streaming-active-border[data-v-3d162cc0]{animation:streaming-bg-sweep-3d162cc0 2s ease-in-out infinite;background-image:linear-gradient(270deg,rgb(var(--color-retro-cyan)/.08),rgb(var(--color-retro-cyan)/.2),rgb(var(--color-retro-cyan)/.08),rgb(var(--color-retro-cyan)/.2))!important;border-color:rgb(var(--color-retro-cyan)/.8)!important;box-shadow:0 0 8px rgb(var(--color-retro-cyan)/.3),0 0 0 1px rgb(var(--color-retro-cyan)/.4)}.streaming-preview-border[data-v-3d162cc0]{background-image:linear-gradient(270deg,rgb(var(--color-retro-magenta)/.03),rgb(var(--color-retro-magenta)/.08),rgb(var(--color-retro-magenta)/.03),rgb(var(--color-retro-magenta)/.08))!important;border-color:rgb(var(--color-retro-magenta)/.3)!important}.streaming-preview-active-border[data-v-3d162cc0],.streaming-preview-border[data-v-3d162cc0]{animation:streaming-bg-sweep-3d162cc0 3s ease-in-out infinite;background-color:transparent!important;background-size:300% 100%!important;overflow:hidden;position:relative}.streaming-preview-active-border[data-v-3d162cc0]{background-image:linear-gradient(270deg,rgb(var(--color-retro-cyan)/.06),rgb(var(--color-retro-magenta)/.18),rgb(var(--color-retro-cyan)/.06),rgb(var(--color-retro-magenta)/.18))!important;border-color:rgb(var(--color-retro-magenta)/.7)!important;box-shadow:0 0 0 1px rgb(var(--color-retro-magenta)/.3)}@keyframes streaming-bg-sweep-3d162cc0{0%{background-position:0 50%}50%{background-position:100% 50%}to{background-position:0 50%}}
|
|
@@ -3,6 +3,12 @@ import { writeFile, readdir, rm, readFile, mkdir } from 'node:fs/promises';
|
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { i as readSpecCatStore, j as getSpecCatDataDir } from '../nitro/nitro.mjs';
|
|
5
5
|
|
|
6
|
+
function generateBlockId() {
|
|
7
|
+
return `blk-${Date.now()}-${Math.random().toString(36).substring(2, 6)}`;
|
|
8
|
+
}
|
|
9
|
+
function generateMessageId() {
|
|
10
|
+
return `msg-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
|
|
11
|
+
}
|
|
6
12
|
const STORAGE_VERSION = 2;
|
|
7
13
|
function generateConversationId() {
|
|
8
14
|
return `conv-${Math.random().toString(36).slice(2, 12)}`;
|
|
@@ -10,6 +16,12 @@ function generateConversationId() {
|
|
|
10
16
|
function generateArchivedConversationId() {
|
|
11
17
|
return `arch-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
|
|
12
18
|
}
|
|
19
|
+
function generateConversationTitle(firstMessage) {
|
|
20
|
+
const MAX_LENGTH = 50;
|
|
21
|
+
const cleaned = firstMessage.trim().replace(/\n/g, " ");
|
|
22
|
+
if (cleaned.length <= MAX_LENGTH) return cleaned;
|
|
23
|
+
return cleaned.slice(0, MAX_LENGTH).trim() + "...";
|
|
24
|
+
}
|
|
13
25
|
function isValidConversation(obj) {
|
|
14
26
|
if (!obj || typeof obj !== "object") return false;
|
|
15
27
|
const conv = obj;
|
|
@@ -186,5 +198,5 @@ async function upsertConversationInStorage(conversation, version) {
|
|
|
186
198
|
}
|
|
187
199
|
}
|
|
188
200
|
|
|
189
|
-
export { STORAGE_VERSION as S, generateConversationId as a, generateArchivedConversationId as g, isValidConversation as i, readConversationStorageState as r, upsertConversationInStorage as u, writeConversationStorageState as w };
|
|
201
|
+
export { STORAGE_VERSION as S, generateConversationId as a, generateConversationTitle as b, generateMessageId as c, generateBlockId as d, generateArchivedConversationId as g, isValidConversation as i, readConversationStorageState as r, upsertConversationInStorage as u, writeConversationStorageState as w };
|
|
190
202
|
//# sourceMappingURL=conversationStore.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversationStore.mjs","sources":["../../../../types/chat.ts","../../../../server/utils/conversationStore.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"conversationStore.mjs","sources":["../../../../types/chat.ts","../../../../server/utils/conversationStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { e as eventBus, G as GLOBAL_CHANNEL } from './jobQueue.mjs';
|
|
5
|
+
import { c as generateMessageId, d as generateBlockId, u as upsertConversationInStorage, S as STORAGE_VERSION } from './conversationStore.mjs';
|
|
6
|
+
import { j as getSpecCatDataDir } from '../nitro/nitro.mjs';
|
|
7
|
+
|
|
8
|
+
const accumulators = /* @__PURE__ */ new Map();
|
|
9
|
+
function formatToolInputSummary(input) {
|
|
10
|
+
if (input.file_path) return String(input.file_path);
|
|
11
|
+
if (input.path) return String(input.path);
|
|
12
|
+
if (input.command) return String(input.command).slice(0, 50);
|
|
13
|
+
return "";
|
|
14
|
+
}
|
|
15
|
+
function startPersisting(conversationId, userMessage) {
|
|
16
|
+
const existing = accumulators.get(conversationId);
|
|
17
|
+
if (existing) {
|
|
18
|
+
existing.unsubscribe();
|
|
19
|
+
accumulators.delete(conversationId);
|
|
20
|
+
}
|
|
21
|
+
const assistantMessageId = generateMessageId();
|
|
22
|
+
const acc = {
|
|
23
|
+
conversationId,
|
|
24
|
+
userMessage,
|
|
25
|
+
assistantMessageId,
|
|
26
|
+
contentBlocks: [],
|
|
27
|
+
flatText: "",
|
|
28
|
+
currentTextBlockId: null,
|
|
29
|
+
currentThinkingBlockId: null,
|
|
30
|
+
activeTools: /* @__PURE__ */ new Map(),
|
|
31
|
+
providerSessionId: null,
|
|
32
|
+
unsubscribe: () => {
|
|
33
|
+
},
|
|
34
|
+
status: "streaming"
|
|
35
|
+
};
|
|
36
|
+
acc.unsubscribe = eventBus.subscribe(conversationId, (event) => {
|
|
37
|
+
handleEvent(acc, event);
|
|
38
|
+
});
|
|
39
|
+
accumulators.set(conversationId, acc);
|
|
40
|
+
console.log("[JobPersister] Started persisting for:", conversationId);
|
|
41
|
+
}
|
|
42
|
+
function handleEvent(acc, event) {
|
|
43
|
+
try {
|
|
44
|
+
if (event.type === "ui_event" && event.event) {
|
|
45
|
+
processUIEvent(acc, event.event);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (event.type === "done") {
|
|
49
|
+
if (event.denied) {
|
|
50
|
+
acc.status = "stopped";
|
|
51
|
+
} else {
|
|
52
|
+
markRemainingToolBlocks(acc, "complete");
|
|
53
|
+
acc.status = "complete";
|
|
54
|
+
}
|
|
55
|
+
finalize(acc);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (event.type === "error") {
|
|
59
|
+
markRemainingToolBlocks(acc, "error");
|
|
60
|
+
acc.status = "error";
|
|
61
|
+
const errorText = typeof event.error === "string" ? event.error : "Unknown error";
|
|
62
|
+
appendTextBlock(acc, `
|
|
63
|
+
|
|
64
|
+
**Error**: ${errorText}
|
|
65
|
+
`);
|
|
66
|
+
finalize(acc);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (event.type === "session_reset") {
|
|
70
|
+
const reason = typeof event.reason === "string" ? event.reason : "Session reset";
|
|
71
|
+
appendTextBlock(acc, `
|
|
72
|
+
|
|
73
|
+
> **Session Reset**: ${reason}
|
|
74
|
+
|
|
75
|
+
`);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (event.type === "permission_request") {
|
|
79
|
+
markRemainingToolBlocks(acc, "error");
|
|
80
|
+
acc.status = "stopped";
|
|
81
|
+
const tool = typeof event.tool === "string" ? event.tool : "Permission";
|
|
82
|
+
appendTextBlock(acc, `
|
|
83
|
+
|
|
84
|
+
**Permission Required**: ${tool}
|
|
85
|
+
`);
|
|
86
|
+
finalize(acc);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
} catch (err) {
|
|
90
|
+
console.error("[JobPersister] Error handling event:", err);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function finalize(acc) {
|
|
94
|
+
acc.unsubscribe();
|
|
95
|
+
accumulators.delete(acc.conversationId);
|
|
96
|
+
flush(acc);
|
|
97
|
+
}
|
|
98
|
+
function processUIEvent(acc, event) {
|
|
99
|
+
var _a, _b, _c, _d;
|
|
100
|
+
if (event.sessionId) {
|
|
101
|
+
acc.providerSessionId = event.sessionId;
|
|
102
|
+
}
|
|
103
|
+
switch (event.type) {
|
|
104
|
+
case "session_init": {
|
|
105
|
+
const block = {
|
|
106
|
+
id: generateBlockId(),
|
|
107
|
+
type: "session_init",
|
|
108
|
+
model: event.model,
|
|
109
|
+
tools: event.tools,
|
|
110
|
+
permissionMode: event.permissionMode,
|
|
111
|
+
cwd: event.cwd
|
|
112
|
+
};
|
|
113
|
+
acc.contentBlocks.push(block);
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case "block_start": {
|
|
117
|
+
const blockId = event.blockId || generateBlockId();
|
|
118
|
+
if (event.blockType === "text") {
|
|
119
|
+
const block = { id: blockId, type: "text", text: event.text || "" };
|
|
120
|
+
acc.contentBlocks.push(block);
|
|
121
|
+
acc.currentTextBlockId = blockId;
|
|
122
|
+
if (event.text) acc.flatText += event.text;
|
|
123
|
+
} else if (event.blockType === "thinking") {
|
|
124
|
+
const block = { id: blockId, type: "thinking", thinking: event.thinking || "" };
|
|
125
|
+
acc.contentBlocks.push(block);
|
|
126
|
+
acc.currentThinkingBlockId = blockId;
|
|
127
|
+
} else if (event.blockType === "tool_use" && event.toolUseId && event.name) {
|
|
128
|
+
const block = {
|
|
129
|
+
id: blockId,
|
|
130
|
+
type: "tool_use",
|
|
131
|
+
toolUseId: event.toolUseId,
|
|
132
|
+
name: event.name,
|
|
133
|
+
input: {},
|
|
134
|
+
inputSummary: "",
|
|
135
|
+
status: "running"
|
|
136
|
+
};
|
|
137
|
+
acc.contentBlocks.push(block);
|
|
138
|
+
acc.activeTools.set((_a = event.index) != null ? _a : 0, {
|
|
139
|
+
blockId,
|
|
140
|
+
toolUseId: event.toolUseId,
|
|
141
|
+
name: event.name,
|
|
142
|
+
inputJson: ""
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
case "block_delta": {
|
|
148
|
+
if (event.text && acc.currentTextBlockId) {
|
|
149
|
+
const block = acc.contentBlocks.find((b) => b.id === acc.currentTextBlockId);
|
|
150
|
+
if (block && block.type === "text") {
|
|
151
|
+
block.text += event.text;
|
|
152
|
+
acc.flatText += event.text;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (event.thinking && acc.currentThinkingBlockId) {
|
|
156
|
+
const block = acc.contentBlocks.find((b) => b.id === acc.currentThinkingBlockId);
|
|
157
|
+
if (block && block.type === "thinking") {
|
|
158
|
+
block.thinking += event.thinking;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (event.partialJson && event.index !== void 0) {
|
|
162
|
+
const tool = acc.activeTools.get(event.index);
|
|
163
|
+
if (tool) {
|
|
164
|
+
tool.inputJson += event.partialJson;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
case "block_end": {
|
|
170
|
+
if (acc.currentTextBlockId) {
|
|
171
|
+
acc.currentTextBlockId = null;
|
|
172
|
+
}
|
|
173
|
+
if (acc.currentThinkingBlockId) {
|
|
174
|
+
acc.currentThinkingBlockId = null;
|
|
175
|
+
}
|
|
176
|
+
if (event.index !== void 0) {
|
|
177
|
+
const tool = acc.activeTools.get(event.index);
|
|
178
|
+
if (tool) {
|
|
179
|
+
let input = {};
|
|
180
|
+
try {
|
|
181
|
+
input = JSON.parse(tool.inputJson);
|
|
182
|
+
} catch {
|
|
183
|
+
}
|
|
184
|
+
const block = acc.contentBlocks.find((b) => b.id === tool.blockId);
|
|
185
|
+
if (block && block.type === "tool_use") {
|
|
186
|
+
const tb = block;
|
|
187
|
+
tb.input = input;
|
|
188
|
+
tb.inputSummary = formatToolInputSummary(input);
|
|
189
|
+
tb.status = "pending";
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
case "tool_result": {
|
|
196
|
+
const toolBlock = acc.contentBlocks.find(
|
|
197
|
+
(b) => b.type === "tool_use" && b.toolUseId === event.toolUseId
|
|
198
|
+
);
|
|
199
|
+
if (toolBlock && toolBlock.type === "tool_use") {
|
|
200
|
+
toolBlock.status = event.isError ? "error" : "complete";
|
|
201
|
+
}
|
|
202
|
+
const block = {
|
|
203
|
+
id: generateBlockId(),
|
|
204
|
+
type: "tool_result",
|
|
205
|
+
toolUseId: event.toolUseId,
|
|
206
|
+
content: event.content || "",
|
|
207
|
+
isError: !!event.isError
|
|
208
|
+
};
|
|
209
|
+
acc.contentBlocks.push(block);
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
case "turn_result": {
|
|
213
|
+
if (event.subtype !== "success") {
|
|
214
|
+
acc.status = "error";
|
|
215
|
+
}
|
|
216
|
+
if (event.subtype === "success" && event.usage) {
|
|
217
|
+
const block = {
|
|
218
|
+
id: generateBlockId(),
|
|
219
|
+
type: "result_summary",
|
|
220
|
+
totalCostUsd: (_b = event.totalCostUsd) != null ? _b : 0,
|
|
221
|
+
durationMs: (_c = event.durationMs) != null ? _c : 0,
|
|
222
|
+
numTurns: (_d = event.numTurns) != null ? _d : 0,
|
|
223
|
+
usage: event.usage
|
|
224
|
+
};
|
|
225
|
+
acc.contentBlocks.push(block);
|
|
226
|
+
}
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
case "error": {
|
|
230
|
+
acc.status = "error";
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function appendTextBlock(acc, text) {
|
|
236
|
+
const block = { id: generateBlockId(), type: "text", text };
|
|
237
|
+
acc.contentBlocks.push(block);
|
|
238
|
+
acc.flatText += text;
|
|
239
|
+
}
|
|
240
|
+
function markRemainingToolBlocks(acc, status) {
|
|
241
|
+
for (const block of acc.contentBlocks) {
|
|
242
|
+
if (block.type === "tool_use") {
|
|
243
|
+
const tb = block;
|
|
244
|
+
if (tb.status === "running" || tb.status === "pending") {
|
|
245
|
+
tb.status = status;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async function flush(acc) {
|
|
251
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
252
|
+
const finalStatus = acc.status === "streaming" ? "complete" : acc.status;
|
|
253
|
+
try {
|
|
254
|
+
const dataDir = getSpecCatDataDir();
|
|
255
|
+
const filePath = join(dataDir, "conversations", `${acc.conversationId}.json`);
|
|
256
|
+
let conversation;
|
|
257
|
+
if (existsSync(filePath)) {
|
|
258
|
+
const raw = await readFile(filePath, "utf-8");
|
|
259
|
+
conversation = JSON.parse(raw);
|
|
260
|
+
} else {
|
|
261
|
+
conversation = {
|
|
262
|
+
id: acc.conversationId,
|
|
263
|
+
title: acc.userMessage.slice(0, 50),
|
|
264
|
+
messages: [],
|
|
265
|
+
createdAt: now,
|
|
266
|
+
updatedAt: now,
|
|
267
|
+
cwd: process.cwd(),
|
|
268
|
+
source: "scheduler"
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
let updated = false;
|
|
272
|
+
for (let i = conversation.messages.length - 1; i >= 0; i--) {
|
|
273
|
+
const m = conversation.messages[i];
|
|
274
|
+
if (m.role === "assistant" && m.status === "streaming") {
|
|
275
|
+
conversation.messages[i] = {
|
|
276
|
+
...m,
|
|
277
|
+
content: acc.flatText,
|
|
278
|
+
contentBlocks: acc.contentBlocks,
|
|
279
|
+
status: finalStatus,
|
|
280
|
+
timestamp: now
|
|
281
|
+
};
|
|
282
|
+
updated = true;
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (!updated) {
|
|
287
|
+
const userMsg = {
|
|
288
|
+
id: generateMessageId(),
|
|
289
|
+
role: "user",
|
|
290
|
+
content: acc.userMessage,
|
|
291
|
+
timestamp: now
|
|
292
|
+
};
|
|
293
|
+
const assistantMsg = {
|
|
294
|
+
id: acc.assistantMessageId,
|
|
295
|
+
role: "assistant",
|
|
296
|
+
content: acc.flatText,
|
|
297
|
+
contentBlocks: acc.contentBlocks,
|
|
298
|
+
timestamp: now,
|
|
299
|
+
status: finalStatus
|
|
300
|
+
};
|
|
301
|
+
conversation.messages.push(userMsg, assistantMsg);
|
|
302
|
+
}
|
|
303
|
+
conversation.updatedAt = now;
|
|
304
|
+
if (acc.providerSessionId) {
|
|
305
|
+
conversation.providerSessionId = acc.providerSessionId;
|
|
306
|
+
}
|
|
307
|
+
await upsertConversationInStorage(conversation, STORAGE_VERSION);
|
|
308
|
+
eventBus.emit(GLOBAL_CHANNEL, {
|
|
309
|
+
type: "notification",
|
|
310
|
+
notificationEvent: "job_persisted",
|
|
311
|
+
conversationId: acc.conversationId
|
|
312
|
+
});
|
|
313
|
+
console.log("[JobPersister] Flushed conversation:", {
|
|
314
|
+
conversationId: acc.conversationId,
|
|
315
|
+
status: acc.status,
|
|
316
|
+
blocks: acc.contentBlocks.length,
|
|
317
|
+
textLength: acc.flatText.length,
|
|
318
|
+
updatedExisting: updated
|
|
319
|
+
});
|
|
320
|
+
} catch (err) {
|
|
321
|
+
console.error("[JobPersister] Failed to flush conversation:", err);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export { startPersisting as s };
|
|
326
|
+
//# sourceMappingURL=jobPersister.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobPersister.mjs","sources":["../../../../server/utils/jobPersister.ts"],"names":[],"mappings":"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"}
|