@inharness-ai/claude4spec 1.0.3 → 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.
- package/CHANGELOG.md +19 -0
- package/dist/bin/c4s/commands/ask.d.ts +13 -0
- package/dist/bin/c4s/commands/ask.js +167 -0
- package/dist/bin/c4s/commands/ask.js.map +1 -0
- package/dist/bin/c4s/errors.d.ts +1 -1
- package/dist/bin/c4s/errors.js.map +1 -1
- package/dist/bin/c4s/project.d.ts +6 -0
- package/dist/bin/c4s/project.js +25 -0
- package/dist/bin/c4s/project.js.map +1 -1
- package/dist/bin/c4s.js +12 -6
- package/dist/bin/c4s.js.map +1 -1
- package/dist/client/assets/{arc-D8brDDag.js → arc-grMo2vzL.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-Bmh1uTQZ.js → architectureDiagram-3BPJPVTR-Fp_VHONq.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-55jaVWwd.js → blockDiagram-GPEHLZMM-CIwVG0sx.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-Dxm0tLsZ.js → c4Diagram-AAUBKEIU-tysuJyz0.js} +1 -1
- package/dist/client/assets/channel-B30S19wt.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-vDJ1slcJ.js → chunk-2J33WTMH-DZFNNwID.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-DP6CC-Qn.js → chunk-4BX2VUAB-CsnJG7Pv.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-SgOSJYkL.js → chunk-55IACEB6-MhREYXzo.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-BtRfbjBO.js → chunk-727SXJPM-BjvyGtK3.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-yIRaTgFg.js → chunk-AQP2D5EJ-zfcfKNbO.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-B_VD4t8N.js → chunk-FMBD7UC4-Ckx-Hc8U.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-BvJdtX82.js → chunk-ND2GUHAM-DSIVVmYM.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BLNWKymD.js → chunk-QZHKN3VN-EcIM6ZdS.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-Bm4SZLsb.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Bm4SZLsb.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-BQyA-r-y.js → cose-bilkent-S5V4N54A-DC8DVe0z.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-CAh0mTzA.js → dagre-BM42HDAG-BQjcdXnw.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-C83TGK4o.js → diagram-2AECGRRQ-BUPeBMwt.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-2L6uowvf.js → diagram-5GNKFQAL-I_Q-Pnp6.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-Cj5n4jdq.js → diagram-KO2AKTUF-B8WbbWJu.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-Bp5SDMjg.js → diagram-LMA3HP47-CsACxgW7.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-cFsDQ8Qk.js → diagram-OG6HWLK6-lPuJxQED.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-D8G5xpg3.js → erDiagram-TEJ5UH35-cU5ZGREz.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-CuNudlCD.js → flowDiagram-I6XJVG4X-Dr-vZTBV.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-CtFlsB15.js → ganttDiagram-6RSMTGT7-CXiWZ0R8.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-h66Tso4O.js → gitGraphDiagram-PVQCEYII-PDvLBbvz.js} +1 -1
- package/dist/client/assets/{index-aPVup1Re.js → index-BQltseJ-.js} +1 -1
- package/dist/client/assets/{index-aJE-l7h7.js → index-RMlMPKY7.js} +1 -1
- package/dist/client/assets/{index-D5ljIkCJ.js → index-YFPhJxE5.js} +184 -174
- package/dist/client/assets/{index-CZOpb3O7.css → index-zpHL2aYW.css} +1 -1
- package/dist/client/assets/{infoDiagram-5YYISTIA-CO_BLfuW.js → infoDiagram-5YYISTIA-Re9fOUPS.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-D4rSRnQA.js → ishikawaDiagram-YF4QCWOH-BTazB_7p.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-GyHI6dB8.js → journeyDiagram-JHISSGLW-pGUoqxHl.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-CrH33WLe.js → kanban-definition-UN3LZRKU-C2RzCJrM.js} +1 -1
- package/dist/client/assets/{linear-Dh1OyvSm.js → linear-Be3WPYKf.js} +1 -1
- package/dist/client/assets/{mermaid.core-C45sMDhS.js → mermaid.core-GdPXct3q.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-Bgwb0vwA.js → mindmap-definition-RKZ34NQL-DvktVTUU.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-l9cCpVfG.js → pieDiagram-4H26LBE5-DvC_m4m5.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-BCPSUbC3.js → quadrantDiagram-W4KKPZXB-SWtidcZL.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-TEGOe-vV.js → requirementDiagram-4Y6WPE33-CQEHDx1W.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-C69pv_7D.js → sankeyDiagram-5OEKKPKP-C0PTA3gP.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-arinzeCk.js → sequenceDiagram-3UESZ5HK-D-x7SXoo.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-C2YENpmw.js → stateDiagram-AJRCARHV-BhcGVfs1.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-2vcyLY1V.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-h5qtI99f.js → timeline-definition-PNZ67QCA-JYTlKPB-.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CnuK75Ut.js → vennDiagram-CIIHVFJN-KjNL1Qpz.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-B4bQ0Xyy.js → wardley-L42UT6IY-DcljmmEY.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-apV8olQc.js → wardleyDiagram-YWT4CUSO-Pbq6ALgg.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-OTP6zeEy.js → xychartDiagram-2RQKCTM6-G_r_2Cvk.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/config.d.ts +6 -0
- package/dist/server/config.js +6 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/db/migrate.js +28 -11
- package/dist/server/db/migrate.js.map +1 -1
- package/dist/server/db/migrations/028_page_version_kind_patch.sql +43 -0
- package/dist/server/db/migrations/029_chat_thread_patch.sql +64 -0
- package/dist/server/external-skills/brief-implementer-template.d.ts +1 -1
- package/dist/server/external-skills/brief-implementer-template.js +14 -0
- package/dist/server/external-skills/brief-implementer-template.js.map +1 -1
- package/dist/server/external-skills/spec-reader-template.d.ts +1 -1
- package/dist/server/external-skills/spec-reader-template.js +12 -0
- package/dist/server/external-skills/spec-reader-template.js.map +1 -1
- package/dist/server/index.js +111 -37
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/agent-turn.d.ts +92 -0
- package/dist/server/routes/agent-turn.js +379 -0
- package/dist/server/routes/agent-turn.js.map +1 -0
- package/dist/server/routes/chat.d.ts +2 -28
- package/dist/server/routes/chat.js +33 -382
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/errors.js +4 -0
- package/dist/server/routes/errors.js.map +1 -1
- package/dist/server/routes/patches.d.ts +8 -0
- package/dist/server/routes/patches.js +106 -0
- package/dist/server/routes/patches.js.map +1 -0
- package/dist/server/routes/threads.d.ts +2 -2
- package/dist/server/routes/threads.js +51 -1
- package/dist/server/routes/threads.js.map +1 -1
- package/dist/server/services/brief.js +0 -1
- package/dist/server/services/brief.js.map +1 -1
- package/dist/server/services/chat-context.d.ts +3 -1
- package/dist/server/services/chat-context.js +32 -1
- package/dist/server/services/chat-context.js.map +1 -1
- package/dist/server/services/chat.d.ts +5 -2
- package/dist/server/services/chat.js +35 -7
- package/dist/server/services/chat.js.map +1 -1
- package/dist/server/services/page-version.d.ts +11 -4
- package/dist/server/services/page-version.js +19 -11
- package/dist/server/services/page-version.js.map +1 -1
- package/dist/server/services/pages-frontmatter-indexer.d.ts +4 -1
- package/dist/server/services/pages-frontmatter-indexer.js +19 -9
- package/dist/server/services/pages-frontmatter-indexer.js.map +1 -1
- package/dist/server/services/patch.d.ts +66 -0
- package/dist/server/services/patch.js +196 -0
- package/dist/server/services/patch.js.map +1 -0
- package/dist/shared/entities.d.ts +62 -2
- package/dist/shared/entities.js +11 -0
- package/dist/shared/entities.js.map +1 -1
- package/dist/shared/types.d.ts +5 -2
- package/package.json +1 -1
- package/dist/client/assets/channel-ArVcv4Yl.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-B3nmPR7w.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-B3nmPR7w.js +0 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CS6ocDH6.js +0 -1
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { createAdapter, observeStream, AdapterAbortError, AdapterInitError, AdapterTimeoutError, } from '@inharness-ai/agent-adapters';
|
|
3
|
+
import { buildPlanToolsServer } from '../mcp/plan-tools.js';
|
|
4
|
+
import { buildBriefToolsServer } from '../mcp/brief-tools.js';
|
|
5
|
+
import { buildSystemPrompt } from '../services/chat-context.js';
|
|
6
|
+
import { readConfig } from '../config.js';
|
|
7
|
+
import { pluginHost } from '../core/plugin-host/host.js';
|
|
8
|
+
/** M21 m05ctxreg: tools whitelist per context_type. Brief threads get only
|
|
9
|
+
* brief-tools (per-thread, mounted below) + release-tools (read-only).
|
|
10
|
+
* All other plugin servers (endpoint-tools, dto-tools, ui-view-tools,
|
|
11
|
+
* database-table-tools, plan-tools, reference-tools) are NOT mounted. */
|
|
12
|
+
const BRIEF_ALLOWED_PLUGIN_MCP = new Set(['release-tools']);
|
|
13
|
+
export const ALLOWED_MODELS = ['sonnet-4.6', 'opus-4.7', 'haiku-4.5'];
|
|
14
|
+
// Wspoldzielone rejestry — keyed by threadId, jeden aktywny adapter per watek.
|
|
15
|
+
// `POST /api/chat` i `POST /api/threads/:id/ask` importuja te same instancje:
|
|
16
|
+
// drugi POST/ask na ten sam watek dostaje 409, a GET /api/chat/stream/:threadId
|
|
17
|
+
// dolacza do zywego streamu niezaleznie od tego, ktory endpoint go uruchomil.
|
|
18
|
+
export const activeAdapters = new Map();
|
|
19
|
+
export const pendingInputs = new Map();
|
|
20
|
+
export function cancelPendingForRequest(requestId) {
|
|
21
|
+
for (const [inputId, pending] of pendingInputs) {
|
|
22
|
+
if (pending.requestIdsForRequest === requestId) {
|
|
23
|
+
pending.reject(new Error('stream aborted'));
|
|
24
|
+
pendingInputs.delete(inputId);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Typed blad tury — pozwala konsumentom (headless `ask`) zmapowac powod
|
|
29
|
+
* zakonczenia na status HTTP. Te same kody co SSE `event: error`. */
|
|
30
|
+
export class AgentTurnError extends Error {
|
|
31
|
+
code;
|
|
32
|
+
constructor(code, message) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.code = code;
|
|
35
|
+
this.name = 'AgentTurnError';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Uruchamia jedna ture agenta dla istniejacego watku: wstawia wiadomosc user,
|
|
40
|
+
* buduje runtime przez rejestr `context_type`, wykonuje `adapter.execute(...)`,
|
|
41
|
+
* persystuje eventy mapperem `UnifiedEvent → chat_message`. Caller wybiera
|
|
42
|
+
* transport przez `onEvent` (SSE vs collapse). Zwraca `{ threadId, answer }`,
|
|
43
|
+
* gdzie `answer` to skolapsowany tekst assistant tej tury.
|
|
44
|
+
*
|
|
45
|
+
* Pre-flight `activeAdapters.has` (→ 409) NALEZY do callera; ta funkcja
|
|
46
|
+
* rejestruje adapter w `activeAdapters` i zwalnia go w `finally`.
|
|
47
|
+
*/
|
|
48
|
+
export async function runAgentTurn(deps, input) {
|
|
49
|
+
const { thread, prompt, requestId } = input;
|
|
50
|
+
const annotations = input.annotations ?? [];
|
|
51
|
+
const currentPage = input.currentPage ?? null;
|
|
52
|
+
const planMode = thread.planMode;
|
|
53
|
+
const adapter = createAdapter('claude-code');
|
|
54
|
+
const emitter = new EventEmitter();
|
|
55
|
+
activeAdapters.set(thread.id, { requestId, adapter, emitter });
|
|
56
|
+
// `onEvent` to transport callera; `emitter` zasila GET /api/chat/stream/:threadId.
|
|
57
|
+
const emit = (event) => {
|
|
58
|
+
input.onEvent(event);
|
|
59
|
+
emitter.emit('event', event);
|
|
60
|
+
};
|
|
61
|
+
emit({ type: 'connected', requestId, threadId: thread.id });
|
|
62
|
+
let assistantBuf = '';
|
|
63
|
+
let thinkingBuf = '';
|
|
64
|
+
// Skolapsowana odpowiedz tury — wszystkie main-agent `text_delta` zlaczone.
|
|
65
|
+
// Nie resetowane przy flush; zwracane jako `answer` po terminalnym evencie.
|
|
66
|
+
let answerBuf = '';
|
|
67
|
+
const subagentBuffers = new Map();
|
|
68
|
+
let lastMainAssistantRowId = null;
|
|
69
|
+
let lastToolResultRowId = null;
|
|
70
|
+
let lastTurnUsage = null;
|
|
71
|
+
const getSubBuf = (taskId) => {
|
|
72
|
+
let buf = subagentBuffers.get(taskId);
|
|
73
|
+
if (!buf) {
|
|
74
|
+
buf = { text: '', thinking: '' };
|
|
75
|
+
subagentBuffers.set(taskId, buf);
|
|
76
|
+
}
|
|
77
|
+
return buf;
|
|
78
|
+
};
|
|
79
|
+
const flushSubBuf = (taskId) => {
|
|
80
|
+
const buf = subagentBuffers.get(taskId);
|
|
81
|
+
if (!buf)
|
|
82
|
+
return;
|
|
83
|
+
if (buf.text) {
|
|
84
|
+
deps.chatService.addMessage(thread.id, 'assistant', JSON.stringify({ text: buf.text }), null, null, taskId);
|
|
85
|
+
buf.text = '';
|
|
86
|
+
}
|
|
87
|
+
if (buf.thinking) {
|
|
88
|
+
deps.chatService.addMessage(thread.id, 'assistant', JSON.stringify({ text: buf.thinking, thinking: true }), null, null, taskId);
|
|
89
|
+
buf.thinking = '';
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const flushMainBuf = () => {
|
|
93
|
+
if (assistantBuf) {
|
|
94
|
+
const row = deps.chatService.addMessage(thread.id, 'assistant', JSON.stringify({ text: assistantBuf }));
|
|
95
|
+
lastMainAssistantRowId = row.id;
|
|
96
|
+
assistantBuf = '';
|
|
97
|
+
}
|
|
98
|
+
if (thinkingBuf) {
|
|
99
|
+
deps.chatService.addMessage(thread.id, 'assistant', JSON.stringify({ text: thinkingBuf, thinking: true }));
|
|
100
|
+
thinkingBuf = '';
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
try {
|
|
104
|
+
deps.chatService.addMessage(thread.id, 'user', JSON.stringify({ text: prompt, annotations }), null, null, null, planMode);
|
|
105
|
+
if (!thread.title) {
|
|
106
|
+
const title = prompt.slice(0, 60) + (prompt.length > 60 ? '...' : '');
|
|
107
|
+
deps.chatService.updateTitle(thread.id, title || '(annotations only)');
|
|
108
|
+
}
|
|
109
|
+
const isBrief = thread.contextType === 'brief';
|
|
110
|
+
// M23: patch threads keep the FULL spec-editing toolset (isBrief stays
|
|
111
|
+
// false) — their job is to edit the spec. Only the system prompt differs.
|
|
112
|
+
const isPatch = thread.contextType === 'patch';
|
|
113
|
+
// M21: dla brief context czytamy aktualny snapshot brief'u (frontmatter+body+hash)
|
|
114
|
+
// i wkladamy do system promptu. Skip kosztownych obliczen pageCount/entityCounts.
|
|
115
|
+
let briefSnapshot = null;
|
|
116
|
+
if (isBrief && thread.briefPath) {
|
|
117
|
+
try {
|
|
118
|
+
briefSnapshot = await deps.briefService.getBrief(thread.briefPath);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
console.warn(`[chat] brief read failed for ${thread.briefPath}:`, err.message);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// M23: dla patch context czytamy snapshot patcha i wkladamy do system promptu.
|
|
125
|
+
let patchSnapshot = null;
|
|
126
|
+
if (isPatch && thread.patchPath) {
|
|
127
|
+
try {
|
|
128
|
+
patchSnapshot = await deps.patchService.getPatch(thread.patchPath);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
console.warn(`[chat] patch read failed for ${thread.patchPath}:`, err.message);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
let currentPageBody = null;
|
|
135
|
+
if (!isBrief && currentPage) {
|
|
136
|
+
try {
|
|
137
|
+
const page = await deps.pagesService.read(currentPage);
|
|
138
|
+
currentPageBody = page.body;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
currentPageBody = null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Stale-plan reminder MUSI byc sprawdzony PRZED markPlanSeenByThread —
|
|
145
|
+
// ten ostatni bumpuje last_seen_plan_version i zapodaje sygnal "synced".
|
|
146
|
+
const isFirstTurn = !thread.hasSystemPrompt;
|
|
147
|
+
const stalePlanReminder = isBrief ? null : deps.planService.getStalePlanReminder(thread.id);
|
|
148
|
+
const currentPlan = isBrief ? null : deps.planService.getByThread(thread.id);
|
|
149
|
+
// Skill resolution: writing-style (config.writingStyle, M15) ladowany
|
|
150
|
+
// niezaleznie od kontekstu. Dla brief context dokladamy bundled `brief-author`.
|
|
151
|
+
const writingStyleSkills = deps.skillResolver.resolve();
|
|
152
|
+
const writingStyle = writingStyleSkills[0]
|
|
153
|
+
? {
|
|
154
|
+
slug: writingStyleSkills[0].name,
|
|
155
|
+
title: String(writingStyleSkills[0].metadata?.title ?? writingStyleSkills[0].name),
|
|
156
|
+
}
|
|
157
|
+
: null;
|
|
158
|
+
const inlineSkills = [...writingStyleSkills];
|
|
159
|
+
if (isBrief && deps.skillRegistry.has('brief-author')) {
|
|
160
|
+
const skill = deps.skillRegistry.resolve('brief-author');
|
|
161
|
+
inlineSkills.push({
|
|
162
|
+
name: skill.metadata.slug,
|
|
163
|
+
description: skill.metadata.description,
|
|
164
|
+
content: skill.content,
|
|
165
|
+
files: skill.files,
|
|
166
|
+
metadata: {
|
|
167
|
+
version: skill.metadata.version,
|
|
168
|
+
language: skill.metadata.language,
|
|
169
|
+
title: skill.metadata.title,
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
const pageCount = isBrief ? 0 : countPages(await deps.pagesService.listTree());
|
|
174
|
+
const systemPrompt = buildSystemPrompt({
|
|
175
|
+
projectName: readConfig(deps.cwd).name,
|
|
176
|
+
cwd: deps.cwd,
|
|
177
|
+
pagesDir: deps.pagesDir,
|
|
178
|
+
currentPagePath: currentPage,
|
|
179
|
+
currentPageBody,
|
|
180
|
+
pageCount,
|
|
181
|
+
entityCounts: isBrief ? {} : pluginHost.computeEntityCounts(deps.db.handle),
|
|
182
|
+
tagCount: isBrief ? 0 : deps.tagsService.list().length,
|
|
183
|
+
sectionCount: isBrief ? 0 : deps.sectionsService.count(),
|
|
184
|
+
annotations,
|
|
185
|
+
planMode,
|
|
186
|
+
currentPlan,
|
|
187
|
+
planToolsAvailable: !isBrief,
|
|
188
|
+
writingStyle,
|
|
189
|
+
contextType: thread.contextType,
|
|
190
|
+
brief: briefSnapshot,
|
|
191
|
+
patch: patchSnapshot,
|
|
192
|
+
});
|
|
193
|
+
// claude-code CLI po resumeSessionId ignoruje kolejne systemPrompty —
|
|
194
|
+
// wiążący dla audytu jest tylko pierwszy. UPDATE idempotentny (no-op na 2.+ turze).
|
|
195
|
+
deps.chatService.setInitialSystemPrompt(thread.id, systemPrompt);
|
|
196
|
+
if (isFirstTurn && currentPlan) {
|
|
197
|
+
deps.planService.markPlanSeenByThread(thread.id);
|
|
198
|
+
}
|
|
199
|
+
// M21 m05ctxreg: per-thread MCP servers depend on context_type.
|
|
200
|
+
const planTools = isBrief
|
|
201
|
+
? null
|
|
202
|
+
: buildPlanToolsServer({
|
|
203
|
+
threadId: thread.id,
|
|
204
|
+
planService: deps.planService,
|
|
205
|
+
});
|
|
206
|
+
const briefTools = isBrief && thread.briefPath
|
|
207
|
+
? buildBriefToolsServer({
|
|
208
|
+
threadId: thread.id,
|
|
209
|
+
briefPath: thread.briefPath,
|
|
210
|
+
briefService: deps.briefService,
|
|
211
|
+
pageVersions: deps.pageVersions,
|
|
212
|
+
})
|
|
213
|
+
: null;
|
|
214
|
+
const pluginMcpEntries = pluginHost
|
|
215
|
+
.listMcpServers()
|
|
216
|
+
.filter(({ name }) => (isBrief ? BRIEF_ALLOWED_PLUGIN_MCP.has(name) : true))
|
|
217
|
+
.map(({ name, server }) => [name, server.config]);
|
|
218
|
+
const mcpServers = Object.fromEntries(pluginMcpEntries);
|
|
219
|
+
if (planTools)
|
|
220
|
+
mcpServers['plan-tools'] = planTools.config;
|
|
221
|
+
if (briefTools)
|
|
222
|
+
mcpServers['brief-tools'] = briefTools.config;
|
|
223
|
+
const effectivePrompt = stalePlanReminder ? `${stalePlanReminder}\n\n${prompt}` : prompt;
|
|
224
|
+
const stream = adapter.execute({
|
|
225
|
+
prompt: effectivePrompt,
|
|
226
|
+
systemPrompt,
|
|
227
|
+
model: input.model,
|
|
228
|
+
cwd: deps.cwd,
|
|
229
|
+
mcpServers,
|
|
230
|
+
skills: inlineSkills,
|
|
231
|
+
resumeSessionId: thread.lastSessionId ?? undefined,
|
|
232
|
+
architectureConfig: input.architectureConfig,
|
|
233
|
+
planMode,
|
|
234
|
+
onUserInput: input.onUserInput,
|
|
235
|
+
});
|
|
236
|
+
const observed = input.consoleObserver
|
|
237
|
+
? observeStream(stream, [input.consoleObserver])
|
|
238
|
+
: stream;
|
|
239
|
+
for await (const event of observed) {
|
|
240
|
+
emit(event);
|
|
241
|
+
switch (event.type) {
|
|
242
|
+
case 'text_delta':
|
|
243
|
+
if (event.isSubagent && event.subagentTaskId) {
|
|
244
|
+
getSubBuf(event.subagentTaskId).text += event.text;
|
|
245
|
+
}
|
|
246
|
+
else if (!event.isSubagent) {
|
|
247
|
+
assistantBuf += event.text;
|
|
248
|
+
answerBuf += event.text;
|
|
249
|
+
}
|
|
250
|
+
break;
|
|
251
|
+
case 'thinking':
|
|
252
|
+
if (event.isSubagent && event.subagentTaskId) {
|
|
253
|
+
getSubBuf(event.subagentTaskId).thinking += event.text;
|
|
254
|
+
}
|
|
255
|
+
else if (!event.isSubagent) {
|
|
256
|
+
thinkingBuf += event.text;
|
|
257
|
+
}
|
|
258
|
+
break;
|
|
259
|
+
case 'assistant_message': {
|
|
260
|
+
if (!event.message.subagentTaskId && event.message.usage) {
|
|
261
|
+
lastTurnUsage = event.message.usage;
|
|
262
|
+
deps.chatService.setLastUsage(thread.id, event.message.usage);
|
|
263
|
+
}
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
case 'tool_use': {
|
|
267
|
+
const taskId = event.subagentTaskId ?? null;
|
|
268
|
+
if (taskId)
|
|
269
|
+
flushSubBuf(taskId);
|
|
270
|
+
else
|
|
271
|
+
flushMainBuf();
|
|
272
|
+
deps.chatService.addMessage(thread.id, 'tool_use', JSON.stringify({ input: event.input }), event.toolName, event.toolUseId, taskId, planMode, 'streaming');
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
case 'tool_result': {
|
|
276
|
+
const taskId = event.subagentTaskId ?? null;
|
|
277
|
+
deps.chatService.markToolUseComplete(thread.id, event.toolUseId);
|
|
278
|
+
const row = deps.chatService.addMessage(thread.id, 'tool_result', JSON.stringify({ summary: event.summary, isError: event.isError }), null, event.toolUseId, taskId);
|
|
279
|
+
if (taskId === null)
|
|
280
|
+
lastToolResultRowId = row.id;
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
case 'subagent_started':
|
|
284
|
+
flushMainBuf();
|
|
285
|
+
deps.chatService.startSubagentTask(thread.id, event.taskId, event.description, event.toolUseId ?? null);
|
|
286
|
+
break;
|
|
287
|
+
case 'subagent_progress':
|
|
288
|
+
deps.chatService.updateSubagentTaskProgress(thread.id, event.taskId, event.description);
|
|
289
|
+
break;
|
|
290
|
+
case 'subagent_completed':
|
|
291
|
+
flushSubBuf(event.taskId);
|
|
292
|
+
deps.chatService.completeSubagentTask(thread.id, event.taskId, event.status, event.summary ?? null);
|
|
293
|
+
break;
|
|
294
|
+
case 'result': {
|
|
295
|
+
flushMainBuf();
|
|
296
|
+
for (const tid of Array.from(subagentBuffers.keys()))
|
|
297
|
+
flushSubBuf(tid);
|
|
298
|
+
if (event.sessionId)
|
|
299
|
+
deps.chatService.setLastSessionId(thread.id, event.sessionId);
|
|
300
|
+
const turnAnchor = lastMainAssistantRowId ?? lastToolResultRowId;
|
|
301
|
+
if (lastTurnUsage) {
|
|
302
|
+
deps.chatService.setLastUsage(thread.id, lastTurnUsage);
|
|
303
|
+
if (turnAnchor !== null) {
|
|
304
|
+
deps.chatService.attachTurnUsage(thread.id, turnAnchor, lastTurnUsage);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (typeof event.contextSize === 'number') {
|
|
308
|
+
deps.chatService.setLastContextSize(thread.id, event.contextSize);
|
|
309
|
+
if (turnAnchor !== null) {
|
|
310
|
+
deps.chatService.attachTurnContextSize(thread.id, turnAnchor, event.contextSize);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
case 'todo_list_updated':
|
|
316
|
+
if (!event.isSubagent) {
|
|
317
|
+
deps.chatService.updateCurrentTodoItems(thread.id, event.items);
|
|
318
|
+
}
|
|
319
|
+
break;
|
|
320
|
+
case 'warning':
|
|
321
|
+
console.warn('[agent warning]', event.message);
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
// Terminal `done`/`error` ida tylko transportem callera (`onEvent`).
|
|
326
|
+
// Emitter dla GET /stream/:threadId dostaje `done` raz, w `finally`.
|
|
327
|
+
input.onEvent({ type: 'done' });
|
|
328
|
+
}
|
|
329
|
+
catch (err) {
|
|
330
|
+
// Mapuj na typed blad — `onEvent` dostaje `event: error` (parytet z SSE),
|
|
331
|
+
// a caller (headless `ask`) lapie `AgentTurnError` i mapuje na status HTTP.
|
|
332
|
+
let turnErr;
|
|
333
|
+
if (err instanceof AdapterAbortError) {
|
|
334
|
+
turnErr = new AgentTurnError('ABORTED', 'Aborted by user');
|
|
335
|
+
}
|
|
336
|
+
else if (err instanceof AdapterTimeoutError) {
|
|
337
|
+
turnErr = new AgentTurnError('TIMEOUT', 'Agent took too long to respond');
|
|
338
|
+
}
|
|
339
|
+
else if (err instanceof AdapterInitError) {
|
|
340
|
+
turnErr = new AgentTurnError('AGENT_UNAVAILABLE', 'Claude CLI not found or not logged in. Run `claude login` first.');
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
turnErr = new AgentTurnError('AGENT_ERROR', err instanceof Error ? err.message : String(err));
|
|
344
|
+
}
|
|
345
|
+
input.onEvent({ type: 'error', code: turnErr.code, error: turnErr.message });
|
|
346
|
+
throw turnErr;
|
|
347
|
+
}
|
|
348
|
+
finally {
|
|
349
|
+
try {
|
|
350
|
+
flushMainBuf();
|
|
351
|
+
for (const tid of Array.from(subagentBuffers.keys()))
|
|
352
|
+
flushSubBuf(tid);
|
|
353
|
+
}
|
|
354
|
+
catch (flushErr) {
|
|
355
|
+
console.error('[chat] final flush failed', flushErr);
|
|
356
|
+
}
|
|
357
|
+
try {
|
|
358
|
+
deps.chatService.finalizeStreamingRows(thread.id);
|
|
359
|
+
}
|
|
360
|
+
catch (finalizeErr) {
|
|
361
|
+
console.error('[chat] finalizeStreamingRows failed', finalizeErr);
|
|
362
|
+
}
|
|
363
|
+
emitter.emit('event', { type: 'done' });
|
|
364
|
+
activeAdapters.delete(thread.id);
|
|
365
|
+
cancelPendingForRequest(requestId);
|
|
366
|
+
}
|
|
367
|
+
return { threadId: thread.id, answer: answerBuf.trim() };
|
|
368
|
+
}
|
|
369
|
+
export function countPages(tree) {
|
|
370
|
+
let n = 0;
|
|
371
|
+
for (const node of tree) {
|
|
372
|
+
if (node.type === 'file')
|
|
373
|
+
n++;
|
|
374
|
+
else if (Array.isArray(node.children))
|
|
375
|
+
n += countPages(node.children);
|
|
376
|
+
}
|
|
377
|
+
return n;
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=agent-turn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-turn.js","sourceRoot":"","sources":["../../../src/server/routes/agent-turn.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,3 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
|
-
import type
|
|
3
|
-
|
|
4
|
-
import type { TagsService } from '../services/tags.js';
|
|
5
|
-
import type { SectionsService } from '../services/sections.js';
|
|
6
|
-
import type { PlanService } from '../services/plan.js';
|
|
7
|
-
import type { BriefService } from '../services/brief.js';
|
|
8
|
-
import type { PageVersionService } from '../services/page-version.js';
|
|
9
|
-
import type { SkillResolver, SkillRegistry } from '../services/skill-registry.js';
|
|
10
|
-
import type { WsGateway } from '../ws/gateway.js';
|
|
11
|
-
import type { Db } from '../db/index.js';
|
|
12
|
-
interface ChatRouterDeps {
|
|
13
|
-
chatService: ChatService;
|
|
14
|
-
pagesService: PagesService;
|
|
15
|
-
tagsService: TagsService;
|
|
16
|
-
sectionsService: SectionsService;
|
|
17
|
-
planService: PlanService;
|
|
18
|
-
briefService: BriefService;
|
|
19
|
-
pageVersions: PageVersionService;
|
|
20
|
-
skillResolver: SkillResolver;
|
|
21
|
-
skillRegistry: SkillRegistry;
|
|
22
|
-
ws: WsGateway;
|
|
23
|
-
cwd: string;
|
|
24
|
-
pagesDir: string;
|
|
25
|
-
mode: 'dev' | 'prod';
|
|
26
|
-
db: Db;
|
|
27
|
-
}
|
|
28
|
-
export declare function chatRouter(deps: ChatRouterDeps): Router;
|
|
29
|
-
export {};
|
|
2
|
+
import { type AgentTurnDeps } from './agent-turn.js';
|
|
3
|
+
export declare function chatRouter(deps: AgentTurnDeps): Router;
|