@vagarylabs/plugin-sdk 1.1.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 (62) hide show
  1. package/README.md +1224 -0
  2. package/dist/bundlers.d.ts +57 -0
  3. package/dist/bundlers.d.ts.map +1 -0
  4. package/dist/bundlers.js +106 -0
  5. package/dist/bundlers.js.map +1 -0
  6. package/dist/define-plugin.d.ts +266 -0
  7. package/dist/define-plugin.d.ts.map +1 -0
  8. package/dist/define-plugin.js +85 -0
  9. package/dist/define-plugin.js.map +1 -0
  10. package/dist/dev-cli.d.ts +3 -0
  11. package/dist/dev-cli.d.ts.map +1 -0
  12. package/dist/dev-cli.js +49 -0
  13. package/dist/dev-cli.js.map +1 -0
  14. package/dist/dev-server.d.ts +34 -0
  15. package/dist/dev-server.d.ts.map +1 -0
  16. package/dist/dev-server.js +194 -0
  17. package/dist/dev-server.js.map +1 -0
  18. package/dist/host-client-factory.d.ts +312 -0
  19. package/dist/host-client-factory.d.ts.map +1 -0
  20. package/dist/host-client-factory.js +623 -0
  21. package/dist/host-client-factory.js.map +1 -0
  22. package/dist/index.d.ts +84 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +84 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/protocol.d.ts +1556 -0
  27. package/dist/protocol.d.ts.map +1 -0
  28. package/dist/protocol.js +369 -0
  29. package/dist/protocol.js.map +1 -0
  30. package/dist/testing.d.ts +183 -0
  31. package/dist/testing.d.ts.map +1 -0
  32. package/dist/testing.js +2265 -0
  33. package/dist/testing.js.map +1 -0
  34. package/dist/types.d.ts +1621 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +12 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/ui/components.d.ts +517 -0
  39. package/dist/ui/components.d.ts.map +1 -0
  40. package/dist/ui/components.js +135 -0
  41. package/dist/ui/components.js.map +1 -0
  42. package/dist/ui/hooks.d.ts +155 -0
  43. package/dist/ui/hooks.d.ts.map +1 -0
  44. package/dist/ui/hooks.js +195 -0
  45. package/dist/ui/hooks.js.map +1 -0
  46. package/dist/ui/index.d.ts +54 -0
  47. package/dist/ui/index.d.ts.map +1 -0
  48. package/dist/ui/index.js +51 -0
  49. package/dist/ui/index.js.map +1 -0
  50. package/dist/ui/runtime.d.ts +3 -0
  51. package/dist/ui/runtime.d.ts.map +1 -0
  52. package/dist/ui/runtime.js +30 -0
  53. package/dist/ui/runtime.js.map +1 -0
  54. package/dist/ui/types.d.ts +400 -0
  55. package/dist/ui/types.d.ts.map +1 -0
  56. package/dist/ui/types.js +17 -0
  57. package/dist/ui/types.js.map +1 -0
  58. package/dist/worker-rpc-host.d.ts +128 -0
  59. package/dist/worker-rpc-host.d.ts.map +1 -0
  60. package/dist/worker-rpc-host.js +1510 -0
  61. package/dist/worker-rpc-host.js.map +1 -0
  62. package/package.json +128 -0
