zelari-code 0.2.2 → 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 +97 -2
- package/dist/agents/councilApi.js +7 -7
- package/dist/agents/councilApi.js.map +1 -1
- package/dist/agents/councilDirectives.js +3 -3
- package/dist/agents/promoteMember.js +2 -2
- package/dist/agents/roles.js +32 -32
- package/dist/agents/roles.js.map +1 -1
- package/dist/agents/skills/builtin/debugging.js +4 -4
- package/dist/agents/skills/builtin/debugging.js.map +1 -1
- package/dist/agents/skills/builtin/docs.js +13 -23
- package/dist/agents/skills/builtin/docs.js.map +1 -1
- package/dist/agents/skills/builtin/git-ops.js +3 -3
- package/dist/agents/skills/builtin/git-ops.js.map +1 -1
- package/dist/agents/skills/builtin/planning.js +4 -4
- package/dist/agents/skills/builtin/planning.js.map +1 -1
- package/dist/agents/skills/builtin/refactoring.js +3 -3
- package/dist/agents/skills/builtin/refactoring.js.map +1 -1
- package/dist/agents/skills/builtin/review.js +9 -9
- package/dist/agents/skills/builtin/review.js.map +1 -1
- package/dist/agents/skills/builtin/testing.js +3 -3
- package/dist/agents/skills/builtin/testing.js.map +1 -1
- package/dist/agents/tools.js +9 -2
- package/dist/agents/tools.js.map +1 -1
- package/dist/cli/app.js +94 -1861
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/compaction.js.map +1 -1
- package/dist/cli/components/ChatStream.js +81 -14
- package/dist/cli/components/ChatStream.js.map +1 -1
- package/dist/cli/components/CollapsibleToolOutput.js +26 -3
- package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
- package/dist/cli/components/Header.js +20 -1
- package/dist/cli/components/Header.js.map +1 -1
- package/dist/cli/components/InputBar.js +34 -2
- package/dist/cli/components/InputBar.js.map +1 -1
- package/dist/cli/components/Sidebar.js +30 -10
- package/dist/cli/components/Sidebar.js.map +1 -1
- package/dist/cli/councilDispatcher.js +10 -2
- 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/chatStats.js +28 -0
- package/dist/cli/hooks/chatStats.js.map +1 -0
- package/dist/cli/hooks/eventsToMessages.js +111 -0
- package/dist/cli/hooks/eventsToMessages.js.map +1 -0
- package/dist/cli/hooks/messageHelpers.js +125 -0
- package/dist/cli/hooks/messageHelpers.js.map +1 -0
- package/dist/cli/hooks/skillCompare.js +69 -0
- package/dist/cli/hooks/skillCompare.js.map +1 -0
- package/dist/cli/hooks/steer.js +28 -0
- package/dist/cli/hooks/steer.js.map +1 -0
- package/dist/cli/hooks/useBatchedMessages.js +67 -0
- package/dist/cli/hooks/useBatchedMessages.js.map +1 -0
- package/dist/cli/hooks/useChatTurn.js +363 -0
- package/dist/cli/hooks/useChatTurn.js.map +1 -0
- package/dist/cli/hooks/useSession.js +116 -0
- package/dist/cli/hooks/useSession.js.map +1 -0
- package/dist/cli/hooks/useSlashDispatch.js +303 -0
- package/dist/cli/hooks/useSlashDispatch.js.map +1 -0
- package/dist/cli/hooks/useTerminalSize.js +60 -0
- package/dist/cli/hooks/useTerminalSize.js.map +1 -0
- package/dist/cli/main.bundled.js +25212 -21722
- 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 +47 -1
- package/dist/cli/sessionManager.js.map +1 -1
- package/dist/cli/skillSuggest.js +1 -1
- package/dist/cli/slashCommands.js +72 -3
- package/dist/cli/slashCommands.js.map +1 -1
- package/dist/cli/slashHandlers/branch.js +57 -0
- package/dist/cli/slashHandlers/branch.js.map +1 -0
- package/dist/cli/slashHandlers/git.js +40 -0
- package/dist/cli/slashHandlers/git.js.map +1 -0
- package/dist/cli/slashHandlers/promoteMember.js +25 -0
- package/dist/cli/slashHandlers/promoteMember.js.map +1 -0
- package/dist/cli/slashHandlers/provider.js +199 -0
- package/dist/cli/slashHandlers/provider.js.map +1 -0
- package/dist/cli/slashHandlers/skills.js +82 -0
- package/dist/cli/slashHandlers/skills.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/slashHandlers/workspace.js +118 -0
- package/dist/cli/slashHandlers/workspace.js.map +1 -0
- package/dist/cli/toolRegistry.js +17 -8
- package/dist/cli/toolRegistry.js.map +1 -1
- package/dist/cli/utils/duration.js +34 -0
- package/dist/cli/utils/duration.js.map +1 -0
- 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/agentsMd.js +314 -0
- package/dist/cli/workspace/agentsMd.js.map +1 -0
- package/dist/cli/workspace/index.js +24 -0
- package/dist/cli/workspace/index.js.map +1 -0
- package/dist/cli/workspace/paths.js +88 -0
- package/dist/cli/workspace/paths.js.map +1 -0
- package/dist/cli/workspace/postCouncilHook.js +38 -0
- package/dist/cli/workspace/postCouncilHook.js.map +1 -0
- package/dist/cli/workspace/storage.js +392 -0
- package/dist/cli/workspace/storage.js.map +1 -0
- package/dist/cli/workspace/stubs.js +528 -0
- package/dist/cli/workspace/stubs.js.map +1 -0
- package/dist/cli/workspace/toolRegistry.js +61 -0
- package/dist/cli/workspace/toolRegistry.js.map +1 -0
- package/dist/cli/workspace/types.js +10 -0
- package/dist/cli/workspace/types.js.map +1 -0
- package/dist/main/core/tools/builtin/_walk.js +129 -0
- package/dist/main/core/tools/builtin/_walk.js.map +1 -0
- package/dist/main/core/tools/builtin/diff.js +477 -0
- package/dist/main/core/tools/builtin/diff.js.map +1 -0
- package/dist/main/core/tools/builtin/listFiles.js +5 -43
- package/dist/main/core/tools/builtin/listFiles.js.map +1 -1
- package/dist/main/core/tools/builtin/search.js +120 -28
- package/dist/main/core/tools/builtin/search.js.map +1 -1
- package/package.json +10 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/cli/slashHandlers/workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/toolRegistry.js
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* toolRegistry — default ToolRegistry for the zelari-code CLI.
|
|
3
3
|
*
|
|
4
|
-
* Wires the
|
|
5
|
-
* ToolRegistry instance that the AgentHarness can
|
|
6
|
-
* `tools: registry.toOpenAITools()` + `toolRegistry: registry`.
|
|
4
|
+
* Wires the 8 built-in tools (filesystem read/write/edit + bash + grep/list +
|
|
5
|
+
* show_diff/apply_diff) into a ToolRegistry instance that the AgentHarness can
|
|
6
|
+
* hand to the provider via `tools: registry.toOpenAITools()` + `toolRegistry: registry`.
|
|
7
7
|
*
|
|
8
8
|
* Task A1 of AnathemaCoder v3-A: enable the existing tool pipeline.
|
|
9
9
|
* Task A2 of v3-A: wrap each tool with the safety layer (sandbox path,
|
|
10
10
|
* shell blocklist, audit log).
|
|
11
|
+
* v0.4.0: added show_diff + apply_diff + recursive grep_content.
|
|
11
12
|
*
|
|
12
13
|
* @see docs/plans/2026-06-29-anathema-coder-v3.md (Tasks A1 + A2)
|
|
14
|
+
* @see docs/plans/2026-07-01-v0-4-0-fix-audit.md (v0.4.0 scope)
|
|
13
15
|
*/
|
|
14
|
-
import { ToolRegistry } from '
|
|
15
|
-
import { readFileTool, writeFileTool, editFileTool, } from '
|
|
16
|
-
import { bashTool } from '
|
|
17
|
-
import { grepContentTool } from '
|
|
18
|
-
import { listFilesTool } from '
|
|
16
|
+
import { ToolRegistry } from '@zelari/core/harness/tools/registry';
|
|
17
|
+
import { readFileTool, writeFileTool, editFileTool, } from '@zelari/core/harness/tools/builtin/filesystem';
|
|
18
|
+
import { bashTool } from '@zelari/core/harness/tools/builtin/shell';
|
|
19
|
+
import { grepContentTool } from '@zelari/core/harness/tools/builtin/search';
|
|
20
|
+
import { listFilesTool } from '@zelari/core/harness/tools/builtin/listFiles';
|
|
21
|
+
import { showDiffTool, applyDiffTool } from '@zelari/core/harness/tools/builtin/diff';
|
|
19
22
|
import { resolveSandboxedPath, SandboxViolationError } from './safety/sandboxPath.js';
|
|
20
23
|
import { assertShellAllowed, ShellBlockedError } from './safety/shellBlocklist.js';
|
|
21
24
|
import { AuditLogger } from './safety/auditLogger.js';
|
|
@@ -41,6 +44,8 @@ export function createBuiltinToolRegistry(options = {}) {
|
|
|
41
44
|
const safeEditFile = wrapWithSandbox(editFileTool, ['path'], root, audit, sessionId);
|
|
42
45
|
const safeGrepContent = wrapWithSandbox(grepContentTool, ['path'], root, audit, sessionId);
|
|
43
46
|
const safeListFiles = wrapWithSandbox(listFilesTool, ['path'], root, audit, sessionId);
|
|
47
|
+
const safeShowDiff = wrapWithSandbox(showDiffTool, ['path'], root, audit, sessionId);
|
|
48
|
+
const safeApplyDiff = wrapWithSandbox(applyDiffTool, ['path'], root, audit, sessionId);
|
|
44
49
|
// Wrap bash: shell blocklist + audit.
|
|
45
50
|
const safeBash = wrapWithShellSafety(bashTool, audit, sessionId);
|
|
46
51
|
const registry = new ToolRegistry();
|
|
@@ -50,6 +55,8 @@ export function createBuiltinToolRegistry(options = {}) {
|
|
|
50
55
|
registry.register(safeBash);
|
|
51
56
|
registry.register(safeGrepContent);
|
|
52
57
|
registry.register(safeListFiles);
|
|
58
|
+
registry.register(safeShowDiff);
|
|
59
|
+
registry.register(safeApplyDiff);
|
|
53
60
|
const tools = [
|
|
54
61
|
safeReadFile,
|
|
55
62
|
safeWriteFile,
|
|
@@ -57,6 +64,8 @@ export function createBuiltinToolRegistry(options = {}) {
|
|
|
57
64
|
safeBash,
|
|
58
65
|
safeGrepContent,
|
|
59
66
|
safeListFiles,
|
|
67
|
+
safeShowDiff,
|
|
68
|
+
safeApplyDiff,
|
|
60
69
|
].map((t) => ({
|
|
61
70
|
name: t.name,
|
|
62
71
|
description: t.description,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../src/cli/toolRegistry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../src/cli/toolRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a millisecond duration as a short human-readable string.
|
|
3
|
+
* Negative durations get an "ago" suffix (Task F.3, v3-F).
|
|
4
|
+
*
|
|
5
|
+
* Examples:
|
|
6
|
+
* 45_000 → "45s"
|
|
7
|
+
* 3_600_000 → "1h 0m"
|
|
8
|
+
* 86_400_000 → "1d 0h"
|
|
9
|
+
* -120_000 → "2m ago"
|
|
10
|
+
*
|
|
11
|
+
* Extracted from app.tsx (Task v0.4.2 audit split) so other modules
|
|
12
|
+
* (slashHandlers, test files) can import without pulling in the full App.
|
|
13
|
+
*/
|
|
14
|
+
export function formatDuration(ms) {
|
|
15
|
+
const abs = Math.abs(ms);
|
|
16
|
+
const sign = ms < 0 ? ' ago' : '';
|
|
17
|
+
if (abs < 1000)
|
|
18
|
+
return `${abs}ms${sign}`;
|
|
19
|
+
const s = Math.floor(abs / 1000);
|
|
20
|
+
if (s < 60)
|
|
21
|
+
return `${s}s${sign}`;
|
|
22
|
+
const m = Math.floor(s / 60);
|
|
23
|
+
const rs = s % 60;
|
|
24
|
+
if (m < 60)
|
|
25
|
+
return rs === 0 ? `${m}m${sign}` : `${m}m ${rs}s${sign}`;
|
|
26
|
+
const h = Math.floor(m / 60);
|
|
27
|
+
const rm = m % 60;
|
|
28
|
+
if (h < 24)
|
|
29
|
+
return rm === 0 ? `${h}h${sign}` : `${h}h ${rm}m${sign}`;
|
|
30
|
+
const d = Math.floor(h / 24);
|
|
31
|
+
const rh = h % 24;
|
|
32
|
+
return rh === 0 ? `${d}d${sign}` : `${d}d ${rh}h${sign}`;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=duration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.js","sourceRoot":"","sources":["../../../src/cli/utils/duration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,IAAI,GAAG,GAAG,IAAI;QAAE,OAAO,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;IACrE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;IACrE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* firstRun — detection logic for the onboarding wizard.
|
|
3
|
+
*
|
|
4
|
+
* Decides whether `zelari-code` should launch the wizard instead of
|
|
5
|
+
* the regular TUI. The decision is a pure function of:
|
|
6
|
+
* - CLI flags (--no-wizard, --reset-config)
|
|
7
|
+
* - Environment variables (ZELARI_NO_WIZARD)
|
|
8
|
+
* - Presence of the provider config file on disk
|
|
9
|
+
*
|
|
10
|
+
* All three inputs are injected so tests don't touch real fs/env.
|
|
11
|
+
*
|
|
12
|
+
* @public
|
|
13
|
+
* @since 0.5.0
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync } from 'node:fs';
|
|
16
|
+
/**
|
|
17
|
+
* Decide whether the wizard should run on startup.
|
|
18
|
+
*
|
|
19
|
+
* Order of precedence (highest first):
|
|
20
|
+
* 1. `--reset-config` → always run wizard (force re-onboarding).
|
|
21
|
+
* 2. `--no-wizard` or `ZELARI_NO_WIZARD` → never run wizard.
|
|
22
|
+
* 3. Config file missing on disk → run wizard (first-run case).
|
|
23
|
+
* 4. Otherwise → skip wizard.
|
|
24
|
+
*
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export function shouldRunWizard(input) {
|
|
28
|
+
const exists = input.exists ?? existsSync;
|
|
29
|
+
if (input.hasResetConfigFlag) {
|
|
30
|
+
return { shouldRun: true, reason: '--reset-config flag forced wizard' };
|
|
31
|
+
}
|
|
32
|
+
if (input.hasNoWizardFlag) {
|
|
33
|
+
return { shouldRun: false, reason: '--no-wizard flag suppressed wizard' };
|
|
34
|
+
}
|
|
35
|
+
if (input.noWizardEnv && input.noWizardEnv.trim().length > 0) {
|
|
36
|
+
return {
|
|
37
|
+
shouldRun: false,
|
|
38
|
+
reason: `ZELARI_NO_WIZARD=${input.noWizardEnv} suppressed wizard`,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (!exists(input.configPath)) {
|
|
42
|
+
return {
|
|
43
|
+
shouldRun: true,
|
|
44
|
+
reason: `provider config not found at ${input.configPath} (first run)`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
shouldRun: false,
|
|
49
|
+
reason: `provider config exists at ${input.configPath}; wizard skipped`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function parseWizardFlags(argv) {
|
|
53
|
+
let noWizard = false;
|
|
54
|
+
let resetConfig = false;
|
|
55
|
+
for (const arg of argv) {
|
|
56
|
+
if (arg === '--no-wizard')
|
|
57
|
+
noWizard = true;
|
|
58
|
+
else if (arg === '--reset-config')
|
|
59
|
+
resetConfig = true;
|
|
60
|
+
}
|
|
61
|
+
return { noWizard, resetConfig };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=firstRun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firstRun.js","sourceRoot":"","sources":["../../../src/cli/wizard/firstRun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAyBrC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC;IAE1C,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC7B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;IAC1E,CAAC;IAED,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;IAC5E,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,oBAAoB,KAAK,CAAC,WAAW,oBAAoB;SAClE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,gCAAgC,KAAK,CAAC,UAAU,cAAc;SACvE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,6BAA6B,KAAK,CAAC,UAAU,kBAAkB;KACxE,CAAC;AACJ,CAAC;AAcD,MAAM,UAAU,gBAAgB,CAAC,IAAuB;IACtD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,aAAa;YAAE,QAAQ,GAAG,IAAI,CAAC;aACtC,IAAI,GAAG,KAAK,gBAAgB;YAAE,WAAW,GAAG,IAAI,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wizard — Ink UI for first-run onboarding.
|
|
3
|
+
*
|
|
4
|
+
* Renders the step machine from `useWizardState`. Keyboard handling is
|
|
5
|
+
* done at the App level (via useInput in main.tsx) — this component is
|
|
6
|
+
* "dumb" and just renders the current state.
|
|
7
|
+
*
|
|
8
|
+
* Steps:
|
|
9
|
+
* 1. welcome: title + intro text + "Press Enter to begin"
|
|
10
|
+
* 2. provider: list of PROVIDERS with arrow cursor
|
|
11
|
+
* 3. model: read model name from input (or accept default)
|
|
12
|
+
* 4. apikey: choose env/keystore/skip
|
|
13
|
+
* 5. confirm: review + "Press Enter to commit, B to go back"
|
|
14
|
+
*
|
|
15
|
+
* Used in `main.tsx` instead of `<App>` when `shouldRunWizard()` is true.
|
|
16
|
+
*
|
|
17
|
+
* @public
|
|
18
|
+
* @since 0.5.0
|
|
19
|
+
*/
|
|
20
|
+
import React from 'react';
|
|
21
|
+
import { Box, Text } from 'ink';
|
|
22
|
+
import { API_KEY_OPTIONS, } from './useWizardState.js';
|
|
23
|
+
const VERSION = '0.6.2';
|
|
24
|
+
function Frame({ children }) {
|
|
25
|
+
return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1 }, children));
|
|
26
|
+
}
|
|
27
|
+
function Step(props) {
|
|
28
|
+
return (React.createElement(Box, null,
|
|
29
|
+
React.createElement(Text, { color: props.active ? 'cyan' : 'gray', inverse: props.active },
|
|
30
|
+
' ',
|
|
31
|
+
props.index,
|
|
32
|
+
"/",
|
|
33
|
+
props.total,
|
|
34
|
+
" ",
|
|
35
|
+
props.name,
|
|
36
|
+
' ')));
|
|
37
|
+
}
|
|
38
|
+
function renderProviderList(providers, cursor) {
|
|
39
|
+
return (React.createElement(Box, { flexDirection: "column" }, providers.map((p, i) => {
|
|
40
|
+
const arrow = i === cursor ? '➜ ' : ' ';
|
|
41
|
+
const color = i === cursor ? 'cyan' : undefined;
|
|
42
|
+
return (React.createElement(Text, { key: p.id, color: color },
|
|
43
|
+
arrow,
|
|
44
|
+
p.displayName,
|
|
45
|
+
" ",
|
|
46
|
+
React.createElement(Text, { color: "gray" },
|
|
47
|
+
"(",
|
|
48
|
+
p.id,
|
|
49
|
+
", uses env ",
|
|
50
|
+
p.envVar,
|
|
51
|
+
")")));
|
|
52
|
+
})));
|
|
53
|
+
}
|
|
54
|
+
function renderApiKeyOptions(cursor) {
|
|
55
|
+
const labels = {
|
|
56
|
+
env: 'Use env var (recommended — safe)',
|
|
57
|
+
keystore: 'Save to local keyStore (encrypted)',
|
|
58
|
+
skip: 'Skip for now (chat will fail until key is set)',
|
|
59
|
+
};
|
|
60
|
+
return (React.createElement(Box, { flexDirection: "column" }, API_KEY_OPTIONS.map((choice, i) => {
|
|
61
|
+
const arrow = i === cursor ? '➜ ' : ' ';
|
|
62
|
+
const color = i === cursor ? 'cyan' : undefined;
|
|
63
|
+
return (React.createElement(Text, { key: choice, color: color },
|
|
64
|
+
arrow,
|
|
65
|
+
labels[choice]));
|
|
66
|
+
})));
|
|
67
|
+
}
|
|
68
|
+
export function Wizard({ state, providers }) {
|
|
69
|
+
const s = state.state;
|
|
70
|
+
if (s.committed) {
|
|
71
|
+
return (React.createElement(Frame, null,
|
|
72
|
+
React.createElement(Text, { color: "green" }, "\u2713 Setup complete!"),
|
|
73
|
+
React.createElement(Text, null,
|
|
74
|
+
"Provider: ",
|
|
75
|
+
React.createElement(Text, { color: "cyan" }, s.providerId),
|
|
76
|
+
' | ',
|
|
77
|
+
"Model: ",
|
|
78
|
+
React.createElement(Text, { color: "cyan" }, s.model),
|
|
79
|
+
' | ',
|
|
80
|
+
"API key: ",
|
|
81
|
+
React.createElement(Text, { color: "cyan" }, s.apiKeyChoice ?? 'n/a')),
|
|
82
|
+
React.createElement(Box, { marginTop: 1 },
|
|
83
|
+
React.createElement(Text, { color: "gray" }, "Launching zelari-code\u2026 (press any key)"))));
|
|
84
|
+
}
|
|
85
|
+
return (React.createElement(Frame, null,
|
|
86
|
+
React.createElement(Text, { color: "cyan", bold: true },
|
|
87
|
+
"zelari-code v",
|
|
88
|
+
VERSION,
|
|
89
|
+
" \u2014 first-time setup"),
|
|
90
|
+
React.createElement(Box, { marginTop: 1, marginBottom: 1, flexDirection: "row" },
|
|
91
|
+
React.createElement(Step, { index: 1, total: 5, name: "welcome", active: s.step === 'welcome' }),
|
|
92
|
+
React.createElement(Step, { index: 2, total: 5, name: "provider", active: s.step === 'provider' }),
|
|
93
|
+
React.createElement(Step, { index: 3, total: 5, name: "model", active: s.step === 'model' }),
|
|
94
|
+
React.createElement(Step, { index: 4, total: 5, name: "apikey", active: s.step === 'apikey' }),
|
|
95
|
+
React.createElement(Step, { index: 5, total: 5, name: "confirm", active: s.step === 'confirm' })),
|
|
96
|
+
s.step === 'welcome' && (React.createElement(React.Fragment, null,
|
|
97
|
+
React.createElement(Text, null, "Welcome! Let's get you coding in under two minutes."),
|
|
98
|
+
React.createElement(Text, { color: "gray" }, "We'll pick a provider, default model, and how to handle your API key."),
|
|
99
|
+
React.createElement(Box, { marginTop: 1 },
|
|
100
|
+
React.createElement(Text, null, "Press "),
|
|
101
|
+
React.createElement(Text, { color: "cyan", inverse: true }, " Enter "),
|
|
102
|
+
React.createElement(Text, null, " to continue, or "),
|
|
103
|
+
React.createElement(Text, { color: "red", inverse: true }, " Q "),
|
|
104
|
+
React.createElement(Text, null, " to quit (re-run with "),
|
|
105
|
+
React.createElement(Text, { color: "gray" }, "--no-wizard"),
|
|
106
|
+
React.createElement(Text, null, " to skip later).")))),
|
|
107
|
+
s.step === 'provider' && (React.createElement(React.Fragment, null,
|
|
108
|
+
React.createElement(Text, null, "Choose your LLM provider:"),
|
|
109
|
+
React.createElement(Box, { marginTop: 1 }, renderProviderList(providers, s.providerCursor)),
|
|
110
|
+
React.createElement(Box, { marginTop: 1 },
|
|
111
|
+
React.createElement(Text, { color: "gray" }, "\u2191/\u2193 to move, Enter to confirm")))),
|
|
112
|
+
s.step === 'model' && (React.createElement(React.Fragment, null,
|
|
113
|
+
React.createElement(Text, null,
|
|
114
|
+
"Model for ",
|
|
115
|
+
React.createElement(Text, { color: "cyan" }, s.providerId),
|
|
116
|
+
":"),
|
|
117
|
+
React.createElement(Box, { marginTop: 1, borderStyle: "single", borderColor: "cyan", paddingX: 1 },
|
|
118
|
+
React.createElement(Text, null, s.model ?? '(empty)')),
|
|
119
|
+
React.createElement(Box, { marginTop: 1 },
|
|
120
|
+
React.createElement(Text, null,
|
|
121
|
+
"Press ",
|
|
122
|
+
React.createElement(Text, { color: "cyan", inverse: true }, " Enter "),
|
|
123
|
+
"to accept, or type a new name. ",
|
|
124
|
+
React.createElement(Text, { color: "gray" }, "(default kept on empty input)"))))),
|
|
125
|
+
s.step === 'apikey' && (React.createElement(React.Fragment, null,
|
|
126
|
+
React.createElement(Text, null, "How should we handle the API key?"),
|
|
127
|
+
React.createElement(Box, { marginTop: 1 }, renderApiKeyOptions(s.apiKeyCursor)),
|
|
128
|
+
React.createElement(Box, { marginTop: 1 },
|
|
129
|
+
React.createElement(Text, { color: "gray" }, "\u2191/\u2193 to move, Enter to confirm")))),
|
|
130
|
+
s.step === 'confirm' && (React.createElement(React.Fragment, null,
|
|
131
|
+
React.createElement(Text, null, "Confirm your setup:"),
|
|
132
|
+
React.createElement(Box, { marginTop: 1, flexDirection: "column" },
|
|
133
|
+
React.createElement(Text, null,
|
|
134
|
+
"Provider: ",
|
|
135
|
+
React.createElement(Text, { color: "cyan" }, s.providerId)),
|
|
136
|
+
React.createElement(Text, null,
|
|
137
|
+
"Model: ",
|
|
138
|
+
React.createElement(Text, { color: "cyan" }, s.model)),
|
|
139
|
+
React.createElement(Text, null,
|
|
140
|
+
"API key: ",
|
|
141
|
+
React.createElement(Text, { color: "cyan" }, s.apiKeyChoice ?? '(unset)'))),
|
|
142
|
+
React.createElement(Box, { marginTop: 1 },
|
|
143
|
+
React.createElement(Text, null,
|
|
144
|
+
"Press ",
|
|
145
|
+
React.createElement(Text, { color: "green", inverse: true }, " Enter "),
|
|
146
|
+
"to save and launch, or ",
|
|
147
|
+
React.createElement(Text, { color: "yellow", inverse: true }, " B "),
|
|
148
|
+
"to go back."))))));
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/wizard/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* runWizard — runs the wizard as a self-contained Ink app, then
|
|
3
|
+
* transparently transitions into the regular App once commit() runs.
|
|
4
|
+
*
|
|
5
|
+
* No process.exit — the same Ink root remains mounted; only the child
|
|
6
|
+
* component changes. This avoids the bad UX of "wizard runs, CLI
|
|
7
|
+
* exits, user has to re-launch" while still honouring the user's
|
|
8
|
+
* decision end-to-end (provider config + api key + model are all
|
|
9
|
+
* persisted before the transition).
|
|
10
|
+
*
|
|
11
|
+
* @public
|
|
12
|
+
* @since 0.5.0
|
|
13
|
+
*/
|
|
14
|
+
import React, { useEffect, useState } from 'react';
|
|
15
|
+
import { Box, Text } from 'ink';
|
|
16
|
+
import { useInput } from 'ink';
|
|
17
|
+
// @ts-ignore — app.tsx is .tsx, esbuild-bundled.
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
19
|
+
import { App } from '../app.js';
|
|
20
|
+
import { PROVIDERS } from '../keyStore.js';
|
|
21
|
+
import { getModelForProvider } from '../providerConfig.js';
|
|
22
|
+
import { Wizard } from './index.js';
|
|
23
|
+
import { createWizardState } from './useWizardState.js';
|
|
24
|
+
export function RunWizard(_props) {
|
|
25
|
+
const [wiz] = useState(() => createWizardState({
|
|
26
|
+
providers: PROVIDERS,
|
|
27
|
+
defaultModelFor: (id) => getModelForProvider(id),
|
|
28
|
+
}));
|
|
29
|
+
const [, force] = useState(0);
|
|
30
|
+
// Force re-render when state machine changes (subscribe pattern).
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (typeof wiz.subscribe === 'function') {
|
|
33
|
+
const sub = wiz.subscribe(() => force((n) => n + 1));
|
|
34
|
+
return () => sub();
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}, [wiz]);
|
|
38
|
+
useInput((input, key) => {
|
|
39
|
+
// Once committed, App takes over. Don't intercept input here
|
|
40
|
+
// (App's own useInput handlers manage keyboard from this point).
|
|
41
|
+
if (wiz.state.committed)
|
|
42
|
+
return;
|
|
43
|
+
const s = wiz.state;
|
|
44
|
+
if (key.escape) {
|
|
45
|
+
process.exit(0);
|
|
46
|
+
}
|
|
47
|
+
// 'q' quits from any step (not just welcome).
|
|
48
|
+
if (input === 'q') {
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
if (s.step === 'welcome') {
|
|
52
|
+
if (key.return) {
|
|
53
|
+
wiz.jumpToProvider();
|
|
54
|
+
}
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (s.step === 'provider') {
|
|
58
|
+
if (key.upArrow)
|
|
59
|
+
wiz.moveProvider(true);
|
|
60
|
+
else if (key.downArrow)
|
|
61
|
+
wiz.moveProvider(false);
|
|
62
|
+
else if (key.return)
|
|
63
|
+
wiz.selectProvider();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (s.step === 'model') {
|
|
67
|
+
if (key.return) {
|
|
68
|
+
// If model is empty, fall back to the default for the
|
|
69
|
+
// currently selected provider. If provider is also unset,
|
|
70
|
+
// just no-op (shouldn't happen in normal flow).
|
|
71
|
+
if (s.model && s.model.trim().length > 0) {
|
|
72
|
+
wiz?.advanceToApikey?.();
|
|
73
|
+
}
|
|
74
|
+
else if (s.providerId) {
|
|
75
|
+
// Re-seed the default and advance.
|
|
76
|
+
wiz.setModel(getModelForProvider(s.providerId));
|
|
77
|
+
wiz?.advanceToApikey?.();
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (key.backspace || key.delete) {
|
|
82
|
+
const m = (s.model ?? '').slice(0, -1);
|
|
83
|
+
wiz.setModel(m);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (input && input.length === 1 && !key.ctrl) {
|
|
87
|
+
wiz.setModel((s.model ?? '') + input);
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (s.step === 'apikey') {
|
|
92
|
+
if (key.upArrow)
|
|
93
|
+
wiz.moveApiKey(true);
|
|
94
|
+
else if (key.downArrow)
|
|
95
|
+
wiz.moveApiKey(false);
|
|
96
|
+
else if (key.return) {
|
|
97
|
+
const choice = ['env', 'keystore', 'skip'][s.apiKeyCursor];
|
|
98
|
+
wiz.selectApiKey(choice);
|
|
99
|
+
}
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (s.step === 'confirm') {
|
|
103
|
+
if (key.return)
|
|
104
|
+
wiz.commit();
|
|
105
|
+
else if (input === 'b' || input === 'B')
|
|
106
|
+
wiz.back();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// ── Transition: wizard committed → swap to App in same Ink tree ──
|
|
111
|
+
if (wiz.state.committed) {
|
|
112
|
+
// Show a brief "✓ Setup complete" banner for ~1.2s, then mount App.
|
|
113
|
+
// This gives the user a moment to read what was saved.
|
|
114
|
+
return React.createElement(PostCommitBridge, null);
|
|
115
|
+
}
|
|
116
|
+
return (React.createElement(Box, { flexDirection: "column", paddingX: 2, paddingY: 1 },
|
|
117
|
+
React.createElement(Wizard, { state: wiz, providers: PROVIDERS })));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* PostCommitBridge — short banner shown after commit() succeeds, then
|
|
121
|
+
* fades into <App>. Uses internal state to time the transition.
|
|
122
|
+
*/
|
|
123
|
+
function PostCommitBridge() {
|
|
124
|
+
const [showApp, setShowApp] = useState(false);
|
|
125
|
+
useEffect(() => {
|
|
126
|
+
const t = setTimeout(() => setShowApp(true), 1200);
|
|
127
|
+
return () => clearTimeout(t);
|
|
128
|
+
}, []);
|
|
129
|
+
if (showApp) {
|
|
130
|
+
return React.createElement(App, null);
|
|
131
|
+
}
|
|
132
|
+
return (React.createElement(Box, { flexDirection: "column", paddingX: 2, paddingY: 1 },
|
|
133
|
+
React.createElement(Box, { borderStyle: "round", borderColor: "green", paddingX: 2, paddingY: 1, flexDirection: "column" },
|
|
134
|
+
React.createElement(Text, { color: "green", bold: true }, "\u2713 Setup complete! Launching zelari-code\u2026"),
|
|
135
|
+
React.createElement(Text, { color: "gray" }, "Press Ctrl+C any time to exit."))));
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=runWizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runWizard.js","sourceRoot":"","sources":["../../../src/cli/wizard/runWizard.tsx"],"names":[],"mappings":"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"}
|