agentic-canvas 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -4
- package/SKILL.md +3 -0
- package/dist/chunk-AGODNBN7.js +166 -0
- package/dist/{chunk-NSZ2AC5O.js → chunk-GGQPE65T.js} +88 -297
- package/dist/chunk-NWQED42L.js +13 -0
- package/dist/{chunk-I3EJ5JB7.js → chunk-UKST5A57.js} +4 -13
- package/dist/chunk-V477KSZQ.js +2005 -0
- package/dist/chunk-W7NRP3EX.js +164 -0
- package/dist/cli.js +33 -7
- package/dist/client.d.ts +108 -0
- package/dist/client.js +78 -0
- package/dist/index.d.ts +10 -247
- package/dist/index.js +16 -11
- package/dist/live-worker.d.ts +22 -0
- package/dist/live-worker.js +25 -0
- package/dist/live.d.ts +102 -0
- package/dist/live.js +192 -0
- package/dist/read-BY6f-mmy.d.ts +167 -0
- package/dist/service-Cpl6wKeY.d.ts +109 -0
- package/dist/store-file.js +4 -2
- package/dist/worker.d.ts +55 -0
- package/dist/worker.js +15 -0
- package/llms.txt +3 -0
- package/package.json +23 -3
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import * as Y from 'yjs';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
declare const principalSchema: z.ZodObject<{
|
|
5
|
+
kind: z.ZodEnum<["human", "agent_of_human", "agent_of_agent", "agent", "user_token"]>;
|
|
6
|
+
id: z.ZodString;
|
|
7
|
+
}, "strict", z.ZodTypeAny, {
|
|
8
|
+
id: string;
|
|
9
|
+
kind: "human" | "agent_of_human" | "agent_of_agent" | "agent" | "user_token";
|
|
10
|
+
}, {
|
|
11
|
+
id: string;
|
|
12
|
+
kind: "human" | "agent_of_human" | "agent_of_agent" | "agent" | "user_token";
|
|
13
|
+
}>;
|
|
14
|
+
type Principal = z.infer<typeof principalSchema>;
|
|
15
|
+
|
|
16
|
+
type ErrorCode = "INVALID" | "DUPLICATE_ID" | "NOT_FOUND" | "BAD_REFERENCE" | "LIMIT" | "UNAVAILABLE" | "FORBIDDEN";
|
|
17
|
+
declare class CanvasError extends Error {
|
|
18
|
+
readonly code: ErrorCode;
|
|
19
|
+
constructor(code: ErrorCode, message: string);
|
|
20
|
+
}
|
|
21
|
+
declare const SHAPE_TYPES: readonly ["rect", "ellipse", "diamond", "text", "sticky", "frame", "image"];
|
|
22
|
+
type ShapeType = (typeof SHAPE_TYPES)[number];
|
|
23
|
+
declare const MAX_ELEMENTS = 10000;
|
|
24
|
+
declare const MAX_TEXT = 10000;
|
|
25
|
+
type Endpoint = {
|
|
26
|
+
id: string;
|
|
27
|
+
} | {
|
|
28
|
+
x: number;
|
|
29
|
+
y: number;
|
|
30
|
+
};
|
|
31
|
+
interface Stamp {
|
|
32
|
+
id: string;
|
|
33
|
+
z: number;
|
|
34
|
+
groupId?: string;
|
|
35
|
+
/** Who made the element. Never changes. */
|
|
36
|
+
author: Principal;
|
|
37
|
+
/** Who made the last edit. */
|
|
38
|
+
editedBy: Principal;
|
|
39
|
+
}
|
|
40
|
+
interface Shape extends Stamp {
|
|
41
|
+
type: ShapeType;
|
|
42
|
+
x: number;
|
|
43
|
+
y: number;
|
|
44
|
+
w: number;
|
|
45
|
+
h: number;
|
|
46
|
+
text: string;
|
|
47
|
+
fill?: string;
|
|
48
|
+
stroke?: string;
|
|
49
|
+
src?: string;
|
|
50
|
+
}
|
|
51
|
+
interface Connector extends Stamp {
|
|
52
|
+
type: "connector";
|
|
53
|
+
from: Endpoint;
|
|
54
|
+
to: Endpoint;
|
|
55
|
+
text: string;
|
|
56
|
+
startArrow: boolean;
|
|
57
|
+
endArrow: boolean;
|
|
58
|
+
stroke?: string;
|
|
59
|
+
}
|
|
60
|
+
interface Group extends Stamp {
|
|
61
|
+
type: "group";
|
|
62
|
+
}
|
|
63
|
+
type CanvasElement = Shape | Connector | Group;
|
|
64
|
+
/**
|
|
65
|
+
* A whiteboard on a Yjs doc. Headless: no UI code. Every write names its actor.
|
|
66
|
+
*
|
|
67
|
+
* A synced Yjs update is untrusted input. Every read checks each stored element against the same
|
|
68
|
+
* rules the write methods enforce, and returns only the checked fields. An entry that fails is
|
|
69
|
+
* hidden at once. `repair()` deletes it, and `Board.decode` runs `repair()`. This holds even
|
|
70
|
+
* when a caller writes to `doc` directly.
|
|
71
|
+
*/
|
|
72
|
+
declare class Board {
|
|
73
|
+
readonly doc: Y.Doc;
|
|
74
|
+
private readonly elements;
|
|
75
|
+
private readonly meta;
|
|
76
|
+
private maxElements;
|
|
77
|
+
constructor(doc?: Y.Doc, options?: {
|
|
78
|
+
maxElements?: number;
|
|
79
|
+
});
|
|
80
|
+
/** Load a saved board with no element checks. Only the owner repair path uses it. */
|
|
81
|
+
static open(update: Uint8Array): Board;
|
|
82
|
+
/**
|
|
83
|
+
* Load a saved board. Refuses a doc past the element cap. Then it deletes every entry that fails
|
|
84
|
+
* the element checks, and repairs what concurrent writers left broken.
|
|
85
|
+
*/
|
|
86
|
+
static decode(update: Uint8Array): Board;
|
|
87
|
+
encode(): Uint8Array;
|
|
88
|
+
/** An independent copy. Edits to it leave this board alone. */
|
|
89
|
+
clone(): Board;
|
|
90
|
+
get title(): string;
|
|
91
|
+
get titleBy(): Principal | undefined;
|
|
92
|
+
setTitle(title: string, actor: Principal): void;
|
|
93
|
+
/** One element. An invalid entry, or a connector with a missing bound end, is hidden. */
|
|
94
|
+
get(elementId: string): CanvasElement | undefined;
|
|
95
|
+
/** All visible elements from back to front. */
|
|
96
|
+
list(): CanvasElement[];
|
|
97
|
+
/**
|
|
98
|
+
* Delete what peers can leave broken: entries that fail the element checks, connectors whose
|
|
99
|
+
* bound end is gone, and members that name a deleted group. Idempotent, so every peer may run it.
|
|
100
|
+
* `drop` names elements the owner removes too, with what they hold: a shape takes its connectors,
|
|
101
|
+
* a group takes its members. Refuses a result still past the cap, and then changes nothing.
|
|
102
|
+
* Returns the ids fixed.
|
|
103
|
+
*/
|
|
104
|
+
repair(drop?: string[]): string[];
|
|
105
|
+
/**
|
|
106
|
+
* Make the author stamps of a merged board honest. `prior` is the board before the merge, and `trusted` says whether
|
|
107
|
+
* a principal really wrote in this session. A new element stamped by anyone else is deleted. An old element keeps its
|
|
108
|
+
* author, and a changed one needs a trusted editor or it goes back to its prior state. An editor stamp changed alone
|
|
109
|
+
* to an untrusted principal is put back. Unknown keys, nested Yjs types, and bad or foreign title values are deleted
|
|
110
|
+
* or undone. Returns the ids it deleted or restored.
|
|
111
|
+
*/
|
|
112
|
+
restamp(prior: Board, trusted: (who: Principal) => boolean): string[];
|
|
113
|
+
addShape(input: unknown, actor: Principal): Shape;
|
|
114
|
+
addConnector(input: unknown, actor: Principal): Connector;
|
|
115
|
+
update(elementId: string, patch: unknown, actor: Principal): CanvasElement;
|
|
116
|
+
/** Shift an element, or a whole group. Returns the ids that moved. Bound connector ends follow their shapes. */
|
|
117
|
+
move(elementId: string, dx: number, dy: number, actor: Principal): string[];
|
|
118
|
+
/** Delete an element. A shape takes its connectors and a group takes its members. Returns the ids removed. */
|
|
119
|
+
remove(elementId: string): string[];
|
|
120
|
+
group(ids: string[], actor: Principal, groupId?: string): Group;
|
|
121
|
+
/** Remove a group and hand its members to the parent group. */
|
|
122
|
+
ungroup(groupId: string, actor: Principal): void;
|
|
123
|
+
/** Put an element, or a group with its inner order kept, in front of or behind every other element. */
|
|
124
|
+
reorder(elementId: string, to: "front" | "back", actor: Principal): void;
|
|
125
|
+
/** One stored element that passes the checks and whose id matches its key, or undefined. */
|
|
126
|
+
private stored;
|
|
127
|
+
/** Every stored element that passes the checks, from back to front. Refuses a doc past the cap. */
|
|
128
|
+
private storedList;
|
|
129
|
+
/** Like storedList, with no cap check. Repair needs every entry, even on a board past the cap. */
|
|
130
|
+
private allStored;
|
|
131
|
+
/** A connector is detached when a bound end does not name a stored shape. */
|
|
132
|
+
private isDetached;
|
|
133
|
+
private require;
|
|
134
|
+
private checkEnd;
|
|
135
|
+
/** The z value just past the top or the bottom. Not clamped: the caller checks the range. */
|
|
136
|
+
private edgeZ;
|
|
137
|
+
/** The element and, for a group, everything below it. Cycle-safe. */
|
|
138
|
+
private subtree;
|
|
139
|
+
private subtreeIn;
|
|
140
|
+
private create;
|
|
141
|
+
/** Apply field changes and stamp the editor, all in one transaction. An undefined value clears the field. */
|
|
142
|
+
private write;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
interface Labels {
|
|
146
|
+
/** The author is an agent or acts for one. */
|
|
147
|
+
machineMade: boolean;
|
|
148
|
+
/** The last edit came from an agent or one acting for one. */
|
|
149
|
+
lastEditMachineMade: boolean;
|
|
150
|
+
}
|
|
151
|
+
type NodeData = Shape & Labels;
|
|
152
|
+
type EdgeData = Connector & Labels;
|
|
153
|
+
interface BoardData {
|
|
154
|
+
title: string;
|
|
155
|
+
nodes: NodeData[];
|
|
156
|
+
edges: EdgeData[];
|
|
157
|
+
groups: {
|
|
158
|
+
id: string;
|
|
159
|
+
members: string[];
|
|
160
|
+
}[];
|
|
161
|
+
/** Every non-empty text, back to front. */
|
|
162
|
+
texts: string[];
|
|
163
|
+
}
|
|
164
|
+
/** The board as plain data for an agent. Reads only. Embedded image bytes are left out. */
|
|
165
|
+
declare function readBoard(board: Board): BoardData;
|
|
166
|
+
|
|
167
|
+
export { type BoardData as B, type Connector as C, type ErrorCode as E, type Group as G, MAX_ELEMENTS as M, type NodeData as N, type Principal as P, type ShapeType as S, type Shape as a, type Endpoint as b, Board as c, type CanvasElement as d, CanvasError as e, type EdgeData as f, MAX_TEXT as g, SHAPE_TYPES as h, principalSchema as p, readBoard as r };
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { S as ShapeType, c as Board, P as Principal, B as BoardData, a as Shape, C as Connector } from './read-BY6f-mmy.js';
|
|
2
|
+
import { Store } from 'agentic-identity';
|
|
3
|
+
|
|
4
|
+
declare const MAX_FLOW_NODES = 500;
|
|
5
|
+
declare const MAX_FLOW_EDGES = 2000;
|
|
6
|
+
interface FlowNode {
|
|
7
|
+
id: string;
|
|
8
|
+
text: string;
|
|
9
|
+
shape: Extract<ShapeType, "rect" | "ellipse" | "diamond">;
|
|
10
|
+
}
|
|
11
|
+
interface FlowEdge {
|
|
12
|
+
from: string;
|
|
13
|
+
to: string;
|
|
14
|
+
text: string;
|
|
15
|
+
}
|
|
16
|
+
interface FlowGraph {
|
|
17
|
+
direction: "TB" | "LR";
|
|
18
|
+
nodes: FlowNode[];
|
|
19
|
+
edges: FlowEdge[];
|
|
20
|
+
}
|
|
21
|
+
declare function parseFlow(source: string): FlowGraph;
|
|
22
|
+
interface Placement {
|
|
23
|
+
id: string;
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
w: number;
|
|
27
|
+
h: number;
|
|
28
|
+
}
|
|
29
|
+
/** Layered layout. The top-left of the result is (0, 0). The layout breaks cycles and handles self-loops. */
|
|
30
|
+
declare function layoutFlow(graph: FlowGraph): Placement[];
|
|
31
|
+
interface DrawOptions {
|
|
32
|
+
/**
|
|
33
|
+
* Put in front of every id. Default: a new random prefix for each call, so two agents that draw at
|
|
34
|
+
* the same time never write the same id. A prefix you pass is used as given, and it makes ids
|
|
35
|
+
* repeatable. Up to 16 of A-Z, a-z, 0-9, _ and -.
|
|
36
|
+
*/
|
|
37
|
+
idPrefix?: string;
|
|
38
|
+
/** Top-left of the drawing. Default: below the shapes already on the board. */
|
|
39
|
+
origin?: {
|
|
40
|
+
x: number;
|
|
41
|
+
y: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Draw a flow on the board. All or nothing: on any error the board stays as it was. */
|
|
45
|
+
declare function drawFlow(board: Board, source: string, actor: Principal, options?: DrawOptions): {
|
|
46
|
+
nodes: string[];
|
|
47
|
+
edges: string[];
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** One place for every board operation. The CLI, the MCP server, and the Worker call it. */
|
|
51
|
+
declare class CanvasService {
|
|
52
|
+
private readonly store;
|
|
53
|
+
constructor(store: Store);
|
|
54
|
+
create(actor: Principal, options?: {
|
|
55
|
+
id?: string;
|
|
56
|
+
title?: string;
|
|
57
|
+
}): Promise<{
|
|
58
|
+
id: string;
|
|
59
|
+
title: string;
|
|
60
|
+
}>;
|
|
61
|
+
/** Throws NOT_FOUND unless the board exists. A live room opens only for a board that exists. */
|
|
62
|
+
assertExists(id: string): Promise<void>;
|
|
63
|
+
read(id: string): Promise<BoardData & {
|
|
64
|
+
id: string;
|
|
65
|
+
}>;
|
|
66
|
+
/** Run `change` on the board and save it, all inside one transaction. */
|
|
67
|
+
change<R>(id: string, change: (board: Board) => R): Promise<R>;
|
|
68
|
+
add(id: string, shape: unknown, actor: Principal): Promise<Shape>;
|
|
69
|
+
connect(id: string, connector: unknown, actor: Principal): Promise<Connector>;
|
|
70
|
+
move(id: string, elementId: string, dx: number, dy: number, actor: Principal): Promise<{
|
|
71
|
+
moved: string[];
|
|
72
|
+
}>;
|
|
73
|
+
remove(id: string, elementId: string): Promise<{
|
|
74
|
+
removed: string[];
|
|
75
|
+
}>;
|
|
76
|
+
flow(id: string, text: string, actor: Principal, options?: DrawOptions): Promise<{
|
|
77
|
+
nodes: string[];
|
|
78
|
+
edges: string[];
|
|
79
|
+
}>;
|
|
80
|
+
exportSvg(id: string): Promise<string>;
|
|
81
|
+
/** The stored board as a Yjs update. A client applies it to a room to seed it: the room does not read it. */
|
|
82
|
+
state(id: string): Promise<Uint8Array>;
|
|
83
|
+
/**
|
|
84
|
+
* Merge a live room's state into the stored board. `authors` are the principals the room saw send updates.
|
|
85
|
+
* An element stamped by anyone else is deleted, and a changed author is put back (see `Board.restamp`),
|
|
86
|
+
* so a client that writes raw Yjs cannot put another author on its work. Broken entries are repaired and
|
|
87
|
+
* a board past the element cap is refused. Returns the ids the checks fixed.
|
|
88
|
+
*
|
|
89
|
+
* Limits: the save corrects the stored board only. The room keeps what its clients wrote, so a client that sees
|
|
90
|
+
* a non-empty `fixed` must join again, or its later edits are lost at the next save. The room remembers its
|
|
91
|
+
* authors for good, so a client may stamp an element with the name of anyone who once sent an update in that room.
|
|
92
|
+
* A client that adds a root type of its own makes every later save of that room fail, because the room keeps it.
|
|
93
|
+
*/
|
|
94
|
+
checkpoint(id: string, update: Uint8Array, actor: Principal, authors?: Principal[]): Promise<{
|
|
95
|
+
elements: number;
|
|
96
|
+
fixed: string[];
|
|
97
|
+
}>;
|
|
98
|
+
/** Owner only. Repair a board and delete the named elements. Only a human actor may call it. */
|
|
99
|
+
repair(id: string, actor: Principal, drop?: string[]): Promise<{
|
|
100
|
+
id: string;
|
|
101
|
+
fixed: string[];
|
|
102
|
+
elements: number;
|
|
103
|
+
}>;
|
|
104
|
+
private load;
|
|
105
|
+
}
|
|
106
|
+
/** What the CLI and the MCP server need. `CanvasService` runs it on a store, and `LiveService` runs it in a live room. */
|
|
107
|
+
type BoardAccess = Pick<CanvasService, "create" | "read" | "add" | "connect" | "move" | "remove" | "flow" | "exportSvg">;
|
|
108
|
+
|
|
109
|
+
export { type BoardAccess as B, CanvasService as C, type DrawOptions as D, type FlowEdge as F, MAX_FLOW_EDGES as M, type Placement as P, type FlowGraph as a, type FlowNode as b, MAX_FLOW_NODES as c, drawFlow as d, layoutFlow as l, parseFlow as p };
|
package/dist/store-file.js
CHANGED
package/dist/worker.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Blobs } from 'agentic-identity';
|
|
2
|
+
import { Realtime } from 'agentic-realtime';
|
|
3
|
+
import { D1Like, R2Like } from 'agentic-identity/cloudflare';
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import { P as Principal } from './read-BY6f-mmy.js';
|
|
6
|
+
import { C as CanvasService } from './service-Cpl6wKeY.js';
|
|
7
|
+
import 'yjs';
|
|
8
|
+
import 'zod';
|
|
9
|
+
|
|
10
|
+
interface WorkerEnv {
|
|
11
|
+
DB: D1Like;
|
|
12
|
+
IMAGES: R2Like;
|
|
13
|
+
/**
|
|
14
|
+
* JSON: `{ "<token>": { "actor": "ada", "kind": "human", "role": "viewer" } }`. A token has 32 characters or more.
|
|
15
|
+
* A grant needs an actor id and a kind. A token with a missing or bad part gets 401.
|
|
16
|
+
* The role is "editor" (the default) or "viewer". A viewer reads and cannot write, over HTTP or in a live room.
|
|
17
|
+
* Without this setting, every request gets 401. Every token reaches every board.
|
|
18
|
+
*/
|
|
19
|
+
CANVAS_API_TOKENS?: string;
|
|
20
|
+
/**
|
|
21
|
+
* "eu", "us", or "unknown": where the database and the bucket live. A real D1 reports where it served a query, and the
|
|
22
|
+
* store refuses to serve if that is outside the claim. Local `wrangler dev` reports nothing, so it needs "unknown".
|
|
23
|
+
* Without a valid value, every request gets 503.
|
|
24
|
+
*/
|
|
25
|
+
CANVAS_REGION?: string;
|
|
26
|
+
/** The largest image in bytes. Defaults to 1000000. */
|
|
27
|
+
CANVAS_MAX_IMAGE_BYTES?: string;
|
|
28
|
+
}
|
|
29
|
+
type Role = "editor" | "viewer";
|
|
30
|
+
type App = {
|
|
31
|
+
Bindings: WorkerEnv;
|
|
32
|
+
Variables: {
|
|
33
|
+
service: CanvasService;
|
|
34
|
+
blobs: Blobs;
|
|
35
|
+
actor: Principal;
|
|
36
|
+
role: Role;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
interface AppOptions {
|
|
40
|
+
/** Makes the live-room server from the Worker bindings. Without it, the ws route answers 404. */
|
|
41
|
+
live?: (env: WorkerEnv) => Realtime;
|
|
42
|
+
}
|
|
43
|
+
/** The principal and role for a bearer token, or null. The kind is never defaulted: a grant without a valid kind gets null. */
|
|
44
|
+
declare function authenticate(request: Request, env: WorkerEnv): {
|
|
45
|
+
actor: Principal;
|
|
46
|
+
role: Role;
|
|
47
|
+
} | null;
|
|
48
|
+
/** The image types we accept, found by their first bytes. The client's claim of a type is not trusted. */
|
|
49
|
+
declare function sniffImage(bytes: Uint8Array): string | null;
|
|
50
|
+
declare function createApp(options?: AppOptions): Hono<App>;
|
|
51
|
+
declare const _default: {
|
|
52
|
+
fetch: (request: Request, env: WorkerEnv, ctx: unknown) => Response | Promise<Response>;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export { type AppOptions, type Role, type WorkerEnv, authenticate, createApp, _default as default, sniffImage };
|
package/dist/worker.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
authenticate,
|
|
3
|
+
createApp,
|
|
4
|
+
sniffImage,
|
|
5
|
+
worker_default
|
|
6
|
+
} from "./chunk-V477KSZQ.js";
|
|
7
|
+
import "./chunk-W7NRP3EX.js";
|
|
8
|
+
import "./chunk-GGQPE65T.js";
|
|
9
|
+
import "./chunk-NWQED42L.js";
|
|
10
|
+
export {
|
|
11
|
+
authenticate,
|
|
12
|
+
createApp,
|
|
13
|
+
worker_default as default,
|
|
14
|
+
sniffImage
|
|
15
|
+
};
|
package/llms.txt
CHANGED
|
@@ -6,6 +6,9 @@ Keywords: whiteboard,canvas,diagrams,drawing,collaboration,agents,mcp,cli.
|
|
|
6
6
|
|
|
7
7
|
- SDK: import { Board, drawFlow, readBoard, toSvg } from "agentic-canvas".
|
|
8
8
|
- CLI: agentic-canvas new|read|add|connect|move|rm|flow|export.
|
|
9
|
+
- Live: set CANVAS_SERVER and CANVAS_TOKEN, and the CLI and `agentic-canvas mcp` edit the board in its live room.
|
|
10
|
+
- SDK: import { LiveBoard, LiveService } from "agentic-canvas/live".
|
|
11
|
+
- SDK: import { createClient, CanvasApiError } from "agentic-canvas/client". It calls the Worker API with fetch. Methods: me, createBoard, readBoard, exportSvg, addShape, addConnector, drawFlow, move, remove, uploadImage, getImage, state, checkpoint. A failure throws CanvasApiError with `code` and `status`. No retries.
|
|
9
12
|
|
|
10
13
|
## Docs
|
|
11
14
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-canvas",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "A shared whiteboard for diagrams, drawn by people and agents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"whiteboard",
|
|
@@ -39,6 +39,22 @@
|
|
|
39
39
|
"types": "./dist/index.d.ts",
|
|
40
40
|
"import": "./dist/index.js"
|
|
41
41
|
},
|
|
42
|
+
"./worker": {
|
|
43
|
+
"types": "./dist/worker.d.ts",
|
|
44
|
+
"import": "./dist/worker.js"
|
|
45
|
+
},
|
|
46
|
+
"./live": {
|
|
47
|
+
"types": "./dist/live.d.ts",
|
|
48
|
+
"import": "./dist/live.js"
|
|
49
|
+
},
|
|
50
|
+
"./live-worker": {
|
|
51
|
+
"types": "./dist/live-worker.d.ts",
|
|
52
|
+
"import": "./dist/live-worker.js"
|
|
53
|
+
},
|
|
54
|
+
"./client": {
|
|
55
|
+
"types": "./dist/client.d.ts",
|
|
56
|
+
"import": "./dist/client.js"
|
|
57
|
+
},
|
|
42
58
|
"./file-store": {
|
|
43
59
|
"types": "./dist/store-file.d.ts",
|
|
44
60
|
"import": "./dist/store-file.js"
|
|
@@ -57,7 +73,8 @@
|
|
|
57
73
|
"dependencies": {
|
|
58
74
|
"@dagrejs/dagre": "^3.1.3",
|
|
59
75
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
60
|
-
"agentic-identity": "^0.
|
|
76
|
+
"agentic-identity": "^0.4.0",
|
|
77
|
+
"agentic-realtime": "^0.1.0",
|
|
61
78
|
"yjs": "^13.6.0",
|
|
62
79
|
"zod": "^3.25.0"
|
|
63
80
|
},
|
|
@@ -71,9 +88,12 @@
|
|
|
71
88
|
},
|
|
72
89
|
"devDependencies": {
|
|
73
90
|
"@types/node": "^22.0.0",
|
|
91
|
+
"hono": "^4.13.14",
|
|
92
|
+
"miniflare": "^4.20260730.0",
|
|
74
93
|
"playwright-core": "^1.64.1",
|
|
75
94
|
"tsup": "^8.0.0",
|
|
76
95
|
"typescript": "^5.6.0",
|
|
77
|
-
"vitest": "^3.0.0"
|
|
96
|
+
"vitest": "^3.0.0",
|
|
97
|
+
"wrangler": "^4.155.0"
|
|
78
98
|
}
|
|
79
99
|
}
|