@opengeni/contracts 3.1.0-canary.2 → 3.1.2
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/dist/agent-authored-durable-text.d.ts +9 -9
- package/dist/agent-config.d.ts +971 -0
- package/dist/agent-instruction-changes.d.ts +0 -2
- package/dist/allowance-refusal.d.ts +9 -0
- package/dist/allowance-refusal.js +50 -0
- package/dist/allowance-refusal.js.map +1 -0
- package/dist/analytics-consent-report.d.ts +19 -0
- package/dist/analytics-consent-report.js +10 -0
- package/dist/analytics-consent-report.js.map +1 -0
- package/dist/api-key-presets.d.ts +19 -0
- package/dist/artifact-catalog.d.ts +188 -0
- package/dist/artifacts.d.ts +86 -0
- package/dist/atlassian-native-retirement.d.ts +16 -0
- package/dist/atlassian-native-retirement.js +30 -0
- package/dist/atlassian-native-retirement.js.map +1 -0
- package/dist/atlassian.d.ts +1 -0
- package/dist/atlassian.js +34 -19
- package/dist/browser-storage.d.ts +5 -0
- package/dist/browser-storage.js +9 -0
- package/dist/browser-storage.js.map +1 -0
- package/dist/bundled-skills.d.ts +24 -1
- package/dist/canonical-human-identities.js +2 -1
- package/dist/chunk-2ZIHHL72.js +153 -0
- package/dist/chunk-2ZIHHL72.js.map +1 -0
- package/dist/{chunk-5LYFSZ7O.js → chunk-352X6ENP.js} +31 -31
- package/dist/chunk-4JGHSSB7.js +11 -0
- package/dist/chunk-4JGHSSB7.js.map +1 -0
- package/dist/chunk-4QO6GJUX.js +85 -0
- package/dist/chunk-4QO6GJUX.js.map +1 -0
- package/dist/chunk-4VDMHLLL.js +49 -0
- package/dist/chunk-4VDMHLLL.js.map +1 -0
- package/dist/chunk-56SNIMDO.js +9 -0
- package/dist/chunk-56SNIMDO.js.map +1 -0
- package/dist/chunk-6C2HKFTU.js +207 -0
- package/dist/chunk-6C2HKFTU.js.map +1 -0
- package/dist/chunk-6IXO76Z6.js +72 -0
- package/dist/chunk-6IXO76Z6.js.map +1 -0
- package/dist/chunk-7272KVWZ.js +60 -0
- package/dist/chunk-7272KVWZ.js.map +1 -0
- package/dist/{chunk-7ABONTXE.js → chunk-E3GGUBHS.js} +49 -5
- package/dist/chunk-E3GGUBHS.js.map +1 -0
- package/dist/chunk-EFZYKUE2.js +767 -0
- package/dist/chunk-EFZYKUE2.js.map +1 -0
- package/dist/chunk-EKWNTOG3.js +154 -0
- package/dist/chunk-EKWNTOG3.js.map +1 -0
- package/dist/chunk-HABQ7ADB.js +234 -0
- package/dist/chunk-HABQ7ADB.js.map +1 -0
- package/dist/chunk-HRRU4QPI.js +91 -0
- package/dist/chunk-HRRU4QPI.js.map +1 -0
- package/dist/{chunk-3SIZGL3O.js → chunk-IK36LXKC.js} +18 -2
- package/dist/chunk-IK36LXKC.js.map +1 -0
- package/dist/{chunk-TXTQIYCV.js → chunk-ILJ72KPO.js} +56 -3
- package/dist/chunk-ILJ72KPO.js.map +1 -0
- package/dist/chunk-J4HQ3UKY.js +93 -0
- package/dist/chunk-J4HQ3UKY.js.map +1 -0
- package/dist/chunk-KHHZTBP7.js +11 -0
- package/dist/chunk-KHHZTBP7.js.map +1 -0
- package/dist/{chunk-WYBDERIY.js → chunk-LZ2LAHIX.js} +47 -41
- package/dist/chunk-LZ2LAHIX.js.map +1 -0
- package/dist/chunk-NDZHPTCL.js +400 -0
- package/dist/chunk-NDZHPTCL.js.map +1 -0
- package/dist/chunk-OF6OKOBF.js +54793 -0
- package/dist/chunk-OF6OKOBF.js.map +1 -0
- package/dist/chunk-OL23ARTF.js +94 -0
- package/dist/chunk-OL23ARTF.js.map +1 -0
- package/dist/chunk-PUIUXIOL.js +189 -0
- package/dist/chunk-PUIUXIOL.js.map +1 -0
- package/dist/{chunk-Y3KNXVTD.js → chunk-RMWXDZEO.js} +128 -21
- package/dist/chunk-RMWXDZEO.js.map +1 -0
- package/dist/{chunk-MRWYRAS5.js → chunk-SHO4YO4B.js} +27 -35
- package/dist/chunk-SHO4YO4B.js.map +1 -0
- package/dist/chunk-SWRN2DJ3.js +153 -0
- package/dist/chunk-SWRN2DJ3.js.map +1 -0
- package/dist/chunk-TCXCRBPF.js +267 -0
- package/dist/chunk-TCXCRBPF.js.map +1 -0
- package/dist/chunk-TLU3UEMD.js +324 -0
- package/dist/chunk-TLU3UEMD.js.map +1 -0
- package/dist/chunk-TSWWZMUS.js +186 -0
- package/dist/chunk-TSWWZMUS.js.map +1 -0
- package/dist/{chunk-PX3VCKAU.js → chunk-WVCFSOUZ.js} +1 -1
- package/dist/{chunk-PX3VCKAU.js.map → chunk-WVCFSOUZ.js.map} +1 -1
- package/dist/chunk-XDLAGX66.js +127 -0
- package/dist/chunk-XDLAGX66.js.map +1 -0
- package/dist/chunk-YKZ4WU4P.js +33 -0
- package/dist/chunk-YKZ4WU4P.js.map +1 -0
- package/dist/{chunk-O5LEQHDM.js → chunk-Z7WEVGCL.js} +3 -3
- package/dist/{chunk-YBW5JSA3.js → chunk-ZDCRWCGZ.js} +119 -101
- package/dist/chunk-ZDCRWCGZ.js.map +1 -0
- package/dist/claude-provider-account-authority.d.ts +18 -0
- package/dist/claude-subscription-oauth.d.ts +42 -0
- package/dist/claude-subscription-usage.d.ts +159 -0
- package/dist/client-error-report.d.ts +158 -0
- package/dist/client-error-report.js +164 -0
- package/dist/client-error-report.js.map +1 -0
- package/dist/code-search.d.ts +52 -0
- package/dist/code-search.js +40 -0
- package/dist/code-search.js.map +1 -0
- package/dist/codex-provider-account-authority.js +20 -12
- package/dist/codex-provider-account-authority.js.map +1 -1
- package/dist/company-profile.d.ts +144 -6
- package/dist/connect.d.ts +37 -0
- package/dist/connect.js +216 -159
- package/dist/connect.js.map +1 -1
- package/dist/connection-account-label.d.ts +2 -0
- package/dist/connection-account-label.js +35 -0
- package/dist/connection-account-label.js.map +1 -0
- package/dist/connection-authority.d.ts +9 -317
- package/dist/connection-authority.js +37 -42
- package/dist/connector-attachments.js +2 -1
- package/dist/connector-destinations.js +2 -1
- package/dist/connector-tool-permissions.d.ts +137 -0
- package/dist/cua-desktop-tools.d.ts +17 -0
- package/dist/define-schema.d.ts +8 -0
- package/dist/direct-model-provider.d.ts +36 -0
- package/dist/editable-artifact-codec-registry.js +5 -5
- package/dist/editable-artifact-committed-transaction.js +3 -2
- package/dist/editable-artifact-live.js +5 -5
- package/dist/editable-artifact-serialized-commit.js +6 -6
- package/dist/editable-artifact-versions.d.ts +7 -1
- package/dist/editable-artifact-versions.js +1 -1
- package/dist/editable-artifacts.js +62 -56
- package/dist/event-preview.d.ts +22 -0
- package/dist/external-identities.d.ts +138 -0
- package/dist/external-identities.js +9 -4
- package/dist/first-party-tool-authorization.d.ts +815 -0
- package/dist/github-repository-contracts.js +60 -43
- package/dist/github-repository-contracts.js.map +1 -1
- package/dist/google-drive.d.ts +2 -1
- package/dist/google-drive.js +305 -238
- package/dist/google-drive.js.map +1 -1
- package/dist/host-mcp-bindings.d.ts +5 -0
- package/dist/host-mcp-bindings.js +233 -170
- package/dist/host-mcp-bindings.js.map +1 -1
- package/dist/image-generation.d.ts +1 -0
- package/dist/index.d.ts +16761 -5946
- package/dist/index.js +1973 -260
- package/dist/insights-usage.d.ts +877 -0
- package/dist/insights-usage.js +559 -0
- package/dist/insights-usage.js.map +1 -0
- package/dist/interaction.d.ts +1176 -829
- package/dist/knowledge-entries.d.ts +81 -2
- package/dist/knowledge-preparation.d.ts +239 -0
- package/dist/managed-auth-session-sets.d.ts +7 -0
- package/dist/managed-auth-session-sets.js +198 -132
- package/dist/managed-auth-session-sets.js.map +1 -1
- package/dist/managed-sign-in-methods.d.ts +56 -0
- package/dist/managed-sign-in-methods.js +64 -0
- package/dist/managed-sign-in-methods.js.map +1 -0
- package/dist/mcp-catalog-limits.d.ts +2 -0
- package/dist/mcp-oauth.d.ts +2 -2
- package/dist/mcp-structured-content.d.ts +25 -0
- package/dist/modal-native-proof-v2.d.ts +587 -0
- package/dist/modal-native-proof-v2.js +38 -0
- package/dist/modal-native-proof-v2.js.map +1 -0
- package/dist/model-account-choice.d.ts +235 -0
- package/dist/model-account-settings.d.ts +422 -0
- package/dist/model-availability.d.ts +15 -0
- package/dist/model-connection-access.d.ts +13 -0
- package/dist/model-context-inspector.d.ts +98 -0
- package/dist/model-display.d.ts +43 -0
- package/dist/model-display.js +17 -0
- package/dist/model-display.js.map +1 -0
- package/dist/model-picker-order.d.ts +3 -1
- package/dist/model-picker-order.js +3 -0
- package/dist/model-picker-order.js.map +1 -1
- package/dist/organization-access.d.ts +412 -0
- package/dist/organization-access.js +39 -0
- package/dist/organization-access.js.map +1 -0
- package/dist/organization-integration-policy.d.ts +27 -0
- package/dist/organization-membership-lifecycle.d.ts +38 -0
- package/dist/organization-model-usage.d.ts +146 -0
- package/dist/organization-model-usage.js +78 -0
- package/dist/organization-model-usage.js.map +1 -0
- package/dist/organization-recovery.js +2 -1
- package/dist/organization-usage.d.ts +138 -0
- package/dist/permissions.d.ts +18 -0
- package/dist/personal-github.d.ts +1 -0
- package/dist/personal-github.js +199 -144
- package/dist/personal-github.js.map +1 -1
- package/dist/prepared-mcp-setup.d.ts +54 -0
- package/dist/prepared-mcp-setup.js +12 -0
- package/dist/prepared-mcp-setup.js.map +1 -0
- package/dist/product-analytics.d.ts +116 -0
- package/dist/product-lifecycle-facts.d.ts +73 -0
- package/dist/remember.d.ts +98 -6
- package/dist/retained-output.d.ts +8 -0
- package/dist/sandbox-file-artifacts.d.ts +1 -0
- package/dist/sandbox-provider-command.d.ts +91 -1
- package/dist/sandbox-recovery.d.ts +146 -0
- package/dist/secret-generator.d.ts +44 -0
- package/dist/secret-references.d.ts +90 -0
- package/dist/secret-resolution.d.ts +111 -0
- package/dist/secret-totp.d.ts +41 -0
- package/dist/session-final-reply.d.ts +6 -0
- package/dist/session-final-reply.js +9 -0
- package/dist/session-final-reply.js.map +1 -0
- package/dist/session-goal-reports.d.ts +21 -0
- package/dist/session-history-import.d.ts +1272 -0
- package/dist/session-list-entries.d.ts +4 -0
- package/dist/session-list-entries.js +56 -0
- package/dist/session-list-entries.js.map +1 -0
- package/dist/session-mcp-projections.d.ts +6 -0
- package/dist/session-mcp-tool-permissions.d.ts +62 -0
- package/dist/session-message-search.d.ts +68 -0
- package/dist/session-target.d.ts +18 -0
- package/dist/session-titles.d.ts +8 -0
- package/dist/session-titles.js +5 -1
- package/dist/session-usage-limit-refusal.d.ts +34 -0
- package/dist/session-usage-limit-refusal.js +15 -0
- package/dist/session-usage-limit-refusal.js.map +1 -0
- package/dist/session-usage-limits.d.ts +127 -0
- package/dist/session-usage-limits.js +41 -0
- package/dist/session-usage-limits.js.map +1 -0
- package/dist/signup-attribution.d.ts +39 -0
- package/dist/site-data.d.ts +286 -0
- package/dist/site-operations.d.ts +39 -0
- package/dist/site-publishing.d.ts +778 -0
- package/dist/site-session-http.d.ts +89 -4
- package/dist/site-session-http.js +25 -1
- package/dist/site-sql.d.ts +421 -0
- package/dist/skill-catalog-context.d.ts +7 -0
- package/dist/skill-files.d.ts +1 -1
- package/dist/skill-use.d.ts +61 -0
- package/dist/skills.d.ts +15 -0
- package/dist/slack-bot-scopes.d.ts +17 -12
- package/dist/slack-bot-scopes.js +10 -3
- package/dist/slack-rest-mcp.d.ts +36 -0
- package/dist/slack-rest-mcp.js +25 -0
- package/dist/slack-rest-mcp.js.map +1 -0
- package/dist/spreadsheet-artifact-commands.d.ts +14 -1
- package/dist/spreadsheet-artifact-commands.js +8 -2
- package/dist/spreadsheet-artifact-query.d.ts +13 -6
- package/dist/spreadsheet-artifact-query.js +3 -3
- package/dist/subscription-account-actions.d.ts +64 -0
- package/dist/subscription-account-pools.d.ts +292 -0
- package/dist/subscription-personal-authority-v2.d.ts +28 -0
- package/dist/subscription-personal-authority-v2.js +12 -0
- package/dist/subscription-personal-authority-v2.js.map +1 -0
- package/dist/tool-action-review.d.ts +132 -0
- package/dist/tool-catalog.d.ts +408 -0
- package/dist/tool-policy.d.ts +5 -0
- package/dist/tool-review-presentation.d.ts +12 -0
- package/dist/tool-review-presentation.js +17 -0
- package/dist/tool-review-presentation.js.map +1 -0
- package/dist/transcription-recordings.d.ts +21 -0
- package/dist/turn-serving-policy.d.ts +221 -0
- package/dist/usage-allowances.d.ts +314 -0
- package/dist/usage-allowances.js +52 -0
- package/dist/usage-allowances.js.map +1 -0
- package/dist/vaults.d.ts +1286 -0
- package/dist/video-generation.d.ts +3 -0
- package/dist/video-generation.js +2 -1
- package/dist/workspace-integration-wire.d.ts +36 -0
- package/dist/workspace-integration-wire.js +23 -0
- package/dist/workspace-integration-wire.js.map +1 -0
- package/dist/workspace-integrations.d.ts +1028 -0
- package/dist/xai-provider-account-authority.js +2 -1
- package/package.json +93 -5
- package/src/agent-authored-durable-text.ts +14 -11
- package/src/agent-config.ts +1698 -0
- package/src/agent-instruction-changes.ts +91 -74
- package/src/agent-learning.ts +94 -67
- package/src/agent-topology.ts +57 -52
- package/src/allowance-refusal.ts +81 -0
- package/src/analytics-consent-report.ts +20 -0
- package/src/api-key-presets.ts +28 -0
- package/src/artifact-catalog.ts +82 -0
- package/src/artifacts.ts +299 -227
- package/src/atlassian-native-retirement.ts +33 -0
- package/src/atlassian.ts +135 -108
- package/src/browser-storage.ts +10 -0
- package/src/bundled-skills.ts +60 -17
- package/src/canonical-human-identities.ts +60 -58
- package/src/claude-provider-account-authority.ts +12 -0
- package/src/claude-subscription-oauth.ts +73 -0
- package/src/claude-subscription-usage.ts +68 -0
- package/src/client-error-report.ts +343 -0
- package/src/code-search.ts +105 -0
- package/src/codex-provider-account-authority.ts +21 -16
- package/src/company-brain-governed-writes.ts +255 -233
- package/src/company-brain.ts +164 -153
- package/src/company-profile.ts +365 -292
- package/src/connect.ts +212 -173
- package/src/connection-account-label.ts +46 -0
- package/src/connection-authority.ts +183 -364
- package/src/connector-attachments.ts +137 -122
- package/src/connector-destinations.ts +46 -42
- package/src/connector-tool-permissions.ts +117 -0
- package/src/cua-desktop-tools.gen.json +6512 -0
- package/src/cua-desktop-tools.linux.gen.json +6600 -0
- package/src/cua-desktop-tools.ts +36 -0
- package/src/cua-desktop-tools.windows.gen.json +6353 -0
- package/src/define-schema.ts +10 -0
- package/src/direct-model-provider.ts +108 -0
- package/src/editable-artifact-committed-transaction.ts +17 -0
- package/src/editable-artifact-versions.ts +7 -1
- package/src/event-preview.ts +53 -3
- package/src/external-identities.ts +249 -176
- package/src/feedback.ts +43 -30
- package/src/first-party-tool-authorization.ts +356 -0
- package/src/github-repository-contracts.ts +78 -64
- package/src/google-drive.ts +285 -234
- package/src/governed-learning-activation.ts +152 -131
- package/src/governed-learning-evaluator.ts +140 -133
- package/src/host-mcp-bindings.ts +252 -198
- package/src/image-generation.ts +104 -95
- package/src/index.ts +13235 -8687
- package/src/insights-usage.ts +727 -0
- package/src/interaction.ts +3070 -2326
- package/src/knowledge-entries.ts +361 -276
- package/src/knowledge-preparation.ts +57 -0
- package/src/knowledge.ts +246 -213
- package/src/managed-auth-session-sets.ts +220 -144
- package/src/managed-sign-in-methods.ts +52 -0
- package/src/mcp-catalog-limits.ts +2 -0
- package/src/mcp-oauth.ts +43 -34
- package/src/mcp-receipts.ts +192 -192
- package/src/mcp-structured-content.ts +81 -0
- package/src/memory-slack-delivery.ts +171 -142
- package/src/modal-native-proof-v2.ts +429 -0
- package/src/model-account-choice.ts +177 -0
- package/src/model-account-settings.ts +210 -0
- package/src/model-availability.ts +22 -0
- package/src/model-connection-access.ts +61 -14
- package/src/model-context-inspector.ts +133 -99
- package/src/model-display.ts +221 -0
- package/src/model-picker-order.ts +12 -1
- package/src/organization-access.ts +217 -0
- package/src/organization-integration-policy.ts +63 -0
- package/src/organization-membership-lifecycle.ts +528 -382
- package/src/organization-model-usage.ts +81 -0
- package/src/organization-recovery.ts +147 -135
- package/src/organization-usage.ts +94 -0
- package/src/permissions.ts +88 -52
- package/src/personal-github.ts +210 -171
- package/src/preference-registry.ts +314 -258
- package/src/prepared-mcp-setup.ts +189 -0
- package/src/product-analytics.ts +261 -0
- package/src/product-lifecycle-facts.ts +122 -0
- package/src/remember.ts +181 -167
- package/src/retained-output.ts +194 -165
- package/src/sandbox-file-artifacts.ts +60 -47
- package/src/sandbox-provider-command.ts +88 -20
- package/src/sandbox-recovery.ts +129 -0
- package/src/scoped-knowledge.ts +61 -43
- package/src/secret-generator.ts +155 -0
- package/src/secret-references.ts +414 -0
- package/src/secret-resolution.ts +274 -0
- package/src/secret-totp.ts +188 -0
- package/src/session-final-reply.ts +16 -0
- package/src/session-goal-reports.ts +64 -0
- package/src/session-history-import.ts +177 -0
- package/src/session-list-entries.ts +96 -0
- package/src/session-mcp-projections.ts +11 -0
- package/src/session-mcp-tool-permissions.ts +108 -0
- package/src/session-message-search.ts +61 -0
- package/src/session-target.ts +57 -0
- package/src/session-titles.ts +80 -10
- package/src/session-topology-primitives.ts +19 -12
- package/src/session-usage-limit-refusal.ts +101 -0
- package/src/session-usage-limits.ts +171 -0
- package/src/signup-attribution.ts +86 -0
- package/src/site-data.ts +339 -0
- package/src/site-operations.ts +154 -0
- package/src/site-publishing.ts +876 -0
- package/src/site-session-http.ts +294 -16
- package/src/site-sql.ts +1123 -0
- package/src/skill-catalog-context.ts +50 -0
- package/src/skill-files.ts +3 -3
- package/src/skill-use.ts +80 -0
- package/src/skills.ts +82 -54
- package/src/slack-bot-scopes.ts +31 -39
- package/src/slack-rest-mcp.ts +222 -0
- package/src/slack-task-policy.ts +96 -73
- package/src/spreadsheet-artifact-commands.ts +73 -2
- package/src/spreadsheet-artifact-query.ts +187 -39
- package/src/subscription-account-actions.ts +84 -0
- package/src/subscription-account-pools.ts +53 -0
- package/src/subscription-personal-authority-v2.ts +66 -0
- package/src/task-notes.ts +55 -51
- package/src/tool-action-review.ts +258 -0
- package/src/tool-catalog.ts +609 -372
- package/src/tool-policy.ts +82 -0
- package/src/tool-result-spill.ts +12 -9
- package/src/tool-review-presentation.ts +385 -0
- package/src/transcription-recordings.ts +145 -131
- package/src/turn-serving-policy.ts +166 -0
- package/src/usage-allowances.ts +248 -0
- package/src/vaults.ts +850 -0
- package/src/video-generation.ts +385 -360
- package/src/work-claims.ts +173 -149
- package/src/workspace-instruction-policies.ts +349 -276
- package/src/workspace-integration-wire.ts +101 -0
- package/src/workspace-integrations.ts +724 -0
- package/src/workspace-learning-administration.ts +57 -44
- package/src/workspace-learning-policy.ts +127 -96
- package/src/workspace-state.ts +250 -220
- package/src/xai-provider-account-authority.ts +22 -17
- package/dist/chunk-2AC63F4S.js +0 -171
- package/dist/chunk-2AC63F4S.js.map +0 -1
- package/dist/chunk-3SIZGL3O.js.map +0 -1
- package/dist/chunk-7ABONTXE.js.map +0 -1
- package/dist/chunk-BCS7WHCK.js +0 -139
- package/dist/chunk-BCS7WHCK.js.map +0 -1
- package/dist/chunk-GRG7PHWQ.js +0 -25
- package/dist/chunk-GRG7PHWQ.js.map +0 -1
- package/dist/chunk-JUFK3T4Q.js +0 -80
- package/dist/chunk-JUFK3T4Q.js.map +0 -1
- package/dist/chunk-M5ZGRVIQ.js +0 -719
- package/dist/chunk-M5ZGRVIQ.js.map +0 -1
- package/dist/chunk-MRWYRAS5.js.map +0 -1
- package/dist/chunk-OVFORMPW.js +0 -348
- package/dist/chunk-OVFORMPW.js.map +0 -1
- package/dist/chunk-P3HLDT77.js +0 -59
- package/dist/chunk-P3HLDT77.js.map +0 -1
- package/dist/chunk-QQUJ6NPW.js +0 -23093
- package/dist/chunk-QQUJ6NPW.js.map +0 -1
- package/dist/chunk-TXTQIYCV.js.map +0 -1
- package/dist/chunk-WYBDERIY.js.map +0 -1
- package/dist/chunk-Y3KNXVTD.js.map +0 -1
- package/dist/chunk-YBW5JSA3.js.map +0 -1
- package/dist/chunk-YRXAWWCU.js +0 -45
- package/dist/chunk-YRXAWWCU.js.map +0 -1
- package/dist/host-mcp-resolvers.d.ts +0 -32
- package/dist/host-mcp-resolvers.js +0 -34
- package/dist/host-mcp-resolvers.js.map +0 -1
- package/src/host-mcp-resolvers.ts +0 -50
- /package/dist/{chunk-5LYFSZ7O.js.map → chunk-352X6ENP.js.map} +0 -0
- /package/dist/{chunk-O5LEQHDM.js.map → chunk-Z7WEVGCL.js.map} +0 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/** The catalog and OAuth identity stay stable while calls use the ordinary Web API. */
|
|
2
|
+
export const OFFICIAL_SLACK_MCP_URL = "https://mcp.slack.com/mcp";
|
|
3
|
+
export const SLACK_REST_API_BASE = "https://slack.com/api/";
|
|
4
|
+
/** Private Slack file bytes are served only from this origin and path. */
|
|
5
|
+
export const SLACK_PRIVATE_FILE_ORIGIN = "https://files.slack.com";
|
|
6
|
+
export const SLACK_PRIVATE_FILE_PATH_PREFIX = "/files-pri/";
|
|
7
|
+
|
|
8
|
+
/** A private Slack file download URL that may carry a Slack user token. */
|
|
9
|
+
export function isSlackPrivateFileUrl(value: string | URL): boolean {
|
|
10
|
+
try {
|
|
11
|
+
const url = new URL(value);
|
|
12
|
+
return (
|
|
13
|
+
url.origin === SLACK_PRIVATE_FILE_ORIGIN &&
|
|
14
|
+
!url.username &&
|
|
15
|
+
!url.password &&
|
|
16
|
+
!url.hash &&
|
|
17
|
+
url.pathname.startsWith(SLACK_PRIVATE_FILE_PATH_PREFIX) &&
|
|
18
|
+
!url.pathname.split("/").some((segment) => segment === "." || segment === "..")
|
|
19
|
+
);
|
|
20
|
+
} catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const OPENGENI_SLACK_REST_USER_SCOPES = [
|
|
26
|
+
"channels:read",
|
|
27
|
+
"groups:read",
|
|
28
|
+
"im:read",
|
|
29
|
+
"mpim:read",
|
|
30
|
+
"channels:history",
|
|
31
|
+
"groups:history",
|
|
32
|
+
"im:history",
|
|
33
|
+
"mpim:history",
|
|
34
|
+
"users:read",
|
|
35
|
+
"files:read",
|
|
36
|
+
"im:write",
|
|
37
|
+
"chat:write",
|
|
38
|
+
] as const;
|
|
39
|
+
|
|
40
|
+
/** Slack returns comma-delimited scopes, including in existing saved grants. */
|
|
41
|
+
export function normalizeSlackScopes(
|
|
42
|
+
scopes: readonly string[] | string | undefined | null,
|
|
43
|
+
): string[] {
|
|
44
|
+
return [
|
|
45
|
+
...new Set(
|
|
46
|
+
(typeof scopes === "string" ? [scopes] : (scopes ?? []))
|
|
47
|
+
.flatMap((entry) => entry.split(/[\s,]+/u))
|
|
48
|
+
.filter(Boolean),
|
|
49
|
+
),
|
|
50
|
+
].sort();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export type SlackRestMcpTool = {
|
|
54
|
+
name: string;
|
|
55
|
+
description: string;
|
|
56
|
+
inputSchema: {
|
|
57
|
+
type: "object";
|
|
58
|
+
properties: Record<string, unknown>;
|
|
59
|
+
required: string[];
|
|
60
|
+
additionalProperties: false;
|
|
61
|
+
};
|
|
62
|
+
annotations: {
|
|
63
|
+
readOnlyHint: boolean;
|
|
64
|
+
destructiveHint: false;
|
|
65
|
+
idempotentHint: boolean;
|
|
66
|
+
openWorldHint: true;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const conversationScopes = ["channels:read", "groups:read", "im:read", "mpim:read"];
|
|
71
|
+
const historyScopes = ["channels:history", "groups:history", "im:history", "mpim:history"];
|
|
72
|
+
const channel = { type: "string", description: "Slack conversation ID, such as C123 or D123." };
|
|
73
|
+
const cursor = { type: "string", maxLength: 4096, description: "Cursor from the previous page." };
|
|
74
|
+
const directoryPage = { type: "integer", minimum: 1, maximum: 100, default: 100 };
|
|
75
|
+
const historyPage = { type: "integer", minimum: 1, maximum: 15, default: 15 };
|
|
76
|
+
const timestamp = { type: "string", pattern: "^[0-9]+\\.[0-9]+$" };
|
|
77
|
+
|
|
78
|
+
function tool(
|
|
79
|
+
name: string,
|
|
80
|
+
description: string,
|
|
81
|
+
properties: Record<string, unknown>,
|
|
82
|
+
required: string[] = [],
|
|
83
|
+
mutation = false,
|
|
84
|
+
): SlackRestMcpTool {
|
|
85
|
+
return {
|
|
86
|
+
name,
|
|
87
|
+
description,
|
|
88
|
+
inputSchema: { type: "object", properties, required, additionalProperties: false },
|
|
89
|
+
annotations: {
|
|
90
|
+
readOnlyHint: !mutation,
|
|
91
|
+
destructiveHint: false,
|
|
92
|
+
idempotentHint: !mutation,
|
|
93
|
+
openWorldHint: true,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Static reviewed pilot surface. Each call reads only one explicitly requested page. */
|
|
99
|
+
export const SLACK_REST_MCP_TOOLS: SlackRestMcpTool[] = [
|
|
100
|
+
tool(
|
|
101
|
+
"slack_list_channels",
|
|
102
|
+
"Lists one page of conversations visible to your connected Slack account. Conversation types without a granted read scope are omitted.",
|
|
103
|
+
{
|
|
104
|
+
types: {
|
|
105
|
+
type: "array",
|
|
106
|
+
items: { type: "string", enum: ["public_channel", "private_channel", "im", "mpim"] },
|
|
107
|
+
minItems: 1,
|
|
108
|
+
maxItems: 4,
|
|
109
|
+
},
|
|
110
|
+
cursor,
|
|
111
|
+
limit: directoryPage,
|
|
112
|
+
exclude_archived: { type: "boolean", default: true },
|
|
113
|
+
},
|
|
114
|
+
),
|
|
115
|
+
tool(
|
|
116
|
+
"slack_get_channel_info",
|
|
117
|
+
"Gets metadata for one conversation visible to your connected Slack account.",
|
|
118
|
+
{ channel },
|
|
119
|
+
["channel"],
|
|
120
|
+
),
|
|
121
|
+
tool(
|
|
122
|
+
"slack_list_channel_members",
|
|
123
|
+
"Lists one page of members in a visible channel or group conversation.",
|
|
124
|
+
{ channel, cursor, limit: directoryPage },
|
|
125
|
+
["channel"],
|
|
126
|
+
),
|
|
127
|
+
tool("slack_list_users", "Lists one page of users in the connected Slack workspace.", {
|
|
128
|
+
cursor,
|
|
129
|
+
limit: directoryPage,
|
|
130
|
+
}),
|
|
131
|
+
tool(
|
|
132
|
+
"slack_get_user_info",
|
|
133
|
+
"Gets a user's profile by their Slack user ID. Email is included only when Slack has granted that scope.",
|
|
134
|
+
{ user: { type: "string" } },
|
|
135
|
+
["user"],
|
|
136
|
+
),
|
|
137
|
+
tool(
|
|
138
|
+
"slack_read_channel",
|
|
139
|
+
"Reads one page of at most 15 messages from a selected conversation. Slack history limits are shared across the workspace. No automatic pagination or backfill.",
|
|
140
|
+
{
|
|
141
|
+
channel,
|
|
142
|
+
cursor,
|
|
143
|
+
limit: historyPage,
|
|
144
|
+
oldest: timestamp,
|
|
145
|
+
latest: timestamp,
|
|
146
|
+
inclusive: { type: "boolean", default: false },
|
|
147
|
+
},
|
|
148
|
+
["channel"],
|
|
149
|
+
),
|
|
150
|
+
tool(
|
|
151
|
+
"slack_read_thread",
|
|
152
|
+
"Reads one page of at most 15 messages in a selected thread. Slack thread limits are shared across the workspace. No automatic pagination or backfill.",
|
|
153
|
+
{
|
|
154
|
+
channel,
|
|
155
|
+
ts: { ...timestamp, description: "Thread root message timestamp." },
|
|
156
|
+
cursor,
|
|
157
|
+
limit: historyPage,
|
|
158
|
+
},
|
|
159
|
+
["channel", "ts"],
|
|
160
|
+
),
|
|
161
|
+
tool(
|
|
162
|
+
"slack_download_file",
|
|
163
|
+
"Downloads one file shared in Slack, such as a PDF or image, into your workspace like an attachment and returns its path. Use the file ID (F...) from a message's files.",
|
|
164
|
+
{ file: { type: "string", pattern: "^F[A-Z0-9]+$", description: "Slack file ID." } },
|
|
165
|
+
["file"],
|
|
166
|
+
),
|
|
167
|
+
tool(
|
|
168
|
+
"slack_open_dm",
|
|
169
|
+
"Opens or resumes a direct message with one Slack user as your connected account.",
|
|
170
|
+
{ user: { type: "string" } },
|
|
171
|
+
["user"],
|
|
172
|
+
true,
|
|
173
|
+
),
|
|
174
|
+
tool(
|
|
175
|
+
"slack_send_message",
|
|
176
|
+
"Sends a message as your connected Slack account. Supply thread_ts to reply in a thread. Review the recipient and text before approving. An uncertain submission is never automatically retried.",
|
|
177
|
+
{
|
|
178
|
+
channel,
|
|
179
|
+
text: { type: "string", minLength: 1, maxLength: 40000 },
|
|
180
|
+
thread_ts: { ...timestamp, description: "Optional thread root timestamp for a reply." },
|
|
181
|
+
unfurl_links: { type: "boolean", default: false },
|
|
182
|
+
unfurl_media: { type: "boolean", default: false },
|
|
183
|
+
},
|
|
184
|
+
["channel", "text"],
|
|
185
|
+
true,
|
|
186
|
+
),
|
|
187
|
+
];
|
|
188
|
+
|
|
189
|
+
const REQUIRED_ANY_SCOPES: Readonly<Record<string, readonly string[]>> = {
|
|
190
|
+
slack_list_channels: conversationScopes,
|
|
191
|
+
slack_get_channel_info: conversationScopes,
|
|
192
|
+
slack_list_channel_members: ["channels:read", "groups:read", "mpim:read"],
|
|
193
|
+
slack_list_users: ["users:read"],
|
|
194
|
+
slack_get_user_info: ["users:read"],
|
|
195
|
+
slack_read_channel: historyScopes,
|
|
196
|
+
slack_read_thread: historyScopes,
|
|
197
|
+
slack_download_file: ["files:read"],
|
|
198
|
+
slack_open_dm: ["im:write"],
|
|
199
|
+
slack_send_message: ["chat:write"],
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
export function slackRestMcpToolsForScopes(scopes: readonly string[] | string): SlackRestMcpTool[] {
|
|
203
|
+
const granted = new Set(normalizeSlackScopes(scopes));
|
|
204
|
+
return SLACK_REST_MCP_TOOLS.filter((entry) =>
|
|
205
|
+
REQUIRED_ANY_SCOPES[entry.name]?.some((scope) => granted.has(scope)),
|
|
206
|
+
).map((entry) => ({
|
|
207
|
+
...entry,
|
|
208
|
+
inputSchema: {
|
|
209
|
+
...entry.inputSchema,
|
|
210
|
+
required: [...entry.inputSchema.required],
|
|
211
|
+
properties: { ...entry.inputSchema.properties },
|
|
212
|
+
},
|
|
213
|
+
annotations: { ...entry.annotations },
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export const SLACK_CONVERSATION_READ_SCOPE_BY_TYPE = {
|
|
218
|
+
public_channel: "channels:read",
|
|
219
|
+
private_channel: "groups:read",
|
|
220
|
+
im: "im:read",
|
|
221
|
+
mpim: "mpim:read",
|
|
222
|
+
} as const;
|
package/src/slack-task-policy.ts
CHANGED
|
@@ -1,38 +1,47 @@
|
|
|
1
|
+
import { defineSchema } from "./define-schema";
|
|
1
2
|
import { z } from "zod";
|
|
2
3
|
|
|
3
4
|
export const SLACK_TASK_POLICY_ID_MAX_CHARS = 128;
|
|
4
5
|
export const SLACK_TASK_POLICY_REASON_MAX_CHARS = 4_096;
|
|
5
6
|
export const SLACK_TASK_POLICY_MAX_IDS = 256;
|
|
6
7
|
|
|
7
|
-
const SlackOpaqueId =
|
|
8
|
+
const SlackOpaqueId = /* @__PURE__ */ defineSchema(() =>
|
|
9
|
+
z.string().min(1).max(SLACK_TASK_POLICY_ID_MAX_CHARS),
|
|
10
|
+
);
|
|
8
11
|
|
|
9
|
-
export const SlackSharedConversationMode =
|
|
12
|
+
export const SlackSharedConversationMode = /* @__PURE__ */ defineSchema(() =>
|
|
13
|
+
z.enum(["deny", "private_handoff"]),
|
|
14
|
+
);
|
|
10
15
|
export type SlackSharedConversationMode = z.infer<typeof SlackSharedConversationMode>;
|
|
11
16
|
|
|
12
|
-
export const SlackResultPublicationMode =
|
|
17
|
+
export const SlackResultPublicationMode = /* @__PURE__ */ defineSchema(() =>
|
|
18
|
+
z.enum(["never", "approval_required", "allow"]),
|
|
19
|
+
);
|
|
13
20
|
export type SlackResultPublicationMode = z.infer<typeof SlackResultPublicationMode>;
|
|
14
21
|
|
|
15
22
|
function uniqueSortedIds(values: string[]): string[] {
|
|
16
23
|
return [...new Set(values)].sort();
|
|
17
24
|
}
|
|
18
25
|
|
|
19
|
-
export const SlackTaskPolicyContent =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
export const SlackTaskPolicyContent = /* @__PURE__ */ defineSchema(() =>
|
|
27
|
+
z
|
|
28
|
+
.object({
|
|
29
|
+
allowedTeamIds: z
|
|
30
|
+
.array(SlackOpaqueId)
|
|
31
|
+
.max(SLACK_TASK_POLICY_MAX_IDS)
|
|
32
|
+
.transform(uniqueSortedIds),
|
|
33
|
+
allowedConversationIds: z
|
|
34
|
+
.array(SlackOpaqueId)
|
|
35
|
+
.max(SLACK_TASK_POLICY_MAX_IDS)
|
|
36
|
+
.transform(uniqueSortedIds),
|
|
37
|
+
allowGuestInitiators: z.boolean(),
|
|
38
|
+
allowExternalInitiators: z.boolean(),
|
|
39
|
+
allowMpim: z.boolean(),
|
|
40
|
+
sharedConversationMode: SlackSharedConversationMode,
|
|
41
|
+
resultPublicationMode: SlackResultPublicationMode,
|
|
42
|
+
})
|
|
43
|
+
.strict(),
|
|
44
|
+
);
|
|
36
45
|
export type SlackTaskPolicyContent = z.infer<typeof SlackTaskPolicyContent>;
|
|
37
46
|
|
|
38
47
|
export const DEFAULT_SLACK_TASK_POLICY: SlackTaskPolicyContent = Object.freeze({
|
|
@@ -58,71 +67,85 @@ export function canonicalizeSlackTaskPolicy(value: SlackTaskPolicyContent): Slac
|
|
|
58
67
|
};
|
|
59
68
|
}
|
|
60
69
|
|
|
61
|
-
export const SlackTaskPolicyRevisionIdentity =
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
})
|
|
70
|
+
export const SlackTaskPolicyRevisionIdentity = /* @__PURE__ */ defineSchema(() =>
|
|
71
|
+
z.object({
|
|
72
|
+
id: z.string().uuid(),
|
|
73
|
+
revision: z.number().int().positive(),
|
|
74
|
+
policyHash: z.string().regex(/^[0-9a-f]{64}$/),
|
|
75
|
+
}),
|
|
76
|
+
);
|
|
66
77
|
export type SlackTaskPolicyRevisionIdentity = z.infer<typeof SlackTaskPolicyRevisionIdentity>;
|
|
67
78
|
|
|
68
|
-
export const SlackTaskPolicyRevision =
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
79
|
+
export const SlackTaskPolicyRevision = /* @__PURE__ */ defineSchema(() =>
|
|
80
|
+
SlackTaskPolicyRevisionIdentity.extend({
|
|
81
|
+
operationId: z.string().uuid(),
|
|
82
|
+
accountId: z.string().uuid(),
|
|
83
|
+
workspaceId: z.string().uuid(),
|
|
84
|
+
policy: SlackTaskPolicyContent,
|
|
85
|
+
supersedesRevisionId: z.string().uuid().nullable(),
|
|
86
|
+
createdBySubjectId: z.string().min(1).max(1_024),
|
|
87
|
+
createdAt: z.string().datetime(),
|
|
88
|
+
}),
|
|
89
|
+
);
|
|
77
90
|
export type SlackTaskPolicyRevision = z.infer<typeof SlackTaskPolicyRevision>;
|
|
78
91
|
|
|
79
|
-
export const SlackTaskPolicyHead =
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
92
|
+
export const SlackTaskPolicyHead = /* @__PURE__ */ defineSchema(() =>
|
|
93
|
+
z.object({
|
|
94
|
+
accountId: z.string().uuid(),
|
|
95
|
+
workspaceId: z.string().uuid(),
|
|
96
|
+
revisionId: z.string().uuid(),
|
|
97
|
+
revision: z.number().int().positive(),
|
|
98
|
+
policyHash: z.string().regex(/^[0-9a-f]{64}$/),
|
|
99
|
+
activationVersion: z.number().int().positive(),
|
|
100
|
+
activatedAt: z.string().datetime(),
|
|
101
|
+
}),
|
|
102
|
+
);
|
|
88
103
|
export type SlackTaskPolicyHead = z.infer<typeof SlackTaskPolicyHead>;
|
|
89
104
|
|
|
90
|
-
export const SlackTaskPolicyActivationEvent =
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
export const SlackTaskPolicyActivationEvent = /* @__PURE__ */ defineSchema(() =>
|
|
106
|
+
z.object({
|
|
107
|
+
id: z.string().uuid(),
|
|
108
|
+
operationId: z.string().uuid(),
|
|
109
|
+
accountId: z.string().uuid(),
|
|
110
|
+
workspaceId: z.string().uuid(),
|
|
111
|
+
activationVersion: z.number().int().positive(),
|
|
112
|
+
oldRevision: SlackTaskPolicyRevisionIdentity.nullable(),
|
|
113
|
+
newRevision: SlackTaskPolicyRevisionIdentity,
|
|
114
|
+
actorSubjectId: z.string().min(1).max(1_024),
|
|
115
|
+
reason: z.string().min(1).max(SLACK_TASK_POLICY_REASON_MAX_CHARS),
|
|
116
|
+
createdAt: z.string().datetime(),
|
|
117
|
+
}),
|
|
118
|
+
);
|
|
102
119
|
export type SlackTaskPolicyActivationEvent = z.infer<typeof SlackTaskPolicyActivationEvent>;
|
|
103
120
|
|
|
104
|
-
export const SlackTaskPolicyListResponse =
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
121
|
+
export const SlackTaskPolicyListResponse = /* @__PURE__ */ defineSchema(() =>
|
|
122
|
+
z.object({
|
|
123
|
+
current: SlackTaskPolicyHead.nullable(),
|
|
124
|
+
activeRevision: SlackTaskPolicyRevision.nullable(),
|
|
125
|
+
revisions: z.array(SlackTaskPolicyRevision),
|
|
126
|
+
activationEvents: z.array(SlackTaskPolicyActivationEvent),
|
|
127
|
+
}),
|
|
128
|
+
);
|
|
110
129
|
export type SlackTaskPolicyListResponse = z.infer<typeof SlackTaskPolicyListResponse>;
|
|
111
130
|
|
|
112
|
-
export const UpdateSlackTaskPolicyRequest =
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
131
|
+
export const UpdateSlackTaskPolicyRequest = /* @__PURE__ */ defineSchema(() =>
|
|
132
|
+
z.object({
|
|
133
|
+
operationId: z.string().uuid().optional(),
|
|
134
|
+
policy: SlackTaskPolicyContent,
|
|
135
|
+
expectedCurrentRevisionId: z.string().uuid().nullable(),
|
|
136
|
+
expectedActivationVersion: z.number().int().nonnegative(),
|
|
137
|
+
reason: z.string().trim().min(1).max(SLACK_TASK_POLICY_REASON_MAX_CHARS),
|
|
138
|
+
}),
|
|
139
|
+
);
|
|
119
140
|
export type UpdateSlackTaskPolicyRequest = z.infer<typeof UpdateSlackTaskPolicyRequest>;
|
|
120
141
|
|
|
121
|
-
export const SlackTaskPolicyMutationResponse =
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
142
|
+
export const SlackTaskPolicyMutationResponse = /* @__PURE__ */ defineSchema(() =>
|
|
143
|
+
z.object({
|
|
144
|
+
revision: SlackTaskPolicyRevision,
|
|
145
|
+
head: SlackTaskPolicyHead,
|
|
146
|
+
event: SlackTaskPolicyActivationEvent,
|
|
147
|
+
}),
|
|
148
|
+
);
|
|
126
149
|
export type SlackTaskPolicyMutationResponse = z.infer<typeof SlackTaskPolicyMutationResponse>;
|
|
127
150
|
|
|
128
151
|
export type SlackTaskPolicyConversationFacts = Readonly<{
|
|
@@ -17,6 +17,9 @@ export const SPREADSHEET_ARTIFACT_COMMAND_MAX_COMMANDS = 4_096;
|
|
|
17
17
|
export const SPREADSHEET_ARTIFACT_COMMAND_MAX_CELLS = 1_000_000;
|
|
18
18
|
export const SPREADSHEET_ARTIFACT_COMMAND_MAX_STRING_BYTES = 1 * 1024 * 1024;
|
|
19
19
|
export const SPREADSHEET_ARTIFACT_SHEET_NAME_MAX_UTF16_UNITS = 31;
|
|
20
|
+
export const SPREADSHEET_DEFAULT_ROW_HEIGHT = 24;
|
|
21
|
+
export const SPREADSHEET_DEFAULT_COLUMN_WIDTH = 96;
|
|
22
|
+
export const SPREADSHEET_MAX_DIMENSION_PIXELS = 4096;
|
|
20
23
|
|
|
21
24
|
const MAGIC = new TextEncoder().encode("OGASC002");
|
|
22
25
|
const HEADER_BYTES = 8 + 2 + 2 + 4 + 8;
|
|
@@ -121,7 +124,19 @@ export type SpreadsheetArtifactCommand =
|
|
|
121
124
|
| SpreadsheetRenameSheetCommand
|
|
122
125
|
| SpreadsheetDeleteSheetCommand
|
|
123
126
|
| SpreadsheetSetCellsCommand
|
|
124
|
-
| SpreadsheetClearRangeCommand
|
|
127
|
+
| SpreadsheetClearRangeCommand
|
|
128
|
+
| Readonly<{
|
|
129
|
+
kind: "row.height.set";
|
|
130
|
+
sheet: SpreadsheetSheetPrecondition;
|
|
131
|
+
row: number;
|
|
132
|
+
height: number | null;
|
|
133
|
+
}>
|
|
134
|
+
| Readonly<{
|
|
135
|
+
kind: "column.width.set";
|
|
136
|
+
sheet: SpreadsheetSheetPrecondition;
|
|
137
|
+
column: number;
|
|
138
|
+
width: number | null;
|
|
139
|
+
}>;
|
|
125
140
|
|
|
126
141
|
export type SpreadsheetArtifactCommandBatch = Readonly<{
|
|
127
142
|
version: typeof SPREADSHEET_ARTIFACT_COMMAND_VERSION;
|
|
@@ -331,6 +346,27 @@ function encodeCommand(
|
|
|
331
346
|
writer.u32(range.end.column);
|
|
332
347
|
break;
|
|
333
348
|
}
|
|
349
|
+
case "row.height.set":
|
|
350
|
+
case "column.width.set": {
|
|
351
|
+
const row = command.kind === "row.height.set";
|
|
352
|
+
const coordinate = row ? "row" : "column";
|
|
353
|
+
const size = row ? "height" : "width";
|
|
354
|
+
exactKeys(
|
|
355
|
+
command,
|
|
356
|
+
["kind", "sheet", coordinate, size].sort(),
|
|
357
|
+
`spreadsheet command ${index}`,
|
|
358
|
+
);
|
|
359
|
+
writer.u8(row ? 5 : 6);
|
|
360
|
+
encodeSheetPrecondition(writer, command.sheet, index, context);
|
|
361
|
+
writer.u32(nonnegativeU32(command[coordinate], coordinate));
|
|
362
|
+
writer.u32(
|
|
363
|
+
dimensionPixels(
|
|
364
|
+
command[size],
|
|
365
|
+
row ? SPREADSHEET_DEFAULT_ROW_HEIGHT : SPREADSHEET_DEFAULT_COLUMN_WIDTH,
|
|
366
|
+
),
|
|
367
|
+
);
|
|
368
|
+
break;
|
|
369
|
+
}
|
|
334
370
|
default:
|
|
335
371
|
throw commandError(index, "unknown command kind");
|
|
336
372
|
}
|
|
@@ -341,7 +377,8 @@ function decodeCommand(
|
|
|
341
377
|
index: number,
|
|
342
378
|
context: CommandContext,
|
|
343
379
|
): SpreadsheetArtifactCommand {
|
|
344
|
-
|
|
380
|
+
const tag = reader.u8();
|
|
381
|
+
switch (tag) {
|
|
345
382
|
case 0: {
|
|
346
383
|
const sheetId = reader.sheetObjectId();
|
|
347
384
|
const name = decodedSheetName(
|
|
@@ -400,11 +437,45 @@ function decodeCommand(
|
|
|
400
437
|
range: Object.freeze({ start, end }),
|
|
401
438
|
});
|
|
402
439
|
}
|
|
440
|
+
case 5:
|
|
441
|
+
case 6: {
|
|
442
|
+
const sheet = decodeSheetPrecondition(reader, index, context);
|
|
443
|
+
const coordinate = reader.u32();
|
|
444
|
+
const pixels = reader.u32();
|
|
445
|
+
const defaultPixels =
|
|
446
|
+
tag === 5 ? SPREADSHEET_DEFAULT_ROW_HEIGHT : SPREADSHEET_DEFAULT_COLUMN_WIDTH;
|
|
447
|
+
if (pixels === defaultPixels || pixels > SPREADSHEET_MAX_DIMENSION_PIXELS) {
|
|
448
|
+
throw commandError(index, "dimension pixels are noncanonical or outside bounds");
|
|
449
|
+
}
|
|
450
|
+
return tag === 5
|
|
451
|
+
? Object.freeze({ kind: "row.height.set", sheet, row: coordinate, height: pixels || null })
|
|
452
|
+
: Object.freeze({
|
|
453
|
+
kind: "column.width.set",
|
|
454
|
+
sheet,
|
|
455
|
+
column: coordinate,
|
|
456
|
+
width: pixels || null,
|
|
457
|
+
});
|
|
458
|
+
}
|
|
403
459
|
default:
|
|
404
460
|
throw commandError(index, "unknown binary command tag");
|
|
405
461
|
}
|
|
406
462
|
}
|
|
407
463
|
|
|
464
|
+
function dimensionPixels(value: unknown, defaultPixels: number): number {
|
|
465
|
+
if (value === null) return 0;
|
|
466
|
+
if (
|
|
467
|
+
typeof value !== "number" ||
|
|
468
|
+
!Number.isInteger(value) ||
|
|
469
|
+
value < 1 ||
|
|
470
|
+
value > SPREADSHEET_MAX_DIMENSION_PIXELS
|
|
471
|
+
) {
|
|
472
|
+
throw new RangeError(
|
|
473
|
+
"dimension pixels must be an integer from 1 through 4096, or null to reset",
|
|
474
|
+
);
|
|
475
|
+
}
|
|
476
|
+
return value === defaultPixels ? 0 : value;
|
|
477
|
+
}
|
|
478
|
+
|
|
408
479
|
function encodeSheetPrecondition(
|
|
409
480
|
writer: BinaryWriter,
|
|
410
481
|
value: unknown,
|