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
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { detectInstalledProviders } from './chunk-3TSPZRGM.js';
|
|
2
|
+
import { CLI_PROVIDER_ORDER, getCliProviderEntry } from './chunk-RP2TAL3J.js';
|
|
3
|
+
import { ConfigStore } from './chunk-5XFSV6PF.js';
|
|
4
|
+
import './chunk-CC7MGWYY.js';
|
|
5
|
+
import { PACKAGE_VERSION, DEFAULT_CONFIG } from './chunk-2GKOK6T7.js';
|
|
6
|
+
import './chunk-HEKFAKVH.js';
|
|
7
|
+
import { getConfigPath } from './chunk-BY4DAKUU.js';
|
|
8
|
+
import { existsSync } from 'fs';
|
|
9
|
+
import pc from 'picocolors';
|
|
10
|
+
|
|
11
|
+
function hasGlobalConfig() {
|
|
12
|
+
return existsSync(getConfigPath());
|
|
13
|
+
}
|
|
14
|
+
function isInteractiveTerminal() {
|
|
15
|
+
return process.stdin.isTTY && process.stdout.isTTY;
|
|
16
|
+
}
|
|
17
|
+
function createInitialConfig() {
|
|
18
|
+
return {
|
|
19
|
+
...DEFAULT_CONFIG,
|
|
20
|
+
version: PACKAGE_VERSION
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function ensureDefaultConfig() {
|
|
24
|
+
const store = new ConfigStore();
|
|
25
|
+
const configPath = getConfigPath();
|
|
26
|
+
if (hasGlobalConfig()) {
|
|
27
|
+
return {
|
|
28
|
+
configPath,
|
|
29
|
+
created: false,
|
|
30
|
+
config: store.loadGlobal()
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const config = createInitialConfig();
|
|
34
|
+
store.saveGlobal(config);
|
|
35
|
+
return {
|
|
36
|
+
configPath,
|
|
37
|
+
created: true,
|
|
38
|
+
config
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async function createFirstRunLogin(provider) {
|
|
42
|
+
switch (provider) {
|
|
43
|
+
case "claude": {
|
|
44
|
+
const { ClaudeLogin } = await import('./claude-login-IS5WTBMP.js');
|
|
45
|
+
return new ClaudeLogin();
|
|
46
|
+
}
|
|
47
|
+
case "codex": {
|
|
48
|
+
const { CodexLogin } = await import('./codex-login-GMPF64MR.js');
|
|
49
|
+
return new CodexLogin();
|
|
50
|
+
}
|
|
51
|
+
case "gemini": {
|
|
52
|
+
const { GeminiLogin } = await import('./gemini-login-KE224MSW.js');
|
|
53
|
+
return new GeminiLogin();
|
|
54
|
+
}
|
|
55
|
+
case "kimi": {
|
|
56
|
+
const { KimiLogin } = await import('./kimi-login-DNT5YBKX.js');
|
|
57
|
+
return new KimiLogin();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function writeWelcomeBanner() {
|
|
62
|
+
process.stdout.write(
|
|
63
|
+
[
|
|
64
|
+
"",
|
|
65
|
+
pc.cyan(" \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"),
|
|
66
|
+
pc.cyan(" \u2551 Welcome to AemeathCLI \u2551"),
|
|
67
|
+
pc.cyan(` \u2551 Multi-Model CLI Coding Tool v${PACKAGE_VERSION.padEnd(10)} \u2551`),
|
|
68
|
+
pc.cyan(" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"),
|
|
69
|
+
"",
|
|
70
|
+
" Let's get you set up:",
|
|
71
|
+
""
|
|
72
|
+
].join("\n")
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
async function runFirstRunSetup(options = {}) {
|
|
76
|
+
const configPath = getConfigPath();
|
|
77
|
+
if (hasGlobalConfig() && !options.force) {
|
|
78
|
+
const store2 = new ConfigStore();
|
|
79
|
+
return {
|
|
80
|
+
configPath,
|
|
81
|
+
created: false,
|
|
82
|
+
config: store2.loadGlobal()
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const store = new ConfigStore();
|
|
86
|
+
const config = createInitialConfig();
|
|
87
|
+
const detectedProviders = detectInstalledProviders();
|
|
88
|
+
if (options.defaults || !isInteractiveTerminal()) {
|
|
89
|
+
const defaultPrimaryMasterProvider = detectedProviders[0];
|
|
90
|
+
const configWithDefaults = {
|
|
91
|
+
...config,
|
|
92
|
+
swarm: {
|
|
93
|
+
onboardingComplete: true,
|
|
94
|
+
detectedProviders,
|
|
95
|
+
primaryMasterProvider: defaultPrimaryMasterProvider,
|
|
96
|
+
fallbackMasterProviders: detectedProviders.slice(1)
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
store.saveGlobal(configWithDefaults);
|
|
100
|
+
const modeLabel = options.defaults ? "defaults" : "non-interactive defaults";
|
|
101
|
+
process.stdout.write(
|
|
102
|
+
`${pc.green("\u2713")} Saved ${modeLabel} to ${pc.cyan(configPath)}
|
|
103
|
+
`
|
|
104
|
+
);
|
|
105
|
+
return {
|
|
106
|
+
configPath,
|
|
107
|
+
created: true,
|
|
108
|
+
config: configWithDefaults
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const { checkbox, confirm, select } = await import('@inquirer/prompts');
|
|
112
|
+
writeWelcomeBanner();
|
|
113
|
+
const detectedLines = CLI_PROVIDER_ORDER.map((provider) => {
|
|
114
|
+
const entry = getCliProviderEntry(provider);
|
|
115
|
+
const installed = detectedProviders.includes(provider);
|
|
116
|
+
return ` ${installed ? pc.green("\u2713") : pc.dim("\u25CB")} ${entry.label} \u2014 ${installed ? "installed" : "not detected"}`;
|
|
117
|
+
});
|
|
118
|
+
process.stdout.write(`${detectedLines.join("\n")}
|
|
119
|
+
|
|
120
|
+
`);
|
|
121
|
+
const loginChoices = CLI_PROVIDER_ORDER.map((provider) => {
|
|
122
|
+
const entry = getCliProviderEntry(provider);
|
|
123
|
+
if (entry.loginProvider === void 0) {
|
|
124
|
+
return void 0;
|
|
125
|
+
}
|
|
126
|
+
const installed = detectedProviders.includes(provider);
|
|
127
|
+
return {
|
|
128
|
+
name: `${entry.label}${installed ? "" : " (not detected, login only)"}`,
|
|
129
|
+
value: entry.loginProvider,
|
|
130
|
+
checked: installed && provider !== "kimi-cli"
|
|
131
|
+
};
|
|
132
|
+
}).filter((choice) => choice !== void 0);
|
|
133
|
+
const selectedLoginProviders = await checkbox({
|
|
134
|
+
message: "Which providers should be authenticated during setup?",
|
|
135
|
+
choices: loginChoices
|
|
136
|
+
});
|
|
137
|
+
for (const provider of selectedLoginProviders) {
|
|
138
|
+
process.stdout.write(pc.cyan(` Logging in to ${provider}...
|
|
139
|
+
`));
|
|
140
|
+
try {
|
|
141
|
+
const login = await createFirstRunLogin(provider);
|
|
142
|
+
await login.login();
|
|
143
|
+
process.stdout.write(pc.green(` \u2713 ${provider} \u2014 Logged in successfully
|
|
144
|
+
`));
|
|
145
|
+
} catch (error) {
|
|
146
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
147
|
+
process.stdout.write(pc.yellow(` ! ${provider} \u2014 Login skipped: ${message}
|
|
148
|
+
`));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (detectedProviders.includes("ollama")) {
|
|
152
|
+
process.stdout.write(pc.green(" \u2713 ollama \u2014 Local agent runtime detected\n"));
|
|
153
|
+
}
|
|
154
|
+
let primaryMasterProvider;
|
|
155
|
+
let fallbackMasterProviders = [];
|
|
156
|
+
if (detectedProviders.length > 0) {
|
|
157
|
+
primaryMasterProvider = await select({
|
|
158
|
+
message: "Choose the primary master agent provider for swarm orchestration:",
|
|
159
|
+
choices: detectedProviders.map((provider) => ({
|
|
160
|
+
name: `${getCliProviderEntry(provider).label} \u2014 ${getCliProviderEntry(provider).description}`,
|
|
161
|
+
value: provider
|
|
162
|
+
}))
|
|
163
|
+
});
|
|
164
|
+
const remainingProviders = detectedProviders.filter(
|
|
165
|
+
(provider) => provider !== primaryMasterProvider
|
|
166
|
+
);
|
|
167
|
+
if (remainingProviders.length > 0) {
|
|
168
|
+
fallbackMasterProviders = await checkbox({
|
|
169
|
+
message: "Select optional fallback master-agent providers:",
|
|
170
|
+
choices: remainingProviders.map((provider) => ({
|
|
171
|
+
name: `${getCliProviderEntry(provider).label} \u2014 ${getCliProviderEntry(provider).description}`,
|
|
172
|
+
value: provider
|
|
173
|
+
}))
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
} else {
|
|
177
|
+
process.stdout.write(
|
|
178
|
+
`${pc.yellow(" !")} No supported native agent CLIs were detected. You can still use direct chat, but swarm orchestration will stay limited until one is installed.
|
|
179
|
+
`
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
const keepRoleDefaults = await confirm({
|
|
183
|
+
message: "Keep the recommended role-routing defaults?",
|
|
184
|
+
default: true
|
|
185
|
+
});
|
|
186
|
+
const configuredProviders = {
|
|
187
|
+
...config.providers
|
|
188
|
+
};
|
|
189
|
+
for (const provider of detectedProviders) {
|
|
190
|
+
const entry = getCliProviderEntry(provider);
|
|
191
|
+
configuredProviders[entry.provider] = {
|
|
192
|
+
...configuredProviders[entry.provider],
|
|
193
|
+
enabled: true
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
const finalConfig = {
|
|
197
|
+
...config,
|
|
198
|
+
roles: keepRoleDefaults ? DEFAULT_CONFIG.roles : config.roles,
|
|
199
|
+
providers: configuredProviders,
|
|
200
|
+
swarm: {
|
|
201
|
+
onboardingComplete: true,
|
|
202
|
+
detectedProviders,
|
|
203
|
+
primaryMasterProvider,
|
|
204
|
+
fallbackMasterProviders
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
store.saveGlobal(finalConfig);
|
|
208
|
+
process.stdout.write(
|
|
209
|
+
[
|
|
210
|
+
"",
|
|
211
|
+
` ${pc.green("\u2713")} Configuration saved to ${pc.cyan(configPath)}`,
|
|
212
|
+
"",
|
|
213
|
+
` Swarm primary: ${primaryMasterProvider ? getCliProviderEntry(primaryMasterProvider).label : "not set"}`,
|
|
214
|
+
` Swarm fallbacks: ${fallbackMasterProviders.length > 0 ? fallbackMasterProviders.map(getCliProviderEntry).map((entry) => entry.label).join(", ") : "none"}`,
|
|
215
|
+
"",
|
|
216
|
+
" Ready. Start with `aemeathcli` or `ac`.",
|
|
217
|
+
" Use Shift+Tab inside the TUI to switch between swarm, guided edits, and direct chat.",
|
|
218
|
+
""
|
|
219
|
+
].join("\n")
|
|
220
|
+
);
|
|
221
|
+
return {
|
|
222
|
+
configPath,
|
|
223
|
+
created: true,
|
|
224
|
+
config: finalConfig
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export { createInitialConfig, ensureDefaultConfig, hasGlobalConfig, isInteractiveTerminal, runFirstRunSetup };
|
|
229
|
+
//# sourceMappingURL=first-run-GDEVRFPO.js.map
|
|
230
|
+
//# sourceMappingURL=first-run-GDEVRFPO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/setup/first-run.ts"],"names":["store"],"mappings":"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","file":"first-run-GDEVRFPO.js","sourcesContent":["import { existsSync } from \"node:fs\";\r\n\r\nimport pc from \"picocolors\";\r\n\r\nimport type { CliProviderType } from \"../../orchestrator/constants.js\";\r\nimport { CLI_PROVIDER_ORDER, getCliProviderEntry, type LoginProvider } from \"../../orchestrator/utils/provider-catalog.js\";\r\nimport { detectInstalledProviders } from \"../../orchestrator/utils/detect-providers.js\";\r\nimport { ConfigStore } from \"../../storage/config-store.js\";\r\nimport { DEFAULT_CONFIG, type IGlobalConfig } from \"../../types/config.js\";\r\nimport { getConfigPath } from \"../../utils/pathResolver.js\";\r\nimport { PACKAGE_VERSION } from \"../../version.js\";\r\n\r\ninterface IFirstRunLogin {\r\n login(): Promise<unknown>;\r\n}\r\n\r\nexport interface FirstRunSetupOptions {\r\n readonly defaults?: boolean;\r\n readonly force?: boolean;\r\n}\r\n\r\nexport interface FirstRunSetupResult {\r\n readonly configPath: string;\r\n readonly created: boolean;\r\n readonly config: IGlobalConfig;\r\n}\r\n\r\nexport function hasGlobalConfig(): boolean {\r\n return existsSync(getConfigPath());\r\n}\r\n\r\nexport function isInteractiveTerminal(): boolean {\r\n return process.stdin.isTTY && process.stdout.isTTY;\r\n}\r\n\r\nexport function createInitialConfig(): IGlobalConfig {\r\n return {\r\n ...DEFAULT_CONFIG,\r\n version: PACKAGE_VERSION,\r\n };\r\n}\r\n\r\nexport function ensureDefaultConfig(): FirstRunSetupResult {\r\n const store = new ConfigStore();\r\n const configPath = getConfigPath();\r\n\r\n if (hasGlobalConfig()) {\r\n return {\r\n configPath,\r\n created: false,\r\n config: store.loadGlobal(),\r\n };\r\n }\r\n\r\n const config = createInitialConfig();\r\n store.saveGlobal(config);\r\n\r\n return {\r\n configPath,\r\n created: true,\r\n config,\r\n };\r\n}\r\n\r\nasync function createFirstRunLogin(provider: LoginProvider): Promise<IFirstRunLogin> {\r\n switch (provider) {\r\n case \"claude\": {\r\n const { ClaudeLogin } = await import(\"../../auth/providers/claude-login.js\");\r\n return new ClaudeLogin();\r\n }\r\n case \"codex\": {\r\n const { CodexLogin } = await import(\"../../auth/providers/codex-login.js\");\r\n return new CodexLogin();\r\n }\r\n case \"gemini\": {\r\n const { GeminiLogin } = await import(\"../../auth/providers/gemini-login.js\");\r\n return new GeminiLogin();\r\n }\r\n case \"kimi\": {\r\n const { KimiLogin } = await import(\"../../auth/providers/kimi-login.js\");\r\n return new KimiLogin();\r\n }\r\n }\r\n}\r\n\r\nfunction writeWelcomeBanner(): void {\r\n process.stdout.write(\r\n [\r\n \"\",\r\n pc.cyan(\" ╔══════════════════════════════════════════════╗\"),\r\n pc.cyan(\" ║ Welcome to AemeathCLI ║\"),\r\n pc.cyan(` ║ Multi-Model CLI Coding Tool v${PACKAGE_VERSION.padEnd(10)} ║`),\r\n pc.cyan(\" ╚══════════════════════════════════════════════╝\"),\r\n \"\",\r\n \" Let's get you set up:\",\r\n \"\",\r\n ].join(\"\\n\"),\r\n );\r\n}\r\n\r\nexport async function runFirstRunSetup(\r\n options: FirstRunSetupOptions = {},\r\n): Promise<FirstRunSetupResult> {\r\n const configPath = getConfigPath();\r\n if (hasGlobalConfig() && !options.force) {\r\n const store = new ConfigStore();\r\n return {\r\n configPath,\r\n created: false,\r\n config: store.loadGlobal(),\r\n };\r\n }\r\n\r\n const store = new ConfigStore();\r\n const config = createInitialConfig();\r\n const detectedProviders = detectInstalledProviders();\r\n\r\n if (options.defaults || !isInteractiveTerminal()) {\r\n const defaultPrimaryMasterProvider = detectedProviders[0];\r\n const configWithDefaults: IGlobalConfig = {\r\n ...config,\r\n swarm: {\r\n onboardingComplete: true,\r\n detectedProviders,\r\n primaryMasterProvider: defaultPrimaryMasterProvider,\r\n fallbackMasterProviders: detectedProviders.slice(1),\r\n },\r\n };\r\n store.saveGlobal(configWithDefaults);\r\n\r\n const modeLabel = options.defaults ? \"defaults\" : \"non-interactive defaults\";\r\n process.stdout.write(\r\n `${pc.green(\"✓\")} Saved ${modeLabel} to ${pc.cyan(configPath)}\\n`,\r\n );\r\n\r\n return {\r\n configPath,\r\n created: true,\r\n config: configWithDefaults,\r\n };\r\n }\r\n\r\n const { checkbox, confirm, select } = await import(\"@inquirer/prompts\");\r\n\r\n writeWelcomeBanner();\r\n\r\n const detectedLines = CLI_PROVIDER_ORDER.map((provider) => {\r\n const entry = getCliProviderEntry(provider);\r\n const installed = detectedProviders.includes(provider);\r\n return ` ${installed ? pc.green(\"✓\") : pc.dim(\"○\")} ${entry.label} — ${installed ? \"installed\" : \"not detected\"}`;\r\n });\r\n process.stdout.write(`${detectedLines.join(\"\\n\")}\\n\\n`);\r\n\r\n const loginChoices = CLI_PROVIDER_ORDER\r\n .map((provider) => {\r\n const entry = getCliProviderEntry(provider);\r\n if (entry.loginProvider === undefined) {\r\n return undefined;\r\n }\r\n\r\n const installed = detectedProviders.includes(provider);\r\n return {\r\n name: `${entry.label}${installed ? \"\" : \" (not detected, login only)\"}`,\r\n value: entry.loginProvider,\r\n checked: installed && provider !== \"kimi-cli\",\r\n };\r\n })\r\n .filter((choice): choice is { name: string; value: LoginProvider; checked: boolean } => choice !== undefined);\r\n\r\n const selectedLoginProviders = await checkbox<LoginProvider>({\r\n message: \"Which providers should be authenticated during setup?\",\r\n choices: loginChoices,\r\n });\r\n\r\n for (const provider of selectedLoginProviders) {\r\n process.stdout.write(pc.cyan(` Logging in to ${provider}...\\n`));\r\n try {\r\n const login = await createFirstRunLogin(provider);\r\n await login.login();\r\n process.stdout.write(pc.green(` ✓ ${provider} — Logged in successfully\\n`));\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stdout.write(pc.yellow(` ! ${provider} — Login skipped: ${message}\\n`));\r\n }\r\n }\r\n\r\n if (detectedProviders.includes(\"ollama\")) {\r\n process.stdout.write(pc.green(\" ✓ ollama — Local agent runtime detected\\n\"));\r\n }\r\n\r\n let primaryMasterProvider: CliProviderType | undefined;\r\n let fallbackMasterProviders: CliProviderType[] = [];\r\n\r\n if (detectedProviders.length > 0) {\r\n primaryMasterProvider = await select<CliProviderType>({\r\n message: \"Choose the primary master agent provider for swarm orchestration:\",\r\n choices: detectedProviders.map((provider) => ({\r\n name: `${getCliProviderEntry(provider).label} — ${getCliProviderEntry(provider).description}`,\r\n value: provider,\r\n })),\r\n });\r\n\r\n const remainingProviders = detectedProviders.filter(\r\n (provider) => provider !== primaryMasterProvider,\r\n );\r\n\r\n if (remainingProviders.length > 0) {\r\n fallbackMasterProviders = await checkbox<CliProviderType>({\r\n message: \"Select optional fallback master-agent providers:\",\r\n choices: remainingProviders.map((provider) => ({\r\n name: `${getCliProviderEntry(provider).label} — ${getCliProviderEntry(provider).description}`,\r\n value: provider,\r\n })),\r\n });\r\n }\r\n } else {\r\n process.stdout.write(\r\n `${pc.yellow(\" !\")} No supported native agent CLIs were detected. You can still use direct chat, but swarm orchestration will stay limited until one is installed.\\n`,\r\n );\r\n }\r\n\r\n const keepRoleDefaults = await confirm({\r\n message: \"Keep the recommended role-routing defaults?\",\r\n default: true,\r\n });\r\n\r\n const configuredProviders: IGlobalConfig[\"providers\"] = {\r\n ...config.providers,\r\n };\r\n for (const provider of detectedProviders) {\r\n const entry = getCliProviderEntry(provider);\r\n configuredProviders[entry.provider] = {\r\n ...configuredProviders[entry.provider],\r\n enabled: true,\r\n };\r\n }\r\n\r\n const finalConfig: IGlobalConfig = {\r\n ...config,\r\n roles: keepRoleDefaults ? DEFAULT_CONFIG.roles : config.roles,\r\n providers: configuredProviders,\r\n swarm: {\r\n onboardingComplete: true,\r\n detectedProviders,\r\n primaryMasterProvider,\r\n fallbackMasterProviders,\r\n },\r\n };\r\n\r\n store.saveGlobal(finalConfig);\r\n\r\n process.stdout.write(\r\n [\r\n \"\",\r\n ` ${pc.green(\"✓\")} Configuration saved to ${pc.cyan(configPath)}`,\r\n \"\",\r\n ` Swarm primary: ${primaryMasterProvider ? getCliProviderEntry(primaryMasterProvider).label : \"not set\"}`,\r\n ` Swarm fallbacks: ${fallbackMasterProviders.length > 0 ? fallbackMasterProviders.map(getCliProviderEntry).map((entry) => entry.label).join(\", \") : \"none\"}`,\r\n \"\",\r\n \" Ready. Start with `aemeathcli` or `ac`.\",\r\n \" Use Shift+Tab inside the TUI to switch between swarm, guided edits, and direct chat.\",\r\n \"\",\r\n ].join(\"\\n\"),\r\n );\r\n\r\n return {\r\n configPath,\r\n created: true,\r\n config: finalConfig,\r\n };\r\n}\r\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { GeminiAdapter } from './chunk-25UNNEHN.js';
|
|
2
|
+
import './chunk-ODBY7S4X.js';
|
|
3
|
+
import './chunk-473JN6M5.js';
|
|
4
|
+
import './chunk-62HSGYQD.js';
|
|
5
|
+
import './chunk-HEKFAKVH.js';
|
|
6
|
+
//# sourceMappingURL=gemini-adapter-MV3U4QFH.js.map
|
|
7
|
+
//# sourceMappingURL=gemini-adapter-MV3U4QFH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"gemini-adapter-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"gemini-adapter-MV3U4QFH.js"}
|
|
@@ -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 { statSync, existsSync, readFileSync } from 'fs';
|
|
10
10
|
import { join } from 'path';
|
|
11
11
|
import { homedir } from 'os';
|
|
@@ -220,15 +220,14 @@ var GeminiLogin = class {
|
|
|
220
220
|
}
|
|
221
221
|
async isCliAvailable() {
|
|
222
222
|
try {
|
|
223
|
-
await execa(CLI_COMMAND, ["--
|
|
223
|
+
await execa(CLI_COMMAND, ["--version"], { timeout: 5e3, stdin: "ignore", stdout: "ignore", stderr: "ignore" });
|
|
224
224
|
return true;
|
|
225
|
-
} catch
|
|
226
|
-
|
|
227
|
-
return code !== "ENOENT";
|
|
225
|
+
} catch {
|
|
226
|
+
return false;
|
|
228
227
|
}
|
|
229
228
|
}
|
|
230
229
|
};
|
|
231
230
|
|
|
232
231
|
export { GeminiLogin };
|
|
233
|
-
//# sourceMappingURL=gemini-login-
|
|
234
|
-
//# sourceMappingURL=gemini-login-
|
|
232
|
+
//# sourceMappingURL=gemini-login-KE224MSW.js.map
|
|
233
|
+
//# sourceMappingURL=gemini-login-KE224MSW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auth/providers/gemini-login.ts"],"names":[],"mappings":"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","file":"gemini-login-KE224MSW.js","sourcesContent":["/**\r\n * Gemini (Google) delegated authentication\r\n * Reads cached credentials from ~/.gemini/oauth_creds.json (shared with the Gemini CLI).\r\n * If not authenticated, opens a new terminal window running `gemini` for interactive login,\r\n * then polls for credentials to appear.\r\n */\r\n\r\nimport { readFileSync, existsSync, statSync } 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// ── Gemini CLI Token Paths ──────────────────────────────────────────────\r\n\r\nconst CLI_COMMAND = \"gemini\";\r\nconst LOGIN_POLL_INTERVAL_MS = 2_000;\r\nconst LOGIN_POLL_TIMEOUT_MS = 120_000;\r\n\r\nfunction getGeminiHome(): string {\r\n return process.env[\"GEMINI_HOME\"] ?? join(homedir(), \".gemini\");\r\n}\r\n\r\nfunction getOAuthCredsPath(): string {\r\n return join(getGeminiHome(), \"oauth_creds.json\");\r\n}\r\n\r\nfunction getGoogleAccountsPath(): string {\r\n return join(getGeminiHome(), \"google_accounts.json\");\r\n}\r\n\r\n// ── Read existing tokens from Gemini CLI cache ──────────────────────────\r\n\r\ninterface IGeminiOAuthCreds {\r\n readonly access_token?: string;\r\n readonly scope?: string;\r\n readonly token_type?: string;\r\n readonly id_token?: string;\r\n readonly expiry_date?: number;\r\n readonly refresh_token?: string;\r\n}\r\n\r\ninterface IGoogleAccounts {\r\n readonly active?: string;\r\n}\r\n\r\nfunction readOAuthCreds(): IGeminiOAuthCreds | undefined {\r\n const credsPath = getOAuthCredsPath();\r\n if (!existsSync(credsPath)) return undefined;\r\n try {\r\n return JSON.parse(readFileSync(credsPath, \"utf-8\")) as IGeminiOAuthCreds;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction readGoogleAccounts(): IGoogleAccounts | undefined {\r\n const accountsPath = getGoogleAccountsPath();\r\n if (!existsSync(accountsPath)) return undefined;\r\n try {\r\n return JSON.parse(readFileSync(accountsPath, \"utf-8\")) as IGoogleAccounts;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction getCredsMtime(): number {\r\n const credsPath = getOAuthCredsPath();\r\n try {\r\n return statSync(credsPath).mtimeMs;\r\n } catch {\r\n return 0;\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 { email?: string };\r\n return decoded.email;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\n// ── Open a new terminal window cross-platform ───────────────────────────\r\n\r\nasync function openTerminalWithGemini(): Promise<void> {\r\n const platform = process.platform;\r\n\r\n if (platform === \"win32\") {\r\n // Windows: open a new PowerShell window running gemini\r\n await execa(\"cmd\", [\"/c\", \"start\", \"powershell\", \"-NoExit\", \"-Command\", \"gemini\"], {\r\n stdin: \"ignore\",\r\n stdout: \"ignore\",\r\n stderr: \"ignore\",\r\n });\r\n } else if (platform === \"darwin\") {\r\n // macOS: open a new Terminal.app window running gemini\r\n await execa(\"osascript\", [\r\n \"-e\",\r\n 'tell application \"Terminal\" to do script \"gemini\"',\r\n \"-e\",\r\n 'tell application \"Terminal\" to activate',\r\n ], {\r\n stdin: \"ignore\",\r\n stdout: \"ignore\",\r\n stderr: \"ignore\",\r\n });\r\n } else {\r\n // Linux: try common terminal emulators\r\n const terminals = [\r\n { cmd: \"gnome-terminal\", args: [\"--\", \"gemini\"] },\r\n { cmd: \"konsole\", args: [\"-e\", \"gemini\"] },\r\n { cmd: \"xfce4-terminal\", args: [\"-e\", \"gemini\"] },\r\n { cmd: \"xterm\", args: [\"-e\", \"gemini\"] },\r\n ];\r\n\r\n for (const terminal of terminals) {\r\n try {\r\n await execa(terminal.cmd, terminal.args, {\r\n stdin: \"ignore\",\r\n stdout: \"ignore\",\r\n stderr: \"ignore\",\r\n detached: true,\r\n });\r\n return;\r\n } catch {\r\n // Try next terminal\r\n }\r\n }\r\n\r\n throw new Error(\"Could not find a terminal emulator. Please run `gemini` manually in a separate terminal.\");\r\n }\r\n}\r\n\r\n// ── GeminiLogin Class ───────────────────────────────────────────────────\r\n\r\nexport class GeminiLogin {\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 * Attempt to import credentials from the Gemini CLI cache.\r\n * If not found, opens a new terminal window running `gemini` for interactive\r\n * login, then polls for credentials to appear in ~/.gemini/oauth_creds.json.\r\n */\r\n async login(): Promise<ICredential> {\r\n // Try importing existing credentials from Gemini CLI's cache\r\n const existing = this.readCachedCredential();\r\n if (existing) {\r\n const isExpired = existing.expiresAt ? new Date() > existing.expiresAt : false;\r\n if (!isExpired) {\r\n logger.info(\"Found existing Gemini CLI credentials in ~/.gemini/oauth_creds.json\");\r\n await this.credentialStore.set(\"google\", existing);\r\n return existing;\r\n }\r\n }\r\n\r\n // Check if the CLI is installed\r\n const cliAvailable = await this.isCliAvailable();\r\n\r\n if (!cliAvailable) {\r\n throw new AuthenticationError(\r\n \"google\",\r\n \"Gemini CLI not found. Install it first:\\n\" +\r\n \" npm install -g @google/gemini-cli\\n\" +\r\n \"Then retry /login.\",\r\n );\r\n }\r\n\r\n // Record the current mtime so we can detect new credentials\r\n const beforeMtime = getCredsMtime();\r\n\r\n // Open a new terminal window running gemini for interactive login\r\n logger.info(\"Opening new terminal window for Gemini login\");\r\n try {\r\n await openTerminalWithGemini();\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n throw new AuthenticationError(\"google\", msg);\r\n }\r\n\r\n // Poll for credentials to appear (user authenticates in the other window)\r\n const credential = await this.pollForCredentials(beforeMtime);\r\n if (!credential) {\r\n throw new AuthenticationError(\r\n \"google\",\r\n \"Login timed out. Please complete authentication in the Gemini terminal, then retry /login.\",\r\n );\r\n }\r\n\r\n await this.credentialStore.set(\"google\", credential);\r\n logger.info(\"Gemini credentials imported successfully\");\r\n return credential;\r\n }\r\n\r\n async logout(): Promise<void> {\r\n await this.credentialStore.delete(\"google\");\r\n logger.info(\"Google session revoked from AemeathCLI\");\r\n }\r\n\r\n async isLoggedIn(): Promise<boolean> {\r\n const credential = this.readCachedCredential();\r\n if (!credential) return false;\r\n if (credential.expiresAt && new Date() > credential.expiresAt && credential.refreshToken === undefined) {\r\n return false;\r\n }\r\n\r\n await this.credentialStore.set(\"google\", 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(\"google\");\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 plan: \"Google AI\",\r\n };\r\n }\r\n\r\n async getCachedCredential(): Promise<ICredential | undefined> {\r\n const credential = this.readCachedCredential();\r\n if (credential) {\r\n await this.credentialStore.set(\"google\", credential);\r\n }\r\n return credential;\r\n }\r\n\r\n // ── Internal ──────────────────────────────────────────────────────────\r\n\r\n private readCachedCredential(): ICredential | undefined {\r\n const oauthCreds = readOAuthCreds();\r\n if (!oauthCreds?.access_token) return undefined;\r\n\r\n let email: string | undefined;\r\n const accounts = readGoogleAccounts();\r\n if (accounts?.active) {\r\n email = accounts.active;\r\n } else if (oauthCreds.id_token) {\r\n email = extractEmailFromIdToken(oauthCreds.id_token);\r\n }\r\n\r\n const expiresAt = oauthCreds.expiry_date ? new Date(oauthCreds.expiry_date) : undefined;\r\n\r\n return {\r\n provider: \"google\",\r\n method: \"native_login\",\r\n token: oauthCreds.access_token,\r\n ...(oauthCreds.refresh_token !== undefined ? { refreshToken: oauthCreds.refresh_token } : {}),\r\n ...(expiresAt !== undefined ? { expiresAt } : {}),\r\n ...(email !== undefined ? { email } : {}),\r\n plan: \"Google AI\",\r\n };\r\n }\r\n\r\n /**\r\n * Poll for new credentials to appear in ~/.gemini/oauth_creds.json.\r\n * Detects new credentials by checking if the file mtime changed from beforeMtime.\r\n */\r\n private async pollForCredentials(beforeMtime: number): Promise<ICredential | undefined> {\r\n const deadline = Date.now() + LOGIN_POLL_TIMEOUT_MS;\r\n\r\n while (Date.now() < deadline) {\r\n await sleep(LOGIN_POLL_INTERVAL_MS);\r\n\r\n const currentMtime = getCredsMtime();\r\n if (currentMtime > beforeMtime) {\r\n const credential = this.readCachedCredential();\r\n if (credential) return credential;\r\n }\r\n }\r\n\r\n // One final check\r\n return this.readCachedCredential() ?? undefined;\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"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ interface IChatMessage {
|
|
|
51
51
|
readonly model?: string | undefined;
|
|
52
52
|
readonly provider?: ProviderName | undefined;
|
|
53
53
|
readonly toolCalls?: readonly IToolCall[] | undefined;
|
|
54
|
+
readonly toolCallId?: string | undefined;
|
|
54
55
|
readonly tokenUsage?: ITokenUsage | undefined;
|
|
55
56
|
readonly createdAt: Date;
|
|
56
57
|
}
|
|
@@ -94,7 +95,7 @@ interface IToolParameter {
|
|
|
94
95
|
readonly type: string;
|
|
95
96
|
readonly description: string;
|
|
96
97
|
readonly required: boolean;
|
|
97
|
-
readonly default?: unknown
|
|
98
|
+
readonly default?: unknown;
|
|
98
99
|
readonly enum?: readonly string[] | undefined;
|
|
99
100
|
}
|
|
100
101
|
interface IToolDefinition {
|
|
@@ -123,8 +124,8 @@ type ToolCategory = "file" | "search" | "shell" | "web" | "git" | "mcp";
|
|
|
123
124
|
interface IToolRegistration {
|
|
124
125
|
readonly definition: IToolDefinition;
|
|
125
126
|
readonly category: ToolCategory;
|
|
126
|
-
readonly requiresApproval: (
|
|
127
|
-
readonly execute: (args: Record<string, unknown
|
|
127
|
+
readonly requiresApproval: (context: IToolExecutionContext, args: Record<string, unknown>) => boolean;
|
|
128
|
+
readonly execute: (args: Record<string, unknown>, context: IToolExecutionContext) => Promise<IToolResult>;
|
|
128
129
|
}
|
|
129
130
|
interface IToolExecutionContext {
|
|
130
131
|
readonly workingDirectory: string;
|
|
@@ -189,7 +190,7 @@ interface IIPCMessage {
|
|
|
189
190
|
readonly params: Record<string, unknown>;
|
|
190
191
|
readonly id?: number | undefined;
|
|
191
192
|
}
|
|
192
|
-
type PaneLayout = "auto" | "horizontal" | "vertical" | "grid";
|
|
193
|
+
type PaneLayout = "auto" | "horizontal" | "vertical" | "grid" | "hub-spoke";
|
|
193
194
|
interface IPaneConfig {
|
|
194
195
|
readonly paneId: string;
|
|
195
196
|
readonly agentName: string;
|
|
@@ -203,6 +204,12 @@ interface ILayoutConfig {
|
|
|
203
204
|
readonly maxPanes: number;
|
|
204
205
|
}
|
|
205
206
|
|
|
207
|
+
/**
|
|
208
|
+
* Orchestrator constants — shared across all orchestrator modules.
|
|
209
|
+
*/
|
|
210
|
+
|
|
211
|
+
type CliProviderType = "claude-code" | "codex" | "gemini-cli" | "kimi-cli" | "ollama";
|
|
212
|
+
|
|
206
213
|
/**
|
|
207
214
|
* Configuration types per PRD section 17.3
|
|
208
215
|
*/
|
|
@@ -223,6 +230,12 @@ interface ISplitPanelConfig {
|
|
|
223
230
|
readonly defaultLayout: PaneLayout;
|
|
224
231
|
readonly maxPanes: number;
|
|
225
232
|
}
|
|
233
|
+
interface ISwarmConfig {
|
|
234
|
+
readonly onboardingComplete: boolean;
|
|
235
|
+
readonly detectedProviders: readonly CliProviderType[];
|
|
236
|
+
readonly primaryMasterProvider?: CliProviderType | undefined;
|
|
237
|
+
readonly fallbackMasterProviders: readonly CliProviderType[];
|
|
238
|
+
}
|
|
226
239
|
interface ICostConfig {
|
|
227
240
|
readonly budgetWarning: number;
|
|
228
241
|
readonly budgetHardStop: number;
|
|
@@ -252,6 +265,7 @@ interface IGlobalConfig {
|
|
|
252
265
|
readonly providers: Partial<Record<ProviderName, IProviderConfig>>;
|
|
253
266
|
readonly permissions: IPermissionConfig;
|
|
254
267
|
readonly splitPanel: ISplitPanelConfig;
|
|
268
|
+
readonly swarm: ISwarmConfig;
|
|
255
269
|
readonly cost: ICostConfig;
|
|
256
270
|
readonly telemetry: ITelemetryConfig;
|
|
257
271
|
readonly oauth?: IOAuthConfig | undefined;
|
|
@@ -801,6 +815,7 @@ declare class TaskOrchestrator {
|
|
|
801
815
|
interface IModelProvider {
|
|
802
816
|
readonly name: string;
|
|
803
817
|
readonly supportedModels: readonly string[];
|
|
818
|
+
readonly supportsToolCalling: boolean;
|
|
804
819
|
/** Send a non-streaming chat request. */
|
|
805
820
|
chat(request: IChatRequest): Promise<IChatResponse>;
|
|
806
821
|
/** Send a streaming chat request returning an async iterable of chunks. */
|
|
@@ -885,6 +900,7 @@ declare class ProviderRegistry {
|
|
|
885
900
|
declare class ClaudeAdapter implements IModelProvider {
|
|
886
901
|
readonly name: ProviderName;
|
|
887
902
|
readonly supportedModels: readonly string[];
|
|
903
|
+
readonly supportsToolCalling = true;
|
|
888
904
|
private readonly anthropic;
|
|
889
905
|
constructor(options?: IProviderOptions);
|
|
890
906
|
chat(request: IChatRequest): Promise<IChatResponse>;
|
|
@@ -901,6 +917,7 @@ declare class ClaudeAdapter implements IModelProvider {
|
|
|
901
917
|
declare class OpenAIAdapter implements IModelProvider {
|
|
902
918
|
readonly name: ProviderName;
|
|
903
919
|
readonly supportedModels: readonly string[];
|
|
920
|
+
readonly supportsToolCalling = true;
|
|
904
921
|
private readonly openai;
|
|
905
922
|
private readonly apiKey;
|
|
906
923
|
private readonly baseUrl;
|
|
@@ -920,6 +937,7 @@ declare class OpenAIAdapter implements IModelProvider {
|
|
|
920
937
|
declare class GeminiAdapter implements IModelProvider {
|
|
921
938
|
readonly name: ProviderName;
|
|
922
939
|
readonly supportedModels: readonly string[];
|
|
940
|
+
readonly supportsToolCalling = true;
|
|
923
941
|
private readonly google;
|
|
924
942
|
constructor(options?: IProviderOptions);
|
|
925
943
|
chat(request: IChatRequest): Promise<IChatResponse>;
|
|
@@ -937,6 +955,7 @@ declare class GeminiAdapter implements IModelProvider {
|
|
|
937
955
|
declare class KimiAdapter implements IModelProvider {
|
|
938
956
|
readonly name: ProviderName;
|
|
939
957
|
readonly supportedModels: readonly string[];
|
|
958
|
+
readonly supportsToolCalling = true;
|
|
940
959
|
private readonly baseUrl;
|
|
941
960
|
private readonly apiKey;
|
|
942
961
|
constructor(options?: IProviderOptions);
|
|
@@ -956,6 +975,7 @@ declare class KimiAdapter implements IModelProvider {
|
|
|
956
975
|
|
|
957
976
|
declare class OllamaAdapter implements IModelProvider {
|
|
958
977
|
readonly name: ProviderName;
|
|
978
|
+
readonly supportsToolCalling = true;
|
|
959
979
|
private readonly baseUrl;
|
|
960
980
|
private cachedModels;
|
|
961
981
|
constructor(options?: IProviderOptions);
|
|
@@ -987,7 +1007,8 @@ interface ICLIResult {
|
|
|
987
1007
|
declare abstract class BaseNativeCLIAdapter implements IModelProvider {
|
|
988
1008
|
abstract readonly name: ProviderName;
|
|
989
1009
|
abstract readonly supportedModels: readonly string[];
|
|
990
|
-
|
|
1010
|
+
readonly supportsToolCalling = false;
|
|
1011
|
+
protected abstract runCLI(model: string, prompt: string, systemPrompt?: string): Promise<ICLIResult>;
|
|
991
1012
|
chat(request: IChatRequest): Promise<IChatResponse>;
|
|
992
1013
|
stream(request: IChatRequest): AsyncIterable<IStreamChunk>;
|
|
993
1014
|
countTokens(text: string, _model: string): Promise<number>;
|
|
@@ -997,22 +1018,24 @@ declare abstract class BaseNativeCLIAdapter implements IModelProvider {
|
|
|
997
1018
|
declare class ClaudeNativeCLIAdapter extends BaseNativeCLIAdapter {
|
|
998
1019
|
readonly name: ProviderName;
|
|
999
1020
|
readonly supportedModels: readonly ["claude-opus-4-6", "claude-opus-4-6-1m", "claude-sonnet-4-6", "claude-sonnet-4-6-1m", "claude-haiku-4-5"];
|
|
1000
|
-
|
|
1021
|
+
/** Map internal model IDs to valid Claude CLI model IDs. */
|
|
1022
|
+
private toCLIModelId;
|
|
1023
|
+
protected runCLI(model: string, prompt: string, systemPrompt?: string): Promise<ICLIResult>;
|
|
1001
1024
|
}
|
|
1002
1025
|
declare class CodexNativeCLIAdapter extends BaseNativeCLIAdapter {
|
|
1003
1026
|
readonly name: ProviderName;
|
|
1004
1027
|
readonly supportedModels: readonly ["gpt-5.3-codex", "gpt-5.3-codex-spark", "gpt-5.2-codex", "gpt-5.1-codex-max", "gpt-5.2", "gpt-5.1-codex-mini"];
|
|
1005
|
-
protected runCLI(model: string, prompt: string): Promise<ICLIResult>;
|
|
1028
|
+
protected runCLI(model: string, prompt: string, systemPrompt?: string): Promise<ICLIResult>;
|
|
1006
1029
|
}
|
|
1007
1030
|
declare class GeminiNativeCLIAdapter extends BaseNativeCLIAdapter {
|
|
1008
1031
|
readonly name: ProviderName;
|
|
1009
1032
|
readonly supportedModels: readonly ["gemini-3-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.5-flash-lite"];
|
|
1010
|
-
protected runCLI(model: string, prompt: string): Promise<ICLIResult>;
|
|
1033
|
+
protected runCLI(model: string, prompt: string, systemPrompt?: string): Promise<ICLIResult>;
|
|
1011
1034
|
}
|
|
1012
1035
|
declare class KimiNativeCLIAdapter extends BaseNativeCLIAdapter {
|
|
1013
1036
|
readonly name: ProviderName;
|
|
1014
1037
|
readonly supportedModels: readonly ["kimi-for-coding"];
|
|
1015
|
-
protected runCLI(_model: string, prompt: string): Promise<ICLIResult>;
|
|
1038
|
+
protected runCLI(_model: string, prompt: string, systemPrompt?: string): Promise<ICLIResult>;
|
|
1016
1039
|
}
|
|
1017
1040
|
|
|
1018
1041
|
/**
|
|
@@ -1036,7 +1059,7 @@ declare class ToolRegistry implements IToolRegistry {
|
|
|
1036
1059
|
* Per PRD section 5.1
|
|
1037
1060
|
*/
|
|
1038
1061
|
|
|
1039
|
-
declare function createDefaultRegistry(
|
|
1062
|
+
declare function createDefaultRegistry(_context: IToolExecutionContext): ToolRegistry;
|
|
1040
1063
|
|
|
1041
1064
|
/**
|
|
1042
1065
|
* Credential storage per PRD section 13.6
|
|
@@ -1134,8 +1157,8 @@ declare class SqliteStore {
|
|
|
1134
1157
|
private runMigrations;
|
|
1135
1158
|
prepare(sql: string): Database.Statement;
|
|
1136
1159
|
run(sql: string, ...params: readonly unknown[]): Database.RunResult;
|
|
1137
|
-
get
|
|
1138
|
-
all
|
|
1160
|
+
get(sql: string, ...params: unknown[]): unknown;
|
|
1161
|
+
all(sql: string, ...params: unknown[]): unknown[];
|
|
1139
1162
|
transaction<T>(fn: () => T): T;
|
|
1140
1163
|
close(): void;
|
|
1141
1164
|
private registerCleanupHandlers;
|
|
@@ -1436,11 +1459,12 @@ interface ITeamCreateOptions {
|
|
|
1436
1459
|
readonly agents: readonly IAgentDefinition[];
|
|
1437
1460
|
readonly sessionId?: string;
|
|
1438
1461
|
readonly cliEntryPoint?: string;
|
|
1462
|
+
readonly agentEnv?: Readonly<Record<string, string>>;
|
|
1439
1463
|
}
|
|
1440
1464
|
declare class TeamManager {
|
|
1441
1465
|
private readonly activeTeams;
|
|
1442
1466
|
/** Create a new team: config, directories, and agent process handles. */
|
|
1443
|
-
createTeam(name: string, options: ITeamCreateOptions):
|
|
1467
|
+
createTeam(name: string, options: ITeamCreateOptions): ITeamConfig;
|
|
1444
1468
|
/** Start all agent processes for a team. */
|
|
1445
1469
|
startAgents(teamName: string): Promise<void>;
|
|
1446
1470
|
/** Gracefully shutdown and remove a team. */
|
|
@@ -1506,6 +1530,7 @@ declare class AgentProcess {
|
|
|
1506
1530
|
constructor(config: IAgentConfig, options: IAgentProcessOptions);
|
|
1507
1531
|
/** Spawn the child process. Throws AgentSpawnError on failure. */
|
|
1508
1532
|
start(): Promise<void>;
|
|
1533
|
+
private buildChildEnv;
|
|
1509
1534
|
/** Gracefully stop the agent. Falls back to SIGTERM after timeout. */
|
|
1510
1535
|
stop(): Promise<void>;
|
|
1511
1536
|
/** Kill and restart the agent process. */
|
|
@@ -1593,6 +1618,7 @@ declare class LayoutEngine {
|
|
|
1593
1618
|
* Compute per-pane geometries based on layout type.
|
|
1594
1619
|
*/
|
|
1595
1620
|
private computeGeometries;
|
|
1621
|
+
private computeHubSpokeLayout;
|
|
1596
1622
|
/**
|
|
1597
1623
|
* Horizontal split: all panes side by side.
|
|
1598
1624
|
*/
|
|
@@ -1696,10 +1722,11 @@ declare class TmuxManager {
|
|
|
1696
1722
|
getPanes(): ReadonlyMap<string, ITmuxPaneInfo>;
|
|
1697
1723
|
private splitPane;
|
|
1698
1724
|
private getFirstPaneId;
|
|
1699
|
-
private
|
|
1725
|
+
private applyLayoutPreset;
|
|
1700
1726
|
private killSessionSilent;
|
|
1701
1727
|
private assertNotDisposed;
|
|
1702
1728
|
private assertSession;
|
|
1729
|
+
private requireSessionName;
|
|
1703
1730
|
}
|
|
1704
1731
|
|
|
1705
1732
|
/**
|
|
@@ -1764,7 +1791,7 @@ declare class ITerm2Manager {
|
|
|
1764
1791
|
* JSON-RPC 2.0 protocol with HMAC authentication per PRD section 9.4 & 14.5.
|
|
1765
1792
|
*/
|
|
1766
1793
|
|
|
1767
|
-
type MethodHandler = (clientId: string, params: Record<string, unknown>, id: number | undefined, socket: Socket) =>
|
|
1794
|
+
type MethodHandler = (clientId: string, params: Record<string, unknown>, id: number | undefined, socket: Socket) => unknown;
|
|
1768
1795
|
declare class IPCHub {
|
|
1769
1796
|
private readonly sessionId;
|
|
1770
1797
|
private readonly hmacSecret;
|
|
@@ -1787,7 +1814,7 @@ declare class IPCHub {
|
|
|
1787
1814
|
/** Register a custom method handler. */
|
|
1788
1815
|
onMethod(method: string, handler: MethodHandler): void;
|
|
1789
1816
|
/** Compute HMAC-SHA256 for a message. */
|
|
1790
|
-
computeHmac(message:
|
|
1817
|
+
computeHmac(message: unknown): string;
|
|
1791
1818
|
/** Register a connected socket as a client (also called by agent.register). */
|
|
1792
1819
|
registerClientSocket(agentId: string, agentName: string, socket: Socket): void;
|
|
1793
1820
|
/** Gracefully shut down the hub and all connections. */
|
|
@@ -1797,6 +1824,8 @@ declare class IPCHub {
|
|
|
1797
1824
|
private registerDefaultHandlers;
|
|
1798
1825
|
private verifyHmac;
|
|
1799
1826
|
private isAuthEnvelope;
|
|
1827
|
+
private isIPCMessage;
|
|
1828
|
+
private getRequestId;
|
|
1800
1829
|
private write;
|
|
1801
1830
|
private sendResult;
|
|
1802
1831
|
private sendError;
|
|
@@ -1820,6 +1849,7 @@ interface IPaneProcessOptions {
|
|
|
1820
1849
|
}
|
|
1821
1850
|
type MessageHandler = (message: IIPCMessage) => void;
|
|
1822
1851
|
declare class PaneProcess {
|
|
1852
|
+
private static readonly resolvedPromise;
|
|
1823
1853
|
private readonly agentId;
|
|
1824
1854
|
private readonly agentName;
|
|
1825
1855
|
private readonly socketPath;
|
|
@@ -1903,7 +1933,7 @@ declare class SkillLoader {
|
|
|
1903
1933
|
* Progressive loading: only name + description loaded initially (~100 tokens each).
|
|
1904
1934
|
*/
|
|
1905
1935
|
|
|
1906
|
-
type SkillSource = "project" | "user" | "built-in";
|
|
1936
|
+
type SkillSource = "project" | "user" | "universal" | "built-in";
|
|
1907
1937
|
interface ISkillSummary {
|
|
1908
1938
|
readonly name: string;
|
|
1909
1939
|
readonly description: string;
|