@neta-art/cohub 11.3.1 → 11.3.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.
Files changed (38) hide show
  1. package/dist/board/export/index.js +1 -1
  2. package/dist/board/export/scene.js +1 -1
  3. package/dist/board/model/authoring.js +1 -2
  4. package/dist/board/model/index.d.ts +2 -2
  5. package/dist/board/model/index.js +2 -2
  6. package/dist/board/model/items/create.js +6 -2
  7. package/dist/board/model/media.d.ts +5 -1
  8. package/dist/board/model/media.js +12 -1
  9. package/dist/board/render/card-tag.d.ts +3 -2
  10. package/dist/board/render/card-tag.js +31 -1
  11. package/dist/board/render/index.d.ts +2 -2
  12. package/dist/board/render/index.js +6 -6
  13. package/dist/board/render/media-interaction.js +12 -3
  14. package/dist/board/render/renderers/arrow-card-renderer.js +1 -1
  15. package/dist/board/render/renderers/audio-card-renderer.js +1 -1
  16. package/dist/board/render/renderers/board-renderer-registry.js +2 -0
  17. package/dist/board/render/renderers/frame-card-renderer.js +1 -1
  18. package/dist/board/render/renderers/media-key.d.ts +2 -1
  19. package/dist/board/render/renderers/media-key.js +21 -1
  20. package/dist/board/render/renderers/model-card-renderer.d.ts +10 -0
  21. package/dist/board/render/renderers/model-card-renderer.js +132 -0
  22. package/dist/board/render/renderers/shape-card-renderer.js +1 -1
  23. package/dist/board/render/renderers/task-card-renderer.js +1 -1
  24. package/dist/board/render/renderers/text-card-renderer.js +2 -2
  25. package/dist/board/stage/assets.d.ts +16 -3
  26. package/dist/board/stage/assets.js +98 -47
  27. package/dist/board/stage/index.d.ts +2 -2
  28. package/dist/board/stage/stage.js +3 -3
  29. package/dist/chunks/environment.d.ts +45 -3
  30. package/dist/index.d.ts +30 -1
  31. package/dist/index.js +236 -6
  32. package/dist/protocol/dist/board-patch.js +4 -4
  33. package/dist/protocol/dist/board-schema.js +13 -2
  34. package/dist/protocol/dist/board.js +2 -1
  35. package/dist/protocol/dist/fs/mime.d.ts +4 -0
  36. package/dist/protocol/dist/fs/mime.js +113 -0
  37. package/dist/protocol/dist/index.d.ts +2 -1
  38. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -74,12 +74,51 @@ const appAuthorizationResultSchema = z.discriminatedUnion("status", [
74
74
  ]);
75
75
  const GiB = 1073741824;
76
76
  /** Maximum size of a single uploaded file. */
77
- const UPLOAD_MAX_FILE_BYTES = 1 * GiB;
77
+ const UPLOAD_MAX_FILE_BYTES = 2 * GiB;
78
78
  /** Maximum combined size of one upload batch. */
79
79
  const UPLOAD_MAX_BATCH_BYTES = 2 * GiB;
80
80
  /** Maximum file count of one upload batch. */
81
81
  const UPLOAD_MAX_BATCH_FILES = 2e3;
82
82
  //#endregion
83
+ //#region ../protocol/dist/upload-errors.js
84
+ /**
85
+ * Structured upload rejection codes shared by the api routes and their clients.
86
+ * The api keeps human-readable English messages; clients map these codes to
87
+ * localized copy instead of matching on message text.
88
+ */
89
+ /** A single file exceeds `UPLOAD_MAX_FILE_BYTES`. */
90
+ const UPLOAD_ERROR_FILE_TOO_LARGE = "file_too_large";
91
+ /** One batch exceeds `UPLOAD_MAX_BATCH_BYTES`. */
92
+ const UPLOAD_ERROR_BATCH_TOO_LARGE = "upload_batch_too_large";
93
+ /** One batch exceeds `UPLOAD_MAX_BATCH_FILES`. */
94
+ const UPLOAD_ERROR_TOO_MANY_FILES = "upload_too_many_files";
95
+ /** The per-user upload quota is exhausted; the response carries `retryAfterSeconds`. */
96
+ const UPLOAD_ERROR_RATE_LIMITED = "upload_rate_limited";
97
+ /**
98
+ * Split entries into batches that respect the batch byte and file caps, keeping
99
+ * input order. A single entry larger than the batch byte cap still gets its own
100
+ * batch so the server can reject it with `file_too_large` rather than silently
101
+ * dropping it.
102
+ */
103
+ function batchUploadEntries(entries, sizeOf, options = {}) {
104
+ const maxBatchBytes = options.maxBatchBytes ?? 2147483648;
105
+ const maxBatchFiles = options.maxBatchFiles ?? 2e3;
106
+ const batches = [];
107
+ let batch = [];
108
+ let bytes = 0;
109
+ for (const entry of entries) {
110
+ if (batch.length > 0 && (batch.length >= maxBatchFiles || bytes + sizeOf(entry) > maxBatchBytes)) {
111
+ batches.push(batch);
112
+ batch = [];
113
+ bytes = 0;
114
+ }
115
+ batch.push(entry);
116
+ bytes += sizeOf(entry);
117
+ }
118
+ if (batch.length > 0) batches.push(batch);
119
+ return batches;
120
+ }
121
+ //#endregion
83
122
  //#region ../protocol/dist/board-url.js
84
123
  const BOARD_REMOTE_URL_MAX_LENGTH = 4096;
