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.
- package/README.md +42 -0
- package/dist/cli/app.js +17 -12
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/compaction.js.map +1 -1
- package/dist/cli/components/ChatStream.js +57 -10
- package/dist/cli/components/ChatStream.js.map +1 -1
- package/dist/cli/components/CollapsibleToolOutput.js +5 -0
- package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
- package/dist/cli/councilDispatcher.js +1 -1
- package/dist/cli/councilDispatcher.js.map +1 -1
- package/dist/cli/headless.js +137 -0
- package/dist/cli/headless.js.map +1 -0
- package/dist/cli/hooks/eventsToMessages.js +42 -11
- package/dist/cli/hooks/eventsToMessages.js.map +1 -1
- package/dist/cli/hooks/messageHelpers.js +65 -15
- package/dist/cli/hooks/messageHelpers.js.map +1 -1
- package/dist/cli/hooks/useBatchedMessages.js +67 -0
- package/dist/cli/hooks/useBatchedMessages.js.map +1 -0
- package/dist/cli/hooks/useChatTurn.js +97 -41
- package/dist/cli/hooks/useChatTurn.js.map +1 -1
- package/dist/cli/hooks/useSession.js +10 -1
- package/dist/cli/hooks/useSession.js.map +1 -1
- package/dist/cli/hooks/useSlashDispatch.js +4 -1
- package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
- package/dist/cli/main.bundled.js +15328 -14305
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/main.js +86 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/provider/openai-compatible.js +9 -2
- package/dist/cli/provider/openai-compatible.js.map +1 -1
- package/dist/cli/runHeadless.js +160 -0
- package/dist/cli/runHeadless.js.map +1 -0
- package/dist/cli/sessionManager.js +1 -1
- package/dist/cli/sessionManager.js.map +1 -1
- package/dist/cli/skillSuggest.js +1 -1
- package/dist/cli/slashHandlers/branch.js +11 -2
- package/dist/cli/slashHandlers/branch.js.map +1 -1
- package/dist/cli/slashHandlers/git.js +0 -75
- package/dist/cli/slashHandlers/git.js.map +1 -1
- package/dist/cli/slashHandlers/promoteMember.js +25 -0
- package/dist/cli/slashHandlers/promoteMember.js.map +1 -0
- package/dist/cli/slashHandlers/transcript.js +13 -0
- package/dist/cli/slashHandlers/transcript.js.map +1 -0
- package/dist/cli/slashHandlers/updater.js +40 -0
- package/dist/cli/slashHandlers/updater.js.map +1 -0
- package/dist/cli/toolRegistry.js +6 -6
- package/dist/cli/toolRegistry.js.map +1 -1
- package/dist/cli/wizard/firstRun.js +63 -0
- package/dist/cli/wizard/firstRun.js.map +1 -0
- package/dist/cli/wizard/index.js +150 -0
- package/dist/cli/wizard/index.js.map +1 -0
- package/dist/cli/wizard/runWizard.js +137 -0
- package/dist/cli/wizard/runWizard.js.map +1 -0
- package/dist/cli/wizard/useWizardState.js +151 -0
- package/dist/cli/wizard/useWizardState.js.map +1 -0
- package/dist/cli/workspace/toolRegistry.js +2 -2
- package/dist/cli/workspace/toolRegistry.js.map +1 -1
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
|
|
9
9
|
**Zelari Code** is a standalone CLI extracted from [AnathemaBrain](https://github.com/N-THEM-Studio/AnathemaBrain). It brings the multi-agent council (Caronte, Nettuno, Gerione, Plutone, Minosse, Lucifero) directly into your terminal with a rich TUI (Ink + React), slash command system, and provider-agnostic LLM streaming (OpenAI-compatible, xAI Grok with OAuth, GLM/Z.AI).
|
|
10
10
|
|
|
11
|
+
> **Upgrading from ≤ 0.4.x?** See [MIGRATION.md](./MIGRATION.md) — the internal
|
|
12
|
+
> `src/main/core/`, `src/agents/`, `src/shared/`, `src/types/` paths no longer
|
|
13
|
+
> exist. The published core package is `@zelari/core` (MIT). 9 subpath exports.
|
|
14
|
+
|
|
11
15
|
## Install
|
|
12
16
|
|
|
13
17
|
```bash
|
|
@@ -35,6 +39,44 @@ source ~/.bashrc
|
|
|
35
39
|
|
|
36
40
|
Verify the fix: `where zelari-code` (CMD) or `which zelari-code` (Bash) should print a path.
|
|
37
41
|
|
|
42
|
+
## First Run
|
|
43
|
+
|
|
44
|
+
The first time you run `zelari-code` (or whenever your provider config
|
|
45
|
+
is missing), the CLI launches a 5-step onboarding wizard instead of
|
|
46
|
+
the regular TUI:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
╭─────────────────────────────────────────────────╮
|
|
50
|
+
│ zelari-code v0.6.0 — first-time setup │
|
|
51
|
+
│ 1/welcome 2/provider 3/model 4/apikey 5/...│
|
|
52
|
+
│ │
|
|
53
|
+
│ Welcome! Let's get you coding in under 2 min. │
|
|
54
|
+
│ Press [Enter] to continue, [Q] to quit. │
|
|
55
|
+
╰─────────────────────────────────────────────────╯
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The wizard walks you through:
|
|
59
|
+
|
|
60
|
+
1. **Welcome** — overview + how to quit.
|
|
61
|
+
2. **Provider** — pick from `grok`, `minimax`, `glm`, `openai-compatible` (↑/↓ + Enter).
|
|
62
|
+
3. **Model** — type a model name or accept the default (Enter).
|
|
63
|
+
4. **API key** — choose `env` (use `GROK_API_KEY` etc.), `keystore` (save locally), or `skip` (set later via `/login`).
|
|
64
|
+
5. **Confirm** — review + Enter to commit.
|
|
65
|
+
|
|
66
|
+
When you press Enter on confirm, the wizard writes `~/.tmp/zelari-code/provider.json` (and `keys.json` if you chose keystore), shows a brief "✓ Setup complete!" banner, **then transparently transitions into the regular TUI** — no need to re-launch.
|
|
67
|
+
|
|
68
|
+
### Skipping / re-running
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
zelari-code --no-wizard # skip wizard even on first run
|
|
72
|
+
zelari-code --reset-config # force re-run wizard (clears provider.json)
|
|
73
|
+
ZELARI_NO_WIZARD=1 zelari-code # env equivalent of --no-wizard
|
|
74
|
+
zelari-code --version # print version + exit (no TUI)
|
|
75
|
+
zelari-code --help # print help + exit (no TUI)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The wizard re-runs automatically if `provider.json` is missing on the next launch.
|
|
79
|
+
|
|
38
80
|
## Quick Start
|
|
39
81
|
|
|
40
82
|
```bash
|
package/dist/cli/app.js
CHANGED
|
@@ -9,16 +9,16 @@ import { ChatStream } from './components/ChatStream.js';
|
|
|
9
9
|
import { InputBar } from './components/InputBar.js';
|
|
10
10
|
import { Sidebar } from './components/Sidebar.js';
|
|
11
11
|
import { formatSkillList } from './slashCommands.js';
|
|
12
|
-
import { listCodingSkills } from '
|
|
13
|
-
import '
|
|
14
|
-
import '
|
|
15
|
-
import '
|
|
16
|
-
import '
|
|
17
|
-
import '
|
|
18
|
-
import '
|
|
19
|
-
import '
|
|
12
|
+
import { listCodingSkills } from '@zelari/core/skills';
|
|
13
|
+
import '@zelari/core/skills/builtin/debugging';
|
|
14
|
+
import '@zelari/core/skills/builtin/docs';
|
|
15
|
+
import '@zelari/core/skills/builtin/git-ops';
|
|
16
|
+
import '@zelari/core/skills/builtin/planning';
|
|
17
|
+
import '@zelari/core/skills/builtin/refactoring';
|
|
18
|
+
import '@zelari/core/skills/builtin/review';
|
|
19
|
+
import '@zelari/core/skills/builtin/testing';
|
|
20
20
|
import { getProviderConfig, getActiveProvider as getActiveProviderSpec, } from './providerConfig.js';
|
|
21
|
-
import { SessionJsonlWriter } from '
|
|
21
|
+
import { SessionJsonlWriter } from '@zelari/core/harness';
|
|
22
22
|
import { useTerminalSize } from './hooks/useTerminalSize.js';
|
|
23
23
|
import { useSession } from './hooks/useSession.js';
|
|
24
24
|
import { useChatTurn } from './hooks/useChatTurn.js';
|
|
@@ -62,6 +62,8 @@ export function App() {
|
|
|
62
62
|
sessionId: session.sessionId,
|
|
63
63
|
writerRef: session.writerRef,
|
|
64
64
|
setMessages: session.setMessages,
|
|
65
|
+
commitStreaming: session.commitStreaming,
|
|
66
|
+
flushStreaming: session.flushStreaming,
|
|
65
67
|
setBusy,
|
|
66
68
|
setSessionActive: session.setSessionActive,
|
|
67
69
|
setSessionStats,
|
|
@@ -100,10 +102,13 @@ export function App() {
|
|
|
100
102
|
const skills = useMemo(() => listCodingSkills(), []);
|
|
101
103
|
const skillList = useMemo(() => formatSkillList(skills), [skills]);
|
|
102
104
|
const isSlashMode = input.startsWith('/');
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
// ChatStream's real box width: total minus the 40-col Sidebar. The message
|
|
106
|
+
// height estimator subtracts its own padding/margins from this, so pass the
|
|
107
|
+
// actual box width (the old -44 double-counted the padding).
|
|
108
|
+
const chatWidth = Math.max(20, size.columns - 40);
|
|
109
|
+
return (React.createElement(Box, { flexDirection: "column", width: size.columns, height: size.rows, overflow: "hidden" },
|
|
105
110
|
React.createElement(Header, { model: activeModel, provider: activeProviderSpec.id, skillCount: skills.length, sessionActive: session.sessionActive, sessionId: session.sessionId ? session.sessionId.slice(0, 8) : '...', totalTokens: sessionStats.totalTokens, totalCostUsd: sessionStats.totalCostUsd }),
|
|
106
|
-
React.createElement(Box, { flexDirection: "row", height: size.rows - 6 },
|
|
111
|
+
React.createElement(Box, { flexDirection: "row", height: size.rows - 6, overflow: "hidden" },
|
|
107
112
|
React.createElement(ChatStream, { messages: session.messages, height: size.rows - 6, width: chatWidth }),
|
|
108
113
|
React.createElement(Sidebar, { skillList: skillList, sessionCount: session.messages.length, isSlashMode: isSlashMode, height: size.rows - 6 })),
|
|
109
114
|
React.createElement(InputBar, { value: input, onChange: setInput, onSubmit: handleSubmit, disabled: busy })));
|
package/dist/cli/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.tsx"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,+EAA+E;AAC/E,yEAAyE;AACzE,wCAAwC;AACxC,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,yCAAyC,CAAC;AACjD,OAAO,oCAAoC,CAAC;AAC5C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,IAAI,qBAAqB,GAC3C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.tsx"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,+EAA+E;AAC/E,yEAAyE;AACzE,wCAAwC;AACxC,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,yCAAyC,CAAC;AACjD,OAAO,oCAAoC,CAAC;AAC5C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,IAAI,qBAAqB,GAC3C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,QAAQ,CAAC;AACnD,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AAErC;;;GAGG;AACH,MAAM,gBAAgB,GAA2B;IAC/C,mBAAmB,EAAE,QAAQ;IAC7B,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,qBAAqB;IAChC,KAAK,EAAE,SAAS;CACjB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,GAAG;IACjB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAChF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;IAEtF,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IACnD,MAAM,WAAW,GAAG,cAAc,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAE1E,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAE/B,MAAM,QAAQ,GAAG,WAAW,CAAC;QAC3B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,OAAO;QACP,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,eAAe;KAChB,CAAC,CAAC;IAEH,sEAAsE;IACtE,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAC9C,KAAK,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACxC,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAExB,wEAAwE;IACxE,wDAAwD;IACxD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,KAAK,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACxC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAExB,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACpC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,CAAC;QAC7C,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ;QACR,OAAO;QACP,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAA4B,CAAC;QAC3E,kBAAkB;QAClB,WAAW;QACX,gBAAgB;QAChB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,YAAY;QACZ,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1C,2EAA2E;IAC3E,4EAA4E;IAC5E,6DAA6D;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAElD,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAC,QAAQ;QACnF,oBAAC,MAAM,IACL,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,kBAAkB,CAAC,EAAE,EAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EACzB,aAAa,EAAE,OAAO,CAAC,aAAa,EACpC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EACpE,WAAW,EAAE,YAAY,CAAC,WAAW,EACrC,YAAY,EAAE,YAAY,CAAC,YAAY,GACvC;QACF,oBAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAC,QAAQ;YAC/D,oBAAC,UAAU,IAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,GAAI;YACnF,oBAAC,OAAO,IACN,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EACrC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,GACrB,CACE;QACN,oBAAC,QAAQ,IACP,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,IAAI,GACd,CACE,CACP,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,gEAAgE;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,yEAAyE;AACzE,kDAAkD;AAClD,KAAK,KAAK,CAAC;AAAC,KAAK,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/cli/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/cli/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAwCH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAuC,EACvC,UAA6B,EAAE;IAE/B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEjC,IAAI,QAAQ,IAAI,SAAS,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QACpD,OAAO;YACL,QAAQ;YACR,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,QAAQ;YACvB,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;IAExC,MAAM,OAAO,GAAmB;QAC9B,EAAE,EAAE,WAAW,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAC9D,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,aAAa,YAAY,qCAAqC,SAAS,6CAA6C;QAC7H,EAAE,EAAE,GAAG;KACR,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QAC5B,YAAY;QACZ,aAAa,EAAE,QAAQ;QACvB,cAAc,EAAE,OAAO;KACxB,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,MAAwB;IAC9D,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,mCAAmC,MAAM,CAAC,aAAa,6BAA6B,CAAC;IAC9F,CAAC;IACD,OAAO,aAAa,MAAM,CAAC,aAAa,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,sBAAsB,MAAM,CAAC,YAAY,GAAG,CAAC;AACnH,CAAC"}
|
|
@@ -1,16 +1,38 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Box, Text } from 'ink';
|
|
3
3
|
import { CollapsibleToolOutput } from './CollapsibleToolOutput.js';
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Estimate the rendered row count for a single message.
|
|
6
|
+
*
|
|
7
|
+
* Width accounting matters here: under-estimating heights lets the transcript
|
|
8
|
+
* grow taller than the terminal, at which point Ink falls back to clearing
|
|
9
|
+
* and repainting the whole screen on every frame — the main source of
|
|
10
|
+
* visible flicker during streaming. The ChatStream Box has paddingX={1}
|
|
11
|
+
* (2 cols) and each message body an extra marginLeft={2}, so text wraps at
|
|
12
|
+
* `width - 4`, not `width`.
|
|
13
|
+
*/
|
|
5
14
|
function estimateMessageHeight(m, width) {
|
|
15
|
+
const textWidth = Math.max(1, width - 4);
|
|
6
16
|
if (m.role === 'tool') {
|
|
7
|
-
// Collapsed tool output
|
|
8
|
-
|
|
17
|
+
// Collapsed tool output: one summary line ("[name] args (ms) ▼"),
|
|
18
|
+
// which can wrap on narrow terminals / long arg previews.
|
|
19
|
+
const summaryLen = m.content.length + (m.toolName?.length ?? 4) + 13;
|
|
20
|
+
let rows = Math.max(1, Math.ceil(summaryLen / textWidth));
|
|
21
|
+
if (m.toolOk === false && m.toolResult) {
|
|
22
|
+
// Failed tools auto-expand: bordered body (2 border rows) + wrapped
|
|
23
|
+
// body lines at textWidth - 6 (extra marginLeft 2 + border 2 + padding 2).
|
|
24
|
+
const bodyWidth = Math.max(1, textWidth - 6);
|
|
25
|
+
rows += 2;
|
|
26
|
+
for (const line of m.toolResult.split('\n')) {
|
|
27
|
+
rows += Math.max(1, Math.ceil(line.length / bodyWidth));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return rows;
|
|
9
31
|
}
|
|
10
32
|
const lines = m.content.split('\n');
|
|
11
33
|
let textRows = 0;
|
|
12
34
|
for (const line of lines) {
|
|
13
|
-
textRows += Math.max(1, Math.ceil(line.length /
|
|
35
|
+
textRows += Math.max(1, Math.ceil(line.length / textWidth));
|
|
14
36
|
}
|
|
15
37
|
return 1 + textRows + 1; // header + textRows + margin-bottom
|
|
16
38
|
}
|
|
@@ -30,15 +52,37 @@ export function pickVisibleMessages(messages, height, width) {
|
|
|
30
52
|
remainingHeight -= mHeight;
|
|
31
53
|
}
|
|
32
54
|
else {
|
|
33
|
-
// Truncate the top-most visible message if we have some space
|
|
34
|
-
|
|
55
|
+
// Truncate the top-most visible message if we have some space.
|
|
56
|
+
// Tool messages: collapse the body to just the summary when
|
|
57
|
+
// there is not enough height for the (possibly auto-expanded)
|
|
58
|
+
// bordered body — silently dropping the tool would blank the
|
|
59
|
+
// whole transcript. Regression HIGH-1 (v0.6.2 audit).
|
|
60
|
+
if (m.role === 'tool') {
|
|
61
|
+
// Tools: minimum 1 row for the summary line. Skip the
|
|
62
|
+
// `remainingHeight > 2` guard (which was tuned for assistant
|
|
63
|
+
// messages that need header + body + margin-bottom).
|
|
64
|
+
const textWidth = Math.max(1, width - 4);
|
|
65
|
+
const summaryLen = m.content.length + (m.toolName?.length ?? 4) + 13;
|
|
66
|
+
const summaryRows = Math.max(1, Math.ceil(summaryLen / textWidth));
|
|
67
|
+
if (summaryRows <= remainingHeight) {
|
|
68
|
+
// Show the collapsed summary (drop the auto-expanded body
|
|
69
|
+
// if it would push us past the available height).
|
|
70
|
+
const { toolResult: _omit, ...collapsed } = m;
|
|
71
|
+
void _omit;
|
|
72
|
+
visibleMessages.unshift(collapsed);
|
|
73
|
+
}
|
|
74
|
+
// else: even the summary doesn't fit — fall through to break
|
|
75
|
+
// and leave earlier visible messages in place.
|
|
76
|
+
}
|
|
77
|
+
else if (remainingHeight > 2) {
|
|
78
|
+
const textWidth = Math.max(1, width - 4);
|
|
35
79
|
const maxTextRows = remainingHeight - 2; // header + margin-bottom
|
|
36
80
|
const lines = m.content.split('\n');
|
|
37
81
|
const truncatedLines = [];
|
|
38
82
|
let currentRows = 0;
|
|
39
83
|
for (let j = lines.length - 1; j >= 0; j--) {
|
|
40
84
|
const line = lines[j];
|
|
41
|
-
const lineRows = Math.max(1, Math.ceil(line.length /
|
|
85
|
+
const lineRows = Math.max(1, Math.ceil(line.length / textWidth));
|
|
42
86
|
if (currentRows + lineRows <= maxTextRows) {
|
|
43
87
|
truncatedLines.unshift(line);
|
|
44
88
|
currentRows += lineRows;
|
|
@@ -75,15 +119,18 @@ export function pickVisibleMessages(messages, height, width) {
|
|
|
75
119
|
*/
|
|
76
120
|
function ChatStreamImpl({ messages, height, width }) {
|
|
77
121
|
const visibleMessages = React.useMemo(() => pickVisibleMessages(messages, height, width), [messages, height, width]);
|
|
78
|
-
return (React.createElement(Box, { flexDirection: "column", flexGrow: 1, paddingX: 1, height: height }, visibleMessages.length === 0 ? (React.createElement(Text, { dimColor: true }, "Ready. Type a prompt or /skill <name> to invoke a skill.")) : (visibleMessages.map((m) => {
|
|
122
|
+
return (React.createElement(Box, { flexDirection: "column", flexGrow: 1, paddingX: 1, height: height, overflow: "hidden" }, visibleMessages.length === 0 ? (React.createElement(Text, { dimColor: true }, "Ready. Type a prompt or /skill <name> to invoke a skill.")) : (visibleMessages.map((m) => {
|
|
79
123
|
if (m.role === 'tool') {
|
|
80
|
-
return (React.createElement(CollapsibleToolOutput, { key: m.id, toolName: m.toolName ?? 'tool', summary: m.content, body: m.content, ok: m.toolOk, durationMs: m.toolDurationMs, defaultExpanded: false }));
|
|
124
|
+
return (React.createElement(CollapsibleToolOutput, { key: m.id, toolName: m.toolName ?? 'tool', summary: m.content, body: m.toolResult ?? m.content, ok: m.toolOk, durationMs: m.toolDurationMs, defaultExpanded: m.toolOk === false && !!m.toolResult }));
|
|
81
125
|
}
|
|
82
126
|
return (React.createElement(Box, { key: m.id, flexDirection: "column", marginBottom: 1 },
|
|
83
127
|
React.createElement(Text, { color: m.role === 'user' ? 'cyan' : m.role === 'assistant' ? 'green' : 'yellow', bold: true },
|
|
84
128
|
m.role === 'user' ? '❯' : m.role === 'assistant' ? '◆' : 'ℹ',
|
|
85
129
|
" ",
|
|
86
|
-
m.role
|
|
130
|
+
m.role,
|
|
131
|
+
m.role === 'assistant' && m.memberName ? (React.createElement(Text, { color: "magenta" },
|
|
132
|
+
" \u00B7 ",
|
|
133
|
+
m.memberName)) : null),
|
|
87
134
|
React.createElement(Box, { marginLeft: 2 },
|
|
88
135
|
React.createElement(Text, null, m.content))));
|
|
89
136
|
}))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatStream.js","sourceRoot":"","sources":["../../../src/cli/components/ChatStream.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatStream.js","sourceRoot":"","sources":["../../../src/cli/components/ChatStream.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AA8CnE;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAAC,CAAc,EAAE,KAAa;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACtB,kEAAkE;QAClE,0DAA0D;QAC1D,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QACrE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACvC,oEAAoE;YACpE,2EAA2E;YAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,CAAC;YACV,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,oCAAoC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgC,EAChC,MAAc,EACd,KAAa;IAEb,MAAM,eAAe,GAAkB,EAAE,CAAC;IAC1C,IAAI,eAAe,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,0BAA0B;IAE5D,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,eAAe,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC;YACnC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3B,eAAe,IAAI,OAAO,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,+DAA+D;YAC/D,4DAA4D;YAC5D,8DAA8D;YAC9D,6DAA6D;YAC7D,sDAAsD;YACtD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACtB,sDAAsD;gBACtD,6DAA6D;gBAC7D,qDAAqD;gBACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACzC,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBACrE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC;gBACnE,IAAI,WAAW,IAAI,eAAe,EAAE,CAAC;oBACnC,0DAA0D;oBAC1D,kDAAkD;oBAClD,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC;oBAC9C,KAAK,KAAK,CAAC;oBACX,eAAe,CAAC,OAAO,CAAC,SAAwB,CAAC,CAAC;gBACpD,CAAC;gBACD,6DAA6D;gBAC7D,+CAA+C;YACjD,CAAC;iBAAM,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACzC,MAAM,WAAW,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,yBAAyB;gBAClE,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,cAAc,GAAa,EAAE,CAAC;gBACpC,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;oBACjE,IAAI,WAAW,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;wBAC1C,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC7B,WAAW,IAAI,QAAQ,CAAC;oBAC1B,CAAC;yBAAM,CAAC;wBACN,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;wBAC1C,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,eAAe,CAAC,OAAO,CAAC;oBACtB,GAAG,CAAC;oBACJ,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;YACD,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAmB;IAClE,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CACnC,GAAG,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAClD,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAC1B,CAAC;IAEF,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC,QAAQ,IACpF,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC9B,oBAAC,IAAI,IAAC,QAAQ,qEAAsE,CACrF,CAAC,CAAC,CAAC,CACF,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CACL,oBAAC,qBAAqB,IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,EACT,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,MAAM,EAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,EAClB,IAAI,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,EAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EACZ,UAAU,EAAE,CAAC,CAAC,cAAc,EAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,GACrD,CACH,CAAC;QACJ,CAAC;QACD,OAAO,CACL,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC;YACpD,oBAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI;gBACxF,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;;gBAAG,CAAC,CAAC,IAAI;gBACrE,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACxC,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS;;oBAAK,CAAC,CAAC,UAAU,CAAQ,CAC/C,CAAC,CAAC,CAAC,IAAI,CACH;YACP,oBAAC,GAAG,IAAC,UAAU,EAAE,CAAC;gBAChB,oBAAC,IAAI,QAAE,CAAC,CAAC,OAAO,CAAQ,CACpB,CACF,CACP,CAAC;IACJ,CAAC,CAAC,CACH,CACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC"}
|
|
@@ -26,7 +26,12 @@ function CollapsibleToolOutputImpl(props) {
|
|
|
26
26
|
}, [defaultExpanded, isControlled]);
|
|
27
27
|
const expanded = isControlled ? props.expanded : localExpanded;
|
|
28
28
|
const color = borderColor(toolName, ok);
|
|
29
|
+
// Status glyph: pending (no verdict yet) / ok / error. Check `ok` first
|
|
30
|
+
// so undefined-with-defined-duration (rare but possible) shows ⋯ not ✓.
|
|
31
|
+
// v0.6.2 audit LOW-4.
|
|
32
|
+
const status = ok === true ? '✓' : ok === false ? '✗' : '⋯';
|
|
29
33
|
const summaryLine = [
|
|
34
|
+
status,
|
|
30
35
|
`[${toolName}]`,
|
|
31
36
|
summary,
|
|
32
37
|
durationMs !== undefined ? `(${durationMs}ms)` : '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollapsibleToolOutput.js","sourceRoot":"","sources":["../../../src/cli/components/CollapsibleToolOutput.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CollapsibleToolOutput.js","sourceRoot":"","sources":["../../../src/cli/components/CollapsibleToolOutput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*
|
|
16
16
|
* @see docs/plans/2026-06-28-zelari-code.md (Task 14.7)
|
|
17
17
|
*/
|
|
18
|
-
import { runCouncilPure, } from '
|
|
18
|
+
import { runCouncilPure, } from '@zelari/core/council';
|
|
19
19
|
import { createWorkspaceContext } from './workspace/stubs.js';
|
|
20
20
|
import { createWorkspaceToolRegistry } from './workspace/toolRegistry.js';
|
|
21
21
|
export class CouncilDispatchError extends Error {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"councilDispatcher.js","sourceRoot":"","sources":["../../src/cli/councilDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,cAAc,GAEf,MAAM,
|
|
1
|
+
{"version":3,"file":"councilDispatcher.js","sourceRoot":"","sources":["../../src/cli/councilDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,cAAc,GAEf,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAoD1E,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,WAAmB,EACnB,OAA+B;IAE/B,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,oBAAoB,CAC5B,oFAAoF,CACrF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,oBAAoB,CAAC,0DAA0D,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,MAAM,GAAsB;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,mBAAmB;QACjD,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC;QACrC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;QACvC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;QACpC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE;QAChD,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gEAAgE;QAChE,mEAAmE;QACnE,4CAA4C;QAC5C,KAAK,EAAE,OAAO,CAAC,KAAK;eACf,CAAC,OAAO,CAAC,qBAAqB;gBAC/B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,2BAA2B,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC5D,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC;IAEF,KAAK,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* headless — non-interactive CLI mode for CI/CD and scripting.
|
|
3
|
+
*
|
|
4
|
+
* Bypasses Ink entirely. Reads `--task <prompt>`, runs the prompt
|
|
5
|
+
* through the same dispatch path the TUI uses, and serializes the
|
|
6
|
+
* resulting events as one JSON object per line (NDJSON) on stdout.
|
|
7
|
+
*
|
|
8
|
+
* Exit codes:
|
|
9
|
+
* 0 — task completed successfully (last `agent_end.reason === 'completed'`)
|
|
10
|
+
* 1 — user error (missing task, missing API key, invalid flag)
|
|
11
|
+
* 2 — runtime error (provider failure, council exception)
|
|
12
|
+
* 3 — task errored (the agent run itself emitted `agent_end.reason === 'error'`)
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
* @since 0.5.0
|
|
16
|
+
*/
|
|
17
|
+
import { PROVIDERS, resolveApiKeyWithMeta } from './keyStore.js';
|
|
18
|
+
import { getActiveProvider, getModelForProvider } from './providerConfig.js';
|
|
19
|
+
import { openaiCompatibleProvider } from './provider/openai-compatible.js';
|
|
20
|
+
const HELP_TEXT = `zelari-code --headless --task <prompt> [--output json|plain] [--council] [--provider <id>] [--model <name>]
|
|
21
|
+
|
|
22
|
+
Non-interactive mode. Streams BrainEvents as NDJSON to stdout (one JSON
|
|
23
|
+
object per line) or as plain text (just the assistant message text).
|
|
24
|
+
|
|
25
|
+
Exit codes:
|
|
26
|
+
0 completed
|
|
27
|
+
1 user error (bad flags, missing API key, ...)
|
|
28
|
+
2 runtime error (provider failure, council exception)
|
|
29
|
+
3 agent run errored
|
|
30
|
+
`;
|
|
31
|
+
/**
|
|
32
|
+
* Parse argv for --headless options. Returns null options when
|
|
33
|
+
* --headless is not present (caller should fall through to TUI mode).
|
|
34
|
+
*/
|
|
35
|
+
export function parseHeadlessFlags(argv) {
|
|
36
|
+
if (!argv.includes('--headless')) {
|
|
37
|
+
return { options: null };
|
|
38
|
+
}
|
|
39
|
+
let task;
|
|
40
|
+
let output = 'json';
|
|
41
|
+
let useCouncil = false;
|
|
42
|
+
let provider;
|
|
43
|
+
let model;
|
|
44
|
+
for (let i = 0; i < argv.length; i++) {
|
|
45
|
+
const arg = argv[i];
|
|
46
|
+
if (arg === '--headless')
|
|
47
|
+
continue;
|
|
48
|
+
if (arg === '--output') {
|
|
49
|
+
const next = argv[i + 1];
|
|
50
|
+
if (next === 'json' || next === 'plain') {
|
|
51
|
+
output = next;
|
|
52
|
+
i++;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
return {
|
|
56
|
+
options: null,
|
|
57
|
+
error: `--output requires 'json' or 'plain', got '${next ?? '(missing)'}'`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (arg === '--task') {
|
|
62
|
+
task = argv[i + 1];
|
|
63
|
+
i++;
|
|
64
|
+
}
|
|
65
|
+
else if (arg === '--council') {
|
|
66
|
+
useCouncil = true;
|
|
67
|
+
}
|
|
68
|
+
else if (arg === '--provider') {
|
|
69
|
+
provider = argv[i + 1];
|
|
70
|
+
i++;
|
|
71
|
+
}
|
|
72
|
+
else if (arg === '--model') {
|
|
73
|
+
model = argv[i + 1];
|
|
74
|
+
i++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (!task || task.trim().length === 0) {
|
|
78
|
+
return { options: null, error: '--headless requires --task <prompt>' };
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
options: { task, output, useCouncil, provider, model },
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Print the headless help text to stdout (caller prints to stderr for errors).
|
|
86
|
+
*/
|
|
87
|
+
export function printHeadlessHelp() {
|
|
88
|
+
// eslint-disable-next-line no-console
|
|
89
|
+
console.log(HELP_TEXT);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve the API key for a provider; returns null with a reason
|
|
93
|
+
* when the key is missing. Used to fail fast with a clear error
|
|
94
|
+
* instead of failing mid-stream.
|
|
95
|
+
*/
|
|
96
|
+
export async function resolveHeadlessKey(providerId) {
|
|
97
|
+
const spec = PROVIDERS.find((p) => p.id === providerId);
|
|
98
|
+
if (!spec) {
|
|
99
|
+
return { error: `unknown provider: '${providerId}'` };
|
|
100
|
+
}
|
|
101
|
+
const resolved = await resolveApiKeyWithMeta(providerId);
|
|
102
|
+
if (!resolved || !resolved.apiKey) {
|
|
103
|
+
return {
|
|
104
|
+
error: `no API key for provider '${providerId}'.\n` +
|
|
105
|
+
`Set the env var ${spec.envVar} or save a key via /login.`,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// baseUrl lives in providerConfig (customEndpoints) not on StoredKey.
|
|
109
|
+
// Imported lazily to avoid a circular dep at module load.
|
|
110
|
+
const { getCustomEndpoint } = await import('./providerConfig.js');
|
|
111
|
+
const customBase = getCustomEndpoint(providerId);
|
|
112
|
+
return {
|
|
113
|
+
apiKey: resolved.apiKey,
|
|
114
|
+
...(customBase ? { baseUrl: customBase } : {}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Determine the effective provider + model for a headless run.
|
|
119
|
+
* Prefers explicit --provider/--model flags, then the active
|
|
120
|
+
* provider from provider.json, then 'openai-compatible' as a
|
|
121
|
+
* last resort.
|
|
122
|
+
*/
|
|
123
|
+
export function resolveHeadlessProvider(opts) {
|
|
124
|
+
const provider = opts.provider ?? getActiveProvider().id;
|
|
125
|
+
const model = opts.model ?? getModelForProvider(provider);
|
|
126
|
+
return { provider, model };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Emit one NDJSON line to stdout. Use process.stdout.write directly
|
|
130
|
+
* to avoid the console.log trailing newline (NDJSON convention is
|
|
131
|
+
* one JSON object per line, no extra whitespace).
|
|
132
|
+
*/
|
|
133
|
+
export function emitEvent(event) {
|
|
134
|
+
process.stdout.write(JSON.stringify(event) + '\n');
|
|
135
|
+
}
|
|
136
|
+
export { openaiCompatibleProvider };
|
|
137
|
+
//# sourceMappingURL=headless.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/cli/headless.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,29 +26,60 @@ export function eventsToMessages(events) {
|
|
|
26
26
|
out.push({ id: assistantId, role: 'assistant', content: assistantBuffer, ts: e.ts });
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
+
else if (e.type === 'message_end') {
|
|
30
|
+
// Message boundary: the next streamed message gets its own bubble,
|
|
31
|
+
// matching the live UI (which finalizes on message_end).
|
|
32
|
+
assistantBuffer = '';
|
|
33
|
+
assistantId = '';
|
|
34
|
+
}
|
|
29
35
|
else if (e.type === 'tool_execution_start') {
|
|
30
36
|
// v0.4.3 audit fix: the v3-W event schema renamed `tool_call` →
|
|
31
37
|
// `tool_execution_start` and added the `args` field. The old branches
|
|
32
38
|
// here silently dropped every tool invocation during session resume.
|
|
39
|
+
// v0.6.2: restored as a `role: 'tool'` message so the resumed
|
|
40
|
+
// transcript renders CollapsibleToolOutput, same as the live UI.
|
|
33
41
|
assistantBuffer = '';
|
|
34
42
|
assistantId = '';
|
|
35
|
-
const argsPreview = JSON.stringify(e.args)
|
|
43
|
+
const argsPreview = JSON.stringify(e.args)?.slice(0, 120) ?? '';
|
|
36
44
|
out.push({
|
|
37
45
|
id: crypto.randomUUID(),
|
|
38
|
-
role: '
|
|
39
|
-
content:
|
|
46
|
+
role: 'tool',
|
|
47
|
+
content: argsPreview,
|
|
40
48
|
ts: e.ts,
|
|
49
|
+
toolName: e.toolName,
|
|
50
|
+
toolCallId: e.toolCallId,
|
|
41
51
|
});
|
|
42
52
|
}
|
|
43
53
|
else if (e.type === 'tool_execution_end') {
|
|
44
|
-
// v0.
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
// v0.6.2: update the matching start message in place (the event does
|
|
55
|
+
// NOT carry toolName — the old code rendered "[tool_result] undefined").
|
|
56
|
+
const end = e;
|
|
57
|
+
let matched = false;
|
|
58
|
+
for (let i = out.length - 1; i >= 0; i--) {
|
|
59
|
+
const m = out[i];
|
|
60
|
+
if (m.role === 'tool' && m.toolCallId === end.toolCallId && m.toolDurationMs === undefined) {
|
|
61
|
+
// v0.6.2 audit LOW-5: append `…` on truncation to match the
|
|
62
|
+
// live path (messageHelpers.appendToolEnd behavior).
|
|
63
|
+
const raw = typeof end.result === 'string' ? end.result : '';
|
|
64
|
+
const truncated = raw.length > 600 ? `${raw.slice(0, 600)}…` : raw;
|
|
65
|
+
out[i] = {
|
|
66
|
+
...m,
|
|
67
|
+
toolOk: !end.isError,
|
|
68
|
+
toolDurationMs: end.durationMs,
|
|
69
|
+
...(raw.length > 0 ? { toolResult: truncated } : {}),
|
|
70
|
+
};
|
|
71
|
+
matched = true;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!matched) {
|
|
76
|
+
out.push({
|
|
77
|
+
id: crypto.randomUUID(),
|
|
78
|
+
role: 'system',
|
|
79
|
+
content: `[tool_result] ${end.toolCallId} → ${end.isError ? 'error' : 'ok'}`,
|
|
80
|
+
ts: e.ts,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
52
83
|
}
|
|
53
84
|
else if (e.type === 'agent_start') {
|
|
54
85
|
out.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventsToMessages.js","sourceRoot":"","sources":["../../../src/cli/hooks/eventsToMessages.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA6B;IAC5D,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC/B,IAAI,WAAW,KAAK,EAAE;gBAAE,WAAW,GAAG,WAAW,YAAY,EAAE,EAAE,CAAC;YAClE,eAAe,IAAI,CAAC,CAAC,KAAK,CAAC;YAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;gBACjE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC7C,gEAAgE;YAChE,sEAAsE;YACtE,qEAAqE;YACrE,eAAe,GAAG,EAAE,CAAC;YACrB,WAAW,GAAG,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAE,CAAuB,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"eventsToMessages.js","sourceRoot":"","sources":["../../../src/cli/hooks/eventsToMessages.ts"],"names":[],"mappings":"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"}
|