zelari-code 0.4.3 → 0.6.2

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 (58) hide show
  1. package/README.md +42 -0
  2. package/dist/cli/app.js +17 -12
  3. package/dist/cli/app.js.map +1 -1
  4. package/dist/cli/compaction.js.map +1 -1
  5. package/dist/cli/components/ChatStream.js +57 -10
  6. package/dist/cli/components/ChatStream.js.map +1 -1
  7. package/dist/cli/components/CollapsibleToolOutput.js +5 -0
  8. package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
  9. package/dist/cli/councilDispatcher.js +1 -1
  10. package/dist/cli/councilDispatcher.js.map +1 -1
  11. package/dist/cli/headless.js +137 -0
  12. package/dist/cli/headless.js.map +1 -0
  13. package/dist/cli/hooks/eventsToMessages.js +42 -11
  14. package/dist/cli/hooks/eventsToMessages.js.map +1 -1
  15. package/dist/cli/hooks/messageHelpers.js +65 -15
  16. package/dist/cli/hooks/messageHelpers.js.map +1 -1
  17. package/dist/cli/hooks/useBatchedMessages.js +67 -0
  18. package/dist/cli/hooks/useBatchedMessages.js.map +1 -0
  19. package/dist/cli/hooks/useChatTurn.js +97 -41
  20. package/dist/cli/hooks/useChatTurn.js.map +1 -1
  21. package/dist/cli/hooks/useSession.js +10 -1
  22. package/dist/cli/hooks/useSession.js.map +1 -1
  23. package/dist/cli/hooks/useSlashDispatch.js +4 -1
  24. package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
  25. package/dist/cli/main.bundled.js +15328 -14305
  26. package/dist/cli/main.bundled.js.map +4 -4
  27. package/dist/cli/main.js +86 -2
  28. package/dist/cli/main.js.map +1 -1
  29. package/dist/cli/provider/openai-compatible.js +9 -2
  30. package/dist/cli/provider/openai-compatible.js.map +1 -1
  31. package/dist/cli/runHeadless.js +160 -0
  32. package/dist/cli/runHeadless.js.map +1 -0
  33. package/dist/cli/sessionManager.js +1 -1
  34. package/dist/cli/sessionManager.js.map +1 -1
  35. package/dist/cli/skillSuggest.js +1 -1
  36. package/dist/cli/slashHandlers/branch.js +11 -2
  37. package/dist/cli/slashHandlers/branch.js.map +1 -1
  38. package/dist/cli/slashHandlers/git.js +0 -75
  39. package/dist/cli/slashHandlers/git.js.map +1 -1
  40. package/dist/cli/slashHandlers/promoteMember.js +25 -0
  41. package/dist/cli/slashHandlers/promoteMember.js.map +1 -0
  42. package/dist/cli/slashHandlers/transcript.js +13 -0
  43. package/dist/cli/slashHandlers/transcript.js.map +1 -0
  44. package/dist/cli/slashHandlers/updater.js +40 -0
  45. package/dist/cli/slashHandlers/updater.js.map +1 -0
  46. package/dist/cli/toolRegistry.js +6 -6
  47. package/dist/cli/toolRegistry.js.map +1 -1
  48. package/dist/cli/wizard/firstRun.js +63 -0
  49. package/dist/cli/wizard/firstRun.js.map +1 -0
  50. package/dist/cli/wizard/index.js +150 -0
  51. package/dist/cli/wizard/index.js.map +1 -0
  52. package/dist/cli/wizard/runWizard.js +137 -0
  53. package/dist/cli/wizard/runWizard.js.map +1 -0
  54. package/dist/cli/wizard/useWizardState.js +151 -0
  55. package/dist/cli/wizard/useWizardState.js.map +1 -0
  56. package/dist/cli/workspace/toolRegistry.js +2 -2
  57. package/dist/cli/workspace/toolRegistry.js.map +1 -1
  58. package/package.json +6 -1
