aemeathcli 1.0.9 → 1.0.11
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/LICENSE +21 -0
- package/README.md +609 -608
- package/dist/App-YAHJUWCX.js +4274 -0
- package/dist/App-YAHJUWCX.js.map +1 -0
- package/dist/agent-store/architect.md +32 -0
- package/dist/agent-store/debugger.md +32 -0
- package/dist/agent-store/developer.md +29 -0
- package/dist/agent-store/documenter.md +30 -0
- package/dist/agent-store/researcher.md +31 -0
- package/dist/agent-store/reviewer.md +28 -0
- package/dist/agent-store/supervisor.md +37 -0
- package/dist/agent-store/tester.md +30 -0
- package/dist/api-key-fallback-UN3TJEOO.js +11 -0
- package/dist/{api-key-fallback-YQQBOQIL.js.map → api-key-fallback-UN3TJEOO.js.map} +1 -1
- package/dist/auth-status-EIM5A5KL.js +13 -0
- package/dist/auth-status-EIM5A5KL.js.map +1 -0
- package/dist/{chunk-UY2SYSEZ.js → chunk-25UNNEHN.js} +32 -103
- package/dist/chunk-25UNNEHN.js.map +1 -0
- package/dist/{chunk-CYQNBB25.js → chunk-2GKOK6T7.js} +28 -5
- package/dist/chunk-2GKOK6T7.js.map +1 -0
- package/dist/{chunk-MFBHNWGV.js → chunk-2LF7ALGR.js} +12 -20
- package/dist/chunk-2LF7ALGR.js.map +1 -0
- package/dist/{chunk-H66O5Z2V.js → chunk-2NWNIKBK.js} +42 -7
- package/dist/chunk-2NWNIKBK.js.map +1 -0
- package/dist/chunk-3TSPZRGM.js +26 -0
- package/dist/chunk-3TSPZRGM.js.map +1 -0
- package/dist/{chunk-ZGOHARPV.js → chunk-473JN6M5.js} +2 -2
- package/dist/chunk-473JN6M5.js.map +1 -0
- package/dist/{chunk-IYW62KKR.js → chunk-5XFSV6PF.js} +66 -23
- package/dist/chunk-5XFSV6PF.js.map +1 -0
- package/dist/{chunk-HCIHOHLX.js → chunk-62HSGYQD.js} +2 -2
- package/dist/chunk-62HSGYQD.js.map +1 -0
- package/dist/{chunk-I5PZ4JTS.js → chunk-6GUD7QIM.js} +4 -4
- package/dist/chunk-6GUD7QIM.js.map +1 -0
- package/dist/{chunk-4IJD72YB.js → chunk-AQ23TYSQ.js} +7 -7
- package/dist/chunk-AQ23TYSQ.js.map +1 -0
- package/dist/{chunk-NBR3GHMT.js → chunk-BY4DAKUU.js} +39 -7
- package/dist/chunk-BY4DAKUU.js.map +1 -0
- package/dist/chunk-CC7MGWYY.js +12 -0
- package/dist/chunk-CC7MGWYY.js.map +1 -0
- package/dist/chunk-CTFZTARK.js +155 -0
- package/dist/chunk-CTFZTARK.js.map +1 -0
- package/dist/chunk-FIC7AK4Q.js +232 -0
- package/dist/chunk-FIC7AK4Q.js.map +1 -0
- package/dist/chunk-GU33WKPG.js +140 -0
- package/dist/chunk-GU33WKPG.js.map +1 -0
- package/dist/{chunk-VUG4IZ7J.js → chunk-H2SYKIMI.js} +10 -10
- package/dist/chunk-H2SYKIMI.js.map +1 -0
- package/dist/{chunk-JAXXTYID.js → chunk-HEKFAKVH.js} +2 -2
- package/dist/chunk-HEKFAKVH.js.map +1 -0
- package/dist/chunk-IARA5XYP.js +186 -0
- package/dist/chunk-IARA5XYP.js.map +1 -0
- package/dist/{chunk-HMJRPNPZ.js → chunk-LCYH4T6N.js} +95 -23
- package/dist/chunk-LCYH4T6N.js.map +1 -0
- package/dist/{chunk-CARHU3DO.js → chunk-LDVY5ELP.js} +66 -18
- package/dist/chunk-LDVY5ELP.js.map +1 -0
- package/dist/chunk-OCJPQFOR.js +88 -0
- package/dist/chunk-OCJPQFOR.js.map +1 -0
- package/dist/chunk-ODBY7S4X.js +141 -0
- package/dist/chunk-ODBY7S4X.js.map +1 -0
- package/dist/{chunk-DAHGLHNR.js → chunk-ONQ4WCUI.js} +7 -142
- package/dist/chunk-ONQ4WCUI.js.map +1 -0
- package/dist/{chunk-WPP3PEDE.js → chunk-P5TKZM3T.js} +32 -107
- package/dist/chunk-P5TKZM3T.js.map +1 -0
- package/dist/{chunk-ASGRGXYK.js → chunk-P66WDACW.js} +23 -22
- package/dist/chunk-P66WDACW.js.map +1 -0
- package/dist/{chunk-LSOYPSAT.js → chunk-QCRK4QEL.js} +4 -4
- package/dist/chunk-QCRK4QEL.js.map +1 -0
- package/dist/{chunk-YL5XFHR3.js → chunk-ROJPFPJ7.js} +2 -2
- package/dist/chunk-ROJPFPJ7.js.map +1 -0
- package/dist/chunk-RP2TAL3J.js +71 -0
- package/dist/chunk-RP2TAL3J.js.map +1 -0
- package/dist/{chunk-6PDJ45T4.js → chunk-RYOB3TLZ.js} +51 -26
- package/dist/chunk-RYOB3TLZ.js.map +1 -0
- package/dist/{chunk-Y5XVD2CD.js → chunk-SOQFMNQC.js} +110 -83
- package/dist/chunk-SOQFMNQC.js.map +1 -0
- package/dist/{chunk-TEVZS4FA.js → chunk-TDFTX32B.js} +16 -9
- package/dist/chunk-TDFTX32B.js.map +1 -0
- package/dist/chunk-VBLLDY4R.js +38 -0
- package/dist/chunk-VBLLDY4R.js.map +1 -0
- package/dist/{chunk-CGEV3ARR.js → chunk-VJNQJALF.js} +4 -4
- package/dist/chunk-VJNQJALF.js.map +1 -0
- package/dist/chunk-WAYSJMPS.js +26 -0
- package/dist/chunk-WAYSJMPS.js.map +1 -0
- package/dist/chunk-WC72BRHR.js +241 -0
- package/dist/chunk-WC72BRHR.js.map +1 -0
- package/dist/{chunk-MXZSI3AY.js → chunk-YPFOE2QJ.js} +43 -11
- package/dist/chunk-YPFOE2QJ.js.map +1 -0
- package/dist/claude-adapter-6P4SJH7P.js +7 -0
- package/dist/{claude-adapter-QMLFMSP3.js.map → claude-adapter-6P4SJH7P.js.map} +1 -1
- package/dist/{claude-login-5WELXPKT.js → claude-login-IS5WTBMP.js} +10 -10
- package/dist/claude-login-IS5WTBMP.js.map +1 -0
- package/dist/cli.js +371 -172
- package/dist/cli.js.map +1 -1
- package/dist/{codex-login-DDJBCT43.js → codex-login-GMPF64MR.js} +18 -17
- package/dist/codex-login-GMPF64MR.js.map +1 -0
- package/dist/config-store-POB6I37G.js +7 -0
- package/dist/{config-store-W6FBCQAQ.js.map → config-store-POB6I37G.js.map} +1 -1
- package/dist/conversation-store-PRBHWQMJ.js +4 -0
- package/dist/conversation-store-PRBHWQMJ.js.map +1 -0
- package/dist/detect-providers-C4SVQHFF.js +4 -0
- package/dist/detect-providers-C4SVQHFF.js.map +1 -0
- package/dist/executor-RUX7VK3T.js +4 -0
- package/dist/{executor-6RIKIGXK.js.map → executor-RUX7VK3T.js.map} +1 -1
- package/dist/first-run-GDEVRFPO.js +230 -0
- package/dist/first-run-GDEVRFPO.js.map +1 -0
- package/dist/gemini-adapter-MV3U4QFH.js +7 -0
- package/dist/{gemini-adapter-6JIHZ7WI.js.map → gemini-adapter-MV3U4QFH.js.map} +1 -1
- package/dist/{gemini-login-YEPK6GGW.js → gemini-login-KE224MSW.js} +13 -14
- package/dist/gemini-login-KE224MSW.js.map +1 -0
- package/dist/index.d.ts +47 -17
- package/dist/index.js +86 -471
- package/dist/index.js.map +1 -1
- package/dist/input-history-MIOO3FIW.js +57 -0
- package/dist/input-history-MIOO3FIW.js.map +1 -0
- package/dist/kimi-adapter-UODMNX6K.js +6 -0
- package/dist/{kimi-adapter-JN4HFFHU.js.map → kimi-adapter-UODMNX6K.js.map} +1 -1
- package/dist/{kimi-login-ZR74MIY4.js → kimi-login-DNT5YBKX.js} +18 -17
- package/dist/kimi-login-DNT5YBKX.js.map +1 -0
- package/dist/logger-PLPDWACQ.js +3 -0
- package/dist/logger-PLPDWACQ.js.map +1 -0
- package/dist/model-discovery-O64ZWPX5.js +6 -0
- package/dist/model-discovery-O64ZWPX5.js.map +1 -0
- package/dist/native-cli-adapters-JMZX2C2C.js +8 -0
- package/dist/{native-cli-adapters-OLW3XX57.js.map → native-cli-adapters-JMZX2C2C.js.map} +1 -1
- package/dist/ollama-adapter-GE67BNSS.js +5 -0
- package/dist/{ollama-adapter-OJQ3FKWK.js.map → ollama-adapter-GE67BNSS.js.map} +1 -1
- package/dist/openai-adapter-SHPLK77L.js +7 -0
- package/dist/{openai-adapter-XU46EN7B.js.map → openai-adapter-SHPLK77L.js.map} +1 -1
- package/dist/pathResolver-A6IXQQFE.js +3 -0
- package/dist/pathResolver-A6IXQQFE.js.map +1 -0
- package/dist/profile-loader-TNAXBLDX.js +162 -0
- package/dist/profile-loader-TNAXBLDX.js.map +1 -0
- package/dist/registry-3NHVCXCZ.js +6 -0
- package/dist/{registry-H7B3AHPQ.js.map → registry-3NHVCXCZ.js.map} +1 -1
- package/dist/registry-7CQ3NCAD.js +5 -0
- package/dist/{registry-OYWYT7WL.js.map → registry-7CQ3NCAD.js.map} +1 -1
- package/dist/server-manager-DES23IBQ.js +5 -0
- package/dist/{server-manager-PTGBHCLS.js.map → server-manager-DES23IBQ.js.map} +1 -1
- package/dist/session-manager-EHD7GWM2.js +12 -0
- package/dist/{session-manager-NYB2RKMS.js.map → session-manager-EHD7GWM2.js.map} +1 -1
- package/dist/skills/built-in/code-review/SKILL.md +85 -0
- package/dist/skills/built-in/commit/SKILL.md +83 -0
- package/dist/skills/built-in/debug/SKILL.md +119 -0
- package/dist/skills/built-in/plan/SKILL.md +123 -0
- package/dist/skills/built-in/refactor/SKILL.md +132 -0
- package/dist/skills/built-in/test/SKILL.md +128 -0
- package/dist/sqlite-store-7ZIVOUNI.js +5 -0
- package/dist/sqlite-store-7ZIVOUNI.js.map +1 -0
- package/dist/team-manager-6DCNLGTC.js +11 -0
- package/dist/{team-manager-HC4XGCFY.js.map → team-manager-6DCNLGTC.js.map} +1 -1
- package/dist/team-state-R2D7DT5M.js +3 -0
- package/dist/team-state-R2D7DT5M.js.map +1 -0
- package/dist/tmux-manager-WBKHUHDT.js +6 -0
- package/dist/{tmux-manager-GPYZ3WQH.js.map → tmux-manager-WBKHUHDT.js.map} +1 -1
- package/dist/tools-I6XCTEZY.js +6 -0
- package/dist/{tools-TSMXMHIF.js.map → tools-I6XCTEZY.js.map} +1 -1
- package/package.json +93 -89
- package/dist/App-TE3JJKOW.js +0 -2789
- package/dist/App-TE3JJKOW.js.map +0 -1
- package/dist/api-key-fallback-YQQBOQIL.js +0 -11
- package/dist/chunk-4IJD72YB.js.map +0 -1
- package/dist/chunk-6PDJ45T4.js.map +0 -1
- package/dist/chunk-ASGRGXYK.js.map +0 -1
- package/dist/chunk-CARHU3DO.js.map +0 -1
- package/dist/chunk-CGEV3ARR.js.map +0 -1
- package/dist/chunk-CS5X3BWX.js +0 -27
- package/dist/chunk-CS5X3BWX.js.map +0 -1
- package/dist/chunk-CYQNBB25.js.map +0 -1
- package/dist/chunk-DAHGLHNR.js.map +0 -1
- package/dist/chunk-H66O5Z2V.js.map +0 -1
- package/dist/chunk-HCIHOHLX.js.map +0 -1
- package/dist/chunk-HMJRPNPZ.js.map +0 -1
- package/dist/chunk-I5PZ4JTS.js.map +0 -1
- package/dist/chunk-IYW62KKR.js.map +0 -1
- package/dist/chunk-JAXXTYID.js.map +0 -1
- package/dist/chunk-LSOYPSAT.js.map +0 -1
- package/dist/chunk-MFBHNWGV.js.map +0 -1
- package/dist/chunk-MXZSI3AY.js.map +0 -1
- package/dist/chunk-NBR3GHMT.js.map +0 -1
- package/dist/chunk-TEVZS4FA.js.map +0 -1
- package/dist/chunk-UY2SYSEZ.js.map +0 -1
- package/dist/chunk-VUG4IZ7J.js.map +0 -1
- package/dist/chunk-WAHVZH7V.js +0 -260
- package/dist/chunk-WAHVZH7V.js.map +0 -1
- package/dist/chunk-WPP3PEDE.js.map +0 -1
- package/dist/chunk-Y5XVD2CD.js.map +0 -1
- package/dist/chunk-YL5XFHR3.js.map +0 -1
- package/dist/chunk-ZGOHARPV.js.map +0 -1
- package/dist/claude-adapter-QMLFMSP3.js +0 -6
- package/dist/claude-login-5WELXPKT.js.map +0 -1
- package/dist/codex-login-DDJBCT43.js.map +0 -1
- package/dist/config-store-W6FBCQAQ.js +0 -6
- package/dist/executor-6RIKIGXK.js +0 -4
- package/dist/gemini-adapter-6JIHZ7WI.js +0 -6
- package/dist/gemini-login-YEPK6GGW.js.map +0 -1
- package/dist/kimi-adapter-JN4HFFHU.js +0 -6
- package/dist/kimi-login-ZR74MIY4.js.map +0 -1
- package/dist/native-cli-adapters-OLW3XX57.js +0 -6
- package/dist/ollama-adapter-OJQ3FKWK.js +0 -6
- package/dist/openai-adapter-XU46EN7B.js +0 -6
- package/dist/registry-H7B3AHPQ.js +0 -5
- package/dist/registry-OYWYT7WL.js +0 -6
- package/dist/server-manager-PTGBHCLS.js +0 -5
- package/dist/session-manager-NYB2RKMS.js +0 -12
- package/dist/team-manager-HC4XGCFY.js +0 -11
- package/dist/tmux-manager-GPYZ3WQH.js +0 -6
- package/dist/tools-TSMXMHIF.js +0 -6
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 { 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"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/chat-runner.ts","../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/commands/install.ts","../src/cli/commands/team.ts","../src/cli/cli.ts"],"names":["Command","ConfigStore","pc","isInteractiveTerminal","randomUUID","createDefaultRegistry","args"],"mappings":"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","file":"cli.js","sourcesContent":["import { randomUUID } from \"node:crypto\";\r\n\r\nimport { createModelRouter } from \"../core/model-router.js\";\r\nimport { createDefaultRegistry } from \"../providers/registry.js\";\r\nimport { ConfigStore } from \"../storage/config-store.js\";\r\nimport type { IChatMessage } from \"../types/message.js\";\r\nimport type { ModelRole } from \"../types/model.js\";\r\n\r\nconst VALID_ROLES: readonly ModelRole[] = [\r\n \"planning\",\r\n \"coding\",\r\n \"review\",\r\n \"testing\",\r\n \"bugfix\",\r\n \"documentation\",\r\n] as const;\r\n\r\nexport interface IChatRunnerOptions {\r\n readonly initialMessage?: string | undefined;\r\n readonly model?: string | undefined;\r\n readonly role?: string | undefined;\r\n readonly systemPrompt?: string | undefined;\r\n readonly streaming?: boolean | undefined;\r\n readonly isAgentPane?: boolean | undefined;\r\n readonly print?: boolean | undefined;\r\n}\r\n\r\nfunction isInteractiveTerminal(): boolean {\r\n return process.stdin.isTTY && process.stdout.isTTY;\r\n}\r\n\r\nfunction normalizeMessage(message: string | undefined): string | undefined {\r\n const trimmed = message?.trim();\r\n return trimmed && trimmed.length > 0 ? trimmed : undefined;\r\n}\r\n\r\nfunction parseRole(role: string | undefined): ModelRole | undefined {\r\n if (role === undefined) {\r\n return undefined;\r\n }\r\n\r\n if ((VALID_ROLES as readonly string[]).includes(role)) {\r\n return role as ModelRole;\r\n }\r\n\r\n throw new Error(`Unknown role \"${role}\". Valid roles: ${VALID_ROLES.join(\", \")}`);\r\n}\r\n\r\nasync function ensureInteractiveConfig(): Promise<void> {\r\n const { ensureDefaultConfig, hasGlobalConfig } = await import(\"./setup/first-run.js\");\r\n\r\n if (!hasGlobalConfig()) {\r\n ensureDefaultConfig();\r\n }\r\n}\r\n\r\nasync function startInteractiveChat(options: IChatRunnerOptions): Promise<void> {\r\n await ensureInteractiveConfig();\r\n\r\n const { startChatSession } = await import(\"../ui/App.js\");\r\n await startChatSession({\r\n ...(options.initialMessage !== undefined ? { initialMessage: options.initialMessage } : {}),\r\n ...(options.model !== undefined ? { model: options.model } : {}),\r\n ...(options.role !== undefined ? { role: options.role } : {}),\r\n ...(options.systemPrompt !== undefined ? { systemPrompt: options.systemPrompt } : {}),\r\n ...(options.isAgentPane ? { isAgentPane: true } : {}),\r\n streaming: options.streaming !== false,\r\n });\r\n}\r\n\r\nasync function runPlainChat(options: IChatRunnerOptions, message: string): Promise<void> {\r\n const config = new ConfigStore().loadGlobal();\r\n const modelRouter = createModelRouter(config);\r\n const role = parseRole(options.role);\r\n\r\n if (options.model !== undefined) {\r\n modelRouter.setUserOverride(options.model);\r\n }\r\n\r\n const resolution = modelRouter.resolve(role);\r\n const registry = await createDefaultRegistry();\r\n\r\n if (!registry.hasModel(resolution.modelId)) {\r\n throw new Error(\r\n `No provider is available for model \"${resolution.modelId}\". Run \\`aemeathcli auth status\\` or \\`aemeathcli auth set-key <provider>\\`.`,\r\n );\r\n }\r\n\r\n const provider = registry.getForModel(resolution.modelId);\r\n const messages: readonly IChatMessage[] = [\r\n {\r\n id: randomUUID(),\r\n role: \"user\",\r\n content: message,\r\n createdAt: new Date(),\r\n },\r\n ];\r\n\r\n if (options.streaming === false) {\r\n const response = await provider.chat({\r\n model: resolution.modelId,\r\n messages,\r\n ...(options.systemPrompt !== undefined ? { system: options.systemPrompt } : {}),\r\n });\r\n process.stdout.write(`${response.message.content}\\n`);\r\n return;\r\n }\r\n\r\n let wroteOutput = false;\r\n\r\n for await (const chunk of provider.stream({\r\n model: resolution.modelId,\r\n messages,\r\n ...(options.systemPrompt !== undefined ? { system: options.systemPrompt } : {}),\r\n })) {\r\n if (chunk.type === \"text\" && chunk.content) {\r\n process.stdout.write(chunk.content);\r\n wroteOutput = true;\r\n continue;\r\n }\r\n\r\n if (chunk.type === \"tool_call\") {\r\n throw new Error(\r\n \"Tool-calling output is not supported in plain mode. Use the interactive TUI (`aemeathcli`) and switch into swarm mode with Shift+Tab.\",\r\n );\r\n }\r\n\r\n if (chunk.type === \"error\" && chunk.error) {\r\n throw new Error(chunk.error);\r\n }\r\n }\r\n\r\n if (wroteOutput) {\r\n process.stdout.write(\"\\n\");\r\n }\r\n}\r\n\r\nexport async function runChatCommand(options: IChatRunnerOptions): Promise<void> {\r\n const message = normalizeMessage(options.initialMessage);\r\n const interactive = isInteractiveTerminal();\r\n\r\n if (!options.print && interactive && message === undefined) {\r\n await startInteractiveChat(options);\r\n return;\r\n }\r\n\r\n if (message === undefined) {\r\n throw new Error(\r\n \"Interactive mode requires a TTY. Provide a prompt for one-shot mode or run the command in a terminal.\",\r\n );\r\n }\r\n\r\n await runPlainChat(options, message);\r\n}\r\n","/**\r\n * Interactive chat mode command per PRD section 18.2\r\n */\r\n\r\nimport { Command } from \"commander\";\r\nimport { runChatCommand } from \"../chat-runner.js\";\r\n\r\nexport function createChatCommand(): Command {\r\n const chat = new Command(\"chat\")\r\n .description(\"Start interactive chat mode (default)\")\r\n .argument(\"[message...]\", \"Initial message to send\")\r\n .option(\"-m, --model <model>\", \"Override model for this session\")\r\n .option(\"-r, --role <role>\", \"Set the task role (planning, coding, review, testing, bugfix)\")\r\n .option(\"--system <prompt>\", \"Custom system prompt\")\r\n .option(\"--print\", \"Print a single response and exit\")\r\n .option(\"--no-stream\", \"Disable streaming output\")\r\n .action(async (messageParts: string[], options: Record<string, unknown>) => {\r\n await runChatCommand({\r\n initialMessage: messageParts.join(\" \") || undefined,\r\n model: options[\"model\"] as string | undefined,\r\n role: options[\"role\"] as string | undefined,\r\n systemPrompt: options[\"system\"] as string | undefined,\r\n streaming: options[\"stream\"] !== false,\r\n print: options[\"print\"] === true,\r\n });\r\n });\r\n\r\n return chat;\r\n}\r\n","/**\r\n * Planning mode command per PRD section 5.1\r\n */\r\n\r\nimport { Command } from \"commander\";\r\nimport { runChatCommand } from \"../chat-runner.js\";\r\n\r\nexport function createPlanCommand(): Command {\r\n const plan = new Command(\"plan\")\r\n .description(\"Enter planning mode with a high-reasoning model\")\r\n .argument(\"[message...]\", \"Planning prompt\")\r\n .option(\"-m, --model <model>\", \"Override model (default: planning role)\")\r\n .option(\"--print\", \"Print a single response and exit\")\r\n .action(async (messageParts: string[], options: Record<string, unknown>) => {\r\n await runChatCommand({\r\n initialMessage: messageParts.join(\" \") || undefined,\r\n model: options[\"model\"] as string | undefined,\r\n role: \"planning\",\r\n streaming: true,\r\n print: options[\"print\"] === true,\r\n });\r\n });\r\n\r\n return plan;\r\n}\r\n","/**\r\n * Code review mode command per PRD section 5.1\r\n */\r\n\r\nimport { Command } from \"commander\";\r\nimport { runChatCommand } from \"../chat-runner.js\";\r\n\r\nexport function createReviewCommand(): Command {\r\n const review = new Command(\"review\")\r\n .description(\"Code review mode with a thorough model\")\r\n .argument(\"[files...]\", \"Files to review\")\r\n .option(\"-m, --model <model>\", \"Override model (default: review role)\")\r\n .option(\"--print\", \"Print a single response and exit\")\r\n .action(async (files: string[], options: Record<string, unknown>) => {\r\n const message = files.length > 0\r\n ? `Review these files: ${files.join(\", \")}`\r\n : \"Review the recent changes\";\r\n await runChatCommand({\r\n initialMessage: message,\r\n model: options[\"model\"] as string | undefined,\r\n role: \"review\",\r\n streaming: true,\r\n print: options[\"print\"] === true,\r\n });\r\n });\r\n\r\n return review;\r\n}\r\n","/**\r\n * Testing mode command per PRD section 5.1\r\n */\r\n\r\nimport { Command } from \"commander\";\r\nimport { runChatCommand } from \"../chat-runner.js\";\r\n\r\nexport function createTestCommand(): Command {\r\n const test = new Command(\"test\")\r\n .description(\"Testing mode with a cost-efficient model\")\r\n .argument(\"[message...]\", \"Testing prompt\")\r\n .option(\"-m, --model <model>\", \"Override model (default: testing role)\")\r\n .option(\"--print\", \"Print a single response and exit\")\r\n .action(async (messageParts: string[], options: Record<string, unknown>) => {\r\n await runChatCommand({\r\n initialMessage: messageParts.join(\" \") || \"Generate tests for the recent changes\",\r\n model: options[\"model\"] as string | undefined,\r\n role: \"testing\",\r\n streaming: true,\r\n print: options[\"print\"] === true,\r\n });\r\n });\r\n\r\n return test;\r\n}\r\n","/**\r\n * Configuration management commands per PRD section 12.3\r\n */\r\n\r\nimport { Command } from \"commander\";\r\nimport pc from \"picocolors\";\r\n\r\nexport function createConfigCommand(): Command {\r\n const config = new Command(\"config\")\r\n .description(\"Configuration management\");\r\n\r\n config\r\n .command(\"get [key]\")\r\n .description(\"Get configuration value (or all if no key)\")\r\n .action(async (key: string | undefined) => {\r\n try {\r\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\r\n const store = new ConfigStore();\r\n const cfg = store.loadGlobal();\r\n\r\n if (key) {\r\n const value = getNestedValue(cfg, key);\r\n if (value === undefined) {\r\n process.stderr.write(pc.red(`Configuration key not found: ${key}\\n`));\r\n process.exitCode = 1;\r\n return;\r\n }\r\n process.stdout.write(`${key} = ${JSON.stringify(value, null, 2)}\\n`);\r\n } else {\r\n process.stdout.write(JSON.stringify(cfg, null, 2) + \"\\n\");\r\n }\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(pc.red(`Failed to read config: ${message}\\n`));\r\n process.exitCode = 3;\r\n }\r\n });\r\n\r\n config\r\n .command(\"set <key> <value>\")\r\n .description(\"Set a configuration value\")\r\n .action(async (key: string, value: string) => {\r\n try {\r\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\r\n const store = new ConfigStore();\r\n const cfg = store.loadGlobal();\r\n\r\n let parsedValue: unknown;\r\n try {\r\n parsedValue = JSON.parse(value);\r\n } catch {\r\n parsedValue = value;\r\n }\r\n\r\n setNestedValue(cfg as unknown as Record<string, unknown>, key, parsedValue);\r\n store.saveGlobal(cfg);\r\n process.stdout.write(pc.green(`Set ${key} = ${JSON.stringify(parsedValue)}\\n`));\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(pc.red(`Failed to set config: ${message}\\n`));\r\n process.exitCode = 3;\r\n }\r\n });\r\n\r\n config\r\n .command(\"init\")\r\n .description(\"Initialize configuration with interactive setup\")\r\n .option(\"--defaults\", \"Write default configuration without interactive prompts\")\r\n .option(\"--force\", \"Overwrite or recreate the global configuration\")\r\n .action(async (options: { defaults?: boolean; force?: boolean }) => {\r\n try {\r\n const { runFirstRunSetup } = await import(\"../setup/first-run.js\");\r\n await runFirstRunSetup({\r\n ...(options.defaults !== undefined ? { defaults: options.defaults } : {}),\r\n ...(options.force !== undefined ? { force: options.force } : {}),\r\n });\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(pc.red(`Setup failed: ${message}\\n`));\r\n process.exitCode = 3;\r\n }\r\n });\r\n\r\n config\r\n .command(\"path\")\r\n .description(\"Show the active global configuration path\")\r\n .action(async () => {\r\n const { getConfigPath } = await import(\"../../utils/pathResolver.js\");\r\n process.stdout.write(`${getConfigPath()}\\n`);\r\n });\r\n\r\n return config;\r\n}\r\n\r\nfunction getNestedValue(obj: unknown, path: string): unknown {\r\n const keys = path.split(\".\");\r\n let current: unknown = obj;\r\n for (const key of keys) {\r\n if (current === null || current === undefined || typeof current !== \"object\") {\r\n return undefined;\r\n }\r\n current = (current as Record<string, unknown>)[key];\r\n }\r\n return current;\r\n}\r\n\r\nfunction setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {\r\n const keys = path.split(\".\");\r\n let current: Record<string, unknown> = obj;\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n if (!key) continue;\r\n if (typeof current[key] !== \"object\" || current[key] === null) {\r\n current[key] = {};\r\n }\r\n current = current[key] as Record<string, unknown>;\r\n }\r\n const lastKey = keys[keys.length - 1];\r\n if (lastKey) {\r\n current[lastKey] = value;\r\n }\r\n}\r\n","/**\r\n * Authentication management commands per PRD section 13.2\r\n */\r\n\r\nimport { Command } from \"commander\";\r\nimport pc from \"picocolors\";\r\nimport type { ProviderName } from \"../../types/index.js\";\r\nimport {\r\n LOGIN_PROVIDERS,\r\n type LoginProvider,\r\n getAuthStatusRecord,\r\n formatDetailedAuthStatusLine,\r\n} from \"../../auth/auth-status.js\";\r\n\r\nconst VALID_PROVIDERS = LOGIN_PROVIDERS;\r\n\r\nfunction isValidProvider(value: string): value is LoginProvider {\r\n return (VALID_PROVIDERS as readonly string[]).includes(value);\r\n}\r\n\r\nfunction isInteractiveTerminal(): boolean {\r\n return process.stdin.isTTY && process.stdout.isTTY;\r\n}\r\n\r\nfunction validProvidersMessage(): string {\r\n return VALID_PROVIDERS.join(\", \");\r\n}\r\n\r\nasync function promptForProvider(): Promise<LoginProvider> {\r\n const { select } = await import(\"@inquirer/prompts\");\r\n return select<LoginProvider>({\r\n message: \"Select a provider to log in to:\",\r\n choices: [\r\n { name: \"Claude (Anthropic)\", value: \"claude\" },\r\n { name: \"Codex (OpenAI)\", value: \"codex\" },\r\n { name: \"Gemini (Google)\", value: \"gemini\" },\r\n { name: \"Kimi (Moonshot)\", value: \"kimi\" },\r\n ],\r\n });\r\n}\r\n\r\nasync function readSecretFromStdin(): Promise<string> {\r\n const chunks: string[] = [];\r\n for await (const chunk of process.stdin) {\r\n chunks.push(String(chunk));\r\n }\r\n return chunks.join(\"\").trim();\r\n}\r\n\r\nasync function resolveLoginProvider(providerArg: string | undefined): Promise<LoginProvider | undefined> {\r\n if (providerArg !== undefined) {\r\n if (!isValidProvider(providerArg)) {\r\n process.stderr.write(\r\n pc.red(`Unknown provider: \"${providerArg}\". Valid: ${validProvidersMessage()}\\n`),\r\n );\r\n process.exitCode = 2;\r\n return undefined;\r\n }\r\n return providerArg;\r\n }\r\n\r\n if (!isInteractiveTerminal()) {\r\n process.stderr.write(\r\n pc.red(\r\n \"Interactive provider selection requires a TTY. Use `aemeathcli auth login <provider>` or `aemeathcli auth set-key <provider> --stdin`.\\n\",\r\n ),\r\n );\r\n process.exitCode = 2;\r\n return undefined;\r\n }\r\n\r\n return promptForProvider();\r\n}\r\n\r\nasync function runLoginFlow(provider: LoginProvider): Promise<void> {\r\n process.stdout.write(pc.cyan(`Logging in to ${provider}...\\n`));\r\n\r\n const loginModule = await loadLoginModule(provider);\r\n await loginModule.login();\r\n process.stdout.write(pc.green(`Successfully logged in to ${provider}\\n`));\r\n}\r\n\r\nconst PROVIDER_MODEL_SWITCH: Readonly<Record<LoginProvider, { provider: ProviderName; model: string }>> = {\r\n claude: { provider: \"anthropic\", model: \"claude-sonnet-4-6\" },\r\n codex: { provider: \"openai\", model: \"gpt-5.2\" },\r\n gemini: { provider: \"google\", model: \"gemini-2.5-pro\" },\r\n kimi: { provider: \"kimi\", model: \"kimi-for-coding\" },\r\n};\r\n\r\n/**\r\n * Top-level `login` command with interactive provider selection.\r\n * Shows an arrow-key navigable list of providers, then triggers\r\n * browser-based login for the selected one.\r\n */\r\nexport function createLoginCommand(): Command {\r\n return new Command(\"login\")\r\n .description(\"Log in to a provider (interactive)\")\r\n .argument(\"[provider]\", \"Provider to log in to (claude, codex, gemini, kimi)\")\r\n .action(async (providerArg: string | undefined) => {\r\n const provider = await resolveLoginProvider(providerArg);\r\n if (provider === undefined) {\r\n return;\r\n }\r\n\r\n try {\r\n await runLoginFlow(provider);\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(pc.red(`Login failed: ${message}\\n`));\r\n process.exitCode = 3;\r\n }\r\n });\r\n}\r\n\r\nexport function createAuthCommand(): Command {\r\n const auth = new Command(\"auth\")\r\n .description(\"Authentication & account management\");\r\n\r\n auth\r\n .command(\"login [provider]\")\r\n .description(\"Log in to a provider (claude, codex, gemini, kimi)\")\r\n .action(async (providerArg: string | undefined) => {\r\n const provider = await resolveLoginProvider(providerArg);\r\n if (provider === undefined) {\r\n return;\r\n }\r\n\r\n try {\r\n await runLoginFlow(provider);\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(pc.red(`Login failed: ${message}\\n`));\r\n process.exitCode = 3;\r\n }\r\n });\r\n\r\n auth\r\n .command(\"logout [provider]\")\r\n .description(\"Log out of a provider (or all with --all)\")\r\n .option(\"--all\", \"Log out of all providers\")\r\n .action(async (provider: string | undefined, options: { all?: boolean }) => {\r\n if (options.all) {\r\n for (const p of VALID_PROVIDERS) {\r\n try {\r\n const loginModule = await loadLoginModule(p);\r\n await loginModule.logout();\r\n process.stdout.write(pc.green(`Logged out of ${p}\\n`));\r\n } catch {\r\n // Some may not be logged in\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (!provider || !isValidProvider(provider)) {\r\n process.stderr.write(\r\n pc.red(`Specify a provider or use --all. Valid: ${VALID_PROVIDERS.join(\", \")}\\n`),\r\n );\r\n process.exitCode = 2;\r\n return;\r\n }\r\n\r\n try {\r\n const loginModule = await loadLoginModule(provider);\r\n await loginModule.logout();\r\n process.stdout.write(pc.green(`Logged out of ${provider}\\n`));\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(pc.red(`Logout failed: ${message}\\n`));\r\n process.exitCode = 3;\r\n }\r\n });\r\n\r\n auth\r\n .command(\"status\")\r\n .description(\"Show login status for all providers\")\r\n .option(\"--json\", \"Output machine-readable JSON\")\r\n .action(async (options: { json?: boolean }) => {\r\n const records = await Promise.all(VALID_PROVIDERS.map(async (provider) => getAuthStatusRecord(provider)));\r\n\r\n if (options.json) {\r\n process.stdout.write(`${JSON.stringify({ providers: records }, null, 2)}\\n`);\r\n return;\r\n }\r\n\r\n for (const record of records) {\r\n const line = formatDetailedAuthStatusLine(record);\r\n process.stdout.write(`${record.loggedIn ? pc.green(line) : pc.red(line)}\\n`);\r\n }\r\n });\r\n\r\n auth\r\n .command(\"set-key <provider> [key]\")\r\n .description(\"Set an API key for a provider (fallback for CI/headless)\")\r\n .option(\"--stdin\", \"Read the API key from stdin\")\r\n .action(async (provider: string, key: string | undefined, options: { stdin?: boolean }) => {\r\n if (!isValidProvider(provider) && provider !== \"openai\" && provider !== \"google\") {\r\n process.stderr.write(pc.red(`Unknown provider: \"${provider}\"\\n`));\r\n process.exitCode = 2;\r\n return;\r\n }\r\n\r\n const resolvedKey = options.stdin ? await readSecretFromStdin() : key;\r\n if (!resolvedKey) {\r\n process.stderr.write(\r\n pc.red(\"Provide an API key argument or use --stdin to read it from standard input.\\n\"),\r\n );\r\n process.exitCode = 2;\r\n return;\r\n }\r\n\r\n try {\r\n const { ApiKeyFallback } = await import(\"../../auth/api-key-fallback.js\");\r\n const fallback = new ApiKeyFallback();\r\n const providerMap: Record<string, ProviderName> = {\r\n claude: \"anthropic\",\r\n openai: \"openai\",\r\n codex: \"openai\",\r\n gemini: \"google\",\r\n google: \"google\",\r\n kimi: \"kimi\",\r\n };\r\n const mappedProvider = providerMap[provider];\r\n if (mappedProvider) {\r\n await fallback.setKey(mappedProvider, resolvedKey);\r\n process.stdout.write(pc.green(`API key set for ${provider}\\n`));\r\n }\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(pc.red(`Failed to set key: ${message}\\n`));\r\n process.exitCode = 3;\r\n }\r\n });\r\n\r\n auth\r\n .command(\"switch <provider>\")\r\n .description(\"Set a provider as the default\")\r\n .action(async (provider: string) => {\r\n if (!isValidProvider(provider)) {\r\n process.stderr.write(\r\n pc.red(`Unknown provider: \"${provider}\". Valid: ${VALID_PROVIDERS.join(\", \")}\\n`),\r\n );\r\n process.exitCode = 2;\r\n return;\r\n }\r\n\r\n try {\r\n const target = PROVIDER_MODEL_SWITCH[provider];\r\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\r\n const store = new ConfigStore();\r\n const cfg = store.loadGlobal();\r\n\r\n const nextConfig = {\r\n ...cfg,\r\n defaultModel: target.model,\r\n providers: {\r\n ...cfg.providers,\r\n [target.provider]: {\r\n ...(cfg.providers[target.provider] ?? {}),\r\n enabled: true,\r\n },\r\n },\r\n };\r\n\r\n store.saveGlobal(nextConfig);\r\n process.stdout.write(\r\n pc.green(`Default provider switched to ${provider} (model: ${target.model})\\n`),\r\n );\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(pc.red(`Failed to switch provider: ${message}\\n`));\r\n process.exitCode = 3;\r\n }\r\n });\r\n\r\n return auth;\r\n}\r\n\r\ninterface ILoginModule {\r\n login(): Promise<unknown>;\r\n logout(): Promise<void>;\r\n getStatus(): Promise<{ loggedIn: boolean; email?: string | undefined; plan?: string | undefined }>;\r\n}\r\n\r\nasync function loadLoginModule(provider: LoginProvider): Promise<ILoginModule> {\r\n switch (provider) {\r\n case \"claude\": {\r\n const mod = await import(\"../../auth/providers/claude-login.js\");\r\n return new mod.ClaudeLogin();\r\n }\r\n case \"codex\": {\r\n const mod = await import(\"../../auth/providers/codex-login.js\");\r\n return new mod.CodexLogin();\r\n }\r\n case \"gemini\": {\r\n const mod = await import(\"../../auth/providers/gemini-login.js\");\r\n return new mod.GeminiLogin();\r\n }\r\n case \"kimi\": {\r\n const mod = await import(\"../../auth/providers/kimi-login.js\");\r\n return new mod.KimiLogin();\r\n }\r\n }\r\n}\r\n","/**\r\n * `ac install` — Install an agent profile from a file or URL.\r\n *\r\n * Accepts either a local path to a Markdown profile file or\r\n * a remote URL. The profile is validated and then written to\r\n * the user agent store (~/.aemeathcli/agent-store/).\r\n *\r\n * @see IMPLEMENT_PLAN.md Section 10\r\n */\r\n\r\nimport { Command } from \"commander\";\r\nimport pc from \"picocolors\";\r\n\r\nexport function createInstallCommand(): Command {\r\n return new Command(\"install\")\r\n .description(\"Install an agent profile from a file or URL\")\r\n .argument(\"<source>\", \"Path to .md profile file or URL\")\r\n .action(async (source: string) => {\r\n try {\r\n const { ProfileLoader } = await import(\"../../orchestrator/profiles/profile-loader.js\");\r\n const loader = new ProfileLoader();\r\n const name = await loader.install(source);\r\n process.stdout.write(`${pc.green(`Profile \"${name}\" installed successfully.`)}\\n`);\r\n process.stdout.write(\r\n `${pc.dim(\"Stored in the agent profile library for swarm orchestration and advanced profile-driven workflows.\")}\\n`,\r\n );\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(`${pc.red(`Install failed: ${msg}`)}\\n`);\r\n process.exitCode = 1;\r\n }\r\n });\r\n}\r\n","import { Command } from \"commander\";\r\nimport pc from \"picocolors\";\r\n\r\nexport function createTeamCommand(): Command {\r\n return new Command(\"team\")\r\n .description(\"Legacy team namespace\")\r\n .argument(\"[legacy...]\", \"Legacy team arguments\")\r\n .action((legacyArgs: string[]) => {\r\n const attempted = legacyArgs.length > 0 ? `team ${legacyArgs.join(\" \")}` : \"team\";\r\n process.stderr.write(\r\n pc.yellow(\r\n `The top-level \\`${attempted}\\` command is deprecated.\\n` +\r\n \"Start `aemeathcli` (or `ac`), press Shift+Tab for swarm mode, or use `/team` inside the interactive session.\\n\",\r\n ),\r\n );\r\n process.exitCode = 2;\r\n });\r\n}\r\n","#!/usr/bin/env node\r\n\r\n/**\r\n * AemeathCLI — Main CLI entry point\r\n * Per PRD section 6.1: Commander.js setup with subcommand routing\r\n */\r\n\r\nimport { Command } from \"commander\";\r\nimport pc from \"picocolors\";\r\nimport { randomUUID } from \"node:crypto\";\r\nimport { createChatCommand } from \"./commands/chat.js\";\r\nimport { createPlanCommand } from \"./commands/plan.js\";\r\nimport { createReviewCommand } from \"./commands/review.js\";\r\nimport { createTestCommand } from \"./commands/test.js\";\r\nimport { createConfigCommand } from \"./commands/config.js\";\r\nimport { createAuthCommand, createLoginCommand } from \"./commands/auth.js\";\r\nimport { createInstallCommand } from \"./commands/install.js\";\r\nimport { createTeamCommand } from \"./commands/team.js\";\r\nimport { runChatCommand } from \"./chat-runner.js\";\r\nimport type { IIPCMessage } from \"../types/index.js\";\r\nimport type { ProviderRegistry } from \"../providers/registry.js\";\r\nimport type { ToolRegistry } from \"../tools/registry.js\";\r\nimport type { IChatMessage, IToolCall } from \"../types/message.js\";\r\nimport type { IToolExecutionContext, PermissionMode } from \"../types/tool.js\";\r\nimport { PACKAGE_VERSION } from \"../version.js\";\r\n\r\nfunction getFlagValue(args: readonly string[], flag: string): string | undefined {\r\n const index = args.indexOf(flag);\r\n if (index === -1) {\r\n return undefined;\r\n }\r\n const value = args[index + 1];\r\n return value && !value.startsWith(\"-\") ? value : undefined;\r\n}\r\n\r\nfunction isIPCMessage(value: unknown): value is IIPCMessage {\r\n if (typeof value !== \"object\" || value === null) {\r\n return false;\r\n }\r\n const record = value as Record<string, unknown>;\r\n return record[\"jsonrpc\"] === \"2.0\" && typeof record[\"method\"] === \"string\";\r\n}\r\n\r\nfunction sendAgentIPC(method: IIPCMessage[\"method\"], params: Record<string, unknown>): void {\r\n if (typeof process.send === \"function\") {\r\n const message: IIPCMessage = {\r\n jsonrpc: \"2.0\",\r\n method,\r\n params,\r\n };\r\n process.send(message);\r\n }\r\n}\r\n\r\nfunction isPermissionMode(value: string | undefined): value is PermissionMode {\r\n return value === \"strict\" || value === \"standard\" || value === \"permissive\";\r\n}\r\n\r\nfunction parseStringArrayEnv(value: string | undefined): string[] | undefined {\r\n if (!value) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const parsed: unknown = JSON.parse(value);\r\n if (Array.isArray(parsed) && parsed.every((item) => typeof item === \"string\")) {\r\n return [...parsed];\r\n }\r\n } catch {\r\n // Ignore malformed env input and fall back to defaults\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction getAgentToolContext(): IToolExecutionContext {\r\n const projectRoot = process.env[\"AEMEATHCLI_TOOL_PROJECT_ROOT\"] ?? process.cwd();\r\n const workingDirectory =\r\n process.env[\"AEMEATHCLI_TOOL_WORKING_DIRECTORY\"] ?? projectRoot;\r\n const allowedPaths =\r\n parseStringArrayEnv(process.env[\"AEMEATHCLI_TOOL_ALLOWED_PATHS\"]) ?? [projectRoot];\r\n const blockedCommands =\r\n parseStringArrayEnv(process.env[\"AEMEATHCLI_TOOL_BLOCKED_COMMANDS\"]) ?? [];\r\n const permissionMode = isPermissionMode(process.env[\"AEMEATHCLI_TOOL_PERMISSION_MODE\"])\r\n ? process.env[\"AEMEATHCLI_TOOL_PERMISSION_MODE\"]\r\n : \"standard\";\r\n\r\n return {\r\n projectRoot,\r\n workingDirectory,\r\n permissionMode,\r\n allowedPaths,\r\n blockedCommands,\r\n };\r\n}\r\n\r\nasync function maybeRunAgentMode(args: readonly string[]): Promise<boolean> {\r\n if (!args.includes(\"--agent\") && process.env[\"AEMEATHCLI_AGENT_MODE\"] !== \"1\") {\r\n return false;\r\n }\r\n\r\n const teamName = getFlagValue(args, \"--team\") ?? process.env[\"AEMEATHCLI_TEAM_NAME\"] ?? \"unknown-team\";\r\n const agentName = getFlagValue(args, \"--name\") ?? process.env[\"AEMEATHCLI_AGENT_NAME\"] ?? \"agent\";\r\n const model = getFlagValue(args, \"--model\") ?? \"claude-sonnet-4-6\";\r\n const role = getFlagValue(args, \"--role\") ?? \"coding\";\r\n const agentId = process.env[\"AEMEATHCLI_AGENT_ID\"] ?? randomUUID();\r\n const toolContext = getAgentToolContext();\r\n\r\n // Lazily-initialized provider registry (shared across tasks for this agent)\r\n let registryPromise: Promise<ProviderRegistry> | undefined;\r\n\r\n function getRegistry(): Promise<ProviderRegistry> {\r\n if (!registryPromise) {\r\n registryPromise = import(\"../providers/registry.js\").then(\r\n ({ createDefaultRegistry }) => createDefaultRegistry({ preferSdk: true }),\r\n );\r\n }\r\n return registryPromise;\r\n }\r\n\r\n // Lazily-initialized tool registry (shared across tasks for this agent)\r\n let toolRegistryPromise: Promise<ToolRegistry> | undefined;\r\n\r\n function getToolRegistry(): Promise<ToolRegistry> {\r\n if (!toolRegistryPromise) {\r\n toolRegistryPromise = import(\"../tools/index.js\").then(\r\n ({ createDefaultRegistry: createToolReg }) =>\r\n createToolReg(toolContext),\r\n );\r\n }\r\n return toolRegistryPromise;\r\n }\r\n\r\n /** Format a one-line summary of a tool call for the agent output panel. */\r\n function formatToolActivity(name: string, args: Record<string, unknown>): string {\r\n switch (name) {\r\n case \"read\":\r\n case \"write\":\r\n case \"edit\":\r\n return typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\r\n case \"glob\":\r\n return typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\r\n case \"grep\": {\r\n const pat = typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\r\n const dir = typeof args[\"path\"] === \"string\" ? ` in ${args[\"path\"]}` : \"\";\r\n return `\"${pat}\"${dir}`;\r\n }\r\n case \"bash\": {\r\n const cmd = typeof args[\"command\"] === \"string\" ? args[\"command\"] : \"\";\r\n return cmd.length > 60 ? cmd.slice(0, 60) + \"...\" : cmd;\r\n }\r\n default:\r\n return JSON.stringify(args).slice(0, 60);\r\n }\r\n }\r\n\r\n /** Short summary of a tool result for the activity feed. */\r\n function formatResultSummary(name: string, content: string, isError: boolean): string {\r\n if (isError) return `Error: ${content.slice(0, 100)}`;\r\n const lines = content.split(\"\\n\").length;\r\n switch (name) {\r\n case \"read\": return `${lines} lines`;\r\n case \"glob\": return content === \"No files found\" ? \"no files\" : `${lines} files`;\r\n case \"grep\": return content === \"No matches found.\" ? \"no matches\" : `${lines} lines`;\r\n case \"write\":\r\n case \"edit\": return content.length > 80 ? content.slice(0, 80) : content;\r\n default: return content.length > 80 ? content.slice(0, 80) + \"...\" : content;\r\n }\r\n }\r\n\r\n const MAX_TOOL_ITERATIONS = 10;\r\n const MAX_TOOL_RESULT_LENGTH = 10_000;\r\n\r\n async function processTask(taskId: string, prompt: string): Promise<void> {\r\n sendAgentIPC(\"agent.taskUpdate\", { agentId, taskId, status: \"in_progress\" });\r\n sendAgentIPC(\"agent.streamChunk\", {\r\n agentId, taskId, model,\r\n content: `Initializing provider for ${model}...\\n`,\r\n });\r\n\r\n try {\r\n const registry = await getRegistry();\r\n\r\n if (!registry.hasModel(model)) {\r\n sendAgentIPC(\"agent.streamChunk\", {\r\n agentId, taskId, model,\r\n content: `\\nError: No provider available for model \"${model}\". Check authentication with 'aemeathcli auth login'.\\n`,\r\n });\r\n sendAgentIPC(\"agent.taskUpdate\", { agentId, taskId, status: \"completed\" });\r\n return;\r\n }\r\n\r\n const provider = registry.getForModel(model);\r\n sendAgentIPC(\"agent.streamChunk\", {\r\n agentId, taskId, model,\r\n content: `Provider ready (${provider.name}). Loading tools...\\n`,\r\n });\r\n const toolRegistry = await getToolRegistry();\r\n const toolDefs = toolRegistry.getDefinitions();\r\n sendAgentIPC(\"agent.streamChunk\", {\r\n agentId, taskId, model,\r\n content: `${toolDefs.length} tools loaded. Sending request to ${model}...\\n`,\r\n });\r\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.`;\r\n\r\n const messages: IChatMessage[] = [{\r\n id: randomUUID(),\r\n role: \"user\" as const,\r\n content: prompt,\r\n createdAt: new Date(),\r\n }];\r\n\r\n for (let iteration = 0; iteration < MAX_TOOL_ITERATIONS; iteration++) {\r\n let collectedText = \"\";\r\n const collectedToolCalls: IToolCall[] = [];\r\n\r\n const stream = provider.stream({\r\n model,\r\n messages,\r\n system: systemPrompt,\r\n maxTokens: 8000,\r\n ...(toolDefs.length > 0 ? { tools: toolDefs } : {}),\r\n });\r\n\r\n for await (const chunk of stream) {\r\n if (chunk.type === \"text\" && chunk.content) {\r\n collectedText += chunk.content;\r\n sendAgentIPC(\"agent.streamChunk\", {\r\n agentId, taskId, model,\r\n content: chunk.content,\r\n });\r\n } else if (chunk.type === \"tool_call\" && chunk.toolCall) {\r\n collectedToolCalls.push(chunk.toolCall);\r\n const tc = chunk.toolCall;\r\n const summary = formatToolActivity(tc.name, tc.arguments);\r\n sendAgentIPC(\"agent.streamChunk\", {\r\n agentId, taskId, model,\r\n content: `\\n\\u2699 ${tc.name} ${summary}\\n`,\r\n });\r\n } else if (chunk.type === \"error\" && chunk.error) {\r\n // Truncate error messages to prevent raw CLI output dumps\r\n const errorMsg = chunk.error.length > 300\r\n ? chunk.error.slice(0, 300) + \"...\"\r\n : chunk.error;\r\n sendAgentIPC(\"agent.streamChunk\", {\r\n agentId, taskId, model,\r\n content: `\\nStream error: ${errorMsg}\\n`,\r\n });\r\n }\r\n }\r\n\r\n // No tool calls → agent finished\r\n if (collectedToolCalls.length === 0) {\r\n break;\r\n }\r\n\r\n // Add assistant message with tool calls to conversation\r\n messages.push({\r\n id: randomUUID(),\r\n role: \"assistant\" as const,\r\n content: collectedText,\r\n toolCalls: collectedToolCalls,\r\n createdAt: new Date(),\r\n });\r\n\r\n // Execute each tool call and add results\r\n for (const tc of collectedToolCalls) {\r\n const result = await toolRegistry.execute(tc, toolContext);\r\n\r\n const briefResult = formatResultSummary(tc.name, result.content, result.isError);\r\n sendAgentIPC(\"agent.streamChunk\", {\r\n agentId, taskId, model,\r\n content: ` \\u2192 ${briefResult}\\n`,\r\n });\r\n\r\n const truncatedContent = result.content.length > MAX_TOOL_RESULT_LENGTH\r\n ? result.content.slice(0, MAX_TOOL_RESULT_LENGTH) + \"\\n...(truncated)\"\r\n : result.content;\r\n\r\n messages.push({\r\n id: randomUUID(),\r\n role: \"tool\" as const,\r\n content: truncatedContent,\r\n toolCalls: [{ id: tc.id, name: tc.name, arguments: {} }],\r\n createdAt: new Date(),\r\n });\r\n }\r\n }\r\n } catch (error: unknown) {\r\n const rawMsg = error instanceof Error ? error.message : String(error);\r\n // Truncate to prevent raw CLI output from flooding the panel\r\n const msg = rawMsg.length > 300 ? rawMsg.slice(0, 300) + \"...\" : rawMsg;\r\n sendAgentIPC(\"agent.streamChunk\", {\r\n agentId, taskId, model,\r\n content: `\\nError: ${msg}\\n`,\r\n });\r\n }\r\n\r\n sendAgentIPC(\"agent.taskUpdate\", { agentId, taskId, status: \"completed\" });\r\n }\r\n\r\n sendAgentIPC(\"agent.register\", {\r\n agentId,\r\n agentName,\r\n teamName,\r\n model,\r\n role,\r\n });\r\n\r\n const keepAlive = setInterval(() => {\r\n // Keep event loop alive for IPC mode.\r\n }, 60_000);\r\n\r\n const shutdown = (): void => {\r\n clearInterval(keepAlive);\r\n process.exit(0);\r\n };\r\n\r\n process.on(\"message\", (raw: unknown) => {\r\n if (!isIPCMessage(raw)) {\r\n return;\r\n }\r\n\r\n if (raw.method === \"hub.taskAssign\") {\r\n const taskId = typeof raw.params[\"taskId\"] === \"string\"\r\n ? raw.params[\"taskId\"]\r\n : randomUUID();\r\n const subject = typeof raw.params[\"subject\"] === \"string\"\r\n ? raw.params[\"subject\"]\r\n : \"\";\r\n const description = typeof raw.params[\"description\"] === \"string\"\r\n ? raw.params[\"description\"]\r\n : \"\";\r\n\r\n void processTask(taskId, description || subject || \"Describe what you can help with.\");\r\n return;\r\n }\r\n\r\n if (raw.method === \"hub.shutdown\") {\r\n shutdown();\r\n }\r\n });\r\n\r\n process.on(\"SIGINT\", shutdown);\r\n process.on(\"SIGTERM\", shutdown);\r\n\r\n // Keep the child process alive for IPC task dispatch.\r\n await new Promise<void>(() => {});\r\n return true;\r\n}\r\n\r\nasync function main(): Promise<void> {\r\n const rawArgs = [...process.argv.slice(2)];\r\n\r\n if (process.argv.includes(\"--no-color\")) {\r\n process.env[\"NO_COLOR\"] = \"1\";\r\n }\r\n\r\n if (process.argv.includes(\"--verbose\")) {\r\n process.env[\"AEMEATHCLI_LOG_LEVEL\"] = process.env[\"AEMEATHCLI_LOG_LEVEL\"] ?? \"debug\";\r\n }\r\n\r\n if (await maybeRunAgentMode(rawArgs)) {\r\n return;\r\n }\r\n\r\n const program = new Command()\r\n .name(\"aemeathcli\")\r\n .description(\r\n \"Multi-model coding CLI with chat, orchestration, and provider-aware automation workflows\",\r\n )\r\n .version(PACKAGE_VERSION, \"-v, --version\")\r\n .argument(\"[message...]\", \"Initial prompt to send\")\r\n .option(\"-m, --model <model>\", \"Override model for this session\")\r\n .option(\"-r, --role <role>\", \"Set the task role\")\r\n .option(\"--verbose\", \"Enable verbose output\")\r\n .option(\"--no-color\", \"Disable colored output\")\r\n .showSuggestionAfterError()\r\n .showHelpAfterError()\r\n .addHelpText(\r\n \"after\",\r\n [\r\n \"\",\r\n \"Examples:\",\r\n \" aemeathcli\",\r\n \" aemeathcli \\\"explain this repository\\\"\",\r\n \" aemeathcli chat --print \\\"summarize the latest diff\\\"\",\r\n \" aemeathcli # use Shift+Tab inside the TUI to switch into swarm mode\",\r\n ].join(\"\\n\"),\r\n );\r\n\r\n // Register subcommands\r\n program.addCommand(createChatCommand());\r\n program.addCommand(createPlanCommand());\r\n program.addCommand(createReviewCommand());\r\n program.addCommand(createTestCommand());\r\n program.addCommand(createConfigCommand());\r\n program.addCommand(createAuthCommand());\r\n program.addCommand(createLoginCommand());\r\n program.addCommand(createTeamCommand());\r\n program.addCommand(createInstallCommand());\r\n\r\n // Default action (no subcommand)\r\n program.action(async (messageParts: string[], options: Record<string, unknown>) => {\r\n let message = messageParts.join(\" \") || undefined;\r\n\r\n // Support reading initial prompt from file (used by split-panel mode\r\n // where each agent pane is launched with AEMEATHCLI_PROMPT_FILE pointing\r\n // to a temp file containing the agent's task prompt).\r\n let isAgentPane = false;\r\n if (message === undefined) {\r\n const promptFilePath = process.env[\"AEMEATHCLI_PROMPT_FILE\"];\r\n if (promptFilePath !== undefined && promptFilePath.length > 0) {\r\n try {\r\n const { readFileSync } = await import(\"node:fs\");\r\n message = readFileSync(promptFilePath, \"utf-8\").trim();\r\n isAgentPane = true;\r\n } catch {\r\n // Prompt file not found — continue without initial message\r\n }\r\n }\r\n }\r\n\r\n await runChatCommand({\r\n initialMessage: message,\r\n model: options[\"model\"] as string | undefined,\r\n role: options[\"role\"] as string | undefined,\r\n isAgentPane,\r\n streaming: true,\r\n });\r\n });\r\n\r\n // Check for updates (non-blocking, per PRD section 19.3)\r\n if (shouldCheckForUpdates(process.argv.slice(2))) {\r\n checkForUpdates();\r\n }\r\n\r\n // Parse and execute\r\n try {\r\n await program.parseAsync(process.argv);\r\n } catch (error: unknown) {\r\n if (error instanceof Error) {\r\n process.stderr.write(pc.red(`Error: ${error.message}\\n`));\r\n }\r\n process.exitCode = 1;\r\n }\r\n}\r\n\r\nfunction shouldCheckForUpdates(args: readonly string[]): boolean {\r\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\r\n return false;\r\n }\r\n\r\n return !args.some((arg) => [\"--help\", \"-h\", \"--version\", \"-v\"].includes(arg));\r\n}\r\n\r\nfunction checkForUpdates(): void {\r\n // Lazy-load to keep startup fast\r\n import(\"update-notifier\")\r\n .then(({ default: updateNotifier }) => {\r\n const notifier = updateNotifier({\r\n pkg: { name: \"aemeathcli\", version: PACKAGE_VERSION },\r\n updateCheckInterval: 1000 * 60 * 60 * 24, // 24 hours\r\n });\r\n notifier.notify({ isGlobal: true });\r\n })\r\n .catch(() => {\r\n // Silently ignore update check failures\r\n });\r\n}\r\n\r\nmain().catch((error: unknown) => {\r\n process.stderr.write(\r\n pc.red(`Fatal error: ${error instanceof Error ? error.message : String(error)}\\n`),\r\n );\r\n process.exit(1);\r\n});\r\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { CredentialStore } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
1
|
+
import { CredentialStore } from './chunk-AQ23TYSQ.js';
|
|
2
|
+
import './chunk-VJNQJALF.js';
|
|
3
|
+
import './chunk-VBLLDY4R.js';
|
|
4
|
+
import './chunk-2GKOK6T7.js';
|
|
5
|
+
import { AuthenticationError } from './chunk-473JN6M5.js';
|
|
6
|
+
import './chunk-62HSGYQD.js';
|
|
7
|
+
import { logger } from './chunk-HEKFAKVH.js';
|
|
8
|
+
import './chunk-BY4DAKUU.js';
|
|
9
9
|
import { existsSync, readFileSync } from 'fs';
|
|
10
10
|
import { join } from 'path';
|
|
11
11
|
import { homedir } from 'os';
|
|
@@ -66,12 +66,14 @@ var CodexLogin = class {
|
|
|
66
66
|
logger.info("Spawning codex login (browser will open automatically)");
|
|
67
67
|
try {
|
|
68
68
|
await this.spawnInteractive(CLI_COMMAND, ["login"]);
|
|
69
|
-
} catch
|
|
69
|
+
} catch {
|
|
70
70
|
try {
|
|
71
71
|
await this.spawnInteractive(CLI_COMMAND, ["login", "--device-auth"]);
|
|
72
72
|
} catch {
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
throw new AuthenticationError(
|
|
74
|
+
"openai",
|
|
75
|
+
"Codex login failed. Make sure you have the Codex CLI installed:\n npm install -g @openai/codex\nOr set an API key: aemeathcli auth set-key codex <key>"
|
|
76
|
+
);
|
|
75
77
|
}
|
|
76
78
|
}
|
|
77
79
|
const credential = this.readCachedCredentials();
|
|
@@ -142,15 +144,14 @@ var CodexLogin = class {
|
|
|
142
144
|
}
|
|
143
145
|
async isCliAvailable() {
|
|
144
146
|
try {
|
|
145
|
-
await execa(CLI_COMMAND, ["--
|
|
147
|
+
await execa(CLI_COMMAND, ["--version"], { timeout: 5e3, stdin: "ignore", stdout: "ignore", stderr: "ignore" });
|
|
146
148
|
return true;
|
|
147
|
-
} catch
|
|
148
|
-
|
|
149
|
-
return code !== "ENOENT";
|
|
149
|
+
} catch {
|
|
150
|
+
return false;
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
153
|
};
|
|
153
154
|
|
|
154
155
|
export { CodexLogin };
|
|
155
|
-
//# sourceMappingURL=codex-login-
|
|
156
|
-
//# sourceMappingURL=codex-login-
|
|
156
|
+
//# sourceMappingURL=codex-login-GMPF64MR.js.map
|
|
157
|
+
//# sourceMappingURL=codex-login-GMPF64MR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auth/providers/codex-login.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAiBA,IAAM,WAAA,GAAc,OAAA;AAEpB,SAAS,YAAA,GAAuB;AAC9B,EAAA,OAAO,QAAQ,GAAA,CAAI,YAAY,KAAK,IAAA,CAAK,OAAA,IAAW,QAAQ,CAAA;AAC9D;AAEA,SAAS,eAAA,GAA0B;AACjC,EAAA,OAAO,IAAA,CAAK,YAAA,EAAa,EAAG,WAAW,CAAA;AACzC;AAeA,SAAS,iBAAA,GAAgD;AACvD,EAAA,MAAM,WAAW,eAAA,EAAgB;AACjC,EAAA,IAAI,CAAC,UAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAC1C,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,wBAAwB,OAAA,EAAqC;AACpE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACpC,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA,CAAA;AACrB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,SAAS,WAAW,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AAG7E,IAAA,OAAO,OAAA,CAAQ,KAAA;AAAA,EACjB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAIO,IAAM,aAAN,MAAiB;AAAA,EACL,eAAA;AAAA,EAEjB,YAAY,KAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA,IAAS,IAAI,eAAA,EAAgB;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAA,GAA8B;AAElC,IAAA,MAAM,QAAA,GAAW,KAAK,qBAAA,EAAsB;AAC5C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAA,CAAO,KAAK,wDAAwD,CAAA;AACpE,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAA;AACjD,MAAA,OAAO,QAAA;AAAA,IACT;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,cAAA,EAAe;AAC/C,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,QAAA;AAAA,QACA;AAAA,OAGF;AAAA,IACF;AAGA,IAAA,MAAA,CAAO,KAAK,wDAAwD,CAAA;AACpE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa,CAAC,OAAO,CAAC,CAAA;AAAA,IACpD,CAAA,CAAA,MAAQ;AAEN,MAAA,IAAI;AACF,QAAA,MAAM,KAAK,gBAAA,CAAiB,WAAA,EAAa,CAAC,OAAA,EAAS,eAAe,CAAC,CAAA;AAAA,MACrE,CAAA,CAAA,MAAQ;AACN,QAAA,MAAM,IAAI,mBAAA;AAAA,UACR,QAAA;AAAA,UACA;AAAA,SAGF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,UAAA,GAAa,KAAK,qBAAA,EAAsB;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,QAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,QAAA,EAAU,UAAU,CAAA;AACnD,IAAA,MAAA,CAAO,KAAK,yCAAyC,CAAA;AACrD,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEA,MAAM,MAAA,GAAwB;AAC5B,IAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,QAAQ,CAAA;AAC1C,IAAA,MAAA,CAAO,KAAK,wCAAwC,CAAA;AAAA,EACtD;AAAA,EAEA,MAAM,UAAA,GAA+B;AACnC,IAAA,MAAM,UAAA,GAAa,KAAK,qBAAA,EAAsB;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,QAAA,EAAU,UAAU,CAAA;AACnD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,SAAA,GAAmG;AACvG,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,UAAA,EAAW;AACvC,IAAA,IAAI,CAAC,QAAA,EAAU,OAAO,EAAE,UAAU,KAAA,EAAM;AAExC,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,eAAA,CAAgB,IAAI,QAAQ,CAAA;AAC1D,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,EAAE,UAAU,KAAA,EAAM;AAE1C,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,IAAA;AAAA,MACV,GAAI,WAAW,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,UAAA,CAAW,KAAA,EAAM,GAAI;AAAC,KACtE;AAAA,EACF;AAAA,EAEA,MAAM,mBAAA,GAAwD;AAC5D,IAAA,MAAM,UAAA,GAAa,KAAK,qBAAA,EAAsB;AAC9C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,QAAA,EAAU,UAAU,CAAA;AAAA,IACrD;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA,EAIQ,qBAAA,GAAiD;AACvD,IAAA,MAAM,WAAW,iBAAA,EAAkB;AACnC,IAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AAEtB,IAAA,IAAI,QAAA,CAAS,QAAQ,YAAA,EAAc;AACjC,MAAA,MAAM,KAAA,GAAQ,SAAS,MAAA,CAAO,QAAA,GAC1B,wBAAwB,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,GAChD,MAAA;AAEJ,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,cAAA;AAAA,QACR,KAAA,EAAO,SAAS,MAAA,CAAO,YAAA;AAAA,QACvB,GAAI,QAAA,CAAS,MAAA,CAAO,aAAA,KAAkB,MAAA,GAAY,EAAE,YAAA,EAAc,QAAA,CAAS,MAAA,CAAO,aAAA,EAAc,GAAI,EAAC;AAAA,QACrG,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU;AAAC,OACzC;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,CAAS,cAAA,IAAkB,OAAO,QAAA,CAAS,mBAAmB,QAAA,EAAU;AAC1E,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,SAAA;AAAA,QACR,OAAO,QAAA,CAAS;AAAA,OAClB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAc,gBAAA,CAAiB,OAAA,EAAiB,IAAA,EAAwC;AACtF,IAAA,MAAM,KAAA,CAAM,OAAA,EAAS,CAAC,GAAG,IAAI,CAAA,EAAG,EAAE,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,GAAA,EAAS,CAAA;AAAA,EACxE;AAAA,EAEA,MAAc,cAAA,GAAmC;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,CAAM,WAAA,EAAa,CAAC,WAAW,GAAG,EAAE,OAAA,EAAS,GAAA,EAAM,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,UAAU,CAAA;AAC9G,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACF","file":"codex-login-GMPF64MR.js","sourcesContent":["/**\r\n * Codex (OpenAI) delegated authentication\r\n * Spawns `codex login` which opens the browser automatically for ChatGPT login.\r\n * After login, reads cached tokens from ~/.codex/auth.json.\r\n */\r\n\r\nimport { readFileSync, existsSync } from \"node:fs\";\r\nimport { join } from \"node:path\";\r\nimport { homedir } from \"node:os\";\r\nimport { execa } from \"execa\";\r\nimport type { ICredential } from \"../../types/index.js\";\r\nimport { AuthenticationError } from \"../../types/index.js\";\r\nimport { CredentialStore } from \"../credential-store.js\";\r\nimport { logger } from \"../../utils/index.js\";\r\n\r\n// ── Codex CLI Token Paths ───────────────────────────────────────────────\r\n\r\nconst CLI_COMMAND = \"codex\";\r\n\r\nfunction getCodexHome(): string {\r\n return process.env[\"CODEX_HOME\"] ?? join(homedir(), \".codex\");\r\n}\r\n\r\nfunction getAuthJsonPath(): string {\r\n return join(getCodexHome(), \"auth.json\");\r\n}\r\n\r\n// ── auth.json Schema ────────────────────────────────────────────────────\r\n\r\ninterface ICodexAuthJson {\r\n readonly OPENAI_API_KEY?: string | null;\r\n readonly tokens?: {\r\n readonly id_token?: string;\r\n readonly access_token?: string;\r\n readonly refresh_token?: string;\r\n readonly account_id?: string;\r\n };\r\n readonly last_refresh?: string;\r\n}\r\n\r\nfunction readCodexAuthJson(): ICodexAuthJson | undefined {\r\n const authPath = getAuthJsonPath();\r\n if (!existsSync(authPath)) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const raw = readFileSync(authPath, \"utf-8\");\r\n return JSON.parse(raw) as ICodexAuthJson;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction extractEmailFromIdToken(idToken: string): string | undefined {\r\n try {\r\n const payload = idToken.split(\".\")[1];\r\n if (!payload) return undefined;\r\n const decoded = JSON.parse(Buffer.from(payload, \"base64url\").toString(\"utf8\")) as {\r\n email?: string;\r\n };\r\n return decoded.email;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\n// ── CodexLogin Class ────────────────────────────────────────────────────\r\n\r\nexport class CodexLogin {\r\n private readonly credentialStore: CredentialStore;\r\n\r\n constructor(store?: CredentialStore) {\r\n this.credentialStore = store ?? new CredentialStore();\r\n }\r\n\r\n /**\r\n * Spawn `codex login` which opens the browser automatically for ChatGPT login,\r\n * then read the cached tokens from ~/.codex/auth.json.\r\n */\r\n async login(): Promise<ICredential> {\r\n // Check if already logged in via cached tokens\r\n const existing = this.readCachedCredentials();\r\n if (existing) {\r\n logger.info(\"Found existing Codex credentials in ~/.codex/auth.json\");\r\n await this.credentialStore.set(\"openai\", existing);\r\n return existing;\r\n }\r\n\r\n // Check if the CLI is available\r\n const cliAvailable = await this.isCliAvailable();\r\n if (!cliAvailable) {\r\n throw new AuthenticationError(\r\n \"openai\",\r\n \"Codex CLI not found. Install it first:\\n\" +\r\n \" npm install -g @openai/codex\\n\" +\r\n \"Or set an API key: aemeathcli auth set-key codex <key>\",\r\n );\r\n }\r\n\r\n // Spawn `codex login` — browser opens automatically\r\n logger.info(\"Spawning codex login (browser will open automatically)\");\r\n try {\r\n await this.spawnInteractive(CLI_COMMAND, [\"login\"]);\r\n } catch {\r\n // Try device auth as fallback for headless environments\r\n try {\r\n await this.spawnInteractive(CLI_COMMAND, [\"login\", \"--device-auth\"]);\r\n } catch {\r\n throw new AuthenticationError(\r\n \"openai\",\r\n \"Codex login failed. Make sure you have the Codex CLI installed:\\n\" +\r\n \" npm install -g @openai/codex\\n\" +\r\n \"Or set an API key: aemeathcli auth set-key codex <key>\",\r\n );\r\n }\r\n }\r\n\r\n // Read the freshly cached credentials\r\n const credential = this.readCachedCredentials();\r\n if (!credential) {\r\n throw new AuthenticationError(\r\n \"openai\",\r\n \"No credentials found after Codex login. Please try again or set an API key: aemeathcli auth set-key codex <key>\",\r\n );\r\n }\r\n\r\n await this.credentialStore.set(\"openai\", credential);\r\n logger.info(\"Codex credentials imported successfully\");\r\n return credential;\r\n }\r\n\r\n async logout(): Promise<void> {\r\n await this.credentialStore.delete(\"openai\");\r\n logger.info(\"OpenAI session revoked from AemeathCLI\");\r\n }\r\n\r\n async isLoggedIn(): Promise<boolean> {\r\n const credential = this.readCachedCredentials();\r\n if (!credential) {\r\n return false;\r\n }\r\n\r\n await this.credentialStore.set(\"openai\", credential);\r\n return true;\r\n }\r\n\r\n async getStatus(): Promise<{ loggedIn: boolean; email?: string | undefined; plan?: string | undefined }> {\r\n const loggedIn = await this.isLoggedIn();\r\n if (!loggedIn) return { loggedIn: false };\r\n\r\n const credential = await this.credentialStore.get(\"openai\");\r\n if (!credential) return { loggedIn: false };\r\n\r\n return {\r\n loggedIn: true,\r\n ...(credential.email !== undefined ? { email: credential.email } : {}),\r\n };\r\n }\r\n\r\n async getCachedCredential(): Promise<ICredential | undefined> {\r\n const credential = this.readCachedCredentials();\r\n if (credential) {\r\n await this.credentialStore.set(\"openai\", credential);\r\n }\r\n return credential;\r\n }\r\n\r\n // ── Internal ──────────────────────────────────────────────────────────\r\n\r\n private readCachedCredentials(): ICredential | undefined {\r\n const authData = readCodexAuthJson();\r\n if (!authData) return undefined;\r\n\r\n if (authData.tokens?.access_token) {\r\n const email = authData.tokens.id_token\r\n ? extractEmailFromIdToken(authData.tokens.id_token)\r\n : undefined;\r\n\r\n return {\r\n provider: \"openai\",\r\n method: \"native_login\",\r\n token: authData.tokens.access_token,\r\n ...(authData.tokens.refresh_token !== undefined ? { refreshToken: authData.tokens.refresh_token } : {}),\r\n ...(email !== undefined ? { email } : {}),\r\n };\r\n }\r\n\r\n if (authData.OPENAI_API_KEY && typeof authData.OPENAI_API_KEY === \"string\") {\r\n return {\r\n provider: \"openai\",\r\n method: \"api_key\",\r\n token: authData.OPENAI_API_KEY,\r\n };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private async spawnInteractive(command: string, args: readonly string[]): Promise<void> {\r\n await execa(command, [...args], { stdio: \"inherit\", timeout: 300_000 });\r\n }\r\n\r\n private async isCliAvailable(): Promise<boolean> {\r\n try {\r\n await execa(CLI_COMMAND, [\"--version\"], { timeout: 5000, stdin: \"ignore\", stdout: \"ignore\", stderr: \"ignore\" });\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { ConfigStore } from './chunk-5XFSV6PF.js';
|
|
2
|
+
import './chunk-CC7MGWYY.js';
|
|
3
|
+
import './chunk-2GKOK6T7.js';
|
|
4
|
+
import './chunk-HEKFAKVH.js';
|
|
5
|
+
import './chunk-BY4DAKUU.js';
|
|
6
|
+
//# sourceMappingURL=config-store-POB6I37G.js.map
|
|
7
|
+
//# sourceMappingURL=config-store-POB6I37G.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"config-store-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"config-store-POB6I37G.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"conversation-store-PRBHWQMJ.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"detect-providers-C4SVQHFF.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"executor-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"executor-RUX7VK3T.js"}
|