@dsh-enhanced/assistant-evolution 0.1.3

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/lib/service.js ADDED
@@ -0,0 +1,554 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { isAbsolute, resolve } from 'node:path';
3
+ import { Context, Service } from '@deepseek-ai/cordis';
4
+ import { createUserMessage } from '@deepseek-ai/dsh-llm';
5
+ import Schema from '@deepseek-ai/schemastery';
6
+ import { ApprovalSettlementConflict, validateApprovalSettlement, } from '@dsh-enhanced/assistant-policy';
7
+ import { buildGuidance, buildGuidanceSnapshot } from './guidance.js';
8
+ import { evolutionMutationReview } from './review.js';
9
+ import { EvolutionStore, EvolutionStoreError, evolutionDigest } from './store.js';
10
+ import { registerEvolutionTools } from './tools.js';
11
+ import { legacyEvolutionScope } from './types.js';
12
+ const configSchema = Schema.object({
13
+ databasePath: Schema.string().required(),
14
+ evaluationWindow: Schema.number().step(1).min(1).max(10_000).default(20),
15
+ minSample: Schema.number().step(1).min(1).max(10_000).default(5),
16
+ adoptFailureRate: Schema.number().min(0).max(1).default(0.4),
17
+ retireFailureRate: Schema.number().min(0).max(1).default(0.4),
18
+ maxCandidates: Schema.number().step(1).min(1).max(100).default(10),
19
+ maxEvidenceSamples: Schema.number().step(1).min(1).max(50).default(8),
20
+ maxInjectedRules: Schema.number().step(1).min(1).max(100).default(12),
21
+ maxGuidanceBytes: Schema.number().step(1).min(1).max(65_536).default(4_096),
22
+ maxRuleGuidanceBytes: Schema.number().step(1).min(1).max(16_384).default(2_048),
23
+ defaultProposalTtlMs: Schema.number().step(1).min(1).default(900_000),
24
+ reconcileIntervalMs: Schema.number().step(1).min(0).default(15_000),
25
+ reconcileLimit: Schema.number().step(1).min(1).max(1_000).default(50),
26
+ });
27
+ const evolutionApprovalSource = 'dsh-enhanced-assistant-evolution';
28
+ export class AssistantEvolutionError extends Error {
29
+ code;
30
+ constructor(code, message) {
31
+ super(message);
32
+ this.code = code;
33
+ this.name = 'AssistantEvolutionError';
34
+ }
35
+ }
36
+ export function canonicalEvolutionScope(workspace, preset) {
37
+ const normalizedPreset = preset.normalize('NFC').trim();
38
+ if (!isAbsolute(workspace) || normalizedPreset === '') {
39
+ throw new AssistantEvolutionError('missing-identity', 'evolution scope requires absolute workspace and non-empty preset');
40
+ }
41
+ return JSON.stringify([resolve(workspace.normalize('NFC')), normalizedPreset]);
42
+ }
43
+ function result(proposal, replayed, rule = undefined) {
44
+ return Object.freeze({
45
+ proposalId: proposal.proposalId,
46
+ policyProposalId: proposal.policyProposalId ?? '',
47
+ status: proposal.status,
48
+ version: proposal.version,
49
+ replayed,
50
+ rule,
51
+ });
52
+ }
53
+ function ruleIdFromStableMutation(stable) {
54
+ const hex = createHash('sha256').update(`assistant-evolution-rule:${stable}`).digest('hex');
55
+ const variant = ((Number.parseInt(hex[16], 16) & 0x3) | 0x8).toString(16);
56
+ return `rule-${hex.slice(0, 8)}-${hex.slice(8, 12)}-5${hex.slice(13, 16)}-`
57
+ + `${variant}${hex.slice(17, 20)}-${hex.slice(20, 32)}`;
58
+ }
59
+ /**
60
+ * Approval-gated behavioural self-evolution.
61
+ *
62
+ * The loop is: observe outcomes, detect candidate rule changes, ask the owner, and
63
+ * only then let an approved rule shape future sessions as injected advisory
64
+ * context. Three boundaries are structural rather than cosmetic:
65
+ *
66
+ * - **No self-approval.** Every rule change is an `assistant-policy` proposal. The
67
+ * service cannot decide its own proposals, so the assistant can never grant
68
+ * itself a new behaviour.
69
+ * - **No privilege growth.** Guidance is injected as data and policy never reads
70
+ * the rule table, so a rule can change approach but never authority.
71
+ * - **No in-place revision.** Changing behaviour is retire-then-adopt, each
72
+ * separately approved, so an old approval can never silently cover new guidance.
73
+ */
74
+ export class AssistantEvolutionService extends Service {
75
+ static Config = configSchema;
76
+ static inject = ['assistantPolicy'];
77
+ store;
78
+ policy;
79
+ config;
80
+ injected = new WeakSet();
81
+ delivery;
82
+ active = true;
83
+ constructor(ctx, input) {
84
+ super(ctx, 'assistantEvolution');
85
+ try {
86
+ this.config = configSchema(input);
87
+ }
88
+ catch (error) {
89
+ throw new Error(`assistant-evolution: invalid configuration: ${String(error)}`, { cause: error });
90
+ }
91
+ const policy = ctx.get('assistantPolicy');
92
+ if (policy === undefined)
93
+ throw new Error('assistant-evolution: assistantPolicy service is required');
94
+ this.policy = policy;
95
+ this.store = new EvolutionStore({
96
+ path: this.config.databasePath,
97
+ maxGuidanceBytes: this.config.maxRuleGuidanceBytes,
98
+ });
99
+ ctx.inject(['assistantDelivery'], deliveryCtx => {
100
+ const delivery = deliveryCtx.get('assistantDelivery');
101
+ this.delivery = delivery;
102
+ return () => {
103
+ if (this.delivery === delivery)
104
+ this.delivery = undefined;
105
+ };
106
+ });
107
+ ctx.inject(['tools'], toolsCtx => registerEvolutionTools(toolsCtx, this));
108
+ ctx.on('agent/session-start', ({ agent }) => {
109
+ // Injection must never break session startup; a missing guidance block is
110
+ // strictly better than an unstartable assistant.
111
+ try {
112
+ this.injectGuidance(agent);
113
+ }
114
+ catch (error) {
115
+ if (!(error instanceof AssistantEvolutionError || error instanceof EvolutionStoreError))
116
+ throw error;
117
+ }
118
+ });
119
+ ctx.effect(() => () => {
120
+ this.active = false;
121
+ this.store.close();
122
+ }, 'assistant-evolution.database');
123
+ if (this.config.reconcileIntervalMs > 0) {
124
+ ctx.effect(() => {
125
+ const timer = setInterval(() => {
126
+ try {
127
+ this.reconcileProposals();
128
+ }
129
+ catch {
130
+ // Intentionally ignored: the authoritative state stays in the ledger.
131
+ }
132
+ }, this.config.reconcileIntervalMs);
133
+ timer.unref?.();
134
+ return () => clearInterval(timer);
135
+ }, 'assistant-evolution.reconcile');
136
+ }
137
+ }
138
+ /** Record one observed outcome as evidence. */
139
+ recordEpisode(agent, input) {
140
+ const scopeKey = this.authorize(agent, 'append', `situation:${input.situation}`);
141
+ return this.store.recordEpisode({
142
+ scopeKey,
143
+ situation: input.situation,
144
+ outcome: input.outcome,
145
+ detail: input.detail,
146
+ source: 'foreground',
147
+ trust: 'self-reported',
148
+ ...(input.ruleId === undefined ? {} : { claimedRuleId: input.ruleId }),
149
+ occurredAt: input.occurredAt,
150
+ idempotencyKey: input.idempotencyKey,
151
+ });
152
+ }
153
+ /**
154
+ * Record an outcome observed by trusted local infrastructure rather than a model
155
+ * turn, for example a finished background automation run.
156
+ *
157
+ * There is no Agent to authorize here, so this is deliberately narrow: it can
158
+ * only append evidence. It cannot adopt, retire, or read rules, so an automation
159
+ * still cannot change its own behaviour without an owner decision.
160
+ */
161
+ recordAutomationOutcome(input) {
162
+ this.assertActive();
163
+ const trusted = input.workspace !== undefined && input.agentPreset !== undefined
164
+ && isAbsolute(input.workspace) && input.agentPreset.trim() !== '';
165
+ const scopeKey = trusted
166
+ ? canonicalEvolutionScope(input.workspace, input.agentPreset)
167
+ : legacyEvolutionScope;
168
+ const automationId = input.automationId?.normalize('NFC').trim();
169
+ const expectedSituation = automationId === undefined || automationId === ''
170
+ ? undefined
171
+ : `automation:${automationId}`;
172
+ const receipt = trusted && expectedSituation !== undefined && input.sessionId !== undefined
173
+ ? this.store.captureGuidanceExposure(input.sessionId, scopeKey, expectedSituation)
174
+ : undefined;
175
+ const attributed = receipt !== undefined
176
+ && input.situation.normalize('NFC').trim() === expectedSituation
177
+ && input.ruleId === receipt.ruleId
178
+ && input.guidanceVersion === receipt.guidanceVersion
179
+ && input.occurredAt >= receipt.exposedAt;
180
+ return this.store.recordEpisode({
181
+ situation: input.situation,
182
+ outcome: input.outcome,
183
+ detail: input.detail,
184
+ idempotencyKey: input.idempotencyKey,
185
+ occurredAt: input.occurredAt,
186
+ scopeKey,
187
+ source: 'automation',
188
+ trust: trusted ? 'trusted' : 'legacy',
189
+ ...(attributed
190
+ ? { ruleId: receipt.ruleId, guidanceVersion: receipt.guidanceVersion }
191
+ : input.ruleId === undefined ? {} : { claimedRuleId: input.ruleId }),
192
+ });
193
+ }
194
+ /** Query an exact post-injection receipt for trusted automation attribution. */
195
+ async captureAutomationExposure(input) {
196
+ this.assertActive();
197
+ const automationId = input.automationId.normalize('NFC').trim();
198
+ if (!isAbsolute(input.workspace) || input.agentPreset.trim() === '' || automationId === ''
199
+ || input.sessionId === '' || input.sessionId.trim() !== input.sessionId)
200
+ return undefined;
201
+ const scopeKey = canonicalEvolutionScope(input.workspace, input.agentPreset);
202
+ const receipt = this.store.captureGuidanceExposure(input.sessionId, scopeKey, `automation:${automationId}`);
203
+ return receipt === undefined
204
+ ? undefined
205
+ : Object.freeze({ ruleId: receipt.ruleId, guidanceVersion: receipt.guidanceVersion });
206
+ }
207
+ /** Candidate rule changes implied by current evidence. Never auto-applied. */
208
+ candidates(agent) {
209
+ const scopeKey = this.authorize(agent, 'inspect', 'candidates');
210
+ return this.store.candidates({
211
+ scopeKey,
212
+ window: this.config.evaluationWindow,
213
+ minSample: this.config.minSample,
214
+ adoptFailureRate: this.config.adoptFailureRate,
215
+ retireFailureRate: this.config.retireFailureRate,
216
+ limit: this.config.maxCandidates,
217
+ evidenceSampleLimit: this.config.maxEvidenceSamples,
218
+ });
219
+ }
220
+ listRules(agent, status) {
221
+ const scopeKey = this.authorize(agent, 'inspect', 'rules');
222
+ return this.store.listRules(scopeKey, status);
223
+ }
224
+ /**
225
+ * Propose adopting or retiring a rule. Returns a pending proposal; the owner
226
+ * decides through the normal approval surface.
227
+ */
228
+ propose(agent, input) {
229
+ // The capability gate is deliberately static so deployments can authorize
230
+ // this service method with one exact rule. The owner-approval proposal below
231
+ // still freezes the exact situation/rule target in its immutable resource.
232
+ const scopeKey = this.authorize(agent, 'propose', 'proposals');
233
+ const ttlMs = input.ttlMs ?? this.config.defaultProposalTtlMs;
234
+ if (!Number.isSafeInteger(ttlMs) || ttlMs < 1) {
235
+ throw new AssistantEvolutionError('invalid-input', 'ttlMs must be a positive safe integer');
236
+ }
237
+ const requester = `agent:${agent.session.header.agentPreset}`;
238
+ let mutation;
239
+ let generation;
240
+ if (input.mutation.op === 'adopt') {
241
+ const situation = input.mutation.input.situation.normalize('NFC').trim();
242
+ const candidate = this.store.candidates({
243
+ scopeKey,
244
+ window: this.config.evaluationWindow,
245
+ minSample: this.config.minSample,
246
+ adoptFailureRate: this.config.adoptFailureRate,
247
+ retireFailureRate: this.config.retireFailureRate,
248
+ limit: this.config.maxCandidates,
249
+ evidenceSampleLimit: this.config.maxEvidenceSamples,
250
+ }).find(entry => entry.kind === 'adopt' && entry.situation === situation);
251
+ if (candidate === undefined) {
252
+ throw new AssistantEvolutionError('invalid-input', 'no adopt candidate exists for that scoped situation');
253
+ }
254
+ generation = this.store.nextGeneration(scopeKey, situation);
255
+ mutation = {
256
+ op: 'adopt',
257
+ input: { scopeKey, situation, guidance: input.mutation.input.guidance },
258
+ baseline: candidate.stats,
259
+ evidence: {
260
+ sampleEpisodeIds: candidate.evidence.map(entry => entry.episodeId),
261
+ digest: candidate.evidenceDigest,
262
+ total: candidate.evidenceTotal,
263
+ },
264
+ };
265
+ }
266
+ else {
267
+ const existing = this.store.getRule(input.mutation.ruleId);
268
+ if (existing === undefined || existing.scopeKey !== scopeKey || existing.status !== 'active') {
269
+ throw new AssistantEvolutionError('not-found', 'evolution rule was not found in the Agent scope');
270
+ }
271
+ if (input.mutation.expectedVersion !== existing.version) {
272
+ throw new AssistantEvolutionError('invalid-input', 'retire expectedVersion does not match the active rule');
273
+ }
274
+ const candidate = this.store.retirementCandidate({
275
+ scopeKey,
276
+ ruleId: existing.id,
277
+ window: this.config.evaluationWindow,
278
+ minSample: this.config.minSample,
279
+ retireFailureRate: this.config.retireFailureRate,
280
+ evidenceSampleLimit: this.config.maxEvidenceSamples,
281
+ });
282
+ if (candidate === undefined || candidate.ruleId !== existing.id || candidate.baseline === undefined) {
283
+ throw new AssistantEvolutionError('invalid-input', 'no retire candidate with sufficient exact attributed evidence exists for that scoped rule');
284
+ }
285
+ mutation = {
286
+ op: 'retire',
287
+ ruleId: existing.id,
288
+ expectedVersion: existing.version,
289
+ reason: input.mutation.reason,
290
+ evaluation: candidate.stats,
291
+ baseline: candidate.baseline,
292
+ evidence: {
293
+ sampleEpisodeIds: candidate.evidence.map(entry => entry.episodeId),
294
+ digest: candidate.evidenceDigest,
295
+ total: candidate.evidenceTotal,
296
+ },
297
+ };
298
+ }
299
+ const stable = evolutionDigest({ mutation, generation });
300
+ if (mutation.op === 'adopt')
301
+ mutation = { ...mutation, ruleId: ruleIdFromStableMutation(stable) };
302
+ const idempotencyKey = `evolution:${stable}`;
303
+ const route = this.approvalRoute(agent, input.principal);
304
+ const review = evolutionMutationReview(mutation);
305
+ const creationIntent = {
306
+ idempotencyKey,
307
+ requester,
308
+ principal: route.principal,
309
+ action: review.action,
310
+ resource: review.resource,
311
+ diff: review.diff,
312
+ summary: review.summary,
313
+ ttlMs,
314
+ ...(route.dispatch === undefined ? {} : { dispatch: route.dispatch }),
315
+ };
316
+ const local = this.store.createProposal({
317
+ idempotencyKey,
318
+ requester,
319
+ principal: route.principal,
320
+ mutation,
321
+ expiresAt: Date.now() + ttlMs,
322
+ creationIntent,
323
+ });
324
+ if (local.policyProposalId !== undefined) {
325
+ if (local.status !== 'pending') {
326
+ return result(local, true, local.resultRuleId === undefined ? undefined : this.store.getRule(local.resultRuleId));
327
+ }
328
+ return this.settleAttached(local, true)
329
+ ?? result(local, true);
330
+ }
331
+ return this.submitLocalProposal(local, false);
332
+ }
333
+ /**
334
+ * Commit proposals whose policy decision settled after the originating turn.
335
+ * Without this, an approval granted on a chat card would leave the rule change
336
+ * pending forever. Safe to call repeatedly.
337
+ */
338
+ reconcileProposals(limit) {
339
+ this.assertActive();
340
+ const settled = [];
341
+ for (const pending of this.store.listPendingProposals(limit ?? this.config.reconcileLimit)) {
342
+ try {
343
+ const result = pending.policyProposalId === undefined
344
+ ? this.submitLocalProposal(pending, false)
345
+ : this.settleAttached(pending, false);
346
+ if (result === undefined || result.status === 'pending') {
347
+ this.store.deferPendingProposal(pending.proposalId);
348
+ continue;
349
+ }
350
+ settled.push(result);
351
+ }
352
+ catch {
353
+ // One unavailable Policy route must not starve later rows in this bounded
354
+ // lane. The durable intent remains pending and rotates behind its peers.
355
+ this.store.deferPendingProposal(pending.proposalId);
356
+ }
357
+ }
358
+ return settled;
359
+ }
360
+ submitLocalProposal(local, replayed) {
361
+ const intent = local.creationIntent;
362
+ if (intent === undefined) {
363
+ const conflict = this.store.settleProposal({
364
+ proposalId: local.proposalId,
365
+ securityConflict: true,
366
+ });
367
+ return result(conflict.proposal, replayed || conflict.replayed, conflict.rule);
368
+ }
369
+ const recoveryInput = {
370
+ idempotencyKey: intent.idempotencyKey,
371
+ requester: intent.requester,
372
+ principal: intent.principal,
373
+ action: intent.action,
374
+ resource: intent.resource,
375
+ diff: intent.diff,
376
+ summary: intent.summary,
377
+ notAfter: local.expiresAt,
378
+ ...(intent.dispatch === undefined ? {} : { dispatch: intent.dispatch }),
379
+ };
380
+ const recovered = this.policy.recoverOrCreateProposal(recoveryInput);
381
+ if (recovered.kind === 'abandoned') {
382
+ const conflict = this.store.settleProposal({
383
+ proposalId: local.proposalId,
384
+ securityConflict: true,
385
+ });
386
+ return result(conflict.proposal, replayed || recovered.replayed || conflict.replayed, conflict.rule);
387
+ }
388
+ const decision = recovered.proposal;
389
+ const snapshot = this.policy.getProposal(decision.proposalId);
390
+ if (snapshot === undefined) {
391
+ const conflict = this.store.settleProposal({
392
+ proposalId: local.proposalId,
393
+ securityConflict: true,
394
+ });
395
+ return result(conflict.proposal, replayed || conflict.replayed, conflict.rule);
396
+ }
397
+ return this.attachPolicySnapshot(local, intent, snapshot, replayed || decision.replayed);
398
+ }
399
+ attachPolicySnapshot(local, intent, snapshot, replayed) {
400
+ const expectedLifecycleVersion = snapshot.status === 'pending' ? 1 : 2;
401
+ const expectedDiffHash = createHash('sha256').update(intent.diff).digest('hex');
402
+ if (snapshot.requester !== intent.requester || snapshot.principal !== intent.principal
403
+ || snapshot.action !== intent.action || snapshot.resource.kind !== intent.resource.kind
404
+ || snapshot.resource.id !== intent.resource.id || snapshot.summary !== intent.summary
405
+ || snapshot.diffHash !== expectedDiffHash || snapshot.version !== expectedLifecycleVersion
406
+ || !Number.isSafeInteger(snapshot.expiresAt) || snapshot.expiresAt < 0) {
407
+ const conflict = this.store.settleProposal({
408
+ proposalId: local.proposalId,
409
+ securityConflict: true,
410
+ });
411
+ return result(conflict.proposal, replayed || conflict.replayed, conflict.rule);
412
+ }
413
+ const expectation = {
414
+ proposalId: snapshot.proposalId,
415
+ requester: intent.requester,
416
+ principal: intent.principal,
417
+ action: intent.action,
418
+ resource: intent.resource,
419
+ summary: intent.summary,
420
+ diff: intent.diff,
421
+ expiresAt: snapshot.expiresAt,
422
+ // Policy creation is always v1, including a terminal v2 replay after a
423
+ // cross-database crash.
424
+ expectedVersion: 1,
425
+ };
426
+ const attached = this.store.attachPolicy(local.proposalId, snapshot.proposalId, expectation);
427
+ if (snapshot.status === 'pending')
428
+ return result(attached, replayed);
429
+ return this.settleAttached(attached, replayed) ?? result(attached, replayed);
430
+ }
431
+ settleAttached(local, replayed) {
432
+ if (local.policyProposalId === undefined || local.settlementExpectation === undefined) {
433
+ const conflict = this.store.settleProposal({
434
+ proposalId: local.proposalId,
435
+ securityConflict: true,
436
+ });
437
+ return result(conflict.proposal, replayed || conflict.replayed, conflict.rule);
438
+ }
439
+ const snapshot = this.policy.getProposal(local.policyProposalId);
440
+ if (snapshot?.status === 'pending')
441
+ return undefined;
442
+ try {
443
+ const terminal = validateApprovalSettlement(snapshot, local.settlementExpectation);
444
+ const applied = this.store.settleProposal({
445
+ proposalId: local.proposalId,
446
+ policyStatus: terminal.status,
447
+ policyVersion: terminal.version,
448
+ reviewExpectation: local.settlementExpectation,
449
+ });
450
+ return result(applied.proposal, replayed || applied.replayed, applied.rule);
451
+ }
452
+ catch (error) {
453
+ if (!(error instanceof ApprovalSettlementConflict))
454
+ throw error;
455
+ const conflict = this.store.settleProposal({
456
+ proposalId: local.proposalId,
457
+ securityConflict: true,
458
+ });
459
+ return result(conflict.proposal, replayed || conflict.replayed, conflict.rule);
460
+ }
461
+ }
462
+ approvalRoute(agent, explicitPrincipal) {
463
+ if (this.delivery !== undefined) {
464
+ const dispatch = this.delivery.prepareAgentApproval(agent, { sourceId: evolutionApprovalSource });
465
+ const workspace = agent?.session.header.cwd;
466
+ if (dispatch.sourceId !== evolutionApprovalSource || dispatch.workspace !== workspace
467
+ || dispatch.principal.trim() === '') {
468
+ throw new AssistantEvolutionError('invalid-input', 'authenticated approval route does not match the Agent');
469
+ }
470
+ if (explicitPrincipal !== undefined && explicitPrincipal !== dispatch.principal) {
471
+ throw new AssistantEvolutionError('invalid-input', 'explicit principal does not match the approval route owner');
472
+ }
473
+ return { principal: dispatch.principal, dispatch };
474
+ }
475
+ const principal = explicitPrincipal?.normalize('NFC').trim();
476
+ if (principal === undefined || principal === '') {
477
+ throw new AssistantEvolutionError('missing-identity', 'evolution proposal requires an authenticated approval route or trusted headless principal');
478
+ }
479
+ return { principal };
480
+ }
481
+ /** Guidance block for the current active rules, as injected into a session. */
482
+ guidance(agent) {
483
+ this.assertActive();
484
+ if (agent === undefined)
485
+ return '';
486
+ const scopeKey = this.authorize(agent, 'snapshot', 'guidance');
487
+ return this.guidanceForScope(scopeKey);
488
+ }
489
+ guidanceForScope(scopeKey) {
490
+ return buildGuidance(this.store.listRules(scopeKey, 'active'), {
491
+ maxBytes: this.config.maxGuidanceBytes,
492
+ maxRules: this.config.maxInjectedRules,
493
+ });
494
+ }
495
+ injectGuidance(agent) {
496
+ if (!this.active || this.injected.has(agent))
497
+ return;
498
+ const workspace = agent.session.header.cwd;
499
+ const preset = agent.session.header.agentPreset;
500
+ if (workspace === undefined || !isAbsolute(workspace) || preset === undefined || preset.trim() === '')
501
+ return;
502
+ const decision = this.policy.authorizeAgent(agent, 'snapshot', { kind: 'evolution', id: 'guidance' }, {
503
+ idempotencyKey: `evolution-guidance:${agent.id}`,
504
+ });
505
+ if (decision.effect !== 'allow')
506
+ return;
507
+ const scopeKey = canonicalEvolutionScope(workspace, preset);
508
+ const sessionId = String(agent.session.id);
509
+ const unseen = this.store.listRules(scopeKey, 'active').filter(rule => !this.store.hasGuidanceExposure(sessionId, scopeKey, rule.id, rule.generation));
510
+ const snapshot = buildGuidanceSnapshot(unseen, {
511
+ maxBytes: this.config.maxGuidanceBytes,
512
+ maxRules: this.config.maxInjectedRules,
513
+ });
514
+ if (snapshot.text === '') {
515
+ this.injected.add(agent);
516
+ return;
517
+ }
518
+ agent.inject(createUserMessage({
519
+ content: [{ type: 'text', text: snapshot.text }],
520
+ source: { kind: 'plugin', plugin: 'assistant-evolution' },
521
+ }));
522
+ for (const rule of snapshot.rules) {
523
+ this.store.recordGuidanceExposure({
524
+ sessionId,
525
+ scopeKey,
526
+ situation: rule.situation,
527
+ ruleId: rule.id,
528
+ guidanceVersion: rule.generation,
529
+ });
530
+ }
531
+ this.injected.add(agent);
532
+ }
533
+ authorize(agent, action, resourceId) {
534
+ this.assertActive();
535
+ if (agent === undefined) {
536
+ throw new AssistantEvolutionError('missing-identity', 'evolution operation requires an Agent');
537
+ }
538
+ const workspace = agent.session.header.cwd;
539
+ const preset = agent.session.header.agentPreset;
540
+ if (workspace === undefined || !isAbsolute(workspace) || preset === undefined || preset.trim() === '') {
541
+ throw new AssistantEvolutionError('missing-identity', 'evolution operation requires absolute workspace and preset');
542
+ }
543
+ const decision = this.policy.authorizeAgent(agent, action, { kind: 'evolution', id: resourceId });
544
+ if (decision.effect !== 'allow') {
545
+ throw new AssistantEvolutionError('forbidden', `policy denied evolution ${action}`);
546
+ }
547
+ return canonicalEvolutionScope(workspace, preset);
548
+ }
549
+ assertActive() {
550
+ if (!this.active)
551
+ throw new AssistantEvolutionError('disposed', 'assistant-evolution service is disposed');
552
+ }
553
+ }
554
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ export declare const evolutionSchemaVersion = 3;
3
+ export declare class EvolutionDatabaseError extends Error {
4
+ readonly code: 'invalid-path' | 'schema-too-new';
5
+ constructor(code: 'invalid-path' | 'schema-too-new', message: string);
6
+ }
7
+ export declare function openEvolutionDatabase(path: string): DatabaseSync;
8
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,sBAAsB,IAAI,CAAA;AAEvC,qBAAa,sBAAuB,SAAQ,KAAK;IAE7C,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB;gBAAvC,IAAI,EAAE,cAAc,GAAG,gBAAgB,EAChD,OAAO,EAAE,MAAM;CAKlB;AAiOD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAoBhE"}