@particle-academy/agent-integrations 0.2.4 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +20 -0
  2. package/dist/bridges/charts.d.cts +39 -0
  3. package/dist/bridges/charts.d.ts +39 -0
  4. package/dist/bridges/code.d.cts +47 -0
  5. package/dist/bridges/code.d.ts +47 -0
  6. package/dist/bridges/flow.d.cts +4 -3
  7. package/dist/bridges/flow.d.ts +4 -3
  8. package/dist/bridges/forms.d.cts +76 -0
  9. package/dist/bridges/forms.d.ts +76 -0
  10. package/dist/bridges/scene.d.cts +54 -0
  11. package/dist/bridges/scene.d.ts +54 -0
  12. package/dist/bridges/screens.d.cts +78 -0
  13. package/dist/bridges/screens.d.ts +78 -0
  14. package/dist/bridges/sheets.d.cts +62 -0
  15. package/dist/bridges/sheets.d.ts +62 -0
  16. package/dist/bridges/whiteboard.d.cts +4 -3
  17. package/dist/bridges/whiteboard.d.ts +4 -3
  18. package/dist/bridges-charts.cjs +167 -0
  19. package/dist/bridges-charts.cjs.map +1 -0
  20. package/dist/bridges-charts.js +6 -0
  21. package/dist/bridges-charts.js.map +1 -0
  22. package/dist/bridges-code.cjs +219 -0
  23. package/dist/bridges-code.cjs.map +1 -0
  24. package/dist/bridges-code.js +6 -0
  25. package/dist/bridges-code.js.map +1 -0
  26. package/dist/bridges-flow.cjs +78 -19
  27. package/dist/bridges-flow.cjs.map +1 -1
  28. package/dist/bridges-flow.js +4 -2
  29. package/dist/bridges-forms.cjs +205 -0
  30. package/dist/bridges-forms.cjs.map +1 -0
  31. package/dist/bridges-forms.js +6 -0
  32. package/dist/bridges-forms.js.map +1 -0
  33. package/dist/bridges-scene.cjs +250 -0
  34. package/dist/bridges-scene.cjs.map +1 -0
  35. package/dist/bridges-scene.js +6 -0
  36. package/dist/bridges-scene.js.map +1 -0
  37. package/dist/bridges-screens.cjs +227 -0
  38. package/dist/bridges-screens.cjs.map +1 -0
  39. package/dist/bridges-screens.js +6 -0
  40. package/dist/bridges-screens.js.map +1 -0
  41. package/dist/bridges-sheets.cjs +327 -0
  42. package/dist/bridges-sheets.cjs.map +1 -0
  43. package/dist/bridges-sheets.js +6 -0
  44. package/dist/bridges-sheets.js.map +1 -0
  45. package/dist/bridges-whiteboard.cjs +226 -40
  46. package/dist/bridges-whiteboard.cjs.map +1 -1
  47. package/dist/bridges-whiteboard.js +5 -2
  48. package/dist/{chunk-5ZUHNNLR.js → chunk-3KSZNGNW.js} +81 -43
  49. package/dist/chunk-3KSZNGNW.js.map +1 -0
  50. package/dist/chunk-4BL5M3U3.js +158 -0
  51. package/dist/chunk-4BL5M3U3.js.map +1 -0
  52. package/dist/{chunk-QGCF7YKW.js → chunk-4KAIV6OD.js} +40 -12
  53. package/dist/chunk-4KAIV6OD.js.map +1 -0
  54. package/dist/chunk-52S7XYZK.js +38 -0
  55. package/dist/chunk-52S7XYZK.js.map +1 -0
  56. package/dist/chunk-57ZDHD53.js +180 -0
  57. package/dist/chunk-57ZDHD53.js.map +1 -0
  58. package/dist/chunk-E4AICMFZ.js +83 -0
  59. package/dist/chunk-E4AICMFZ.js.map +1 -0
  60. package/dist/chunk-GQ7XXK7G.js +124 -0
  61. package/dist/chunk-GQ7XXK7G.js.map +1 -0
  62. package/dist/chunk-HSTW7ZNO.js +172 -0
  63. package/dist/chunk-HSTW7ZNO.js.map +1 -0
  64. package/dist/chunk-IANI25IT.js +280 -0
  65. package/dist/chunk-IANI25IT.js.map +1 -0
  66. package/dist/{chunk-FLEOQUKF.js → chunk-JMYPUAFH.js} +17 -2
  67. package/dist/chunk-JMYPUAFH.js.map +1 -0
  68. package/dist/chunk-JU2N4KK6.js +34 -0
  69. package/dist/chunk-JU2N4KK6.js.map +1 -0
  70. package/dist/{chunk-2VOQJKSU.js → chunk-N3H4DXY5.js} +44 -22
  71. package/dist/chunk-N3H4DXY5.js.map +1 -0
  72. package/dist/chunk-NTDZWGYB.js +120 -0
  73. package/dist/chunk-NTDZWGYB.js.map +1 -0
  74. package/dist/chunk-RGO42EQ6.js +25 -0
  75. package/dist/chunk-RGO42EQ6.js.map +1 -0
  76. package/dist/chunk-X66JWQBB.js +37 -0
  77. package/dist/chunk-X66JWQBB.js.map +1 -0
  78. package/dist/chunk-XRAJSOPS.js +203 -0
  79. package/dist/chunk-XRAJSOPS.js.map +1 -0
  80. package/dist/index.cjs +1766 -127
  81. package/dist/index.cjs.map +1 -1
  82. package/dist/index.d.cts +99 -3
  83. package/dist/index.d.ts +99 -3
  84. package/dist/index.js +115 -9
  85. package/dist/index.js.map +1 -1
  86. package/dist/mcp/index.d.cts +5 -2
  87. package/dist/mcp/index.d.ts +5 -2
  88. package/dist/mcp.cjs +37 -9
  89. package/dist/mcp.cjs.map +1 -1
  90. package/dist/mcp.js +1 -1
  91. package/dist/presence/index.d.cts +136 -0
  92. package/dist/presence/index.d.ts +136 -0
  93. package/dist/presence.cjs +107 -0
  94. package/dist/presence.cjs.map +1 -0
  95. package/dist/presence.js +5 -0
  96. package/dist/presence.js.map +1 -0
  97. package/dist/registry-2DRURS6U.js +3 -0
  98. package/dist/registry-2DRURS6U.js.map +1 -0
  99. package/dist/server-BsSwfemr.d.cts +63 -0
  100. package/dist/server-Du3-IGqM.d.ts +63 -0
  101. package/dist/sharing/index.d.cts +3 -1
  102. package/dist/sharing/index.d.ts +3 -1
  103. package/dist/sharing.cjs +68 -0
  104. package/dist/sharing.cjs.map +1 -1
  105. package/dist/sharing.js +1 -1
  106. package/dist/sheets-adapter.cjs +96 -0
  107. package/dist/sheets-adapter.cjs.map +1 -0
  108. package/dist/sheets-adapter.d.cts +115 -0
  109. package/dist/sheets-adapter.d.ts +115 -0
  110. package/dist/sheets-adapter.js +4 -0
  111. package/dist/sheets-adapter.js.map +1 -0
  112. package/dist/styles.css +57 -0
  113. package/dist/styles.css.map +1 -1
  114. package/dist/tool-host-BQuUygLF.d.cts +60 -0
  115. package/dist/tool-host-C8JMMGYq.d.ts +60 -0
  116. package/dist/{types-CRPA_D0z.d.ts → types-CCSBGW9T.d.cts} +2 -2
  117. package/dist/{types-DR5AS6Rd.d.cts → types-DIVNcIQO.d.ts} +2 -2
  118. package/dist/types-aOQLTW0E.d.cts +112 -0
  119. package/dist/types-aOQLTW0E.d.ts +112 -0
  120. package/dist/undo/index.d.cts +69 -0
  121. package/dist/undo/index.d.ts +69 -0
  122. package/dist/undo.cjs +163 -0
  123. package/dist/undo.cjs.map +1 -0
  124. package/dist/undo.js +5 -0
  125. package/dist/undo.js.map +1 -0
  126. package/package.json +1 -1
  127. package/dist/chunk-2VOQJKSU.js.map +0 -1
  128. package/dist/chunk-5ZUHNNLR.js.map +0 -1
  129. package/dist/chunk-FLEOQUKF.js.map +0 -1
  130. package/dist/chunk-QGCF7YKW.js.map +0 -1
  131. package/dist/server-Bv985us3.d.cts +0 -173
  132. package/dist/server-Bv985us3.d.ts +0 -173
