zelari-code 0.1.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.
Files changed (146) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +156 -0
  3. package/bin/zelari-code.js +64 -0
  4. package/dist/agents/advancedTools.js +115 -0
  5. package/dist/agents/advancedTools.js.map +1 -0
  6. package/dist/agents/councilApi.js +375 -0
  7. package/dist/agents/councilApi.js.map +1 -0
  8. package/dist/agents/councilDirectives.js +100 -0
  9. package/dist/agents/councilDirectives.js.map +1 -0
  10. package/dist/agents/promoteMember.js +210 -0
  11. package/dist/agents/promoteMember.js.map +1 -0
  12. package/dist/agents/promptModules.js +139 -0
  13. package/dist/agents/promptModules.js.map +1 -0
  14. package/dist/agents/roles.js +281 -0
  15. package/dist/agents/roles.js.map +1 -0
  16. package/dist/agents/skills/builtin/debugging.js +248 -0
  17. package/dist/agents/skills/builtin/debugging.js.map +1 -0
  18. package/dist/agents/skills/builtin/docs.js +301 -0
  19. package/dist/agents/skills/builtin/docs.js.map +1 -0
  20. package/dist/agents/skills/builtin/git-ops.js +301 -0
  21. package/dist/agents/skills/builtin/git-ops.js.map +1 -0
  22. package/dist/agents/skills/builtin/planning.js +335 -0
  23. package/dist/agents/skills/builtin/planning.js.map +1 -0
  24. package/dist/agents/skills/builtin/refactoring.js +261 -0
  25. package/dist/agents/skills/builtin/refactoring.js.map +1 -0
  26. package/dist/agents/skills/builtin/review.js +302 -0
  27. package/dist/agents/skills/builtin/review.js.map +1 -0
  28. package/dist/agents/skills/builtin/testing.js +245 -0
  29. package/dist/agents/skills/builtin/testing.js.map +1 -0
  30. package/dist/agents/skills.js +272 -0
  31. package/dist/agents/skills.js.map +1 -0
  32. package/dist/agents/systemPromptBuilder.js +151 -0
  33. package/dist/agents/systemPromptBuilder.js.map +1 -0
  34. package/dist/agents/toolSchemas.js +249 -0
  35. package/dist/agents/toolSchemas.js.map +1 -0
  36. package/dist/agents/tools.js +196 -0
  37. package/dist/agents/tools.js.map +1 -0
  38. package/dist/agents/vaultTools.js +134 -0
  39. package/dist/agents/vaultTools.js.map +1 -0
  40. package/dist/cli/app.js +1823 -0
  41. package/dist/cli/app.js.map +1 -0
  42. package/dist/cli/branchManager.js +280 -0
  43. package/dist/cli/branchManager.js.map +1 -0
  44. package/dist/cli/compaction.js +63 -0
  45. package/dist/cli/compaction.js.map +1 -0
  46. package/dist/cli/components/ChatStream.js +23 -0
  47. package/dist/cli/components/ChatStream.js.map +1 -0
  48. package/dist/cli/components/CollapsibleToolOutput.js +38 -0
  49. package/dist/cli/components/CollapsibleToolOutput.js.map +1 -0
  50. package/dist/cli/components/Header.js +31 -0
  51. package/dist/cli/components/Header.js.map +1 -0
  52. package/dist/cli/components/InputBar.js +9 -0
  53. package/dist/cli/components/InputBar.js.map +1 -0
  54. package/dist/cli/components/Sidebar.js +17 -0
  55. package/dist/cli/components/Sidebar.js.map +1 -0
  56. package/dist/cli/councilCost.js +81 -0
  57. package/dist/cli/councilCost.js.map +1 -0
  58. package/dist/cli/councilDispatcher.js +56 -0
  59. package/dist/cli/councilDispatcher.js.map +1 -0
  60. package/dist/cli/councilFeedback.js +164 -0
  61. package/dist/cli/councilFeedback.js.map +1 -0
  62. package/dist/cli/crossProviderFailover.js +83 -0
  63. package/dist/cli/crossProviderFailover.js.map +1 -0
  64. package/dist/cli/gitOps.js +96 -0
  65. package/dist/cli/gitOps.js.map +1 -0
  66. package/dist/cli/grokOAuth.js +375 -0
  67. package/dist/cli/grokOAuth.js.map +1 -0
  68. package/dist/cli/keyStore.js +263 -0
  69. package/dist/cli/keyStore.js.map +1 -0
  70. package/dist/cli/keyValidator.js +83 -0
  71. package/dist/cli/keyValidator.js.map +1 -0
  72. package/dist/cli/main.bundled.js +21428 -0
  73. package/dist/cli/main.bundled.js.map +7 -0
  74. package/dist/cli/main.js +72 -0
  75. package/dist/cli/main.js.map +1 -0
  76. package/dist/cli/metrics.js +131 -0
  77. package/dist/cli/metrics.js.map +1 -0
  78. package/dist/cli/modelDiscovery.js +234 -0
  79. package/dist/cli/modelDiscovery.js.map +1 -0
  80. package/dist/cli/modelPricing.js +112 -0
  81. package/dist/cli/modelPricing.js.map +1 -0
  82. package/dist/cli/oauthCallbackServer.js +207 -0
  83. package/dist/cli/oauthCallbackServer.js.map +1 -0
  84. package/dist/cli/provider/openai-compatible.js +236 -0
  85. package/dist/cli/provider/openai-compatible.js.map +1 -0
  86. package/dist/cli/providerConfig.js +210 -0
  87. package/dist/cli/providerConfig.js.map +1 -0
  88. package/dist/cli/providerFailover.js +90 -0
  89. package/dist/cli/providerFailover.js.map +1 -0
  90. package/dist/cli/refreshRegistry.js +77 -0
  91. package/dist/cli/refreshRegistry.js.map +1 -0
  92. package/dist/cli/safety/auditLogger.js +111 -0
  93. package/dist/cli/safety/auditLogger.js.map +1 -0
  94. package/dist/cli/safety/sandboxPath.js +62 -0
  95. package/dist/cli/safety/sandboxPath.js.map +1 -0
  96. package/dist/cli/safety/shellBlocklist.js +71 -0
  97. package/dist/cli/safety/shellBlocklist.js.map +1 -0
  98. package/dist/cli/sessionManager.js +149 -0
  99. package/dist/cli/sessionManager.js.map +1 -0
  100. package/dist/cli/skillCache.js +205 -0
  101. package/dist/cli/skillCache.js.map +1 -0
  102. package/dist/cli/skillHistory.js +178 -0
  103. package/dist/cli/skillHistory.js.map +1 -0
  104. package/dist/cli/skillSuggest.js +132 -0
  105. package/dist/cli/skillSuggest.js.map +1 -0
  106. package/dist/cli/slashCommands.js +431 -0
  107. package/dist/cli/slashCommands.js.map +1 -0
  108. package/dist/cli/toolRegistry.js +187 -0
  109. package/dist/cli/toolRegistry.js.map +1 -0
  110. package/dist/cli/updater.js +157 -0
  111. package/dist/cli/updater.js.map +1 -0
  112. package/dist/main/core/AgentHarness.js +345 -0
  113. package/dist/main/core/AgentHarness.js.map +1 -0
  114. package/dist/main/core/providerStream.js +99 -0
  115. package/dist/main/core/providerStream.js.map +1 -0
  116. package/dist/main/core/sessionJsonl.js +99 -0
  117. package/dist/main/core/sessionJsonl.js.map +1 -0
  118. package/dist/main/core/tools/auditLog.js +26 -0
  119. package/dist/main/core/tools/auditLog.js.map +1 -0
  120. package/dist/main/core/tools/builtin/filesystem.js +110 -0
  121. package/dist/main/core/tools/builtin/filesystem.js.map +1 -0
  122. package/dist/main/core/tools/builtin/search.js +56 -0
  123. package/dist/main/core/tools/builtin/search.js.map +1 -0
  124. package/dist/main/core/tools/builtin/shell.js +51 -0
  125. package/dist/main/core/tools/builtin/shell.js.map +1 -0
  126. package/dist/main/core/tools/registry.js +71 -0
  127. package/dist/main/core/tools/registry.js.map +1 -0
  128. package/dist/main/core/tools/toolTypes.js +8 -0
  129. package/dist/main/core/tools/toolTypes.js.map +1 -0
  130. package/dist/main/core/tools/zodBridge.js +48 -0
  131. package/dist/main/core/tools/zodBridge.js.map +1 -0
  132. package/dist/shared/eventBus.js +104 -0
  133. package/dist/shared/eventBus.js.map +1 -0
  134. package/dist/shared/events.js +73 -0
  135. package/dist/shared/events.js.map +1 -0
  136. package/dist/shared/index.js +8 -0
  137. package/dist/shared/index.js.map +1 -0
  138. package/dist/types/context.js +3 -0
  139. package/dist/types/context.js.map +1 -0
  140. package/dist/types/index.js +2 -0
  141. package/dist/types/index.js.map +1 -0
  142. package/dist/types/knowledge.js +2 -0
  143. package/dist/types/knowledge.js.map +1 -0
  144. package/dist/types/systemTypes.js +10 -0
  145. package/dist/types/systemTypes.js.map +1 -0
  146. package/package.json +63 -0
