@neta-art/cohub 6.0.0 → 8.0.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.
Files changed (57) hide show
  1. package/README.md +6 -5
  2. package/dist/board/animation.d.ts +2 -1
  3. package/dist/board/animation.js +0 -1
  4. package/dist/board/core/connections.js +4 -4
  5. package/dist/board/core/export-plan.js +1 -1
  6. package/dist/board/core/shape-types.js +0 -1
  7. package/dist/board/index.d.ts +6 -5
  8. package/dist/board/index.js +7 -7
  9. package/dist/board/mutation.d.ts +2 -11
  10. package/dist/board/mutation.js +2 -56
  11. package/dist/board/render/renderers/text-card-renderer.js +1 -1
  12. package/dist/board/semantic-document.d.ts +30 -0
  13. package/dist/board/semantic-document.js +271 -0
  14. package/dist/board/semantic-mutation.d.ts +10 -0
  15. package/dist/board/semantic-mutation.js +203 -0
  16. package/dist/chunks/http.d.ts +340 -317
  17. package/dist/chunks/http.js +477 -1784
  18. package/dist/chunks/transport.js +1 -1
  19. package/dist/chunks/websocket.d.ts +3677 -3151
  20. package/dist/chunks/websocket.js +1 -1
  21. package/dist/http.d.ts +3 -3
  22. package/dist/index.d.ts +165 -119
  23. package/dist/index.js +1419 -446
  24. package/dist/protocol/dist/board-authoring.d.ts +1305 -1
  25. package/dist/protocol/dist/board-authoring.js +80 -6
  26. package/dist/protocol/dist/board-codec.d.ts +2 -2
  27. package/dist/protocol/dist/board-codec.js +19 -4
  28. package/dist/protocol/dist/board-composition.d.ts +126 -1
  29. package/dist/protocol/dist/board-composition.js +1 -9
  30. package/dist/protocol/dist/board-connection.d.ts +16 -16
  31. package/dist/protocol/dist/board-connection.js +16 -16
  32. package/dist/protocol/dist/board-document.d.ts +34 -3
  33. package/dist/protocol/dist/board-document.js +3 -1
  34. package/dist/protocol/dist/board-effect.d.ts +94 -0
  35. package/dist/protocol/dist/board-effect.js +53 -0
  36. package/dist/protocol/dist/board-json.js +16 -0
  37. package/dist/protocol/dist/board.d.ts +34 -164
  38. package/dist/protocol/dist/board.js +44 -45
  39. package/dist/protocol/dist/index.d.ts +8 -8
  40. package/dist/protocol/dist/realtime/types.d.ts +1 -1
  41. package/dist/types.d.ts +3 -1
  42. package/package.json +1 -2
  43. package/dist/board/codec.d.ts +0 -27
  44. package/dist/board/codec.js +0 -277
  45. package/dist/protocol/dist/board-content.js +0 -26
  46. package/dist/protocol/dist/board-upgrade.js +0 -2
  47. package/dist/protocol/dist/identifiers.js +0 -10
  48. package/dist/protocol/dist/index.js +0 -19
  49. package/dist/protocol/dist/provenance.js +0 -15
  50. package/dist/protocol/dist/public-identifiers.js +0 -38
  51. package/dist/protocol/dist/realtime/board-awareness.js +0 -119
  52. package/dist/protocol/dist/ui-command.js +0 -2
  53. package/dist/protocol/dist/work-promotion-stats.js +0 -11
  54. package/dist/protocol/dist/work-surface.js +0 -2
  55. package/dist/protocol/dist/work-view-stats.js +0 -3
  56. package/dist/protocol/dist/work.d.ts +0 -1
  57. /package/dist/protocol/dist/{board-upgrade.d.ts → app.d.ts} +0 -0
@@ -1,14 +1,14 @@
1
1
  import { BOARD_BUILTIN_CAPABILITIES, DEFAULT_BOARD_RENDER_LIMITS } from "./board-constants.js";
2
2
  import { BoardConnectionSchema } from "./board-connection.js";
3
3
  import { BoardCompositionInputSchema } from "./board-composition.js";
4
- import { BoardAuthoringItemSchema } from "./board-authoring.js";
4
+ import { BoardEffectInputSchema } from "./board-effect.js";
5
+ import { BoardAuthoringItemSchema, BoardItemPatchSchema, BoardSemanticMutationSchema } from "./board-authoring.js";
5
6
  import { z } from "zod";
6
7
  //#region ../protocol/dist/board.js
7
8
  const BOARD_EXTENSION = ".board";
8
9
  const BOARD_DOCUMENT_KIND = "cohub.board";
9
10
  const BOARD_MANIFEST_KIND = "cohub.board.manifest";
10
11
  const idSchema = z.string().min(1).max(160);
11
- const extensionIdSchema = z.string().regex(/^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)+$/).max(160);
12
12
  const jsonObjectSchema = z.record(z.string(), z.unknown());
13
13
  const finiteSchema = z.number().finite();
14
14
  const BoardManifestSchema = z.object({
@@ -79,42 +79,6 @@ const BoardCameraFocusParamsSchema = z.object({
79
79
  path: ["minZoom"]
80
80
  });
81
81
  });
