@dsh-enhanced/assistant-verifier 0.1.47 → 0.1.49

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.
Files changed (56) hide show
  1. package/README.md +89 -0
  2. package/lib/config.d.ts +8 -0
  3. package/lib/config.d.ts.map +1 -1
  4. package/lib/config.js +4 -0
  5. package/lib/config.js.map +1 -1
  6. package/lib/creation-review-native.d.ts +30 -0
  7. package/lib/creation-review-native.d.ts.map +1 -0
  8. package/lib/creation-review-native.js +130 -0
  9. package/lib/creation-review-native.js.map +1 -0
  10. package/lib/creation-review-store.d.ts +29 -0
  11. package/lib/creation-review-store.d.ts.map +1 -0
  12. package/lib/creation-review-store.js +206 -0
  13. package/lib/creation-review-store.js.map +1 -0
  14. package/lib/creation-review.d.ts +159 -0
  15. package/lib/creation-review.d.ts.map +1 -0
  16. package/lib/creation-review.js +511 -0
  17. package/lib/creation-review.js.map +1 -0
  18. package/lib/index.d.ts +9 -0
  19. package/lib/index.d.ts.map +1 -1
  20. package/lib/index.js +4 -0
  21. package/lib/index.js.map +1 -1
  22. package/lib/memory-review-native.d.ts +38 -0
  23. package/lib/memory-review-native.d.ts.map +1 -0
  24. package/lib/memory-review-native.js +149 -0
  25. package/lib/memory-review-native.js.map +1 -0
  26. package/lib/memory-review.d.ts +48 -0
  27. package/lib/memory-review.d.ts.map +1 -0
  28. package/lib/memory-review.js +260 -0
  29. package/lib/memory-review.js.map +1 -0
  30. package/lib/plugin-behavior-runner.d.ts +46 -0
  31. package/lib/plugin-behavior-runner.d.ts.map +1 -0
  32. package/lib/plugin-behavior-runner.js +437 -0
  33. package/lib/plugin-behavior-runner.js.map +1 -0
  34. package/lib/revision-regression-review.d.ts +38 -0
  35. package/lib/revision-regression-review.d.ts.map +1 -0
  36. package/lib/revision-regression-review.js +315 -0
  37. package/lib/revision-regression-review.js.map +1 -0
  38. package/lib/revision-review.d.ts +99 -0
  39. package/lib/revision-review.d.ts.map +1 -0
  40. package/lib/revision-review.js +275 -0
  41. package/lib/revision-review.js.map +1 -0
  42. package/lib/service.d.ts +30 -0
  43. package/lib/service.d.ts.map +1 -1
  44. package/lib/service.js +139 -1
  45. package/lib/service.js.map +1 -1
  46. package/lib/source-review-native.d.ts +9 -0
  47. package/lib/source-review-native.d.ts.map +1 -1
  48. package/lib/source-review-native.js +6 -5
  49. package/lib/source-review-native.js.map +1 -1
  50. package/lib/source-review-store.d.ts +4 -0
  51. package/lib/source-review-store.d.ts.map +1 -1
  52. package/lib/source-review-store.js +65 -12
  53. package/lib/source-review-store.js.map +1 -1
  54. package/lib/version.d.ts +1 -1
  55. package/lib/version.js +1 -1
  56. package/package.json +34 -25
