@inharness-ai/claude4spec 1.0.4 → 1.0.5

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.
@@ -1,25 +1,10 @@
1
1
  import { Router } from 'express';
2
- import { EventEmitter } from 'node:events';
3
2
  import { nanoid } from 'nanoid';
4
- import { createAdapter, observeStream, createConsoleObserver, AdapterAbortError, AdapterInitError, AdapterTimeoutError, } from '@inharness-ai/agent-adapters';
5
- import { buildPlanToolsServer } from '../mcp/plan-tools.js';
6
- import { buildBriefToolsServer } from '../mcp/brief-tools.js';
7
- import { buildSystemPrompt } from '../services/chat-context.js';
3
+ import { createConsoleObserver, } from '@inharness-ai/agent-adapters';
8
4
  import { readConfig } from '../config.js';
9
- import { pluginHost } from '../core/plugin-host/host.js';
10
- /** M21 m05ctxreg: tools whitelist per context_type. Brief threads get only
11
- * brief-tools (per-thread, mounted below) + release-tools (read-only).
12
- * All other plugin servers (endpoint-tools, dto-tools, ui-view-tools,
13
- * database-table-tools, plan-tools, reference-tools) are NOT mounted. */
14
- const BRIEF_ALLOWED_PLUGIN_MCP = new Set(['release-tools']);
15
- const ALLOWED_MODELS = ['sonnet-4.6', 'opus-4.7', 'haiku-4.5'];
5
+ import { activeAdapters, pendingInputs, cancelPendingForRequest, runAgentTurn, ALLOWED_MODELS, } from './agent-turn.js';
16
6
  export function chatRouter(deps) {
17
7
  const router = Router();
18
- // Keyed by threadId — jeden aktywny adapter per watek. Umozliwia dolaczanie
19
- // klientow do zywego streamu przez GET /api/chat/stream/:threadId oraz
20
- // zwracanie 409 STREAM_IN_PROGRESS na drugi POST na ten sam watek.
21
- const activeAdapters = new Map();
22
- const pendingInputs = new Map();
23
8
  const consoleObserver = deps.mode === 'dev'
24
9
  ? createConsoleObserver({
25
10
  thinking: true,
@@ -28,17 +13,9 @@ export function chatRouter(deps) {
28
13
  showAdapterReady: true,
29
14
  compactAdapterReady: true,
30
15
  toolResultMaxLen: 20000,
31
- sdkConfigExclude: ['mcpServers']
16
+ sdkConfigExclude: ['mcpServers'],
32
17
  })
33
18
  : null;
34
- const cancelPendingForRequest = (requestId) => {
35
- for (const [inputId, pending] of pendingInputs) {
36
- if (pending.requestIdsForRequest === requestId) {
37
- pending.reject(new Error('stream aborted'));
38
- pendingInputs.delete(inputId);
39
- }
40
- }
41
- };
42
19
  // claude4spec eksponuje wylacznie architekture `claude-code` (lokalny CLI, sesja subskrypcyjna).
43
20
  // Endpoint przeniesiony z /api/config (kolizja z M01 app config) na /api/chat/config.
44
21
  router.get('/config', (_req, res) => {
@@ -87,7 +64,6 @@ export function chatRouter(deps) {
87
64
  if (planModeArg !== undefined && planModeArg !== thread.planMode) {
88
65
  thread = deps.chatService.updateThreadSettings(thread.id, { planMode: planModeArg });
89
66
  }
90
- const planMode = thread.planMode;
91
67
  // One-stream-per-thread guard. Klient powinien dolaczyc przez GET /api/chat/stream/:threadId
92
68
  // albo abortowac poprzedni stream przez POST /api/chat/abort.
93
69
  if (activeAdapters.has(thread.id)) {
@@ -96,10 +72,10 @@ export function chatRouter(deps) {
96
72
  });
97
73
  }
98
74
  setupSse(res);
99
- // clientGone flag: po `req.on('close')` (np. switch wątku → disconnect SSE)
100
- // przestajemy pisać do res, ale pętla `for await` leci dalej — adapter musi
101
- // dożyć do końca, eventy persystują w DB, a kolejny GET resume po powrocie
102
- // na wątek znajdzie aktywny `activeAdapters[threadId]`.
75
+ // clientGone flag: po `res.on('close')` (np. switch wątku → disconnect SSE)
76
+ // przestajemy pisać do res, ale `runAgentTurn` leci dalej — adapter dożywa
77
+ // do końca, eventy persystują w DB, a kolejny GET resume po powrocie na
78
+ // wątek znajdzie aktywny `activeAdapters[threadId]`.
103
79
  let clientGone = false;
104
80
  const send = (event, data) => {
105
81
  if (clientGone || res.writableEnded || res.destroyed)
@@ -112,360 +88,43 @@ export function chatRouter(deps) {
112
88
  clientGone = true;
113
89
  }
114
90
  };
115
- const requestId = nanoid(12);
116
- const adapter = createAdapter('claude-code');
117
- const emitter = new EventEmitter();
118
- activeAdapters.set(thread.id, { requestId, adapter, emitter });
119
- // `res.on('close')` (NIE req) — canonical pattern z agent-chat/server/handler.ts:138.
120
- // req.close odpala dla request stream'a (zamknietego logicznie po express.json body parse),
121
- // co moglo ustawiac clientGone przedwczesnie i no-opowac wszystkie kolejne send().
91
+ // `res.on('close')` (NIE req) — canonical pattern z agent-chat/server/handler.ts.
122
92
  res.on('close', () => {
123
93
  clientGone = true;
124
94
  });
125
- send('connected', { requestId, threadId: thread.id });
126
- deps.chatService.addMessage(thread.id, 'user', JSON.stringify({ text: prompt, annotations }), null, null, null, planMode);
127
- if (!thread.title) {
128
- const title = prompt.slice(0, 60) + (prompt.length > 60 ? '...' : '');
129
- deps.chatService.updateTitle(thread.id, title || '(annotations only)');
130
- }
131
- const isBrief = thread.contextType === 'brief';
132
- // M23: patch threads keep the FULL spec-editing toolset (isBrief stays
133
- // false) — their job is to edit the spec. Only the system prompt differs.
134
- const isPatch = thread.contextType === 'patch';
135
- // M21: dla brief context czytamy aktualny snapshot brief'u (frontmatter+body+hash)
136
- // i wkladamy do system promptu. Skip kosztownych obliczen pageCount/entityCounts
137
- // (irrelewantne dla brief author).
138
- let briefSnapshot = null;
139
- if (isBrief && thread.briefPath) {
140
- try {
141
- briefSnapshot = await deps.briefService.getBrief(thread.briefPath);
142
- }
143
- catch (err) {
144
- // Brief plik usuniety/uszkodzony — kontynuujemy bez snapshot, agent dostanie
145
- // banner przez get_brief tool call.
146
- console.warn(`[chat] brief read failed for ${thread.briefPath}:`, err.message);
147
- }
148
- }
149
- // M23: dla patch context czytamy snapshot patcha i wkladamy do system promptu.
150
- let patchSnapshot = null;
151
- if (isPatch && thread.patchPath) {
152
- try {
153
- patchSnapshot = await deps.patchService.getPatch(thread.patchPath);
154
- }
155
- catch (err) {
156
- console.warn(`[chat] patch read failed for ${thread.patchPath}:`, err.message);
157
- }
158
- }
159
- let currentPageBody = null;
160
- if (!isBrief && currentPage) {
161
- try {
162
- const page = await deps.pagesService.read(currentPage);
163
- currentPageBody = page.body;
164
- }
165
- catch {
166
- currentPageBody = null;
167
- }
168
- }
169
- // Stale-plan reminder MUSI byc sprawdzony PRZED markPlanSeenByThread —
170
- // ten ostatni bumpuje last_seen_plan_version i zapodaje sygnal "synced".
171
- const isFirstTurn = !thread.hasSystemPrompt;
172
- const stalePlanReminder = isBrief ? null : deps.planService.getStalePlanReminder(thread.id);
173
- const currentPlan = isBrief ? null : deps.planService.getByThread(thread.id);
174
- // Skill resolution: writing-style (config.writingStyle, M15) ladowany
175
- // niezaleznie od kontekstu. Dla brief context dokladamy bundled
176
- // `brief-author` (scope: contextual) — definiuje *gatunek* briefa,
177
- // writing-style dostarcza metodologie (workflows/brief.md w jego skill'u).
178
- const writingStyleSkills = deps.skillResolver.resolve();
179
- const writingStyle = writingStyleSkills[0]
180
- ? {
181
- slug: writingStyleSkills[0].name,
182
- title: String(writingStyleSkills[0].metadata?.title ?? writingStyleSkills[0].name),
183
- }
184
- : null;
185
- const inlineSkills = [...writingStyleSkills];
186
- if (isBrief && deps.skillRegistry.has('brief-author')) {
187
- const skill = deps.skillRegistry.resolve('brief-author');
188
- inlineSkills.push({
189
- name: skill.metadata.slug,
190
- description: skill.metadata.description,
191
- content: skill.content,
192
- files: skill.files,
193
- metadata: {
194
- version: skill.metadata.version,
195
- language: skill.metadata.language,
196
- title: skill.metadata.title,
197
- },
95
+ const requestId = nanoid(12);
96
+ const turnThread = thread;
97
+ const onUserInput = (uinput) => {
98
+ send('user_input_request', { type: 'user_input_request', request: uinput });
99
+ deps.chatService.addMessage(turnThread.id, 'user_input_request', JSON.stringify(uinput), null, uinput.requestId);
100
+ return new Promise((resolve, reject) => {
101
+ pendingInputs.set(uinput.requestId, {
102
+ resolve,
103
+ reject,
104
+ requestIdsForRequest: requestId,
105
+ });
198
106
  });
199
- }
200
- const pageCount = isBrief ? 0 : countPages(await deps.pagesService.listTree());
201
- const systemPrompt = buildSystemPrompt({
202
- projectName: readConfig(deps.cwd).name,
203
- cwd: deps.cwd,
204
- pagesDir: deps.pagesDir,
205
- currentPagePath: currentPage,
206
- currentPageBody,
207
- pageCount,
208
- entityCounts: isBrief ? {} : pluginHost.computeEntityCounts(deps.db.handle),
209
- tagCount: isBrief ? 0 : deps.tagsService.list().length,
210
- sectionCount: isBrief ? 0 : deps.sectionsService.count(),
211
- annotations,
212
- planMode,
213
- currentPlan,
214
- planToolsAvailable: !isBrief,
215
- writingStyle,
216
- contextType: thread.contextType,
217
- brief: briefSnapshot,
218
- patch: patchSnapshot,
219
- });
220
- // claude-code CLI po resumeSessionId ignoruje kolejne systemPrompty —
221
- // wiążący dla audytu jest tylko pierwszy. UPDATE idempotentny (no-op na 2.+ turze).
222
- deps.chatService.setInitialSystemPrompt(thread.id, systemPrompt);
223
- // Pierwsza hydratacja currentPlanContext = "agent zobaczyl plan przez systemPrompt".
224
- // Bumpujemy last_seen_plan_version, zeby pierwsza user message tego watku nie
225
- // dostala stale-reminderu (currentVersion === lastSeen → no-op w kolejnych turach).
226
- if (isFirstTurn && currentPlan) {
227
- deps.planService.markPlanSeenByThread(thread.id);
228
- }
229
- let assistantBuf = '';
230
- let thinkingBuf = '';
231
- const subagentBuffers = new Map();
232
- // Anchor dla per-turn usage snapshot (`chat_message.usage_json` na ostatnim rowsie tury).
233
- // Flushed assistant text to typowy target; w turach tool-only fallback na ostatni tool_result.
234
- let lastMainAssistantRowId = null;
235
- let lastToolResultRowId = null;
236
- // Per-response (non-cumulative) usage z ostatniego main `assistant_message`.
237
- // `result.usage` jest session-cumulative (suma wszystkich tur) i przy badge "context %"
238
- // dawalo zawyzone wartosci w dluzszych rozmowach (przekraczajac 100%).
239
- let lastTurnUsage = null;
240
- const getSubBuf = (taskId) => {
241
- let buf = subagentBuffers.get(taskId);
242
- if (!buf) {
243
- buf = { text: '', thinking: '' };
244
- subagentBuffers.set(taskId, buf);
245
- }
246
- return buf;
247
107
  };
248
- const flushSubBuf = (taskId) => {
249
- const buf = subagentBuffers.get(taskId);
250
- if (!buf)
251
- return;
252
- if (buf.text) {
253
- deps.chatService.addMessage(thread.id, 'assistant', JSON.stringify({ text: buf.text }), null, null, taskId);
254
- buf.text = '';
255
- }
256
- if (buf.thinking) {
257
- deps.chatService.addMessage(thread.id, 'assistant', JSON.stringify({ text: buf.thinking, thinking: true }), null, null, taskId);
258
- buf.thinking = '';
259
- }
260
- };
261
- const flushMainBuf = () => {
262
- if (assistantBuf) {
263
- const row = deps.chatService.addMessage(thread.id, 'assistant', JSON.stringify({ text: assistantBuf }));
264
- lastMainAssistantRowId = row.id;
265
- assistantBuf = '';
266
- }
267
- if (thinkingBuf) {
268
- deps.chatService.addMessage(thread.id, 'assistant', JSON.stringify({ text: thinkingBuf, thinking: true }));
269
- thinkingBuf = '';
270
- }
271
- };
272
- // M21 m05ctxreg: per-thread MCP servers depend on context_type.
273
- // chat → plan-tools; brief → brief-tools (only when briefPath exists).
274
- const planTools = isBrief
275
- ? null
276
- : buildPlanToolsServer({
277
- threadId: thread.id,
278
- planService: deps.planService,
279
- });
280
- const briefTools = isBrief && thread.briefPath
281
- ? buildBriefToolsServer({
282
- threadId: thread.id,
283
- briefPath: thread.briefPath,
284
- briefService: deps.briefService,
285
- pageVersions: deps.pageVersions,
286
- })
287
- : null;
288
- // Plugin MCP whitelist per context. Brief context exposes only
289
- // `release-tools` (read-only) from the plugin set; chat context exposes
290
- // everything. Both per-thread tools (plan-tools / brief-tools) merged below.
291
- const pluginMcpEntries = pluginHost
292
- .listMcpServers()
293
- .filter(({ name }) => (isBrief ? BRIEF_ALLOWED_PLUGIN_MCP.has(name) : true))
294
- .map(({ name, server }) => [name, server.config]);
295
- const mcpServers = Object.fromEntries(pluginMcpEntries);
296
- if (planTools)
297
- mcpServers['plan-tools'] = planTools.config;
298
- if (briefTools)
299
- mcpServers['brief-tools'] = briefTools.config;
300
108
  try {
301
- // Stale-plan-detection: jezeli plan zostal zaktualizowany w innym watku
302
- // od czasu ostatniego widzenia w tym, prepend <system-reminder> do user message.
303
- // NIE aktualizujemy last_seen_plan_version tutaj — robi to dopiero handler MCP get_plan
304
- // (zeby agent ignorujacy reminder dostal go znowu w nastepnej user message).
305
- const effectivePrompt = stalePlanReminder
306
- ? `${stalePlanReminder}\n\n${prompt}`
307
- : prompt;
308
- const stream = adapter.execute({
309
- prompt: effectivePrompt,
310
- systemPrompt,
109
+ await runAgentTurn(deps, {
110
+ thread: turnThread,
111
+ prompt,
112
+ annotations,
311
113
  model,
312
- cwd: deps.cwd,
313
- mcpServers,
314
- skills: inlineSkills,
315
- resumeSessionId: thread.lastSessionId ?? undefined,
114
+ currentPage,
316
115
  architectureConfig,
317
- planMode,
318
- onUserInput: (input) => {
319
- send('user_input_request', { type: 'user_input_request', request: input });
320
- deps.chatService.addMessage(thread.id, 'user_input_request', JSON.stringify(input), null, input.requestId);
321
- return new Promise((resolve, reject) => {
322
- pendingInputs.set(input.requestId, {
323
- resolve,
324
- reject,
325
- requestIdsForRequest: requestId,
326
- });
327
- });
328
- },
116
+ requestId,
117
+ consoleObserver,
118
+ // Transport SSE `runAgentTurn` zasila tez emitter dla GET /stream/:threadId.
119
+ onEvent: (event) => send(event.type, event),
120
+ onUserInput,
329
121
  });
330
- const observed = consoleObserver ? observeStream(stream, [consoleObserver]) : stream;
331
- for await (const event of observed) {
332
- send(event.type, event);
333
- emitter.emit('event', event);
334
- switch (event.type) {
335
- case 'text_delta':
336
- if (event.isSubagent && event.subagentTaskId) {
337
- getSubBuf(event.subagentTaskId).text += event.text;
338
- }
339
- else if (!event.isSubagent) {
340
- assistantBuf += event.text;
341
- }
342
- break;
343
- case 'thinking':
344
- if (event.isSubagent && event.subagentTaskId) {
345
- getSubBuf(event.subagentTaskId).thinking += event.text;
346
- }
347
- else if (!event.isSubagent) {
348
- thinkingBuf += event.text;
349
- }
350
- break;
351
- case 'assistant_message': {
352
- // Per-response (non-cumulative) usage z main agent. Subagenty maja
353
- // wlasna sesje SDK (osobne okno) — nie wliczamy ich w badge main.
354
- // Live update do DB — F5 w trakcie tury dostaje aktualny snapshot,
355
- // i w pelni stream'owanej turze badge progresuje miedzy assistant
356
- // messages bez czekania na koncowy `result`.
357
- if (!event.message.subagentTaskId && event.message.usage) {
358
- lastTurnUsage = event.message.usage;
359
- deps.chatService.setLastUsage(thread.id, event.message.usage);
360
- }
361
- break;
362
- }
363
- case 'tool_use': {
364
- const taskId = event.subagentTaskId ?? null;
365
- if (taskId)
366
- flushSubBuf(taskId);
367
- else
368
- flushMainBuf();
369
- // tool_use wstawiane jako 'streaming' — flip na 'complete' nastapi
370
- // przy parnym tool_result (markToolUseComplete). Finalizer w `finally`
371
- // zamyka orphany (tool_use bez tool_result, np. przy abortcie).
372
- deps.chatService.addMessage(thread.id, 'tool_use', JSON.stringify({ input: event.input }), event.toolName, event.toolUseId, taskId, planMode, 'streaming');
373
- break;
374
- }
375
- case 'tool_result': {
376
- const taskId = event.subagentTaskId ?? null;
377
- // Najpierw flipuj parne tool_use na 'complete', potem insertuj result.
378
- // Kolejnosc nie jest krytyczna (idempotentna), ale trzymamy DB spojna w kazdej chwili.
379
- deps.chatService.markToolUseComplete(thread.id, event.toolUseId);
380
- const row = deps.chatService.addMessage(thread.id, 'tool_result', JSON.stringify({ summary: event.summary, isError: event.isError }), null, event.toolUseId, taskId);
381
- if (taskId === null)
382
- lastToolResultRowId = row.id;
383
- break;
384
- }
385
- case 'subagent_started':
386
- flushMainBuf();
387
- deps.chatService.startSubagentTask(thread.id, event.taskId, event.description, event.toolUseId ?? null);
388
- break;
389
- case 'subagent_progress':
390
- deps.chatService.updateSubagentTaskProgress(thread.id, event.taskId, event.description);
391
- break;
392
- case 'subagent_completed':
393
- flushSubBuf(event.taskId);
394
- deps.chatService.completeSubagentTask(thread.id, event.taskId, event.status, event.summary ?? null);
395
- break;
396
- case 'result': {
397
- // Flush main najpierw — aktualizuje lastMainAssistantRowId; ten id
398
- // jest anchorem per-turn usage. Subagent bufory flushujemy
399
- // defensywnie po (zwykle juz flushnieto przy subagent_completed).
400
- flushMainBuf();
401
- for (const tid of Array.from(subagentBuffers.keys()))
402
- flushSubBuf(tid);
403
- if (event.sessionId)
404
- deps.chatService.setLastSessionId(thread.id, event.sessionId);
405
- // event.usage jest session-cumulative — nieuzyteczne dla badge "context %".
406
- // Bierzemy lastTurnUsage z ostatniego main assistant_message tej tury.
407
- const turnAnchor = lastMainAssistantRowId ?? lastToolResultRowId;
408
- if (lastTurnUsage) {
409
- deps.chatService.setLastUsage(thread.id, lastTurnUsage);
410
- // Target explicit message id — nie MAX(id), bo subagent bufor flushnal
411
- // jako ostatni i trafilby tam zamiast na main assistant / tool_result tej tury.
412
- if (turnAnchor !== null) {
413
- deps.chatService.attachTurnUsage(thread.id, turnAnchor, lastTurnUsage);
414
- }
415
- }
416
- // agent-chat 0.1.1: `result.contextSize` to last-turn utilization okna
417
- // kontekstu (NIE sumować). Trzymamy je oddzielnie od billing-tokens
418
- // bo cumulative billing > 100% w dłuższych rozmowach.
419
- if (typeof event.contextSize === 'number') {
420
- deps.chatService.setLastContextSize(thread.id, event.contextSize);
421
- if (turnAnchor !== null) {
422
- deps.chatService.attachTurnContextSize(thread.id, turnAnchor, event.contextSize);
423
- }
424
- }
425
- break;
426
- }
427
- case 'todo_list_updated':
428
- if (!event.isSubagent) {
429
- deps.chatService.updateCurrentTodoItems(thread.id, event.items);
430
- }
431
- break;
432
- case 'warning':
433
- console.warn('[agent warning]', event.message);
434
- break;
435
- }
436
- }
437
- send('done', {});
438
122
  }
439
- catch (err) {
440
- if (err instanceof AdapterAbortError)
441
- send('error', { type: 'error', code: 'ABORTED', error: 'Aborted by user' });
442
- else if (err instanceof AdapterTimeoutError)
443
- send('error', { type: 'error', code: 'TIMEOUT', error: 'Agent took too long to respond' });
444
- else if (err instanceof AdapterInitError)
445
- send('error', { type: 'error', code: 'AGENT_UNAVAILABLE', error: 'Claude CLI not found or not logged in. Run `claude login` first.' });
446
- else
447
- send('error', { type: 'error', code: 'AGENT_ERROR', error: err instanceof Error ? err.message : String(err) });
123
+ catch {
124
+ // `runAgentTurn` juz wyemitowalo SSE `event: error` — nie propagujemy
125
+ // dalej (response jest SSE; errorHandler probowalby pisac JSON).
448
126
  }
449
127
  finally {
450
- try {
451
- flushMainBuf();
452
- for (const tid of Array.from(subagentBuffers.keys()))
453
- flushSubBuf(tid);
454
- }
455
- catch (flushErr) {
456
- console.error('[chat] final flush failed', flushErr);
457
- }
458
- // Flipuj wszystkie wiszace rowsy (glownie orphan tool_use przy abortcie/timeoutcie)
459
- // na 'complete', zeby DB byla spojna niezaleznie od powodu zakonczenia streamu.
460
- try {
461
- deps.chatService.finalizeStreamingRows(thread.id);
462
- }
463
- catch (finalizeErr) {
464
- console.error('[chat] finalizeStreamingRows failed', finalizeErr);
465
- }
466
- emitter.emit('event', { type: 'done' });
467
- activeAdapters.delete(thread.id);
468
- cancelPendingForRequest(requestId);
469
128
  if (!res.writableEnded) {
470
129
  try {
471
130
  res.end();
@@ -485,7 +144,6 @@ export function chatRouter(deps) {
485
144
  if (typeof requestId !== 'string')
486
145
  return res.status(400).json({ error: { code: 'VALIDATION', message: 'requestId required' } });
487
146
  // activeAdapters jest keyed by threadId, wiec szukamy wartosci z matching requestId.
488
- // O(N) po liczbie aktywnych watkow — akceptowalne na lokalnym tool.
489
147
  let found = null;
490
148
  for (const entry of activeAdapters.values()) {
491
149
  if (entry.requestId === requestId) {
@@ -500,8 +158,7 @@ export function chatRouter(deps) {
500
158
  res.json({ data: { aborted: true } });
501
159
  });
502
160
  // Abort per threadId — uzywany gdy klient podlaczyl sie tylko przez resume SSE
503
- // (po F5 albo wrocie do watku po switchu) i nie zna requestId. Jest jedna aktywna
504
- // tura per threadId, wiec threadId jest jednoznacznym kluczem.
161
+ // i nie zna requestId. Jest jedna aktywna tura per threadId.
505
162
  router.post('/abort/:threadId', (req, res) => {
506
163
  const { threadId } = req.params;
507
164
  const active = activeAdapters.get(threadId);
@@ -512,9 +169,6 @@ export function chatRouter(deps) {
512
169
  res.json({ data: { aborted: true } });
513
170
  });
514
171
  // GET /api/chat/stream/:threadId — dolaczenie do zywego streamu po F5 / switch watku.
515
- // Klient juz ma snapshot historii z GET /api/threads/:id; ten endpoint dostarcza
516
- // tylko LIVE eventy (bez replay rowsow jako syntetycznych eventow). Jesli adapter
517
- // juz nie zyje dla tego watku, od razu zwracamy `done` i klient pozostaje z final state.
518
172
  router.get('/stream/:threadId', (req, res) => {
519
173
  const threadId = req.params.threadId;
520
174
  const thread = deps.chatService.getThreadMeta(threadId);
@@ -522,9 +176,6 @@ export function chatRouter(deps) {
522
176
  return res.status(404).json({ error: { code: 'NOT_FOUND', message: 'thread not found' } });
523
177
  }
524
178
  setupSse(res);
525
- // Identyczny pattern jak w POST — listener emitter'a leci w callstacku POST loopa,
526
- // wiec throw z res.write propagowalby do emit() i wybijal pętle for-await,
527
- // czyniąc cleanup w POST destrukcyjnym (finalizeStreamingRows + adapter osierocony).
528
179
  let clientGone = false;
529
180
  const send = (event, data) => {
530
181
  if (clientGone || res.writableEnded || res.destroyed)
@@ -558,16 +209,12 @@ export function chatRouter(deps) {
558
209
  }
559
210
  }
560
211
  catch (listenerErr) {
561
- // Nigdy nie pozwol propagowac do emitter.emit() w POST loopie.
562
212
  active.emitter.off('event', listener);
563
213
  clientGone = true;
564
214
  console.error('[chat] resume listener error', listenerErr);
565
215
  }
566
216
  };
567
217
  active.emitter.on('event', listener);
568
- // `res.on('close')` — patrz POST handler. Resume jest GET, ale dla spojnosci
569
- // i odpornosci uzywamy response-side sygnalu, ktory odpala dokladnie wtedy,
570
- // gdy klient SSE sie rozlacza.
571
218
  res.on('close', () => {
572
219
  clientGone = true;
573
220
  active.emitter.off('event', listener);
@@ -605,14 +252,4 @@ function setupSse(res) {
605
252
  res.setHeader('X-Accel-Buffering', 'no');
606
253
  res.flushHeaders();
607
254
  }
608
- function countPages(tree) {
609
- let n = 0;
610
- for (const node of tree) {
611
- if (node.type === 'file')
612
- n++;
613
- else if (Array.isArray(node.children))
614
- n += countPages(node.children);
615
- }
616
- return n;
617
- }
618
255
  //# sourceMappingURL=chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/server/routes/chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/server/routes/chat.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import { Router } from 'express';
2
- import type { ChatService } from '../services/chat.js';
3
- export declare function threadsRouter(chat: ChatService): Router;
2
+ import { type AgentTurnDeps } from './agent-turn.js';
3
+ export declare function threadsRouter(deps: AgentTurnDeps): Router;