@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.
Files changed (80) hide show
  1. package/LICENSE +179 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/channel-router.js +1 -1
  4. package/dist/src/channel-router.js.map +1 -1
  5. package/dist/src/context.d.ts +11 -0
  6. package/dist/src/context.d.ts.map +1 -0
  7. package/dist/src/context.js +63 -0
  8. package/dist/src/context.js.map +1 -0
  9. package/dist/src/cron-manager.d.ts +27 -8
  10. package/dist/src/cron-manager.d.ts.map +1 -1
  11. package/dist/src/cron-manager.js +121 -33
  12. package/dist/src/cron-manager.js.map +1 -1
  13. package/dist/src/event-bus.d.ts +71 -0
  14. package/dist/src/event-bus.d.ts.map +1 -1
  15. package/dist/src/event-bus.js.map +1 -1
  16. package/dist/src/heartbeat-delivery.d.ts +2 -0
  17. package/dist/src/heartbeat-delivery.d.ts.map +1 -1
  18. package/dist/src/heartbeat-delivery.js +20 -3
  19. package/dist/src/heartbeat-delivery.js.map +1 -1
  20. package/dist/src/heartbeat-executor.d.ts +36 -2
  21. package/dist/src/heartbeat-executor.d.ts.map +1 -1
  22. package/dist/src/heartbeat-executor.js +32 -40
  23. package/dist/src/heartbeat-executor.js.map +1 -1
  24. package/dist/src/identity-files.d.ts +18 -0
  25. package/dist/src/identity-files.d.ts.map +1 -0
  26. package/dist/src/identity-files.js +198 -0
  27. package/dist/src/identity-files.js.map +1 -0
  28. package/dist/src/index.d.ts +18 -4
  29. package/dist/src/index.d.ts.map +1 -1
  30. package/dist/src/index.js +12 -2
  31. package/dist/src/index.js.map +1 -1
  32. package/dist/src/pricing.d.ts +29 -0
  33. package/dist/src/pricing.d.ts.map +1 -0
  34. package/dist/src/pricing.js +85 -0
  35. package/dist/src/pricing.js.map +1 -0
  36. package/dist/src/safety/path-guard.d.ts +7 -3
  37. package/dist/src/safety/path-guard.d.ts.map +1 -1
  38. package/dist/src/safety/path-guard.js +14 -5
  39. package/dist/src/safety/path-guard.js.map +1 -1
  40. package/dist/src/session-store.d.ts +3 -1
  41. package/dist/src/session-store.d.ts.map +1 -1
  42. package/dist/src/session-store.js +24 -1
  43. package/dist/src/session-store.js.map +1 -1
  44. package/dist/src/settings.d.ts +91 -1
  45. package/dist/src/settings.d.ts.map +1 -1
  46. package/dist/src/settings.js +353 -82
  47. package/dist/src/settings.js.map +1 -1
  48. package/dist/src/subagent-executor.d.ts +68 -0
  49. package/dist/src/subagent-executor.d.ts.map +1 -0
  50. package/dist/src/subagent-executor.js +289 -0
  51. package/dist/src/subagent-executor.js.map +1 -0
  52. package/dist/src/task-executor.d.ts +31 -0
  53. package/dist/src/task-executor.d.ts.map +1 -0
  54. package/dist/src/task-executor.js +91 -0
  55. package/dist/src/task-executor.js.map +1 -0
  56. package/dist/src/task-manager.d.ts +83 -0
  57. package/dist/src/task-manager.d.ts.map +1 -0
  58. package/dist/src/task-manager.js +304 -0
  59. package/dist/src/task-manager.js.map +1 -0
  60. package/dist/src/task-migration.d.ts +10 -0
  61. package/dist/src/task-migration.d.ts.map +1 -0
  62. package/dist/src/task-migration.js +144 -0
  63. package/dist/src/task-migration.js.map +1 -0
  64. package/dist/src/task-summary.d.ts +7 -0
  65. package/dist/src/task-summary.d.ts.map +1 -0
  66. package/dist/src/task-summary.js +34 -0
  67. package/dist/src/task-summary.js.map +1 -0
  68. package/dist/src/token-monitor.d.ts +50 -0
  69. package/dist/src/token-monitor.d.ts.map +1 -0
  70. package/dist/src/token-monitor.js +119 -0
  71. package/dist/src/token-monitor.js.map +1 -0
  72. package/dist/src/turn-loop.d.ts +7 -1
  73. package/dist/src/turn-loop.d.ts.map +1 -1
  74. package/dist/src/turn-loop.js +42 -11
  75. package/dist/src/turn-loop.js.map +1 -1
  76. package/dist/src/unified-task.d.ts +76 -0
  77. package/dist/src/unified-task.d.ts.map +1 -0
  78. package/dist/src/unified-task.js +196 -0
  79. package/dist/src/unified-task.js.map +1 -0
  80. package/package.json +10 -10