@@ -29,8 +29,12 @@ export function appendUser(setMessages, content, ts = Date.now()) {
29
29
  * Append or extend the streaming assistant message. If the last message is
30
30
  * already a streaming assistant message, append `delta` to its content;
31
31
  * otherwise create a new one with a stable streaming id.
32
+ *
33
+ * When `memberName` is set (council-sourced messages), it's stamped on
34
+ * the message so the visible-reasoning UI can render `🜂 Caronte: …`
35
+ * headers above the streamed text.
32
36
  */
33
- export function appendOrExtendStreamingAssistant(setMessages, fullContent, ts) {
37
+ export function appendOrExtendStreamingAssistant(setMessages, fullContent, ts, memberContext) {
34
38
  setMessages((prev) => {
35
39
  const last = prev[prev.length - 1];
36
40
  if (last && last.role === 'assistant' && last.id.startsWith('streaming-')) {
@@ -38,23 +42,48 @@ export function appendOrExtendStreamingAssistant(setMessages, fullContent, ts) {
38
42
  }
39
43
  return [
40
44
  ...prev,
41
- { id: `streaming-${crypto.randomUUID()}`, role: 'assistant', content: fullContent, ts },
45
+ {
46
+ id: `streaming-${crypto.randomUUID()}`,
47
+ role: 'assistant',
48
+ content: fullContent,
49
+ ts,
50
+ ...(memberContext?.memberId ? { memberId: memberContext.memberId } : {}),
51
+ ...(memberContext?.memberName ? { memberName: memberContext.memberName } : {}),
52
+ },
42
53
  ];
43
54
  });
44
55
  }
45
- /** Append a tool invocation indicator (▶ name(args) or ✓/✗ result). */
46
- export function appendToolStart(setMessages, toolName, args, ts) {
47
- const argsPreview = JSON.stringify(args).slice(0, 120);
48
- appendSystem(setMessages, `▶ ${toolName}(${argsPreview})`, ts);
49
- }
50
- /** Append a tool result indicator. */
51
- export function appendToolEnd(setMessages, result, isError, durationMs, ts) {
52
- const preview = result.slice(0, 200);
53
- const icon = isError ? '✗' : '✓';
54
- appendSystem(setMessages, `${icon} ${preview}${result.length > 200 ? '…' : ''} (${durationMs}ms)`, ts);
56
+ /** Max chars of tool result kept for the expandable body. */
57
+ export const TOOL_RESULT_PREVIEW_CHARS = 600;
58
+ /** Max chars of the JSON args preview shown on the tool summary line. */
59
+ export const TOOL_ARGS_PREVIEW_CHARS = 120;
60
+ /**
61
+ * Append a tool invocation as a `role: 'tool'` message so ChatStream renders
62
+ * it via CollapsibleToolOutput (one status line per invocation, updated in
63
+ * place by {@link updateToolMessageEnd}) instead of loose system lines.
64
+ */
65
+ export function appendToolStart(setMessages, toolName, toolCallId, args, ts) {
66
+ const argsPreview = JSON.stringify(args)?.slice(0, TOOL_ARGS_PREVIEW_CHARS) ?? '';
67
+ setMessages((prev) => [
68
+ ...prev,
69
+ {
70
+ id: crypto.randomUUID(),
71
+ role: 'tool',
72
+ content: argsPreview,
73
+ ts,
74
+ toolName,
75
+ toolCallId,
76
+ toolOk: undefined,
77
+ toolDurationMs: undefined,
78
+ },
79
+ ]);
55
80
  }
56
- /** Update the matching `tool_execution_start` message with its end status. */
57
- export function updateToolMessageEnd(setMessages, toolCallId, isError, durationMs) {
81
+ /**
82
+ * Update the matching `tool_execution_start` message with its end status.
83
+ * The summary (args preview) is kept; the result is stored separately as the
84
+ * expandable body. Failed invocations auto-expand in ChatStream.
85
+ */
86
+ export function updateToolMessageEnd(setMessages, toolCallId, isError, durationMs, result) {
58
87
  setMessages((prev) => {
59
88
  for (let i = prev.length - 1; i >= 0; i--) {
60
89
  const m = prev[i];
@@ -64,7 +93,13 @@ export function updateToolMessageEnd(setMessages, toolCallId, isError, durationM
64
93
  ...m,
65
94
  toolOk: !isError,
66
95
  toolDurationMs: durationMs,
67
- content: `${m.toolName ?? 'tool'}${isError ? ' → error' : ' → ok'} (${durationMs}ms)`,
96
+ ...(result !== undefined
97
+ ? {
98
+ toolResult: result.length > TOOL_RESULT_PREVIEW_CHARS
99
+ ? `${result.slice(0, TOOL_RESULT_PREVIEW_CHARS)}…`
100
+ : result,
101
+ }
102
+ : {}),
68
103
  };
69
104
  return updated;
70
105
  }
@@ -72,4 +107,19 @@ export function updateToolMessageEnd(setMessages, toolCallId, isError, durationM
72
107
  return prev;
73
108
  });
74
109
  }
110
+ /**
111
+ * Seal the trailing streaming assistant message (if any) by dropping its
112
+ * `streaming-` id prefix. Called on `message_end` so the NEXT assistant
113
+ * message in the same turn (e.g. after a tool call) starts a fresh bubble
114
+ * instead of being merged into — or duplicated over — the previous one.
115
+ */
116
+ export function finalizeStreamingAssistant(setMessages) {
117
+ setMessages((prev) => {
118
+ const last = prev[prev.length - 1];
119
+ if (last && last.role === 'assistant' && last.id.startsWith('streaming-')) {
120
+ return [...prev.slice(0, -1), { ...last, id: last.id.slice('streaming-'.length) }];
121
+ }
122
+ return prev;
123
+ });
124
+ }
75
125
  //# sourceMappingURL=messageHelpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messageHelpers.js","sourceRoot":"","sources":["../../../src/cli/hooks/messageHelpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messageHelpers.js","sourceRoot":"","sources":["../../../src/cli/hooks/messageHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+ export function useBatchedMessages(messages, setMessages, cadenceMs = 16) {
3
+ // Composed pending updater, or `null` when nothing is buffered.
4
+ const pendingRef = useRef(null);
5
+ // Active throttle-window timer handle, or `null` when not throttling.
6
+ const timerRef = useRef(null);
7
+ /**
8
+ * Apply the current pending updater to state, ignoring/clearing the timer.
9
+ * Used as the synchronous public drain (stream end) and internally.
10
+ */
11
+ const flush = useCallback(() => {
12
+ if (timerRef.current !== null) {
13
+ clearTimeout(timerRef.current);
14
+ timerRef.current = null;
15
+ }
16
+ const pending = pendingRef.current;
17
+ pendingRef.current = null;
18
+ if (pending !== null) {
19
+ setMessages(pending);
20
+ }
21
+ }, [setMessages]);
22
+ const commit = useCallback((update) => {
23
+ // Compose this update onto any pending one, preserving arrival order.
24
+ const head = pendingRef.current;
25
+ pendingRef.current =
26
+ head === null
27
+ ? update
28
+ : (state) => {
29
+ const intermediate = typeof head === 'function' ? head(state) : head;
30
+ return typeof update === 'function' ? update(intermediate) : update;
31
+ };
32
+ if (timerRef.current === null) {
33
+ // Leading edge: not currently throttling. Flush immediately so the
34
+ // first token renders with no latency, then open a throttle window.
35
+ const leading = pendingRef.current;
36
+ pendingRef.current = null;
37
+ if (leading !== null) {
38
+ setMessages(leading);
39
+ }
40
+ timerRef.current = setTimeout(() => {
41
+ timerRef.current = null;
42
+ // Trailing edge: flush anything that accumulated during the window
43
+ // as a single render. Do NOT re-arm — the next commit starts a new
44
+ // leading edge.
45
+ const tail = pendingRef.current;
46
+ pendingRef.current = null;
47
+ if (tail !== null) {
48
+ setMessages(tail);
49
+ }
50
+ }, cadenceMs);
51
+ }
52
+ // else: inside a throttle window — the trailing handler above will
53
+ // catch the buffered update when the window closes.
54
+ }, [cadenceMs, setMessages]);
55
+ // On unmount: cancel any pending timer. Do NOT flush — teardown means the
56
+ // display is going away, and persisted state lives in the JSONL writer.
57
+ useEffect(() => {
58
+ return () => {
59
+ if (timerRef.current !== null) {
60
+ clearTimeout(timerRef.current);
61
+ timerRef.current = null;
62
+ }
63
+ };
64
+ }, []);
65
+ return { messages, commit, flush, setMessages };
66
+ }
67
+ //# sourceMappingURL=useBatchedMessages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBatchedMessages.js","sourceRoot":"","sources":["../../../src/cli/hooks/useBatchedMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAkDvD,MAAM,UAAU,kBAAkB,CAChC,QAAuB,EACvB,WAAgE,EAChE,YAAoB,EAAE;IAEtB,gEAAgE;IAChE,MAAM,UAAU,GAAG,MAAM,CAA6C,IAAI,CAAC,CAAC;IAC5E,sEAAsE;IACtE,MAAM,QAAQ,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAEpE;;;OAGG;IACH,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9B,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,WAAW,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,MAA2C,EAAE,EAAE;QAC9C,sEAAsE;QACtE,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;QAChC,UAAU,CAAC,OAAO;YAChB,IAAI,KAAK,IAAI;gBACX,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC,KAAoB,EAAE,EAAE;oBACvB,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBACrE,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtE,CAAC,CAAC;QAER,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9B,mEAAmE;YACnE,oEAAoE;YACpE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;YACnC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,WAAW,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YACD,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;gBACxB,mEAAmE;gBACnE,mEAAmE;gBACnE,gBAAgB;gBAChB,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;gBAChC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC1B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,WAAW,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC;QACD,mEAAmE;QACnE,oDAAoD;IACtD,CAAC,EACD,CAAC,SAAS,EAAE,WAAW,CAAC,CACzB,CAAC;IAEF,0EAA0E;IAC1E,wEAAwE;IACxE,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC9B,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC/B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAClD,CAAC"}
@@ -1,17 +1,17 @@
1
1
  // @ts-nocheck — pre-existing strict-mode type narrowing issues carried over
2
2
  // from app.tsx. Runtime is correct; tighten signatures in a follow-up.
3
3
  import { useState, useRef, useCallback } from 'react';
4
- import { AgentHarness } from '../../main/core/AgentHarness.js';
4
+ import { AgentHarness } from '@zelari/core/harness';
5
5
  import { getMetricsLogger } from '../metrics.js';
6
6
  import { openaiCompatibleProvider, providerFromEnv, providerConfigFor } from '../provider/openai-compatible.js';
7
7
  import { providerFailover } from '../providerFailover.js';
8
8
  import { resolveFailoverStream } from '../crossProviderFailover.js';
9
9
  import { PROVIDERS } from '../keyStore.js';
10
10
  import { createBuiltinToolRegistry } from '../toolRegistry.js';
11
- import { appendOrExtendStreamingAssistant, appendSystem, appendToolEnd, appendToolStart, updateToolMessageEnd, } from './messageHelpers.js';
11
+ import { appendOrExtendStreamingAssistant, appendSystem, appendToolStart, finalizeStreamingAssistant, updateToolMessageEnd, } from './messageHelpers.js';
12
12
  import { computeSessionStatsDelta } from './chatStats.js';
13
13
  export function useChatTurn(params) {
14
- const { sessionId, writerRef, setMessages, setBusy, setSessionActive, setSessionStats } = params;
14
+ const { sessionId, writerRef, setMessages, commitStreaming, flushStreaming, setBusy, setSessionActive, setSessionStats } = params;
15
15
  const harnessRef = useRef(null);
16
16
  const [queueCount, setQueueCount] = useState(0);
17
17
  const dispatchPrompt = useCallback(async (userText) => {
@@ -43,7 +43,9 @@ export function useChatTurn(params) {
43
43
  buildStream: (config) => openaiCompatibleProvider(config),
44
44
  });
45
45
  if (failoverResolution.warning) {
46
- console.warn(failoverResolution.warning);
46
+ // Surface in the chat instead of console.warn: writes that bypass
47
+ // Ink force a full repaint of the TUI frame (visible flicker).
48
+ appendSystem(setMessages, `[failover] ${failoverResolution.warning}`);
47
49
  }
48
50
  const providerStream = failoverResolution.fallbackLabel
49
51
  ? providerFailover({
@@ -94,13 +96,29 @@ export function useChatTurn(params) {
94
96
  });
95
97
  harnessRef.current = harness;
96
98
  setQueueCount(harness.queueLength);
99
+ // Total assistant output across the whole turn — feeds the token/cost
100
+ // estimate fallback in computeSessionStatsDelta.
97
101
  let assistantContent = '';
102
+ // Display buffer for the CURRENT streamed message only. Reset on every
103
+ // message_end: without this, the post-tool-call message re-rendered the
104
+ // full accumulated turn text, duplicating everything said before the
105
+ // tool ran.
106
+ let streamContent = '';
107
+ // tool_execution_end doesn't carry toolName — remember it from the
108
+ // matching start event (keyed by toolCallId) for metrics.
109
+ const toolNameById = new Map();
98
110
  const metrics = getMetricsLogger();
99
111
  let realUsage = null;
100
112
  try {
101
113
  for await (const event of harness.run()) {
102
- if (event.type === 'message_end' && event.usage) {
103
- realUsage = event.usage;
114
+ if (event.type === 'message_end') {
115
+ if (event.usage)
116
+ realUsage = event.usage;
117
+ // Message boundary: drain buffered deltas, then seal the streamed
118
+ // bubble so the next message starts fresh instead of merging.
119
+ flushStreaming();
120
+ finalizeStreamingAssistant(setMessages);
121
+ streamContent = '';
104
122
  }
105
123
  if (event.type === 'queue_update') {
106
124
  setQueueCount(harness.queueLength);
@@ -133,7 +151,7 @@ export function useChatTurn(params) {
133
151
  sessionId,
134
152
  provider: envConfig.providerId,
135
153
  model: envConfig.model,
136
- toolName: event.toolName,
154
+ toolName: toolNameById.get(event.toolCallId) ?? 'unknown',
137
155
  toolCallId: event.toolCallId,
138
156
  durationMs: event.durationMs,
139
157
  ok: !event.isError,
@@ -141,26 +159,39 @@ export function useChatTurn(params) {
141
159
  }
142
160
  if (event.type === 'message_delta') {
143
161
  assistantContent += event.delta;
144
- appendOrExtendStreamingAssistant(setMessages, assistantContent, Date.now());
162
+ streamContent += event.delta;
163
+ // Route through the throttled setter so per-token deltas (50-200/sec)
164
+ // coalesce into ≤60 renders/sec instead of flickering the TUI.
165
+ // v0.5.0: forward the council member identity when present so
166
+ // the UI can render `🜂 Caronte: …` headers.
167
+ appendOrExtendStreamingAssistant(commitStreaming, streamContent, Date.now(), {
168
+ ...(event.memberId ? { memberId: event.memberId } : {}),
169
+ ...(event.memberName ? { memberName: event.memberName } : {}),
170
+ });
145
171
  }
146
172
  else if (event.type === 'error') {
173
+ flushStreaming();
147
174
  appendSystem(setMessages, `[error] ${event.message}`, Date.now());
148
175
  }
149
- else if (event.type === 'tool_call') {
150
- appendSystem(setMessages, `[tool_call] ${event.toolName}(${JSON.stringify(event.arguments).slice(0, 80)})`, event.ts);
151
- }
152
- else if (event.type === 'tool_result') {
153
- appendSystem(setMessages, `[tool_result] ${event.toolName} → ${event.ok ? 'ok' : 'error'}`, event.ts);
154
- }
155
176
  else if (event.type === 'tool_execution_start') {
156
- appendToolStart(setMessages, event.toolName, event.args, event.ts);
177
+ toolNameById.set(event.toolCallId, event.toolName);
178
+ // Drain buffered deltas FIRST so the text streamed before the
179
+ // call renders above the tool line, not below it — then seal
180
+ // that bubble: it's complete once the model starts calling tools.
181
+ flushStreaming();
182
+ finalizeStreamingAssistant(setMessages);
183
+ appendToolStart(setMessages, event.toolName, event.toolCallId, event.args, event.ts);
157
184
  }
158
185
  else if (event.type === 'tool_execution_end') {
159
- appendToolEnd(setMessages, event.result, event.isError, event.durationMs, event.ts);
186
+ updateToolMessageEnd(setMessages, event.toolCallId, event.isError, event.durationMs, event.result);
160
187
  }
161
188
  }
162
189
  }
163
190
  finally {
191
+ // Drain any buffered streaming deltas so the final assistant message
192
+ // is committed before busy flips to false (and the input re-enables).
193
+ flushStreaming();
194
+ finalizeStreamingAssistant(setMessages);
164
195
  harnessRef.current = null;
165
196
  setQueueCount(0);
166
197
  setBusy(false);
@@ -172,19 +203,24 @@ export function useChatTurn(params) {
172
203
  // resolveFailoverStream / AgentHarness construction that were
173
204
  // previously escaping the function unhandled. Surfaces the error
174
205
  // to the chat instead of hanging silently.
206
+ // Flush first so any partial assistant content streamed before the
207
+ // throw is committed before the error message renders.
208
+ flushStreaming();
175
209
  appendSystem(setMessages, `[dispatch error] ${err instanceof Error ? err.message : String(err)}`);
176
210
  setBusy(false);
177
211
  }
178
- }, [sessionId, writerRef, setMessages, setBusy, setSessionActive, setSessionStats]);
212
+ }, [sessionId, writerRef, setMessages, commitStreaming, flushStreaming, setBusy, setSessionActive, setSessionStats]);
179
213
  const dispatchCouncilPrompt = useCallback(async (text) => {
180
214
  await dispatchCouncilPromptImpl(text, {
181
215
  sessionId,
182
216
  writerRef,
183
217
  setMessages,
218
+ commitStreaming,
219
+ flushStreaming,
184
220
  setBusy,
185
221
  setQueueCount,
186
222
  });
187
- }, [sessionId, writerRef, setMessages, setBusy, setQueueCount]);
223
+ }, [sessionId, writerRef, setMessages, commitStreaming, flushStreaming, setBusy, setQueueCount]);
188
224
  return { dispatchPrompt, dispatchCouncilPrompt, harnessRef, queueCount, setQueueCount };
189
225
  }
190
226
  /**
@@ -199,7 +235,7 @@ export function useChatTurn(params) {
199
235
  * useChatTurn wrapper.
200
236
  */
201
237
  async function dispatchCouncilPromptImpl(text, deps) {
202
- const { sessionId, writerRef, setMessages, setBusy } = deps;
238
+ const { sessionId, writerRef, setMessages, commitStreaming, flushStreaming, setBusy } = deps;
203
239
  const envConfig = await providerFromEnv();
204
240
  if (!envConfig) {
205
241
  appendSystem(setMessages, 'OPENAI_API_KEY not set. Export it before invoking /council.');
@@ -210,7 +246,7 @@ async function dispatchCouncilPromptImpl(text, deps) {
210
246
  const { dispatchCouncil } = await import('../councilDispatcher.js');
211
247
  const { createWorkspaceContext, createWorkspaceStubs } = await import('../workspace/stubs.js');
212
248
  const { createWorkspaceToolRegistry } = await import('../workspace/toolRegistry.js');
213
- const { setWorkspaceStubs } = await import('../../agents/tools.js');
249
+ const { setWorkspaceStubs } = await import('@zelari/core/skills');
214
250
  const { runPostCouncilHook } = await import('../workspace/postCouncilHook.js');
215
251
  const { FeedbackStore } = await import('../councilFeedback.js');
216
252
  const { registry: councilToolRegistry } = createBuiltinToolRegistry();
@@ -237,48 +273,68 @@ async function dispatchCouncilPromptImpl(text, deps) {
237
273
  await writerRef.current.append(event);
238
274
  }
239
275
  if (event.type === 'message_delta') {
240
- // Coalesce streaming assistant content
241
- setMessages((prev) => {
276
+ // Coalesce streaming assistant content through the throttled setter so
277
+ // per-token deltas don't flicker the TUI (same as dispatchPrompt).
278
+ // v0.5.0: forward the council member identity when present so
279
+ // the UI can render `🜂 Caronte: …` headers above the streamed
280
+ // text. Extend the trailing streaming bubble only when it belongs
281
+ // to the SAME member — otherwise one specialist's text would be
282
+ // appended to (and attributed to) the previous one.
283
+ commitStreaming((prev) => {
242
284
  const last = prev[prev.length - 1];
243
- if (last && last.role === 'assistant' && last.id.startsWith('streaming-')) {
285
+ if (last &&
286
+ last.role === 'assistant' &&
287
+ last.id.startsWith('streaming-') &&
288
+ (last.memberId ?? null) === (event.memberId ?? null)) {
244
289
  return [...prev.slice(0, -1), { ...last, content: last.content + event.delta }];
245
290
  }
246
291
  return [
247
292
  ...prev,
248
- { id: `streaming-${crypto.randomUUID()}`, role: 'assistant', content: event.delta, ts: event.ts },
293
+ {
294
+ id: `streaming-${crypto.randomUUID()}`,
295
+ role: 'assistant',
296
+ content: event.delta,
297
+ ts: event.ts,
298
+ ...(event.memberId ? { memberId: event.memberId } : {}),
299
+ ...(event.memberName ? { memberName: event.memberName } : {}),
300
+ },
249
301
  ];
250
302
  });
251
303
  }
304
+ else if (event.type === 'message_end') {
305
+ // Member/turn boundary: drain buffered deltas and seal the bubble so
306
+ // the next streamed message starts fresh.
307
+ flushStreaming();
308
+ finalizeStreamingAssistant(setMessages);
309
+ }
252
310
  else if (event.type === 'tool_execution_start') {
253
- const argsPreview = JSON.stringify(event.args).slice(0, 120);
254
- appendSystem(setMessages, `▶ ${event.toolName}(${argsPreview})`, event.ts);
255
- // Also surface as 'tool' role for CollapsibleToolOutput rendering.
256
- setMessages((prev) => [
257
- ...prev,
258
- {
259
- id: crypto.randomUUID(),
260
- role: 'tool',
261
- content: `${event.toolName}(${argsPreview})`,
262
- ts: event.ts,
263
- toolName: event.toolName,
264
- toolCallId: event.toolCallId,
265
- toolOk: undefined,
266
- toolDurationMs: undefined,
267
- },
268
- ]);
311
+ // Single 'tool' role message per invocation (CollapsibleToolOutput);
312
+ // the previous extra `▶ name(args)` system line duplicated it.
313
+ // Drain buffered deltas first so ordering matches reality, and seal
314
+ // the pre-tool bubble (complete once the member starts calling tools).
315
+ flushStreaming();
316
+ finalizeStreamingAssistant(setMessages);
317
+ appendToolStart(setMessages, event.toolName, event.toolCallId, event.args, event.ts);
269
318
  }
270
319
  else if (event.type === 'tool_execution_end') {
271
- updateToolMessageEnd(setMessages, event.toolCallId, event.isError, event.durationMs);
320
+ updateToolMessageEnd(setMessages, event.toolCallId, event.isError, event.durationMs, event.result);
272
321
  }
273
322
  else if (event.type === 'error') {
323
+ flushStreaming();
274
324
  appendSystem(setMessages, `[error] ${event.message}`, event.ts);
275
325
  }
276
326
  }
277
327
  }
278
328
  catch (err) {
329
+ // Flush any partial streamed content before the error message renders.
330
+ flushStreaming();
279
331
  appendSystem(setMessages, `[council error] ${err instanceof Error ? err.message : String(err)}`, Date.now());
280
332
  }
281
333
  finally {
334
+ // Drain any buffered streaming deltas before status messages / busy flip,
335
+ // so the final council output is committed to the chat.
336
+ flushStreaming();
337
+ finalizeStreamingAssistant(setMessages);
282
338
  try {
283
339
  const hook = await runPostCouncilHook(workspaceCtx);
284
340
  if (hook.ran && hook.changed) {
@@ -1 +1 @@
1
- {"version":3,"file":"useChatTurn.js","sourceRoot":"","sources":["../../../src/cli/hooks/useChatTurn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useChatTurn.js","sourceRoot":"","sources":["../../../src/cli/hooks/useChatTurn.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,20 @@
2
2
  // from app.tsx. Runtime is correct; tighten signatures in a follow-up.
3
3
  import { useState, useRef, useCallback, useEffect } from 'react';
4
4
  import { getCurrentSessionId, setCurrentSessionId, clearCurrentSessionId, newSessionId, ensureSessionDir, listSessions, loadSessionEvents, } from '../sessionManager.js';
5
- import { SessionJsonlWriter } from '../../main/core/sessionJsonl.js';
5
+ import { SessionJsonlWriter } from '@zelari/core/harness';
6
6
  import { eventsToMessages } from './eventsToMessages.js';
7
+ import { useBatchedMessages } from './useBatchedMessages.js';
7
8
  export function useSession() {
8
9
  const [sessionId, setSessionId] = useState('');
9
10
  const [messages, setMessages] = useState([]);
10
11
  const [sessionActive, setSessionActive] = useState(false);
11
12
  const writerRef = useRef(null);
13
+ // Throttle layer over `messages`/`setMessages`. `commitStreaming` coalesces
14
+ // the per-token streaming deltas (the LLM emits ~50-200/sec) into at most
15
+ // one render per ~16ms, which lets `React.memo(ChatStream)` finally take
16
+ // effect. `setMessages` is the passthrough — non-streaming calls (bootstrap
17
+ // restore, /new reset, system/error messages) apply instantly.
18
+ const { commit: commitStreaming, flush: flushStreaming } = useBatchedMessages(messages, setMessages);
12
19
  // Bootstrap on mount: resume current session or create new one.
13
20
  useEffect(() => {
14
21
  let cancelled = false;
@@ -98,6 +105,8 @@ export function useSession() {
98
105
  setSessionId,
99
106
  messages,
100
107
  setMessages,
108
+ commitStreaming,
109
+ flushStreaming,
101
110
  sessionActive,
102
111
  setSessionActive,
103
112
  writerRef,
@@ -1 +1 @@
1
- {"version":3,"file":"useSession.js","sourceRoot":"","sources":["../../../src/cli/hooks/useSession.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSession.js","sourceRoot":"","sources":["../../../src/cli/hooks/useSession.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,uEAAuE;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAoC7D,MAAM,UAAU,UAAU;IACxB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,CAA4B,IAAI,CAAC,CAAC;IAE1D,4EAA4E;IAC5E,0EAA0E;IAC1E,yEAAyE;IACzE,4EAA4E;IAC5E,+DAA+D;IAC/D,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAErG,gEAAgE;IAChE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,gBAAgB,EAAE,CAAC;YACzB,IAAI,EAAE,GAAG,mBAAmB,EAAE,CAAC;YAC/B,IAAI,gBAAgB,GAAkB,EAAE,CAAC;YACzC,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;oBAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBAC9C,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,gDAAgD;oBAChD,EAAE,GAAG,IAAI,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,EAAE,GAAG,YAAY,EAAE,CAAC;gBACpB,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,SAAS;gBAAE,OAAO;YACtB,SAAS,CAAC,OAAO,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC/C,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,WAAW,CAAC,gBAAgB,CAAC,CAAC;YAC9B,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACpB,GAAG,IAAI;oBACP;wBACE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;wBACvB,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,mBAAmB,gBAAgB,CAAC,MAAM,0BAA0B,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;wBAC9F,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;qBACf;iBACF,CAAC,CAAC;gBACH,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,oCAAoC;YACpC,KAAK,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP;;;OAGG;IACH,MAAM,iBAAiB,GAAG,WAAW,CACnC,KAAK,EAAE,IAAkC,EAAE,eAAwB,EAAmB,EAAE;QACtF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;gBACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,6BAA6B,CAAC;gBAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC5C,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5E,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,YAAY,EAAE,EAAE,CAAC;gBACjE,CAAC,CAAC,CAAC;gBACH,OAAO,sBAAsB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,QAAQ,CAAC,MAAM,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3G,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACjF,CAAC;QACH,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,IAAI,eAAe,EAAE,CAAC;YACzC,mBAAmB,CAAC,eAAe,CAAC,CAAC;YACrC,OAAO,oBAAoB,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,mDAAmD,CAAC;QAC5G,CAAC;QACD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,qBAAqB,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;YAC1B,mBAAmB,CAAC,EAAE,CAAC,CAAC;YACxB,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC3B,SAAS,CAAC,OAAO,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC/C,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,WAAW,CAAC,EAAE,CAAC,CAAC;YAChB,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,IAAI,WAAW,CAAC;IAC7B,CAAC,EACD,EAAE,CACH,CAAC;IAEF,OAAO;QACL,SAAS;QACT,YAAY;QACZ,QAAQ;QACR,WAAW;QACX,eAAe;QACf,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,SAAS;QACT,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
@@ -5,7 +5,10 @@ import { handleSlashCommand } from '../slashCommands.js';
5
5
  import { appendSystem, appendUser } from './messageHelpers.js';
6
6
  import { sessionKindRouter } from '../sessionManager.js';
7
7
  import { newSessionId } from '../sessionManager.js';
8
- import { handleDiff, handleUndo, handleCompact, handleUpdateCheck, handleUpdatePerform, handlePromoteMember, } from '../slashHandlers/git.js';
8
+ import { handleDiff, handleUndo } from '../slashHandlers/git.js';
9
+ import { handleCompact } from '../slashHandlers/transcript.js';
10
+ import { handleUpdateCheck, handleUpdatePerform } from '../slashHandlers/updater.js';
11
+ import { handlePromoteMember } from '../slashHandlers/promoteMember.js';
9
12
  import { handleBranchCreate, handleBranchList, handleBranchCheckout, } from '../slashHandlers/branch.js';
10
13
  import { handleWorkspaceShow, handleWorkspaceSync, handleWorkspaceReset, } from '../slashHandlers/workspace.js';
11
14
  import { handleProviderList, handleProviderSet, handleProviderCustom, handleProviderRefresh, handleProviderStatus, handleLoginKey, handleLoginOAuthGrok, handleModelShow, handleModelSet, handleModelsList, handleModelsRefresh, } from '../slashHandlers/provider.js';