atom-lite 0.0.0-stage → 0.4.1
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/CHANGELOG.md +72 -0
- package/LICENSE +21 -0
- package/README.md +313 -2
- package/dist/agent/loop.d.ts +32 -0
- package/dist/agent/loop.js +204 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/types.d.ts +85 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/activity.d.ts +45 -0
- package/dist/cli/activity.js +141 -0
- package/dist/cli/activity.js.map +1 -0
- package/dist/cli/app.d.ts +1 -0
- package/dist/cli/app.js +1576 -0
- package/dist/cli/app.js.map +1 -0
- package/dist/cli/approval-prompt.d.ts +24 -0
- package/dist/cli/approval-prompt.js +82 -0
- package/dist/cli/approval-prompt.js.map +1 -0
- package/dist/cli/approvals.d.ts +1 -0
- package/dist/cli/approvals.js +2 -0
- package/dist/cli/approvals.js.map +1 -0
- package/dist/cli/banner.d.ts +12 -0
- package/dist/cli/banner.js +35 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/commands.d.ts +94 -0
- package/dist/cli/commands.js +324 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/diff.d.ts +1 -0
- package/dist/cli/diff.js +28 -0
- package/dist/cli/diff.js.map +1 -0
- package/dist/cli/input.d.ts +2 -0
- package/dist/cli/input.js +10 -0
- package/dist/cli/input.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +22 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/mouse.d.ts +54 -0
- package/dist/cli/mouse.js +83 -0
- package/dist/cli/mouse.js.map +1 -0
- package/dist/cli/palette.d.ts +41 -0
- package/dist/cli/palette.js +212 -0
- package/dist/cli/palette.js.map +1 -0
- package/dist/cli/panel.d.ts +29 -0
- package/dist/cli/panel.js +48 -0
- package/dist/cli/panel.js.map +1 -0
- package/dist/cli/picker.d.ts +34 -0
- package/dist/cli/picker.js +173 -0
- package/dist/cli/picker.js.map +1 -0
- package/dist/cli/renderer.d.ts +1 -0
- package/dist/cli/renderer.js +5 -0
- package/dist/cli/renderer.js.map +1 -0
- package/dist/cli/secret-input.d.ts +21 -0
- package/dist/cli/secret-input.js +101 -0
- package/dist/cli/secret-input.js.map +1 -0
- package/dist/cli/status-line.d.ts +24 -0
- package/dist/cli/status-line.js +49 -0
- package/dist/cli/status-line.js.map +1 -0
- package/dist/cli/stream-text.d.ts +18 -0
- package/dist/cli/stream-text.js +63 -0
- package/dist/cli/stream-text.js.map +1 -0
- package/dist/cli/theme.d.ts +48 -0
- package/dist/cli/theme.js +158 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/cli/tool-box.d.ts +41 -0
- package/dist/cli/tool-box.js +177 -0
- package/dist/cli/tool-box.js.map +1 -0
- package/dist/cli/transcript.d.ts +26 -0
- package/dist/cli/transcript.js +64 -0
- package/dist/cli/transcript.js.map +1 -0
- package/dist/config/credentials.d.ts +26 -0
- package/dist/config/credentials.js +79 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/defaults.d.ts +34 -0
- package/dist/config/defaults.js +35 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/load.d.ts +9 -0
- package/dist/config/load.js +137 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/paths.d.ts +4 -0
- package/dist/config/paths.js +14 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +132 -0
- package/dist/config/schema.js +83 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/write.d.ts +20 -0
- package/dist/config/write.js +70 -0
- package/dist/config/write.js.map +1 -0
- package/dist/context/budget.d.ts +2 -0
- package/dist/context/budget.js +13 -0
- package/dist/context/budget.js.map +1 -0
- package/dist/context/builder.d.ts +7 -0
- package/dist/context/builder.js +11 -0
- package/dist/context/builder.js.map +1 -0
- package/dist/context/compaction.d.ts +1 -0
- package/dist/context/compaction.js +5 -0
- package/dist/context/compaction.js.map +1 -0
- package/dist/context/instructions.d.ts +3 -0
- package/dist/context/instructions.js +30 -0
- package/dist/context/instructions.js.map +1 -0
- package/dist/context/manager.d.ts +29 -0
- package/dist/context/manager.js +122 -0
- package/dist/context/manager.js.map +1 -0
- package/dist/extensions/api.d.ts +51 -0
- package/dist/extensions/api.js +101 -0
- package/dist/extensions/api.js.map +1 -0
- package/dist/extensions/discovery.d.ts +26 -0
- package/dist/extensions/discovery.js +243 -0
- package/dist/extensions/discovery.js.map +1 -0
- package/dist/extensions/loader.d.ts +27 -0
- package/dist/extensions/loader.js +113 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/trust.d.ts +4 -0
- package/dist/extensions/trust.js +40 -0
- package/dist/extensions/trust.js.map +1 -0
- package/dist/extensions/types.d.ts +52 -0
- package/dist/extensions/types.js +2 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +73 -0
- package/dist/mcp/client.js +363 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/format.d.ts +3 -0
- package/dist/mcp/format.js +37 -0
- package/dist/mcp/format.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +53 -0
- package/dist/mcp/manager.js +349 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/stdio-transport.d.ts +26 -0
- package/dist/mcp/stdio-transport.js +191 -0
- package/dist/mcp/stdio-transport.js.map +1 -0
- package/dist/mcp/tools.d.ts +22 -0
- package/dist/mcp/tools.js +162 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +92 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/providers/catalog.d.ts +60 -0
- package/dist/providers/catalog.js +289 -0
- package/dist/providers/catalog.js.map +1 -0
- package/dist/providers/context-window.d.ts +11 -0
- package/dist/providers/context-window.js +87 -0
- package/dist/providers/context-window.js.map +1 -0
- package/dist/providers/factory.d.ts +2 -0
- package/dist/providers/factory.js +55 -0
- package/dist/providers/factory.js.map +1 -0
- package/dist/providers/fake.d.ts +14 -0
- package/dist/providers/fake.js +23 -0
- package/dist/providers/fake.js.map +1 -0
- package/dist/providers/gemini.d.ts +24 -0
- package/dist/providers/gemini.js +228 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.js +4 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama.d.ts +64 -0
- package/dist/providers/ollama.js +433 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +27 -0
- package/dist/providers/openai-compatible.js +282 -0
- package/dist/providers/openai-compatible.js.map +1 -0
- package/dist/providers/registry.d.ts +7 -0
- package/dist/providers/registry.js +13 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/tool-calls.d.ts +18 -0
- package/dist/providers/tool-calls.js +42 -0
- package/dist/providers/tool-calls.js.map +1 -0
- package/dist/providers/types.d.ts +16 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/runtime/approvals.d.ts +20 -0
- package/dist/runtime/approvals.js +20 -0
- package/dist/runtime/approvals.js.map +1 -0
- package/dist/runtime/executor.d.ts +2 -0
- package/dist/runtime/executor.js +4 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/locks.d.ts +13 -0
- package/dist/runtime/locks.js +180 -0
- package/dist/runtime/locks.js.map +1 -0
- package/dist/runtime/scheduler.d.ts +7 -0
- package/dist/runtime/scheduler.js +110 -0
- package/dist/runtime/scheduler.js.map +1 -0
- package/dist/security/paths.d.ts +1 -0
- package/dist/security/paths.js +35 -0
- package/dist/security/paths.js.map +1 -0
- package/dist/security/process.d.ts +1 -0
- package/dist/security/process.js +8 -0
- package/dist/security/process.js.map +1 -0
- package/dist/security/redaction.d.ts +1 -0
- package/dist/security/redaction.js +4 -0
- package/dist/security/redaction.js.map +1 -0
- package/dist/sessions/events.d.ts +30 -0
- package/dist/sessions/events.js +92 -0
- package/dist/sessions/events.js.map +1 -0
- package/dist/sessions/history.d.ts +18 -0
- package/dist/sessions/history.js +76 -0
- package/dist/sessions/history.js.map +1 -0
- package/dist/sessions/index.d.ts +5 -0
- package/dist/sessions/index.js +6 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/recovery.d.ts +6 -0
- package/dist/sessions/recovery.js +35 -0
- package/dist/sessions/recovery.js.map +1 -0
- package/dist/sessions/search.d.ts +16 -0
- package/dist/sessions/search.js +136 -0
- package/dist/sessions/search.js.map +1 -0
- package/dist/sessions/store.d.ts +91 -0
- package/dist/sessions/store.js +360 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/skills/registry.d.ts +23 -0
- package/dist/skills/registry.js +129 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/tools/bash.d.ts +2 -0
- package/dist/tools/bash.js +159 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/diff.d.ts +7 -0
- package/dist/tools/diff.js +40 -0
- package/dist/tools/diff.js.map +1 -0
- package/dist/tools/edit.d.ts +2 -0
- package/dist/tools/edit.js +118 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/read.d.ts +2 -0
- package/dist/tools/read.js +138 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/registry.d.ts +7 -0
- package/dist/tools/registry.js +13 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +27 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/webfetch.d.ts +2 -0
- package/dist/tools/webfetch.js +97 -0
- package/dist/tools/webfetch.js.map +1 -0
- package/dist/tools/websearch.d.ts +2 -0
- package/dist/tools/websearch.js +88 -0
- package/dist/tools/websearch.js.map +1 -0
- package/dist/tools/write.d.ts +2 -0
- package/dist/tools/write.js +91 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types.d.ts +84 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +74 -4
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Container, Text } from "@earendil-works/pi-tui";
|
|
2
|
+
import { darkTheme } from "./theme.js";
|
|
3
|
+
/** Soft cap on rendered transcript children before the oldest are collapsed. */
|
|
4
|
+
export const TRANSCRIPT_MAX_CHILDREN = 1500;
|
|
5
|
+
/** How many children to collapse when the cap is exceeded. */
|
|
6
|
+
export const TRANSCRIPT_PRUNE_COUNT = 500;
|
|
7
|
+
/**
|
|
8
|
+
* Append-only transcript with bounded rendering work. The session store keeps
|
|
9
|
+
* the full history; this only limits what the TUI keeps as live components.
|
|
10
|
+
*/
|
|
11
|
+
export class Transcript {
|
|
12
|
+
container = new Container();
|
|
13
|
+
hidden = 0;
|
|
14
|
+
marker = null;
|
|
15
|
+
theme;
|
|
16
|
+
constructor(theme = darkTheme) {
|
|
17
|
+
this.theme = theme;
|
|
18
|
+
}
|
|
19
|
+
setTheme(theme) {
|
|
20
|
+
this.theme = theme;
|
|
21
|
+
if (this.marker) {
|
|
22
|
+
this.marker.setText(this.markerLabel());
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Clear all history and pruning state, e.g. when resuming a session. */
|
|
26
|
+
reset() {
|
|
27
|
+
this.container.clear();
|
|
28
|
+
this.hidden = 0;
|
|
29
|
+
this.marker = null;
|
|
30
|
+
}
|
|
31
|
+
get hiddenCount() {
|
|
32
|
+
return this.hidden;
|
|
33
|
+
}
|
|
34
|
+
add(child) {
|
|
35
|
+
this.container.addChild(child);
|
|
36
|
+
this.pruneIfNeeded();
|
|
37
|
+
}
|
|
38
|
+
/** Add a plain transcript line using the theme's text token. */
|
|
39
|
+
addLine(text) {
|
|
40
|
+
this.add(new Text(this.theme.tokens.text(text)));
|
|
41
|
+
}
|
|
42
|
+
markerLabel() {
|
|
43
|
+
return this.theme.tokens.dim(`… ${this.hidden} earlier lines hidden (session retains full history)`);
|
|
44
|
+
}
|
|
45
|
+
pruneIfNeeded() {
|
|
46
|
+
const start = this.marker ? 1 : 0;
|
|
47
|
+
if (this.container.children.length - start <= TRANSCRIPT_MAX_CHILDREN)
|
|
48
|
+
return;
|
|
49
|
+
const removable = Math.min(TRANSCRIPT_PRUNE_COUNT, this.container.children.length - start - 1);
|
|
50
|
+
if (removable <= 0)
|
|
51
|
+
return;
|
|
52
|
+
this.container.children.splice(start, removable);
|
|
53
|
+
this.hidden += removable;
|
|
54
|
+
const label = this.markerLabel();
|
|
55
|
+
if (this.marker) {
|
|
56
|
+
this.marker.setText(label);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.marker = new Text(label);
|
|
60
|
+
this.container.children.unshift(this.marker);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/cli/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAkB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AAEnD,gFAAgF;AAChF,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAC5C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C;;;GAGG;AACH,MAAM,OAAO,UAAU;IACZ,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAC7B,MAAM,GAAG,CAAC,CAAC;IACX,MAAM,GAAgB,IAAI,CAAC;IAC3B,KAAK,CAAQ;IAErB,YAAY,QAAe,SAAS;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,KAAY;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,KAAgB;QAClB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,gEAAgE;IAChE,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAC1B,KAAK,IAAI,CAAC,MAAM,sDAAsD,CACvE,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,IAAI,uBAAuB;YACnE,OAAO;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,sBAAsB,EACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAC3C,CAAC;QACF,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO;QAE3B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface Credentials {
|
|
2
|
+
/** Provider profile name -> raw API key. */
|
|
3
|
+
apiKeys: Record<string, string>;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Load the user's credentials file. Missing or malformed files yield an empty
|
|
7
|
+
* credential set so a broken file never blocks starting the CLI.
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadCredentials(path?: string): Credentials;
|
|
10
|
+
/** Persist an API key for a provider profile with owner-only permissions. */
|
|
11
|
+
export declare function saveApiKey(profile: string, apiKey: string, path?: string): void;
|
|
12
|
+
export declare function removeApiKey(profile: string, path?: string): void;
|
|
13
|
+
export declare function getApiKey(profile: string, path?: string): string | null;
|
|
14
|
+
export declare function hasApiKey(profile: string, opts?: {
|
|
15
|
+
apiKeyEnv?: string | null;
|
|
16
|
+
path?: string;
|
|
17
|
+
}): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a provider key using the same precedence as provider construction:
|
|
20
|
+
* environment variable first, then the stored credential file.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveApiKey(profile: string, opts?: {
|
|
23
|
+
apiKeyEnv?: string | null;
|
|
24
|
+
inline?: string | null;
|
|
25
|
+
path?: string;
|
|
26
|
+
}): string | null;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { defaultCredentialsPath } from "./paths.js";
|
|
4
|
+
function emptyCredentials() {
|
|
5
|
+
return { apiKeys: {} };
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Load the user's credentials file. Missing or malformed files yield an empty
|
|
9
|
+
* credential set so a broken file never blocks starting the CLI.
|
|
10
|
+
*/
|
|
11
|
+
export function loadCredentials(path = defaultCredentialsPath()) {
|
|
12
|
+
if (!existsSync(path))
|
|
13
|
+
return emptyCredentials();
|
|
14
|
+
try {
|
|
15
|
+
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
16
|
+
if (!raw || typeof raw !== "object")
|
|
17
|
+
return emptyCredentials();
|
|
18
|
+
const apiKeys = raw.apiKeys;
|
|
19
|
+
if (!apiKeys || typeof apiKeys !== "object")
|
|
20
|
+
return emptyCredentials();
|
|
21
|
+
const out = {};
|
|
22
|
+
for (const [name, value] of Object.entries(apiKeys)) {
|
|
23
|
+
if (typeof value === "string" && value)
|
|
24
|
+
out[name] = value;
|
|
25
|
+
}
|
|
26
|
+
return { apiKeys: out };
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return emptyCredentials();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function writeCredentials(creds, path) {
|
|
33
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
34
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
35
|
+
writeFileSync(tmp, JSON.stringify(creds, null, 2) + "\n", {
|
|
36
|
+
encoding: "utf8",
|
|
37
|
+
mode: 0o600,
|
|
38
|
+
});
|
|
39
|
+
renameSync(tmp, path);
|
|
40
|
+
try {
|
|
41
|
+
chmodSync(path, 0o600);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Best effort (e.g., Windows filesystems without POSIX modes).
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Persist an API key for a provider profile with owner-only permissions. */
|
|
48
|
+
export function saveApiKey(profile, apiKey, path = defaultCredentialsPath()) {
|
|
49
|
+
const creds = loadCredentials(path);
|
|
50
|
+
creds.apiKeys[profile] = apiKey.trim();
|
|
51
|
+
writeCredentials(creds, path);
|
|
52
|
+
}
|
|
53
|
+
export function removeApiKey(profile, path = defaultCredentialsPath()) {
|
|
54
|
+
const creds = loadCredentials(path);
|
|
55
|
+
delete creds.apiKeys[profile];
|
|
56
|
+
writeCredentials(creds, path);
|
|
57
|
+
}
|
|
58
|
+
export function getApiKey(profile, path = defaultCredentialsPath()) {
|
|
59
|
+
return loadCredentials(path).apiKeys[profile] ?? null;
|
|
60
|
+
}
|
|
61
|
+
export function hasApiKey(profile, opts = {}) {
|
|
62
|
+
return resolveApiKey(profile, opts) !== null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve a provider key using the same precedence as provider construction:
|
|
66
|
+
* environment variable first, then the stored credential file.
|
|
67
|
+
*/
|
|
68
|
+
export function resolveApiKey(profile, opts = {}) {
|
|
69
|
+
if (opts.apiKeyEnv) {
|
|
70
|
+
const fromEnv = process.env[opts.apiKeyEnv];
|
|
71
|
+
if (fromEnv)
|
|
72
|
+
return fromEnv;
|
|
73
|
+
}
|
|
74
|
+
const stored = getApiKey(profile, opts.path);
|
|
75
|
+
if (stored)
|
|
76
|
+
return stored;
|
|
77
|
+
return opts.inline ?? null;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/config/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare const DEFAULT_CONFIG: {
|
|
2
|
+
defaultProvider: string;
|
|
3
|
+
providers: Record<string, unknown>;
|
|
4
|
+
runtime: {
|
|
5
|
+
bashConcurrency: string;
|
|
6
|
+
approvalMode: string;
|
|
7
|
+
maxIterations: number;
|
|
8
|
+
maxToolCalls: number;
|
|
9
|
+
maxExecutionMs: number;
|
|
10
|
+
maxParallelToolCalls: number;
|
|
11
|
+
maxToolOutputBytes: number;
|
|
12
|
+
maxBashTimeMs: number;
|
|
13
|
+
};
|
|
14
|
+
context: {
|
|
15
|
+
maxInputTokens: number | null;
|
|
16
|
+
reserveOutputTokens: number;
|
|
17
|
+
compactAtPercent: number;
|
|
18
|
+
maxProjectInstructionBytes: number;
|
|
19
|
+
};
|
|
20
|
+
sessions: {
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
retentionDays: number | null;
|
|
23
|
+
};
|
|
24
|
+
ui: {
|
|
25
|
+
theme: string;
|
|
26
|
+
mouse: boolean;
|
|
27
|
+
vimMode: boolean;
|
|
28
|
+
showThinking: boolean;
|
|
29
|
+
};
|
|
30
|
+
mcpServers: Record<string, unknown>;
|
|
31
|
+
extensions: {
|
|
32
|
+
trustedProjects: string[];
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { DEFAULT_LIMITS } from "../types.js";
|
|
2
|
+
export const DEFAULT_CONFIG = {
|
|
3
|
+
defaultProvider: "kilo",
|
|
4
|
+
providers: {
|
|
5
|
+
kilo: {
|
|
6
|
+
type: "openai-compatible",
|
|
7
|
+
baseUrl: "https://api.kilo.ai/api/gateway",
|
|
8
|
+
model: "kilo-auto/free",
|
|
9
|
+
apiKeyEnv: null,
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
runtime: {
|
|
13
|
+
...DEFAULT_LIMITS,
|
|
14
|
+
bashConcurrency: "serial",
|
|
15
|
+
approvalMode: "ask",
|
|
16
|
+
},
|
|
17
|
+
context: {
|
|
18
|
+
maxInputTokens: null,
|
|
19
|
+
reserveOutputTokens: 4096,
|
|
20
|
+
compactAtPercent: 85,
|
|
21
|
+
maxProjectInstructionBytes: 30000,
|
|
22
|
+
},
|
|
23
|
+
sessions: { enabled: true, retentionDays: null },
|
|
24
|
+
ui: {
|
|
25
|
+
theme: "auto",
|
|
26
|
+
mouse: true,
|
|
27
|
+
vimMode: false,
|
|
28
|
+
showThinking: true,
|
|
29
|
+
},
|
|
30
|
+
mcpServers: {},
|
|
31
|
+
extensions: {
|
|
32
|
+
trustedProjects: [],
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe,EAAE,MAAM;IACvB,SAAS,EAAE;QACT,IAAI,EAAE;YACJ,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,iCAAiC;YAC1C,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,IAAI;SAChB;KACyB;IAC5B,OAAO,EAAE;QACP,GAAG,cAAc;QACjB,eAAe,EAAE,QAAQ;QACzB,YAAY,EAAE,KAAK;KACpB;IACD,OAAO,EAAE;QACP,cAAc,EAAE,IAAqB;QACrC,mBAAmB,EAAE,IAAI;QACzB,gBAAgB,EAAE,EAAE;QACpB,0BAA0B,EAAE,KAAK;KAClC;IACD,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAqB,EAAE;IACjE,EAAE,EAAE;QACF,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,IAAI;KACnB;IACD,UAAU,EAAE,EAA6B;IACzC,UAAU,EAAE;QACV,eAAe,EAAE,EAAc;KAChC;CACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Config } from "./schema.js";
|
|
2
|
+
export interface LoadConfigOptions {
|
|
3
|
+
userConfigPath?: string;
|
|
4
|
+
projectRoot?: string;
|
|
5
|
+
overrides?: Partial<Config>;
|
|
6
|
+
/** Receives non-fatal configuration warnings (for example dropped keys). */
|
|
7
|
+
onWarning?: (message: string) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function loadConfig(options?: LoadConfigOptions): Config;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { readFileSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { ConfigSchema } from "./schema.js";
|
|
4
|
+
import { DEFAULT_CONFIG } from "./defaults.js";
|
|
5
|
+
import { defaultUserConfigPath } from "./paths.js";
|
|
6
|
+
function defaultWarning(message) {
|
|
7
|
+
try {
|
|
8
|
+
process.stderr.write(`atom-lite: ${message}\n`);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
// Diagnostics must never break startup.
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function readJsonFile(path) {
|
|
15
|
+
if (!existsSync(path))
|
|
16
|
+
return undefined;
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
throw new Error(`Invalid JSON in config file: ${path}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function ensureUserConfig(path) {
|
|
25
|
+
if (existsSync(path))
|
|
26
|
+
return;
|
|
27
|
+
try {
|
|
28
|
+
mkdirSync(join(path, ".."), { recursive: true });
|
|
29
|
+
writeFileSync(path, JSON.stringify(DEFAULT_CONFIG, null, 2) + "\n", "utf8");
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// Best effort; ignore failures (e.g., read-only filesystem).
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function envOverrides() {
|
|
36
|
+
const out = {};
|
|
37
|
+
if (process.env.ATOM_LITE_PROVIDER)
|
|
38
|
+
out.defaultProvider = process.env.ATOM_LITE_PROVIDER;
|
|
39
|
+
if (process.env.ATOM_LITE_MODEL) {
|
|
40
|
+
// model override applies to all providers is not precise; store as override hint only
|
|
41
|
+
}
|
|
42
|
+
if (process.env.ATOM_LITE_APPROVAL_MODE) {
|
|
43
|
+
out.runtime = { approvalMode: process.env.ATOM_LITE_APPROVAL_MODE };
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
export function loadConfig(options = {}) {
|
|
48
|
+
const userPath = options.userConfigPath ?? defaultUserConfigPath();
|
|
49
|
+
const projectPath = options.projectRoot
|
|
50
|
+
? join(options.projectRoot, ".atom-lite", "config.json")
|
|
51
|
+
: join(process.cwd(), ".atom-lite", "config.json");
|
|
52
|
+
// Auto-create default user config on first run (never overwrite).
|
|
53
|
+
if (options.userConfigPath === undefined) {
|
|
54
|
+
ensureUserConfig(userPath);
|
|
55
|
+
}
|
|
56
|
+
const userRaw = (readJsonFile(userPath) ?? {});
|
|
57
|
+
const projectRaw = (readJsonFile(projectPath) ?? {});
|
|
58
|
+
const warn = options.onWarning ?? defaultWarning;
|
|
59
|
+
if (projectRaw.mcpServers &&
|
|
60
|
+
typeof projectRaw.mcpServers === "object" &&
|
|
61
|
+
Object.keys(projectRaw.mcpServers).length > 0) {
|
|
62
|
+
warn("ignoring mcpServers from project config; MCP servers are user-config only");
|
|
63
|
+
}
|
|
64
|
+
// Precedence (low -> high): defaults, user, project (allowed non-secret),
|
|
65
|
+
// env, overrides. Security-critical user settings (approvalMode) are not
|
|
66
|
+
// overridden by project config.
|
|
67
|
+
const merged = {
|
|
68
|
+
...DEFAULT_CONFIG,
|
|
69
|
+
...userRaw,
|
|
70
|
+
...projectRaw,
|
|
71
|
+
defaultProvider: userRaw.defaultProvider ??
|
|
72
|
+
projectRaw.defaultProvider ??
|
|
73
|
+
DEFAULT_CONFIG.defaultProvider,
|
|
74
|
+
providers: {
|
|
75
|
+
...DEFAULT_CONFIG.providers,
|
|
76
|
+
...(userRaw.providers ?? {}),
|
|
77
|
+
...(projectRaw.providers ?? {}),
|
|
78
|
+
},
|
|
79
|
+
runtime: {
|
|
80
|
+
...DEFAULT_CONFIG.runtime,
|
|
81
|
+
...(userRaw.runtime ?? {}),
|
|
82
|
+
...(projectRaw.runtime ?? {}),
|
|
83
|
+
},
|
|
84
|
+
context: {
|
|
85
|
+
...DEFAULT_CONFIG.context,
|
|
86
|
+
...(userRaw.context ?? {}),
|
|
87
|
+
...(projectRaw.context ?? {}),
|
|
88
|
+
},
|
|
89
|
+
sessions: {
|
|
90
|
+
...DEFAULT_CONFIG.sessions,
|
|
91
|
+
...(userRaw.sessions ?? {}),
|
|
92
|
+
...(projectRaw.sessions ?? {}),
|
|
93
|
+
},
|
|
94
|
+
// UI settings are user-owned: a repository must not change the user's
|
|
95
|
+
// colours, mouse capture, or editor behaviour just by being opened.
|
|
96
|
+
ui: {
|
|
97
|
+
...DEFAULT_CONFIG.ui,
|
|
98
|
+
...(userRaw.ui ?? {}),
|
|
99
|
+
},
|
|
100
|
+
// Extensions trust is user-owned.
|
|
101
|
+
extensions: {
|
|
102
|
+
trustedProjects: [
|
|
103
|
+
...(userRaw.extensions?.trustedProjects ??
|
|
104
|
+
[]),
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
// MCP servers are user-owned: opening a repository must never launch a
|
|
108
|
+
// process. Project entries are dropped above with a warning.
|
|
109
|
+
mcpServers: {
|
|
110
|
+
...(userRaw.mcpServers ?? {}),
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
// Protect security-critical user settings from project override.
|
|
114
|
+
const userRuntime = userRaw.runtime ?? {};
|
|
115
|
+
const mergedRuntime = merged.runtime ?? {};
|
|
116
|
+
mergedRuntime.approvalMode = userRuntime.approvalMode ?? "ask";
|
|
117
|
+
merged.runtime = mergedRuntime;
|
|
118
|
+
// no fallback; trust explicit configuration
|
|
119
|
+
const env = envOverrides();
|
|
120
|
+
const mergedWithEnv = {
|
|
121
|
+
...merged,
|
|
122
|
+
...(env.defaultProvider ? { defaultProvider: env.defaultProvider } : {}),
|
|
123
|
+
runtime: { ...merged.runtime, ...(env.runtime ?? {}) },
|
|
124
|
+
};
|
|
125
|
+
const parsed = ConfigSchema.safeParse({
|
|
126
|
+
...mergedWithEnv,
|
|
127
|
+
...(options.overrides ?? {}),
|
|
128
|
+
});
|
|
129
|
+
if (!parsed.success) {
|
|
130
|
+
const issues = parsed.error.issues
|
|
131
|
+
.map((i) => `${i.path.join(".")}: ${i.message}`)
|
|
132
|
+
.join("; ");
|
|
133
|
+
throw new Error(`Invalid configuration: ${issues}`);
|
|
134
|
+
}
|
|
135
|
+
return parsed.data;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
/** Base directory for all user-level Atom-lite state. */
|
|
4
|
+
export function userConfigDir() {
|
|
5
|
+
const base = process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config");
|
|
6
|
+
return join(base, "atom-lite");
|
|
7
|
+
}
|
|
8
|
+
export function defaultUserConfigPath() {
|
|
9
|
+
return join(userConfigDir(), "config.json");
|
|
10
|
+
}
|
|
11
|
+
export function defaultCredentialsPath() {
|
|
12
|
+
return join(userConfigDir(), "credentials.json");
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,yDAAyD;AACzD,MAAM,UAAU,aAAa;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const ProviderConfigSchema: z.ZodObject<{
|
|
3
|
+
type: z.ZodString;
|
|
4
|
+
baseUrl: z.ZodOptional<z.ZodString>;
|
|
5
|
+
model: z.ZodString;
|
|
6
|
+
apiKeyEnv: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
7
|
+
apiKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
8
|
+
keepAlive: z.ZodOptional<z.ZodString>;
|
|
9
|
+
think: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
|
|
10
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
11
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
12
|
+
contextWindow: z.ZodOptional<z.ZodNumber>;
|
|
13
|
+
}, z.core.$strict>;
|
|
14
|
+
export declare const RuntimeConfigSchema: z.ZodObject<{
|
|
15
|
+
maxIterations: z.ZodDefault<z.ZodNumber>;
|
|
16
|
+
maxToolCalls: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
maxExecutionMs: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
maxParallelToolCalls: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
maxToolOutputBytes: z.ZodDefault<z.ZodNumber>;
|
|
20
|
+
maxBashTimeMs: z.ZodDefault<z.ZodNumber>;
|
|
21
|
+
bashConcurrency: z.ZodDefault<z.ZodEnum<{
|
|
22
|
+
serial: "serial";
|
|
23
|
+
parallel: "parallel";
|
|
24
|
+
}>>;
|
|
25
|
+
approvalMode: z.ZodDefault<z.ZodEnum<{
|
|
26
|
+
ask: "ask";
|
|
27
|
+
trusted: "trusted";
|
|
28
|
+
deny: "deny";
|
|
29
|
+
}>>;
|
|
30
|
+
}, z.core.$strict>;
|
|
31
|
+
export declare const ContextConfigSchema: z.ZodObject<{
|
|
32
|
+
maxInputTokens: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
33
|
+
reserveOutputTokens: z.ZodDefault<z.ZodNumber>;
|
|
34
|
+
compactAtPercent: z.ZodDefault<z.ZodNumber>;
|
|
35
|
+
maxProjectInstructionBytes: z.ZodDefault<z.ZodNumber>;
|
|
36
|
+
}, z.core.$strict>;
|
|
37
|
+
export declare const SessionsConfigSchema: z.ZodObject<{
|
|
38
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
39
|
+
retentionDays: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
40
|
+
}, z.core.$strict>;
|
|
41
|
+
export declare const UiConfigSchema: z.ZodObject<{
|
|
42
|
+
theme: z.ZodDefault<z.ZodString>;
|
|
43
|
+
mouse: z.ZodDefault<z.ZodBoolean>;
|
|
44
|
+
vimMode: z.ZodDefault<z.ZodBoolean>;
|
|
45
|
+
showThinking: z.ZodDefault<z.ZodBoolean>;
|
|
46
|
+
}, z.core.$strict>;
|
|
47
|
+
export declare const McpServerConfigSchema: z.ZodObject<{
|
|
48
|
+
command: z.ZodString;
|
|
49
|
+
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
50
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
51
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
52
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
53
|
+
requiresApproval: z.ZodDefault<z.ZodBoolean>;
|
|
54
|
+
startupTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
55
|
+
callTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
56
|
+
}, z.core.$strict>;
|
|
57
|
+
export declare const McpServersConfigSchema: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
58
|
+
command: z.ZodString;
|
|
59
|
+
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
60
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
61
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
62
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
63
|
+
requiresApproval: z.ZodDefault<z.ZodBoolean>;
|
|
64
|
+
startupTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
65
|
+
callTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
66
|
+
}, z.core.$strict>>>;
|
|
67
|
+
export declare const ExtensionsConfigSchema: z.ZodObject<{
|
|
68
|
+
trustedProjects: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
69
|
+
}, z.core.$strict>;
|
|
70
|
+
export declare const ConfigSchema: z.ZodObject<{
|
|
71
|
+
defaultProvider: z.ZodDefault<z.ZodString>;
|
|
72
|
+
providers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
73
|
+
type: z.ZodString;
|
|
74
|
+
baseUrl: z.ZodOptional<z.ZodString>;
|
|
75
|
+
model: z.ZodString;
|
|
76
|
+
apiKeyEnv: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
77
|
+
apiKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
78
|
+
keepAlive: z.ZodOptional<z.ZodString>;
|
|
79
|
+
think: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
|
|
80
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
81
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
82
|
+
contextWindow: z.ZodOptional<z.ZodNumber>;
|
|
83
|
+
}, z.core.$strict>>>;
|
|
84
|
+
runtime: z.ZodPrefault<z.ZodObject<{
|
|
85
|
+
maxIterations: z.ZodDefault<z.ZodNumber>;
|
|
86
|
+
maxToolCalls: z.ZodDefault<z.ZodNumber>;
|
|
87
|
+
maxExecutionMs: z.ZodDefault<z.ZodNumber>;
|
|
88
|
+
maxParallelToolCalls: z.ZodDefault<z.ZodNumber>;
|
|
89
|
+
maxToolOutputBytes: z.ZodDefault<z.ZodNumber>;
|
|
90
|
+
maxBashTimeMs: z.ZodDefault<z.ZodNumber>;
|
|
91
|
+
bashConcurrency: z.ZodDefault<z.ZodEnum<{
|
|
92
|
+
serial: "serial";
|
|
93
|
+
parallel: "parallel";
|
|
94
|
+
}>>;
|
|
95
|
+
approvalMode: z.ZodDefault<z.ZodEnum<{
|
|
96
|
+
ask: "ask";
|
|
97
|
+
trusted: "trusted";
|
|
98
|
+
deny: "deny";
|
|
99
|
+
}>>;
|
|
100
|
+
}, z.core.$strict>>;
|
|
101
|
+
context: z.ZodPrefault<z.ZodObject<{
|
|
102
|
+
maxInputTokens: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
103
|
+
reserveOutputTokens: z.ZodDefault<z.ZodNumber>;
|
|
104
|
+
compactAtPercent: z.ZodDefault<z.ZodNumber>;
|
|
105
|
+
maxProjectInstructionBytes: z.ZodDefault<z.ZodNumber>;
|
|
106
|
+
}, z.core.$strict>>;
|
|
107
|
+
sessions: z.ZodPrefault<z.ZodObject<{
|
|
108
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
109
|
+
retentionDays: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
110
|
+
}, z.core.$strict>>;
|
|
111
|
+
ui: z.ZodPrefault<z.ZodObject<{
|
|
112
|
+
theme: z.ZodDefault<z.ZodString>;
|
|
113
|
+
mouse: z.ZodDefault<z.ZodBoolean>;
|
|
114
|
+
vimMode: z.ZodDefault<z.ZodBoolean>;
|
|
115
|
+
showThinking: z.ZodDefault<z.ZodBoolean>;
|
|
116
|
+
}, z.core.$strict>>;
|
|
117
|
+
mcpServers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
118
|
+
command: z.ZodString;
|
|
119
|
+
args: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
120
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
121
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
122
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
123
|
+
requiresApproval: z.ZodDefault<z.ZodBoolean>;
|
|
124
|
+
startupTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
125
|
+
callTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
126
|
+
}, z.core.$strict>>>;
|
|
127
|
+
extensions: z.ZodPrefault<z.ZodObject<{
|
|
128
|
+
trustedProjects: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
129
|
+
}, z.core.$strict>>;
|
|
130
|
+
}, z.core.$strict>;
|
|
131
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
132
|
+
export type McpServerConfig = z.infer<typeof McpServerConfigSchema>;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const ProviderConfigSchema = z
|
|
3
|
+
.object({
|
|
4
|
+
type: z.string(),
|
|
5
|
+
baseUrl: z.string().url().optional(),
|
|
6
|
+
model: z.string(),
|
|
7
|
+
apiKeyEnv: z.string().nullable().optional(),
|
|
8
|
+
apiKey: z.string().nullable().optional(),
|
|
9
|
+
keepAlive: z.string().optional(),
|
|
10
|
+
think: z.union([z.boolean(), z.string()]).optional(),
|
|
11
|
+
headers: z.record(z.string(), z.string()).optional(),
|
|
12
|
+
options: z.record(z.string(), z.unknown()).optional(),
|
|
13
|
+
/** Explicit context window for custom/local models without metadata. */
|
|
14
|
+
contextWindow: z.number().int().positive().optional(),
|
|
15
|
+
})
|
|
16
|
+
.strict();
|
|
17
|
+
export const RuntimeConfigSchema = z
|
|
18
|
+
.object({
|
|
19
|
+
maxIterations: z.number().int().positive().default(40),
|
|
20
|
+
maxToolCalls: z.number().int().positive().default(100),
|
|
21
|
+
maxExecutionMs: z.number().int().positive().default(1_800_000),
|
|
22
|
+
maxParallelToolCalls: z.number().int().positive().default(4),
|
|
23
|
+
maxToolOutputBytes: z.number().int().positive().default(30_000),
|
|
24
|
+
maxBashTimeMs: z.number().int().positive().default(120_000),
|
|
25
|
+
bashConcurrency: z.enum(["serial", "parallel"]).default("serial"),
|
|
26
|
+
approvalMode: z.enum(["ask", "trusted", "deny"]).default("ask"),
|
|
27
|
+
})
|
|
28
|
+
.strict();
|
|
29
|
+
export const ContextConfigSchema = z
|
|
30
|
+
.object({
|
|
31
|
+
maxInputTokens: z.number().int().positive().nullable().default(null),
|
|
32
|
+
reserveOutputTokens: z.number().int().positive().default(4096),
|
|
33
|
+
compactAtPercent: z.number().int().min(1).max(100).default(85),
|
|
34
|
+
maxProjectInstructionBytes: z.number().int().positive().default(30000),
|
|
35
|
+
})
|
|
36
|
+
.strict();
|
|
37
|
+
export const SessionsConfigSchema = z
|
|
38
|
+
.object({
|
|
39
|
+
enabled: z.boolean().default(true),
|
|
40
|
+
retentionDays: z.number().int().positive().nullable().default(null),
|
|
41
|
+
})
|
|
42
|
+
.strict();
|
|
43
|
+
export const UiConfigSchema = z
|
|
44
|
+
.object({
|
|
45
|
+
theme: z.string().default("auto"),
|
|
46
|
+
mouse: z.boolean().default(true),
|
|
47
|
+
vimMode: z.boolean().default(false),
|
|
48
|
+
showThinking: z.boolean().default(true),
|
|
49
|
+
})
|
|
50
|
+
.strict();
|
|
51
|
+
export const McpServerConfigSchema = z
|
|
52
|
+
.object({
|
|
53
|
+
command: z.string().min(1),
|
|
54
|
+
args: z.array(z.string()).default([]),
|
|
55
|
+
env: z.record(z.string(), z.string()).default({}),
|
|
56
|
+
cwd: z.string().optional(),
|
|
57
|
+
enabled: z.boolean().default(true),
|
|
58
|
+
requiresApproval: z.boolean().default(false),
|
|
59
|
+
startupTimeoutMs: z.number().int().positive().default(10_000),
|
|
60
|
+
callTimeoutMs: z.number().int().positive().default(60_000),
|
|
61
|
+
})
|
|
62
|
+
.strict();
|
|
63
|
+
export const McpServersConfigSchema = z
|
|
64
|
+
.record(z.string(), McpServerConfigSchema)
|
|
65
|
+
.default({});
|
|
66
|
+
export const ExtensionsConfigSchema = z
|
|
67
|
+
.object({
|
|
68
|
+
trustedProjects: z.array(z.string()).default([]),
|
|
69
|
+
})
|
|
70
|
+
.strict();
|
|
71
|
+
export const ConfigSchema = z
|
|
72
|
+
.object({
|
|
73
|
+
defaultProvider: z.string().default("openai-compatible"),
|
|
74
|
+
providers: z.record(z.string(), ProviderConfigSchema).default({}),
|
|
75
|
+
runtime: RuntimeConfigSchema.prefault({}),
|
|
76
|
+
context: ContextConfigSchema.prefault({}),
|
|
77
|
+
sessions: SessionsConfigSchema.prefault({}),
|
|
78
|
+
ui: UiConfigSchema.prefault({}),
|
|
79
|
+
mcpServers: McpServersConfigSchema,
|
|
80
|
+
extensions: ExtensionsConfigSchema.prefault({}),
|
|
81
|
+
})
|
|
82
|
+
.strict();
|
|
83
|
+
//# sourceMappingURL=schema.js.map
|