@@ -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,20 @@ export const DEFAULT_SETTINGS = {
8
23
  theme: 'nord',
9
24
  statusline: true,
10
25
  debug: false,
11
- BRAVE_SEARCH_API_KEY: '',
12
- TELEGRAM_BOT_TOKEN: '',
13
- TELEGRAM_USER_ID: '',
14
- TELEGRAM_CHAT_ID: '',
15
- TELEGRAM_ALLOW_GROUPS: false,
16
- CHANNEL_TAB_ACTIVE: 'main',
17
- TOOLS_PER_CALL: 10,
18
- WEBSEARCH_PER_CALL: 5,
19
- HEARTBEAT: 'off',
20
- HEARTBEAT_INTRADAY: '',
21
- HEARTBEAT_DAILY: '6:00',
22
- HEARTBEAT_WEEKLY: 'monday@6:00',
23
- HEARTBEAT_MONTHLY: '1@6:00',
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
+ web_ip: '',
28
38
  };
39
+ // ── Migration helpers ───────────────────────────────────────────────────────
29
40
  function migrateMode(raw) {
30
41
  if (typeof raw !== 'string')
31
42
  return DEFAULT_SETTINGS.mode;
@@ -34,14 +45,196 @@ function migrateMode(raw) {
34
45
  case 'edit':
35
46
  case 'auto':
36
47
  case 'yolo': return raw;
37
- case 'auto-edit': return 'edit';
38
- case 'manual': return 'auto';
39
- case 'full-auto': return 'yolo';
40
48
  default: return DEFAULT_SETTINGS.mode;
41
49
  }
42
50
  }