@@ -0,0 +1,275 @@
1
+ import { createHash, sign } from 'node:crypto';
2
+ import { canonicalGrowthJson, growthObjectDigest, pluginRevisionVerificationSigningPayload, sourceGrowthEvidenceDigest, sourceGrowthRunDigest, validatePluginRevisionParentBinding, validateRevisionAcceptanceAuthorityRef, validateSourceGrowthRunBinding, verifyPluginRevisionVerificationCertificate } from '@dsh-enhanced/assistant-growth-contract';
3
+ import { CreationReviewStore } from './creation-review-store.js';
4
+ import { CASE_RULES, COMPARISON_RULES, REVIEW_RULES, RULES_VERSION, SCHEMA_RULES, compareCase, compileCreationReviewConfig, parseCases, parseReview, projectCreationSchemas } from './creation-review.js';
5
+ import { runNativeCreationTurn } from './creation-review-native.js';
6
+ const SHA = /^[a-f0-9]{64}$/u;
7
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$/u;
8
+ const REVISION_RULES = [
9
+ 'Review this as a revision of the exact adopted parent identified by the Host binding.',
10
+ 'Check the new authenticated task, feedback, exact candidate patch, scope and lifecycle ownership.',
11
+ 'Parent identity is a Host-checked digest binding; do not infer prior behavior from its digest.',
12
+ 'This review does not cover every prior behavior. Reject unsupported claims of complete regression safety.',
13
+ ];
14
+ const REVISION_PURPOSE = 'assistant-growth/revision-review/v1';
15
+ export function validateRevisionReviewConfig(input) {
16
+ return compileCreationReviewConfig(input).config;
17
+ }
18
+ export function compileRevisionReviewConfig(input) {
19
+ const checked = compileCreationReviewConfig(input);
20
+ const authorityDigest = growthObjectDigest({ purpose: REVISION_PURPOSE,
21
+ baseRules: RULES_VERSION, caseRules: CASE_RULES, comparisonRules: COMPARISON_RULES,
22
+ schemaRules: SCHEMA_RULES, reviewRules: REVIEW_RULES, revisionRules: REVISION_RULES,
23
+ configurationDigest: checked.authority.authorityDigest });
24
+ const authority = {
25
+ protocol: 'assistant-growth/revision-acceptance-authority/v1', authorityId: checked.config.authorityId,
26
+ keyId: checked.config.keyId, authorityDigest, namePrefix: checked.config.namePrefix, expiresAt: checked.config.expiresAt,
27
+ };
28
+ validateRevisionAcceptanceAuthorityRef(authority);
29
+ return { config: checked.config, authority: Object.freeze(authority), publicKey: checked.publicKey, privateKey: checked.privateKey };
30
+ }
31
+ function requestValid(value) {
32
+ if (!value || typeof value !== 'object' || Array.isArray(value) || Object.getPrototypeOf(value) !== Object.prototype
33
+ || Reflect.ownKeys(value).some(key => typeof key !== 'string')
34
+ || Object.getOwnPropertyNames(value).sort().join(',') !== 'planId,protocol'
35
+ || Object.values(Object.getOwnPropertyDescriptors(value)).some(field => !field.enumerable || !('value' in field)))
36
+ return false;
37
+ const request = value;
38
+ return request.protocol === 'assistant-growth/revision-verification-request/v1'
39
+ && typeof request.planId === 'string' && ID.test(request.planId) && request.planId.normalize('NFC') === request.planId;
40
+ }
41
+ /** Independent Host review of a new task's candidate revision. It does not grant execution or replacement. */
42
+ export class RevisionReviewRuntime {
43
+ ctx;
44
+ #compiled;
45
+ #store;
46
+ #runner;
47
+ #runnerLoading;
48
+ #abort = new AbortController();
49
+ #flights = new Map();
50
+ #closing;
51
+ constructor(ctx, input, databasePath) {
52
+ this.ctx = ctx;
53
+ this.#compiled = compileRevisionReviewConfig(input);
54
+ this.#store = new CreationReviewStore(databasePath + '.revision-reviews');
55
+ }
56
+ #loadRunner() {
57
+ if (this.#runner)
58
+ return Promise.resolve(this.#runner);
59
+ return this.#runnerLoading ??= import('./plugin-behavior-runner.js').then(({ PluginBehaviorRunner }) => {
60
+ this.#abort.signal.throwIfAborted();
61
+ const { config, authority } = this.#compiled;
62
+ if (Date.now() >= Math.min(config.expiresAt, config.runner.expiresAt))
63
+ throw new Error('revision observer authority expired');
64
+ const runner = new PluginBehaviorRunner({ ...config.runner, authorityDigest: authority.authorityDigest });
65
+ this.#runner = runner;
66
+ return runner;
67
+ });
68
+ }
69
+ inspect(input) {
70
+ const { config, authority, publicKey } = this.#compiled;
71
+ if (this.#abort.signal.aborted || Date.now() >= config.expiresAt
72
+ || canonicalGrowthJson(input.owner) !== canonicalGrowthJson(config.owner))
73
+ return undefined;
74
+ const remainingVerifications = this.#store.remaining(config.authorityId, authority.authorityDigest, config.maxVerifications);
75
+ return Object.freeze({ authority, publicKey, remainingVerifications, available: remainingVerifications > 0 });
76
+ }
77
+ run(request, external) {
78
+ if (!requestValid(request))
79
+ return Promise.resolve({ status: 'rejected', reason: 'request-invalid' });
80
+ if (this.#abort.signal.aborted)
81
+ return Promise.resolve({ status: 'unknown', reason: 'interrupted' });
82
+ const existing = this.#flights.get(request.planId);
83
+ if (existing)
84
+ return existing;
85
+ const flight = this.#run(request, external);
86
+ this.#flights.set(request.planId, flight);
87
+ void flight.finally(() => this.#flights.delete(request.planId)).catch(() => { });
88
+ return flight;
89
+ }
90
+ async #run(request, external) {
91
+ const { config, authority, privateKey, publicKey } = this.#compiled;
92
+ const signal = AbortSignal.any([this.#abort.signal, AbortSignal.timeout(config.maxDurationMs), ...(external ? [external] : [])]);
93
+ let admitted;
94
+ try {
95
+ signal.throwIfAborted();
96
+ const port = this.ctx.get('pluginControlPlane');
97
+ if (!port || typeof port.inspectPreparedRevision !== 'function' || typeof port.withPreparedRevisionFence !== 'function'
98
+ || typeof port.inspectPreparedRevisionReviewContext !== 'function')
99
+ throw new Error('revision source port unavailable');
100
+ const snapshot = port.inspectPreparedRevision(request.planId);
101
+ if (snapshot.protocol !== 'dsh-prepared-revision/v1')
102
+ throw new Error('revision source protocol changed');
103
+ const { plan, source, reference, artifact } = snapshot;
104
+ const revision = plan.sourceRevision;
105
+ const intentRevision = snapshot.job.intent.revision;
106
+ const run = revision?.growthRun;
107
+ validateSourceGrowthRunBinding(run);
108
+ const frozen = run;
109
+ validateRevisionAcceptanceAuthorityRef(frozen.revisionAcceptance);
110
+ const parent = revision?.parent;
111
+ validatePluginRevisionParentBinding(parent);
112
+ validatePluginRevisionParentBinding(intentRevision?.parent);
113
+ validateSourceGrowthRunBinding(intentRevision?.growthRun);
114
+ if (canonicalGrowthJson(frozen.revisionAcceptance) !== canonicalGrowthJson(authority)
115
+ || canonicalGrowthJson(frozen) !== canonicalGrowthJson(intentRevision.growthRun)
116
+ || canonicalGrowthJson(parent) !== canonicalGrowthJson(intentRevision.parent)
117
+ || plan.mode !== 'prepared-revise' || plan.status !== 'pending-approval'
118
+ || !plan.name.startsWith(config.namePrefix) || revision?.grant.namePrefix !== config.namePrefix
119
+ || Date.now() >= Math.min(config.expiresAt, plan.expiresAt, revision.grant.expiresAt, frozen.expiresAt)
120
+ || source.source.truncated || !source.source.quiescent || source.feedback?.truncated
121
+ || source.judgement === 'unresolved' || !source.source.objective.trim()
122
+ || Buffer.byteLength(source.source.objective) > 16_384 || !Buffer.isBuffer(artifact)
123
+ || artifact.length !== plan.preparedEvidence?.pack.sizeBytes || artifact.length > 512 * 1024
124
+ || createHash('sha256').update(artifact).digest('hex') !== plan.preparedEvidence?.pack.sha256
125
+ || !plan.sourceCheck || !SHA.test(plan.sourceCheck.treeDigest) || !SHA.test(plan.sourceCheck.patchDigest)
126
+ || sourceGrowthEvidenceDigest(reference.owner) !== frozen.ownerDigest) {
127
+ throw new Error('prepared revision authority or task evidence invalid');
128
+ }
129
+ for (const key of ['authorityId', 'authorityHash', 'principalId', 'principalRecordId', 'principalVersion', 'workspace', 'agentPreset']) {
130
+ if (reference.owner[key] !== config.owner[key]
131
+ || source.owner[key] !== config.owner[key])
132
+ throw new Error('revision owner changed');
133
+ }
134
+ const sourceBinding = { referenceDigest: sourceGrowthEvidenceDigest(reference), ownerDigest: sourceGrowthEvidenceDigest(reference.owner),
135
+ growthRunDigest: sourceGrowthRunDigest(frozen) };
136
+ const parentDigest = sourceGrowthEvidenceDigest(parent);
137
+ const fenceInput = { planId: plan.id, planDigest: plan.digest, artifactSha256: plan.preparedEvidence.pack.sha256,
138
+ growthRunDigest: sourceBinding.growthRunDigest, referenceDigest: sourceBinding.referenceDigest, parentDigest };
139
+ const fence = (callback) => port.withPreparedRevisionFence(fenceInput, callback);
140
+ fence(() => { });
141
+ const model = frozen.model;
142
+ const binding = growthObjectDigest({ purpose: REVISION_PURPOSE, request, authority, parent, parentDigest,
143
+ plan: { id: plan.id, digest: plan.digest, tree: plan.sourceCheck.treeDigest, patch: plan.sourceCheck.patchDigest,
144
+ artifact: plan.preparedEvidence.pack }, source: sourceBinding, model,
145
+ budget: { maxOutputTokens: config.maxOutputTokens, maxDurationMs: config.maxDurationMs, maxCases: config.maxCases } });
146
+ const claim = fence(() => this.#store.claim(plan.id, binding, config.authorityId, authority.authorityDigest, config.maxVerifications));
147
+ if (claim.state === 'certificate')
148
+ return claim.certificate && claim.certificate.expiresAt > Date.now()
149
+ && canonicalGrowthJson(claim.certificate.parent) === canonicalGrowthJson(parent)
150
+ && verifyPluginRevisionVerificationCertificate(claim.certificate, authority, publicKey)
151
+ ? { status: 'verified', certificate: claim.certificate } : { status: 'unknown', reason: 'stale-source' };
152
+ if (claim.state === 'rejected')
153
+ return { status: 'rejected', reason: claim.reason };
154
+ if (claim.state !== 'new')
155
+ return { status: 'unknown', reason: claim.reason ?? 'previous-unknown' };
156
+ admitted = { planId: plan.id, binding };
157
+ const observer = await this.#loadRunner();
158
+ signal.throwIfAborted();
159
+ fence(() => { });
160
+ const discovery = await observer.run({ key: growthObjectDigest([binding, 'discover']), artifact, operation: { kind: 'discover' }, signal });
161
+ if (discovery.status !== 'observed' || !discovery.quiescent || !discovery.schemaDigest || !discovery.schemas
162
+ || !discovery.environment || !discovery.jobId || discovery.artifactSha256 !== plan.preparedEvidence.pack.sha256) {
163
+ this.#store.unknown(plan.id, binding, 'schema-observation-unknown');
164
+ return { status: 'unknown', reason: 'schema-observation-unknown' };
165
+ }
166
+ const projectedSchemas = projectCreationSchemas(discovery.schemas);
167
+ fence(() => this.#store.discovered(plan.id, binding, { jobId: discovery.jobId, schemaDigest: discovery.schemaDigest,
168
+ schemas: projectedSchemas, environment: discovery.environment }));
169
+ const task = { objective: source.source.objective, feedback: source.feedback?.text ?? null,
170
+ judgement: source.judgement, name: plan.name };
171
+ const contract = await runNativeCreationTurn(this.ctx, { sessionId: `revision-contract-${binding.slice(0, 40)}`,
172
+ owner: config.owner, model, maxInputBytes: config.maxInputBytes, maxOutputTokens: config.maxOutputTokens - 1,
173
+ prompt: [...CASE_RULES, `Case limit: ${config.maxCases}.`, `Fixed owner acceptance policy: ${config.policy}`].join('\n'),
174
+ data: { task, schemas: projectedSchemas }, signal, assertCurrent: () => fence(() => { }) });
175
+ const cases = parseCases(contract.value, config.maxCases, projectedSchemas);
176
+ if (cases.status === 'insufficient') {
177
+ fence(() => this.#store.unknown(plan.id, binding, 'contract-insufficient'));
178
+ return { status: 'unknown', reason: 'contract-insufficient' };
179
+ }
180
+ fence(() => this.#store.contract(plan.id, binding, { cases: cases.cases, outputDigest: contract.outputDigest,
181
+ sessionId: contract.sessionId }));
182
+ const observations = [];
183
+ const jobs = new Set([discovery.jobId]);
184
+ for (const item of cases.cases) {
185
+ signal.throwIfAborted();
186
+ fence(() => { });
187
+ const operation = { kind: 'invoke', schemaDigest: discovery.schemaDigest,
188
+ calls: [{ id: item.id, toolName: item.toolName, arguments: item.arguments }] };
189
+ const operationDigest = growthObjectDigest(operation);
190
+ fence(() => this.#store.claimCase(plan.id, binding, item.id, operationDigest));
191
+ const observed = await observer.run({ key: growthObjectDigest([binding, 'invoke', operationDigest]), artifact, operation, signal });
192
+ if (observed.status !== 'observed' || !observed.quiescent || !observed.jobId
193
+ || observed.schemaDigest !== discovery.schemaDigest || observed.artifactSha256 !== plan.preparedEvidence.pack.sha256
194
+ || canonicalGrowthJson(observed.environment) !== canonicalGrowthJson(discovery.environment)
195
+ || observed.calls?.length !== 1 || observed.calls[0]?.id !== item.id || jobs.has(observed.jobId)) {
196
+ this.#store.unknown(plan.id, binding, 'case-observation-unknown');
197
+ return { status: 'unknown', reason: 'case-observation-unknown' };
198
+ }
199
+ const raw = observed.calls[0].result;
200
+ jobs.add(observed.jobId);
201
+ const observationDigest = growthObjectDigest(raw);
202
+ fence(() => this.#store.observation(plan.id, binding, item.id, { jobId: observed.jobId, operationDigest, observationDigest }));
203
+ observations.push({ caseId: item.id, jobId: observed.jobId, operationDigest, observationDigest });
204
+ if (!compareCase(item.expected, raw)) {
205
+ fence(() => this.#store.reject(plan.id, binding, 'case-mismatch'));
206
+ return { status: 'rejected', reason: 'case-mismatch' };
207
+ }
208
+ }
209
+ const context = await port.inspectPreparedRevisionReviewContext(plan.id, signal);
210
+ fence(() => { });
211
+ if (Buffer.byteLength(context.patch) > config.maxInputBytes / 2 || context.changedPaths.length < 1
212
+ || context.changedPaths.length > 32)
213
+ throw new Error('revision source review context exceeds bound');
214
+ fence(() => this.#store.claimReview(plan.id, binding));
215
+ const review = await runNativeCreationTurn(this.ctx, { sessionId: `revision-source-${binding.slice(0, 40)}`,
216
+ owner: config.owner, model, maxInputBytes: config.maxInputBytes,
217
+ maxOutputTokens: config.maxOutputTokens - contract.outputTokens,
218
+ prompt: [...REVIEW_RULES, ...REVISION_RULES, `Fixed owner acceptance policy: ${config.policy}`].join('\n'),
219
+ data: { task, parent, cases: cases.cases, changedPaths: context.changedPaths, patch: context.patch },
220
+ signal, assertCurrent: () => fence(() => { }) });
221
+ const verdict = parseReview(review.value);
222
+ if (contract.outputTokens + review.outputTokens > config.maxOutputTokens)
223
+ throw new Error('revision model budget exceeded');
224
+ if (verdict.decision !== 'approved') {
225
+ fence(() => this.#store.reject(plan.id, binding, 'source-review-rejected'));
226
+ return { status: 'rejected', reason: 'source-review-rejected' };
227
+ }
228
+ const verifiedAt = Date.now();
229
+ const expiresAt = Math.min(verifiedAt + config.receiptTtlMs, config.expiresAt, config.runner.expiresAt, plan.expiresAt, revision.grant.expiresAt, frozen.expiresAt);
230
+ if (expiresAt <= verifiedAt)
231
+ throw new Error('revision verification windows closed');
232
+ const body = {
233
+ protocol: 'assistant-growth/revision-verification/v1', verificationId: `revision-${binding.slice(0, 40)}`,
234
+ authority, plan: { id: plan.id, digest: plan.digest, name: plan.name,
235
+ sourceTreeDigest: plan.sourceCheck.treeDigest, sourcePatchDigest: plan.sourceCheck.patchDigest,
236
+ artifactSha256: plan.preparedEvidence.pack.sha256, artifactBytes: artifact.length,
237
+ generatorDigest: plan.generatorDigest }, parent, source: sourceBinding,
238
+ contractDigest: growthObjectDigest(cases.cases), schemaDigest: discovery.schemaDigest,
239
+ environment: discovery.environment, model,
240
+ budget: { modelCalls: 2, maxOutputTokens: config.maxOutputTokens, maxDurationMs: config.maxDurationMs,
241
+ maxCases: config.maxCases }, sessions: { contract: contract.sessionId, sourceReview: review.sessionId },
242
+ observations, reviewDigest: review.outputDigest, verifiedAt, expiresAt,
243
+ };
244
+ const signature = sign(null, Buffer.from(pluginRevisionVerificationSigningPayload(body)), privateKey).toString('base64url');
245
+ const certificate = { ...body, signature };
246
+ fence(() => this.#store.certificate(plan.id, binding, certificate));
247
+ admitted = undefined;
248
+ return { status: 'verified', certificate };
249
+ }
250
+ catch {
251
+ const reason = signal.aborted ? 'interrupted' : admitted ? 'verification-unknown' : 'stale-source';
252
+ if (admitted) {
253
+ try {
254
+ this.#store.unknown(admitted.planId, admitted.binding, reason);
255
+ }
256
+ catch { /* completed or closed ledger remains authoritative */ }
257
+ }
258
+ return { status: 'unknown', reason };
259
+ }
260
+ }
261
+ close() {
262
+ return this.#closing ??= (async () => {
263
+ this.#abort.abort(new Error('revision review disposed'));
264
+ try {
265
+ await Promise.allSettled(this.#flights.values());
266
+ await this.#runnerLoading?.catch(() => undefined);
267
+ await this.#runner?.close();
268
+ }
269
+ finally {
270
+ this.#store.close();
271
+ }
272
+ })();
273
+ }
274
+ }
275
+ //# sourceMappingURL=revision-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision-review.js","sourceRoot":"","sources":["../src/revision-review.ts"],"names":[],"mappings":"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"}
package/lib/service.d.ts CHANGED
@@ -5,6 +5,12 @@ import type { AcceptanceProfile } from './config.js';
5
5
  import type { TaskAcceptanceRegistration, VerifierEvaluationRegistration } from './host.js';
6
6
  import type { Execution } from './store.js';
7
7
  import { type SourceReviewInput, type SourceReviewSelection } from './source-review.js';
8
+ import type { MemoryReviewAvailability } from './memory-review.js';
9
+ import type { MemoryLearningOwner, MemoryLearningReviewRequest } from '@dsh-enhanced/assistant-growth-contract';
10
+ import type { PluginCreationVerificationRequest, PluginCreationVerificationResult, PluginRevisionVerificationRequest, PluginRevisionVerificationResult, PluginRevisionRegressionRequest, PluginRevisionRegressionResult } from '@dsh-enhanced/assistant-growth-contract';
11
+ import type { CreationReviewConfig, CreationReviewAuthorityInspection } from './creation-review.js';
12
+ import type { RevisionReviewConfig, RevisionReviewAuthorityInspection } from './revision-review.js';
13
+ import type { RevisionRegressionReviewConfig, RevisionRegressionReviewAuthorityInspection } from './revision-regression-review.js';
8
14
  export { Config } from './config.js';
9
15
  /** Exact Host-owned key used to inspect a configured acceptance profile. */
10
16
  export interface AcceptanceProfileSelection extends Pick<AcceptanceProfile, 'scope' | 'owner' | 'objective' | 'taskKind'> {
@@ -38,6 +44,30 @@ export declare class AssistantVerifierService extends Service<Config> {
38
44
  constructor(ctx: Context, config: Config, options?: {
39
45
  now?: () => number;
40
46
  });
47
+ /** Frozen public acceptance authority; unavailable until the private Host peers are active. */
48
+ inspectCreationAcceptanceAuthority: (input: {
49
+ owner: CreationReviewConfig["owner"];
50
+ }) => CreationReviewAuthorityInspection | undefined;
51
+ /** Private Host continuation only. Source, artifact and owner are re-read through Control Plane. */
52
+ verifyPluginCreation: (request: PluginCreationVerificationRequest, signal?: AbortSignal) => Promise<PluginCreationVerificationResult>;
53
+ /** Frozen revision authority; independent of the creation grant and quota. */
54
+ inspectRevisionAcceptanceAuthority: (input: {
55
+ owner: RevisionReviewConfig["owner"];
56
+ }) => RevisionReviewAuthorityInspection | undefined;
57
+ /** Private Host continuation for a new task's candidate revision. It grants no execution authority. */
58
+ verifyPluginRevision: (request: PluginRevisionVerificationRequest, signal?: AbortSignal) => Promise<PluginRevisionVerificationResult>;
59
+ /** Host-only parent behavior regression; no candidate execution or version switch authority. */
60
+ inspectRevisionRegressionAcceptanceAuthority: (input: {
61
+ owner: RevisionRegressionReviewConfig["owner"];
62
+ }) => RevisionRegressionReviewAuthorityInspection | undefined;
63
+ verifyPluginRevisionRegression: (request: PluginRevisionRegressionRequest, signal?: AbortSignal) => Promise<PluginRevisionRegressionResult>;
64
+ /** Host-only review. Source text and verdicts cannot be supplied by the caller. */
65
+ reviewMemoryLearning: (request: MemoryLearningReviewRequest, signal?: AbortSignal) => Promise<import("./memory-review.js").MemoryReviewReceipt>;
66
+ lookupMemoryLearningReview: (request: MemoryLearningReviewRequest) => import("./memory-review.js").MemoryReviewReceipt | undefined;
67
+ /** Host-only read of current authority and unclaimed review capacity. */
68
+ inspectMemoryLearningReviewAvailability: (input: {
69
+ owner: MemoryLearningOwner;
70
+ }) => MemoryReviewAvailability | undefined;
41
71
  /** Host-only capability probe, including the exact decision directory. */
42
72
  canReviewSourceRepair: (input: SourceReviewSelection) => boolean;
43
73
  /** No model tool exposes this entry or the private decision writer. */
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/lib/service.js CHANGED
@@ -6,6 +6,10 @@ import { Config, compileAcceptanceProfiles } from './config.js';
6
6
  import { verifyAcceptanceCriteria } from './drivers.js';
7
7
  import { AcceptanceStore } from './store.js';
8
8
  import { SourceReviewRuntime, validateSourceReviewConfig } from './source-review.js';
9
+ import { MemoryReviewRuntime, validateMemoryReviewConfig } from './memory-review.js';
10
+ import { CreationReviewRuntime, validateCreationReviewConfig } from './creation-review.js';
11
+ import { RevisionReviewRuntime, validateRevisionReviewConfig } from './revision-review.js';
12
+ import { RevisionRegressionReviewRuntime, validateRevisionRegressionReviewConfig } from './revision-regression-review.js';
9
13
  export { Config } from './config.js';
10
14
  const producerNames = ['assistantAutomations', 'assistantDelivery', 'assistantGoals'];
11
15
  const producerTaskKinds = Object.freeze({
@@ -96,10 +100,25 @@ export class AssistantVerifierService extends Service {
96
100
  #active = true;
97
101
  #sourceReviewer;
98
102
  #sourceReviewers = new Set();
103
+ #memoryReviewer;
104
+ #memoryReviewConfig;
105
+ #memoryReviewers = new Set();
106
+ #creationReviewer;
107
+ #creationReviewers = new Set();
108
+ #revisionReviewer;
109
+ #revisionReviewers = new Set();
110
+ #revisionRegressionReviewer;
111
+ #revisionRegressionReviewers = new Set();
99
112
  constructor(ctx, config, options = {}) {
100
113
  super(ctx, 'assistantVerifier');
101
114
  const normalized = Config(config);
102
115
  const sourceReviews = normalized.sourceReviews === undefined ? undefined : validateSourceReviewConfig(normalized.sourceReviews);
116
+ const memoryReviews = normalized.memoryReviews === undefined ? undefined : validateMemoryReviewConfig(normalized.memoryReviews);
117
+ const creationReviews = normalized.creationReviews === undefined ? undefined : validateCreationReviewConfig(normalized.creationReviews);
118
+ const revisionReviews = normalized.revisionReviews === undefined ? undefined : validateRevisionReviewConfig(normalized.revisionReviews);
119
+ const revisionRegressions = normalized.revisionRegressions === undefined ? undefined
120
+ : validateRevisionRegressionReviewConfig(normalized.revisionRegressions);
121
+ this.#memoryReviewConfig = memoryReviews;
103
122
  this.#compiled = compileAcceptanceProfiles(normalized);
104
123
  this.#now = options.now ?? Date.now;
105
124
  this.#requireAcceptance = normalized.requireAcceptance ?? false;
@@ -129,9 +148,12 @@ export class AssistantVerifierService extends Service {
129
148
  for (const binding of this.#bindings.values())
130
149
  binding.dispose();
131
150
  this.#evaluation = undefined;
151
+ // Abort both review lanes before awaiting unrelated acceptance teardown.
152
+ const reviews = [...this.#sourceReviewers, ...this.#memoryReviewers, ...this.#creationReviewers,
153
+ ...this.#revisionReviewers, ...this.#revisionRegressionReviewers].map(reviewer => reviewer.close());
132
154
  await this.#running?.catch(() => { });
133
155
  await Promise.allSettled([...this.#isolatedRunners.values()].map(async (runner) => (await runner).close()));
134
- await Promise.allSettled([...this.#sourceReviewers].map(reviewer => reviewer.close()));
156
+ await Promise.allSettled(reviews);
135
157
  this.#store.close();
136
158
  }, 'assistant-verifier.database');
137
159
  if (sourceReviews)
@@ -150,7 +172,123 @@ export class AssistantVerifierService extends Service {
150
172
  };
151
173
  }, 'assistant-verifier.source-review');
152
174
  });
175
+ if (memoryReviews)
176
+ ctx.inject(['agents', 'sessions', 'tools', 'llm', 'systemPrompt', 'assistantPolicy', 'assistantDelivery', 'assistantEvaluation'], injected => {
177
+ injected.effect(() => {
178
+ if (!this.#active)
179
+ return () => { };
180
+ const reviewer = new MemoryReviewRuntime(injected, memoryReviews, normalized.databasePath);
181
+ this.#memoryReviewer = reviewer;
182
+ this.#memoryReviewers.add(reviewer);
183
+ return async () => {
184
+ if (this.#memoryReviewer === reviewer)
185
+ this.#memoryReviewer = undefined;
186
+ await reviewer.close();
187
+ this.#memoryReviewers.delete(reviewer);
188
+ };
189
+ }, 'assistant-verifier.memory-review');
190
+ });
191
+ if (creationReviews)
192
+ ctx.inject(['agents', 'sessions', 'tools', 'llm', 'systemPrompt', 'assistantPolicy', 'pluginControlPlane'], injected => {
193
+ injected.effect(() => {
194
+ if (!this.#active)
195
+ return () => { };
196
+ const reviewer = new CreationReviewRuntime(injected, creationReviews, normalized.databasePath);
197
+ this.#creationReviewer = reviewer;
198
+ this.#creationReviewers.add(reviewer);
199
+ return async () => {
200
+ if (this.#creationReviewer === reviewer)
201
+ this.#creationReviewer = undefined;
202
+ await reviewer.close();
203
+ this.#creationReviewers.delete(reviewer);
204
+ };
205
+ }, 'assistant-verifier.creation-review');
206
+ });
207
+ if (revisionReviews)
208
+ ctx.inject(['agents', 'sessions', 'tools', 'llm', 'systemPrompt', 'assistantPolicy', 'pluginControlPlane'], injected => {
209
+ injected.effect(() => {
210
+ if (!this.#active)
211
+ return () => { };
212
+ const reviewer = new RevisionReviewRuntime(injected, revisionReviews, normalized.databasePath);
213
+ this.#revisionReviewer = reviewer;
214
+ this.#revisionReviewers.add(reviewer);
215
+ return async () => {
216
+ if (this.#revisionReviewer === reviewer)
217
+ this.#revisionReviewer = undefined;
218
+ await reviewer.close();
219
+ this.#revisionReviewers.delete(reviewer);
220
+ };
221
+ }, 'assistant-verifier.revision-review');
222
+ });
223
+ if (revisionRegressions)
224
+ ctx.inject(['pluginControlPlane'], injected => {
225
+ injected.effect(() => {
226
+ if (!this.#active)
227
+ return () => { };
228
+ const reviewer = new RevisionRegressionReviewRuntime(injected, revisionRegressions, normalized.databasePath, parent => this.#creationReviewer?.readRetainedCases(parent));
229
+ this.#revisionRegressionReviewer = reviewer;
230
+ this.#revisionRegressionReviewers.add(reviewer);
231
+ return async () => {
232
+ if (this.#revisionRegressionReviewer === reviewer)
233
+ this.#revisionRegressionReviewer = undefined;
234
+ await reviewer.close();
235
+ this.#revisionRegressionReviewers.delete(reviewer);
236
+ };
237
+ }, 'assistant-verifier.revision-regression-review');
238
+ });
153
239
  }
240
+ /** Frozen public acceptance authority; unavailable until the private Host peers are active. */
241
+ inspectCreationAcceptanceAuthority = (input) => {
242
+ this.#assertActive();
243
+ return this.#creationReviewer?.inspect(input);
244
+ };
245
+ /** Private Host continuation only. Source, artifact and owner are re-read through Control Plane. */
246
+ verifyPluginCreation = (request, signal) => {
247
+ this.#assertActive();
248
+ return this.#creationReviewer?.run(request, signal)
249
+ ?? Promise.resolve({ status: 'unknown', reason: 'verification-unavailable' });
250
+ };
251
+ /** Frozen revision authority; independent of the creation grant and quota. */
252
+ inspectRevisionAcceptanceAuthority = (input) => {
253
+ this.#assertActive();
254
+ return this.#revisionReviewer?.inspect(input);
255
+ };
256
+ /** Private Host continuation for a new task's candidate revision. It grants no execution authority. */
257
+ verifyPluginRevision = (request, signal) => {
258
+ this.#assertActive();
259
+ return this.#revisionReviewer?.run(request, signal)
260
+ ?? Promise.resolve({ status: 'unknown', reason: 'verification-unavailable' });
261
+ };
262
+ /** Host-only parent behavior regression; no candidate execution or version switch authority. */
263
+ inspectRevisionRegressionAcceptanceAuthority = (input) => {
264
+ this.#assertActive();
265
+ return this.#revisionRegressionReviewer?.inspect(input);
266
+ };
267
+ verifyPluginRevisionRegression = (request, signal) => {
268
+ this.#assertActive();
269
+ return this.#revisionRegressionReviewer?.run(request, signal)
270
+ ?? Promise.resolve({ status: 'unknown', reason: 'verification-unavailable' });
271
+ };
272
+ /** Host-only review. Source text and verdicts cannot be supplied by the caller. */
273
+ reviewMemoryLearning = (request, signal) => {
274
+ this.#assertActive();
275
+ if (!this.#memoryReviewer)
276
+ throw new Error('assistant-verifier: memory review services unavailable');
277
+ return this.#memoryReviewer.run(request, signal);
278
+ };
279
+ lookupMemoryLearningReview = (request) => {
280
+ this.#assertActive();
281
+ return this.#memoryReviewer?.lookup(request);
282
+ };
283
+ /** Host-only read of current authority and unclaimed review capacity. */
284
+ inspectMemoryLearningReviewAvailability = (input) => {
285
+ this.#assertActive();
286
+ const config = this.#memoryReviewConfig;
287
+ if (!config)
288
+ return undefined;
289
+ return this.#memoryReviewer?.inspectAvailability(input) ?? Object.freeze({ authorityId: config.authorityId,
290
+ authorityDigest: acceptanceDigest(config), expiresAt: config.expiresAt, remainingReviews: 0, available: false });
291
+ };
154
292
  /** Host-only capability probe, including the exact decision directory. */
155
293
  canReviewSourceRepair = (input) => this.#active && this.#sourceReviewer?.available(input) === true;
156
294
  /** No model tool exposes this entry or the private decision writer. */