aemeathcli 1.0.2 → 1.0.4
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/dist/{App-P4MYD4QY.js → App-APN34QBQ.js} +89 -20
- package/dist/App-APN34QBQ.js.map +1 -0
- package/dist/cli.js +48 -6
- package/dist/cli.js.map +1 -1
- package/package.json +3 -5
- package/dist/App-P4MYD4QY.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -9,11 +9,12 @@ import { logger } from './chunk-JAXXTYID.js';
|
|
|
9
9
|
import { Command } from 'commander';
|
|
10
10
|
import pc2 from 'picocolors';
|
|
11
11
|
import { randomUUID } from 'crypto';
|
|
12
|
+
import { select } from '@inquirer/prompts';
|
|
12
13
|
|
|
13
14
|
function createChatCommand() {
|
|
14
15
|
const chat = new Command("chat").description("Start interactive chat mode (default)").argument("[message...]", "Initial message to send").option("-m, --model <model>", "Override model for this session").option("-r, --role <role>", "Set the task role (planning, coding, review, testing, bugfix)").option("--system <prompt>", "Custom system prompt").option("--no-stream", "Disable streaming output").action(async (messageParts, options) => {
|
|
15
16
|
const message = messageParts.join(" ");
|
|
16
|
-
const { startChatSession } = await import('./App-
|
|
17
|
+
const { startChatSession } = await import('./App-APN34QBQ.js');
|
|
17
18
|
const model = options["model"];
|
|
18
19
|
const role = options["role"];
|
|
19
20
|
const systemPrompt = options["system"];
|
|
@@ -31,7 +32,7 @@ function createChatCommand() {
|
|
|
31
32
|
function createPlanCommand() {
|
|
32
33
|
const plan = new Command("plan").description("Enter planning mode with a high-reasoning model").argument("[message...]", "Planning prompt").option("-m, --model <model>", "Override model (default: planning role)").action(async (messageParts, options) => {
|
|
33
34
|
const message = messageParts.join(" ");
|
|
34
|
-
const { startChatSession } = await import('./App-
|
|
35
|
+
const { startChatSession } = await import('./App-APN34QBQ.js');
|
|
35
36
|
const model = options["model"];
|
|
36
37
|
const initialMessage = message || void 0;
|
|
37
38
|
await startChatSession({
|
|
@@ -46,7 +47,7 @@ function createPlanCommand() {
|
|
|
46
47
|
function createReviewCommand() {
|
|
47
48
|
const review = new Command("review").description("Code review mode with a thorough model").argument("[files...]", "Files to review").option("-m, --model <model>", "Override model (default: review role)").action(async (files, options) => {
|
|
48
49
|
const message = files.length > 0 ? `Review these files: ${files.join(", ")}` : "Review the recent changes";
|
|
49
|
-
const { startChatSession } = await import('./App-
|
|
50
|
+
const { startChatSession } = await import('./App-APN34QBQ.js');
|
|
50
51
|
const model = options["model"];
|
|
51
52
|
await startChatSession({
|
|
52
53
|
initialMessage: message,
|
|
@@ -60,7 +61,7 @@ function createReviewCommand() {
|
|
|
60
61
|
function createTestCommand() {
|
|
61
62
|
const test = new Command("test").description("Testing mode with a cost-efficient model").argument("[message...]", "Testing prompt").option("-m, --model <model>", "Override model (default: testing role)").action(async (messageParts, options) => {
|
|
62
63
|
const message = messageParts.join(" ");
|
|
63
|
-
const { startChatSession } = await import('./App-
|
|
64
|
+
const { startChatSession } = await import('./App-APN34QBQ.js');
|
|
64
65
|
const model = options["model"];
|
|
65
66
|
await startChatSession({
|
|
66
67
|
initialMessage: message || "Generate tests for the recent changes",
|
|
@@ -122,7 +123,7 @@ function createConfigCommand() {
|
|
|
122
123
|
});
|
|
123
124
|
config.command("init").description("Initialize configuration with interactive setup").action(async () => {
|
|
124
125
|
try {
|
|
125
|
-
const { runFirstRunSetup } = await import('./App-
|
|
126
|
+
const { runFirstRunSetup } = await import('./App-APN34QBQ.js');
|
|
126
127
|
await runFirstRunSetup();
|
|
127
128
|
} catch (error) {
|
|
128
129
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -170,6 +171,46 @@ var PROVIDER_MODEL_SWITCH = {
|
|
|
170
171
|
gemini: { provider: "google", model: "gemini-2.5-pro" },
|
|
171
172
|
kimi: { provider: "kimi", model: "kimi-for-coding" }
|
|
172
173
|
};
|
|
174
|
+
function createLoginCommand() {
|
|
175
|
+
return new Command("login").description("Log in to a provider (interactive)").argument("[provider]", "Provider to log in to (claude, codex, gemini, kimi)").action(async (providerArg) => {
|
|
176
|
+
let provider;
|
|
177
|
+
if (providerArg !== void 0) {
|
|
178
|
+
if (!isValidProvider(providerArg)) {
|
|
179
|
+
process.stderr.write(
|
|
180
|
+
pc2.red(`Unknown provider: "${providerArg}". Valid: ${VALID_PROVIDERS.join(", ")}
|
|
181
|
+
`)
|
|
182
|
+
);
|
|
183
|
+
process.exitCode = 2;
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
provider = providerArg;
|
|
187
|
+
} else {
|
|
188
|
+
provider = await select({
|
|
189
|
+
message: "Select a provider to log in to:",
|
|
190
|
+
choices: [
|
|
191
|
+
{ name: "Claude (Anthropic)", value: "claude" },
|
|
192
|
+
{ name: "Codex (OpenAI)", value: "codex" },
|
|
193
|
+
{ name: "Gemini (Google)", value: "gemini" },
|
|
194
|
+
{ name: "Kimi (Moonshot)", value: "kimi" }
|
|
195
|
+
]
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
process.stdout.write(pc2.cyan(`
|
|
199
|
+
Logging in to ${provider}...
|
|
200
|
+
`));
|
|
201
|
+
try {
|
|
202
|
+
const loginModule = await loadLoginModule(provider);
|
|
203
|
+
await loginModule.login();
|
|
204
|
+
process.stdout.write(pc2.green(`Successfully logged in to ${provider}
|
|
205
|
+
`));
|
|
206
|
+
} catch (error) {
|
|
207
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
208
|
+
process.stderr.write(pc2.red(`Login failed: ${message}
|
|
209
|
+
`));
|
|
210
|
+
process.exitCode = 3;
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
173
214
|
function createAuthCommand() {
|
|
174
215
|
const auth = new Command("auth").description("Authentication & account management");
|
|
175
216
|
auth.command("login <provider>").description("Log in to a provider (claude, codex, gemini, kimi)").action(async (provider) => {
|
|
@@ -643,6 +684,7 @@ async function main() {
|
|
|
643
684
|
program.addCommand(createTestCommand());
|
|
644
685
|
program.addCommand(createConfigCommand());
|
|
645
686
|
program.addCommand(createAuthCommand());
|
|
687
|
+
program.addCommand(createLoginCommand());
|
|
646
688
|
program.action(async (options, command) => {
|
|
647
689
|
const args = command.args;
|
|
648
690
|
let message = args.length > 0 ? args.join(" ") : void 0;
|
|
@@ -658,7 +700,7 @@ async function main() {
|
|
|
658
700
|
}
|
|
659
701
|
}
|
|
660
702
|
}
|
|
661
|
-
const { startChatSession } = await import('./App-
|
|
703
|
+
const { startChatSession } = await import('./App-APN34QBQ.js');
|
|
662
704
|
const model = options["model"];
|
|
663
705
|
const role = options["role"];
|
|
664
706
|
await startChatSession({
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands/chat.ts","../src/cli/commands/plan.ts","../src/cli/commands/review.ts","../src/cli/commands/test.ts","../src/cli/commands/config.ts","../src/cli/commands/auth.ts","../src/cli/cli.ts"],"names":["Command","pc","args"],"mappings":"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","file":"cli.js","sourcesContent":["/**\n * Interactive chat mode command per PRD section 18.2\n */\n\nimport { Command } from \"commander\";\nimport type { IGlobalFlags } from \"../flags.js\";\n\nexport function createChatCommand(): Command {\n const chat = new Command(\"chat\")\n .description(\"Start interactive chat mode (default)\")\n .argument(\"[message...]\", \"Initial message to send\")\n .option(\"-m, --model <model>\", \"Override model for this session\")\n .option(\"-r, --role <role>\", \"Set the task role (planning, coding, review, testing, bugfix)\")\n .option(\"--system <prompt>\", \"Custom system prompt\")\n .option(\"--no-stream\", \"Disable streaming output\")\n .action(async (messageParts: string[], options: Record<string, unknown>) => {\n const message = messageParts.join(\" \");\n\n // Lazy-load the TUI to keep startup fast\n const { startChatSession } = await import(\"../../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n const role = options[\"role\"] as string | undefined;\n const systemPrompt = options[\"system\"] as string | undefined;\n const initialMessage = message || undefined;\n\n await startChatSession({\n ...(initialMessage !== undefined ? { initialMessage } : {}),\n ...(model !== undefined ? { model } : {}),\n ...(role !== undefined ? { role } : {}),\n ...(systemPrompt !== undefined ? { systemPrompt } : {}),\n streaming: options[\"stream\"] !== false,\n });\n });\n\n return chat;\n}\n","/**\n * Planning mode command per PRD section 5.1\n */\n\nimport { Command } from \"commander\";\n\nexport function createPlanCommand(): Command {\n const plan = new Command(\"plan\")\n .description(\"Enter planning mode with a high-reasoning model\")\n .argument(\"[message...]\", \"Planning prompt\")\n .option(\"-m, --model <model>\", \"Override model (default: planning role)\")\n .action(async (messageParts: string[], options: Record<string, unknown>) => {\n const message = messageParts.join(\" \");\n\n const { startChatSession } = await import(\"../../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n const initialMessage = message || undefined;\n\n await startChatSession({\n ...(initialMessage !== undefined ? { initialMessage } : {}),\n ...(model !== undefined ? { model } : {}),\n role: \"planning\",\n streaming: true,\n });\n });\n\n return plan;\n}\n","/**\n * Code review mode command per PRD section 5.1\n */\n\nimport { Command } from \"commander\";\n\nexport function createReviewCommand(): Command {\n const review = new Command(\"review\")\n .description(\"Code review mode with a thorough model\")\n .argument(\"[files...]\", \"Files to review\")\n .option(\"-m, --model <model>\", \"Override model (default: review role)\")\n .action(async (files: string[], options: Record<string, unknown>) => {\n const message = files.length > 0\n ? `Review these files: ${files.join(\", \")}`\n : \"Review the recent changes\";\n\n const { startChatSession } = await import(\"../../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n\n await startChatSession({\n initialMessage: message,\n ...(model !== undefined ? { model } : {}),\n role: \"review\",\n streaming: true,\n });\n });\n\n return review;\n}\n","/**\n * Testing mode command per PRD section 5.1\n */\n\nimport { Command } from \"commander\";\n\nexport function createTestCommand(): Command {\n const test = new Command(\"test\")\n .description(\"Testing mode with a cost-efficient model\")\n .argument(\"[message...]\", \"Testing prompt\")\n .option(\"-m, --model <model>\", \"Override model (default: testing role)\")\n .action(async (messageParts: string[], options: Record<string, unknown>) => {\n const message = messageParts.join(\" \");\n\n const { startChatSession } = await import(\"../../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n\n await startChatSession({\n initialMessage: message || \"Generate tests for the recent changes\",\n ...(model !== undefined ? { model } : {}),\n role: \"testing\",\n streaming: true,\n });\n });\n\n return test;\n}\n","/**\n * Configuration management commands per PRD section 12.3\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\n\nexport function createConfigCommand(): Command {\n const config = new Command(\"config\")\n .description(\"Configuration management\");\n\n config\n .command(\"get [key]\")\n .description(\"Get configuration value (or all if no key)\")\n .action(async (key: string | undefined) => {\n try {\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\n const store = new ConfigStore();\n const cfg = await store.loadGlobal();\n\n if (key) {\n const value = getNestedValue(cfg, key);\n if (value === undefined) {\n process.stderr.write(pc.red(`Configuration key not found: ${key}\\n`));\n process.exitCode = 1;\n return;\n }\n process.stdout.write(`${key} = ${JSON.stringify(value, null, 2)}\\n`);\n } else {\n process.stdout.write(JSON.stringify(cfg, null, 2) + \"\\n\");\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Failed to read config: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n config\n .command(\"set <key> <value>\")\n .description(\"Set a configuration value\")\n .action(async (key: string, value: string) => {\n try {\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\n const store = new ConfigStore();\n const cfg = await store.loadGlobal();\n\n let parsedValue: unknown;\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n\n setNestedValue(cfg as unknown as Record<string, unknown>, key, parsedValue);\n await store.saveGlobal(cfg);\n process.stdout.write(pc.green(`Set ${key} = ${JSON.stringify(parsedValue)}\\n`));\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Failed to set config: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n config\n .command(\"init\")\n .description(\"Initialize configuration with interactive setup\")\n .action(async () => {\n try {\n const { runFirstRunSetup } = await import(\"../../ui/App.js\");\n await runFirstRunSetup();\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Setup failed: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n return config;\n}\n\nfunction getNestedValue(obj: unknown, path: string): unknown {\n const keys = path.split(\".\");\n let current: unknown = obj;\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== \"object\") {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\nfunction setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {\n const keys = path.split(\".\");\n let current: Record<string, unknown> = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!key) continue;\n if (typeof current[key] !== \"object\" || current[key] === null) {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n const lastKey = keys[keys.length - 1];\n if (lastKey) {\n current[lastKey] = value;\n }\n}\n","/**\n * Authentication management commands per PRD section 13.2\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport type { ProviderName } from \"../../types/index.js\";\n\nconst VALID_PROVIDERS = [\"claude\", \"codex\", \"gemini\", \"kimi\"] as const;\ntype LoginProvider = (typeof VALID_PROVIDERS)[number];\n\nfunction isValidProvider(value: string): value is LoginProvider {\n return (VALID_PROVIDERS as readonly string[]).includes(value);\n}\n\nconst PROVIDER_MODEL_SWITCH: Readonly<Record<LoginProvider, { provider: ProviderName; model: string }>> = {\n claude: { provider: \"anthropic\", model: \"claude-sonnet-4-6\" },\n codex: { provider: \"openai\", model: \"gpt-5.2\" },\n gemini: { provider: \"google\", model: \"gemini-2.5-pro\" },\n kimi: { provider: \"kimi\", model: \"kimi-for-coding\" },\n};\n\nexport function createAuthCommand(): Command {\n const auth = new Command(\"auth\")\n .description(\"Authentication & account management\");\n\n auth\n .command(\"login <provider>\")\n .description(\"Log in to a provider (claude, codex, gemini, kimi)\")\n .action(async (provider: string) => {\n if (!isValidProvider(provider)) {\n process.stderr.write(\n pc.red(`Unknown provider: \"${provider}\". Valid: ${VALID_PROVIDERS.join(\", \")}\\n`),\n );\n process.exitCode = 2;\n return;\n }\n\n process.stdout.write(pc.cyan(`Logging in to ${provider}...\\n`));\n\n try {\n const loginModule = await loadLoginModule(provider);\n await loginModule.login();\n process.stdout.write(pc.green(`Successfully logged in to ${provider}\\n`));\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Login failed: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n auth\n .command(\"logout [provider]\")\n .description(\"Log out of a provider (or all with --all)\")\n .option(\"--all\", \"Log out of all providers\")\n .action(async (provider: string | undefined, options: { all?: boolean }) => {\n if (options.all) {\n for (const p of VALID_PROVIDERS) {\n try {\n const loginModule = await loadLoginModule(p);\n await loginModule.logout();\n process.stdout.write(pc.green(`Logged out of ${p}\\n`));\n } catch {\n // Some may not be logged in\n }\n }\n return;\n }\n\n if (!provider || !isValidProvider(provider)) {\n process.stderr.write(\n pc.red(`Specify a provider or use --all. Valid: ${VALID_PROVIDERS.join(\", \")}\\n`),\n );\n process.exitCode = 2;\n return;\n }\n\n try {\n const loginModule = await loadLoginModule(provider);\n await loginModule.logout();\n process.stdout.write(pc.green(`Logged out of ${provider}\\n`));\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Logout failed: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n auth\n .command(\"status\")\n .description(\"Show login status for all providers\")\n .action(async () => {\n for (const provider of VALID_PROVIDERS) {\n try {\n const loginModule = await loadLoginModule(provider);\n const status = await loginModule.getStatus();\n if (status.loggedIn) {\n process.stdout.write(\n pc.green(` ✓ ${provider}`) +\n ` — Logged in as ${status.email ?? \"unknown\"} (${status.plan ?? \"unknown plan\"})\\n`,\n );\n } else {\n process.stdout.write(pc.red(` ✗ ${provider}`) + \" — Not logged in\\n\");\n }\n } catch {\n process.stdout.write(pc.red(` ✗ ${provider}`) + \" — Not configured\\n\");\n }\n }\n\n try {\n const { ApiKeyFallback } = await import(\"../../auth/api-key-fallback.js\");\n const fallback = new ApiKeyFallback();\n const apiKeyStatus: ReadonlyArray<{ label: string; provider: ProviderName }> = [\n { label: \"Claude\", provider: \"anthropic\" },\n { label: \"OpenAI\", provider: \"openai\" },\n { label: \"Google\", provider: \"google\" },\n { label: \"Kimi\", provider: \"kimi\" },\n ];\n\n process.stdout.write(\"\\nFallback API keys:\\n\");\n for (const item of apiKeyStatus) {\n const hasKey = await fallback.hasKey(item.provider);\n process.stdout.write(` ${item.label}: ${hasKey ? \"set\" : \"not set\"}\\n`);\n }\n } catch {\n // Best-effort status output\n }\n });\n\n auth\n .command(\"set-key <provider> <key>\")\n .description(\"Set an API key for a provider (fallback for CI/headless)\")\n .action(async (provider: string, key: string) => {\n if (!isValidProvider(provider) && provider !== \"openai\" && provider !== \"google\") {\n process.stderr.write(pc.red(`Unknown provider: \"${provider}\"\\n`));\n process.exitCode = 2;\n return;\n }\n\n try {\n const { ApiKeyFallback } = await import(\"../../auth/api-key-fallback.js\");\n const fallback = new ApiKeyFallback();\n const providerMap: Record<string, ProviderName> = {\n claude: \"anthropic\",\n openai: \"openai\",\n codex: \"openai\",\n gemini: \"google\",\n google: \"google\",\n kimi: \"kimi\",\n };\n const mappedProvider = providerMap[provider];\n if (mappedProvider) {\n await fallback.setKey(mappedProvider, key);\n process.stdout.write(pc.green(`API key set for ${provider}\\n`));\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Failed to set key: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n auth\n .command(\"switch <provider>\")\n .description(\"Set a provider as the default\")\n .action(async (provider: string) => {\n if (!isValidProvider(provider)) {\n process.stderr.write(\n pc.red(`Unknown provider: \"${provider}\". Valid: ${VALID_PROVIDERS.join(\", \")}\\n`),\n );\n process.exitCode = 2;\n return;\n }\n\n try {\n const target = PROVIDER_MODEL_SWITCH[provider];\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\n const store = new ConfigStore();\n const cfg = store.loadGlobal();\n\n const nextConfig = {\n ...cfg,\n defaultModel: target.model,\n providers: {\n ...cfg.providers,\n [target.provider]: {\n ...(cfg.providers[target.provider] ?? {}),\n enabled: true,\n },\n },\n };\n\n store.saveGlobal(nextConfig);\n process.stdout.write(\n pc.green(`Default provider switched to ${provider} (model: ${target.model})\\n`),\n );\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Failed to switch provider: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n return auth;\n}\n\ninterface ILoginModule {\n login(): Promise<unknown>;\n logout(): Promise<void>;\n getStatus(): Promise<{ loggedIn: boolean; email?: string | undefined; plan?: string | undefined }>;\n}\n\nasync function loadLoginModule(provider: LoginProvider): Promise<ILoginModule> {\n switch (provider) {\n case \"claude\": {\n const mod = await import(\"../../auth/providers/claude-login.js\");\n return new mod.ClaudeLogin();\n }\n case \"codex\": {\n const mod = await import(\"../../auth/providers/codex-login.js\");\n return new mod.CodexLogin();\n }\n case \"gemini\": {\n const mod = await import(\"../../auth/providers/gemini-login.js\");\n return new mod.GeminiLogin();\n }\n case \"kimi\": {\n const mod = await import(\"../../auth/providers/kimi-login.js\");\n return new mod.KimiLogin();\n }\n }\n}\n","#!/usr/bin/env node\n\n/**\n * AemeathCLI — Main CLI entry point\n * Per PRD section 6.1: Commander.js setup with subcommand routing\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { randomUUID } from \"node:crypto\";\nimport { createChatCommand } from \"./commands/chat.js\";\nimport { createPlanCommand } from \"./commands/plan.js\";\nimport { createReviewCommand } from \"./commands/review.js\";\nimport { createTestCommand } from \"./commands/test.js\";\nimport { createConfigCommand } from \"./commands/config.js\";\nimport { createAuthCommand } from \"./commands/auth.js\";\nimport { initializeDirectories } from \"../utils/index.js\";\nimport { logger } from \"../utils/index.js\";\nimport type { IIPCMessage } from \"../types/index.js\";\nimport type { ProviderRegistry } from \"../providers/registry.js\";\nimport type { ToolRegistry } from \"../tools/registry.js\";\nimport type { IChatMessage, IToolCall } from \"../types/message.js\";\n\nconst VERSION = \"1.0.0\";\n\nfunction getFlagValue(args: readonly string[], flag: string): string | undefined {\n const index = args.indexOf(flag);\n if (index === -1) {\n return undefined;\n }\n const value = args[index + 1];\n return value && !value.startsWith(\"-\") ? value : undefined;\n}\n\nfunction isIPCMessage(value: unknown): value is IIPCMessage {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const record = value as Record<string, unknown>;\n return record[\"jsonrpc\"] === \"2.0\" && typeof record[\"method\"] === \"string\";\n}\n\nfunction sendAgentIPC(method: IIPCMessage[\"method\"], params: Record<string, unknown>): void {\n if (typeof process.send === \"function\") {\n const message: IIPCMessage = {\n jsonrpc: \"2.0\",\n method,\n params,\n };\n process.send(message);\n }\n}\n\nasync function maybeRunAgentMode(args: readonly string[]): Promise<boolean> {\n if (!args.includes(\"--agent\") && process.env[\"AEMEATHCLI_AGENT_MODE\"] !== \"1\") {\n return false;\n }\n\n const teamName = getFlagValue(args, \"--team\") ?? process.env[\"AEMEATHCLI_TEAM_NAME\"] ?? \"unknown-team\";\n const agentName = getFlagValue(args, \"--name\") ?? process.env[\"AEMEATHCLI_AGENT_NAME\"] ?? \"agent\";\n const model = getFlagValue(args, \"--model\") ?? \"claude-sonnet-4-6\";\n const role = getFlagValue(args, \"--role\") ?? \"coding\";\n const agentId = process.env[\"AEMEATHCLI_AGENT_ID\"] ?? randomUUID();\n\n // Lazily-initialized provider registry (shared across tasks for this agent)\n let registryPromise: Promise<ProviderRegistry> | undefined;\n\n function getRegistry(): Promise<ProviderRegistry> {\n if (!registryPromise) {\n registryPromise = import(\"../providers/registry.js\").then(\n ({ createDefaultRegistry }) => createDefaultRegistry(),\n );\n }\n return registryPromise;\n }\n\n // Lazily-initialized tool registry (shared across tasks for this agent)\n let toolRegistryPromise: Promise<ToolRegistry> | undefined;\n\n function getToolRegistry(): Promise<ToolRegistry> {\n if (!toolRegistryPromise) {\n toolRegistryPromise = import(\"../tools/index.js\").then(\n ({ createDefaultRegistry: createToolReg }) =>\n createToolReg({\n projectRoot: process.cwd(),\n workingDirectory: process.cwd(),\n permissionMode: \"permissive\" as const,\n allowedPaths: [process.cwd()],\n blockedCommands: [],\n }),\n );\n }\n return toolRegistryPromise;\n }\n\n /** Format a one-line summary of a tool call for the agent output panel. */\n function formatToolActivity(name: string, args: Record<string, unknown>): string {\n switch (name) {\n case \"read\":\n case \"write\":\n case \"edit\":\n return typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\n case \"glob\":\n return typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\n case \"grep\": {\n const pat = typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\n const dir = typeof args[\"path\"] === \"string\" ? ` in ${args[\"path\"]}` : \"\";\n return `\"${pat}\"${dir}`;\n }\n case \"bash\": {\n const cmd = typeof args[\"command\"] === \"string\" ? args[\"command\"] : \"\";\n return cmd.length > 60 ? cmd.slice(0, 60) + \"...\" : cmd;\n }\n default:\n return JSON.stringify(args).slice(0, 60);\n }\n }\n\n /** Short summary of a tool result for the activity feed. */\n function formatResultSummary(name: string, content: string, isError: boolean): string {\n if (isError) return `Error: ${content.slice(0, 100)}`;\n const lines = content.split(\"\\n\").length;\n switch (name) {\n case \"read\": return `${lines} lines`;\n case \"glob\": return content === \"No files found\" ? \"no files\" : `${lines} files`;\n case \"grep\": return content === \"No matches found.\" ? \"no matches\" : `${lines} lines`;\n case \"write\":\n case \"edit\": return content.length > 80 ? content.slice(0, 80) : content;\n default: return content.length > 80 ? content.slice(0, 80) + \"...\" : content;\n }\n }\n\n const MAX_TOOL_ITERATIONS = 10;\n const MAX_TOOL_RESULT_LENGTH = 10_000;\n\n async function processTask(taskId: string, prompt: string): Promise<void> {\n sendAgentIPC(\"agent.taskUpdate\", { agentId, taskId, status: \"in_progress\" });\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `Initializing provider for ${model}...\\n`,\n });\n\n try {\n const registry = await getRegistry();\n\n if (!registry.hasModel(model)) {\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `\\nError: No provider available for model \"${model}\". Check authentication with 'aemeathcli auth login'.\\n`,\n });\n sendAgentIPC(\"agent.taskUpdate\", { agentId, taskId, status: \"completed\" });\n return;\n }\n\n const provider = registry.getForModel(model);\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `Provider ready (${provider.name}). Loading tools...\\n`,\n });\n const toolRegistry = await getToolRegistry();\n const toolDefs = toolRegistry.getDefinitions();\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `${toolDefs.length} tools loaded. Sending request to ${model}...\\n`,\n });\n const toolContext = {\n projectRoot: process.cwd(),\n workingDirectory: process.cwd(),\n permissionMode: \"permissive\" as const,\n allowedPaths: [process.cwd()],\n blockedCommands: [] as string[],\n };\n\n const systemPrompt = `You are ${agentName}, an AI agent in team \"${teamName}\" with the role of ${role}. You have access to tools for reading files, writing files, editing code, searching, and executing shell commands. Use these tools to complete the assigned task thoroughly. Focus only on your specific role.`;\n\n const messages: IChatMessage[] = [{\n id: randomUUID(),\n role: \"user\" as const,\n content: prompt,\n createdAt: new Date(),\n }];\n\n for (let iteration = 0; iteration < MAX_TOOL_ITERATIONS; iteration++) {\n let collectedText = \"\";\n const collectedToolCalls: IToolCall[] = [];\n\n const stream = provider.stream({\n model,\n messages,\n system: systemPrompt,\n maxTokens: 8000,\n ...(toolDefs.length > 0 ? { tools: toolDefs } : {}),\n });\n\n for await (const chunk of stream) {\n if (chunk.type === \"text\" && chunk.content) {\n collectedText += chunk.content;\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: chunk.content,\n });\n } else if (chunk.type === \"tool_call\" && chunk.toolCall) {\n collectedToolCalls.push(chunk.toolCall);\n const tc = chunk.toolCall;\n const summary = formatToolActivity(tc.name, tc.arguments);\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `\\n\\u2699 ${tc.name} ${summary}\\n`,\n });\n } else if (chunk.type === \"error\" && chunk.error) {\n // Truncate error messages to prevent raw CLI output dumps\n const errorMsg = chunk.error.length > 300\n ? chunk.error.slice(0, 300) + \"...\"\n : chunk.error;\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `\\nStream error: ${errorMsg}\\n`,\n });\n }\n }\n\n // No tool calls → agent finished\n if (collectedToolCalls.length === 0) {\n break;\n }\n\n // Add assistant message with tool calls to conversation\n messages.push({\n id: randomUUID(),\n role: \"assistant\" as const,\n content: collectedText,\n toolCalls: collectedToolCalls,\n createdAt: new Date(),\n });\n\n // Execute each tool call and add results\n for (const tc of collectedToolCalls) {\n const result = await toolRegistry.execute(tc, toolContext);\n\n const briefResult = formatResultSummary(tc.name, result.content, result.isError);\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: ` \\u2192 ${briefResult}\\n`,\n });\n\n const truncatedContent = result.content.length > MAX_TOOL_RESULT_LENGTH\n ? result.content.slice(0, MAX_TOOL_RESULT_LENGTH) + \"\\n...(truncated)\"\n : result.content;\n\n messages.push({\n id: randomUUID(),\n role: \"tool\" as const,\n content: truncatedContent,\n toolCalls: [{ id: tc.id, name: tc.name, arguments: {} }],\n createdAt: new Date(),\n });\n }\n }\n } catch (error: unknown) {\n const rawMsg = error instanceof Error ? error.message : String(error);\n // Truncate to prevent raw CLI output from flooding the panel\n const msg = rawMsg.length > 300 ? rawMsg.slice(0, 300) + \"...\" : rawMsg;\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `\\nError: ${msg}\\n`,\n });\n }\n\n sendAgentIPC(\"agent.taskUpdate\", { agentId, taskId, status: \"completed\" });\n }\n\n sendAgentIPC(\"agent.register\", {\n agentId,\n agentName,\n teamName,\n model,\n role,\n });\n\n const keepAlive = setInterval(() => {\n // Keep event loop alive for IPC mode.\n }, 60_000);\n\n const shutdown = (): void => {\n clearInterval(keepAlive);\n process.exit(0);\n };\n\n process.on(\"message\", (raw: unknown) => {\n if (!isIPCMessage(raw)) {\n return;\n }\n\n if (raw.method === \"hub.taskAssign\") {\n const taskId = typeof raw.params[\"taskId\"] === \"string\"\n ? raw.params[\"taskId\"]\n : randomUUID();\n const subject = typeof raw.params[\"subject\"] === \"string\"\n ? raw.params[\"subject\"]\n : \"\";\n const description = typeof raw.params[\"description\"] === \"string\"\n ? raw.params[\"description\"]\n : \"\";\n\n void processTask(taskId, description || subject || \"Describe what you can help with.\");\n return;\n }\n\n if (raw.method === \"hub.shutdown\") {\n shutdown();\n }\n });\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n // Keep the child process alive for IPC task dispatch.\n await new Promise<void>(() => {});\n return true;\n}\n\nasync function main(): Promise<void> {\n if (await maybeRunAgentMode(process.argv.slice(2))) {\n return;\n }\n\n // Initialize directories on startup\n initializeDirectories();\n\n const program = new Command()\n .name(\"aemeathcli\")\n .description(\n \"Next-generation multi-model CLI coding tool with agent teams and split-panel coordination\",\n )\n .version(VERSION, \"-v, --version\")\n .option(\"-m, --model <model>\", \"Override model for this session\")\n .option(\"-r, --role <role>\", \"Set the task role\")\n .option(\"--verbose\", \"Enable verbose output\")\n .option(\"--no-color\", \"Disable colored output\")\n .option(\"--permission-mode <mode>\", \"Permission mode (strict, standard, permissive)\")\n .option(\"--project-root <path>\", \"Override project root detection\");\n\n // Register subcommands\n program.addCommand(createChatCommand());\n program.addCommand(createPlanCommand());\n program.addCommand(createReviewCommand());\n program.addCommand(createTestCommand());\n program.addCommand(createConfigCommand());\n program.addCommand(createAuthCommand());\n\n // Default action (no subcommand) — start interactive chat\n program.action(async (options: Record<string, unknown>, command: Command) => {\n // If extra arguments provided, treat as chat message\n const args = command.args;\n let message = args.length > 0 ? args.join(\" \") : undefined;\n\n // Support reading initial prompt from file (used by split-panel mode\n // where each agent pane is launched with AEMEATHCLI_PROMPT_FILE pointing\n // to a temp file containing the agent's task prompt).\n let isAgentPane = false;\n if (message === undefined) {\n const promptFilePath = process.env[\"AEMEATHCLI_PROMPT_FILE\"];\n if (promptFilePath !== undefined && promptFilePath.length > 0) {\n try {\n const { readFileSync } = await import(\"node:fs\");\n message = readFileSync(promptFilePath, \"utf-8\").trim();\n isAgentPane = true;\n } catch {\n // Prompt file not found — continue without initial message\n }\n }\n }\n\n const { startChatSession } = await import(\"../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n const role = options[\"role\"] as string | undefined;\n\n await startChatSession({\n ...(message !== undefined ? { initialMessage: message } : {}),\n ...(model !== undefined ? { model } : {}),\n ...(role !== undefined ? { role } : {}),\n ...(isAgentPane ? { isAgentPane: true } : {}),\n streaming: true,\n });\n });\n\n // Check for updates (non-blocking, per PRD section 19.3)\n checkForUpdates();\n\n // Parse and execute\n try {\n await program.parseAsync(process.argv);\n } catch (error: unknown) {\n if (error instanceof Error) {\n logger.error({ error: error.message }, \"CLI error\");\n process.stderr.write(pc.red(`Error: ${error.message}\\n`));\n }\n process.exitCode = 1;\n }\n}\n\nfunction checkForUpdates(): void {\n // Lazy-load to keep startup fast\n import(\"update-notifier\")\n .then(({ default: updateNotifier }) => {\n const notifier = updateNotifier({\n pkg: { name: \"aemeathcli\", version: VERSION },\n updateCheckInterval: 1000 * 60 * 60 * 24, // 24 hours\n });\n notifier.notify({ isGlobal: true });\n })\n .catch(() => {\n // Silently ignore update check failures\n });\n}\n\nmain().catch((error: unknown) => {\n process.stderr.write(\n pc.red(`Fatal error: ${error instanceof Error ? error.message : String(error)}\\n`),\n );\n process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/chat.ts","../src/cli/commands/plan.ts","../src/cli/commands/review.ts","../src/cli/commands/test.ts","../src/cli/commands/config.ts","../src/cli/commands/auth.ts","../src/cli/cli.ts"],"names":["Command","pc","args"],"mappings":"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","file":"cli.js","sourcesContent":["/**\n * Interactive chat mode command per PRD section 18.2\n */\n\nimport { Command } from \"commander\";\nimport type { IGlobalFlags } from \"../flags.js\";\n\nexport function createChatCommand(): Command {\n const chat = new Command(\"chat\")\n .description(\"Start interactive chat mode (default)\")\n .argument(\"[message...]\", \"Initial message to send\")\n .option(\"-m, --model <model>\", \"Override model for this session\")\n .option(\"-r, --role <role>\", \"Set the task role (planning, coding, review, testing, bugfix)\")\n .option(\"--system <prompt>\", \"Custom system prompt\")\n .option(\"--no-stream\", \"Disable streaming output\")\n .action(async (messageParts: string[], options: Record<string, unknown>) => {\n const message = messageParts.join(\" \");\n\n // Lazy-load the TUI to keep startup fast\n const { startChatSession } = await import(\"../../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n const role = options[\"role\"] as string | undefined;\n const systemPrompt = options[\"system\"] as string | undefined;\n const initialMessage = message || undefined;\n\n await startChatSession({\n ...(initialMessage !== undefined ? { initialMessage } : {}),\n ...(model !== undefined ? { model } : {}),\n ...(role !== undefined ? { role } : {}),\n ...(systemPrompt !== undefined ? { systemPrompt } : {}),\n streaming: options[\"stream\"] !== false,\n });\n });\n\n return chat;\n}\n","/**\n * Planning mode command per PRD section 5.1\n */\n\nimport { Command } from \"commander\";\n\nexport function createPlanCommand(): Command {\n const plan = new Command(\"plan\")\n .description(\"Enter planning mode with a high-reasoning model\")\n .argument(\"[message...]\", \"Planning prompt\")\n .option(\"-m, --model <model>\", \"Override model (default: planning role)\")\n .action(async (messageParts: string[], options: Record<string, unknown>) => {\n const message = messageParts.join(\" \");\n\n const { startChatSession } = await import(\"../../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n const initialMessage = message || undefined;\n\n await startChatSession({\n ...(initialMessage !== undefined ? { initialMessage } : {}),\n ...(model !== undefined ? { model } : {}),\n role: \"planning\",\n streaming: true,\n });\n });\n\n return plan;\n}\n","/**\n * Code review mode command per PRD section 5.1\n */\n\nimport { Command } from \"commander\";\n\nexport function createReviewCommand(): Command {\n const review = new Command(\"review\")\n .description(\"Code review mode with a thorough model\")\n .argument(\"[files...]\", \"Files to review\")\n .option(\"-m, --model <model>\", \"Override model (default: review role)\")\n .action(async (files: string[], options: Record<string, unknown>) => {\n const message = files.length > 0\n ? `Review these files: ${files.join(\", \")}`\n : \"Review the recent changes\";\n\n const { startChatSession } = await import(\"../../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n\n await startChatSession({\n initialMessage: message,\n ...(model !== undefined ? { model } : {}),\n role: \"review\",\n streaming: true,\n });\n });\n\n return review;\n}\n","/**\n * Testing mode command per PRD section 5.1\n */\n\nimport { Command } from \"commander\";\n\nexport function createTestCommand(): Command {\n const test = new Command(\"test\")\n .description(\"Testing mode with a cost-efficient model\")\n .argument(\"[message...]\", \"Testing prompt\")\n .option(\"-m, --model <model>\", \"Override model (default: testing role)\")\n .action(async (messageParts: string[], options: Record<string, unknown>) => {\n const message = messageParts.join(\" \");\n\n const { startChatSession } = await import(\"../../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n\n await startChatSession({\n initialMessage: message || \"Generate tests for the recent changes\",\n ...(model !== undefined ? { model } : {}),\n role: \"testing\",\n streaming: true,\n });\n });\n\n return test;\n}\n","/**\n * Configuration management commands per PRD section 12.3\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\n\nexport function createConfigCommand(): Command {\n const config = new Command(\"config\")\n .description(\"Configuration management\");\n\n config\n .command(\"get [key]\")\n .description(\"Get configuration value (or all if no key)\")\n .action(async (key: string | undefined) => {\n try {\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\n const store = new ConfigStore();\n const cfg = await store.loadGlobal();\n\n if (key) {\n const value = getNestedValue(cfg, key);\n if (value === undefined) {\n process.stderr.write(pc.red(`Configuration key not found: ${key}\\n`));\n process.exitCode = 1;\n return;\n }\n process.stdout.write(`${key} = ${JSON.stringify(value, null, 2)}\\n`);\n } else {\n process.stdout.write(JSON.stringify(cfg, null, 2) + \"\\n\");\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Failed to read config: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n config\n .command(\"set <key> <value>\")\n .description(\"Set a configuration value\")\n .action(async (key: string, value: string) => {\n try {\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\n const store = new ConfigStore();\n const cfg = await store.loadGlobal();\n\n let parsedValue: unknown;\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n\n setNestedValue(cfg as unknown as Record<string, unknown>, key, parsedValue);\n await store.saveGlobal(cfg);\n process.stdout.write(pc.green(`Set ${key} = ${JSON.stringify(parsedValue)}\\n`));\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Failed to set config: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n config\n .command(\"init\")\n .description(\"Initialize configuration with interactive setup\")\n .action(async () => {\n try {\n const { runFirstRunSetup } = await import(\"../../ui/App.js\");\n await runFirstRunSetup();\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Setup failed: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n return config;\n}\n\nfunction getNestedValue(obj: unknown, path: string): unknown {\n const keys = path.split(\".\");\n let current: unknown = obj;\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== \"object\") {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\nfunction setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {\n const keys = path.split(\".\");\n let current: Record<string, unknown> = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!key) continue;\n if (typeof current[key] !== \"object\" || current[key] === null) {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n const lastKey = keys[keys.length - 1];\n if (lastKey) {\n current[lastKey] = value;\n }\n}\n","/**\n * Authentication management commands per PRD section 13.2\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { select } from \"@inquirer/prompts\";\nimport type { ProviderName } from \"../../types/index.js\";\n\nconst VALID_PROVIDERS = [\"claude\", \"codex\", \"gemini\", \"kimi\"] as const;\ntype LoginProvider = (typeof VALID_PROVIDERS)[number];\n\nfunction isValidProvider(value: string): value is LoginProvider {\n return (VALID_PROVIDERS as readonly string[]).includes(value);\n}\n\nconst PROVIDER_MODEL_SWITCH: Readonly<Record<LoginProvider, { provider: ProviderName; model: string }>> = {\n claude: { provider: \"anthropic\", model: \"claude-sonnet-4-6\" },\n codex: { provider: \"openai\", model: \"gpt-5.2\" },\n gemini: { provider: \"google\", model: \"gemini-2.5-pro\" },\n kimi: { provider: \"kimi\", model: \"kimi-for-coding\" },\n};\n\n/**\n * Top-level `login` command with interactive provider selection.\n * Shows an arrow-key navigable list of providers, then triggers\n * browser-based login for the selected one.\n */\nexport function createLoginCommand(): Command {\n return new Command(\"login\")\n .description(\"Log in to a provider (interactive)\")\n .argument(\"[provider]\", \"Provider to log in to (claude, codex, gemini, kimi)\")\n .action(async (providerArg: string | undefined) => {\n let provider: LoginProvider;\n\n if (providerArg !== undefined) {\n // Direct invocation: `aemeathcli login claude`\n if (!isValidProvider(providerArg)) {\n process.stderr.write(\n pc.red(`Unknown provider: \"${providerArg}\". Valid: ${VALID_PROVIDERS.join(\", \")}\\n`),\n );\n process.exitCode = 2;\n return;\n }\n provider = providerArg;\n } else {\n // Interactive selection\n provider = await select<LoginProvider>({\n message: \"Select a provider to log in to:\",\n choices: [\n { name: \"Claude (Anthropic)\", value: \"claude\" },\n { name: \"Codex (OpenAI)\", value: \"codex\" },\n { name: \"Gemini (Google)\", value: \"gemini\" },\n { name: \"Kimi (Moonshot)\", value: \"kimi\" },\n ],\n });\n }\n\n process.stdout.write(pc.cyan(`\\nLogging in to ${provider}...\\n`));\n\n try {\n const loginModule = await loadLoginModule(provider);\n await loginModule.login();\n process.stdout.write(pc.green(`Successfully logged in to ${provider}\\n`));\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Login failed: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n}\n\nexport function createAuthCommand(): Command {\n const auth = new Command(\"auth\")\n .description(\"Authentication & account management\");\n\n auth\n .command(\"login <provider>\")\n .description(\"Log in to a provider (claude, codex, gemini, kimi)\")\n .action(async (provider: string) => {\n if (!isValidProvider(provider)) {\n process.stderr.write(\n pc.red(`Unknown provider: \"${provider}\". Valid: ${VALID_PROVIDERS.join(\", \")}\\n`),\n );\n process.exitCode = 2;\n return;\n }\n\n process.stdout.write(pc.cyan(`Logging in to ${provider}...\\n`));\n\n try {\n const loginModule = await loadLoginModule(provider);\n await loginModule.login();\n process.stdout.write(pc.green(`Successfully logged in to ${provider}\\n`));\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Login failed: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n auth\n .command(\"logout [provider]\")\n .description(\"Log out of a provider (or all with --all)\")\n .option(\"--all\", \"Log out of all providers\")\n .action(async (provider: string | undefined, options: { all?: boolean }) => {\n if (options.all) {\n for (const p of VALID_PROVIDERS) {\n try {\n const loginModule = await loadLoginModule(p);\n await loginModule.logout();\n process.stdout.write(pc.green(`Logged out of ${p}\\n`));\n } catch {\n // Some may not be logged in\n }\n }\n return;\n }\n\n if (!provider || !isValidProvider(provider)) {\n process.stderr.write(\n pc.red(`Specify a provider or use --all. Valid: ${VALID_PROVIDERS.join(\", \")}\\n`),\n );\n process.exitCode = 2;\n return;\n }\n\n try {\n const loginModule = await loadLoginModule(provider);\n await loginModule.logout();\n process.stdout.write(pc.green(`Logged out of ${provider}\\n`));\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Logout failed: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n auth\n .command(\"status\")\n .description(\"Show login status for all providers\")\n .action(async () => {\n for (const provider of VALID_PROVIDERS) {\n try {\n const loginModule = await loadLoginModule(provider);\n const status = await loginModule.getStatus();\n if (status.loggedIn) {\n process.stdout.write(\n pc.green(` ✓ ${provider}`) +\n ` — Logged in as ${status.email ?? \"unknown\"} (${status.plan ?? \"unknown plan\"})\\n`,\n );\n } else {\n process.stdout.write(pc.red(` ✗ ${provider}`) + \" — Not logged in\\n\");\n }\n } catch {\n process.stdout.write(pc.red(` ✗ ${provider}`) + \" — Not configured\\n\");\n }\n }\n\n try {\n const { ApiKeyFallback } = await import(\"../../auth/api-key-fallback.js\");\n const fallback = new ApiKeyFallback();\n const apiKeyStatus: ReadonlyArray<{ label: string; provider: ProviderName }> = [\n { label: \"Claude\", provider: \"anthropic\" },\n { label: \"OpenAI\", provider: \"openai\" },\n { label: \"Google\", provider: \"google\" },\n { label: \"Kimi\", provider: \"kimi\" },\n ];\n\n process.stdout.write(\"\\nFallback API keys:\\n\");\n for (const item of apiKeyStatus) {\n const hasKey = await fallback.hasKey(item.provider);\n process.stdout.write(` ${item.label}: ${hasKey ? \"set\" : \"not set\"}\\n`);\n }\n } catch {\n // Best-effort status output\n }\n });\n\n auth\n .command(\"set-key <provider> <key>\")\n .description(\"Set an API key for a provider (fallback for CI/headless)\")\n .action(async (provider: string, key: string) => {\n if (!isValidProvider(provider) && provider !== \"openai\" && provider !== \"google\") {\n process.stderr.write(pc.red(`Unknown provider: \"${provider}\"\\n`));\n process.exitCode = 2;\n return;\n }\n\n try {\n const { ApiKeyFallback } = await import(\"../../auth/api-key-fallback.js\");\n const fallback = new ApiKeyFallback();\n const providerMap: Record<string, ProviderName> = {\n claude: \"anthropic\",\n openai: \"openai\",\n codex: \"openai\",\n gemini: \"google\",\n google: \"google\",\n kimi: \"kimi\",\n };\n const mappedProvider = providerMap[provider];\n if (mappedProvider) {\n await fallback.setKey(mappedProvider, key);\n process.stdout.write(pc.green(`API key set for ${provider}\\n`));\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Failed to set key: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n auth\n .command(\"switch <provider>\")\n .description(\"Set a provider as the default\")\n .action(async (provider: string) => {\n if (!isValidProvider(provider)) {\n process.stderr.write(\n pc.red(`Unknown provider: \"${provider}\". Valid: ${VALID_PROVIDERS.join(\", \")}\\n`),\n );\n process.exitCode = 2;\n return;\n }\n\n try {\n const target = PROVIDER_MODEL_SWITCH[provider];\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\n const store = new ConfigStore();\n const cfg = store.loadGlobal();\n\n const nextConfig = {\n ...cfg,\n defaultModel: target.model,\n providers: {\n ...cfg.providers,\n [target.provider]: {\n ...(cfg.providers[target.provider] ?? {}),\n enabled: true,\n },\n },\n };\n\n store.saveGlobal(nextConfig);\n process.stdout.write(\n pc.green(`Default provider switched to ${provider} (model: ${target.model})\\n`),\n );\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(pc.red(`Failed to switch provider: ${message}\\n`));\n process.exitCode = 3;\n }\n });\n\n return auth;\n}\n\ninterface ILoginModule {\n login(): Promise<unknown>;\n logout(): Promise<void>;\n getStatus(): Promise<{ loggedIn: boolean; email?: string | undefined; plan?: string | undefined }>;\n}\n\nasync function loadLoginModule(provider: LoginProvider): Promise<ILoginModule> {\n switch (provider) {\n case \"claude\": {\n const mod = await import(\"../../auth/providers/claude-login.js\");\n return new mod.ClaudeLogin();\n }\n case \"codex\": {\n const mod = await import(\"../../auth/providers/codex-login.js\");\n return new mod.CodexLogin();\n }\n case \"gemini\": {\n const mod = await import(\"../../auth/providers/gemini-login.js\");\n return new mod.GeminiLogin();\n }\n case \"kimi\": {\n const mod = await import(\"../../auth/providers/kimi-login.js\");\n return new mod.KimiLogin();\n }\n }\n}\n","#!/usr/bin/env node\n\n/**\n * AemeathCLI — Main CLI entry point\n * Per PRD section 6.1: Commander.js setup with subcommand routing\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { randomUUID } from \"node:crypto\";\nimport { createChatCommand } from \"./commands/chat.js\";\nimport { createPlanCommand } from \"./commands/plan.js\";\nimport { createReviewCommand } from \"./commands/review.js\";\nimport { createTestCommand } from \"./commands/test.js\";\nimport { createConfigCommand } from \"./commands/config.js\";\nimport { createAuthCommand, createLoginCommand } from \"./commands/auth.js\";\nimport { initializeDirectories } from \"../utils/index.js\";\nimport { logger } from \"../utils/index.js\";\nimport type { IIPCMessage } from \"../types/index.js\";\nimport type { ProviderRegistry } from \"../providers/registry.js\";\nimport type { ToolRegistry } from \"../tools/registry.js\";\nimport type { IChatMessage, IToolCall } from \"../types/message.js\";\n\nconst VERSION = \"1.0.0\";\n\nfunction getFlagValue(args: readonly string[], flag: string): string | undefined {\n const index = args.indexOf(flag);\n if (index === -1) {\n return undefined;\n }\n const value = args[index + 1];\n return value && !value.startsWith(\"-\") ? value : undefined;\n}\n\nfunction isIPCMessage(value: unknown): value is IIPCMessage {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const record = value as Record<string, unknown>;\n return record[\"jsonrpc\"] === \"2.0\" && typeof record[\"method\"] === \"string\";\n}\n\nfunction sendAgentIPC(method: IIPCMessage[\"method\"], params: Record<string, unknown>): void {\n if (typeof process.send === \"function\") {\n const message: IIPCMessage = {\n jsonrpc: \"2.0\",\n method,\n params,\n };\n process.send(message);\n }\n}\n\nasync function maybeRunAgentMode(args: readonly string[]): Promise<boolean> {\n if (!args.includes(\"--agent\") && process.env[\"AEMEATHCLI_AGENT_MODE\"] !== \"1\") {\n return false;\n }\n\n const teamName = getFlagValue(args, \"--team\") ?? process.env[\"AEMEATHCLI_TEAM_NAME\"] ?? \"unknown-team\";\n const agentName = getFlagValue(args, \"--name\") ?? process.env[\"AEMEATHCLI_AGENT_NAME\"] ?? \"agent\";\n const model = getFlagValue(args, \"--model\") ?? \"claude-sonnet-4-6\";\n const role = getFlagValue(args, \"--role\") ?? \"coding\";\n const agentId = process.env[\"AEMEATHCLI_AGENT_ID\"] ?? randomUUID();\n\n // Lazily-initialized provider registry (shared across tasks for this agent)\n let registryPromise: Promise<ProviderRegistry> | undefined;\n\n function getRegistry(): Promise<ProviderRegistry> {\n if (!registryPromise) {\n registryPromise = import(\"../providers/registry.js\").then(\n ({ createDefaultRegistry }) => createDefaultRegistry(),\n );\n }\n return registryPromise;\n }\n\n // Lazily-initialized tool registry (shared across tasks for this agent)\n let toolRegistryPromise: Promise<ToolRegistry> | undefined;\n\n function getToolRegistry(): Promise<ToolRegistry> {\n if (!toolRegistryPromise) {\n toolRegistryPromise = import(\"../tools/index.js\").then(\n ({ createDefaultRegistry: createToolReg }) =>\n createToolReg({\n projectRoot: process.cwd(),\n workingDirectory: process.cwd(),\n permissionMode: \"permissive\" as const,\n allowedPaths: [process.cwd()],\n blockedCommands: [],\n }),\n );\n }\n return toolRegistryPromise;\n }\n\n /** Format a one-line summary of a tool call for the agent output panel. */\n function formatToolActivity(name: string, args: Record<string, unknown>): string {\n switch (name) {\n case \"read\":\n case \"write\":\n case \"edit\":\n return typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\n case \"glob\":\n return typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\n case \"grep\": {\n const pat = typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\n const dir = typeof args[\"path\"] === \"string\" ? ` in ${args[\"path\"]}` : \"\";\n return `\"${pat}\"${dir}`;\n }\n case \"bash\": {\n const cmd = typeof args[\"command\"] === \"string\" ? args[\"command\"] : \"\";\n return cmd.length > 60 ? cmd.slice(0, 60) + \"...\" : cmd;\n }\n default:\n return JSON.stringify(args).slice(0, 60);\n }\n }\n\n /** Short summary of a tool result for the activity feed. */\n function formatResultSummary(name: string, content: string, isError: boolean): string {\n if (isError) return `Error: ${content.slice(0, 100)}`;\n const lines = content.split(\"\\n\").length;\n switch (name) {\n case \"read\": return `${lines} lines`;\n case \"glob\": return content === \"No files found\" ? \"no files\" : `${lines} files`;\n case \"grep\": return content === \"No matches found.\" ? \"no matches\" : `${lines} lines`;\n case \"write\":\n case \"edit\": return content.length > 80 ? content.slice(0, 80) : content;\n default: return content.length > 80 ? content.slice(0, 80) + \"...\" : content;\n }\n }\n\n const MAX_TOOL_ITERATIONS = 10;\n const MAX_TOOL_RESULT_LENGTH = 10_000;\n\n async function processTask(taskId: string, prompt: string): Promise<void> {\n sendAgentIPC(\"agent.taskUpdate\", { agentId, taskId, status: \"in_progress\" });\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `Initializing provider for ${model}...\\n`,\n });\n\n try {\n const registry = await getRegistry();\n\n if (!registry.hasModel(model)) {\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `\\nError: No provider available for model \"${model}\". Check authentication with 'aemeathcli auth login'.\\n`,\n });\n sendAgentIPC(\"agent.taskUpdate\", { agentId, taskId, status: \"completed\" });\n return;\n }\n\n const provider = registry.getForModel(model);\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `Provider ready (${provider.name}). Loading tools...\\n`,\n });\n const toolRegistry = await getToolRegistry();\n const toolDefs = toolRegistry.getDefinitions();\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `${toolDefs.length} tools loaded. Sending request to ${model}...\\n`,\n });\n const toolContext = {\n projectRoot: process.cwd(),\n workingDirectory: process.cwd(),\n permissionMode: \"permissive\" as const,\n allowedPaths: [process.cwd()],\n blockedCommands: [] as string[],\n };\n\n const systemPrompt = `You are ${agentName}, an AI agent in team \"${teamName}\" with the role of ${role}. You have access to tools for reading files, writing files, editing code, searching, and executing shell commands. Use these tools to complete the assigned task thoroughly. Focus only on your specific role.`;\n\n const messages: IChatMessage[] = [{\n id: randomUUID(),\n role: \"user\" as const,\n content: prompt,\n createdAt: new Date(),\n }];\n\n for (let iteration = 0; iteration < MAX_TOOL_ITERATIONS; iteration++) {\n let collectedText = \"\";\n const collectedToolCalls: IToolCall[] = [];\n\n const stream = provider.stream({\n model,\n messages,\n system: systemPrompt,\n maxTokens: 8000,\n ...(toolDefs.length > 0 ? { tools: toolDefs } : {}),\n });\n\n for await (const chunk of stream) {\n if (chunk.type === \"text\" && chunk.content) {\n collectedText += chunk.content;\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: chunk.content,\n });\n } else if (chunk.type === \"tool_call\" && chunk.toolCall) {\n collectedToolCalls.push(chunk.toolCall);\n const tc = chunk.toolCall;\n const summary = formatToolActivity(tc.name, tc.arguments);\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `\\n\\u2699 ${tc.name} ${summary}\\n`,\n });\n } else if (chunk.type === \"error\" && chunk.error) {\n // Truncate error messages to prevent raw CLI output dumps\n const errorMsg = chunk.error.length > 300\n ? chunk.error.slice(0, 300) + \"...\"\n : chunk.error;\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `\\nStream error: ${errorMsg}\\n`,\n });\n }\n }\n\n // No tool calls → agent finished\n if (collectedToolCalls.length === 0) {\n break;\n }\n\n // Add assistant message with tool calls to conversation\n messages.push({\n id: randomUUID(),\n role: \"assistant\" as const,\n content: collectedText,\n toolCalls: collectedToolCalls,\n createdAt: new Date(),\n });\n\n // Execute each tool call and add results\n for (const tc of collectedToolCalls) {\n const result = await toolRegistry.execute(tc, toolContext);\n\n const briefResult = formatResultSummary(tc.name, result.content, result.isError);\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: ` \\u2192 ${briefResult}\\n`,\n });\n\n const truncatedContent = result.content.length > MAX_TOOL_RESULT_LENGTH\n ? result.content.slice(0, MAX_TOOL_RESULT_LENGTH) + \"\\n...(truncated)\"\n : result.content;\n\n messages.push({\n id: randomUUID(),\n role: \"tool\" as const,\n content: truncatedContent,\n toolCalls: [{ id: tc.id, name: tc.name, arguments: {} }],\n createdAt: new Date(),\n });\n }\n }\n } catch (error: unknown) {\n const rawMsg = error instanceof Error ? error.message : String(error);\n // Truncate to prevent raw CLI output from flooding the panel\n const msg = rawMsg.length > 300 ? rawMsg.slice(0, 300) + \"...\" : rawMsg;\n sendAgentIPC(\"agent.streamChunk\", {\n agentId, taskId, model,\n content: `\\nError: ${msg}\\n`,\n });\n }\n\n sendAgentIPC(\"agent.taskUpdate\", { agentId, taskId, status: \"completed\" });\n }\n\n sendAgentIPC(\"agent.register\", {\n agentId,\n agentName,\n teamName,\n model,\n role,\n });\n\n const keepAlive = setInterval(() => {\n // Keep event loop alive for IPC mode.\n }, 60_000);\n\n const shutdown = (): void => {\n clearInterval(keepAlive);\n process.exit(0);\n };\n\n process.on(\"message\", (raw: unknown) => {\n if (!isIPCMessage(raw)) {\n return;\n }\n\n if (raw.method === \"hub.taskAssign\") {\n const taskId = typeof raw.params[\"taskId\"] === \"string\"\n ? raw.params[\"taskId\"]\n : randomUUID();\n const subject = typeof raw.params[\"subject\"] === \"string\"\n ? raw.params[\"subject\"]\n : \"\";\n const description = typeof raw.params[\"description\"] === \"string\"\n ? raw.params[\"description\"]\n : \"\";\n\n void processTask(taskId, description || subject || \"Describe what you can help with.\");\n return;\n }\n\n if (raw.method === \"hub.shutdown\") {\n shutdown();\n }\n });\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n // Keep the child process alive for IPC task dispatch.\n await new Promise<void>(() => {});\n return true;\n}\n\nasync function main(): Promise<void> {\n if (await maybeRunAgentMode(process.argv.slice(2))) {\n return;\n }\n\n // Initialize directories on startup\n initializeDirectories();\n\n const program = new Command()\n .name(\"aemeathcli\")\n .description(\n \"Next-generation multi-model CLI coding tool with agent teams and split-panel coordination\",\n )\n .version(VERSION, \"-v, --version\")\n .option(\"-m, --model <model>\", \"Override model for this session\")\n .option(\"-r, --role <role>\", \"Set the task role\")\n .option(\"--verbose\", \"Enable verbose output\")\n .option(\"--no-color\", \"Disable colored output\")\n .option(\"--permission-mode <mode>\", \"Permission mode (strict, standard, permissive)\")\n .option(\"--project-root <path>\", \"Override project root detection\");\n\n // Register subcommands\n program.addCommand(createChatCommand());\n program.addCommand(createPlanCommand());\n program.addCommand(createReviewCommand());\n program.addCommand(createTestCommand());\n program.addCommand(createConfigCommand());\n program.addCommand(createAuthCommand());\n program.addCommand(createLoginCommand());\n\n // Default action (no subcommand) — start interactive chat\n program.action(async (options: Record<string, unknown>, command: Command) => {\n // If extra arguments provided, treat as chat message\n const args = command.args;\n let message = args.length > 0 ? args.join(\" \") : undefined;\n\n // Support reading initial prompt from file (used by split-panel mode\n // where each agent pane is launched with AEMEATHCLI_PROMPT_FILE pointing\n // to a temp file containing the agent's task prompt).\n let isAgentPane = false;\n if (message === undefined) {\n const promptFilePath = process.env[\"AEMEATHCLI_PROMPT_FILE\"];\n if (promptFilePath !== undefined && promptFilePath.length > 0) {\n try {\n const { readFileSync } = await import(\"node:fs\");\n message = readFileSync(promptFilePath, \"utf-8\").trim();\n isAgentPane = true;\n } catch {\n // Prompt file not found — continue without initial message\n }\n }\n }\n\n const { startChatSession } = await import(\"../ui/App.js\");\n\n const model = options[\"model\"] as string | undefined;\n const role = options[\"role\"] as string | undefined;\n\n await startChatSession({\n ...(message !== undefined ? { initialMessage: message } : {}),\n ...(model !== undefined ? { model } : {}),\n ...(role !== undefined ? { role } : {}),\n ...(isAgentPane ? { isAgentPane: true } : {}),\n streaming: true,\n });\n });\n\n // Check for updates (non-blocking, per PRD section 19.3)\n checkForUpdates();\n\n // Parse and execute\n try {\n await program.parseAsync(process.argv);\n } catch (error: unknown) {\n if (error instanceof Error) {\n logger.error({ error: error.message }, \"CLI error\");\n process.stderr.write(pc.red(`Error: ${error.message}\\n`));\n }\n process.exitCode = 1;\n }\n}\n\nfunction checkForUpdates(): void {\n // Lazy-load to keep startup fast\n import(\"update-notifier\")\n .then(({ default: updateNotifier }) => {\n const notifier = updateNotifier({\n pkg: { name: \"aemeathcli\", version: VERSION },\n updateCheckInterval: 1000 * 60 * 60 * 24, // 24 hours\n });\n notifier.notify({ isGlobal: true });\n })\n .catch(() => {\n // Silently ignore update check failures\n });\n}\n\nmain().catch((error: unknown) => {\n process.stderr.write(\n pc.red(`Fatal error: ${error instanceof Error ? error.message : String(error)}\\n`),\n );\n process.exit(1);\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aemeathcli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Next-generation multi-model CLI coding tool with agent teams and split-panel coordination",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -65,11 +65,9 @@
|
|
|
65
65
|
"yaml": "^2.4.0",
|
|
66
66
|
"zod": "^3.23.0"
|
|
67
67
|
},
|
|
68
|
-
"optionalDependencies": {
|
|
69
|
-
"better-sqlite3": "^11.0.0",
|
|
70
|
-
"keytar": "^7.9.0"
|
|
71
|
-
},
|
|
72
68
|
"devDependencies": {
|
|
69
|
+
"better-sqlite3": "^11.0.0",
|
|
70
|
+
"keytar": "^7.9.0",
|
|
73
71
|
"@testing-library/react": "^15.0.0",
|
|
74
72
|
"@types/better-sqlite3": "^7.6.0",
|
|
75
73
|
"@types/node": "^22.0.0",
|