51
+ /** Case-insensitive pick: find first non-empty string value matching any of the candidate keys. */
52
+ function pickString(parsed, ...keys) {
53
+ const normalize = (s) => s.replace(/[_-]/g, '').toLowerCase();
54
+ const targets = new Set(keys.map(normalize));
55
+ for (const key of keys) {
56
+ const direct = parsed[key];
57
+ if (typeof direct === 'string' && direct.length > 0)
58
+ return direct;
59
+ }
60
+ for (const [k, v] of Object.entries(parsed)) {
61
+ if (typeof v !== 'string' || v.length === 0)
62
+ continue;
63
+ if (targets.has(normalize(k)))
64
+ return v;
65
+ }
66
+ return undefined;
67
+ }
68
+ function pickNumber(parsed, ...keys) {
69
+ const normalize = (s) => s.replace(/[_-]/g, '').toLowerCase();
70
+ const targets = new Set(keys.map(normalize));
71
+ for (const key of keys) {
72
+ const direct = parsed[key];
73
+ if (typeof direct === 'number')
74
+ return direct;
75
+ }
76
+ for (const [k, v] of Object.entries(parsed)) {
77
+ if (typeof v !== 'number')
78
+ continue;
79
+ if (targets.has(normalize(k)))
80
+ return v;
81
+ }
82
+ return undefined;
83
+ }
84
+ function pickBool(parsed, ...keys) {
85
+ const normalize = (s) => s.replace(/[_-]/g, '').toLowerCase();
86
+ const targets = new Set(keys.map(normalize));
87
+ for (const key of keys) {
88
+ const direct = parsed[key];
89
+ if (typeof direct === 'boolean')
90
+ return direct;
91
+ }
92
+ for (const [k, v] of Object.entries(parsed)) {
93
+ if (typeof v !== 'boolean')
94
+ continue;
95
+ if (targets.has(normalize(k)))
96
+ return v;
97
+ }
98
+ return undefined;
99
+ }
100
+ /** Detect whether raw JSON is legacy flat format (no `providers` object, but has flat provider keys). */
101
+ export function isLegacyFlatFormat(raw) {
102
+ const hasNested = 'providers' in raw && typeof raw.providers === 'object' && raw.providers !== null;
103
+ if (hasNested)
104
+ return false;
105
+ const flatMarkerKeys = [
106
+ 'MODEL_API_KEY', 'OPENAI_API_KEY', 'ANTHROPIC_API_KEY', 'OPENROUTER_API_KEY',
107
+ 'GOOGLE_API_KEY', 'MODEL_URL', 'ANTHROPIC_URL', 'OPENAI_URL', 'OPENROUTER_URL', 'GOOGLE_URL',
108
+ 'MODEL_PROVIDER',
109
+ ];
110
+ const normalize = (s) => s.replace(/[_-]/g, '').toLowerCase();
111
+ const markerTargets = new Set(flatMarkerKeys.map(normalize));
112
+ return Object.keys(raw).some(k => markerTargets.has(normalize(k)));
113
+ }
114
+ /** Migrate flat settings JSON to nested format. */
115
+ export function migrateFlatToNested(parsed) {
116
+ const modelProvider = (pickString(parsed, 'MODEL_PROVIDER') || 'anthropic').toLowerCase();
117
+ // Resolve which provider MODEL_API_KEY/MODEL_URL belonged to
118
+ const resolvedProvider = ['ollama', 'local'].includes(modelProvider)
119
+ ? modelProvider
120
+ : modelProvider || 'anthropic';
121
+ // Build provider configs from flat keys
122
+ const anthropicKey = pickString(parsed, 'ANTHROPIC_API_KEY', 'MODEL_API_KEY') || '';
123
+ const anthropicUrl = pickString(parsed, 'ANTHROPIC_URL', 'MODEL_URL') || 'https://api.anthropic.com';
124
+ const openaiKey = pickString(parsed, 'OPENAI_API_KEY', 'MODEL_API_KEY') || '';
125
+ const openaiUrl = pickString(parsed, 'OPENAI_URL', 'MODEL_URL') || 'https://api.openai.com';
126
+ const orKey = pickString(parsed, 'OPENROUTER_API_KEY', 'MODEL_API_KEY') || '';
127
+ const orUrl = pickString(parsed, 'OPENROUTER_URL', 'MODEL_URL') || 'https://openrouter.ai/api/v1';
128
+ const googleKey = pickString(parsed, 'GOOGLE_API_KEY', 'MODEL_API_KEY') || '';
129
+ const googleUrl = pickString(parsed, 'GOOGLE_URL', 'MODEL_URL') || '';
130
+ const ollamaKey = pickString(parsed, 'MODEL_API_KEY') || '';
131
+ const ollamaUrl = pickString(parsed, 'MODEL_URL') || 'http://localhost:11434/v1';
132
+ const localKey = pickString(parsed, 'MODEL_API_KEY') || '';
133
+ const localUrl = pickString(parsed, 'MODEL_URL') || '';
134
+ const providers = {
135
+ anthropic: { api_key: anthropicKey, url: anthropicUrl, model: DEFAULT_SETTINGS.providers.anthropic.model, model_cost: '', model_context_window: 200000 },
136
+ openai: { api_key: openaiKey, url: openaiUrl, model: DEFAULT_SETTINGS.providers.openai.model, model_cost: '', model_context_window: 131072 },
137
+ openrouter: { api_key: orKey, url: orUrl, model: DEFAULT_SETTINGS.providers.openrouter.model, model_cost: '', model_context_window: 200000 },
138
+ google: { api_key: googleKey, url: googleUrl, model: DEFAULT_SETTINGS.providers.google.model, model_cost: '', model_context_window: 131072 },
139
+ ollama: { api_key: ollamaKey, url: ollamaUrl, model: DEFAULT_SETTINGS.providers.ollama.model, model_cost: '', model_context_window: 131072 },
140
+ local: { api_key: localKey, url: localUrl, model: DEFAULT_SETTINGS.providers.local.model, model_cost: '', model_context_window: 131072 },
141
+ };
142
+ // Preserve flat model into the active provider's model
143
+ const flatModel = pickString(parsed, 'model') || DEFAULT_SETTINGS.model;
144
+ // Preserve flat model_cost / model_context_window into current provider
145
+ const flatModelCost = pickString(parsed, 'MODEL_COST', 'model_cost');
146
+ const flatModelCtxWindow = pickNumber(parsed, 'MODEL_CONTEXT_WINDOW', 'model_context_window');
147
+ const rp = providers[resolvedProvider];
148
+ rp.model = flatModel;
149
+ if (flatModelCost)
150
+ rp.model_cost = flatModelCost;
151
+ if (flatModelCtxWindow && flatModelCtxWindow > 0)
152
+ rp.model_context_window = flatModelCtxWindow;
153
+ const telegramBot = pickString(parsed, 'TELEGRAM_BOT_TOKEN', 'telegram_bot_token') || '';
154
+ const telegramUser = pickString(parsed, 'TELEGRAM_USER_ID', 'telegram_user_id') || '';
155
+ const telegramChat = pickString(parsed, 'TELEGRAM_CHAT_ID', 'telegram_chat_id') || '';
156
+ const telegramGroups = pickBool(parsed, 'TELEGRAM_ALLOW_GROUPS', 'telegram_allow_groups') ?? false;
157
+ const channelTab = pickString(parsed, 'CHANNEL_TAB_ACTIVE', 'channel_tab_active') || DEFAULT_SETTINGS.channels.tab_active;
158
+ const mcpServers = parsed.MCP_SERVERS || parsed.mcp_servers || {};
159
+ const safetyPathGuard = (pickString(parsed, 'SAFETY_PATH_GUARD', 'safety_path_guard') || 'on');
160
+ const safetyPathAllow = parsed.SAFETY_PATH_ALLOWLIST ?? parsed.safety_path_allowlist ?? '';
161
+ const safetyCmdGuard = (pickString(parsed, 'SAFETY_COMMAND_GUARD', 'safety_command_guard') || 'on');
162
+ const safetySnaps = (pickString(parsed, 'SAFETY_SNAPSHOTS', 'safety_snapshots') || 'on');
163
+ const acEnabled = (pickString(parsed, 'AUTO_COMPACT', 'auto_compact') || 'on');
164
+ const acThreshold = (pickNumber(parsed, 'AUTO_COMPACT_THRESHOLD', 'auto_compact_threshold') ?? 75);
165
+ const acWarnThreshold = (pickNumber(parsed, 'AUTO_COMPACT_WARN_THRESHOLD', 'auto_compact_warn_threshold') ?? 60);
166
+ const acForcedThreshold = (pickNumber(parsed, 'AUTO_COMPACT_FORCED_THRESHOLD', 'auto_compact_forced_threshold') ?? 85);
167
+ return {
168
+ model: flatModel,
169
+ effort: pickString(parsed, 'effort') || DEFAULT_SETTINGS.effort,
170
+ mode: migrateMode(parsed.mode),
171
+ theme: (pickString(parsed, 'theme') || DEFAULT_SETTINGS.theme),
172
+ statusline: pickBool(parsed, 'statusline') ?? DEFAULT_SETTINGS.statusline,
173
+ debug: pickBool(parsed, 'debug') ?? DEFAULT_SETTINGS.debug,
174
+ current_provider: resolvedProvider,
175
+ providers,
176
+ channels: { bot_token: telegramBot, user_id: telegramUser, chat_id: telegramChat, allow_groups: telegramGroups, tab_active: channelTab },
177
+ tools_per_call: (typeof pickNumber(parsed, 'TOOLS_PER_CALL', 'tools_per_call') === 'number' && pickNumber(parsed, 'TOOLS_PER_CALL', 'tools_per_call') > 0)
178
+ ? pickNumber(parsed, 'TOOLS_PER_CALL', 'tools_per_call') : DEFAULT_SETTINGS.tools_per_call,
179
+ websearch_per_call: (typeof pickNumber(parsed, 'WEBSEARCH_PER_CALL', 'websearch_per_call') === 'number' && pickNumber(parsed, 'WEBSEARCH_PER_CALL', 'websearch_per_call') > 0)
180
+ ? pickNumber(parsed, 'WEBSEARCH_PER_CALL', 'websearch_per_call') : DEFAULT_SETTINGS.websearch_per_call,
181
+ brave_search_api_key: pickString(parsed, 'BRAVE_SEARCH_API_KEY', 'brave_search_api_key', 'BRAVE_API_KEY') || '',
182
+ heartbeat: {
183
+ schedule: (pickString(parsed, 'HEARTBEAT', 'heartbeat') || 'off'),
184
+ mode: migrateMode(pickString(parsed, 'HEARTBEAT_MODE', 'heartbeat_mode', 'heartbeat.mode')) || 'yolo',
185
+ intraday: pickString(parsed, 'HEARTBEAT_INTRADAY', 'HEARTBEAT_TIMES', 'HEARTBEAT_HOURLY', 'heartbeat_intraday', 'heartbeat_times') || DEFAULT_SETTINGS.heartbeat.intraday,
186
+ daily: pickString(parsed, 'HEARTBEAT_DAILY', 'heartbeat_daily') || DEFAULT_SETTINGS.heartbeat.daily,
187
+ weekly: pickString(parsed, 'HEARTBEAT_WEEKLY', 'heartbeat_weekly') || DEFAULT_SETTINGS.heartbeat.weekly,
188
+ monthly: pickString(parsed, 'HEARTBEAT_MONTHLY', 'heartbeat_monthly') || DEFAULT_SETTINGS.heartbeat.monthly,
189
+ dreaming: pickString(parsed, 'HEARTBEAT_DREAMING', 'heartbeat_dreaming') || DEFAULT_SETTINGS.heartbeat.dreaming,
190
+ },
191
+ mcp_servers: mcpServers,
192
+ safety: {
193
+ path_guard: safetyPathGuard,
194
+ path_allowlist: safetyPathAllow,
195
+ command_guard: safetyCmdGuard,
196
+ snapshots: safetySnaps,
197
+ },
198
+ auto_compact: {
199
+ enabled: acEnabled,
200
+ threshold: acThreshold,
201
+ warn_threshold: acWarnThreshold,
202
+ forced_threshold: acForcedThreshold,
203
+ },
204
+ pricing_tier_warn: (pickString(parsed, 'PRICING_TIER_WARN', 'pricing_tier_warn') || 'on'),
205
+ web_ip: pickString(parsed, 'web_ip', 'WEB_IP') || '',
206
+ };
207
+ }
208
+ /** Serialize settings to JSON, stripping legacy flat keys. */
209
+ export function stripLegacyKeys(s) {
210
+ const legacy = new Set([
211
+ 'MODEL_PROVIDER', 'MODEL_URL', 'MODEL_API_KEY',
212
+ 'OPENAI_API_KEY', 'OPENAI_URL', 'ANTHROPIC_API_KEY', 'ANTHROPIC_URL',
213
+ 'OPENROUTER_API_KEY', 'OPENROUTER_URL', 'GOOGLE_API_KEY', 'GOOGLE_URL',
214
+ 'TELEGRAM_BOT_TOKEN', 'TELEGRAM_USER_ID', 'TELEGRAM_CHAT_ID', 'TELEGRAM_ALLOW_GROUPS',
215
+ 'CHANNEL_TAB_ACTIVE', 'MCP_SERVERS',
216
+ 'TOOLS_PER_CALL', 'WEBSEARCH_PER_CALL',
217
+ 'HEARTBEAT', 'HEARTBEAT_INTRADAY', 'HEARTBEAT_DAILY', 'HEARTBEAT_WEEKLY',
218
+ 'HEARTBEAT_MONTHLY', 'HEARTBEAT_DREAMING',
219
+ 'MODEL_COST', 'MODEL_CONTEXT_WINDOW',
220
+ 'SAFETY_PATH_GUARD', 'SAFETY_PATH_ALLOWLIST', 'SAFETY_COMMAND_GUARD', 'SAFETY_SNAPSHOTS',
221
+ 'AUTO_COMPACT', 'AUTO_COMPACT_THRESHOLD', 'AUTO_COMPACT_WARN_THRESHOLD', 'AUTO_COMPACT_FORCED_THRESHOLD',
222
+ 'PRICING_TIER_WARN',
223
+ ]);
224
+ const result = {};
225
+ for (const [k, v] of Object.entries(s)) {
226
+ if (legacy.has(k))
227
+ continue;
228
+ if (v === undefined)
229
+ continue;
230
+ result[k] = v;
231
+ }
232
+ return result;
233
+ }
234
+ // ── Constants ───────────────────────────────────────────────────────────────
43
235
  const CONFIG_DIR = join(homedir(), '.curie-agent');
