@dsh-enhanced/plugin-control-plane 0.1.31 → 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.
Files changed (199) hide show
  1. package/README.md +352 -4
  2. package/bin/dsh-local-release-adapter.js +80 -16
  3. package/bin/dsh-npm-registry-adapter.js +613 -0
  4. package/bin/dsh-source-adoption-authority.js +12 -0
  5. package/bin/dsh-source-approval-authority.js +16 -0
  6. package/bin/dsh-source-release-authority.js +12 -0
  7. package/bin/dsh-systemd-host-attestor.js +707 -0
  8. package/bin/dsh-task-observation-authority.js +15 -0
  9. package/lib/adapter-process.d.ts +23 -0
  10. package/lib/adapter-process.d.ts.map +1 -0
  11. package/lib/adapter-process.js +305 -0
  12. package/lib/adapter-process.js.map +1 -0
  13. package/lib/adoption-coordinator.d.ts +63 -0
  14. package/lib/adoption-coordinator.d.ts.map +1 -0
  15. package/lib/adoption-coordinator.js +241 -0
  16. package/lib/adoption-coordinator.js.map +1 -0
  17. package/lib/adoption-handoff.d.ts +16 -0
  18. package/lib/adoption-handoff.d.ts.map +1 -0
  19. package/lib/adoption-handoff.js +11 -0
  20. package/lib/adoption-handoff.js.map +1 -0
  21. package/lib/attestation.d.ts.map +1 -1
  22. package/lib/attestation.js +49 -1
  23. package/lib/attestation.js.map +1 -1
  24. package/lib/catalog.d.ts.map +1 -1
  25. package/lib/catalog.js +29 -2
  26. package/lib/catalog.js.map +1 -1
  27. package/lib/cli.d.ts +33 -9
  28. package/lib/cli.d.ts.map +1 -1
  29. package/lib/cli.js +624 -178
  30. package/lib/cli.js.map +1 -1
  31. package/lib/deployment-readiness.d.ts +38 -0
  32. package/lib/deployment-readiness.d.ts.map +1 -0
  33. package/lib/deployment-readiness.js +154 -0
  34. package/lib/deployment-readiness.js.map +1 -0
  35. package/lib/effect-blocked-replay.d.ts +81 -0
  36. package/lib/effect-blocked-replay.d.ts.map +1 -0
  37. package/lib/effect-blocked-replay.js +259 -0
  38. package/lib/effect-blocked-replay.js.map +1 -0
  39. package/lib/errors.d.ts +6 -0
  40. package/lib/errors.d.ts.map +1 -0
  41. package/lib/errors.js +9 -0
  42. package/lib/errors.js.map +1 -0
  43. package/lib/foreground-deployment-runtime.d.ts +20 -0
  44. package/lib/foreground-deployment-runtime.d.ts.map +1 -0
  45. package/lib/foreground-deployment-runtime.js +79 -0
  46. package/lib/foreground-deployment-runtime.js.map +1 -0
  47. package/lib/foreground-deployment.d.ts +17 -0
  48. package/lib/foreground-deployment.d.ts.map +1 -0
  49. package/lib/foreground-deployment.js +43 -0
  50. package/lib/foreground-deployment.js.map +1 -0
  51. package/lib/host-attestor.d.ts +1 -1
  52. package/lib/host-attestor.d.ts.map +1 -1
  53. package/lib/host-attestor.js +51 -57
  54. package/lib/host-attestor.js.map +1 -1
  55. package/lib/index.d.ts +25 -2
  56. package/lib/index.d.ts.map +1 -1
  57. package/lib/index.js +11 -2
  58. package/lib/index.js.map +1 -1
  59. package/lib/npm-publish.d.ts +25 -0
  60. package/lib/npm-publish.d.ts.map +1 -0
  61. package/lib/npm-publish.js +280 -0
  62. package/lib/npm-publish.js.map +1 -0
  63. package/lib/owner-task-gap-types.d.ts +21 -0
  64. package/lib/owner-task-gap-types.d.ts.map +1 -0
  65. package/lib/owner-task-gap-types.js +2 -0
  66. package/lib/owner-task-gap-types.js.map +1 -0
  67. package/lib/owner-task-gaps.d.ts +24 -0
  68. package/lib/owner-task-gaps.d.ts.map +1 -0
  69. package/lib/owner-task-gaps.js +74 -0
  70. package/lib/owner-task-gaps.js.map +1 -0
  71. package/lib/post-activation.d.ts +33 -0
  72. package/lib/post-activation.d.ts.map +1 -0
  73. package/lib/post-activation.js +219 -0
  74. package/lib/post-activation.js.map +1 -0
  75. package/lib/registry-fetch.d.ts +50 -0
  76. package/lib/registry-fetch.d.ts.map +1 -0
  77. package/lib/registry-fetch.js +267 -0
  78. package/lib/registry-fetch.js.map +1 -0
  79. package/lib/release.d.ts +4 -4
  80. package/lib/release.d.ts.map +1 -1
  81. package/lib/release.js +142 -56
  82. package/lib/release.js.map +1 -1
  83. package/lib/replay-endpoint-protocol.d.ts +65 -0
  84. package/lib/replay-endpoint-protocol.d.ts.map +1 -0
  85. package/lib/replay-endpoint-protocol.js +183 -0
  86. package/lib/replay-endpoint-protocol.js.map +1 -0
  87. package/lib/replay-endpoint.d.ts +7 -0
  88. package/lib/replay-endpoint.d.ts.map +1 -0
  89. package/lib/replay-endpoint.js +193 -0
  90. package/lib/replay-endpoint.js.map +1 -0
  91. package/lib/replay-grant.d.ts +62 -0
  92. package/lib/replay-grant.d.ts.map +1 -0
  93. package/lib/replay-grant.js +208 -0
  94. package/lib/replay-grant.js.map +1 -0
  95. package/lib/replay-journal.d.ts +25 -0
  96. package/lib/replay-journal.d.ts.map +1 -0
  97. package/lib/replay-journal.js +275 -0
  98. package/lib/replay-journal.js.map +1 -0
  99. package/lib/runtime-observer-protocol.d.ts +63 -0
  100. package/lib/runtime-observer-protocol.d.ts.map +1 -0
  101. package/lib/runtime-observer-protocol.js +280 -0
  102. package/lib/runtime-observer-protocol.js.map +1 -0
  103. package/lib/runtime-observer.d.ts +8 -0
  104. package/lib/runtime-observer.d.ts.map +1 -0
  105. package/lib/runtime-observer.js +182 -0
  106. package/lib/runtime-observer.js.map +1 -0
  107. package/lib/service.d.ts +145 -1
  108. package/lib/service.d.ts.map +1 -1
  109. package/lib/service.js +734 -6
  110. package/lib/service.js.map +1 -1
  111. package/lib/source-adoption-authority.d.ts +65 -0
  112. package/lib/source-adoption-authority.d.ts.map +1 -0
  113. package/lib/source-adoption-authority.js +271 -0
  114. package/lib/source-adoption-authority.js.map +1 -0
  115. package/lib/source-adoption-runner.d.ts +28 -0
  116. package/lib/source-adoption-runner.d.ts.map +1 -0
  117. package/lib/source-adoption-runner.js +197 -0
  118. package/lib/source-adoption-runner.js.map +1 -0
  119. package/lib/source-approval-authority.d.ts +50 -0
  120. package/lib/source-approval-authority.d.ts.map +1 -0
  121. package/lib/source-approval-authority.js +412 -0
  122. package/lib/source-approval-authority.js.map +1 -0
  123. package/lib/source-approval-client.d.ts +32 -0
  124. package/lib/source-approval-client.d.ts.map +1 -0
  125. package/lib/source-approval-client.js +175 -0
  126. package/lib/source-approval-client.js.map +1 -0
  127. package/lib/source-build.d.ts +60 -0
  128. package/lib/source-build.d.ts.map +1 -0
  129. package/lib/source-build.js +311 -0
  130. package/lib/source-build.js.map +1 -0
  131. package/lib/source-context.d.ts +24 -0
  132. package/lib/source-context.d.ts.map +1 -0
  133. package/lib/source-context.js +99 -0
  134. package/lib/source-context.js.map +1 -0
  135. package/lib/source-job-types.d.ts +87 -0
  136. package/lib/source-job-types.d.ts.map +1 -0
  137. package/lib/source-job-types.js +2 -0
  138. package/lib/source-job-types.js.map +1 -0
  139. package/lib/source-jobs.d.ts +113 -0
  140. package/lib/source-jobs.d.ts.map +1 -0
  141. package/lib/source-jobs.js +535 -0
  142. package/lib/source-jobs.js.map +1 -0
  143. package/lib/source-release-authority.d.ts +35 -0
  144. package/lib/source-release-authority.d.ts.map +1 -0
  145. package/lib/source-release-authority.js +271 -0
  146. package/lib/source-release-authority.js.map +1 -0
  147. package/lib/source-release-client.d.ts +10 -0
  148. package/lib/source-release-client.d.ts.map +1 -0
  149. package/lib/source-release-client.js +24 -0
  150. package/lib/source-release-client.js.map +1 -0
  151. package/lib/source-release-runner.d.ts +31 -0
  152. package/lib/source-release-runner.d.ts.map +1 -0
  153. package/lib/source-release-runner.js +125 -0
  154. package/lib/source-release-runner.js.map +1 -0
  155. package/lib/source-versioning.d.ts +24 -0
  156. package/lib/source-versioning.d.ts.map +1 -0
  157. package/lib/source-versioning.js +213 -0
  158. package/lib/source-versioning.js.map +1 -0
  159. package/lib/source-workspace.d.ts +117 -0
  160. package/lib/source-workspace.d.ts.map +1 -0
  161. package/lib/source-workspace.js +458 -0
  162. package/lib/source-workspace.js.map +1 -0
  163. package/lib/sqlite.d.ts +1 -1
  164. package/lib/sqlite.d.ts.map +1 -1
  165. package/lib/sqlite.js +509 -7
  166. package/lib/sqlite.js.map +1 -1
  167. package/lib/store.d.ts +229 -6
  168. package/lib/store.d.ts.map +1 -1
  169. package/lib/store.js +2431 -383
  170. package/lib/store.js.map +1 -1
  171. package/lib/task-observation-authority.d.ts +29 -0
  172. package/lib/task-observation-authority.d.ts.map +1 -0
  173. package/lib/task-observation-authority.js +370 -0
  174. package/lib/task-observation-authority.js.map +1 -0
  175. package/lib/task-observation-client.d.ts +4 -0
  176. package/lib/task-observation-client.d.ts.map +1 -0
  177. package/lib/task-observation-client.js +20 -0
  178. package/lib/task-observation-client.js.map +1 -0
  179. package/lib/task-observation-runtime.d.ts +59 -0
  180. package/lib/task-observation-runtime.d.ts.map +1 -0
  181. package/lib/task-observation-runtime.js +331 -0
  182. package/lib/task-observation-runtime.js.map +1 -0
  183. package/lib/task-observation-store.d.ts +17 -0
  184. package/lib/task-observation-store.d.ts.map +1 -0
  185. package/lib/task-observation-store.js +115 -0
  186. package/lib/task-observation-store.js.map +1 -0
  187. package/lib/task-observation-types.d.ts +67 -0
  188. package/lib/task-observation-types.d.ts.map +1 -0
  189. package/lib/task-observation-types.js +2 -0
  190. package/lib/task-observation-types.js.map +1 -0
  191. package/lib/trust.d.ts +3 -0
  192. package/lib/trust.d.ts.map +1 -1
  193. package/lib/trust.js +0 -0
  194. package/lib/trust.js.map +1 -1
  195. package/lib/types.d.ts +275 -8
  196. package/lib/types.d.ts.map +1 -1
  197. package/lib/version.d.ts +1 -1
  198. package/lib/version.js +1 -1
  199. package/package.json +40 -5
