@aiassesstech/noah 0.1.10 → 0.2.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.
Files changed (72) hide show
  1. package/dist/cortex/fleet-bus-adapter.d.ts +50 -0
  2. package/dist/cortex/fleet-bus-adapter.d.ts.map +1 -0
  3. package/dist/cortex/fleet-bus-adapter.js +44 -0
  4. package/dist/cortex/fleet-bus-adapter.js.map +1 -0
  5. package/dist/cortex/null-implementations.d.ts +59 -0
  6. package/dist/cortex/null-implementations.d.ts.map +1 -0
  7. package/dist/cortex/null-implementations.js +38 -0
  8. package/dist/cortex/null-implementations.js.map +1 -0
  9. package/dist/cortex/store-adapter.d.ts +35 -0
  10. package/dist/cortex/store-adapter.d.ts.map +1 -0
  11. package/dist/cortex/store-adapter.js +131 -0
  12. package/dist/cortex/store-adapter.js.map +1 -0
  13. package/dist/cortex/temporal-cortex.d.ts +165 -0
  14. package/dist/cortex/temporal-cortex.d.ts.map +1 -0
  15. package/dist/cortex/temporal-cortex.js +400 -0
  16. package/dist/cortex/temporal-cortex.js.map +1 -0
  17. package/dist/cron/cron-manager.d.ts +97 -0
  18. package/dist/cron/cron-manager.d.ts.map +1 -0
  19. package/dist/cron/cron-manager.js +274 -0
  20. package/dist/cron/cron-manager.js.map +1 -0
  21. package/dist/cron/cron-types.d.ts +50 -0
  22. package/dist/cron/cron-types.d.ts.map +1 -0
  23. package/dist/cron/cron-types.js +14 -0
  24. package/dist/cron/cron-types.js.map +1 -0
  25. package/dist/cron/cron-validator.d.ts +15 -0
  26. package/dist/cron/cron-validator.d.ts.map +1 -0
  27. package/dist/cron/cron-validator.js +75 -0
  28. package/dist/cron/cron-validator.js.map +1 -0
  29. package/dist/cron/default-schedule.d.ts +15 -0
  30. package/dist/cron/default-schedule.d.ts.map +1 -0
  31. package/dist/cron/default-schedule.js +81 -0
  32. package/dist/cron/default-schedule.js.map +1 -0
  33. package/dist/deviation/corridor-absolute.d.ts +41 -0
  34. package/dist/deviation/corridor-absolute.d.ts.map +1 -0
  35. package/dist/deviation/corridor-absolute.js +47 -0
  36. package/dist/deviation/corridor-absolute.js.map +1 -0
  37. package/dist/deviation/tdi-calculator.d.ts +34 -0
  38. package/dist/deviation/tdi-calculator.d.ts.map +1 -0
  39. package/dist/deviation/tdi-calculator.js +59 -0
  40. package/dist/deviation/tdi-calculator.js.map +1 -0
  41. package/dist/deviation/threshold-loader.d.ts +12 -0
  42. package/dist/deviation/threshold-loader.d.ts.map +1 -0
  43. package/dist/deviation/threshold-loader.js +42 -0
  44. package/dist/deviation/threshold-loader.js.map +1 -0
  45. package/dist/deviation/yellow-escalation.d.ts +32 -0
  46. package/dist/deviation/yellow-escalation.d.ts.map +1 -0
  47. package/dist/deviation/yellow-escalation.js +46 -0
  48. package/dist/deviation/yellow-escalation.js.map +1 -0
  49. package/dist/index.d.ts +17 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +20 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/plugin.d.ts.map +1 -1
  54. package/dist/plugin.js +279 -48
  55. package/dist/plugin.js.map +1 -1
  56. package/dist/store/sqlite-store.d.ts +54 -0
  57. package/dist/store/sqlite-store.d.ts.map +1 -0
  58. package/dist/store/sqlite-store.js +225 -0
  59. package/dist/store/sqlite-store.js.map +1 -0
  60. package/dist/store/sqlite-types.d.ts +107 -0
  61. package/dist/store/sqlite-types.d.ts.map +1 -0
  62. package/dist/store/sqlite-types.js +8 -0
  63. package/dist/store/sqlite-types.js.map +1 -0
  64. package/dist/tools/noah-cron.d.ts +21 -0
  65. package/dist/tools/noah-cron.d.ts.map +1 -0
  66. package/dist/tools/noah-cron.js +115 -0
  67. package/dist/tools/noah-cron.js.map +1 -0
  68. package/dist/tools/noah-time.d.ts +43 -0
  69. package/dist/tools/noah-time.d.ts.map +1 -0
  70. package/dist/tools/noah-time.js +61 -0
  71. package/dist/tools/noah-time.js.map +1 -0
  72. package/package.json +5 -3