package/dist/index.d.cts CHANGED
@@ -1,13 +1,26 @@
1
- export { C as CallToolResult, a as ContentBlock, I as InitializeResult, J as JsonObject, b as JsonRpcMessage, c as JsonRpcNotification, d as JsonRpcRequest, e as JsonValue, f as MCP_PROTOCOL_VERSION, g as McpServerOptions, M as MicroMcpServer, S as ServerCapabilities, h as ServerInfo, T as ToolDefinition, i as ToolHandler, j as Transport, k as errorResult, r as rpcError, t as textResult } from './server-Bv985us3.cjs';
1
+ import { M as MicroMcpServer } from './server-BsSwfemr.cjs';
2
+ export { a as McpServerOptions, T as Transport, e as errorResult, r as rpcError, t as textResult } from './server-BsSwfemr.cjs';
3
+ export { T as ToolHost, a as ToolRegistry } from './tool-host-BQuUygLF.cjs';
2
4
  export { InProcessTransport, RelayChannel, RelayTransport, attachInProcess, attachRelay } from './mcp/index.cjs';
3
- export { B as Bridge, a as BridgeFactory } from './types-DR5AS6Rd.cjs';
5
+ export { C as CallToolResult, d as ContentBlock, I as InitializeResult, c as JsonObject, J as JsonRpcMessage, e as JsonRpcNotification, f as JsonRpcRequest, g as JsonValue, M as MCP_PROTOCOL_VERSION, a as ServerCapabilities, S as ServerInfo, T as ToolDefinition, b as ToolHandler } from './types-aOQLTW0E.cjs';
6
+ export { B as Bridge, a as BridgeFactory } from './types-CCSBGW9T.cjs';
4
7
  export { WhiteboardBridgeAdapter, WhiteboardBridgeOptions, registerWhiteboardBridge } from './bridges/whiteboard.cjs';
