@opengeni/core 0.21.2 → 0.24.1

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 (123) hide show
  1. package/dist/access/index.d.ts +9 -1
  2. package/dist/application/new-session-drafts.d.ts +1 -1
  3. package/dist/application/session-commands.d.ts +9 -4
  4. package/dist/billing/limits.d.ts +1 -1
  5. package/dist/chunk-6WKPWE5S.js +2380 -0
  6. package/dist/chunk-6WKPWE5S.js.map +1 -0
  7. package/dist/chunk-JJU6I5XD.js +2713 -0
  8. package/dist/chunk-JJU6I5XD.js.map +1 -0
  9. package/dist/chunk-NYPMQ7NO.js +2270 -0
  10. package/dist/chunk-NYPMQ7NO.js.map +1 -0
  11. package/dist/dependencies.d.ts +26 -6
  12. package/dist/domain/capabilities.d.ts +35 -3
  13. package/dist/domain/company-profile-durable-learning-adapter.d.ts +39 -0
  14. package/dist/domain/durable-learning-slack-publication.d.ts +72 -0
  15. package/dist/domain/editable-artifacts/agent-application.d.ts +192 -0
  16. package/dist/domain/editable-artifacts/durable-export-postgres.d.ts +4 -0
  17. package/dist/domain/editable-artifacts/durable-export.d.ts +212 -0
  18. package/dist/domain/editable-artifacts/errors.d.ts +47 -0
  19. package/dist/domain/editable-artifacts/hash.d.ts +11 -0
  20. package/dist/domain/editable-artifacts/in-memory.d.ts +99 -0
  21. package/dist/domain/editable-artifacts/index.d.ts +14 -0
  22. package/dist/domain/editable-artifacts/ports.d.ts +341 -0
  23. package/dist/domain/editable-artifacts/postgres-adapters.d.ts +13 -0
  24. package/dist/domain/editable-artifacts/service.d.ts +105 -0
  25. package/dist/domain/editable-artifacts/snapshot-compaction.d.ts +44 -0
  26. package/dist/domain/editable-artifacts/snapshot-verifier-genesis.d.ts +50 -0
  27. package/dist/domain/editable-artifacts/snapshot-verifier-materialization.d.ts +21 -0
  28. package/dist/domain/editable-artifacts/snapshot-verifier.d.ts +118 -0
  29. package/dist/domain/editable-artifacts/types.d.ts +410 -0
  30. package/dist/domain/memory-slack-delivery.d.ts +19 -0
  31. package/dist/domain/memory-slack-publication.d.ts +0 -2
  32. package/dist/domain/packs.d.ts +29 -1
  33. package/dist/domain/personal-connection-delegations.d.ts +9 -1
  34. package/dist/domain/scheduled-tasks.d.ts +27 -3
  35. package/dist/domain/session-tool-policy.d.ts +2 -2
  36. package/dist/domain/sessions.d.ts +44 -10
  37. package/dist/domain/skill-imports.d.ts +32 -0
  38. package/dist/domain/slack-publication-secret-safety.d.ts +8 -0
  39. package/dist/domain/timeline-annotations.d.ts +5 -0
  40. package/dist/domain/video-generation-capabilities.d.ts +9 -0
  41. package/dist/domain/video-generation.d.ts +47 -0
  42. package/dist/editable-artifact-live/application.d.ts +69 -0
  43. package/dist/editable-artifact-live/errors.d.ts +1 -0
  44. package/dist/editable-artifact-live/index.d.ts +8 -0
  45. package/dist/editable-artifact-live/outbox-dispatcher.d.ts +162 -0
  46. package/dist/editable-artifact-live/ports.d.ts +100 -0
  47. package/dist/editable-artifact-live/server.d.ts +71 -0
  48. package/dist/editable-artifact-live/ticket.d.ts +40 -0
  49. package/dist/editable-artifact-live/types.d.ts +213 -0
  50. package/dist/editable-artifact-live/wire.d.ts +34 -0
  51. package/dist/editable-artifact-live.d.ts +2 -0
  52. package/dist/editable-artifact-live.js +58 -0
  53. package/dist/editable-artifact-live.js.map +1 -0
  54. package/dist/editable-artifacts.d.ts +2 -0
  55. package/dist/editable-artifacts.js +179 -0
  56. package/dist/editable-artifacts.js.map +1 -0
  57. package/dist/index.d.ts +35 -25
  58. package/dist/index.js +3184 -652
  59. package/dist/index.js.map +1 -1
  60. package/dist/managed-session.d.ts +53 -0
  61. package/dist/rigs/index.d.ts +1 -1
  62. package/dist/rigs/provider-images.d.ts +31 -0
  63. package/dist/sandbox/fleet.d.ts +9 -1
  64. package/dist/sandbox/routing.d.ts +1 -0
  65. package/dist/session-authorization.d.ts +10 -1
  66. package/dist/workflow-wake-contract.d.ts +7 -0
  67. package/package.json +18 -10
  68. package/src/access/index.ts +43 -3
  69. package/src/application/new-session-drafts.ts +2 -0
  70. package/src/application/session-commands.ts +217 -116
  71. package/src/dependencies.ts +30 -2
  72. package/src/domain/capabilities.ts +672 -218
  73. package/src/domain/company-profile-durable-learning-adapter.ts +221 -0
  74. package/src/domain/durable-learning-slack-publication.ts +202 -0
  75. package/src/domain/editable-artifacts/agent-application.ts +687 -0
  76. package/src/domain/editable-artifacts/durable-export-postgres.ts +139 -0
  77. package/src/domain/editable-artifacts/durable-export.ts +734 -0
  78. package/src/domain/editable-artifacts/errors.ts +115 -0
  79. package/src/domain/editable-artifacts/hash.ts +131 -0
  80. package/src/domain/editable-artifacts/in-memory.ts +1662 -0
  81. package/src/domain/editable-artifacts/index.ts +14 -0
  82. package/src/domain/editable-artifacts/ports.ts +462 -0
  83. package/src/domain/editable-artifacts/postgres-adapters.ts +49 -0
  84. package/src/domain/editable-artifacts/service.ts +2402 -0
  85. package/src/domain/editable-artifacts/snapshot-compaction.ts +246 -0
  86. package/src/domain/editable-artifacts/snapshot-verifier-genesis.ts +235 -0
  87. package/src/domain/editable-artifacts/snapshot-verifier-materialization.ts +74 -0
  88. package/src/domain/editable-artifacts/snapshot-verifier.ts +687 -0
  89. package/src/domain/editable-artifacts/types.ts +835 -0
  90. package/src/domain/insights.ts +136 -33
  91. package/src/domain/memory-slack-delivery.ts +204 -0
  92. package/src/domain/memory-slack-publication.ts +10 -19
  93. package/src/domain/packs.ts +266 -5
  94. package/src/domain/personal-connection-delegations.ts +97 -6
  95. package/src/domain/resources.ts +10 -20
  96. package/src/domain/scheduled-tasks.ts +365 -25
  97. package/src/domain/session-tool-policy.ts +8 -2
  98. package/src/domain/sessions.ts +388 -155
  99. package/src/domain/skill-imports.ts +350 -0
  100. package/src/domain/slack-publication-secret-safety.ts +42 -0
  101. package/src/domain/timeline-annotations.ts +204 -0
  102. package/src/domain/video-generation-capabilities.ts +69 -0
  103. package/src/domain/video-generation.ts +249 -0
  104. package/src/editable-artifact-live/application.ts +182 -0
  105. package/src/editable-artifact-live/errors.ts +4 -0
  106. package/src/editable-artifact-live/index.ts +8 -0
  107. package/src/editable-artifact-live/outbox-dispatcher.ts +916 -0
  108. package/src/editable-artifact-live/ports.ts +139 -0
  109. package/src/editable-artifact-live/server.ts +1707 -0
  110. package/src/editable-artifact-live/ticket.ts +217 -0
  111. package/src/editable-artifact-live/types.ts +286 -0
  112. package/src/editable-artifact-live/wire.ts +95 -0
  113. package/src/editable-artifact-live.ts +2 -0
  114. package/src/editable-artifacts.ts +2 -0
  115. package/src/index.ts +14 -0
  116. package/src/managed-auth-type.ts +4 -3
  117. package/src/managed-session.ts +36 -0
  118. package/src/rigs/index.ts +26 -19
  119. package/src/rigs/provider-images.ts +110 -0
  120. package/src/sandbox/fleet.ts +56 -1
  121. package/src/sandbox/routing.ts +32 -3
  122. package/src/session-authorization.ts +20 -0
  123. package/src/workflow-wake-contract.ts +8 -0
