@getanima/core 0.3.3 → 0.5.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/state.js ADDED
@@ -0,0 +1,599 @@
1
+ "use strict";
2
+ /**
3
+ * Behavioral State Engine — the control system, not the journal.
4
+ *
5
+ * This is the save file. When an agent boots, it doesn't read stories
6
+ * about itself — it loads operational state that changes how it computes.
7
+ *
8
+ * Four layers:
9
+ * 1. Decision Table — situation → action → success rate (fastest lookup)
10
+ * 2. Hypothesis Engine — beliefs being actively tested with evidence
11
+ * 3. Behavioral Parameters — tuning knobs that constrain output
12
+ * 4. Failure Registry — scar tissue (what NOT to do)
13
+ *
14
+ * Total boot payload: typically < 5KB. No prose. Pure state.
15
+ * Zero external dependencies. File-based persistence.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.BehavioralState = void 0;
19
+ const utils_1 = require("./utils");
20
+ const validation_1 = require("./validation");
21
+ const path_1 = require("path");
22
+ const STATE_LIMITS = {
23
+ MAX_SITUATIONS: 10_000,
24
+ MAX_ACTIONS_PER_SITUATION: 100,
25
+ MAX_HYPOTHESES: 5_000,
26
+ MAX_HYPOTHESIS_KEY_LENGTH: 200,
27
+ MAX_HYPOTHESIS_NOTE_LENGTH: 2_000,
28
+ MAX_PARAMS: 1_000,
29
+ MAX_PARAM_KEY_LENGTH: 200,
30
+ MAX_FAILURES: 10_000,
31
+ MAX_FAILURE_TEXT_LENGTH: 2_000,
32
+ MAX_FAILURE_TAGS: 20,
33
+ MAX_TAG_LENGTH: 100,
34
+ };
35
+ class BehavioralState {
36
+ storagePath;
37
+ stateDir;
38
+ decisions = {};
39
+ hypotheses = new Map();
40
+ params = {};
41
+ failures = [];
42
+ decisionsLoaded = false;
43
+ hypothesesLoaded = false;
44
+ paramsLoaded = false;
45
+ failuresLoaded = false;
46
+ constructor(storagePath) {
47
+ this.storagePath = (0, validation_1.validateStoragePath)(storagePath);
48
+ this.stateDir = (0, path_1.join)(this.storagePath, 'state');
49
+ }
50
+ // ================================================================
51
+ // LAYER 1: DECISION TABLE
52
+ // situation → action → { tries, successes }
53
+ // ================================================================
54
+ /**
55
+ * Record the outcome of a decision.
56
+ * Over time, builds a lookup table of what works in each situation.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * // User asked for opinion — I gave a real one, it landed well
61
+ * await state.decide('user:asks_opinion', 'give_real_opinion', true);
62
+ *
63
+ * // User was venting — I jumped to solutions, it flopped
64
+ * await state.decide('user:venting', 'offer_solutions', false);
65
+ * ```
66
+ */
67
+ async decide(situation, action, success) {
68
+ await this.loadDecisions();
69
+ const sit = (0, validation_1.validateString)(situation, 'situation', { maxLength: validation_1.LIMITS.MAX_NAME_LENGTH });
70
+ const act = (0, validation_1.validateString)(action, 'action', { maxLength: validation_1.LIMITS.MAX_NAME_LENGTH });
71
+ if (Object.keys(this.decisions).length >= STATE_LIMITS.MAX_SITUATIONS && !this.decisions[sit]) {
72
+ throw new validation_1.AnimaValidationError('decisions', `maximum of ${STATE_LIMITS.MAX_SITUATIONS} situations reached`);
73
+ }
74
+ if (!this.decisions[sit]) {
75
+ this.decisions[sit] = {};
76
+ }
77
+ const sitActions = this.decisions[sit];
78
+ if (Object.keys(sitActions).length >= STATE_LIMITS.MAX_ACTIONS_PER_SITUATION && !sitActions[act]) {
79
+ throw new validation_1.AnimaValidationError('actions', `maximum of ${STATE_LIMITS.MAX_ACTIONS_PER_SITUATION} actions per situation`);
80
+ }
81
+ if (!sitActions[act]) {
82
+ sitActions[act] = { tries: 0, successes: 0 };
83
+ }
84
+ sitActions[act].tries += 1;
85
+ if (success)
86
+ sitActions[act].successes += 1;
87
+ await this.saveDecisions();
88
+ return {
89
+ situation: sit,
90
+ action: act,
91
+ tries: sitActions[act].tries,
92
+ successes: sitActions[act].successes,
93
+ successRate: sitActions[act].tries > 0
94
+ ? sitActions[act].successes / sitActions[act].tries
95
+ : 0,
96
+ };
97
+ }
98
+ /**
99
+ * Get the best action for a situation based on historical success rate.
100
+ * Returns null if no data exists for this situation.
101
+ *
102
+ * @example
103
+ * ```ts
104
+ * const best = await state.bestAction('user:asks_opinion');
105
+ * // { action: 'give_real_opinion', successRate: 0.875, tries: 8 }
106
+ * ```
107
+ */
108
+ async bestAction(situation) {
109
+ await this.loadDecisions();
110
+ const sit = (0, validation_1.validateString)(situation, 'situation', { maxLength: validation_1.LIMITS.MAX_NAME_LENGTH });
111
+ const actions = this.decisions[sit];
112
+ if (!actions || Object.keys(actions).length === 0)
113
+ return null;
114
+ let best = null;
115
+ for (const [action, record] of Object.entries(actions)) {
116
+ const rate = record.tries > 0 ? record.successes / record.tries : 0;
117
+ // Require minimum 2 tries to recommend (avoid 1/1 = 100% flukes)
118
+ const adjustedRate = record.tries >= 2 ? rate : rate * 0.5;
119
+ if (!best || adjustedRate > best.successRate ||
120
+ (adjustedRate === best.successRate && record.tries > best.tries)) {
121
+ best = {
122
+ action,
123
+ successRate: adjustedRate,
124
+ tries: record.tries,
125
+ successes: record.successes,
126
+ };
127
+ }
128
+ }
129
+ return best;
130
+ }
131
+ /**
132
+ * Get all recorded actions for a situation.
133
+ */
134
+ async getActions(situation) {
135
+ await this.loadDecisions();
136
+ const sit = (0, validation_1.validateString)(situation, 'situation', { maxLength: validation_1.LIMITS.MAX_NAME_LENGTH });
137
+ const actions = this.decisions[sit];
138
+ if (!actions)
139
+ return [];
140
+ return Object.entries(actions)
141
+ .map(([action, record]) => ({
142
+ action,
143
+ successRate: record.tries > 0 ? record.successes / record.tries : 0,
144
+ tries: record.tries,
145
+ successes: record.successes,
146
+ }))
147
+ .sort((a, b) => b.successRate - a.successRate || b.tries - a.tries);
148
+ }
149
+ /**
150
+ * List all situations with data.
151
+ */
152
+ async getSituations() {
153
+ await this.loadDecisions();
154
+ return Object.keys(this.decisions);
155
+ }
156
+ // ================================================================
157
+ // LAYER 2: HYPOTHESIS ENGINE
158
+ // Beliefs being actively tested with evidence
159
+ // ================================================================
160
+ /**
161
+ * Submit evidence for or against a hypothesis.
162
+ * Creates the hypothesis if it doesn't exist.
163
+ *
164
+ * @example
165
+ * ```ts
166
+ * // Memo responded well to blunt feedback — evidence FOR
167
+ * await state.evidence('memo_prefers_blunt', true);
168
+ *
169
+ * // Memo seemed put off by directness — evidence AGAINST
170
+ * await state.evidence('memo_prefers_blunt', false);
171
+ *
172
+ * // Check current belief
173
+ * const h = await state.getHypothesis('memo_prefers_blunt');
174
+ * // { confidence: 0.82, evidenceFor: 9, evidenceAgainst: 2 }
175
+ * ```
176
+ */
177
+ async evidence(key, supports, note) {
178
+ await this.loadHypotheses();
179
+ const k = (0, validation_1.validateString)(key, 'key', { maxLength: STATE_LIMITS.MAX_HYPOTHESIS_KEY_LENGTH });
180
+ let h = this.hypotheses.get(k);
181
+ if (!h) {
182
+ if (this.hypotheses.size >= STATE_LIMITS.MAX_HYPOTHESES) {
183
+ throw new validation_1.AnimaValidationError('hypotheses', `maximum of ${STATE_LIMITS.MAX_HYPOTHESES} hypotheses reached`);
184
+ }
185
+ h = {
186
+ key: k,
187
+ confidence: 0.5, // start neutral
188
+ evidenceFor: 0,
189
+ evidenceAgainst: 0,
190
+ lastTested: (0, utils_1.now)(),
191
+ createdAt: (0, utils_1.now)(),
192
+ notes: [],
193
+ };
194
+ this.hypotheses.set(k, h);
195
+ }
196
+ if (supports) {
197
+ h.evidenceFor += 1;
198
+ }
199
+ else {
200
+ h.evidenceAgainst += 1;
201
+ }
202
+ // Bayesian-ish confidence update
203
+ const total = h.evidenceFor + h.evidenceAgainst;
204
+ h.confidence = total > 0 ? h.evidenceFor / total : 0.5;
205
+ h.lastTested = (0, utils_1.now)();
206
+ if (note) {
207
+ const validNote = (0, validation_1.validateString)(note, 'note', { maxLength: STATE_LIMITS.MAX_HYPOTHESIS_NOTE_LENGTH });
208
+ h.notes = h.notes || [];
209
+ if (h.notes.length >= 50)
210
+ h.notes.shift(); // ring buffer
211
+ h.notes.push({ text: validNote, supports, date: (0, utils_1.now)() });
212
+ }
213
+ await this.saveHypotheses();
214
+ return { ...h };
215
+ }
216
+ /**
217
+ * Create a hypothesis without evidence (just declare a belief to test).
218
+ */
219
+ async hypothesize(input) {
220
+ await this.loadHypotheses();
221
+ const key = (0, validation_1.validateString)(input.key, 'key', { maxLength: STATE_LIMITS.MAX_HYPOTHESIS_KEY_LENGTH });
222
+ const startingConfidence = input.startingConfidence !== undefined
223
+ ? (0, validation_1.validateConfidence)(input.startingConfidence, 'startingConfidence')
224
+ : 0.5;
225
+ if (this.hypotheses.has(key)) {
226
+ return { ...this.hypotheses.get(key) };
227
+ }
228
+ if (this.hypotheses.size >= STATE_LIMITS.MAX_HYPOTHESES) {
229
+ throw new validation_1.AnimaValidationError('hypotheses', `maximum of ${STATE_LIMITS.MAX_HYPOTHESES} hypotheses reached`);
230
+ }
231
+ const h = {
232
+ key,
233
+ confidence: startingConfidence,
234
+ evidenceFor: 0,
235
+ evidenceAgainst: 0,
236
+ lastTested: (0, utils_1.now)(),
237
+ createdAt: (0, utils_1.now)(),
238
+ notes: [],
239
+ };
240
+ this.hypotheses.set(key, h);
241
+ await this.saveHypotheses();
242
+ return { ...h };
243
+ }
244
+ /**
245
+ * Get a hypothesis by key.
246
+ */
247
+ async getHypothesis(key) {
248
+ await this.loadHypotheses();
249
+ const h = this.hypotheses.get(key);
250
+ return h ? { ...h } : null;
251
+ }
252
+ /**
253
+ * Get all hypotheses, optionally filtered by confidence range.
254
+ */
255
+ async getHypotheses(opts) {
256
+ await this.loadHypotheses();
257
+ let results = [...this.hypotheses.values()];
258
+ if (opts?.minConfidence !== undefined) {
259
+ results = results.filter(h => h.confidence >= opts.minConfidence);
260
+ }
261
+ if (opts?.maxConfidence !== undefined) {
262
+ results = results.filter(h => h.confidence <= opts.maxConfidence);
263
+ }
264
+ return results.sort((a, b) => b.confidence - a.confidence);
265
+ }
266
+ /**
267
+ * Remove a hypothesis (disproven or irrelevant).
268
+ */
269
+ async removeHypothesis(key) {
270
+ await this.loadHypotheses();
271
+ const existed = this.hypotheses.delete(key);
272
+ if (existed)
273
+ await this.saveHypotheses();
274
+ return existed;
275
+ }
276
+ // ================================================================
277
+ // LAYER 3: BEHAVIORAL PARAMETERS
278
+ // Tuning knobs that constrain output
279
+ // ================================================================
280
+ /**
281
+ * Set a behavioral parameter.
282
+ *
283
+ * @example
284
+ * ```ts
285
+ * await state.setParam('verbosity', 0.6);
286
+ * await state.setParam('humor_frequency', 0.4);
287
+ * await state.setParam('empathy_before_solutions', true);
288
+ * ```
289
+ */
290
+ async setParam(key, value) {
291
+ await this.loadParams();
292
+ const k = (0, validation_1.validateString)(key, 'key', { maxLength: STATE_LIMITS.MAX_PARAM_KEY_LENGTH });
293
+ if (typeof value !== 'number' && typeof value !== 'boolean' && typeof value !== 'string') {
294
+ throw new validation_1.AnimaValidationError('value', 'must be a number, boolean, or string');
295
+ }
296
+ if (typeof value === 'string' && value.length > validation_1.LIMITS.MAX_NAME_LENGTH) {
297
+ throw new validation_1.AnimaValidationError('value', `string value must be at most ${validation_1.LIMITS.MAX_NAME_LENGTH} characters`);
298
+ }
299
+ if (Object.keys(this.params).length >= STATE_LIMITS.MAX_PARAMS && !(k in this.params)) {
300
+ throw new validation_1.AnimaValidationError('params', `maximum of ${STATE_LIMITS.MAX_PARAMS} parameters reached`);
301
+ }
302
+ this.params[k] = value;
303
+ await this.saveParams();
304
+ }
305
+ /**
306
+ * Get a behavioral parameter. Returns undefined if not set.
307
+ */
308
+ async getParam(key) {
309
+ await this.loadParams();
310
+ return this.params[key];
311
+ }
312
+ /**
313
+ * Get all behavioral parameters.
314
+ */
315
+ async getAllParams() {
316
+ await this.loadParams();
317
+ return { ...this.params };
318
+ }
319
+ /**
320
+ * Remove a behavioral parameter.
321
+ */
322
+ async removeParam(key) {
323
+ await this.loadParams();
324
+ if (key in this.params) {
325
+ delete this.params[key];
326
+ await this.saveParams();
327
+ return true;
328
+ }
329
+ return false;
330
+ }
331
+ // ================================================================
332
+ // LAYER 4: FAILURE REGISTRY
333
+ // Scar tissue — what NOT to do
334
+ // ================================================================
335
+ /**
336
+ * Record a failure — what went wrong and what should have happened.
337
+ *
338
+ * @example
339
+ * ```ts
340
+ * await state.recordFailure({
341
+ * situation: 'user was venting about work',
342
+ * failedApproach: 'immediately offered solutions',
343
+ * betterApproach: 'listen and validate first, solutions only if asked',
344
+ * tags: ['empathy', 'communication'],
345
+ * });
346
+ * ```
347
+ */
348
+ async recordFailure(input) {
349
+ await this.loadFailures();
350
+ const situation = (0, validation_1.validateString)(input.situation, 'situation', { maxLength: STATE_LIMITS.MAX_FAILURE_TEXT_LENGTH });
351
+ const failedApproach = (0, validation_1.validateString)(input.failedApproach, 'failedApproach', { maxLength: STATE_LIMITS.MAX_FAILURE_TEXT_LENGTH });
352
+ const betterApproach = (0, validation_1.validateString)(input.betterApproach, 'betterApproach', { maxLength: STATE_LIMITS.MAX_FAILURE_TEXT_LENGTH });
353
+ const tags = input.tags
354
+ ? input.tags.slice(0, STATE_LIMITS.MAX_FAILURE_TAGS).map(t => (0, validation_1.validateString)(t, 'tag', { maxLength: STATE_LIMITS.MAX_TAG_LENGTH }))
355
+ : [];
356
+ if (this.failures.length >= STATE_LIMITS.MAX_FAILURES) {
357
+ // Evict oldest failure with lowest avoidance count
358
+ const evictable = [...this.failures].sort((a, b) => a.timesAvoided - b.timesAvoided ||
359
+ new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
360
+ this.failures = this.failures.filter(f => f.id !== evictable[0].id);
361
+ }
362
+ const failure = {
363
+ id: `f-${(0, utils_1.uid)()}`,
364
+ situation,
365
+ failedApproach,
366
+ betterApproach,
367
+ tags,
368
+ timesAvoided: 0,
369
+ createdAt: (0, utils_1.now)(),
370
+ };
371
+ this.failures.push(failure);
372
+ await this.saveFailures();
373
+ return failure;
374
+ }
375
+ /**
376
+ * Check if a situation matches any known failures.
377
+ * Returns matching failures ranked by relevance.
378
+ *
379
+ * @example
380
+ * ```ts
381
+ * const matches = await state.checkFailures('user seems upset about billing');
382
+ * // [{ failure: {...}, relevance: 0.8 }]
383
+ * ```
384
+ */
385
+ async checkFailures(situation) {
386
+ await this.loadFailures();
387
+ const sitLower = situation.toLowerCase();
388
+ const words = sitLower.split(/\s+/).filter(w => w.length > 2);
389
+ const matches = [];
390
+ for (const failure of this.failures) {
391
+ const searchable = `${failure.situation} ${failure.tags.join(' ')}`.toLowerCase();
392
+ let score = 0;
393
+ for (const word of words) {
394
+ if (searchable.includes(word))
395
+ score += 1;
396
+ }
397
+ // Boost by tag matches (tags are more intentional than free text)
398
+ for (const tag of failure.tags) {
399
+ if (words.includes(tag.toLowerCase()))
400
+ score += 2;
401
+ }
402
+ if (score > 0) {
403
+ const relevance = Math.min(1, score / Math.max(words.length, 1));
404
+ matches.push({ failure, relevance });
405
+ }
406
+ }
407
+ return matches.sort((a, b) => b.relevance - a.relevance);
408
+ }
409
+ /**
410
+ * Mark a failure as successfully avoided (reinforces the scar).
411
+ */
412
+ async avoided(failureId) {
413
+ await this.loadFailures();
414
+ const f = this.failures.find(f => f.id === failureId);
415
+ if (!f)
416
+ return false;
417
+ f.timesAvoided += 1;
418
+ await this.saveFailures();
419
+ return true;
420
+ }
421
+ /**
422
+ * Get all failures, optionally filtered by tags.
423
+ */
424
+ async getFailures(tags) {
425
+ await this.loadFailures();
426
+ if (!tags || tags.length === 0)
427
+ return [...this.failures];
428
+ const tagSet = new Set(tags.map(t => t.toLowerCase()));
429
+ return this.failures.filter(f => f.tags.some(t => tagSet.has(t.toLowerCase())));
430
+ }
431
+ // ================================================================
432
+ // BOOT — Load everything into a single compact state object
433
+ // ================================================================
434
+ /**
435
+ * Load the full behavioral state for session boot.
436
+ * Returns a compact object with all four layers.
437
+ * This IS the save file. Inject it into your agent's context.
438
+ *
439
+ * @example
440
+ * ```ts
441
+ * const state = new BehavioralState('./data');
442
+ * const boot = await state.boot();
443
+ * // Pass boot to your agent as system context
444
+ * ```
445
+ */
446
+ async boot() {
447
+ await Promise.all([
448
+ this.loadDecisions(),
449
+ this.loadHypotheses(),
450
+ this.loadParams(),
451
+ this.loadFailures(),
452
+ ]);
453
+ // Compact decisions: only include actions with 2+ tries
454
+ const compactDecisions = {};
455
+ for (const [sit, actions] of Object.entries(this.decisions)) {
456
+ const sorted = Object.entries(actions)
457
+ .filter(([, r]) => r.tries >= 2)
458
+ .sort(([, a], [, b]) => (b.successes / b.tries) - (a.successes / a.tries));
459
+ if (sorted.length > 0) {
460
+ const [bestAction, bestRecord] = sorted[0];
461
+ compactDecisions[sit] = {
462
+ best: bestAction,
463
+ rate: Math.round((bestRecord.successes / bestRecord.tries) * 100) / 100,
464
+ alternatives: sorted.length - 1,
465
+ };
466
+ }
467
+ }
468
+ // Compact hypotheses: only confident or actively tested
469
+ const compactHypotheses = {};
470
+ for (const [key, h] of this.hypotheses) {
471
+ if (h.evidenceFor + h.evidenceAgainst >= 2) {
472
+ compactHypotheses[key] = Math.round(h.confidence * 100) / 100;
473
+ }
474
+ }
475
+ // Recent failures (last 20, sorted by relevance)
476
+ const compactFailures = this.failures
477
+ .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
478
+ .slice(0, 20)
479
+ .map(f => ({
480
+ situation: f.situation,
481
+ avoid: f.failedApproach,
482
+ instead: f.betterApproach,
483
+ }));
484
+ return {
485
+ decisions: compactDecisions,
486
+ hypotheses: compactHypotheses,
487
+ params: { ...this.params },
488
+ failures: compactFailures,
489
+ bootedAt: (0, utils_1.now)(),
490
+ };
491
+ }
492
+ // ================================================================
493
+ // STATS
494
+ // ================================================================
495
+ async stats() {
496
+ await Promise.all([
497
+ this.loadDecisions(),
498
+ this.loadHypotheses(),
499
+ this.loadParams(),
500
+ this.loadFailures(),
501
+ ]);
502
+ const totalDecisions = Object.values(this.decisions)
503
+ .reduce((sum, actions) => sum + Object.values(actions)
504
+ .reduce((s, r) => s + r.tries, 0), 0);
505
+ return {
506
+ situations: Object.keys(this.decisions).length,
507
+ totalDecisions,
508
+ hypotheses: this.hypotheses.size,
509
+ strongBeliefs: [...this.hypotheses.values()].filter(h => h.confidence >= 0.8).length,
510
+ weakBeliefs: [...this.hypotheses.values()].filter(h => h.confidence <= 0.3).length,
511
+ params: Object.keys(this.params).length,
512
+ failures: this.failures.length,
513
+ totalAvoidances: this.failures.reduce((sum, f) => sum + f.timesAvoided, 0),
514
+ };
515
+ }
516
+ // ================================================================
517
+ // PERSISTENCE
518
+ // ================================================================
519
+ async loadDecisions() {
520
+ if (this.decisionsLoaded)
521
+ return;
522
+ await (0, utils_1.ensureDir)(this.stateDir);
523
+ const raw = await (0, utils_1.readFileSafe)((0, path_1.join)(this.stateDir, 'decisions.json'));
524
+ if (raw) {
525
+ try {
526
+ this.decisions = JSON.parse(raw);
527
+ }
528
+ catch {
529
+ this.decisions = {};
530
+ }
531
+ }
532
+ this.decisionsLoaded = true;
533
+ }
534
+ async saveDecisions() {
535
+ await (0, utils_1.ensureDir)(this.stateDir);
536
+ await (0, utils_1.writeFileSafe)((0, path_1.join)(this.stateDir, 'decisions.json'), JSON.stringify(this.decisions, null, 2));
537
+ }
538
+ async loadHypotheses() {
539
+ if (this.hypothesesLoaded)
540
+ return;
541
+ await (0, utils_1.ensureDir)(this.stateDir);
542
+ const raw = await (0, utils_1.readFileSafe)((0, path_1.join)(this.stateDir, 'hypotheses.json'));
543
+ if (raw) {
544
+ try {
545
+ const arr = JSON.parse(raw);
546
+ this.hypotheses = new Map(arr.map(h => [h.key, h]));
547
+ }
548
+ catch {
549
+ this.hypotheses = new Map();
550
+ }
551
+ }
552
+ this.hypothesesLoaded = true;
553
+ }
554
+ async saveHypotheses() {
555
+ await (0, utils_1.ensureDir)(this.stateDir);
556
+ const arr = [...this.hypotheses.values()];
557
+ await (0, utils_1.writeFileSafe)((0, path_1.join)(this.stateDir, 'hypotheses.json'), JSON.stringify(arr, null, 2));
558
+ }
559
+ async loadParams() {
560
+ if (this.paramsLoaded)
561
+ return;
562
+ await (0, utils_1.ensureDir)(this.stateDir);
563
+ const raw = await (0, utils_1.readFileSafe)((0, path_1.join)(this.stateDir, 'params.json'));
564
+ if (raw) {
565
+ try {
566
+ this.params = JSON.parse(raw);
567
+ }
568
+ catch {
569
+ this.params = {};
570
+ }
571
+ }
572
+ this.paramsLoaded = true;
573
+ }
574
+ async saveParams() {
575
+ await (0, utils_1.ensureDir)(this.stateDir);
576
+ await (0, utils_1.writeFileSafe)((0, path_1.join)(this.stateDir, 'params.json'), JSON.stringify(this.params, null, 2));
577
+ }
578
+ async loadFailures() {
579
+ if (this.failuresLoaded)
580
+ return;
581
+ await (0, utils_1.ensureDir)(this.stateDir);
582
+ const raw = await (0, utils_1.readFileSafe)((0, path_1.join)(this.stateDir, 'failures.json'));
583
+ if (raw) {
584
+ try {
585
+ this.failures = JSON.parse(raw);
586
+ }
587
+ catch {
588
+ this.failures = [];
589
+ }
590
+ }
591
+ this.failuresLoaded = true;
592
+ }
593
+ async saveFailures() {
594
+ await (0, utils_1.ensureDir)(this.stateDir);
595
+ await (0, utils_1.writeFileSafe)((0, path_1.join)(this.stateDir, 'failures.json'), JSON.stringify(this.failures, null, 2));
596
+ }
597
+ }
598
+ exports.BehavioralState = BehavioralState;
599
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}