@curie-agent/core 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +179 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/channel-router.js +1 -1
- package/dist/src/channel-router.js.map +1 -1
- package/dist/src/context.d.ts +11 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +63 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/cron-manager.d.ts +27 -8
- package/dist/src/cron-manager.d.ts.map +1 -1
- package/dist/src/cron-manager.js +121 -33
- package/dist/src/cron-manager.js.map +1 -1
- package/dist/src/event-bus.d.ts +71 -0
- package/dist/src/event-bus.d.ts.map +1 -1
- package/dist/src/event-bus.js.map +1 -1
- package/dist/src/heartbeat-delivery.d.ts +2 -0
- package/dist/src/heartbeat-delivery.d.ts.map +1 -1
- package/dist/src/heartbeat-delivery.js +20 -3
- package/dist/src/heartbeat-delivery.js.map +1 -1
- package/dist/src/heartbeat-executor.d.ts +36 -2
- package/dist/src/heartbeat-executor.d.ts.map +1 -1
- package/dist/src/heartbeat-executor.js +32 -40
- package/dist/src/heartbeat-executor.js.map +1 -1
- package/dist/src/identity-files.d.ts +18 -0
- package/dist/src/identity-files.d.ts.map +1 -0
- package/dist/src/identity-files.js +198 -0
- package/dist/src/identity-files.js.map +1 -0
- package/dist/src/index.d.ts +18 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/pricing.d.ts +29 -0
- package/dist/src/pricing.d.ts.map +1 -0
- package/dist/src/pricing.js +85 -0
- package/dist/src/pricing.js.map +1 -0
- package/dist/src/safety/path-guard.d.ts +7 -3
- package/dist/src/safety/path-guard.d.ts.map +1 -1
- package/dist/src/safety/path-guard.js +14 -5
- package/dist/src/safety/path-guard.js.map +1 -1
- package/dist/src/session-store.d.ts +3 -1
- package/dist/src/session-store.d.ts.map +1 -1
- package/dist/src/session-store.js +24 -1
- package/dist/src/session-store.js.map +1 -1
- package/dist/src/settings.d.ts +91 -1
- package/dist/src/settings.d.ts.map +1 -1
- package/dist/src/settings.js +353 -82
- package/dist/src/settings.js.map +1 -1
- package/dist/src/subagent-executor.d.ts +68 -0
- package/dist/src/subagent-executor.d.ts.map +1 -0
- package/dist/src/subagent-executor.js +289 -0
- package/dist/src/subagent-executor.js.map +1 -0
- package/dist/src/task-executor.d.ts +31 -0
- package/dist/src/task-executor.d.ts.map +1 -0
- package/dist/src/task-executor.js +91 -0
- package/dist/src/task-executor.js.map +1 -0
- package/dist/src/task-manager.d.ts +83 -0
- package/dist/src/task-manager.d.ts.map +1 -0
- package/dist/src/task-manager.js +304 -0
- package/dist/src/task-manager.js.map +1 -0
- package/dist/src/task-migration.d.ts +10 -0
- package/dist/src/task-migration.d.ts.map +1 -0
- package/dist/src/task-migration.js +144 -0
- package/dist/src/task-migration.js.map +1 -0
- package/dist/src/task-summary.d.ts +7 -0
- package/dist/src/task-summary.d.ts.map +1 -0
- package/dist/src/task-summary.js +34 -0
- package/dist/src/task-summary.js.map +1 -0
- package/dist/src/token-monitor.d.ts +50 -0
- package/dist/src/token-monitor.d.ts.map +1 -0
- package/dist/src/token-monitor.js +119 -0
- package/dist/src/token-monitor.js.map +1 -0
- package/dist/src/turn-loop.d.ts +7 -1
- package/dist/src/turn-loop.d.ts.map +1 -1
- package/dist/src/turn-loop.js +42 -11
- package/dist/src/turn-loop.js.map +1 -1
- package/dist/src/unified-task.d.ts +76 -0
- package/dist/src/unified-task.d.ts.map +1 -0
- package/dist/src/unified-task.js +196 -0
- package/dist/src/unified-task.js.map +1 -0
- package/package.json +10 -10
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a MODEL_COST string into structured tiers.
|
|
3
|
+
*
|
|
4
|
+
* Flat format: "0.25;1.50" → single tier with no threshold.
|
|
5
|
+
* Tiered format: "0.25;1.50|200000<1.0;4.0" → base tier + one or more thresholded tiers.
|
|
6
|
+
*
|
|
7
|
+
* Tiers are separated by '|'. Each tiered segment uses "threshold<input;output>".
|
|
8
|
+
* Returns empty array if the string is malformed.
|
|
9
|
+
*/
|
|
10
|
+
export function parseTieredPricing(cost) {
|
|
11
|
+
// If no tier delimiter '|', treat as flat pricing (backward compatible)
|
|
12
|
+
if (!cost.includes('|')) {
|
|
13
|
+
const [inStr = '', outStr = ''] = cost.split(';');
|
|
14
|
+
const inC = parseFloat(inStr);
|
|
15
|
+
const outC = parseFloat(outStr);
|
|
16
|
+
if (!isNaN(inC) && !isNaN(outC))
|
|
17
|
+
return [{ in: inC, out: outC }];
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
const rawTiers = cost.split('|').map(s => s.trim());
|
|
21
|
+
const tiers = [];
|
|
22
|
+
const [inStr = '', outStr = ''] = rawTiers[0]?.split(';') ?? ['', ''];
|
|
23
|
+
const baseIn = parseFloat(inStr);
|
|
24
|
+
const baseOut = parseFloat(outStr);
|
|
25
|
+
if (isNaN(baseIn) || isNaN(baseOut))
|
|
26
|
+
return [];
|
|
27
|
+
tiers.push({ in: baseIn, out: baseOut });
|
|
28
|
+
for (let i = 1; i < rawTiers.length; i++) {
|
|
29
|
+
const tier = rawTiers[i];
|
|
30
|
+
// Tiered segment: "threshold<input;output>"
|
|
31
|
+
const pipeIdx = tier.indexOf('<');
|
|
32
|
+
if (pipeIdx === -1)
|
|
33
|
+
break;
|
|
34
|
+
const threshold = parseInt(tier.substring(0, pipeIdx).trim(), 10);
|
|
35
|
+
const rest = tier.substring(pipeIdx + 1).trim();
|
|
36
|
+
const [tierInStr = '', tierOutStr = ''] = rest.split(';');
|
|
37
|
+
const tierIn = parseFloat(tierInStr);
|
|
38
|
+
const tierOut = parseFloat(tierOutStr);
|
|
39
|
+
if (isNaN(threshold) || isNaN(tierIn) || isNaN(tierOut))
|
|
40
|
+
break;
|
|
41
|
+
tiers.push({ threshold, in: tierIn, out: tierOut });
|
|
42
|
+
}
|
|
43
|
+
return tiers;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Select the pricing tier applicable for a given total token count.
|
|
47
|
+
* Walks tiers top-to-bottom; the highest threshold that totalTokens >= threshold wins.
|
|
48
|
+
* Falls back to the base tier (index 0) if no threshold is exceeded.
|
|
49
|
+
*/
|
|
50
|
+
export function selectTier(tiers, totalTokens) {
|
|
51
|
+
let result = [tiers[0]?.in ?? 0, tiers[0]?.out ?? 0];
|
|
52
|
+
for (const tier of tiers) {
|
|
53
|
+
if (tier.threshold !== undefined && totalTokens >= tier.threshold) {
|
|
54
|
+
result = [tier.in, tier.out];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Estimate the USD cost of a token exchange given model and optional custom pricing.
|
|
61
|
+
*
|
|
62
|
+
* Uses custom pricing (flat or tiered) when provided, otherwise falls back
|
|
63
|
+
* to hardcoded Claude model rates.
|
|
64
|
+
*/
|
|
65
|
+
export function estimateCost(model, inputTokens, outputTokens, customCost) {
|
|
66
|
+
if (customCost) {
|
|
67
|
+
const tiers = parseTieredPricing(customCost);
|
|
68
|
+
if (tiers.length > 0) {
|
|
69
|
+
const [inC, outC] = selectTier(tiers, inputTokens + outputTokens);
|
|
70
|
+
if (!isNaN(inC) && !isNaN(outC)) {
|
|
71
|
+
return (inputTokens * inC + outputTokens * outC) / 1_000_000;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Rough per-million-token pricing in USD; fall back to Sonnet rates.
|
|
76
|
+
const pricing = {
|
|
77
|
+
'claude-opus': { in: 15, out: 75 },
|
|
78
|
+
'claude-sonnet': { in: 3, out: 15 },
|
|
79
|
+
'claude-haiku': { in: 0.8, out: 4 },
|
|
80
|
+
};
|
|
81
|
+
const key = Object.keys(pricing).find(k => model.includes(k)) || 'claude-sonnet';
|
|
82
|
+
const p = pricing[key];
|
|
83
|
+
return (inputTokens * p.in + outputTokens * p.out) / 1_000_000;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/pricing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
/** Parse comma-separated
|
|
2
|
-
export declare function parseAllowlist(raw:
|
|
1
|
+
/** Parse a comma-separated string or JSON array of paths into an absolute path array. */
|
|
2
|
+
export declare function parseAllowlist(raw: unknown): string[];
|
|
3
|
+
/** Expand `~` to the user's home directory using path.join for cross-platform safety. */
|
|
4
|
+
export declare function expandPath(p: string): string;
|
|
5
|
+
/** The ~/.curie-agent directory — always allowed. */
|
|
6
|
+
export declare function curieAgentDir(): string;
|
|
3
7
|
/**
|
|
4
|
-
* Check whether `targetPath` is inside `cwd
|
|
8
|
+
* Check whether `targetPath` is inside `cwd`, `~/.curie-agent`, or any path in `allowlist`.
|
|
5
9
|
*/
|
|
6
10
|
export declare function isPathAllowed(targetPath: string, cwd: string, allowlist: string[]): boolean;
|
|
7
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-guard.d.ts","sourceRoot":"","sources":["../../../src/safety/path-guard.ts"],"names":[],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"path-guard.d.ts","sourceRoot":"","sources":["../../../src/safety/path-guard.ts"],"names":[],"mappings":"AAIA,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAIrD;AAED,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG5C;AAkBD,qDAAqD;AACrD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAYtC"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
|
-
/** Parse comma-separated
|
|
4
|
+
/** Parse a comma-separated string or JSON array of paths into an absolute path array. */
|
|
5
5
|
export function parseAllowlist(raw) {
|
|
6
|
-
if (
|
|
6
|
+
if (Array.isArray(raw))
|
|
7
|
+
return raw.filter((v) => typeof v === 'string').map(expandPath);
|
|
8
|
+
if (typeof raw !== 'string' || !raw)
|
|
7
9
|
return [];
|
|
8
10
|
return raw.split(',').map(s => s.trim()).filter(Boolean).map(expandPath);
|
|
9
11
|
}
|
|
10
|
-
|
|
12
|
+
/** Expand `~` to the user's home directory using path.join for cross-platform safety. */
|
|
13
|
+
export function expandPath(p) {
|
|
11
14
|
if (p.startsWith('~/') || p === '~')
|
|
12
|
-
return homedir()
|
|
15
|
+
return path.join(homedir(), p.slice(1));
|
|
13
16
|
return p;
|
|
14
17
|
}
|
|
15
18
|
/** Resolve a path via realpathSync (resolves symlinks) or fall back to resolve. */
|
|
@@ -27,14 +30,20 @@ function startsWith(haystack, prefix) {
|
|
|
27
30
|
const b = process.platform === 'win32' ? prefix.toLowerCase() : prefix;
|
|
28
31
|
return a === b || a.startsWith(b + path.sep);
|
|
29
32
|
}
|
|
33
|
+
/** The ~/.curie-agent directory — always allowed. */
|
|
34
|
+
export function curieAgentDir() {
|
|
35
|
+
return path.join(homedir(), '.curie-agent');
|
|
36
|
+
}
|
|
30
37
|
/**
|
|
31
|
-
* Check whether `targetPath` is inside `cwd
|
|
38
|
+
* Check whether `targetPath` is inside `cwd`, `~/.curie-agent`, or any path in `allowlist`.
|
|
32
39
|
*/
|
|
33
40
|
export function isPathAllowed(targetPath, cwd, allowlist) {
|
|
34
41
|
const t = normalize(targetPath);
|
|
35
42
|
const c = normalize(cwd);
|
|
36
43
|
if (startsWith(t, c))
|
|
37
44
|
return true;
|
|
45
|
+
if (startsWith(t, normalize(curieAgentDir())))
|
|
46
|
+
return true;
|
|
38
47
|
return allowlist.some(a => startsWith(t, normalize(a)));
|
|
39
48
|
}
|
|
40
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-guard.js","sourceRoot":"","sources":["../../../src/safety/path-guard.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,
|
|
1
|
+
{"version":3,"file":"path-guard.js","sourceRoot":"","sources":["../../../src/safety/path-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export interface SessionInfo {
|
|
|
6
6
|
provider: string;
|
|
7
7
|
createdAt: number;
|
|
8
8
|
updatedAt: number;
|
|
9
|
+
name?: string;
|
|
10
|
+
type?: string;
|
|
9
11
|
}
|
|
10
12
|
export interface SessionFile {
|
|
11
13
|
path: string;
|
|
@@ -20,7 +22,7 @@ export declare class SessionStore {
|
|
|
20
22
|
eventsPath(id: string): string;
|
|
21
23
|
metadataPath(id: string): string;
|
|
22
24
|
getFiles(id: string): SessionFile;
|
|
23
|
-
create(cwd: string, model: string, provider: string): SessionInfo;
|
|
25
|
+
create(cwd: string, model: string, provider: string, type?: string): SessionInfo;
|
|
24
26
|
load(id: string): SessionInfo | undefined;
|
|
25
27
|
loadEvents(id: string): Event[];
|
|
26
28
|
appendEvent(id: string, event: Event): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/session-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/session-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAoB/C;AAED,qBAAa,YAAY;IACJ,OAAO,EAAE,MAAM;gBAAf,OAAO,GAAE,MAA4D;IAExF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI/B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI9B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIhC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW;IAQjC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW;IAgBhF,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMzC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE;IAW/B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAI3C,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IA4B/C,IAAI,IAAI,WAAW,EAAE;IAYrB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOxB,OAAO,CAAC,KAAK;CAQd"}
|
|
@@ -43,10 +43,13 @@ export class SessionStore {
|
|
|
43
43
|
metadata: this.metadataPath(id),
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
create(cwd, model, provider) {
|
|
46
|
+
create(cwd, model, provider, type) {
|
|
47
47
|
const id = ulid();
|
|
48
48
|
const now = Date.now();
|
|
49
49
|
const info = { id, cwd, model, provider, createdAt: now, updatedAt: now };
|
|
50
|
+
if (type) {
|
|
51
|
+
info.type = type;
|
|
52
|
+
}
|
|
50
53
|
const dir = this.sessionPath(id);
|
|
51
54
|
fs.mkdirSync(dir, { recursive: true });
|
|
52
55
|
fs.writeFileSync(this.metadataPath(id), JSON.stringify(info, null, 2) + '\n');
|
|
@@ -78,6 +81,26 @@ export class SessionStore {
|
|
|
78
81
|
const eventsPath = this.eventsPath(id);
|
|
79
82
|
const data = events.map((e) => JSON.stringify(e)).join('\n') + '\n';
|
|
80
83
|
fs.appendFileSync(eventsPath, data, 'utf-8');
|
|
84
|
+
// Auto-generate session name from first 20 characters of the first user message (which is not a slash command)
|
|
85
|
+
const userPromptEvent = events.find(e => e.type === 'user-prompt');
|
|
86
|
+
if (userPromptEvent && 'text' in userPromptEvent && typeof userPromptEvent.text === 'string') {
|
|
87
|
+
const text = userPromptEvent.text.trim();
|
|
88
|
+
if (text && !text.startsWith('/')) {
|
|
89
|
+
const metaPath = this.metadataPath(id);
|
|
90
|
+
if (fs.existsSync(metaPath)) {
|
|
91
|
+
try {
|
|
92
|
+
const info = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
|
|
93
|
+
if (!info.name) {
|
|
94
|
+
info.name = text.slice(0, 20);
|
|
95
|
+
fs.writeFileSync(metaPath, JSON.stringify(info, null, 2) + '\n');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
console.error(`[session-store] Failed to save session name:`, err);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
81
104
|
this.touch(id);
|
|
82
105
|
}
|
|
83
106
|
list() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/session-store.ts"],"names":[],"mappings":"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"}
|
package/dist/src/settings.d.ts
CHANGED
|
@@ -1,3 +1,48 @@
|
|
|
1
|
+
export interface ProviderConfig {
|
|
2
|
+
api_key: string;
|
|
3
|
+
url: string;
|
|
4
|
+
model: string;
|
|
5
|
+
model_cost: string;
|
|
6
|
+
model_context_window: number;
|
|
7
|
+
[key: string]: string | number;
|
|
8
|
+
}
|
|
9
|
+
export interface ProviderMap {
|
|
10
|
+
anthropic: ProviderConfig;
|
|
11
|
+
openai: ProviderConfig;
|
|
12
|
+
openrouter: ProviderConfig;
|
|
13
|
+
google: ProviderConfig;
|
|
14
|
+
ollama: ProviderConfig;
|
|
15
|
+
local: ProviderConfig;
|
|
16
|
+
[key: string]: ProviderConfig;
|
|
17
|
+
}
|
|
18
|
+
export interface ChannelsConfig {
|
|
19
|
+
bot_token: string;
|
|
20
|
+
user_id: string;
|
|
21
|
+
chat_id: string;
|
|
22
|
+
allow_groups: boolean;
|
|
23
|
+
tab_active: string;
|
|
24
|
+
}
|
|
25
|
+
export interface HeartbeatConfig {
|
|
26
|
+
schedule: 'on' | 'off';
|
|
27
|
+
mode: 'plan' | 'edit' | 'auto' | 'yolo';
|
|
28
|
+
intraday: string;
|
|
29
|
+
daily: string;
|
|
30
|
+
weekly: string;
|
|
31
|
+
monthly: string;
|
|
32
|
+
dreaming: string;
|
|
33
|
+
}
|
|
34
|
+
export interface SafetyConfig {
|
|
35
|
+
path_guard: 'on' | 'off';
|
|
36
|
+
path_allowlist: unknown;
|
|
37
|
+
command_guard: 'on' | 'off';
|
|
38
|
+
snapshots: 'on' | 'off';
|
|
39
|
+
}
|
|
40
|
+
export interface AutoCompactConfig {
|
|
41
|
+
enabled: 'on' | 'off';
|
|
42
|
+
threshold: number;
|
|
43
|
+
warn_threshold: number;
|
|
44
|
+
forced_threshold: number;
|
|
45
|
+
}
|
|
1
46
|
export interface CurieSettings {
|
|
2
47
|
model: string;
|
|
3
48
|
effort: 'low' | 'medium' | 'high' | 'max' | 'auto';
|
|
@@ -5,6 +50,20 @@ export interface CurieSettings {
|
|
|
5
50
|
theme: string;
|
|
6
51
|
statusline: boolean;
|
|
7
52
|
debug: boolean;
|
|
53
|
+
current_provider: string;
|
|
54
|
+
providers: ProviderMap;
|
|
55
|
+
model_override?: string;
|
|
56
|
+
channels: ChannelsConfig;
|
|
57
|
+
tools_per_call: number;
|
|
58
|
+
websearch_per_call: number;
|
|
59
|
+
brave_search_api_key: string;
|
|
60
|
+
heartbeat: HeartbeatConfig;
|
|
61
|
+
mcp_servers: Record<string, unknown>;
|
|
62
|
+
safety: SafetyConfig;
|
|
63
|
+
auto_compact: AutoCompactConfig;
|
|
64
|
+
pricing_tier_warn: 'on' | 'off';
|
|
65
|
+
web_ip: string;
|
|
66
|
+
daemon_token?: string;
|
|
8
67
|
MODEL_PROVIDER?: string;
|
|
9
68
|
MODEL_URL?: string;
|
|
10
69
|
MODEL_API_KEY?: string;
|
|
@@ -21,7 +80,6 @@ export interface CurieSettings {
|
|
|
21
80
|
TELEGRAM_CHAT_ID?: string;
|
|
22
81
|
TELEGRAM_ALLOW_GROUPS?: boolean;
|
|
23
82
|
CHANNEL_TAB_ACTIVE?: string;
|
|
24
|
-
BRAVE_SEARCH_API_KEY?: string;
|
|
25
83
|
MCP_SERVERS?: Record<string, unknown>;
|
|
26
84
|
TOOLS_PER_CALL?: number;
|
|
27
85
|
WEBSEARCH_PER_CALL?: number;
|
|
@@ -30,14 +88,26 @@ export interface CurieSettings {
|
|
|
30
88
|
HEARTBEAT_DAILY?: string;
|
|
31
89
|
HEARTBEAT_WEEKLY?: string;
|
|
32
90
|
HEARTBEAT_MONTHLY?: string;
|
|
91
|
+
HEARTBEAT_DREAMING?: string;
|
|
33
92
|
MODEL_COST?: string;
|
|
34
93
|
MODEL_CONTEXT_WINDOW?: number;
|
|
35
94
|
SAFETY_PATH_GUARD?: 'on' | 'off';
|
|
36
95
|
SAFETY_PATH_ALLOWLIST?: string;
|
|
37
96
|
SAFETY_COMMAND_GUARD?: 'on' | 'off';
|
|
38
97
|
SAFETY_SNAPSHOTS?: 'on' | 'off';
|
|
98
|
+
AUTO_COMPACT?: 'on' | 'off';
|
|
99
|
+
AUTO_COMPACT_THRESHOLD?: number;
|
|
100
|
+
AUTO_COMPACT_WARN_THRESHOLD?: number;
|
|
101
|
+
AUTO_COMPACT_FORCED_THRESHOLD?: number;
|
|
102
|
+
PRICING_TIER_WARN?: 'on' | 'off';
|
|
39
103
|
}
|
|
40
104
|
export declare const DEFAULT_SETTINGS: CurieSettings;
|
|
105
|
+
/** Detect whether raw JSON is legacy flat format (no `providers` object, but has flat provider keys). */
|
|
106
|
+
export declare function isLegacyFlatFormat(raw: Record<string, unknown>): boolean;
|
|
107
|
+
/** Migrate flat settings JSON to nested format. */
|
|
108
|
+
export declare function migrateFlatToNested(parsed: Record<string, unknown>): CurieSettings;
|
|
109
|
+
/** Serialize settings to JSON, stripping legacy flat keys. */
|
|
110
|
+
export declare function stripLegacyKeys(s: CurieSettings): Record<string, unknown>;
|
|
41
111
|
export declare class SettingsManager {
|
|
42
112
|
private settings;
|
|
43
113
|
constructor();
|
|
@@ -45,5 +115,25 @@ export declare class SettingsManager {
|
|
|
45
115
|
save(): void;
|
|
46
116
|
update(partial: Partial<CurieSettings>): CurieSettings;
|
|
47
117
|
get(): CurieSettings;
|
|
118
|
+
/** Get the currently active model name (override or provider default). */
|
|
119
|
+
getActiveModel(): string;
|
|
120
|
+
/** Get the currently active provider name. */
|
|
121
|
+
getCurrentProvider(): string;
|
|
122
|
+
/** Get a specific property from a provider's config. */
|
|
123
|
+
getProviderKey(provider: string, key: 'api_key'): string;
|
|
124
|
+
getProviderKey(provider: string, key: 'url'): string;
|
|
125
|
+
getProviderKey(provider: string, key: 'model'): string;
|
|
126
|
+
getProviderKey(provider: string, key: 'model_cost'): string;
|
|
127
|
+
getProviderKey(provider: string, key: 'model_context_window'): number;
|
|
128
|
+
/** Set a specific property on a provider's config. */
|
|
129
|
+
setProviderKey(provider: string, key: string, value: unknown): CurieSettings;
|
|
130
|
+
/** Set the current provider and reset model to its default. */
|
|
131
|
+
setCurrentProvider(name: string): CurieSettings;
|
|
132
|
+
/** Get the active provider's model cost string. */
|
|
133
|
+
getModelCost(): string;
|
|
134
|
+
/** Get the active provider's context window size. */
|
|
135
|
+
getModelContextWindow(): number;
|
|
48
136
|
}
|
|
137
|
+
/** Parse a nested-format settings JSON into CurieSettings (lightweight, no migration needed). */
|
|
138
|
+
export declare function parseNestedSettings(parsed: Record<string, unknown>): CurieSettings;
|
|
49
139
|
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/settings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/settings.ts"],"names":[],"mappings":"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"}
|