@victframework/runtime 0.1.0

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 (115) hide show
  1. package/dist/agent-governance.d.ts +285 -0
  2. package/dist/agent-governance.js +438 -0
  3. package/dist/agent-governance.js.map +1 -0
  4. package/dist/agent-registry.d.ts +103 -0
  5. package/dist/agent-registry.js +758 -0
  6. package/dist/agent-registry.js.map +1 -0
  7. package/dist/agent-types.d.ts +433 -0
  8. package/dist/agent-types.js +480 -0
  9. package/dist/agent-types.js.map +1 -0
  10. package/dist/authority.d.ts +83 -0
  11. package/dist/authority.js +170 -0
  12. package/dist/authority.js.map +1 -0
  13. package/dist/boundary-conformance.d.ts +51 -0
  14. package/dist/boundary-conformance.js +364 -0
  15. package/dist/boundary-conformance.js.map +1 -0
  16. package/dist/control-conformance.d.ts +68 -0
  17. package/dist/control-conformance.js +1131 -0
  18. package/dist/control-conformance.js.map +1 -0
  19. package/dist/control-in-memory.d.ts +257 -0
  20. package/dist/control-in-memory.js +886 -0
  21. package/dist/control-in-memory.js.map +1 -0
  22. package/dist/control-types.d.ts +1017 -0
  23. package/dist/control-types.js +779 -0
  24. package/dist/control-types.js.map +1 -0
  25. package/dist/durable-run.d.ts +73 -0
  26. package/dist/durable-run.js +262 -0
  27. package/dist/durable-run.js.map +1 -0
  28. package/dist/effect-policy.d.ts +22 -0
  29. package/dist/effect-policy.js +45 -0
  30. package/dist/effect-policy.js.map +1 -0
  31. package/dist/errors.d.ts +36 -0
  32. package/dist/errors.js +71 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/in-memory-stores.d.ts +16 -0
  35. package/dist/in-memory-stores.js +522 -0
  36. package/dist/in-memory-stores.js.map +1 -0
  37. package/dist/index.d.ts +41 -0
  38. package/dist/index.js +26 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/operator-config.d.ts +141 -0
  41. package/dist/operator-config.js +289 -0
  42. package/dist/operator-config.js.map +1 -0
  43. package/dist/orchestration-activation.d.ts +116 -0
  44. package/dist/orchestration-activation.js +223 -0
  45. package/dist/orchestration-activation.js.map +1 -0
  46. package/dist/orchestration-canary-conformance.d.ts +10 -0
  47. package/dist/orchestration-canary-conformance.js +726 -0
  48. package/dist/orchestration-canary-conformance.js.map +1 -0
  49. package/dist/orchestration-commands.d.ts +47 -0
  50. package/dist/orchestration-commands.js +538 -0
  51. package/dist/orchestration-commands.js.map +1 -0
  52. package/dist/orchestration-conformance.d.ts +59 -0
  53. package/dist/orchestration-conformance.js +594 -0
  54. package/dist/orchestration-conformance.js.map +1 -0
  55. package/dist/orchestration-driver-types.d.ts +163 -0
  56. package/dist/orchestration-driver-types.js +21 -0
  57. package/dist/orchestration-driver-types.js.map +1 -0
  58. package/dist/orchestration-driver.d.ts +48 -0
  59. package/dist/orchestration-driver.js +1030 -0
  60. package/dist/orchestration-driver.js.map +1 -0
  61. package/dist/orchestration-in-memory.d.ts +18 -0
  62. package/dist/orchestration-in-memory.js +1313 -0
  63. package/dist/orchestration-in-memory.js.map +1 -0
  64. package/dist/orchestration-join-conformance.d.ts +20 -0
  65. package/dist/orchestration-join-conformance.js +542 -0
  66. package/dist/orchestration-join-conformance.js.map +1 -0
  67. package/dist/orchestration-plan.d.ts +52 -0
  68. package/dist/orchestration-plan.js +265 -0
  69. package/dist/orchestration-plan.js.map +1 -0
  70. package/dist/orchestration-race-conformance.d.ts +35 -0
  71. package/dist/orchestration-race-conformance.js +1265 -0
  72. package/dist/orchestration-race-conformance.js.map +1 -0
  73. package/dist/orchestration-remediation-conformance.d.ts +54 -0
  74. package/dist/orchestration-remediation-conformance.js +632 -0
  75. package/dist/orchestration-remediation-conformance.js.map +1 -0
  76. package/dist/orchestration-store-types.d.ts +568 -0
  77. package/dist/orchestration-store-types.js +2 -0
  78. package/dist/orchestration-store-types.js.map +1 -0
  79. package/dist/pack-conformance.d.ts +59 -0
  80. package/dist/pack-conformance.js +222 -0
  81. package/dist/pack-conformance.js.map +1 -0
  82. package/dist/pack-install.d.ts +44 -0
  83. package/dist/pack-install.js +126 -0
  84. package/dist/pack-install.js.map +1 -0
  85. package/dist/registry.d.ts +107 -0
  86. package/dist/registry.js +481 -0
  87. package/dist/registry.js.map +1 -0
  88. package/dist/runtime.d.ts +158 -0
  89. package/dist/runtime.js +1341 -0
  90. package/dist/runtime.js.map +1 -0
  91. package/dist/serialization.d.ts +26 -0
  92. package/dist/serialization.js +162 -0
  93. package/dist/serialization.js.map +1 -0
  94. package/dist/store-conformance.d.ts +45 -0
  95. package/dist/store-conformance.js +876 -0
  96. package/dist/store-conformance.js.map +1 -0
  97. package/dist/store-errors.d.ts +49 -0
  98. package/dist/store-errors.js +48 -0
  99. package/dist/store-errors.js.map +1 -0
  100. package/dist/store-types.d.ts +331 -0
  101. package/dist/store-types.js +14 -0
  102. package/dist/store-types.js.map +1 -0
  103. package/dist/store-validation.d.ts +63 -0
  104. package/dist/store-validation.js +164 -0
  105. package/dist/store-validation.js.map +1 -0
  106. package/dist/stream-hub.d.ts +151 -0
  107. package/dist/stream-hub.js +402 -0
  108. package/dist/stream-hub.js.map +1 -0
  109. package/dist/testing.d.ts +25 -0
  110. package/dist/testing.js +19 -0
  111. package/dist/testing.js.map +1 -0
  112. package/dist/types.d.ts +221 -0
  113. package/dist/types.js +2 -0
  114. package/dist/types.js.map +1 -0
  115. package/package.json +45 -0
