@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,29 @@
1
+ import type { TaskObservationOwner, TaskObservationPolicy, TaskObservationRequest } from './task-observation-types.js';
2
+ import type { PostActivationObservationReceipt } from './types.js';
3
+ export interface TaskObservationAuthorityConfig {
4
+ schemaVersion: 1;
5
+ authority: string;
6
+ keyId: string;
7
+ keyPath: string;
8
+ statePath: string;
9
+ controlDatabasePath: string;
10
+ grant: {
11
+ policy: TaskObservationPolicy;
12
+ owner: TaskObservationOwner;
13
+ installationId: string;
14
+ ledger: {
15
+ id: string;
16
+ path: string;
17
+ };
18
+ profilePath: string;
19
+ packages: readonly string[];
20
+ receiptTtlMs: number;
21
+ };
22
+ }
23
+ export declare class TaskObservationAuthorityError extends Error {
24
+ constructor();
25
+ }
26
+ export declare function validateTaskObservationAuthorityConfig(value: unknown): asserts value is TaskObservationAuthorityConfig;
27
+ export declare function authorizeTaskObservation(configInput: TaskObservationAuthorityConfig, requestInput: TaskObservationRequest): Promise<PostActivationObservationReceipt>;
28
+ export declare function runTaskObservationAuthority(argv?: string[]): Promise<void>;
29
+ //# sourceMappingURL=task-observation-authority.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-observation-authority.d.ts","sourceRoot":"","sources":["../src/task-observation-authority.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAwB,oBAAoB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAC5I,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAA;AAUlE,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,CAAC,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,KAAK,EAAE;QACL,MAAM,EAAE,qBAAqB,CAAA;QAC7B,KAAK,EAAE,oBAAoB,CAAA;QAC3B,cAAc,EAAE,MAAM,CAAA;QACtB,MAAM,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;QACpC,WAAW,EAAE,MAAM,CAAA;QACnB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;QAC3B,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;CACF;AAED,qBAAa,6BAA8B,SAAQ,KAAK;;CAKvD;AAiED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,8BAA8B,CA2BtH;AAsJD,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,8BAA8B,EAAE,YAAY,EAAE,sBAAsB,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAyE3K;AAED,wBAAsB,2BAA2B,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7F"}
@@ -0,0 +1,370 @@
1
+ import { createHash, createPrivateKey, createPublicKey, sign, verify } from 'node:crypto';
2
+ import { resolve } from 'node:path';
3
+ import { DatabaseSync } from 'node:sqlite';
4
+ import { postActivationEvidenceDigest, parsePostActivationObservation, postActivationObservationSigningPayload, } from './post-activation.js';
5
+ import { sourceAuthorityCanonicalSafePath, sourceAuthorityReadSafeFile, } from './source-approval-authority.js';
6
+ import { controlPlaneDigest } from './store.js';
7
+ import { readTaskObservationContext, taskObservationDigest } from './task-observation-store.js';
8
+ import { PROTECTED_PLUGIN_DENYLIST } from './source-workspace.js';
9
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/u;
10
+ const DIGEST = /^[a-f0-9]{64}$/u;
11
+ const PACKAGE = /^@dsh-enhanced\/[a-z][a-z0-9-]*$/u;
12
+ const MAX_CONFIG = 65_536;
13
+ const MAX_REQUEST = 8_192;
14
+ const MAX_KEY = 32_768;
15
+ const MAX_LOOKBACK = 30 * 24 * 60 * 60 * 1_000;
16
+ export class TaskObservationAuthorityError extends Error {
17
+ constructor() {
18
+ super('task observation authority refused the request');
19
+ this.name = 'TaskObservationAuthorityError';
20
+ }
21
+ }
22
+ function fail() {
23
+ throw new TaskObservationAuthorityError();
24
+ }
25
+ function object(value) {
26
+ if (!value || typeof value !== 'object' || Array.isArray(value))
27
+ fail();
28
+ return value;
29
+ }
30
+ function exact(value, fields) {
31
+ if (Object.keys(value).sort().join('\0') !== [...fields].sort().join('\0'))
32
+ fail();
33
+ }
34
+ function string(value, pattern = ID, max = 4_096) {
35
+ if (typeof value !== 'string' || value.normalize('NFC').trim() !== value || !pattern.test(value)
36
+ || Buffer.byteLength(value) > max || /[\p{Cc}]/u.test(value))
37
+ fail();
38
+ return value;
39
+ }
40
+ function integer(value, min, max = Number.MAX_SAFE_INTEGER) {
41
+ if (!Number.isSafeInteger(value) || Number(value) < min || Number(value) > max)
42
+ fail();
43
+ return Number(value);
44
+ }
45
+ function configuredPath(value) {
46
+ const path = string(value, /^[\s\S]+$/u);
47
+ if (!path.startsWith('/') || path === '/' || resolve(path) !== path)
48
+ fail();
49
+ return path;
50
+ }
51
+ function equal(left, right) {
52
+ return controlPlaneDigest(left) === controlPlaneDigest(right);
53
+ }
54
+ function parseOwner(value) {
55
+ const item = object(value);
56
+ exact(item, ['authorityId', 'authorityHash', 'principalId', 'principalRecordId', 'principalVersion', 'workspace', 'agentPreset']);
57
+ return Object.freeze({
58
+ authorityId: string(item.authorityId),
59
+ authorityHash: string(item.authorityHash, DIGEST, 64),
60
+ principalId: string(item.principalId, /^[\s\S]+$/u, 512),
61
+ principalRecordId: string(item.principalRecordId, /^[\s\S]+$/u, 512),
62
+ principalVersion: integer(item.principalVersion, 1),
63
+ workspace: configuredPath(item.workspace),
64
+ agentPreset: string(item.agentPreset),
65
+ });
66
+ }
67
+ function parsePolicy(value) {
68
+ const item = object(value);
69
+ exact(item, ['id', 'expiresAt', 'maximumObservations', 'minimumChecks', 'maximumChecks', 'lookbackMs']);
70
+ const result = {
71
+ id: string(item.id),
72
+ expiresAt: integer(item.expiresAt, 1),
73
+ maximumObservations: integer(item.maximumObservations, 1, 1_000),
74
+ minimumChecks: integer(item.minimumChecks, 1, 32),
75
+ maximumChecks: integer(item.maximumChecks, 1, 32),
76
+ lookbackMs: integer(item.lookbackMs, 1_000, MAX_LOOKBACK),
77
+ };
78
+ if (result.minimumChecks > result.maximumChecks)
79
+ fail();
80
+ return Object.freeze(result);
81
+ }
82
+ export function validateTaskObservationAuthorityConfig(value) {
83
+ const item = object(value);
84
+ exact(item, ['schemaVersion', 'authority', 'keyId', 'keyPath', 'statePath', 'controlDatabasePath', 'grant']);
85
+ if (item.schemaVersion !== 1)
86
+ fail();
87
+ string(item.authority);
88
+ string(item.keyId);
89
+ const keyPath = sourceAuthorityCanonicalSafePath(configuredPath(item.keyPath), 'file');
90
+ const statePath = configuredPath(item.statePath);
91
+ const controlPath = sourceAuthorityCanonicalSafePath(configuredPath(item.controlDatabasePath), 'file');
92
+ if (new Set([keyPath, statePath, controlPath]).size !== 3)
93
+ fail();
94
+ const grant = object(item.grant);
95
+ exact(grant, ['policy', 'owner', 'installationId', 'ledger', 'profilePath', 'packages', 'receiptTtlMs']);
96
+ parsePolicy(grant.policy);
97
+ parseOwner(grant.owner);
98
+ string(grant.installationId);
99
+ const ledger = object(grant.ledger);
100
+ exact(ledger, ['id', 'path']);
101
+ string(ledger.id);
102
+ if (configuredPath(ledger.path) !== controlPath)
103
+ fail();
104
+ configuredPath(grant.profilePath);
105
+ integer(grant.receiptTtlMs, 1_000, 300_000);
106
+ const rawPackages = grant.packages;
107
+ if (!Array.isArray(rawPackages))
108
+ fail();
109
+ if (rawPackages.length < 1 || rawPackages.length > 64)
110
+ fail();
111
+ const packages = rawPackages.map((value) => string(value, PACKAGE, 128));
112
+ if (new Set(packages).size !== packages.length)
113
+ fail();
114
+ }
115
+ function parseRequest(value) {
116
+ const item = object(value);
117
+ exact(item, ['protocol', 'observationId', 'observationDigest']);
118
+ if (item.protocol !== 'dsh-task-observation/v1')
119
+ fail();
120
+ return Object.freeze({
121
+ protocol: 'dsh-task-observation/v1',
122
+ observationId: string(item.observationId),
123
+ observationDigest: string(item.observationDigest, DIGEST, 64),
124
+ });
125
+ }
126
+ function openState(path) {
127
+ sourceAuthorityCanonicalSafePath(path, 'file', true);
128
+ const database = new DatabaseSync(path);
129
+ try {
130
+ database.exec(`
131
+ PRAGMA busy_timeout = 5000;
132
+ PRAGMA journal_mode = WAL;
133
+ PRAGMA synchronous = FULL;
134
+ CREATE TABLE IF NOT EXISTS task_observation_grants (
135
+ grant_id TEXT PRIMARY KEY,
136
+ config_digest TEXT NOT NULL,
137
+ key_fingerprint TEXT NOT NULL
138
+ ) STRICT;
139
+ CREATE TABLE IF NOT EXISTS task_observation_receipts (
140
+ request_digest TEXT PRIMARY KEY,
141
+ grant_id TEXT NOT NULL,
142
+ config_digest TEXT NOT NULL,
143
+ observation_id TEXT NOT NULL UNIQUE,
144
+ observation_digest TEXT NOT NULL,
145
+ receipt_json TEXT NOT NULL,
146
+ receipt_digest TEXT NOT NULL
147
+ ) STRICT;
148
+ `);
149
+ return database;
150
+ }
151
+ catch (error) {
152
+ database.close();
153
+ throw error;
154
+ }
155
+ }
156
+ function storedReceipt(receiptJson, digest, key) {
157
+ if (controlPlaneDigest(receiptJson) !== digest)
158
+ fail();
159
+ try {
160
+ const receipt = parsePostActivationObservation(JSON.parse(receiptJson));
161
+ const { signature: _signature, ...unsigned } = receipt;
162
+ if (!verify(null, Buffer.from(postActivationObservationSigningPayload(unsigned)), createPublicKey(key), Buffer.from(receipt.signature, 'base64')))
163
+ fail();
164
+ return receipt;
165
+ }
166
+ catch {
167
+ return fail();
168
+ }
169
+ }
170
+ function validateContext(config, request, now) {
171
+ const control = new DatabaseSync(sourceAuthorityCanonicalSafePath(config.controlDatabasePath, 'file'), { readOnly: true });
172
+ try {
173
+ control.exec('PRAGMA query_only = ON');
174
+ const { record, plan, source, deployments } = readTaskObservationContext(control, request.observationId);
175
+ const batch = record.batch;
176
+ if (!['pending', 'signed'].includes(record.state)
177
+ || batch.id !== request.observationId
178
+ || batch.digest !== request.observationDigest
179
+ || taskObservationDigest(batch) !== batch.digest
180
+ || batch.expiresAt <= now
181
+ || batch.policy.expiresAt <= now
182
+ || !equal(batch.policy, config.grant.policy)
183
+ || !equal(batch.owner, config.grant.owner)
184
+ || batch.installationId !== config.grant.installationId
185
+ || !equal(plan.ledger, config.grant.ledger)
186
+ || batch.profilePath !== config.grant.profilePath
187
+ || plan.id !== batch.planId
188
+ || plan.digest !== batch.planDigest
189
+ || plan.status !== 'activated'
190
+ || !plan.activation
191
+ || PROTECTED_PLUGIN_DENYLIST.has(plan.candidate.id)
192
+ || !config.grant.packages.includes(plan.candidate.package)
193
+ || source.owner.authorityId !== batch.owner.authorityId
194
+ || source.owner.authorityHash !== batch.owner.authorityHash
195
+ || source.owner.principalId !== batch.owner.principalId
196
+ || source.owner.principalRecordId !== batch.owner.principalRecordId
197
+ || source.owner.principalVersion !== batch.owner.principalVersion
198
+ || source.owner.workspace !== batch.owner.workspace
199
+ || source.owner.agentPreset !== batch.owner.agentPreset)
200
+ fail();
201
+ if (batch.votes.length < batch.policy.minimumChecks
202
+ || batch.votes.length > batch.policy.maximumChecks
203
+ || deployments.length !== batch.votes.length
204
+ || new Set(batch.votes.map(vote => vote.inboxId)).size !== batch.votes.length)
205
+ fail();
206
+ for (const vote of batch.votes) {
207
+ if (vote.completedAt > now || now - vote.completedAt > batch.policy.lookbackMs
208
+ || (vote.status !== 'achieved' && vote.status !== 'not-achieved'))
209
+ fail();
210
+ const deployment = deployments.find(item => item.task.inboxId === vote.inboxId);
211
+ if (!deployment
212
+ || deployment.readiness.planId !== plan.id
213
+ || deployment.task.owner.principalRecordId !== batch.owner.principalRecordId
214
+ || deployment.task.owner.principalVersion !== batch.owner.principalVersion
215
+ || deployment.task.scope.workspace !== batch.owner.workspace
216
+ || deployment.task.scope.preset !== batch.owner.agentPreset
217
+ || controlPlaneDigest(deployment) !== vote.deploymentDigest
218
+ || !deployment.execution
219
+ || deployment.execution.completedAt !== vote.completedAt)
220
+ fail();
221
+ }
222
+ return { batch, plan };
223
+ }
224
+ finally {
225
+ control.close();
226
+ }
227
+ }
228
+ function makeReceipt(config, batch, plan, key, now) {
229
+ const failures = batch.votes.filter(vote => vote.status === 'not-achieved').length;
230
+ const evidence = {
231
+ kind: 'post-activation-health',
232
+ checks: batch.votes.length,
233
+ failures,
234
+ probeDigest: batch.digest,
235
+ };
236
+ const unsigned = {
237
+ schemaVersion: 1,
238
+ observationId: batch.id,
239
+ authority: config.authority,
240
+ keyId: config.keyId,
241
+ installationId: batch.installationId,
242
+ planId: plan.id,
243
+ planDigest: plan.digest,
244
+ activationId: plan.activation.id,
245
+ fence: plan.activation.fence,
246
+ package: plan.candidate.package,
247
+ version: plan.candidate.version,
248
+ integrity: plan.candidate.integrity,
249
+ disposition: failures ? 'regressed' : 'healthy',
250
+ evidence,
251
+ evidenceDigest: postActivationEvidenceDigest(evidence),
252
+ hostGeneration: batch.hostGeneration,
253
+ observedAt: now,
254
+ expiresAt: Math.min(now + config.grant.receiptTtlMs, batch.expiresAt, batch.policy.expiresAt, config.grant.policy.expiresAt),
255
+ };
256
+ if (unsigned.expiresAt <= now)
257
+ fail();
258
+ try {
259
+ return parsePostActivationObservation({
260
+ ...unsigned,
261
+ signature: sign(null, Buffer.from(postActivationObservationSigningPayload(unsigned)), key).toString('base64'),
262
+ });
263
+ }
264
+ catch {
265
+ return fail();
266
+ }
267
+ }
268
+ export async function authorizeTaskObservation(configInput, requestInput) {
269
+ try {
270
+ validateTaskObservationAuthorityConfig(configInput);
271
+ const config = configInput;
272
+ const request = parseRequest(requestInput);
273
+ const keyBytes = sourceAuthorityReadSafeFile(config.keyPath, MAX_KEY);
274
+ let key;
275
+ try {
276
+ key = createPrivateKey(keyBytes);
277
+ }
278
+ catch {
279
+ return fail();
280
+ }
281
+ if (key.asymmetricKeyType !== 'ed25519')
282
+ fail();
283
+ const configDigest = controlPlaneDigest(config);
284
+ const keyFingerprint = createHash('sha256').update(keyBytes).digest('hex');
285
+ const requestDigest = controlPlaneDigest(request);
286
+ const state = openState(config.statePath);
287
+ try {
288
+ state.exec('BEGIN IMMEDIATE');
289
+ const frozen = state.prepare('SELECT config_digest, key_fingerprint FROM task_observation_grants WHERE grant_id = ?')
290
+ .get(config.grant.policy.id);
291
+ if (frozen && (frozen.config_digest !== configDigest || frozen.key_fingerprint !== keyFingerprint))
292
+ fail();
293
+ const prior = state.prepare(`
294
+ SELECT receipt_json, receipt_digest, grant_id, config_digest, observation_id, observation_digest
295
+ FROM task_observation_receipts WHERE request_digest = ?
296
+ `).get(requestDigest);
297
+ if (prior) {
298
+ if (prior.grant_id !== config.grant.policy.id
299
+ || prior.config_digest !== configDigest
300
+ || prior.observation_id !== request.observationId
301
+ || prior.observation_digest !== request.observationDigest)
302
+ fail();
303
+ const receipt = storedReceipt(prior.receipt_json, prior.receipt_digest, key);
304
+ if (receipt.observationId !== request.observationId
305
+ || receipt.evidence.probeDigest !== request.observationDigest
306
+ || receipt.authority !== config.authority
307
+ || receipt.keyId !== config.keyId)
308
+ fail();
309
+ state.exec('COMMIT');
310
+ return receipt;
311
+ }
312
+ const now = Date.now();
313
+ if (now >= config.grant.policy.expiresAt)
314
+ fail();
315
+ const first = validateContext(config, request, now);
316
+ const final = validateContext(config, request, now);
317
+ if (!equal(first.batch, final.batch) || !equal(first.plan, final.plan))
318
+ fail();
319
+ if (state.prepare('SELECT COUNT(*) AS count FROM task_observation_receipts WHERE grant_id = ?')
320
+ .get(config.grant.policy.id).count >= config.grant.policy.maximumObservations)
321
+ fail();
322
+ if (!frozen)
323
+ state.prepare('INSERT INTO task_observation_grants VALUES (?, ?, ?)')
324
+ .run(config.grant.policy.id, configDigest, keyFingerprint);
325
+ const receipt = makeReceipt(config, final.batch, final.plan, key, now);
326
+ const receiptJson = JSON.stringify(receipt);
327
+ state.prepare('INSERT INTO task_observation_receipts VALUES (?, ?, ?, ?, ?, ?, ?)').run(requestDigest, config.grant.policy.id, configDigest, request.observationId, request.observationDigest, receiptJson, controlPlaneDigest(receiptJson));
328
+ state.exec('COMMIT');
329
+ return receipt;
330
+ }
331
+ catch (error) {
332
+ try {
333
+ state.exec('ROLLBACK');
334
+ }
335
+ catch { }
336
+ throw error;
337
+ }
338
+ finally {
339
+ state.close();
340
+ }
341
+ }
342
+ catch (error) {
343
+ if (error instanceof TaskObservationAuthorityError)
344
+ throw error;
345
+ throw new TaskObservationAuthorityError();
346
+ }
347
+ }
348
+ export async function runTaskObservationAuthority(argv = process.argv.slice(2)) {
349
+ try {
350
+ if (argv.length !== 2 || argv[0] !== '--config')
351
+ fail();
352
+ const configBytes = sourceAuthorityReadSafeFile(configuredPath(argv[1]), MAX_CONFIG);
353
+ const config = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(configBytes));
354
+ const chunks = [];
355
+ let size = 0;
356
+ for await (const chunk of process.stdin) {
357
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
358
+ size += bytes.length;
359
+ if (size > MAX_REQUEST)
360
+ fail();
361
+ chunks.push(bytes);
362
+ }
363
+ const input = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks)));
364
+ process.stdout.write(`${JSON.stringify(await authorizeTaskObservation(config, input))}\n`);
365
+ }
366
+ catch {
367
+ throw new TaskObservationAuthorityError();
368
+ }
369
+ }
370
+ //# sourceMappingURL=task-observation-authority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-observation-authority.js","sourceRoot":"","sources":["../src/task-observation-authority.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type SourceApprovalClientConfig } from './source-approval-client.js';
2
+ import type { TaskObservationRequest } from './task-observation-types.js';
3
+ export declare function requestTaskObservation(config: SourceApprovalClientConfig, request: TaskObservationRequest, signal?: AbortSignal): Promise<import("./types.js").PostActivationObservationReceipt>;
4
+ //# sourceMappingURL=task-observation-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-observation-client.d.ts","sourceRoot":"","sources":["../src/task-observation-client.ts"],"names":[],"mappings":"AACA,OAAO,EAA4D,KAAK,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AACvI,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,0BAA0B,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,WAAW,kEAW/H"}
@@ -0,0 +1,20 @@
1
+ import { parsePostActivationObservation } from './post-activation.js';
2
+ import { requestPinnedAuthorityReceipt, SourceApprovalClientError } from './source-approval-client.js';
3
+ export function requestTaskObservation(config, request, signal) {
4
+ if (request.protocol !== 'dsh-task-observation/v1' || !/^task-observation-[a-f0-9]{64}$/u.test(request.observationId)
5
+ || !/^[a-f0-9]{64}$/u.test(request.observationDigest)
6
+ || Object.keys(request).sort().join(',') !== 'observationDigest,observationId,protocol')
7
+ throw new Error('invalid task observation request');
8
+ return requestPinnedAuthorityReceipt(config, request, value => {
9
+ try {
10
+ const receipt = parsePostActivationObservation(value);
11
+ if (receipt.observationId !== request.observationId || receipt.evidence.probeDigest !== request.observationDigest)
12
+ throw new Error('task observation receipt differs');
13
+ return receipt;
14
+ }
15
+ catch {
16
+ throw new SourceApprovalClientError('FAILED', 'task observation authority returned an invalid receipt');
17
+ }
18
+ }, signal);
19
+ }
20
+ //# sourceMappingURL=task-observation-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-observation-client.js","sourceRoot":"","sources":["../src/task-observation-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAA;AACrE,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAmC,MAAM,6BAA6B,CAAA;AAGvI,MAAM,UAAU,sBAAsB,CAAC,MAAkC,EAAE,OAA+B,EAAE,MAAoB;IAC9H,IAAI,OAAO,CAAC,QAAQ,KAAK,yBAAyB,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;WAChH,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;WAClD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,0CAA0C;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAC9I,OAAO,6BAA6B,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAA;YACrD,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,iBAAiB;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;YACtK,OAAO,OAAO,CAAA;QAChB,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,IAAI,yBAAyB,CAAC,QAAQ,EAAE,wDAAwD,CAAC,CAAA;QAAC,CAAC;IACrH,CAAC,EAAE,MAAM,CAAC,CAAA;AACZ,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { AssistantAutomationsService } from '@dsh-enhanced/assistant-automations';
2
+ import type { AssistantDeliveryService } from '@dsh-enhanced/assistant-delivery';
3
+ import type { AssistantEvaluationService } from '@dsh-enhanced/assistant-evaluation';
4
+ import { type ControlPlaneStore } from './store.js';
5
+ import { type PluginControlTrustConfig } from './trust.js';
6
+ import type { TaskObservationBatch, TaskObservationConfig, TaskObservationOwner } from './task-observation-types.js';
7
+ import type { PostActivationObservationReceipt } from './types.js';
8
+ type Evaluation = Pick<AssistantEvaluationService, 'canonicalHostScope' | 'getTrustedForegroundLearningProjection' | 'withTrustedCanonicalTaskWriterFence' | 'onTrustedTaskChange'>;
9
+ type Delivery = Pick<AssistantDeliveryService, 'validateOwnerRoute' | 'inspectOwnerForegroundLearningTask'>;
10
+ type Automations = Pick<AssistantAutomationsService, 'registerHostExecutor' | 'reconcileSystem' | 'inspectSystemOwnedActivation'>;
11
+ export declare function taskObservationOwner(owner: TaskObservationOwner): TaskObservationOwner;
12
+ export declare function validateTaskObservationConfig(config: TaskObservationConfig): void;
13
+ /** Trusted real-task cohorts; no model calls and no private scheduler. */
14
+ export declare class TaskObservationRuntime {
15
+ private readonly options;
16
+ private readonly lane;
17
+ private readonly configDigest;
18
+ private readonly trustDigest;
19
+ private readonly scanId;
20
+ private readonly generation;
21
+ private readonly activationNonce;
22
+ private readonly abort;
23
+ private readonly flights;
24
+ private unregister?;
25
+ private unsubscribe?;
26
+ private closing?;
27
+ private active;
28
+ private scanning;
29
+ private lastError;
30
+ constructor(options: {
31
+ config: TaskObservationConfig;
32
+ store: ControlPlaneStore;
33
+ trust: PluginControlTrustConfig;
34
+ evaluation: Evaluation;
35
+ delivery: Delivery;
36
+ automations: Automations;
37
+ assertCurrent(): void;
38
+ rollback(planId: string, signal: AbortSignal): Promise<unknown>;
39
+ request?: (batch: TaskObservationBatch, signal: AbortSignal) => Promise<PostActivationObservationReceipt>;
40
+ });
41
+ start(): void;
42
+ close(): Promise<void>;
43
+ health: () => {
44
+ connected: boolean;
45
+ lastError: string | null;
46
+ };
47
+ private current;
48
+ private owner;
49
+ private source;
50
+ private vote;
51
+ private read;
52
+ private fence;
53
+ /** Bounded synchronous nudge; the persisted native cron owns asynchronous work. */
54
+ scan: () => void;
55
+ private definition;
56
+ private execute;
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=task-observation-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-observation-runtime.d.ts","sourceRoot":"","sources":["../src/task-observation-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAuF,MAAM,qCAAqC,CAAA;AAC3K,OAAO,KAAK,EAAE,wBAAwB,EAA+B,MAAM,kCAAkC,CAAA;AAC7G,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AACpF,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAKvE,OAAO,EAAmB,KAAK,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAE3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,oBAAoB,EAAuB,MAAM,6BAA6B,CAAA;AACzI,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAA;AAMlE,KAAK,UAAU,GAAG,IAAI,CAAC,0BAA0B,EAAE,oBAAoB,GAAG,wCAAwC,GAAG,qCAAqC,GAAG,qBAAqB,CAAC,CAAA;AACnL,KAAK,QAAQ,GAAG,IAAI,CAAC,wBAAwB,EAAE,oBAAoB,GAAG,oCAAoC,CAAC,CAAA;AAC3G,KAAK,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE,sBAAsB,GAAG,iBAAiB,GAAG,8BAA8B,CAAC,CAAA;AAEjI,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,CAGtF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAkBjF;AAED,0EAA0E;AAC1E,qBAAa,sBAAsB;IAerB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAdpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAY;IAChC,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,SAAS,CAAsB;gBACV,OAAO,EAAE;QACpC,MAAM,EAAE,qBAAqB,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,KAAK,EAAE,wBAAwB,CAAA;QACxF,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,WAAW,EAAE,WAAW,CAAA;QACpE,aAAa,IAAI,IAAI,CAAA;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,gCAAgC,CAAC,CAAA;KAC1G;IASD,KAAK,IAAI,IAAI;IAmBb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBtB,MAAM;;;MAAgE;IAEtE,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,IAAI;IAgBZ,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,KAAK;IAab,mFAAmF;IACnF,IAAI,QAAO,IAAI,CAwCd;IAED,OAAO,CAAC,UAAU;YAUJ,OAAO;CAyDtB"}