@granular-software/sdk 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as Automerge from '@automerge/automerge';
2
- import { Doc } from '@automerge/automerge';
3
- import { W as WSClientOptions, T as ToolWithHandler, P as PublishToolsResult, J as Job, a as ToolHandler, I as InstanceToolHandler, D as DomainState, G as GranularOptions, R as RecordUserOptions, U as User, C as ConnectOptions, E as EnvironmentData, b as GraphQLResult, c as DefineRelationshipOptions, d as RelationshipInfo, M as ModelRef, e as ManifestContent, f as RecordObjectOptions, g as RecordObjectResult, S as SandboxListResponse, h as Sandbox, i as CreateSandboxData, j as DeleteResponse, k as PermissionProfile, l as CreatePermissionProfileData, m as CreateEnvironmentData, n as Subject, A as AssignmentListResponse } from './types-D46q5WTh.mjs';
4
- export { $ as APIError, r as Assignment, w as Build, x as BuildListResponse, B as BuildPolicy, v as BuildStatus, s as EnvironmentListResponse, y as JobStatus, z as JobSubmitResult, t as Manifest, Z as ManifestImport, u as ManifestListResponse, Y as ManifestOperation, V as ManifestPropertySpec, X as ManifestRelationshipDef, _ as ManifestVolume, q as PermissionProfileListResponse, p as PermissionRules, F as Prompt, H as RPCRequest, N as RPCRequestFromServer, K as RPCResponse, L as SyncMessage, O as ToolInvokeParams, Q as ToolResultParams, o as ToolSchema } from './types-D46q5WTh.mjs';
2
+ import { W as WSClientOptions, T as ToolWithHandler, P as PublishToolsResult, J as Job, a as ToolHandler, I as InstanceToolHandler, b as ToolInfo, c as ToolsChangedEvent, D as DomainState, G as GranularOptions, R as RecordUserOptions, U as User, C as ConnectOptions, E as EnvironmentData, d as GraphQLResult, e as DefineRelationshipOptions, f as RelationshipInfo, M as ModelRef, g as ManifestContent, h as RecordObjectOptions, i as RecordObjectResult, S as SandboxListResponse, j as Sandbox, k as CreateSandboxData, l as DeleteResponse, m as PermissionProfile, n as CreatePermissionProfileData, o as CreateEnvironmentData, p as Subject, A as AssignmentListResponse } from './types-DiMEb3SE.mjs';
3
+ export { a1 as APIError, t as Assignment, y as Build, z as BuildListResponse, B as BuildPolicy, x as BuildStatus, u as EnvironmentListResponse, F as JobStatus, H as JobSubmitResult, v as Manifest, $ as ManifestImport, w as ManifestListResponse, _ as ManifestOperation, Y as ManifestPropertySpec, Z as ManifestRelationshipDef, a0 as ManifestVolume, s as PermissionProfileListResponse, r as PermissionRules, K as Prompt, L as RPCRequest, Q as RPCRequestFromServer, N as RPCResponse, O as SyncMessage, V as ToolInvokeParams, X as ToolResultParams, q as ToolSchema } from './types-DiMEb3SE.mjs';
4
+ import { Doc } from '@automerge/automerge/slim';
5
5
 
