@cereworker/cli 26.327.1 → 26.327.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth-utils.d.ts +1 -1
- package/dist/auth-utils.d.ts.map +1 -1
- package/dist/auth-utils.js +4 -4
- package/dist/auth-utils.js.map +1 -1
- package/dist/auth-utils.test.js +7 -5
- package/dist/auth-utils.test.js.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +17 -8
- package/dist/auth.js.map +1 -1
- package/dist/cerebrum-models.d.ts +2 -0
- package/dist/cerebrum-models.d.ts.map +1 -0
- package/dist/cerebrum-models.js +2 -0
- package/dist/cerebrum-models.js.map +1 -0
- package/dist/cerebrum-models.test.d.ts +2 -0
- package/dist/cerebrum-models.test.d.ts.map +1 -0
- package/dist/cerebrum-models.test.js +18 -0
- package/dist/cerebrum-models.test.js.map +1 -0
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +3 -41
- package/dist/configure.js.map +1 -1
- package/dist/onboard/config-builder.d.ts +1 -0
- package/dist/onboard/config-builder.d.ts.map +1 -1
- package/dist/onboard/config-builder.js +47 -16
- package/dist/onboard/config-builder.js.map +1 -1
- package/dist/onboard/config-builder.test.d.ts +2 -0
- package/dist/onboard/config-builder.test.d.ts.map +1 -0
- package/dist/onboard/config-builder.test.js +67 -0
- package/dist/onboard/config-builder.test.js.map +1 -0
- package/dist/onboard/existing-config.d.ts +14 -0
- package/dist/onboard/existing-config.d.ts.map +1 -0
- package/dist/onboard/existing-config.js +159 -0
- package/dist/onboard/existing-config.js.map +1 -0
- package/dist/onboard/existing-config.test.d.ts +2 -0
- package/dist/onboard/existing-config.test.d.ts.map +1 -0
- package/dist/onboard/existing-config.test.js +93 -0
- package/dist/onboard/existing-config.test.js.map +1 -0
- package/dist/onboard/steps/cerebrum.d.ts +5 -1
- package/dist/onboard/steps/cerebrum.d.ts.map +1 -1
- package/dist/onboard/steps/cerebrum.js +71 -59
- package/dist/onboard/steps/cerebrum.js.map +1 -1
- package/dist/onboard/steps/cerebrum.test.d.ts +2 -0
- package/dist/onboard/steps/cerebrum.test.d.ts.map +1 -0
- package/dist/onboard/steps/cerebrum.test.js +31 -0
- package/dist/onboard/steps/cerebrum.test.js.map +1 -0
- package/dist/onboard/steps/summary.d.ts.map +1 -1
- package/dist/onboard/steps/summary.js +2 -2
- package/dist/onboard/steps/summary.js.map +1 -1
- package/dist/onboard/steps/welcome.d.ts +2 -0
- package/dist/onboard/steps/welcome.d.ts.map +1 -1
- package/dist/onboard/steps/welcome.js +19 -12
- package/dist/onboard/steps/welcome.js.map +1 -1
- package/dist/onboard/wizard.d.ts.map +1 -1
- package/dist/onboard/wizard.js +47 -17
- package/dist/onboard/wizard.js.map +1 -1
- package/package.json +10 -10
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { getProviderAuthModes, } from '@cereworker/config';
|
|
2
|
+
const CHANNEL_IDS = ['slack', 'discord', 'telegram', 'matrix', 'feishu', 'wechat'];
|
|
3
|
+
const LEGACY_OPENAI_PROVIDER = 'openai';
|
|
4
|
+
const OPENAI_CODEX_PROVIDER = 'openai-codex';
|
|
5
|
+
function asRecord(value) {
|
|
6
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
7
|
+
? value
|
|
8
|
+
: null;
|
|
9
|
+
}
|
|
10
|
+
function asStringArray(value) {
|
|
11
|
+
return Array.isArray(value) ? value.filter((item) => typeof item === 'string') : undefined;
|
|
12
|
+
}
|
|
13
|
+
function parseStoredValue(value) {
|
|
14
|
+
if (typeof value !== 'string')
|
|
15
|
+
return undefined;
|
|
16
|
+
const envRef = value.match(/^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$/)?.[1];
|
|
17
|
+
return envRef ? { envRef } : value;
|
|
18
|
+
}
|
|
19
|
+
function parseStoredSecret(value) {
|
|
20
|
+
const parsed = parseStoredValue(value);
|
|
21
|
+
if (parsed === undefined)
|
|
22
|
+
return undefined;
|
|
23
|
+
return typeof parsed === 'string' ? { plaintext: parsed } : parsed;
|
|
24
|
+
}
|
|
25
|
+
function getRawCerebrumProviderConfig(existingRaw, provider) {
|
|
26
|
+
const cerebrum = asRecord(existingRaw.cerebrum);
|
|
27
|
+
const providers = asRecord(cerebrum?.providers);
|
|
28
|
+
const direct = asRecord(providers?.[provider]);
|
|
29
|
+
if (direct)
|
|
30
|
+
return direct;
|
|
31
|
+
if (provider === OPENAI_CODEX_PROVIDER) {
|
|
32
|
+
const legacy = asRecord(providers?.[LEGACY_OPENAI_PROVIDER]);
|
|
33
|
+
if (legacy?.auth === 'oauth') {
|
|
34
|
+
return legacy;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
export function getCurrentCerebrumConfig(existingConfig, existingRaw) {
|
|
40
|
+
const provider = existingConfig.cerebrum.defaultProvider;
|
|
41
|
+
const rawProviderConfig = getRawCerebrumProviderConfig(existingRaw, provider);
|
|
42
|
+
const providerConfig = asRecord(existingConfig.cerebrum.providers[provider]);
|
|
43
|
+
if (provider === 'local') {
|
|
44
|
+
const rawLocal = asRecord(asRecord(asRecord(existingRaw.cerebrum)?.providers)?.local);
|
|
45
|
+
return {
|
|
46
|
+
provider,
|
|
47
|
+
model: existingConfig.cerebrum.providers.local?.model ?? existingConfig.cerebrum.defaultModel,
|
|
48
|
+
baseUrl: rawLocal?.baseUrl ?? existingConfig.cerebrum.providers.local?.baseUrl,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const supportedAuthModes = getProviderAuthModes(provider);
|
|
52
|
+
const resolvedAuth = rawProviderConfig?.auth === 'oauth' || providerConfig?.auth === 'oauth'
|
|
53
|
+
? 'oauth'
|
|
54
|
+
: supportedAuthModes.length === 1 && supportedAuthModes[0] === 'oauth'
|
|
55
|
+
? 'oauth'
|
|
56
|
+
: 'apikey';
|
|
57
|
+
return {
|
|
58
|
+
provider,
|
|
59
|
+
model: existingConfig.cerebrum.defaultModel,
|
|
60
|
+
auth: resolvedAuth,
|
|
61
|
+
baseUrl: rawProviderConfig?.baseUrl ?? providerConfig?.baseUrl,
|
|
62
|
+
apiKey: parseStoredSecret(rawProviderConfig?.apiKey),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function summarizeCerebrumConfig(config) {
|
|
66
|
+
return `${config.provider} / ${config.model}`;
|
|
67
|
+
}
|
|
68
|
+
export function getCurrentCerebellumConfig(existingConfig, existingRaw) {
|
|
69
|
+
const rawCerebellum = asRecord(existingRaw.cerebellum);
|
|
70
|
+
const rawDocker = asRecord(rawCerebellum?.docker);
|
|
71
|
+
if (!existingConfig.cerebellum.enabled) {
|
|
72
|
+
return { enabled: false };
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
enabled: true,
|
|
76
|
+
model: rawCerebellum?.model
|
|
77
|
+
? existingConfig.cerebellum.model
|
|
78
|
+
: existingConfig.cerebellum.model,
|
|
79
|
+
finetune: existingConfig.cerebellum.finetune,
|
|
80
|
+
dockerAutoStart: typeof rawDocker?.autoStart === 'boolean'
|
|
81
|
+
? rawDocker.autoStart
|
|
82
|
+
: existingConfig.cerebellum.docker.autoStart,
|
|
83
|
+
dockerImage: rawDocker?.image ?? existingConfig.cerebellum.docker.image,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export function summarizeCerebellumConfig(config) {
|
|
87
|
+
if (!config.enabled) {
|
|
88
|
+
return 'disabled';
|
|
89
|
+
}
|
|
90
|
+
const modelName = config.model?.id ?? config.model?.path ?? 'default';
|
|
91
|
+
return `enabled (${modelName})`;
|
|
92
|
+
}
|
|
93
|
+
export function getCurrentChannelsConfig(existingConfig, existingRaw) {
|
|
94
|
+
const rawChannels = asRecord(existingRaw.channels);
|
|
95
|
+
const channels = [];
|
|
96
|
+
for (const channelId of CHANNEL_IDS) {
|
|
97
|
+
const rawChannel = asRecord(rawChannels?.[channelId]);
|
|
98
|
+
if (!rawChannel?.enabled) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const credentials = {};
|
|
102
|
+
for (const [key, value] of Object.entries(rawChannel)) {
|
|
103
|
+
if (key === 'enabled' || key === 'allowFrom')
|
|
104
|
+
continue;
|
|
105
|
+
const parsed = parseStoredValue(value);
|
|
106
|
+
if (parsed !== undefined) {
|
|
107
|
+
credentials[key] = parsed;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const allowFrom = asStringArray(rawChannel.allowFrom)
|
|
111
|
+
?? existingConfig.channels[channelId].allowFrom;
|
|
112
|
+
channels.push({
|
|
113
|
+
id: channelId,
|
|
114
|
+
credentials,
|
|
115
|
+
...(allowFrom && allowFrom.length > 0 ? { allowFrom } : {}),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
channels,
|
|
120
|
+
dmPolicy: existingConfig.channels.dmPolicy,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export function summarizeChannelsConfig(config) {
|
|
124
|
+
if (config.channels.length === 0) {
|
|
125
|
+
return 'none';
|
|
126
|
+
}
|
|
127
|
+
return `${config.channels.map((channel) => channel.id).join(', ')} (DM policy: ${config.dmPolicy})`;
|
|
128
|
+
}
|
|
129
|
+
export function getCurrentGatewayConfig(existingConfig, existingRaw) {
|
|
130
|
+
const rawGateway = asRecord(existingRaw.gateway);
|
|
131
|
+
const mode = existingConfig.gateway.mode;
|
|
132
|
+
if (mode === 'standalone') {
|
|
133
|
+
return { mode };
|
|
134
|
+
}
|
|
135
|
+
if (mode === 'gateway') {
|
|
136
|
+
return {
|
|
137
|
+
mode,
|
|
138
|
+
port: typeof rawGateway?.port === 'number' ? rawGateway.port : existingConfig.gateway.port,
|
|
139
|
+
token: parseStoredValue(rawGateway?.token),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
mode,
|
|
144
|
+
gatewayUrl: rawGateway?.gatewayUrl ?? existingConfig.gateway.gatewayUrl,
|
|
145
|
+
nodeId: rawGateway?.nodeId ?? existingConfig.gateway.nodeId,
|
|
146
|
+
token: parseStoredValue(rawGateway?.token),
|
|
147
|
+
capabilities: asStringArray(rawGateway?.capabilities) ?? existingConfig.gateway.capabilities,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
export function summarizeGatewayConfig(config) {
|
|
151
|
+
if (config.mode === 'standalone') {
|
|
152
|
+
return 'standalone';
|
|
153
|
+
}
|
|
154
|
+
if (config.mode === 'gateway') {
|
|
155
|
+
return `hub on port ${config.port ?? 18800}`;
|
|
156
|
+
}
|
|
157
|
+
return `node -> ${config.gatewayUrl ?? 'unknown gateway'} (${config.nodeId ?? 'unnamed'})`;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=existing-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"existing-config.js","sourceRoot":"","sources":["../../src/onboard/existing-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAM5B,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAC5F,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AACxC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAE7C,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAC,KAAgC;QAClC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7G,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACrC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACrE,CAAC;AAED,SAAS,4BAA4B,CACnC,WAAoC,EACpC,QAAgB;IAEhB,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,IAAI,QAAQ,KAAK,qBAAqB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC7D,IAAI,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,cAAgC,EAChC,WAAoC;IAEpC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC;IACzD,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC9E,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,QAA0D,CAAC,CAAC,CAAC;IAE/H,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;QACtF,OAAO;YACL,QAAQ;YACR,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,IAAI,cAAc,CAAC,QAAQ,CAAC,YAAY;YAC7F,OAAO,EAAG,QAAQ,EAAE,OAA8B,IAAI,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO;SACvG,CAAC;IACJ,CAAC;IAED,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,iBAAiB,EAAE,IAAI,KAAK,OAAO,IAAI,cAAc,EAAE,IAAI,KAAK,OAAO;QAC1F,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,KAAK,OAAO;YACpE,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,QAAQ,CAAC;IAEf,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,YAAY;QAC3C,IAAI,EAAE,YAAY;QAClB,OAAO,EAAG,iBAAiB,EAAE,OAA8B,IAAK,cAAc,EAAE,OAA8B;QAC9G,MAAM,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAsB;IAC5D,OAAO,GAAG,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,cAAgC,EAChC,WAAoC;IAEpC,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAElD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,aAAa,EAAE,KAAK;YACzB,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK;YACjC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK;QACnC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,QAAQ;QAC5C,eAAe,EAAE,OAAO,SAAS,EAAE,SAAS,KAAK,SAAS;YACxD,CAAC,CAAC,SAAS,CAAC,SAAS;YACrB,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS;QAC9C,WAAW,EAAG,SAAS,EAAE,KAA4B,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK;KAChG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAwB;IAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC;IACtE,OAAO,YAAY,SAAS,GAAG,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,cAAgC,EAChC,WAAoC;IAEpC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAgD,EAAE,CAAC;QACpE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,WAAW;gBAAE,SAAS;YACvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC;eAChD,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;QAElD,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,SAAS;YACb,WAAW;YACX,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,QAAQ;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAsB;IAC5D,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,QAAQ,GAAG,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,cAAgC,EAChC,WAAoC;IAEpC,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;IAEzC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,OAAO,UAAU,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI;YAC1F,KAAK,EAAE,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI;QACJ,UAAU,EAAG,UAAU,EAAE,UAAiC,IAAI,cAAc,CAAC,OAAO,CAAC,UAAU;QAC/F,MAAM,EAAG,UAAU,EAAE,MAA6B,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM;QACnF,KAAK,EAAE,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC;QAC1C,YAAY,EAAE,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,YAAY;KAC7F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAqB;IAC1D,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,eAAe,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,WAAW,MAAM,CAAC,UAAU,IAAI,iBAAiB,KAAK,MAAM,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC;AAC7F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"existing-config.test.d.ts","sourceRoot":"","sources":["../../src/onboard/existing-config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { configSchema } from '@cereworker/config';
|
|
3
|
+
import { getCurrentCerebrumConfig, getCurrentChannelsConfig, getCurrentGatewayConfig, } from './existing-config.js';
|
|
4
|
+
describe('existing onboarding config helpers', () => {
|
|
5
|
+
it('normalizes legacy OpenAI OAuth config to openai-codex', () => {
|
|
6
|
+
const existingConfig = configSchema.parse({
|
|
7
|
+
cerebrum: {
|
|
8
|
+
defaultProvider: 'openai-codex',
|
|
9
|
+
defaultModel: 'gpt-5.4',
|
|
10
|
+
providers: {
|
|
11
|
+
'openai-codex': {
|
|
12
|
+
auth: 'oauth',
|
|
13
|
+
baseUrl: 'https://chatgpt.com/backend-api/codex',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
const current = getCurrentCerebrumConfig(existingConfig, {
|
|
19
|
+
cerebrum: {
|
|
20
|
+
defaultProvider: 'openai',
|
|
21
|
+
defaultModel: 'gpt-5.4',
|
|
22
|
+
providers: {
|
|
23
|
+
openai: {
|
|
24
|
+
auth: 'oauth',
|
|
25
|
+
baseUrl: 'https://chatgpt.com/backend-api/codex',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
expect(current).toMatchObject({
|
|
31
|
+
provider: 'openai-codex',
|
|
32
|
+
model: 'gpt-5.4',
|
|
33
|
+
auth: 'oauth',
|
|
34
|
+
baseUrl: 'https://chatgpt.com/backend-api/codex',
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
it('preserves env-var references for channels and gateway settings', () => {
|
|
38
|
+
const existingConfig = configSchema.parse({
|
|
39
|
+
channels: {
|
|
40
|
+
dmPolicy: 'open',
|
|
41
|
+
telegram: {
|
|
42
|
+
enabled: true,
|
|
43
|
+
allowFrom: ['12345'],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
gateway: {
|
|
47
|
+
mode: 'node',
|
|
48
|
+
gatewayUrl: 'ws://gateway-host:18800',
|
|
49
|
+
nodeId: 'node-west',
|
|
50
|
+
capabilities: ['shell', 'http'],
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
const existingRaw = {
|
|
54
|
+
channels: {
|
|
55
|
+
dmPolicy: 'open',
|
|
56
|
+
telegram: {
|
|
57
|
+
enabled: true,
|
|
58
|
+
token: '${TELEGRAM_BOT_TOKEN}',
|
|
59
|
+
allowFrom: ['12345'],
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
gateway: {
|
|
63
|
+
mode: 'node',
|
|
64
|
+
gatewayUrl: 'ws://gateway-host:18800',
|
|
65
|
+
nodeId: 'node-west',
|
|
66
|
+
token: '${GATEWAY_TOKEN}',
|
|
67
|
+
capabilities: ['shell', 'http'],
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
const channels = getCurrentChannelsConfig(existingConfig, existingRaw);
|
|
71
|
+
const gateway = getCurrentGatewayConfig(existingConfig, existingRaw);
|
|
72
|
+
expect(channels).toEqual({
|
|
73
|
+
dmPolicy: 'open',
|
|
74
|
+
channels: [
|
|
75
|
+
{
|
|
76
|
+
id: 'telegram',
|
|
77
|
+
credentials: {
|
|
78
|
+
token: { envRef: 'TELEGRAM_BOT_TOKEN' },
|
|
79
|
+
},
|
|
80
|
+
allowFrom: ['12345'],
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
});
|
|
84
|
+
expect(gateway).toEqual({
|
|
85
|
+
mode: 'node',
|
|
86
|
+
gatewayUrl: 'ws://gateway-host:18800',
|
|
87
|
+
nodeId: 'node-west',
|
|
88
|
+
token: { envRef: 'GATEWAY_TOKEN' },
|
|
89
|
+
capabilities: ['shell', 'http'],
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=existing-config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"existing-config.test.js","sourceRoot":"","sources":["../../src/onboard/existing-config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ProviderAuthMode } from '@cereworker/config';
|
|
1
2
|
export interface CerebrumResult {
|
|
2
3
|
provider: string;
|
|
3
4
|
model: string;
|
|
@@ -6,8 +7,11 @@ export interface CerebrumResult {
|
|
|
6
7
|
} | {
|
|
7
8
|
plaintext: string;
|
|
8
9
|
};
|
|
9
|
-
|
|
10
|
+
baseUrl?: string;
|
|
10
11
|
auth?: 'apikey' | 'oauth';
|
|
11
12
|
}
|
|
13
|
+
export type CerebrumAuthMode = ProviderAuthMode;
|
|
14
|
+
export declare function getSupportedAuthModes(provider: string): CerebrumAuthMode[];
|
|
15
|
+
export declare function resolveProviderSelectionFamily(family: string): string | undefined;
|
|
12
16
|
export declare function cerebrumStep(): Promise<CerebrumResult>;
|
|
13
17
|
//# sourceMappingURL=cerebrum.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cerebrum.d.ts","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cerebrum.d.ts","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.ts"],"names":[],"mappings":"AACA,OAAO,EAQL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEhD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAE1E;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMjF;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,CAoN5D"}
|
|
@@ -1,68 +1,67 @@
|
|
|
1
1
|
import { clack, guardCancel } from '../prompter.js';
|
|
2
|
-
import {
|
|
2
|
+
import { getCerebrumProvider, getCerebrumProviderFamily, getProviderAuthModes, getProviderEndpointOptions, getProviderEnvVar, getProviderModels, listCerebrumProviderFamilies, } from '@cereworker/config';
|
|
3
|
+
import { loginGoogle, loginMiniMaxPortal, loginOpenAICodex, TokenStore } from '@cereworker/cerebrum';
|
|
3
4
|
import { openBrowser } from '../../open-browser.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
{ value: 'gpt-5-mini', label: 'GPT-5 Mini', hint: 'fast, cost efficient, 400K context' },
|
|
15
|
-
{ value: 'o3', label: 'o3', hint: 'most powerful reasoning model' },
|
|
16
|
-
{ value: 'o4-mini', label: 'o4-mini', hint: 'efficient reasoning, half the cost of o3' },
|
|
17
|
-
{ value: 'gpt-4.1', label: 'GPT-4.1', hint: '1M context, strong coding' },
|
|
18
|
-
{ value: 'gpt-4.1-mini', label: 'GPT-4.1 Mini', hint: '1M context, fast' },
|
|
19
|
-
{ value: 'gpt-4.1-nano', label: 'GPT-4.1 Nano', hint: '1M context, cheapest' },
|
|
20
|
-
],
|
|
21
|
-
'openai-codex': [
|
|
22
|
-
{ value: 'gpt-5.2-codex', label: 'GPT-5.2 Codex', hint: 'default, current Codex model' },
|
|
23
|
-
{ value: 'gpt-5.1-codex-max', label: 'GPT-5.1 Codex Max', hint: 'strongest long-horizon coding model' },
|
|
24
|
-
{ value: 'gpt-5.1-codex', label: 'GPT-5.1 Codex', hint: 'balanced Codex model' },
|
|
25
|
-
{ value: 'gpt-5.1-codex-mini', label: 'GPT-5.1 Codex Mini', hint: 'faster, cheaper Codex model' },
|
|
26
|
-
],
|
|
27
|
-
google: [
|
|
28
|
-
{ value: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro', hint: 'default, deep reasoning' },
|
|
29
|
-
{ value: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash', hint: 'best price-performance, 1M context' },
|
|
30
|
-
{ value: 'gemini-2.5-flash-lite', label: 'Gemini 2.5 Flash-Lite', hint: 'fastest, cheapest' },
|
|
31
|
-
{ value: 'gemini-3.1-pro-preview', label: 'Gemini 3.1 Pro (Preview)', hint: 'next gen, advanced agentic' },
|
|
32
|
-
{ value: 'gemini-3-flash-preview', label: 'Gemini 3 Flash (Preview)', hint: 'next gen, frontier-class' },
|
|
33
|
-
],
|
|
34
|
-
};
|
|
35
|
-
const ENV_VAR_MAP = {
|
|
36
|
-
anthropic: 'ANTHROPIC_API_KEY',
|
|
37
|
-
openai: 'OPENAI_API_KEY',
|
|
38
|
-
google: 'GOOGLE_API_KEY',
|
|
39
|
-
};
|
|
40
|
-
// Providers that support OAuth login
|
|
41
|
-
const OAUTH_PROVIDERS = new Set(['openai-codex', 'google']);
|
|
5
|
+
export function getSupportedAuthModes(provider) {
|
|
6
|
+
return getProviderAuthModes(provider);
|
|
7
|
+
}
|
|
8
|
+
export function resolveProviderSelectionFamily(family) {
|
|
9
|
+
const providers = getCerebrumProviderFamily(family);
|
|
10
|
+
if (providers.length === 1) {
|
|
11
|
+
return providers[0]?.id;
|
|
12
|
+
}
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
42
15
|
export async function cerebrumStep() {
|
|
43
|
-
const
|
|
16
|
+
const availableFamilies = listCerebrumProviderFamilies();
|
|
17
|
+
const family = guardCancel(await clack.select({
|
|
44
18
|
message: 'LLM Provider',
|
|
45
|
-
options:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
{ value: 'local', label: 'Local (Ollama / vLLM)' },
|
|
51
|
-
],
|
|
19
|
+
options: availableFamilies.map((entry) => ({
|
|
20
|
+
value: entry.id,
|
|
21
|
+
label: entry.label,
|
|
22
|
+
hint: entry.hint,
|
|
23
|
+
})),
|
|
52
24
|
}));
|
|
25
|
+
const familyProviders = getCerebrumProviderFamily(family);
|
|
26
|
+
const provider = resolveProviderSelectionFamily(family)
|
|
27
|
+
?? guardCancel(await clack.select({
|
|
28
|
+
message: `${familyProviders[0]?.familyLabel ?? 'Provider'} Type`,
|
|
29
|
+
options: familyProviders.map((entry) => ({
|
|
30
|
+
value: entry.id,
|
|
31
|
+
label: entry.typeLabel ?? entry.label,
|
|
32
|
+
hint: entry.authModes.includes('oauth') ? 'OAuth' : 'API key',
|
|
33
|
+
})),
|
|
34
|
+
}));
|
|
35
|
+
const providerDefinition = getCerebrumProvider(provider);
|
|
36
|
+
if (!providerDefinition) {
|
|
37
|
+
throw new Error(`Unknown provider: ${provider}`);
|
|
38
|
+
}
|
|
53
39
|
let apiKey;
|
|
54
|
-
let
|
|
40
|
+
let baseUrl;
|
|
55
41
|
let auth;
|
|
56
42
|
if (provider === 'local') {
|
|
57
|
-
|
|
43
|
+
baseUrl = guardCancel(await clack.text({
|
|
58
44
|
message: 'Local LLM base URL',
|
|
59
45
|
initialValue: 'http://localhost:11434',
|
|
60
46
|
validate: (v) => (v.startsWith('http') ? undefined : 'Must be a valid URL'),
|
|
61
47
|
}));
|
|
62
48
|
}
|
|
63
49
|
else {
|
|
64
|
-
|
|
65
|
-
if (
|
|
50
|
+
const endpointOptions = getProviderEndpointOptions(provider);
|
|
51
|
+
if (endpointOptions.length > 0) {
|
|
52
|
+
const selectedEndpoint = guardCancel(await clack.select({
|
|
53
|
+
message: 'Endpoint',
|
|
54
|
+
options: endpointOptions.map((option) => ({
|
|
55
|
+
value: option.baseUrl,
|
|
56
|
+
label: option.label,
|
|
57
|
+
hint: option.hint,
|
|
58
|
+
})),
|
|
59
|
+
}));
|
|
60
|
+
baseUrl = selectedEndpoint;
|
|
61
|
+
}
|
|
62
|
+
const supportedAuthModes = getSupportedAuthModes(provider);
|
|
63
|
+
let authMethod = supportedAuthModes[0] ?? 'apikey';
|
|
64
|
+
if (supportedAuthModes.length > 1) {
|
|
66
65
|
authMethod = guardCancel(await clack.select({
|
|
67
66
|
message: 'Authentication method',
|
|
68
67
|
options: [
|
|
@@ -76,7 +75,10 @@ export async function cerebrumStep() {
|
|
|
76
75
|
if (provider === 'openai-codex') {
|
|
77
76
|
clack.log.info('OpenAI Codex uses your ChatGPT/Codex subscription via browser login.');
|
|
78
77
|
}
|
|
79
|
-
else {
|
|
78
|
+
else if (provider === 'minimax-portal') {
|
|
79
|
+
clack.log.info('MiniMax Portal uses browser/device approval through your MiniMax account.');
|
|
80
|
+
}
|
|
81
|
+
else if (provider === 'google') {
|
|
80
82
|
clack.log.warn('OAuth uses shared credentials and may trigger account restrictions from the provider.\n'
|
|
81
83
|
+ ' Use an API key if this is a production or high-volume setup.');
|
|
82
84
|
const proceed = guardCancel(await clack.confirm({ message: 'Continue with OAuth?', initialValue: true }));
|
|
@@ -88,8 +90,7 @@ export async function cerebrumStep() {
|
|
|
88
90
|
if (authMethod === 'oauth') {
|
|
89
91
|
clack.log.info('Opening browser for sign-in...');
|
|
90
92
|
try {
|
|
91
|
-
const
|
|
92
|
-
const tokens = await loginFn({
|
|
93
|
+
const commonCallbacks = {
|
|
93
94
|
onAuth: (url) => {
|
|
94
95
|
openBrowser(url);
|
|
95
96
|
clack.log.info(`If the browser didn't open, visit:\n ${url}`);
|
|
@@ -98,7 +99,15 @@ export async function cerebrumStep() {
|
|
|
98
99
|
return guardCancel(await clack.text({ message, validate: (v) => (v.length > 0 ? undefined : 'Required') }));
|
|
99
100
|
},
|
|
100
101
|
onProgress: (msg) => clack.log.step(msg),
|
|
101
|
-
}
|
|
102
|
+
};
|
|
103
|
+
const tokens = provider === 'openai-codex'
|
|
104
|
+
? await loginOpenAICodex(commonCallbacks)
|
|
105
|
+
: provider === 'google'
|
|
106
|
+
? await loginGoogle(commonCallbacks)
|
|
107
|
+
: await loginMiniMaxPortal({
|
|
108
|
+
...commonCallbacks,
|
|
109
|
+
baseUrl,
|
|
110
|
+
});
|
|
102
111
|
const store = new TokenStore();
|
|
103
112
|
store.save(provider, tokens);
|
|
104
113
|
clack.log.success(`Authenticated with ${provider}!`);
|
|
@@ -110,7 +119,10 @@ export async function cerebrumStep() {
|
|
|
110
119
|
}
|
|
111
120
|
else {
|
|
112
121
|
auth = 'apikey';
|
|
113
|
-
const envVar =
|
|
122
|
+
const envVar = getProviderEnvVar(provider);
|
|
123
|
+
if (!envVar) {
|
|
124
|
+
throw new Error(`No API key env var configured for provider: ${provider}`);
|
|
125
|
+
}
|
|
114
126
|
const envValue = process.env[envVar];
|
|
115
127
|
if (envValue) {
|
|
116
128
|
const useEnv = guardCancel(await clack.confirm({
|
|
@@ -137,7 +149,7 @@ export async function cerebrumStep() {
|
|
|
137
149
|
}
|
|
138
150
|
else {
|
|
139
151
|
const key = guardCancel(await clack.text({
|
|
140
|
-
message: `Enter your ${
|
|
152
|
+
message: `Enter your ${providerDefinition.familyLabel} API key`,
|
|
141
153
|
validate: (v) => (v.length > 0 ? undefined : 'API key is required'),
|
|
142
154
|
}));
|
|
143
155
|
apiKey = { plaintext: key };
|
|
@@ -155,7 +167,7 @@ export async function cerebrumStep() {
|
|
|
155
167
|
}));
|
|
156
168
|
}
|
|
157
169
|
else {
|
|
158
|
-
const models =
|
|
170
|
+
const models = getProviderModels(provider);
|
|
159
171
|
const modelOptions = [
|
|
160
172
|
...models,
|
|
161
173
|
{ value: '__custom__', label: 'Other (enter model ID)' },
|
|
@@ -174,6 +186,6 @@ export async function cerebrumStep() {
|
|
|
174
186
|
model = selected;
|
|
175
187
|
}
|
|
176
188
|
}
|
|
177
|
-
return { provider, model, apiKey,
|
|
189
|
+
return { provider, model, apiKey, baseUrl, auth };
|
|
178
190
|
}
|
|
179
191
|
//# sourceMappingURL=cerebrum.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cerebrum.js","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"cerebrum.js","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,GAE7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAYpD,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAc;IAC3D,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,iBAAiB,GAAG,4BAA4B,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,WAAW,CACxB,MAAM,KAAK,CAAC,MAAM,CAAC;QACjB,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzC,KAAK,EAAE,KAAK,CAAC,EAAE;YACf,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC,CAAC;KACJ,CAAC,CACO,CAAC;IACZ,MAAM,eAAe,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,8BAA8B,CAAC,MAAM,CAAC;WAClD,WAAW,CACZ,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,UAAU,OAAO;YAChE,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACvC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,KAAK,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK;gBACrC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;aAC9D,CAAC,CAAC;SACJ,CAAC,CACO,CAAC;IACd,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAgC,CAAC;IACrC,IAAI,OAA2B,CAAC;IAChC,IAAI,IAA4B,CAAC;IAEjC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,WAAW,CACnB,MAAM,KAAK,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,oBAAoB;YAC7B,YAAY,EAAE,wBAAwB;YACtC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC;SAC5E,CAAC,CACO,CAAC;IACd,CAAC;SAAM,CAAC;QACN,MAAM,eAAe,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,gBAAgB,GAAG,WAAW,CAClC,MAAM,KAAK,CAAC,MAAM,CAAC;gBACjB,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBACxC,KAAK,EAAE,MAAM,CAAC,OAAO;oBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;iBAClB,CAAC,CAAC;aACJ,CAAC,CACO,CAAC;YACZ,OAAO,GAAG,gBAAgB,CAAC;QAC7B,CAAC;QAED,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,UAAU,GAAqB,kBAAkB,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QAErE,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,UAAU,GAAG,WAAW,CACtB,MAAM,KAAK,CAAC,MAAM,CAAC;gBACjB,OAAO,EAAE,uBAAuB;gBAChC,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,wBAAwB,EAAE;oBACrE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,2BAA2B,EAAE;iBACtF;aACF,CAAC,CACiB,CAAC;QACxB,CAAC;QAED,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,GAAG,OAAO,CAAC;YACf,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAChC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;YACzF,CAAC;iBAAM,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;gBACzC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;YAC9F,CAAC;iBAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,yFAAyF;sBACvF,gEAAgE,CACnE,CAAC;gBACF,MAAM,OAAO,GAAG,WAAW,CACzB,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAC7E,CAAC;gBACF,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,UAAU,GAAG,QAAQ,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAEjD,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG;oBACtB,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;wBACtB,WAAW,CAAC,GAAG,CAAC,CAAC;wBACjB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;oBACjE,CAAC;oBACD,QAAQ,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE;wBAClC,OAAO,WAAW,CAChB,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAC9E,CAAC;oBACd,CAAC;oBACD,UAAU,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;iBACjD,CAAC;gBACF,MAAM,MAAM,GAAG,QAAQ,KAAK,cAAc;oBACxC,CAAC,CAAC,MAAM,gBAAgB,CAAC,eAAe,CAAC;oBACzC,CAAC,CAAC,QAAQ,KAAK,QAAQ;wBACrB,CAAC,CAAC,MAAM,WAAW,CAAC,eAAe,CAAC;wBACpC,CAAC,CAAC,MAAM,kBAAkB,CAAC;4BACvB,GAAG,eAAe;4BAClB,OAAO;yBACR,CAAC,CAAC;gBAET,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC7B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,QAAQ,GAAG,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC7E,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,4CAA4C,GAAG,QAAQ,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,QAAQ,CAAC;YAChB,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAErC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,WAAW,CACxB,MAAM,KAAK,CAAC,OAAO,CAAC;oBAClB,OAAO,EAAE,SAAS,MAAM,0BAA0B;oBAClD,YAAY,EAAE,IAAI;iBACnB,CAAC,CACH,CAAC;gBAEF,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBAC9B,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,WAAW,CACzB,MAAM,KAAK,CAAC,MAAM,CAAC;oBACjB,OAAO,EAAE,2BAA2B;oBACpC,OAAO,EAAE;wBACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,MAAM,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE;wBACjF,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,0BAA0B,EAAE,IAAI,EAAE,aAAa,EAAE;qBAC3E;iBACF,CAAC,CACO,CAAC;gBAEZ,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;oBACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,MAAM,mDAAmD,CAAC,CAAC;oBACnF,CAAC;oBACD,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,GAAG,WAAW,CACrB,MAAM,KAAK,CAAC,IAAI,CAAC;wBACf,OAAO,EAAE,cAAc,kBAAkB,CAAC,WAAW,UAAU;wBAC/D,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC;qBACpE,CAAC,CACO,CAAC;oBACZ,MAAM,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAa,CAAC;IAElB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,KAAK,GAAG,WAAW,CACjB,MAAM,KAAK,CAAC,IAAI,CAAC;YACf,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,UAAU;YACxB,WAAW,EAAE,2CAA2C;SACzD,CAAC,CACO,CAAC;IACd,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG;YACnB,GAAG,MAAM;YACT,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,wBAAwB,EAAE;SACzD,CAAC;QAEF,MAAM,QAAQ,GAAG,WAAW,CAC1B,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,YAAY;SACtB,CAAC,CACO,CAAC;QAEZ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9B,KAAK,GAAG,WAAW,CACjB,MAAM,KAAK,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,gBAAgB;gBACzB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC;aACrE,CAAC,CACO,CAAC;QACd,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,QAAQ,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cerebrum.test.d.ts","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { getSupportedAuthModes, resolveProviderSelectionFamily } from './cerebrum.js';
|
|
3
|
+
describe('getSupportedAuthModes', () => {
|
|
4
|
+
it('keeps plain OpenAI as API key only', () => {
|
|
5
|
+
expect(getSupportedAuthModes('openai')).toEqual(['apikey']);
|
|
6
|
+
});
|
|
7
|
+
it('keeps OpenAI Codex as OAuth only', () => {
|
|
8
|
+
expect(getSupportedAuthModes('openai-codex')).toEqual(['oauth']);
|
|
9
|
+
});
|
|
10
|
+
it('allows Google to offer both API key and OAuth', () => {
|
|
11
|
+
expect(getSupportedAuthModes('google')).toEqual(['apikey', 'oauth']);
|
|
12
|
+
});
|
|
13
|
+
it('keeps MiniMax Portal as OAuth only', () => {
|
|
14
|
+
expect(getSupportedAuthModes('minimax-portal')).toEqual(['oauth']);
|
|
15
|
+
});
|
|
16
|
+
it('defaults unknown providers to API key only', () => {
|
|
17
|
+
expect(getSupportedAuthModes('anthropic')).toEqual(['apikey']);
|
|
18
|
+
expect(getSupportedAuthModes('local')).toEqual(['apikey']);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
describe('resolveProviderSelectionFamily', () => {
|
|
22
|
+
it('auto-selects single-provider families', () => {
|
|
23
|
+
expect(resolveProviderSelectionFamily('anthropic')).toBe('anthropic');
|
|
24
|
+
expect(resolveProviderSelectionFamily('local')).toBe('local');
|
|
25
|
+
});
|
|
26
|
+
it('requires an explicit type choice for multi-provider families', () => {
|
|
27
|
+
expect(resolveProviderSelectionFamily('openai')).toBeUndefined();
|
|
28
|
+
expect(resolveProviderSelectionFamily('minimax')).toBeUndefined();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=cerebrum.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cerebrum.test.js","sourceRoot":"","sources":["../../../src/onboard/steps/cerebrum.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAEtF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtE,MAAM,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACjE,MAAM,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/onboard/steps/summary.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/onboard/steps/summary.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAiBhE;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4G1E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GLOBAL_CONFIG, writeConfig } from '@cereworker/config';
|
|
2
2
|
import { clack, guardCancel } from '../prompter.js';
|
|
3
|
-
import {
|
|
3
|
+
import { buildFinalConfig } from '../config-builder.js';
|
|
4
4
|
export function getChannelInstructions(channelId) {
|
|
5
5
|
switch (channelId) {
|
|
6
6
|
case 'telegram':
|
|
@@ -85,7 +85,7 @@ export async function summaryStep(params) {
|
|
|
85
85
|
process.exit(0);
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
const config =
|
|
88
|
+
const config = buildFinalConfig(params);
|
|
89
89
|
writeConfig(config);
|
|
90
90
|
// Next steps guidance
|
|
91
91
|
const nextSteps = [];
|