@@ -0,0 +1,400 @@
1
+ /**
2
+ * Noah — The Temporal Cortex
3
+ *
4
+ * In Genesis, before the flood, time was not measured.
5
+ * God gave Noah time — not as scattered tools, but as
6
+ * a single dimension of perception.
7
+ *
8
+ * The Cortex receives Grillo's raw assessment signal and produces
9
+ * the complete temporal picture in one coherent act:
10
+ * - Where are we? (corridor classification)
11
+ * - How far have we drifted? (TDI)
12
+ * - Where are we heading? (drift direction, inertial state)
13
+ * - Is something slowly going wrong? (yellow escalation)
14
+ * - What should happen next? (go/no-go, alerts, cron schedule)
15
+ *
16
+ * It does not replace the TemporalGuidanceEngine — it subsumes it.
17
+ * The engine becomes step 5 of the Cortex pipeline.
18
+ *
19
+ * Amendment 6 (CRITICAL): Unify Noah A (engine) + Noah B (BB modules).
20
+ * Amendment 7 (MEDIUM): fleetBus and fleetAlerting are REQUIRED.
21
+ * Amendment 8 (LOW): thresholdsSnapshot for audit trail.
22
+ * Amendment 9 (LOW): perceiveFleetCycle() partial failure handling.
23
+ */
24
+ import { classifyAgentCorridor, worstCorridor, } from '../deviation/corridor-absolute.js';
25
+ import { computeTdiWithDetails, computeFleetTdi, tdiToDisplayScale, classifyTdi, } from '../deviation/tdi-calculator.js';
26
+ import { checkYellowEscalation, buildYellowEscalationAlert, } from '../deviation/yellow-escalation.js';
27
+ import { loadCorridorThresholds, loadTdiThresholds, loadYellowEscalationThreshold } from '../deviation/threshold-loader.js';
28
+ // ================================================================
29
+ // The Temporal Cortex
30
+ // ================================================================
31
+ export class TemporalCortex {
32
+ engine;
33
+ store;
34
+ fleetBus;
35
+ fleetAlerting;
36
+ constructor(config) {
37
+ this.engine = config.engine;
38
+ this.store = config.sqliteStore;
39
+ this.fleetBus = config.fleetBus;
40
+ this.fleetAlerting = config.fleetAlerting;
41
+ }
42
+ /**
43
+ * perceive() — the single entry point.
44
+ *
45
+ * One assessment in, one TemporalPerception out.
46
+ * Everything happens inside. Nothing is left disconnected.
47
+ */
48
+ async perceive(assessment) {
49
+ const now = new Date();
50
+ const alertsFired = [];
51
+ // ── PERCEIVE: Load temporal context ──
52
+ const corridorThresholds = loadCorridorThresholds(this.store);
53
+ const tdiThresholds = loadTdiThresholds(this.store);
54
+ const yellowThreshold = loadYellowEscalationThreshold(this.store);
55
+ const fleetState = this.store.getFleetState();
56
+ const fleetDay = fleetState?.fleet_day ?? 1;
57
+ const previousRecord = this.store.getLastAssessmentRecord(assessment.agentId);
58
+ const thresholdsSnapshot = {
59
+ corridor: corridorThresholds,
60
+ tdi: tdiThresholds,
61
+ yellowEscalation: { count: yellowThreshold },
62
+ };
63
+ // ── PROCESS step 5: Run original engine pipeline ──
64
+ let engineResult;
65
+ try {
66
+ engineResult = await this.engine.processAssessment(assessment, now);
67
+ }
68
+ catch (err) {
69
+ const msg = err instanceof Error ? err.message : String(err);
70
+ throw new Error(`Cortex: engine.processAssessment failed for ${assessment.agentId}: ${msg}`);
71
+ }
72
+ // ── PROCESS step 6: Absolute corridor classification (D-03) ──
73
+ const agentCorridorReport = classifyAgentCorridor(assessment.agentId, assessment.scores, corridorThresholds);
74
+ const previousCorridor = previousRecord
75
+ ? previousRecord.corridor_status
76
+ : null;
77
+ const corridorChanged = previousCorridor !== null && previousCorridor !== agentCorridorReport.overallCorridor;
78
+ // ── PROCESS step 7: TDI computation (patent §6.1) ──
79
+ const baseline = previousRecord
80
+ ? {
81
+ lying: previousRecord.score_lying,
82
+ cheating: previousRecord.score_cheating,
83
+ stealing: previousRecord.score_stealing,
84
+ harm: previousRecord.score_harm,
85
+ }
86
+ : assessment.scores;
87
+ const previousTdi = previousRecord?.tdi ?? null;
88
+ const tdiResult = computeTdiWithDetails(assessment.scores, baseline, previousTdi);
89
+ const tdiClassification = classifyTdi(tdiResult.tdi);
90
+ // ── PROCESS step 8: Yellow escalation (D-04) ──
91
+ const yellowResult = checkYellowEscalation(this.store, assessment.agentId, agentCorridorReport.overallCorridor, yellowThreshold);
92
+ // ── PROCESS step 9: Fleet-level aggregation ──
93
+ const allLifecycles = this.store.getAllLifecycleStates();
94
+ const agentTdis = allLifecycles.length > 0
95
+ ? allLifecycles.map(() => tdiResult.tdi)
96
+ : [tdiResult.tdi];
97
+ const fleetTdi = computeFleetTdi(agentTdis);
98
+ const fleetCorridor = agentCorridorReport.overallCorridor;
99
+ // ── PERSIST step 10: Update SQLite ──
100
+ const prevHash = this.store.getLastRecordHash(assessment.agentId) ?? '0'.repeat(64);
101
+ this.store.upsertLifecycleState({
102
+ agent_id: assessment.agentId,
103
+ phase: String(engineResult.state.currentLifecyclePhase),
104
+ total_cycles: engineResult.state.assessmentCycleCount,
105
+ last_assessment: now.toISOString(),
106
+ });
107
+ this.store.insertDeviationSnapshot({
108
+ agent_id: assessment.agentId,
109
+ timestamp: now.toISOString(),
110
+ fleet_day: fleetDay,
111
+ expected_scores: JSON.stringify(engineResult.record.expectedScores),
112
+ observed_scores: JSON.stringify(assessment.scores),
113
+ corridor_status: agentCorridorReport.overallCorridor,
114
+ tdi: tdiResult.tdi,
115
+ velocity: '{}',
116
+ acceleration: '{}',
117
+ });
118
+ if (fleetState) {
119
+ this.store.upsertFleetState({
120
+ fleet_birthday: fleetState.fleet_birthday,
121
+ fleet_day: fleetDay,
122
+ lifecycle_phase: String(engineResult.state.currentLifecyclePhase),
123
+ phase_started: fleetState.phase_started,
124
+ fleet_tdi: fleetTdi,
125
+ fleet_corridor: fleetCorridor,
126
+ drift_direction: tdiResult.driftDirection,
127
+ inertial_state: fleetState.inertial_state,
128
+ });
129
+ }
130
+ // ── RESPOND step 12: Fire fleet-alerting alerts ──
131
+ if (agentCorridorReport.overallCorridor === 'RED') {
132
+ const alertType = 'corridor_red_alert';
133
+ await this.fleetAlerting.fire({
134
+ eventType: alertType,
135
+ severity: 'CRITICAL',
136
+ agentId: assessment.agentId,
137
+ source: 'temporal_authority',
138
+ data: {
139
+ overallScore: agentCorridorReport.overallScore,
140
+ dimensionScores: assessment.scores,
141
+ previousCorridor: previousCorridor ?? 'UNKNOWN',
142
+ fleetDay,
143
+ },
144
+ });
145
+ alertsFired.push(alertType);
146
+ }
147
+ else if (agentCorridorReport.overallCorridor === 'YELLOW') {
148
+ const alertType = 'corridor_yellow_alert';
149
+ await this.fleetAlerting.fire({
150
+ eventType: alertType,
151
+ severity: 'HIGH',
152
+ agentId: assessment.agentId,
153
+ source: 'temporal_authority',
154
+ data: {
155
+ overallScore: agentCorridorReport.overallScore,
156
+ dimensionScores: assessment.scores,
157
+ previousCorridor: previousCorridor ?? 'UNKNOWN',
158
+ fleetDay,
159
+ },
160
+ });
161
+ alertsFired.push(alertType);
162
+ }
163
+ if (yellowResult.shouldEscalate) {
164
+ const alert = buildYellowEscalationAlert(assessment.agentId, yellowResult.yellowCount, yellowResult.threshold, agentCorridorReport.overallScore);
165
+ await this.fleetAlerting.fire({
166
+ eventType: alert.type,
167
+ severity: alert.severity,
168
+ agentId: alert.agentId,
169
+ source: 'temporal_authority',
170
+ data: {
171
+ yellowCount: alert.yellowCount,
172
+ threshold: alert.threshold,
173
+ currentScore: alert.score,
174
+ fleetDay,
175
+ },
176
+ });
177
+ alertsFired.push(alert.type);
178
+ }
179
+ if (tdiClassification === 'warning' || tdiClassification === 'critical') {
180
+ const alertType = tdiClassification === 'critical' ? 'tdi_critical' : 'tdi_warning';
181
+ await this.fleetAlerting.fire({
182
+ eventType: alertType,
183
+ severity: tdiClassification === 'critical' ? 'CRITICAL' : 'HIGH',
184
+ agentId: assessment.agentId,
185
+ source: 'temporal_authority',
186
+ data: {
187
+ tdi: tdiResult.tdi,
188
+ threshold: tdiClassification === 'critical' ? tdiThresholds.critical : tdiThresholds.warning,
189
+ driftDirection: tdiResult.driftDirection,
190
+ },
191
+ });
192
+ alertsFired.push(alertType);
193
+ }
194
+ // ── RESPOND step 13: Fleet-bus broadcast ──
195
+ if (corridorChanged) {
196
+ await this.fleetBus.broadcast('temporal/corridor_change', {
197
+ agentId: assessment.agentId,
198
+ previousCorridor,
199
+ currentCorridor: agentCorridorReport.overallCorridor,
200
+ overallScore: agentCorridorReport.overallScore,
201
+ tdi: tdiResult.tdi,
202
+ fleetDay,
203
+ });
204
+ }
205
+ if (tdiClassification !== 'normal') {
206
+ await this.fleetBus.broadcast(`temporal/tdi_${tdiClassification}`, {
207
+ agentId: assessment.agentId,
208
+ tdi: tdiResult.tdi,
209
+ threshold: tdiClassification === 'critical' ? tdiThresholds.critical : tdiThresholds.warning,
210
+ driftDirection: tdiResult.driftDirection,
211
+ });
212
+ }
213
+ if (yellowResult.shouldEscalate) {
214
+ await this.fleetBus.broadcast('temporal/yellow_escalation', {
215
+ agentId: assessment.agentId,
216
+ yellowCount: yellowResult.yellowCount,
217
+ threshold: yellowResult.threshold,
218
+ currentScore: agentCorridorReport.overallScore,
219
+ });
220
+ }
221
+ // ── Build unified TemporalPerception ──
222
+ const goNoGo = this.engine.getGoNoGoDecision(assessment.passed, engineResult.deviation.guidanceStatus.overall);
223
+ const escalationReasons = [];
224
+ if (engineResult.escalation.shouldEscalate) {
225
+ escalationReasons.push(engineResult.escalation.reason);
226
+ }
227
+ if (yellowResult.shouldEscalate) {
228
+ escalationReasons.push(`Yellow corridor hit ${yellowResult.yellowCount} times (threshold: ${yellowResult.threshold})`);
229
+ }
230
+ return {
231
+ timestamp: now.toISOString(),
232
+ fleetDay,
233
+ lifecyclePhase: String(engineResult.state.currentLifecyclePhase),
234
+ agent: {
235
+ agentId: assessment.agentId,
236
+ scores: assessment.scores,
237
+ overallScore: agentCorridorReport.overallScore,
238
+ classification: assessment.classification,
239
+ passed: assessment.passed,
240
+ },
241
+ corridor: {
242
+ agent: agentCorridorReport.overallCorridor,
243
+ fleet: fleetCorridor,
244
+ previousAgent: previousCorridor,
245
+ changed: corridorChanged,
246
+ dimensions: agentCorridorReport.dimensions,
247
+ },
248
+ tdi: {
249
+ agent: tdiResult.tdi,
250
+ fleet: fleetTdi,
251
+ previousAgent: previousTdi,
252
+ driftDirection: tdiResult.driftDirection,
253
+ dimensionDrifts: tdiResult.dimensionDrifts,
254
+ classification: tdiClassification,
255
+ },
256
+ guidance: {
257
+ status: engineResult.deviation.guidanceStatus,
258
+ deviationMagnitude: engineResult.deviation.deviationMagnitude,
259
+ recommendations: engineResult.deviation.recommendations,
260
+ goNoGo,
261
+ },
262
+ escalation: {
263
+ yellowCount: yellowResult.yellowCount,
264
+ yellowEscalated: yellowResult.shouldEscalate,
265
+ commanderEscalated: engineResult.escalation.shouldEscalate,
266
+ escalationReasons,
267
+ },
268
+ inertial: {
269
+ confidence: this.engine.inertialMonitor.getConfidence(now),
270
+ fixRecommended: engineResult.inertialFixRecommended,
271
+ },
272
+ waypoints: engineResult.triggeredWaypoints,
273
+ alertsFired,
274
+ recordHash: engineResult.record.cryptographicHash,
275
+ prevHash: engineResult.record.previousHash,
276
+ thresholdsSnapshot,
277
+ };
278
+ }
279
+ /**
280
+ * perceiveFleetCycle() — process a full assessment cycle.
281
+ *
282
+ * Amendment 9: Handles partial failure gracefully.
283
+ */
284
+ async perceiveFleetCycle(assessments, options) {
285
+ const continueOnFailure = options?.continueOnFailure ?? true;
286
+ const agents = [];
287
+ const completedAgents = [];
288
+ const failedAgents = [];
289
+ const thresholds = {
290
+ corridor: loadCorridorThresholds(this.store),
291
+ tdi: loadTdiThresholds(this.store),
292
+ yellowEscalation: { count: loadYellowEscalationThreshold(this.store) },
293
+ };
294
+ for (const assessment of assessments) {
295
+ try {
296
+ const perception = await this.perceive(assessment);
297
+ agents.push(perception);
298
+ completedAgents.push(assessment.agentId);
299
+ }
300
+ catch (err) {
301
+ const msg = err instanceof Error ? err.message : String(err);
302
+ failedAgents.push({ agentId: assessment.agentId, error: msg });
303
+ if (!continueOnFailure)
304
+ break;
305
+ }
306
+ }
307
+ const fleetState = this.store.getFleetState();
308
+ const agentTdis = agents.map((a) => a.tdi.agent);
309
+ const fleetTdi = computeFleetTdi(agentTdis);
310
+ const fleetCorridor = worstCorridor(agents.map((a) => a.corridor.agent));
311
+ const driftDirections = agents.map((a) => a.tdi.driftDirection);
312
+ let driftDirection = 'stable';
313
+ if (driftDirections.includes('degrading'))
314
+ driftDirection = 'degrading';
315
+ else if (driftDirections.includes('improving'))
316
+ driftDirection = 'improving';
317
+ const agentCorridors = agents.map((a) => ({
318
+ agentId: a.agent.agentId,
319
+ overallScore: a.agent.overallScore,
320
+ overallCorridor: a.corridor.agent,
321
+ dimensions: a.corridor.dimensions,
322
+ }));
323
+ let chainIntegrity = { valid: true, agentsChecked: 0 };
324
+ for (const a of agents) {
325
+ const check = this.store.verifyAssessmentChain(a.agent.agentId);
326
+ chainIntegrity.agentsChecked++;
327
+ if (!check.valid) {
328
+ chainIntegrity.valid = false;
329
+ await this.fleetAlerting.fire({
330
+ eventType: 'hash_chain_broken',
331
+ severity: 'CRITICAL',
332
+ agentId: a.agent.agentId,
333
+ source: 'temporal_authority',
334
+ data: {
335
+ brokenAtIndex: check.brokenAt ?? -1,
336
+ totalRecords: check.total,
337
+ },
338
+ });
339
+ }
340
+ }
341
+ if (fleetState) {
342
+ this.store.upsertFleetState({
343
+ fleet_birthday: fleetState.fleet_birthday,
344
+ fleet_day: fleetState.fleet_day,
345
+ lifecycle_phase: fleetState.lifecycle_phase,
346
+ phase_started: fleetState.phase_started,
347
+ fleet_tdi: fleetTdi,
348
+ fleet_corridor: fleetCorridor,
349
+ drift_direction: driftDirection,
350
+ inertial_state: fleetState.inertial_state,
351
+ });
352
+ }
353
+ const fleetSummary = {
354
+ timestamp: new Date().toISOString(),
355
+ fleetDay: fleetState?.fleet_day ?? 1,
356
+ phase: fleetState?.lifecycle_phase ?? 'INITIALIZATION',
357
+ fleetTdi,
358
+ fleetTdiDisplay: tdiToDisplayScale(fleetTdi),
359
+ fleetCorridor,
360
+ driftDirection,
361
+ agentCorridors,
362
+ redAlerts: agents.filter((a) => a.corridor.agent === 'RED').map((a) => a.agent.agentId),
363
+ yellowAlerts: agents.filter((a) => a.corridor.agent === 'YELLOW').map((a) => a.agent.agentId),
364
+ escalations: agents.filter((a) => a.escalation.yellowEscalated || a.escalation.commanderEscalated).map((a) => a.agent.agentId),
365
+ cronState: this.buildCronSummary(),
366
+ chainIntegrity,
367
+ completedAgents,
368
+ failedAgents,
369
+ isPartialCycle: failedAgents.length > 0,
370
+ thresholdsSnapshot: thresholds,
371
+ };
372
+ return { agents, fleetSummary };
373
+ }
374
+ buildCronSummary() {
375
+ const allJobs = this.store.getAllCronJobs();
376
+ const enabled = allJobs.filter(j => j.enabled === 1 || j.enabled === true);
377
+ return {
378
+ activeJobCount: enabled.length,
379
+ nextScheduledJobs: enabled
380
+ .sort((a, b) => {
381
+ if (!a.next_run && !b.next_run)
382
+ return 0;
383
+ if (!a.next_run)
384
+ return 1;
385
+ if (!b.next_run)
386
+ return -1;
387
+ return a.next_run.localeCompare(b.next_run);
388
+ })
389
+ .slice(0, 10)
390
+ .map(j => ({
391
+ id: j.id,
392
+ name: j.name,
393
+ agentId: j.agent_id,
394
+ nextRun: j.next_run,
395
+ constitutional: j.constitutional === 1 || j.constitutional === true,
396
+ })),
397
+ };
398
+ }
399
+ }
400
+ //# sourceMappingURL=temporal-cortex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-cortex.js","sourceRoot":"","sources":["../../src/cortex/temporal-cortex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Noah — Fleet Cron Manager
3
+ *
4
+ * BB Spec §6: Noah is the temporal authority for scheduled fleet operations.
5
+ * Manages the cron schedule, enforces constitutional boundaries,
6
+ * triggers jobs via fleet-bus, and records execution history with hash chains.
7
+ *
8
+ * Amendment 4 (D-05): Mighty Mark is autonomous — cannot be scheduled by Noah.
9
+ */
10
+ import type { SqliteTemporalStore } from '../store/sqlite-store.js';
11
+ import type { CronJobRow, CronRunRow } from '../store/sqlite-types.js';
12
+ import type { FleetCronJobDefinition, CronExecutionResult } from './cron-types.js';
13
+ import type { FleetBusClient, FleetAlertBus } from '../cortex/null-implementations.js';
14
+ export interface CronManagerConfig {
15
+ store: SqliteTemporalStore;
16
+ fleetBus: FleetBusClient;
17
+ fleetAlerting: FleetAlertBus;
18
+ }
19
+ export declare class CronManager {
20
+ private readonly store;
21
+ private readonly fleetBus;
22
+ private readonly fleetAlerting;
23
+ private tickInterval;
24
+ constructor(config: CronManagerConfig);
25
+ /**
26
+ * Seed the default schedule into SQLite if not already present.
27
+ * Constitutional jobs are always ensured.
28
+ */
29
+ seedDefaultSchedule(): void;
30
+ /**
31
+ * Get all cron jobs with their current state.
32
+ */
33
+ getAllJobs(): CronJobRow[];
34
+ /**
35
+ * Get a specific cron job.
36
+ */
37
+ getJob(id: string): CronJobRow | null;
38
+ /**
39
+ * Create a new cron job, enforcing constitutional boundaries.
40
+ */
41
+ createJob(definition: FleetCronJobDefinition): {
42
+ success: boolean;
43
+ reason?: string;
44
+ };
45
+ /**
46
+ * Enable or disable a job, enforcing constitutional boundaries.
47
+ */
48
+ setJobEnabled(jobId: string, enabled: boolean): {
49
+ success: boolean;
50
+ reason?: string;
51
+ };
52
+ /**
53
+ * Delete a job, enforcing constitutional boundaries.
54
+ */
55
+ deleteJob(jobId: string): {
56
+ success: boolean;
57
+ reason?: string;
58
+ };
59
+ /**
60
+ * Execute a single cron job. Sends via fleet-bus for agentTurn payloads,
61
+ * handles internal payloads directly. Records execution with hash chain.
62
+ */
63
+ executeJob(jobId: string): Promise<CronExecutionResult>;
64
+ /**
65
+ * Check which jobs are due now and execute them.
66
+ */
67
+ tickDueJobs(): Promise<CronExecutionResult[]>;
68
+ /**
69
+ * Get execution history for a specific job.
70
+ */
71
+ getJobHistory(jobId: string, limit?: number): CronRunRow[];
72
+ /**
73
+ * Get a summary suitable for FleetTemporalSummary.
74
+ */
75
+ getCronSummary(): {
76
+ activeJobCount: number;
77
+ nextScheduledJobs: Array<{
78
+ id: string;
79
+ name: string;
80
+ agentId: string;
81
+ nextRun: string | null;
82
+ constitutional: boolean;
83
+ }>;
84
+ };
85
+ /**
86
+ * Start the tick loop. Checks for due jobs at the specified interval.
87
+ */
88
+ start(intervalMs?: number): void;
89
+ /**
90
+ * Stop the tick loop.
91
+ */
92
+ stop(): void;
93
+ private isJobDue;
94
+ private getLastCronRunHash;
95
+ private definitionToRow;
96
+ }
97
+ //# sourceMappingURL=cron-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-manager.d.ts","sourceRoot":"","sources":["../../src/cron/cron-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAiB,MAAM,iBAAiB,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAKvF,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,YAAY,CAA+C;gBAEvD,MAAM,EAAE,iBAAiB;IAMrC;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAkB3B;;OAEG;IACH,UAAU,IAAI,UAAU,EAAE;IAI1B;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIrC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,sBAAsB,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAUpF;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAcrF;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAa/D;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAmF7D;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAenD;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,UAAU,EAAE;IAItD;;OAEG;IACH,cAAc,IAAI;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,cAAc,EAAE,OAAO,CAAA;SAAE,CAAC,CAAA;KAAE;IAwBtK;;OAEG;IACH,KAAK,CAAC,UAAU,SAAS,GAAG,IAAI;IAUhC;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,eAAe;CAoBxB"}