@opengeni/sdk 3.3.2 → 3.4.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.
- package/README.md +1007 -72
- package/dist/adapters/express.d.ts +31 -0
- package/dist/adapters/express.js +87 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/hono.d.ts +16 -0
- package/dist/adapters/hono.js +8 -0
- package/dist/adapters/hono.js.map +1 -0
- package/dist/adapters/next.d.ts +29 -0
- package/dist/adapters/next.js +22 -0
- package/dist/adapters/next.js.map +1 -0
- package/dist/allowance-refusal.d.ts +2 -0
- package/dist/allowance-refusal.js +50 -0
- package/dist/allowance-refusal.js.map +1 -0
- package/dist/app-links.d.ts +42 -0
- package/dist/app-links.js +66 -0
- package/dist/app-links.js.map +1 -0
- package/dist/artifact-catalog.d.ts +40 -0
- package/dist/artifact-client.d.ts +20 -8
- package/dist/artifacts.d.ts +1 -1
- package/dist/artifacts.js +8 -6
- package/dist/automations.js +8 -2
- package/dist/automations.js.map +1 -1
- package/dist/azure-live-transport.d.ts +32 -0
- package/dist/browser.d.ts +7 -2
- package/dist/browser.js +27 -5
- package/dist/chat/fold.d.ts +75 -0
- package/dist/chat/handler.d.ts +41 -0
- package/dist/chat/http.d.ts +67 -0
- package/dist/chat/ids.d.ts +34 -0
- package/dist/chat/index.d.ts +9 -0
- package/dist/chat/index.js +1369 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/openai.d.ts +30 -0
- package/dist/chat/opengeni.d.ts +129 -0
- package/dist/chat/types.d.ts +207 -0
- package/dist/chat/vercel.d.ts +49 -0
- package/dist/chats.d.ts +8 -0
- package/dist/chunk-4AHR4KGA.js +301 -0
- package/dist/chunk-4AHR4KGA.js.map +1 -0
- package/dist/chunk-6GYGMLX4.js +332 -0
- package/dist/chunk-6GYGMLX4.js.map +1 -0
- package/dist/chunk-7EWT3PV6.js +368 -0
- package/dist/chunk-7EWT3PV6.js.map +1 -0
- package/dist/chunk-FTWVVPR6.js +1665 -0
- package/dist/chunk-FTWVVPR6.js.map +1 -0
- package/dist/{chunk-VYCTL62C.js → chunk-GZQSWAKD.js} +1 -1
- package/dist/chunk-GZQSWAKD.js.map +1 -0
- package/dist/chunk-KGEABAID.js +71 -0
- package/dist/chunk-KGEABAID.js.map +1 -0
- package/dist/{chunk-YKZME56C.js → chunk-KWADQ227.js} +3 -3
- package/dist/{chunk-YKZME56C.js.map → chunk-KWADQ227.js.map} +1 -1
- package/dist/{chunk-JUS2UYRP.js → chunk-NCU5OAN7.js} +27 -2
- package/dist/chunk-NCU5OAN7.js.map +1 -0
- package/dist/{chunk-YXQX7RQT.js → chunk-OI5YLASH.js} +73 -2
- package/dist/chunk-OI5YLASH.js.map +1 -0
- package/dist/chunk-OV3POE62.js +359 -0
- package/dist/chunk-OV3POE62.js.map +1 -0
- package/dist/chunk-P7UWKORG.js +561 -0
- package/dist/chunk-P7UWKORG.js.map +1 -0
- package/dist/chunk-QGEIL4TR.js +195 -0
- package/dist/chunk-QGEIL4TR.js.map +1 -0
- package/dist/{chunk-TRNI7KEO.js → chunk-S2NLS3ES.js} +3669 -1281
- package/dist/chunk-S2NLS3ES.js.map +1 -0
- package/dist/chunk-UM4ZXXJR.js +9 -0
- package/dist/chunk-UM4ZXXJR.js.map +1 -0
- package/dist/{chunk-QT3KFVDP.js → chunk-UME3X7CP.js} +28 -32
- package/dist/chunk-UME3X7CP.js.map +1 -0
- package/dist/chunk-VT4YM4XQ.js +210 -0
- package/dist/chunk-VT4YM4XQ.js.map +1 -0
- package/dist/chunk-WSYYXONG.js +1602 -0
- package/dist/chunk-WSYYXONG.js.map +1 -0
- package/dist/{chunk-C2H7HBNP.js → chunk-WVCJRSGJ.js} +119 -14
- package/dist/chunk-WVCJRSGJ.js.map +1 -0
- package/dist/chunk-X5ITQVXE.js +15 -0
- package/dist/chunk-X5ITQVXE.js.map +1 -0
- package/dist/chunk-XA7HVIHI.js +126 -0
- package/dist/chunk-XA7HVIHI.js.map +1 -0
- package/dist/{chunk-KKRO2VCP.js → chunk-YJCHB7R3.js} +60 -12
- package/dist/chunk-YJCHB7R3.js.map +1 -0
- package/dist/chunk-YKIHNLWD.js +153 -0
- package/dist/chunk-YKIHNLWD.js.map +1 -0
- package/dist/chunk-ZDUBPV33.js +277 -0
- package/dist/chunk-ZDUBPV33.js.map +1 -0
- package/dist/client.d.ts +1068 -118
- package/dist/codex-realtime-controller.d.ts +13 -0
- package/dist/codex-realtime-controller.js +4 -2
- package/dist/codex-realtime-v3-wire.d.ts +3 -2
- package/dist/codex-realtime.d.ts +5 -1
- package/dist/company-brain.d.ts +1 -11
- package/dist/core.d.ts +7 -2
- package/dist/core.js +25 -6
- package/dist/deprecation.d.ts +47 -0
- package/dist/document-authority-client.d.ts +24 -2
- package/dist/document-authority.js +7 -5
- package/dist/editable-artifacts/index.d.ts +1 -1
- package/dist/editable-artifacts/types.d.ts +12 -2
- package/dist/editable-artifacts.js +19 -3
- package/dist/editable-artifacts.js.map +1 -1
- package/dist/embedding-client.d.ts +129 -0
- package/dist/errors.d.ts +76 -1
- package/dist/external-vault-receiver.d.ts +203 -0
- package/dist/external-vault-receiver.js +564 -0
- package/dist/external-vault-receiver.js.map +1 -0
- package/dist/feedback.d.ts +23 -0
- package/dist/gateway-realtime-transport.js +1 -1
- package/dist/github-repositories.d.ts +10 -0
- package/dist/github-repositories.js +36 -0
- package/dist/github-repositories.js.map +1 -0
- package/dist/index.d.ts +62 -11
- package/dist/index.js +557 -338
- package/dist/index.js.map +1 -1
- package/dist/insights-usage.d.ts +33 -0
- package/dist/insights-usage.js +7 -0
- package/dist/insights-usage.js.map +1 -0
- package/dist/interaction.d.ts +165 -71
- package/dist/interaction.js +2 -2
- package/dist/knowledge.d.ts +7 -0
- package/dist/knowledge.js +20 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/known-tools.d.ts +4 -0
- package/dist/message-links.d.ts +68 -0
- package/dist/model-context.d.ts +68 -0
- package/dist/model-display.d.ts +2 -0
- package/dist/model-display.js +17 -0
- package/dist/model-display.js.map +1 -0
- package/dist/model-picker-order.d.ts +1 -0
- package/dist/model-picker-order.js +10 -0
- package/dist/model-picker-order.js.map +1 -0
- package/dist/organization-integration-policy.d.ts +26 -0
- package/dist/organization-integration-policy.js +26 -0
- package/dist/organization-integration-policy.js.map +1 -0
- package/dist/pr-review-client.d.ts +1 -1
- package/dist/pr-review.d.ts +1 -1
- package/dist/pr-review.js.map +1 -1
- package/dist/preference-registry.d.ts +1 -1
- package/dist/prepared-mcp-setup.d.ts +5 -0
- package/dist/proxy.d.ts +13 -11
- package/dist/realtime.d.ts +1 -1
- package/dist/realtime.js +253 -7
- package/dist/realtime.js.map +1 -1
- package/dist/session-history-import.d.ts +22 -0
- package/dist/session-history-import.js +36 -0
- package/dist/session-history-import.js.map +1 -0
- package/dist/session-list-entries.d.ts +1 -0
- package/dist/session-list-entries.js +7 -0
- package/dist/session-list-entries.js.map +1 -0
- package/dist/session-message-search.d.ts +53 -0
- package/dist/session-proxy-client.d.ts +28 -0
- package/dist/session-proxy.d.ts +334 -0
- package/dist/session-proxy.js +24 -0
- package/dist/session-proxy.js.map +1 -0
- package/dist/session-titles.d.ts +2 -28
- package/dist/session-usage-limits.d.ts +10 -0
- package/dist/session-usage-limits.js +43 -0
- package/dist/session-usage-limits.js.map +1 -0
- package/dist/shared-catalog-loader.d.ts +34 -0
- package/dist/site-ai.d.ts +35 -0
- package/dist/site-bridge-host.d.ts +112 -0
- package/dist/site-bridge-host.js +286 -0
- package/dist/site-bridge-host.js.map +1 -0
- package/dist/site-browser-entry.d.ts +1 -0
- package/dist/site-browser-runtime.gen.d.ts +1 -0
- package/dist/site-data.d.ts +178 -0
- package/dist/site-document.d.ts +5 -0
- package/dist/site-document.js +20 -0
- package/dist/site-document.js.map +1 -0
- package/dist/site-document.test.d.ts +1 -0
- package/dist/site-http.d.ts +17 -0
- package/dist/site-sql.d.ts +31 -0
- package/dist/site-tool-bridge.d.ts +57 -0
- package/dist/site.d.ts +186 -0
- package/dist/site.js +63 -0
- package/dist/site.js.map +1 -0
- package/dist/skills.d.ts +75 -0
- package/dist/sse.d.ts +1 -1
- package/dist/stream.d.ts +2 -0
- package/dist/tenant-workspaces.d.ts +47 -0
- package/dist/tenant-workspaces.js +8 -0
- package/dist/tenant-workspaces.js.map +1 -0
- package/dist/tool-auth.d.ts +87 -0
- package/dist/tool-auth.js +23 -0
- package/dist/tool-auth.js.map +1 -0
- package/dist/tool-display-metadata.d.ts +3 -0
- package/dist/tools-37DCTCNZ.js +12 -0
- package/dist/tools-37DCTCNZ.js.map +1 -0
- package/dist/tools.d.ts +81 -0
- package/dist/transcription.d.ts +1 -1
- package/dist/types.d.ts +2807 -583
- package/dist/usage-allowances.d.ts +36 -0
- package/dist/usage-allowances.js +80 -0
- package/dist/usage-allowances.js.map +1 -0
- package/dist/vault-types.d.ts +324 -0
- package/dist/vaults-api.d.ts +65 -0
- package/dist/workspace-artifacts.d.ts +47 -5
- package/dist/workspace-instruction-policies.d.ts +2 -2
- package/dist/workspace-integrations.d.ts +74 -0
- package/dist/workspace-integrations.js +67 -0
- package/dist/workspace-integrations.js.map +1 -0
- package/dist/workspace-state.d.ts +8 -71
- package/package.json +103 -5
- package/src/adapters/express.ts +136 -0
- package/src/adapters/hono.ts +18 -0
- package/src/adapters/next.ts +42 -0
- package/src/allowance-refusal.ts +5 -0
- package/src/app-links.ts +117 -0
- package/src/artifact-catalog.ts +51 -0
- package/src/artifact-client.ts +40 -49
- package/src/artifacts.ts +1 -0
- package/src/automations-client.ts +8 -2
- package/src/azure-live-transport.ts +286 -0
- package/src/browser.ts +37 -0
- package/src/chat/fold.ts +431 -0
- package/src/chat/handler.ts +240 -0
- package/src/chat/http.ts +257 -0
- package/src/chat/ids.ts +85 -0
- package/src/chat/index.ts +88 -0
- package/src/chat/openai.ts +439 -0
- package/src/chat/opengeni.ts +737 -0
- package/src/chat/types.ts +219 -0
- package/src/chat/vercel.ts +204 -0
- package/src/chats.ts +16 -0
- package/src/client.ts +5697 -1833
- package/src/codex-realtime-controller.ts +163 -8
- package/src/codex-realtime-v3-wire.ts +4 -3
- package/src/codex-realtime-v3.ts +12 -3
- package/src/codex-realtime.ts +11 -3
- package/src/company-brain.ts +0 -40
- package/src/core.ts +20 -0
- package/src/deprecation.ts +149 -0
- package/src/document-authority-client.ts +104 -1
- package/src/editable-artifacts/controller.ts +36 -2
- package/src/editable-artifacts/index.ts +1 -0
- package/src/editable-artifacts/types.ts +29 -16
- package/src/embedding-client.ts +519 -0
- package/src/errors.ts +303 -4
- package/src/external-vault-receiver.ts +914 -0
- package/src/feedback.ts +20 -0
- package/src/gateway-realtime-transport.ts +3 -3
- package/src/github-repositories.ts +60 -0
- package/src/index.ts +603 -65
- package/src/insights-usage.ts +64 -0
- package/src/interaction.ts +315 -93
- package/src/knowledge.ts +72 -0
- package/src/known-tools.ts +279 -0
- package/src/message-links.ts +178 -0
- package/src/model-context.ts +113 -0
- package/src/model-display.ts +11 -0
- package/src/model-picker-order.ts +6 -0
- package/src/organization-integration-policy.ts +54 -0
- package/src/pr-review-client.ts +1 -1
- package/src/pr-review.ts +1 -1
- package/src/preference-registry.ts +2 -0
- package/src/prepared-mcp-setup.ts +123 -0
- package/src/proxy.ts +23 -12
- package/src/realtime.ts +15 -6
- package/src/session-history-import.ts +84 -0
- package/src/session-list-entries.ts +1 -0
- package/src/session-message-search.ts +47 -0
- package/src/session-proxy-client.ts +68 -0
- package/src/session-proxy.ts +2098 -0
- package/src/session-titles.ts +8 -82
- package/src/session-usage-limits.ts +71 -0
- package/src/shared-catalog-loader.ts +169 -0
- package/src/site-ai.ts +284 -0
- package/src/site-bridge-host.ts +422 -0
- package/src/site-browser-entry.ts +6 -0
- package/src/site-browser-runtime.gen.ts +2 -0
- package/src/site-data.ts +372 -0
- package/src/site-document.test.ts +64 -0
- package/src/site-document.ts +18 -0
- package/src/site-http.ts +171 -0
- package/src/site-sql.ts +153 -0
- package/src/site-tool-bridge.ts +401 -0
- package/src/site.ts +878 -0
- package/src/skills.ts +69 -0
- package/src/sse.ts +9 -3
- package/src/stream.ts +33 -10
- package/src/tenant-workspaces.ts +148 -0
- package/src/tool-auth.ts +301 -0
- package/src/tool-display-metadata.ts +27 -0
- package/src/tools.ts +452 -0
- package/src/transcription.ts +3 -0
- package/src/types.ts +3170 -582
- package/src/usage-allowances.ts +189 -0
- package/src/vault-types.ts +379 -0
- package/src/vaults-api.ts +339 -0
- package/src/workspace-artifacts.ts +55 -6
- package/src/workspace-instruction-policies.ts +2 -1
- package/src/workspace-integrations.ts +402 -0
- package/src/workspace-state.ts +8 -82
- package/dist/chunk-C2H7HBNP.js.map +0 -1
- package/dist/chunk-C4DJPZRU.js +0 -119
- package/dist/chunk-C4DJPZRU.js.map +0 -1
- package/dist/chunk-JUS2UYRP.js.map +0 -1
- package/dist/chunk-KKRO2VCP.js.map +0 -1
- package/dist/chunk-QT3KFVDP.js.map +0 -1
- package/dist/chunk-TRNI7KEO.js.map +0 -1
- package/dist/chunk-VYCTL62C.js.map +0 -1
- package/dist/chunk-YXQX7RQT.js.map +0 -1
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
import type { CompanyBrainOkfDownload, CompanyBrainOkfPackage } from "./company-brain";
|
|
1
2
|
import { OpenGeniClient as OpenGeniCoreClient } from "./client";
|
|
2
3
|
import type {
|
|
4
|
+
ApiKey,
|
|
5
|
+
UpdateOrganizationApiKeyRequest,
|
|
6
|
+
Document,
|
|
7
|
+
IssueUserResourceGrantRequest,
|
|
8
|
+
UserResourceGrantMutationResponse,
|
|
9
|
+
DocumentBase,
|
|
10
|
+
FileDownloadUrlResponse,
|
|
3
11
|
DocumentAuthorityReclassification,
|
|
4
12
|
DocumentDefaultCollectionBackfill,
|
|
5
13
|
DocumentDefaultCollectionBackfillAudit,
|
|
@@ -13,13 +21,108 @@ import type {
|
|
|
13
21
|
} from "./types";
|
|
14
22
|
|
|
15
23
|
/**
|
|
16
|
-
* Operator-only
|
|
24
|
+
* Operator-only authority administration and Document tenancy-backfill surface.
|
|
17
25
|
*
|
|
18
26
|
* The public root and legacy `core` clients extend this class for compatibility.
|
|
19
27
|
* Browser consoles that import `@opengeni/sdk/browser` do not retain these
|
|
20
28
|
* methods or their routes.
|
|
21
29
|
*/
|
|
22
30
|
export class OpenGeniDocumentAuthorityClient extends OpenGeniCoreClient {
|
|
31
|
+
/** Read organization-key metadata and policy; never returns the secret token. */
|
|
32
|
+
async getOrganizationApiKey(organizationId: string, apiKeyId: string): Promise<ApiKey> {
|
|
33
|
+
return await this.requestJson<ApiKey>(
|
|
34
|
+
"GET",
|
|
35
|
+
`/v1/organizations/${organizationId}/api-keys/${apiKeyId}`,
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Update metadata or replace the policy. Policy narrowing applies on the next request. */
|
|
40
|
+
async updateOrganizationApiKey(
|
|
41
|
+
organizationId: string,
|
|
42
|
+
apiKeyId: string,
|
|
43
|
+
request: UpdateOrganizationApiKeyRequest,
|
|
44
|
+
): Promise<ApiKey> {
|
|
45
|
+
return await this.requestJson<ApiKey>(
|
|
46
|
+
"PATCH",
|
|
47
|
+
`/v1/organizations/${organizationId}/api-keys/${apiKeyId}`,
|
|
48
|
+
request,
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Issue an exact-session or standing personal-resource grant. */
|
|
53
|
+
async issueUserResourceGrant(
|
|
54
|
+
workspaceId: string,
|
|
55
|
+
authorityId: string,
|
|
56
|
+
request: IssueUserResourceGrantRequest,
|
|
57
|
+
): Promise<UserResourceGrantMutationResponse> {
|
|
58
|
+
return await this.requestJson<UserResourceGrantMutationResponse>(
|
|
59
|
+
"POST",
|
|
60
|
+
`/v1/workspaces/${workspaceId}/user-resource-authorities/${authorityId}/grants`,
|
|
61
|
+
request,
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async listDocumentBases(workspaceId: string): Promise<DocumentBase[]> {
|
|
66
|
+
return await this.requestJson<DocumentBase[]>(
|
|
67
|
+
"GET",
|
|
68
|
+
`/v1/workspaces/${workspaceId}/document-bases`,
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* List every Document the current human can manage from this workspace,
|
|
74
|
+
* including portable personal and organization-scoped Documents whose
|
|
75
|
+
* immutable ingestion workspace is different.
|
|
76
|
+
*/
|
|
77
|
+
async listAccessibleDocuments(workspaceId: string): Promise<Document[]> {
|
|
78
|
+
return await this.requestJson<Document[]>("GET", `/v1/workspaces/${workspaceId}/documents`);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Mint a source-file URL through the Document's effective authority. */
|
|
82
|
+
async createDocumentOriginalFileDownloadUrl(
|
|
83
|
+
workspaceId: string,
|
|
84
|
+
documentId: string,
|
|
85
|
+
): Promise<FileDownloadUrlResponse> {
|
|
86
|
+
return await this.requestJson<FileDownloadUrlResponse>(
|
|
87
|
+
"POST",
|
|
88
|
+
`/v1/workspaces/${workspaceId}/documents/${documentId}/original-file/download-url`,
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Retry indexing for a failed document. */
|
|
93
|
+
async reindexDocument(
|
|
94
|
+
workspaceId: string,
|
|
95
|
+
baseId: string,
|
|
96
|
+
documentId: string,
|
|
97
|
+
): Promise<Document> {
|
|
98
|
+
return await this.requestJson<Document>(
|
|
99
|
+
"POST",
|
|
100
|
+
`/v1/workspaces/${workspaceId}/document-bases/${baseId}/documents/${documentId}/reindex`,
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Permission-filtered Company Brain package with authorized guidance bodies. */
|
|
105
|
+
getCompanyBrain(workspaceId: string): Promise<CompanyBrainOkfPackage> {
|
|
106
|
+
return this.requestJson<CompanyBrainOkfPackage>(
|
|
107
|
+
"GET",
|
|
108
|
+
`/v1/workspaces/${workspaceId}/company-brain`,
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Download the deterministic Markdown/YAML Company Brain package. */
|
|
113
|
+
async exportCompanyBrainOkf(workspaceId: string): Promise<CompanyBrainOkfDownload> {
|
|
114
|
+
const response = await this.requestResponse(
|
|
115
|
+
"GET",
|
|
116
|
+
`/v1/workspaces/${workspaceId}/company-brain/export`,
|
|
117
|
+
);
|
|
118
|
+
const headers = response.headers;
|
|
119
|
+
return {
|
|
120
|
+
content: await response.text(),
|
|
121
|
+
contentType: headers.get("content-type") ?? "text/markdown",
|
|
122
|
+
filename: headers.get("content-disposition")?.split('"')[1] ?? "company-brain.okf.md",
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
23
126
|
/**
|
|
24
127
|
* Atomically reclassify a Document's authority and every indexed chunk.
|
|
25
128
|
* The operation is replay-safe and rejects a stale expected authority tuple.
|
|
@@ -378,6 +378,15 @@ class EditableArtifactSyncControllerImpl implements EditableArtifactSyncControll
|
|
|
378
378
|
}
|
|
379
379
|
|
|
380
380
|
getView(): EditableArtifactSyncView {
|
|
381
|
+
const blockedPending = this.allBlockedPending();
|
|
382
|
+
const authoringBlockedReason =
|
|
383
|
+
this.modality !== "spreadsheet" && blockedPending.length > 0
|
|
384
|
+
? "pending_conflict"
|
|
385
|
+
: this.orderedPending().some(
|
|
386
|
+
(transaction) => transaction.replicaId !== this.writerReplicaId,
|
|
387
|
+
)
|
|
388
|
+
? "prior_writer"
|
|
389
|
+
: undefined;
|
|
381
390
|
return {
|
|
382
391
|
artifactId: this.artifactId,
|
|
383
392
|
modality: this.modality,
|
|
@@ -386,7 +395,8 @@ class EditableArtifactSyncControllerImpl implements EditableArtifactSyncControll
|
|
|
386
395
|
headSequence: this.headSequence,
|
|
387
396
|
writable: this.writable,
|
|
388
397
|
pendingTransactions: this.pending.size,
|
|
389
|
-
blockedPending
|
|
398
|
+
blockedPending,
|
|
399
|
+
authoringBlockedReason,
|
|
390
400
|
queuedMessages: this.liveQueue.length,
|
|
391
401
|
reconnectAttempt: this.reconnectAttempt,
|
|
392
402
|
lastError: this.lastError,
|
|
@@ -714,8 +724,15 @@ class EditableArtifactSyncControllerImpl implements EditableArtifactSyncControll
|
|
|
714
724
|
stored.snapshot.modality === "spreadsheet" ? stored.snapshot.causalFrontier : null;
|
|
715
725
|
let nativeRevision =
|
|
716
726
|
stored.snapshot.modality === "spreadsheet" ? null : stored.snapshot.nativeRevision;
|
|
727
|
+
const retainedAcceptances: {
|
|
728
|
+
transaction: EditableArtifactCommittedTransaction;
|
|
729
|
+
pending: Pick<
|
|
730
|
+
EditableArtifactPendingTransaction,
|
|
731
|
+
"clientTransactionId" | "requestHash" | "intentBytes"
|
|
732
|
+
>;
|
|
733
|
+
}[] = [];
|
|
717
734
|
for (const transaction of stored.tail) {
|
|
718
|
-
validateCommittedTransaction(
|
|
735
|
+
const embeddedPending = validateCommittedTransaction(
|
|
719
736
|
transaction,
|
|
720
737
|
this.artifactId,
|
|
721
738
|
this.modality,
|
|
@@ -728,6 +745,15 @@ class EditableArtifactSyncControllerImpl implements EditableArtifactSyncControll
|
|
|
728
745
|
requireStateHash(transaction.priorStateHash, stateHash, "retained transaction prior state");
|
|
729
746
|
const applied = await this.kernel.applyRecovered(transaction);
|
|
730
747
|
requireStateHash(applied.stateHash, transaction.stateHash, "retained transaction");
|
|
748
|
+
if (embeddedPending) {
|
|
749
|
+
const pending = this.pending.get(embeddedPending.clientTransactionId);
|
|
750
|
+
if (
|
|
751
|
+
pending?.requestHash === embeddedPending.requestHash &&
|
|
752
|
+
bytesEqual(pending.intentBytes, embeddedPending.intentBytes)
|
|
753
|
+
) {
|
|
754
|
+
retainedAcceptances.push({ transaction, pending: embeddedPending });
|
|
755
|
+
}
|
|
756
|
+
}
|
|
731
757
|
cursor = transaction.endSequence;
|
|
732
758
|
stateHash = transaction.stateHash;
|
|
733
759
|
if (transaction.modality === "spreadsheet") {
|
|
@@ -763,6 +789,14 @@ class EditableArtifactSyncControllerImpl implements EditableArtifactSyncControll
|
|
|
763
789
|
this.retainedTailTransactions = stored.tail.length;
|
|
764
790
|
this.cursor = cursor;
|
|
765
791
|
this.headSequence = cursor;
|
|
792
|
+
// Reload may interrupt between retaining a commit and deleting its WAL entry.
|
|
793
|
+
// Only settle exact embedded identities after the entire retained head verifies;
|
|
794
|
+
// otherwise speculative replay mistakes our own committed edit for a conflict.
|
|
795
|
+
// Callers restore the pending overlay after this confirmed projection is ready.
|
|
796
|
+
for (const { transaction, pending } of retainedAcceptances) {
|
|
797
|
+
this.recordAcceptedMappingIdentity(transaction.transactionId, pending);
|
|
798
|
+
await this.settlePending(transaction, true);
|
|
799
|
+
}
|
|
766
800
|
}
|
|
767
801
|
|
|
768
802
|
private async run(): Promise<void> {
|
|
@@ -99,6 +99,7 @@ export type {
|
|
|
99
99
|
EditablePresentationSlideCatalogProjection,
|
|
100
100
|
EditablePresentationSlideCatalogQuery,
|
|
101
101
|
EditableSpreadsheetCellValue,
|
|
102
|
+
EditableSpreadsheetDimensions,
|
|
102
103
|
EditableSpreadsheetFormulaError,
|
|
103
104
|
EditableSpreadsheetMetadataProjection,
|
|
104
105
|
EditableSpreadsheetMetadataQuery,
|
|
@@ -176,18 +176,28 @@ export type EditableSpreadsheetProjectedCell = Readonly<{
|
|
|
176
176
|
* Immutable projection of one exact speculative kernel revision. Cells are
|
|
177
177
|
* sparse, strictly row-major, unique, and all inside the requested rectangle.
|
|
178
178
|
*/
|
|
179
|
-
export type
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
rowCount: number;
|
|
187
|
-
columnCount: number;
|
|
188
|
-
cells: readonly EditableSpreadsheetProjectedCell[];
|
|
179
|
+
export type EditableSpreadsheetDimensions = Readonly<{
|
|
180
|
+
/** Integer CSS pixels. Present when the kernel models dimensions. */
|
|
181
|
+
defaultRowHeight?: number;
|
|
182
|
+
defaultColumnWidth?: number;
|
|
183
|
+
/** Sorted sparse absolute zero-based indices and non-default pixel sizes. */
|
|
184
|
+
rowHeights?: readonly (readonly [number, number])[];
|
|
185
|
+
columnWidths?: readonly (readonly [number, number])[];
|
|
189
186
|
}>;
|
|
190
187
|
|
|
188
|
+
export type EditableSpreadsheetViewportProjection = EditableSpreadsheetDimensions &
|
|
189
|
+
Readonly<{
|
|
190
|
+
revision: bigint;
|
|
191
|
+
sheetId: string;
|
|
192
|
+
/** Creation operation that pins the live CRDT generation, if collaborative. */
|
|
193
|
+
generationId: string | null;
|
|
194
|
+
startRow: number;
|
|
195
|
+
startColumn: number;
|
|
196
|
+
rowCount: number;
|
|
197
|
+
columnCount: number;
|
|
198
|
+
cells: readonly EditableSpreadsheetProjectedCell[];
|
|
199
|
+
}>;
|
|
200
|
+
|
|
191
201
|
export type EditableSpreadsheetUsedBounds = Readonly<{
|
|
192
202
|
startRow: number;
|
|
193
203
|
startColumn: number;
|
|
@@ -197,12 +207,13 @@ export type EditableSpreadsheetUsedBounds = Readonly<{
|
|
|
197
207
|
endColumn: number;
|
|
198
208
|
}>;
|
|
199
209
|
|
|
200
|
-
export type EditableSpreadsheetSheetMetadata =
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
210
|
+
export type EditableSpreadsheetSheetMetadata = EditableSpreadsheetDimensions &
|
|
211
|
+
Readonly<{
|
|
212
|
+
sheetId: string;
|
|
213
|
+
generationId: string | null;
|
|
214
|
+
name: string;
|
|
215
|
+
usedBounds: EditableSpreadsheetUsedBounds | null;
|
|
216
|
+
}>;
|
|
206
217
|
|
|
207
218
|
/**
|
|
208
219
|
* Bounded workbook catalog from the Worker-owned kernel. False feature flags
|
|
@@ -479,6 +490,8 @@ export type EditableArtifactSyncView = {
|
|
|
479
490
|
writable: boolean;
|
|
480
491
|
pendingTransactions: number;
|
|
481
492
|
blockedPending: readonly EditableArtifactBlockedPending[];
|
|
493
|
+
/** A command barrier independent of the artifact's edit permission. */
|
|
494
|
+
authoringBlockedReason?: "pending_conflict" | "prior_writer" | undefined;
|
|
482
495
|
queuedMessages: number;
|
|
483
496
|
reconnectAttempt: number;
|
|
484
497
|
lastError: Error | null;
|