44
236
  const SETTINGS_FILE = join(CONFIG_DIR, 'settings.json');
237
+ // ── SettingsManager ─────────────────────────────────────────────────────────
45
238
  export class SettingsManager {
46
239
  settings;
47
240
  constructor() {
@@ -54,80 +247,32 @@ export class SettingsManager {
54
247
  const raw = readFileSync(SETTINGS_FILE, 'utf-8');
55
248
  const parsed = JSON.parse(raw);
56
249
  if (parsed && typeof parsed === 'object') {
57
- // Accept MODEL_URL / MODEL_API_KEY regardless of casing (users
58
- // commonly write model_url, ModelUrl, MODEL_API, etc.).
59
- const pick = (...keys) => {
60
- for (const key of keys) {
61
- const direct = parsed[key];
62
- if (typeof direct === 'string' && direct.length > 0)
63
- return direct;
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;
250
+ if (isLegacyFlatFormat(parsed)) {
251
+ this.settings = migrateFlatToNested(parsed);
252
+ this.save();
253
+ }
254
+ else {
255
+ this.settings = parseNestedSettings(parsed);
256
+ }
118
257
  }
119
258
  }
120
259
  catch {
121
260
  // ignore parse errors, use defaults
122
261
  }
123
262
  }
263
+ // Sync top-level model to the active provider's default.
264
+ // model_override (set via /model) takes precedence over this.
265
+ const prov = this.settings.providers[this.settings.current_provider];
266
+ if (prov && !this.settings.model_override) {
267
+ this.settings.model = prov.model;
268
+ }
124
269
  return this.settings;
125
270
  }
126
271
  save() {
127
272
  if (!existsSync(CONFIG_DIR)) {
128
273
  mkdirSync(CONFIG_DIR, { recursive: true });
129
274
  }
130
- writeFileSync(SETTINGS_FILE, JSON.stringify(this.settings, null, 2) + '\n');
275
+ writeFileSync(SETTINGS_FILE, JSON.stringify(stripLegacyKeys(this.settings), null, 2) + '\n');
131
276
  }
132
277
  update(partial) {
133
278
  this.settings = { ...this.settings, ...partial };
@@ -137,5 +282,131 @@ export class SettingsManager {
137
282
  get() {
138
283
  return { ...this.settings };
139
284
  }
285
+ /** Get the currently active model name (override or provider default). */
286
+ getActiveModel() {
287
+ const p = this.settings.providers[this.settings.current_provider];
288
+ return this.settings.model_override || p?.model || DEFAULT_SETTINGS.model;
289
+ }
290
+ /** Get the currently active provider name. */
291
+ getCurrentProvider() {
292
+ return this.settings.current_provider;
293
+ }
294
+ getProviderKey(provider, key) {
295
+ const name = provider || this.settings.current_provider;
296
+ const p = this.settings.providers[name];
297
+ if (!p)
298
+ return '';
299
+ return p[key] ?? '';
300
+ }
301
+ /** Set a specific property on a provider's config. */
302
+ setProviderKey(provider, key, value) {
303
+ const name = provider || this.settings.current_provider;
304
+ const existing = this.settings.providers[name] || {};
305
+ this.settings.providers = {
306
+ ...this.settings.providers,
307
+ [name]: { ...existing, [key]: value },
308
+ };
309
+ this.save();
310
+ return this.settings;
311
+ }
312
+ /** Set the current provider and reset model to its default. */
313
+ setCurrentProvider(name) {
314
+ this.settings.current_provider = name;
315
+ const prov = this.settings.providers[name];
316
+ if (prov) {
317
+ this.settings.model = prov.model;
318
+ }
319
+ this.settings.model_override = undefined;
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
+ };
353
+ }
354
+ }
355
+ }
356
+ const rawChannels = parsed.channels;
357
+ const channelsConfig = {
358
+ bot_token: getString(['channels.bot_token', 'CHANNEL_TAB_ACTIVE']) || rawChannels?.bot_token || '',
359
+ user_id: getString(['channels.user_id']) || rawChannels?.user_id || '',
360
+ chat_id: getString(['channels.chat_id']) || rawChannels?.chat_id || '',
361
+ allow_groups: getBool(['channels.allow_groups', 'TELEGRAM_ALLOW_GROUPS']) ?? rawChannels?.allow_groups ?? false,
362
+ tab_active: getString(['channels.tab_active']) || rawChannels?.tab_active || DEFAULT_SETTINGS.channels.tab_active,
363
+ };
364
+ const rawHeartbeat = parsed.heartbeat;
365
+ const heartbeatConfig = {
366
+ schedule: (getString(['heartbeat.schedule', 'HEARTBEAT']) || rawHeartbeat?.schedule || 'off'),
367
+ mode: migrateMode(getString(['heartbeat.mode']) || rawHeartbeat?.mode) || 'yolo',
368
+ intraday: getString(['heartbeat.intraday', 'HEARTBEAT_INTRADAY', 'HEARTBEAT_TIMES', 'HEARTBEAT_HOURLY']) || rawHeartbeat?.intraday || DEFAULT_SETTINGS.heartbeat.intraday,
369
+ daily: getString(['heartbeat.daily', 'HEARTBEAT_DAILY']) || rawHeartbeat?.daily || DEFAULT_SETTINGS.heartbeat.daily,
370
+ weekly: getString(['heartbeat.weekly', 'HEARTBEAT_WEEKLY']) || rawHeartbeat?.weekly || DEFAULT_SETTINGS.heartbeat.weekly,
371
+ monthly: getString(['heartbeat.monthly', 'HEARTBEAT_MONTHLY']) || rawHeartbeat?.monthly || DEFAULT_SETTINGS.heartbeat.monthly,
372
+ dreaming: getString(['heartbeat.dreaming', 'HEARTBEAT_DREAMING']) || rawHeartbeat?.dreaming || DEFAULT_SETTINGS.heartbeat.dreaming,
373
+ };
374
+ const rawSafety = parsed.safety;
375
+ const safetyConfig = {
376
+ path_guard: (getString(['safety.path_guard', 'SAFETY_PATH_GUARD']) || rawSafety?.path_guard || 'on'),
377
+ path_allowlist: rawSafety?.path_allowlist ?? getString(['safety.path_allowlist', 'SAFETY_PATH_ALLOWLIST']) ?? '',
378
+ command_guard: (getString(['safety.command_guard', 'SAFETY_COMMAND_GUARD']) || rawSafety?.command_guard || 'on'),
379
+ snapshots: (getString(['safety.snapshots', 'SAFETY_SNAPSHOTS']) || rawSafety?.snapshots || 'on'),
380
+ };
381
+ const rawAutoComp = parsed.auto_compact;
382
+ const autoCompactConfig = {
383
+ enabled: (getString(['auto_compact.enabled', 'AUTO_COMPACT']) || rawAutoComp?.enabled || 'on'),
384
+ threshold: getNumber(['auto_compact.threshold', 'AUTO_COMPACT_THRESHOLD']) ?? rawAutoComp?.threshold ?? DEFAULT_SETTINGS.auto_compact.threshold,
385
+ warn_threshold: getNumber(['auto_compact.warn_threshold', 'AUTO_COMPACT_WARN_THRESHOLD']) ?? rawAutoComp?.warn_threshold ?? DEFAULT_SETTINGS.auto_compact.warn_threshold,
386
+ forced_threshold: getNumber(['auto_compact.forced_threshold', 'AUTO_COMPACT_FORCED_THRESHOLD']) ?? rawAutoComp?.forced_threshold ?? DEFAULT_SETTINGS.auto_compact.forced_threshold,
387
+ };
388
+ return {
389
+ model: getString(['model']) || DEFAULT_SETTINGS.model,
390
+ effort: (getString(['effort']) || DEFAULT_SETTINGS.effort),
391
+ mode: migrateMode(parsed.mode),
392
+ theme: getString(['theme']) || DEFAULT_SETTINGS.theme,
393
+ statusline: getBool(['statusline']) ?? DEFAULT_SETTINGS.statusline,
394
+ debug: getBool(['debug']) ?? DEFAULT_SETTINGS.debug,
395
+ current_provider: getString(['current_provider']) || DEFAULT_SETTINGS.current_provider,
396
+ providers,
397
+ channels: channelsConfig,
398
+ tools_per_call: (typeof getNumber(['tools_per_call', 'TOOLS_PER_CALL']) === 'number' && getNumber(['tools_per_call', 'TOOLS_PER_CALL']) > 0)
399
+ ? getNumber(['tools_per_call', 'TOOLS_PER_CALL']) : DEFAULT_SETTINGS.tools_per_call,
400
+ websearch_per_call: (typeof getNumber(['websearch_per_call', 'WEBSEARCH_PER_CALL']) === 'number' && getNumber(['websearch_per_call', 'WEBSEARCH_PER_CALL']) > 0)
401
+ ? getNumber(['websearch_per_call', 'WEBSEARCH_PER_CALL']) : DEFAULT_SETTINGS.websearch_per_call,
402
+ brave_search_api_key: getString(['brave_search_api_key', 'BRAVE_SEARCH_API_KEY', 'BRAVE_API_KEY']),
403
+ heartbeat: heartbeatConfig,
404
+ mcp_servers: (parsed.mcp_servers || parsed.MCP_SERVERS) || {},
405
+ safety: safetyConfig,
406
+ auto_compact: autoCompactConfig,
407
+ pricing_tier_warn: (getString(['pricing_tier_warn', 'PRICING_TIER_WARN']) || 'on'),
408
+ web_ip: getString(['web_ip', 'WEB_IP']) || '',
409
+ daemon_token: getString(['daemon_token']),
410
+ };
140
411
  }
