atom-lite 0.0.0-stage → 0.1.0
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 +26 -0
- package/LICENSE +21 -0
- package/README.md +265 -2
- package/dist/agent/loop.d.ts +30 -0
- package/dist/agent/loop.js +199 -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/app.d.ts +1 -0
- package/dist/cli/app.js +1060 -0
- package/dist/cli/app.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 +8 -0
- package/dist/cli/banner.js +29 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/commands.d.ts +19 -0
- package/dist/cli/commands.js +61 -0
- package/dist/cli/commands.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/picker.d.ts +26 -0
- package/dist/cli/picker.js +175 -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 +18 -0
- package/dist/cli/status-line.js +35 -0
- package/dist/cli/status-line.js.map +1 -0
- package/dist/cli/stream-text.d.ts +22 -0
- package/dist/cli/stream-text.js +50 -0
- package/dist/cli/stream-text.js.map +1 -0
- package/dist/cli/transcript.d.ts +17 -0
- package/dist/cli/transcript.js +40 -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 +24 -0
- package/dist/config/defaults.js +25 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/load.d.ts +7 -0
- package/dist/config/load.js +105 -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 +83 -0
- package/dist/config/schema.js +52 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/write.d.ts +18 -0
- package/dist/config/write.js +61 -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/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/index.d.ts +16 -0
- package/dist/index.js +16 -0
- package/dist/index.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 +54 -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/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 +103 -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 +21 -0
- package/dist/sessions/events.js +87 -0
- package/dist/sessions/events.js.map +1 -0
- package/dist/sessions/index.d.ts +3 -0
- package/dist/sessions/index.js +4 -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/store.d.ts +91 -0
- package/dist/sessions/store.js +356 -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 +117 -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 +83 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +74 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type RawUserConfig = Record<string, unknown>;
|
|
2
|
+
/** Read the user's raw config object without applying defaults or validation. */
|
|
3
|
+
export declare function readUserConfig(path?: string): RawUserConfig;
|
|
4
|
+
/** Atomically write a raw user config object, creating the directory if needed. */
|
|
5
|
+
export declare function writeUserConfig(config: RawUserConfig, path?: string): void;
|
|
6
|
+
/** Mutate the user config in place and persist the result. */
|
|
7
|
+
export declare function updateUserConfig(mutate: (config: RawUserConfig) => void, path?: string): RawUserConfig;
|
|
8
|
+
export interface SaveProviderOptions {
|
|
9
|
+
defaultProvider?: string;
|
|
10
|
+
path?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Persist a provider profile selection. Existing user config (other providers,
|
|
14
|
+
* runtime settings, etc.) is preserved.
|
|
15
|
+
*/
|
|
16
|
+
export declare function saveProviderSelection(profile: string, provider: Record<string, unknown>, opts?: SaveProviderOptions): void;
|
|
17
|
+
/** Persist the model chosen for a provider profile. */
|
|
18
|
+
export declare function saveProviderModel(profile: string, model: string, path?: string): void;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { defaultUserConfigPath } from "./paths.js";
|
|
4
|
+
/** Read the user's raw config object without applying defaults or validation. */
|
|
5
|
+
export function readUserConfig(path = defaultUserConfigPath()) {
|
|
6
|
+
if (!existsSync(path))
|
|
7
|
+
return {};
|
|
8
|
+
try {
|
|
9
|
+
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
10
|
+
return raw && typeof raw === "object" ? raw : {};
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return {};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Atomically write a raw user config object, creating the directory if needed. */
|
|
17
|
+
export function writeUserConfig(config, path = defaultUserConfigPath()) {
|
|
18
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
19
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
20
|
+
writeFileSync(tmp, JSON.stringify(config, null, 2) + "\n", "utf8");
|
|
21
|
+
renameSync(tmp, path);
|
|
22
|
+
}
|
|
23
|
+
/** Mutate the user config in place and persist the result. */
|
|
24
|
+
export function updateUserConfig(mutate, path = defaultUserConfigPath()) {
|
|
25
|
+
const config = readUserConfig(path);
|
|
26
|
+
mutate(config);
|
|
27
|
+
writeUserConfig(config, path);
|
|
28
|
+
return config;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Persist a provider profile selection. Existing user config (other providers,
|
|
32
|
+
* runtime settings, etc.) is preserved.
|
|
33
|
+
*/
|
|
34
|
+
export function saveProviderSelection(profile, provider, opts = {}) {
|
|
35
|
+
updateUserConfig((config) => {
|
|
36
|
+
const providers = config.providers && typeof config.providers === "object"
|
|
37
|
+
? config.providers
|
|
38
|
+
: {};
|
|
39
|
+
const existing = providers[profile] && typeof providers[profile] === "object"
|
|
40
|
+
? providers[profile]
|
|
41
|
+
: {};
|
|
42
|
+
providers[profile] = { ...existing, ...provider };
|
|
43
|
+
config.providers = providers;
|
|
44
|
+
if (opts.defaultProvider)
|
|
45
|
+
config.defaultProvider = opts.defaultProvider;
|
|
46
|
+
}, opts.path);
|
|
47
|
+
}
|
|
48
|
+
/** Persist the model chosen for a provider profile. */
|
|
49
|
+
export function saveProviderModel(profile, model, path = defaultUserConfigPath()) {
|
|
50
|
+
updateUserConfig((config) => {
|
|
51
|
+
const providers = config.providers && typeof config.providers === "object"
|
|
52
|
+
? config.providers
|
|
53
|
+
: {};
|
|
54
|
+
const existing = providers[profile] && typeof providers[profile] === "object"
|
|
55
|
+
? providers[profile]
|
|
56
|
+
: {};
|
|
57
|
+
providers[profile] = { ...existing, model };
|
|
58
|
+
config.providers = providers;
|
|
59
|
+
}, path);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/config/write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Token budget helpers. Heuristic estimation: ~4 chars per token.
|
|
2
|
+
export function estimateTokens(text) {
|
|
3
|
+
return Math.ceil(text.length / 4);
|
|
4
|
+
}
|
|
5
|
+
export function estimateMessageTokens(message) {
|
|
6
|
+
try {
|
|
7
|
+
return Math.ceil(JSON.stringify(message).length / 4);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/context/budget.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function compactHistory<T>(history: T[]): T[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/context/compaction.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,UAAU,cAAc,CAAI,OAAY;IAC5C,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { readFileSync, existsSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/** Cheap change detector for a set of files (mtime + size). */
|
|
4
|
+
export function statSignature(paths) {
|
|
5
|
+
return paths
|
|
6
|
+
.map((p) => {
|
|
7
|
+
try {
|
|
8
|
+
const st = statSync(p);
|
|
9
|
+
return `${st.mtimeMs}:${st.size}`;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return "-";
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
.join("|");
|
|
16
|
+
}
|
|
17
|
+
export function loadProjectInstructions(workspace, maxBytes, userInstructionsPath) {
|
|
18
|
+
const out = [];
|
|
19
|
+
if (userInstructionsPath && existsSync(userInstructionsPath)) {
|
|
20
|
+
const buf = readFileSync(userInstructionsPath);
|
|
21
|
+
out.push(buf.subarray(0, maxBytes).toString("utf8"));
|
|
22
|
+
}
|
|
23
|
+
const projectPath = join(workspace, "AGENTS.md");
|
|
24
|
+
if (existsSync(projectPath)) {
|
|
25
|
+
const buf = readFileSync(projectPath);
|
|
26
|
+
out.push(buf.subarray(0, maxBytes).toString("utf8"));
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=instructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/context/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvB,OAAO,GAAG,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,SAAiB,EACjB,QAAgB,EAChB,oBAA6B;IAE7B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,oBAAoB,IAAI,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC/C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Message } from "../types.js";
|
|
2
|
+
import type { ProviderAdapter } from "../providers/types.js";
|
|
3
|
+
export interface ContextManagerOptions {
|
|
4
|
+
systemPrompt: string;
|
|
5
|
+
maxInputTokens: number | null;
|
|
6
|
+
reserveOutputTokens: number;
|
|
7
|
+
compactAtPercent: number;
|
|
8
|
+
maxProjectInstructionBytes: number;
|
|
9
|
+
provider: ProviderAdapter;
|
|
10
|
+
model: string;
|
|
11
|
+
userInstructionsPath?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class ContextManager {
|
|
14
|
+
private opts;
|
|
15
|
+
private instructionCache?;
|
|
16
|
+
private skillCache?;
|
|
17
|
+
private modelContextWindow;
|
|
18
|
+
private compactedThisBuild;
|
|
19
|
+
constructor(opts: ContextManagerOptions);
|
|
20
|
+
/** Update the provider/model used for compaction after a switch. */
|
|
21
|
+
setProvider(provider: ProviderAdapter, model?: string): void;
|
|
22
|
+
/** Use the selected model's real window unless the user pinned a budget. */
|
|
23
|
+
setModelContextWindow(window: number | undefined): void;
|
|
24
|
+
/** True once if the most recent build compacted history. */
|
|
25
|
+
consumeCompaction(): boolean;
|
|
26
|
+
private budget;
|
|
27
|
+
private threshold;
|
|
28
|
+
build(workspace: string, history: Message[]): Promise<Message[]>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { loadProjectInstructions, statSignature } from "./instructions.js";
|
|
4
|
+
import { DefaultSkillRegistry, skillCacheSignature } from "../skills/registry.js";
|
|
5
|
+
import { estimateMessageTokens } from "./budget.js";
|
|
6
|
+
const DEFAULT_MAX_INPUT = 128000;
|
|
7
|
+
export class ContextManager {
|
|
8
|
+
opts;
|
|
9
|
+
instructionCache;
|
|
10
|
+
skillCache;
|
|
11
|
+
modelContextWindow;
|
|
12
|
+
compactedThisBuild = false;
|
|
13
|
+
constructor(opts) {
|
|
14
|
+
this.opts = opts;
|
|
15
|
+
}
|
|
16
|
+
/** Update the provider/model used for compaction after a switch. */
|
|
17
|
+
setProvider(provider, model) {
|
|
18
|
+
this.opts.provider = provider;
|
|
19
|
+
if (model)
|
|
20
|
+
this.opts.model = model;
|
|
21
|
+
}
|
|
22
|
+
/** Use the selected model's real window unless the user pinned a budget. */
|
|
23
|
+
setModelContextWindow(window) {
|
|
24
|
+
this.modelContextWindow = window;
|
|
25
|
+
}
|
|
26
|
+
/** True once if the most recent build compacted history. */
|
|
27
|
+
consumeCompaction() {
|
|
28
|
+
const compacted = this.compactedThisBuild;
|
|
29
|
+
this.compactedThisBuild = false;
|
|
30
|
+
return compacted;
|
|
31
|
+
}
|
|
32
|
+
budget() {
|
|
33
|
+
const max = this.opts.maxInputTokens ?? this.modelContextWindow ?? DEFAULT_MAX_INPUT;
|
|
34
|
+
return Math.max(1000, max - this.opts.reserveOutputTokens);
|
|
35
|
+
}
|
|
36
|
+
threshold() {
|
|
37
|
+
return Math.floor(this.budget() * (this.opts.compactAtPercent / 100));
|
|
38
|
+
}
|
|
39
|
+
async build(workspace, history) {
|
|
40
|
+
this.compactedThisBuild = false;
|
|
41
|
+
const userPath = this.opts.userInstructionsPath ?? join(homedir(), ".config", "atom-lite", "AGENTS.md");
|
|
42
|
+
const instructionSignature = `${this.opts.maxProjectInstructionBytes}|` +
|
|
43
|
+
statSignature([userPath, join(workspace, "AGENTS.md")]);
|
|
44
|
+
let instructions;
|
|
45
|
+
if (this.instructionCache?.signature === instructionSignature) {
|
|
46
|
+
instructions = this.instructionCache.text;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
instructions = loadProjectInstructions(workspace, this.opts.maxProjectInstructionBytes, userPath);
|
|
50
|
+
this.instructionCache = { signature: instructionSignature, text: instructions };
|
|
51
|
+
}
|
|
52
|
+
const skillSignature = skillCacheSignature(workspace);
|
|
53
|
+
let skillIndex;
|
|
54
|
+
if (this.skillCache?.workspace === workspace &&
|
|
55
|
+
this.skillCache.signature === skillSignature) {
|
|
56
|
+
skillIndex = this.skillCache.index;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const registry = new DefaultSkillRegistry(workspace);
|
|
60
|
+
skillIndex = registry.indexText();
|
|
61
|
+
this.skillCache = { workspace, signature: skillSignature, index: skillIndex };
|
|
62
|
+
}
|
|
63
|
+
const systemPrompt = skillIndex
|
|
64
|
+
? `${this.opts.systemPrompt}\n\n${skillIndex}`
|
|
65
|
+
: this.opts.systemPrompt;
|
|
66
|
+
const messages = [{ role: "system", content: systemPrompt }];
|
|
67
|
+
for (const instr of instructions) {
|
|
68
|
+
messages.push({ role: "system", content: instr });
|
|
69
|
+
}
|
|
70
|
+
messages.push(...history);
|
|
71
|
+
const total = messages.reduce((s, m) => s + estimateMessageTokens(m), 0);
|
|
72
|
+
if (total <= this.threshold())
|
|
73
|
+
return messages;
|
|
74
|
+
// Compact: keep last 6 messages verbatim, summarize the rest.
|
|
75
|
+
const keep = Math.min(6, history.length);
|
|
76
|
+
const recent = history.slice(-keep);
|
|
77
|
+
const older = history.slice(0, history.length - keep);
|
|
78
|
+
if (older.length === 0)
|
|
79
|
+
return messages;
|
|
80
|
+
let summaryText = "";
|
|
81
|
+
try {
|
|
82
|
+
const summaryReq = {
|
|
83
|
+
model: this.opts.model,
|
|
84
|
+
messages: [
|
|
85
|
+
{
|
|
86
|
+
role: "system",
|
|
87
|
+
content: "Summarize the following conversation history compactly, preserving changed files, decisions, failing tests, and unfinished work. Output only the summary.",
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
role: "user",
|
|
91
|
+
content: [{ type: "text", text: JSON.stringify(older) }],
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
tools: [],
|
|
95
|
+
};
|
|
96
|
+
const resp = await this.opts.provider.generate(summaryReq);
|
|
97
|
+
summaryText =
|
|
98
|
+
resp.message.content
|
|
99
|
+
?.map((p) => (p.type === "text" ? p.text : ""))
|
|
100
|
+
.join("") ?? "";
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
summaryText = "";
|
|
104
|
+
}
|
|
105
|
+
if (!summaryText) {
|
|
106
|
+
// Fallback: truncate old tool output with marker.
|
|
107
|
+
summaryText = "[Earlier conversation truncated to fit context budget.]";
|
|
108
|
+
}
|
|
109
|
+
this.compactedThisBuild = true;
|
|
110
|
+
const compacted = [
|
|
111
|
+
{ role: "system", content: this.opts.systemPrompt },
|
|
112
|
+
...instructions.map((i) => ({ role: "system", content: i })),
|
|
113
|
+
{
|
|
114
|
+
role: "assistant",
|
|
115
|
+
content: [{ type: "text", text: `Context summary: ${summaryText}` }],
|
|
116
|
+
},
|
|
117
|
+
...recent,
|
|
118
|
+
];
|
|
119
|
+
return compacted;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/context/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { AgentRuntime } from "./agent/loop.js";
|
|
2
|
+
export type { AgentRuntimeOptions } from "./agent/types.js";
|
|
3
|
+
export { loadConfig } from "./config/load.js";
|
|
4
|
+
export type { Config } from "./config/schema.js";
|
|
5
|
+
export { FakeProvider } from "./providers/fake.js";
|
|
6
|
+
export { OpenAICompatibleAdapter } from "./providers/openai-compatible.js";
|
|
7
|
+
export { createProvider } from "./providers/factory.js";
|
|
8
|
+
export { InMemoryProviderRegistry } from "./providers/registry.js";
|
|
9
|
+
export { InMemorySession } from "./sessions/store.js";
|
|
10
|
+
export * from "./sessions/store.js";
|
|
11
|
+
export * from "./sessions/events.js";
|
|
12
|
+
export * from "./sessions/recovery.js";
|
|
13
|
+
export { OllamaAdapter, OllamaProvider } from "./providers/ollama.js";
|
|
14
|
+
export { GeminiAdapter } from "./providers/gemini.js";
|
|
15
|
+
export { InMemoryToolRegistry } from "./tools/registry.js";
|
|
16
|
+
export * from "./types.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Public library entry point.
|
|
2
|
+
export { AgentRuntime } from "./agent/loop.js";
|
|
3
|
+
export { loadConfig } from "./config/load.js";
|
|
4
|
+
export { FakeProvider } from "./providers/fake.js";
|
|
5
|
+
export { OpenAICompatibleAdapter } from "./providers/openai-compatible.js";
|
|
6
|
+
export { createProvider } from "./providers/factory.js";
|
|
7
|
+
export { InMemoryProviderRegistry } from "./providers/registry.js";
|
|
8
|
+
export { InMemorySession } from "./sessions/store.js";
|
|
9
|
+
export * from "./sessions/store.js";
|
|
10
|
+
export * from "./sessions/events.js";
|
|
11
|
+
export * from "./sessions/recovery.js";
|
|
12
|
+
export { OllamaAdapter, OllamaProvider } from "./providers/ollama.js";
|
|
13
|
+
export { GeminiAdapter } from "./providers/gemini.js";
|
|
14
|
+
export { InMemoryToolRegistry } from "./tools/registry.js";
|
|
15
|
+
export * from "./types.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Config } from "../config/schema.js";
|
|
2
|
+
export type ProviderType = "openai-compatible" | "ollama" | "gemini";
|
|
3
|
+
export interface ProviderPreset {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
description: string;
|
|
7
|
+
type: ProviderType;
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
model: string;
|
|
10
|
+
/** True when the provider needs an API key before it can be used. */
|
|
11
|
+
requiresKey: boolean;
|
|
12
|
+
/** Conventional environment variable for the key. */
|
|
13
|
+
keyEnv?: string;
|
|
14
|
+
/** Where a user can create a key. */
|
|
15
|
+
keyUrl?: string;
|
|
16
|
+
headers?: Record<string, string>;
|
|
17
|
+
/** Shown before live model discovery completes (and as an offline fallback). */
|
|
18
|
+
fallbackModels: string[];
|
|
19
|
+
local?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Curated provider catalog. Hosted providers use the OpenAI-compatible adapter
|
|
23
|
+
* (Anthropic exposes an OpenAI-compatible endpoint); Gemini uses its native
|
|
24
|
+
* adapter; local runtimes are keyless.
|
|
25
|
+
*/
|
|
26
|
+
export declare const PROVIDER_PRESETS: ProviderPreset[];
|
|
27
|
+
export declare function getPreset(id: string): ProviderPreset | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Build the provider profile stored in config from a preset, preserving any
|
|
30
|
+
* model the user already chose.
|
|
31
|
+
*/
|
|
32
|
+
export declare function materializeProviderConfig(preset: ProviderPreset, existing?: Record<string, unknown>): Record<string, unknown>;
|
|
33
|
+
/**
|
|
34
|
+
* Provider profiles that should appear in `/model`: explicitly configured
|
|
35
|
+
* profiles, profiles with a stored credential, and presets whose key is in the
|
|
36
|
+
* environment.
|
|
37
|
+
*/
|
|
38
|
+
export declare function availableProviderNames(config: Config, credentialsPath?: string): string[];
|
|
39
|
+
export declare function providerLabel(id: string): string;
|
|
40
|
+
/** Filter out models that clearly cannot be used for a chat/tool call. */
|
|
41
|
+
export declare function isLikelyChatModel(id: string): boolean;
|
|
42
|
+
export declare function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T>;
|
|
43
|
+
/**
|
|
44
|
+
* Ask a configured provider for its models. Failures are returned as an empty
|
|
45
|
+
* list so callers can fall back to the configured model.
|
|
46
|
+
*/
|
|
47
|
+
export declare function listModelsForProvider(config: Config, profile: string, timeoutMs?: number): Promise<string[]>;
|
|
48
|
+
export interface KeyProbeResult {
|
|
49
|
+
ok: boolean;
|
|
50
|
+
/** Authentication was explicitly rejected (401/403). */
|
|
51
|
+
invalid: boolean;
|
|
52
|
+
models: string[];
|
|
53
|
+
error?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Validate an API key before persisting it. Reaches the provider's model list
|
|
57
|
+
* endpoint directly so auth failures are visible (the adapters intentionally
|
|
58
|
+
* swallow list errors and fall back to the configured model).
|
|
59
|
+
*/
|
|
60
|
+
export declare function probeApiKey(preset: ProviderPreset, apiKey: string, timeoutMs?: number): Promise<KeyProbeResult>;
|