@opengeni/contracts 0.50.0 → 2.2.0-canary.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 (113) hide show
  1. package/dist/agent-authored-durable-text.d.ts +64 -0
  2. package/dist/atlassian.d.ts +1 -0
  3. package/dist/atlassian.js +14 -13
  4. package/dist/{chunk-Y3MLSLB4.js → chunk-3SIZGL3O.js} +42 -30
  5. package/dist/chunk-3SIZGL3O.js.map +1 -0
  6. package/dist/{chunk-JBCIY7QD.js → chunk-7RMTKFJW.js} +45 -22
  7. package/dist/chunk-7RMTKFJW.js.map +1 -0
  8. package/dist/{chunk-Q6A7XT2N.js → chunk-7ZZ3R27P.js} +9598 -6021
  9. package/dist/chunk-7ZZ3R27P.js.map +1 -0
  10. package/dist/{chunk-5UDNP7AO.js → chunk-MRWYRAS5.js} +56 -8
  11. package/dist/chunk-MRWYRAS5.js.map +1 -0
  12. package/dist/{chunk-LW7OH6CS.js → chunk-N6GRVXAJ.js} +6 -5
  13. package/dist/chunk-N6GRVXAJ.js.map +1 -0
  14. package/dist/{chunk-TZ6YEYN4.js → chunk-NVJMJWLL.js} +3 -1
  15. package/dist/chunk-NVJMJWLL.js.map +1 -0
  16. package/dist/chunk-PX3VCKAU.js +29 -0
  17. package/dist/chunk-PX3VCKAU.js.map +1 -0
  18. package/dist/{chunk-LSB7GRLG.js → chunk-TXTQIYCV.js} +15 -11
  19. package/dist/chunk-TXTQIYCV.js.map +1 -0
  20. package/dist/{chunk-CADSX6UN.js → chunk-Y3KNXVTD.js} +2 -2
  21. package/dist/chunk-YBW5JSA3.js +251 -0
  22. package/dist/chunk-YBW5JSA3.js.map +1 -0
  23. package/dist/company-brain-governed-writes.d.ts +475 -0
  24. package/dist/company-brain.d.ts +398 -0
  25. package/dist/company-profile.d.ts +268 -0
  26. package/dist/connection-authority.d.ts +501 -0
  27. package/dist/connection-authority.js +364 -0
  28. package/dist/connection-authority.js.map +1 -0
  29. package/dist/connector-attachments.d.ts +95 -0
  30. package/dist/connector-attachments.js +51 -0
  31. package/dist/connector-attachments.js.map +1 -0
  32. package/dist/editable-artifact-codec-registry.d.ts +16 -7
  33. package/dist/editable-artifact-codec-registry.js +18 -8
  34. package/dist/editable-artifact-committed-transaction.d.ts +2 -2
  35. package/dist/editable-artifact-committed-transaction.js +2 -2
  36. package/dist/editable-artifact-live.d.ts +11 -12
  37. package/dist/editable-artifact-live.js +111 -46
  38. package/dist/editable-artifact-live.js.map +1 -1
  39. package/dist/editable-artifact-serialized-commit.d.ts +2 -1
  40. package/dist/editable-artifact-serialized-commit.js +9 -8
  41. package/dist/editable-artifact-versions.d.ts +20 -5
  42. package/dist/editable-artifact-versions.js +23 -5
  43. package/dist/editable-artifacts.d.ts +2 -0
  44. package/dist/editable-artifacts.js +51 -39
  45. package/dist/google-drive.d.ts +89 -1
  46. package/dist/google-drive.js +78 -17
  47. package/dist/google-drive.js.map +1 -1
  48. package/dist/governed-learning-activation.d.ts +154 -0
  49. package/dist/governed-learning-evaluator.d.ts +152 -0
  50. package/dist/index.d.ts +12395 -1426
  51. package/dist/index.js +837 -115
  52. package/dist/interaction.d.ts +68 -0
  53. package/dist/knowledge.d.ts +192 -0
  54. package/dist/organization-membership-lifecycle.d.ts +516 -0
  55. package/dist/permissions.d.ts +52 -0
  56. package/dist/personal-github.d.ts +319 -0
  57. package/dist/personal-github.js +209 -0
  58. package/dist/personal-github.js.map +1 -0
  59. package/dist/preference-registry.d.ts +17 -0
  60. package/dist/remember.d.ts +331 -0
  61. package/dist/sandbox-file-artifacts.d.ts +56 -0
  62. package/dist/sandbox-snapshots.d.ts +21 -0
  63. package/dist/slack-bot-scopes.d.ts +34 -14
  64. package/dist/slack-bot-scopes.js +5 -1
  65. package/dist/spreadsheet-artifact-commands.d.ts +2 -3
  66. package/dist/spreadsheet-artifact-commands.js +4 -2
  67. package/dist/spreadsheet-artifact-query.js +3 -2
  68. package/dist/task-notes.d.ts +42 -1
  69. package/dist/tool-result-spill.d.ts +16 -0
  70. package/dist/workspace-instruction-policies.d.ts +81 -0
  71. package/dist/workspace-learning-administration.d.ts +289 -0
  72. package/package.json +13 -1
  73. package/src/agent-authored-durable-text.ts +105 -0
  74. package/src/company-brain-governed-writes.ts +356 -0
  75. package/src/company-brain.ts +201 -0
  76. package/src/company-profile.ts +122 -1
  77. package/src/connection-authority.ts +413 -0
  78. package/src/connector-attachments.ts +327 -0
  79. package/src/editable-artifact-codec-registry.ts +55 -17
  80. package/src/editable-artifact-committed-transaction.ts +44 -31
  81. package/src/editable-artifact-live.ts +123 -57
  82. package/src/editable-artifact-serialized-commit.ts +2 -1
  83. package/src/editable-artifact-versions.ts +26 -5
  84. package/src/editable-artifacts.ts +2 -0
  85. package/src/google-drive.ts +76 -4
  86. package/src/governed-learning-activation.ts +191 -0
  87. package/src/governed-learning-evaluator.ts +176 -0
  88. package/src/index.ts +3182 -483
  89. package/src/interaction.ts +55 -1
  90. package/src/knowledge.ts +133 -6
  91. package/src/organization-membership-lifecycle.ts +330 -0
  92. package/src/permissions.ts +55 -0
  93. package/src/personal-github.ts +267 -0
  94. package/src/preference-registry.ts +17 -0
  95. package/src/remember.ts +242 -0
  96. package/src/sandbox-file-artifacts.ts +65 -0
  97. package/src/sandbox-snapshots.ts +78 -0
  98. package/src/slack-bot-scopes.ts +81 -9
  99. package/src/spreadsheet-artifact-commands.ts +12 -13
  100. package/src/task-notes.ts +14 -1
  101. package/src/tool-result-spill.ts +35 -0
  102. package/src/workspace-instruction-policies.ts +30 -0
  103. package/src/workspace-learning-administration.ts +88 -0
  104. package/dist/chunk-5UDNP7AO.js.map +0 -1
  105. package/dist/chunk-BVGIYW7D.js +0 -11
  106. package/dist/chunk-BVGIYW7D.js.map +0 -1
  107. package/dist/chunk-JBCIY7QD.js.map +0 -1
  108. package/dist/chunk-LSB7GRLG.js.map +0 -1
  109. package/dist/chunk-LW7OH6CS.js.map +0 -1
  110. package/dist/chunk-Q6A7XT2N.js.map +0 -1
  111. package/dist/chunk-TZ6YEYN4.js.map +0 -1
  112. package/dist/chunk-Y3MLSLB4.js.map +0 -1
  113. /package/dist/{chunk-CADSX6UN.js.map → chunk-Y3KNXVTD.js.map} +0 -0
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Budgets and authoring style for durable text an **agent** writes on a user's
3
+ * behalf.
4
+ *
5
+ * The budget follows the cost, and the cost differs per destination:
6
+ *
7
+ * - A workspace instruction policy is composed verbatim into the prompt of
8
+ * every session it applies to, for as long as it stays active. A global
9
+ * charter or global policy applies to every session in the workspace; a role
10
+ * policy applies to every session bound to that role. At most three entries
11
+ * compose at once (charter, global policy, matching role policy), so the
12
+ * standing ceiling this budget implies is three times the per-entry cap.
13
+ * - A preference is cheaper and in a different way: only its short title and
14
+ * description descriptors are prompt-composed, while the full content is
15
+ * retrieved on demand behind the exact attempt's retrieval handle. Its length
16
+ * is therefore retrieval cost, not standing prompt cost, which is why it gets
17
+ * more room rather than less.
18
+ * - A company profile is the largest always-on surface: every field is
19
+ * mandatory prompt context in every session across the whole organization.
20
+ * - Knowledge is retrieval evidence and never joins the always-composed prefix.
21
+ *
22
+ * These caps deliberately bind only agent-authored writes. The human-facing
23
+ * limits (`WORKSPACE_INSTRUCTION_POLICY_CONTENT_MAX_CHARS`,
24
+ * `PREFERENCE_REGISTRY_CONTENT_MAX_CHARS`, `COMPANY_PROFILE_SCALAR_MAX_CHARS`,
25
+ * `COMPANY_PROFILE_ENTRY_MAX_CHARS`, `COMPANY_PROFILE_CONTENT_MAX_UTF8_BYTES`)
26
+ * are unchanged: a person editing in the UI is making a deliberate, visible
27
+ * choice, and lowering their limit would reject text they already typed.
28
+ * Existing stored revisions are never rewritten; only new agent writes are
29
+ * bounded.
30
+ */
31
+ /** One imperative rule, in 1-3 sentences, fits comfortably under this. */
32
+ export declare const AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_MAX_CHARS = 600;
33
+ /** Retrieved on demand rather than always composed, so a little more room. */
34
+ export declare const AGENT_AUTHORED_PREFERENCE_CONTENT_MAX_CHARS = 1200;
35
+ /** `identity` and `mission`: a couple of sentences, not a positioning document. */
36
+ export declare const AGENT_AUTHORED_COMPANY_PROFILE_SCALAR_MAX_CHARS = 400;
37
+ /** One product, customer, goal, or constraint: a phrase or a single sentence. */
38
+ export declare const AGENT_AUTHORED_COMPANY_PROFILE_ENTRY_MAX_CHARS = 200;
39
+ /** Whole canonical profile, mandatory in every session across the organization. */
40
+ export declare const AGENT_AUTHORED_COMPANY_PROFILE_CONTENT_MAX_UTF8_BYTES = 4096;
41
+ export declare const AGENT_AUTHORED_INSTRUCTION_POLICY_CONTENT_TOO_LONG_MESSAGE: string;
42
+ export declare const AGENT_AUTHORED_PREFERENCE_CONTENT_TOO_LONG_MESSAGE: string;
43
+ export declare const AGENT_AUTHORED_COMPANY_PROFILE_TOO_LONG_MESSAGE: string;
44
+ /**
45
+ * Lane-agnostic guidance for the one `remember` content field, whose schema
46
+ * bound has to admit the widest lane. Without it an over-long rule would be
47
+ * refused with a generic "expected length <= 4000" that points at the wrong
48
+ * number entirely.
49
+ */
50
+ export declare const AGENT_AUTHORED_REMEMBER_CONTENT_TOO_LONG_MESSAGE: string;
51
+ /**
52
+ * The shape rule the model reads on every tool that authors a durable *rule or
53
+ * preference*. Deliberately not reused for the company profile, which is a
54
+ * descriptive profile rather than an instruction and needs its own wording.
55
+ */
56
+ export declare const AGENT_AUTHORED_DURABLE_TEXT_STYLE: string;
57
+ /**
58
+ * Actionable over-budget message including the text the caller actually sent,
59
+ * so the model can see how far over it is instead of guessing.
60
+ */
61
+ export declare function agentAuthoredDurableTextTooLongMessage(input: {
62
+ kind: "instruction_policy" | "preference";
63
+ actualChars: number;
64
+ }): string;
@@ -180,6 +180,7 @@ export type AtlassianBrowseItem = z.infer<typeof AtlassianBrowseItem>;
180
180
  export declare const AtlassianBrowseResponse: z.ZodObject<{
181
181
  connection: z.ZodLazy<z.ZodObject<{
182
182
  id: z.ZodString;
183
+ authorityId: z.ZodOptional<z.ZodString>;
183
184
  accountId: z.ZodString;
184
185
  workspaceId: z.ZodString;
185
186
  subjectId: z.ZodNullable<z.ZodString>;
package/dist/atlassian.js CHANGED
@@ -17,23 +17,24 @@ import {
17
17
  AtlassianSyncCadence,
18
18
  SaveAtlassianSourcesRequest,
19
19
  atlassianScopesAllowRead
20
- } from "./chunk-Q6A7XT2N.js";
21
- import "./chunk-WYBDERIY.js";
22
- import "./chunk-5UDNP7AO.js";
23
- import "./chunk-Y3MLSLB4.js";
24
- import "./chunk-CM6BMECR.js";
20
+ } from "./chunk-7ZZ3R27P.js";
21
+ import "./chunk-MRWYRAS5.js";
25
22
  import "./chunk-JUFK3T4Q.js";
26
- import "./chunk-M5ZGRVIQ.js";
27
- import "./chunk-LW7OH6CS.js";
28
- import "./chunk-TZ6YEYN4.js";
29
- import "./chunk-YRKRZ6OF.js";
30
- import "./chunk-JBCIY7QD.js";
23
+ import "./chunk-WYBDERIY.js";
24
+ import "./chunk-N6GRVXAJ.js";
25
+ import "./chunk-3SIZGL3O.js";
26
+ import "./chunk-NVJMJWLL.js";
27
+ import "./chunk-7RMTKFJW.js";
28
+ import "./chunk-Y3KNXVTD.js";
31
29
  import "./chunk-RIY7GYQS.js";
32
- import "./chunk-CADSX6UN.js";
30
+ import "./chunk-YRKRZ6OF.js";
31
+ import "./chunk-CM6BMECR.js";
33
32
  import "./chunk-D2HKF2EF.js";
34
33
  import "./chunk-MYBZRDTY.js";
35
- import "./chunk-LSB7GRLG.js";
36
- import "./chunk-BVGIYW7D.js";
34
+ import "./chunk-TXTQIYCV.js";
35
+ import "./chunk-PX3VCKAU.js";
36
+ import "./chunk-M5ZGRVIQ.js";
37
+ import "./chunk-YBW5JSA3.js";
37
38
  export {
38
39
  ATLASSIAN_CREDENTIAL_LABEL,
39
40
  ATLASSIAN_CREDENTIAL_ROLE,
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  COMMITTED_TRANSACTION_PROTOCOL_VERSION
3
- } from "./chunk-BVGIYW7D.js";
3
+ } from "./chunk-PX3VCKAU.js";
4
4
 
