@opengeni/sdk 0.48.0 → 0.57.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 (122) hide show
  1. package/README.md +147 -1
  2. package/dist/artifact-client.d.ts +20 -2
  3. package/dist/artifacts.d.ts +4 -0
  4. package/dist/artifacts.js +11 -0
  5. package/dist/artifacts.js.map +1 -0
  6. package/dist/{chunk-V5F253OG.js → chunk-GU6JF75T.js} +6 -3
  7. package/dist/chunk-GU6JF75T.js.map +1 -0
  8. package/dist/chunk-HJ3HHUT5.js +222 -0
  9. package/dist/chunk-HJ3HHUT5.js.map +1 -0
  10. package/dist/{chunk-KIHGPM7H.js → chunk-JDLDDRNE.js} +20 -14
  11. package/dist/chunk-JDLDDRNE.js.map +1 -0
  12. package/dist/chunk-JRPFWI6T.js +128 -0
  13. package/dist/chunk-JRPFWI6T.js.map +1 -0
  14. package/dist/{chunk-MBGBLVUV.js → chunk-PKQ377ED.js} +1725 -555
  15. package/dist/chunk-PKQ377ED.js.map +1 -0
  16. package/dist/chunk-ST5DDKJP.js +987 -0
  17. package/dist/chunk-ST5DDKJP.js.map +1 -0
  18. package/dist/chunk-VWE2QIVO.js +1162 -0
  19. package/dist/chunk-VWE2QIVO.js.map +1 -0
  20. package/dist/chunk-VYCTL62C.js +230 -0
  21. package/dist/chunk-VYCTL62C.js.map +1 -0
  22. package/dist/{chunk-DXDL7EEW.js → chunk-YKZME56C.js} +197 -113
  23. package/dist/chunk-YKZME56C.js.map +1 -0
  24. package/dist/client.d.ts +240 -16
  25. package/dist/codex-realtime-controller.d.ts +9 -6
  26. package/dist/codex-realtime-controller.js +2 -2
  27. package/dist/codex-realtime-lifecycle.d.ts +1 -1
  28. package/dist/codex-realtime-v3.d.ts +3 -3
  29. package/dist/codex-realtime.d.ts +1 -1
  30. package/dist/company-profile.d.ts +100 -0
  31. package/dist/core.d.ts +5 -5
  32. package/dist/core.js +10 -5
  33. package/dist/desktop.d.ts +9 -1
  34. package/dist/editable-artifact-resources.d.ts +96 -0
  35. package/dist/editable-artifacts/browser-session.d.ts +35 -0
  36. package/dist/editable-artifacts/controller.d.ts +60 -0
  37. package/dist/editable-artifacts/errors.d.ts +23 -0
  38. package/dist/editable-artifacts/http-live-transport.d.ts +46 -0
  39. package/dist/editable-artifacts/index.d.ts +19 -0
  40. package/dist/editable-artifacts/pool.d.ts +15 -0
  41. package/dist/editable-artifacts/session.d.ts +96 -0
  42. package/dist/editable-artifacts/storage.d.ts +72 -0
  43. package/dist/editable-artifacts/types.d.ts +416 -0
  44. package/dist/editable-artifacts/worker/browser-client.d.ts +80 -0
  45. package/dist/editable-artifacts/worker/browser-entry.d.ts +6 -0
  46. package/dist/editable-artifacts/worker/kernel-adapter.d.ts +45 -0
  47. package/dist/editable-artifacts/worker/rpc-protocol.d.ts +92 -0
  48. package/dist/editable-artifacts/worker/runtime.d.ts +66 -0
  49. package/dist/editable-artifacts/worker/wire-codec.d.ts +52 -0
  50. package/dist/editable-artifacts-worker.d.ts +8 -0
  51. package/dist/editable-artifacts-worker.js +1708 -0
  52. package/dist/editable-artifacts-worker.js.map +1 -0
  53. package/dist/editable-artifacts.d.ts +6 -0
  54. package/dist/editable-artifacts.js +5954 -0
  55. package/dist/editable-artifacts.js.map +1 -0
  56. package/dist/gateway-realtime-transport.d.ts +2 -1
  57. package/dist/gateway-realtime-transport.js +5 -3
  58. package/dist/index.d.ts +45 -35
  59. package/dist/index.js +134 -64
  60. package/dist/index.js.map +1 -1
  61. package/dist/interaction-revision-stream.d.ts +11 -0
  62. package/dist/interaction.d.ts +1484 -0
  63. package/dist/interaction.js +81 -0
  64. package/dist/interaction.js.map +1 -0
  65. package/dist/memory-slack-client.d.ts +13 -0
  66. package/dist/memory-slack-delivery.d.ts +99 -0
  67. package/dist/memory-slack.d.ts +4 -0
  68. package/dist/memory-slack.js +44 -0
  69. package/dist/memory-slack.js.map +1 -0
  70. package/dist/proxy.d.ts +3 -3
  71. package/dist/realtime.d.ts +14 -14
  72. package/dist/realtime.js +11 -7
  73. package/dist/realtime.js.map +1 -1
  74. package/dist/retained-artifacts.d.ts +12 -0
  75. package/dist/stream.d.ts +1 -1
  76. package/dist/terminal.d.ts +1 -1
  77. package/dist/types.d.ts +1347 -34
  78. package/dist/workspace-control-stream.d.ts +2 -2
  79. package/dist/workspace-live-stream.d.ts +14 -0
  80. package/dist/workspace-state.d.ts +1 -1
  81. package/package.json +29 -3
  82. package/src/artifact-client.ts +129 -0
  83. package/src/artifacts.ts +17 -0
  84. package/src/client.ts +3022 -910
  85. package/src/codex-realtime-controller.ts +25 -7
  86. package/src/codex-realtime-lifecycle.ts +1 -0
  87. package/src/company-profile.ts +92 -0
  88. package/src/desktop.ts +11 -1
  89. package/src/editable-artifact-resources.ts +119 -0
  90. package/src/editable-artifacts/browser-session.ts +176 -0
  91. package/src/editable-artifacts/controller.ts +2632 -0
  92. package/src/editable-artifacts/errors.ts +52 -0
  93. package/src/editable-artifacts/http-live-transport.ts +1449 -0
  94. package/src/editable-artifacts/index.ts +175 -0
  95. package/src/editable-artifacts/pool.ts +81 -0
  96. package/src/editable-artifacts/session.ts +778 -0
  97. package/src/editable-artifacts/storage.ts +1718 -0
  98. package/src/editable-artifacts/types.ts +499 -0
  99. package/src/editable-artifacts/worker/browser-client.ts +1167 -0
  100. package/src/editable-artifacts/worker/browser-entry.ts +57 -0
  101. package/src/editable-artifacts/worker/kernel-adapter.ts +1039 -0
  102. package/src/editable-artifacts/worker/rpc-protocol.ts +622 -0
  103. package/src/editable-artifacts/worker/runtime.ts +1204 -0
  104. package/src/editable-artifacts/worker/wire-codec.ts +852 -0
  105. package/src/editable-artifacts-worker.ts +8 -0
  106. package/src/editable-artifacts.ts +6 -0
  107. package/src/errors.ts +16 -2
  108. package/src/gateway-realtime-transport.ts +252 -109
  109. package/src/index.ts +215 -1
  110. package/src/interaction-revision-stream.ts +117 -0
  111. package/src/interaction.ts +2874 -0
  112. package/src/memory-slack-client.ts +71 -0
  113. package/src/memory-slack-delivery.ts +128 -0
  114. package/src/memory-slack.ts +19 -0
  115. package/src/realtime.ts +14 -4
  116. package/src/retained-artifacts.ts +326 -0
  117. package/src/types.ts +1636 -52
  118. package/src/workspace-live-stream.ts +137 -0
  119. package/dist/chunk-DXDL7EEW.js.map +0 -1
  120. package/dist/chunk-KIHGPM7H.js.map +0 -1
  121. package/dist/chunk-MBGBLVUV.js.map +0 -1
  122. package/dist/chunk-V5F253OG.js.map +0 -1