5
8
  export { FlowBridgeAdapter, FlowBridgeOptions, registerFlowBridge } from './bridges/flow.cjs';
9
+ import { FormFieldDescriptor } from './bridges/forms.cjs';
10
+ export { FormBridgeAdapter, FormBridgeOptions, registerFormBridge } from './bridges/forms.cjs';
11
+ export { SheetsBridgeAdapter, SheetsBridgeOptions, registerSheetsBridge } from './bridges/sheets.cjs';
12
+ export { SheetsAdapterOptions, SheetsCellHighlight, SheetsCellHighlightMap, SheetsHighlightOptions, UseSheetsAdapterResult, WorkbookLike, useSheetsActivityHighlights, useSheetsAdapter } from './sheets-adapter.cjs';
13
+ export { CodeBridgeAdapter, CodeBridgeOptions, registerCodeBridge } from './bridges/code.cjs';
14
+ export { ChartsBridgeAdapter, ChartsBridgeOptions, registerChartsBridge } from './bridges/charts.cjs';
15
+ export { SceneBridgeAdapter, SceneBridgeOptions, SceneCamera, SceneObject, SceneObjectKind, SceneState, registerSceneBridge } from './bridges/scene.cjs';
16
+ export { ScreenSnapshot, ScreensBridgeAdapter, ScreensBridgeOptions, registerScreensBridge } from './bridges/screens.cjs';
6
17
  import * as react_jsx_runtime from 'react/jsx-runtime';
7
18
  import { ReactNode, CSSProperties } from 'react';
8
19
  import { SessionDescriptor } from './sharing/index.cjs';
9
20
  export { RelayState, SseRelayOptions, SseRelayTransport, attachSseRelay, buildShareConfig, buildShareUrl, createSessionDescriptor, describeSession, readSessionFromUrl } from './sharing/index.cjs';
10
21
  import { StickyNoteItem, ShapeItem, ConnectorItem, Stroke, Viewport } from '@particle-academy/fancy-whiteboard';
22
+ export { ActivityAgent, ActivityFilter, ActivityResolverContext, ActivityTargetResolver, ToolHandler as ActivityWrappedHandler, AgentActivityEvent, AgentActivityListener, AgentTarget, AgentTargetKind, emitActivity, onActivity, readActivityHistory, resetActivityRegistry, useAgentActivity, useAgentActivityForScreen, wrapToolWithActivity } from './presence/index.cjs';
23
+ export { UndoEntry, UndoToolsOptions, clearStack as clearUndoStack, ensureUndoToolsRegistered, pushUndoEntry, readHistory as readUndoHistory, redoOne, registerUndoTools, resetAllUndoStacks, undoOne, useUndoStack } from './undo/index.cjs';
11
24
 