6
6
  declare class WSClient {
7
7
  private ws;
@@ -17,6 +17,7 @@ declare class WSClient {
17
17
  private syncState;
18
18
  private reconnectTimer;
19
19
  private isExplicitlyDisconnected;
20
+ private options;
20
21
  constructor(options: WSClientOptions);
21
22
  /**
22
23
  * Connect to the WebSocket server
@@ -73,6 +74,10 @@ declare class Session {
73
74
  /** Tracks which tools are instance methods (className set, not static) */
74
75
  private instanceTools;
75
76
  private currentDomainRevision;
77
+ /** Local effect registry: name → full ToolWithHandler */
78
+ private effects;
79
+ /** Last known tools for diffing */
80
+ private lastKnownTools;
76
81
  constructor(client: WSClient, clientId?: string);
77
82
  get document(): Doc<Record<string, unknown>>;
78
83
  get domainRevision(): string | null;
@@ -140,6 +145,64 @@ declare class Session {
140
145
  * ```
141
146
  */
142
147
  publishTools(tools: ToolWithHandler[], revision?: string): Promise<PublishToolsResult>;
148
+ /**
149
+ * Publish a single effect (tool) to the sandbox.
150
+ *
151
+ * Adds the effect to the local registry and re-publishes the
152
+ * full tool catalog to the server. If an effect with the same
153
+ * name already exists, it is replaced.
154
+ *
155
+ * @param effect - The effect (tool) to publish
156
+ * @returns PublishToolsResult with domainRevision
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * await env.publishEffect({
161
+ * name: 'get_bio',
162
+ * description: 'Get biography of an author',
163
+ * className: 'author',
164
+ * inputSchema: { type: 'object', properties: { detailed: { type: 'boolean' } } },
165
+ * handler: async (id, params) => ({ bio: `Bio of ${id}` }),
166
+ * });
167
+ * ```
168
+ */
169
+ publishEffect(effect: ToolWithHandler): Promise<PublishToolsResult>;
170
+ /**
171
+ * Publish multiple effects (tools) at once.
172
+ *
173
+ * Adds all effects to the local registry and re-publishes the
174
+ * full tool catalog in a single RPC call.
175
+ *
176
+ * @param effects - Array of effects to publish
177
+ * @returns PublishToolsResult with domainRevision
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * await env.publishEffects([
182
+ * { name: 'get_bio', description: '...', inputSchema: {}, handler: async (id) => ({}) },
183
+ * { name: 'search', description: '...', inputSchema: {}, handler: async (params) => ({}) },
184
+ * ]);
185
+ * ```
186
+ */
187
+ publishEffects(effects: ToolWithHandler[]): Promise<PublishToolsResult>;
188
+ /**
189
+ * Remove an effect by name and re-publish the remaining catalog.
190
+ *
191
+ * @param name - The name of the effect to remove
192
+ * @returns PublishToolsResult with domainRevision
193
+ */
194
+ unpublishEffect(name: string): Promise<PublishToolsResult>;
195
+ /**
196
+ * Remove all effects and publish an empty catalog.
197
+ *
198
+ * @returns PublishToolsResult with domainRevision
199
+ */
200
+ unpublishAllEffects(): Promise<PublishToolsResult>;
201
+ /**
202
+ * Internal: re-publish the full effect catalog to the server.
203
+ * Called after any mutation to the effects Map.
204
+ */
205
+ private _syncEffects;
143
206
  /**
144
207
  * Submit a job to execute code in the sandbox.
145
208
  *
@@ -166,6 +229,17 @@ declare class Session {
166
229
  * Respond to a prompt request from the sandbox
167
230
  */
168
231
  answerPrompt(promptId: string, answer: unknown): Promise<void>;
232
+ /**
233
+ * Get the current list of available tools.
234
+ * Consolidates tools from all connected clients.
235
+ */
236
+ getTools(): ToolInfo[];
237
+ /**
238
+ * Subscribe to tool changes (added, removed, updated).
239
+ * @param callback - Function called with change events
240
+ * @returns Unsubscribe function
241
+ */
242
+ onToolsChanged(callback: (event: ToolsChangedEvent) => void): () => void;
169
243
  /**
170
244
  * Get the current domain state and available tools
171
245
  */
@@ -208,6 +282,10 @@ declare class Session {
208
282
  private setupToolInvokeHandler;
209
283
  private setupEventHandlers;
210
284
  private emit;
285
+ /**
286
+ * Check for changes in the tool catalog and emit 'tools:changed' if needed
287
+ */
288
+ private checkForToolChanges;
211
289
  }
212
290
 
213
291
  /**
@@ -219,6 +297,7 @@ declare class Session {
219
297
  * 3. Publish tools via `publishTools()` (instance methods, static methods, global tools — with typed I/O)
220
298
  * 4. Submit jobs via `submitJob()` that import auto-generated typed classes from `./sandbox-tools`
221
299
  * 5. Execute GraphQL queries via `graphql()` (authenticated automatically)
300
+ * 6. List available tools via `getTools()` and listen for updates via `onToolsChanged()`
222
301
  *
223
302
  * Tool calls from the sandbox automatically invoke your handlers via reverse-RPC.
224
303
  *
@@ -485,11 +564,49 @@ declare class Environment extends Session {
485
564
  * ```
486
565
  */
487
566
  publishTools(tools: ToolWithHandler[], revision?: string): Promise<PublishToolsResult>;
567
+ /**
568
+ * Publish a single effect (tool) incrementally.
569
+ *
570
+ * Adds the effect to the local registry and re-publishes the
571
+ * full tool catalog to the server. If an effect with the same
572
+ * name already exists, it is replaced.
573
+ *
574
+ * @example
575
+ * ```typescript
576
+ * await env.publishEffect({
577
+ * name: 'get_bio',
578
+ * description: 'Get biography',
579
+ * inputSchema: { type: 'object', properties: { detailed: { type: 'boolean' } } },
580
+ * handler: async (params) => ({ bio: 'Hello' }),
581
+ * });
582
+ * ```
583
+ */
584
+ publishEffect(effect: ToolWithHandler): Promise<PublishToolsResult>;
585
+ /**
586
+ * Publish multiple effects (tools) at once.
587
+ *
588
+ * Adds all effects to the local registry and re-publishes the
589
+ * full tool catalog in a single RPC call.
590
+ */
591
+ publishEffects(effects: ToolWithHandler[]): Promise<PublishToolsResult>;
592
+ /**
593
+ * Remove an effect by name and re-publish the remaining catalog.
594
+ */
595
+ unpublishEffect(name: string): Promise<PublishToolsResult>;
596
+ /**
597
+ * Remove all effects and publish an empty catalog.
598
+ */
599
+ unpublishAllEffects(): Promise<PublishToolsResult>;
488
600
  }
489
601
  declare class Granular {
490
602
  private apiKey;
491
603
  private apiUrl;
492
604
  private httpUrl;
605
+ private WebSocketCtor?;
606
+ /** Sandbox-level effect registry: sandboxId → (toolName → ToolWithHandler) */
607
+ private sandboxEffects;
608
+ /** Active environments tracker: sandboxId → Environment[] */
609
+ private activeEnvironments;
493
610
  /**
494
611
  * Create a new Granular client
495
612
  * @param options - Client configuration
@@ -547,6 +664,34 @@ declare class Granular {
547
664
  * ```
548
665
  */
549
666
  connect(options: ConnectOptions): Promise<Environment>;
667
+ /**
668
+ * Register an effect (tool) for a specific sandbox.
669
+ *
670
+ * The effect will be automatically published to:
671
+ * 1. Any currently active environments for this sandbox
672
+ * 2. Any new environments created/connected for this sandbox
673
+ *
674
+ * @param sandboxNameOrId - The name or ID of the sandbox
675
+ * @param effect - The tool definition and handler
676
+ */
677
+ registerEffect(sandboxNameOrId: string, effect: ToolWithHandler): Promise<void>;
678
+ /**
679
+ * Register multiple effects (tools) for a specific sandbox.
680
+ *
681
+ * batch version of `registerEffect`.
682
+ */
683
+ registerEffects(sandboxNameOrId: string, effects: ToolWithHandler[]): Promise<void>;
684
+ /**
685
+ * Unregister an effect from a sandbox.
686
+ *
687
+ * Removes it from the local registry and unpublishes it from
688
+ * all active environments.
689
+ */
690
+ unregisterEffect(sandboxNameOrId: string, name: string): Promise<void>;
691
+ /**
692
+ * Unregister all effects for a sandbox.
693
+ */
694
+ unregisterAllEffects(sandboxNameOrId: string): Promise<void>;
550
695
  /**
551
696
  * Find a sandbox by name or create it if it doesn't exist
552
697
  */
@@ -613,4 +758,4 @@ declare class Granular {
613
758
  private request;
614
759
  }
615
760
 
616
- export { AssignmentListResponse, ConnectOptions, CreateEnvironmentData, CreatePermissionProfileData, CreateSandboxData, DefineRelationshipOptions, DeleteResponse, DomainState, Environment, EnvironmentData, Granular, GranularOptions, GraphQLResult, InstanceToolHandler, Job, ManifestContent, ModelRef, PermissionProfile, PublishToolsResult, RecordObjectOptions, RecordObjectResult, RecordUserOptions, RelationshipInfo, Sandbox, SandboxListResponse, Session, Subject, ToolHandler, ToolWithHandler, User, WSClient, WSClientOptions };
761
+ export { AssignmentListResponse, ConnectOptions, CreateEnvironmentData, CreatePermissionProfileData, CreateSandboxData, DefineRelationshipOptions, DeleteResponse, DomainState, Environment, EnvironmentData, Granular, GranularOptions, GraphQLResult, InstanceToolHandler, Job, ManifestContent, ModelRef, PermissionProfile, PublishToolsResult, RecordObjectOptions, RecordObjectResult, RecordUserOptions, RelationshipInfo, Sandbox, SandboxListResponse, Session, Subject, ToolHandler, ToolInfo, ToolWithHandler, ToolsChangedEvent, User, WSClient, WSClientOptions };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as Automerge from '@automerge/automerge';
2
- import { Doc } from '@automerge/automerge';
3
- import { W as WSClientOptions, T as ToolWithHandler, P as PublishToolsResult, J as Job, a as ToolHandler, I as InstanceToolHandler, D as DomainState, G as GranularOptions, R as RecordUserOptions, U as User, C as ConnectOptions, E as EnvironmentData, b as GraphQLResult, c as DefineRelationshipOptions, d as RelationshipInfo, M as ModelRef, e as ManifestContent, f as RecordObjectOptions, g as RecordObjectResult, S as SandboxListResponse, h as Sandbox, i as CreateSandboxData, j as DeleteResponse, k as PermissionProfile, l as CreatePermissionProfileData, m as CreateEnvironmentData, n as Subject, A as AssignmentListResponse } from './types-D46q5WTh.js';
4
- export { $ as APIError, r as Assignment, w as Build, x as BuildListResponse, B as BuildPolicy, v as BuildStatus, s as EnvironmentListResponse, y as JobStatus, z as JobSubmitResult, t as Manifest, Z as ManifestImport, u as ManifestListResponse, Y as ManifestOperation, V as ManifestPropertySpec, X as ManifestRelationshipDef, _ as ManifestVolume, q as PermissionProfileListResponse, p as PermissionRules, F as Prompt, H as RPCRequest, N as RPCRequestFromServer, K as RPCResponse, L as SyncMessage, O as ToolInvokeParams, Q as ToolResultParams, o as ToolSchema } from './types-D46q5WTh.js';
2
+ import { W as WSClientOptions, T as ToolWithHandler, P as PublishToolsResult, J as Job, a as ToolHandler, I as InstanceToolHandler, b as ToolInfo, c as ToolsChangedEvent, D as DomainState, G as GranularOptions, R as RecordUserOptions, U as User, C as ConnectOptions, E as EnvironmentData, d as GraphQLResult, e as DefineRelationshipOptions, f as RelationshipInfo, M as ModelRef, g as ManifestContent, h as RecordObjectOptions, i as RecordObjectResult, S as SandboxListResponse, j as Sandbox, k as CreateSandboxData, l as DeleteResponse, m as PermissionProfile, n as CreatePermissionProfileData, o as CreateEnvironmentData, p as Subject, A as AssignmentListResponse } from './types-DiMEb3SE.js';
3
+ export { a1 as APIError, t as Assignment, y as Build, z as BuildListResponse, B as BuildPolicy, x as BuildStatus, u as EnvironmentListResponse, F as JobStatus, H as JobSubmitResult, v as Manifest, $ as ManifestImport, w as ManifestListResponse, _ as ManifestOperation, Y as ManifestPropertySpec, Z as ManifestRelationshipDef, a0 as ManifestVolume, s as PermissionProfileListResponse, r as PermissionRules, K as Prompt, L as RPCRequest, Q as RPCRequestFromServer, N as RPCResponse, O as SyncMessage, V as ToolInvokeParams, X as ToolResultParams, q as ToolSchema } from './types-DiMEb3SE.js';
4
+ import { Doc } from '@automerge/automerge/slim';
5
5
 
6
6
  declare class WSClient {
7
7
  private ws;
@@ -17,6 +17,7 @@ declare class WSClient {
17
17
  private syncState;
18
18
  private reconnectTimer;
19
19
  private isExplicitlyDisconnected;
20
+ private options;
20
21
  constructor(options: WSClientOptions);
21
22
  /**
22
23
  * Connect to the WebSocket server
@@ -73,6 +74,10 @@ declare class Session {
73
74
  /** Tracks which tools are instance methods (className set, not static) */
74
75
  private instanceTools;
75
76
  private currentDomainRevision;
77
+ /** Local effect registry: name → full ToolWithHandler */
78
+ private effects;
79
+ /** Last known tools for diffing */
80
+ private lastKnownTools;
76
81
  constructor(client: WSClient, clientId?: string);
77
82
  get document(): Doc<Record<string, unknown>>;
78
83
  get domainRevision(): string | null;
@@ -140,6 +145,64 @@ declare class Session {
140
145
  * ```
141
146
  */
142
147
  publishTools(tools: ToolWithHandler[], revision?: string): Promise<PublishToolsResult>;
148
+ /**
149
+ * Publish a single effect (tool) to the sandbox.
150
+ *
151
+ * Adds the effect to the local registry and re-publishes the
152
+ * full tool catalog to the server. If an effect with the same
153
+ * name already exists, it is replaced.
154
+ *
155
+ * @param effect - The effect (tool) to publish
156
+ * @returns PublishToolsResult with domainRevision
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * await env.publishEffect({
161
+ * name: 'get_bio',
162
+ * description: 'Get biography of an author',
163
+ * className: 'author',
164
+ * inputSchema: { type: 'object', properties: { detailed: { type: 'boolean' } } },
165
+ * handler: async (id, params) => ({ bio: `Bio of ${id}` }),
166
+ * });
167
+ * ```
168
+ */
169
+ publishEffect(effect: ToolWithHandler): Promise<PublishToolsResult>;
170
+ /**
171
+ * Publish multiple effects (tools) at once.
172
+ *
173
+ * Adds all effects to the local registry and re-publishes the
174
+ * full tool catalog in a single RPC call.
175
+ *
176
+ * @param effects - Array of effects to publish
177
+ * @returns PublishToolsResult with domainRevision
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * await env.publishEffects([
182
+ * { name: 'get_bio', description: '...', inputSchema: {}, handler: async (id) => ({}) },
183
+ * { name: 'search', description: '...', inputSchema: {}, handler: async (params) => ({}) },
184
+ * ]);
185
+ * ```
186
+ */
187
+ publishEffects(effects: ToolWithHandler[]): Promise<PublishToolsResult>;
188
+ /**
189
+ * Remove an effect by name and re-publish the remaining catalog.
190
+ *
191
+ * @param name - The name of the effect to remove
192
+ * @returns PublishToolsResult with domainRevision
193
+ */
194
+ unpublishEffect(name: string): Promise<PublishToolsResult>;
195
+ /**
196
+ * Remove all effects and publish an empty catalog.
197
+ *
198
+ * @returns PublishToolsResult with domainRevision
199
+ */
200
+ unpublishAllEffects(): Promise<PublishToolsResult>;
201
+ /**
202
+ * Internal: re-publish the full effect catalog to the server.
203
+ * Called after any mutation to the effects Map.
204
+ */
205
+ private _syncEffects;
143
206
  /**
144
207
  * Submit a job to execute code in the sandbox.
145
208
  *
@@ -166,6 +229,17 @@ declare class Session {
166
229
  * Respond to a prompt request from the sandbox
167
230
  */
168
231
  answerPrompt(promptId: string, answer: unknown): Promise<void>;
232
+ /**
233
+ * Get the current list of available tools.
234
+ * Consolidates tools from all connected clients.
235
+ */
236
+ getTools(): ToolInfo[];
237
+ /**
238
+ * Subscribe to tool changes (added, removed, updated).
239
+ * @param callback - Function called with change events
240
+ * @returns Unsubscribe function
241
+ */
242
+ onToolsChanged(callback: (event: ToolsChangedEvent) => void): () => void;
169
243
  /**
170
244
  * Get the current domain state and available tools
171
245
  */
@@ -208,6 +282,10 @@ declare class Session {
208
282
  private setupToolInvokeHandler;
209
283
  private setupEventHandlers;
210
284
  private emit;
285
+ /**
286
+ * Check for changes in the tool catalog and emit 'tools:changed' if needed
287
+ */
288
+ private checkForToolChanges;
211
289
  }
212
290
 
213
291
  /**
@@ -219,6 +297,7 @@ declare class Session {
219
297
  * 3. Publish tools via `publishTools()` (instance methods, static methods, global tools — with typed I/O)
220
298
  * 4. Submit jobs via `submitJob()` that import auto-generated typed classes from `./sandbox-tools`
221
299
  * 5. Execute GraphQL queries via `graphql()` (authenticated automatically)
300
+ * 6. List available tools via `getTools()` and listen for updates via `onToolsChanged()`
222
301
  *
223
302
  * Tool calls from the sandbox automatically invoke your handlers via reverse-RPC.
224
303
  *
@@ -485,11 +564,49 @@ declare class Environment extends Session {
485
564
  * ```
486
565
  */
487
566
  publishTools(tools: ToolWithHandler[], revision?: string): Promise<PublishToolsResult>;
567
+ /**
568
+ * Publish a single effect (tool) incrementally.
569
+ *
570
+ * Adds the effect to the local registry and re-publishes the
571
+ * full tool catalog to the server. If an effect with the same
572
+ * name already exists, it is replaced.
573
+ *
574
+ * @example
575
+ * ```typescript
576
+ * await env.publishEffect({
577
+ * name: 'get_bio',
578
+ * description: 'Get biography',
579
+ * inputSchema: { type: 'object', properties: { detailed: { type: 'boolean' } } },
580
+ * handler: async (params) => ({ bio: 'Hello' }),
581
+ * });
582
+ * ```
583
+ */
584
+ publishEffect(effect: ToolWithHandler): Promise<PublishToolsResult>;
585
+ /**
586
+ * Publish multiple effects (tools) at once.
587
+ *
588
+ * Adds all effects to the local registry and re-publishes the
589
+ * full tool catalog in a single RPC call.
590
+ */
591
+ publishEffects(effects: ToolWithHandler[]): Promise<PublishToolsResult>;
592
+ /**
593
+ * Remove an effect by name and re-publish the remaining catalog.
594
+ */
595
+ unpublishEffect(name: string): Promise<PublishToolsResult>;
596
+ /**
597
+ * Remove all effects and publish an empty catalog.
598
+ */
599
+ unpublishAllEffects(): Promise<PublishToolsResult>;
488
600
  }
489
601
  declare class Granular {
490
602
  private apiKey;
491
603
  private apiUrl;
492
604
  private httpUrl;
605
+ private WebSocketCtor?;
606
+ /** Sandbox-level effect registry: sandboxId → (toolName → ToolWithHandler) */
607
+ private sandboxEffects;
608
+ /** Active environments tracker: sandboxId → Environment[] */
609
+ private activeEnvironments;
493
610
  /**
494
611
  * Create a new Granular client
495
612
  * @param options - Client configuration
@@ -547,6 +664,34 @@ declare class Granular {
547
664
  * ```
548
665
  */
549
666
  connect(options: ConnectOptions): Promise<Environment>;
667
+ /**
668
+ * Register an effect (tool) for a specific sandbox.
669
+ *
670
+ * The effect will be automatically published to:
671
+ * 1. Any currently active environments for this sandbox
672
+ * 2. Any new environments created/connected for this sandbox
673
+ *
674
+ * @param sandboxNameOrId - The name or ID of the sandbox
675
+ * @param effect - The tool definition and handler
676
+ */
677
+ registerEffect(sandboxNameOrId: string, effect: ToolWithHandler): Promise<void>;
678
+ /**
679
+ * Register multiple effects (tools) for a specific sandbox.
680
+ *
681
+ * batch version of `registerEffect`.
682
+ */
683
+ registerEffects(sandboxNameOrId: string, effects: ToolWithHandler[]): Promise<void>;
684
+ /**
685
+ * Unregister an effect from a sandbox.
686
+ *
687
+ * Removes it from the local registry and unpublishes it from
688
+ * all active environments.
689
+ */
690
+ unregisterEffect(sandboxNameOrId: string, name: string): Promise<void>;
691
+ /**
692
+ * Unregister all effects for a sandbox.
693
+ */
694
+ unregisterAllEffects(sandboxNameOrId: string): Promise<void>;
550
695
  /**
551
696
  * Find a sandbox by name or create it if it doesn't exist
552
697
  */
@@ -613,4 +758,4 @@ declare class Granular {
613
758
  private request;
614
759
  }
615
760
 
616
- export { AssignmentListResponse, ConnectOptions, CreateEnvironmentData, CreatePermissionProfileData, CreateSandboxData, DefineRelationshipOptions, DeleteResponse, DomainState, Environment, EnvironmentData, Granular, GranularOptions, GraphQLResult, InstanceToolHandler, Job, ManifestContent, ModelRef, PermissionProfile, PublishToolsResult, RecordObjectOptions, RecordObjectResult, RecordUserOptions, RelationshipInfo, Sandbox, SandboxListResponse, Session, Subject, ToolHandler, ToolWithHandler, User, WSClient, WSClientOptions };
761
+ export { AssignmentListResponse, ConnectOptions, CreateEnvironmentData, CreatePermissionProfileData, CreateSandboxData, DefineRelationshipOptions, DeleteResponse, DomainState, Environment, EnvironmentData, Granular, GranularOptions, GraphQLResult, InstanceToolHandler, Job, ManifestContent, ModelRef, PermissionProfile, PublishToolsResult, RecordObjectOptions, RecordObjectResult, RecordUserOptions, RelationshipInfo, Sandbox, SandboxListResponse, Session, Subject, ToolHandler, ToolInfo, ToolWithHandler, ToolsChangedEvent, User, WSClient, WSClientOptions };