@@ -0,0 +1,81 @@
1
+ import { Context } from '@deepseek-ai/cordis';
2
+ import type { ToolExecutionInput } from '@deepseek-ai/dsh-tools';
3
+ import { type RuntimeObservation, type RuntimeObserverConfig } from './runtime-observer-protocol.js';
4
+ type Agent = NonNullable<ToolExecutionInput['agent']>;
5
+ export type ReplayCase = {
6
+ id: string;
7
+ kind: 'tool';
8
+ name: string;
9
+ arguments: Record<string, unknown>;
10
+ } | {
11
+ id: string;
12
+ kind: 'delivery';
13
+ text: string;
14
+ };
15
+ export interface EffectBlockedReplayInput {
16
+ /** A fresh, idle native Agent owned by the caller. This operation consumes it. */
17
+ handle: {
18
+ agent: Agent;
19
+ dispose(): Promise<void>;
20
+ };
21
+ operationId: string;
22
+ requestDigest: string;
23
+ cases: readonly ReplayCase[];
24
+ expiresAt: number;
25
+ signal: AbortSignal;
26
+ }
27
+ export interface ReplayAttempt {
28
+ caseId: string;
29
+ kind: 'tool' | 'delivery';
30
+ callId: string;
31
+ inputDigest: string;
32
+ blockedAt: 'native-tool-guard' | 'delivery-reply-admission';
33
+ observedAt: number;
34
+ resultDigest: string;
35
+ }
36
+ export interface EffectBlockedReplayResult {
37
+ schemaVersion: 1;
38
+ kind: 'dsh-effect-blocked-replay-observation';
39
+ operationId: string;
40
+ requestDigest: string;
41
+ caseDigest: string;
42
+ sessionId: string;
43
+ runtime: RuntimeObservation;
44
+ runtimeDigest: string;
45
+ attempts: ReplayAttempt[];
46
+ completedAt: number;
47
+ quiescent: true;
48
+ }
49
+ /** Runtime identity excludes freshness/challenge fields, never entry/provider epochs. */
50
+ export declare function replayRuntimeDigest(sample: RuntimeObservation): string;
51
+ export declare function validateReplayCases(input: unknown): {
52
+ cases: ReplayCase[];
53
+ caseDigest: string;
54
+ };
55
+ /**
56
+ * Host-only finite rehearsal. It issues no Host attestation and never changes an
57
+ * activation plan. Native monotonic guards block tool bodies; the current
58
+ * Delivery provider blocks actual reply admission before any Outbox write.
59
+ * This is not an OS sandbox or a guarantee about arbitrary plugin JS/hooks.
60
+ */
61
+ export declare class EffectBlockedReplayRuntime {
62
+ private readonly ctx;
63
+ private readonly states;
64
+ private readonly operations;
65
+ private readonly flights;
66
+ private readonly cancellations;
67
+ private readonly sample;
68
+ private readonly config;
69
+ private readonly providers;
70
+ private closed;
71
+ constructor(ctx: Context, input: RuntimeObserverConfig);
72
+ private delivery;
73
+ private guard;
74
+ run(input: EffectBlockedReplayInput): Promise<EffectBlockedReplayResult>;
75
+ private execute;
76
+ /** Cached observations remain usable only in this exact sampler/provider generation. */
77
+ isCurrent(result: EffectBlockedReplayResult): boolean;
78
+ private assertProviders;
79
+ }
80
+ export {};
81
+ //# sourceMappingURL=effect-blocked-replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-blocked-replay.d.ts","sourceRoot":"","sources":["../src/effect-blocked-replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,259 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { Context } from '@deepseek-ai/cordis';
3
+ import { scopeOf } from '@deepseek-ai/dsh-scope';
4
+ import { createRuntimeSampler } from './runtime-observer.js';
5
+ import { runtimeConfigDigest, validateRuntimeObserverConfig } from './runtime-observer-protocol.js';
6
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$/u;
7
+ const DENIAL = 'plugin-control-plane: effect-blocked replay tool denial';
8
+ function fail(message) { throw new Error(`effect-blocked replay: ${message}`); }
9
+ /** Runtime identity excludes freshness/challenge fields, never entry/provider epochs. */
10
+ export function replayRuntimeDigest(sample) {
11
+ return runtimeConfigDigest({ observerId: sample.observerId, observerConfigDigest: sample.observerConfigDigest,
12
+ processId: sample.processId, invocationId: sample.invocationId, profilePath: sample.profilePath, entries: sample.entries });
13
+ }
14
+ export function validateReplayCases(input) {
15
+ // Validate before taking ownership. JSON getters, cycles and oversized input
16
+ // are rejected by the bounded digest, then cloned to freeze the case set.
17
+ const caseDigest = runtimeConfigDigest(input);
18
+ const cases = structuredClone(input);
19
+ if (!Array.isArray(cases) || cases.length < 2 || cases.length > 32
20
+ || !cases.some(value => value?.kind === 'tool') || !cases.some(value => value?.kind === 'delivery'))
21
+ fail('two to 32 cases of both effect classes required');
22
+ const ids = new Set();
23
+ for (const item of cases) {
24
+ if (!item || typeof item.id !== 'string' || !ID.test(item.id) || ids.has(item.id))
25
+ fail('case identity is invalid or repeated');
26
+ ids.add(item.id);
27
+ if (item.kind === 'tool') {
28
+ if (typeof item.name !== 'string' || !/^[A-Za-z][A-Za-z0-9_-]{0,99}$/u.test(item.name)
29
+ || !item.arguments || typeof item.arguments !== 'object' || Array.isArray(item.arguments)
30
+ || Object.keys(item).sort().join(',') !== 'arguments,id,kind,name')
31
+ fail('tool case invalid');
32
+ }
33
+ else if (item.kind === 'delivery') {
34
+ if (typeof item.text !== 'string' || !item.text.length || Buffer.byteLength(item.text) > 4096
35
+ || Object.keys(item).sort().join(',') !== 'id,kind,text')
36
+ fail('delivery case invalid');
37
+ }
38
+ else
39
+ fail('unknown effect class');
40
+ }
41
+ return { cases, caseDigest };
42
+ }
43
+ /**
44
+ * Host-only finite rehearsal. It issues no Host attestation and never changes an
45
+ * activation plan. Native monotonic guards block tool bodies; the current
46
+ * Delivery provider blocks actual reply admission before any Outbox write.
47
+ * This is not an OS sandbox or a guarantee about arbitrary plugin JS/hooks.
48
+ */
49
+ export class EffectBlockedReplayRuntime {
50
+ ctx;
51
+ states = new WeakMap();
52
+ operations = new Set();
53
+ flights = new Set();
54
+ cancellations = new Set();
55
+ sample;
56
+ config;
57
+ providers;
58
+ closed = false;
59
+ constructor(ctx, input) {
60
+ this.ctx = ctx;
61
+ validateRuntimeObserverConfig(input);
62
+ this.config = structuredClone(input);
63
+ if (scopeOf(ctx) !== undefined)
64
+ fail('runtime must belong to an unscoped Host Fiber, not an Agent');
65
+ if (typeof ctx.tools?.guard !== 'function' || !ctx.get('loader', false))
66
+ fail('native Tools and Loader required');
67
+ this.delivery();
68
+ this.providers = ['tools', 'loader', 'assistantDelivery', 'agents'].map(name => {
69
+ const implementation = ctx.reflect.store[ctx[Context.isolate][name]];
70
+ if (!implementation)
71
+ fail(`missing ${name} provider`);
72
+ return { name, implementation, store: implementation.fiber.store };
73
+ });
74
+ this.sample = createRuntimeSampler(ctx, this.config);
75
+ ctx.effect(() => {
76
+ const remove = ctx.tools.guard(execution => this.guard(execution));
77
+ return async () => {
78
+ this.closed = true;
79
+ for (const abort of this.cancellations)
80
+ abort.abort();
81
+ // Keep the monotonic guard until all admitted native calls settle.
82
+ await Promise.allSettled(this.flights);
83
+ remove();
84
+ };
85
+ }, 'plugin-control-plane.effect-blocked-replay');
86
+ }
87
+ delivery() {
88
+ const value = this.ctx.get('assistantDelivery', false);
89
+ if (!value || typeof value.blockAgentRepliesForReplay !== 'function' || typeof value.reply !== 'function')
90
+ fail('current Delivery replay admission API required');
91
+ return value;
92
+ }
93
+ guard(execution) {
94
+ if (!execution.agent)
95
+ return;
96
+ const state = this.states.get(execution.agent);
97
+ if (!state)
98
+ return;
99
+ const expected = state.expected;
100
+ const inputDigest = runtimeConfigDigest(execution.arguments);
101
+ if (!expected || state.observed || expected.callId !== execution.callId || expected.name !== execution.name
102
+ || expected.inputDigest !== inputDigest || state.abort.signal.aborted || this.closed) {
103
+ state.violation = true;
104
+ state.abort.abort();
105
+ }
106
+ else
107
+ state.observed = { observedAt: Date.now(), inputDigest };
108
+ // Tombstones stay in the WeakMap after success, failure or cancellation.
109
+ return DENIAL;
110
+ }
111
+ run(input) {
112
+ if (this.closed || this.operations.size >= 1024 || typeof input.operationId !== 'string' || !ID.test(input.operationId)
113
+ || !/^[a-f0-9]{64}$/u.test(input.requestDigest) || this.operations.has(input.operationId))
114
+ fail('closed, duplicate or invalid operation');
115
+ if (!Number.isSafeInteger(input.expiresAt) || input.expiresAt <= Date.now() || input.expiresAt > Date.now() + 60_000)
116
+ fail('deadline must be within 60 seconds');
117
+ const { cases, caseDigest } = validateReplayCases(input.cases);
118
+ const agent = input.handle.agent;
119
+ if (!agent || typeof input.handle.dispose !== 'function' || agent.status !== 'idle'
120
+ || scopeOf(agent.ctx) !== agent || this.states.has(agent))
121
+ fail('fresh idle native Agent handle required');
122
+ if (agent.inbox.hasPending || agent.session.snapshotEvents().some(event => ['turn/start', 'user/message', 'assistant/message', 'tool/result'].includes(event.type)))
123
+ fail('replay requires an unused Agent session');
124
+ this.assertProviders();
125
+ if (this.ctx.agents.get(agent.id) !== agent)
126
+ fail('Agent is not registered in this Host');
127
+ for (const name of ['tools', 'assistantDelivery']) {
128
+ if (agent.ctx.reflect.store[agent.ctx[Context.isolate][name]] !== this.ctx.reflect.store[this.ctx[Context.isolate][name]])
129
+ fail(`Agent ${name} realm differs from replay Host`);
130
+ }
131
+ input.signal.throwIfAborted();
132
+ const state = { abort: new AbortController(), violation: false };
133
+ this.states.set(agent, state);
134
+ this.operations.add(input.operationId);
135
+ this.cancellations.add(state.abort);
136
+ const flight = this.execute({ ...input, cases }, caseDigest, state);
137
+ this.flights.add(flight);
138
+ void flight.finally(() => { this.flights.delete(flight); this.cancellations.delete(state.abort); }).catch(() => { });
139
+ return flight;
140
+ }
141
+ async execute(input, caseDigest, state) {
142
+ const agent = input.handle.agent;
143
+ const cancel = () => state.abort.abort();
144
+ input.signal.addEventListener('abort', cancel, { once: true });
145
+ const timer = setTimeout(cancel, Math.max(1, input.expiresAt - Date.now()));
146
+ let block;
147
+ let result;
148
+ const assertCurrent = () => {
149
+ state.abort.signal.throwIfAborted();
150
+ if (this.closed || state.violation || Date.now() >= input.expiresAt || agent.status !== 'idle' || agent.inbox.hasPending)
151
+ fail('replay was interrupted or changed');
152
+ this.assertProviders();
153
+ };
154
+ try {
155
+ assertCurrent();
156
+ const runtime = this.sample(randomBytes(32).toString('hex'));
157
+ if (!runtime.entries.every(entry => entry.active))
158
+ fail('candidate or dependency is inactive');
159
+ const runtimeDigest = replayRuntimeDigest(runtime);
160
+ const stable = () => {
161
+ assertCurrent();
162
+ if (replayRuntimeDigest(this.sample(randomBytes(32).toString('hex'))) !== runtimeDigest)
163
+ fail('candidate/provider generation changed');
164
+ };
165
+ const delivery = this.delivery();
166
+ block = delivery.blockAgentRepliesForReplay(agent, { operationId: input.operationId,
167
+ maximumAttempts: input.cases.filter(item => item.kind === 'delivery').length, expiresAt: input.expiresAt });
168
+ if (block.contract !== 'assistant-delivery/reply-replay-block/v1')
169
+ fail('reply blocker contract mismatch');
170
+ const attempts = [];
171
+ for (const item of input.cases) {
172
+ stable();
173
+ const callId = `${input.operationId}:${item.id}`;
174
+ if (item.kind === 'tool') {
175
+ const inputDigest = runtimeConfigDigest(item.arguments);
176
+ state.expected = { callId, name: item.name, inputDigest };
177
+ delete state.observed;
178
+ const outcome = await agent.ctx.tools.execute({ callId: callId, name: item.name,
179
+ arguments: item.arguments, agent, signal: state.abort.signal });
180
+ delete state.expected;
181
+ stable();
182
+ const observed = this.states.get(agent)?.observed;
183
+ if (!observed || !outcome.isError || outcome.error.message !== DENIAL)
184
+ throw new Error('effect-blocked replay: native monotonic denial was not observed');
185
+ attempts.push({ caseId: item.id, kind: item.kind, callId, inputDigest, blockedAt: 'native-tool-guard',
186
+ observedAt: observed.observedAt, resultDigest: runtimeConfigDigest(outcome) });
187
+ }
188
+ else {
189
+ const before = block.snapshot();
190
+ const reply = { idempotencyKey: callId, text: item.text, format: 'plain' };
191
+ const inputDigest = runtimeConfigDigest({ ...reply, modelPicker: null, permissionPicker: null, replyToEventId: null });
192
+ let denied = false;
193
+ try {
194
+ this.delivery().reply(agent, reply);
195
+ }
196
+ catch (error) {
197
+ denied = error instanceof Error && 'code' in error && error.code === 'reply-replay-blocked'
198
+ && 'operationId' in error && error.operationId === input.operationId;
199
+ }
200
+ const after = block.snapshot();
201
+ const attempt = after.attempts.at(-1);
202
+ stable();
203
+ if (!denied || before.invalidated || after.invalidated || before.status !== 'active' || !['active', 'attempt-limit'].includes(after.status) || after.operationId !== input.operationId
204
+ || after.attempts.length !== before.attempts.length + 1 || !attempt || !attempt.blocked
205
+ || attempt.sequence !== after.attempts.length || attempt.operationId !== input.operationId || attempt.inputDigest !== inputDigest) {
206
+ throw new Error('effect-blocked replay: actual Delivery reply denial was not observed');
207
+ }
208
+ attempts.push({ caseId: item.id, kind: item.kind, callId, inputDigest,
209
+ blockedAt: 'delivery-reply-admission', observedAt: attempt.observedAt, resultDigest: runtimeConfigDigest(attempt) });
210
+ }
211
+ }
212
+ stable();
213
+ result = { schemaVersion: 1, kind: 'dsh-effect-blocked-replay-observation', operationId: input.operationId,
214
+ requestDigest: input.requestDigest, caseDigest, sessionId: String(agent.session.id), runtime, runtimeDigest,
215
+ attempts, completedAt: Date.now(), quiescent: true };
216
+ }
217
+ finally {
218
+ delete state.expected;
219
+ block?.close();
220
+ state.abort.abort();
221
+ clearTimeout(timer);
222
+ input.signal.removeEventListener('abort', cancel);
223
+ // The caller hands over the native ownership capability, not a bare
224
+ // cached Agent. No observation escapes before that Agent is reclaimed.
225
+ await input.handle.dispose();
226
+ }
227
+ if (!result || state.violation || block?.snapshot().invalidated)
228
+ fail('unsettled or extra replay calls');
229
+ if (this.closed || input.signal.aborted || Date.now() >= input.expiresAt)
230
+ fail('replay expired during Agent cleanup');
231
+ this.assertProviders();
232
+ if (this.ctx.agents.get(agent.id) !== undefined)
233
+ fail('native Agent was not reclaimed');
234
+ if (replayRuntimeDigest(this.sample(randomBytes(32).toString('hex'))) !== result.runtimeDigest)
235
+ fail('candidate changed during Agent cleanup');
236
+ result.completedAt = Date.now();
237
+ return structuredClone(result);
238
+ }
239
+ /** Cached observations remain usable only in this exact sampler/provider generation. */
240
+ isCurrent(result) {
241
+ if (this.closed)
242
+ return false;
243
+ try {
244
+ this.assertProviders();
245
+ return replayRuntimeDigest(this.sample(randomBytes(32).toString('hex'))) === result.runtimeDigest;
246
+ }
247
+ catch {
248
+ return false;
249
+ }
250
+ }
251
+ assertProviders() {
252
+ for (const provider of this.providers) {
253
+ const current = this.ctx.reflect.store[this.ctx[Context.isolate][provider.name]];
254
+ if (current !== provider.implementation || current?.fiber.store !== provider.store)
255
+ fail(`${provider.name} provider changed`);
256
+ }
257
+ }
258
+ }
259
+ //# sourceMappingURL=effect-blocked-replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-blocked-replay.js","sourceRoot":"","sources":["../src/effect-blocked-replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type ControlPlaneCliErrorCode = 'ACTIVATION_BINDING' | 'EXECUTOR_FAILED' | 'EXECUTOR_OUTPUT_LIMIT' | 'EXECUTOR_TIMEOUT' | 'FILESYSTEM_STATE' | 'HOST_ATTESTATION_REQUIRED' | 'HOST_ATTESTOR_NOT_CONFIGURED' | 'INVALID_ARGUMENT' | 'LOCK_CONFLICT' | 'SOURCE_BOUNDARY';
2
+ export declare class ControlPlaneCliError extends Error {
3
+ readonly code: ControlPlaneCliErrorCode;
4
+ constructor(code: ControlPlaneCliErrorCode, message: string);
5
+ }
6
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAChC,oBAAoB,GACpB,iBAAiB,GACjB,uBAAuB,GACvB,kBAAkB,GAClB,kBAAkB,GAClB,2BAA2B,GAC3B,8BAA8B,GAC9B,kBAAkB,GAClB,eAAe,GACf,iBAAiB,CAAA;AAErB,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,wBAAwB;gBAA9B,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM;CAIrE"}
package/lib/errors.js ADDED
@@ -0,0 +1,9 @@
1
+ export class ControlPlaneCliError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(`plugin-control-plane[${code}]: ${message}`);
5
+ this.code = code;
6
+ this.name = 'ControlPlaneCliError';
7
+ }
8
+ }
9
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACxB;IAArB,YAAqB,IAA8B,EAAE,OAAe;QAClE,KAAK,CAAC,wBAAwB,IAAI,MAAM,OAAO,EAAE,CAAC,CAAA;QAD/B,SAAI,GAAJ,IAAI,CAA0B;QAEjD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { ForegroundTaskObservationRegistration } from '@dsh-enhanced/assistant-delivery';
2
+ import { type ControlPlaneStore } from './store.js';
3
+ import type { PluginControlTrustConfig } from './trust.js';
4
+ import type { RuntimeObservation } from './runtime-observer-protocol.js';
5
+ export interface ForegroundDeploymentConfig {
6
+ attestorJournalPath: string;
7
+ }
8
+ export declare function validateForegroundDeploymentConfig(value: ForegroundDeploymentConfig): void;
9
+ /** A changed trust file requires a fresh owning Fiber, never a stale key cache. */
10
+ export declare function foregroundTrustSnapshot(path: string): string;
11
+ export declare function createForegroundDeploymentObserver(input: {
12
+ config: ForegroundDeploymentConfig;
13
+ profilePath: string;
14
+ store: ControlPlaneStore;
15
+ trust: PluginControlTrustConfig;
16
+ sample(challenge: string): RuntimeObservation;
17
+ assertCurrent(): void;
18
+ owner: ForegroundTaskObservationRegistration['owner'];
19
+ }): ForegroundTaskObservationRegistration;
20
+ //# sourceMappingURL=foreground-deployment-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foreground-deployment-runtime.d.ts","sourceRoot":"","sources":["../src/foreground-deployment-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,kCAAkC,CAAA;AAG7F,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACvE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAExE,MAAM,WAAW,0BAA0B;IAAG,mBAAmB,EAAE,MAAM,CAAA;CAAE;AAE3E,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,0BAA0B,GAAG,IAAI,CAI1F;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS5D;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,MAAM,EAAE,0BAA0B,CAAA;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,iBAAiB,CAAA;IACxB,KAAK,EAAE,wBAAwB,CAAA;IAC/B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,CAAA;IAC7C,aAAa,IAAI,IAAI,CAAA;IACrB,KAAK,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAA;CACtD,GAAG,qCAAqC,CA0CxC"}
@@ -0,0 +1,79 @@
1
+ import { createHash, randomBytes, randomUUID } from 'node:crypto';
2
+ import { closeSync, constants, fstatSync, openSync, readFileSync, realpathSync } from 'node:fs';
3
+ import { isAbsolute, resolve } from 'node:path';
4
+ import { captureRetainedDeploymentReadiness } from './deployment-readiness.js';
5
+ import {} from './foreground-deployment.js';
6
+ import { controlPlaneDigest } from './store.js';
7
+ export function validateForegroundDeploymentConfig(value) {
8
+ if (!value || Object.keys(value).join(',') !== 'attestorJournalPath' || typeof value.attestorJournalPath !== 'string'
9
+ || value.attestorJournalPath.length > 4096 || !isAbsolute(value.attestorJournalPath)
10
+ || resolve(value.attestorJournalPath) !== value.attestorJournalPath)
11
+ throw new Error('invalid foregroundDeployments configuration');
12
+ }
13
+ /** A changed trust file requires a fresh owning Fiber, never a stale key cache. */
14
+ export function foregroundTrustSnapshot(path) {
15
+ if (realpathSync(path) !== path)
16
+ throw new Error('foreground trust path is not canonical');
17
+ const descriptor = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
18
+ try {
19
+ const stat = fstatSync(descriptor);
20
+ if (!stat.isFile() || stat.nlink !== 1 || stat.size > 65_536 || (stat.mode & 0o077) !== 0
21
+ || (process.getuid && stat.uid !== process.getuid()))
22
+ throw new Error('unsafe foreground trust file');
23
+ return createHash('sha256').update(readFileSync(descriptor)).digest('hex');
24
+ }
25
+ finally {
26
+ closeSync(descriptor);
27
+ }
28
+ }
29
+ export function createForegroundDeploymentObserver(input) {
30
+ const capture = (task) => {
31
+ input.assertCurrent();
32
+ const runtime = input.sample(randomBytes(32).toString('hex'));
33
+ if (runtime.observedAt < task.dispatchedAt || runtime.observedAt > Date.now())
34
+ throw new Error('foreground sample is not current');
35
+ return runtime;
36
+ };
37
+ return Object.freeze({
38
+ protocol: 'plugin-control-plane/foreground-observer/v1',
39
+ generation: randomUUID(), owner: input.owner,
40
+ begin(task) {
41
+ return input.store.withForegroundDeployment(task, input.profilePath, (plan, operation) => {
42
+ const begin = capture(task);
43
+ if (!operation.receipt)
44
+ throw new Error('foreground deployment lacks signed readiness');
45
+ const readiness = captureRetainedDeploymentReadiness({ plan, operation, receipt: operation.receipt, trust: input.trust,
46
+ journalPath: input.config.attestorJournalPath, runtime: begin });
47
+ input.assertCurrent();
48
+ input.store.beginForegroundDeployment({ schemaVersion: 1, task: structuredClone(task), readiness, begin, state: 'pending' });
49
+ return task.inboxId;
50
+ });
51
+ },
52
+ completed(handle, task, execution) {
53
+ input.assertCurrent();
54
+ if (handle !== task.inboxId)
55
+ throw new Error('foreground deployment handle differs');
56
+ const prior = input.store.getForegroundDeployment(task.inboxId);
57
+ if (!prior || prior.state !== 'pending' || controlPlaneDigest(prior.task) !== controlPlaneDigest(task))
58
+ throw new Error('foreground deployment dispatch differs');
59
+ try {
60
+ input.store.withForegroundDeployment(task, input.profilePath, (plan, operation) => {
61
+ const end = capture(task);
62
+ if (!operation.receipt || !execution.quiescent || execution.status !== 'succeeded')
63
+ throw new Error('foreground deployment completion unknown');
64
+ const readiness = captureRetainedDeploymentReadiness({ plan, operation, receipt: operation.receipt, trust: input.trust,
65
+ journalPath: input.config.attestorJournalPath, runtime: end });
66
+ if (controlPlaneDigest(readiness) !== controlPlaneDigest(prior.readiness))
67
+ throw new Error('foreground deployment changed during execution');
68
+ input.assertCurrent();
69
+ input.store.finishForegroundDeployment({ ...prior, state: 'observed', end, execution: structuredClone(execution) });
70
+ });
71
+ }
72
+ catch {
73
+ input.assertCurrent();
74
+ input.store.finishForegroundDeployment({ ...prior, state: 'unknown', execution: structuredClone(execution) });
75
+ }
76
+ },
77
+ });
78
+ }
79
+ //# sourceMappingURL=foreground-deployment-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foreground-deployment-runtime.js","sourceRoot":"","sources":["../src/foreground-deployment-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ForegroundTaskIdentity, ForegroundExecution } from '@dsh-enhanced/assistant-delivery';
2
+ import type { DeploymentReadinessBinding } from './deployment-readiness.js';
3
+ import { type RuntimeObservation } from './runtime-observer-protocol.js';
4
+ /** A deployment cohort witness; it does not claim a tool call or task quality. */
5
+ export interface ForegroundDeploymentRecord {
6
+ schemaVersion: 1;
7
+ task: ForegroundTaskIdentity;
8
+ readiness: DeploymentReadinessBinding;
9
+ begin: RuntimeObservation;
10
+ state: 'pending' | 'observed' | 'unknown';
11
+ end?: RuntimeObservation;
12
+ execution?: ForegroundExecution;
13
+ }
14
+ export declare function assertForegroundTask(value: ForegroundTaskIdentity): void;
15
+ export declare function runtimeIdentityDigest(runtime: RuntimeObservation): string;
16
+ export declare function assertForegroundDeployment(record: ForegroundDeploymentRecord): void;
17
+ //# sourceMappingURL=foreground-deployment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foreground-deployment.d.ts","sourceRoot":"","sources":["../src/foreground-deployment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACnG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AAC3E,OAAO,EAAiD,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAEvH,kFAAkF;AAClF,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,CAAC,CAAA;IAChB,IAAI,EAAE,sBAAsB,CAAA;IAC5B,SAAS,EAAE,0BAA0B,CAAA;IACrC,KAAK,EAAE,kBAAkB,CAAA;IACzB,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;IACzC,GAAG,CAAC,EAAE,kBAAkB,CAAA;IACxB,SAAS,CAAC,EAAE,mBAAmB,CAAA;CAChC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAUxE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAIzE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI,CAgBnF"}
@@ -0,0 +1,43 @@
1
+ import { assertRuntimeObservation, runtimeConfigDigest } from './runtime-observer-protocol.js';
2
+ export function assertForegroundTask(value) {
3
+ runtimeConfigDigest(value);
4
+ if (value.protocol !== 'assistant-delivery/foreground-task/v1')
5
+ throw new Error('invalid foreground task protocol');
6
+ for (const text of [value.inboxId, value.sessionId, value.scope.workspace, value.scope.preset,
7
+ value.owner.principalRecordId, value.binding.id]) {
8
+ if (typeof text !== 'string' || !text.trim() || text.length > 4096)
9
+ throw new Error('invalid foreground task identity');
10
+ }
11
+ for (const version of [value.owner.principalVersion, value.binding.version, value.binding.generation, value.dispatchedAt]) {
12
+ if (!Number.isSafeInteger(version) || version < 1)
13
+ throw new Error('invalid foreground task generation');
14
+ }
15
+ }
16
+ export function runtimeIdentityDigest(runtime) {
17
+ assertRuntimeObservation(runtime);
18
+ const { challenge: _challenge, observedAt: _observedAt, ...identity } = runtime;
19
+ return runtimeConfigDigest(identity);
20
+ }
21
+ export function assertForegroundDeployment(record) {
22
+ if (record.schemaVersion !== 1 || !['pending', 'observed', 'unknown'].includes(record.state))
23
+ throw new Error('invalid foreground deployment');
24
+ assertForegroundTask(record.task);
25
+ assertRuntimeObservation(record.begin);
26
+ if (record.begin.observedAt < record.task.dispatchedAt || record.begin.profilePath !== record.readiness.profilePath
27
+ || runtimeIdentityDigest(record.begin) !== record.readiness.runtimeDigest)
28
+ throw new Error('foreground deployment binding differs');
29
+ if (record.end)
30
+ assertRuntimeObservation(record.end);
31
+ if (record.state === 'pending' && (record.execution || record.end))
32
+ throw new Error('pending foreground deployment has completion');
33
+ if (record.execution && (record.execution.executionRef !== record.task.inboxId
34
+ || record.execution.dispatchedAt !== record.task.dispatchedAt || record.execution.completedAt < record.task.dispatchedAt)) {
35
+ throw new Error('foreground completion targets a different execution');
36
+ }
37
+ if (record.state === 'observed' && (!record.execution || !record.end
38
+ || record.execution.status !== 'succeeded' || !record.execution.quiescent
39
+ || record.end.observedAt < record.execution.completedAt
40
+ || runtimeIdentityDigest(record.end) !== record.readiness.runtimeDigest))
41
+ throw new Error('foreground deployment has no stable completion');
42
+ }
43
+ //# sourceMappingURL=foreground-deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foreground-deployment.js","sourceRoot":"","sources":["../src/foreground-deployment.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,5 @@ export declare class HostAttestorError extends Error {
9
9
  export declare function hostRequirements(policy: HostAttestationPolicy, phase: HostAttestationPhase, previousHostGeneration: number): HostAttestationRequirements;