12
25
  type AgentActivity = {
13
26
  id: string;
@@ -85,6 +98,89 @@ type AgentActivityHighlightProps = {
85
98
  */
86
99
  declare function AgentActivityHighlight({ x, y, width, height, pulseKey, color, duration, className, style, }: AgentActivityHighlightProps): react_jsx_runtime.JSX.Element | null;
87
100
 
101
+ type BridgedFormProps = {
102
+ /** Stable id for this form. Used by agents in `form_*` tool calls. */
103
+ id: string;
104
+ /** Human title (also surfaced as the bridge title). */
105
+ title?: string;
106
+ /** Optional fancy-screens screen id this form lives in. */
107
+ screenId?: string;
108
+ /** Field descriptors — drives the agent-facing schema. */
109
+ fields: FormFieldDescriptor[];
110
+ /** Controlled values. */
111
+ values: Record<string, unknown>;
112
+ /** Setter — hosts pass their setState. */
113
+ onChange: (next: Record<string, unknown>) => void;
114
+ /** Optional submit handler. */
115
+ onSubmit?: () => Promise<{
116
+ ok: boolean;
117
+ values?: Record<string, unknown>;
118
+ error?: string;
119
+ }>;
120
+ /** The MicroMcpServer the bridge registers against. Pass null/undefined
121
+ * to render without a bridge (useful for stories / non-shared use). */
122
+ server?: MicroMcpServer | null;
123
+ /** Identity used in activity events. */
124
+ agent?: {
125
+ id: string;
126
+ name?: string;
127
+ color?: string;
128
+ };
129
+ children: ReactNode;
130
+ };
131
+ /**
132
+ * BridgedForm — wraps a react-fancy form (or any controlled inputs)
133
+ * with a `registerFormBridge` lifecycle. Children render the actual form
134
+ * using `values` + `onChange`; this component only manages the bridge.
135
+ *
136
+ * Hosts use it like:
137
+ *
138
+ * <BridgedForm id="signup" fields={...} values={values} onChange={setValues} server={server}>
139
+ * <Field><Input value={values.email} onValueChange={(v) => onChange({ ...values, email: v })} /></Field>
140
+ * ...
141
+ * </BridgedForm>
142
+ *
143
+ * Agents can then call form_describe, form_set_value, form_submit, etc.
144
+ */
145
+ declare function BridgedForm({ id, title, screenId, fields, values, onChange, onSubmit, server, agent, children, }: BridgedFormProps): react_jsx_runtime.JSX.Element;
146
+
147
+ /**
148
+ * Loose shape of the fancy-screens system context — kept here so this
149
+ * component doesn't hard-import `@particle-academy/fancy-screens`.
150
+ */
151
+ type ScreenSystemLike = {
152
+ registry: Map<string, {
153
+ id: string;
154
+ agentActivity?: unknown;
155
+ }>;
156
+ updateScreen: (id: string, patch: {
157
+ agentActivity?: unknown;
158
+ }) => void;
159
+ };
160
+ type ScreensActivityBridgeProps = {
161
+ /** The value returned by `useScreenSystem()` from fancy-screens. */
162
+ system: ScreenSystemLike;
163
+ /** ms to wait after the last activity before clearing the screen's badge. Default 1500. */
164
+ fadeMs?: number;
165
+ };
166
+ /**
167
+ * ScreensActivityBridge — subscribe to the in-process activity registry
168
+ * and patch each event into the matching screen's `agentActivity` field.
169
+ * Fade-out clears the badge after `fadeMs`.
170
+ *
171
+ * Use it once near the root of your app, ABOVE every <Screen>:
172
+ *
173
+ * const system = useScreenSystem();
174
+ * <>
175
+ * <ScreensActivityBridge system={system} />
176
+ * <Screen id="dashboard">…</Screen>
177
+ * <Screen id="form">…</Screen>
178
+ * </>
179
+ *
180
+ * Renders nothing; pure side-effect component.
181
+ */
182
+ declare function ScreensActivityBridge({ system, fadeMs }: ScreensActivityBridgeProps): null;
183
+
88
184
  type ShareControlsProps = {
89
185
  /** The active session, or null when not sharing yet. */
90
186
  session: SessionDescriptor | null;
@@ -152,4 +248,4 @@ type SharedWhiteboardProps = {
152
248
  */
153
249
  declare function SharedWhiteboard({ initialNotes, initialShapes, initialConnectors, initialStrokes, initialViewport, agent, shareBaseUrl, onRegisterSession, showAgentPanel, showShareControls, broadcastEdits, height, header, className, style, }: SharedWhiteboardProps): react_jsx_runtime.JSX.Element;
154
250
 
155
- export { type AgentActivity, AgentActivityHighlight, type AgentActivityHighlightProps, AgentCursor, type AgentCursorProps, AgentPanel, type AgentPanelProps, SessionDescriptor, ShareControls, type ShareControlsProps, SharedWhiteboard, type SharedWhiteboardProps };
251
+ export { type AgentActivity, AgentActivityHighlight, type AgentActivityHighlightProps, AgentCursor, type AgentCursorProps, AgentPanel, type AgentPanelProps, BridgedForm, type BridgedFormProps, FormFieldDescriptor, MicroMcpServer, ScreensActivityBridge, type ScreensActivityBridgeProps, SessionDescriptor, ShareControls, type ShareControlsProps, SharedWhiteboard, type SharedWhiteboardProps };
package/dist/index.d.ts CHANGED
@@ -1,13 +1,26 @@
1
- export { C as CallToolResult, a as ContentBlock, I as InitializeResult, J as JsonObject, b as JsonRpcMessage, c as JsonRpcNotification, d as JsonRpcRequest, e as JsonValue, f as MCP_PROTOCOL_VERSION, g as McpServerOptions, M as MicroMcpServer, S as ServerCapabilities, h as ServerInfo, T as ToolDefinition, i as ToolHandler, j as Transport, k as errorResult, r as rpcError, t as textResult } from './server-Bv985us3.js';
1
+ import { M as MicroMcpServer } from './server-Du3-IGqM.js';
2
+ export { a as McpServerOptions, T as Transport, e as errorResult, r as rpcError, t as textResult } from './server-Du3-IGqM.js';
3
+ export { T as ToolHost, a as ToolRegistry } from './tool-host-C8JMMGYq.js';
2
4
  export { InProcessTransport, RelayChannel, RelayTransport, attachInProcess, attachRelay } from './mcp/index.js';
3
- export { B as Bridge, a as BridgeFactory } from './types-CRPA_D0z.js';
5
+ export { C as CallToolResult, d as ContentBlock, I as InitializeResult, c as JsonObject, J as JsonRpcMessage, e as JsonRpcNotification, f as JsonRpcRequest, g as JsonValue, M as MCP_PROTOCOL_VERSION, a as ServerCapabilities, S as ServerInfo, T as ToolDefinition, b as ToolHandler } from './types-aOQLTW0E.js';
6
+ export { B as Bridge, a as BridgeFactory } from './types-DIVNcIQO.js';
4
7
  export { WhiteboardBridgeAdapter, WhiteboardBridgeOptions, registerWhiteboardBridge } from './bridges/whiteboard.js';
5
8
  export { FlowBridgeAdapter, FlowBridgeOptions, registerFlowBridge } from './bridges/flow.js';
9
+ import { FormFieldDescriptor } from './bridges/forms.js';
10
+ export { FormBridgeAdapter, FormBridgeOptions, registerFormBridge } from './bridges/forms.js';
11
+ export { SheetsBridgeAdapter, SheetsBridgeOptions, registerSheetsBridge } from './bridges/sheets.js';
12
+ export { SheetsAdapterOptions, SheetsCellHighlight, SheetsCellHighlightMap, SheetsHighlightOptions, UseSheetsAdapterResult, WorkbookLike, useSheetsActivityHighlights, useSheetsAdapter } from './sheets-adapter.js';
13
+ export { CodeBridgeAdapter, CodeBridgeOptions, registerCodeBridge } from './bridges/code.js';
14
+ export { ChartsBridgeAdapter, ChartsBridgeOptions, registerChartsBridge } from './bridges/charts.js';
15
+ export { SceneBridgeAdapter, SceneBridgeOptions, SceneCamera, SceneObject, SceneObjectKind, SceneState, registerSceneBridge } from './bridges/scene.js';
16
+ export { ScreenSnapshot, ScreensBridgeAdapter, ScreensBridgeOptions, registerScreensBridge } from './bridges/screens.js';
6
17
  import * as react_jsx_runtime from 'react/jsx-runtime';
7
18
  import { ReactNode, CSSProperties } from 'react';
8
19
  import { SessionDescriptor } from './sharing/index.js';
9
20
  export { RelayState, SseRelayOptions, SseRelayTransport, attachSseRelay, buildShareConfig, buildShareUrl, createSessionDescriptor, describeSession, readSessionFromUrl } from './sharing/index.js';
10
21
  import { StickyNoteItem, ShapeItem, ConnectorItem, Stroke, Viewport } from '@particle-academy/fancy-whiteboard';
22
+ export { ActivityAgent, ActivityFilter, ActivityResolverContext, ActivityTargetResolver, ToolHandler as ActivityWrappedHandler, AgentActivityEvent, AgentActivityListener, AgentTarget, AgentTargetKind, emitActivity, onActivity, readActivityHistory, resetActivityRegistry, useAgentActivity, useAgentActivityForScreen, wrapToolWithActivity } from './presence/index.js';
23
+ export { UndoEntry, UndoToolsOptions, clearStack as clearUndoStack, ensureUndoToolsRegistered, pushUndoEntry, readHistory as readUndoHistory, redoOne, registerUndoTools, resetAllUndoStacks, undoOne, useUndoStack } from './undo/index.js';
11
24
 
12
25
  type AgentActivity = {
13
26
  id: string;
@@ -85,6 +98,89 @@ type AgentActivityHighlightProps = {
85
98
  */
86
99
  declare function AgentActivityHighlight({ x, y, width, height, pulseKey, color, duration, className, style, }: AgentActivityHighlightProps): react_jsx_runtime.JSX.Element | null;
87
100
 
101
+ type BridgedFormProps = {
102
+ /** Stable id for this form. Used by agents in `form_*` tool calls. */
103
+ id: string;
104
+ /** Human title (also surfaced as the bridge title). */
105
+ title?: string;
106
+ /** Optional fancy-screens screen id this form lives in. */
107
+ screenId?: string;
108
+ /** Field descriptors — drives the agent-facing schema. */
109
+ fields: FormFieldDescriptor[];
110
+ /** Controlled values. */
111
+ values: Record<string, unknown>;
112
+ /** Setter — hosts pass their setState. */
113
+ onChange: (next: Record<string, unknown>) => void;
114
+ /** Optional submit handler. */
115
+ onSubmit?: () => Promise<{
116
+ ok: boolean;
117
+ values?: Record<string, unknown>;
118
+ error?: string;
119
+ }>;
120
+ /** The MicroMcpServer the bridge registers against. Pass null/undefined
121
+ * to render without a bridge (useful for stories / non-shared use). */
122
+ server?: MicroMcpServer | null;
123
+ /** Identity used in activity events. */
124
+ agent?: {
125
+ id: string;
126
+ name?: string;
127
+ color?: string;
128
+ };
129
+ children: ReactNode;
130
+ };
131
+ /**
132
+ * BridgedForm — wraps a react-fancy form (or any controlled inputs)
133
+ * with a `registerFormBridge` lifecycle. Children render the actual form
134
+ * using `values` + `onChange`; this component only manages the bridge.
135
+ *
136
+ * Hosts use it like:
137
+ *
138
+ * <BridgedForm id="signup" fields={...} values={values} onChange={setValues} server={server}>
139
+ * <Field><Input value={values.email} onValueChange={(v) => onChange({ ...values, email: v })} /></Field>
140
+ * ...
141
+ * </BridgedForm>
142
+ *
143
+ * Agents can then call form_describe, form_set_value, form_submit, etc.
144
+ */
145
+ declare function BridgedForm({ id, title, screenId, fields, values, onChange, onSubmit, server, agent, children, }: BridgedFormProps): react_jsx_runtime.JSX.Element;
146
+
147
+ /**
148
+ * Loose shape of the fancy-screens system context — kept here so this
149
+ * component doesn't hard-import `@particle-academy/fancy-screens`.
150
+ */
151
+ type ScreenSystemLike = {
152
+ registry: Map<string, {
153
+ id: string;
154
+ agentActivity?: unknown;
155
+ }>;
156
+ updateScreen: (id: string, patch: {
157
+ agentActivity?: unknown;
158
+ }) => void;
159
+ };
160
+ type ScreensActivityBridgeProps = {
161
+ /** The value returned by `useScreenSystem()` from fancy-screens. */
162
+ system: ScreenSystemLike;
163
+ /** ms to wait after the last activity before clearing the screen's badge. Default 1500. */
164
+ fadeMs?: number;
165
+ };
166
+ /**
167
+ * ScreensActivityBridge — subscribe to the in-process activity registry
168
+ * and patch each event into the matching screen's `agentActivity` field.
169
+ * Fade-out clears the badge after `fadeMs`.
170
+ *
171
+ * Use it once near the root of your app, ABOVE every <Screen>:
172
+ *
173
+ * const system = useScreenSystem();
174
+ * <>
175
+ * <ScreensActivityBridge system={system} />
176
+ * <Screen id="dashboard">…</Screen>
177
+ * <Screen id="form">…</Screen>
178
+ * </>
179
+ *
180
+ * Renders nothing; pure side-effect component.
181
+ */
182
+ declare function ScreensActivityBridge({ system, fadeMs }: ScreensActivityBridgeProps): null;
183
+
88
184
  type ShareControlsProps = {
89
185
  /** The active session, or null when not sharing yet. */
90
186
  session: SessionDescriptor | null;
@@ -152,4 +248,4 @@ type SharedWhiteboardProps = {
152
248
  */
153
249
  declare function SharedWhiteboard({ initialNotes, initialShapes, initialConnectors, initialStrokes, initialViewport, agent, shareBaseUrl, onRegisterSession, showAgentPanel, showShareControls, broadcastEdits, height, header, className, style, }: SharedWhiteboardProps): react_jsx_runtime.JSX.Element;
154
250
 
155
- export { type AgentActivity, AgentActivityHighlight, type AgentActivityHighlightProps, AgentCursor, type AgentCursorProps, AgentPanel, type AgentPanelProps, SessionDescriptor, ShareControls, type ShareControlsProps, SharedWhiteboard, type SharedWhiteboardProps };
251
+ export { type AgentActivity, AgentActivityHighlight, type AgentActivityHighlightProps, AgentCursor, type AgentCursorProps, AgentPanel, type AgentPanelProps, BridgedForm, type BridgedFormProps, FormFieldDescriptor, MicroMcpServer, ScreensActivityBridge, type ScreensActivityBridgeProps, SessionDescriptor, ShareControls, type ShareControlsProps, SharedWhiteboard, type SharedWhiteboardProps };
package/dist/index.js CHANGED
@@ -1,13 +1,27 @@
1
+ export { registerSceneBridge } from './chunk-XRAJSOPS.js';
2
+ export { registerScreensBridge } from './chunk-57ZDHD53.js';
3
+ export { useSheetsActivityHighlights, useSheetsAdapter } from './chunk-E4AICMFZ.js';
4
+ import { buildShareUrl, buildShareConfig, createSessionDescriptor, attachSseRelay } from './chunk-JMYPUAFH.js';
5
+ export { SseRelayTransport, attachSseRelay, buildShareConfig, buildShareUrl, createSessionDescriptor, describeSession, readSessionFromUrl } from './chunk-JMYPUAFH.js';
6
+ export { useAgentActivity, useAgentActivityForScreen } from './chunk-X66JWQBB.js';
7
+ export { useUndoStack } from './chunk-RGO42EQ6.js';
1
8
  import { attachInProcess } from './chunk-6LTKCNLF.js';
2
9
  export { InProcessTransport, RelayTransport, attachInProcess, attachRelay } from './chunk-6LTKCNLF.js';
3
- import { registerWhiteboardBridge } from './chunk-5ZUHNNLR.js';
4
- export { registerWhiteboardBridge } from './chunk-5ZUHNNLR.js';
5
- export { registerFlowBridge } from './chunk-2VOQJKSU.js';
6
- import { MicroMcpServer } from './chunk-QGCF7YKW.js';
7
- export { MCP_PROTOCOL_VERSION, MicroMcpServer, errorResult, rpcError, textResult } from './chunk-QGCF7YKW.js';
8
- import { buildShareUrl, buildShareConfig, createSessionDescriptor, attachSseRelay } from './chunk-FLEOQUKF.js';
9
- export { SseRelayTransport, attachSseRelay, buildShareConfig, buildShareUrl, createSessionDescriptor, describeSession, readSessionFromUrl } from './chunk-FLEOQUKF.js';
10
- import { useRef, useEffect, useState, useCallback, useMemo } from 'react';
10
+ import { registerWhiteboardBridge } from './chunk-3KSZNGNW.js';
11
+ export { registerWhiteboardBridge } from './chunk-3KSZNGNW.js';
12
+ export { clearStack as clearUndoStack, ensureUndoToolsRegistered, pushUndoEntry, readHistory as readUndoHistory, redoOne, registerUndoTools, resetAllUndoStacks, undoOne } from './chunk-GQ7XXK7G.js';
13
+ export { registerFlowBridge } from './chunk-N3H4DXY5.js';
14
+ import { registerFormBridge } from './chunk-4BL5M3U3.js';
15
+ export { registerFormBridge } from './chunk-4BL5M3U3.js';
16
+ export { registerSheetsBridge } from './chunk-IANI25IT.js';
17
+ export { registerCodeBridge } from './chunk-HSTW7ZNO.js';
18
+ export { registerChartsBridge } from './chunk-NTDZWGYB.js';
19
+ export { wrapToolWithActivity } from './chunk-52S7XYZK.js';
20
+ import { onActivity } from './chunk-JU2N4KK6.js';
21
+ export { emitActivity, onActivity, readActivityHistory, resetActivityRegistry } from './chunk-JU2N4KK6.js';
22
+ import { MicroMcpServer } from './chunk-4KAIV6OD.js';
23
+ export { MCP_PROTOCOL_VERSION, MicroMcpServer, ToolRegistry, errorResult, rpcError, textResult } from './chunk-4KAIV6OD.js';
24
+ import { useRef, useEffect, useState, useMemo, useCallback } from 'react';
11
25
  import { jsxs, jsx } from 'react/jsx-runtime';
12
26
  import { Board, Connector, Shape, StickyNote, CursorLayer } from '@particle-academy/fancy-whiteboard';
13
27
 
@@ -174,6 +188,98 @@ function AgentActivityHighlight({
174
188
  }
175
189
  );
176
190
  }
191
+ function BridgedForm({
192
+ id,
193
+ title,
194
+ screenId,
195
+ fields,
196
+ values,
197
+ onChange,
198
+ onSubmit,
199
+ server,
200
+ agent,
201
+ children
202
+ }) {
203
+ const valuesRef = useRef(values);
204
+ const onChangeRef = useRef(onChange);
205
+ const fieldsRef = useRef(fields);
206
+ const submitRef = useRef(onSubmit);
207
+ useEffect(() => {
208
+ valuesRef.current = values;
209
+ }, [values]);
210
+ useEffect(() => {
211
+ onChangeRef.current = onChange;
212
+ }, [onChange]);
213
+ useEffect(() => {
214
+ fieldsRef.current = fields;
215
+ }, [fields]);
216
+ useEffect(() => {
217
+ submitRef.current = onSubmit;
218
+ }, [onSubmit]);
219
+ const focusElement = (name) => {
220
+ if (typeof document === "undefined") return;
221
+ const el = document.querySelector(`[data-form-id="${id}"] [name="${name}"]`);
222
+ el?.focus();
223
+ };
224
+ const adapter = useMemo(() => ({
225
+ id,
226
+ title,
227
+ screenId,
228
+ getFields: () => fieldsRef.current,
229
+ getValue: (name) => valuesRef.current[name],
230
+ getValues: () => ({ ...valuesRef.current }),
231
+ setValue: (name, v) => onChangeRef.current({ ...valuesRef.current, [name]: v }),
232
+ setValues: (next) => onChangeRef.current({ ...valuesRef.current, ...next }),
233
+ focus: focusElement,
234
+ submit: async () => {
235
+ if (!submitRef.current) {
236
+ return { ok: true, values: { ...valuesRef.current } };
237
+ }
238
+ return submitRef.current();
239
+ }
240
+ // eslint-disable-next-line react-hooks/exhaustive-deps
241
+ }), [id, title, screenId]);
242
+ useEffect(() => {
243
+ if (!server) return;
244
+ const bridge = registerFormBridge(server, { adapter, agent });
245
+ return () => bridge.dispose();
246
+ }, [server, adapter, agent]);
247
+ return /* @__PURE__ */ jsx("div", { "data-form-id": id, children });
248
+ }
249
+ function ScreensActivityBridge({ system, fadeMs = 1500 }) {
250
+ useEffect(() => {
251
+ const fadeTimers = /* @__PURE__ */ new Map();
252
+ const off = onActivity((event) => {
253
+ const screenId = event.target.screenId;
254
+ if (!screenId) return;
255
+ if (!system.registry.has(screenId)) return;
256
+ const activity = {
257
+ agentId: event.agentId,
258
+ agentName: event.agentName,
259
+ agentColor: event.agentColor,
260
+ action: event.action,
261
+ timestamp: event.timestamp,
262
+ elementId: event.target.elementId,
263
+ label: event.target.label
264
+ };
265
+ system.updateScreen(screenId, { agentActivity: activity });
266
+ const prev = fadeTimers.get(screenId);
267
+ if (prev) clearTimeout(prev);
268
+ fadeTimers.set(
269
+ screenId,
270
+ setTimeout(() => {
271
+ system.updateScreen(screenId, { agentActivity: null });
272
+ fadeTimers.delete(screenId);
273
+ }, event.ttlMs ?? fadeMs)
274
+ );
275
+ });
276
+ return () => {
277
+ off();
278
+ for (const t of fadeTimers.values()) clearTimeout(t);
279
+ };
280
+ }, [system, fadeMs]);
281
+ return null;
282
+ }
177
283
  function ShareControls({
178
284
  session,
179
285
  onStart,
@@ -562,6 +668,6 @@ function resolveCenter(ref, notes, shapes) {
562
668
  return ref;
563
669
  }
564
670
 
565
- export { AgentActivityHighlight, AgentCursor, AgentPanel, ShareControls, SharedWhiteboard };
671
+ export { AgentActivityHighlight, AgentCursor, AgentPanel, BridgedForm, ScreensActivityBridge, ShareControls, SharedWhiteboard };
566
672
  //# sourceMappingURL=index.js.map
567
673
  //# sourceMappingURL=index.js.map