@dsh-enhanced/plugin-control-plane 0.1.32 → 0.1.34
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/README.md +352 -4
- package/bin/dsh-local-release-adapter.js +80 -16
- package/bin/dsh-npm-registry-adapter.js +613 -0
- package/bin/dsh-source-adoption-authority.js +12 -0
- package/bin/dsh-source-approval-authority.js +16 -0
- package/bin/dsh-source-release-authority.js +12 -0
- package/bin/dsh-systemd-host-attestor.js +707 -0
- package/bin/dsh-task-observation-authority.js +15 -0
- package/lib/adapter-process.d.ts +23 -0
- package/lib/adapter-process.d.ts.map +1 -0
- package/lib/adapter-process.js +305 -0
- package/lib/adapter-process.js.map +1 -0
- package/lib/adoption-coordinator.d.ts +63 -0
- package/lib/adoption-coordinator.d.ts.map +1 -0
- package/lib/adoption-coordinator.js +241 -0
- package/lib/adoption-coordinator.js.map +1 -0
- package/lib/adoption-handoff.d.ts +16 -0
- package/lib/adoption-handoff.d.ts.map +1 -0
- package/lib/adoption-handoff.js +11 -0
- package/lib/adoption-handoff.js.map +1 -0
- package/lib/attestation.d.ts.map +1 -1
- package/lib/attestation.js +49 -1
- package/lib/attestation.js.map +1 -1
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +29 -2
- package/lib/catalog.js.map +1 -1
- package/lib/cli.d.ts +33 -9
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +624 -178
- package/lib/cli.js.map +1 -1
- package/lib/deployment-readiness.d.ts +38 -0
- package/lib/deployment-readiness.d.ts.map +1 -0
- package/lib/deployment-readiness.js +154 -0
- package/lib/deployment-readiness.js.map +1 -0
- package/lib/effect-blocked-replay.d.ts +81 -0
- package/lib/effect-blocked-replay.d.ts.map +1 -0
- package/lib/effect-blocked-replay.js +259 -0
- package/lib/effect-blocked-replay.js.map +1 -0
- package/lib/errors.d.ts +6 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +9 -0
- package/lib/errors.js.map +1 -0
- package/lib/foreground-deployment-runtime.d.ts +20 -0
- package/lib/foreground-deployment-runtime.d.ts.map +1 -0
- package/lib/foreground-deployment-runtime.js +79 -0
- package/lib/foreground-deployment-runtime.js.map +1 -0
- package/lib/foreground-deployment.d.ts +17 -0
- package/lib/foreground-deployment.d.ts.map +1 -0
- package/lib/foreground-deployment.js +43 -0
- package/lib/foreground-deployment.js.map +1 -0
- package/lib/host-attestor.d.ts +1 -1
- package/lib/host-attestor.d.ts.map +1 -1
- package/lib/host-attestor.js +51 -57
- package/lib/host-attestor.js.map +1 -1
- package/lib/index.d.ts +25 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +11 -2
- package/lib/index.js.map +1 -1
- package/lib/npm-publish.d.ts +25 -0
- package/lib/npm-publish.d.ts.map +1 -0
- package/lib/npm-publish.js +280 -0
- package/lib/npm-publish.js.map +1 -0
- package/lib/owner-task-gap-types.d.ts +21 -0
- package/lib/owner-task-gap-types.d.ts.map +1 -0
- package/lib/owner-task-gap-types.js +2 -0
- package/lib/owner-task-gap-types.js.map +1 -0
- package/lib/owner-task-gaps.d.ts +24 -0
- package/lib/owner-task-gaps.d.ts.map +1 -0
- package/lib/owner-task-gaps.js +74 -0
- package/lib/owner-task-gaps.js.map +1 -0
- package/lib/post-activation.d.ts +33 -0
- package/lib/post-activation.d.ts.map +1 -0
- package/lib/post-activation.js +219 -0
- package/lib/post-activation.js.map +1 -0
- package/lib/registry-fetch.d.ts +50 -0
- package/lib/registry-fetch.d.ts.map +1 -0
- package/lib/registry-fetch.js +267 -0
- package/lib/registry-fetch.js.map +1 -0
- package/lib/release.d.ts +4 -4
- package/lib/release.d.ts.map +1 -1
- package/lib/release.js +142 -56
- package/lib/release.js.map +1 -1
- package/lib/replay-endpoint-protocol.d.ts +65 -0
- package/lib/replay-endpoint-protocol.d.ts.map +1 -0
- package/lib/replay-endpoint-protocol.js +183 -0
- package/lib/replay-endpoint-protocol.js.map +1 -0
- package/lib/replay-endpoint.d.ts +7 -0
- package/lib/replay-endpoint.d.ts.map +1 -0
- package/lib/replay-endpoint.js +193 -0
- package/lib/replay-endpoint.js.map +1 -0
- package/lib/replay-grant.d.ts +62 -0
- package/lib/replay-grant.d.ts.map +1 -0
- package/lib/replay-grant.js +208 -0
- package/lib/replay-grant.js.map +1 -0
- package/lib/replay-journal.d.ts +25 -0
- package/lib/replay-journal.d.ts.map +1 -0
- package/lib/replay-journal.js +275 -0
- package/lib/replay-journal.js.map +1 -0
- package/lib/runtime-observer-protocol.d.ts +63 -0
- package/lib/runtime-observer-protocol.d.ts.map +1 -0
- package/lib/runtime-observer-protocol.js +280 -0
- package/lib/runtime-observer-protocol.js.map +1 -0
- package/lib/runtime-observer.d.ts +8 -0
- package/lib/runtime-observer.d.ts.map +1 -0
- package/lib/runtime-observer.js +182 -0
- package/lib/runtime-observer.js.map +1 -0
- package/lib/service.d.ts +145 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +734 -6
- package/lib/service.js.map +1 -1
- package/lib/source-adoption-authority.d.ts +65 -0
- package/lib/source-adoption-authority.d.ts.map +1 -0
- package/lib/source-adoption-authority.js +271 -0
- package/lib/source-adoption-authority.js.map +1 -0
- package/lib/source-adoption-runner.d.ts +28 -0
- package/lib/source-adoption-runner.d.ts.map +1 -0
- package/lib/source-adoption-runner.js +197 -0
- package/lib/source-adoption-runner.js.map +1 -0
- package/lib/source-approval-authority.d.ts +50 -0
- package/lib/source-approval-authority.d.ts.map +1 -0
- package/lib/source-approval-authority.js +412 -0
- package/lib/source-approval-authority.js.map +1 -0
- package/lib/source-approval-client.d.ts +32 -0
- package/lib/source-approval-client.d.ts.map +1 -0
- package/lib/source-approval-client.js +175 -0
- package/lib/source-approval-client.js.map +1 -0
- package/lib/source-build.d.ts +60 -0
- package/lib/source-build.d.ts.map +1 -0
- package/lib/source-build.js +311 -0
- package/lib/source-build.js.map +1 -0
- package/lib/source-context.d.ts +24 -0
- package/lib/source-context.d.ts.map +1 -0
- package/lib/source-context.js +99 -0
- package/lib/source-context.js.map +1 -0
- package/lib/source-job-types.d.ts +87 -0
- package/lib/source-job-types.d.ts.map +1 -0
- package/lib/source-job-types.js +2 -0
- package/lib/source-job-types.js.map +1 -0
- package/lib/source-jobs.d.ts +113 -0
- package/lib/source-jobs.d.ts.map +1 -0
- package/lib/source-jobs.js +535 -0
- package/lib/source-jobs.js.map +1 -0
- package/lib/source-release-authority.d.ts +35 -0
- package/lib/source-release-authority.d.ts.map +1 -0
- package/lib/source-release-authority.js +271 -0
- package/lib/source-release-authority.js.map +1 -0
- package/lib/source-release-client.d.ts +10 -0
- package/lib/source-release-client.d.ts.map +1 -0
- package/lib/source-release-client.js +24 -0
- package/lib/source-release-client.js.map +1 -0
- package/lib/source-release-runner.d.ts +31 -0
- package/lib/source-release-runner.d.ts.map +1 -0
- package/lib/source-release-runner.js +125 -0
- package/lib/source-release-runner.js.map +1 -0
- package/lib/source-versioning.d.ts +24 -0
- package/lib/source-versioning.d.ts.map +1 -0
- package/lib/source-versioning.js +213 -0
- package/lib/source-versioning.js.map +1 -0
- package/lib/source-workspace.d.ts +117 -0
- package/lib/source-workspace.d.ts.map +1 -0
- package/lib/source-workspace.js +458 -0
- package/lib/source-workspace.js.map +1 -0
- package/lib/sqlite.d.ts +1 -1
- package/lib/sqlite.d.ts.map +1 -1
- package/lib/sqlite.js +509 -7
- package/lib/sqlite.js.map +1 -1
- package/lib/store.d.ts +229 -6
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +2431 -383
- package/lib/store.js.map +1 -1
- package/lib/task-observation-authority.d.ts +29 -0
- package/lib/task-observation-authority.d.ts.map +1 -0
- package/lib/task-observation-authority.js +370 -0
- package/lib/task-observation-authority.js.map +1 -0
- package/lib/task-observation-client.d.ts +4 -0
- package/lib/task-observation-client.d.ts.map +1 -0
- package/lib/task-observation-client.js +20 -0
- package/lib/task-observation-client.js.map +1 -0
- package/lib/task-observation-runtime.d.ts +59 -0
- package/lib/task-observation-runtime.d.ts.map +1 -0
- package/lib/task-observation-runtime.js +331 -0
- package/lib/task-observation-runtime.js.map +1 -0
- package/lib/task-observation-store.d.ts +17 -0
- package/lib/task-observation-store.d.ts.map +1 -0
- package/lib/task-observation-store.js +115 -0
- package/lib/task-observation-store.js.map +1 -0
- package/lib/task-observation-types.d.ts +67 -0
- package/lib/task-observation-types.d.ts.map +1 -0
- package/lib/task-observation-types.js +2 -0
- package/lib/task-observation-types.js.map +1 -0
- package/lib/trust.d.ts +3 -0
- package/lib/trust.d.ts.map +1 -1
- package/lib/trust.js +0 -0
- package/lib/trust.js.map +1 -1
- package/lib/types.d.ts +275 -8
- package/lib/types.d.ts.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +40 -5
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
3
|
+
import { controlPlaneDigest } from './store.js';
|
|
4
|
+
import { taskObservationDigest, taskObservationId } from './task-observation-store.js';
|
|
5
|
+
import { validateSourceApprovalClientConfig } from './source-approval-client.js';
|
|
6
|
+
import { requestTaskObservation } from './task-observation-client.js';
|
|
7
|
+
import { Ed25519PostActivationObservationAuthority } from './post-activation.js';
|
|
8
|
+
import { resolveTrustKey } from './trust.js';
|
|
9
|
+
const OWNER = 'plugin-control-plane-task-observations';
|
|
10
|
+
const EXECUTOR = 'plugin-control-plane-task-observations-v1';
|
|
11
|
+
const CATALOG = controlPlaneDigest({ executor: EXECUTOR, version: 1 });
|
|
12
|
+
const same = (a, b) => controlPlaneDigest(a) === controlPlaneDigest(b);
|
|
13
|
+
export function taskObservationOwner(owner) {
|
|
14
|
+
const { authorityId, authorityHash, principalId, principalRecordId, principalVersion, workspace, agentPreset } = owner;
|
|
15
|
+
return { authorityId, authorityHash, principalId, principalRecordId, principalVersion, workspace, agentPreset };
|
|
16
|
+
}
|
|
17
|
+
export function validateTaskObservationConfig(config) {
|
|
18
|
+
const exact = (value, keys) => !!value && typeof value === 'object' && !Array.isArray(value)
|
|
19
|
+
&& Object.keys(value).sort().join(',') === keys;
|
|
20
|
+
const integer = (value, min, max) => Number.isSafeInteger(value) && value >= min && value <= max;
|
|
21
|
+
const text = (value) => typeof value === 'string' && value.length > 0 && value.length <= 4096
|
|
22
|
+
&& value.normalize('NFC').trim() === value && !/[\p{Cc}]/u.test(value);
|
|
23
|
+
if (!exact(config, 'authority,budgetAmount,budgetId,policy,profilePath,scope,timeoutMs')
|
|
24
|
+
|| !exact(config.policy, 'expiresAt,id,lookbackMs,maximumChecks,maximumObservations,minimumChecks')
|
|
25
|
+
|| !exact(config.scope, 'ownerRouteId,preset,principalId,workspace')
|
|
26
|
+
|| !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/u.test(config.policy.id)
|
|
27
|
+
|| !integer(config.policy.expiresAt, 1, 8_640_000_000_000_000)
|
|
28
|
+
|| !integer(config.policy.maximumObservations, 1, 1000)
|
|
29
|
+
|| !integer(config.policy.minimumChecks, 1, 32) || !integer(config.policy.maximumChecks, config.policy.minimumChecks, 32)
|
|
30
|
+
|| !integer(config.policy.lookbackMs, 1000, 30 * 86_400_000) || !integer(config.timeoutMs, 1000, 300_000)
|
|
31
|
+
|| !text(config.budgetId) || config.budgetId.length > 128 || !integer(config.budgetAmount, 1, 10_000_000)
|
|
32
|
+
|| !Object.values(config.scope).every(text) || !text(config.profilePath)
|
|
33
|
+
|| ![config.profilePath, config.scope.workspace].every(path => isAbsolute(path) && resolve(path) === path))
|
|
34
|
+
throw new Error('invalid taskObservations configuration');
|
|
35
|
+
validateSourceApprovalClientConfig(config.authority);
|
|
36
|
+
}
|
|
37
|
+
/** Trusted real-task cohorts; no model calls and no private scheduler. */
|
|
38
|
+
export class TaskObservationRuntime {
|
|
39
|
+
options;
|
|
40
|
+
lane;
|
|
41
|
+
configDigest;
|
|
42
|
+
trustDigest;
|
|
43
|
+
scanId;
|
|
44
|
+
generation = randomUUID();
|
|
45
|
+
activationNonce;
|
|
46
|
+
abort = new AbortController();
|
|
47
|
+
flights = new Set();
|
|
48
|
+
unregister;
|
|
49
|
+
unsubscribe;
|
|
50
|
+
closing;
|
|
51
|
+
active = false;
|
|
52
|
+
scanning = false;
|
|
53
|
+
lastError = null;
|
|
54
|
+
constructor(options) {
|
|
55
|
+
this.options = options;
|
|
56
|
+
validateTaskObservationConfig(options.config);
|
|
57
|
+
this.lane = controlPlaneDigest({ scope: options.config.scope, profilePath: options.config.profilePath });
|
|
58
|
+
this.configDigest = controlPlaneDigest(options.config);
|
|
59
|
+
this.trustDigest = controlPlaneDigest(options.trust);
|
|
60
|
+
this.scanId = `task-observation-scan-${this.lane}`;
|
|
61
|
+
this.activationNonce = controlPlaneDigest({ config: this.configDigest, generation: this.generation });
|
|
62
|
+
}
|
|
63
|
+
start() {
|
|
64
|
+
this.unregister = this.options.automations.registerHostExecutor({
|
|
65
|
+
descriptor: { executorId: EXECUTOR, contractVersion: 1, catalogDigest: CATALOG },
|
|
66
|
+
accepts: spec => spec.executorId === EXECUTOR && spec.executorContractVersion === 1 && spec.catalogDigest === CATALOG
|
|
67
|
+
&& spec.runbookId === 'observe' && spec.runbookVersion === 1,
|
|
68
|
+
execute: input => {
|
|
69
|
+
const flight = this.execute(input);
|
|
70
|
+
this.flights.add(flight);
|
|
71
|
+
void flight.finally(() => this.flights.delete(flight)).catch(() => { });
|
|
72
|
+
return flight;
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
this.active = true;
|
|
76
|
+
this.unsubscribe = this.options.evaluation.onTrustedTaskChange(() => this.scan());
|
|
77
|
+
this.options.automations.reconcileSystem({ owner: OWNER, automationId: this.scanId,
|
|
78
|
+
idempotencyKey: `${this.scanId}:${this.generation}`, desiredStatus: 'active', definition: this.definition() });
|
|
79
|
+
this.scan();
|
|
80
|
+
}
|
|
81
|
+
close() {
|
|
82
|
+
return this.closing ??= (async () => {
|
|
83
|
+
this.active = false;
|
|
84
|
+
try {
|
|
85
|
+
const current = this.options.automations.inspectSystemOwnedActivation({ owner: OWNER, automationId: this.scanId });
|
|
86
|
+
if (current?.activationNonce === this.activationNonce)
|
|
87
|
+
this.options.automations.reconcileSystem({ owner: OWNER,
|
|
88
|
+
automationId: this.scanId, idempotencyKey: `${this.scanId}:${this.generation}:pause`, desiredStatus: 'paused', definition: this.definition() });
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
this.abort.abort();
|
|
92
|
+
try {
|
|
93
|
+
this.unsubscribe?.();
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
try {
|
|
97
|
+
this.unregister?.();
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
await Promise.allSettled(this.flights);
|
|
101
|
+
this.options.store.close();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
})();
|
|
106
|
+
}
|
|
107
|
+
health = () => ({ connected: this.active, lastError: this.lastError });
|
|
108
|
+
current() {
|
|
109
|
+
this.abort.signal.throwIfAborted();
|
|
110
|
+
if (!this.active)
|
|
111
|
+
throw new Error('task observation runtime unavailable');
|
|
112
|
+
this.options.assertCurrent();
|
|
113
|
+
}
|
|
114
|
+
owner() {
|
|
115
|
+
this.current();
|
|
116
|
+
const scope = this.options.config.scope;
|
|
117
|
+
return taskObservationOwner(this.options.delivery.validateOwnerRoute({ authorityId: scope.ownerRouteId,
|
|
118
|
+
principalId: scope.principalId, workspace: scope.workspace, agentPreset: scope.preset }));
|
|
119
|
+
}
|
|
120
|
+
source(inboxId) {
|
|
121
|
+
const owner = this.owner();
|
|
122
|
+
const scope = this.options.evaluation.canonicalHostScope({ workspace: owner.workspace, preset: owner.agentPreset });
|
|
123
|
+
const canonical = this.options.evaluation.getTrustedForegroundLearningProjection({ scope, inboxId });
|
|
124
|
+
if (!canonical)
|
|
125
|
+
return undefined;
|
|
126
|
+
const source = this.options.delivery.inspectOwnerForegroundLearningTask({ authorityId: owner.authorityId,
|
|
127
|
+
principalId: owner.principalId, workspace: owner.workspace, agentPreset: owner.agentPreset, outcomeId: canonical.triggerOutcomeId });
|
|
128
|
+
if (!source || !same(taskObservationOwner(source.owner), owner) || !same(source.canonical.projection, canonical.projection)
|
|
129
|
+
|| source.source.inboxId !== inboxId)
|
|
130
|
+
return undefined;
|
|
131
|
+
return source;
|
|
132
|
+
}
|
|
133
|
+
vote(deployment, source) {
|
|
134
|
+
const now = Date.now(), status = source?.canonical.objective?.status;
|
|
135
|
+
if (!source || !['owner-feedback', 'independent-verifier'].includes(source.judgement)
|
|
136
|
+
|| (status !== 'achieved' && status !== 'not-achieved') || source.ownerRevision?.action === 'withdraw'
|
|
137
|
+
|| source.canonical.projection.subjectKind !== 'foreground-turn' || source.canonical.projection.disposition !== 'upsert'
|
|
138
|
+
|| source.canonical.projection.subjectRef !== deployment.task.inboxId || !source.source.quiescent || source.source.truncated
|
|
139
|
+
|| source.source.sessionId !== deployment.task.sessionId || deployment.state !== 'observed' || !deployment.execution
|
|
140
|
+
|| source.owner.principalRecordId !== deployment.task.owner.principalRecordId
|
|
141
|
+
|| source.owner.principalVersion !== deployment.task.owner.principalVersion
|
|
142
|
+
|| source.owner.workspace !== deployment.task.scope.workspace || source.owner.agentPreset !== deployment.task.scope.preset
|
|
143
|
+
|| deployment.execution.completedAt > now || now - deployment.execution.completedAt > this.options.config.policy.lookbackMs
|
|
144
|
+
|| (source.canonical.objective?.occurredAt ?? now + 1) > now)
|
|
145
|
+
return undefined;
|
|
146
|
+
return { inboxId: deployment.task.inboxId, outcomeId: source.canonical.triggerOutcomeId, projection: { ...source.canonical.projection },
|
|
147
|
+
sourceDigest: controlPlaneDigest({ protocol: source.protocol, source: source.source, judgement: source.judgement, ownerRevision: source.ownerRevision }),
|
|
148
|
+
deploymentDigest: controlPlaneDigest(deployment), status, completedAt: deployment.execution.completedAt };
|
|
149
|
+
}
|
|
150
|
+
read(batch) {
|
|
151
|
+
this.current();
|
|
152
|
+
if (batch.configDigest !== this.configDigest || batch.trustDigest !== this.trustDigest || batch.expiresAt <= Date.now()
|
|
153
|
+
|| !same(batch.owner, this.owner()))
|
|
154
|
+
throw new Error('task observation authority changed or expired');
|
|
155
|
+
return batch.votes.map(expected => {
|
|
156
|
+
const deployment = this.options.store.getForegroundDeployment(expected.inboxId), source = this.source(expected.inboxId);
|
|
157
|
+
if (!deployment || !source || !same(this.vote(deployment, source), expected))
|
|
158
|
+
throw new Error('task observation source changed');
|
|
159
|
+
return source;
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
fence(batch, callback) {
|
|
163
|
+
const sources = this.read(batch);
|
|
164
|
+
if (this.options.store.getTaskObservation(batch.id))
|
|
165
|
+
this.options.store.assertCurrentTaskObservation(batch.id);
|
|
166
|
+
const scope = this.options.evaluation.canonicalHostScope({ workspace: batch.owner.workspace, preset: batch.owner.agentPreset });
|
|
167
|
+
const result = this.options.evaluation.withTrustedCanonicalTaskWriterFence({ scope,
|
|
168
|
+
scopeWatermark: Math.max(...sources.map(source => source.canonical.scopeWatermark)), evidence: batch.votes.map(vote => vote.projection) }, () => {
|
|
169
|
+
this.read(batch);
|
|
170
|
+
return callback();
|
|
171
|
+
});
|
|
172
|
+
if (!result.matched)
|
|
173
|
+
throw new Error('task observation canonical writer fence changed');
|
|
174
|
+
return result.value;
|
|
175
|
+
}
|
|
176
|
+
/** Bounded synchronous nudge; the persisted native cron owns asynchronous work. */
|
|
177
|
+
scan = () => {
|
|
178
|
+
if (!this.active || this.scanning)
|
|
179
|
+
return;
|
|
180
|
+
this.scanning = true;
|
|
181
|
+
try {
|
|
182
|
+
this.current();
|
|
183
|
+
this.lastError = null;
|
|
184
|
+
const store = this.options.store, now = Date.now(), config = this.options.config;
|
|
185
|
+
const prior = store.listTaskObservations(this.lane, 1000);
|
|
186
|
+
for (const record of prior.filter(record => record.state === 'pending' || record.state === 'signed')) {
|
|
187
|
+
try {
|
|
188
|
+
this.fence(record.batch, () => { });
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
store.staleTaskObservation(record.batch.id);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (now >= config.policy.expiresAt)
|
|
196
|
+
return;
|
|
197
|
+
const owner = this.owner();
|
|
198
|
+
const groups = new Map();
|
|
199
|
+
for (const deployment of store.listObservedForegroundDeployments(config.profilePath, 1000)) {
|
|
200
|
+
const vote = this.vote(deployment, this.source(deployment.task.inboxId));
|
|
201
|
+
if (!vote || store.hasAppliedTaskObservationVote(this.lane, vote.inboxId, vote.projection.digest))
|
|
202
|
+
continue;
|
|
203
|
+
let group = groups.get(deployment.readiness.planId);
|
|
204
|
+
if (!group)
|
|
205
|
+
groups.set(deployment.readiness.planId, group = { deployment, votes: [] });
|
|
206
|
+
if (group.votes.length < config.policy.maximumChecks)
|
|
207
|
+
group.votes.push(vote);
|
|
208
|
+
}
|
|
209
|
+
for (const { deployment, votes } of groups.values()) {
|
|
210
|
+
if (votes.length < config.policy.minimumChecks)
|
|
211
|
+
continue;
|
|
212
|
+
votes.sort((a, b) => a.inboxId.localeCompare(b.inboxId));
|
|
213
|
+
const readiness = deployment.readiness;
|
|
214
|
+
const core = { lane: this.lane, configDigest: this.configDigest, trustDigest: this.trustDigest,
|
|
215
|
+
planId: readiness.planId, planDigest: readiness.planDigest, installationId: readiness.installationId,
|
|
216
|
+
profilePath: config.profilePath, owner, policy: config.policy, hostGeneration: readiness.hostGeneration, votes };
|
|
217
|
+
const id = taskObservationId(core);
|
|
218
|
+
if (store.getTaskObservation(id))
|
|
219
|
+
continue;
|
|
220
|
+
const unsigned = { schemaVersion: 1, kind: 'dsh-task-observation', id, ...core, createdAt: now,
|
|
221
|
+
expiresAt: Math.min(config.policy.expiresAt, ...votes.map(vote => vote.completedAt + config.policy.lookbackMs)) };
|
|
222
|
+
const batch = { ...unsigned, digest: taskObservationDigest(unsigned) };
|
|
223
|
+
try {
|
|
224
|
+
this.fence(batch, () => store.putTaskObservation(batch));
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
catch { /* Historical deployments and racing current feedback are ineligible. */ }
|
|
228
|
+
}
|
|
229
|
+
this.lastError = null;
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
this.lastError = error instanceof Error ? error.message.slice(0, 200) : 'task observation scan failed';
|
|
233
|
+
}
|
|
234
|
+
finally {
|
|
235
|
+
this.scanning = false;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
definition() {
|
|
239
|
+
const { scope, timeoutMs, budgetId, budgetAmount } = this.options.config;
|
|
240
|
+
return { name: 'Observe deployed plugin task feedback', schedule: { kind: 'cron', expression: '* * * * *', timezone: 'UTC' },
|
|
241
|
+
workspace: scope.workspace, agentPreset: scope.preset, timeoutMs, misfire: { kind: 'latest' }, overlap: 'skip',
|
|
242
|
+
retrySafety: 'never', maxRetries: 0, principal: scope.principalId, budgetId, budgetAmount,
|
|
243
|
+
execution: { kind: 'host', executorId: EXECUTOR, executorContractVersion: 1, runbookId: 'observe', runbookVersion: 1,
|
|
244
|
+
catalogDigest: CATALOG, targetScope: { workspace: scope.workspace, preset: scope.preset },
|
|
245
|
+
scopeDigest: controlPlaneDigest([scope.workspace, scope.preset]), ownerRouteId: scope.ownerRouteId, activationNonce: this.activationNonce } };
|
|
246
|
+
}
|
|
247
|
+
async execute(input) {
|
|
248
|
+
let began = false;
|
|
249
|
+
try {
|
|
250
|
+
const owner = this.owner();
|
|
251
|
+
const registration = this.options.automations.inspectSystemOwnedActivation({ owner: OWNER, automationId: this.scanId });
|
|
252
|
+
if (input.executionMode !== 'production' || input.automationId !== this.scanId || input.activationNonce !== this.activationNonce
|
|
253
|
+
|| input.definitionHash !== registration?.definitionHash || input.catalogDigest !== CATALOG
|
|
254
|
+
|| registration.activationNonce !== this.activationNonce || input.ownerRouteId !== owner.authorityId
|
|
255
|
+
|| input.principal !== owner.principalId || input.targetScope.workspace !== owner.workspace
|
|
256
|
+
|| input.targetScope.preset !== owner.agentPreset)
|
|
257
|
+
throw new Error('task observation dispatch changed');
|
|
258
|
+
const signal = AbortSignal.any([this.abort.signal, input.signal, AbortSignal.timeout(this.options.config.timeoutMs)]);
|
|
259
|
+
signal.throwIfAborted();
|
|
260
|
+
began = true;
|
|
261
|
+
this.scan();
|
|
262
|
+
for (const record of this.options.store.listTaskObservations(this.lane, 1000)) {
|
|
263
|
+
signal.throwIfAborted();
|
|
264
|
+
this.current();
|
|
265
|
+
if (record.state === 'applied' && record.receipt?.disposition === 'regressed') {
|
|
266
|
+
// A committed rollback obligation survives feedback changes and grant expiry.
|
|
267
|
+
if (record.batch.profilePath !== this.options.config.profilePath || record.batch.trustDigest !== this.trustDigest)
|
|
268
|
+
continue;
|
|
269
|
+
if (this.options.store.getPlan(record.batch.planId).status !== 'rolled-back')
|
|
270
|
+
await this.options.rollback(record.batch.planId, signal);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (record.state !== 'pending' && record.state !== 'signed')
|
|
274
|
+
continue;
|
|
275
|
+
try {
|
|
276
|
+
this.fence(record.batch, () => { });
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
this.options.store.staleTaskObservation(record.batch.id);
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
const receipt = record.receipt ?? await (this.options.request?.(record.batch, signal)
|
|
283
|
+
?? requestTaskObservation(this.options.config.authority, { protocol: 'dsh-task-observation/v1',
|
|
284
|
+
observationId: record.batch.id, observationDigest: record.batch.digest }, signal));
|
|
285
|
+
signal.throwIfAborted();
|
|
286
|
+
this.current();
|
|
287
|
+
if (receipt.expiresAt <= Date.now()) {
|
|
288
|
+
this.options.store.staleTaskObservation(record.batch.id);
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
this.fence(record.batch, () => { });
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
this.options.store.staleTaskObservation(record.batch.id);
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
const key = resolveTrustKey(this.options.trust, 'host-attestation', receipt.authority, receipt.keyId);
|
|
299
|
+
const authority = new Ed25519PostActivationObservationAuthority(key.publicKeyPem, key.authority, key.keyId, { receiptTtlMs: 300_000 });
|
|
300
|
+
try {
|
|
301
|
+
await authority.verify(receipt, this.options.store.getPlan(record.batch.planId), this.options.store.getActivationWatch(record.batch.planId).exact);
|
|
302
|
+
signal.throwIfAborted();
|
|
303
|
+
this.fence(record.batch, () => this.options.store.signTaskObservation(record.batch.id, receipt));
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
this.options.store.staleTaskObservation(record.batch.id);
|
|
307
|
+
throw error;
|
|
308
|
+
}
|
|
309
|
+
await this.options.store.recordPostActivationObservation({ receipt, taskObservationId: record.batch.id,
|
|
310
|
+
idempotencyKey: `post-activation-observation:${receipt.observationId}`,
|
|
311
|
+
withSourceFence: callback => { signal.throwIfAborted(); return this.fence(record.batch, callback); },
|
|
312
|
+
resolveAuthority: value => {
|
|
313
|
+
this.current();
|
|
314
|
+
const key = resolveTrustKey(this.options.trust, 'host-attestation', value.authority, value.keyId);
|
|
315
|
+
return new Ed25519PostActivationObservationAuthority(key.publicKeyPem, key.authority, key.keyId, { receiptTtlMs: 300_000 });
|
|
316
|
+
} });
|
|
317
|
+
if (receipt.disposition === 'regressed')
|
|
318
|
+
await this.options.rollback(record.batch.planId, signal);
|
|
319
|
+
}
|
|
320
|
+
if (this.lastError)
|
|
321
|
+
throw new Error(this.lastError);
|
|
322
|
+
return { outcome: 'succeeded', failureClass: 'none', failurePhase: 'none', failureCode: 'none', sideEffectState: 'possible', retryability: 'unsafe' };
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
this.lastError = error instanceof Error ? error.message.slice(0, 200) : 'task observation failed';
|
|
326
|
+
return { outcome: began ? 'unknown' : 'failed', failureClass: began ? 'unknown' : 'configuration', failurePhase: 'host-execution',
|
|
327
|
+
failureCode: 'task-observation-rejected', sideEffectState: began ? 'unknown' : 'none', retryability: began ? 'unsafe' : 'after-intervention' };
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=task-observation-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-observation-runtime.js","sourceRoot":"","sources":["../src/task-observation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAI/C,OAAO,EAAE,kBAAkB,EAA0B,MAAM,YAAY,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,yCAAyC,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAAE,eAAe,EAAiC,MAAM,YAAY,CAAA;AAK3E,MAAM,KAAK,GAAG,wCAAwC,CAAA;AACtD,MAAM,QAAQ,GAAG,2CAA2C,CAAA;AAC5D,MAAM,OAAO,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;AACtE,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAA;AAKjG,MAAM,UAAU,oBAAoB,CAAC,KAA2B;IAC9D,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IACtH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,CAAA;AACjH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAA6B;IACzE,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,IAAY,EAAW,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;WAChH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;IACjD,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAA;IACjI,MAAM,IAAI,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI;WACzG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,oEAAoE,CAAC;WACnF,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,yEAAyE,CAAC;WAChG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,2CAA2C,CAAC;WACjE,CAAC,sCAAsC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;WAC9D,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,qBAAqB,CAAC;WAC3D,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,EAAE,IAAI,CAAC;WACpD,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC;WACtH,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC;WACtG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,UAAU,CAAC;WACtG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;WACrE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACvK,kCAAkC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AACtD,CAAC;AAED,0EAA0E;AAC1E,MAAM,OAAO,sBAAsB;IAeJ;IAdZ,IAAI,CAAQ;IACZ,YAAY,CAAQ;IACpB,WAAW,CAAQ;IACnB,MAAM,CAAQ;IACd,UAAU,GAAG,UAAU,EAAE,CAAA;IACzB,eAAe,CAAQ;IACvB,KAAK,GAAG,IAAI,eAAe,EAAE,CAAA;IAC7B,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAA;IAC9C,UAAU,CAAa;IACvB,WAAW,CAAa;IACxB,OAAO,CAAgB;IACvB,MAAM,GAAG,KAAK,CAAA;IACd,QAAQ,GAAG,KAAK,CAAA;IAChB,SAAS,GAAkB,IAAI,CAAA;IACvC,YAA6B,OAM5B;QAN4B,YAAO,GAAP,OAAO,CAMnC;QACC,6BAA6B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QACxG,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACtD,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACpD,IAAI,CAAC,MAAM,GAAG,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAA;QAClD,IAAI,CAAC,eAAe,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IACvG,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC;YAC9D,UAAU,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE;YAChF,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,uBAAuB,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO;mBAChH,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;YAC9D,OAAO,EAAE,KAAK,CAAC,EAAE;gBACf,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACxB,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBACtE,OAAO,MAAM,CAAA;YACf,CAAC;SACF,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACjF,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM;YAChF,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QAChH,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,KAAK,CAAC,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;YACnB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,4BAA4B,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;gBAClH,IAAI,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC,eAAe;oBAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK;wBAC5G,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACnJ,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;gBAClB,IAAI,CAAC;oBAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAA;gBAAC,CAAC;wBAAS,CAAC;oBACpC,IAAI,CAAC;wBAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAA;oBAAC,CAAC;4BAAS,CAAC;wBACnC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;wBACtC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;IACN,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;IAE9D,OAAO;QACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAA;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAA;IAC9B,CAAC;IACO,KAAK;QACX,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;QACvC,OAAO,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,YAAY;YACpG,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC7F,CAAC;IACO,MAAM,CAAC,OAAe;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QACnH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,sCAAsC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;QACpG,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW;YACtG,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAA;QACtI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC;eACtH,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO,SAAS,CAAA;QACxD,OAAO,MAAM,CAAA;IACf,CAAC;IACO,IAAI,CAAC,UAAsC,EAAE,MAA+C;QAClG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAA;QACpE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;eAChF,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,cAAc,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,KAAK,UAAU;eACnG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,KAAK,iBAAiB,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,KAAK,QAAQ;eACrH,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS;eACzH,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS;eACjH,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB;eAC1E,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB;eACxE,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;eACvH,UAAU,CAAC,SAAS,CAAC,WAAW,GAAG,GAAG,IAAI,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;eACxH,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG;YAAE,OAAO,SAAS,CAAA;QAChF,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE;YACrI,YAAY,EAAE,kBAAkB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;YACxJ,gBAAgB,EAAE,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;IAC7G,CAAC;IACO,IAAI,CAAC,KAA2B;QACtC,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;eAClH,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QACvG,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACvH,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAChI,OAAO,MAAM,CAAA;QACf,CAAC,CAAC,CAAA;IACJ,CAAC;IACO,KAAK,CAAI,KAA2B,EAAE,QAAiB;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC9G,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QAC/H,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,mCAAmC,CAAC,EAAE,KAAK;YAChF,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE;YAChJ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChB,OAAO,QAAQ,EAAE,CAAA;QACnB,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACvF,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;IAED,mFAAmF;IACnF,IAAI,GAAG,GAAS,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAM;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAA;YACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;YAChF,MAAM,KAAK,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACzD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACrG,IAAI,CAAC;oBAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBAAC,OAAM;gBAAC,CAAC;gBAClD,MAAM,CAAC;oBAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBAAC,CAAC;YACvD,CAAC;YACD,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS;gBAAE,OAAM;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoF,CAAA;YAC1G,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,iCAAiC,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;gBACxE,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;oBAAE,SAAQ;gBAC3G,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;gBACnD,IAAI,CAAC,KAAK;oBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;gBACtF,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa;oBAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9E,CAAC;YACD,KAAK,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBACpD,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa;oBAAE,SAAQ;gBACxD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;gBACxD,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;gBACtC,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC5F,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,cAAc;oBACpG,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,KAAK,EAAE,CAAA;gBAClH,MAAM,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;gBAClC,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAAE,SAAQ;gBAC1C,MAAM,QAAQ,GAAG,EAAE,aAAa,EAAE,CAAU,EAAE,IAAI,EAAE,sBAA+B,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG;oBAC9G,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAA;gBACnH,MAAM,KAAK,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAA;gBACtE,IAAI,CAAC;oBAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAAC,MAAK;gBAAC,CAAC;gBACvE,MAAM,CAAC,CAAC,wEAAwE,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAA;QAAC,CAAC;gBAClH,CAAC;YAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QAAC,CAAC;IACnC,CAAC,CAAA;IAEO,UAAU;QAChB,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;QACxE,OAAO,EAAE,IAAI,EAAE,uCAAuC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC1H,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM;YAC9G,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY;YACzF,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;gBAClH,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;gBACzF,WAAW,EAAE,kBAAkB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,CAAA;IACnJ,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,KAAkC;QACtD,IAAI,KAAK,GAAG,KAAK,CAAA;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,4BAA4B,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;YACvH,IAAI,KAAK,CAAC,aAAa,KAAK,YAAY,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe;mBAC3H,KAAK,CAAC,cAAc,KAAK,YAAY,EAAE,cAAc,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO;mBACxF,YAAY,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,WAAW;mBACjG,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;mBACxF,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,KAAK,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;YACzG,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YACrH,MAAM,CAAC,cAAc,EAAE,CAAC;YAAC,KAAK,GAAG,IAAI,CAAA;YACrC,IAAI,CAAC,IAAI,EAAE,CAAA;YACX,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC9E,MAAM,CAAC,cAAc,EAAE,CAAC;gBAAC,IAAI,CAAC,OAAO,EAAE,CAAA;gBACvC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,WAAW,KAAK,WAAW,EAAE,CAAC;oBAC9E,8EAA8E;oBAC9E,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;wBAAE,SAAQ;oBAC3H,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,aAAa;wBAAE,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;oBACtI,SAAQ;gBACV,CAAC;gBACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;oBAAE,SAAQ;gBACrE,IAAI,CAAC;oBAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAAC,SAAQ;gBAAC,CAAC;gBACvH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;uBAChF,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,yBAAyB;wBAC5F,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;gBACtF,MAAM,CAAC,cAAc,EAAE,CAAC;gBAAC,IAAI,CAAC,OAAO,EAAE,CAAA;gBACvC,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;oBAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAAC,SAAQ;gBAAC,CAAC;gBAC3G,IAAI,CAAC;oBAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAAC,SAAQ;gBAAC,CAAC;gBACvH,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;gBACrG,MAAM,SAAS,GAAG,IAAI,yCAAyC,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAA;gBACtI,IAAI,CAAC;oBACH,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAA;oBAClJ,MAAM,CAAC,cAAc,EAAE,CAAA;oBACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;gBAClG,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;oBACxD,MAAM,KAAK,CAAA;gBACb,CAAC;gBACD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;oBACpG,cAAc,EAAE,+BAA+B,OAAO,CAAC,aAAa,EAAE;oBACtE,eAAe,EAAE,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA,CAAC,CAAC;oBACnG,gBAAgB,EAAE,KAAK,CAAC,EAAE;wBACxB,IAAI,CAAC,OAAO,EAAE,CAAA;wBACd,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;wBACjG,OAAO,IAAI,yCAAyC,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAA;oBAC7H,CAAC,EAAE,CAAC,CAAA;gBACN,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW;oBAAE,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACnG,CAAC;YACD,IAAI,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACnD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAA;QACvJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAA;YACjG,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,EAAE,YAAY,EAAE,gBAAgB;gBAC/H,WAAW,EAAE,2BAA2B,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAA;QAClJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import { type ForegroundDeploymentRecord } from './foreground-deployment.js';
|
|
3
|
+
import { readOwnerSourceAdoptionPlan } from './store.js';
|
|
4
|
+
import type { PluginActivationPlan } from './types.js';
|
|
5
|
+
import type { TaskObservationBatch, TaskObservationRecord } from './task-observation-types.js';
|
|
6
|
+
export declare function taskObservationId(batch: Omit<TaskObservationBatch, 'schemaVersion' | 'kind' | 'id' | 'digest' | 'createdAt' | 'expiresAt'>): string;
|
|
7
|
+
export declare function taskObservationDigest(batch: Omit<TaskObservationBatch, 'digest'>): string;
|
|
8
|
+
export declare function assertTaskObservationBatch(value: unknown): asserts value is TaskObservationBatch;
|
|
9
|
+
export declare function getTaskObservationRecord(db: DatabaseSync, id: string): TaskObservationRecord | undefined;
|
|
10
|
+
/** Read-only durable cohort validation; canonical quality is fenced by the Host. */
|
|
11
|
+
export declare function readTaskObservationContext(db: DatabaseSync, id: string): {
|
|
12
|
+
record: TaskObservationRecord;
|
|
13
|
+
plan: PluginActivationPlan;
|
|
14
|
+
source: ReturnType<typeof readOwnerSourceAdoptionPlan>['source'];
|
|
15
|
+
deployments: readonly ForegroundDeploymentRecord[];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=task-observation-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-observation-store.d.ts","sourceRoot":"","sources":["../src/task-observation-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAA8B,KAAK,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AAExG,OAAO,EAA8C,2BAA2B,EAAE,MAAM,YAAY,CAAA;AAEpG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAW9F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,MAAM,CAInJ;AACD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,GAAG,MAAM,CAGzF;AACD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,oBAAoB,CAyBhG;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAaxG;AAED,oFAAoF;AACpF,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG;IACxE,MAAM,EAAE,qBAAqB,CAAC;IAAC,IAAI,EAAE,oBAAoB,CAAA;IACzD,MAAM,EAAE,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC,QAAQ,CAAC,CAAC;IAAC,WAAW,EAAE,SAAS,0BAA0B,EAAE,CAAA;CACrH,CAwCA"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
2
|
+
import { assertForegroundDeployment } from './foreground-deployment.js';
|
|
3
|
+
import { controlPlaneSchemaVersion } from './sqlite.js';
|
|
4
|
+
import { controlPlaneDigest, ControlPlaneStoreError, readOwnerSourceAdoptionPlan } from './store.js';
|
|
5
|
+
import { parsePostActivationObservation } from './post-activation.js';
|
|
6
|
+
const ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/u;
|
|
7
|
+
const DIGEST = /^[a-f0-9]{64}$/u;
|
|
8
|
+
const fail = (message) => { throw new ControlPlaneStoreError('invalid-state', message); };
|
|
9
|
+
const same = (a, b) => controlPlaneDigest(a) === controlPlaneDigest(b);
|
|
10
|
+
const integer = (value, min, max = Number.MAX_SAFE_INTEGER) => Number.isSafeInteger(value) && value >= min && value <= max;
|
|
11
|
+
const text = (value) => typeof value === 'string' && value.length > 0 && value.length <= 4096
|
|
12
|
+
&& value.normalize('NFC').trim() === value && !/[\p{Cc}]/u.test(value);
|
|
13
|
+
const path = (value) => text(value) && isAbsolute(value) && resolve(value) === value;
|
|
14
|
+
export function taskObservationId(batch) {
|
|
15
|
+
return `task-observation-${controlPlaneDigest({ lane: batch.lane, configDigest: batch.configDigest, trustDigest: batch.trustDigest,
|
|
16
|
+
planId: batch.planId, planDigest: batch.planDigest, installationId: batch.installationId, profilePath: batch.profilePath,
|
|
17
|
+
owner: batch.owner, policy: batch.policy, hostGeneration: batch.hostGeneration, votes: batch.votes })}`;
|
|
18
|
+
}
|
|
19
|
+
export function taskObservationDigest(batch) {
|
|
20
|
+
const { digest: _digest, ...unsigned } = batch;
|
|
21
|
+
return controlPlaneDigest(unsigned);
|
|
22
|
+
}
|
|
23
|
+
export function assertTaskObservationBatch(value) {
|
|
24
|
+
const batch = value;
|
|
25
|
+
if (!batch || typeof batch !== 'object' || batch.schemaVersion !== 1 || batch.kind !== 'dsh-task-observation'
|
|
26
|
+
|| !ID.test(batch.id) || !DIGEST.test(batch.digest) || !DIGEST.test(batch.lane) || !DIGEST.test(batch.configDigest)
|
|
27
|
+
|| !DIGEST.test(batch.trustDigest) || !ID.test(batch.planId) || !DIGEST.test(batch.planDigest) || !Array.isArray(batch.votes)
|
|
28
|
+
|| !path(batch.profilePath) || !text(batch.installationId) || !integer(batch.hostGeneration, 1)
|
|
29
|
+
|| !integer(batch.createdAt, 1) || !integer(batch.expiresAt, batch.createdAt + 1)
|
|
30
|
+
|| !batch.policy || !ID.test(batch.policy.id) || !integer(batch.policy.expiresAt, batch.expiresAt)
|
|
31
|
+
|| !integer(batch.policy.maximumObservations, 1, 1000) || !integer(batch.policy.minimumChecks, 1, 32)
|
|
32
|
+
|| !integer(batch.policy.maximumChecks, batch.policy.minimumChecks, 32) || !integer(batch.policy.lookbackMs, 1000, 30 * 86_400_000)
|
|
33
|
+
|| batch.votes.length < batch.policy.minimumChecks || batch.votes.length > batch.policy.maximumChecks
|
|
34
|
+
|| !batch.owner || ![batch.owner.authorityId, batch.owner.principalId, batch.owner.principalRecordId, batch.owner.agentPreset].every(text)
|
|
35
|
+
|| !DIGEST.test(batch.owner.authorityHash) || !path(batch.owner.workspace) || !integer(batch.owner.principalVersion, 1)
|
|
36
|
+
|| Buffer.byteLength(JSON.stringify(batch)) > 262_144)
|
|
37
|
+
fail('task observation batch is invalid');
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
for (const vote of batch.votes) {
|
|
40
|
+
if (!vote || !text(vote.inboxId) || !text(vote.outcomeId) || !DIGEST.test(vote.sourceDigest) || !DIGEST.test(vote.deploymentDigest)
|
|
41
|
+
|| !['achieved', 'not-achieved'].includes(vote.status) || !integer(vote.completedAt, 1, batch.createdAt)
|
|
42
|
+
|| batch.expiresAt > vote.completedAt + batch.policy.lookbackMs || !vote.projection
|
|
43
|
+
|| vote.projection.subjectKind !== 'foreground-turn' || vote.projection.subjectRef !== vote.inboxId
|
|
44
|
+
|| vote.projection.disposition !== 'upsert' || !integer(vote.projection.version, 1) || !DIGEST.test(vote.projection.digest)
|
|
45
|
+
|| seen.has(vote.inboxId))
|
|
46
|
+
fail('task observation vote is invalid');
|
|
47
|
+
seen.add(vote.inboxId);
|
|
48
|
+
}
|
|
49
|
+
if (batch.id !== taskObservationId(batch) || batch.digest !== taskObservationDigest(batch))
|
|
50
|
+
fail('task observation digest differs');
|
|
51
|
+
}
|
|
52
|
+
export function getTaskObservationRecord(db, id) {
|
|
53
|
+
const row = db.prepare('SELECT id,lane,plan_id,batch_json,batch_digest,state,receipt_json,receipt_digest FROM task_observation_batches WHERE id=?').get(id);
|
|
54
|
+
if (!row)
|
|
55
|
+
return undefined;
|
|
56
|
+
if (Buffer.byteLength(row.batch_json) > 262_144)
|
|
57
|
+
fail('stored task observation exceeds bound');
|
|
58
|
+
const batch = JSON.parse(row.batch_json);
|
|
59
|
+
assertTaskObservationBatch(batch);
|
|
60
|
+
if (controlPlaneDigest(batch) !== row.batch_digest || batch.id !== row.id || batch.lane !== row.lane || batch.planId !== row.plan_id
|
|
61
|
+
|| !['pending', 'signed', 'applied', 'stale'].includes(row.state))
|
|
62
|
+
fail('stored task observation changed');
|
|
63
|
+
const receipt = row.receipt_json === null ? undefined : parsePostActivationObservation(JSON.parse(row.receipt_json));
|
|
64
|
+
if (receipt && (controlPlaneDigest(receipt) !== row.receipt_digest || receipt.observationId !== id || receipt.evidence.probeDigest !== batch.digest))
|
|
65
|
+
fail('stored task observation receipt changed');
|
|
66
|
+
if ((row.state === 'signed' || row.state === 'applied') && !receipt)
|
|
67
|
+
fail('stored task observation receipt missing');
|
|
68
|
+
return Object.freeze({ batch, state: row.state, ...(receipt === undefined ? {} : { receipt }) });
|
|
69
|
+
}
|
|
70
|
+
/** Read-only durable cohort validation; canonical quality is fenced by the Host. */
|
|
71
|
+
export function readTaskObservationContext(db, id) {
|
|
72
|
+
if (Number(db.prepare('PRAGMA user_version').get()?.user_version) !== controlPlaneSchemaVersion)
|
|
73
|
+
fail('task observation database version is invalid');
|
|
74
|
+
const record = getTaskObservationRecord(db, id);
|
|
75
|
+
if (!record)
|
|
76
|
+
return fail('task observation absent');
|
|
77
|
+
const { batch } = record;
|
|
78
|
+
const adopted = readOwnerSourceAdoptionPlan(db, batch.planId), plan = adopted.plan;
|
|
79
|
+
if (batch.planDigest !== plan.digest || batch.installationId !== plan.installationId || batch.profilePath !== plan.target.profilePath)
|
|
80
|
+
fail('task observation plan changed');
|
|
81
|
+
for (const key of ['authorityId', 'authorityHash', 'principalId', 'principalRecordId', 'principalVersion', 'workspace', 'agentPreset']) {
|
|
82
|
+
if (batch.owner[key] !== adopted.source.owner[key])
|
|
83
|
+
fail('task observation source owner changed');
|
|
84
|
+
}
|
|
85
|
+
const unsettled = db.prepare(`SELECT 1 FROM activation_plans WHERE target_path=? AND status IN (
|
|
86
|
+
'staging','awaiting-reload','awaiting-readiness','awaiting-effect-blocked-replay','awaiting-shadow',
|
|
87
|
+
'awaiting-canary','awaiting-soak','awaiting-health','commit-pending','rollback-pending') LIMIT 1`).get(plan.target.profilePath);
|
|
88
|
+
const latest = db.prepare(`SELECT checkpoint.plan_id,checkpoint.exposure_order,checkpoint.successful_order
|
|
89
|
+
FROM activation_deployment_checkpoints checkpoint JOIN activation_plans candidate ON candidate.id=checkpoint.plan_id
|
|
90
|
+
WHERE candidate.target_path=? ORDER BY checkpoint.exposure_order DESC LIMIT 1`).get(plan.target.profilePath);
|
|
91
|
+
const watch = db.prepare('SELECT state,activation_id,fence,started_at,last_host_generation FROM activation_watch WHERE plan_id=?').get(plan.id);
|
|
92
|
+
if (unsettled || latest?.plan_id !== plan.id || latest.exposure_order !== latest.successful_order || plan.status !== 'activated'
|
|
93
|
+
|| !plan.activation || !watch || watch.state !== 'watching' || watch.activation_id !== plan.activation.id
|
|
94
|
+
|| watch.fence !== plan.activation.fence || watch.last_host_generation !== batch.hostGeneration)
|
|
95
|
+
return fail('task observation deployment is no longer current');
|
|
96
|
+
const deployments = batch.votes.map(vote => {
|
|
97
|
+
const row = db.prepare('SELECT record_json,record_digest,plan_id FROM foreground_deployments WHERE inbox_id=?').get(vote.inboxId);
|
|
98
|
+
if (!row || row.plan_id !== plan.id || Buffer.byteLength(row.record_json) > 262_144)
|
|
99
|
+
return fail('task observation deployment absent');
|
|
100
|
+
const item = JSON.parse(row.record_json);
|
|
101
|
+
assertForegroundDeployment(item);
|
|
102
|
+
if (controlPlaneDigest(item) !== row.record_digest || row.record_digest !== vote.deploymentDigest
|
|
103
|
+
|| item.state !== 'observed' || !item.execution || item.execution.completedAt !== vote.completedAt || item.task.inboxId !== vote.inboxId
|
|
104
|
+
|| item.task.owner.principalRecordId !== batch.owner.principalRecordId || item.task.owner.principalVersion !== batch.owner.principalVersion
|
|
105
|
+
|| item.task.scope.workspace !== batch.owner.workspace || item.task.scope.preset !== batch.owner.agentPreset
|
|
106
|
+
|| item.task.dispatchedAt < watch.started_at || item.readiness.planId !== plan.id || item.readiness.planDigest !== plan.digest
|
|
107
|
+
|| item.readiness.hostGeneration !== batch.hostGeneration || item.readiness.installationId !== batch.installationId
|
|
108
|
+
|| item.readiness.profilePath !== batch.profilePath || item.readiness.activationId !== plan.activation.id
|
|
109
|
+
|| item.readiness.fence !== plan.activation.fence || !same(item.readiness.exact, { package: plan.candidate.package, version: plan.candidate.version, integrity: plan.candidate.integrity }))
|
|
110
|
+
fail('task observation deployment witness changed');
|
|
111
|
+
return item;
|
|
112
|
+
});
|
|
113
|
+
return { record, plan, source: adopted.source, deployments };
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=task-observation-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-observation-store.js","sourceRoot":"","sources":["../src/task-observation-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { EvaluationCanonicalLearningEvidenceTuple } from '@dsh-enhanced/assistant-evaluation';
|
|
2
|
+
import type { SourceJobOwnerReceipt } from './source-job-types.js';
|
|
3
|
+
import type { SourceApprovalClientConfig } from './source-approval-client.js';
|
|
4
|
+
import type { PostActivationObservationReceipt } from './types.js';
|
|
5
|
+
export type TaskObservationOwner = Pick<SourceJobOwnerReceipt, 'authorityId' | 'authorityHash' | 'principalId' | 'principalRecordId' | 'principalVersion' | 'workspace' | 'agentPreset'>;
|
|
6
|
+
export interface TaskObservationPolicy {
|
|
7
|
+
id: string;
|
|
8
|
+
expiresAt: number;
|
|
9
|
+
maximumObservations: number;
|
|
10
|
+
minimumChecks: number;
|
|
11
|
+
maximumChecks: number;
|
|
12
|
+
lookbackMs: number;
|
|
13
|
+
}
|
|
14
|
+
export interface TaskObservationConfig {
|
|
15
|
+
policy: TaskObservationPolicy;
|
|
16
|
+
scope: {
|
|
17
|
+
ownerRouteId: string;
|
|
18
|
+
principalId: string;
|
|
19
|
+
workspace: string;
|
|
20
|
+
preset: string;
|
|
21
|
+
};
|
|
22
|
+
profilePath: string;
|
|
23
|
+
timeoutMs: number;
|
|
24
|
+
budgetId: string;
|
|
25
|
+
budgetAmount: number;
|
|
26
|
+
authority: SourceApprovalClientConfig;
|
|
27
|
+
}
|
|
28
|
+
/** Facts reread from trusted Delivery/Evaluation, never an Agent's rating. */
|
|
29
|
+
export interface TaskObservationVote {
|
|
30
|
+
inboxId: string;
|
|
31
|
+
outcomeId: string;
|
|
32
|
+
projection: EvaluationCanonicalLearningEvidenceTuple;
|
|
33
|
+
sourceDigest: string;
|
|
34
|
+
deploymentDigest: string;
|
|
35
|
+
status: 'achieved' | 'not-achieved';
|
|
36
|
+
completedAt: number;
|
|
37
|
+
}
|
|
38
|
+
export interface TaskObservationBatch {
|
|
39
|
+
schemaVersion: 1;
|
|
40
|
+
kind: 'dsh-task-observation';
|
|
41
|
+
id: string;
|
|
42
|
+
digest: string;
|
|
43
|
+
lane: string;
|
|
44
|
+
configDigest: string;
|
|
45
|
+
trustDigest: string;
|
|
46
|
+
planId: string;
|
|
47
|
+
planDigest: string;
|
|
48
|
+
installationId: string;
|
|
49
|
+
profilePath: string;
|
|
50
|
+
owner: TaskObservationOwner;
|
|
51
|
+
policy: TaskObservationPolicy;
|
|
52
|
+
hostGeneration: number;
|
|
53
|
+
votes: readonly TaskObservationVote[];
|
|
54
|
+
createdAt: number;
|
|
55
|
+
expiresAt: number;
|
|
56
|
+
}
|
|
57
|
+
export interface TaskObservationRecord {
|
|
58
|
+
batch: TaskObservationBatch;
|
|
59
|
+
state: 'pending' | 'signed' | 'applied' | 'stale';
|
|
60
|
+
receipt?: PostActivationObservationReceipt;
|
|
61
|
+
}
|
|
62
|
+
export interface TaskObservationRequest {
|
|
63
|
+
protocol: 'dsh-task-observation/v1';
|
|
64
|
+
observationId: string;
|
|
65
|
+
observationDigest: string;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=task-observation-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-observation-types.d.ts","sourceRoot":"","sources":["../src/task-observation-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wCAAwC,EAAE,MAAM,oCAAoC,CAAA;AAClG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAC7E,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAA;AAElE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,eAAe,GAAG,aAAa,GAC1G,mBAAmB,GAAG,kBAAkB,GAAG,WAAW,GAAG,aAAa,CAAC,CAAA;AAE3E,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,qBAAqB,CAAA;IAC7B,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACvF,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,0BAA0B,CAAA;CACtC;AAED,8EAA8E;AAC9E,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,wCAAwC,CAAA;IACpD,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,UAAU,GAAG,cAAc,CAAA;IACnC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,CAAC,CAAA;IAChB,IAAI,EAAE,sBAAsB,CAAA;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,oBAAoB,CAAA;IAC3B,MAAM,EAAE,qBAAqB,CAAA;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;IACjD,OAAO,CAAC,EAAE,gCAAgC,CAAA;CAC3C;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,yBAAyB,CAAA;IACnC,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-observation-types.js","sourceRoot":"","sources":["../src/task-observation-types.ts"],"names":[],"mappings":""}
|
package/lib/trust.d.ts
CHANGED
|
@@ -42,6 +42,9 @@ export interface PluginControlTrustConfig {
|
|
|
42
42
|
releaseRegistry?: {
|
|
43
43
|
id: string;
|
|
44
44
|
locator: string;
|
|
45
|
+
protocol?: 'dsh' | 'npm';
|
|
46
|
+
caPins: readonly string[];
|
|
47
|
+
tokenEnvironment: string | null;
|
|
45
48
|
};
|
|
46
49
|
releaseReceiptTtlMs: number;
|
|
47
50
|
releaseAdapters?: Partial<Record<SourceReleasePhase, SourceReleaseAdapterIdentity & {
|