5
5
  // src/editable-artifact-committed-transaction.ts
6
6
  var MAX_COMMITTED_TRANSACTION_BYTES = 8 * 1024 * 1024;
7
7
  var MAX_COMMITTED_TRANSACTION_OPERATIONS = 4096;
8
8
  var MAX_COMMITTED_TRANSACTION_CAUSAL_REPLICAS = 1e5;
9
9
  var MAX_COMMITTED_TRANSACTION_CELLS = 1e6;
10
- var MAGIC = new Uint8Array([79, 71, 65, 67, 79, 48, 48, 49]);
10
+ var MAGIC = new Uint8Array([79, 71, 65, 67, 79, 48, 48, 50]);
11
11
  var HEADER_BYTES = 24;
12
12
  var CHECKSUM_BYTES = 8;
13
13
  var HASH_BYTES = 32;
@@ -16,6 +16,7 @@ var MAX_OPERATION_STRING_BYTES = 4 * 1024 * 1024;
16
16
  var MAX_SAFE_U64_HIGH = 2097151;
17
17
  var U32_SIZE = 4294967296;
18
18
  var U32_MAX = 4294967295;
19
+ var MAX_DATE_MILLISECONDS = 8640000000000000n;
19
20
  var FNV_OFFSET_LOW = 2216829733;
20
21
  var FNV_OFFSET_HIGH = 3421674724;
21
22
  var FNV_PRIME_LOW = 435;
