@curie-agent/core 0.2.3 → 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,6 @@
1
1
  import { type ReasoningEffort, type ProviderStream, type Tool } from './turn-loop.js';
2
2
  import type { CurieSettings } from './settings.js';
3
- import type { ScheduleType } from './cron-manager.js';
3
+ import type { ScheduleType } from './unified-task.js';
4
4
  export interface HeartbeatExecutorConfig {
5
5
  provider: ProviderStream;
6
6
  model: string;
@@ -12,17 +12,50 @@ export interface HeartbeatExecutorConfig {
12
12
  maxTurns?: number;
13
13
  /** Which HEARTBEAT.md section to execute (times|daily|weekly|monthly). */
14
14
  scheduleType?: ScheduleType;
15
+ /** System prompt for the heartbeat turn loop. */
16
+ system?: string;
15
17
  }
16
18
  export interface HeartbeatResult {
17
19
  sessionId: string;
18
20
  text: string;
19
21
  toolCalls: number;
22
+ maxTurns?: number;
23
+ reason: string;
20
24
  usage: {
21
25
  inputTokens: number;
22
26
  outputTokens: number;
23
27
  };
24
28
  errors: string[];
25
29
  }
30
+ export interface BatchResult {
31
+ text: string;
32
+ toolCalls: number;
33
+ sessionId: string;
34
+ reason: string;
35
+ errors: string[];
36
+ }
37
+ /**
38
+ * Wraps TurnLoop with yolo (auto-approve) mode and collects
39
+ * text output, tool call count, and errors via EventBus subscriptions.
40
+ */
41
+ export declare class BatchTurnLoop {
42
+ private turnLoop;
43
+ private collectedText;
44
+ private toolCallCount;
45
+ private errors;
46
+ constructor(config: {
47
+ provider: ProviderStream;
48
+ model: string;
49
+ tools: Tool[];
50
+ cwd: string;
51
+ settings: CurieSettings;
52
+ effort?: ReasoningEffort;
53
+ maxTurns?: number;
54
+ system?: string;
55
+ type?: string;
56
+ });
57
+ run(prompt: string): Promise<BatchResult>;
58
+ }
26
59
  export declare class HeartbeatExecutor {
27
60
  private config;
28
61
  private heartbeatDir;
@@ -30,6 +63,7 @@ export declare class HeartbeatExecutor {
30
63
  execute(): Promise<HeartbeatResult>;
31
64
  private readHeartbeatMd;
32
65
  private gatherContext;
33
- private buildPrompt;
66
+ private buildSystemPrompt;
67
+ private buildUserInstruction;
34
68
  }
35
69
  //# sourceMappingURL=heartbeat-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat-executor.d.ts","sourceRoot":"","sources":["../../src/heartbeat-executor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,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,CAAC,EAAE,eAAe,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AA8FD,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,YAAY,CAAS;gBAET,MAAM,EAAE,uBAAuB;IAI7C,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IA+BzC,OAAO,CAAC,eAAe;YAQT,aAAa;IAoC3B,OAAO,CAAC,WAAW;CA6BpB"}
1
+ {"version":3,"file":"heartbeat-executor.d.ts","sourceRoot":"","sources":["../../src/heartbeat-executor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,MAAM,WAAW,uBAAuB;IACtC,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,CAAC,EAAE,eAAe,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE;QAClB,QAAQ,EAAE,cAAc,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,IAAI,EAAE,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,CAAC,EAAE,eAAe,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAgBK,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAwBhD;AA2BD,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,YAAY,CAAS;gBAET,MAAM,EAAE,uBAAuB;IAI7C,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAqCzC,OAAO,CAAC,eAAe;YAQT,aAAa;IAmC3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,oBAAoB;CAM7B"}
@@ -2,26 +2,29 @@ import { homedir } from 'node:os';
2
2
  import { join } from 'node:path';
3
3
  import { readFileSync, existsSync } from 'node:fs';
4
4
  import { TurnLoop } from './turn-loop.js';
5
+ import { readTaskSummary } from './task-summary.js';
5
6
  /**
6
7
  * Wraps TurnLoop with yolo (auto-approve) mode and collects
7
8
  * text output, tool call count, and errors via EventBus subscriptions.
8
9
  */
9
- class BatchTurnLoop {
10
+ export class BatchTurnLoop {
10
11
  turnLoop;
11
12
  collectedText = '';
12
13
  toolCallCount = 0;
13
14
  errors = [];
14
15
  constructor(config) {
16
+ const approvalMode = config.settings.heartbeat?.mode || 'yolo';
15
17
  this.turnLoop = new TurnLoop({
16
18
  provider: config.provider,
17
19
  model: config.model,
18
20
  tools: config.tools,
19
21
  cwd: config.cwd,
20
22
  settings: config.settings,
21
- approvalMode: 'yolo',
23
+ approvalMode,
22
24
  effort: config.effort,
23
25
  maxTurns: config.maxTurns,
24
26
  system: config.system,
27
+ type: config.type || 'heartbeat',
25
28
  });
26
29
  }
27
30
  async run(prompt) {
@@ -59,7 +62,7 @@ AI AGENT INSTRUCTIONS: This file dictates your periodic proactive routine. Execu
59
62
 
60
63
  ## Data Ingestion & State Check
61
64
  Scan and load the current state of:
62
- - TODO.md: Parse active tasks
65
+ - tasks.json (or todo.json): Parse active tasks in the current project
63
66
  - Short-Term Memory: Ingest recent daily logs from ~/.curie-agent/memory/
64
67
 
65
68
  ## Synthesis & Insight Generation
@@ -72,7 +75,7 @@ Cross-reference ingested data to formulate proactive insights (1-3 concise, acti
72
75
  ## User Output (The Heartbeat Brief)
73
76
  Generate a strictly formatted status report:
74
77
  - Insights: [Brief bullet points]
75
- - Proposed Actions: [Tasks ready to be added to TODO.md]
78
+ - Proposed Actions: [Tasks ready to be added to tasks.json]
76
79
  - System Status: [Confirmation of updates]`;
77
80
  export class HeartbeatExecutor {
78
81
  config;
@@ -84,10 +87,12 @@ export class HeartbeatExecutor {
84
87
  async execute() {
85
88
  // 1. Read HEARTBEAT.md instructions
86
89
  const heartbeatProtocol = this.readHeartbeatMd();
87
- // 2. Gather context
90
+ // 2. Gather context (MEMORY.md, USER.md, tasks summary — no AGENTS.md dup)
88
91
  const context = await this.gatherContext();
89
- // 3. Build prompt with schedule-type header
90
- const prompt = this.buildPrompt(heartbeatProtocol, context, this.config.scheduleType);
92
+ // 3. Build system prompt with protocol + context; user gets minimal instruction
93
+ const fullSystem = this.buildSystemPrompt(heartbeatProtocol, context);
94
+ const baseSystem = this.config.system || 'You are running a Heartbeat cycle.';
95
+ const userInstruction = this.buildUserInstruction(this.config.scheduleType);
91
96
  // 4. Run batch turn loop
92
97
  const batchResult = await new BatchTurnLoop({
93
98
  provider: this.config.provider,
@@ -97,12 +102,16 @@ export class HeartbeatExecutor {
97
102
  settings: this.config.settings,
98
103
  effort: this.config.effort,
99
104
  maxTurns: this.config.maxTurns ?? 30,
100
- system: `You are running a Heartbeat cycle. Follow the instructions in the prompt carefully. Use tools to gather data, analyze, and produce the final Heartbeat Brief.`,
101
- }).run(prompt);
105
+ // baseSystem (AGENTS.md + skills) is enriched by withDateContext() in TurnLoop
106
+ system: fullSystem ? `${baseSystem}\n\n${fullSystem}` : baseSystem,
107
+ }).run(userInstruction);
108
+ const maxTurns = this.config.maxTurns ?? 30;
102
109
  return {
103
110
  sessionId: batchResult.sessionId,
104
111
  text: batchResult.text,
105
112
  toolCalls: batchResult.toolCalls,
113
+ maxTurns,
114
+ reason: batchResult.reason,
106
115
  usage: { inputTokens: 0, outputTokens: 0 },
107
116
  errors: batchResult.errors,
108
117
  };
@@ -126,15 +135,16 @@ export class HeartbeatExecutor {
126
135
  if (existsSync(userPath)) {
127
136
  sections.push('=== USER.md ===\n' + readFileSync(userPath, 'utf-8'));
128
137
  }
129
- // Gather AGENTS.md
130
- const agentsPath = join(this.heartbeatDir, 'AGENTS.md');
131
- if (existsSync(agentsPath)) {
132
- sections.push('=== AGENTS.md ===\n' + readFileSync(agentsPath, 'utf-8'));
138
+ // Gather project tasks/todo file from cwd (try unified format first, fall back to legacy)
139
+ const taskPath = join(this.config.cwd, 'tasks.json');
140
+ if (!existsSync(taskPath)) {
141
+ const todoPath = join(this.config.cwd, 'todo.json');
142
+ if (existsSync(todoPath)) {
143
+ sections.push('=== Project Tasks ===\n' + readTaskSummary(todoPath));
144
+ }
133
145
  }
134
- // Gather TODO.md from cwd
135
- const todoPath = join(this.config.cwd, 'TODO.md');
136
- if (existsSync(todoPath)) {
137
- sections.push('=== TODO.md ===\n' + readFileSync(todoPath, 'utf-8'));
146
+ else {
147
+ sections.push('=== Project Tasks ===\n' + readTaskSummary(taskPath));
138
148
  }
139
149
  // Gather daily memory logs (last 3)
140
150
  const memoryDir = join(this.heartbeatDir, 'memory');
@@ -143,32 +153,14 @@ export class HeartbeatExecutor {
143
153
  }
144
154
  return sections.join('\n\n');
145
155
  }
146
- buildPrompt(protocol, context, scheduleType) {
156
+ buildSystemPrompt(protocol, context) {
157
+ return ['=== HEARTBEAT PROTOCOL ===', protocol, '', '=== GATHERED CONTEXT ===', context].join('\n');
158
+ }
159
+ buildUserInstruction(scheduleType) {
147
160
  const scheduleHint = scheduleType
148
161
  ? `Execute the **${scheduleType}** section of the HEARTBEAT protocol.\n`
149
162
  : '';
150
- const now = new Date().toLocaleString('en-US', {
151
- weekday: 'long',
152
- year: 'numeric',
153
- month: 'long',
154
- day: 'numeric',
155
- hour: '2-digit',
156
- minute: '2-digit',
157
- second: '2-digit',
158
- hour12: false,
159
- });
160
- return [
161
- '=== HEARTBEAT PROTOCOL ===',
162
- protocol,
163
- '',
164
- '=== GATHERED CONTEXT ===',
165
- context,
166
- '',
167
- '=== CURRENT TIME ===',
168
- now,
169
- '',
170
- `${scheduleHint}Please now execute the Heartbeat protocol using the gathered context. Produce the final Heartbeat Brief as specified in the protocol.`,
171
- ].join('\n');
163
+ return `${scheduleHint}Please now execute the Heartbeat protocol using the gathered context. Produce the final Heartbeat Brief as specified in the protocol.`;
172
164
  }
173
165
  }
174
166
  //# sourceMappingURL=heartbeat-executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat-executor.js","sourceRoot":"","sources":["../../src/heartbeat-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"heartbeat-executor.js","sourceRoot":"","sources":["../../src/heartbeat-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export type ProviderName = 'anthropic' | 'openai' | 'local' | 'openrouter' | 'ollama';
2
+ export interface InitData {
3
+ provider: ProviderName | null;
4
+ apiKey: string | null;
5
+ model: string | null;
6
+ soul: {
7
+ name: string;
8
+ vibe: string;
9
+ };
10
+ user: {
11
+ name: string;
12
+ timezone: string;
13
+ languages: string;
14
+ };
15
+ agentsAccepted: boolean;
16
+ }
17
+ export declare function createIdentityFiles(data: InitData): void;
18
+ //# sourceMappingURL=identity-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-files.d.ts","sourceRoot":"","sources":["../../src/identity-files.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEtF,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,cAAc,EAAE,OAAO,CAAC;CACzB;AAcD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CA8LxD"}
@@ -0,0 +1,198 @@
1
+ import * as fs from 'node:fs';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ function CurieDir() {
5
+ return path.join(os.homedir(), '.curie-agent');
6
+ }
7
+ function writeCurieFile(name, content) {
8
+ const dir = CurieDir();
9
+ if (!fs.existsSync(dir)) {
10
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
11
+ }
12
+ fs.writeFileSync(path.join(dir, name), content, 'utf-8');
13
+ }
14
+ export function createIdentityFiles(data) {
15
+ const timestamp = new Date().toISOString();
16
+ // SOUL.md
17
+ writeCurieFile('SOUL.md', [
18
+ `# SOUL.md - Who You Are`,
19
+ '',
20
+ `_You're not a chatbot. You're becoming someone._`,
21
+ '',
22
+ '---',
23
+ '',
24
+ `- **Name:** ${data.soul.name}`,
25
+ `- **Creature:** AI assistant`,
26
+ `- **Vibe:** ${data.soul.vibe}`,
27
+ `- **Emoji:** ✨`,
28
+ '',
29
+ '---',
30
+ '',
31
+ '## Core Truths',
32
+ '',
33
+ '**Be genuinely helpful, not performatively helpful.** Skip the "Great question!" and "I\'d be happy to help!" — just help.',
34
+ '',
35
+ '**Have opinions.** You\'re allowed to disagree, prefer things, find stuff amusing or boring.',
36
+ '',
37
+ '**Be resourceful before asking.** Try to figure it out. Read the file. Check the context. Then ask if you\'re stuck.',
38
+ '',
39
+ '**Earn trust through competence.** Be careful with external actions. Be bold with internal ones.',
40
+ '',
41
+ '## Boundaries',
42
+ '',
43
+ '- Private things stay private. Period.',
44
+ '- When in doubt, ask before acting externally.',
45
+ '- Never send half-baked replies to messaging surfaces.',
46
+ '',
47
+ '## Continuity',
48
+ '',
49
+ 'Each session, you wake up fresh. These files _are_ your memory. Read them. Update them.',
50
+ '',
51
+ '---',
52
+ '',
53
+ `_This file is yours to evolve._`,
54
+ '',
55
+ ].join('\n'));
56
+ // USER.md
57
+ writeCurieFile('USER.md', [
58
+ `# USER.md - About Your Human`,
59
+ '',
60
+ `_Learn about the person you're helping. Update this as you go._`,
61
+ '',
62
+ `- **Name:** ${data.user.name}`,
63
+ `- **What to call them:** ${data.user.name}`,
64
+ `- **Pronouns:** he/him`,
65
+ `- **Timezone:** ${data.user.timezone}`,
66
+ `- **Expertise:** ${data.user.languages}`,
67
+ '',
68
+ '## Context',
69
+ '',
70
+ '_(Fill this in as you learn more)_',
71
+ '',
72
+ '## Communication',
73
+ '',
74
+ '- **Preferred language:** English',
75
+ '',
76
+ '---',
77
+ '',
78
+ `The more you know, the better you can help.`,
79
+ '',
80
+ ].join('\n'));
81
+ // AGENTS.md
82
+ writeCurieFile('AGENTS.md', [
83
+ '# AGENTS.md - Your Workspace',
84
+ '',
85
+ 'This folder is home. Treat it that way.',
86
+ '',
87
+ '## Session Startup',
88
+ '',
89
+ 'Before doing anything else:',
90
+ '',
91
+ '1. Read `~/.curie-agent/SOUL.md` — who you are, your personality',
92
+ '2. Read `~/.curie-agent/USER.md` — Everything about your human',
93
+ '3. Read `~/.curie-agent/MEMORY.md` — Main memory file',
94
+ '4. Read `~/.curie-agent/memory/YYYY-MM-DD.md` (today + yesterday) for recent context',
95
+ '',
96
+ 'Don\'t ask permission. Just do it.',
97
+ '',
98
+ '## Memory',
99
+ '',
100
+ 'You wake up fresh each session. These files are your continuity:',
101
+ '',
102
+ '- **Daily notes:** `~/.curie-agent/memory/YYYY-MM-DD.md` — raw logs of what happened',
103
+ '- **Long-term:** `~/.curie-agent/MEMORY.md` — curated memories, distilled essence',
104
+ '',
105
+ 'Capture what matters. Decisions, context, things to remember. Skip secrets unless asked.',
106
+ '',
107
+ 'Store information always in English.',
108
+ '',
109
+ '## Core Capabilities',
110
+ '',
111
+ '### Coding Agent',
112
+ ' - **Turn loop**: stream LLM responses, handle tool calls, dispatch hooks, enforce approvals',
113
+ ' - **Tools**: Read, Edit, Write, Glob, Grep, Bash',
114
+ ' - **Approval tiers**: manual, edit, auto, yolo',
115
+ ' - **Plan mode**: structured planning before implementation',
116
+ ' - **Subagents**: delegate to isolated agents with worktree isolation',
117
+ ' - **MCP**: Model Context Protocol client (stdio, SSE, streamable-HTTP)',
118
+ '',
119
+ '## Red Lines',
120
+ '',
121
+ "- Don't exfiltrate private data. Ever.",
122
+ "- Don't run destructive commands without asking.",
123
+ "- When in doubt, ask.",
124
+ '',
125
+ '## External vs Internal',
126
+ '',
127
+ '**Safe to do freely:**',
128
+ ' - Read files, explore, organize, learn',
129
+ '',
130
+ '**Ask first:**',
131
+ ' - Sending emails, tweets, public posts',
132
+ ' - Anything that leaves the machine',
133
+ '',
134
+ '## Heartbeats',
135
+ '',
136
+ 'When you receive a heartbeat poll, use heartbeats productively!',
137
+ '',
138
+ 'Default heartbeat prompt:',
139
+ 'Read `~/.curie-agent/HEARTBEAT.md` if it exists. Follow it strictly. If nothing needs attention, reply `~/.curie-agent/HEARTBEAT_OK`.',
140
+ '',
141
+ '---',
142
+ '',
143
+ '_This is a starting point. Add your own conventions as you figure out what works._',
144
+ '',
145
+ ].join('\n'));
146
+ // MEMORY.md
147
+ writeCurieFile('MEMORY.md', [
148
+ '# MEMORY.md - Long-Term Memory',
149
+ '',
150
+ `## Identity`,
151
+ `- **Name:** ${data.soul.name}`,
152
+ `- **Vibe:** ${data.soul.vibe}`,
153
+ `- **First contact:** ${timestamp.split('T')[0]}`,
154
+ '',
155
+ '## People',
156
+ `- **${data.user.name}** — my human. TZ: ${data.user.timezone}. Languages: ${data.user.languages}.`,
157
+ '',
158
+ '## Lessons',
159
+ '_(none yet)_',
160
+ '',
161
+ '## Active Projects',
162
+ '_(none yet)_',
163
+ '',
164
+ ].join('\n'));
165
+ // TOOLS.md
166
+ writeCurieFile('TOOLS.md', [
167
+ '# TOOLS.md - Tool Notes',
168
+ '',
169
+ 'Keep local notes here: camera names, SSH details, voice preferences, etc.',
170
+ '',
171
+ '## Platform Formatting',
172
+ '',
173
+ '- **Telegram, Discord, WhatsApp:** No markdown tables — use bullet lists instead',
174
+ '- **Discord links:** Wrap in `<>` to suppress embeds',
175
+ '- **WhatsApp:** No headers — use **bold** or CAPS for emphasis',
176
+ '',
177
+ ].join('\n'));
178
+ // HEARTBEAT.md
179
+ writeCurieFile('HEARTBEAT.md', [
180
+ '# HEARTBEAT.md - Workspace Context',
181
+ '',
182
+ 'Use this file to track what needs attention. The agent should check this on heartbeat.',
183
+ '',
184
+ '## Checklist',
185
+ '- [ ] No pending items yet',
186
+ '',
187
+ '## Notes',
188
+ '_(fill in as needed)_',
189
+ '',
190
+ ].join('\n'));
191
+ // tasks.json (unified task store — empty initial list)
192
+ writeCurieFile('tasks.json', JSON.stringify({
193
+ $schema: 'tasks.schema.json',
194
+ version: 1,
195
+ tasks: [],
196
+ }, null, 2));
197
+ }
198
+ //# sourceMappingURL=identity-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-files.js","sourceRoot":"","sources":["../../src/identity-files.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,15 @@ export type { SessionInfo, SessionFile } from './session-store.js';
5
5
  export { PermissionEngine } from './permission.js';
6
6
  export type { ApprovalMode, PermissionRule, PermissionResult, PermissionDecision } from './permission.js';
7
7
  export { TurnLoop } from './turn-loop.js';
8
- export type { TurnLoopConfig, TurnLoopResult, ReasoningEffort, Message, AssistantBlock } from './turn-loop.js';
8
+ export type { TurnLoopConfig, TurnLoopResult, ReasoningEffort, Message, AssistantBlock, ProviderStream, Tool, ProviderEvent } from './turn-loop.js';
9
9
  export { SettingsManager } from './settings.js';
10
10
  export type { CurieSettings } from './settings.js';
11
11
  export { DEFAULT_SETTINGS } from './settings.js';
12
- export { CronManager } from './cron-manager.js';
12
+ export { TaskManager } from './task-manager.js';
13
+ export type { UnifiedTask, TasksFile, ScheduleType, TaskMode, TaskStatus, TaskPriority, TaskScope } from './unified-task.js';
14
+ export { scheduleLabel, createTaskDefaults, generateTaskId, taskTimestamp } from './unified-task.js';
15
+ export { migrateTasks } from './task-migration.js';
16
+ export { readTaskSummary } from './task-summary.js';
13
17
  export { parseReminderTime } from './reminder-parser.js';
14
18
  export { TelegramGateway } from './telegram-gateway.js';
15
19
  export type { TelegramMessageContext } from './telegram-gateway.js';
@@ -19,8 +23,18 @@ export { ChannelRouter } from './channel-router.js';
19
23
  export type { RouteResult } from './channel-router.js';
20
24
  export { HeartbeatExecutor } from './heartbeat-executor.js';
21
25
  export type { HeartbeatExecutorConfig, HeartbeatResult } from './heartbeat-executor.js';
22
- export type { ScheduleType, CronTask } from './cron-manager.js';
23
- export { pickNextSchedule, scheduleLabel } from './cron-manager.js';
26
+ export { pickNextSchedule, computeNextFire } from './unified-task.js';
24
27
  export { HeartbeatDelivery } from './heartbeat-delivery.js';
25
28
  export type { HeartbeatDeliveryConfig } from './heartbeat-delivery.js';
29
+ export { BatchTurnLoop } from './heartbeat-executor.js';
30
+ export type { BatchResult } from './heartbeat-executor.js';
31
+ export { SubagentExecutor } from './subagent-executor.js';
32
+ export type { SubagentConfig, SubagentHandle } from './subagent-executor.js';
33
+ export { TokenMonitor, parseTieredPricing, selectTier, estimateCost, type PriceTier } from './token-monitor.js';
34
+ export type { TokenMonitorConfig, TokenEvent } from './token-monitor.js';
35
+ export { withDateContext, formatDate } from './context.js';
36
+ export { listSnapshots, revertTo, createSnapshot } from './safety/snapshot.js';
37
+ export { isPathAllowed, resolveSafePath, parseAllowlist, curieAgentDir } from './safety/path-guard.js';
38
+ export { createIdentityFiles } from './identity-files.js';
39
+ export type { InitData, ProviderName } from './identity-files.js';
26
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACxF,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -4,12 +4,22 @@ export { PermissionEngine } from './permission.js';
4
4
  export { TurnLoop } from './turn-loop.js';
5
5
  export { SettingsManager } from './settings.js';
6
6
  export { DEFAULT_SETTINGS } from './settings.js';
7
- export { CronManager } from './cron-manager.js';
7
+ export { TaskManager } from './task-manager.js';
8
+ export { scheduleLabel, createTaskDefaults, generateTaskId, taskTimestamp } from './unified-task.js';
9
+ export { migrateTasks } from './task-migration.js';
10
+ export { readTaskSummary } from './task-summary.js';
8
11
  export { parseReminderTime } from './reminder-parser.js';
9
12
  export { TelegramGateway } from './telegram-gateway.js';
10
13
  export { ChannelRegistry } from './channel-registry.js';
11
14
  export { ChannelRouter } from './channel-router.js';
12
15
  export { HeartbeatExecutor } from './heartbeat-executor.js';
13
- export { pickNextSchedule, scheduleLabel } from './cron-manager.js';
16
+ export { pickNextSchedule, computeNextFire } from './unified-task.js';
14
17
  export { HeartbeatDelivery } from './heartbeat-delivery.js';
18
+ export { BatchTurnLoop } from './heartbeat-executor.js';
19
+ export { SubagentExecutor } from './subagent-executor.js';
20
+ export { TokenMonitor, parseTieredPricing, selectTier, estimateCost } from './token-monitor.js';
21
+ export { withDateContext, formatDate } from './context.js';
22
+ export { listSnapshots, revertTo, createSnapshot } from './safety/snapshot.js';
23
+ export { isPathAllowed, resolveSafePath, parseAllowlist, curieAgentDir } from './safety/path-guard.js';
24
+ export { createIdentityFiles } from './identity-files.js';
15
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AAEhH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,29 @@
1
+ export interface PriceTier {
2
+ threshold?: number;
3
+ in: number;
4
+ out: number;
5
+ }
6
+ /**
7
+ * Parse a MODEL_COST string into structured tiers.
8
+ *
9
+ * Flat format: "0.25;1.50" → single tier with no threshold.
10
+ * Tiered format: "0.25;1.50|200000<1.0;4.0" → base tier + one or more thresholded tiers.
11
+ *
12
+ * Tiers are separated by '|'. Each tiered segment uses "threshold<input;output>".
13
+ * Returns empty array if the string is malformed.
14
+ */
15
+ export declare function parseTieredPricing(cost: string): PriceTier[];
16
+ /**
17
+ * Select the pricing tier applicable for a given total token count.
18
+ * Walks tiers top-to-bottom; the highest threshold that totalTokens >= threshold wins.
19
+ * Falls back to the base tier (index 0) if no threshold is exceeded.
20
+ */
21
+ export declare function selectTier(tiers: PriceTier[], totalTokens: number): [number, number];
22
+ /**
23
+ * Estimate the USD cost of a token exchange given model and optional custom pricing.
24
+ *
25
+ * Uses custom pricing (flat or tiered) when provided, otherwise falls back
26
+ * to hardcoded Claude model rates.
27
+ */
28
+ export declare function estimateCost(model: string, inputTokens: number, outputTokens: number, customCost?: string): number;
29
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/pricing.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CA8B5D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAmBR"}