@@ -0,0 +1,623 @@
1
+ /**
2
+ * Host-side client factory — creates capability-gated handler maps for
3
+ * servicing worker→host JSON-RPC calls.
4
+ *
5
+ * When a plugin worker calls `ctx.state.get(...)` inside its process, the
6
+ * SDK serializes the call as a JSON-RPC request over stdio. On the host side,
7
+ * the `PluginWorkerManager` receives the request and dispatches it to the
8
+ * handler registered for that method. This module provides a factory that
9
+ * creates those handlers for all `WorkerToHostMethods`, with automatic
10
+ * capability enforcement.
11
+ *
12
+ * ## Design
13
+ *
14
+ * 1. **Capability gating**: Each handler checks the plugin's declared
15
+ * capabilities before executing. If the plugin lacks a required capability,
16
+ * the handler throws a `CapabilityDeniedError` (which the worker manager
17
+ * translates into a JSON-RPC error response with code
18
+ * `CAPABILITY_DENIED`).
19
+ *
20
+ * 2. **Service adapters**: The caller provides a `HostServices` object with
21
+ * concrete implementations of each platform service. The factory wires
22
+ * each handler to the appropriate service method.
23
+ *
24
+ * 3. **Type safety**: The returned handler map is typed as
25
+ * `WorkerToHostHandlers` (from `plugin-worker-manager.ts`) so it plugs
26
+ * directly into `WorkerStartOptions.hostHandlers`.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const handlers = createHostClientHandlers({
31
+ * pluginId: "acme.linear",
32
+ * capabilities: manifest.capabilities,
33
+ * services: {
34
+ * config: { get: () => registry.getConfig(pluginId) },
35
+ * state: { get: ..., set: ..., delete: ... },
36
+ * entities: { upsert: ..., list: ... },
37
+ * // ... all services
38
+ * },
39
+ * });
40
+ *
41
+ * await workerManager.startWorker("acme.linear", {
42
+ * // ...
43
+ * hostHandlers: handlers,
44
+ * });
45
+ * ```
46
+ *
47
+ * @see PLUGIN_SPEC.md §13 — Host-Worker Protocol
48
+ * @see PLUGIN_SPEC.md §15 — Capability Model
49
+ */
50
+ import { PLUGIN_RPC_ERROR_CODES } from "./protocol.js";
51
+ // ---------------------------------------------------------------------------
52
+ // Error types
53
+ // ---------------------------------------------------------------------------
54
+ /**
55
+ * Thrown when a plugin calls a host method it does not have the capability for.
56
+ *
57
+ * The `code` field is set to `PLUGIN_RPC_ERROR_CODES.CAPABILITY_DENIED` so
58
+ * the worker manager can propagate it as the correct JSON-RPC error code.
59
+ */
60
+ export class CapabilityDeniedError extends Error {
61
+ name = "CapabilityDeniedError";
62
+ code = PLUGIN_RPC_ERROR_CODES.CAPABILITY_DENIED;
63
+ constructor(pluginId, method, capability) {
64
+ super(`Plugin "${pluginId}" is missing required capability "${capability}" for method "${method}"`);
65
+ }
66
+ }
67
+ /**
68
+ * Thrown when a worker→host call asks for company-scoped data outside the
69
+ * company authorized for the current top-level plugin invocation.
70
+ */
71
+ export class InvocationScopeDeniedError extends Error {
72
+ name = "InvocationScopeDeniedError";
73
+ code = PLUGIN_RPC_ERROR_CODES.INVOCATION_SCOPE_DENIED;
74
+ constructor(pluginId, method, message) {
75
+ super(`Plugin "${pluginId}" is not allowed to perform "${method}": ${message}`);
76
+ }
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // Capability → method mapping
80
+ // ---------------------------------------------------------------------------
81
+ /**
82
+ * Maps each worker→host RPC method to the capability required to invoke it.
83
+ * Methods without a capability requirement (e.g. `config.get`, `log`) are
84
+ * mapped to `null`.
85
+ *
86
+ * @see PLUGIN_SPEC.md §15 — Capability Model
87
+ */
88
+ const METHOD_CAPABILITY_MAP = {
89
+ // Config — always allowed
90
+ "config.get": null,
91
+ // Trusted local folders
92
+ "localFolders.declarations": null,
93
+ "localFolders.configure": "local.folders",
94
+ "localFolders.status": "local.folders",
95
+ "localFolders.list": "local.folders",
96
+ "localFolders.readText": "local.folders",
97
+ "localFolders.writeTextAtomic": "local.folders",
98
+ "localFolders.deleteFile": "local.folders",
99
+ // State
100
+ "state.get": "plugin.state.read",
101
+ "state.set": "plugin.state.write",
102
+ "state.delete": "plugin.state.write",
103
+ "db.namespace": "database.namespace.read",
104
+ "db.query": "database.namespace.read",
105
+ "db.execute": "database.namespace.write",
106
+ // Entities — no specific capability required (plugin-scoped by design)
107
+ "entities.upsert": null,
108
+ "entities.list": null,
109
+ // Events
110
+ "events.emit": "events.emit",
111
+ "events.subscribe": "events.subscribe",
112
+ // HTTP
113
+ "http.fetch": "http.outbound",
114
+ // Secrets
115
+ "secrets.resolve": "secrets.read-ref",
116
+ // Activity
117
+ "activity.log": "activity.log.write",
118
+ // Metrics
119
+ "metrics.write": "metrics.write",
120
+ // Telemetry
121
+ "telemetry.track": "telemetry.track",
122
+ // Logger — always allowed
123
+ "log": null,
124
+ // Companies
125
+ "companies.list": "companies.read",
126
+ "companies.get": "companies.read",
127
+ // Projects
128
+ "projects.list": "projects.read",
129
+ "projects.get": "projects.read",
130
+ "projects.listWorkspaces": "project.workspaces.read",
131
+ "projects.getPrimaryWorkspace": "project.workspaces.read",
132
+ "projects.getWorkspaceForIssue": "project.workspaces.read",
133
+ "executionWorkspaces.get": "execution.workspaces.read",
134
+ "projects.managed.get": "projects.managed",
135
+ "projects.managed.reconcile": "projects.managed",
136
+ "projects.managed.reset": "projects.managed",
137
+ "routines.managed.get": "routines.managed",
138
+ "routines.managed.reconcile": "routines.managed",
139
+ "routines.managed.reset": "routines.managed",
140
+ "routines.managed.update": "routines.managed",
141
+ "routines.managed.run": "routines.managed",
142
+ "skills.managed.get": "skills.managed",
143
+ "skills.managed.reconcile": "skills.managed",
144
+ "skills.managed.reset": "skills.managed",
145
+ // Issues
146
+ "issues.list": "issues.read",
147
+ "issues.get": "issues.read",
148
+ "issues.create": "issues.create",
149
+ "issues.update": "issues.update",
150
+ "issues.relations.get": "issue.relations.read",
151
+ "issues.relations.setBlockedBy": "issue.relations.write",
152
+ "issues.relations.addBlockers": "issue.relations.write",
153
+ "issues.relations.removeBlockers": "issue.relations.write",
154
+ "issues.assertCheckoutOwner": "issues.checkout",
155
+ "issues.getSubtree": "issue.subtree.read",
156
+ "issues.requestWakeup": "issues.wakeup",
157
+ "issues.requestWakeups": "issues.wakeup",
158
+ "issues.summaries.getOrchestration": "issues.orchestration.read",
159
+ "issues.listComments": "issue.comments.read",
160
+ "issues.createComment": "issue.comments.create",
161
+ "issues.createInteraction": "issue.interactions.create",
162
+ // Issue Documents
163
+ "issues.documents.list": "issue.documents.read",
164
+ "issues.documents.get": "issue.documents.read",
165
+ "issues.documents.upsert": "issue.documents.write",
166
+ "issues.documents.delete": "issue.documents.write",
167
+ // Agents
168
+ "agents.list": "agents.read",
169
+ "agents.get": "agents.read",
170
+ "agents.pause": "agents.pause",
171
+ "agents.resume": "agents.resume",
172
+ "agents.invoke": "agents.invoke",
173
+ "agents.managed.get": "agents.managed",
174
+ "agents.managed.reconcile": "agents.managed",
175
+ "agents.managed.reset": "agents.managed",
176
+ // Agent Sessions
177
+ "agents.sessions.create": "agent.sessions.create",
178
+ "agents.sessions.list": "agent.sessions.list",
179
+ "agents.sessions.sendMessage": "agent.sessions.send",
180
+ "agents.sessions.close": "agent.sessions.close",
181
+ // Goals
182
+ "goals.list": "goals.read",
183
+ "goals.get": "goals.read",
184
+ "goals.create": "goals.create",
185
+ "goals.update": "goals.update",
186
+ // Access
187
+ "access.members.list": "access.members.read",
188
+ "access.members.get": "access.members.read",
189
+ "access.members.update": "access.members.write",
190
+ "access.invites.list": "access.invites.read",
191
+ "access.invites.create": "access.invites.write",
192
+ "access.invites.revoke": "access.invites.write",
193
+ // Authorization
194
+ "authorization.grants.list": "authorization.grants.read",
195
+ "authorization.grants.set": "authorization.grants.write",
196
+ "authorization.policies.summary": "authorization.policies.read",
197
+ "authorization.policies.get": "authorization.policies.read",
198
+ "authorization.policies.update": "authorization.policies.write",
199
+ "authorization.policies.previewAssignment": "authorization.policies.read",
200
+ "authorization.policies.explainAssignment": "authorization.policies.read",
201
+ "authorization.audit.search": "authorization.audit.read",
202
+ };
203
+ // ---------------------------------------------------------------------------
204
+ // Factory
205
+ // ---------------------------------------------------------------------------
206
+ /**
207
+ * Create a complete handler map for all worker→host JSON-RPC methods.
208
+ *
209
+ * Each handler:
210
+ * 1. Checks the plugin's declared capabilities against the required capability
211
+ * for the method (if any).
212
+ * 2. Delegates to the corresponding service adapter method.
213
+ * 3. Returns the service result, which is serialized as the JSON-RPC response
214
+ * by the worker manager.
215
+ *
216
+ * If a capability check fails, the handler throws a `CapabilityDeniedError`
217
+ * with code `CAPABILITY_DENIED`. The worker manager catches this and sends a
218
+ * JSON-RPC error response to the worker, which surfaces as a `JsonRpcCallError`
219
+ * in the plugin's SDK client.
220
+ *
221
+ * @param options - Plugin ID, capabilities, and service adapters
222
+ * @returns A handler map suitable for `WorkerStartOptions.hostHandlers`
223
+ */
224
+ export function createHostClientHandlers(options) {
225
+ const { pluginId, services } = options;
226
+ const capabilitySet = new Set(options.capabilities);
227
+ const noCompanyScope = { kind: "none" };
228
+ function isRecord(value) {
229
+ return typeof value === "object" && value !== null && !Array.isArray(value);
230
+ }
231
+ function readNonEmptyString(value) {
232
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
233
+ }
234
+ function requestedCompanyScope(method, params) {
235
+ if (method === "companies.list")
236
+ return { kind: "all" };
237
+ if (!isRecord(params))
238
+ return noCompanyScope;
239
+ const companyId = readNonEmptyString(params.companyId);
240
+ if (companyId)
241
+ return { kind: "single", companyId };
242
+ if (params.scopeKind === "company") {
243
+ const scopeId = readNonEmptyString(params.scopeId);
244
+ return scopeId ? { kind: "single", companyId: scopeId } : { kind: "all" };
245
+ }
246
+ if (method === "events.subscribe" && isRecord(params.filter)) {
247
+ const filterCompanyId = readNonEmptyString(params.filter.companyId);
248
+ if (filterCompanyId)
249
+ return { kind: "single", companyId: filterCompanyId };
250
+ }
251
+ return noCompanyScope;
252
+ }
253
+ function requireInvocationCompanyScope(method, params, context) {
254
+ const requested = requestedCompanyScope(method, params);
255
+ if (requested.kind === "none")
256
+ return;
257
+ if (context?.invalidInvocationScope) {
258
+ throw new InvocationScopeDeniedError(pluginId, method, "the worker referenced a missing, expired, or unknown invocation scope");
259
+ }
260
+ const allowedCompanyId = readNonEmptyString(context?.invocationScope?.companyId);
261
+ if (!allowedCompanyId)
262
+ return;
263
+ if (requested.kind === "all") {
264
+ if (method === "companies.list")
265
+ return;
266
+ throw new InvocationScopeDeniedError(pluginId, method, `the current invocation is scoped to company "${allowedCompanyId}"`);
267
+ }
268
+ if (requested.companyId !== allowedCompanyId) {
269
+ throw new InvocationScopeDeniedError(pluginId, method, `requested company "${requested.companyId}" but the current invocation is scoped to company "${allowedCompanyId}"`);
270
+ }
271
+ }
272
+ /**
273
+ * Assert that the plugin has the required capability for a method.
274
+ * Throws `CapabilityDeniedError` if the capability is missing.
275
+ */
276
+ function requireCapability(method) {
277
+ const required = METHOD_CAPABILITY_MAP[method];
278
+ if (required === null)
279
+ return; // No capability required
280
+ if (capabilitySet.has(required))
281
+ return;
282
+ throw new CapabilityDeniedError(pluginId, method, required);
283
+ }
284
+ /**
285
+ * Create a capability-gated proxy handler for a method.
286
+ *
287
+ * @param method - The RPC method name (used for capability lookup)
288
+ * @param handler - The actual handler implementation
289
+ * @returns A wrapper that checks capabilities before delegating
290
+ */
291
+ function gated(method, handler) {
292
+ return async (params, context) => {
293
+ requireCapability(method);
294
+ requireInvocationCompanyScope(method, params, context);
295
+ return handler(params, context);
296
+ };
297
+ }
298
+ // -------------------------------------------------------------------------
299
+ // Build the complete handler map
300
+ // -------------------------------------------------------------------------
301
+ return {
302
+ // Config
303
+ "config.get": gated("config.get", async () => {
304
+ return services.config.get();
305
+ }),
306
+ "localFolders.declarations": gated("localFolders.declarations", async (params) => {
307
+ return services.localFolders.declarations(params);
308
+ }),
309
+ "localFolders.configure": gated("localFolders.configure", async (params) => {
310
+ return services.localFolders.configure(params);
311
+ }),
312
+ "localFolders.status": gated("localFolders.status", async (params) => {
313
+ return services.localFolders.status(params);
314
+ }),
315
+ "localFolders.list": gated("localFolders.list", async (params) => {
316
+ return services.localFolders.list(params);
317
+ }),
318
+ "localFolders.readText": gated("localFolders.readText", async (params) => {
319
+ return services.localFolders.readText(params);
320
+ }),
321
+ "localFolders.writeTextAtomic": gated("localFolders.writeTextAtomic", async (params) => {
322
+ return services.localFolders.writeTextAtomic(params);
323
+ }),
324
+ "localFolders.deleteFile": gated("localFolders.deleteFile", async (params) => {
325
+ return services.localFolders.deleteFile(params);
326
+ }),
327
+ // State
328
+ "state.get": gated("state.get", async (params) => {
329
+ return services.state.get(params);
330
+ }),
331
+ "state.set": gated("state.set", async (params) => {
332
+ return services.state.set(params);
333
+ }),
334
+ "state.delete": gated("state.delete", async (params) => {
335
+ return services.state.delete(params);
336
+ }),
337
+ "db.namespace": gated("db.namespace", async (params) => {
338
+ return services.db.namespace(params);
339
+ }),
340
+ "db.query": gated("db.query", async (params) => {
341
+ return services.db.query(params);
342
+ }),
343
+ "db.execute": gated("db.execute", async (params) => {
344
+ return services.db.execute(params);
345
+ }),
346
+ // Entities
347
+ "entities.upsert": gated("entities.upsert", async (params) => {
348
+ return services.entities.upsert(params);
349
+ }),
350
+ "entities.list": gated("entities.list", async (params) => {
351
+ return services.entities.list(params);
352
+ }),
353
+ // Events
354
+ "events.emit": gated("events.emit", async (params) => {
355
+ return services.events.emit(params);
356
+ }),
357
+ "events.subscribe": gated("events.subscribe", async (params) => {
358
+ return services.events.subscribe(params);
359
+ }),
360
+ // HTTP
361
+ "http.fetch": gated("http.fetch", async (params) => {
362
+ return services.http.fetch(params);
363
+ }),
364
+ // Secrets
365
+ "secrets.resolve": gated("secrets.resolve", async (params) => {
366
+ return services.secrets.resolve(params);
367
+ }),
368
+ // Activity
369
+ "activity.log": gated("activity.log", async (params) => {
370
+ return services.activity.log(params);
371
+ }),
372
+ // Metrics
373
+ "metrics.write": gated("metrics.write", async (params) => {
374
+ return services.metrics.write(params);
375
+ }),
376
+ // Telemetry
377
+ "telemetry.track": gated("telemetry.track", async (params) => {
378
+ return services.telemetry.track(params);
379
+ }),
380
+ // Logger
381
+ "log": gated("log", async (params) => {
382
+ return services.logger.log(params);
383
+ }),
384
+ // Companies
385
+ "companies.list": gated("companies.list", async (params, context) => {
386
+ const rows = await services.companies.list(params);
387
+ const allowedCompanyId = readNonEmptyString(context?.invocationScope?.companyId);
388
+ if (!allowedCompanyId)
389
+ return rows;
390
+ return rows.filter((company) => isRecord(company) && company.id === allowedCompanyId);
391
+ }),
392
+ "companies.get": gated("companies.get", async (params) => {
393
+ return services.companies.get(params);
394
+ }),
395
+ // Projects
396
+ "projects.list": gated("projects.list", async (params) => {
397
+ return services.projects.list(params);
398
+ }),
399
+ "projects.get": gated("projects.get", async (params) => {
400
+ return services.projects.get(params);
401
+ }),
402
+ "projects.listWorkspaces": gated("projects.listWorkspaces", async (params) => {
403
+ return services.projects.listWorkspaces(params);
404
+ }),
405
+ "projects.getPrimaryWorkspace": gated("projects.getPrimaryWorkspace", async (params) => {
406
+ return services.projects.getPrimaryWorkspace(params);
407
+ }),
408
+ "projects.getWorkspaceForIssue": gated("projects.getWorkspaceForIssue", async (params) => {
409
+ return services.projects.getWorkspaceForIssue(params);
410
+ }),
411
+ "executionWorkspaces.get": gated("executionWorkspaces.get", async (params) => {
412
+ return services.executionWorkspaces.get(params);
413
+ }),
414
+ "projects.managed.get": gated("projects.managed.get", async (params) => {
415
+ return services.projects.getManaged(params);
416
+ }),
417
+ "projects.managed.reconcile": gated("projects.managed.reconcile", async (params) => {
418
+ return services.projects.reconcileManaged(params);
419
+ }),
420
+ "projects.managed.reset": gated("projects.managed.reset", async (params) => {
421
+ return services.projects.resetManaged(params);
422
+ }),
423
+ // Routines
424
+ "routines.managed.get": gated("routines.managed.get", async (params) => {
425
+ return services.routines.managedGet(params);
426
+ }),
427
+ "routines.managed.reconcile": gated("routines.managed.reconcile", async (params) => {
428
+ return services.routines.managedReconcile(params);
429
+ }),
430
+ "routines.managed.reset": gated("routines.managed.reset", async (params) => {
431
+ return services.routines.managedReset(params);
432
+ }),
433
+ "routines.managed.update": gated("routines.managed.update", async (params) => {
434
+ return services.routines.managedUpdate(params);
435
+ }),
436
+ "routines.managed.run": gated("routines.managed.run", async (params) => {
437
+ return services.routines.managedRun(params);
438
+ }),
439
+ // Skills
440
+ "skills.managed.get": gated("skills.managed.get", async (params) => {
441
+ return services.skills.managedGet(params);
442
+ }),
443
+ "skills.managed.reconcile": gated("skills.managed.reconcile", async (params) => {
444
+ return services.skills.managedReconcile(params);
445
+ }),
446
+ "skills.managed.reset": gated("skills.managed.reset", async (params) => {
447
+ return services.skills.managedReset(params);
448
+ }),
449
+ // Issues
450
+ "issues.list": gated("issues.list", async (params) => {
451
+ return services.issues.list(params);
452
+ }),
453
+ "issues.get": gated("issues.get", async (params) => {
454
+ return services.issues.get(params);
455
+ }),
456
+ "issues.create": gated("issues.create", async (params) => {
457
+ return services.issues.create(params);
458
+ }),
459
+ "issues.update": gated("issues.update", async (params) => {
460
+ return services.issues.update(params);
461
+ }),
462
+ "issues.relations.get": gated("issues.relations.get", async (params) => {
463
+ return services.issues.getRelations(params);
464
+ }),
465
+ "issues.relations.setBlockedBy": gated("issues.relations.setBlockedBy", async (params) => {
466
+ return services.issues.setBlockedBy(params);
467
+ }),
468
+ "issues.relations.addBlockers": gated("issues.relations.addBlockers", async (params) => {
469
+ return services.issues.addBlockers(params);
470
+ }),
471
+ "issues.relations.removeBlockers": gated("issues.relations.removeBlockers", async (params) => {
472
+ return services.issues.removeBlockers(params);
473
+ }),
474
+ "issues.assertCheckoutOwner": gated("issues.assertCheckoutOwner", async (params) => {
475
+ return services.issues.assertCheckoutOwner(params);
476
+ }),
477
+ "issues.getSubtree": gated("issues.getSubtree", async (params) => {
478
+ return services.issues.getSubtree(params);
479
+ }),
480
+ "issues.requestWakeup": gated("issues.requestWakeup", async (params) => {
481
+ return services.issues.requestWakeup(params);
482
+ }),
483
+ "issues.requestWakeups": gated("issues.requestWakeups", async (params) => {
484
+ return services.issues.requestWakeups(params);
485
+ }),
486
+ "issues.summaries.getOrchestration": gated("issues.summaries.getOrchestration", async (params) => {
487
+ return services.issues.getOrchestrationSummary(params);
488
+ }),
489
+ "issues.listComments": gated("issues.listComments", async (params) => {
490
+ return services.issues.listComments(params);
491
+ }),
492
+ "issues.createComment": gated("issues.createComment", async (params) => {
493
+ return services.issues.createComment(params);
494
+ }),
495
+ "issues.createInteraction": gated("issues.createInteraction", async (params) => {
496
+ return services.issues.createInteraction(params);
497
+ }),
498
+ // Issue Documents
499
+ "issues.documents.list": gated("issues.documents.list", async (params) => {
500
+ return services.issueDocuments.list(params);
501
+ }),
502
+ "issues.documents.get": gated("issues.documents.get", async (params) => {
503
+ return services.issueDocuments.get(params);
504
+ }),
505
+ "issues.documents.upsert": gated("issues.documents.upsert", async (params) => {
506
+ return services.issueDocuments.upsert(params);
507
+ }),
508
+ "issues.documents.delete": gated("issues.documents.delete", async (params) => {
509
+ return services.issueDocuments.delete(params);
510
+ }),
511
+ // Agents
512
+ "agents.list": gated("agents.list", async (params) => {
513
+ return services.agents.list(params);
514
+ }),
515
+ "agents.get": gated("agents.get", async (params) => {
516
+ return services.agents.get(params);
517
+ }),
518
+ "agents.pause": gated("agents.pause", async (params) => {
519
+ return services.agents.pause(params);
520
+ }),
521
+ "agents.resume": gated("agents.resume", async (params) => {
522
+ return services.agents.resume(params);
523
+ }),
524
+ "agents.invoke": gated("agents.invoke", async (params) => {
525
+ return services.agents.invoke(params);
526
+ }),
527
+ "agents.managed.get": gated("agents.managed.get", async (params) => {
528
+ return services.agents.managedGet(params);
529
+ }),
530
+ "agents.managed.reconcile": gated("agents.managed.reconcile", async (params) => {
531
+ return services.agents.managedReconcile(params);
532
+ }),
533
+ "agents.managed.reset": gated("agents.managed.reset", async (params) => {
534
+ return services.agents.managedReset(params);
535
+ }),
536
+ // Agent Sessions
537
+ "agents.sessions.create": gated("agents.sessions.create", async (params) => {
538
+ return services.agentSessions.create(params);
539
+ }),
540
+ "agents.sessions.list": gated("agents.sessions.list", async (params) => {
541
+ return services.agentSessions.list(params);
542
+ }),
543
+ "agents.sessions.sendMessage": gated("agents.sessions.sendMessage", async (params) => {
544
+ return services.agentSessions.sendMessage(params);
545
+ }),
546
+ "agents.sessions.close": gated("agents.sessions.close", async (params) => {
547
+ return services.agentSessions.close(params);
548
+ }),
549
+ // Goals
550
+ "goals.list": gated("goals.list", async (params) => {
551
+ return services.goals.list(params);
552
+ }),
553
+ "goals.get": gated("goals.get", async (params) => {
554
+ return services.goals.get(params);
555
+ }),
556
+ "goals.create": gated("goals.create", async (params) => {
557
+ return services.goals.create(params);
558
+ }),
559
+ "goals.update": gated("goals.update", async (params) => {
560
+ return services.goals.update(params);
561
+ }),
562
+ // Access
563
+ "access.members.list": gated("access.members.list", async (params) => {
564
+ return services.access.listMembers(params);
565
+ }),
566
+ "access.members.get": gated("access.members.get", async (params) => {
567
+ return services.access.getMember(params);
568
+ }),
569
+ "access.members.update": gated("access.members.update", async (params) => {
570
+ return services.access.updateMember(params);
571
+ }),
572
+ "access.invites.list": gated("access.invites.list", async (params) => {
573
+ return services.access.listInvites(params);
574
+ }),
575
+ "access.invites.create": gated("access.invites.create", async (params) => {
576
+ return services.access.createInvite(params);
577
+ }),
578
+ "access.invites.revoke": gated("access.invites.revoke", async (params) => {
579
+ return services.access.revokeInvite(params);
580
+ }),
581
+ // Authorization
582
+ "authorization.grants.list": gated("authorization.grants.list", async (params) => {
583
+ return services.authorization.listGrants(params);
584
+ }),
585
+ "authorization.grants.set": gated("authorization.grants.set", async (params) => {
586
+ return services.authorization.setGrants(params);
587
+ }),
588
+ "authorization.policies.summary": gated("authorization.policies.summary", async (params) => {
589
+ return services.authorization.policySummary(params);
590
+ }),
591
+ "authorization.policies.get": gated("authorization.policies.get", async (params) => {
592
+ return services.authorization.getPolicy(params);
593
+ }),
594
+ "authorization.policies.update": gated("authorization.policies.update", async (params) => {
595
+ return services.authorization.updatePolicy(params);
596
+ }),
597
+ "authorization.policies.previewAssignment": gated("authorization.policies.previewAssignment", async (params) => {
598
+ return services.authorization.previewAssignment(params);
599
+ }),
600
+ "authorization.policies.explainAssignment": gated("authorization.policies.explainAssignment", async (params) => {
601
+ return services.authorization.explainAssignment(params);
602
+ }),
603
+ "authorization.audit.search": gated("authorization.audit.search", async (params) => {
604
+ return services.authorization.searchAudit(params);
605
+ }),
606
+ };
607
+ }
608
+ // ---------------------------------------------------------------------------
609
+ // Utility: getRequiredCapability
610
+ // ---------------------------------------------------------------------------
611
+ /**
612
+ * Get the capability required for a given worker→host method, or `null` if
613
+ * no capability is required.
614
+ *
615
+ * Useful for inspecting capability requirements without calling the factory.
616
+ *
617
+ * @param method - The worker→host method name
618
+ * @returns The required capability, or `null`
619
+ */
620
+ export function getRequiredCapability(method) {
621
+ return METHOD_CAPABILITY_MAP[method];
622
+ }
623
+ //# sourceMappingURL=host-client-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-client-factory.js","sourceRoot":"","sources":["../src/host-client-factory.ts"],"names":[],"mappings":"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"}