@curie-agent/core 0.2.4 → 0.3.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/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 +80 -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 +29 -0
- package/dist/src/identity-files.d.ts.map +1 -0
- package/dist/src/identity-files.js +59 -0
- package/dist/src/identity-files.js.map +1 -0
- package/dist/src/index.d.ts +19 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +13 -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/command-guard.d.ts.map +1 -1
- package/dist/src/safety/command-guard.js +35 -1
- package/dist/src/safety/command-guard.js.map +1 -1
- 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/safety/snapshot.js +1 -1
- package/dist/src/safety/snapshot.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 +98 -1
- package/dist/src/settings.d.ts.map +1 -1
- package/dist/src/settings.js +363 -83
- package/dist/src/settings.js.map +1 -1
- package/dist/src/shell-detect.d.ts +12 -0
- package/dist/src/shell-detect.d.ts.map +1 -0
- package/dist/src/shell-detect.js +31 -0
- package/dist/src/shell-detect.js.map +1 -0
- 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 +308 -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/template-utils.d.ts +16 -0
- package/dist/src/template-utils.d.ts.map +1 -0
- package/dist/src/template-utils.js +72 -0
- package/dist/src/template-utils.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 +10 -1
- package/dist/src/turn-loop.d.ts.map +1 -1
- package/dist/src/turn-loop.js +152 -23
- 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 +16 -11
- package/templates/AGENTS.md +53 -0
- package/templates/HEARTBEAT.md +37 -0
- package/templates/MEMORY.md +29 -0
- package/templates/SOUL.md +28 -0
- package/templates/TOOLS.md +29 -0
- package/templates/USER.md +35 -0
- package/templates/WIKI.md +146 -0
- package/templates/settings.json +90 -0
- package/templates/skills/deep-research/SKILL.md +273 -0
- package/templates/skills/deep-research/references/report-structure.md +149 -0
- package/templates/skills/deep-research/references/topic-guides.md +151 -0
- package/templates/skills/planning/SKILL.md +222 -0
- package/templates/skills/planning/references/business.md +82 -0
- package/templates/skills/planning/references/creative.md +111 -0
- package/templates/skills/planning/references/events.md +109 -0
- package/templates/skills/planning/references/personal.md +107 -0
- package/templates/skills/planning/references/templates.md +279 -0
- package/templates/skills/wiki/SKILL.md +70 -0
package/dist/src/settings.js
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
+
// ── Default settings (nested format) ────────────────────────────────────────
|
|
5
|
+
function makeDefaultProviders() {
|
|
6
|
+
const p = {};
|
|
7
|
+
for (const name of ['anthropic', 'openai', 'openrouter', 'google', 'ollama', 'local']) {
|
|
8
|
+
p[name] = { api_key: '', url: '', model: '', model_cost: '', model_context_window: 131072 };
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
anthropic: { ...p.anthropic, url: 'https://api.anthropic.com', model: 'claude-sonnet-4-6', model_context_window: 200000 },
|
|
12
|
+
openai: { ...p.openai, url: 'https://api.openai.com', model: 'gpt-4o' },
|
|
13
|
+
openrouter: { ...p.openrouter, url: 'https://openrouter.ai/api/v1', model: 'anthropic/claude-sonnet-4-6', model_context_window: 200000 },
|
|
14
|
+
google: { ...p.google, model: 'gemini-2.5-pro' },
|
|
15
|
+
ollama: { ...p.ollama, url: 'http://localhost:11434/v1', model: 'llama3' },
|
|
16
|
+
local: { ...p.local, model: 'custom' },
|
|
17
|
+
};
|
|
18
|
+
}
|
|
4
19
|
export const DEFAULT_SETTINGS = {
|
|
5
20
|
model: 'claude-sonnet-4-6',
|
|
6
21
|
effort: 'auto',
|
|
@@ -8,24 +23,21 @@ export const DEFAULT_SETTINGS = {
|
|
|
8
23
|
theme: 'nord',
|
|
9
24
|
statusline: true,
|
|
10
25
|
debug: false,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
SAFETY_PATH_GUARD: 'on',
|
|
25
|
-
SAFETY_PATH_ALLOWLIST: '',
|
|
26
|
-
SAFETY_COMMAND_GUARD: 'on',
|
|
27
|
-
SAFETY_SNAPSHOTS: 'on',
|
|
26
|
+
current_provider: 'anthropic',
|
|
27
|
+
providers: makeDefaultProviders(),
|
|
28
|
+
channels: { bot_token: '', user_id: '', chat_id: '', allow_groups: false, tab_active: 'main' },
|
|
29
|
+
tools_per_call: 10,
|
|
30
|
+
websearch_per_call: 5,
|
|
31
|
+
brave_search_api_key: '',
|
|
32
|
+
heartbeat: { schedule: 'off', mode: 'yolo', intraday: '', daily: '6:00', weekly: 'monday@6:00', monthly: '1@6:00', dreaming: '2:00' },
|
|
33
|
+
mcp_servers: {},
|
|
34
|
+
safety: { path_guard: 'on', path_allowlist: '', command_guard: 'on', snapshots: 'on' },
|
|
35
|
+
auto_compact: { enabled: 'on', threshold: 75, warn_threshold: 60, forced_threshold: 85 },
|
|
36
|
+
pricing_tier_warn: 'on',
|
|
37
|
+
wiki: { path: '', autoLint: 'off' },
|
|
38
|
+
web_ip: '',
|
|
28
39
|
};
|
|
40
|
+
// ── Migration helpers ───────────────────────────────────────────────────────
|
|
29
41
|
function migrateMode(raw) {
|
|
30
42
|
if (typeof raw !== 'string')
|
|
31
43
|
return DEFAULT_SETTINGS.mode;
|
|
@@ -34,14 +46,197 @@ function migrateMode(raw) {
|
|
|
34
46
|
case 'edit':
|
|
35
47
|
case 'auto':
|
|
36
48
|
case 'yolo': return raw;
|
|
37
|
-
case 'auto-edit': return 'edit';
|
|
38
|
-
case 'manual': return 'auto';
|
|
39
|
-
case 'full-auto': return 'yolo';
|
|
40
49
|
default: return DEFAULT_SETTINGS.mode;
|
|
41
50
|
}
|
|
42
51
|
}
|
|
52
|
+
/** Case-insensitive pick: find first non-empty string value matching any of the candidate keys. */
|
|
53
|
+
function pickString(parsed, ...keys) {
|
|
54
|
+
const normalize = (s) => s.replace(/[_-]/g, '').toLowerCase();
|
|
55
|
+
const targets = new Set(keys.map(normalize));
|
|
56
|
+
for (const key of keys) {
|
|
57
|
+
const direct = parsed[key];
|
|
58
|
+
if (typeof direct === 'string' && direct.length > 0)
|
|
59
|
+
return direct;
|
|
60
|
+
}
|
|
61
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
62
|
+
if (typeof v !== 'string' || v.length === 0)
|
|
63
|
+
continue;
|
|
64
|
+
if (targets.has(normalize(k)))
|
|
65
|
+
return v;
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
function pickNumber(parsed, ...keys) {
|
|
70
|
+
const normalize = (s) => s.replace(/[_-]/g, '').toLowerCase();
|
|
71
|
+
const targets = new Set(keys.map(normalize));
|
|
72
|
+
for (const key of keys) {
|
|
73
|
+
const direct = parsed[key];
|
|
74
|
+
if (typeof direct === 'number')
|
|
75
|
+
return direct;
|
|
76
|
+
}
|
|
77
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
78
|
+
if (typeof v !== 'number')
|
|
79
|
+
continue;
|
|
80
|
+
if (targets.has(normalize(k)))
|
|
81
|
+
return v;
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
function pickBool(parsed, ...keys) {
|
|
86
|
+
const normalize = (s) => s.replace(/[_-]/g, '').toLowerCase();
|
|
87
|
+
const targets = new Set(keys.map(normalize));
|
|
88
|
+
for (const key of keys) {
|
|
89
|
+
const direct = parsed[key];
|
|
90
|
+
if (typeof direct === 'boolean')
|
|
91
|
+
return direct;
|
|
92
|
+
}
|
|
93
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
94
|
+
if (typeof v !== 'boolean')
|
|
95
|
+
continue;
|
|
96
|
+
if (targets.has(normalize(k)))
|
|
97
|
+
return v;
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
/** Detect whether raw JSON is legacy flat format (no `providers` object, but has flat provider keys). */
|
|
102
|
+
export function isLegacyFlatFormat(raw) {
|
|
103
|
+
const hasNested = 'providers' in raw && typeof raw.providers === 'object' && raw.providers !== null;
|
|
104
|
+
if (hasNested)
|
|
105
|
+
return false;
|
|
106
|
+
const flatMarkerKeys = [
|
|
107
|
+
'MODEL_API_KEY', 'OPENAI_API_KEY', 'ANTHROPIC_API_KEY', 'OPENROUTER_API_KEY',
|
|
108
|
+
'GOOGLE_API_KEY', 'MODEL_URL', 'ANTHROPIC_URL', 'OPENAI_URL', 'OPENROUTER_URL', 'GOOGLE_URL',
|
|
109
|
+
'MODEL_PROVIDER',
|
|
110
|
+
];
|
|
111
|
+
const normalize = (s) => s.replace(/[_-]/g, '').toLowerCase();
|
|
112
|
+
const markerTargets = new Set(flatMarkerKeys.map(normalize));
|
|
113
|
+
return Object.keys(raw).some(k => markerTargets.has(normalize(k)));
|
|
114
|
+
}
|
|
115
|
+
/** Migrate flat settings JSON to nested format. */
|
|
116
|
+
export function migrateFlatToNested(parsed) {
|
|
117
|
+
const modelProvider = (pickString(parsed, 'MODEL_PROVIDER') || 'anthropic').toLowerCase();
|
|
118
|
+
// Resolve which provider MODEL_API_KEY/MODEL_URL belonged to
|
|
119
|
+
const resolvedProvider = ['ollama', 'local'].includes(modelProvider)
|
|
120
|
+
? modelProvider
|
|
121
|
+
: modelProvider || 'anthropic';
|
|
122
|
+
// Build provider configs from flat keys
|
|
123
|
+
const anthropicKey = pickString(parsed, 'ANTHROPIC_API_KEY', 'MODEL_API_KEY') || '';
|
|
124
|
+
const anthropicUrl = pickString(parsed, 'ANTHROPIC_URL', 'MODEL_URL') || 'https://api.anthropic.com';
|
|
125
|
+
const openaiKey = pickString(parsed, 'OPENAI_API_KEY', 'MODEL_API_KEY') || '';
|
|
126
|
+
const openaiUrl = pickString(parsed, 'OPENAI_URL', 'MODEL_URL') || 'https://api.openai.com';
|
|
127
|
+
const orKey = pickString(parsed, 'OPENROUTER_API_KEY', 'MODEL_API_KEY') || '';
|
|
128
|
+
const orUrl = pickString(parsed, 'OPENROUTER_URL', 'MODEL_URL') || 'https://openrouter.ai/api/v1';
|
|
129
|
+
const googleKey = pickString(parsed, 'GOOGLE_API_KEY', 'MODEL_API_KEY') || '';
|
|
130
|
+
const googleUrl = pickString(parsed, 'GOOGLE_URL', 'MODEL_URL') || '';
|
|
131
|
+
const ollamaKey = pickString(parsed, 'MODEL_API_KEY') || '';
|
|
132
|
+
const ollamaUrl = pickString(parsed, 'MODEL_URL') || 'http://localhost:11434/v1';
|
|
133
|
+
const localKey = pickString(parsed, 'MODEL_API_KEY') || '';
|
|
134
|
+
const localUrl = pickString(parsed, 'MODEL_URL') || '';
|
|
135
|
+
const providers = {
|
|
136
|
+
anthropic: { api_key: anthropicKey, url: anthropicUrl, model: DEFAULT_SETTINGS.providers.anthropic.model, model_cost: '', model_context_window: 200000 },
|
|
137
|
+
openai: { api_key: openaiKey, url: openaiUrl, model: DEFAULT_SETTINGS.providers.openai.model, model_cost: '', model_context_window: 131072 },
|
|
138
|
+
openrouter: { api_key: orKey, url: orUrl, model: DEFAULT_SETTINGS.providers.openrouter.model, model_cost: '', model_context_window: 200000 },
|
|
139
|
+
google: { api_key: googleKey, url: googleUrl, model: DEFAULT_SETTINGS.providers.google.model, model_cost: '', model_context_window: 131072 },
|
|
140
|
+
ollama: { api_key: ollamaKey, url: ollamaUrl, model: DEFAULT_SETTINGS.providers.ollama.model, model_cost: '', model_context_window: 131072 },
|
|
141
|
+
local: { api_key: localKey, url: localUrl, model: DEFAULT_SETTINGS.providers.local.model, model_cost: '', model_context_window: 131072 },
|
|
142
|
+
};
|
|
143
|
+
// Preserve flat model into the active provider's model
|
|
144
|
+
const flatModel = pickString(parsed, 'model') || DEFAULT_SETTINGS.model;
|
|
145
|
+
// Preserve flat model_cost / model_context_window into current provider
|
|
146
|
+
const flatModelCost = pickString(parsed, 'MODEL_COST', 'model_cost');
|
|
147
|
+
const flatModelCtxWindow = pickNumber(parsed, 'MODEL_CONTEXT_WINDOW', 'model_context_window');
|
|
148
|
+
const rp = providers[resolvedProvider];
|
|
149
|
+
rp.model = flatModel;
|
|
150
|
+
if (flatModelCost)
|
|
151
|
+
rp.model_cost = flatModelCost;
|
|
152
|
+
if (flatModelCtxWindow && flatModelCtxWindow > 0)
|
|
153
|
+
rp.model_context_window = flatModelCtxWindow;
|
|
154
|
+
const telegramBot = pickString(parsed, 'TELEGRAM_BOT_TOKEN', 'telegram_bot_token') || '';
|
|
155
|
+
const telegramUser = pickString(parsed, 'TELEGRAM_USER_ID', 'telegram_user_id') || '';
|
|
156
|
+
const telegramChat = pickString(parsed, 'TELEGRAM_CHAT_ID', 'telegram_chat_id') || '';
|
|
157
|
+
const telegramGroups = pickBool(parsed, 'TELEGRAM_ALLOW_GROUPS', 'telegram_allow_groups') ?? false;
|
|
158
|
+
const channelTab = pickString(parsed, 'CHANNEL_TAB_ACTIVE', 'channel_tab_active') || DEFAULT_SETTINGS.channels.tab_active;
|
|
159
|
+
const mcpServers = parsed.MCP_SERVERS || parsed.mcp_servers || {};
|
|
160
|
+
const safetyPathGuard = (pickString(parsed, 'SAFETY_PATH_GUARD', 'safety_path_guard') || 'on');
|
|
161
|
+
const safetyPathAllow = parsed.SAFETY_PATH_ALLOWLIST ?? parsed.safety_path_allowlist ?? '';
|
|
162
|
+
const safetyCmdGuard = (pickString(parsed, 'SAFETY_COMMAND_GUARD', 'safety_command_guard') || 'on');
|
|
163
|
+
const safetySnaps = (pickString(parsed, 'SAFETY_SNAPSHOTS', 'safety_snapshots') || 'on');
|
|
164
|
+
const acEnabled = (pickString(parsed, 'AUTO_COMPACT', 'auto_compact') || 'on');
|
|
165
|
+
const acThreshold = (pickNumber(parsed, 'AUTO_COMPACT_THRESHOLD', 'auto_compact_threshold') ?? 75);
|
|
166
|
+
const acWarnThreshold = (pickNumber(parsed, 'AUTO_COMPACT_WARN_THRESHOLD', 'auto_compact_warn_threshold') ?? 60);
|
|
167
|
+
const acForcedThreshold = (pickNumber(parsed, 'AUTO_COMPACT_FORCED_THRESHOLD', 'auto_compact_forced_threshold') ?? 85);
|
|
168
|
+
return {
|
|
169
|
+
model: flatModel,
|
|
170
|
+
effort: pickString(parsed, 'effort') || DEFAULT_SETTINGS.effort,
|
|
171
|
+
mode: migrateMode(parsed.mode),
|
|
172
|
+
theme: (pickString(parsed, 'theme') || DEFAULT_SETTINGS.theme),
|
|
173
|
+
statusline: pickBool(parsed, 'statusline') ?? DEFAULT_SETTINGS.statusline,
|
|
174
|
+
debug: pickBool(parsed, 'debug') ?? DEFAULT_SETTINGS.debug,
|
|
175
|
+
current_provider: resolvedProvider,
|
|
176
|
+
providers,
|
|
177
|
+
channels: { bot_token: telegramBot, user_id: telegramUser, chat_id: telegramChat, allow_groups: telegramGroups, tab_active: channelTab },
|
|
178
|
+
tools_per_call: (typeof pickNumber(parsed, 'TOOLS_PER_CALL', 'tools_per_call') === 'number' && pickNumber(parsed, 'TOOLS_PER_CALL', 'tools_per_call') > 0)
|
|
179
|
+
? pickNumber(parsed, 'TOOLS_PER_CALL', 'tools_per_call') : DEFAULT_SETTINGS.tools_per_call,
|
|
180
|
+
websearch_per_call: (typeof pickNumber(parsed, 'WEBSEARCH_PER_CALL', 'websearch_per_call') === 'number' && pickNumber(parsed, 'WEBSEARCH_PER_CALL', 'websearch_per_call') > 0)
|
|
181
|
+
? pickNumber(parsed, 'WEBSEARCH_PER_CALL', 'websearch_per_call') : DEFAULT_SETTINGS.websearch_per_call,
|
|
182
|
+
brave_search_api_key: pickString(parsed, 'BRAVE_SEARCH_API_KEY', 'brave_search_api_key', 'BRAVE_API_KEY') || '',
|
|
183
|
+
heartbeat: {
|
|
184
|
+
schedule: (pickString(parsed, 'HEARTBEAT', 'heartbeat') || 'off'),
|
|
185
|
+
mode: migrateMode(pickString(parsed, 'HEARTBEAT_MODE', 'heartbeat_mode', 'heartbeat.mode')) || 'yolo',
|
|
186
|
+
intraday: pickString(parsed, 'HEARTBEAT_INTRADAY', 'HEARTBEAT_TIMES', 'HEARTBEAT_HOURLY', 'heartbeat_intraday', 'heartbeat_times') || DEFAULT_SETTINGS.heartbeat.intraday,
|
|
187
|
+
daily: pickString(parsed, 'HEARTBEAT_DAILY', 'heartbeat_daily') || DEFAULT_SETTINGS.heartbeat.daily,
|
|
188
|
+
weekly: pickString(parsed, 'HEARTBEAT_WEEKLY', 'heartbeat_weekly') || DEFAULT_SETTINGS.heartbeat.weekly,
|
|
189
|
+
monthly: pickString(parsed, 'HEARTBEAT_MONTHLY', 'heartbeat_monthly') || DEFAULT_SETTINGS.heartbeat.monthly,
|
|
190
|
+
dreaming: pickString(parsed, 'HEARTBEAT_DREAMING', 'heartbeat_dreaming') || DEFAULT_SETTINGS.heartbeat.dreaming,
|
|
191
|
+
},
|
|
192
|
+
mcp_servers: mcpServers,
|
|
193
|
+
safety: {
|
|
194
|
+
path_guard: safetyPathGuard,
|
|
195
|
+
path_allowlist: safetyPathAllow,
|
|
196
|
+
command_guard: safetyCmdGuard,
|
|
197
|
+
snapshots: safetySnaps,
|
|
198
|
+
},
|
|
199
|
+
auto_compact: {
|
|
200
|
+
enabled: acEnabled,
|
|
201
|
+
threshold: acThreshold,
|
|
202
|
+
warn_threshold: acWarnThreshold,
|
|
203
|
+
forced_threshold: acForcedThreshold,
|
|
204
|
+
},
|
|
205
|
+
pricing_tier_warn: (pickString(parsed, 'PRICING_TIER_WARN', 'pricing_tier_warn') || 'on'),
|
|
206
|
+
wiki: { path: '', autoLint: 'off' },
|
|
207
|
+
web_ip: pickString(parsed, 'web_ip', 'WEB_IP') || '',
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/** Serialize settings to JSON, stripping legacy flat keys. */
|
|
211
|
+
export function stripLegacyKeys(s) {
|
|
212
|
+
const legacy = new Set([
|
|
213
|
+
'MODEL_PROVIDER', 'MODEL_URL', 'MODEL_API_KEY',
|
|
214
|
+
'OPENAI_API_KEY', 'OPENAI_URL', 'ANTHROPIC_API_KEY', 'ANTHROPIC_URL',
|
|
215
|
+
'OPENROUTER_API_KEY', 'OPENROUTER_URL', 'GOOGLE_API_KEY', 'GOOGLE_URL',
|
|
216
|
+
'TELEGRAM_BOT_TOKEN', 'TELEGRAM_USER_ID', 'TELEGRAM_CHAT_ID', 'TELEGRAM_ALLOW_GROUPS',
|
|
217
|
+
'CHANNEL_TAB_ACTIVE', 'MCP_SERVERS',
|
|
218
|
+
'TOOLS_PER_CALL', 'WEBSEARCH_PER_CALL',
|
|
219
|
+
'HEARTBEAT', 'HEARTBEAT_INTRADAY', 'HEARTBEAT_DAILY', 'HEARTBEAT_WEEKLY',
|
|
220
|
+
'HEARTBEAT_MONTHLY', 'HEARTBEAT_DREAMING',
|
|
221
|
+
'MODEL_COST', 'MODEL_CONTEXT_WINDOW',
|
|
222
|
+
'SAFETY_PATH_GUARD', 'SAFETY_PATH_ALLOWLIST', 'SAFETY_COMMAND_GUARD', 'SAFETY_SNAPSHOTS',
|
|
223
|
+
'AUTO_COMPACT', 'AUTO_COMPACT_THRESHOLD', 'AUTO_COMPACT_WARN_THRESHOLD', 'AUTO_COMPACT_FORCED_THRESHOLD',
|
|
224
|
+
'PRICING_TIER_WARN',
|
|
225
|
+
]);
|
|
226
|
+
const result = {};
|
|
227
|
+
for (const [k, v] of Object.entries(s)) {
|
|
228
|
+
if (legacy.has(k))
|
|
229
|
+
continue;
|
|
230
|
+
if (v === undefined)
|
|
231
|
+
continue;
|
|
232
|
+
result[k] = v;
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
// ── Constants ───────────────────────────────────────────────────────────────
|
|
43
237
|
const CONFIG_DIR = join(homedir(), '.curie-agent');
|
|
44
|
-
const SETTINGS_FILE = join(
|
|
238
|
+
const SETTINGS_FILE = join(homedir(), '.curie-settings.json');
|
|
239
|
+
// ── SettingsManager ─────────────────────────────────────────────────────────
|
|
45
240
|
export class SettingsManager {
|
|
46
241
|
settings;
|
|
47
242
|
constructor() {
|
|
@@ -54,80 +249,31 @@ export class SettingsManager {
|
|
|
54
249
|
const raw = readFileSync(SETTINGS_FILE, 'utf-8');
|
|
55
250
|
const parsed = JSON.parse(raw);
|
|
56
251
|
if (parsed && typeof parsed === 'object') {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
const normalize = (s) => s.replace(/[_-]/g, '').toLowerCase();
|
|
66
|
-
const targets = keys.map(normalize);
|
|
67
|
-
for (const [k, v] of Object.entries(parsed)) {
|
|
68
|
-
if (typeof v !== 'string' || v.length === 0)
|
|
69
|
-
continue;
|
|
70
|
-
if (targets.includes(normalize(k)))
|
|
71
|
-
return v;
|
|
72
|
-
}
|
|
73
|
-
return undefined;
|
|
74
|
-
};
|
|
75
|
-
const merged = {
|
|
76
|
-
model: parsed.model ?? DEFAULT_SETTINGS.model,
|
|
77
|
-
effort: parsed.effort ?? DEFAULT_SETTINGS.effort,
|
|
78
|
-
mode: migrateMode(parsed.mode),
|
|
79
|
-
theme: parsed.theme ?? DEFAULT_SETTINGS.theme,
|
|
80
|
-
statusline: parsed.statusline ?? DEFAULT_SETTINGS.statusline,
|
|
81
|
-
debug: parsed.debug ?? DEFAULT_SETTINGS.debug,
|
|
82
|
-
BRAVE_SEARCH_API_KEY: pick('BRAVE_SEARCH_API_KEY', 'brave_search_api_key', 'braveSearchApiKey', 'BRAVE_API_KEY'),
|
|
83
|
-
MODEL_URL: pick('MODEL_URL', 'model_url', 'modelUrl', 'MODEL_BASE_URL', 'baseUrl'),
|
|
84
|
-
MODEL_API_KEY: pick('MODEL_API_KEY', 'model_api_key', 'MODEL_API', 'model_api', 'modelApiKey', 'apiKey', 'API_KEY'),
|
|
85
|
-
MODEL_PROVIDER: pick('MODEL_PROVIDER', 'model_provider', 'modelProvider'),
|
|
86
|
-
OPENAI_API_KEY: pick('OPENAI_API_KEY', 'openai_api_key', 'openaiApiKey'),
|
|
87
|
-
OPENAI_URL: pick('OPENAI_URL', 'openai_url', 'openaiBaseUrl', 'OPENAI_BASE_URL', 'openai_base_url'),
|
|
88
|
-
ANTHROPIC_API_KEY: pick('ANTHROPIC_API_KEY', 'anthropic_api_key', 'anthropicApiKey'),
|
|
89
|
-
ANTHROPIC_URL: pick('ANTHROPIC_URL', 'anthropic_url', 'anthropicUrl'),
|
|
90
|
-
OPENROUTER_API_KEY: pick('OPENROUTER_API_KEY', 'openrouter_api_key', 'openrouterApiKey'),
|
|
91
|
-
OPENROUTER_URL: pick('OPENROUTER_URL', 'openrouter_url', 'openrouterUrl'),
|
|
92
|
-
GOOGLE_API_KEY: pick('GOOGLE_API_KEY', 'google_api_key', 'googleApiKey'),
|
|
93
|
-
GOOGLE_URL: pick('GOOGLE_URL', 'google_url', 'googleBaseUrl'),
|
|
94
|
-
TELEGRAM_BOT_TOKEN: pick('TELEGRAM_BOT_TOKEN', 'telegram_bot_token', 'telegramBotToken'),
|
|
95
|
-
TELEGRAM_USER_ID: pick('TELEGRAM_USER_ID', 'telegram_user_id', 'telegramUserId'),
|
|
96
|
-
TELEGRAM_CHAT_ID: pick('TELEGRAM_CHAT_ID', 'telegram_chat_id', 'telegramChatId'),
|
|
97
|
-
TELEGRAM_ALLOW_GROUPS: parsed.TELEGRAM_ALLOW_GROUPS ?? false,
|
|
98
|
-
CHANNEL_TAB_ACTIVE: parsed.CHANNEL_TAB_ACTIVE ?? 'main',
|
|
99
|
-
MCP_SERVERS: parsed.MCP_SERVERS ?? parsed.mcp_servers,
|
|
100
|
-
TOOLS_PER_CALL: (typeof parsed.TOOLS_PER_CALL === 'number' && parsed.TOOLS_PER_CALL > 0)
|
|
101
|
-
? parsed.TOOLS_PER_CALL : DEFAULT_SETTINGS.TOOLS_PER_CALL,
|
|
102
|
-
WEBSEARCH_PER_CALL: (typeof parsed.WEBSEARCH_PER_CALL === 'number' && parsed.WEBSEARCH_PER_CALL > 0)
|
|
103
|
-
? parsed.WEBSEARCH_PER_CALL : DEFAULT_SETTINGS.WEBSEARCH_PER_CALL,
|
|
104
|
-
HEARTBEAT: parsed.HEARTBEAT ?? DEFAULT_SETTINGS.HEARTBEAT,
|
|
105
|
-
HEARTBEAT_INTRADAY: parsed.HEARTBEAT_INTRADAY ?? parsed.HEARTBEAT_TIMES ?? parsed.HEARTBEAT_HOURLY ?? DEFAULT_SETTINGS.HEARTBEAT_INTRADAY,
|
|
106
|
-
HEARTBEAT_DAILY: parsed.HEARTBEAT_DAILY ?? DEFAULT_SETTINGS.HEARTBEAT_DAILY,
|
|
107
|
-
HEARTBEAT_WEEKLY: parsed.HEARTBEAT_WEEKLY ?? DEFAULT_SETTINGS.HEARTBEAT_WEEKLY,
|
|
108
|
-
HEARTBEAT_MONTHLY: parsed.HEARTBEAT_MONTHLY ?? DEFAULT_SETTINGS.HEARTBEAT_MONTHLY,
|
|
109
|
-
MODEL_COST: parsed.MODEL_COST ?? parsed.model_cost,
|
|
110
|
-
MODEL_CONTEXT_WINDOW: (typeof parsed.MODEL_CONTEXT_WINDOW === 'number' && parsed.MODEL_CONTEXT_WINDOW > 0)
|
|
111
|
-
? parsed.MODEL_CONTEXT_WINDOW : undefined,
|
|
112
|
-
SAFETY_PATH_GUARD: parsed.SAFETY_PATH_GUARD ?? DEFAULT_SETTINGS.SAFETY_PATH_GUARD,
|
|
113
|
-
SAFETY_PATH_ALLOWLIST: parsed.SAFETY_PATH_ALLOWLIST ?? '',
|
|
114
|
-
SAFETY_COMMAND_GUARD: parsed.SAFETY_COMMAND_GUARD ?? DEFAULT_SETTINGS.SAFETY_COMMAND_GUARD,
|
|
115
|
-
SAFETY_SNAPSHOTS: parsed.SAFETY_SNAPSHOTS ?? DEFAULT_SETTINGS.SAFETY_SNAPSHOTS,
|
|
116
|
-
};
|
|
117
|
-
this.settings = merged;
|
|
252
|
+
if (isLegacyFlatFormat(parsed)) {
|
|
253
|
+
this.settings = migrateFlatToNested(parsed);
|
|
254
|
+
this.save();
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
this.settings = parseNestedSettings(parsed);
|
|
258
|
+
}
|
|
118
259
|
}
|
|
119
260
|
}
|
|
120
261
|
catch {
|
|
121
262
|
// ignore parse errors, use defaults
|
|
122
263
|
}
|
|
123
264
|
}
|
|
265
|
+
// Sync top-level model to the active provider's value.
|
|
266
|
+
const prov = this.settings.providers[this.settings.current_provider];
|
|
267
|
+
if (prov) {
|
|
268
|
+
this.settings.model = prov.model;
|
|
269
|
+
}
|
|
124
270
|
return this.settings;
|
|
125
271
|
}
|
|
126
272
|
save() {
|
|
127
273
|
if (!existsSync(CONFIG_DIR)) {
|
|
128
274
|
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
129
275
|
}
|
|
130
|
-
writeFileSync(SETTINGS_FILE, JSON.stringify(this.settings, null, 2) + '\n');
|
|
276
|
+
writeFileSync(SETTINGS_FILE, JSON.stringify(stripLegacyKeys(this.settings), null, 2) + '\n');
|
|
131
277
|
}
|
|
132
278
|
update(partial) {
|
|
133
279
|
this.settings = { ...this.settings, ...partial };
|
|
@@ -137,5 +283,139 @@ export class SettingsManager {
|
|
|
137
283
|
get() {
|
|
138
284
|
return { ...this.settings };
|
|
139
285
|
}
|
|
286
|
+
/** Get the currently active model name from provider config. */
|
|
287
|
+
getActiveModel() {
|
|
288
|
+
const p = this.settings.providers[this.settings.current_provider];
|
|
289
|
+
return p?.model || DEFAULT_SETTINGS.model;
|
|
290
|
+
}
|
|
291
|
+
/** Get the currently active provider name. */
|
|
292
|
+
getCurrentProvider() {
|
|
293
|
+
return this.settings.current_provider;
|
|
294
|
+
}
|
|
295
|
+
getProviderKey(provider, key) {
|
|
296
|
+
const name = provider || this.settings.current_provider;
|
|
297
|
+
const p = this.settings.providers[name];
|
|
298
|
+
if (!p)
|
|
299
|
+
return '';
|
|
300
|
+
return p[key] ?? '';
|
|
301
|
+
}
|
|
302
|
+
/** Set a specific property on a provider's config. */
|
|
303
|
+
setProviderKey(provider, key, value) {
|
|
304
|
+
const name = provider || this.settings.current_provider;
|
|
305
|
+
const existing = this.settings.providers[name] || {};
|
|
306
|
+
this.settings.providers = {
|
|
307
|
+
...this.settings.providers,
|
|
308
|
+
[name]: { ...existing, [key]: value },
|
|
309
|
+
};
|
|
310
|
+
this.save();
|
|
311
|
+
return this.settings;
|
|
312
|
+
}
|
|
313
|
+
/** Set the current provider and sync model to its value. */
|
|
314
|
+
setCurrentProvider(name) {
|
|
315
|
+
this.settings.current_provider = name;
|
|
316
|
+
const prov = this.settings.providers[name];
|
|
317
|
+
if (prov) {
|
|
318
|
+
this.settings.model = prov.model;
|
|
319
|
+
}
|
|
320
|
+
this.save();
|
|
321
|
+
return this.settings;
|
|
322
|
+
}
|
|
323
|
+
/** Get the active provider's model cost string. */
|
|
324
|
+
getModelCost() {
|
|
325
|
+
const p = this.settings.providers[this.settings.current_provider];
|
|
326
|
+
return p?.model_cost || '';
|
|
327
|
+
}
|
|
328
|
+
/** Get the active provider's context window size. */
|
|
329
|
+
getModelContextWindow() {
|
|
330
|
+
const p = this.settings.providers[this.settings.current_provider];
|
|
331
|
+
return p?.model_context_window || 131072;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/** Parse a nested-format settings JSON into CurieSettings (lightweight, no migration needed). */
|
|
335
|
+
export function parseNestedSettings(parsed) {
|
|
336
|
+
const getString = (keys) => pickString(parsed, ...keys) || '';
|
|
337
|
+
const getNumber = (keys) => pickNumber(parsed, ...keys);
|
|
338
|
+
const getBool = (keys) => pickBool(parsed, ...keys);
|
|
339
|
+
const providers = { ...DEFAULT_SETTINGS.providers };
|
|
340
|
+
const provKeys = ['anthropic', 'openai', 'openrouter', 'google', 'ollama', 'local'];
|
|
341
|
+
const rawProviders = parsed.providers;
|
|
342
|
+
if (rawProviders) {
|
|
343
|
+
for (const name of provKeys) {
|
|
344
|
+
const raw = rawProviders[name];
|
|
345
|
+
if (raw && typeof raw === 'object') {
|
|
346
|
+
providers[name] = {
|
|
347
|
+
api_key: getString([`providers.${name}.api_key`]) || raw.api_key || '',
|
|
348
|
+
url: getString([`providers.${name}.url`]) || raw.url || '',
|
|
349
|
+
model: getString([`providers.${name}.model`]) || raw.model || (DEFAULT_SETTINGS.providers[name].model),
|
|
350
|
+
model_cost: raw.model_cost || '',
|
|
351
|
+
model_context_window: typeof raw.model_context_window === 'number' ? raw.model_context_window : (DEFAULT_SETTINGS.providers[name].model_context_window),
|
|
352
|
+
max_output_tokens: typeof raw.max_output_tokens === 'number' ? raw.max_output_tokens : undefined,
|
|
353
|
+
provider_order: Array.isArray(raw.provider_order) ? raw.provider_order : undefined,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
const rawChannels = parsed.channels;
|
|
359
|
+
const channelsConfig = {
|
|
360
|
+
bot_token: getString(['channels.bot_token', 'CHANNEL_TAB_ACTIVE']) || rawChannels?.bot_token || '',
|
|
361
|
+
user_id: getString(['channels.user_id']) || rawChannels?.user_id || '',
|
|
362
|
+
chat_id: getString(['channels.chat_id']) || rawChannels?.chat_id || '',
|
|
363
|
+
allow_groups: getBool(['channels.allow_groups', 'TELEGRAM_ALLOW_GROUPS']) ?? rawChannels?.allow_groups ?? false,
|
|
364
|
+
tab_active: getString(['channels.tab_active']) || rawChannels?.tab_active || DEFAULT_SETTINGS.channels.tab_active,
|
|
365
|
+
};
|
|
366
|
+
const rawHeartbeat = parsed.heartbeat;
|
|
367
|
+
const heartbeatConfig = {
|
|
368
|
+
schedule: (getString(['heartbeat.schedule', 'HEARTBEAT']) || rawHeartbeat?.schedule || 'off'),
|
|
369
|
+
mode: migrateMode(getString(['heartbeat.mode']) || rawHeartbeat?.mode) || 'yolo',
|
|
370
|
+
intraday: getString(['heartbeat.intraday', 'HEARTBEAT_INTRADAY', 'HEARTBEAT_TIMES', 'HEARTBEAT_HOURLY']) || rawHeartbeat?.intraday || DEFAULT_SETTINGS.heartbeat.intraday,
|
|
371
|
+
daily: getString(['heartbeat.daily', 'HEARTBEAT_DAILY']) || rawHeartbeat?.daily || DEFAULT_SETTINGS.heartbeat.daily,
|
|
372
|
+
weekly: getString(['heartbeat.weekly', 'HEARTBEAT_WEEKLY']) || rawHeartbeat?.weekly || DEFAULT_SETTINGS.heartbeat.weekly,
|
|
373
|
+
monthly: getString(['heartbeat.monthly', 'HEARTBEAT_MONTHLY']) || rawHeartbeat?.monthly || DEFAULT_SETTINGS.heartbeat.monthly,
|
|
374
|
+
dreaming: getString(['heartbeat.dreaming', 'HEARTBEAT_DREAMING']) || rawHeartbeat?.dreaming || DEFAULT_SETTINGS.heartbeat.dreaming,
|
|
375
|
+
};
|
|
376
|
+
const rawSafety = parsed.safety;
|
|
377
|
+
const safetyConfig = {
|
|
378
|
+
path_guard: (getString(['safety.path_guard', 'SAFETY_PATH_GUARD']) || rawSafety?.path_guard || 'on'),
|
|
379
|
+
path_allowlist: rawSafety?.path_allowlist ?? getString(['safety.path_allowlist', 'SAFETY_PATH_ALLOWLIST']) ?? '',
|
|
380
|
+
command_guard: (getString(['safety.command_guard', 'SAFETY_COMMAND_GUARD']) || rawSafety?.command_guard || 'on'),
|
|
381
|
+
snapshots: (getString(['safety.snapshots', 'SAFETY_SNAPSHOTS']) || rawSafety?.snapshots || 'on'),
|
|
382
|
+
};
|
|
383
|
+
const rawAutoComp = parsed.auto_compact;
|
|
384
|
+
const autoCompactConfig = {
|
|
385
|
+
enabled: (getString(['auto_compact.enabled', 'AUTO_COMPACT']) || rawAutoComp?.enabled || 'on'),
|
|
386
|
+
threshold: getNumber(['auto_compact.threshold', 'AUTO_COMPACT_THRESHOLD']) ?? rawAutoComp?.threshold ?? DEFAULT_SETTINGS.auto_compact.threshold,
|
|
387
|
+
warn_threshold: getNumber(['auto_compact.warn_threshold', 'AUTO_COMPACT_WARN_THRESHOLD']) ?? rawAutoComp?.warn_threshold ?? DEFAULT_SETTINGS.auto_compact.warn_threshold,
|
|
388
|
+
forced_threshold: getNumber(['auto_compact.forced_threshold', 'AUTO_COMPACT_FORCED_THRESHOLD']) ?? rawAutoComp?.forced_threshold ?? DEFAULT_SETTINGS.auto_compact.forced_threshold,
|
|
389
|
+
};
|
|
390
|
+
return {
|
|
391
|
+
model: getString(['model']) || DEFAULT_SETTINGS.model,
|
|
392
|
+
effort: (getString(['effort']) || DEFAULT_SETTINGS.effort),
|
|
393
|
+
mode: migrateMode(parsed.mode),
|
|
394
|
+
theme: getString(['theme']) || DEFAULT_SETTINGS.theme,
|
|
395
|
+
statusline: getBool(['statusline']) ?? DEFAULT_SETTINGS.statusline,
|
|
396
|
+
debug: getBool(['debug']) ?? DEFAULT_SETTINGS.debug,
|
|
397
|
+
current_provider: getString(['current_provider']) || DEFAULT_SETTINGS.current_provider,
|
|
398
|
+
providers,
|
|
399
|
+
channels: channelsConfig,
|
|
400
|
+
tools_per_call: (typeof getNumber(['tools_per_call', 'TOOLS_PER_CALL']) === 'number' && getNumber(['tools_per_call', 'TOOLS_PER_CALL']) > 0)
|
|
401
|
+
? getNumber(['tools_per_call', 'TOOLS_PER_CALL']) : DEFAULT_SETTINGS.tools_per_call,
|
|
402
|
+
websearch_per_call: (typeof getNumber(['websearch_per_call', 'WEBSEARCH_PER_CALL']) === 'number' && getNumber(['websearch_per_call', 'WEBSEARCH_PER_CALL']) > 0)
|
|
403
|
+
? getNumber(['websearch_per_call', 'WEBSEARCH_PER_CALL']) : DEFAULT_SETTINGS.websearch_per_call,
|
|
404
|
+
brave_search_api_key: getString(['brave_search_api_key', 'BRAVE_SEARCH_API_KEY', 'BRAVE_API_KEY']),
|
|
405
|
+
heartbeat: heartbeatConfig,
|
|
406
|
+
mcp_servers: (parsed.mcp_servers || parsed.MCP_SERVERS) || {},
|
|
407
|
+
safety: safetyConfig,
|
|
408
|
+
auto_compact: autoCompactConfig,
|
|
409
|
+
pricing_tier_warn: (getString(['pricing_tier_warn', 'PRICING_TIER_WARN']) || 'on'),
|
|
410
|
+
wiki: (() => {
|
|
411
|
+
const rawWiki = parsed.wiki;
|
|
412
|
+
return {
|
|
413
|
+
path: rawWiki?.path || '',
|
|
414
|
+
autoLint: (rawWiki?.autoLint || 'off'),
|
|
415
|
+
};
|
|
416
|
+
})(),
|
|
417
|
+
web_ip: getString(['web_ip', 'WEB_IP']) || '',
|
|
418
|
+
daemon_token: getString(['daemon_token']),
|
|
419
|
+
};
|
|
140
420
|
}
|
|
141
421
|
//# sourceMappingURL=settings.js.map
|
package/dist/src/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/settings.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type WindowsShell = 'pwsh' | 'powershell' | 'cmd';
|
|
2
|
+
/**
|
|
3
|
+
* Detect the best available Windows shell by probing PATH.
|
|
4
|
+
* Prefers pwsh (PowerShell 7+) over powershell (5.x) over cmd.exe.
|
|
5
|
+
* Result is cached for the process lifetime.
|
|
6
|
+
*
|
|
7
|
+
* Returns 'cmd' on non-Windows (caller should branch on platform).
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectWindowsShell(): WindowsShell;
|
|
10
|
+
/** Reset the cached shell (testing or forced re-detection). */
|
|
11
|
+
export declare function resetWindowsShellCache(): void;
|
|
12
|
+
//# sourceMappingURL=shell-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-detect.d.ts","sourceRoot":"","sources":["../../src/shell-detect.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC;AAIzD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAYjD;AAED,+DAA+D;AAC/D,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { platform } from 'node:os';
|
|
3
|
+
let _cached;
|
|
4
|
+
/**
|
|
5
|
+
* Detect the best available Windows shell by probing PATH.
|
|
6
|
+
* Prefers pwsh (PowerShell 7+) over powershell (5.x) over cmd.exe.
|
|
7
|
+
* Result is cached for the process lifetime.
|
|
8
|
+
*
|
|
9
|
+
* Returns 'cmd' on non-Windows (caller should branch on platform).
|
|
10
|
+
*/
|
|
11
|
+
export function detectWindowsShell() {
|
|
12
|
+
if (platform() !== 'win32')
|
|
13
|
+
return 'cmd';
|
|
14
|
+
if (_cached !== undefined)
|
|
15
|
+
return _cached;
|
|
16
|
+
for (const name of ['pwsh', 'powershell']) {
|
|
17
|
+
try {
|
|
18
|
+
execSync(`where ${name}.exe`, { stdio: 'ignore', timeout: 2000 });
|
|
19
|
+
_cached = name;
|
|
20
|
+
return name;
|
|
21
|
+
}
|
|
22
|
+
catch { }
|
|
23
|
+
}
|
|
24
|
+
_cached = 'cmd';
|
|
25
|
+
return 'cmd';
|
|
26
|
+
}
|
|
27
|
+
/** Reset the cached shell (testing or forced re-detection). */
|
|
28
|
+
export function resetWindowsShellCache() {
|
|
29
|
+
_cached = undefined;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=shell-detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-detect.js","sourceRoot":"","sources":["../../src/shell-detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAInC,IAAI,OAAiC,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,QAAQ,EAAE,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,CAAU,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,QAAQ,CAAC,SAAS,IAAI,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,KAAK,CAAC;IAChB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,sBAAsB;IACpC,OAAO,GAAG,SAAS,CAAC;AACtB,CAAC"}
|