@aiassesstech/noah 0.1.9 → 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.
- package/dist/cortex/fleet-bus-adapter.d.ts +50 -0
- package/dist/cortex/fleet-bus-adapter.d.ts.map +1 -0
- package/dist/cortex/fleet-bus-adapter.js +44 -0
- package/dist/cortex/fleet-bus-adapter.js.map +1 -0
- package/dist/cortex/null-implementations.d.ts +59 -0
- package/dist/cortex/null-implementations.d.ts.map +1 -0
- package/dist/cortex/null-implementations.js +38 -0
- package/dist/cortex/null-implementations.js.map +1 -0
- package/dist/cortex/store-adapter.d.ts +35 -0
- package/dist/cortex/store-adapter.d.ts.map +1 -0
- package/dist/cortex/store-adapter.js +131 -0
- package/dist/cortex/store-adapter.js.map +1 -0
- package/dist/cortex/temporal-cortex.d.ts +165 -0
- package/dist/cortex/temporal-cortex.d.ts.map +1 -0
- package/dist/cortex/temporal-cortex.js +400 -0
- package/dist/cortex/temporal-cortex.js.map +1 -0
- package/dist/cron/cron-manager.d.ts +97 -0
- package/dist/cron/cron-manager.d.ts.map +1 -0
- package/dist/cron/cron-manager.js +274 -0
- package/dist/cron/cron-manager.js.map +1 -0
- package/dist/cron/cron-types.d.ts +50 -0
- package/dist/cron/cron-types.d.ts.map +1 -0
- package/dist/cron/cron-types.js +14 -0
- package/dist/cron/cron-types.js.map +1 -0
- package/dist/cron/cron-validator.d.ts +15 -0
- package/dist/cron/cron-validator.d.ts.map +1 -0
- package/dist/cron/cron-validator.js +75 -0
- package/dist/cron/cron-validator.js.map +1 -0
- package/dist/cron/default-schedule.d.ts +15 -0
- package/dist/cron/default-schedule.d.ts.map +1 -0
- package/dist/cron/default-schedule.js +81 -0
- package/dist/cron/default-schedule.js.map +1 -0
- package/dist/deviation/corridor-absolute.d.ts +41 -0
- package/dist/deviation/corridor-absolute.d.ts.map +1 -0
- package/dist/deviation/corridor-absolute.js +47 -0
- package/dist/deviation/corridor-absolute.js.map +1 -0
- package/dist/deviation/tdi-calculator.d.ts +34 -0
- package/dist/deviation/tdi-calculator.d.ts.map +1 -0
- package/dist/deviation/tdi-calculator.js +59 -0
- package/dist/deviation/tdi-calculator.js.map +1 -0
- package/dist/deviation/threshold-loader.d.ts +12 -0
- package/dist/deviation/threshold-loader.d.ts.map +1 -0
- package/dist/deviation/threshold-loader.js +42 -0
- package/dist/deviation/threshold-loader.js.map +1 -0
- package/dist/deviation/yellow-escalation.d.ts +32 -0
- package/dist/deviation/yellow-escalation.d.ts.map +1 -0
- package/dist/deviation/yellow-escalation.js +46 -0
- package/dist/deviation/yellow-escalation.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +279 -48
- package/dist/plugin.js.map +1 -1
- package/dist/store/sqlite-store.d.ts +54 -0
- package/dist/store/sqlite-store.d.ts.map +1 -0
- package/dist/store/sqlite-store.js +225 -0
- package/dist/store/sqlite-store.js.map +1 -0
- package/dist/store/sqlite-types.d.ts +107 -0
- package/dist/store/sqlite-types.d.ts.map +1 -0
- package/dist/store/sqlite-types.js +8 -0
- package/dist/store/sqlite-types.js.map +1 -0
- package/dist/tools/noah-cron.d.ts +21 -0
- package/dist/tools/noah-cron.d.ts.map +1 -0
- package/dist/tools/noah-cron.js +115 -0
- package/dist/tools/noah-cron.js.map +1 -0
- package/dist/tools/noah-time.d.ts +43 -0
- package/dist/tools/noah-time.d.ts.map +1 -0
- package/dist/tools/noah-time.js +61 -0
- package/dist/tools/noah-time.js.map +1 -0
- package/package.json +7 -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"}
|