@@ -23,37 +24,37 @@ var HEX = Array.from({ length: 256 }, (_, value) => value.toString(16).padStart(
23
24
  function decodeCommittedTransactionSummary(bytes) {
24
25
  assertInput(bytes);
25
26
  if (bytes.byteLength > MAX_COMMITTED_TRANSACTION_BYTES) {
26
- throw new RangeError("OGACO001 envelope exceeds its byte limit");
27
+ throw new RangeError("OGACO002 envelope exceeds its byte limit");
27
28
  }
28
29
  if (bytes.byteLength < HEADER_BYTES + CHECKSUM_BYTES) {
29
- throw new TypeError("truncated OGACO001 envelope");
30
+ throw new TypeError("truncated OGACO002 envelope");
30
31
  }
31
32
  const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
32
33
  for (let index = 0; index < MAGIC.byteLength; index += 1) {
33
- if (bytes[index] !== MAGIC[index]) throw new TypeError("invalid OGACO001 magic");
34
+ if (bytes[index] !== MAGIC[index]) throw new TypeError("invalid OGACO002 magic");
34
35
  }
35
36
  const version = view.getUint16(8, true);
36
37
  if (version !== COMMITTED_TRANSACTION_PROTOCOL_VERSION) {
37
- throw new TypeError(`unsupported OGACO001 version: ${version}`);
38
+ throw new TypeError(`unsupported OGACO002 version: ${version}`);
38
39
  }
39
40
  if (view.getUint16(10, true) !== 0) {
40
- throw new TypeError("reserved OGACO001 header bits are set");
41
+ throw new TypeError("reserved OGACO002 header bits are set");
41
42
  }
42
43
  const operationCount = view.getUint32(12, true);
43
44
  if (operationCount === 0 || operationCount > MAX_COMMITTED_TRANSACTION_OPERATIONS) {
44
- throw new RangeError("OGACO001 operation count is outside its canonical bounds");
45
+ throw new RangeError("OGACO002 operation count is outside its canonical bounds");
45
46
  }
46
- const payloadLength = safeU64At(view, 16, "OGACO001 payload length", false);
47
- const payloadEnd = checkedAdd(HEADER_BYTES, payloadLength, "OGACO001 payload length");
48
- const expectedLength = checkedAdd(payloadEnd, CHECKSUM_BYTES, "OGACO001 envelope length");
47
+ const payloadLength = safeU64At(view, 16, "OGACO002 payload length", false);
48
+ const payloadEnd = checkedAdd(HEADER_BYTES, payloadLength, "OGACO002 payload length");
49
+ const expectedLength = checkedAdd(payloadEnd, CHECKSUM_BYTES, "OGACO002 envelope length");
49
50
  if (bytes.byteLength !== expectedLength) {
50
51
  throw new TypeError(
51
- bytes.byteLength < expectedLength ? "truncated OGACO001 payload" : "trailing bytes after OGACO001 envelope"
52
+ bytes.byteLength < expectedLength ? "truncated OGACO002 payload" : "trailing bytes after OGACO002 envelope"
52
53
  );
53
54
  }
54
55
  const [checksumLow, checksumHigh] = fnv1a64(bytes, payloadEnd);
55
56
  if (view.getUint32(payloadEnd, true) !== checksumLow || view.getUint32(payloadEnd + 4, true) !== checksumHigh) {
56
- throw new TypeError("OGACO001 checksum mismatch");
57
+ throw new TypeError("OGACO002 checksum mismatch");
57
58
  }
58
59
  const reader = new Reader(bytes, HEADER_BYTES, payloadEnd);
59
60
  const transactionId = reader.stableId("transaction id");
@@ -69,7 +70,7 @@ function decodeCommittedTransactionSummary(bytes) {
69
70
  for (let index = 0; index < operationCount; index += 1) {
70
71
  const operationId = reader.stableId(`operation ${index} id`);
71
72
  if (seenOperationIds.has(operationId)) {
72
- throw new TypeError("OGACO001 operation ids must be unique");
73
+ throw new TypeError("OGACO002 operation ids must be unique");
73
74
  }
74
75
  seenOperationIds.add(operationId);
75
76
  operationIds.push(operationId);
@@ -209,7 +210,7 @@ var Reader = class {
209
210
  const endRow = this.u32("clear range end row");
210
211
  const endColumn = this.u32("clear range end column");
211
212
  if (startRow > endRow || startColumn > endColumn) {
212
- throw new TypeError("OGACO001 clear range is not normalized");
213
+ throw new TypeError("OGACO002 clear range is not normalized");
213
214
  }
214
215
  return totalCells;
215
216
  }
@@ -217,7 +218,7 @@ var Reader = class {
217
218
  this.stableId("selective undo target");
218
219
  return totalCells;
219
220
  default:
220
- throw new TypeError(`invalid OGACO001 collaboration command tag: ${tag}`);
221
+ throw new TypeError(`invalid OGACO002 collaboration command tag: ${tag}`);
221
222
  }
222
223
  }
223
224
  skipSetCells(totalCells) {
@@ -227,18 +228,18 @@ var Reader = class {
227
228
  const rows = this.u32("cell block rows");
228
229
  const columns = this.u32("cell block columns");
229
230
  if (rows === 0 || columns === 0) {
230
- throw new TypeError("OGACO001 cell block dimensions must be nonzero");
231
+ throw new TypeError("OGACO002 cell block dimensions must be nonzero");
231
232
  }
232
233
  if (anchorRow > U32_MAX - (rows - 1) || anchorColumn > U32_MAX - (columns - 1)) {
233
- throw new RangeError("OGACO001 cell block coordinates overflow u32");
234
+ throw new RangeError("OGACO002 cell block coordinates overflow u32");
234
235
  }
235
236
  if (rows > Math.floor(MAX_COMMITTED_TRANSACTION_CELLS / columns)) {
236
- throw new RangeError("OGACO001 cell block exceeds its cell limit");
237
+ throw new RangeError("OGACO002 cell block exceeds its cell limit");
237
238
  }
238
239
  const cellCount = rows * columns;
239
240
  const nextTotal = totalCells + cellCount;
240
241
  if (nextTotal > MAX_COMMITTED_TRANSACTION_CELLS) {
241
- throw new RangeError("OGACO001 transaction exceeds its cell limit");
242
+ throw new RangeError("OGACO002 transaction exceeds its cell limit");
242
243
  }
243
244
  for (let index = 0; index < cellCount; index += 1) this.skipCell();
244
245
  return nextTotal;
@@ -247,10 +248,11 @@ var Reader = class {
247
248
  const formulaTag = this.u8("cell formula tag");
248
249
  if (formulaTag === 1) {
249
250
  if (this.skipString("cell formula") === 0) {
250
- throw new TypeError("OGACO001 formula must not be empty");
251
+ throw new TypeError("OGACO002 formula must not be empty");
251
252
  }
253
+ return;
252
254
  } else if (formulaTag !== 0) {
253
- throw new TypeError(`invalid OGACO001 cell formula tag: ${formulaTag}`);
255
+ throw new TypeError(`invalid OGACO002 cell formula tag: ${formulaTag}`);
254
256
  }
255
257
  const valueTag = this.u8("cell value tag");
256
258
  switch (valueTag) {
@@ -267,8 +269,11 @@ var Reader = class {
267
269
  case 5:
268
270
  this.skipFormulaError();
269
271
  return;
272
+ case 6:
273
+ this.skipDate();
274
+ return;
270
275
  default:
271
- throw new TypeError(`invalid OGACO001 cell value tag: ${valueTag}`);
276
+ throw new TypeError(`invalid OGACO002 cell value tag: ${valueTag}`);
272
277
  }
273
278
  }
274
279
  skipNumber() {
@@ -276,10 +281,17 @@ var Reader = class {
276
281
  const low = this.#view.getUint32(offset, true);
277
282
  const high = this.#view.getUint32(offset + 4, true);
278
283
  if (low === 0 && high === 2147483648) {
279
- throw new TypeError("OGACO001 cell number uses negative zero");
284
+ throw new TypeError("OGACO002 cell number uses negative zero");
280
285
  }
281
286
  if ((high & 2146435072) === 2146435072) {
282
- throw new TypeError("OGACO001 cell numbers must be finite");
287
+ throw new TypeError("OGACO002 cell numbers must be finite");
288
+ }
289
+ }
290
+ skipDate() {
291
+ const offset = this.reserve(8, "cell date");
292
+ const milliseconds = this.#view.getBigInt64(offset, true);
293
+ if (milliseconds < -MAX_DATE_MILLISECONDS || milliseconds > MAX_DATE_MILLISECONDS) {
294
+ throw new TypeError("OGACO002 cell date is outside the ECMAScript range");
283
295
  }
284
296
  }
285
297
  skipFormulaError() {
@@ -289,7 +301,7 @@ var Reader = class {
289
301
  this.skipString("custom formula error");
290
302
  return;
291
303
  }
292
- throw new TypeError(`invalid OGACO001 formula error tag: ${tag}`);
304
+ throw new TypeError(`invalid OGACO002 formula error tag: ${tag}`);
293
305
  }
294
306
  skipGeneration(label) {
295
307
  this.sheetObjectId(`${label} sheet id`);
@@ -305,15 +317,15 @@ var Reader = class {
305
317
  return length;
306
318
  }
307
319
  done() {
308
- if (this.#offset !== this.#end) throw new TypeError("trailing bytes in OGACO001 payload");
320
+ if (this.#offset !== this.#end) throw new TypeError("trailing bytes in OGACO002 payload");
309
321
  }
310
322
  };
311
323
  function assertInput(bytes) {
312
324
  if (!(bytes instanceof Uint8Array)) {
313
- throw new TypeError("OGACO001 bytes must be a Uint8Array");
325
+ throw new TypeError("OGACO002 bytes must be a Uint8Array");
314
326
  }
315
327
  if (typeof SharedArrayBuffer !== "undefined" && bytes.buffer instanceof SharedArrayBuffer) {
316
- throw new TypeError("OGACO001 bytes must not use shared mutable memory");
328
+ throw new TypeError("OGACO002 bytes must not use shared mutable memory");
317
329
  }
318
330
  }
319
331
  function safeU64At(view, offset, label, positive) {
@@ -389,4 +401,4 @@ export {
389
401
  MAX_COMMITTED_TRANSACTION_CELLS,
390
402
  decodeCommittedTransactionSummary
391
403
  };
392
- //# sourceMappingURL=chunk-Y3MLSLB4.js.map
404
+ //# sourceMappingURL=chunk-3SIZGL3O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editable-artifact-committed-transaction.ts"],"sourcesContent":["/**\n * Strict, allocation-bounded inspection of canonical OGACO002 transactions.\n *\n * The Rust kernel remains the authority for applying operations. This decoder\n * validates the complete envelope and every typed operation so metadata after\n * the operation stream cannot be located by trusting attacker-controlled\n * lengths. It intentionally does not construct an editable artifact model.\n */\n\nimport { COMMITTED_TRANSACTION_PROTOCOL_VERSION } from \"./editable-artifact-versions\";\n\nexport { COMMITTED_TRANSACTION_PROTOCOL_VERSION } from \"./editable-artifact-versions\";\nexport const MAX_COMMITTED_TRANSACTION_BYTES = 8 * 1024 * 1024;\nexport const MAX_COMMITTED_TRANSACTION_OPERATIONS = 4_096;\nexport const MAX_COMMITTED_TRANSACTION_CAUSAL_REPLICAS = 100_000;\nexport const MAX_COMMITTED_TRANSACTION_CELLS = 1_000_000;\n\nconst MAGIC = new Uint8Array([0x4f, 0x47, 0x41, 0x43, 0x4f, 0x30, 0x30, 0x32]); // OGACO002\nconst HEADER_BYTES = 24;\nconst CHECKSUM_BYTES = 8;\nconst HASH_BYTES = 32;\nconst STABLE_ID_BYTES = 16;\nconst MAX_OPERATION_STRING_BYTES = 4 * 1024 * 1024;\nconst MAX_SAFE_U64_HIGH = 0x1f_ffff;\nconst U32_SIZE = 0x1_0000_0000;\nconst U32_MAX = 0xffff_ffff;\nconst MAX_DATE_MILLISECONDS = 8_640_000_000_000_000n;\nconst FNV_OFFSET_LOW = 0x8422_2325;\nconst FNV_OFFSET_HIGH = 0xcbf2_9ce4;\nconst FNV_PRIME_LOW = 0x01b3;\n\nconst HEX = Array.from({ length: 256 }, (_, value) => value.toString(16).padStart(2, \"0\"));\n\nexport type CommittedTransactionCausalEntry = Readonly<{\n replicaId: string;\n counter: number;\n}>;\n\nexport type CommittedTransactionSummary = Readonly<{\n operationProtocolVersion: typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION;\n transactionId: string;\n dot: CommittedTransactionCausalEntry;\n resolvedCausalBase: readonly CommittedTransactionCausalEntry[];\n operationIds: readonly string[];\n priorStateHash: string;\n resultingCausalFrontier: readonly CommittedTransactionCausalEntry[];\n stateHash: string;\n}>;\n\n/**\n * Decodes only the metadata of one exact canonical OGACO002 byte envelope.\n *\n * This function is synchronous and never mutates or retains `bytes`. The\n * caller remains the owner of the exact canonical envelope.\n */\nexport function decodeCommittedTransactionSummary(bytes: Uint8Array): CommittedTransactionSummary {\n assertInput(bytes);\n if (bytes.byteLength > MAX_COMMITTED_TRANSACTION_BYTES) {\n throw new RangeError(\"OGACO002 envelope exceeds its byte limit\");\n }\n if (bytes.byteLength < HEADER_BYTES + CHECKSUM_BYTES) {\n throw new TypeError(\"truncated OGACO002 envelope\");\n }\n\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n for (let index = 0; index < MAGIC.byteLength; index += 1) {\n if (bytes[index] !== MAGIC[index]) throw new TypeError(\"invalid OGACO002 magic\");\n }\n\n const version = view.getUint16(8, true);\n if (version !== COMMITTED_TRANSACTION_PROTOCOL_VERSION) {\n throw new TypeError(`unsupported OGACO002 version: ${version}`);\n }\n if (view.getUint16(10, true) !== 0) {\n throw new TypeError(\"reserved OGACO002 header bits are set\");\n }\n\n const operationCount = view.getUint32(12, true);\n if (operationCount === 0 || operationCount > MAX_COMMITTED_TRANSACTION_OPERATIONS) {\n throw new RangeError(\"OGACO002 operation count is outside its canonical bounds\");\n }\n\n const payloadLength = safeU64At(view, 16, \"OGACO002 payload length\", false);\n const payloadEnd = checkedAdd(HEADER_BYTES, payloadLength, \"OGACO002 payload length\");\n const expectedLength = checkedAdd(payloadEnd, CHECKSUM_BYTES, \"OGACO002 envelope length\");\n if (bytes.byteLength !== expectedLength) {\n throw new TypeError(\n bytes.byteLength < expectedLength\n ? \"truncated OGACO002 payload\"\n : \"trailing bytes after OGACO002 envelope\",\n );\n }\n\n const [checksumLow, checksumHigh] = fnv1a64(bytes, payloadEnd);\n if (\n view.getUint32(payloadEnd, true) !== checksumLow ||\n view.getUint32(payloadEnd + 4, true) !== checksumHigh\n ) {\n throw new TypeError(\"OGACO002 checksum mismatch\");\n }\n\n const reader = new Reader(bytes, HEADER_BYTES, payloadEnd);\n const transactionId = reader.stableId(\"transaction id\");\n const dot = Object.freeze({\n replicaId: reader.replicaId(\"transaction dot replica\"),\n counter: reader.safeU64(\"transaction dot counter\", true),\n });\n const resolvedCausalBase = reader.frontier(\"resolved causal base\");\n const priorStateHash = reader.stateHash(\"prior state hash\");\n\n const operationIds: string[] = [];\n const seenOperationIds = new Set<string>();\n let totalCells = 0;\n for (let index = 0; index < operationCount; index += 1) {\n const operationId = reader.stableId(`operation ${index} id`);\n if (seenOperationIds.has(operationId)) {\n throw new TypeError(\"OGACO002 operation ids must be unique\");\n }\n seenOperationIds.add(operationId);\n operationIds.push(operationId);\n totalCells = reader.skipCommand(totalCells);\n }\n\n const resultingCausalFrontier = reader.frontier(\"resulting causal frontier\");\n const stateHash = reader.stateHash(\"resulting state hash\");\n reader.done();\n\n return Object.freeze({\n operationProtocolVersion: COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n transactionId,\n dot,\n resolvedCausalBase,\n operationIds: Object.freeze(operationIds),\n priorStateHash,\n resultingCausalFrontier,\n stateHash,\n });\n}\n\nclass Reader {\n readonly #bytes: Uint8Array;\n readonly #view: DataView;\n readonly #end: number;\n #offset: number;\n\n constructor(bytes: Uint8Array, offset: number, end: number) {\n this.#bytes = bytes;\n this.#view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n this.#offset = offset;\n this.#end = end;\n }\n\n take(length: number, label: string): Uint8Array {\n const offset = this.reserve(length, label);\n return this.#bytes.subarray(offset, offset + length);\n }\n\n reserve(length: number, label: string): number {\n if (!Number.isSafeInteger(length) || length < 0) {\n throw new RangeError(`${label} has an invalid byte length`);\n }\n const offset = this.#offset;\n const end = checkedAdd(offset, length, `${label} byte range`);\n if (end > this.#end) throw new TypeError(`truncated ${label}`);\n this.#offset = end;\n return offset;\n }\n\n u8(label: string): number {\n return this.#bytes[this.reserve(1, label)]!;\n }\n\n u32(label: string): number {\n const offset = this.reserve(4, label);\n return this.#view.getUint32(offset, true);\n }\n\n safeU64(label: string, positive: boolean): number {\n const offset = this.reserve(8, label);\n const value = safeU64At(this.#view, offset, label, positive);\n return value;\n }\n\n replicaId(label: string): string {\n const offset = this.reserve(8, label);\n const low = this.#view.getUint32(offset, true);\n const high = this.#view.getUint32(offset + 4, true);\n if (low === 0 && high === 0) throw new TypeError(`${label} must be nonzero`);\n return hexU64(high, low);\n }\n\n stableId(label: string): string {\n const offset = this.reserve(STABLE_ID_BYTES, label);\n const counterLow = this.#view.getUint32(offset, true);\n const counterHigh = this.#view.getUint32(offset + 4, true);\n const namespaceLow = this.#view.getUint32(offset + 8, true);\n const namespaceHigh = this.#view.getUint32(offset + 12, true);\n if (counterLow === 0 && counterHigh === 0 && namespaceLow === 0 && namespaceHigh === 0) {\n throw new TypeError(`${label} reserves the all-zero value`);\n }\n return `${hexU64(namespaceHigh, namespaceLow)}${hexU64(counterHigh, counterLow)}`;\n }\n\n sheetObjectId(label: string): string {\n const offset = this.#offset;\n const id = this.stableId(label);\n const counterIsZero =\n this.#view.getUint32(offset, true) === 0 && this.#view.getUint32(offset + 4, true) === 0;\n const namespaceIsZero =\n this.#view.getUint32(offset + 8, true) === 0 && this.#view.getUint32(offset + 12, true) === 0;\n if (counterIsZero || namespaceIsZero) {\n throw new TypeError(`${label} requires nonzero namespace and counter`);\n }\n return id;\n }\n\n stateHash(label: string): string {\n return `sha256:${hexBytes(this.take(HASH_BYTES, label))}`;\n }\n\n frontier(label: string): readonly CommittedTransactionCausalEntry[] {\n const count = this.u32(`${label} count`);\n if (count > MAX_COMMITTED_TRANSACTION_CAUSAL_REPLICAS) {\n throw new RangeError(`${label} exceeds its replica limit`);\n }\n const entries: CommittedTransactionCausalEntry[] = [];\n let previousLow = 0;\n let previousHigh = 0;\n let hasPrevious = false;\n for (let index = 0; index < count; index += 1) {\n const replicaOffset = this.#offset;\n const replicaId = this.replicaId(`${label} replica ${index}`);\n const replicaLow = this.#view.getUint32(replicaOffset, true);\n const replicaHigh = this.#view.getUint32(replicaOffset + 4, true);\n if (\n hasPrevious &&\n (replicaHigh < previousHigh || (replicaHigh === previousHigh && replicaLow <= previousLow))\n ) {\n throw new TypeError(`${label} replicas must be unique and strictly ordered`);\n }\n const counter = this.safeU64(`${label} counter ${index}`, true);\n entries.push(Object.freeze({ replicaId, counter }));\n previousLow = replicaLow;\n previousHigh = replicaHigh;\n hasPrevious = true;\n }\n return Object.freeze(entries);\n }\n\n skipCommand(totalCells: number): number {\n const tag = this.u8(\"collaboration command tag\");\n switch (tag) {\n case 0: {\n this.sheetObjectId(\"created sheet id\");\n this.skipString(\"created sheet name\");\n const after = this.u8(\"created sheet predecessor flag\");\n if (after === 1) this.skipGeneration(\"created sheet predecessor\");\n else if (after !== 0) throw new TypeError(\"invalid created sheet predecessor flag\");\n return totalCells;\n }\n case 1:\n this.skipGeneration(\"renamed sheet generation\");\n this.skipString(\"renamed sheet name\");\n return totalCells;\n case 2:\n this.skipGeneration(\"deleted sheet generation\");\n return totalCells;\n case 3:\n return this.skipSetCells(totalCells);\n case 4: {\n this.skipGeneration(\"cleared sheet generation\");\n const startRow = this.u32(\"clear range start row\");\n const startColumn = this.u32(\"clear range start column\");\n const endRow = this.u32(\"clear range end row\");\n const endColumn = this.u32(\"clear range end column\");\n if (startRow > endRow || startColumn > endColumn) {\n throw new TypeError(\"OGACO002 clear range is not normalized\");\n }\n return totalCells;\n }\n case 5:\n this.stableId(\"selective undo target\");\n return totalCells;\n default:\n throw new TypeError(`invalid OGACO002 collaboration command tag: ${tag}`);\n }\n }\n\n skipSetCells(totalCells: number): number {\n this.skipGeneration(\"cell block sheet generation\");\n const anchorRow = this.u32(\"cell block anchor row\");\n const anchorColumn = this.u32(\"cell block anchor column\");\n const rows = this.u32(\"cell block rows\");\n const columns = this.u32(\"cell block columns\");\n if (rows === 0 || columns === 0) {\n throw new TypeError(\"OGACO002 cell block dimensions must be nonzero\");\n }\n if (anchorRow > U32_MAX - (rows - 1) || anchorColumn > U32_MAX - (columns - 1)) {\n throw new RangeError(\"OGACO002 cell block coordinates overflow u32\");\n }\n if (rows > Math.floor(MAX_COMMITTED_TRANSACTION_CELLS / columns)) {\n throw new RangeError(\"OGACO002 cell block exceeds its cell limit\");\n }\n const cellCount = rows * columns;\n const nextTotal = totalCells + cellCount;\n if (nextTotal > MAX_COMMITTED_TRANSACTION_CELLS) {\n throw new RangeError(\"OGACO002 transaction exceeds its cell limit\");\n }\n for (let index = 0; index < cellCount; index += 1) this.skipCell();\n return nextTotal;\n }\n\n skipCell(): void {\n const formulaTag = this.u8(\"cell formula tag\");\n if (formulaTag === 1) {\n if (this.skipString(\"cell formula\") === 0) {\n throw new TypeError(\"OGACO002 formula must not be empty\");\n }\n return;\n } else if (formulaTag !== 0) {\n throw new TypeError(`invalid OGACO002 cell formula tag: ${formulaTag}`);\n }\n\n const valueTag = this.u8(\"cell value tag\");\n switch (valueTag) {\n case 0:\n case 1:\n case 2:\n return;\n case 3:\n this.skipNumber();\n return;\n case 4:\n this.skipString(\"cell text\");\n return;\n case 5:\n this.skipFormulaError();\n return;\n case 6:\n this.skipDate();\n return;\n default:\n throw new TypeError(`invalid OGACO002 cell value tag: ${valueTag}`);\n }\n }\n\n skipNumber(): void {\n const offset = this.reserve(8, \"cell number\");\n const low = this.#view.getUint32(offset, true);\n const high = this.#view.getUint32(offset + 4, true);\n if (low === 0 && high === 0x8000_0000) {\n throw new TypeError(\"OGACO002 cell number uses negative zero\");\n }\n if ((high & 0x7ff0_0000) === 0x7ff0_0000) {\n throw new TypeError(\"OGACO002 cell numbers must be finite\");\n }\n }\n\n skipDate(): void {\n const offset = this.reserve(8, \"cell date\");\n const milliseconds = this.#view.getBigInt64(offset, true);\n if (milliseconds < -MAX_DATE_MILLISECONDS || milliseconds > MAX_DATE_MILLISECONDS) {\n throw new TypeError(\"OGACO002 cell date is outside the ECMAScript range\");\n }\n }\n\n skipFormulaError(): void {\n const tag = this.u8(\"formula error tag\");\n if (tag <= 8) return;\n if (tag === 9) {\n this.skipString(\"custom formula error\");\n return;\n }\n throw new TypeError(`invalid OGACO002 formula error tag: ${tag}`);\n }\n\n skipGeneration(label: string): void {\n this.sheetObjectId(`${label} sheet id`);\n this.stableId(`${label} creation operation id`);\n }\n\n skipString(label: string): number {\n const length = this.u32(`${label} length`);\n if (length > MAX_OPERATION_STRING_BYTES) {\n throw new RangeError(`${label} exceeds its byte limit`);\n }\n const value = this.take(length, label);\n assertUtf8(value, label);\n return length;\n }\n\n done(): void {\n if (this.#offset !== this.#end) throw new TypeError(\"trailing bytes in OGACO002 payload\");\n }\n}\n\nfunction assertInput(bytes: Uint8Array): void {\n if (!(bytes instanceof Uint8Array)) {\n throw new TypeError(\"OGACO002 bytes must be a Uint8Array\");\n }\n if (typeof SharedArrayBuffer !== \"undefined\" && bytes.buffer instanceof SharedArrayBuffer) {\n throw new TypeError(\"OGACO002 bytes must not use shared mutable memory\");\n }\n}\n\nfunction safeU64At(view: DataView, offset: number, label: string, positive: boolean): number {\n const low = view.getUint32(offset, true);\n const high = view.getUint32(offset + 4, true);\n if (high > MAX_SAFE_U64_HIGH)\n throw new RangeError(`${label} exceeds JavaScript safe integer range`);\n const value = high * U32_SIZE + low;\n if (positive && value === 0) throw new TypeError(`${label} must be nonzero`);\n return value;\n}\n\nfunction checkedAdd(left: number, right: number, label: string): number {\n const result = left + right;\n if (!Number.isSafeInteger(result)) throw new RangeError(`${label} exceeds safe integer range`);\n return result;\n}\n\n/** Allocation-free UTF-8 scalar validation equivalent to Rust `str::from_utf8`. */\nfunction assertUtf8(bytes: Uint8Array, label: string): void {\n for (let index = 0; index < bytes.length;) {\n const first = bytes[index]!;\n if (first <= 0x7f) {\n index += 1;\n continue;\n }\n const second = bytes[index + 1];\n if (first >= 0xc2 && first <= 0xdf && continuation(second)) {\n index += 2;\n continue;\n }\n const third = bytes[index + 2];\n if (\n ((first === 0xe0 && between(second, 0xa0, 0xbf)) ||\n (first >= 0xe1 && first <= 0xec && continuation(second)) ||\n (first === 0xed && between(second, 0x80, 0x9f)) ||\n (first >= 0xee && first <= 0xef && continuation(second))) &&\n continuation(third)\n ) {\n index += 3;\n continue;\n }\n const fourth = bytes[index + 3];\n if (\n ((first === 0xf0 && between(second, 0x90, 0xbf)) ||\n (first >= 0xf1 && first <= 0xf3 && continuation(second)) ||\n (first === 0xf4 && between(second, 0x80, 0x8f))) &&\n continuation(third) &&\n continuation(fourth)\n ) {\n index += 4;\n continue;\n }\n throw new TypeError(`${label} is not canonical UTF-8`);\n }\n}\n\nfunction continuation(value: number | undefined): boolean {\n return value !== undefined && value >= 0x80 && value <= 0xbf;\n}\n\nfunction between(value: number | undefined, minimum: number, maximum: number): boolean {\n return value !== undefined && value >= minimum && value <= maximum;\n}\n\nfunction hexU64(high: number, low: number): string {\n return `${high.toString(16).padStart(8, \"0\")}${low.toString(16).padStart(8, \"0\")}`;\n}\n\nfunction hexBytes(bytes: Uint8Array): string {\n let result = \"\";\n for (const byte of bytes) result += HEX[byte];\n return result;\n}\n\n/** FNV-1a-64 using exact 32-bit limbs; avoids a BigInt allocation per byte. */\nfunction fnv1a64(bytes: Uint8Array, end: number): readonly [low: number, high: number] {\n let low = FNV_OFFSET_LOW;\n let high = FNV_OFFSET_HIGH;\n for (let index = 0; index < end; index += 1) {\n low = (low ^ bytes[index]!) >>> 0;\n const lowProduct = low * FNV_PRIME_LOW;\n const carry = Math.floor(lowProduct / U32_SIZE);\n high = (high * FNV_PRIME_LOW + carry + low * 0x100) >>> 0;\n low = lowProduct >>> 0;\n }\n return [low, high];\n}\n"],"mappings":"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","names":[]}
@@ -1,3 +1,14 @@
1
+ import {
2
+ SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,
3
+ SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES,
4
+ SPREADSHEET_ARTIFACT_QUERY_VERSION,
5
+ assertCanonicalSpreadsheetArtifactKernelProjectionBytes,
6
+ assertCanonicalSpreadsheetArtifactKernelQueryBytes,
7
+ decodeSpreadsheetArtifactKernelProjection,
8
+ decodeSpreadsheetArtifactKernelQuery,
9
+ encodeSpreadsheetArtifactKernelProjection,
10
+ encodeSpreadsheetArtifactKernelQuery
11
+ } from "./chunk-Y3KNXVTD.js";
1
12
  import {
2
13
  DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES,
3
14
  DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,
@@ -16,17 +27,6 @@ import {
16
27
  encodeDocumentArtifactQuery,
17
28
  encodeDocumentArtifactQueryResponse
18
29
  } from "./chunk-RIY7GYQS.js";
19
- import {
20
- SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,
21
- SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES,
22
- SPREADSHEET_ARTIFACT_QUERY_VERSION,
23
- assertCanonicalSpreadsheetArtifactKernelProjectionBytes,
24
- assertCanonicalSpreadsheetArtifactKernelQueryBytes,
25
- decodeSpreadsheetArtifactKernelProjection,
26
- decodeSpreadsheetArtifactKernelQuery,
27
- encodeSpreadsheetArtifactKernelProjection,
28
- encodeSpreadsheetArtifactKernelQuery
29
- } from "./chunk-CADSX6UN.js";
30
30
  import {
31
31
  PRESENTATION_ARTIFACT_COMMAND_MAX_BYTES,
32
32
  PRESENTATION_ARTIFACT_COMMAND_MAX_COMMANDS,
@@ -48,19 +48,30 @@ import {
48
48
  import {
49
49
  SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES,
50
50
  SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS,
51
- SPREADSHEET_ARTIFACT_COMMAND_VERSION,
52
51
  assertCanonicalSpreadsheetArtifactCommandBytes,
53
52
  decodeSpreadsheetArtifactCommandBatch,
54
53
  encodeSpreadsheetArtifactCommandBatch
55
- } from "./chunk-LSB7GRLG.js";
54
+ } from "./chunk-TXTQIYCV.js";
55
+ import {
56
+ COMMITTED_TRANSACTION_PROTOCOL_VERSION,
57
+ DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,
58
+ DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,
59
+ EDITABLE_ARTIFACT_LIVE_WIRE_VERSION,
60
+ EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,
61
+ PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,
62
+ PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,
63
+ SPREADSHEET_ARTIFACT_COMMAND_VERSION,
64
+ SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
65
+ SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION
66
+ } from "./chunk-PX3VCKAU.js";
56
67
 
57
68
  // src/editable-artifact-codec-registry.ts
58
69
  var spreadsheet = Object.freeze({
59
70
  modality: "spreadsheet",
60
- modelSchemaVersion: 1,
61
- snapshotVersion: 1,
71
+ modelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,
72
+ snapshotVersion: SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,
62
73
  command: Object.freeze({
63
- magic: "OGASC001",
74
+ magic: "OGASC002",
64
75
  version: SPREADSHEET_ARTIFACT_COMMAND_VERSION,
65
76
  maximumBytes: SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES,
66
77
  maximumCommands: SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS,
@@ -90,14 +101,14 @@ var spreadsheet = Object.freeze({
90
101
  }),
91
102
  concurrency: Object.freeze({
92
103
  semantics: "causal-crdt-v1",
93
- collaborationEnvelope: "OGACO001",
104
+ collaborationEnvelope: "OGACO002",
94
105
  staleBaseMustBeRejected: false
95
106
  })
96
107
  });
97
108
  var document = Object.freeze({
98
109
  modality: "document",
99
- modelSchemaVersion: 1,
100
- snapshotVersion: 1,
110
+ modelSchemaVersion: DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,
111
+ snapshotVersion: DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,
101
112
  command: Object.freeze({
102
113
  magic: "OGADC001",
103
114
  version: DOCUMENT_ARTIFACT_COMMAND_VERSION,
@@ -133,8 +144,8 @@ var document = Object.freeze({
133
144
  });
134
145
  var presentation = Object.freeze({
135
146
  modality: "presentation",
136
- modelSchemaVersion: 1,
137
- snapshotVersion: 1,
147
+ modelSchemaVersion: PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,
148
+ snapshotVersion: PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,
138
149
  command: Object.freeze({
139
150
  magic: "OGAPC001",
140
151
  version: PRESENTATION_ARTIFACT_COMMAND_VERSION,
@@ -171,6 +182,17 @@ var presentation = Object.freeze({
171
182
  })
172
183
  });
173
184
  var EDITABLE_ARTIFACT_CODEC_REGISTRY = Object.freeze({ spreadsheet, document, presentation });
185
+ function currentEditableArtifactCompatibility(modality) {
186
+ const descriptor = EDITABLE_ARTIFACT_CODEC_REGISTRY[modality];
187
+ return Object.freeze({
188
+ modality,
189
+ liveProtocolVersion: EDITABLE_ARTIFACT_LIVE_WIRE_VERSION,
190
+ modelSchemaVersion: descriptor.modelSchemaVersion,
191
+ snapshotVersion: descriptor.snapshotVersion,
192
+ commandProtocolVersion: descriptor.command.version,
193
+ committedTransactionProtocolVersion: modality === "spreadsheet" ? COMMITTED_TRANSACTION_PROTOCOL_VERSION : EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION
194
+ });
195
+ }
174
196
  function editableArtifactCodecFor(input) {
175
197
  const descriptor = EDITABLE_ARTIFACT_CODEC_REGISTRY[input.durableModality];
176
198
  if (!descriptor) throw new TypeError("unsupported durable editable artifact modality");
@@ -189,6 +211,7 @@ function editableArtifactCodecFor(input) {
189
211
 
190
212
  export {
191
213
  EDITABLE_ARTIFACT_CODEC_REGISTRY,
214
+ currentEditableArtifactCompatibility,
192
215
  editableArtifactCodecFor
193
216
  };
194
- //# sourceMappingURL=chunk-JBCIY7QD.js.map
217
+ //# sourceMappingURL=chunk-7RMTKFJW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editable-artifact-codec-registry.ts"],"sourcesContent":["import {\n DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES,\n DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,\n DOCUMENT_ARTIFACT_COMMAND_VERSION,\n DOCUMENT_ARTIFACT_QUERY_MAX_BYTES,\n DOCUMENT_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n DOCUMENT_ARTIFACT_QUERY_RESPONSE_VERSION,\n DOCUMENT_ARTIFACT_QUERY_VERSION,\n assertCanonicalDocumentArtifactCommandBytes,\n assertCanonicalDocumentArtifactQueryBytes,\n assertCanonicalDocumentArtifactQueryResponseBytes,\n decodeDocumentArtifactCommandBatch,\n decodeDocumentArtifactQuery,\n decodeDocumentArtifactQueryResponse,\n encodeDocumentArtifactCommandBatch,\n encodeDocumentArtifactQuery,\n encodeDocumentArtifactQueryResponse,\n} from \"./document-artifact-commands\";\nimport {\n PRESENTATION_ARTIFACT_COMMAND_MAX_BYTES,\n PRESENTATION_ARTIFACT_COMMAND_MAX_COMMANDS,\n PRESENTATION_ARTIFACT_COMMAND_VERSION,\n PRESENTATION_ARTIFACT_QUERY_MAX_BYTES,\n PRESENTATION_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n PRESENTATION_ARTIFACT_QUERY_RESPONSE_VERSION,\n PRESENTATION_ARTIFACT_QUERY_VERSION,\n assertCanonicalPresentationArtifactCommandBytes,\n assertCanonicalPresentationArtifactQueryBytes,\n assertCanonicalPresentationArtifactQueryResponseBytes,\n decodePresentationArtifactCommandBatch,\n decodePresentationArtifactQuery,\n decodePresentationArtifactQueryResponse,\n encodePresentationArtifactCommandBatch,\n encodePresentationArtifactQuery,\n encodePresentationArtifactQueryResponse,\n} from \"./presentation-artifact-commands\";\nimport {\n SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES,\n SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS,\n SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n assertCanonicalSpreadsheetArtifactCommandBytes,\n decodeSpreadsheetArtifactCommandBatch,\n encodeSpreadsheetArtifactCommandBatch,\n} from \"./spreadsheet-artifact-commands\";\nimport {\n SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES,\n SPREADSHEET_ARTIFACT_QUERY_VERSION,\n assertCanonicalSpreadsheetArtifactKernelProjectionBytes,\n assertCanonicalSpreadsheetArtifactKernelQueryBytes,\n decodeSpreadsheetArtifactKernelProjection,\n decodeSpreadsheetArtifactKernelQuery,\n encodeSpreadsheetArtifactKernelProjection,\n encodeSpreadsheetArtifactKernelQuery,\n} from \"./spreadsheet-artifact-query\";\nimport {\n DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,\n DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,\n EDITABLE_ARTIFACT_LIVE_WIRE_VERSION,\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,\n PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n} from \"./editable-artifact-versions\";\n\nexport {\n DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,\n DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,\n PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,\n PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,\n SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n} from \"./editable-artifact-versions\";\n\nexport type EditableArtifactModality = \"spreadsheet\" | \"document\" | \"presentation\";\nexport type EditableArtifactConcurrencySemantics =\n | \"causal-crdt-v1\"\n | \"authoritative-serialized-stale-base-v1\";\n\nexport type CurrentEditableArtifactCompatibility = Readonly<{\n modality: EditableArtifactModality;\n liveProtocolVersion: number;\n modelSchemaVersion: number;\n snapshotVersion: number;\n commandProtocolVersion: number;\n committedTransactionProtocolVersion: number;\n}>;\n\nexport type EditableArtifactCodecDescriptor = Readonly<{\n modality: EditableArtifactModality;\n modelSchemaVersion: 1 | 2;\n snapshotVersion: 1 | 2;\n command: Readonly<{\n magic: \"OGASC002\" | \"OGADC001\" | \"OGAPC001\";\n version: 1 | 2;\n maximumBytes: number;\n maximumCommands: number;\n encode: (value: unknown) => Uint8Array;\n decode: (bytes: Uint8Array) => unknown;\n assertCanonical: (bytes: Uint8Array) => void;\n }>;\n query: Readonly<{\n magic: \"OGAKQ001\" | \"OGADQ001\" | \"OGAPQ001\";\n responseMagic: \"OGAKV001\" | \"OGADP001\" | \"OGAPV001\";\n version: 1;\n responseVersion: 1;\n maximumBytes: number;\n maximumResponseBytes: number;\n encode: (value: unknown) => Uint8Array;\n decode: (bytes: Uint8Array) => unknown;\n assertCanonical: (bytes: Uint8Array) => void;\n encodeResponse: (value: unknown) => Uint8Array;\n decodeResponse: (bytes: Uint8Array) => unknown;\n assertCanonicalResponse: (bytes: Uint8Array) => void;\n }>;\n concurrency: Readonly<{\n semantics: EditableArtifactConcurrencySemantics;\n collaborationEnvelope: \"OGACO002\" | null;\n staleBaseMustBeRejected: boolean;\n }>;\n}>;\n\nconst spreadsheet = Object.freeze({\n modality: \"spreadsheet\",\n modelSchemaVersion: SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION,\n snapshotVersion: SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION,\n command: Object.freeze({\n magic: \"OGASC002\",\n version: SPREADSHEET_ARTIFACT_COMMAND_VERSION,\n maximumBytes: SPREADSHEET_ARTIFACT_COMMAND_MAX_BYTES,\n maximumCommands: SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS,\n encode: (value: unknown) =>\n encodeSpreadsheetArtifactCommandBatch(\n value as Parameters<typeof encodeSpreadsheetArtifactCommandBatch>[0],\n ),\n decode: decodeSpreadsheetArtifactCommandBatch,\n assertCanonical: assertCanonicalSpreadsheetArtifactCommandBytes,\n }),\n query: Object.freeze({\n magic: \"OGAKQ001\",\n responseMagic: \"OGAKV001\",\n version: SPREADSHEET_ARTIFACT_QUERY_VERSION,\n responseVersion: SPREADSHEET_ARTIFACT_QUERY_VERSION,\n maximumBytes: SPREADSHEET_ARTIFACT_QUERY_MAX_BYTES,\n maximumResponseBytes: SPREADSHEET_ARTIFACT_PROJECTION_MAX_BYTES,\n encode: (value: unknown) =>\n encodeSpreadsheetArtifactKernelQuery(\n value as Parameters<typeof encodeSpreadsheetArtifactKernelQuery>[0],\n ),\n decode: decodeSpreadsheetArtifactKernelQuery,\n assertCanonical: assertCanonicalSpreadsheetArtifactKernelQueryBytes,\n encodeResponse: (value: unknown) =>\n encodeSpreadsheetArtifactKernelProjection(\n value as Parameters<typeof encodeSpreadsheetArtifactKernelProjection>[0],\n ),\n decodeResponse: decodeSpreadsheetArtifactKernelProjection,\n assertCanonicalResponse: assertCanonicalSpreadsheetArtifactKernelProjectionBytes,\n }),\n concurrency: Object.freeze({\n semantics: \"causal-crdt-v1\",\n collaborationEnvelope: \"OGACO002\",\n staleBaseMustBeRejected: false,\n }),\n}) satisfies EditableArtifactCodecDescriptor;\n\nconst document = Object.freeze({\n modality: \"document\",\n modelSchemaVersion: DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION,\n snapshotVersion: DOCUMENT_ARTIFACT_SNAPSHOT_VERSION,\n command: Object.freeze({\n magic: \"OGADC001\",\n version: DOCUMENT_ARTIFACT_COMMAND_VERSION,\n maximumBytes: DOCUMENT_ARTIFACT_COMMAND_MAX_BYTES,\n maximumCommands: DOCUMENT_ARTIFACT_COMMAND_MAX_COMMANDS,\n encode: (value: unknown) =>\n encodeDocumentArtifactCommandBatch(\n value as Parameters<typeof encodeDocumentArtifactCommandBatch>[0],\n ),\n decode: decodeDocumentArtifactCommandBatch,\n assertCanonical: assertCanonicalDocumentArtifactCommandBytes,\n }),\n query: Object.freeze({\n magic: \"OGADQ001\",\n responseMagic: \"OGADP001\",\n version: DOCUMENT_ARTIFACT_QUERY_VERSION,\n responseVersion: DOCUMENT_ARTIFACT_QUERY_RESPONSE_VERSION,\n maximumBytes: DOCUMENT_ARTIFACT_QUERY_MAX_BYTES,\n maximumResponseBytes: DOCUMENT_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n encode: (value: unknown) =>\n encodeDocumentArtifactQuery(value as Parameters<typeof encodeDocumentArtifactQuery>[0]),\n decode: decodeDocumentArtifactQuery,\n assertCanonical: assertCanonicalDocumentArtifactQueryBytes,\n encodeResponse: (value: unknown) =>\n encodeDocumentArtifactQueryResponse(\n value as Parameters<typeof encodeDocumentArtifactQueryResponse>[0],\n ),\n decodeResponse: decodeDocumentArtifactQueryResponse,\n assertCanonicalResponse: assertCanonicalDocumentArtifactQueryResponseBytes,\n }),\n concurrency: Object.freeze({\n semantics: \"authoritative-serialized-stale-base-v1\",\n collaborationEnvelope: null,\n staleBaseMustBeRejected: true,\n }),\n}) satisfies EditableArtifactCodecDescriptor;\n\nconst presentation = Object.freeze({\n modality: \"presentation\",\n modelSchemaVersion: PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION,\n snapshotVersion: PRESENTATION_ARTIFACT_SNAPSHOT_VERSION,\n command: Object.freeze({\n magic: \"OGAPC001\",\n version: PRESENTATION_ARTIFACT_COMMAND_VERSION,\n maximumBytes: PRESENTATION_ARTIFACT_COMMAND_MAX_BYTES,\n maximumCommands: PRESENTATION_ARTIFACT_COMMAND_MAX_COMMANDS,\n encode: (value: unknown) =>\n encodePresentationArtifactCommandBatch(\n value as Parameters<typeof encodePresentationArtifactCommandBatch>[0],\n ),\n decode: decodePresentationArtifactCommandBatch,\n assertCanonical: assertCanonicalPresentationArtifactCommandBytes,\n }),\n query: Object.freeze({\n magic: \"OGAPQ001\",\n responseMagic: \"OGAPV001\",\n version: PRESENTATION_ARTIFACT_QUERY_VERSION,\n responseVersion: PRESENTATION_ARTIFACT_QUERY_RESPONSE_VERSION,\n maximumBytes: PRESENTATION_ARTIFACT_QUERY_MAX_BYTES,\n maximumResponseBytes: PRESENTATION_ARTIFACT_QUERY_RESPONSE_MAX_BYTES,\n encode: (value: unknown) =>\n encodePresentationArtifactQuery(\n value as Parameters<typeof encodePresentationArtifactQuery>[0],\n ),\n decode: decodePresentationArtifactQuery,\n assertCanonical: assertCanonicalPresentationArtifactQueryBytes,\n encodeResponse: (value: unknown) =>\n encodePresentationArtifactQueryResponse(\n value as Parameters<typeof encodePresentationArtifactQueryResponse>[0],\n ),\n decodeResponse: decodePresentationArtifactQueryResponse,\n assertCanonicalResponse: assertCanonicalPresentationArtifactQueryResponseBytes,\n }),\n concurrency: Object.freeze({\n semantics: \"authoritative-serialized-stale-base-v1\",\n collaborationEnvelope: null,\n staleBaseMustBeRejected: true,\n }),\n}) satisfies EditableArtifactCodecDescriptor;\n\nexport const EDITABLE_ARTIFACT_CODEC_REGISTRY: Readonly<\n Record<EditableArtifactModality, EditableArtifactCodecDescriptor>\n> = Object.freeze({ spreadsheet, document, presentation });\n\n/** One exact current compatibility tuple per durable modality. */\nexport function currentEditableArtifactCompatibility(\n modality: EditableArtifactModality,\n): CurrentEditableArtifactCompatibility {\n const descriptor = EDITABLE_ARTIFACT_CODEC_REGISTRY[modality];\n return Object.freeze({\n modality,\n liveProtocolVersion: EDITABLE_ARTIFACT_LIVE_WIRE_VERSION,\n modelSchemaVersion: descriptor.modelSchemaVersion,\n snapshotVersion: descriptor.snapshotVersion,\n commandProtocolVersion: descriptor.command.version,\n committedTransactionProtocolVersion:\n modality === \"spreadsheet\"\n ? COMMITTED_TRANSACTION_PROTOCOL_VERSION\n : EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n });\n}\n\n/**\n * Selects solely from the durable artifact modality plus persisted versions.\n * Modality intentionally never enters OGATX001: the durable artifact row is\n * authoritative and prevents client-controlled cross-modality decoding.\n */\nexport function editableArtifactCodecFor(\n input: Readonly<{\n durableModality: EditableArtifactModality;\n modelSchemaVersion: number;\n commandProtocolVersion: number;\n }>,\n): EditableArtifactCodecDescriptor {\n const descriptor = EDITABLE_ARTIFACT_CODEC_REGISTRY[input.durableModality];\n if (!descriptor) throw new TypeError(\"unsupported durable editable artifact modality\");\n if (input.modelSchemaVersion !== descriptor.modelSchemaVersion) {\n throw new TypeError(\n \"editable artifact model schema version is incompatible with its durable modality\",\n );\n }\n if (input.commandProtocolVersion !== descriptor.command.version) {\n throw new TypeError(\n \"editable artifact command protocol version is incompatible with its durable modality\",\n );\n }\n return descriptor;\n}\n"],"mappings":"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","names":[]}