82
- const BoardAssetRefSchema = z.object({
83
- type: z.enum(["space-file", "extension"]),
84
- ref: z.string().min(1).max(4096),
85
- digest: z.string().min(16).max(160).optional()
86
- });
87
- const BoardEffectSchema = z.object({
88
- id: idSchema,
89
- boardId: z.string().uuid(),
90
- target: z.discriminatedUnion("type", [z.object({
91
- type: z.literal("item"),
92
- itemId: idSchema
93
- }).strict(), z.object({ type: z.literal("board") }).strict()]),
94
- kind: extensionIdSchema,
95
- kindVersion: z.number().int().positive(),
96
- enabled: z.boolean().default(true),
97
- lifecycle: z.enum([
98
- "persistent",
99
- "when-visible",
100
- "manual"
101
- ]),
102
- timeOrigin: z.enum([
103
- "board",
104
- "visible",
105
- "activation"
106
- ]),
107
- layer: z.enum([
108
- "behind",
109
- "front",
110
- "screen"
111
- ]).default("front"),
112
- seed: z.string().min(1).max(160),
113
- params: jsonObjectSchema.default({}),
114
- assetRefs: z.array(BoardAssetRefSchema).default([]),
115
- metadata: jsonObjectSchema.default({}),
116
- revision: z.number().int().nonnegative()
117
- });
118
82
  z.object({
119
83
  nodeId: idSchema,
120
84
  type: z.string().min(1).max(40),
@@ -132,7 +96,14 @@ z.object({
132
96
  style: jsonObjectSchema,
133
97
  data: jsonObjectSchema
134
98
  });
135
- z.object({
99
+ const stripBoardServerFields = (value) => {
100
+ if (!value || typeof value !== "object" || Array.isArray(value)) return value;
101
+ const { boardId: _boardId, revision: _revision, ...input } = value;
102
+ return input;
103
+ };
104
+ const BoardCreateEffectInputSchema = z.preprocess(stripBoardServerFields, BoardEffectInputSchema);
105
+ const BoardCreateCompositionInputSchema = z.preprocess(stripBoardServerFields, BoardCompositionInputSchema);
106
+ const BoardCreateInputSchema = z.object({
136
107
  path: z.string().min(1),
137
108
  /** Reused by clients when board creation is interrupted and retried. */
138
109
  mutationId: z.string().max(128).optional(),
@@ -140,12 +111,36 @@ z.object({
140
111
  metadata: jsonObjectSchema.optional(),
141
112
  items: z.array(BoardAuthoringItemSchema).max(5e4).optional(),
142
113
  connections: z.array(BoardConnectionSchema).max(5e4).optional(),
143
- effects: z.array(BoardEffectSchema.omit({
144
- boardId: true,
145
- revision: true
146
- })).optional(),
147
- compositions: z.array(BoardCompositionInputSchema).optional()
114
+ effects: z.array(BoardCreateEffectInputSchema).max(5e4).optional(),
115
+ compositions: z.array(BoardCreateCompositionInputSchema).max(5e4).optional()
148
116
  });
117
+ const jsonSchema = (schema) => z.toJSONSchema(schema);
118
+ const authoringSchemaFactories = {
119
+ item: () => jsonSchema(BoardAuthoringItemSchema),
120
+ itemPatch: () => jsonSchema(BoardItemPatchSchema),
121
+ mutation: () => jsonSchema(BoardSemanticMutationSchema),
122
+ composition: () => jsonSchema(BoardCompositionInputSchema),
123
+ effect: () => jsonSchema(BoardEffectInputSchema),
124
+ create: () => jsonSchema(BoardCreateInputSchema)
125
+ };
126
+ /**
127
+ * JSON Schemas for the semantic authoring surface. Each property is enumerable
128
+ * for Object.keys/JSON.stringify, but generated only when that property is
129
+ * requested. This keeps protocol imports cheap while capabilities still returns
130
+ * the complete machine-readable schema object.
131
+ */
132
+ const BOARD_AUTHORING_SCHEMAS = {};
133
+ for (const key of Object.keys(authoringSchemaFactories)) {
134
+ let cached;
135
+ Object.defineProperty(BOARD_AUTHORING_SCHEMAS, key, {
136
+ enumerable: true,
137
+ configurable: false,
138
+ get() {
139
+ cached ??= authoringSchemaFactories[key]();
140
+ return cached;
141
+ }
142
+ });
143
+ }
149
144
  z.object({
150
145
  include: z.array(z.enum([
151
146
  "nodes",
@@ -154,6 +149,10 @@ z.object({
154
149
  "compositions",
155
150
  "playback"
156
151
  ])).optional(),
152
+ nodeIds: z.array(idSchema).max(5e4).optional(),
153
+ connectionIds: z.array(idSchema).max(5e4).optional(),
154
+ effectIds: z.array(idSchema).max(5e4).optional(),
155
+ compositionIds: z.array(idSchema).max(5e4).optional(),
157
156
  viewport: z.object({
158
157
  x: finiteSchema,
159
158
  y: finiteSchema,
@@ -197,4 +196,4 @@ function isBoardPath(path) {
197
196
  return path.toLowerCase().endsWith(BOARD_EXTENSION);
198
197
  }
199
198
  //#endregion
200
- export { BOARD_BUILTIN_CAPABILITIES, BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BOARD_MANIFEST_KIND, BoardAssetRefSchema, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraStateSchema, BoardEffectSchema, BoardManifestSchema, DEFAULT_BOARD_RENDER_LIMITS, InvalidBoardFileError, isBoardPath, parseBoardManifest, serializeBoardManifest };
199
+ export { BOARD_AUTHORING_SCHEMAS, BOARD_BUILTIN_CAPABILITIES, BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BOARD_MANIFEST_KIND, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraStateSchema, BoardCreateInputSchema, BoardManifestSchema, DEFAULT_BOARD_RENDER_LIMITS, InvalidBoardFileError, isBoardPath, parseBoardManifest, serializeBoardManifest };
@@ -1,14 +1,14 @@
1
1
  import { BoardCapability, BoardCoordinateSpace, BoardRenderCost } from "./board-constants.js";
2
- import { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BoardConnection, BoardConnectionAnchor, BoardConnectionAnchorSchema, BoardConnectionDirection, BoardConnectionEndpoint, BoardConnectionEndpointSchema, BoardConnectionInput, BoardConnectionLine, BoardConnectionPatch, BoardConnectionPatchSchema, BoardConnectionRecord, BoardConnectionRouting, BoardConnectionRoutingConfig, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionSide, BoardConnectionStyle, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardRelationSchema, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION, connectionNodeIds, connectionOtherNodeId, connectionTouchesNode, createBoardConnection, flipBoardConnection, normalizeBoardConnectionStyle } from "./board-connection.js";
3
- import { BoardAnimationTarget, BoardAnimationTargetSchema, BoardComposition, BoardCompositionSchema, BoardEasing, BoardEasingSchema, BoardProceduralClip, BoardProceduralClipSchema, BoardTimelineMarker, BoardTimelineMarkerSchema, BoardTrack, BoardTrackInterpolation, BoardTrackSchema } from "./board-composition.js";
4
- import { BOARD_COLOR_IDS, BOARD_GEO_KINDS, BoardColorId, BoardGeoKind } from "./board-node.js";
5
- import { BOARD_DELETE_REASONS, BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BoardAssetRef, BoardAssetRefSchema, BoardCameraFocus, BoardCameraFocusParams, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraState, BoardCameraStateSchema, BoardDeleteReason, BoardDiagnostic, BoardEffect, BoardEffectSchema, BoardManifest, BoardManifestSchema, BoardNodeInput, BoardNodeRecord, BoardOperation, BoardPlaybackPolicy, BoardPlaybackPolicySchema, BoardRecord, BoardValidationResult, InvalidBoardFileError, isBoardPath, parseBoardManifest, serializeBoardManifest } from "./board.js";
6
- import "./board-authoring.js";
2
+ import { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BoardConnection, BoardConnectionAnchor, BoardConnectionAnchorSchema, BoardConnectionDirection, BoardConnectionEndpoint, BoardConnectionEndpointSchema, BoardConnectionInput, BoardConnectionLine, BoardConnectionPatch, BoardConnectionPatchSchema, BoardConnectionRecord, BoardConnectionRouting, BoardConnectionRoutingConfig, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionSide, BoardConnectionStyle, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardRelationSchema, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION, connectionItemIds, connectionOtherItemId, connectionTouchesItem, createBoardConnection, flipBoardConnection, normalizeBoardConnectionStyle } from "./board-connection.js";
3
+ import { BoardAnimationTarget, BoardAnimationTargetSchema, BoardComposition, BoardCompositionInput, BoardCompositionInputSchema, BoardCompositionSchema, BoardEasing, BoardEasingSchema, BoardProceduralClip, BoardProceduralClipSchema, BoardTimelineMarker, BoardTimelineMarkerSchema, BoardTrack, BoardTrackInterpolation, BoardTrackSchema } from "./board-composition.js";
4
+ import { BoardAssetRef, BoardAssetRefSchema, BoardEffect, BoardEffectInput, BoardEffectInputSchema, BoardEffectSchema } from "./board-effect.js";
5
+ import { BoardAuthoringItem, BoardAuthoringItemSchema, BoardAuthoringSnapshot, BoardSemanticCommand, BoardSemanticCommandSchema } from "./board-authoring.js";
6
+ import { BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BoardCameraFocus, BoardCameraFocusParams, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraState, BoardCameraStateSchema, BoardDiagnostic, BoardManifest, BoardManifestSchema, BoardMutationReceipt, BoardPlaybackSnapshot, BoardPlaybackStatus, BoardValidationResult, isBoardPath, parseBoardManifest, serializeBoardManifest } from "./board.js";
7
7
  import "./board-capability-registry.js";
8
8
  import "./board-codec.js";
9
9
  import "./board-content.js";
10
- import "./board-upgrade.js";
10
+ import { BOARD_COLOR_IDS, BOARD_GEO_KINDS, BoardColorId, BoardGeoKind } from "./board-node.js";
11
11
  import "./realtime/board-awareness.js";
12
- import "./work.js";
12
+ import "./app.js";
13
13
  import "./realtime/types.js";
14
- export { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_COLOR_IDS, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BOARD_DELETE_REASONS, BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BOARD_GEO_KINDS, BoardAnimationTarget, BoardAnimationTargetSchema, BoardAssetRef, BoardAssetRefSchema, BoardCameraFocus, BoardCameraFocusParams, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraState, BoardCameraStateSchema, type BoardCapability, BoardColorId, BoardComposition, BoardCompositionSchema, BoardConnection, BoardConnectionAnchor, BoardConnectionAnchorSchema, BoardConnectionDirection, BoardConnectionEndpoint, BoardConnectionEndpointSchema, BoardConnectionInput, BoardConnectionLine, BoardConnectionPatch, BoardConnectionPatchSchema, BoardConnectionRecord, BoardConnectionRouting, BoardConnectionRoutingConfig, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionSide, BoardConnectionStyle, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardDeleteReason, BoardDiagnostic, BoardEasing, BoardEasingSchema, BoardEffect, BoardEffectSchema, BoardGeoKind, BoardManifest, BoardManifestSchema, BoardNodeInput, BoardNodeRecord, BoardOperation, BoardPlaybackPolicy, BoardPlaybackPolicySchema, BoardProceduralClip, BoardProceduralClipSchema, BoardRecord, BoardRelationSchema, type BoardRenderCost, BoardTimelineMarker, BoardTimelineMarkerSchema, BoardTrack, BoardTrackInterpolation, BoardTrackSchema, BoardValidationResult, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION, InvalidBoardFileError, connectionNodeIds, connectionOtherNodeId, connectionTouchesNode, createBoardConnection, flipBoardConnection, isBoardPath, normalizeBoardConnectionStyle, parseBoardManifest, serializeBoardManifest };
14
+ export { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_COLOR_IDS, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BOARD_GEO_KINDS, BoardAnimationTarget, BoardAnimationTargetSchema, type BoardAssetRef, BoardAuthoringItem, BoardAuthoringItemSchema, BoardAuthoringSnapshot, BoardCameraFocus, BoardCameraFocusParams, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraState, BoardCameraStateSchema, type BoardCapability, BoardColorId, BoardComposition, BoardCompositionInput, BoardCompositionInputSchema, BoardCompositionSchema, BoardConnection, BoardConnectionAnchor, BoardConnectionAnchorSchema, BoardConnectionDirection, BoardConnectionEndpoint, BoardConnectionEndpointSchema, BoardConnectionInput, BoardConnectionLine, BoardConnectionPatch, BoardConnectionPatchSchema, BoardConnectionRecord, BoardConnectionRouting, BoardConnectionRoutingConfig, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionSide, BoardConnectionStyle, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardDiagnostic, BoardEasing, BoardEasingSchema, type BoardEffect, BoardGeoKind, BoardManifest, BoardManifestSchema, BoardMutationReceipt, BoardPlaybackSnapshot, BoardPlaybackStatus, BoardProceduralClip, BoardProceduralClipSchema, BoardRelationSchema, type BoardRenderCost, BoardSemanticCommand, BoardSemanticCommandSchema, BoardTimelineMarker, BoardTimelineMarkerSchema, BoardTrack, BoardTrackInterpolation, BoardTrackSchema, BoardValidationResult, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION, connectionItemIds, connectionOtherItemId, connectionTouchesItem, createBoardConnection, flipBoardConnection, isBoardPath, normalizeBoardConnectionStyle, parseBoardManifest, serializeBoardManifest };
@@ -1,3 +1,3 @@
1
1
  import "../board.js";
2
2
  import "./board-awareness.js";
3
- import "../work.js";
3
+ import "../app.js";
package/dist/types.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { BoardCapability, BoardCoordinateSpace, BoardRenderCost } from "./protocol/dist/board-constants.js";
2
2
  import { BoardAnimationTarget, BoardComposition, BoardEasing, BoardProceduralClip, BoardTimelineMarker, BoardTrack } from "./protocol/dist/board-composition.js";
3
- import { BoardAssetRef, BoardCameraFocus, BoardCameraFocusParams, BoardCameraState, BoardDeleteReason, BoardDiagnostic, BoardEffect, BoardManifest, BoardNodeInput, BoardNodeRecord, BoardOperation, BoardPlaybackPolicy, BoardRecord, BoardValidationResult } from "./protocol/dist/board.js";
3
+ import { BoardAssetRef, BoardEffect, BoardEffectInput } from "./protocol/dist/board-effect.js";
4
+ import { BoardAuthoringItem, BoardAuthoringSnapshot, BoardSemanticCommand } from "./protocol/dist/board-authoring.js";
5
+ import { BoardCameraFocus, BoardCameraFocusParams, BoardCameraState, BoardDiagnostic, BoardManifest, BoardMutationReceipt, BoardPlaybackSnapshot, BoardValidationResult } from "./protocol/dist/board.js";
4
6
  import "./protocol/dist/index.js";
5
7
  //#region src/types.d.ts
6
8
  type UserProfile = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neta-art/cohub",
3
- "version": "6.0.0",
3
+ "version": "8.0.0",
4
4
  "description": "Cohub SDK for spaces, sessions, boards, and realtime agent collaboration.",
5
5
  "license": "Apache-2.0",
6
6
  "private": false,
@@ -82,7 +82,6 @@
82
82
  "tsdown": "^0.22.7",
83
83
  "tsx": "4.23.1",
84
84
  "typescript": "^7.0.2",
85
- "@cohub/core": "1.1.1",
86
85
  "@cohub/protocol": "2.0.0"
87
86
  },
88
87
  "peerDependencies": {
@@ -1,27 +0,0 @@
1
- import { BoardConnectionRecord } from "../protocol/dist/board-connection.js";
2
- import { BoardManifest, BoardNodeInput, BoardNodeRecord, BoardRecord, InvalidBoardFileError, isBoardPath, parseBoardManifest, serializeBoardManifest } from "../protocol/dist/board.js";
3
- import "../protocol/dist/index.js";
4
- import { BoardAppearance, BoardDocument, BoardItem } from "../protocol/dist/board-document.js";
5
- //#region src/board/codec.d.ts
6
- declare const DEFAULT_BOARD_APPEARANCE: BoardAppearance;
7
- declare const ITEM_BASE_KEYS: readonly ["id", "type", "frame", "locked", "style", "metadata"];
8
- /**
9
- * Original wire data follows an item through immutable object spreads while
10
- * remaining invisible to JSON serialization. Codecs can then patch only the
11
- * fields this client understands instead of rebuilding and truncating a node.
12
- */
13
- declare const BOARD_NODE_SOURCE: unique symbol;
14
- type WireBackedBoardItem = BoardItem & {
15
- [BOARD_NODE_SOURCE]?: BoardNodeInput;
16
- };
17
- declare function nodeInputFromRecord(node: BoardNodeRecord): BoardNodeInput;
18
- declare function sourceForItem(item: BoardItem): BoardNodeInput | undefined;
19
- declare function isRecord(value: unknown): value is Record<string, unknown>;
20
- declare function boardNodeToItem(node: BoardNodeRecord): BoardItem;
21
- declare function boardBootstrapToDocument(input: {
22
- board: BoardRecord;
23
- nodes: BoardNodeRecord[];
24
- connections?: BoardConnectionRecord[];
25
- }): BoardDocument;
26
- //#endregion
27
- export { BOARD_NODE_SOURCE, type BoardManifest, type BoardNodeRecord, type BoardRecord, DEFAULT_BOARD_APPEARANCE, ITEM_BASE_KEYS, InvalidBoardFileError, WireBackedBoardItem, boardBootstrapToDocument, boardNodeToItem, isBoardPath, isRecord, nodeInputFromRecord, parseBoardManifest, serializeBoardManifest, sourceForItem };
@@ -1,277 +0,0 @@
1
- import { BOARD_DOCUMENT_KIND, InvalidBoardFileError, isBoardPath, parseBoardManifest, serializeBoardManifest } from "../protocol/dist/board.js";
2
- import { BoardAppearanceSchema, BoardFileSnapshotSchema, BoardTaskSnapshotSchema, UNKNOWN_BOARD_ITEM_TYPE, parseBoardDocument } from "../protocol/dist/board-document.js";
3
- import "../protocol/dist/index.js";
4
- import { TEXT_FONT_SIZE, clampBoardTextFontSize } from "./core/text-metrics.js";
5
- //#region src/board/codec.ts
6
- const DEFAULT_BOARD_APPEARANCE = BoardAppearanceSchema.parse({
7
- theme: "clean",
8
- background: { kind: "solid" },
9
- grid: {
10
- visible: false,
11
- size: 24,
12
- opacity: .12
13
- },
14
- mood: "clean"
15
- });
16
- const ITEM_BASE_KEYS = [
17
- "id",
18
- "type",
19
- "frame",
20
- "locked",
21
- "style",
22
- "metadata"
23
- ];
24
- /**
25
- * Original wire data follows an item through immutable object spreads while
26
- * remaining invisible to JSON serialization. Codecs can then patch only the
27
- * fields this client understands instead of rebuilding and truncating a node.
28
- */
29
- const BOARD_NODE_SOURCE = Symbol("board-node-source");
30
- function nodeInputFromRecord(node) {
31
- return {
32
- nodeId: node.nodeId,
33
- type: node.type,
34
- parentId: node.parentId ?? null,
35
- orderKey: node.orderKey ?? null,
36
- x: node.x,
37
- y: node.y,
38
- width: node.width,
39
- height: node.height,
40
- rotation: node.rotation,
41
- refKind: node.refKind ?? null,
42
- refPath: node.refPath ?? null,
43
- refUrl: node.refUrl ?? null,
44
- view: node.view ?? {},
45
- style: node.style ?? {},
46
- data: node.data ?? {}
47
- };
48
- }
49
- function sourceForItem(item) {
50
- return item[BOARD_NODE_SOURCE];
51
- }
52
- function isRecord(value) {
53
- return Boolean(value && typeof value === "object" && !Array.isArray(value));
54
- }
55
- function frameFromNode(node) {
56
- return {
57
- x: node.x,
58
- y: node.y,
59
- width: node.width,
60
- height: node.height,
61
- rotation: node.rotation
62
- };
63
- }
64
- function lockedFromData(data) {
65
- return data.locked === true ? true : void 0;
66
- }
67
- function styleFromNode(node) {
68
- return Object.keys(node.style ?? {}).length ? node.style : void 0;
69
- }
70
- function spaceFilePathFromNode(node) {
71
- if (node.refKind === "space_file" && node.refPath) return node.refPath;
72
- if (typeof node.refPath === "string" && node.refPath) return node.refPath;
73
- return null;
74
- }
75
- /** Read a stored world point, defaulting to the origin when absent. */
76
- function pointFromData(value) {
77
- if (isRecord(value) && typeof value.x === "number" && typeof value.y === "number") return {
78
- x: value.x,
79
- y: value.y
80
- };
81
- return {
82
- x: 0,
83
- y: 0
84
- };
85
- }
86
- function unknownItemFromNode(node, frame, style, locked, data) {
87
- const raw = {
88
- ...data,
89
- id: node.nodeId,
90
- type: node.type,
91
- frame
92
- };
93
- if (style) raw.style = style;
94
- if (locked) raw.locked = true;
95
- return {
96
- id: node.nodeId,
97
- type: UNKNOWN_BOARD_ITEM_TYPE,
98
- frame,
99
- ...locked ? { locked } : {},
100
- style,
101
- raw
102
- };
103
- }
104
- function boardNodeToItemValue(node) {
105
- const frame = frameFromNode(node);
106
- const style = styleFromNode(node);
107
- const data = node.data ?? {};
108
- const locked = lockedFromData(data);
109
- switch (node.type) {
110
- case "text": return {
111
- id: node.nodeId,
112
- type: "text",
113
- text: typeof data.text === "string" ? data.text : "",
114
- color: typeof data.color === "string" ? data.color : "neutral",
115
- fontSize: clampBoardTextFontSize(typeof data.fontSize === "number" ? data.fontSize : TEXT_FONT_SIZE),
116
- frame,
117
- ...locked ? { locked } : {},
118
- style
119
- };
120
- case "geo": return {
121
- id: node.nodeId,
122
- type: "geo",
123
- geo: typeof data.geo === "string" ? data.geo : "rectangle",
124
- text: typeof data.text === "string" ? data.text : "",
125
- color: typeof data.color === "string" ? data.color : "brand",
126
- fillOpacity: typeof data.fillOpacity === "number" ? data.fillOpacity : 0,
127
- frame,
128
- ...locked ? { locked } : {},
129
- style
130
- };
131
- case "draw": return {
132
- id: node.nodeId,
133
- type: "draw",
134
- points: Array.isArray(data.points) ? data.points : [],
135
- color: typeof data.color === "string" ? data.color : "brand",
136
- size: typeof data.size === "number" ? data.size : 4,
137
- frame,
138
- ...locked ? { locked } : {},
139
- style
140
- };
141
- case "arrow": return {
142
- id: node.nodeId,
143
- type: "arrow",
144
- start: pointFromData(data.start),
145
- end: pointFromData(data.end),
146
- bend: typeof data.bend === "number" ? data.bend : 0,
147
- color: typeof data.color === "string" ? data.color : "brand",
148
- size: typeof data.size === "number" ? data.size : 2.5,
149
- arrowStart: Boolean(data.arrowStart),
150
- arrowEnd: data.arrowEnd === void 0 ? true : Boolean(data.arrowEnd),
151
- label: typeof data.label === "string" ? data.label : "",
152
- frame,
153
- ...locked ? { locked } : {},
154
- style
155
- };
156
- case "frame": return {
157
- id: node.nodeId,
158
- type: "frame",
159
- label: typeof data.label === "string" ? data.label : "Frame",
160
- color: typeof data.color === "string" ? data.color : "neutral",
161
- frame,
162
- ...locked ? { locked } : {},
163
- style
164
- };
165
- case "image": {
166
- const path = spaceFilePathFromNode(node) ?? "missing";
167
- return {
168
- id: node.nodeId,
169
- type: "image",
170
- ref: {
171
- kind: "space-file",
172
- path
173
- },
174
- snapshot: node.view,
175
- ...data.crop && typeof data.crop === "object" ? { crop: data.crop } : {},
176
- frame,
177
- ...locked ? { locked } : {},
178
- style
179
- };
180
- }
181
- case "video": {
182
- const path = spaceFilePathFromNode(node) ?? "missing";
183
- return {
184
- id: node.nodeId,
185
- type: "video",
186
- ref: {
187
- kind: "space-file",
188
- path
189
- },
190
- snapshot: node.view,
191
- frame,
192
- ...locked ? { locked } : {},
193
- style
194
- };
195
- }
196
- case "audio": {
197
- const path = spaceFilePathFromNode(node) ?? "missing";
198
- return {
199
- id: node.nodeId,
200
- type: "audio",
201
- ref: {
202
- kind: "space-file",
203
- path
204
- },
205
- snapshot: node.view,
206
- frame,
207
- ...locked ? { locked } : {},
208
- style
209
- };
210
- }
211
- case "file": {
212
- const path = spaceFilePathFromNode(node) ?? "missing";
213
- const parsed = BoardFileSnapshotSchema.safeParse(node.view ?? {});
214
- return {
215
- id: node.nodeId,
216
- type: "file",
217
- ref: {
218
- kind: "space-file",
219
- path
220
- },
221
- ...parsed.success ? { snapshot: parsed.data } : {},
222
- frame,
223
- ...locked ? { locked } : {},
224
- style
225
- };
226
- }
227
- case "task": {
228
- const parsed = BoardTaskSnapshotSchema.safeParse(node.view ?? {});
229
- if (parsed.success && typeof data.taskRunId === "string") return {
230
- id: node.nodeId,
231
- type: "task",
232
- taskRunId: data.taskRunId,
233
- snapshot: parsed.data,
234
- frame,
235
- ...locked ? { locked } : {},
236
- style
237
- };
238
- return unknownItemFromNode(node, frame, style, locked, data);
239
- }
240
- default: return unknownItemFromNode(node, frame, style, locked, data);
241
- }
242
- }
243
- function boardNodeToItem(node) {
244
- const item = boardNodeToItemValue(node);
245
- const metadata = isRecord(node.data?.metadata) ? node.data.metadata : void 0;
246
- return {
247
- ...item,
248
- ...metadata ? { metadata } : {},
249
- [BOARD_NODE_SOURCE]: nodeInputFromRecord(node)
250
- };
251
- }
252
- function boardBootstrapToDocument(input) {
253
- const appearance = BoardAppearanceSchema.safeParse(input.board.metadata.appearance);
254
- const connections = (input.connections ?? []).map(({ boardId: _boardId, revision: _revision, createdAt: _createdAt, updatedAt: _updatedAt, ...connection }) => connection);
255
- const document = parseBoardDocument({
256
- kind: BOARD_DOCUMENT_KIND,
257
- version: 1,
258
- appearance: appearance.success ? appearance.data : DEFAULT_BOARD_APPEARANCE,
259
- viewport: {
260
- x: 0,
261
- y: 0,
262
- zoom: 1
263
- },
264
- items: input.nodes.map(boardNodeToItem),
265
- connections
266
- });
267
- const sources = new Map(input.nodes.map((node) => [node.nodeId, nodeInputFromRecord(node)]));
268
- return {
269
- ...document,
270
- items: document.items.map((item) => ({
271
- ...item,
272
- [BOARD_NODE_SOURCE]: sources.get(item.id)
273
- }))
274
- };
275
- }
276
- //#endregion
277
- export { BOARD_NODE_SOURCE, DEFAULT_BOARD_APPEARANCE, ITEM_BASE_KEYS, InvalidBoardFileError, boardBootstrapToDocument, boardNodeToItem, isBoardPath, isRecord, nodeInputFromRecord, parseBoardManifest, serializeBoardManifest, sourceForItem };
@@ -1,26 +0,0 @@
1
- import { z } from "zod";
2
- //#region ../protocol/dist/board-content.js
3
- const BOARD_CONTENT_KINDS = [
4
- "text",
5
- "image",
6
- "video",
7
- "audio",
8
- "file",
9
- "json",
10
- "collection"
11
- ];
12
- const BoardContentKindSchema = z.enum(BOARD_CONTENT_KINDS);
13
- const BoardPortSchema = z.object({
14
- id: z.string().min(1).max(120),
15
- kind: BoardContentKindSchema,
16
- role: z.string().min(1).max(80).optional(),
17
- required: z.boolean().optional(),
18
- multiple: z.boolean().optional(),
19
- maxItems: z.number().int().positive().optional()
20
- }).strict();
21
- z.object({
22
- inputs: z.array(BoardPortSchema),
23
- outputs: z.array(BoardPortSchema)
24
- }).strict();
25
- //#endregion
26
- export { BOARD_CONTENT_KINDS, BoardContentKindSchema, BoardPortSchema };
@@ -1,2 +0,0 @@
1
- import "./board.js";
2
- export {};
@@ -1,10 +0,0 @@
1
- //#region ../protocol/dist/identifiers.js
2
- const UUID_SHAPE_PATTERN = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}";
3
- const UUID_PATTERN = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}";
4
- const SHORT_UUID_PATTERN = "[0-9a-fA-F]{32}";
5
- const UUID_OR_SHORT_UUID_PATTERN = `^(?:${UUID_PATTERN}|${SHORT_UUID_PATTERN})$`;
6
- new RegExp(`^${UUID_SHAPE_PATTERN}$`);
7
- new RegExp(`^${UUID_PATTERN}$`);
8
- new RegExp(UUID_OR_SHORT_UUID_PATTERN);
9
- //#endregion
10
- export { SHORT_UUID_PATTERN, UUID_OR_SHORT_UUID_PATTERN, UUID_PATTERN, UUID_SHAPE_PATTERN };
@@ -1,19 +0,0 @@
1
- import { BOARD_BUILTIN_CAPABILITIES, DEFAULT_BOARD_RENDER_LIMITS } from "./board-constants.js";
2
- import { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BoardConnectionAnchorSchema, BoardConnectionEndpointSchema, BoardConnectionPatchSchema, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardRelationSchema, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION, connectionNodeIds, connectionOtherNodeId, connectionTouchesNode, createBoardConnection, flipBoardConnection, normalizeBoardConnectionStyle } from "./board-connection.js";
3
- import { BOARD_ANIMATION_CHANNELS, BOARD_EASINGS, BoardAnimationTargetSchema, BoardCompositionInputSchema, BoardCompositionPlaybackSchema, BoardCompositionSchema, BoardEasingSchema, BoardProceduralClipSchema, BoardTimelineMarkerSchema, BoardTimelineSchema, BoardTrackSchema, parseBoardCompositionInput } from "./board-composition.js";
4
- import { BoardArrowAuthoringItemSchema, BoardAudioAuthoringItemSchema, BoardAuthoringItemSchema, BoardBuiltinAuthoringItemSchema, BoardDrawAuthoringItemSchema, BoardExtensionAuthoringItemSchema, BoardFileAuthoringItemSchema, BoardFrameAuthoringItemSchema, BoardGeoAuthoringItemSchema, BoardImageAuthoringItemSchema, BoardItemPatchSchema, BoardItemSourceSchema, BoardItemStyleSchema, BoardSemanticCommandSchema, BoardTaskAuthoringItemSchema, BoardTextAuthoringItemSchema, BoardVideoAuthoringItemSchema, isSafeBoardSourcePath } from "./board-authoring.js";
5
- import { BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BOARD_MANIFEST_KIND, BoardAssetRefSchema, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraStateSchema, BoardEffectSchema, BoardManifestSchema, InvalidBoardFileError, isBoardPath, parseBoardManifest, serializeBoardManifest } from "./board.js";
6
- import { estimateBuiltinBoardClipCost, validateBuiltinBoardClip } from "./board-capability-registry.js";
7
- import { BOARD_COLOR_IDS, BOARD_GEO_KINDS, BOARD_NATIVE_NODE_TYPES, BoardColorIdSchema, BoardGeoKindSchema } from "./board-node.js";
8
- import "./board-codec.js";
9
- import { BOARD_CONTENT_KINDS, BoardContentKindSchema, BoardPortSchema } from "./board-content.js";
10
- import "./board-upgrade.js";
11
- import { BoardAwarenessDrawPointSchema, BoardAwarenessFrameSchema, BoardAwarenessGestureSchema, BoardAwarenessNodePreviewSchema, BoardAwarenessPointSchema, BoardAwarenessStateUpdateSchema, BoardAwarenessUpdateSchema } from "./realtime/board-awareness.js";
12
- import { SHORT_UUID_PATTERN, UUID_OR_SHORT_UUID_PATTERN, UUID_PATTERN, UUID_SHAPE_PATTERN } from "./identifiers.js";
13
- import { COHUB_SOURCE_HEADER } from "./provenance.js";
14
- import { RESERVED_PLATFORM_PATH_SEGMENTS } from "./public-identifiers.js";
15
- import "./ui-command.js";
16
- import "./work-surface.js";
17
- import "./work-view-stats.js";
18
- import { WORK_PROMOTION_EVENT_KEYS } from "./work-promotion-stats.js";
19
- export { AUTO_BOARD_CONNECTION_ANCHOR, BOARD_ANIMATION_CHANNELS, BOARD_BUILTIN_CAPABILITIES, BOARD_COLOR_IDS, BOARD_CONNECTION_DIRECTIONS, BOARD_CONNECTION_LINES, BOARD_CONNECTION_ROUTINGS, BOARD_CONNECTION_SIDES, BOARD_CONTENT_KINDS, BOARD_DOCUMENT_KIND, BOARD_EASINGS, BOARD_EXTENSION, BOARD_GEO_KINDS, BOARD_MANIFEST_KIND, BOARD_NATIVE_NODE_TYPES, BoardAnimationTargetSchema, BoardArrowAuthoringItemSchema, BoardAssetRefSchema, BoardAudioAuthoringItemSchema, BoardAuthoringItemSchema, BoardAwarenessDrawPointSchema, BoardAwarenessFrameSchema, BoardAwarenessGestureSchema, BoardAwarenessNodePreviewSchema, BoardAwarenessPointSchema, BoardAwarenessStateUpdateSchema, BoardAwarenessUpdateSchema, BoardBuiltinAuthoringItemSchema, BoardCameraFocusParamsSchema, BoardCameraFocusSchema, BoardCameraStateSchema, BoardColorIdSchema, BoardCompositionInputSchema, BoardCompositionPlaybackSchema, BoardCompositionSchema, BoardConnectionAnchorSchema, BoardConnectionEndpointSchema, BoardConnectionPatchSchema, BoardConnectionRoutingSchema, BoardConnectionSchema, BoardConnectionStyleSchema, BoardConnectionWaypointSchema, BoardContentKindSchema, BoardDrawAuthoringItemSchema, BoardEasingSchema, BoardEffectSchema, BoardExtensionAuthoringItemSchema, BoardFileAuthoringItemSchema, BoardFrameAuthoringItemSchema, BoardGeoAuthoringItemSchema, BoardGeoKindSchema, BoardImageAuthoringItemSchema, BoardItemPatchSchema, BoardItemSourceSchema, BoardItemStyleSchema, BoardManifestSchema, BoardPortSchema, BoardProceduralClipSchema, BoardRelationSchema, BoardSemanticCommandSchema, BoardTaskAuthoringItemSchema, BoardTextAuthoringItemSchema, BoardTimelineMarkerSchema, BoardTimelineSchema, BoardTrackSchema, BoardVideoAuthoringItemSchema, COHUB_SOURCE_HEADER, DEFAULT_BOARD_CONNECTION_ROUTING, DEFAULT_BOARD_CONNECTION_STYLE, DEFAULT_BOARD_RELATION, DEFAULT_BOARD_RENDER_LIMITS, InvalidBoardFileError, RESERVED_PLATFORM_PATH_SEGMENTS, SHORT_UUID_PATTERN, UUID_OR_SHORT_UUID_PATTERN, UUID_PATTERN, UUID_SHAPE_PATTERN, WORK_PROMOTION_EVENT_KEYS, connectionNodeIds, connectionOtherNodeId, connectionTouchesNode, createBoardConnection, estimateBuiltinBoardClipCost, flipBoardConnection, isBoardPath, isSafeBoardSourcePath, normalizeBoardConnectionStyle, parseBoardCompositionInput, parseBoardManifest, serializeBoardManifest, validateBuiltinBoardClip };
@@ -1,15 +0,0 @@
1
- import "./identifiers.js";
2
- //#region ../protocol/dist/provenance.js
3
- /** Request provenance via X-Cohub-Source-* headers. Never used for authorization. */
4
- const COHUB_SOURCE_HEADER = {
5
- space: "X-Cohub-Source-Space",
6
- session: "X-Cohub-Source-Session",
7
- turn: "X-Cohub-Source-Turn",
8
- toolCall: "X-Cohub-Source-Tool-Call",
9
- client: "X-Cohub-Source-Client",
10
- sandboxVersion: "X-Cohub-Source-Sandbox",
11
- via: "X-Cohub-Source-Via"
12
- };
13
- Object.values(COHUB_SOURCE_HEADER);
14
- //#endregion
15
- export { COHUB_SOURCE_HEADER };
@@ -1,38 +0,0 @@
1
- //#region ../protocol/dist/public-identifiers.js
2
- /**
3
- * Platform-owned path segments that must not be newly assigned to public
4
- * identities. Existing stored values remain readable through parse helpers.
5
- */
6
- const RESERVED_PLATFORM_PATH_SEGMENTS = Object.freeze([
7
- "admin",
8
- "api",
9
- "assets",
10
- "auth",
11
- "callback",
12
- "changelog",
13
- "docs",
14
- "explore",
15
- "invite",
16
- "landing",
17
- "login",
18
- "logout",
19
- "new",
20
- "org",
21
- "pricing",
22
- "pwa",
23
- "referrals",
24
- "sessions",
25
- "settings",
26
- "spaces",
27
- "static",
28
- "teams",
29
- "trending",
30
- "u",
31
- "user",
32
- "users",
33
- "work-auth"
34
- ]);
35
- new Set(RESERVED_PLATFORM_PATH_SEGMENTS);
36
- [...RESERVED_PLATFORM_PATH_SEGMENTS];
37
- //#endregion
38
- export { RESERVED_PLATFORM_PATH_SEGMENTS };