@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/LICENSE +21 -0
- package/README.md +120 -0
- package/cordis.patch.yml +20 -0
- package/lib/guidance.d.ts +29 -0
- package/lib/guidance.d.ts.map +1 -0
- package/lib/guidance.js +59 -0
- package/lib/guidance.js.map +1 -0
- package/lib/index.d.ts +14 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/lib/review.d.ts +13 -0
- package/lib/review.d.ts.map +1 -0
- package/lib/review.js +47 -0
- package/lib/review.js.map +1 -0
- package/lib/service.d.ts +148 -0
- package/lib/service.d.ts.map +1 -0
- package/lib/service.js +554 -0
- package/lib/service.js.map +1 -0
- package/lib/sqlite.d.ts +8 -0
- package/lib/sqlite.d.ts.map +1 -0
- package/lib/sqlite.js +253 -0
- package/lib/sqlite.js.map +1 -0
- package/lib/store.d.ts +116 -0
- package/lib/store.d.ts.map +1 -0
- package/lib/store.js +886 -0
- package/lib/store.js.map +1 -0
- package/lib/tools.d.ts +4 -0
- package/lib/tools.d.ts.map +1 -0
- package/lib/tools.js +206 -0
- package/lib/tools.js.map +1 -0
- package/lib/types.d.ts +215 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +2 -0
- package/lib/version.js.map +1 -0
- package/package.json +81 -0
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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"}
|
package/lib/sqlite.d.ts
ADDED
|
@@ -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"}
|