@moolam/edge-agent 1.0.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/LICENSE +202 -0
- package/README.md +54 -0
- package/dist/cognitive_bindings.d.ts +329 -0
- package/dist/cognitive_bindings.d.ts.map +1 -0
- package/dist/cognitive_bindings.js +1293 -0
- package/dist/cognitive_bindings.js.map +1 -0
- package/dist/coldstart.d.ts +95 -0
- package/dist/coldstart.d.ts.map +1 -0
- package/dist/coldstart.js +224 -0
- package/dist/coldstart.js.map +1 -0
- package/dist/edge_agent.d.ts +216 -0
- package/dist/edge_agent.d.ts.map +1 -0
- package/dist/edge_agent.js +530 -0
- package/dist/edge_agent.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/local_vector_db.d.ts +115 -0
- package/dist/local_vector_db.d.ts.map +1 -0
- package/dist/local_vector_db.js +297 -0
- package/dist/local_vector_db.js.map +1 -0
- package/dist/slm_runtime.d.ts +158 -0
- package/dist/slm_runtime.d.ts.map +1 -0
- package/dist/slm_runtime.js +247 -0
- package/dist/slm_runtime.js.map +1 -0
- package/dist/trajectory_capture.d.ts +83 -0
- package/dist/trajectory_capture.d.ts.map +1 -0
- package/dist/trajectory_capture.js +193 -0
- package/dist/trajectory_capture.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module edge_agent
|
|
3
|
+
*
|
|
4
|
+
* The Edge Harness façade — the one class an app developer instantiates to
|
|
5
|
+
* get a fully offline autonomous cognitive agent on-device.
|
|
6
|
+
*
|
|
7
|
+
* Composition:
|
|
8
|
+
* SlmRuntime → local brain (Phi-3 / Gemma / quantized)
|
|
9
|
+
* LocalVectorDb → offline long-term memory (MCE mirror)
|
|
10
|
+
* CognitiveTelemetryCollector→ friction sensing (edge half of assessment)
|
|
11
|
+
* SyncEngine → CRDT reconciliation on connectivity
|
|
12
|
+
* EventBusInterface → domain lifecycle / turn / sync events
|
|
13
|
+
*
|
|
14
|
+
* The edge deliberately runs a *simplified* routing policy (greedy
|
|
15
|
+
* lowest-mastery-prerequisite-first). The full cyclical task router lives
|
|
16
|
+
* in the cloud engine; on reconnect the cloud's routing decisions win the
|
|
17
|
+
* LWW session registers, seamlessly upgrading guidance quality.
|
|
18
|
+
*
|
|
19
|
+
* {@link buildCognitiveBindings} assembles CognitiveBindings
|
|
20
|
+
* from SlmRuntime + LocalVectorDb adapters.
|
|
21
|
+
* {@link agentTurn} delegates to CognitiveCore.turn (no
|
|
22
|
+
* legacy embed→vector→SlmRuntime.generate bypass in this file).
|
|
23
|
+
*/
|
|
24
|
+
import { CognitiveCore } from "@moolam/cognitive-core";
|
|
25
|
+
import { HlcClock, SyncEngine, PROTOCOL_VERSION, } from "@moolam/sync-protocol";
|
|
26
|
+
import { CognitiveTelemetryCollector } from "@moolam/telemetry";
|
|
27
|
+
import { EDGE_LIFECYCLE_READY, getObservability, publishSyncOutcome, publishTurnCompleted, wireEdgeAgentEventBus, } from "@moolam/observability";
|
|
28
|
+
import { createEdgeCognitiveBindings, } from "./cognitive_bindings.js";
|
|
29
|
+
import { LocalVectorDb } from "./local_vector_db.js";
|
|
30
|
+
/**
|
|
31
|
+
* EventBus type for NFR-02 offline-horizon proof summaries (metadata only).
|
|
32
|
+
* Mirrors {@link EDGE_LIFECYCLE_READY}: host-visible, not a Zod catalog type.
|
|
33
|
+
*/
|
|
34
|
+
export const EDGE_NFR02_PROOF = "edge.nfr02.proof";
|
|
35
|
+
/**
|
|
36
|
+
* Committed expected ranges for the NFR-02 offline-horizon proof gate.
|
|
37
|
+
* Integration harness asserts measured summaries stay within these ceilings.
|
|
38
|
+
*/
|
|
39
|
+
export const NFR02_PROOF_THRESHOLDS = Object.freeze({
|
|
40
|
+
nfrId: "NFR-02",
|
|
41
|
+
nfrTitle: "Offline operation horizon with zero degradation of CAST capture",
|
|
42
|
+
foldP95MsMax: 2,
|
|
43
|
+
castPersistP95MsMax: 5,
|
|
44
|
+
turnP95MsMax: 40,
|
|
45
|
+
storeBytesPerSampleMax: 512,
|
|
46
|
+
wallMsMax: 120_000,
|
|
47
|
+
turnsPerDayMin: 1,
|
|
48
|
+
});
|
|
49
|
+
export class EdgeAgent {
|
|
50
|
+
config;
|
|
51
|
+
clock;
|
|
52
|
+
memory;
|
|
53
|
+
telemetry;
|
|
54
|
+
syncEngine;
|
|
55
|
+
eventBus;
|
|
56
|
+
disposeEventBus;
|
|
57
|
+
wallNow;
|
|
58
|
+
state;
|
|
59
|
+
lifecycleReadyPublished = false;
|
|
60
|
+
/** Serializes agentTurn RMW on mastery for one subject (this instance). */
|
|
61
|
+
turnChain = Promise.resolve();
|
|
62
|
+
/** Wall time of the most recent foldFriction call (ms). */
|
|
63
|
+
lastFoldMs = 0;
|
|
64
|
+
constructor(config) {
|
|
65
|
+
this.config = config;
|
|
66
|
+
this.wallNow = config.nowMs ?? Date.now;
|
|
67
|
+
this.clock = new HlcClock(config.deviceId, this.wallNow);
|
|
68
|
+
const vectorOpts = {
|
|
69
|
+
nowMs: this.wallNow,
|
|
70
|
+
};
|
|
71
|
+
if (config.maxResidentVectors !== undefined) {
|
|
72
|
+
vectorOpts.maxResidentVectors = config.maxResidentVectors;
|
|
73
|
+
}
|
|
74
|
+
this.memory = new LocalVectorDb(config.storage, vectorOpts);
|
|
75
|
+
this.telemetry = new CognitiveTelemetryCollector(config.storage, this.clock, {
|
|
76
|
+
nowMs: this.wallNow,
|
|
77
|
+
});
|
|
78
|
+
this.syncEngine = config.transport ? new SyncEngine(config.transport) : null;
|
|
79
|
+
this.state = this.genesisState();
|
|
80
|
+
const wireOpts = {};
|
|
81
|
+
if (config.eventBus !== undefined)
|
|
82
|
+
wireOpts.eventBus = config.eventBus;
|
|
83
|
+
if (config.attachEventBusSpans !== undefined) {
|
|
84
|
+
wireOpts.attachToSpans = config.attachEventBusSpans;
|
|
85
|
+
}
|
|
86
|
+
const wired = wireEdgeAgentEventBus(wireOpts);
|
|
87
|
+
this.eventBus = wired.bus;
|
|
88
|
+
this.disposeEventBus = wired.dispose;
|
|
89
|
+
}
|
|
90
|
+
/** Runtime EventBus used for lifecycle / turn / sync domain events. */
|
|
91
|
+
get bus() {
|
|
92
|
+
return this.eventBus;
|
|
93
|
+
}
|
|
94
|
+
/** Prepare storage and warm the local model. Call once at app start. */
|
|
95
|
+
async initialize() {
|
|
96
|
+
await this.memory.initialize();
|
|
97
|
+
await this.telemetry.initialize();
|
|
98
|
+
if (this.config.trajectoryCaptureWriter) {
|
|
99
|
+
await this.config.trajectoryCaptureWriter.initialize();
|
|
100
|
+
}
|
|
101
|
+
// SlmRuntime.load may throw SlmRuntimeInitError (missing/corrupt weights).
|
|
102
|
+
// Surfaced to the host — no ready event, no harness-level retry loop.
|
|
103
|
+
await this.config.runtime.load();
|
|
104
|
+
// Lifecycle event after durable side effects — never before acknowledgment.
|
|
105
|
+
this.publishLifecycleReady();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Detach OTel bus subscription. Safe to call multiple times. Does not
|
|
109
|
+
* dispose host-injected buses.
|
|
110
|
+
*/
|
|
111
|
+
dispose() {
|
|
112
|
+
this.disposeEventBus();
|
|
113
|
+
}
|
|
114
|
+
get telemetryCollector() {
|
|
115
|
+
return this.telemetry;
|
|
116
|
+
}
|
|
117
|
+
get vectorDb() {
|
|
118
|
+
return this.memory;
|
|
119
|
+
}
|
|
120
|
+
get cognitiveState() {
|
|
121
|
+
return this.state;
|
|
122
|
+
}
|
|
123
|
+
/** Wall clock shared by HLC / telemetry / vector decay (injected or `Date.now`). */
|
|
124
|
+
wallNowMs() {
|
|
125
|
+
return this.wallNow();
|
|
126
|
+
}
|
|
127
|
+
/** HLC authority for this device (physical ticks follow {@link wallNowMs}). */
|
|
128
|
+
get hlcClock() {
|
|
129
|
+
return this.clock;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Latency of the most recent Bayesian friction fold into mastery (ms).
|
|
133
|
+
* Zero until the first successful agentTurn; used by offline-horizon proofs.
|
|
134
|
+
*/
|
|
135
|
+
lastFrictionFoldLatencyMs() {
|
|
136
|
+
return this.lastFoldMs;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Mastery G-Counter shard summary for offline-horizon integrity checks.
|
|
140
|
+
* Structured fields only — never includes learner utterance / sample bodies.
|
|
141
|
+
*/
|
|
142
|
+
masteryShardSummary() {
|
|
143
|
+
const deviceId = this.config.deviceId;
|
|
144
|
+
let totalAlpha = 0;
|
|
145
|
+
let totalBeta = 0;
|
|
146
|
+
let corrupt = false;
|
|
147
|
+
let meansInRange = true;
|
|
148
|
+
const mastery = this.state.mastery;
|
|
149
|
+
for (const entry of Object.values(mastery)) {
|
|
150
|
+
const a = entry.alpha[deviceId] ?? 0;
|
|
151
|
+
const b = entry.beta[deviceId] ?? 0;
|
|
152
|
+
if (!Number.isFinite(a) || !Number.isFinite(b) || a < 0 || b < 0) {
|
|
153
|
+
corrupt = true;
|
|
154
|
+
}
|
|
155
|
+
totalAlpha += a;
|
|
156
|
+
totalBeta += b;
|
|
157
|
+
const den = a + b;
|
|
158
|
+
if (den > 0) {
|
|
159
|
+
const mean = a / den;
|
|
160
|
+
if (!(mean >= 0 && mean <= 1))
|
|
161
|
+
meansInRange = false;
|
|
162
|
+
}
|
|
163
|
+
for (const v of Object.values(entry.alpha)) {
|
|
164
|
+
if (!Number.isFinite(v) || v < 0)
|
|
165
|
+
corrupt = true;
|
|
166
|
+
}
|
|
167
|
+
for (const v of Object.values(entry.beta)) {
|
|
168
|
+
if (!Number.isFinite(v) || v < 0)
|
|
169
|
+
corrupt = true;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
subjectId: this.config.subjectId,
|
|
174
|
+
deviceId,
|
|
175
|
+
conceptCount: Object.keys(mastery).length,
|
|
176
|
+
totalAlpha,
|
|
177
|
+
totalBeta,
|
|
178
|
+
corrupt,
|
|
179
|
+
meansInRange,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Emit NFR-02 offline-horizon proof summary via EventBus + OTel (when inited).
|
|
184
|
+
* Metadata only — never utterance / reply bodies. Exporter failures never
|
|
185
|
+
* block the proof path (drop counter / no-op when observability is absent).
|
|
186
|
+
*/
|
|
187
|
+
recordNfr02ProofMetrics(input) {
|
|
188
|
+
const breachCodes = [];
|
|
189
|
+
const finiteNonNeg = (n) => typeof n === "number" && Number.isFinite(n) && n >= 0;
|
|
190
|
+
if (!finiteNonNeg(input.turns) ||
|
|
191
|
+
!finiteNonNeg(input.days) ||
|
|
192
|
+
!finiteNonNeg(input.turnsPerDay) ||
|
|
193
|
+
!finiteNonNeg(input.foldP95Ms) ||
|
|
194
|
+
!finiteNonNeg(input.castPersistP95Ms) ||
|
|
195
|
+
!finiteNonNeg(input.turnP95Ms) ||
|
|
196
|
+
!finiteNonNeg(input.storeBytes) ||
|
|
197
|
+
!finiteNonNeg(input.durableSampleCount) ||
|
|
198
|
+
!finiteNonNeg(input.wallMs) ||
|
|
199
|
+
input.turns < 1 ||
|
|
200
|
+
input.days < 1) {
|
|
201
|
+
const err = new Error("NFR-02 proof metrics validation failed: require finite non-negative fields");
|
|
202
|
+
err.failureClass =
|
|
203
|
+
"validation_failed";
|
|
204
|
+
throw err;
|
|
205
|
+
}
|
|
206
|
+
const t = NFR02_PROOF_THRESHOLDS;
|
|
207
|
+
if (input.foldP95Ms > t.foldP95MsMax)
|
|
208
|
+
breachCodes.push("fold_p95");
|
|
209
|
+
if (input.castPersistP95Ms > t.castPersistP95MsMax) {
|
|
210
|
+
breachCodes.push("cast_persist_p95");
|
|
211
|
+
}
|
|
212
|
+
if (input.turnP95Ms > t.turnP95MsMax)
|
|
213
|
+
breachCodes.push("turn_p95");
|
|
214
|
+
if (input.wallMs > t.wallMsMax)
|
|
215
|
+
breachCodes.push("wall_ms");
|
|
216
|
+
if (input.turnsPerDay < t.turnsPerDayMin)
|
|
217
|
+
breachCodes.push("turns_per_day");
|
|
218
|
+
if (input.durableSampleCount > 0 &&
|
|
219
|
+
input.storeBytes / input.durableSampleCount > t.storeBytesPerSampleMax) {
|
|
220
|
+
breachCodes.push("store_bytes_per_sample");
|
|
221
|
+
}
|
|
222
|
+
if (input.durableSampleCount !== input.turns) {
|
|
223
|
+
breachCodes.push("cast_capture_drop");
|
|
224
|
+
}
|
|
225
|
+
const outcome = breachCodes.length === 0 ? "ok" : "budget_breached";
|
|
226
|
+
const record = {
|
|
227
|
+
...input,
|
|
228
|
+
subjectId: this.config.subjectId,
|
|
229
|
+
deviceId: this.config.deviceId,
|
|
230
|
+
nfrId: "NFR-02",
|
|
231
|
+
outcome,
|
|
232
|
+
breachCodes,
|
|
233
|
+
locality: "on-device",
|
|
234
|
+
};
|
|
235
|
+
this.eventBus.publish({
|
|
236
|
+
type: EDGE_NFR02_PROOF,
|
|
237
|
+
at: new Date().toISOString(),
|
|
238
|
+
payload: {
|
|
239
|
+
subjectId: record.subjectId,
|
|
240
|
+
deviceId: record.deviceId,
|
|
241
|
+
nfrId: record.nfrId,
|
|
242
|
+
outcome: record.outcome,
|
|
243
|
+
locality: record.locality,
|
|
244
|
+
turns: record.turns,
|
|
245
|
+
days: record.days,
|
|
246
|
+
turnsPerDay: record.turnsPerDay,
|
|
247
|
+
foldP95Ms: record.foldP95Ms,
|
|
248
|
+
castPersistP95Ms: record.castPersistP95Ms,
|
|
249
|
+
turnP95Ms: record.turnP95Ms,
|
|
250
|
+
storeBytes: record.storeBytes,
|
|
251
|
+
durableSampleCount: record.durableSampleCount,
|
|
252
|
+
wallMs: record.wallMs,
|
|
253
|
+
breachCodes: [...record.breachCodes],
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
this.emitNfr02Otel(record);
|
|
257
|
+
return record;
|
|
258
|
+
}
|
|
259
|
+
/** Best-effort OTel span + histograms; never throws into the proof path. */
|
|
260
|
+
emitNfr02Otel(record) {
|
|
261
|
+
try {
|
|
262
|
+
const obs = getObservability();
|
|
263
|
+
if (!obs)
|
|
264
|
+
return;
|
|
265
|
+
const attrs = {
|
|
266
|
+
"sutra.subject_id": record.subjectId,
|
|
267
|
+
"sutra.device_id": record.deviceId,
|
|
268
|
+
"sutra.nfr_id": record.nfrId,
|
|
269
|
+
"sutra.outcome": record.outcome,
|
|
270
|
+
"sutra.locality": record.locality,
|
|
271
|
+
"sutra.turns": record.turns,
|
|
272
|
+
"sutra.days": record.days,
|
|
273
|
+
"sutra.turns_per_day": record.turnsPerDay,
|
|
274
|
+
"sutra.fold_p95_ms": record.foldP95Ms,
|
|
275
|
+
"sutra.cast_persist_p95_ms": record.castPersistP95Ms,
|
|
276
|
+
"sutra.turn_p95_ms": record.turnP95Ms,
|
|
277
|
+
"sutra.store_bytes": record.storeBytes,
|
|
278
|
+
"sutra.durable_sample_count": record.durableSampleCount,
|
|
279
|
+
"sutra.wall_ms": record.wallMs,
|
|
280
|
+
"sutra.breach_codes": record.breachCodes.join(",") || "none",
|
|
281
|
+
};
|
|
282
|
+
const span = obs.tracer.startSpan("sutra.nfr02.proof", {
|
|
283
|
+
attributes: attrs,
|
|
284
|
+
});
|
|
285
|
+
try {
|
|
286
|
+
const foldHist = obs.meter.createHistogram("sutra.nfr02.fold_p95_ms", { description: "NFR-02 friction fold p95 (ms)" });
|
|
287
|
+
const storeHist = obs.meter.createHistogram("sutra.nfr02.store_bytes", { description: "NFR-02 durable friction store bytes" });
|
|
288
|
+
const turnsHist = obs.meter.createHistogram("sutra.nfr02.turns_per_day", { description: "NFR-02 simulated turns per day" });
|
|
289
|
+
const meterAttrs = {
|
|
290
|
+
"sutra.subject_id": record.subjectId,
|
|
291
|
+
"sutra.device_id": record.deviceId,
|
|
292
|
+
"sutra.nfr_id": record.nfrId,
|
|
293
|
+
};
|
|
294
|
+
foldHist.record(record.foldP95Ms, meterAttrs);
|
|
295
|
+
storeHist.record(record.storeBytes, meterAttrs);
|
|
296
|
+
turnsHist.record(record.turnsPerDay, meterAttrs);
|
|
297
|
+
span.setAttribute("sutra.outcome", record.outcome === "ok" ? "ok" : "budget_breached");
|
|
298
|
+
}
|
|
299
|
+
finally {
|
|
300
|
+
span.end();
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
// Exporter / meter failure must never block NFR proofs or turns.
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Assemble CognitiveBindings from this agent's edge
|
|
309
|
+
* config + adapters. Does not invoke CognitiveCore.turn (002).
|
|
310
|
+
*/
|
|
311
|
+
buildCognitiveBindings(overrides = {}) {
|
|
312
|
+
return createEdgeCognitiveBindings({
|
|
313
|
+
subjectId: this.config.subjectId,
|
|
314
|
+
deviceId: this.config.deviceId,
|
|
315
|
+
runtime: this.config.runtime,
|
|
316
|
+
vectorDb: this.memory,
|
|
317
|
+
track: this.state.profile.track,
|
|
318
|
+
language: this.state.profile.language,
|
|
319
|
+
activeConceptId: this.state.activeConceptId,
|
|
320
|
+
locality: "on-device",
|
|
321
|
+
...(this.config.modelDefaultDeadlineMs !== undefined
|
|
322
|
+
? { defaultDeadlineMs: this.config.modelDefaultDeadlineMs }
|
|
323
|
+
: {}),
|
|
324
|
+
...(this.config.speech ? { speech: this.config.speech } : {}),
|
|
325
|
+
...(this.config.vision ? { vision: this.config.vision } : {}),
|
|
326
|
+
...overrides,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Run one agent turn entirely on-device via CognitiveCore .
|
|
331
|
+
* Fold friction only after a successful core turn; mid-turn throws emit
|
|
332
|
+
* nothing (CAST-01 discard). Public AgentReply shape is unchanged —
|
|
333
|
+
* never put reply text on the bus.
|
|
334
|
+
*/
|
|
335
|
+
async agentTurn(utterance, friction) {
|
|
336
|
+
const prior = this.turnChain;
|
|
337
|
+
let release;
|
|
338
|
+
this.turnChain = new Promise((resolve) => {
|
|
339
|
+
release = resolve;
|
|
340
|
+
});
|
|
341
|
+
await prior.catch(() => { });
|
|
342
|
+
try {
|
|
343
|
+
return await this.runCognitiveAgentTurn(utterance, friction);
|
|
344
|
+
}
|
|
345
|
+
finally {
|
|
346
|
+
release();
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
async runCognitiveAgentTurn(utterance, friction) {
|
|
350
|
+
const startedMs = performance.now();
|
|
351
|
+
const turnId = crypto.randomUUID();
|
|
352
|
+
const conceptId = this.state.activeConceptId ?? friction.conceptId;
|
|
353
|
+
const sessionId = `edge.${this.config.deviceId}.${this.config.subjectId}`;
|
|
354
|
+
const { bindings, profile } = this.buildCognitiveBindings({
|
|
355
|
+
activeConceptId: conceptId,
|
|
356
|
+
});
|
|
357
|
+
const core = new CognitiveCore(profile, bindings, {
|
|
358
|
+
eventBus: this.eventBus,
|
|
359
|
+
});
|
|
360
|
+
let out;
|
|
361
|
+
try {
|
|
362
|
+
out = await core.turn({
|
|
363
|
+
subjectId: this.config.subjectId,
|
|
364
|
+
sessionId,
|
|
365
|
+
utterance,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
catch (err) {
|
|
369
|
+
// Friction not folded; no turn.completed.
|
|
370
|
+
throw err;
|
|
371
|
+
}
|
|
372
|
+
// Durable side effect first — bus event never precedes acknowledgment.
|
|
373
|
+
const foldStarted = performance.now();
|
|
374
|
+
this.foldFriction(friction);
|
|
375
|
+
this.lastFoldMs = performance.now() - foldStarted;
|
|
376
|
+
const reply = {
|
|
377
|
+
text: out.reply,
|
|
378
|
+
conceptId,
|
|
379
|
+
servedLocally: true,
|
|
380
|
+
};
|
|
381
|
+
if (this.config.trajectoryCaptureWriter) {
|
|
382
|
+
try {
|
|
383
|
+
this.config.trajectoryCaptureWriter.captureAfterReflect({
|
|
384
|
+
turnId,
|
|
385
|
+
subjectId: this.config.subjectId,
|
|
386
|
+
deviceId: this.config.deviceId,
|
|
387
|
+
sessionId,
|
|
388
|
+
capturedAt: friction.capturedAt,
|
|
389
|
+
utterance,
|
|
390
|
+
reply: out.reply,
|
|
391
|
+
modelId: this.config.runtime.card.modelId,
|
|
392
|
+
declined: out.declined,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
catch (error) {
|
|
396
|
+
console.error(JSON.stringify({
|
|
397
|
+
event: "edge_agent.trajectory_capture",
|
|
398
|
+
outcome: "rejected",
|
|
399
|
+
subjectId: this.config.subjectId,
|
|
400
|
+
deviceId: this.config.deviceId,
|
|
401
|
+
failureClass: error instanceof Error
|
|
402
|
+
? error.name.slice(0, 64)
|
|
403
|
+
: "capture_hook_failed",
|
|
404
|
+
}));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
publishTurnCompleted(this.eventBus, {
|
|
408
|
+
subjectId: this.config.subjectId,
|
|
409
|
+
deviceId: this.config.deviceId,
|
|
410
|
+
conceptId,
|
|
411
|
+
latencyMs: performance.now() - startedMs,
|
|
412
|
+
servedLocally: reply.servedLocally,
|
|
413
|
+
turnId,
|
|
414
|
+
});
|
|
415
|
+
return reply;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Reconcile with the cloud master. Never throws; the terminal outcome is
|
|
419
|
+
* a value (see SyncEngine's autonomous error-handling doctrine).
|
|
420
|
+
*
|
|
421
|
+
* After durable apply (converged) or terminal non-apply, publishes
|
|
422
|
+
* Catalog-valid `sync.outcome` — never CognitiveState.
|
|
423
|
+
* Permanently offline (no transport) still emits `skipped-offline`.
|
|
424
|
+
*/
|
|
425
|
+
async syncNow() {
|
|
426
|
+
const startedMs = performance.now();
|
|
427
|
+
const syncAttemptId = crypto.randomUUID();
|
|
428
|
+
if (!this.syncEngine) {
|
|
429
|
+
publishSyncOutcome(this.eventBus, {
|
|
430
|
+
subjectId: this.config.subjectId,
|
|
431
|
+
deviceId: this.config.deviceId,
|
|
432
|
+
syncAttemptId,
|
|
433
|
+
outcome: "skipped-offline",
|
|
434
|
+
attempts: 0,
|
|
435
|
+
durationMs: performance.now() - startedMs,
|
|
436
|
+
advisoryCodes: [],
|
|
437
|
+
});
|
|
438
|
+
return { status: "offline-mode" };
|
|
439
|
+
}
|
|
440
|
+
const unsynced = await this.telemetry.unsynced();
|
|
441
|
+
const outcome = await this.syncEngine.synchronize({
|
|
442
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
443
|
+
deviceId: this.config.deviceId,
|
|
444
|
+
edgeState: { ...this.state, frictionLog: unsynced },
|
|
445
|
+
lastKnownCloudVector: this.state.stateVector,
|
|
446
|
+
syncAttemptId,
|
|
447
|
+
});
|
|
448
|
+
if (outcome.status === "converged") {
|
|
449
|
+
this.state = outcome.state;
|
|
450
|
+
this.clock.observe(this.state.profile.updatedAt);
|
|
451
|
+
await this.telemetry.markSynced(unsynced.map((s) => s.capturedAt));
|
|
452
|
+
}
|
|
453
|
+
// Bus event after durable write (converged) or after terminal non-apply.
|
|
454
|
+
const publishArgs = {
|
|
455
|
+
subjectId: this.config.subjectId,
|
|
456
|
+
deviceId: this.config.deviceId,
|
|
457
|
+
syncAttemptId,
|
|
458
|
+
outcome: outcome.status,
|
|
459
|
+
attempts: outcome.attempts,
|
|
460
|
+
durationMs: performance.now() - startedMs,
|
|
461
|
+
advisoryCodes: outcome.advisoryCodes,
|
|
462
|
+
};
|
|
463
|
+
if (outcome.status === "quarantined") {
|
|
464
|
+
publishArgs.quarantineCode = outcome.reasonCode;
|
|
465
|
+
publishArgs.httpStatus = outcome.httpStatus;
|
|
466
|
+
}
|
|
467
|
+
else if (outcome.status === "exhausted") {
|
|
468
|
+
publishArgs.exhaustedCode = outcome.reasonCode;
|
|
469
|
+
}
|
|
470
|
+
publishSyncOutcome(this.eventBus, publishArgs);
|
|
471
|
+
return outcome;
|
|
472
|
+
}
|
|
473
|
+
/* ── internals ─────────────────────────────────────────────────────── */
|
|
474
|
+
publishLifecycleReady() {
|
|
475
|
+
if (this.lifecycleReadyPublished)
|
|
476
|
+
return;
|
|
477
|
+
this.lifecycleReadyPublished = true;
|
|
478
|
+
this.eventBus.publish({
|
|
479
|
+
type: EDGE_LIFECYCLE_READY,
|
|
480
|
+
at: new Date().toISOString(),
|
|
481
|
+
payload: {
|
|
482
|
+
subjectId: this.config.subjectId,
|
|
483
|
+
deviceId: this.config.deviceId,
|
|
484
|
+
outcome: "ok",
|
|
485
|
+
// Operator visibility: permanently offline vs transport-attached.
|
|
486
|
+
connectivity: this.syncEngine ? "online-capable" : "offline-mode",
|
|
487
|
+
},
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
/** Bayesian update: fold one friction sample into the mastery G-Counters. */
|
|
491
|
+
foldFriction(sample) {
|
|
492
|
+
const device = this.config.deviceId;
|
|
493
|
+
const entry = (this.state.mastery[sample.conceptId] ??= {
|
|
494
|
+
conceptId: sample.conceptId,
|
|
495
|
+
alpha: {},
|
|
496
|
+
beta: {},
|
|
497
|
+
lastExercisedAt: sample.capturedAt,
|
|
498
|
+
});
|
|
499
|
+
// Evidence weighting: a slow, hint-assisted correct answer is weaker
|
|
500
|
+
// mastery evidence than a fluent one. Friction modulates the increment.
|
|
501
|
+
const fluency = sample.hesitationMs < 3000 && sample.revisionCount <= 1 ? 1.0 : 0.5;
|
|
502
|
+
if (sample.outcome === "correct") {
|
|
503
|
+
entry.alpha[device] = (entry.alpha[device] ?? 0) + fluency;
|
|
504
|
+
}
|
|
505
|
+
else if (sample.outcome === "incorrect") {
|
|
506
|
+
entry.beta[device] = (entry.beta[device] ?? 0) + 1;
|
|
507
|
+
}
|
|
508
|
+
else if (sample.outcome === "partial") {
|
|
509
|
+
entry.alpha[device] = (entry.alpha[device] ?? 0) + 0.5 * fluency;
|
|
510
|
+
entry.beta[device] = (entry.beta[device] ?? 0) + 0.5;
|
|
511
|
+
}
|
|
512
|
+
entry.lastExercisedAt = sample.capturedAt;
|
|
513
|
+
this.state.stateVector["session"] = this.clock.tick();
|
|
514
|
+
}
|
|
515
|
+
genesisState() {
|
|
516
|
+
const now = this.clock.tick();
|
|
517
|
+
return {
|
|
518
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
519
|
+
subjectId: this.config.subjectId,
|
|
520
|
+
deviceIds: [this.config.deviceId],
|
|
521
|
+
activeConceptId: null,
|
|
522
|
+
mode: "diagnostic",
|
|
523
|
+
mastery: {},
|
|
524
|
+
frictionLog: [],
|
|
525
|
+
profile: { ...this.config.profile, updatedAt: now },
|
|
526
|
+
stateVector: { session: now },
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
//# sourceMappingURL=edge_agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge_agent.js","sourceRoot":"","sources":["../src/edge_agent.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @moolam/edge-agent - The Edge Harness.
|
|
3
|
+
*
|
|
4
|
+
* Offline-first autonomous cognitive agent runtime for local SLMs, with
|
|
5
|
+
* on-device vector memory and CRDT sync. Friction telemetry lives in
|
|
6
|
+
* @moolam/telemetry and is composed here.
|
|
7
|
+
*/
|
|
8
|
+
export * from "./slm_runtime.js";
|
|
9
|
+
export * from "./local_vector_db.js";
|
|
10
|
+
export * from "./cognitive_bindings.js";
|
|
11
|
+
export * from "./edge_agent.js";
|
|
12
|
+
export * from "./coldstart.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @moolam/edge-agent - The Edge Harness.
|
|
3
|
+
*
|
|
4
|
+
* Offline-first autonomous cognitive agent runtime for local SLMs, with
|
|
5
|
+
* on-device vector memory and CRDT sync. Friction telemetry lives in
|
|
6
|
+
* @moolam/telemetry and is composed here.
|
|
7
|
+
*/
|
|
8
|
+
export * from "./slm_runtime.js";
|
|
9
|
+
export * from "./local_vector_db.js";
|
|
10
|
+
export * from "./cognitive_bindings.js";
|
|
11
|
+
export * from "./edge_agent.js";
|
|
12
|
+
export * from "./coldstart.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
|