@@ -0,0 +1,416 @@
1
+ /** Opaque artifact identity. Workspace authority is carried by the ticket. */
2
+ export type EditableArtifactId = string;
3
+ export type EditableArtifactModality = "document" | "spreadsheet" | "presentation";
4
+ export type EditableArtifactSerializedModality = Exclude<EditableArtifactModality, "spreadsheet">;
5
+ export type EditableArtifactCausalEntry = Readonly<{
6
+ replicaId: string;
7
+ counter: number;
8
+ }>;
9
+ /** Sorted by replicaId, duplicate-free. */
10
+ export type EditableArtifactCausalFrontier = readonly EditableArtifactCausalEntry[];
11
+ /**
12
+ * Short-lived, artifact-scoped credential minted over authenticated HTTP.
13
+ * Implementations must never put a durable bearer token in a socket URL.
14
+ */
15
+ export type EditableArtifactSyncTicket = {
16
+ artifactId: EditableArtifactId;
17
+ modality: EditableArtifactModality;
18
+ replicaId: string;
19
+ token: string;
20
+ expiresAt: string;
21
+ protocolVersion: number;
22
+ };
23
+ /** Immutable, server-verified canonical state. */
24
+ type EditableArtifactSnapshotCommon = {
25
+ artifactId: EditableArtifactId;
26
+ sequence: number;
27
+ stateHash: string;
28
+ digest: string;
29
+ kernelVersion: string;
30
+ modelSchemaVersion: number;
31
+ bytes: Uint8Array;
32
+ };
33
+ export type EditableArtifactSpreadsheetSnapshot = EditableArtifactSnapshotCommon & {
34
+ modality: "spreadsheet";
35
+ causalFrontier: EditableArtifactCausalFrontier;
36
+ protocolVersion: number;
37
+ };
38
+ export type EditableArtifactSerializedSnapshot = EditableArtifactSnapshotCommon & {
39
+ modality: EditableArtifactSerializedModality;
40
+ nativeRevision: number;
41
+ };
42
+ export type EditableArtifactSnapshot = EditableArtifactSpreadsheetSnapshot | EditableArtifactSerializedSnapshot;
43
+ /** One authoritative, atomically committed artifact transaction. */
44
+ type EditableArtifactCommittedTransactionCommon = {
45
+ artifactId: EditableArtifactId;
46
+ transactionId: string;
47
+ requestHash: string;
48
+ startSequence: number;
49
+ endSequence: number;
50
+ priorStateHash: string;
51
+ stateHash: string;
52
+ committedTransactionBytes: Uint8Array;
53
+ };
54
+ export type EditableArtifactSpreadsheetCommittedTransaction = EditableArtifactCommittedTransactionCommon & {
55
+ modality: "spreadsheet";
56
+ causalFrontier: EditableArtifactCausalFrontier;
57
+ protocolVersion: number;
58
+ /** Exact whole canonical OGACO committed-transaction envelope. */
59
+ committedTransactionBytes: Uint8Array;
60
+ };
61
+ export type EditableArtifactSerializedCommittedTransaction = EditableArtifactCommittedTransactionCommon & {
62
+ modality: EditableArtifactSerializedModality;
63
+ priorNativeRevision: number;
64
+ nativeRevision: number;
65
+ commitProtocolVersion: number;
66
+ /** Exact whole canonical OGAST committed-transaction envelope. */
67
+ committedTransactionBytes: Uint8Array;
68
+ };
69
+ export type EditableArtifactCommittedTransaction = EditableArtifactSpreadsheetCommittedTransaction | EditableArtifactSerializedCommittedTransaction;
70
+ /** A locally durable command batch. Retried with exactly the same identity. */
71
+ type EditableArtifactPendingTransactionCommon = {
72
+ artifactId: EditableArtifactId;
73
+ /** Caller-authored portable OGATX client transaction identity. */
74
+ clientTransactionId: string;
75
+ requestHash: string;
76
+ protocolVersion: number;
77
+ modelSchemaVersion: number;
78
+ commandVersion: number;
79
+ replicaId: string;
80
+ /** Monotonic within one persisted replica epoch; never changed on retry. */
81
+ replicaCounter: number;
82
+ /** Symbolic predecessor resolved by the server to that transaction's causal stamp. */
83
+ previousLocalTransactionId: string | null;
84
+ observedHeadSequence: number;
85
+ commandBytes: Uint8Array;
86
+ /** Exact OGATX001 bytes persisted and retried byte-identically. */
87
+ intentBytes: Uint8Array;
88
+ createdAt: number;
89
+ };
90
+ export type EditableArtifactSpreadsheetPendingTransaction = EditableArtifactPendingTransactionCommon & {
91
+ modality: "spreadsheet";
92
+ causalBase: EditableArtifactCausalFrontier;
93
+ selectiveUndoTargets: readonly string[];
94
+ };
95
+ export type EditableArtifactSerializedPendingTransaction = EditableArtifactPendingTransactionCommon & {
96
+ modality: EditableArtifactSerializedModality;
97
+ /** Local proof that the strictly serialized command was authored over this native revision. */
98
+ observedNativeRevision: number;
99
+ };
100
+ export type EditableArtifactPendingTransaction = EditableArtifactSpreadsheetPendingTransaction | EditableArtifactSerializedPendingTransaction;
101
+ export type EditableArtifactBlockedPending = Readonly<{
102
+ clientTransactionId: string;
103
+ code: string;
104
+ }>;
105
+ /** A bounded, sparse spreadsheet viewport requested from the Worker-owned kernel. */
106
+ export type EditableSpreadsheetViewportQuery = Readonly<{
107
+ sheetId: string;
108
+ startRow: number;
109
+ startColumn: number;
110
+ rowCount: number;
111
+ columnCount: number;
112
+ /** Hard-clamped by the Worker/kernel; never permits a partial response. */
113
+ maxCells?: number;
114
+ /** Hard-clamped by the Worker/kernel; never permits a partial response. */
115
+ maxBytes?: number;
116
+ }>;
117
+ export type EditableSpreadsheetFormulaError = "null" | "divide_by_zero" | "value" | "reference" | "name" | "number" | "not_available" | "spill" | "calculation" | Readonly<{
118
+ custom: string;
119
+ }>;
120
+ export type EditableSpreadsheetCellValue = Readonly<{
121
+ kind: "empty";
122
+ }> | Readonly<{
123
+ kind: "boolean";
124
+ value: boolean;
125
+ }> | Readonly<{
126
+ kind: "number";
127
+ value: number;
128
+ }>
129
+ /** Canonical `Date.prototype.toISOString()` output; never a numeric serial. */
130
+ | Readonly<{
131
+ kind: "date";
132
+ value: string;
133
+ }> | Readonly<{
134
+ kind: "text";
135
+ value: string;
136
+ }> | Readonly<{
137
+ kind: "error";
138
+ value: EditableSpreadsheetFormulaError;
139
+ }>;
140
+ export type EditableSpreadsheetProjectedCell = Readonly<{
141
+ row: number;
142
+ column: number;
143
+ formula: string | null;
144
+ value: EditableSpreadsheetCellValue;
145
+ }>;
146
+ /**
147
+ * Immutable projection of one exact speculative kernel revision. Cells are
148
+ * sparse, strictly row-major, unique, and all inside the requested rectangle.
149
+ */
150
+ export type EditableSpreadsheetViewportProjection = Readonly<{
151
+ revision: bigint;
152
+ sheetId: string;
153
+ /** Creation operation that pins the live CRDT generation, if collaborative. */
154
+ generationId: string | null;
155
+ startRow: number;
156
+ startColumn: number;
157
+ rowCount: number;
158
+ columnCount: number;
159
+ cells: readonly EditableSpreadsheetProjectedCell[];
160
+ }>;
161
+ export type EditableSpreadsheetUsedBounds = Readonly<{
162
+ startRow: number;
163
+ startColumn: number;
164
+ /** Inclusive maximum occupied row. */
165
+ endRow: number;
166
+ /** Inclusive maximum occupied column. */
167
+ endColumn: number;
168
+ }>;
169
+ export type EditableSpreadsheetSheetMetadata = Readonly<{
170
+ sheetId: string;
171
+ generationId: string | null;
172
+ name: string;
173
+ usedBounds: EditableSpreadsheetUsedBounds | null;
174
+ }>;
175
+ /**
176
+ * Bounded workbook catalog from the Worker-owned kernel. False feature flags
177
+ * mean the kernel does not model that feature; the SDK never invents authority.
178
+ */
179
+ export type EditableSpreadsheetMetadataProjection = Readonly<{
180
+ revision: bigint;
181
+ modeledFeatures: Readonly<{
182
+ dimensions: boolean;
183
+ hidden: boolean;
184
+ merges: boolean;
185
+ }>;
186
+ sheets: readonly EditableSpreadsheetSheetMetadata[];
187
+ }>;
188
+ export type EditableSpreadsheetMetadataQuery = Readonly<{
189
+ maxSheets?: number;
190
+ maxBytes?: number;
191
+ }>;
192
+ export type EditableArtifactStoredReplica = {
193
+ artifactId: EditableArtifactId;
194
+ modality: EditableArtifactModality;
195
+ /** Last immutable server snapshot loaded and verified by the kernel. */
196
+ snapshot: EditableArtifactSnapshot;
197
+ /** Contiguous committed tail needed to reconstruct `cursor` after reload. */
198
+ tail: EditableArtifactCommittedTransaction[];
199
+ cursor: number;
200
+ stateHash: string;
201
+ updatedAt: number;
202
+ };
203
+ type EditableArtifactBootstrapCommon = {
204
+ artifactId: EditableArtifactId;
205
+ protocolVersion: number;
206
+ headSequence: number;
207
+ headStateHash: string;
208
+ kernelVersion: string;
209
+ modelSchemaVersion: number;
210
+ writable: boolean;
211
+ /** Earliest sequence still available through replay, inclusive. */
212
+ minimumReplaySequence: number;
213
+ /** Supplied for first load, requested resync, or a newer compact snapshot. */
214
+ snapshot: EditableArtifactSnapshot | null;
215
+ /** Server has expired this replica's history and requires a fresh snapshot. */
216
+ resyncRequired: boolean;
217
+ };
218
+ export type EditableArtifactBootstrap = EditableArtifactBootstrapCommon & ({
219
+ modality: "spreadsheet";
220
+ headCausalFrontier: EditableArtifactCausalFrontier;
221
+ } | {
222
+ modality: EditableArtifactSerializedModality;
223
+ headNativeRevision: number;
224
+ });
225
+ export type EditableArtifactReplayPage = {
226
+ artifactId: EditableArtifactId;
227
+ transactions: EditableArtifactCommittedTransaction[];
228
+ headSequence: number;
229
+ };
230
+ export type EditableArtifactSubmitReceipt = {
231
+ artifactId: EditableArtifactId;
232
+ /** Exact OGATX client identity acknowledged by the authority. */
233
+ clientTransactionId: string;
234
+ /** Authoritative OGACO (spreadsheet) or OGAST (document/presentation) transaction identity. */
235
+ transactionId: string;
236
+ requestHash: string;
237
+ committed: EditableArtifactCommittedTransaction;
238
+ };
239
+ export type EditableArtifactLiveMessage = {
240
+ type: "transaction.committed";
241
+ transaction: EditableArtifactCommittedTransaction;
242
+ } | {
243
+ type: "head";
244
+ artifactId: EditableArtifactId;
245
+ headSequence: number;
246
+ } | {
247
+ type: "authorization";
248
+ artifactId: EditableArtifactId;
249
+ writable: boolean;
250
+ } | {
251
+ type: "resync_required";
252
+ artifactId: EditableArtifactId;
253
+ reason: string;
254
+ };
255
+ export type EditableArtifactLiveClose = {
256
+ reason: "closed" | "ticket_expired" | "transport_error" | "permission_changed";
257
+ error?: unknown;
258
+ };
259
+ /** Exact limits advertised by the authenticated OGALV stream epoch. */
260
+ export type EditableArtifactLiveLimits = Readonly<{
261
+ maxClientFrameBytes: number;
262
+ maxCommandBytes: number;
263
+ maxIntentBytes: number;
264
+ maxCommittedTransactionBytes: number;
265
+ maxSnapshotBytes: number;
266
+ maxInFlightTransactions: number;
267
+ maxInFlightBytes: number;
268
+ }>;
269
+ export type EditableArtifactLiveConnection = {
270
+ /** Opaque server session binding subscription, retention lease, and bootstrap. */
271
+ streamEpoch: string;
272
+ limits: EditableArtifactLiveLimits;
273
+ readBootstrap: (input: {
274
+ localCursor: number | null;
275
+ localStateHash: string | null;
276
+ resume: {
277
+ modality: "spreadsheet";
278
+ localCausalFrontier: EditableArtifactCausalFrontier;
279
+ } | {
280
+ modality: EditableArtifactSerializedModality;
281
+ localNativeRevision: number | null;
282
+ };
283
+ requireSnapshot: boolean;
284
+ signal: AbortSignal;
285
+ }) => Promise<EditableArtifactBootstrap>;
286
+ replay: (input: {
287
+ after: number;
288
+ through: number;
289
+ limit: number;
290
+ signal: AbortSignal;
291
+ }) => Promise<EditableArtifactReplayPage>;
292
+ submit: (input: {
293
+ transaction: EditableArtifactPendingTransaction;
294
+ signal: AbortSignal;
295
+ }) => Promise<EditableArtifactSubmitReceipt>;
296
+ acknowledge: (input: {
297
+ sequence: number;
298
+ stateHash: string;
299
+ signal: AbortSignal;
300
+ }) => Promise<void>;
301
+ /** Resolves once for every local or remote close. */
302
+ closed: Promise<EditableArtifactLiveClose>;
303
+ close: (reason?: string) => void;
304
+ };
305
+ /** HTTP/WebSocket details live behind this boundary. */
306
+ export type EditableArtifactSyncTransport = {
307
+ mintTicket: (input: {
308
+ artifactId: EditableArtifactId;
309
+ replicaId: string;
310
+ signal: AbortSignal;
311
+ }) => Promise<EditableArtifactSyncTicket>;
312
+ /** Must subscribe before returning; bootstrap is read only after this call. */
313
+ openLive: (input: {
314
+ ticket: EditableArtifactSyncTicket;
315
+ after: number;
316
+ stateHash: string | null;
317
+ resume: {
318
+ modality: "spreadsheet";
319
+ causalFrontier: EditableArtifactCausalFrontier;
320
+ } | {
321
+ modality: EditableArtifactSerializedModality;
322
+ nativeRevision: number | null;
323
+ };
324
+ requireSnapshot: boolean;
325
+ signal: AbortSignal;
326
+ onMessage: (message: EditableArtifactLiveMessage) => void;
327
+ }) => Promise<EditableArtifactLiveConnection>;
328
+ };
329
+ /**
330
+ * Implemented by a dedicated browser Worker around the WASM kernel. The
331
+ * controller never mutates artifact state on the UI thread.
332
+ */
333
+ export type EditableArtifactWorkerKernel = {
334
+ reset: () => Promise<void>;
335
+ /** Computes the digest over owned bytes inside the Worker. */
336
+ loadSnapshot: (snapshot: EditableArtifactSnapshot) => Promise<{
337
+ stateHash: string;
338
+ digest: string;
339
+ }>;
340
+ /** Rebuild-only path used before bootstrap exposes a visible revision. */
341
+ applyRecovered: (transaction: EditableArtifactCommittedTransaction) => Promise<{
342
+ stateHash: string;
343
+ }>;
344
+ /** Atomically commits confirmed state and publishes the rebased speculative layer. */
345
+ reconcileCommitted: (transaction: EditableArtifactCommittedTransaction, remainingPending: readonly EditableArtifactPendingTransaction[]) => Promise<{
346
+ stateHash: string;
347
+ blockedPending: readonly EditableArtifactBlockedPending[];
348
+ }>;
349
+ /** Rebuilds the speculative layer without changing confirmed authority. */
350
+ replacePending: (transactions: readonly EditableArtifactPendingTransaction[]) => Promise<{
351
+ blockedPending: readonly EditableArtifactBlockedPending[];
352
+ }>;
353
+ /** Canonical encoding + request hashing occurs off the UI thread. */
354
+ authorPending: (input: {
355
+ modality: EditableArtifactModality;
356
+ protocolVersion: number;
357
+ kernelVersion: string;
358
+ modelSchemaVersion: number;
359
+ commandVersion: number;
360
+ artifactId: EditableArtifactId;
361
+ clientTransactionId: string;
362
+ replicaId: string;
363
+ replicaCounter: number;
364
+ previousLocalTransactionId: string | null;
365
+ observedHeadSequence: number;
366
+ causalBase?: EditableArtifactCausalFrontier;
367
+ selectiveUndoTargets?: readonly string[];
368
+ commandBytes: Uint8Array;
369
+ createdAt: number;
370
+ }) => Promise<EditableArtifactPendingTransaction>;
371
+ /** Runs against the speculative fork; canonical state remains Worker-only. */
372
+ querySpreadsheetViewport: (query: EditableSpreadsheetViewportQuery) => Promise<EditableSpreadsheetViewportProjection>;
373
+ querySpreadsheetMetadata: (query?: EditableSpreadsheetMetadataQuery) => Promise<EditableSpreadsheetMetadataProjection>;
374
+ /** Canonical, bounded document projection produced by the real Worker WASM session. */
375
+ queryDocument: (query: DocumentArtifactQuery) => Promise<DocumentArtifactProjection>;
376
+ /** Canonical, bounded presentation projection produced by the real Worker WASM session. */
377
+ queryPresentation: (query: PresentationArtifactQuery) => Promise<PresentationArtifactQueryResponse>;
378
+ };
379
+ export type EditableDocumentQuery = DocumentArtifactQuery;
380
+ export type EditableDocumentProjection = DocumentArtifactProjection;
381
+ export type EditablePresentationQuery = PresentationArtifactQuery;
382
+ export type EditablePresentationProjection = PresentationArtifactQueryResponse;
383
+ export type EditablePresentationSlideCatalogQuery = Extract<PresentationArtifactQuery, {
384
+ kind: "slide-catalog";
385
+ }>;
386
+ export type EditablePresentationEditorSlideQuery = Extract<PresentationArtifactQuery, {
387
+ kind: "editor-slide";
388
+ }>;
389
+ export type EditablePresentationSlideCatalogProjection = Extract<PresentationArtifactQueryResponse, {
390
+ kind: "slide-catalog";
391
+ }>;
392
+ export type EditablePresentationEditorSlideProjection = Extract<PresentationArtifactQueryResponse, {
393
+ kind: "editor-slide";
394
+ }>;
395
+ export type EditableArtifactSyncState = "idle" | "connecting" | "syncing" | "live" | "reconnecting" | "resyncing" | "unsupported" | "failed" | "closed";
396
+ export type EditableArtifactSyncView = {
397
+ artifactId: EditableArtifactId;
398
+ modality: EditableArtifactModality;
399
+ state: EditableArtifactSyncState;
400
+ cursor: number;
401
+ headSequence: number;
402
+ writable: boolean;
403
+ pendingTransactions: number;
404
+ blockedPending: readonly EditableArtifactBlockedPending[];
405
+ queuedMessages: number;
406
+ reconnectAttempt: number;
407
+ lastError: Error | null;
408
+ };
409
+ export type EditableArtifactSyncListener = (view: EditableArtifactSyncView) => void;
410
+ export type EditableArtifactSyncScheduler = {
411
+ now: () => number;
412
+ sleep: (delayMs: number, signal: AbortSignal) => Promise<void>;
413
+ };
414
+ import type { DocumentArtifactProjection, DocumentArtifactQuery } from "@opengeni/contracts/document-artifact-query";
415
+ import type { PresentationArtifactQuery, PresentationArtifactQueryResponse } from "@opengeni/contracts/presentation-artifact-query";
416
+ export {};
@@ -0,0 +1,80 @@
1
+ import type { EditableArtifactModality, EditableArtifactWorkerKernel, EditablePresentationEditorSlideProjection, EditablePresentationEditorSlideQuery, EditablePresentationSlideCatalogProjection, EditablePresentationSlideCatalogQuery } from "../types.js";
2
+ import { type ArtifactWorkerRpcLimits, type ArtifactWorkerRpcMessage } from "./rpc-protocol.js";
3
+ export type ArtifactWorkerClientMessageEvent = {
4
+ data: unknown;
5
+ };
6
+ export type ArtifactWorkerClientErrorEvent = {
7
+ error?: unknown;
8
+ message?: string;
9
+ };
10
+ export type ArtifactWorkerClientEndpoint = {
11
+ postMessage: (message: ArtifactWorkerRpcMessage, transfer: Transferable[]) => void;
12
+ addEventListener: {
13
+ (type: "message", listener: (event: ArtifactWorkerClientMessageEvent) => void): void;
14
+ (type: "error" | "messageerror", listener: (event: ArtifactWorkerClientErrorEvent) => void): void;
15
+ };
16
+ removeEventListener: {
17
+ (type: "message", listener: (event: ArtifactWorkerClientMessageEvent) => void): void;
18
+ (type: "error" | "messageerror", listener: (event: ArtifactWorkerClientErrorEvent) => void): void;
19
+ };
20
+ terminate: () => void;
21
+ };
22
+ export type CreateBrowserEditableArtifactWorkerKernelOptions = {
23
+ modality: EditableArtifactModality;
24
+ /** Exact package/runtime identity; checked before the Worker accepts state. */
25
+ kernelVersion: string;
26
+ protocolVersion: number;
27
+ modelSchemaVersion: number;
28
+ commandVersion: number;
29
+ /**
30
+ * Prebuilt module-Worker entry. No blob/eval worker is ever synthesized.
31
+ * Bundler example: import `workerUrl` from
32
+ * `@opengeni/sdk/editable-artifacts/worker?worker&url`, then pass it here.
33
+ */
34
+ workerUrl: string | URL;
35
+ /** wasm-bindgen ESM glue built from the pinned artifact kernel. */
36
+ wasmGlueUrl: string | URL;
37
+ /** Exact `.wasm` asset paired with the glue. */
38
+ wasmBinaryUrl: string | URL;
39
+ /**
40
+ * Origin hosting the embedding application. Browser runtimes default to
41
+ * `location.origin`; non-browser/custom Worker hosts must supply it.
42
+ */
43
+ applicationOrigin?: string | URL;
44
+ /** Additional explicitly trusted asset origins; same-origin is the default. */
45
+ allowedAssetOrigins?: readonly string[];
46
+ /** Only for local development. Production assets must use HTTPS. */
47
+ allowInsecureDevelopmentAssets?: boolean;
48
+ requestTimeoutMs?: number;
49
+ initializationTimeoutMs?: number;
50
+ maximumSnapshotBytes?: number;
51
+ maximumCommandBytes?: number;
52
+ maximumIntentBytes?: number;
53
+ maximumCommittedTransactionBytes?: number;
54
+ maximumQueryBytes?: number;
55
+ maximumQueryResponseBytes?: number;
56
+ maximumPendingTransactions?: number;
57
+ maximumPendingAggregateBytes?: number;
58
+ rpcLimits?: Readonly<ArtifactWorkerRpcLimits>;
59
+ workerFactory?: (url: URL, options: {
60
+ type: "module";
61
+ name: string;
62
+ }) => ArtifactWorkerClientEndpoint;
63
+ };
64
+ export type BrowserEditableArtifactWorkerKernel = EditableArtifactWorkerKernel & {
65
+ queryPresentationSlideCatalog: (query: EditablePresentationSlideCatalogQuery) => Promise<EditablePresentationSlideCatalogProjection>;
66
+ queryPresentationEditorSlide: (query: EditablePresentationEditorSlideQuery) => Promise<EditablePresentationEditorSlideProjection>;
67
+ /** Requests bounded graceful cleanup, then terminates the Worker. Idempotent. */
68
+ dispose: () => Promise<void>;
69
+ /** Retires a failed generation; the next method call lazily starts a fresh Worker. */
70
+ restart: () => void;
71
+ };
72
+ export declare class ArtifactWorkerClientError extends Error {
73
+ readonly code: string;
74
+ readonly retryable: boolean;
75
+ constructor(code: string, message: string, options?: {
76
+ retryable?: boolean;
77
+ cause?: unknown;
78
+ });
79
+ }
80
+ export declare function createBrowserEditableArtifactWorkerKernel(options: CreateBrowserEditableArtifactWorkerKernelOptions): BrowserEditableArtifactWorkerKernel;
@@ -0,0 +1,6 @@
1
+ import { ArtifactWorkerRuntime, type ArtifactWorkerRuntimeEndpoint } from "./runtime.js";
2
+ /**
3
+ * Dedicated module-Worker entry. Hosts bundle and self-host this file under
4
+ * their CSP, then pass its URL to `createBrowserEditableArtifactWorkerKernel`.
5
+ */
6
+ export declare function installBrowserArtifactWorkerEntry(scope: ArtifactWorkerRuntimeEndpoint): ArtifactWorkerRuntime;
@@ -0,0 +1,45 @@
1
+ import type { ArtifactWorkerInitializeInput } from "./wire-codec.js";
2
+ import type { EditableArtifactModality } from "../types.js";
3
+ export type ArtifactWorkerKernelSession = {
4
+ readonly modality: EditableArtifactModality;
5
+ /** Replays one exact whole canonical OGACO001 transaction. */
6
+ applyCommitted: (committedTransactionBytes: Uint8Array) => void;
7
+ /** Authors and applies one exact OGATX001 intent over the current frontier. */
8
+ applyPending: (intentBytes: Uint8Array) => void;
9
+ /** Applies one exact document/presentation command and returns its native receipt. */
10
+ applyCommands: (commandBytes: Uint8Array) => Uint8Array;
11
+ /** Native serialized-model revision; unavailable for spreadsheets. */
12
+ nativeRevision: () => number;
13
+ /** Stages an atomic candidate without serializing/reopening the model. */
14
+ fork: () => ArtifactWorkerKernelSession;
15
+ /** Kernel-defined canonical hash; never synthesized from transport bytes. */
16
+ stateHash: () => Promise<string>;
17
+ snapshot: () => Uint8Array;
18
+ /** Canonical bounded OGAKQ request to canonical OGAKV projection. */
19
+ query: (queryBytes: Uint8Array) => Uint8Array;
20
+ dispose: () => void;
21
+ };
22
+ /** A valid local intent whose structural preconditions no longer project. */
23
+ export declare class ArtifactWorkerPendingProjectionError extends Error {
24
+ readonly code: string;
25
+ constructor(code: string, message?: string);
26
+ }
27
+ /** Entirely Worker-owned adapter over one compatible collaboration WASM build. */
28
+ export type ArtifactWorkerKernelAdapter = {
29
+ readonly modality: EditableArtifactModality;
30
+ readonly protocolVersion: number;
31
+ readonly kernelVersion: string;
32
+ readonly modelSchemaVersion: number;
33
+ readonly commandVersion: number;
34
+ readonly maximumSnapshotBytes: number;
35
+ readonly maximumCommandBytes: number;
36
+ readonly maximumIntentBytes: number;
37
+ readonly maximumCommittedTransactionBytes: number;
38
+ readonly maximumQueryBytes: number;
39
+ readonly maximumQueryResponseBytes: number;
40
+ canonicalizeSnapshot: (snapshotBytes: Uint8Array) => Uint8Array;
41
+ open: (snapshotBytes: Uint8Array) => ArtifactWorkerKernelSession;
42
+ dispose?: () => void;
43
+ };
44
+ export type ArtifactWorkerKernelAdapterFactory = (input: ArtifactWorkerInitializeInput) => Promise<ArtifactWorkerKernelAdapter>;
45
+ export declare const loadBrowserWasmKernelAdapter: ArtifactWorkerKernelAdapterFactory;
@@ -0,0 +1,92 @@
1
+ export declare const enum ArtifactWorkerRpcKind {
2
+ Initialize = 1,
3
+ Reset = 2,
4
+ LoadSnapshot = 3,
5
+ ApplyRecovered = 4,
6
+ ReconcileCommitted = 5,
7
+ ReplacePending = 6,
8
+ AuthorPending = 7,
9
+ Cancel = 8,
10
+ Dispose = 9,
11
+ QuerySpreadsheet = 10,
12
+ Response = 128,
13
+ Error = 129
14
+ }
15
+ export type ArtifactWorkerRpcMessage = {
16
+ frame: ArrayBuffer;
17
+ segments: ArrayBuffer[];
18
+ };
19
+ export type ArtifactWorkerRpcLimits = {
20
+ maxMetadataBytes: number;
21
+ maxSegmentBytes: number;
22
+ maxTotalSegmentBytes: number;
23
+ maxSegments: number;
24
+ };
25
+ export type DecodedArtifactWorkerRpcFrame = {
26
+ kind: ArtifactWorkerRpcKind;
27
+ generation: number;
28
+ requestId: number;
29
+ flags: number;
30
+ metadata: Uint8Array;
31
+ segments: Uint8Array[];
32
+ };
33
+ export declare const DEFAULT_ARTIFACT_WORKER_RPC_LIMITS: Readonly<ArtifactWorkerRpcLimits>;
34
+ export declare class ArtifactWorkerProtocolError extends Error {
35
+ readonly code: string;
36
+ constructor(code: string, message: string, options?: {
37
+ cause?: unknown;
38
+ });
39
+ }
40
+ export declare function encodeArtifactWorkerRpcMessage(input: {
41
+ kind: ArtifactWorkerRpcKind;
42
+ generation: number;
43
+ requestId: number;
44
+ flags?: number;
45
+ metadata?: Uint8Array;
46
+ /** Every buffer must already be exclusively owned by this message. */
47
+ segments?: ArrayBuffer[];
48
+ limits?: Readonly<ArtifactWorkerRpcLimits>;
49
+ }): ArtifactWorkerRpcMessage;
50
+ export declare function decodeArtifactWorkerRpcMessage(input: unknown, limitsInput?: Readonly<ArtifactWorkerRpcLimits>): DecodedArtifactWorkerRpcFrame;
51
+ export declare function transferListForArtifactWorkerRpcMessage(message: ArtifactWorkerRpcMessage): Transferable[];
52
+ /** Creates a private transferable copy; transferring never detaches caller-owned bytes. */
53
+ export declare function ownedTransferBuffer(bytes: Uint8Array): ArrayBuffer;
54
+ export declare class ArtifactWorkerBinaryWriter {
55
+ private readonly maximumBytes;
56
+ private readonly chunks;
57
+ private size;
58
+ constructor(maximumBytes?: number);
59
+ u8(value: number): this;
60
+ u16(value: number): this;
61
+ u32(value: number): this;
62
+ safeUint(value: number): this;
63
+ f64(value: number): this;
64
+ string(value: string, maximumBytes?: number): this;
65
+ optionalString(value: string | null, maximumBytes?: number): this;
66
+ frontier(value: readonly Readonly<{
67
+ replicaId: string;
68
+ counter: number;
69
+ }>[], maximumActors?: number): this;
70
+ finish(): Uint8Array;
71
+ private append;
72
+ }
73
+ export declare class ArtifactWorkerBinaryReader {
74
+ private readonly bytes;
75
+ private readonly view;
76
+ private offset;
77
+ constructor(bytes: Uint8Array);
78
+ u8(): number;
79
+ u16(): number;
80
+ u32(): number;
81
+ safeUint(): number;
82
+ f64(): number;
83
+ string(maximumBytes?: number): string;
84
+ optionalString(maximumBytes?: number): string | null;
85
+ frontier(maximumActors?: number): readonly Readonly<{
86
+ replicaId: string;
87
+ counter: number;
88
+ }>[];
89
+ done(): void;
90
+ remaining(): number;
91
+ private require;
92
+ }