Class: PersonalityMutationStore
Defined in: packages/agentos/src/emergent/PersonalityMutationStore.ts:135
SQLite-backed persistence layer for personality mutations with decay.
Follows the same ensureSchema() pattern as EmergentToolRegistry:
a cached promise guards against concurrent DDL execution, and all DML
methods await schema readiness before proceeding.
Example
const store = new PersonalityMutationStore(sqliteAdapter);
// Record a mutation
const id = await store.record({
agentId: 'agent-42',
trait: 'openness',
delta: 0.1,
reasoning: 'User prefers creative responses',
baselineValue: 0.7,
mutatedValue: 0.8,
});
// Get strength-weighted effective deltas
const deltas = await store.getEffectiveDeltas('agent-42');
// => { openness: 0.1 } (strength is 1.0 initially)
// Decay all mutations by 5%
const { decayed, pruned } = await store.decayAll(0.05);
Constructors
Constructor
new PersonalityMutationStore(
db):PersonalityMutationStore
Defined in: packages/agentos/src/emergent/PersonalityMutationStore.ts:151
Create a new PersonalityMutationStore.
Parameters
db
EmergentRegistryStorageAdapter
A storage adapter implementing the IStorageAdapter interface. The same adapter used by EmergentToolRegistry can be reused.
Returns
PersonalityMutationStore
Methods
decayAll()
decayAll(
rate):Promise<DecayResult>
Defined in: packages/agentos/src/emergent/PersonalityMutationStore.ts:317
Decay all active mutations by the given rate and prune expired ones.
For each mutation with strength above 0.1:
- Subtracts
ratefrom its strength. - If the new strength is at or below 0.1, the mutation is deleted (pruned).
- Otherwise, the strength is updated in place.
This implements Ebbinghaus-style forgetting: mutations that aren't reinforced by repeated adaptation gradually fade away.
Parameters
rate
number
The amount to subtract from each mutation's strength. Typically 0.05 (the default from SelfImprovementConfig).
Returns
Promise<DecayResult>
A DecayResult with counts of decayed and pruned mutations.
getEffectiveDeltas()
getEffectiveDeltas(
agentId):Promise<Record<string,number>>
Defined in: packages/agentos/src/emergent/PersonalityMutationStore.ts:287
Compute the effective (strength-weighted) delta for each trait.
For each active mutation, multiplies the raw delta by the mutation's current strength, then sums per trait. This gives a realistic picture of how much each trait has drifted from baseline, accounting for decay.
Parameters
agentId
string
The agent whose effective deltas to compute.
Returns
Promise<Record<string, number>>
A map of trait name to effective delta (sum of delta * strength).
loadForAgent()
loadForAgent(
agentId):Promise<PersonalityMutation[]>
Defined in: packages/agentos/src/emergent/PersonalityMutationStore.ts:252
Load all active mutations for a given agent.
Returns only mutations whose strength is above the 0.1 pruning threshold, ordered by creation time (newest first).
Parameters
agentId
string
The agent whose mutations to load.
Returns
Promise<PersonalityMutation[]>
An array of PersonalityMutation records.
record()
record(
input):Promise<string>
Defined in: packages/agentos/src/emergent/PersonalityMutationStore.ts:215
Record a new personality mutation.
Inserts a mutation record with initial strength of 1.0 and the current timestamp. The mutation ID is generated deterministically from the current time and a random suffix.
Parameters
input
The mutation parameters (agent, trait, delta, reasoning, values).
Returns
Promise<string>
The generated mutation ID.