85
124
  function parseIpv4(host) {
@@ -693,6 +732,86 @@ const BoardPatchSchema = z.object({
693
732
  animations: z.record(BoardIdSchema, patchObject.and(z.object({ tracks: z.record(BoardKeySchema, patchObject.nullable()).optional() })).nullable()).optional()
694
733
  }).strict();
695
734
  //#endregion
735
+ //#region ../protocol/dist/board.js
736
+ const BOARD_EXTENSION = ".board";
737
+ const BOARD_MIME_TYPE = "application/json";
738
+ z.object({
739
+ kind: z.literal("cohub.board.manifest"),
740
+ version: z.literal(1),
741
+ boardId: z.string().uuid(),
742
+ title: z.string().min(1).max(255)
743
+ });
744
+ const BOARD_READ_SECTIONS = ["items", "animations"];
745
+ const rectSchema = z.object({
746
+ x: z.number().finite(),
747
+ y: z.number().finite(),
748
+ width: z.number().finite().positive(),
749
+ height: z.number().finite().positive()
750
+ }).strict();
751
+ z.object({
752
+ only: z.array(z.enum(BOARD_READ_SECTIONS)).optional(),
753
+ rect: rectSchema.optional(),
754
+ within: BoardIdSchema.optional(),
755
+ items: z.array(z.string().min(1)).max(5e4).optional(),
756
+ animations: z.array(z.string().min(1)).max(1e4).optional(),
757
+ limit: z.number().int().min(1).max(5e4).optional(),
758
+ cursor: z.string().min(1).optional()
759
+ }).strict().refine((read) => !(read.cursor && (read.rect || read.within)), {
760
+ path: ["cursor"],
761
+ message: "cursor pages by id, so it cannot be combined with rect or within"
762
+ });
763
+ z.object({
764
+ patch: BoardPatchSchema,
765
+ replace: z.boolean().default(false),
766
+ cascade: z.boolean().default(false),
767
+ dryRun: z.boolean().default(false),
768
+ baseVersion: z.number().int().nonnegative().optional(),
769
+ mutationId: z.string().min(1).max(160).optional(),
770
+ clientId: z.string().min(1).max(160).optional()
771
+ }).strict();
772
+ z.object({
773
+ path: z.string().min(1),
774
+ title: z.string().min(1).max(255).optional(),
775
+ document: BoardPatchSchema.optional(),
776
+ mutationId: z.string().max(160).optional()
777
+ }).strict();
778
+ z.object({
779
+ before: z.number().int().positive().optional(),
780
+ limit: z.number().int().min(1).max(500).default(200)
781
+ }).strict();
782
+ const commandId = z.string().min(1).max(160);
783
+ z.discriminatedUnion("type", [
784
+ z.object({
785
+ commandId,
786
+ type: z.literal("play"),
787
+ animationId: z.string().min(1),
788
+ position: z.number().finite().nonnegative().optional(),
789
+ timeScale: z.number().finite().positive().max(4).optional(),
790
+ seed: z.string().min(1).max(160).optional()
791
+ }).strict(),
792
+ z.object({
793
+ commandId,
794
+ type: z.literal("pause")
795
+ }).strict(),
796
+ z.object({
797
+ commandId,
798
+ type: z.literal("resume")
799
+ }).strict(),
800
+ z.object({
801
+ commandId,
802
+ type: z.literal("seek"),
803
+ position: z.number().finite().nonnegative()
804
+ }).strict(),
805
+ z.object({
806
+ commandId,
807
+ type: z.literal("next")
808
+ }).strict(),
809
+ z.object({
810
+ commandId,
811
+ type: z.literal("stop")
812
+ }).strict()
813
+ ]);
814
+ //#endregion
696
815
  //#region ../protocol/dist/board-json.js
697
816
  /** Structural equality for JSON-shaped semantic values. */
698
817
  function boardJsonEquals(a, b) {
@@ -1245,20 +1364,20 @@ const CAMERA_PROPERTIES = {
1245
1364
  y: z.number().finite(),
1246
1365
  width: z.number().finite().positive(),
1247
1366
  height: z.number().finite().positive()
1248
- }).strict()])
1367
+ }).strict()]).describe("Item id or world-space rect to fit with 48 px padding; holds until the next focus keyframe.")
1249
1368
  },
1250
1369
  zoom: {
1251
1370
  kind: "number",
1252
- schema: z.number().finite().positive(),
1371
+ schema: z.number().finite().positive().describe("Pixels per world unit; overrides the zoom computed by focus."),
1253
1372
  multiplicative: true
1254
1373
  },
1255
1374
  center: {
1256
1375
  kind: "vec2",
1257
- schema: BoardVec2Schema
1376
+ schema: BoardVec2Schema.describe("World-space viewport center; overrides focus positioning using the resolved zoom.")
1258
1377
  },
1259
1378
  shake: {
1260
1379
  kind: "number",
1261
- schema: z.number().finite().nonnegative()
1380
+ schema: z.number().finite().nonnegative().describe("Shake amplitude in screen pixels, applied after focus, zoom and center.")
1262
1381
  }
1263
1382
  };