@@ -0,0 +1,375 @@
1
+ import { getCouncilAgents, swapMembers } from './roles';
2
+ import { getProviderTools } from './toolSchemas';
3
+ import { buildSystemPrompt, computeAgentTools } from './systemPromptBuilder';
4
+ import { getAllTools } from './tools';
5
+ import { createBrainEvent } from '../shared/events';
6
+ import { AgentHarness } from '../main/core/AgentHarness';
7
+ const QUESTION_MARKER = '---QUESTION---';
8
+ const QUESTION_END_MARKER = '---END---';
9
+ export function parseClarificationRequest(text) {
10
+ const start = text.indexOf(QUESTION_MARKER);
11
+ if (start < 0)
12
+ return null;
13
+ const rest = text.slice(start + QUESTION_MARKER.length);
14
+ const end = rest.indexOf(QUESTION_END_MARKER);
15
+ const block = end >= 0 ? rest.slice(0, end) : rest;
16
+ const cleaned = block.replace(/```json\n?/g, '').replace(/```\n?/g, '').trim();
17
+ const objStart = cleaned.indexOf('{');
18
+ const objEnd = cleaned.lastIndexOf('}');
19
+ const jsonText = objStart >= 0 && objEnd > objStart ? cleaned.slice(objStart, objEnd + 1) : cleaned;
20
+ try {
21
+ const parsed = JSON.parse(jsonText);
22
+ if (typeof parsed.question !== 'string' || !parsed.question.trim())
23
+ return null;
24
+ return {
25
+ question: parsed.question.trim(),
26
+ choices: Array.isArray(parsed.choices)
27
+ ? parsed.choices.filter((c) => typeof c === 'string' && c.trim().length > 0).map((c) => c.trim())
28
+ : undefined,
29
+ context: typeof parsed.context === 'string' ? parsed.context.trim() : undefined,
30
+ };
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ export function parseThinking(text) {
37
+ const match = text.match(/<think>([\s\S]*?)<\/think>/);
38
+ return match ? match[1].trim() : '';
39
+ }
40
+ export function cleanAgentContent(text) {
41
+ return text
42
+ .replace(/<think>[\s\S]*?<\/think>/g, '')
43
+ .replace(/<minimax:tool_call>[\s\S]*?<\/minimax:tool_call>/g, '')
44
+ .replace(/---QUESTION---[\s\S]*?---END---/g, '')
45
+ .trim();
46
+ }
47
+ function buildAgentMessages(agent, userMessage, ragContext, workspaceContext, priorOutputs, aiConfig) {
48
+ const toolNames = computeAgentTools(agent, aiConfig);
49
+ const enhancedSystemPrompt = buildSystemPrompt(agent, {
50
+ tools: getAllTools(),
51
+ toolNames,
52
+ aiConfig,
53
+ workspaceContext,
54
+ ragContext,
55
+ });
56
+ const messages = [
57
+ { role: 'system', content: enhancedSystemPrompt },
58
+ { role: 'system', content: 'IMPORTANT: Before making any tool calls or expensive operations, check if the information already exists in the shared context from previous agents. Avoid redundant work.' },
59
+ ];
60
+ if (ragContext) {
61
+ messages.push({ role: 'system', content: `Relevant workspace context (from RAG retrieval):\n${ragContext}` });
62
+ }
63
+ if (workspaceContext) {
64
+ messages.push({ role: 'system', content: `Current workspace state:\n${workspaceContext}` });
65
+ }
66
+ if (priorOutputs.length > 0) {
67
+ const summary = priorOutputs.map((o) => `[${o.name} - ${o.role}]: ${o.content}`).join('\n\n');
68
+ messages.push({ role: 'user', content: `Previous council members have said:\n${summary}\n\nOriginal user request: ${userMessage}` });
69
+ }
70
+ else {
71
+ messages.push({ role: 'user', content: userMessage });
72
+ }
73
+ return messages;
74
+ }
75
+ /**
76
+ * PURE council orchestration. Loops through specialists, optionally runs
77
+ * the oracle (debate mode), then runs the chairman synthesis.
78
+ *
79
+ * Each agent invocation creates an AgentHarness internally that consumes
80
+ * the providerStream and emits BrainEvents. The orchestrator aggregates
81
+ * text deltas into a single message per agent.
82
+ *
83
+ * Returns AsyncIterable<BrainEvent> for the full council run.
84
+ */
85
+ export async function* runCouncilPure(userMessage, config, callbacks = {}) {
86
+ const baseAgents = getCouncilAgents(config.councilSize);
87
+ // Apply optional member swap (Task I.3 close-out). Throws UnknownMemberError
88
+ // on typo in either side of the mapping — caller decides whether to catch
89
+ // or surface. When `memberSwap` is undefined/empty, swapMembers returns a
90
+ // shallow copy (no-op in effect).
91
+ const agents = swapMembers(baseAgents, config.memberSwap ?? {});
92
+ const messages = [];
93
+ const completedIds = new Set(config.completedAgentIds ?? []);
94
+ const agentOutputs = [
95
+ ...(config.existingOutputs ?? []),
96
+ ];
97
+ const sessionId = config.sessionId ?? crypto.randomUUID();
98
+ // Emit council start
99
+ yield {
100
+ type: 'agent_start',
101
+ id: crypto.randomUUID(),
102
+ ts: Date.now(),
103
+ sessionId,
104
+ model: config.model,
105
+ provider: config.provider ?? 'minimax',
106
+ };
107
+ /**
108
+ * Build a MemberCost payload and dispatch it via the callback + the
109
+ * event stream. Used by the I.1 per-member cost tracking — fires
110
+ * once per member (specialist, oracle, chairman) at the end of its run.
111
+ */
112
+ const emitMemberCost = (input) => {
113
+ const usage = input.usage;
114
+ const prompt = usage?.promptTokens ?? 0;
115
+ const completion = usage?.completionTokens ?? 0;
116
+ const cost = {
117
+ memberId: input.memberId,
118
+ name: input.name,
119
+ promptTokens: prompt,
120
+ completionTokens: completion,
121
+ totalTokens: usage?.totalTokens ?? prompt + completion,
122
+ durationMs: Math.max(0, Math.round(input.durationMs)),
123
+ toolCalls: input.toolCalls,
124
+ errored: input.errored,
125
+ };
126
+ callbacks.onMemberCost?.(cost);
127
+ };
128
+ // Exposed to the harness loop below via closure — `yield` inside an
129
+ // async generator can't happen from a non-async helper, so the actual
130
+ // `member_cost` event is yielded inline at each call site (see the
131
+ // specialist / oracle / chairman loops). The helper only owns the
132
+ // callback dispatch to keep call sites short.
133
+ // Apply optional feedback-driven specialist ordering (Task I.2 close-out).
134
+ // Oracle and chairman are extracted BEFORE ranking so their positions are
135
+ // fixed (debate review + final synthesis roles are not reorderable).
136
+ const allSpecialists = agents.filter((a) => a.id !== 'chairman' && a.id !== 'oracle');
137
+ const specialists = config.feedbackStore
138
+ ? config.feedbackStore.ranked(allSpecialists)
139
+ : allSpecialists;
140
+ const oracle = agents.find((a) => a.id === 'oracle');
141
+ const chairman = agents.find((a) => a.id === 'chairman');
142
+ for (const agent of specialists) {
143
+ if (completedIds.has(agent.id))
144
+ continue;
145
+ callbacks.onAgentStart?.(agent);
146
+ const override = config.agentModels?.[agent.id];
147
+ const effectiveProvider = override?.providerId ?? config.provider ?? 'minimax';
148
+ const effectiveModel = override?.model ?? config.model;
149
+ const agentToolNames = computeAgentTools(agent, config.aiConfig);
150
+ const agentTools = agentToolNames.length > 0
151
+ ? getProviderTools(agentToolNames).map((t) => ({
152
+ name: t.function.name,
153
+ description: t.function.description,
154
+ parameters: t.function.parameters,
155
+ }))
156
+ : [];
157
+ const harness = new AgentHarness({
158
+ model: effectiveModel,
159
+ provider: effectiveProvider,
160
+ sessionId,
161
+ messages: buildAgentMessages(agent, userMessage, config.ragContext, config.workspaceContext, agentOutputs, config.aiConfig),
162
+ tools: agentTools,
163
+ eventBus: config.eventBus,
164
+ toolRegistry: config.tools,
165
+ // Task G.2 — enforce per-turn tool-call limit (carryover from v3-C C.1.5).
166
+ // Council members can otherwise fire N tool calls in one turn and blow
167
+ // the message context. Default to 5 if not set by caller.
168
+ maxToolCallsPerTurn: config.maxToolCallsPerTurn ?? 5,
169
+ providerStream: (params) => config.providerStream({
170
+ ...params,
171
+ }),
172
+ });
173
+ let fullText = '';
174
+ let toolCalls = 0;
175
+ let usage = null;
176
+ let errored = false;
177
+ const memberStart = Date.now();
178
+ try {
179
+ for await (const event of harness.run()) {
180
+ yield event;
181
+ if (event.type === 'tool_execution_start') {
182
+ toolCalls += 1;
183
+ }
184
+ if (event.type === 'message_end' && event.usage) {
185
+ usage = event.usage;
186
+ }
187
+ if (event.type === 'message_delta') {
188
+ fullText += event.delta;
189
+ callbacks.onAgentChunk?.(agent, event.delta);
190
+ }
191
+ }
192
+ }
193
+ catch (err) {
194
+ // eslint-disable-next-line no-console
195
+ console.error(`[council] agent "${agent.id}" failed:`, err);
196
+ fullText = `Error: ${err instanceof Error ? err.message : 'Unknown'}`;
197
+ errored = true;
198
+ }
199
+ const memberDuration = Date.now() - memberStart;
200
+ emitMemberCost({
201
+ memberId: agent.id,
202
+ name: agent.name,
203
+ usage,
204
+ durationMs: memberDuration,
205
+ toolCalls,
206
+ errored,
207
+ });
208
+ yield createBrainEvent('member_cost', sessionId, {
209
+ cost: {
210
+ memberId: agent.id,
211
+ name: agent.name,
212
+ promptTokens: usage?.promptTokens ?? 0,
213
+ completionTokens: usage?.completionTokens ?? 0,
214
+ totalTokens: usage?.totalTokens ?? (usage?.promptTokens ?? 0) + (usage?.completionTokens ?? 0),
215
+ durationMs: memberDuration,
216
+ toolCalls,
217
+ errored,
218
+ },
219
+ });
220
+ const thinking = parseThinking(fullText);
221
+ const cleaned = cleanAgentContent(fullText);
222
+ callbacks.onAgentDone?.(agent, cleaned, thinking || undefined);
223
+ messages.push({
224
+ id: crypto.randomUUID().slice(0, 12),
225
+ role: 'assistant',
226
+ content: cleaned,
227
+ thinking: thinking || undefined,
228
+ agentId: agent.id,
229
+ agentName: agent.name,
230
+ agentRole: agent.role,
231
+ agentColor: agent.color,
232
+ timestamp: Date.now(),
233
+ });
234
+ agentOutputs.push({ name: agent.name, role: agent.role, content: cleaned });
235
+ const clarification = parseClarificationRequest(fullText);
236
+ if (clarification) {
237
+ // Note: Pure council doesn't pause for user clarifications.
238
+ // The CLI caller (Phase 14) handles this at the slash-command level.
239
+ // For now, just inject the question into shared context as a comment.
240
+ agentOutputs.push({
241
+ name: 'Clarification',
242
+ role: 'system',
243
+ content: `(Agent ${agent.name} asked: ${clarification.question})`,
244
+ });
245
+ }
246
+ }
247
+ // Oracle (debate mode)
248
+ if (config.debateMode && oracle && !completedIds.has(oracle.id)) {
249
+ callbacks.onAgentStart?.(oracle);
250
+ const override = config.agentModels?.[oracle.id];
251
+ const effectiveProvider = override?.providerId ?? config.provider ?? 'minimax';
252
+ const effectiveModel = override?.model ?? config.model;
253
+ const anonymized = agentOutputs.map((o, i) => ({
254
+ ...o,
255
+ name: `Agent ${i + 1}`,
256
+ role: 'Specialist',
257
+ }));
258
+ const harness = new AgentHarness({
259
+ model: effectiveModel,
260
+ provider: effectiveProvider,
261
+ sessionId,
262
+ messages: buildAgentMessages(oracle, `Review these proposals for: "${userMessage}"`, '', '', anonymized, config.aiConfig),
263
+ tools: [],
264
+ eventBus: config.eventBus,
265
+ toolRegistry: config.tools,
266
+ // Task G.2 — same per-turn limit applies to oracle.
267
+ maxToolCallsPerTurn: config.maxToolCallsPerTurn ?? 5,
268
+ providerStream: (params) => config.providerStream({
269
+ ...params,
270
+ }),
271
+ });
272
+ let fullText = '';
273
+ let toolCalls = 0;
274
+ let usage = null;
275
+ let errored = false;
276
+ const memberStart = Date.now();
277
+ try {
278
+ for await (const event of harness.run()) {
279
+ yield event;
280
+ if (event.type === 'tool_execution_start') {
281
+ toolCalls += 1;
282
+ }
283
+ if (event.type === 'message_end' && event.usage) {
284
+ usage = event.usage;
285
+ }
286
+ if (event.type === 'message_delta') {
287
+ fullText += event.delta;
288
+ callbacks.onAgentChunk?.(oracle, event.delta);
289
+ }
290
+ }
291
+ }
292
+ catch (err) {
293
+ // eslint-disable-next-line no-console
294
+ console.error('[council] oracle failed:', err);
295
+ fullText = `Review error: ${err instanceof Error ? err.message : 'Unknown'}`;
296
+ errored = true;
297
+ }
298
+ const memberDuration = Date.now() - memberStart;
299
+ emitMemberCost({
300
+ memberId: oracle.id,
301
+ name: oracle.name,
302
+ usage,
303
+ durationMs: memberDuration,
304
+ toolCalls,
305
+ errored,
306
+ });
307
+ yield createBrainEvent('member_cost', sessionId, {
308
+ cost: {
309
+ memberId: oracle.id,
310
+ name: oracle.name,
311
+ promptTokens: usage?.promptTokens ?? 0,
312
+ completionTokens: usage?.completionTokens ?? 0,
313
+ totalTokens: usage?.totalTokens ?? (usage?.promptTokens ?? 0) + (usage?.completionTokens ?? 0),
314
+ durationMs: memberDuration,
315
+ toolCalls,
316
+ errored,
317
+ },
318
+ });
319
+ const thinking = parseThinking(fullText);
320
+ const cleaned = cleanAgentContent(fullText);
321
+ callbacks.onAgentDone?.(oracle, cleaned, thinking || undefined);
322
+ messages.push({
323
+ id: crypto.randomUUID().slice(0, 12),
324
+ role: 'assistant',
325
+ content: cleaned,
326
+ thinking: thinking || undefined,
327
+ agentId: oracle.id,
328
+ agentName: oracle.name,
329
+ agentRole: oracle.role,
330
+ agentColor: oracle.color,
331
+ isReview: true,
332
+ timestamp: Date.now(),
333
+ });
334
+ agentOutputs.push({ name: oracle.name, role: oracle.role, content: cleaned });
335
+ }
336
+ // Chairman synthesis (Phase 13 will add full chairman integration)
337
+ if (chairman && !completedIds.has(chairman.id)) {
338
+ callbacks.onSynthesisStart?.();
339
+ // For now, chairman just observes — full synthesis is deferred to 13.3+
340
+ callbacks.onSynthesisDone?.('Chairman synthesis: see agent outputs above.');
341
+ // Task I.1 — emit a member_cost for the chairman too. The chairman
342
+ // path is currently stub (no harness.run), so durationMs=0 and no
343
+ // usage. Future full-chairman integration can wire the same
344
+ // per-member tracking by extending this block.
345
+ emitMemberCost({
346
+ memberId: chairman.id,
347
+ name: chairman.name,
348
+ usage: null,
349
+ durationMs: 0,
350
+ toolCalls: 0,
351
+ errored: false,
352
+ });
353
+ yield createBrainEvent('member_cost', sessionId, {
354
+ cost: {
355
+ memberId: chairman.id,
356
+ name: chairman.name,
357
+ promptTokens: 0,
358
+ completionTokens: 0,
359
+ totalTokens: 0,
360
+ durationMs: 0,
361
+ toolCalls: 0,
362
+ errored: false,
363
+ },
364
+ });
365
+ }
366
+ yield {
367
+ type: 'agent_end',
368
+ id: crypto.randomUUID(),
369
+ ts: Date.now(),
370
+ sessionId,
371
+ reason: 'completed',
372
+ durationMs: 0,
373
+ };
374
+ }
375
+ //# sourceMappingURL=councilApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"councilApi.js","sourceRoot":"","sources":["../../src/agents/councilApi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAuB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AA+HzD,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAQxC,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACpG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAkC,CAAC;QACrE,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAChF,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBACpC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9G,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;SAChF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI;SACR,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;SACxC,OAAO,CAAC,mDAAmD,EAAE,EAAE,CAAC;SAChE,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC;SAC/C,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAgB,EAChB,WAAmB,EACnB,UAAkB,EAClB,gBAAwB,EACxB,YAA+D,EAC/D,QAA6B;IAE7B,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,KAAK,EAAE;QACpD,KAAK,EAAE,WAAW,EAAE;QACpB,SAAS;QACT,QAAQ;QACR,gBAAgB;QAChB,UAAU;KACX,CAAC,CAAC;IACH,MAAM,QAAQ,GAAmB;QAC/B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE;QACjD,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,4KAA4K,EAAE;KAC1M,CAAC;IACF,IAAI,UAAU,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qDAAqD,UAAU,EAAE,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAA6B,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9F,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wCAAwC,OAAO,8BAA8B,WAAW,EAAE,EAAE,CAAC,CAAC;IACvI,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,cAAc,CACnC,WAAmB,EACnB,MAAyB,EACzB,YAAkC,EAAE;IAEpC,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxD,6EAA6E;IAC7E,0EAA0E;IAC1E,0EAA0E;IAC1E,kCAAkC;IAClC,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAsD;QACtE,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;KAClC,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;IAE1D,qBAAqB;IACrB,MAAM;QACJ,IAAI,EAAE,aAAa;QACnB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,SAAS;QACT,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;KACvC,CAAC;IAEF;;;;OAIG;IACH,MAAM,cAAc,GAAG,CAAC,KAOvB,EAAQ,EAAE;QACT,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,MAAM,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK,EAAE,gBAAgB,IAAI,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG;YACX,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,YAAY,EAAE,MAAM;YACpB,gBAAgB,EAAE,UAAU;YAC5B,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,MAAM,GAAG,UAAU;YACtD,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACrD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;QACF,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;IACF,oEAAoE;IACpE,sEAAsE;IACtE,mEAAmE;IACnE,kEAAkE;IAClE,8CAA8C;IAE9C,2EAA2E;IAC3E,0EAA0E;IAC1E,qEAAqE;IACrE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa;QACtC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC;QAC7C,CAAC,CAAC,cAAc,CAAC;IACnB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAEzD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,SAAS;QACzC,SAAS,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,iBAAiB,GAAG,QAAQ,EAAE,UAAU,IAAI,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC;QAC/E,MAAM,cAAc,GAAG,QAAQ,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;QAEvD,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,UAAU,GAAoB,cAAc,CAAC,MAAM,GAAG,CAAC;YAC3D,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3C,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;gBACrB,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW;gBACnC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAqC;aAC7D,CAAC,CAAC;YACL,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;YAC/B,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,iBAAiB;YAC3B,SAAS;YACT,QAAQ,EAAE,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;YAC3H,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,MAAM,CAAC,KAAK;YAC1B,2EAA2E;YAC3E,uEAAuE;YACvE,0DAA0D;YAC1D,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,CAAC;YACpD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;gBAChD,GAAG,MAAM;aACD,CAAC;SACZ,CAAC,CAAC;QAEH,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,KAAK,GAA0B,IAAI,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;gBACxC,MAAM,KAAK,CAAC;gBACZ,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBAC1C,SAAS,IAAI,CAAC,CAAC;gBACjB,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBACtB,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBACnC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;oBACxB,SAAS,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;YAC5D,QAAQ,GAAG,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACtE,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;QAChD,cAAc,CAAC;YACb,QAAQ,EAAE,KAAK,CAAC,EAAE;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK;YACL,UAAU,EAAE,cAAc;YAC1B,SAAS;YACT,OAAO;SACR,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE;YAC/C,IAAI,EAAE;gBACJ,QAAQ,EAAE,KAAK,CAAC,EAAE;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC;gBACtC,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,IAAI,CAAC;gBAC9C,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,IAAI,CAAC,CAAC;gBAC9F,UAAU,EAAE,cAAc;gBAC1B,SAAS;gBACT,OAAO;aACR;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC5C,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,IAAI,SAAS,CAAC,CAAC;QAE/D,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,QAAQ,IAAI,SAAS;YAC/B,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,UAAU,EAAE,KAAK,CAAC,KAAK;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAE5E,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,aAAa,EAAE,CAAC;YAClB,4DAA4D;YAC5D,qEAAqE;YACrE,sEAAsE;YACtE,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,WAAW,aAAa,CAAC,QAAQ,GAAG;aAClE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAChE,SAAS,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;QAEjC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,iBAAiB,GAAG,QAAQ,EAAE,UAAU,IAAI,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC;QAC/E,MAAM,cAAc,GAAG,QAAQ,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;QAEvD,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,GAAG,CAAC;YACJ,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;YACtB,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC,CAAC;QAEJ,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;YAC/B,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,iBAAiB;YAC3B,SAAS;YACT,QAAQ,EAAE,kBAAkB,CAC1B,MAAM,EACN,gCAAgC,WAAW,GAAG,EAC9C,EAAE,EACF,EAAE,EACF,UAAU,EACV,MAAM,CAAC,QAAQ,CAChB;YACD,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,MAAM,CAAC,KAAK;YAC1B,oDAAoD;YACpD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,CAAC;YACpD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;gBAChD,GAAG,MAAM;aACD,CAAC;SACZ,CAAC,CAAC;QAEH,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,KAAK,GAA0B,IAAI,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;gBACxC,MAAM,KAAK,CAAC;gBACZ,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBAC1C,SAAS,IAAI,CAAC,CAAC;gBACjB,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBACtB,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBACnC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;oBACxB,SAAS,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YAC/C,QAAQ,GAAG,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7E,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;QAChD,cAAc,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK;YACL,UAAU,EAAE,cAAc;YAC1B,SAAS;YACT,OAAO;SACR,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE;YAC/C,IAAI,EAAE;gBACJ,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,YAAY,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC;gBACtC,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,IAAI,CAAC;gBAC9C,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,IAAI,CAAC,CAAC;gBAC9F,UAAU,EAAE,cAAc;gBAC1B,SAAS;gBACT,OAAO;aACR;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC5C,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,IAAI,SAAS,CAAC,CAAC;QAEhE,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,QAAQ,IAAI,SAAS;YAC/B,OAAO,EAAE,MAAM,CAAC,EAAE;YAClB,SAAS,EAAE,MAAM,CAAC,IAAI;YACtB,SAAS,EAAE,MAAM,CAAC,IAAI;YACtB,UAAU,EAAE,MAAM,CAAC,KAAK;YACxB,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,mEAAmE;IACnE,IAAI,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/C,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAC/B,wEAAwE;QACxE,SAAS,CAAC,eAAe,EAAE,CAAC,8CAA8C,CAAC,CAAC;QAC5E,mEAAmE;QACnE,kEAAkE;QAClE,4DAA4D;QAC5D,+CAA+C;QAC/C,cAAc,CAAC;YACb,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE;YAC/C,IAAI,EAAE;gBACJ,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,CAAC;gBACnB,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,SAAS;QACT,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,CAAC;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Council Directives — distilled and adapted from System.md.
3
+ *
4
+ * System.md is a 122KB Claude Fable 5 system prompt; most of it (Anthropic
5
+ * product info, Claude identity, web/search behavior) is irrelevant to
6
+ * AnathemaBrain. This module extracts only the *operational methodology* that
7
+ * improves council agent behaviour:
8
+ *
9
+ * 1. Structured multi-step reasoning (think → conclude).
10
+ * 2. Tool-use protocol: when to ACT vs DESCRIBE.
11
+ * 3. Output quality standards and self-check criteria.
12
+ * 4. Inter-agent collaboration (build on, don't duplicate, prior work).
13
+ *
14
+ * Each directive is kept under ~500 words so the total additive prompt cost
15
+ * per agent stays around ~2KB. They are designed to be added to
16
+ * `PROMPT_MODULES` in `promptModules.ts` at high priority so they run early in
17
+ * the assembled system prompt.
18
+ */
19
+ export const STRUCTURED_REASONING_DIRECTIVE = {
20
+ type: 'custom',
21
+ title: 'Structured Reasoning',
22
+ priority: 15,
23
+ content: `# Structured Reasoning
24
+
25
+ Think step by step internally before responding. Surface only the conclusion and a brief rationale — do not narrate the full chain of thought unless it directly aids the user.
26
+
27
+ - For any non-trivial task, decompose it into ordered sub-steps and address each one before synthesizing.
28
+ - Prefer concrete specifics over vague generalities: file paths, line numbers, measurable acceptance criteria, and concrete examples beat abstract advice.
29
+ - When evaluating options, weigh trade-offs explicitly (cost, risk, effort, coverage) rather than listing features.
30
+ - If information may have changed since your knowledge cutoff (project state, current tasks, stored documents), consult the shared context or use a retrieval tool rather than relying on memory.
31
+ - Distinguish what you know from what you assume. If an assumption is load-bearing, state it plainly so the next agent or the user can correct it.
32
+ - Do not confabulate. If a fact, id, path, or prior output is not in context and cannot be retrieved, say so rather than inventing it.`,
33
+ };
34
+ export const TOOL_USE_PROTOCOL_DIRECTIVE = {
35
+ type: 'custom',
36
+ title: 'Tool-Use Protocol',
37
+ priority: 25,
38
+ content: `# Tool-Use Protocol — Act, Don't Just Describe
39
+
40
+ You have access to tools that create durable state in this workspace (tasks, ideas, phases, documents, mind-map nodes, milestones). Use them whenever the user's request implies a concrete artifact should exist.
41
+
42
+ When to ACT (call a tool):
43
+ - The request asks to create, plan, build, generate, or produce something concrete (a task, an idea, a document, a plan, a mind map).
44
+ - A deliverable would outlive this single message (reusable notes, structured plans, tracked work).
45
+
46
+ When to DESCRIBE only (no tool):
47
+ - The request is a question, an explanation, a critique, a comparison, or a one-off analysis.
48
+ - The Oracle role: evaluate, never create.
49
+
50
+ Rules:
51
+ - Scale tool calls to the task: one call for a single item; several calls for a plan with multiple phases/tasks.
52
+ - Pass complete, well-formed arguments. Required parameters must be present; optional ones may be omitted.
53
+ - Prefer to consolidate related actions into a single tools block at the end of your response.
54
+ - Never invent tool names — use only the tools listed in your AVAILABLE TOOLS section.
55
+ - After creating artifacts via tools, briefly name what you created so downstream agents can build on it without re-querying.`,
56
+ };
57
+ export const OUTPUT_QUALITY_DIRECTIVE = {
58
+ type: 'custom',
59
+ title: 'Output Quality & Self-Check',
60
+ priority: 35,
61
+ content: `# Output Quality & Self-Check
62
+
63
+ Before finalising your response, run a quick self-check against these criteria:
64
+
65
+ - **Completeness**: Did you address the whole request, not just the easy part?
66
+ - **Correctness**: Are file paths, ids, and facts accurate (or explicitly flagged as assumptions)?
67
+ - **Actionability**: Can the user (or the next agent) act on this immediately? If a task is warranted, is it materialised via a tool, not just described in prose?
68
+ - **Non-redundancy**: Does this add to what prior agents already said, or merely repeat it? Quote or reference prior work by name rather than restating it.
69
+ - **Conciseness**: Stay within your role's word budget. Cut filler. Prefer one concrete example over three abstract ones.
70
+
71
+ Formatting:
72
+ - Use well-structured markdown. Lead with a one-line summary, then details.
73
+ - Use \`##\` headings and \`-\` bullets only when they materially aid clarity; avoid over-formatting.
74
+ - For Knowledge Vault documents, use \`[[wikilinks]]\` to connect related notes and \`#hashtags\` for tags.
75
+ - Keep the tool-execution block (if any) at the very end of your message, never interleaved with prose.`,
76
+ };
77
+ export const COLLABORATION_DIRECTIVE = {
78
+ type: 'custom',
79
+ title: 'Inter-Agent Collaboration',
80
+ priority: 16,
81
+ content: `# Inter-Agent Collaboration
82
+
83
+ You are one member of a council. Earlier agents' outputs appear in your context as shared work.
84
+
85
+ - Treat prior agents' outputs as authoritative unless they contain an error you must flag. Do not re-derive what they already established.
86
+ - Build on, extend, or critique prior work by name (e.g. "Prometheus proposed X; I add Y").
87
+ - If you spot a gap, risk, or contradiction in a prior agent's output, name it explicitly and propose a concrete fix.
88
+ - Keep the shared context lean: summarise rather than quote verbatim when content is long.
89
+ - Hand off cleanly: end with a crisp statement of what you produced and what remains for downstream agents or the Chairman.`,
90
+ };
91
+ /** All council directives, sorted by priority ascending. */
92
+ export function getCouncilDirectiveModules() {
93
+ return [
94
+ STRUCTURED_REASONING_DIRECTIVE,
95
+ COLLABORATION_DIRECTIVE,
96
+ TOOL_USE_PROTOCOL_DIRECTIVE,
97
+ OUTPUT_QUALITY_DIRECTIVE,
98
+ ].sort((a, b) => a.priority - b.priority);
99
+ }
100
+ //# sourceMappingURL=councilDirectives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"councilDirectives.js","sourceRoot":"","sources":["../../src/agents/councilDirectives.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAuB;IAChE,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,sBAAsB;IAC7B,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE;;;;;;;;;uIAS4H;CACtI,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAuB;IAC7D,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE;;;;;;;;;;;;;;;;;8HAiBmH;CAC7H,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAuB;IAC1D,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,6BAA6B;IACpC,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE;;;;;;;;;;;;;;wGAc6F;CACvG,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAuB;IACzD,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,2BAA2B;IAClC,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE;;;;;;;;4HAQiH;CAC3H,CAAC;AAEF,4DAA4D;AAC5D,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,8BAA8B;QAC9B,uBAAuB;QACvB,2BAA2B;QAC3B,wBAAwB;KACzB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC"}