@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/episodes.d.ts +109 -0
- package/dist/episodes.d.ts.map +1 -0
- package/dist/episodes.js +589 -0
- package/dist/episodes.js.map +1 -0
- package/dist/esm/episodes.js +585 -0
- package/dist/esm/episodes.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/state.js +595 -0
- package/dist/esm/state.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/state.d.ts +178 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +599 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +162 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
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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"}
|