1264
1383
  const ANIMATION_PROPERTIES = { time: {
@@ -1961,6 +2080,117 @@ const readSentTurns = (meta) => {
1961
2080
  return refs;
1962
2081
  };
1963
2082
  //#endregion
2083
+ //#region ../protocol/dist/fs/mime.js
2084
+ const MIME_BY_EXTENSION = {
2085
+ ".txt": "text/plain",
2086
+ ".md": "text/markdown",
2087
+ ".markdown": "text/markdown",
2088
+ ".json": "application/json",
2089
+ ".jsonl": "application/x-ndjson",
2090
+ ".csv": "text/csv",
2091
+ [BOARD_EXTENSION]: BOARD_MIME_TYPE,
2092
+ ".js": "text/javascript",
2093
+ ".mjs": "text/javascript",
2094
+ ".cjs": "text/javascript",
2095
+ ".ts": "text/typescript",
2096
+ ".tsx": "text/tsx",
2097
+ ".jsx": "text/jsx",
2098
+ ".svelte": "text/x-svelte",
2099
+ ".css": "text/css",
2100
+ ".scss": "text/x-scss",
2101
+ ".html": "text/html",
2102
+ ".htm": "text/html",
2103
+ ".xml": "application/xml",
2104
+ ".yaml": "application/yaml",
2105
+ ".yml": "application/yaml",
2106
+ ".toml": "application/toml",
2107
+ ".ini": "text/plain",
2108
+ ".env": "text/plain",
2109
+ ".sh": "text/x-shellscript",
2110
+ ".bash": "text/x-shellscript",
2111
+ ".py": "text/x-python",
2112
+ ".go": "text/x-go",
2113
+ ".rs": "text/x-rust",
2114
+ ".java": "text/x-java-source",
2115
+ ".c": "text/x-c",
2116
+ ".h": "text/x-c",
2117
+ ".cpp": "text/x-c++src",
2118
+ ".hpp": "text/x-c++hdr",
2119
+ ".sql": "application/sql",
2120
+ ".svg": "image/svg+xml",
2121
+ ".png": "image/png",
2122
+ ".jpg": "image/jpeg",
2123
+ ".jpeg": "image/jpeg",
2124
+ ".gif": "image/gif",
2125
+ ".webp": "image/webp",
2126
+ ".avif": "image/avif",
2127
+ ".bmp": "image/bmp",
2128
+ ".ico": "image/x-icon",
2129
+ ".mp4": "video/mp4",
2130
+ ".webm": "video/webm",
2131
+ ".mov": "video/quicktime",
2132
+ ".m4v": "video/x-m4v",
2133
+ ".ogv": "video/ogg",
2134
+ ".avi": "video/x-msvideo",
2135
+ ".mp3": "audio/mpeg",
2136
+ ".wav": "audio/wav",
2137
+ ".ogg": "audio/ogg",
2138
+ ".m4a": "audio/mp4",
2139
+ ".aac": "audio/aac",
2140
+ ".flac": "audio/flac",
2141
+ ".opus": "audio/ogg",
2142
+ ".glb": "model/gltf-binary",
2143
+ ".gltf": "model/gltf+json",
2144
+ ".stl": "model/stl",
2145
+ ".obj": "model/obj",
2146
+ ".3mf": "model/3mf",
2147
+ ".usdz": "model/vnd.usdz+zip",
2148
+ ".mtl": "text/plain",
2149
+ ".pdf": "application/pdf",
2150
+ ".wasm": "application/wasm",
2151
+ ".woff": "font/woff",
2152
+ ".woff2": "font/woff2",
2153
+ ".zip": "application/zip",
2154
+ ".gz": "application/gzip",
2155
+ ".tar": "application/x-tar",
2156
+ ".rar": "application/vnd.rar",
2157
+ ".7z": "application/x-7z-compressed",
2158
+ ".exe": "application/x-msdownload",
2159
+ ".dmg": "application/x-apple-diskimage",
2160
+ ".deb": "application/vnd.debian.binary-package",
2161
+ ".rpm": "application/x-rpm"
2162
+ };
2163
+ const MIME_BY_FILENAME = {
2164
+ dockerfile: "text/x-dockerfile",
2165
+ makefile: "text/x-makefile"
2166
+ };
2167
+ function mimeTypeForPath(path) {
2168
+ const name = (path.split(/[\\/]/).pop() ?? "").toLowerCase();
2169
+ const byName = Object.hasOwn(MIME_BY_FILENAME, name) ? MIME_BY_FILENAME[name] : void 0;
2170
+ if (byName) return byName;
2171
+ const dot = name.lastIndexOf(".");
2172
+ const byExtension = dot > 0 ? MIME_BY_EXTENSION[name.slice(dot)] : void 0;
2173
+ if (byExtension) return byExtension;
2174
+ return name.startsWith(".") ? "text/plain" : null;
2175
+ }
2176
+ function normalizeMime(mimeType) {
2177
+ if (!mimeType) return null;
2178
+ return mimeType.split(";")[0]?.trim().toLowerCase() || null;
2179
+ }
2180
+ const TEXT_APPLICATION_MIMES = /* @__PURE__ */ new Set([
2181
+ "application/json",
2182
+ "application/csv",
2183
+ "application/xml",
2184
+ "application/yaml",
2185
+ "application/toml",
2186
+ "application/sql",
2187
+ "application/x-ndjson"
2188
+ ]);
2189
+ function isTextMime(mimeType) {
2190
+ const mime = normalizeMime(mimeType);
2191
+ return Boolean(mime && (mime.startsWith("text/") || TEXT_APPLICATION_MIMES.has(mime)));
2192
+ }
2193
+ //#endregion
1964
2194
  //#region ../protocol/dist/display/actions.js
1965
2195
  const DISPLAY_ACTION_TYPES = [
1966
2196
  "tap",
@@ -7489,4 +7719,4 @@ function generationOutputSource(result, outputIndex) {
7489
7719
  return `data:${declared && MEDIA_TYPE_PATTERN.test(declared) ? declared : DEFAULT_MEDIA_TYPES[String(block.type)] ?? "application/octet-stream"};base64,${data}`;
7490
7720
  }
7491
7721
  //#endregion
7492
- export { APP_APPEARANCE_TOKENS, APP_COMPOSER_CHIP_CONTENT_MAX_BYTES, APP_COMPOSER_CHIP_KEY_MAX_LENGTH, APP_COMPOSER_CHIP_LABEL_MAX_LENGTH, APP_DEVICES, APP_SURFACE_READY_TIMEOUT_MS, APP_SURFACE_REQUEST_TIMEOUT_MS, AppCommerceApi, AppRealtimeApi, AppRefParseError, AppRoom, AppRoomRtc, AppRtcChannel, AppRtcError, AppRuntimeApi, AppRuntimeApi as WorkRuntimeApi, AppRuntimeError, AppSurfaceApi, AppWindowApi, AppsApi, BILLING_ACCESS_BLOCKED_ERROR_CODE, BOARD_COLOR_TOKENS, BOARD_ITEM_TYPES, BillingApi, BoardAnimationSchema, BoardClient, BoardPatchSchema, BoardTrackSchema, COHUB_ENVIRONMENTS, COHUB_SOURCE_HEADER, COHUB_SOURCE_HEADER_NAMES, CohubClient, CohubHttpClient, DESKTOP_COMMAND_ACCEPT_TIMEOUT_MS, DESKTOP_COMMAND_DEFAULT_TIMEOUT_MS, DESKTOP_COMMAND_MAX_TIMEOUT_MS, DESKTOP_COMMAND_OPEN_TIMEOUT_MS, DESKTOP_COMMAND_PAYLOAD_MAX_BYTES, DESKTOP_COMMAND_PENDING_TTL_SECONDS, DESKTOP_COMMAND_SETTLEMENT_GRACE_SECONDS, DESKTOP_COMMAND_TERMINAL_TTL_SECONDS, DESKTOP_COMMAND_VERSION, DISPLAY_ACTION_TYPES, DISPLAY_ELEMENT_REF_PATTERN, DISPLAY_SYSTEM_ACTIONS, DesktopCommandsApi, DisplayActionError, DisplayConnection, FEATURE_NOT_ENTITLED_ERROR_CODE, GenerationPolicyError, HOME_SPACE_SLUG, HttpError, NATIVE_INGEST_MAX_TURNS, NATIVE_SYNC_SOURCE, OriginBrokerTransport, PERMISSIONS, ParentBridgeTransport, PopupBrokerTransport, REQUEST_SOURCE_VIA_MAX_LENGTH, RUNTIME_ARCHIVE_SEGMENT_BYTES, RUNTIME_MAX_FRAME_BYTES, RUNTIME_PROTOCOL_VERSION, RUNTIME_RECOVERY_BATCH_SIZE, ReferencesApi, ReferralsApi, RoomsApi, SETTLED_TURN_STATUSES, SessionGenerationStreamClient, SessionPatchReducer, SpaceDisplaysApi, SpacePublicFilesApi, SpaceWebhooksApi, UPLOAD_MAX_BATCH_BYTES, UPLOAD_MAX_BATCH_FILES, UPLOAD_MAX_FILE_BYTES, USER_LEVEL_PERMISSIONS, UiCommandsApi, UsersApi, VoiceApi, VoiceInputClient, WebsocketClient, WorkCommerceApi, WorkRealtimeApi, WorkRefParseError, WorkRoom, WorkSurfaceApi, appAppearanceVar, applyAppAppearance, assertGenerationRequestAllowedByPolicy, attachAppEmbed, buildAppSurfaceRequest, buildSpaceInvitePath, buildSpacePath, clearGrantedAppScopes, compileDisplayActions, connectDisplay, contextToPiMessages, createAppBridgeCore, createAppBridgeCore as createWorkBridgeCore, createAppRuntime, createAppRuntime as createWorkRuntime, createCohubClient, createHttpClient, createOriginAppResolver, createSessionGenerationStreamClient, createSessionPatchReducer, createSlugAppIdResolver, createSlugAppIdResolver as createSlugWorkIdResolver, createVoiceInputClient, createWebsocketClient, decodeGenerationPolicy, defaultDesktopCommandTimeoutMs, encodeGenerationPolicy, extractBillingPayload, filterDiscoverableGenerationModels, filterGenerationDeclarationsByPolicy, filterSpacePickerItems, findGenerationModelPolicy, fingerprintProjectionTurns, formatAppRef, formatWorkRef, generationOutputSource, getAllowedGenerationModelIds, getCohubContext, harnessArchiveIndexSchema, hasGrantedAppScopes, hasRequestSourceIdentity, isActiveGenerationTask, isAppId, isBillingAccessBlockedCode, isBillingAccessBlockedError, isDesktopCallMethod, isFeatureNotEntitledError, isGenerationModelHidden, isHttpErrorCode, isLocalHarness, isNativeClientTurn, isProjectionCompaction, isRequestSourceClientId, isRequestSourceEmpty, isRequestSourceUuid, isTerminalDesktopCommandStatus, isUserLevelPermission, isUuid, isWorkId, joinApiUrl, matchesUnauthorizedErrorToken, mergeRequestSourceIntoMeta, nativeIngestTurnSchema, nativeRuntimeEventSchema, nativeTurnCompleteSchema, nativeTurnProgressSchema, normalizeBaseUrl, normalizeDisplayPoint, normalizeGenerationPolicy, normalizeRequestSource, normalizeSessionTurnOrigin, normalizeSpacePickerQuery, normalizeVoiceInputWebsocketUrl, normalizeWebsocketUrl, orderSpacePickerItems, parseAppRef, parseAppSurfaceReady, parseAppSurfaceResponse, parseAssistantMessageCommit, parseBoardDocument, parseBoardItem, parseDesktopCommand, parseGenerationPolicyFromEnv, parseRequestSourceFromHeaders, parseSpaceRef, parseWorkRef, projectNativeMessageMeta, projectNativeSession, readRequestSourceFromEnv, readSentTurns, readSessionTurnOrigin, requestSourceToHeaders, resolveApiBaseUrl, resolveAppTransport, resolveAppTransport as resolveWorkTransport, resolveCohubEnvironment, resolveExecutionAppId, resolveExecutionToken, resolveHarness, resolveOpenSurface, resolveRequestSourceChannel, resolveVoiceInputWebsocketUrl, resolveWebBaseUrl, resolveWebsocketUrl, runtimeCommandSchema, runtimeEventSchema, runtimeNativeStopSchema, runtimeReadySchema, sanitizeAccessToken, scopeListHasPermission, selectRuntimeContextMessages, selectSpacePickerItems, serializeProjection, serializeProjectionRecords, setGrantedAppScopes, toGenerationTaskView, trimProjectionTurnsToCompaction, validateArchiveBoundary };
7722
+ export { APP_APPEARANCE_TOKENS, APP_COMPOSER_CHIP_CONTENT_MAX_BYTES, APP_COMPOSER_CHIP_KEY_MAX_LENGTH, APP_COMPOSER_CHIP_LABEL_MAX_LENGTH, APP_DEVICES, APP_SURFACE_READY_TIMEOUT_MS, APP_SURFACE_REQUEST_TIMEOUT_MS, AppCommerceApi, AppRealtimeApi, AppRefParseError, AppRoom, AppRoomRtc, AppRtcChannel, AppRtcError, AppRuntimeApi, AppRuntimeApi as WorkRuntimeApi, AppRuntimeError, AppSurfaceApi, AppWindowApi, AppsApi, BILLING_ACCESS_BLOCKED_ERROR_CODE, BOARD_COLOR_TOKENS, BOARD_ITEM_TYPES, BillingApi, BoardAnimationSchema, BoardClient, BoardPatchSchema, BoardTrackSchema, COHUB_ENVIRONMENTS, COHUB_SOURCE_HEADER, COHUB_SOURCE_HEADER_NAMES, CohubClient, CohubHttpClient, DESKTOP_COMMAND_ACCEPT_TIMEOUT_MS, DESKTOP_COMMAND_DEFAULT_TIMEOUT_MS, DESKTOP_COMMAND_MAX_TIMEOUT_MS, DESKTOP_COMMAND_OPEN_TIMEOUT_MS, DESKTOP_COMMAND_PAYLOAD_MAX_BYTES, DESKTOP_COMMAND_PENDING_TTL_SECONDS, DESKTOP_COMMAND_SETTLEMENT_GRACE_SECONDS, DESKTOP_COMMAND_TERMINAL_TTL_SECONDS, DESKTOP_COMMAND_VERSION, DISPLAY_ACTION_TYPES, DISPLAY_ELEMENT_REF_PATTERN, DISPLAY_SYSTEM_ACTIONS, DesktopCommandsApi, DisplayActionError, DisplayConnection, FEATURE_NOT_ENTITLED_ERROR_CODE, GenerationPolicyError, HOME_SPACE_SLUG, HttpError, NATIVE_INGEST_MAX_TURNS, NATIVE_SYNC_SOURCE, OriginBrokerTransport, PERMISSIONS, ParentBridgeTransport, PopupBrokerTransport, REQUEST_SOURCE_VIA_MAX_LENGTH, RUNTIME_ARCHIVE_SEGMENT_BYTES, RUNTIME_MAX_FRAME_BYTES, RUNTIME_PROTOCOL_VERSION, RUNTIME_RECOVERY_BATCH_SIZE, ReferencesApi, ReferralsApi, RoomsApi, SETTLED_TURN_STATUSES, SessionGenerationStreamClient, SessionPatchReducer, SpaceDisplaysApi, SpacePublicFilesApi, SpaceWebhooksApi, UPLOAD_ERROR_BATCH_TOO_LARGE, UPLOAD_ERROR_FILE_TOO_LARGE, UPLOAD_ERROR_RATE_LIMITED, UPLOAD_ERROR_TOO_MANY_FILES, UPLOAD_MAX_BATCH_BYTES, UPLOAD_MAX_BATCH_FILES, UPLOAD_MAX_FILE_BYTES, USER_LEVEL_PERMISSIONS, UiCommandsApi, UsersApi, VoiceApi, VoiceInputClient, WebsocketClient, WorkCommerceApi, WorkRealtimeApi, WorkRefParseError, WorkRoom, WorkSurfaceApi, appAppearanceVar, applyAppAppearance, assertGenerationRequestAllowedByPolicy, attachAppEmbed, batchUploadEntries, buildAppSurfaceRequest, buildSpaceInvitePath, buildSpacePath, clearGrantedAppScopes, compileDisplayActions, connectDisplay, contextToPiMessages, createAppBridgeCore, createAppBridgeCore as createWorkBridgeCore, createAppRuntime, createAppRuntime as createWorkRuntime, createCohubClient, createHttpClient, createOriginAppResolver, createSessionGenerationStreamClient, createSessionPatchReducer, createSlugAppIdResolver, createSlugAppIdResolver as createSlugWorkIdResolver, createVoiceInputClient, createWebsocketClient, decodeGenerationPolicy, defaultDesktopCommandTimeoutMs, encodeGenerationPolicy, extractBillingPayload, filterDiscoverableGenerationModels, filterGenerationDeclarationsByPolicy, filterSpacePickerItems, findGenerationModelPolicy, fingerprintProjectionTurns, formatAppRef, formatWorkRef, generationOutputSource, getAllowedGenerationModelIds, getCohubContext, harnessArchiveIndexSchema, hasGrantedAppScopes, hasRequestSourceIdentity, isActiveGenerationTask, isAppId, isBillingAccessBlockedCode, isBillingAccessBlockedError, isDesktopCallMethod, isFeatureNotEntitledError, isGenerationModelHidden, isHttpErrorCode, isLocalHarness, isNativeClientTurn, isProjectionCompaction, isRequestSourceClientId, isRequestSourceEmpty, isRequestSourceUuid, isTerminalDesktopCommandStatus, isTextMime, isUserLevelPermission, isUuid, isWorkId, joinApiUrl, matchesUnauthorizedErrorToken, mergeRequestSourceIntoMeta, mimeTypeForPath, nativeIngestTurnSchema, nativeRuntimeEventSchema, nativeTurnCompleteSchema, nativeTurnProgressSchema, normalizeBaseUrl, normalizeDisplayPoint, normalizeGenerationPolicy, normalizeRequestSource, normalizeSessionTurnOrigin, normalizeSpacePickerQuery, normalizeVoiceInputWebsocketUrl, normalizeWebsocketUrl, orderSpacePickerItems, parseAppRef, parseAppSurfaceReady, parseAppSurfaceResponse, parseAssistantMessageCommit, parseBoardDocument, parseBoardItem, parseDesktopCommand, parseGenerationPolicyFromEnv, parseRequestSourceFromHeaders, parseSpaceRef, parseWorkRef, projectNativeMessageMeta, projectNativeSession, readRequestSourceFromEnv, readSentTurns, readSessionTurnOrigin, requestSourceToHeaders, resolveApiBaseUrl, resolveAppTransport, resolveAppTransport as resolveWorkTransport, resolveCohubEnvironment, resolveExecutionAppId, resolveExecutionToken, resolveHarness, resolveOpenSurface, resolveRequestSourceChannel, resolveVoiceInputWebsocketUrl, resolveWebBaseUrl, resolveWebsocketUrl, runtimeCommandSchema, runtimeEventSchema, runtimeNativeStopSchema, runtimeReadySchema, sanitizeAccessToken, scopeListHasPermission, selectRuntimeContextMessages, selectSpacePickerItems, serializeProjection, serializeProjectionRecords, setGrantedAppScopes, toGenerationTaskView, trimProjectionTurnsToCompaction, validateArchiveBoundary };
@@ -93,20 +93,20 @@ const CAMERA_PROPERTIES = {
93
93
  y: z.number().finite(),
94
94
  width: z.number().finite().positive(),
95
95
  height: z.number().finite().positive()
96
- }).strict()])
96
+ }).strict()]).describe("Item id or world-space rect to fit with 48 px padding; holds until the next focus keyframe.")
97
97
  },
