@polpo-ai/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.
@@ -0,0 +1,253 @@
1
+ import type { OrchestratorContext } from "./orchestrator-context.js";
2
+ import type { TaskManager } from "./task-manager.js";
3
+ import type { AgentManager } from "./agent-manager.js";
4
+ import type { Mission, MissionStatus, MissionReport, Task, MissionQualityGate, MissionCheckpoint, MissionDelay, ScopedNotificationRules } from "./types.js";
5
+ import type { QualityController } from "./quality-controller.js";
6
+ import type { NotificationRouterPort } from "./notification-router-port.js";
7
+ /**
8
+ * Mission CRUD + execution + resume + group lifecycle.
9
+ */
10
+ export declare class MissionExecutor {
11
+ private ctx;
12
+ private taskMgr;
13
+ private agentMgr;
14
+ private cleanedGroups;
15
+ /** Quality gates parsed from mission documents, keyed by mission group name */
16
+ private gatesByGroup;
17
+ /** Persistent checkpoint store — survives server restarts */
18
+ private cpStore;
19
+ /** In-memory mirror of persisted checkpoint state (synced on every mutation) */
20
+ private cpState;
21
+ /** Optional quality controller — set by orchestrator after init */
22
+ private qualityCtrl?;
23
+ /** Optional notification router — for checkpoint notification rules */
24
+ private notificationRouter?;
25
+ /** Track which checkpoint notification rules have been registered (by cpKey) */
26
+ private registeredCheckpointRules;
27
+ /** Persistent delay store — survives server restarts */
28
+ private delayStore;
29
+ /** In-memory mirror of persisted delay state (synced on every mutation) */
30
+ private delayState;
31
+ /** Track which delay notification rules have been registered (by delayKey) */
32
+ private registeredDelayRules;
33
+ /** Track the pre-execution status for scheduled/recurring missions (by group name).
34
+ * When a mission completes/fails, this determines whether to return to scheduled/recurring. */
35
+ private scheduledOrigin;
36
+ constructor(ctx: OrchestratorContext, taskMgr: TaskManager, agentMgr: AgentManager);
37
+ /** Resolves when async store loading and group rebuild are complete. */
38
+ readonly ready: Promise<void>;
39
+ /** Async init: load checkpoint/delay state and rebuild cleanedGroups. */
40
+ private initStoresAndRebuild;
41
+ /** Async init: rebuild cleanedGroups from persisted task state. */
42
+ private rebuildCleanedGroups;
43
+ /** Set the quality controller instance (called by Orchestrator after init). */
44
+ setQualityController(ctrl: QualityController): void;
45
+ /** Set the notification router — enables per-checkpoint channel routing. */
46
+ setNotificationRouter(router: NotificationRouterPort): void;
47
+ /** Get quality gates for a mission group. Returns empty array if none defined. */
48
+ getQualityGates(group: string): MissionQualityGate[];
49
+ /** Get checkpoints for a mission group. Returns empty array if none defined. */
50
+ getCheckpoints(group: string): MissionCheckpoint[];
51
+ /**
52
+ * Check if a task is blocked by an active (unresumed) checkpoint.
53
+ * Returns the blocking checkpoint if found, undefined if the task can proceed.
54
+ */
55
+ getBlockingCheckpoint(group: string, taskTitle: string, taskId: string, tasks: Task[]): Promise<{
56
+ checkpoint: MissionCheckpoint;
57
+ reachedAt: string;
58
+ } | undefined>;
59
+ /**
60
+ * Resume a checkpoint, unblocking its blocksTasks.
61
+ * Returns true if the checkpoint was active and is now resumed, false if not found.
62
+ */
63
+ resumeCheckpoint(group: string, checkpointName: string): Promise<boolean>;
64
+ /** Get all active (unresumed) checkpoints across all mission groups. */
65
+ getActiveCheckpoints(): Array<{
66
+ group: string;
67
+ checkpointName: string;
68
+ checkpoint: MissionCheckpoint;
69
+ reachedAt: string;
70
+ }>;
71
+ /** Register dynamic notification rules for a checkpoint's notifyChannels (once per checkpoint). */
72
+ private ensureCheckpointNotificationRules;
73
+ /** Get delays for a mission group. Returns empty array if none defined. */
74
+ getDelays(group: string): MissionDelay[];
75
+ /**
76
+ * Check if a task is blocked by an active (unexpired) delay.
77
+ * If afterTasks are all done and the delay hasn't started yet, starts the timer.
78
+ * If the timer has expired, marks the delay as expired and unblocks.
79
+ * Returns the blocking delay if found, undefined if the task can proceed.
80
+ */
81
+ getBlockingDelay(group: string, taskTitle: string, taskId: string, tasks: Task[]): Promise<{
82
+ delay: MissionDelay;
83
+ startedAt: string;
84
+ expiresAt: string;
85
+ } | undefined>;
86
+ /** Get all active (unexpired) delays across all mission groups. */
87
+ getActiveDelays(): Array<{
88
+ group: string;
89
+ delayName: string;
90
+ delay: MissionDelay;
91
+ startedAt: string;
92
+ expiresAt: string;
93
+ }>;
94
+ /** Register dynamic notification rules for a delay's notifyChannels (once per delay). */
95
+ private ensureDelayNotificationRules;
96
+ /** Resolve a mission by group name (helper for delay/checkpoint events). */
97
+ private resolveMissionForGroupByName;
98
+ saveMission(opts: {
99
+ data: string;
100
+ prompt?: string;
101
+ name?: string;
102
+ status?: MissionStatus;
103
+ notifications?: ScopedNotificationRules;
104
+ }): Promise<Mission>;
105
+ getMission(missionId: string): Promise<Mission | undefined>;
106
+ getMissionByName(name: string): Promise<Mission | undefined>;
107
+ getAllMissions(): Promise<Mission[]>;
108
+ updateMission(missionId: string, updates: Partial<Omit<Mission, "id">>): Promise<Mission>;
109
+ deleteMission(missionId: string): Promise<boolean>;
110
+ getResumableMissions(): Promise<Mission[]>;
111
+ resumeMission(missionId: string, opts?: {
112
+ retryFailed?: boolean;
113
+ }): Promise<{
114
+ retried: number;
115
+ pending: number;
116
+ }>;
117
+ executeMission(missionId: string): Promise<{
118
+ tasks: Task[];
119
+ group: string;
120
+ }>;
121
+ /**
122
+ * Resolve the Mission for a group of tasks.
123
+ * Uses task.missionId (direct FK) when available, falls back to getMissionByName
124
+ * for legacy tasks that pre-date the missionId field.
125
+ */
126
+ private resolveMissionForGroup;
127
+ /** Check if any mission groups have all tasks terminal, and clean up their volatile agents */
128
+ cleanupCompletedGroups(tasks: Task[]): Promise<void>;
129
+ /**
130
+ * Parse a mission's `data` JSON and return the structured document.
131
+ * Throws if the mission is not found or if `data` is not valid JSON.
132
+ */
133
+ private parseMissionData;
134
+ /**
135
+ * Persist an updated document back onto the mission record.
136
+ * Re-validates through Zod to ensure integrity.
137
+ */
138
+ private persistMissionData;
139
+ /** Add a task to a draft mission's data. */
140
+ addMissionTask(missionId: string, task: {
141
+ title: string;
142
+ description: string;
143
+ assignTo?: string;
144
+ dependsOn?: string[];
145
+ expectations?: unknown[];
146
+ expectedOutcomes?: unknown[];
147
+ maxDuration?: number;
148
+ retryPolicy?: {
149
+ escalateAfter?: number;
150
+ fallbackAgent?: string;
151
+ };
152
+ notifications?: unknown;
153
+ }): Promise<Mission>;
154
+ /** Update a specific task within the mission data (matched by title). */
155
+ updateMissionTask(missionId: string, taskTitle: string, updates: {
156
+ title?: string;
157
+ description?: string;
158
+ assignTo?: string;
159
+ dependsOn?: string[];
160
+ expectations?: unknown[];
161
+ expectedOutcomes?: unknown[];
162
+ maxDuration?: number;
163
+ retryPolicy?: {
164
+ escalateAfter?: number;
165
+ fallbackAgent?: string;
166
+ };
167
+ notifications?: unknown;
168
+ }): Promise<Mission>;
169
+ /** Remove a task from the mission data (by title). Also cleans up dependsOn references. */
170
+ removeMissionTask(missionId: string, taskTitle: string): Promise<Mission>;
171
+ /** Reorder tasks within the mission data. Accepts an array of task titles in the desired order. */
172
+ reorderMissionTasks(missionId: string, titles: string[]): Promise<Mission>;
173
+ /** Add a checkpoint to a mission's data. */
174
+ addMissionCheckpoint(missionId: string, checkpoint: {
175
+ name: string;
176
+ afterTasks: string[];
177
+ blocksTasks: string[];
178
+ notifyChannels?: string[];
179
+ message?: string;
180
+ }): Promise<Mission>;
181
+ /** Update a checkpoint in the mission data (matched by name). */
182
+ updateMissionCheckpoint(missionId: string, checkpointName: string, updates: {
183
+ name?: string;
184
+ afterTasks?: string[];
185
+ blocksTasks?: string[];
186
+ notifyChannels?: string[];
187
+ message?: string;
188
+ }): Promise<Mission>;
189
+ /** Remove a checkpoint from the mission data (by name). */
190
+ removeMissionCheckpoint(missionId: string, checkpointName: string): Promise<Mission>;
191
+ /** Add a delay to a mission's data. */
192
+ addMissionDelay(missionId: string, delay: {
193
+ name: string;
194
+ afterTasks: string[];
195
+ blocksTasks: string[];
196
+ duration: string;
197
+ notifyChannels?: string[];
198
+ message?: string;
199
+ }): Promise<Mission>;
200
+ /** Update a delay in the mission data (matched by name). */
201
+ updateMissionDelay(missionId: string, delayName: string, updates: {
202
+ name?: string;
203
+ afterTasks?: string[];
204
+ blocksTasks?: string[];
205
+ duration?: string;
206
+ notifyChannels?: string[];
207
+ message?: string;
208
+ }): Promise<Mission>;
209
+ /** Remove a delay from the mission data (by name). */
210
+ removeMissionDelay(missionId: string, delayName: string): Promise<Mission>;
211
+ /** Add a quality gate to a mission's data. */
212
+ addMissionQualityGate(missionId: string, gate: {
213
+ name: string;
214
+ afterTasks: string[];
215
+ blocksTasks: string[];
216
+ minScore?: number;
217
+ requireAllPassed?: boolean;
218
+ condition?: string;
219
+ notifyChannels?: string[];
220
+ }): Promise<Mission>;
221
+ /** Update a quality gate in the mission data (matched by name). */
222
+ updateMissionQualityGate(missionId: string, gateName: string, updates: {
223
+ name?: string;
224
+ afterTasks?: string[];
225
+ blocksTasks?: string[];
226
+ minScore?: number;
227
+ requireAllPassed?: boolean;
228
+ condition?: string;
229
+ notifyChannels?: string[];
230
+ }): Promise<Mission>;
231
+ /** Remove a quality gate from the mission data (by name). */
232
+ removeMissionQualityGate(missionId: string, gateName: string): Promise<Mission>;
233
+ /** Add a team member to the mission's volatile team. */
234
+ addMissionTeamMember(missionId: string, member: {
235
+ name: string;
236
+ role?: string;
237
+ model?: string;
238
+ [key: string]: unknown;
239
+ }): Promise<Mission>;
240
+ /** Update a team member in the mission data (matched by name). */
241
+ updateMissionTeamMember(missionId: string, memberName: string, updates: {
242
+ name?: string;
243
+ role?: string;
244
+ model?: string;
245
+ [key: string]: unknown;
246
+ }): Promise<Mission>;
247
+ /** Remove a team member from the mission data (by name). */
248
+ removeMissionTeamMember(missionId: string, memberName: string): Promise<Mission>;
249
+ /** Update the mission-level notification rules. */
250
+ updateMissionNotifications(missionId: string, notifications: ScopedNotificationRules | null): Promise<Mission>;
251
+ buildMissionReport(missionId: string, group: string, groupTasks: Task[], allPassed: boolean): Promise<MissionReport>;
252
+ }
253
+ //# sourceMappingURL=mission-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission-executor.d.ts","sourceRoot":"","sources":["../src/mission-executor.ts"],"names":[],"mappings":"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"}