@@ -0,0 +1,481 @@
1
+ import { NEUTRAL_JSON_CONTRACT_ID } from '@victframework/contracts';
2
+ import { VictRuntimeError } from './errors.js';
3
+ import { gateCapabilityInvoke, pinAuthorityDeclarations, } from './authority.js';
4
+ function isValidRevision(revision) {
5
+ return typeof revision === 'string' && revision.trim().length > 0;
6
+ }
7
+ /**
8
+ * The closed field set of a capability definition. Unknown fields are
9
+ * rejected at the public registration boundary: a misspelled authority
10
+ * field (e.g. `permissionsTypo`) must fail loudly instead of silently
11
+ * dropping the author's intended enforcement.
12
+ */
13
+ const CAPABILITY_DEFINITION_FIELDS = new Set([
14
+ 'id',
15
+ 'revision',
16
+ 'effect',
17
+ 'input',
18
+ 'output',
19
+ 'invoke',
20
+ 'idempotency',
21
+ 'permissions',
22
+ 'configuration',
23
+ 'requiredConfiguration',
24
+ 'secrets',
25
+ 'requiredSecrets',
26
+ ]);
27
+ /** A contract-shaped object: identity + revision + a parse callable. */
28
+ function isContractShaped(value) {
29
+ return (typeof value === 'object' &&
30
+ value !== null &&
31
+ typeof value.id === 'string' &&
32
+ typeof value.revision === 'string' &&
33
+ typeof value.parse === 'function');
34
+ }
35
+ /**
36
+ * Owns registered capabilities, contracts, and test doubles for one runtime.
37
+ * Not a global registry: every runtime instance carries its own.
38
+ *
39
+ * Registration validates author/build revisions and the full executable
40
+ * definition (closed fields, effect vocabulary, CONT-001 contract presence,
41
+ * authority names), because revisions and declarations feed activation
42
+ * identity. Live maps are never exposed: consumers receive descriptors or
43
+ * frozen copies.
44
+ *
45
+ * Atomic registration (HIGH-04-A / LOW-RE-3): `installBatch` stages every
46
+ * contract/capability/double against a staging overlay WITHOUT mutating any
47
+ * live map, and commits the complete batch only when every step succeeds.
48
+ * The direct public `registerCapability` path uses the SAME staging
49
+ * mechanism (capability + embedded contracts staged together), so ANY
50
+ * failure — including a contract conflict — leaves the registry
51
+ * byte-for-byte semantically unchanged. There is no best-effort rollback
52
+ * of partially registered entries.
53
+ */
54
+ export class CapabilityRegistry {
55
+ #authority;
56
+ #capabilities = new Map();
57
+ /**
58
+ * Historical revisions per capability id. Registering a NEW revision for
59
+ * an existing id adds a resolvable revision instead of replacing the
60
+ * current one, so suspended runs can restore their exact pinned
61
+ * activation artifacts. The same id+revision may never be registered
62
+ * twice.
63
+ */
64
+ #capabilityRevisions = new Map();
65
+ #contracts = new Map();
66
+ #contractRevisions = new Map();
67
+ #doubles = new Map();
68
+ /** Active staging overlay (set only inside `installBatch`). */
69
+ #staging;
70
+ constructor(authority) {
71
+ this.#authority = authority;
72
+ }
73
+ // ---- Validation ---------------------------------------------------------
74
+ /** Full executable-definition validation at the public registration boundary. */
75
+ #validateCapabilityDefinition(definition) {
76
+ if (typeof definition.id !== 'string' || definition.id.trim().length === 0) {
77
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_CAPABILITY', 'Capability id must be a non-empty, non-whitespace string.');
78
+ }
79
+ for (const key of Object.keys(definition)) {
80
+ if (!CAPABILITY_DEFINITION_FIELDS.has(key)) {
81
+ throw new VictRuntimeError('VICT_RUNTIME_UNKNOWN_DEFINITION_FIELD', `Capability '${definition.id}' declares unknown field '${key}'; the capability-definition schema is closed. A misspelled authority or metadata field is rejected instead of silently dropping the author's intended semantics.`, { capabilityId: definition.id, field: key });
82
+ }
83
+ }
84
+ if (!isValidRevision(definition.revision)) {
85
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_REVISION', `Capability '${definition.id}' must declare a non-empty revision string (e.g. revision: '1'). ` +
86
+ 'Changing handler logic or execution metadata requires changing the revision.', { capabilityId: definition.id });
87
+ }
88
+ if (typeof definition.invoke !== 'function') {
89
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_CAPABILITY', `Capability '${definition.id}' must provide an invoke function.`);
90
+ }
91
+ const effect = definition.effect;
92
+ if (typeof effect !== 'string' || !['pure', 'read', 'write', 'irreversible'].includes(effect)) {
93
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_EFFECT', `Capability '${definition.id}' declares effect '${String(definition.effect)}', which is not in the closed effect vocabulary ('pure', 'read', 'write', 'irreversible').`, { capabilityId: definition.id, effect: String(definition.effect) });
94
+ }
95
+ if (definition.idempotency !== undefined && definition.idempotency !== 'keyed') {
96
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_CAPABILITY', `Capability '${definition.id}' declares unsupported idempotency '${String(definition.idempotency)}'; only 'keyed' (or absent) is supported.`, { capabilityId: definition.id });
97
+ }
98
+ // CONT-001: every executable capability declares BOTH input and output
99
+ // contracts. Enforced at the public registration/pack-installation
100
+ // boundary — TypeScript typing alone cannot guarantee it for plain
101
+ // JavaScript objects.
102
+ for (const role of ['input', 'output']) {
103
+ const contract = definition[role];
104
+ if (contract === undefined) {
105
+ throw new VictRuntimeError('VICT_RUNTIME_MISSING_CONTRACT', `Capability '${definition.id}' must declare an ${role} contract (CONT-001: every executable capability declares its input and output contracts). Use a deliberate neutral contract (e.g. vict.neutral.json) when the boundary intentionally accepts arbitrary JSON values.`, { capabilityId: definition.id, role });
106
+ }
107
+ if (!isContractShaped(contract)) {
108
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_CONTRACT', `Capability '${definition.id}' declares an ${role} contract without a contract identity (id, revision) and a parse function.`, { capabilityId: definition.id, role });
109
+ }
110
+ }
111
+ // Authority declarations are executable semantics: validate every name,
112
+ // reject duplicates and whitespace-only entries, and PIN (copy + freeze)
113
+ // the declaration snapshot used by the invocation gate.
114
+ pinAuthorityDeclarations(definition);
115
+ }
116
+ // ---- Registration -------------------------------------------------------
117
+ registerCapability(definition) {
118
+ if (this.#staging !== undefined) {
119
+ // Inside a batch (pack installation or the atomic direct path below):
120
+ // stage the effective registration without touching any live map.
121
+ this.#stageCapability(definition);
122
+ return;
123
+ }
124
+ // LOW-RE-3 remediation: the direct public path is ATOMIC. The
125
+ // capability AND its embedded contracts are staged together (all
126
+ // validation and collision checks run against live + staged state) and
127
+ // the complete registration commits only when every step succeeds. A
128
+ // capability-identity or contract collision leaves the registry
129
+ // semantically unchanged, and the same corrected registration is
130
+ // retryable. Pack installation keeps its own outer batch; this path
131
+ // never nests a second batch.
132
+ this.installBatch(() => {
133
+ this.#stageCapability(definition);
134
+ // Capability-embedded contracts are published under their own ids so
135
+ // the kernel can validate against them at execution time.
136
+ if (definition.input) {
137
+ this.registerContract(definition.input);
138
+ }
139
+ if (definition.output) {
140
+ this.registerContract(definition.output);
141
+ }
142
+ });
143
+ }
144
+ /** Validate, gate, and stage one capability registration (no live mutation). */
145
+ #stageCapability(definition) {
146
+ this.#validateCapabilityDefinition(definition);
147
+ if (this.#capabilityRevisions.get(definition.id)?.has(definition.revision)) {
148
+ throw new VictRuntimeError('VICT_RUNTIME_DUPLICATE_CAPABILITY', `Capability '${definition.id}' revision '${definition.revision}' is already registered in this runtime.`);
149
+ }
150
+ // Stage 04 least-authority gate: the WRAPPED invoke is what activations
151
+ // capture, so permission/secret/configuration enforcement is identical
152
+ // on the sequential and durable engines. Default-deny: a definition
153
+ // that declares permissions/requirements is gated even when the runtime
154
+ // has NO authority configured (empty grants, absent ports). The gate
155
+ // closes over PINNED (copied + frozen) declaration snapshots, never the
156
+ // caller's arrays. Function-bearing fields are captured by reference.
157
+ const declaresAuthorityRequirements = (definition.permissions !== undefined && definition.permissions.length > 0) ||
158
+ (definition.requiredConfiguration !== undefined &&
159
+ definition.requiredConfiguration.length > 0) ||
160
+ (definition.requiredSecrets !== undefined && definition.requiredSecrets.length > 0);
161
+ const needsGate = this.#authority !== undefined || declaresAuthorityRequirements;
162
+ const effective = needsGate
163
+ ? {
164
+ ...definition,
165
+ invoke: gateCapabilityInvoke(definition, this.#authority ?? {}),
166
+ }
167
+ : definition;
168
+ this.#commitCapability(definition.id, definition.revision, effective);
169
+ }
170
+ /** Commit one capability registration to live or staged storage. */
171
+ #commitCapability(id, revision, effective) {
172
+ if (this.#staging !== undefined) {
173
+ let revisions = this.#staging.capabilities.get(id);
174
+ if (!revisions) {
175
+ revisions = new Map();
176
+ this.#staging.capabilities.set(id, revisions);
177
+ }
178
+ if (revisions.has(revision)) {
179
+ throw new VictRuntimeError('VICT_RUNTIME_DUPLICATE_CAPABILITY', `Capability '${id}' revision '${revision}' is already staged by this installation.`);
180
+ }
181
+ revisions.set(revision, effective);
182
+ return;
183
+ }
184
+ this.#capabilities.set(id, effective);
185
+ let capabilityRevisions = this.#capabilityRevisions.get(id);
186
+ if (!capabilityRevisions) {
187
+ capabilityRevisions = new Map();
188
+ this.#capabilityRevisions.set(id, capabilityRevisions);
189
+ }
190
+ capabilityRevisions.set(revision, effective);
191
+ }
192
+ registerContract(contract) {
193
+ if (typeof contract.id !== 'string' || contract.id.trim().length === 0) {
194
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_CONTRACT', 'Contract id must be a non-empty, non-whitespace string.');
195
+ }
196
+ if (!isValidRevision(contract.revision)) {
197
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_CONTRACT', `Contract '${contract.id}' must declare a non-empty revision string (e.g. revision: '1'). ` +
198
+ 'Changing contract semantics requires changing the revision.', { contractId: contract.id });
199
+ }
200
+ const existing = this.#contracts.get(contract.id);
201
+ if (existing && existing !== contract) {
202
+ if (existing.revision === contract.revision) {
203
+ throw new VictRuntimeError('VICT_RUNTIME_CONTRACT_CONFLICT', `Contract id '${contract.id}' revision '${contract.revision}' is already registered with a different contract object.`);
204
+ }
205
+ // A new revision for an existing contract id: both remain resolvable.
206
+ }
207
+ if (!existing && this.#staging === undefined) {
208
+ this.#contracts.set(contract.id, contract);
209
+ }
210
+ const revisionMap = this.#staging !== undefined
211
+ ? this.#contractRevisionMapFor(this.#staging.contracts, contract.id)
212
+ : this.#contractRevisionMapFor(this.#contractRevisions, contract.id);
213
+ const priorRevision = revisionMap.get(contract.revision);
214
+ if (priorRevision !== undefined && priorRevision !== contract) {
215
+ throw new VictRuntimeError('VICT_RUNTIME_CONTRACT_CONFLICT', `Contract id '${contract.id}' revision '${contract.revision}' is already registered with a different contract object.`);
216
+ }
217
+ revisionMap.set(contract.revision, contract);
218
+ }
219
+ #contractRevisionMapFor(map, id) {
220
+ let revisions = map.get(id);
221
+ if (!revisions) {
222
+ revisions = new Map();
223
+ map.set(id, revisions);
224
+ }
225
+ return revisions;
226
+ }
227
+ /**
228
+ * Register a test double. Doubles are runtime test configuration: they are
229
+ * not part of activation identity, and each run snapshots them at run
230
+ * start. A double NEVER runs in normal mode; without an explicit
231
+ * `modes` option it is eligible in both 'test' and 'simulate'. Duplicate
232
+ * registration is rejected — use `replaceDouble` for an explicit
233
+ * replacement.
234
+ */
235
+ registerDouble(capabilityId, invoke, options = {}) {
236
+ if (!this.#capabilities.has(capabilityId) && !this.#staging?.capabilities.has(capabilityId)) {
237
+ throw new VictRuntimeError('VICT_RUNTIME_DOUBLE_FOR_UNKNOWN_CAPABILITY', `Cannot register a test double for unknown capability '${capabilityId}'. Register the capability first.`);
238
+ }
239
+ if (typeof invoke !== 'function') {
240
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_CAPABILITY', `Test double for '${capabilityId}' must be a function.`);
241
+ }
242
+ if (this.#doubles.has(capabilityId) || this.#staging?.doubles.has(capabilityId)) {
243
+ throw new VictRuntimeError('VICT_RUNTIME_DOUBLE_ALREADY_REGISTERED', `A test double for capability '${capabilityId}' is already registered. Use replaceDouble() for an explicit replacement.`);
244
+ }
245
+ const modes = new Set(options.modes ?? ['test', 'simulate']);
246
+ if (modes.size === 0) {
247
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_CAPABILITY', `Test double for '${capabilityId}' must declare at least one eligible mode ('test' or 'simulate').`);
248
+ }
249
+ const registered = { invoke, modes: Object.freeze(modes) };
250
+ if (this.#staging !== undefined) {
251
+ this.#staging.doubles.set(capabilityId, registered);
252
+ }
253
+ else {
254
+ this.#doubles.set(capabilityId, registered);
255
+ }
256
+ }
257
+ /** Explicitly replace an existing test double. Requires a double to be registered. */
258
+ replaceDouble(capabilityId, invoke) {
259
+ if (!this.#capabilities.has(capabilityId)) {
260
+ throw new VictRuntimeError('VICT_RUNTIME_DOUBLE_FOR_UNKNOWN_CAPABILITY', `Cannot replace a test double for unknown capability '${capabilityId}'. Register the capability first.`);
261
+ }
262
+ if (!this.#doubles.has(capabilityId)) {
263
+ throw new VictRuntimeError('VICT_RUNTIME_DOUBLE_NOT_REGISTERED', `No test double is registered for capability '${capabilityId}'. Use registerDouble() first.`);
264
+ }
265
+ this.#doubles.set(capabilityId, {
266
+ invoke,
267
+ modes: this.#doubles.get(capabilityId)?.modes ??
268
+ Object.freeze(new Set(['test', 'simulate'])),
269
+ });
270
+ }
271
+ hasDouble(capabilityId) {
272
+ return this.#doubles.has(capabilityId);
273
+ }
274
+ getDoubleModes(capabilityId) {
275
+ return this.#doubles.get(capabilityId)?.modes;
276
+ }
277
+ /** Snapshot the current doubles at run start. In-flight runs cannot observe later changes. */
278
+ snapshotDoubles() {
279
+ return new Map(this.#doubles);
280
+ }
281
+ getCapability(capabilityId) {
282
+ return this.#capabilities.get(capabilityId);
283
+ }
284
+ /** Resolve a capability by exact revision (suspended-run restoration). */
285
+ getCapabilityRevision(capabilityId, revision) {
286
+ return this.#capabilityRevisions.get(capabilityId)?.get(revision);
287
+ }
288
+ getContract(contractId) {
289
+ return this.#contracts.get(contractId);
290
+ }
291
+ /** Resolve a contract by exact revision (suspended-run restoration). */
292
+ getContractRevision(contractId, revision) {
293
+ return this.#contractRevisions.get(contractId)?.get(revision);
294
+ }
295
+ // ---- Atomic batch installation (HIGH-04-A) -------------------------------
296
+ /**
297
+ * Install a batch atomically. `step` registers contracts, capabilities,
298
+ * and doubles through the staging area; NOTHING touches the live maps
299
+ * until the callback returns successfully. Any throw — a validation
300
+ * failure, a collision with the live registry, or a collision inside the
301
+ * batch — discards the staging overlay and leaves the registry
302
+ * semantically unchanged: no capability, contract, or double from the
303
+ * attempted batch is resolvable afterwards.
304
+ *
305
+ * The staging overlay participates in collision checks, so both
306
+ * batch-vs-registry and batch-internal duplicates are detected BEFORE any
307
+ * commit.
308
+ */
309
+ installBatch(install) {
310
+ if (this.#staging !== undefined) {
311
+ throw new VictRuntimeError('VICT_RUNTIME_INVALID_STORES', 'A registry batch installation is already in progress.');
312
+ }
313
+ this.#staging = {
314
+ contracts: new Map(),
315
+ capabilities: new Map(),
316
+ doubles: new Map(),
317
+ };
318
+ const staging = this.#staging;
319
+ try {
320
+ install({
321
+ registerContract: (contract) => this.registerContract(contract),
322
+ registerCapability: (definition) => this.registerCapability(definition),
323
+ registerDouble: (capabilityId, invoke, options) => this.registerDouble(capabilityId, invoke, options),
324
+ });
325
+ }
326
+ catch (error) {
327
+ this.#staging = undefined;
328
+ throw error;
329
+ }
330
+ // Commit: contracts, then capabilities, then doubles — deterministic,
331
+ // after EVERY validation and collision check has succeeded.
332
+ for (const [, revisions] of staging.contracts) {
333
+ for (const [, contract] of revisions) {
334
+ this.#commitStagedContract(contract);
335
+ }
336
+ }
337
+ for (const [, revisions] of staging.capabilities) {
338
+ for (const [, effective] of revisions) {
339
+ this.#capabilities.set(effective.id, effective);
340
+ let capabilityRevisions = this.#capabilityRevisions.get(effective.id);
341
+ if (!capabilityRevisions) {
342
+ capabilityRevisions = new Map();
343
+ this.#capabilityRevisions.set(effective.id, capabilityRevisions);
344
+ }
345
+ capabilityRevisions.set(effective.revision, effective);
346
+ }
347
+ }
348
+ for (const [capabilityId, registered] of staging.doubles) {
349
+ this.#doubles.set(capabilityId, registered);
350
+ }
351
+ this.#staging = undefined;
352
+ }
353
+ #commitStagedContract(contract) {
354
+ const existing = this.#contracts.get(contract.id);
355
+ if (!existing) {
356
+ this.#contracts.set(contract.id, contract);
357
+ }
358
+ let contractRevisions = this.#contractRevisions.get(contract.id);
359
+ if (!contractRevisions) {
360
+ contractRevisions = new Map();
361
+ this.#contractRevisions.set(contract.id, contractRevisions);
362
+ }
363
+ contractRevisions.set(contract.revision, contract);
364
+ }
365
+ // ---- Indexes -------------------------------------------------------------
366
+ /**
367
+ * A capability index pinned to EXACT revisions (suspended-run
368
+ * restoration). Unknown id/revision pairs resolve to undefined so the
369
+ * kernel reports structured missing-artifact diagnostics instead of
370
+ * silently substituting a nearby revision.
371
+ */
372
+ capabilityIndex() {
373
+ const capabilities = this.#capabilities;
374
+ return {
375
+ getCapabilityDescriptor(capabilityId) {
376
+ const definition = capabilities.get(capabilityId);
377
+ if (!definition) {
378
+ return undefined;
379
+ }
380
+ return descriptorOfPublic(definition);
381
+ },
382
+ };
383
+ }
384
+ capabilityIndexPinned(revisions) {
385
+ return {
386
+ getCapabilityDescriptor: (capabilityId) => {
387
+ const revision = revisions.get(capabilityId);
388
+ if (revision === undefined) {
389
+ return undefined;
390
+ }
391
+ const definition = this.#capabilityRevisions.get(capabilityId)?.get(revision);
392
+ if (!definition) {
393
+ return undefined;
394
+ }
395
+ return descriptorOfPublic(definition);
396
+ },
397
+ };
398
+ }
399
+ contractEnvironment() {
400
+ const contracts = this.#contracts;
401
+ return {
402
+ has: (contractId) => contracts.has(contractId),
403
+ // Night 01 static compatibility is identity-based: two adjacent
404
+ // contracts are compatible when they are the same contract. Structural
405
+ // compatibility is deferred until the contract system grows one.
406
+ // The neutral JSON contract is deliberately untyped: it accepts any
407
+ // canonical JSON value, so it is compatible with EVERY contract on
408
+ // either side of an edge.
409
+ isCompatible: (from, to) => from === undefined ||
410
+ to === undefined ||
411
+ from === to ||
412
+ from === NEUTRAL_JSON_CONTRACT_ID ||
413
+ to === NEUTRAL_JSON_CONTRACT_ID,
414
+ get: (contractId) => contracts.get(contractId),
415
+ };
416
+ }
417
+ /** A contract environment pinned to exact revisions (suspended-run restoration). */
418
+ contractEnvironmentPinned(revisions) {
419
+ return {
420
+ has: (contractId) => {
421
+ const revision = revisions.get(contractId);
422
+ return revision === undefined
423
+ ? this.#contracts.has(contractId)
424
+ : (this.#contractRevisions.get(contractId)?.has(revision) ?? false);
425
+ },
426
+ isCompatible: (from, to) => from === undefined ||
427
+ to === undefined ||
428
+ from === to ||
429
+ from === NEUTRAL_JSON_CONTRACT_ID ||
430
+ to === NEUTRAL_JSON_CONTRACT_ID,
431
+ get: (contractId) => {
432
+ const revision = revisions.get(contractId);
433
+ return revision === undefined
434
+ ? this.#contracts.get(contractId)
435
+ : this.#contractRevisions.get(contractId)?.get(revision);
436
+ },
437
+ };
438
+ }
439
+ }
440
+ /** Module-level descriptor builder (keeps the class body free of self-references). */
441
+ function descriptorOfPublic(definition) {
442
+ const hasAuthority = (definition.permissions !== undefined && definition.permissions.length > 0) ||
443
+ (definition.configuration !== undefined && definition.configuration.length > 0) ||
444
+ (definition.requiredConfiguration !== undefined &&
445
+ definition.requiredConfiguration.length > 0) ||
446
+ (definition.secrets !== undefined && definition.secrets.length > 0) ||
447
+ (definition.requiredSecrets !== undefined && definition.requiredSecrets.length > 0);
448
+ return {
449
+ id: definition.id,
450
+ revision: definition.revision,
451
+ effect: definition.effect,
452
+ inputContractId: definition.input?.id,
453
+ inputRevision: definition.input?.revision,
454
+ outputContractId: definition.output?.id,
455
+ outputRevision: definition.output?.revision,
456
+ idempotency: definition.idempotency,
457
+ ...(hasAuthority
458
+ ? {
459
+ authority: {
460
+ ...(definition.permissions !== undefined && definition.permissions.length > 0
461
+ ? { permissions: Object.freeze([...definition.permissions]) }
462
+ : {}),
463
+ ...(definition.configuration !== undefined && definition.configuration.length > 0
464
+ ? { configuration: Object.freeze([...definition.configuration]) }
465
+ : {}),
466
+ ...(definition.requiredConfiguration !== undefined &&
467
+ definition.requiredConfiguration.length > 0
468
+ ? { requiredConfiguration: Object.freeze([...definition.requiredConfiguration]) }
469
+ : {}),
470
+ ...(definition.secrets !== undefined && definition.secrets.length > 0
471
+ ? { secrets: Object.freeze([...definition.secrets]) }
472
+ : {}),
473
+ ...(definition.requiredSecrets !== undefined && definition.requiredSecrets.length > 0
474
+ ? { requiredSecrets: Object.freeze([...definition.requiredSecrets]) }
475
+ : {}),
476
+ },
477
+ }
478
+ : {}),
479
+ };
480
+ }
481
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}