@@ -0,0 +1,341 @@
1
+ import type { EditableArtifact, EditableArtifactActor, EditableArtifactCausalFrontier, EditableArtifactId, EditableArtifactLiveOutboxRecord, EditableArtifactMutationIntent, EditableArtifactOperationId, EditableArtifactOperationRecord, EditableArtifactOriginOperation, EditableArtifactOriginalImport, EditableArtifactOutboxId, EditableArtifactOutboxRetryFailureCode, EditableArtifactOutboxDeadLetterFailureCode, EditableArtifactPermission, EditableArtifactReceipt, EditableArtifactScope, EditableArtifactSequenceCheckpoint, EditableArtifactSnapshotId, EditableArtifactSnapshotMetadata, EditableArtifactStableId, EditableArtifactStateHash, EditableArtifactTransactionId, EditableArtifactClientTransactionId, EditableArtifactCommittedTransactionRecord, EditableArtifactModality, EditableArtifactRequestHash, EditableArtifactSerialized, EditableArtifactSerializedCommittedTransactionRecord, EditableArtifactSerializedSnapshotMetadata, EditableArtifactSpreadsheet, EditableArtifactSpreadsheetCommittedTransactionRecord, EditableArtifactSpreadsheetSnapshotMetadata, CreateEditableArtifactResult, PublishEditableArtifactSnapshotRequest, ValidatedEditableArtifactMutationIntent } from "./types.js";
2
+ export type EditableArtifactAuthorizationRequest = Readonly<{
3
+ scope: EditableArtifactScope;
4
+ artifactId: EditableArtifactId;
5
+ actor: EditableArtifactActor;
6
+ permission: EditableArtifactPermission;
7
+ }>;
8
+ export type EditableArtifactAuthorizationDecision = Readonly<{
9
+ allowed: boolean;
10
+ /**
11
+ * Current durable local policy revision, even when access is denied.
12
+ * `create` decisions use the workspace's scope-create head. Every other
13
+ * decision uses the target artifact's authorization head. A decision is not
14
+ * commit authority by itself: the corresponding store write must compare
15
+ * this revision atomically with its durable policy head.
16
+ */
17
+ revision: number;
18
+ }>;
19
+ export interface EditableArtifactAuthorizationPort {
20
+ authorize(request: EditableArtifactAuthorizationRequest): Promise<EditableArtifactAuthorizationDecision>;
21
+ }
22
+ export type EditableArtifactKernelState = Readonly<{
23
+ modality: "spreadsheet";
24
+ artifact: EditableArtifactSpreadsheet;
25
+ snapshot: EditableArtifactSpreadsheetSnapshotMetadata | null;
26
+ /** Replay work after the current snapshot, used for bounded compaction admission. */
27
+ tailTransactionCount: number;
28
+ tailByteSize: number;
29
+ /** Canonical OGACO tail strictly after the snapshot coverage. */
30
+ committedTransactionTail: readonly EditableArtifactSpreadsheetCommittedTransactionRecord[];
31
+ }> | Readonly<{
32
+ modality: "document" | "presentation";
33
+ artifact: EditableArtifactSerialized;
34
+ snapshot: EditableArtifactSerializedSnapshotMetadata | null;
35
+ /** Replay work after the current snapshot, used for bounded compaction admission. */
36
+ tailTransactionCount: number;
37
+ tailByteSize: number;
38
+ /** Native revision at the sequence boundary immediately before the tail. */
39
+ baseNativeRevision: number;
40
+ /** Canonical OGAST tail strictly after the snapshot coverage. */
41
+ committedTransactionTail: readonly EditableArtifactSerializedCommittedTransactionRecord[];
42
+ }>;
43
+ type ApplyAuthoritativeEditableArtifactKernelRequestCommon = Readonly<{
44
+ state: EditableArtifactKernelState;
45
+ actor: EditableArtifactActor;
46
+ intent: ValidatedEditableArtifactMutationIntent;
47
+ requestHash: EditableArtifactReceipt["requestHash"];
48
+ intentBytes: Uint8Array;
49
+ }>;
50
+ export type ApplyAuthoritativeEditableArtifactKernelRequest = (ApplyAuthoritativeEditableArtifactKernelRequestCommon & Readonly<{
51
+ modality: "spreadsheet";
52
+ /** Authored base plus the exact resolved predecessor transaction stamp. */
53
+ resolvedCausalBase: EditableArtifactCausalFrontier;
54
+ resolvedUndoTargets: readonly EditableArtifactOperationRecord[];
55
+ }>) | (ApplyAuthoritativeEditableArtifactKernelRequestCommon & Readonly<{
56
+ modality: "document" | "presentation";
57
+ }>);
58
+ export type ApplyAuthoritativeEditableArtifactKernelResult = Readonly<{
59
+ modality: "spreadsheet";
60
+ /** Exact canonical OGACO bytes returned by the authoritative native kernel. */
61
+ committedTransactionBytes: Uint8Array;
62
+ kernelVersion: string;
63
+ modelSchemaVersion: number;
64
+ }> | Readonly<{
65
+ modality: "document" | "presentation";
66
+ /** Exact canonical OGADR/OGAPR receipt returned by the native kernel. */
67
+ nativeReceiptBytes: Uint8Array;
68
+ resultingStateHash: EditableArtifactStateHash;
69
+ kernelVersion: string;
70
+ modelSchemaVersion: number;
71
+ }>;
72
+ /**
73
+ * The only port allowed to turn untrusted commands into canonical operations.
74
+ * API/client adapters must never construct operation bytes themselves.
75
+ */
76
+ export interface AuthoritativeEditableArtifactKernelPort {
77
+ /**
78
+ * Must be side-effect free. Optimistic concurrency may discard a result and
79
+ * invoke the kernel again against a newer authoritative basis.
80
+ */
81
+ applyTransaction(request: ApplyAuthoritativeEditableArtifactKernelRequest): Promise<ApplyAuthoritativeEditableArtifactKernelResult>;
82
+ }
83
+ /** Trusted adapter over the one shared OGATX001 decoder/hash verifier. */
84
+ export interface EditableArtifactMutationIntentCodecPort {
85
+ /** Decode canonical bytes and throw request_hash_mismatch unless the exact digest matches. */
86
+ decodeAndVerify(input: Readonly<{
87
+ intentBytes: Uint8Array;
88
+ requestHash: EditableArtifactReceipt["requestHash"];
89
+ }>): Promise<EditableArtifactMutationIntent>;
90
+ }
91
+ /**
92
+ * Verifies the immutable blob itself before metadata can become the replay
93
+ * base: size/hash, canonical decode, embedded boundary, kernel/schema/protocol,
94
+ * and reconstructed state hash. `blobReference` must address immutable bytes.
95
+ */
96
+ export interface EditableArtifactSnapshotVerifierPort {
97
+ verify(input: Readonly<{
98
+ scope: EditableArtifactScope;
99
+ artifactId: EditableArtifactId;
100
+ actor: EditableArtifactActor;
101
+ snapshot: PublishEditableArtifactSnapshotRequest;
102
+ }>): Promise<void>;
103
+ }
104
+ /**
105
+ * Trusted server-side genesis pipeline. It asks the authoritative kernel for
106
+ * the canonical empty model and uploads those exact bytes to immutable object
107
+ * storage. The service still verifies the returned object before publication.
108
+ */
109
+ export interface EditableArtifactGenesisPort {
110
+ prepare(input: {
111
+ scope: EditableArtifactScope;
112
+ artifactId: EditableArtifactId;
113
+ snapshotId: EditableArtifactSnapshotId;
114
+ modality: EditableArtifactModality;
115
+ signal?: AbortSignal;
116
+ }): Promise<PublishEditableArtifactSnapshotRequest>;
117
+ }
118
+ /** Trusted native reconstruction + immutable upload used only for state-neutral maintenance. */
119
+ export interface EditableArtifactCompactionPort {
120
+ prepare(input: {
121
+ scope: EditableArtifactScope;
122
+ artifactId: EditableArtifactId;
123
+ snapshotId: EditableArtifactSnapshotId;
124
+ state: EditableArtifactKernelState;
125
+ signal?: AbortSignal;
126
+ }): Promise<PublishEditableArtifactSnapshotRequest>;
127
+ }
128
+ export interface EditableArtifactClockPort {
129
+ now(): Date;
130
+ }
131
+ export type EditableArtifactStableIdKind = "artifact" | "snapshot" | "blob" | "receipt" | "outbox" | "transaction";
132
+ export interface EditableArtifactStableIdFactoryPort {
133
+ next(kind: EditableArtifactStableIdKind): EditableArtifactStableId;
134
+ }
135
+ export type CreateEditableArtifactStoreRequest = Readonly<{
136
+ scope: EditableArtifactScope;
137
+ artifactId: EditableArtifactId;
138
+ /** Rechecked by durable production stores in the creation transaction. */
139
+ authorizationActor: EditableArtifactActor;
140
+ receiptId: EditableArtifactReceipt["receiptId"];
141
+ authorityKey: string;
142
+ idempotencyKey: EditableArtifactClientTransactionId;
143
+ requestHash: EditableArtifactRequestHash;
144
+ operationKind: EditableArtifactOriginOperation;
145
+ /** Scope-create policy head observed by the authorization decision. */
146
+ expectedScopeAuthorizationRevision: number;
147
+ /** Initial per-artifact policy head installed by the successful create. */
148
+ initialArtifactAuthorizationRevision: number;
149
+ modality: EditableArtifactModality;
150
+ title: string;
151
+ createdBySubjectId: string;
152
+ genesisSnapshot: EditableArtifactSnapshotMetadata;
153
+ originalImport?: Readonly<EditableArtifactOriginalImport & {
154
+ blobRefId: EditableArtifactStableId;
155
+ }>;
156
+ outbox: EditableArtifactLiveOutboxRecord;
157
+ }>;
158
+ export type CreateEditableArtifactStoreResult = Readonly<{
159
+ kind: "result";
160
+ value: CreateEditableArtifactResult;
161
+ }> | Readonly<{
162
+ kind: "authorization_stale";
163
+ }>;
164
+ export type AdvanceEditableArtifactScopeAuthorizationRevisionResult = Readonly<{
165
+ applied: boolean;
166
+ authorizationRevision: number;
167
+ }>;
168
+ /**
169
+ * Local durable create-policy head. Authorization adapters read this revision
170
+ * while evaluating `create`; invalidation advances it transactionally. This
171
+ * is separate from the per-artifact head because an artifact row does not yet
172
+ * exist while its genesis model is being prepared.
173
+ */
174
+ export interface EditableArtifactScopeAuthorizationRevisionPort {
175
+ readScopeCreateAuthorizationRevision(scope: EditableArtifactScope): Promise<number>;
176
+ advanceScopeCreateAuthorizationRevision(scope: EditableArtifactScope, expectedRevision: number, nextRevision: number): Promise<AdvanceEditableArtifactScopeAuthorizationRevisionResult>;
177
+ }
178
+ export type AdvanceEditableArtifactAuthorizationRevisionResult = Readonly<{
179
+ applied: boolean;
180
+ authorizationRevision: number;
181
+ }>;
182
+ export type ReadEditableArtifactAtAuthorizationRevisionResult = Readonly<{
183
+ kind: "result";
184
+ artifact: EditableArtifact | null;
185
+ }> | Readonly<{
186
+ kind: "authorization_stale";
187
+ }>;
188
+ /** Separate policy/invalidation capability; ordinary mutation code never owns it. */
189
+ export interface EditableArtifactAuthorizationRevisionPort {
190
+ advanceAuthorizationRevision(scope: EditableArtifactScope, artifactId: EditableArtifactId, expectedRevision: number, nextRevision: number): Promise<AdvanceEditableArtifactAuthorizationRevisionResult>;
191
+ }
192
+ export type CommitAppliedEditableArtifactTransaction = Readonly<{
193
+ expectedHeadSequence: number;
194
+ serverTransactionId: EditableArtifactTransactionId;
195
+ receipt: EditableArtifactReceipt;
196
+ committedTransaction: EditableArtifactCommittedTransactionRecord;
197
+ operations: readonly EditableArtifactOperationRecord[];
198
+ outbox: EditableArtifactLiveOutboxRecord;
199
+ }>;
200
+ export type ReadEditableArtifactTransactionBasisRequest = Readonly<{
201
+ actorKey: string;
202
+ clientTransactionId: EditableArtifactReceipt["clientTransactionId"];
203
+ previousLocalTransactionId: EditableArtifactReceipt["previousLocalTransactionId"];
204
+ selectiveUndoOperationIds: readonly EditableArtifactOperationId[];
205
+ }>;
206
+ export type EditableArtifactTransactionUndoBasis = Readonly<{
207
+ operationId: EditableArtifactOperationId;
208
+ operation: EditableArtifactOperationRecord | null;
209
+ claimedBy: EditableArtifactTransactionId | null;
210
+ }>;
211
+ /**
212
+ * One detached, internally consistent read view. Implementations must copy all
213
+ * mutable byte buffers before returning; the kernel may retain this value
214
+ * after the database read transaction has closed.
215
+ */
216
+ export type EditableArtifactTransactionBasis = Readonly<{
217
+ /** Indexed fast path; callers decide replay versus hash collision. */
218
+ kind: "existing";
219
+ receipt: EditableArtifactReceipt;
220
+ }> | Readonly<{
221
+ kind: "basis";
222
+ artifact: EditableArtifact;
223
+ predecessor: EditableArtifactReceipt | null;
224
+ undoTargets: readonly EditableArtifactTransactionUndoBasis[];
225
+ kernelState: EditableArtifactKernelState;
226
+ }>;
227
+ export type ExpectedEditableArtifactPredecessor = Readonly<{
228
+ receiptId: EditableArtifactReceipt["receiptId"];
229
+ serverTransactionId: EditableArtifactTransactionId;
230
+ actorKey: string;
231
+ clientTransactionId: EditableArtifactReceipt["clientTransactionId"];
232
+ replicaId: EditableArtifactReceipt["replicaId"];
233
+ replicaCounter: number;
234
+ }>;
235
+ export type TryCommitAppliedEditableArtifactTransactionRequest = CommitAppliedEditableArtifactTransaction & Readonly<{
236
+ scope: EditableArtifactScope;
237
+ artifactId: EditableArtifactId;
238
+ expectedLifecycle: "active";
239
+ expectedAuthorizationRevision: number;
240
+ /** Rechecked by durable production stores in the commit transaction. */
241
+ authorizationActor: EditableArtifactActor;
242
+ actorKey: string;
243
+ clientTransactionId: EditableArtifactReceipt["clientTransactionId"];
244
+ requestHash: EditableArtifactReceipt["requestHash"];
245
+ expectedPredecessor: ExpectedEditableArtifactPredecessor | null;
246
+ expectedUnclaimedUndoTargets: readonly EditableArtifactOperationId[];
247
+ }>;
248
+ export type TryCommitAppliedEditableArtifactTransactionResult = Readonly<{
249
+ kind: "committed";
250
+ receipt: EditableArtifactReceipt;
251
+ }> | Readonly<{
252
+ kind: "replayed";
253
+ receipt: EditableArtifactReceipt;
254
+ }> | Readonly<{
255
+ kind: "stale";
256
+ }>;
257
+ export type CommitEditableArtifactSnapshot = Readonly<{
258
+ expectedCurrentSnapshotId: EditableArtifactSnapshotId | null;
259
+ expectedAuthorizationRevision: number;
260
+ /** Rechecked by durable production stores in the publication transaction. */
261
+ authorizationActor: EditableArtifactActor;
262
+ /** Public publication requires manage; trusted state-neutral maintenance uses caller authority. */
263
+ authorizationPermission?: "manage" | "read" | "edit";
264
+ snapshot: EditableArtifactSnapshotMetadata;
265
+ outbox: EditableArtifactLiveOutboxRecord;
266
+ }>;
267
+ export type CommitEditableArtifactSnapshotResult = Readonly<{
268
+ kind: "committed";
269
+ }> | Readonly<{
270
+ kind: "authorization_stale";
271
+ }>;
272
+ /**
273
+ * Narrow snapshot-metadata transaction. Mutation history and kernel execution
274
+ * are deliberately absent so they cannot drift back under a database lock.
275
+ */
276
+ export interface EditableArtifactSnapshotUnitOfWorkPort {
277
+ artifact(): EditableArtifact;
278
+ checkpoint(headSequence: number): Promise<EditableArtifactSequenceCheckpoint | null>;
279
+ findSnapshot(snapshotId: EditableArtifactSnapshotId): Promise<EditableArtifactSnapshotMetadata | null>;
280
+ commitSnapshot(input: CommitEditableArtifactSnapshot): Promise<CommitEditableArtifactSnapshotResult>;
281
+ }
282
+ export type ClaimEditableArtifactLiveOutboxRequest = Readonly<{
283
+ owner: string;
284
+ leaseDurationMs: number;
285
+ limit: number;
286
+ }>;
287
+ export interface EditableArtifactStorePort {
288
+ /** Read-only idempotency fast path; `createArtifact` remains authoritative. */
289
+ findArtifactCreation(scope: EditableArtifactScope, operationKind: EditableArtifactOriginOperation, authorityKey: string, idempotencyKey: EditableArtifactClientTransactionId): Promise<CreateEditableArtifactResult | null>;
290
+ createArtifact(request: CreateEditableArtifactStoreRequest): Promise<CreateEditableArtifactStoreResult>;
291
+ /** One tenant-scoped read atomically fenced by the local policy revision. */
292
+ readArtifactAtAuthorizationRevision(scope: EditableArtifactScope, artifactId: EditableArtifactId, expectedAuthorizationRevision: number): Promise<ReadEditableArtifactAtAuthorizationRevisionResult>;
293
+ /** Short consistent read; no write lock may remain held after it resolves. */
294
+ readTransactionBasis(scope: EditableArtifactScope, artifactId: EditableArtifactId, request: ReadEditableArtifactTransactionBasisRequest): Promise<EditableArtifactTransactionBasis>;
295
+ /** Detached exact-head replay basis, fenced by the authorization revision observed by core. */
296
+ readCurrentKernelState(scope: EditableArtifactScope, artifactId: EditableArtifactId, expectedAuthorizationRevision: number): Promise<Readonly<{
297
+ kind: "basis";
298
+ state: EditableArtifactKernelState;
299
+ }> | Readonly<{
300
+ kind: "authorization_stale";
301
+ }>>;
302
+ /**
303
+ * Short atomic commit. Check idempotency before the head CAS. Return stale
304
+ * when any read precondition changed; never partially persist the candidate.
305
+ */
306
+ tryCommitAppliedTransaction(request: TryCommitAppliedEditableArtifactTransactionRequest): Promise<TryCommitAppliedEditableArtifactTransactionResult>;
307
+ /** Snapshot metadata publication remains the only lock-scoped callback. */
308
+ withSnapshotPublicationLock<T>(scope: EditableArtifactScope, artifactId: EditableArtifactId, callback: (unitOfWork: EditableArtifactSnapshotUnitOfWorkPort) => Promise<T>): Promise<T>;
309
+ claimLiveOutbox(request: ClaimEditableArtifactLiveOutboxRequest): Promise<readonly EditableArtifactLiveOutboxRecord[]>;
310
+ markLiveOutboxPublished(input: {
311
+ outboxId: EditableArtifactOutboxId;
312
+ owner: string;
313
+ /** Fences a stale attempt even when one worker identity is reused. */
314
+ attemptCount: number;
315
+ }): Promise<void>;
316
+ releaseLiveOutbox(input: {
317
+ outboxId: EditableArtifactOutboxId;
318
+ owner: string;
319
+ attemptCount: number;
320
+ }): Promise<void>;
321
+ renewLiveOutbox(input: {
322
+ outboxId: EditableArtifactOutboxId;
323
+ owner: string;
324
+ attemptCount: number;
325
+ leaseDurationMs: number;
326
+ }): Promise<void>;
327
+ retryLiveOutbox(input: {
328
+ outboxId: EditableArtifactOutboxId;
329
+ owner: string;
330
+ attemptCount: number;
331
+ retryDelayMs: number;
332
+ errorCode: EditableArtifactOutboxRetryFailureCode;
333
+ }): Promise<void>;
334
+ deadLetterLiveOutbox(input: {
335
+ outboxId: EditableArtifactOutboxId;
336
+ owner: string;
337
+ attemptCount: number;
338
+ errorCode: EditableArtifactOutboxDeadLetterFailureCode;
339
+ }): Promise<void>;
340
+ }
341
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { PostgresEditableArtifactLiveReadStore, PostgresEditableArtifactLiveTicketStore, PostgresEditableArtifactStore } from "@opengeni/db/editable-artifacts";
2
+ import type { EditableArtifactAuthorizationRevisionPort, EditableArtifactScopeAuthorizationRevisionPort, EditableArtifactStorePort } from "./ports.js";
3
+ import type { EditableArtifactLiveReadPort, EditableArtifactLiveTicketStorePort } from "../../editable-artifact-live/ports.js";
4
+ /**
5
+ * One-way nominal adapters over DB DTOs. The PostgreSQL implementations fully
6
+ * validate and detach every returned value; only core applies branded domain
7
+ * names to those already-validated wire-identical shapes.
8
+ */
9
+ export declare function editableArtifactStorePortFromPostgres(store: PostgresEditableArtifactStore): EditableArtifactStorePort;
10
+ export declare function editableArtifactAuthorizationRevisionPortFromPostgres(store: PostgresEditableArtifactStore): EditableArtifactAuthorizationRevisionPort;
11
+ export declare function editableArtifactScopeAuthorizationRevisionPortFromPostgres(store: PostgresEditableArtifactStore): EditableArtifactScopeAuthorizationRevisionPort;
12
+ export declare function editableArtifactLiveReadPortFromPostgres(store: PostgresEditableArtifactLiveReadStore): EditableArtifactLiveReadPort;
13
+ export declare function editableArtifactLiveTicketStorePortFromPostgres(store: PostgresEditableArtifactLiveTicketStore): EditableArtifactLiveTicketStorePort;
@@ -0,0 +1,105 @@
1
+ import type { AuthoritativeEditableArtifactKernelPort, EditableArtifactAuthorizationPort, EditableArtifactClockPort, EditableArtifactCompactionPort, EditableArtifactGenesisPort, EditableArtifactKernelState, EditableArtifactMutationIntentCodecPort, EditableArtifactSnapshotVerifierPort, EditableArtifactStableIdFactoryPort, EditableArtifactStorePort } from "./ports.js";
2
+ import { type ApplyEditableArtifactTransactionRequest, type ApplyEditableArtifactTransactionResult, type CreateEditableArtifactRequest, type CreateEditableArtifactResult, type ImportEditableArtifactRequest, type EditableArtifact, type EditableArtifactActor, type EditableArtifactClientTransactionId, type EditableArtifactReceipt, type EditableArtifactScope, type EditableArtifactSnapshotMetadata, type PublishEditableArtifactSnapshotRequest } from "./types.js";
3
+ export declare const EDITABLE_ARTIFACT_MAX_OPERATIONS_PER_TRANSACTION = 4096;
4
+ export declare const EDITABLE_ARTIFACT_MAX_UNDO_TARGETS_PER_TRANSACTION: number;
5
+ export declare const EDITABLE_ARTIFACT_MAX_COMMAND_BYTES_PER_TRANSACTION: number;
6
+ export declare const EDITABLE_ARTIFACT_MAX_INTENT_BYTES_PER_TRANSACTION: number;
7
+ export declare const EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION = 1;
8
+ export declare const EDITABLE_ARTIFACT_MAX_OPERATION_BYTES_PER_TRANSACTION: number;
9
+ /** Canonical OGACO envelope bound. Kept as an alias for existing consumers. */
10
+ export declare const EDITABLE_ARTIFACT_MAX_COMMITTED_TRANSACTION_BYTES: number;
11
+ export declare const EDITABLE_ARTIFACT_OPERATION_PROTOCOL_VERSION: 1;
12
+ export declare const EDITABLE_ARTIFACT_MAX_COMMIT_ATTEMPTS = 4;
13
+ /** Compact well before hard replay ceilings so one maximum transaction cannot cross them. */
14
+ export declare const EDITABLE_ARTIFACT_COMPACTION_TRANSACTION_THRESHOLD = 1024;
15
+ export declare const EDITABLE_ARTIFACT_COMPACTION_BYTE_THRESHOLD: number;
16
+ export type EditableArtifactServiceDependencies = Readonly<{
17
+ authorization: EditableArtifactAuthorizationPort;
18
+ kernel: AuthoritativeEditableArtifactKernelPort;
19
+ store: EditableArtifactStorePort;
20
+ intentCodec: EditableArtifactMutationIntentCodecPort;
21
+ clock: EditableArtifactClockPort;
22
+ ids: EditableArtifactStableIdFactoryPort;
23
+ snapshotVerifier: EditableArtifactSnapshotVerifierPort;
24
+ genesis: EditableArtifactGenesisPort;
25
+ compaction?: EditableArtifactCompactionPort;
26
+ }>;
27
+ export declare class EditableArtifactService {
28
+ private readonly dependencies;
29
+ private readonly inFlightCreations;
30
+ private readonly inFlightTransactions;
31
+ private readonly inFlightImports;
32
+ private readonly inFlightCompactions;
33
+ constructor(dependencies: EditableArtifactServiceDependencies);
34
+ createArtifact(input: {
35
+ scope: EditableArtifactScope;
36
+ actor: EditableArtifactActor;
37
+ request: CreateEditableArtifactRequest;
38
+ signal?: AbortSignal;
39
+ }): Promise<CreateEditableArtifactResult>;
40
+ private createArtifactOptimistically;
41
+ /**
42
+ * Publishes one verified Office import as the sequence-zero durable state.
43
+ * The caller may name immutable source/snapshot objects, but neither becomes
44
+ * authority until the native snapshot verifier and atomic store commit pass.
45
+ */
46
+ importArtifact(input: {
47
+ scope: EditableArtifactScope;
48
+ actor: EditableArtifactActor;
49
+ request: ImportEditableArtifactRequest;
50
+ signal?: AbortSignal;
51
+ }): Promise<CreateEditableArtifactResult>;
52
+ private importArtifactOptimistically;
53
+ getArtifact(input: {
54
+ scope: EditableArtifactScope;
55
+ artifactId: EditableArtifact["id"];
56
+ actor: EditableArtifactActor;
57
+ }): Promise<EditableArtifact>;
58
+ /**
59
+ * Resolve one actor-scoped durable mutation identity after an idempotency
60
+ * collision. Normal edits do not pay this read; agent transports use it to
61
+ * recover a committed receipt after a lost response without process state.
62
+ */
63
+ findTransactionReceipt(input: {
64
+ scope: EditableArtifactScope;
65
+ artifactId: EditableArtifact["id"];
66
+ actor: EditableArtifactActor;
67
+ clientTransactionId: EditableArtifactClientTransactionId;
68
+ }): Promise<EditableArtifactReceipt | null>;
69
+ /**
70
+ * Returns one detached, internally consistent reconstruction basis for an
71
+ * authorized current-head read. Inspection and compaction deliberately share
72
+ * this store primitive so neither can observe a metadata/snapshot/tail mix.
73
+ */
74
+ readCurrentKernelState(input: {
75
+ scope: EditableArtifactScope;
76
+ artifactId: EditableArtifact["id"];
77
+ actor: EditableArtifactActor;
78
+ }): Promise<EditableArtifactKernelState>;
79
+ applyTransaction(input: {
80
+ scope: EditableArtifactScope;
81
+ artifactId: EditableArtifact["id"];
82
+ actor: EditableArtifactActor;
83
+ request: ApplyEditableArtifactTransactionRequest;
84
+ }): Promise<ApplyEditableArtifactTransactionResult>;
85
+ private applyTransactionOptimistically;
86
+ compactCurrentHead(input: {
87
+ scope: EditableArtifactScope;
88
+ artifactId: EditableArtifact["id"];
89
+ actor: EditableArtifactActor;
90
+ signal?: AbortSignal;
91
+ }): Promise<EditableArtifactSnapshotMetadata>;
92
+ private compactCurrentHeadWithPermission;
93
+ private compactCurrentHeadOnce;
94
+ publishVerifiedSnapshot(input: {
95
+ scope: EditableArtifactScope;
96
+ artifactId: EditableArtifact["id"];
97
+ actor: EditableArtifactActor;
98
+ snapshot: PublishEditableArtifactSnapshotRequest;
99
+ }): Promise<{
100
+ snapshot: EditableArtifactSnapshotMetadata;
101
+ replayed: boolean;
102
+ }>;
103
+ private commitVerifiedSnapshotCandidate;
104
+ private requirePermission;
105
+ }
@@ -0,0 +1,44 @@
1
+ import { type BoundedImmutableObjectWritePort } from "@opengeni/storage";
2
+ import type { EditableArtifactCompactionPort, EditableArtifactKernelState } from "./ports.js";
3
+ import { type EditableArtifactCausalFrontier, type EditableArtifactContentHash, type EditableArtifactId, type EditableArtifactModality, type EditableArtifactScope, type EditableArtifactStateHash, type PublishEditableArtifactSnapshotRequest } from "./types.js";
4
+ type AuthoritativeEditableArtifactCompactionKernelResultCommon = Readonly<{
5
+ scope: EditableArtifactScope;
6
+ artifactId: EditableArtifactId;
7
+ modality: EditableArtifactModality;
8
+ canonicalChunks: AsyncIterable<Uint8Array>;
9
+ canonicalByteSize: number;
10
+ canonicalContentHash: EditableArtifactContentHash;
11
+ stateHash: EditableArtifactStateHash;
12
+ coveredHeadSequence: number;
13
+ modelSchemaVersion: number;
14
+ kernelVersion: string;
15
+ }>;
16
+ export type AuthoritativeEditableArtifactCompactionKernelResult = (AuthoritativeEditableArtifactCompactionKernelResultCommon & Readonly<{
17
+ modality: "spreadsheet";
18
+ coveredCausalFrontier: EditableArtifactCausalFrontier;
19
+ operationProtocolVersion: number;
20
+ crdtStateVersion: number;
21
+ }>) | (AuthoritativeEditableArtifactCompactionKernelResultCommon & Readonly<{
22
+ modality: "document" | "presentation";
23
+ nativeRevision: number;
24
+ }>);
25
+ /** Native authority that replays one detached durable basis without network access. */
26
+ export interface AuthoritativeEditableArtifactCompactionKernelPort {
27
+ createCanonicalSnapshot(input: {
28
+ state: EditableArtifactKernelState;
29
+ signal?: AbortSignal;
30
+ }): Promise<AuthoritativeEditableArtifactCompactionKernelResult>;
31
+ }
32
+ export type EditableArtifactCompactionPipelineDependencies = Readonly<{
33
+ kernel: AuthoritativeEditableArtifactCompactionKernelPort;
34
+ objects: BoundedImmutableObjectWritePort;
35
+ now: () => Date;
36
+ maxSnapshotBytes?: number;
37
+ }>;
38
+ /** Reconstruct, canonicalize, and upload an exact-head state-neutral snapshot. */
39
+ export declare class EditableArtifactCompactionPipeline implements EditableArtifactCompactionPort {
40
+ #private;
41
+ constructor(dependencies: EditableArtifactCompactionPipelineDependencies);
42
+ prepare(input: Parameters<EditableArtifactCompactionPort["prepare"]>[0]): Promise<PublishEditableArtifactSnapshotRequest>;
43
+ }
44
+ export {};
@@ -0,0 +1,50 @@
1
+ import { type BoundedImmutableObjectWritePort } from "@opengeni/storage";
2
+ import type { EditableArtifactGenesisPort } from "./ports.js";
3
+ import { type EditableArtifactCausalFrontier, type EditableArtifactContentHash, type EditableArtifactId, type EditableArtifactModality, type EditableArtifactScope, type EditableArtifactStateHash, type PublishEditableArtifactSnapshotRequest } from "./types.js";
4
+ type AuthoritativeEditableArtifactGenesisKernelResultCommon = Readonly<{
5
+ scope: EditableArtifactScope;
6
+ artifactId: EditableArtifactId;
7
+ modality: EditableArtifactModality;
8
+ canonicalChunks: AsyncIterable<Uint8Array>;
9
+ canonicalByteSize: number;
10
+ canonicalContentHash: EditableArtifactContentHash;
11
+ stateHash: EditableArtifactStateHash;
12
+ coveredHeadSequence: 0;
13
+ modelSchemaVersion: number;
14
+ kernelVersion: string;
15
+ }>;
16
+ export type AuthoritativeEditableArtifactGenesisKernelResult = (AuthoritativeEditableArtifactGenesisKernelResultCommon & Readonly<{
17
+ modality: "spreadsheet";
18
+ coveredCausalFrontier: EditableArtifactCausalFrontier;
19
+ operationProtocolVersion: number;
20
+ crdtStateVersion: number;
21
+ }>) | (AuthoritativeEditableArtifactGenesisKernelResultCommon & Readonly<{
22
+ modality: "document" | "presentation";
23
+ nativeRevision: 0;
24
+ }>);
25
+ /** Trusted no-network native-kernel subprocess; never an HTTP request adapter. */
26
+ export interface AuthoritativeEditableArtifactGenesisKernelPort {
27
+ createCanonicalEmptySnapshot(input: {
28
+ scope: EditableArtifactScope;
29
+ artifactId: EditableArtifactId;
30
+ modality: EditableArtifactModality;
31
+ signal?: AbortSignal;
32
+ }): Promise<AuthoritativeEditableArtifactGenesisKernelResult>;
33
+ }
34
+ export type EditableArtifactGenesisPipelineDependencies = Readonly<{
35
+ kernel: AuthoritativeEditableArtifactGenesisKernelPort;
36
+ objects: BoundedImmutableObjectWritePort;
37
+ now: () => Date;
38
+ maxSnapshotBytes?: number;
39
+ }>;
40
+ /**
41
+ * Creates the only legal sequence-zero candidate. The domain service passes
42
+ * the result through its unchanged snapshot verifier, then commits artifact +
43
+ * checkpoint-0 + snapshot + blob-ref + receipt + outbox atomically.
44
+ */
45
+ export declare class EditableArtifactGenesisPipeline implements EditableArtifactGenesisPort {
46
+ #private;
47
+ constructor(dependencies: EditableArtifactGenesisPipelineDependencies);
48
+ prepare(input: Parameters<EditableArtifactGenesisPort["prepare"]>[0]): Promise<PublishEditableArtifactSnapshotRequest>;
49
+ }
50
+ export {};
@@ -0,0 +1,21 @@
1
+ declare const editableArtifactMaterializationKeyBrand: unique symbol;
2
+ export type EditableArtifactMaterializationKey = string & {
3
+ readonly [editableArtifactMaterializationKeyBrand]: true;
4
+ };
5
+ export type EditableArtifactMaterializationKeyInput = Readonly<{
6
+ stateHash: string;
7
+ format: string;
8
+ /** SHA-256 of the canonical, normalized export options. */
9
+ optionsHash: string;
10
+ codecVersion: string;
11
+ kernelVersion: string;
12
+ fontRegistryHash: string;
13
+ policyHash: string;
14
+ }>;
15
+ /**
16
+ * Complete materialization identity from docs/artifact-engine.md. Length
17
+ * framing prevents concatenation ambiguity and the output is safe as a DB
18
+ * idempotency key; it is deliberately not an object-storage key.
19
+ */
20
+ export declare function editableArtifactMaterializationKey(input: EditableArtifactMaterializationKeyInput): EditableArtifactMaterializationKey;
21
+ export {};