@curie-agent/core 0.4.2 → 0.4.4
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/dist/.tsbuildinfo +1 -1
- package/dist/src/compaction.d.ts +76 -0
- package/dist/src/compaction.d.ts.map +1 -0
- package/dist/src/compaction.js +229 -0
- package/dist/src/compaction.js.map +1 -0
- package/dist/src/context-budget.d.ts +72 -0
- package/dist/src/context-budget.d.ts.map +1 -0
- package/dist/src/context-budget.js +132 -0
- package/dist/src/context-budget.js.map +1 -0
- package/dist/src/event-bus.d.ts +20 -0
- package/dist/src/event-bus.d.ts.map +1 -1
- package/dist/src/event-bus.js.map +1 -1
- package/dist/src/index.d.ts +8 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/reminder-parser.d.ts +6 -0
- package/dist/src/reminder-parser.d.ts.map +1 -1
- package/dist/src/reminder-parser.js +85 -105
- package/dist/src/reminder-parser.js.map +1 -1
- package/dist/src/settings.d.ts +13 -0
- package/dist/src/settings.d.ts.map +1 -1
- package/dist/src/settings.js +37 -12
- package/dist/src/settings.js.map +1 -1
- package/dist/src/subagent-executor.d.ts +8 -0
- package/dist/src/subagent-executor.d.ts.map +1 -1
- package/dist/src/subagent-executor.js +20 -6
- package/dist/src/subagent-executor.js.map +1 -1
- package/dist/src/task-manager.d.ts +53 -12
- package/dist/src/task-manager.d.ts.map +1 -1
- package/dist/src/task-manager.js +225 -124
- package/dist/src/task-manager.js.map +1 -1
- package/dist/src/task-migration.d.ts +29 -2
- package/dist/src/task-migration.d.ts.map +1 -1
- package/dist/src/task-migration.js +115 -7
- package/dist/src/task-migration.js.map +1 -1
- package/dist/src/turn-loop.d.ts +22 -2
- package/dist/src/turn-loop.d.ts.map +1 -1
- package/dist/src/turn-loop.js +222 -95
- package/dist/src/turn-loop.js.map +1 -1
- package/package.json +1 -1
- package/templates/settings.json +100 -91
- package/dist/src/cron-manager.d.ts +0 -92
- package/dist/src/cron-manager.d.ts.map +0 -1
- package/dist/src/cron-manager.js +0 -410
- package/dist/src/cron-manager.js.map +0 -1
- package/dist/src/task-executor.d.ts +0 -31
- package/dist/src/task-executor.d.ts.map +0 -1
- package/dist/src/task-executor.js +0 -91
- package/dist/src/task-executor.js.map +0 -1
- package/dist/src/token-monitor.d.ts +0 -50
- package/dist/src/token-monitor.d.ts.map +0 -1
- package/dist/src/token-monitor.js +0 -119
- package/dist/src/token-monitor.js.map +0 -1
|
@@ -6,6 +6,8 @@ export class SubagentExecutor {
|
|
|
6
6
|
maxConcurrentOption;
|
|
7
7
|
agents = new Map();
|
|
8
8
|
running = new Map();
|
|
9
|
+
/** Live TurnLoop per running agent, so cancel() can actually abort the child. */
|
|
10
|
+
loops = new Map();
|
|
9
11
|
maxConcurrent;
|
|
10
12
|
constructor(eventBus, sessionStore, maxConcurrentOption) {
|
|
11
13
|
this.eventBus = eventBus;
|
|
@@ -62,10 +64,22 @@ export class SubagentExecutor {
|
|
|
62
64
|
sessionId: subSession.id,
|
|
63
65
|
}).finally(() => {
|
|
64
66
|
this.running.delete(agentId);
|
|
67
|
+
this.loops.delete(agentId);
|
|
65
68
|
});
|
|
66
69
|
this.running.set(agentId, promise);
|
|
67
70
|
return handle;
|
|
68
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Await a spawned subagent's completion and return its final handle.
|
|
74
|
+
* Resolves immediately if the agent has already finished. Returns undefined
|
|
75
|
+
* for an unknown agentId.
|
|
76
|
+
*/
|
|
77
|
+
async waitFor(agentId) {
|
|
78
|
+
const promise = this.running.get(agentId);
|
|
79
|
+
if (promise)
|
|
80
|
+
await promise;
|
|
81
|
+
return this.agents.get(agentId);
|
|
82
|
+
}
|
|
69
83
|
async runSubagent(config) {
|
|
70
84
|
const { agentId } = findHandle(this.agents, config.sessionId) ?? { agentId: '' };
|
|
71
85
|
const turnLoop = new TurnLoop({
|
|
@@ -81,6 +95,8 @@ export class SubagentExecutor {
|
|
|
81
95
|
sessionId: config.sessionId,
|
|
82
96
|
type: config.type || 'subagent',
|
|
83
97
|
}, this.sessionStore);
|
|
98
|
+
if (agentId)
|
|
99
|
+
this.loops.set(agentId, turnLoop);
|
|
84
100
|
// Use config.system directly as the subagent's system prompt
|
|
85
101
|
const runPromise = config.system
|
|
86
102
|
? createAndRunTurnLoop(turnLoop, config.prompt, config.system)
|
|
@@ -181,12 +197,9 @@ export class SubagentExecutor {
|
|
|
181
197
|
}
|
|
182
198
|
handle.status = 'cancelled';
|
|
183
199
|
handle.doneAt = Date.now();
|
|
184
|
-
//
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
// We need to find and cancel the TurnLoop — stored in the running promise
|
|
188
|
-
// For now, emit cancellation event
|
|
189
|
-
}
|
|
200
|
+
// Abort the child TurnLoop so it actually stops mid-turn, rather than
|
|
201
|
+
// running to completion while the handle claims it was cancelled.
|
|
202
|
+
this.loops.get(agentId)?.cancel();
|
|
190
203
|
this.eventBus.emit({
|
|
191
204
|
type: 'agent-error',
|
|
192
205
|
id: randomUUID(),
|
|
@@ -231,6 +244,7 @@ export class SubagentExecutor {
|
|
|
231
244
|
}
|
|
232
245
|
this.agents.clear();
|
|
233
246
|
this.running.clear();
|
|
247
|
+
this.loops.clear();
|
|
234
248
|
}
|
|
235
249
|
getRunningCount() {
|
|
236
250
|
return [...this.agents.values()].filter((a) => a.status === 'running' || a.status === 'starting').length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-executor.js","sourceRoot":"","sources":["../../src/subagent-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAwD,MAAM,gBAAgB,CAAC;AAiDhG,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"subagent-executor.js","sourceRoot":"","sources":["../../src/subagent-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Unified task manager —
|
|
2
|
+
* Unified task manager — the single owner of the task store.
|
|
3
3
|
* Manages tasks across both personal (~/.curie-agent/tasks.json) and project (<cwd>/tasks.json) scopes.
|
|
4
|
+
*
|
|
5
|
+
* Two invariants matter here:
|
|
6
|
+
* 1. Nothing is ever deleted automatically. Only explicit user actions
|
|
7
|
+
* (`removeTask`, `clearCompleted`) drop a task.
|
|
8
|
+
* 2. Every write goes through `mutate()`, which re-reads the file if another
|
|
9
|
+
* process touched it since our last read. Without this, two in-memory
|
|
10
|
+
* copies of the task array silently overwrite each other's work.
|
|
4
11
|
*/
|
|
5
12
|
import type { ScheduleType, TaskMode, TaskPriority, TaskScope, TaskStatus, UnifiedTask, TasksFile } from './unified-task.js';
|
|
6
13
|
export declare class TaskManager {
|
|
7
14
|
private data;
|
|
8
|
-
/** TTL for pruning completed tasks. */
|
|
9
|
-
private ttlMs;
|
|
10
15
|
/** File path for persistence. */
|
|
11
16
|
private filePath;
|
|
17
|
+
/** Fingerprint of the file as of our last read/write — used to detect foreign writes. */
|
|
18
|
+
private seenFingerprint;
|
|
12
19
|
/** Set of task IDs currently being executed (prevents re-firing). */
|
|
13
20
|
private executing;
|
|
14
|
-
constructor(
|
|
21
|
+
constructor(filePath?: string);
|
|
15
22
|
/** Reload the file from disk. */
|
|
16
23
|
load(): TasksFile;
|
|
17
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Persist the in-memory array as-is. Prefer the mutating methods below —
|
|
26
|
+
* they reload first, so they can't clobber another writer's changes.
|
|
27
|
+
*/
|
|
18
28
|
save(): void;
|
|
29
|
+
/** Re-read the file if someone else wrote it since we last looked. */
|
|
30
|
+
private refreshIfStale;
|
|
31
|
+
/**
|
|
32
|
+
* The only write path: reload-if-stale → mutate → persist.
|
|
33
|
+
* All lookups must happen inside `fn`, since a refresh replaces the array.
|
|
34
|
+
*/
|
|
35
|
+
private mutate;
|
|
19
36
|
/** Create a new task with the given mode and scope. */
|
|
20
37
|
create(options: {
|
|
21
38
|
title: string;
|
|
@@ -35,7 +52,16 @@ export declare class TaskManager {
|
|
|
35
52
|
updateTaskStatus(id: string, status: TaskStatus): boolean;
|
|
36
53
|
/** Advance through the manual task lifecycle (todo → in_progress → done). */
|
|
37
54
|
setTaskStatus(id: string, status: 'todo' | 'in_progress'): boolean;
|
|
38
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* Apply a partial patch to a task. Use this instead of mutating the object
|
|
57
|
+
* returned by `findTask()` and calling `save()` — that pattern races.
|
|
58
|
+
*/
|
|
59
|
+
updateTask(id: string, patch: Partial<Omit<UnifiedTask, 'id'>>): UnifiedTask | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Find a single task by ID. Falls back to a unique prefix match, so the
|
|
62
|
+
* truncated IDs shown by `/todo list` and `/cron list` are usable directly.
|
|
63
|
+
* Ambiguous prefixes resolve to undefined rather than an arbitrary task.
|
|
64
|
+
*/
|
|
39
65
|
findTask(id: string): UnifiedTask | undefined;
|
|
40
66
|
/** List tasks with optional filters. */
|
|
41
67
|
list(options?: {
|
|
@@ -44,7 +70,7 @@ export declare class TaskManager {
|
|
|
44
70
|
scope?: TaskScope;
|
|
45
71
|
priority?: TaskPriority;
|
|
46
72
|
}): UnifiedTask[];
|
|
47
|
-
/** Get pending scheduled tasks that are due (mode=
|
|
73
|
+
/** Get pending scheduled tasks that are due (mode=agent or notify with scheduled_at <= now). */
|
|
48
74
|
getNextTasks(now?: number): UnifiedTask[];
|
|
49
75
|
/** Mark a task as currently executing. */
|
|
50
76
|
markExecuting(id: string): boolean;
|
|
@@ -52,23 +78,30 @@ export declare class TaskManager {
|
|
|
52
78
|
clearExecuting(id: string): void;
|
|
53
79
|
/** Cancel (soft-delete) a pending/fired task. */
|
|
54
80
|
cancelTask(id: string): boolean;
|
|
55
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Remove completed/canceled/failed tasks (hard-delete).
|
|
83
|
+
* Explicit user action only — nothing calls this on a timer.
|
|
84
|
+
*/
|
|
56
85
|
clearCompleted(): number;
|
|
57
86
|
/** Remove a task permanently. */
|
|
58
87
|
removeTask(id: string): boolean;
|
|
88
|
+
/** Reorder tasks to match the given ID sequence. IDs not listed keep their relative order. */
|
|
89
|
+
reorder(ids: string[]): number;
|
|
59
90
|
/** Renormalize the `order` field for all tasks in scope. */
|
|
60
91
|
private renormalizeOrders;
|
|
61
|
-
/** Remove completed tasks older than the cutoff. Pending/pending-like tasks always kept. */
|
|
62
|
-
pruneOld(cutoff: number): number;
|
|
63
92
|
/** Count of pending tasks. */
|
|
64
93
|
get pendingCount(): number;
|
|
65
|
-
/** Check if a task is a recurring heartbeat (
|
|
94
|
+
/** Check if a task is a recurring heartbeat (agent mode with a frequency). */
|
|
66
95
|
isHeartbeat(task: UnifiedTask): boolean;
|
|
67
96
|
/** Get all pending heartbeat tasks. */
|
|
68
97
|
getHeartbeats(): UnifiedTask[];
|
|
69
98
|
/**
|
|
70
99
|
* Evaluate all five heartbeat schedule settings and ensure exactly one
|
|
71
|
-
* pending
|
|
100
|
+
* pending agent+frequency task exists in the store. Called after settings change.
|
|
101
|
+
*
|
|
102
|
+
* If the winning schedule is unchanged, `scheduled_at` is left alone —
|
|
103
|
+
* recomputing it from "now" on every config change silently skips the slot
|
|
104
|
+
* the user was waiting for.
|
|
72
105
|
*/
|
|
73
106
|
rescheduleFromSettings(settings: {
|
|
74
107
|
HEARTBEAT_INTRADAY?: string;
|
|
@@ -80,4 +113,12 @@ export declare class TaskManager {
|
|
|
80
113
|
/** Cancel all pending heartbeat tasks. Returns count cancelled. */
|
|
81
114
|
cancelAllHeartbeats(): number;
|
|
82
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Get the process-shared TaskManager for a store path. Every writer in a
|
|
118
|
+
* process must go through this — separate instances hold separate copies of
|
|
119
|
+
* the task array and overwrite each other on save.
|
|
120
|
+
*/
|
|
121
|
+
export declare function getTaskManager(filePath?: string): TaskManager;
|
|
122
|
+
/** Drop all memoized instances. Test helper. */
|
|
123
|
+
export declare function resetTaskManagers(): void;
|
|
83
124
|
//# sourceMappingURL=task-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-manager.d.ts","sourceRoot":"","sources":["../../src/task-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"task-manager.d.ts","sourceRoot":"","sources":["../../src/task-manager.ts"],"names":[],"mappings":"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"}
|