98
98
  zoom: {
99
99
  kind: "number",
100
- schema: z.number().finite().positive(),
100
+ schema: z.number().finite().positive().describe("Pixels per world unit; overrides the zoom computed by focus."),
101
101
  multiplicative: true
102
102
  },
103
103
  center: {
104
104
  kind: "vec2",
105
- schema: BoardVec2Schema
105
+ schema: BoardVec2Schema.describe("World-space viewport center; overrides focus positioning using the resolved zoom.")
106
106
  },
107
107
  shake: {
108
108
  kind: "number",
109
- schema: z.number().finite().nonnegative()
109
+ schema: z.number().finite().nonnegative().describe("Shake amplitude in screen pixels, applied after focus, zoom and center.")
110
110
  }
111
111
  };
112
112
  const ANIMATION_PROPERTIES = { time: {
@@ -1,5 +1,5 @@
1
1
  import { BOARD_CAMERA_TARGET, BOARD_COLOR_TOKENS, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BoardAnimationHeaderSchema, BoardKeySchema, BoardScriptSchema, BoardSettingsSchema, BoardTrackSchema, isBuiltinItemType } from "./board-model.js";
2
- import { listBoardProperties } from "./board-patch.js";
2
+ import { listBoardProperties, resolveBoardProperty } from "./board-patch.js";
3
3
  import { z } from "zod";
4
4
  //#region ../protocol/dist/board-schema.js
5
5
  function toJsonSchema(schema) {
@@ -25,7 +25,18 @@ function boardJsonSchema(target) {
25
25
  };
26
26
  if (target === "track") return { schema: toJsonSchema(BoardTrackSchema) };
27
27
  if (target === "script") return { schema: toJsonSchema(BoardScriptSchema) };
28
- if (target === "camera") return { properties: listBoardProperties(BOARD_CAMERA_TARGET) };
28
+ if (target === "camera") {
29
+ const properties = listBoardProperties(target);
30
+ const fields = Object.fromEntries(properties.map(({ property }) => {
31
+ const result = resolveBoardProperty(target, property);
32
+ if (!result.ok) throw new Error(result.message);
33
+ return [property, result.spec.schema];
34
+ }));
35
+ return {
36
+ schema: toJsonSchema(z.object(fields).partial().strict()),
37
+ properties
38
+ };
39
+ }
29
40
  if (!isBuiltinItemType(target)) return null;
30
41
  return {
31
42
  schema: toJsonSchema(BOARD_ITEM_SCHEMAS[target]),
@@ -2,6 +2,7 @@ import { BoardIdSchema, BoardPatchSchema } from "./board-model.js";
2
2
  import { z } from "zod";
3
3
  //#region ../protocol/dist/board.js
4
4
  const BOARD_EXTENSION = ".board";
5
+ const BOARD_MIME_TYPE = "application/json";
5
6
  const BOARD_MANIFEST_KIND = "cohub.board.manifest";
6
7
  const BOARD_CLIPBOARD_KIND = "cohub.board.clipboard";
7
8
  const BOARD_CLIPBOARD_MIME = "application/x-cohub-board";
@@ -106,4 +107,4 @@ z.discriminatedUnion("type", [
106
107
  }).strict()
107
108
  ]);
108
109
  //#endregion
109
- export { BOARD_CLIPBOARD_KIND, BOARD_CLIPBOARD_MIME, BOARD_EXTENSION, BOARD_MANIFEST_KIND, BOARD_READ_SECTIONS, BoardManifestSchema, InvalidBoardFileError, isBoardPath, parseBoardManifest, serializeBoardManifest };
110
+ export { BOARD_CLIPBOARD_KIND, BOARD_CLIPBOARD_MIME, BOARD_EXTENSION, BOARD_MANIFEST_KIND, BOARD_MIME_TYPE, BOARD_READ_SECTIONS, BoardManifestSchema, InvalidBoardFileError, isBoardPath, parseBoardManifest, serializeBoardManifest };
@@ -0,0 +1,4 @@
1
+ //#region ../protocol/dist/fs/mime.d.ts
2
+ type ModelFormat = "glb" | "gltf" | "stl" | "obj";
3
+ //#endregion
4
+ export { ModelFormat };
@@ -0,0 +1,113 @@
1
+ import { BOARD_EXTENSION, BOARD_MIME_TYPE } from "../board.js";
2
+ //#region ../protocol/dist/fs/mime.js
3
+ const MIME_BY_EXTENSION = {
4
+ ".txt": "text/plain",
5
+ ".md": "text/markdown",
6
+ ".markdown": "text/markdown",
7
+ ".json": "application/json",
8
+ ".jsonl": "application/x-ndjson",
9
+ ".csv": "text/csv",
10
+ [BOARD_EXTENSION]: BOARD_MIME_TYPE,
11
+ ".js": "text/javascript",
12
+ ".mjs": "text/javascript",
13
+ ".cjs": "text/javascript",
14
+ ".ts": "text/typescript",
15
+ ".tsx": "text/tsx",
16
+ ".jsx": "text/jsx",
17
+ ".svelte": "text/x-svelte",
18
+ ".css": "text/css",
19
+ ".scss": "text/x-scss",
20
+ ".html": "text/html",
21
+ ".htm": "text/html",
22
+ ".xml": "application/xml",
23
+ ".yaml": "application/yaml",
24
+ ".yml": "application/yaml",
25
+ ".toml": "application/toml",
26
+ ".ini": "text/plain",
27
+ ".env": "text/plain",
28
+ ".sh": "text/x-shellscript",
29
+ ".bash": "text/x-shellscript",
30
+ ".py": "text/x-python",
31
+ ".go": "text/x-go",
32
+ ".rs": "text/x-rust",
33
+ ".java": "text/x-java-source",
34
+ ".c": "text/x-c",
35
+ ".h": "text/x-c",
36
+ ".cpp": "text/x-c++src",
37
+ ".hpp": "text/x-c++hdr",
38
+ ".sql": "application/sql",
39
+ ".svg": "image/svg+xml",
40
+ ".png": "image/png",
41
+ ".jpg": "image/jpeg",
42
+ ".jpeg": "image/jpeg",
43
+ ".gif": "image/gif",
44
+ ".webp": "image/webp",
45
+ ".avif": "image/avif",
46
+ ".bmp": "image/bmp",
47
+ ".ico": "image/x-icon",
48
+ ".mp4": "video/mp4",
49
+ ".webm": "video/webm",
50
+ ".mov": "video/quicktime",
51
+ ".m4v": "video/x-m4v",
52
+ ".ogv": "video/ogg",
53
+ ".avi": "video/x-msvideo",
54
+ ".mp3": "audio/mpeg",
55
+ ".wav": "audio/wav",
56
+ ".ogg": "audio/ogg",
57
+ ".m4a": "audio/mp4",
58
+ ".aac": "audio/aac",
59
+ ".flac": "audio/flac",
60
+ ".opus": "audio/ogg",
61
+ ".glb": "model/gltf-binary",
62
+ ".gltf": "model/gltf+json",
63
+ ".stl": "model/stl",
64
+ ".obj": "model/obj",
65
+ ".3mf": "model/3mf",
66
+ ".usdz": "model/vnd.usdz+zip",
67
+ ".mtl": "text/plain",
68
+ ".pdf": "application/pdf",
69
+ ".wasm": "application/wasm",
70
+ ".woff": "font/woff",
71
+ ".woff2": "font/woff2",
72
+ ".zip": "application/zip",
73
+ ".gz": "application/gzip",
74
+ ".tar": "application/x-tar",
75
+ ".rar": "application/vnd.rar",
76
+ ".7z": "application/x-7z-compressed",
77
+ ".exe": "application/x-msdownload",
78
+ ".dmg": "application/x-apple-diskimage",
79
+ ".deb": "application/vnd.debian.binary-package",
80
+ ".rpm": "application/x-rpm"
81
+ };
82
+ const MIME_BY_FILENAME = {
83
+ dockerfile: "text/x-dockerfile",
84
+ makefile: "text/x-makefile"
85
+ };
86
+ function mimeTypeForPath(path) {
87
+ const name = (path.split(/[\\/]/).pop() ?? "").toLowerCase();
88
+ const byName = Object.hasOwn(MIME_BY_FILENAME, name) ? MIME_BY_FILENAME[name] : void 0;
89
+ if (byName) return byName;
90
+ const dot = name.lastIndexOf(".");
91
+ const byExtension = dot > 0 ? MIME_BY_EXTENSION[name.slice(dot)] : void 0;
92
+ if (byExtension) return byExtension;
93
+ return name.startsWith(".") ? "text/plain" : null;
94
+ }
95
+ function normalizeMime(mimeType) {
96
+ if (!mimeType) return null;
97
+ return mimeType.split(";")[0]?.trim().toLowerCase() || null;
98
+ }
99
+ const MODEL_FORMAT_BY_MIME = {
100
+ "model/gltf-binary": "glb",
101
+ "model/gltf+json": "gltf",
102
+ "model/stl": "stl",
103
+ "model/obj": "obj"
104
+ };
105
+ function modelFormatForPath(path, mimeType) {
106
+ const format = (mime) => {
107
+ const key = normalizeMime(mime);
108
+ return key && Object.hasOwn(MODEL_FORMAT_BY_MIME, key) ? MODEL_FORMAT_BY_MIME[key] : void 0;
109
+ };
110
+ return format(mimeTypeForPath(path)) ?? format(mimeType) ?? null;
111
+ }
112
+ //#endregion
113
+ export { mimeTypeForPath, modelFormatForPath, normalizeMime };
@@ -19,8 +19,9 @@ import "./runtime/index.js";
19
19
  import "./model/turn.js";
20
20
  import "./model/session.js";
21
21
  import "./realtime/board-awareness.js";
22
+ import { ModelFormat } from "./fs/mime.js";
22
23
  import "./app.js";
23
24
  import "./realtime/types.js";
24
25
  import "./app-catalog.js";
25
26
  import "./host-bridge.js";
26
- export { BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_CLIPBOARD_KIND, BOARD_CLIPBOARD_MIME, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_SCHEMA_TARGETS, BOARD_SHAPE_GEOMETRIES, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TASK_SOURCE_PREFIX, BOARD_TEXT_ALIGNS, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardApplyOptions, BoardApplyResult, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardChangeSummary, BoardColor, BoardColorSchema, BoardColorToken, BoardCropSchema, BoardCustomItem, BoardCustomItemSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawItem, BoardDrawItemSchema, BoardDrawPoint, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItem, BoardEffectItemSchema, BoardEffectKind, BoardEnterPreset, BoardExtensionItem, BoardExtensionItemSchema, BoardFileBackedItem, BoardFileItem, BoardFileItemSchema, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardHistoryPage, BoardIdSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemLookup, BoardItemType, BoardJsonSchemaResult, BoardKeySchema, BoardKeyframe, BoardKeyframeSchema, BoardLayout, BoardManifest, BoardManifestSchema, BoardMarker, BoardMarkerSchema, BoardMatrix, BoardMediaOrigin, BoardMediaOriginSchema, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardMediaSource, BoardMediaSourceSchema, BoardPatch, BoardPatchResult, BoardPatchSchema, BoardPlayMode, BoardPlaybackCommand, BoardPlaybackCommandSchema, BoardPlaybackSnapshot, BoardPlaybackStatus, BoardPropertySpec, BoardReadResult, BoardRect, BoardScript, BoardScriptSchema, BoardSettings, BoardSettingsSchema, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardState, BoardStyle, BoardStyleSchema, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, BoardTaskRunSource, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardTextLayout, BoardTextMeasurer, BoardTrack, BoardTrackSchema, BoardTransactionRecord, BoardValueKind, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, GenerationRunPayload, IDENTITY_MATRIX, RequestSource, RequestSourceVia, TaskRunStatus, anchorPoint, applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, autoAnchorSide, bendControl, boardItemSchema, boardJsonSchema, boardPatchTouches, boardSchemaOverview, boardTaskSource, clampBoardFontSize, clampBoardStrokeSize, createBoardLayout, createDocumentLayout, createDocumentState, diffBoardDocuments, diffMergePatch, drawPointsBounds, drawSampleRadius, emptyBoardDocument, estimateTextWidth, featuredTaskArtifact, framePoint, hasAuthoredSize, invertMatrix, isArrowBinding, isBoardColorString, isBoardEase, isBoardPath, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, layoutBoardText, listBoardProperties, mergePatch, multiplyMatrix, normalizeBoardRemoteUrl, parseBoardDocument, parseBoardItem, parseBoardManifest, parseBoardMediaSource, pointsRect, pruneBoardTrack, rankedTaskArtifacts, resolveBoardProperty, rotateAround, scaleVector, serializeBoardManifest, setBoardTextMeasurer, sideAnchor, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, trackReferences, withObservedArtifactFacts };
27
+ export { BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_CLIPBOARD_KIND, BOARD_CLIPBOARD_MIME, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_SCHEMA_TARGETS, BOARD_SHAPE_GEOMETRIES, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TASK_SOURCE_PREFIX, BOARD_TEXT_ALIGNS, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardApplyOptions, BoardApplyResult, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardChangeSummary, BoardColor, BoardColorSchema, BoardColorToken, BoardCropSchema, BoardCustomItem, BoardCustomItemSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawItem, BoardDrawItemSchema, BoardDrawPoint, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItem, BoardEffectItemSchema, BoardEffectKind, BoardEnterPreset, BoardExtensionItem, BoardExtensionItemSchema, BoardFileBackedItem, BoardFileItem, BoardFileItemSchema, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardHistoryPage, BoardIdSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemLookup, BoardItemType, BoardJsonSchemaResult, BoardKeySchema, BoardKeyframe, BoardKeyframeSchema, BoardLayout, BoardManifest, BoardManifestSchema, BoardMarker, BoardMarkerSchema, BoardMatrix, BoardMediaOrigin, BoardMediaOriginSchema, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardMediaSource, BoardMediaSourceSchema, BoardPatch, BoardPatchResult, BoardPatchSchema, BoardPlayMode, BoardPlaybackCommand, BoardPlaybackCommandSchema, BoardPlaybackSnapshot, BoardPlaybackStatus, BoardPropertySpec, BoardReadResult, BoardRect, BoardScript, BoardScriptSchema, BoardSettings, BoardSettingsSchema, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardState, BoardStyle, BoardStyleSchema, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, BoardTaskRunSource, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardTextLayout, BoardTextMeasurer, BoardTrack, BoardTrackSchema, BoardTransactionRecord, BoardValueKind, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, GenerationRunPayload, IDENTITY_MATRIX, ModelFormat, RequestSource, RequestSourceVia, TaskRunStatus, anchorPoint, applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, autoAnchorSide, bendControl, boardItemSchema, boardJsonSchema, boardPatchTouches, boardSchemaOverview, boardTaskSource, clampBoardFontSize, clampBoardStrokeSize, createBoardLayout, createDocumentLayout, createDocumentState, diffBoardDocuments, diffMergePatch, drawPointsBounds, drawSampleRadius, emptyBoardDocument, estimateTextWidth, featuredTaskArtifact, framePoint, hasAuthoredSize, invertMatrix, isArrowBinding, isBoardColorString, isBoardEase, isBoardPath, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, layoutBoardText, listBoardProperties, mergePatch, multiplyMatrix, normalizeBoardRemoteUrl, parseBoardDocument, parseBoardItem, parseBoardManifest, parseBoardMediaSource, pointsRect, pruneBoardTrack, rankedTaskArtifacts, resolveBoardProperty, rotateAround, scaleVector, serializeBoardManifest, setBoardTextMeasurer, sideAnchor, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, trackReferences, withObservedArtifactFacts };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neta-art/cohub",
3
- "version": "11.3.1",
3
+ "version": "11.3.2",
4
4
  "description": "Cohub SDK for spaces, sessions, boards, and realtime agent collaboration.",
5
5
  "license": "Apache-2.0",
6
6
  "private": false,