@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,115 @@
1
+ export type EditableArtifactDomainErrorCode =
2
+ | "invalid_request"
3
+ | "not_found"
4
+ | "forbidden"
5
+ | "not_editable"
6
+ | "idempotency_conflict"
7
+ | "request_hash_mismatch"
8
+ | "causal_future"
9
+ | "causal_chain_conflict"
10
+ | "stale_base"
11
+ | "kernel_contract_violation"
12
+ | "retryable_conflict"
13
+ | "invalid_undo_target"
14
+ | "snapshot_conflict"
15
+ | "outbox_lease_conflict";
16
+
17
+ export class EditableArtifactDomainError extends Error {
18
+ constructor(
19
+ readonly code: EditableArtifactDomainErrorCode,
20
+ message: string,
21
+ ) {
22
+ super(message);
23
+ this.name = "EditableArtifactDomainError";
24
+ }
25
+ }
26
+
27
+ export class EditableArtifactNotFoundError extends EditableArtifactDomainError {
28
+ constructor() {
29
+ super("not_found", "Editable artifact was not found in the requested tenant scope");
30
+ }
31
+ }
32
+
33
+ export class EditableArtifactInvalidRequestError extends EditableArtifactDomainError {
34
+ constructor(message: string) {
35
+ super("invalid_request", message);
36
+ }
37
+ }
38
+
39
+ export class EditableArtifactForbiddenError extends EditableArtifactDomainError {
40
+ constructor(permission: string) {
41
+ super("forbidden", `Editable artifact permission denied: ${permission}`);
42
+ }
43
+ }
44
+
45
+ export class EditableArtifactNotEditableError extends EditableArtifactDomainError {
46
+ constructor(state: string) {
47
+ super("not_editable", `Editable artifact cannot be changed while ${state}`);
48
+ }
49
+ }
50
+
51
+ export class EditableArtifactIdempotencyConflictError extends EditableArtifactDomainError {
52
+ constructor() {
53
+ super(
54
+ "idempotency_conflict",
55
+ "Client transaction id was already committed with a different request hash",
56
+ );
57
+ }
58
+ }
59
+
60
+ export class EditableArtifactRequestHashMismatchError extends EditableArtifactDomainError {
61
+ constructor() {
62
+ super("request_hash_mismatch", "Request hash does not match the canonical transaction body");
63
+ }
64
+ }
65
+
66
+ export class EditableArtifactCausalFutureError extends EditableArtifactDomainError {
67
+ constructor() {
68
+ super("causal_future", "Causal base references state beyond the authoritative frontier");
69
+ }
70
+ }
71
+
72
+ export class EditableArtifactCausalChainError extends EditableArtifactDomainError {
73
+ constructor(message: string) {
74
+ super("causal_chain_conflict", message);
75
+ }
76
+ }
77
+
78
+ export class EditableArtifactStaleBaseError extends EditableArtifactDomainError {
79
+ constructor() {
80
+ super("stale_base", "Editable artifact changed after this transaction observed its base");
81
+ }
82
+ }
83
+
84
+ export class EditableArtifactKernelContractError extends EditableArtifactDomainError {
85
+ constructor(message: string) {
86
+ super("kernel_contract_violation", message);
87
+ }
88
+ }
89
+
90
+ export class EditableArtifactRetryableConflictError extends EditableArtifactDomainError {
91
+ constructor() {
92
+ super(
93
+ "retryable_conflict",
94
+ "Editable artifact changed repeatedly while applying the transaction; retry the same client transaction",
95
+ );
96
+ }
97
+ }
98
+
99
+ export class EditableArtifactUndoTargetError extends EditableArtifactDomainError {
100
+ constructor(message: string) {
101
+ super("invalid_undo_target", message);
102
+ }
103
+ }
104
+
105
+ export class EditableArtifactSnapshotConflictError extends EditableArtifactDomainError {
106
+ constructor(message: string) {
107
+ super("snapshot_conflict", message);
108
+ }
109
+ }
110
+
111
+ export class EditableArtifactOutboxLeaseConflictError extends EditableArtifactDomainError {
112
+ constructor() {
113
+ super("outbox_lease_conflict", "Live outbox record is not leased by this publisher");
114
+ }
115
+ }
@@ -0,0 +1,131 @@
1
+ import { createHash } from "node:crypto";
2
+ import {
3
+ assertEditableArtifactRequestHash,
4
+ decodeEditableArtifactMutationIntent,
5
+ hashEditableArtifactMutationIntentBytes,
6
+ } from "@opengeni/contracts/editable-artifacts";
7
+
8
+ import { EditableArtifactRequestHashMismatchError } from "./errors";
9
+ import type { EditableArtifactMutationIntentCodecPort } from "./ports";
10
+ import {
11
+ assertBoundedArtifactTitle,
12
+ editableArtifactRequestHash,
13
+ type CreateEditableArtifactRequest,
14
+ type ImportEditableArtifactRequest,
15
+ type EditableArtifactRequestHash,
16
+ } from "./types";
17
+
18
+ const CREATE_HASH_DOMAIN = new TextEncoder().encode("OpenGeni editable artifact create\0v1\0");
19
+ const IMPORT_HASH_DOMAIN = new TextEncoder().encode("OpenGeni editable artifact import\0v1\0");
20
+
21
+ /** Canonical identity of caller-controlled create semantics only. */
22
+ export function hashEditableArtifactCreateRequest(
23
+ request: Pick<CreateEditableArtifactRequest, "modality" | "title">,
24
+ ): EditableArtifactRequestHash {
25
+ if (
26
+ request.modality !== "spreadsheet" &&
27
+ request.modality !== "presentation" &&
28
+ request.modality !== "document"
29
+ ) {
30
+ throw new TypeError("Unknown editable artifact modality");
31
+ }
32
+ assertBoundedArtifactTitle(request.title);
33
+ const digest = createHash("sha256");
34
+ digest.update(CREATE_HASH_DOMAIN);
35
+ updateLengthFramedUtf8(digest, request.modality);
36
+ updateLengthFramedUtf8(digest, request.title);
37
+ return editableArtifactRequestHash(`sha256:${digest.digest("hex")}`);
38
+ }
39
+
40
+ /** Canonical identity of one retained Office import and its verified snapshot facts. */
41
+ export function hashEditableArtifactImportRequest(
42
+ request: Omit<ImportEditableArtifactRequest, "idempotencyKey">,
43
+ ): EditableArtifactRequestHash {
44
+ assertImportRequestShape(request);
45
+ const digest = createHash("sha256");
46
+ digest.update(IMPORT_HASH_DOMAIN);
47
+ updateLengthFramedUtf8(digest, request.modality);
48
+ updateLengthFramedUtf8(digest, request.title);
49
+ updateLengthFramedUtf8(digest, request.originalImport.fileId);
50
+ updateLengthFramedUtf8(digest, String(request.originalImport.byteSize));
51
+ updateLengthFramedUtf8(digest, request.originalImport.contentHash);
52
+ updateLengthFramedUtf8(digest, request.originalImport.mimeType);
53
+ updateLengthFramedUtf8(digest, String(request.snapshot.byteSize));
54
+ updateLengthFramedUtf8(digest, request.snapshot.contentHash);
55
+ updateLengthFramedUtf8(digest, request.snapshot.stateHash);
56
+ updateLengthFramedUtf8(digest, String(request.snapshot.modelSchemaVersion));
57
+ updateLengthFramedUtf8(digest, request.snapshot.kernelVersion);
58
+ if (request.snapshot.modality === "spreadsheet") {
59
+ updateLengthFramedUtf8(digest, String(request.snapshot.operationProtocolVersion));
60
+ updateLengthFramedUtf8(digest, String(request.snapshot.crdtStateVersion));
61
+ updateLengthFramedUtf8(digest, String(request.snapshot.coveredCausalFrontier.length));
62
+ for (const entry of request.snapshot.coveredCausalFrontier) {
63
+ updateLengthFramedUtf8(digest, entry.replicaId);
64
+ updateLengthFramedUtf8(digest, String(entry.counter));
65
+ }
66
+ } else {
67
+ updateLengthFramedUtf8(digest, String(request.snapshot.nativeRevision));
68
+ }
69
+ return editableArtifactRequestHash(`sha256:${digest.digest("hex")}`);
70
+ }
71
+
72
+ function assertImportRequestShape(
73
+ request: Omit<ImportEditableArtifactRequest, "idempotencyKey">,
74
+ ): void {
75
+ if (
76
+ request.modality !== "spreadsheet" &&
77
+ request.modality !== "presentation" &&
78
+ request.modality !== "document"
79
+ ) {
80
+ throw new TypeError("Unknown editable artifact modality");
81
+ }
82
+ assertBoundedArtifactTitle(request.title);
83
+ if (request.snapshot.modality !== request.modality) {
84
+ throw new TypeError("Imported snapshot modality does not match the Office source");
85
+ }
86
+ const expectedMimeType =
87
+ request.modality === "spreadsheet"
88
+ ? "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
89
+ : request.modality === "document"
90
+ ? "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
91
+ : "application/vnd.openxmlformats-officedocument.presentationml.presentation";
92
+ if (
93
+ request.originalImport.mimeType !== expectedMimeType ||
94
+ !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u.test(
95
+ request.originalImport.fileId,
96
+ ) ||
97
+ !Number.isSafeInteger(request.originalImport.byteSize) ||
98
+ request.originalImport.byteSize <= 0
99
+ ) {
100
+ throw new TypeError("Imported Office source facts are malformed");
101
+ }
102
+ }
103
+
104
+ function updateLengthFramedUtf8(digest: ReturnType<typeof createHash>, value: string): void {
105
+ const bytes = Buffer.from(value, "utf8");
106
+ const length = Buffer.allocUnsafe(4);
107
+ length.writeUInt32BE(bytes.byteLength);
108
+ digest.update(length);
109
+ digest.update(bytes);
110
+ }
111
+
112
+ /** Production adapter over the one shared OGATX001 canonical wire codec. */
113
+ export class OgatxEditableArtifactMutationIntentCodec implements EditableArtifactMutationIntentCodecPort {
114
+ async decodeAndVerify(
115
+ input: Parameters<EditableArtifactMutationIntentCodecPort["decodeAndVerify"]>[0],
116
+ ): ReturnType<EditableArtifactMutationIntentCodecPort["decodeAndVerify"]> {
117
+ const intentBytes = input.intentBytes.slice();
118
+ const requestHash = assertEditableArtifactRequestHash(input.requestHash);
119
+ // Shared hashing parses first, so malformed/noncanonical bytes never gain
120
+ // an application request identity. Decode returns an independently owned
121
+ // command block; this adapter never re-encodes or JSON-canonicalizes.
122
+ const actualHash = hashEditableArtifactMutationIntentBytes(intentBytes);
123
+ if (actualHash !== requestHash) {
124
+ throw new EditableArtifactRequestHashMismatchError();
125
+ }
126
+ return decodeEditableArtifactMutationIntent(intentBytes);
127
+ }
128
+ }
129
+
130
+ export const ogatxEditableArtifactMutationIntentCodec =
131
+ new OgatxEditableArtifactMutationIntentCodec();