141
412
  //# sourceMappingURL=settings.js.map
@@ -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,68 @@
1
+ import { type ReasoningEffort, type ProviderStream, type Tool } from './turn-loop.js';
2
+ import { EventBus } from './event-bus.js';
3
+ import { SessionStore } from './session-store.js';
4
+ import type { ApprovalMode } from './permission.js';
5
+ import type { CurieSettings } from './settings.js';
6
+ export interface SubagentConfig {
7
+ provider: ProviderStream;
8
+ model: string;
9
+ tools: Tool[];
10
+ cwd: string;
11
+ settings: CurieSettings;
12
+ prompt: string;
13
+ system?: string;
14
+ providerName?: string;
15
+ mode?: ApprovalMode;
16
+ effort?: ReasoningEffort;
17
+ maxTurns?: number;
18
+ /** Tool names to allow (subset of parent's tools). Undefined = all tools. */
19
+ allowedTools?: string[];
20
+ /** Additional context to inject into the subagent's system prompt */
21
+ context?: string;
22
+ /** Session type / entrypoint (e.g. 'subagent') */
23
+ type?: string;
24
+ /** Extra data attached to this agent — stored in handle and emitted with lifecycle events */
25
+ metadata?: Record<string, unknown>;
26
+ }
27
+ export interface SubagentHandle {
28
+ agentId: string;
29
+ sessionId: string;
30
+ prompt: string;
31
+ provider: string;
32
+ status: 'starting' | 'running' | 'waiting_tool' | 'done' | 'error' | 'cancelled';
33
+ text: string;
34
+ toolCalls: number;
35
+ errors: string[];
36
+ inputTokens: number;
37
+ outputTokens: number;
38
+ startedAt: number;
39
+ doneAt?: number;
40
+ /** Link back to a scheduled task (auto-mode tasks only). */
41
+ taskId?: string;
42
+ /** Type of spawn: 'subagent' (manual) or 'auto' (scheduled task). */
43
+ taskType?: string;
44
+ /** Extra data — passed through from spawn config. */
45
+ metadata?: Record<string, unknown>;
46
+ }
47
+ export declare class SubagentExecutor {
48
+ private eventBus;
49
+ private sessionStore;
50
+ private maxConcurrentOption?;
51
+ private agents;
52
+ private running;
53
+ private maxConcurrent;
54
+ constructor(eventBus: EventBus, sessionStore: SessionStore, maxConcurrentOption?: number | undefined);
55
+ spawn(config: SubagentConfig): Promise<SubagentHandle>;
56
+ private runSubagent;
57
+ cancel(agentId: string): boolean;
58
+ list(statusFilter?: string): SubagentHandle[];
59
+ stats(agentId: string): SubagentHandle | undefined;
60
+ /**
61
+ * Send a message to a running subagent.
62
+ * Appends the message as a user prompt to the subagent's session.
63
+ */
64
+ sendMessage(agentId: string, message: string): boolean;
65
+ shutdown(): void;
66
+ private getRunningCount;
67
+ }
68
+ //# sourceMappingURL=subagent-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-executor.d.ts","sourceRoot":"","sources":["../../src/subagent-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,EAAE,QAAQ,EAAc,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAoB,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,qBAAa,gBAAgB;IAMzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,mBAAmB,CAAC;IAP9B,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,aAAa,CAAS;gBAGpB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,mBAAmB,CAAC,EAAE,MAAM,YAAA;IAKhC,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;YAqE9C,WAAW;IAmHzB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IA+BhC,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE;IAM7C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIlD;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAgBtD,QAAQ,IAAI,IAAI;IAQhB,OAAO,CAAC,eAAe;CAGxB"}