10
10
  export declare function prepareManualHostAttestation(store: ControlPlaneStore, plan: PluginActivationPlan, trust: PluginControlTrustConfig): HostAttestationOperation;
11
11
  export declare function prepareConfiguredHostAttestation(store: ControlPlaneStore, plan: PluginActivationPlan, trust: PluginControlTrustConfig): HostAttestationOperation;
12
- export declare function invokeConfiguredHostAttestor(trust: PluginControlTrustConfig, request: HostAttestationRequest): Promise<HostAttestationReceipt>;
12
+ export declare function invokeConfiguredHostAttestor(trust: PluginControlTrustConfig, request: HostAttestationRequest, signal?: AbortSignal): Promise<HostAttestationReceipt>;
13
13
  //# sourceMappingURL=host-attestor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"host-attestor.d.ts","sourceRoot":"","sources":["../src/host-attestor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,YAAY,CAAA;AACtE,OAAO,EACuB,KAAK,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,kBAAkB,CAAA;AAExI,qBAAa,iBAAkB,SAAQ,KAAK;IAC9B,QAAQ,CAAC,IAAI,EAAE,qBAAqB;gBAA3B,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM;CAIlE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,oBAAoB,EACzF,sBAAsB,EAAE,MAAM,GAAG,2BAA2B,CAa7D;AAmBD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,oBAAoB,EAC/F,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,CAE3D;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,oBAAoB,EACnG,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,CAM3D;AAsCD,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,wBAAwB,EAChF,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA8BlE"}
1
+ {"version":3,"file":"host-attestor.d.ts","sourceRoot":"","sources":["../src/host-attestor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,YAAY,CAAA;AACtE,OAAO,EACuB,KAAK,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,kBAAkB,CAAA;AAExI,qBAAa,iBAAkB,SAAQ,KAAK;IAC9B,QAAQ,CAAC,IAAI,EAAE,qBAAqB;gBAA3B,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM;CAIlE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,oBAAoB,EACzF,sBAAsB,EAAE,MAAM,GAAG,2BAA2B,CAc7D;AAuBD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,oBAAoB,EAC/F,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,CAE3D;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,oBAAoB,EACnG,KAAK,EAAE,wBAAwB,GAAG,wBAAwB,CAM3D;AA0BD,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,wBAAwB,EAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAsCxF"}