@pickle-pee/genesis-cli 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/input-loop.d.ts +7 -1
- package/dist/input-loop.js +22 -1
- package/dist/input-loop.js.map +1 -1
- package/dist/main.d.ts +1 -0
- package/dist/main.js +288 -55
- package/dist/main.js.map +1 -1
- package/dist/mode-dispatch.d.ts +40 -3
- package/dist/mode-dispatch.js +725 -105
- package/dist/mode-dispatch.js.map +1 -1
- package/package.json +4 -4
package/dist/input-loop.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface InputLoopOptions {
|
|
|
19
19
|
cursor: number;
|
|
20
20
|
}) => void;
|
|
21
21
|
/** Called for special keys (rawMode only). */
|
|
22
|
-
readonly onKey?: (key: "up" | "down" | "pageup" | "pagedown" | "wheelup" | "wheeldown" | "tab" | "shifttab" | "esc" | "ctrlc") => void;
|
|
22
|
+
readonly onKey?: (key: "up" | "down" | "pageup" | "pagedown" | "wheelup" | "wheeldown" | "tab" | "shifttab" | "esc" | "ctrlc" | "ctrlo") => void;
|
|
23
23
|
/** Called when Tab is pressed in rawMode; may replace the current buffer. */
|
|
24
24
|
readonly onTabComplete?: (state: {
|
|
25
25
|
buffer: string;
|
|
@@ -30,6 +30,12 @@ export interface InputLoopOptions {
|
|
|
30
30
|
} | null;
|
|
31
31
|
/** Called for terminal focus changes (rawMode only). */
|
|
32
32
|
readonly onTerminalEvent?: (event: "focusin" | "focusout") => void;
|
|
33
|
+
/** Called for mouse button events (rawMode only). */
|
|
34
|
+
readonly onMouse?: (event: {
|
|
35
|
+
kind: "leftdown" | "leftdrag" | "leftup";
|
|
36
|
+
row: number;
|
|
37
|
+
column: number;
|
|
38
|
+
}) => void;
|
|
33
39
|
/** Whether pressing Enter should emit a terminal newline in raw mode. Defaults to true. */
|
|
34
40
|
readonly submitNewline?: boolean;
|
|
35
41
|
}
|
package/dist/input-loop.js
CHANGED
|
@@ -55,6 +55,7 @@ function createInputLoop(options = {}) {
|
|
|
55
55
|
onKey: options.onKey,
|
|
56
56
|
onTabComplete: options.onTabComplete,
|
|
57
57
|
onTerminalEvent: options.onTerminalEvent,
|
|
58
|
+
onMouse: options.onMouse,
|
|
58
59
|
submitNewline: options.submitNewline,
|
|
59
60
|
});
|
|
60
61
|
}
|
|
@@ -104,7 +105,7 @@ function createInputLoop(options = {}) {
|
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
107
|
function createRawInputLoop(options) {
|
|
107
|
-
const { prompt, input, output, onInputStateChange, onKey, onTabComplete, onTerminalEvent, submitNewline = true, } = options;
|
|
108
|
+
const { prompt, input, output, onInputStateChange, onKey, onTabComplete, onTerminalEvent, onMouse, submitNewline = true, } = options;
|
|
108
109
|
const sgrMousePattern = new RegExp(`^${String.fromCharCode(27)}\\[<(\\d+);(\\d+);(\\d+)([Mm])$`);
|
|
109
110
|
let closed = false;
|
|
110
111
|
let buffer = "";
|
|
@@ -193,12 +194,28 @@ function createRawInputLoop(options) {
|
|
|
193
194
|
const sgrMouse = sgrMousePattern.exec(seq);
|
|
194
195
|
if (sgrMouse) {
|
|
195
196
|
const button = Number.parseInt(sgrMouse[1] ?? "", 10);
|
|
197
|
+
const column = Number.parseInt(sgrMouse[2] ?? "", 10);
|
|
198
|
+
const row = Number.parseInt(sgrMouse[3] ?? "", 10);
|
|
199
|
+
const final = sgrMouse[4] ?? "M";
|
|
196
200
|
if ((button & 0x43) === 0x40) {
|
|
197
201
|
onKey?.("wheelup");
|
|
198
202
|
}
|
|
199
203
|
else if ((button & 0x43) === 0x41) {
|
|
200
204
|
onKey?.("wheeldown");
|
|
201
205
|
}
|
|
206
|
+
else if (Number.isFinite(column) && Number.isFinite(row)) {
|
|
207
|
+
const baseButton = button & 0x03;
|
|
208
|
+
const isMotion = (button & 0x20) !== 0;
|
|
209
|
+
if (final === "m" && baseButton === 0) {
|
|
210
|
+
onMouse?.({ kind: "leftup", row, column });
|
|
211
|
+
}
|
|
212
|
+
else if (isMotion && baseButton === 0) {
|
|
213
|
+
onMouse?.({ kind: "leftdrag", row, column });
|
|
214
|
+
}
|
|
215
|
+
else if (!isMotion && final === "M" && baseButton === 0) {
|
|
216
|
+
onMouse?.({ kind: "leftdown", row, column });
|
|
217
|
+
}
|
|
218
|
+
}
|
|
202
219
|
return;
|
|
203
220
|
}
|
|
204
221
|
if (seq.length === 6 && seq.startsWith("\u001b[M")) {
|
|
@@ -252,6 +269,10 @@ function createRawInputLoop(options) {
|
|
|
252
269
|
}
|
|
253
270
|
continue;
|
|
254
271
|
}
|
|
272
|
+
if (code === 15) {
|
|
273
|
+
onKey?.("ctrlo");
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
255
276
|
if (code === 27) {
|
|
256
277
|
escapeBuffer = ch;
|
|
257
278
|
if (escapeTimeout) {
|
package/dist/input-loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-loop.js","sourceRoot":"","sources":["../src/input-loop.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"input-loop.js","sourceRoot":"","sources":["../src/input-loop.ts"],"names":[],"mappings":"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"}
|
package/dist/main.d.ts
CHANGED
|
@@ -32,5 +32,6 @@ export interface ParsedArgs {
|
|
|
32
32
|
export declare function parseArgs(argv: readonly string[]): ParsedArgs;
|
|
33
33
|
export declare function main(argv?: readonly string[]): Promise<void>;
|
|
34
34
|
export declare function resolveCliOptions(flags: Readonly<Record<string, string | boolean>>): Promise<CliOptions>;
|
|
35
|
+
export declare function ensureUserSettingsFile(settingsPath: string, env?: NodeJS.ProcessEnv): Promise<void>;
|
|
35
36
|
export declare function readCliPackageVersion(packageJsonPath?: string): string;
|
|
36
37
|
export {};
|
package/dist/main.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.parseArgs = parseArgs;
|
|
5
5
|
exports.main = main;
|
|
6
6
|
exports.resolveCliOptions = resolveCliOptions;
|
|
7
|
+
exports.ensureUserSettingsFile = ensureUserSettingsFile;
|
|
7
8
|
exports.readCliPackageVersion = readCliPackageVersion;
|
|
8
9
|
const node_fs_1 = require("node:fs");
|
|
9
10
|
const promises_1 = require("node:fs/promises");
|
|
@@ -92,12 +93,17 @@ async function resolveCliOptions(flags) {
|
|
|
92
93
|
const workingDirectory = (0, node_path_1.resolve)(readStringFlag(flags, "cwd", process.cwd()));
|
|
93
94
|
const agentDir = (0, node_path_1.resolve)(readStringFlag(flags, "agent-dir", (0, node_path_1.resolve)(".genesis-local/pi-agent")));
|
|
94
95
|
const settingsPath = (0, node_path_1.resolve)((0, node_os_1.homedir)(), ".genesis-cli", "settings.json");
|
|
95
|
-
const
|
|
96
|
-
|
|
96
|
+
const shellEnv = { ...process.env };
|
|
97
|
+
try {
|
|
98
|
+
await ensureUserSettingsFile(settingsPath);
|
|
99
|
+
}
|
|
100
|
+
catch { }
|
|
101
|
+
const settingsLayers = await loadSettingsLayers(settingsPath, workingDirectory);
|
|
102
|
+
applySettingsEnv(settingsLayers.mergedEnv);
|
|
97
103
|
const agentConfigPath = (0, node_path_1.resolve)(agentDir, "config.json");
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
const
|
|
104
|
+
const agentConfig = await readOptionalSettingsFile(agentConfigPath);
|
|
105
|
+
const projectSettingsPath = (0, node_path_1.resolve)(workingDirectory, ".genesis/settings.json");
|
|
106
|
+
const localSettingsPath = (0, node_path_1.resolve)(workingDirectory, ".genesis/settings.local.json");
|
|
101
107
|
const mode = readModeFlag(flags, "mode", "interactive");
|
|
102
108
|
const sources = {};
|
|
103
109
|
sources.cwd =
|
|
@@ -108,13 +114,37 @@ async function resolveCliOptions(flags) {
|
|
|
108
114
|
: { layer: "default", detail: ".genesis-local/pi-agent" };
|
|
109
115
|
const provider = pickString([
|
|
110
116
|
{ value: asOptionalString(flags.provider), layer: "cli", detail: "--provider" },
|
|
111
|
-
{ value:
|
|
117
|
+
{ value: shellEnv.GENESIS_MODEL_PROVIDER, layer: "env", detail: "GENESIS_MODEL_PROVIDER" },
|
|
118
|
+
{
|
|
119
|
+
value: settingsLayers.local?.provider,
|
|
120
|
+
layer: "local",
|
|
121
|
+
detail: localSettingsPath,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
value: readSettingsEnvValue(settingsLayers.local, "GENESIS_MODEL_PROVIDER"),
|
|
125
|
+
layer: "local",
|
|
126
|
+
detail: `${localSettingsPath} env.GENESIS_MODEL_PROVIDER`,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
value: settingsLayers.project?.provider,
|
|
130
|
+
layer: "project",
|
|
131
|
+
detail: projectSettingsPath,
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
value: readSettingsEnvValue(settingsLayers.project, "GENESIS_MODEL_PROVIDER"),
|
|
135
|
+
layer: "project",
|
|
136
|
+
detail: `${projectSettingsPath} env.GENESIS_MODEL_PROVIDER`,
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
value: settingsLayers.user?.provider,
|
|
140
|
+
layer: "user",
|
|
141
|
+
detail: settingsPath,
|
|
142
|
+
},
|
|
112
143
|
{
|
|
113
|
-
value: readSettingsEnvValue(
|
|
114
|
-
layer: "
|
|
144
|
+
value: readSettingsEnvValue(settingsLayers.user, "GENESIS_MODEL_PROVIDER"),
|
|
145
|
+
layer: "user",
|
|
115
146
|
detail: `${settingsPath} env.GENESIS_MODEL_PROVIDER`,
|
|
116
147
|
},
|
|
117
|
-
{ value: projectConfig?.provider, layer: "project", detail: projectConfigPath },
|
|
118
148
|
{ value: agentConfig?.provider, layer: "agent", detail: agentConfigPath },
|
|
119
149
|
], "zai", { layer: "default", detail: "default" }, (value, source) => {
|
|
120
150
|
sources.provider = source;
|
|
@@ -122,13 +152,37 @@ async function resolveCliOptions(flags) {
|
|
|
122
152
|
});
|
|
123
153
|
const modelId = pickString([
|
|
124
154
|
{ value: asOptionalString(flags.model), layer: "cli", detail: "--model" },
|
|
125
|
-
{ value:
|
|
155
|
+
{ value: shellEnv.GENESIS_MODEL_ID, layer: "env", detail: "GENESIS_MODEL_ID" },
|
|
126
156
|
{
|
|
127
|
-
value:
|
|
128
|
-
layer: "
|
|
157
|
+
value: settingsLayers.local?.model,
|
|
158
|
+
layer: "local",
|
|
159
|
+
detail: localSettingsPath,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
value: readSettingsEnvValue(settingsLayers.local, "GENESIS_MODEL_ID"),
|
|
163
|
+
layer: "local",
|
|
164
|
+
detail: `${localSettingsPath} env.GENESIS_MODEL_ID`,
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
value: settingsLayers.project?.model,
|
|
168
|
+
layer: "project",
|
|
169
|
+
detail: projectSettingsPath,
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
value: readSettingsEnvValue(settingsLayers.project, "GENESIS_MODEL_ID"),
|
|
173
|
+
layer: "project",
|
|
174
|
+
detail: `${projectSettingsPath} env.GENESIS_MODEL_ID`,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
value: settingsLayers.user?.model,
|
|
178
|
+
layer: "user",
|
|
179
|
+
detail: settingsPath,
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
value: readSettingsEnvValue(settingsLayers.user, "GENESIS_MODEL_ID"),
|
|
183
|
+
layer: "user",
|
|
129
184
|
detail: `${settingsPath} env.GENESIS_MODEL_ID`,
|
|
130
185
|
},
|
|
131
|
-
{ value: projectConfig?.model, layer: "project", detail: projectConfigPath },
|
|
132
186
|
{ value: agentConfig?.model, layer: "agent", detail: agentConfigPath },
|
|
133
187
|
], "glm-5.1", { layer: "default", detail: "default" }, (value, source) => {
|
|
134
188
|
sources.model = source;
|
|
@@ -136,13 +190,37 @@ async function resolveCliOptions(flags) {
|
|
|
136
190
|
});
|
|
137
191
|
const displayName = pickOptionalString([
|
|
138
192
|
{ value: asOptionalString(flags["display-name"]), layer: "cli", detail: "--display-name" },
|
|
139
|
-
{ value:
|
|
193
|
+
{ value: shellEnv.GENESIS_MODEL_DISPLAY_NAME, layer: "env", detail: "GENESIS_MODEL_DISPLAY_NAME" },
|
|
194
|
+
{
|
|
195
|
+
value: settingsLayers.local?.displayName,
|
|
196
|
+
layer: "local",
|
|
197
|
+
detail: localSettingsPath,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
value: readSettingsEnvValue(settingsLayers.local, "GENESIS_MODEL_DISPLAY_NAME"),
|
|
201
|
+
layer: "local",
|
|
202
|
+
detail: `${localSettingsPath} env.GENESIS_MODEL_DISPLAY_NAME`,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
value: settingsLayers.project?.displayName,
|
|
206
|
+
layer: "project",
|
|
207
|
+
detail: projectSettingsPath,
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
value: readSettingsEnvValue(settingsLayers.project, "GENESIS_MODEL_DISPLAY_NAME"),
|
|
211
|
+
layer: "project",
|
|
212
|
+
detail: `${projectSettingsPath} env.GENESIS_MODEL_DISPLAY_NAME`,
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
value: settingsLayers.user?.displayName,
|
|
216
|
+
layer: "user",
|
|
217
|
+
detail: settingsPath,
|
|
218
|
+
},
|
|
140
219
|
{
|
|
141
|
-
value: readSettingsEnvValue(
|
|
142
|
-
layer: "
|
|
220
|
+
value: readSettingsEnvValue(settingsLayers.user, "GENESIS_MODEL_DISPLAY_NAME"),
|
|
221
|
+
layer: "user",
|
|
143
222
|
detail: `${settingsPath} env.GENESIS_MODEL_DISPLAY_NAME`,
|
|
144
223
|
},
|
|
145
|
-
{ value: projectConfig?.displayName, layer: "project", detail: projectConfigPath },
|
|
146
224
|
{ value: agentConfig?.displayName, layer: "agent", detail: agentConfigPath },
|
|
147
225
|
], (value, source) => {
|
|
148
226
|
sources.displayName = source;
|
|
@@ -150,13 +228,37 @@ async function resolveCliOptions(flags) {
|
|
|
150
228
|
});
|
|
151
229
|
const toolSetRaw = pickTools([
|
|
152
230
|
{ value: asOptionalString(flags.tools), layer: "cli", detail: "--tools" },
|
|
153
|
-
{ value:
|
|
231
|
+
{ value: shellEnv.GENESIS_TOOL_SET, layer: "env", detail: "GENESIS_TOOL_SET" },
|
|
154
232
|
{
|
|
155
|
-
value:
|
|
156
|
-
layer: "
|
|
233
|
+
value: settingsLayers.local?.tools,
|
|
234
|
+
layer: "local",
|
|
235
|
+
detail: localSettingsPath,
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
value: readSettingsEnvValue(settingsLayers.local, "GENESIS_TOOL_SET"),
|
|
239
|
+
layer: "local",
|
|
240
|
+
detail: `${localSettingsPath} env.GENESIS_TOOL_SET`,
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
value: settingsLayers.project?.tools,
|
|
244
|
+
layer: "project",
|
|
245
|
+
detail: projectSettingsPath,
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
value: readSettingsEnvValue(settingsLayers.project, "GENESIS_TOOL_SET"),
|
|
249
|
+
layer: "project",
|
|
250
|
+
detail: `${projectSettingsPath} env.GENESIS_TOOL_SET`,
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
value: settingsLayers.user?.tools,
|
|
254
|
+
layer: "user",
|
|
255
|
+
detail: settingsPath,
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
value: readSettingsEnvValue(settingsLayers.user, "GENESIS_TOOL_SET"),
|
|
259
|
+
layer: "user",
|
|
157
260
|
detail: `${settingsPath} env.GENESIS_TOOL_SET`,
|
|
158
261
|
},
|
|
159
|
-
{ value: projectConfig?.tools, layer: "project", detail: projectConfigPath },
|
|
160
262
|
{ value: agentConfig?.tools, layer: "agent", detail: agentConfigPath },
|
|
161
263
|
], "read,bash,edit,write", { layer: "default", detail: "default" }, (value, source) => {
|
|
162
264
|
sources.tools = source;
|
|
@@ -165,13 +267,37 @@ async function resolveCliOptions(flags) {
|
|
|
165
267
|
const toolSet = splitCsv(toolSetRaw);
|
|
166
268
|
const thinkingLevel = pickOptionalString([
|
|
167
269
|
{ value: asOptionalString(flags.thinking), layer: "cli", detail: "--thinking" },
|
|
168
|
-
{ value:
|
|
270
|
+
{ value: shellEnv.GENESIS_THINKING_LEVEL, layer: "env", detail: "GENESIS_THINKING_LEVEL" },
|
|
271
|
+
{
|
|
272
|
+
value: settingsLayers.local?.thinking,
|
|
273
|
+
layer: "local",
|
|
274
|
+
detail: localSettingsPath,
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
value: readSettingsEnvValue(settingsLayers.local, "GENESIS_THINKING_LEVEL"),
|
|
278
|
+
layer: "local",
|
|
279
|
+
detail: `${localSettingsPath} env.GENESIS_THINKING_LEVEL`,
|
|
280
|
+
},
|
|
169
281
|
{
|
|
170
|
-
value:
|
|
171
|
-
layer: "
|
|
282
|
+
value: settingsLayers.project?.thinking,
|
|
283
|
+
layer: "project",
|
|
284
|
+
detail: projectSettingsPath,
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
value: readSettingsEnvValue(settingsLayers.project, "GENESIS_THINKING_LEVEL"),
|
|
288
|
+
layer: "project",
|
|
289
|
+
detail: `${projectSettingsPath} env.GENESIS_THINKING_LEVEL`,
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
value: settingsLayers.user?.thinking,
|
|
293
|
+
layer: "user",
|
|
294
|
+
detail: settingsPath,
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
value: readSettingsEnvValue(settingsLayers.user, "GENESIS_THINKING_LEVEL"),
|
|
298
|
+
layer: "user",
|
|
172
299
|
detail: `${settingsPath} env.GENESIS_THINKING_LEVEL`,
|
|
173
300
|
},
|
|
174
|
-
{ value: projectConfig?.thinking, layer: "project", detail: projectConfigPath },
|
|
175
301
|
{ value: agentConfig?.thinking, layer: "agent", detail: agentConfigPath },
|
|
176
302
|
], (value, source) => {
|
|
177
303
|
sources.thinking = source;
|
|
@@ -179,13 +305,37 @@ async function resolveCliOptions(flags) {
|
|
|
179
305
|
});
|
|
180
306
|
const bootstrapBaseUrl = pickOptionalString([
|
|
181
307
|
{ value: asOptionalString(flags["bootstrap-base-url"]), layer: "cli", detail: "--bootstrap-base-url" },
|
|
182
|
-
{ value:
|
|
308
|
+
{ value: shellEnv.GENESIS_BOOTSTRAP_BASE_URL, layer: "env", detail: "GENESIS_BOOTSTRAP_BASE_URL" },
|
|
309
|
+
{
|
|
310
|
+
value: settingsLayers.local?.bootstrap?.baseUrl,
|
|
311
|
+
layer: "local",
|
|
312
|
+
detail: localSettingsPath,
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
value: readSettingsEnvValue(settingsLayers.local, "GENESIS_BOOTSTRAP_BASE_URL"),
|
|
316
|
+
layer: "local",
|
|
317
|
+
detail: `${localSettingsPath} env.GENESIS_BOOTSTRAP_BASE_URL`,
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
value: settingsLayers.project?.bootstrap?.baseUrl,
|
|
321
|
+
layer: "project",
|
|
322
|
+
detail: projectSettingsPath,
|
|
323
|
+
},
|
|
183
324
|
{
|
|
184
|
-
value: readSettingsEnvValue(
|
|
185
|
-
layer: "
|
|
325
|
+
value: readSettingsEnvValue(settingsLayers.project, "GENESIS_BOOTSTRAP_BASE_URL"),
|
|
326
|
+
layer: "project",
|
|
327
|
+
detail: `${projectSettingsPath} env.GENESIS_BOOTSTRAP_BASE_URL`,
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
value: settingsLayers.user?.bootstrap?.baseUrl,
|
|
331
|
+
layer: "user",
|
|
332
|
+
detail: settingsPath,
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
value: readSettingsEnvValue(settingsLayers.user, "GENESIS_BOOTSTRAP_BASE_URL"),
|
|
336
|
+
layer: "user",
|
|
186
337
|
detail: `${settingsPath} env.GENESIS_BOOTSTRAP_BASE_URL`,
|
|
187
338
|
},
|
|
188
|
-
{ value: projectConfig?.bootstrap?.baseUrl, layer: "project", detail: projectConfigPath },
|
|
189
339
|
{ value: agentConfig?.bootstrap?.baseUrl, layer: "agent", detail: agentConfigPath },
|
|
190
340
|
], (value, source) => {
|
|
191
341
|
sources["bootstrap.baseUrl"] = source;
|
|
@@ -193,13 +343,37 @@ async function resolveCliOptions(flags) {
|
|
|
193
343
|
});
|
|
194
344
|
const bootstrapApi = pickOptionalString([
|
|
195
345
|
{ value: asOptionalString(flags["bootstrap-api"]), layer: "cli", detail: "--bootstrap-api" },
|
|
196
|
-
{ value:
|
|
346
|
+
{ value: shellEnv.GENESIS_BOOTSTRAP_API, layer: "env", detail: "GENESIS_BOOTSTRAP_API" },
|
|
347
|
+
{
|
|
348
|
+
value: settingsLayers.local?.bootstrap?.api,
|
|
349
|
+
layer: "local",
|
|
350
|
+
detail: localSettingsPath,
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
value: readSettingsEnvValue(settingsLayers.local, "GENESIS_BOOTSTRAP_API"),
|
|
354
|
+
layer: "local",
|
|
355
|
+
detail: `${localSettingsPath} env.GENESIS_BOOTSTRAP_API`,
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
value: settingsLayers.project?.bootstrap?.api,
|
|
359
|
+
layer: "project",
|
|
360
|
+
detail: projectSettingsPath,
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
value: readSettingsEnvValue(settingsLayers.project, "GENESIS_BOOTSTRAP_API"),
|
|
364
|
+
layer: "project",
|
|
365
|
+
detail: `${projectSettingsPath} env.GENESIS_BOOTSTRAP_API`,
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
value: settingsLayers.user?.bootstrap?.api,
|
|
369
|
+
layer: "user",
|
|
370
|
+
detail: settingsPath,
|
|
371
|
+
},
|
|
197
372
|
{
|
|
198
|
-
value: readSettingsEnvValue(
|
|
199
|
-
layer: "
|
|
373
|
+
value: readSettingsEnvValue(settingsLayers.user, "GENESIS_BOOTSTRAP_API"),
|
|
374
|
+
layer: "user",
|
|
200
375
|
detail: `${settingsPath} env.GENESIS_BOOTSTRAP_API`,
|
|
201
376
|
},
|
|
202
|
-
{ value: projectConfig?.bootstrap?.api, layer: "project", detail: projectConfigPath },
|
|
203
377
|
{ value: agentConfig?.bootstrap?.api, layer: "agent", detail: agentConfigPath },
|
|
204
378
|
], (value, source) => {
|
|
205
379
|
sources["bootstrap.api"] = source;
|
|
@@ -219,16 +393,27 @@ async function resolveCliOptions(flags) {
|
|
|
219
393
|
bootstrapOverrides: {
|
|
220
394
|
...(bootstrapBaseUrl !== undefined ? { baseUrl: bootstrapBaseUrl } : {}),
|
|
221
395
|
...(bootstrapApi !== undefined ? { api: bootstrapApi } : {}),
|
|
222
|
-
apiKeyEnv: readOptionalStringFlag(flags, "bootstrap-api-key-env",
|
|
223
|
-
readSettingsEnvValue(
|
|
224
|
-
|
|
225
|
-
readSettingsEnvValue(
|
|
226
|
-
|
|
396
|
+
apiKeyEnv: readOptionalStringFlag(flags, "bootstrap-api-key-env", shellEnv.GENESIS_BOOTSTRAP_API_KEY_ENV ??
|
|
397
|
+
readSettingsEnvValue(settingsLayers.local, "GENESIS_BOOTSTRAP_API_KEY_ENV") ??
|
|
398
|
+
readSettingsEnvValue(settingsLayers.project, "GENESIS_BOOTSTRAP_API_KEY_ENV") ??
|
|
399
|
+
readSettingsEnvValue(settingsLayers.user, "GENESIS_BOOTSTRAP_API_KEY_ENV")),
|
|
400
|
+
authHeader: readOptionalBooleanFlag(flags, "bootstrap-auth-header", shellEnv.GENESIS_BOOTSTRAP_AUTH_HEADER ??
|
|
401
|
+
readSettingsEnvValue(settingsLayers.local, "GENESIS_BOOTSTRAP_AUTH_HEADER") ??
|
|
402
|
+
readSettingsEnvValue(settingsLayers.project, "GENESIS_BOOTSTRAP_AUTH_HEADER") ??
|
|
403
|
+
readSettingsEnvValue(settingsLayers.user, "GENESIS_BOOTSTRAP_AUTH_HEADER")),
|
|
404
|
+
reasoning: readOptionalBooleanFlag(flags, "bootstrap-reasoning", shellEnv.GENESIS_BOOTSTRAP_REASONING ??
|
|
405
|
+
readSettingsEnvValue(settingsLayers.local, "GENESIS_BOOTSTRAP_REASONING") ??
|
|
406
|
+
readSettingsEnvValue(settingsLayers.project, "GENESIS_BOOTSTRAP_REASONING") ??
|
|
407
|
+
readSettingsEnvValue(settingsLayers.user, "GENESIS_BOOTSTRAP_REASONING")),
|
|
227
408
|
compat: {
|
|
228
|
-
supportsDeveloperRole: readOptionalBooleanFlag(flags, "bootstrap-supports-developer-role",
|
|
229
|
-
readSettingsEnvValue(
|
|
230
|
-
|
|
231
|
-
readSettingsEnvValue(
|
|
409
|
+
supportsDeveloperRole: readOptionalBooleanFlag(flags, "bootstrap-supports-developer-role", shellEnv.GENESIS_BOOTSTRAP_SUPPORTS_DEVELOPER_ROLE ??
|
|
410
|
+
readSettingsEnvValue(settingsLayers.local, "GENESIS_BOOTSTRAP_SUPPORTS_DEVELOPER_ROLE") ??
|
|
411
|
+
readSettingsEnvValue(settingsLayers.project, "GENESIS_BOOTSTRAP_SUPPORTS_DEVELOPER_ROLE") ??
|
|
412
|
+
readSettingsEnvValue(settingsLayers.user, "GENESIS_BOOTSTRAP_SUPPORTS_DEVELOPER_ROLE")),
|
|
413
|
+
supportsReasoningEffort: readOptionalBooleanFlag(flags, "bootstrap-supports-reasoning-effort", shellEnv.GENESIS_BOOTSTRAP_SUPPORTS_REASONING_EFFORT ??
|
|
414
|
+
readSettingsEnvValue(settingsLayers.local, "GENESIS_BOOTSTRAP_SUPPORTS_REASONING_EFFORT") ??
|
|
415
|
+
readSettingsEnvValue(settingsLayers.project, "GENESIS_BOOTSTRAP_SUPPORTS_REASONING_EFFORT") ??
|
|
416
|
+
readSettingsEnvValue(settingsLayers.user, "GENESIS_BOOTSTRAP_SUPPORTS_REASONING_EFFORT")),
|
|
232
417
|
},
|
|
233
418
|
},
|
|
234
419
|
configSources: sources,
|
|
@@ -282,7 +467,20 @@ function pickTools(candidates, fallback, fallbackSource, onPicked) {
|
|
|
282
467
|
}
|
|
283
468
|
return onPicked(fallback, fallbackSource);
|
|
284
469
|
}
|
|
285
|
-
async function
|
|
470
|
+
async function loadSettingsLayers(settingsPath, workingDirectory) {
|
|
471
|
+
const projectSettingsPath = (0, node_path_1.resolve)(workingDirectory, ".genesis/settings.json");
|
|
472
|
+
const localSettingsPath = (0, node_path_1.resolve)(workingDirectory, ".genesis/settings.local.json");
|
|
473
|
+
const user = await readOptionalSettingsFile(settingsPath);
|
|
474
|
+
const project = await readOptionalSettingsFile(projectSettingsPath);
|
|
475
|
+
const local = await readOptionalSettingsFile(localSettingsPath);
|
|
476
|
+
return {
|
|
477
|
+
user,
|
|
478
|
+
project,
|
|
479
|
+
local,
|
|
480
|
+
mergedEnv: mergeSettingsEnv(user, project, local),
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
async function readOptionalSettingsFile(filePath) {
|
|
286
484
|
try {
|
|
287
485
|
const parsed = JSON.parse(await (0, promises_1.readFile)(filePath, "utf8"));
|
|
288
486
|
if (!parsed || typeof parsed !== "object")
|
|
@@ -293,14 +491,44 @@ async function readOptionalJson(filePath) {
|
|
|
293
491
|
return null;
|
|
294
492
|
}
|
|
295
493
|
}
|
|
296
|
-
async function
|
|
494
|
+
async function ensureUserSettingsFile(settingsPath, env = process.env) {
|
|
495
|
+
await (0, promises_1.mkdir)((0, node_path_1.dirname)(settingsPath), { recursive: true });
|
|
297
496
|
try {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
497
|
+
await (0, promises_1.readFile)(settingsPath, "utf8");
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
catch { }
|
|
501
|
+
try {
|
|
502
|
+
await (0, promises_1.writeFile)(settingsPath, `${JSON.stringify(buildDefaultSettingsFile(env), null, 2)}\n`, {
|
|
503
|
+
flag: "wx",
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
catch (error) {
|
|
507
|
+
if (error.code !== "EEXIST") {
|
|
508
|
+
throw error;
|
|
301
509
|
}
|
|
302
|
-
|
|
303
|
-
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
function buildDefaultSettingsFile(env = process.env) {
|
|
513
|
+
const modelId = normalizeOptionalString(env.GENESIS_MODEL_ID) ?? "glm-5.1";
|
|
514
|
+
return {
|
|
515
|
+
env: {
|
|
516
|
+
GENESIS_API_KEY: "your_zhipu_api_key",
|
|
517
|
+
GENESIS_BOOTSTRAP_BASE_URL: (0, bootstrap_js_1.resolveDefaultBootstrapBaseUrl)(env),
|
|
518
|
+
GENESIS_BOOTSTRAP_API: normalizeOptionalString(env.GENESIS_BOOTSTRAP_API) ?? "openai-completions",
|
|
519
|
+
GENESIS_MODEL_PROVIDER: normalizeOptionalString(env.GENESIS_MODEL_PROVIDER) ?? "zai",
|
|
520
|
+
GENESIS_MODEL_ID: modelId,
|
|
521
|
+
GENESIS_MODEL_DISPLAY_NAME: normalizeOptionalString(env.GENESIS_MODEL_DISPLAY_NAME) ?? modelId,
|
|
522
|
+
},
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
function mergeSettingsEnv(...settingsFiles) {
|
|
526
|
+
const env = {};
|
|
527
|
+
for (const settingsFile of settingsFiles) {
|
|
528
|
+
if (!settingsFile?.env) {
|
|
529
|
+
continue;
|
|
530
|
+
}
|
|
531
|
+
for (const [key, value] of Object.entries(settingsFile.env)) {
|
|
304
532
|
if (typeof value === "string") {
|
|
305
533
|
const trimmed = value.trim();
|
|
306
534
|
if (trimmed.length > 0) {
|
|
@@ -312,11 +540,8 @@ async function readSettingsEnv(settingsPath) {
|
|
|
312
540
|
env[key] = String(value);
|
|
313
541
|
}
|
|
314
542
|
}
|
|
315
|
-
return env;
|
|
316
|
-
}
|
|
317
|
-
catch {
|
|
318
|
-
return {};
|
|
319
543
|
}
|
|
544
|
+
return env;
|
|
320
545
|
}
|
|
321
546
|
function applySettingsEnv(settingsEnv, targetEnv = process.env) {
|
|
322
547
|
for (const [key, value] of Object.entries(settingsEnv)) {
|
|
@@ -325,8 +550,16 @@ function applySettingsEnv(settingsEnv, targetEnv = process.env) {
|
|
|
325
550
|
}
|
|
326
551
|
}
|
|
327
552
|
}
|
|
328
|
-
function readSettingsEnvValue(
|
|
329
|
-
|
|
553
|
+
function readSettingsEnvValue(settingsFile, key) {
|
|
554
|
+
const value = settingsFile?.env?.[key];
|
|
555
|
+
if (typeof value === "string") {
|
|
556
|
+
const trimmed = value.trim();
|
|
557
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
558
|
+
}
|
|
559
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
560
|
+
return String(value);
|
|
561
|
+
}
|
|
562
|
+
return undefined;
|
|
330
563
|
}
|
|
331
564
|
function readModeFlag(flags, key, fallback) {
|
|
332
565
|
const value = readStringFlag(flags, key, fallback);
|