@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,72 @@
1
+ import { type Database, type EnqueueMemorySlackPublicationResult } from "@opengeni/db";
2
+ /**
3
+ * Narrow post-persistence port for the immutable durable-learning v1 attempt/receipt contract.
4
+ * The router owns validation, authority, routing, and persistence. This adapter
5
+ * consumes only the fields required to create a bounded notification projection.
6
+ */
7
+ export type DurableLearningSlackOutcome = {
8
+ attempt: {
9
+ id: string;
10
+ accountId: string;
11
+ workspaceId: string;
12
+ inputHash: string;
13
+ actor: {
14
+ kind: "human" | "agent" | "service";
15
+ subjectId: string;
16
+ };
17
+ initiatingHumanSubjectId: string | null;
18
+ sessionId: string | null;
19
+ request: {
20
+ operation: "write";
21
+ subject: {
22
+ kind: string;
23
+ summary: string | null;
24
+ };
25
+ evidence: Array<{
26
+ kind: string;
27
+ }>;
28
+ } | {
29
+ operation: "rollback";
30
+ targetAttemptId: string;
31
+ };
32
+ };
33
+ receipt: {
34
+ attemptId: string;
35
+ inputHash: string;
36
+ outcome: "applied" | "proposed" | "evidence_recorded" | "noop" | "clarification_required" | "rejected" | "rolled_back" | "failed";
37
+ decision: {
38
+ code: string;
39
+ destination: string | null;
40
+ scope: {
41
+ kind: string;
42
+ } | null;
43
+ authority: string | null;
44
+ };
45
+ resource: {
46
+ surface: string;
47
+ id: string;
48
+ version: string | null;
49
+ status: string;
50
+ } | null;
51
+ createdAt: string;
52
+ };
53
+ };
54
+ export type DurableLearningSlackPublicationResult = {
55
+ kind: "contract_mismatch" | "not_workspace_scoped" | "connector_evidence_untrusted" | "summary_required" | "policy_quiet";
56
+ enqueue: null;
57
+ } | {
58
+ kind: "enqueued";
59
+ enqueue: EnqueueMemorySlackPublicationResult;
60
+ };
61
+ export type DurableLearningSlackProjection = {
62
+ summary: string;
63
+ outcome: DurableLearningSlackOutcome["receipt"]["outcome"];
64
+ decisionCode: string;
65
+ destination: string | null;
66
+ authority: string | null;
67
+ resource: DurableLearningSlackOutcome["receipt"]["resource"];
68
+ occurredAt: string;
69
+ };
70
+ export declare function publishDurableLearningOutcomeToSlack(db: Database, outcome: DurableLearningSlackOutcome): Promise<DurableLearningSlackPublicationResult>;
71
+ export declare function durableLearningImportance(outcome: DurableLearningSlackOutcome): "major" | "normal" | "minor";
72
+ export declare function durableLearningSlackProjection(outcome: DurableLearningSlackOutcome): DurableLearningSlackProjection | null;
@@ -0,0 +1,192 @@
1
+ import { type DocumentArtifactCommand, type DocumentArtifactQuery, type PresentationArtifactCommand, type PresentationArtifactQuery, type SpreadsheetArtifactCommand, type SpreadsheetArtifactKernelQuery } from "@opengeni/contracts/editable-artifacts";
2
+ import type { EditableArtifactDurableExportService, EditableArtifactMaterializationFormat, EditableArtifactMaterializationJob } from "./durable-export.js";
3
+ import type { EditableArtifactService } from "./service.js";
4
+ import { type EditableArtifact, type EditableArtifactActor, type EditableArtifactClientTransactionId, type EditableArtifactId, type EditableArtifactModality, type EditableArtifactOriginalImport, type EditableArtifactScope, type ImportEditableArtifactRequest } from "./types.js";
5
+ import type { EditableArtifactKernelState } from "./ports.js";
6
+ export type EditableArtifactAgentCommandBatch = Readonly<{
7
+ modality: "spreadsheet";
8
+ commands: readonly SpreadsheetArtifactCommand[];
9
+ }> | Readonly<{
10
+ modality: "document";
11
+ commands: readonly DocumentArtifactCommand[];
12
+ }> | Readonly<{
13
+ modality: "presentation";
14
+ commands: readonly PresentationArtifactCommand[];
15
+ }>;
16
+ export type EditableArtifactAgentQuery = Readonly<{
17
+ modality: "spreadsheet";
18
+ query: SpreadsheetArtifactKernelQuery;
19
+ }> | Readonly<{
20
+ modality: "document";
21
+ query: DocumentArtifactQuery;
22
+ }> | Readonly<{
23
+ modality: "presentation";
24
+ query: PresentationArtifactQuery;
25
+ }>;
26
+ export type EditableArtifactAgentContext = Readonly<{
27
+ scope: EditableArtifactScope;
28
+ actor: EditableArtifactActor;
29
+ sessionId: string;
30
+ }>;
31
+ export type EditableArtifactAgentMetadata = Readonly<{
32
+ id: string;
33
+ modality: EditableArtifactModality;
34
+ title: string;
35
+ lifecycle: EditableArtifact["lifecycle"];
36
+ headSequence: number;
37
+ stateHash: string;
38
+ createdAt: string;
39
+ updatedAt: string;
40
+ }>;
41
+ export type EditableArtifactAgentMutationReceipt = Readonly<{
42
+ artifact: EditableArtifactAgentMetadata;
43
+ transaction: Readonly<{
44
+ id: string;
45
+ clientTransactionId: string;
46
+ sequenceStart: number;
47
+ sequenceEnd: number;
48
+ stateHash: string;
49
+ committedAt: string;
50
+ replayed: boolean;
51
+ }>;
52
+ }>;
53
+ export type EditableArtifactAgentExportReceipt = Readonly<{
54
+ fileId: string;
55
+ filename: string;
56
+ contentType: string;
57
+ sizeBytes: number;
58
+ sha256: string;
59
+ artifactId: string;
60
+ versionId: string;
61
+ materializationJobId: string;
62
+ sourceHeadSequence: number;
63
+ sourceStateHash: string;
64
+ }>;
65
+ export type PreparedEditableArtifactImport = Readonly<{
66
+ originalImport: EditableArtifactOriginalImport;
67
+ snapshot: ImportEditableArtifactRequest["snapshot"];
68
+ }>;
69
+ export type EditableArtifactOfficeImportErrorCode = "invalid_source" | "source_changed" | "unsupported_content";
70
+ export declare class EditableArtifactOfficeImportError extends Error {
71
+ readonly code: EditableArtifactOfficeImportErrorCode;
72
+ constructor(code: EditableArtifactOfficeImportErrorCode);
73
+ }
74
+ export interface EditableArtifactAgentAssociationPort {
75
+ listArtifactIds(input: {
76
+ scope: EditableArtifactScope;
77
+ sessionId: string;
78
+ limit: number;
79
+ }): Promise<readonly EditableArtifactId[]>;
80
+ touch(input: {
81
+ scope: EditableArtifactScope;
82
+ sessionId: string;
83
+ artifactId: EditableArtifactId;
84
+ }): Promise<void>;
85
+ }
86
+ export interface EditableArtifactAgentInspectionKernelPort {
87
+ query(input: {
88
+ state: EditableArtifactKernelState;
89
+ queryBytes: Uint8Array;
90
+ }): Promise<Uint8Array>;
91
+ }
92
+ export interface EditableArtifactOfficeImportPort {
93
+ prepare(input: {
94
+ scope: EditableArtifactScope;
95
+ actor: EditableArtifactActor;
96
+ fileId: string;
97
+ modality: EditableArtifactModality;
98
+ signal?: AbortSignal;
99
+ }): Promise<PreparedEditableArtifactImport>;
100
+ }
101
+ export interface EditableArtifactAgentWorkspaceFilePort {
102
+ ensureMaterializationFile(input: {
103
+ scope: EditableArtifactScope;
104
+ actor: EditableArtifactActor;
105
+ artifact: EditableArtifact;
106
+ versionId: string;
107
+ jobId: string;
108
+ filename: string;
109
+ sourceHeadSequence: number;
110
+ sourceStateHash: string;
111
+ signal?: AbortSignal;
112
+ }): Promise<EditableArtifactAgentExportReceipt>;
113
+ }
114
+ export type EditableArtifactAgentApplicationDependencies = Readonly<{
115
+ domain: EditableArtifactService;
116
+ exports: EditableArtifactDurableExportService;
117
+ associations: EditableArtifactAgentAssociationPort;
118
+ inspector: EditableArtifactAgentInspectionKernelPort;
119
+ officeImports: EditableArtifactOfficeImportPort;
120
+ workspaceFiles: EditableArtifactAgentWorkspaceFilePort;
121
+ }>;
122
+ /**
123
+ * Attempt-neutral use cases shared by direct model tools and Codemode. This is
124
+ * not another artifact engine: every mutation terminates at EditableArtifactService.
125
+ */
126
+ export declare class EditableArtifactAgentApplication {
127
+ private readonly dependencies;
128
+ constructor(dependencies: EditableArtifactAgentApplicationDependencies);
129
+ list(input: EditableArtifactAgentContext & Readonly<{
130
+ limit?: number;
131
+ }>): Promise<readonly EditableArtifactAgentMetadata[]>;
132
+ create(input: EditableArtifactAgentContext & Readonly<{
133
+ idempotencyKey: EditableArtifactClientTransactionId;
134
+ modality: EditableArtifactModality;
135
+ title: string;
136
+ signal?: AbortSignal;
137
+ }>): Promise<EditableArtifactAgentMetadata>;
138
+ import(input: EditableArtifactAgentContext & Readonly<{
139
+ idempotencyKey: EditableArtifactClientTransactionId;
140
+ fileId: string;
141
+ modality: EditableArtifactModality;
142
+ title: string;
143
+ signal?: AbortSignal;
144
+ }>): Promise<EditableArtifactAgentMetadata>;
145
+ get(input: EditableArtifactAgentContext & Readonly<{
146
+ artifactId: EditableArtifactId;
147
+ }>): Promise<EditableArtifactAgentMetadata>;
148
+ inspect(input: EditableArtifactAgentContext & Readonly<{
149
+ artifactId: EditableArtifactId;
150
+ request: EditableArtifactAgentQuery;
151
+ }>): Promise<Readonly<{
152
+ artifact: EditableArtifactAgentMetadata;
153
+ projection: unknown;
154
+ }>>;
155
+ apply(input: EditableArtifactAgentContext & Readonly<{
156
+ artifactId: EditableArtifactId;
157
+ clientTransactionId: EditableArtifactClientTransactionId;
158
+ expectedHeadSequence: number;
159
+ expectedStateHash: string;
160
+ batch: EditableArtifactAgentCommandBatch;
161
+ }>): Promise<EditableArtifactAgentMutationReceipt>;
162
+ startExport(input: EditableArtifactAgentContext & Readonly<{
163
+ artifactId: EditableArtifactId;
164
+ idempotencyKey: string;
165
+ format: EditableArtifactMaterializationFormat;
166
+ options?: Readonly<Record<string, unknown>>;
167
+ signal?: AbortSignal;
168
+ }>): Promise<Readonly<{
169
+ artifact: EditableArtifactAgentMetadata;
170
+ versionId: string;
171
+ jobId: string;
172
+ sourceHeadSequence: number;
173
+ sourceStateHash: string;
174
+ state: EditableArtifactMaterializationJob["state"];
175
+ }>>;
176
+ exportStatus(input: EditableArtifactAgentContext & Readonly<{
177
+ artifactId: EditableArtifactId;
178
+ versionId: string;
179
+ jobId: string;
180
+ signal?: AbortSignal;
181
+ }>): Promise<Readonly<{
182
+ artifact: EditableArtifactAgentMetadata;
183
+ versionId: string;
184
+ jobId: string;
185
+ sourceHeadSequence: number;
186
+ sourceStateHash: string;
187
+ state: EditableArtifactMaterializationJob["state"];
188
+ errorCode: string | null;
189
+ file: EditableArtifactAgentExportReceipt | null;
190
+ }>>;
191
+ private touch;
192
+ }
@@ -0,0 +1,4 @@
1
+ import { type PostgresEditableArtifactDurableExportStore } from "@opengeni/db/editable-artifact-durable-export";
2
+ import { type EditableArtifactDurableExportStorePort } from "./durable-export.js";
3
+ /** One-way adapter keeps @opengeni/db free of the core package cycle. */
4
+ export declare function editableArtifactDurableExportStorePortFromPostgres(store: PostgresEditableArtifactDurableExportStore): EditableArtifactDurableExportStorePort;
@@ -0,0 +1,212 @@
1
+ import type { BoundedObjectReadPort } from "@opengeni/storage";
2
+ import type { EditableArtifactAuthorizationPort } from "./ports.js";
3
+ import { type EditableArtifactActor, type EditableArtifactCausalFrontier, type EditableArtifactContentHash, type EditableArtifactId, type EditableArtifactModality, type EditableArtifactScope, type EditableArtifactSnapshotMetadata, type EditableArtifactStateHash } from "./types.js";
4
+ export declare const EDITABLE_ARTIFACT_EXPORT_MAX_DOWNLOAD_BYTES: number;
5
+ export declare const EDITABLE_ARTIFACT_EXPORT_MAX_OPTIONS_BYTES: number;
6
+ export type EditableArtifactMaterializationFormat = "xlsx" | "pptx" | "docx" | "pdf" | "png" | "webp";
7
+ export type EditableArtifactMaterializationMimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | "application/vnd.openxmlformats-officedocument.presentationml.presentation" | "application/vnd.openxmlformats-officedocument.wordprocessingml.document" | "application/pdf" | "image/png" | "image/webp";
8
+ export type EditableArtifactPinnedVersion = Readonly<{
9
+ scope: EditableArtifactScope;
10
+ artifactId: EditableArtifactId;
11
+ id: string;
12
+ modality: EditableArtifactModality;
13
+ snapshotId: string;
14
+ headSequence: number;
15
+ causalFrontier: EditableArtifactCausalFrontier | null;
16
+ nativeRevision: number | null;
17
+ stateHash: EditableArtifactStateHash;
18
+ name: string;
19
+ pinned: true;
20
+ createdBySubjectId: string;
21
+ createdAt: string;
22
+ }>;
23
+ export type EditableArtifactMaterializationResult = Readonly<{
24
+ id: string;
25
+ byteSize: number;
26
+ contentHash: EditableArtifactContentHash;
27
+ mimeType: EditableArtifactMaterializationMimeType;
28
+ verifiedAt: string;
29
+ createdAt: string;
30
+ }>;
31
+ export type EditableArtifactMaterializationJob = Readonly<{
32
+ scope: EditableArtifactScope;
33
+ artifactId: EditableArtifactId;
34
+ id: string;
35
+ versionId: string;
36
+ inputSnapshotId: string;
37
+ targetHeadSequence: number;
38
+ stateHash: EditableArtifactStateHash;
39
+ format: EditableArtifactMaterializationFormat;
40
+ state: "pending" | "running" | "succeeded" | "failed";
41
+ attemptCount: number;
42
+ errorCode: string | null;
43
+ createdAt: string;
44
+ startedAt: string | null;
45
+ completedAt: string | null;
46
+ result: EditableArtifactMaterializationResult | null;
47
+ }>;
48
+ export type EditableArtifactMaterializationProfile = Readonly<{
49
+ modality: EditableArtifactModality;
50
+ format: EditableArtifactMaterializationFormat;
51
+ codecId: string;
52
+ codecVersion: string;
53
+ kernelVersion: string;
54
+ fontRegistryHash: string;
55
+ policyHash: string;
56
+ /** Canonical JSON object understood by the pinned native materializer. */
57
+ normalizedOptions: string;
58
+ }>;
59
+ /** Server-owned profile lookup. Clients never supply executable identity facts. */
60
+ export interface EditableArtifactMaterializationProfilePort {
61
+ resolve(input: Readonly<{
62
+ modality: EditableArtifactModality;
63
+ format: EditableArtifactMaterializationFormat;
64
+ options: Readonly<Record<string, unknown>>;
65
+ }>): Promise<EditableArtifactMaterializationProfile | null>;
66
+ }
67
+ export interface EditableArtifactDurableExportIdFactoryPort {
68
+ next(kind: "version" | "materialization_job" | "receipt"): string;
69
+ }
70
+ export interface EditableArtifactExactSnapshotPort {
71
+ ensure(input: Readonly<{
72
+ scope: EditableArtifactScope;
73
+ artifactId: EditableArtifactId;
74
+ actor: EditableArtifactActor;
75
+ signal?: AbortSignal;
76
+ }>): Promise<EditableArtifactSnapshotMetadata>;
77
+ }
78
+ type DurableExportContext = Readonly<{
79
+ scope: EditableArtifactScope;
80
+ artifactId: EditableArtifactId;
81
+ actor: EditableArtifactActor;
82
+ }>;
83
+ export type PinEditableArtifactVersionStoreRequest = DurableExportContext & Readonly<{
84
+ expectedAuthorizationRevision: number;
85
+ authorityKey: string;
86
+ receiptId: string;
87
+ versionId: string;
88
+ idempotencyKey: string;
89
+ requestHash: string;
90
+ name: string;
91
+ snapshot: EditableArtifactSnapshotMetadata;
92
+ }>;
93
+ export type PinEditableArtifactVersionStoreResult = Readonly<{
94
+ kind: "result";
95
+ version: EditableArtifactPinnedVersion;
96
+ replayed: boolean;
97
+ }> | Readonly<{
98
+ kind: "authorization_stale";
99
+ }>;
100
+ export type EnqueueEditableArtifactMaterializationStoreRequest = DurableExportContext & Readonly<{
101
+ expectedAuthorizationRevision: number;
102
+ authorityKey: string;
103
+ receiptId: string;
104
+ jobId: string;
105
+ idempotencyKey: string;
106
+ requestHash: string;
107
+ versionId: string;
108
+ profile: EditableArtifactMaterializationProfile;
109
+ }>;
110
+ export type EnqueueEditableArtifactMaterializationStoreResult = Readonly<{
111
+ kind: "result";
112
+ job: EditableArtifactMaterializationJob;
113
+ replayed: boolean;
114
+ }> | Readonly<{
115
+ kind: "authorization_stale";
116
+ }>;
117
+ export type ReadEditableArtifactMaterializationStoreResult = Readonly<{
118
+ kind: "result";
119
+ job: EditableArtifactMaterializationJob | null;
120
+ }> | Readonly<{
121
+ kind: "authorization_stale";
122
+ }>;
123
+ export type ReadEditableArtifactVersionStoreResult = Readonly<{
124
+ kind: "result";
125
+ version: EditableArtifactPinnedVersion | null;
126
+ }> | Readonly<{
127
+ kind: "authorization_stale";
128
+ }>;
129
+ export type ReadEditableArtifactMaterializationDownloadStoreResult = Readonly<{
130
+ kind: "result";
131
+ job: EditableArtifactMaterializationJob | null;
132
+ objectReference: string | null;
133
+ }> | Readonly<{
134
+ kind: "authorization_stale";
135
+ }>;
136
+ export interface EditableArtifactDurableExportStorePort {
137
+ pinVersion(input: PinEditableArtifactVersionStoreRequest): Promise<PinEditableArtifactVersionStoreResult>;
138
+ enqueueMaterialization(input: EnqueueEditableArtifactMaterializationStoreRequest): Promise<EnqueueEditableArtifactMaterializationStoreResult>;
139
+ readVersion(input: DurableExportContext & Readonly<{
140
+ expectedAuthorizationRevision: number;
141
+ versionId: string;
142
+ }>): Promise<ReadEditableArtifactVersionStoreResult>;
143
+ readMaterialization(input: DurableExportContext & Readonly<{
144
+ expectedAuthorizationRevision: number;
145
+ jobId: string;
146
+ }>): Promise<ReadEditableArtifactMaterializationStoreResult>;
147
+ readMaterializationDownload(input: DurableExportContext & Readonly<{
148
+ expectedAuthorizationRevision: number;
149
+ jobId: string;
150
+ }>): Promise<ReadEditableArtifactMaterializationDownloadStoreResult>;
151
+ }
152
+ export type EditableArtifactMaterializationDownload = Readonly<{
153
+ artifactId: EditableArtifactId;
154
+ jobId: string;
155
+ format: EditableArtifactMaterializationFormat;
156
+ byteSize: number;
157
+ contentHash: EditableArtifactContentHash;
158
+ mimeType: EditableArtifactMaterializationMimeType;
159
+ chunks(input?: {
160
+ signal?: AbortSignal;
161
+ }): AsyncIterable<Uint8Array>;
162
+ assertUnchanged(signal?: AbortSignal): Promise<void>;
163
+ close(): Promise<void>;
164
+ }>;
165
+ export type EditableArtifactDurableExportErrorCode = "invalid_request" | "not_found" | "forbidden" | "conflict" | "unsupported_format" | "not_ready" | "unavailable";
166
+ export declare class EditableArtifactDurableExportError extends Error {
167
+ readonly code: EditableArtifactDurableExportErrorCode;
168
+ constructor(code: EditableArtifactDurableExportErrorCode);
169
+ }
170
+ export type EditableArtifactDurableExportServiceDependencies = Readonly<{
171
+ authorization: EditableArtifactAuthorizationPort;
172
+ exactSnapshots: EditableArtifactExactSnapshotPort;
173
+ store: EditableArtifactDurableExportStorePort;
174
+ ids: EditableArtifactDurableExportIdFactoryPort;
175
+ profiles: EditableArtifactMaterializationProfilePort;
176
+ materializationObjects: BoundedObjectReadPort;
177
+ }>;
178
+ export declare class EditableArtifactDurableExportService {
179
+ private readonly dependencies;
180
+ constructor(dependencies: EditableArtifactDurableExportServiceDependencies);
181
+ pinVersion(input: DurableExportContext & {
182
+ idempotencyKey: string;
183
+ name: string;
184
+ signal?: AbortSignal;
185
+ }): Promise<{
186
+ version: EditableArtifactPinnedVersion;
187
+ replayed: boolean;
188
+ }>;
189
+ enqueueMaterialization(input: DurableExportContext & {
190
+ idempotencyKey: string;
191
+ versionId: string;
192
+ format: EditableArtifactMaterializationFormat;
193
+ options?: Readonly<Record<string, unknown>>;
194
+ }): Promise<{
195
+ job: EditableArtifactMaterializationJob;
196
+ replayed: boolean;
197
+ }>;
198
+ getMaterialization(input: DurableExportContext & Readonly<{
199
+ jobId: string;
200
+ }>): Promise<EditableArtifactMaterializationJob>;
201
+ openMaterializationDownload(input: DurableExportContext & Readonly<{
202
+ jobId: string;
203
+ signal?: AbortSignal;
204
+ }>): Promise<EditableArtifactMaterializationDownload>;
205
+ private getVersion;
206
+ private requireExportPermission;
207
+ }
208
+ export declare function editableArtifactMaterializationMimeType(format: EditableArtifactMaterializationFormat): EditableArtifactMaterializationMimeType;
209
+ export declare function editableArtifactFormatMatchesModality(modality: EditableArtifactModality, format: EditableArtifactMaterializationFormat): boolean;
210
+ export declare function validateEditableArtifactPinnedVersion(version: EditableArtifactPinnedVersion): EditableArtifactPinnedVersion;
211
+ export declare function validateEditableArtifactMaterializationJob(job: EditableArtifactMaterializationJob): EditableArtifactMaterializationJob;
212
+ export {};
@@ -0,0 +1,47 @@
1
+ export type EditableArtifactDomainErrorCode = "invalid_request" | "not_found" | "forbidden" | "not_editable" | "idempotency_conflict" | "request_hash_mismatch" | "causal_future" | "causal_chain_conflict" | "stale_base" | "kernel_contract_violation" | "retryable_conflict" | "invalid_undo_target" | "snapshot_conflict" | "outbox_lease_conflict";
2
+ export declare class EditableArtifactDomainError extends Error {
3
+ readonly code: EditableArtifactDomainErrorCode;
4
+ constructor(code: EditableArtifactDomainErrorCode, message: string);
5
+ }
6
+ export declare class EditableArtifactNotFoundError extends EditableArtifactDomainError {
7
+ constructor();
8
+ }
9
+ export declare class EditableArtifactInvalidRequestError extends EditableArtifactDomainError {
10
+ constructor(message: string);
11
+ }
12
+ export declare class EditableArtifactForbiddenError extends EditableArtifactDomainError {
13
+ constructor(permission: string);
14
+ }
15
+ export declare class EditableArtifactNotEditableError extends EditableArtifactDomainError {
16
+ constructor(state: string);
17
+ }
18
+ export declare class EditableArtifactIdempotencyConflictError extends EditableArtifactDomainError {
19
+ constructor();
20
+ }
21
+ export declare class EditableArtifactRequestHashMismatchError extends EditableArtifactDomainError {
22
+ constructor();
23
+ }
24
+ export declare class EditableArtifactCausalFutureError extends EditableArtifactDomainError {
25
+ constructor();
26
+ }
27
+ export declare class EditableArtifactCausalChainError extends EditableArtifactDomainError {
28
+ constructor(message: string);
29
+ }
30
+ export declare class EditableArtifactStaleBaseError extends EditableArtifactDomainError {
31
+ constructor();
32
+ }
33
+ export declare class EditableArtifactKernelContractError extends EditableArtifactDomainError {
34
+ constructor(message: string);
35
+ }
36
+ export declare class EditableArtifactRetryableConflictError extends EditableArtifactDomainError {
37
+ constructor();
38
+ }
39
+ export declare class EditableArtifactUndoTargetError extends EditableArtifactDomainError {
40
+ constructor(message: string);
41
+ }
42
+ export declare class EditableArtifactSnapshotConflictError extends EditableArtifactDomainError {
43
+ constructor(message: string);
44
+ }
45
+ export declare class EditableArtifactOutboxLeaseConflictError extends EditableArtifactDomainError {
46
+ constructor();
47
+ }
@@ -0,0 +1,11 @@
1
+ import type { EditableArtifactMutationIntentCodecPort } from "./ports.js";
2
+ import { type CreateEditableArtifactRequest, type ImportEditableArtifactRequest, type EditableArtifactRequestHash } from "./types.js";
3
+ /** Canonical identity of caller-controlled create semantics only. */
4
+ export declare function hashEditableArtifactCreateRequest(request: Pick<CreateEditableArtifactRequest, "modality" | "title">): EditableArtifactRequestHash;
5
+ /** Canonical identity of one retained Office import and its verified snapshot facts. */
6
+ export declare function hashEditableArtifactImportRequest(request: Omit<ImportEditableArtifactRequest, "idempotencyKey">): EditableArtifactRequestHash;
7
+ /** Production adapter over the one shared OGATX001 canonical wire codec. */
8
+ export declare class OgatxEditableArtifactMutationIntentCodec implements EditableArtifactMutationIntentCodecPort {
9
+ decodeAndVerify(input: Parameters<EditableArtifactMutationIntentCodecPort["decodeAndVerify"]>[0]): ReturnType<EditableArtifactMutationIntentCodecPort["decodeAndVerify"]>;
10
+ }
11
+ export declare const ogatxEditableArtifactMutationIntentCodec: OgatxEditableArtifactMutationIntentCodec;
@@ -0,0 +1,99 @@
1
+ import type { ClaimEditableArtifactLiveOutboxRequest, CreateEditableArtifactStoreRequest, CreateEditableArtifactStoreResult, EditableArtifactAuthorizationRevisionPort, EditableArtifactScopeAuthorizationRevisionPort, EditableArtifactClockPort, EditableArtifactKernelState, EditableArtifactStableIdFactoryPort, EditableArtifactStableIdKind, EditableArtifactStorePort, EditableArtifactTransactionBasis, EditableArtifactSnapshotUnitOfWorkPort, ReadEditableArtifactTransactionBasisRequest, ReadEditableArtifactAtAuthorizationRevisionResult, TryCommitAppliedEditableArtifactTransactionRequest, TryCommitAppliedEditableArtifactTransactionResult } from "./ports.js";
2
+ import { type EditableArtifact, type CreateEditableArtifactResult, type EditableArtifactCommittedTransactionRecord, type EditableArtifactId, type EditableArtifactLifecycleState, type EditableArtifactLiveOutboxRecord, type EditableArtifactModality, type EditableArtifactOperationRecord, type EditableArtifactOutboxId, type EditableArtifactOutboxRetryFailureCode, type EditableArtifactOutboxDeadLetterFailureCode, type EditableArtifactReceipt, type EditableArtifactScope, type EditableArtifactSnapshotMetadata, type EditableArtifactStableId, type EditableArtifactStateHash } from "./types.js";
3
+ export type SeedInMemoryEditableArtifact = Readonly<{
4
+ scope: EditableArtifactScope;
5
+ artifactId: EditableArtifactId;
6
+ modality: EditableArtifactModality;
7
+ title: string;
8
+ stateHash: EditableArtifactStateHash;
9
+ lifecycle?: EditableArtifactLifecycleState;
10
+ authorizationRevision?: number;
11
+ /** Authoritative native revision for a pre-existing serialized artifact. */
12
+ nativeRevision?: number;
13
+ createdAt?: string;
14
+ }>;
15
+ /**
16
+ * Executable correctness reference for tests. It deliberately serializes and
17
+ * copies aggregate history; production runtimes must use the PostgreSQL CAS
18
+ * adapter rather than treating this O(history) store as a performance model.
19
+ */
20
+ export declare class InMemoryEditableArtifactStore implements EditableArtifactStorePort, EditableArtifactAuthorizationRevisionPort, EditableArtifactScopeAuthorizationRevisionPort {
21
+ private readonly now;
22
+ private aggregates;
23
+ private creationReceipts;
24
+ private scopeCreateAuthorizationRevisions;
25
+ private exclusiveTail;
26
+ constructor(now?: () => Date);
27
+ findArtifactCreation(scopeInput: EditableArtifactScope, operationKind: "create" | "import", authorityKey: string, idempotencyKeyInput: string): Promise<CreateEditableArtifactResult | null>;
28
+ createArtifact(input: CreateEditableArtifactStoreRequest): Promise<CreateEditableArtifactStoreResult>;
29
+ readScopeCreateAuthorizationRevision(scope: EditableArtifactScope): Promise<number>;
30
+ advanceScopeCreateAuthorizationRevision(scope: EditableArtifactScope, expectedRevision: number, nextRevision: number): Promise<Readonly<{
31
+ applied: boolean;
32
+ authorizationRevision: number;
33
+ }>>;
34
+ seedArtifact(input: SeedInMemoryEditableArtifact): Promise<EditableArtifact>;
35
+ getArtifact(scope: EditableArtifactScope, artifactId: EditableArtifactId): Promise<EditableArtifact | null>;
36
+ readArtifactAtAuthorizationRevision(scope: EditableArtifactScope, artifactId: EditableArtifactId, expectedAuthorizationRevision: number): Promise<ReadEditableArtifactAtAuthorizationRevisionResult>;
37
+ /** Test/admin seam modeling the local policy invalidation transaction. */
38
+ advanceAuthorizationRevision(scope: EditableArtifactScope, artifactId: EditableArtifactId, expectedRevision: number, nextRevision: number): Promise<Readonly<{
39
+ applied: boolean;
40
+ authorizationRevision: number;
41
+ }>>;
42
+ readTransactionBasis(scope: EditableArtifactScope, artifactId: EditableArtifactId, request: ReadEditableArtifactTransactionBasisRequest): Promise<EditableArtifactTransactionBasis>;
43
+ readCurrentKernelState(scope: EditableArtifactScope, artifactId: EditableArtifactId, expectedAuthorizationRevision: number): Promise<Readonly<{
44
+ kind: "basis";
45
+ state: EditableArtifactKernelState;
46
+ }> | Readonly<{
47
+ kind: "authorization_stale";
48
+ }>>;
49
+ tryCommitAppliedTransaction(request: TryCommitAppliedEditableArtifactTransactionRequest): Promise<TryCommitAppliedEditableArtifactTransactionResult>;
50
+ withSnapshotPublicationLock<T>(scope: EditableArtifactScope, artifactId: EditableArtifactId, callback: (unitOfWork: EditableArtifactSnapshotUnitOfWorkPort) => Promise<T>): Promise<T>;
51
+ claimLiveOutbox(request: ClaimEditableArtifactLiveOutboxRequest): Promise<readonly EditableArtifactLiveOutboxRecord[]>;
52
+ markLiveOutboxPublished(input: {
53
+ outboxId: EditableArtifactOutboxId;
54
+ owner: string;
55
+ attemptCount: number;
56
+ }): Promise<void>;
57
+ releaseLiveOutbox(input: {
58
+ outboxId: EditableArtifactOutboxId;
59
+ owner: string;
60
+ attemptCount: number;
61
+ }): Promise<void>;
62
+ renewLiveOutbox(input: {
63
+ outboxId: EditableArtifactOutboxId;
64
+ owner: string;
65
+ attemptCount: number;
66
+ leaseDurationMs: number;
67
+ }): Promise<void>;
68
+ retryLiveOutbox(input: {
69
+ outboxId: EditableArtifactOutboxId;
70
+ owner: string;
71
+ attemptCount: number;
72
+ retryDelayMs: number;
73
+ errorCode: EditableArtifactOutboxRetryFailureCode;
74
+ }): Promise<void>;
75
+ deadLetterLiveOutbox(input: {
76
+ outboxId: EditableArtifactOutboxId;
77
+ owner: string;
78
+ attemptCount: number;
79
+ errorCode: EditableArtifactOutboxDeadLetterFailureCode;
80
+ }): Promise<void>;
81
+ listReceipts(scope: EditableArtifactScope, artifactId: EditableArtifactId): Promise<readonly EditableArtifactReceipt[]>;
82
+ listOperations(scope: EditableArtifactScope, artifactId: EditableArtifactId): Promise<readonly EditableArtifactOperationRecord[]>;
83
+ listCommittedTransactions(scope: EditableArtifactScope, artifactId: EditableArtifactId): Promise<readonly EditableArtifactCommittedTransactionRecord[]>;
84
+ listSnapshots(scope: EditableArtifactScope, artifactId: EditableArtifactId): Promise<readonly EditableArtifactSnapshotMetadata[]>;
85
+ listOutbox(): Promise<readonly EditableArtifactLiveOutboxRecord[]>;
86
+ private inspectAggregate;
87
+ private findOutbox;
88
+ private exclusive;
89
+ }
90
+ /** Deterministic persisted-namespace allocator for reference tests/adapters. */
91
+ export declare class InMemoryEditableArtifactStableIdFactory implements EditableArtifactStableIdFactoryPort {
92
+ private nextCounter;
93
+ private readonly namespace;
94
+ constructor(namespace: bigint | string, initialCounter?: bigint);
95
+ next(_kind: EditableArtifactStableIdKind): EditableArtifactStableId;
96
+ }
97
+ export declare class SystemEditableArtifactClock implements EditableArtifactClockPort {
98
+ now(): Date;
99
+ }
@@ -0,0 +1,14 @@
1
+ export * from "./errors.js";
2
+ export * from "./durable-export.js";
3
+ export * from "./agent-application.js";
4
+ export * from "./durable-export-postgres.js";
5
+ export * from "./hash.js";
6
+ export * from "./in-memory.js";
7
+ export * from "./ports.js";
8
+ export * from "./postgres-adapters.js";
9
+ export * from "./service.js";
10
+ export * from "./snapshot-verifier.js";
11
+ export * from "./snapshot-compaction.js";
12
+ export * from "./snapshot-verifier-genesis.js";
13
+ export * from "./snapshot-verifier-materialization.js";
14
+ export * from "./types.js";