@assemblyline-agents/core 5.0.10 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/adapter-metadata.d.ts +2 -3
  2. package/dist/adapter-metadata.d.ts.map +1 -1
  3. package/dist/adapter-metadata.js +1 -291
  4. package/dist/adapter-metadata.js.map +1 -1
  5. package/dist/agent-capabilities.js +1 -1
  6. package/dist/agent-capabilities.js.map +1 -1
  7. package/dist/agent-definition.d.ts +6 -17
  8. package/dist/agent-definition.d.ts.map +1 -1
  9. package/dist/agent-definition.js +1 -3
  10. package/dist/agent-definition.js.map +1 -1
  11. package/dist/agent-hooks.d.ts +4 -1
  12. package/dist/agent-hooks.d.ts.map +1 -1
  13. package/dist/agent-hooks.js +19 -5
  14. package/dist/agent-hooks.js.map +1 -1
  15. package/dist/agent-plugin-extension.d.ts +194 -0
  16. package/dist/agent-plugin-extension.d.ts.map +1 -0
  17. package/dist/agent-plugin-extension.js +4 -0
  18. package/dist/agent-plugin-extension.js.map +1 -0
  19. package/dist/composition-plan.d.ts +43 -0
  20. package/dist/composition-plan.d.ts.map +1 -0
  21. package/dist/composition-plan.js +65 -0
  22. package/dist/composition-plan.js.map +1 -0
  23. package/dist/connection-types.d.ts +2 -3
  24. package/dist/connection-types.d.ts.map +1 -1
  25. package/dist/connection-types.js.map +1 -1
  26. package/dist/definitions.d.ts +1 -2
  27. package/dist/definitions.d.ts.map +1 -1
  28. package/dist/definitions.js +0 -3
  29. package/dist/definitions.js.map +1 -1
  30. package/dist/deploy.d.ts +9 -20
  31. package/dist/deploy.d.ts.map +1 -1
  32. package/dist/deploy.js +3 -7
  33. package/dist/deploy.js.map +1 -1
  34. package/dist/harness.d.ts +1 -1
  35. package/dist/harness.d.ts.map +1 -1
  36. package/dist/harness.js.map +1 -1
  37. package/dist/index.d.ts +45 -13
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +4 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/manifest-types.d.ts +79 -66
  42. package/dist/manifest-types.d.ts.map +1 -1
  43. package/dist/model-credentials.d.ts +3 -4
  44. package/dist/model-credentials.d.ts.map +1 -1
  45. package/dist/model-provider.d.ts +104 -0
  46. package/dist/model-provider.d.ts.map +1 -0
  47. package/dist/model-provider.js +24 -0
  48. package/dist/model-provider.js.map +1 -0
  49. package/dist/plugin-connection-factories.d.ts.map +1 -1
  50. package/dist/plugin-connection-factories.js +1 -7
  51. package/dist/plugin-connection-factories.js.map +1 -1
  52. package/dist/plugin-contract.d.ts +1 -32
  53. package/dist/plugin-contract.d.ts.map +1 -1
  54. package/dist/plugin-contract.js.map +1 -1
  55. package/dist/plugin.d.ts +0 -6
  56. package/dist/plugin.d.ts.map +1 -1
  57. package/dist/plugin.js +0 -1366
  58. package/dist/plugin.js.map +1 -1
  59. package/dist/provider.d.ts +3 -3
  60. package/dist/sandbox-security.d.ts.map +1 -1
  61. package/dist/sandbox-security.js +2 -21
  62. package/dist/sandbox-security.js.map +1 -1
  63. package/dist/sandbox-types.d.ts +0 -4
  64. package/dist/sandbox-types.d.ts.map +1 -1
  65. package/dist/secrets-types.d.ts.map +1 -1
  66. package/dist/secrets-types.js +11 -21
  67. package/dist/secrets-types.js.map +1 -1
  68. package/package.json +1 -1
package/dist/plugin.js CHANGED
@@ -1,1369 +1,3 @@
1
1
  export * from "./plugin-contract.js";
2
2
  export * from "./plugin-connection-factories.js";
3
- export function connectionPluginMetadata(kind) {
4
- return CONNECTION_PLUGIN_CATALOG.find((entry) => entry.kind === kind);
5
- }
6
- export function connectionPluginMetadataForHelper(helper) {
7
- return helper ? CONNECTION_PLUGIN_CATALOG.find((entry) => entry.helper === helper) : undefined;
8
- }
9
- export function allConnectionPluginMetadata() {
10
- return CONNECTION_PLUGIN_CATALOG.map(cloneMetadata);
11
- }
12
- export function toolPackPluginMetadata(kind) {
13
- const metadata = TOOL_PACK_PLUGIN_CATALOG.find((entry) => entry.kind === kind);
14
- return metadata ? cloneToolPackMetadata(metadata) : undefined;
15
- }
16
- export function allToolPackPluginMetadata() {
17
- return TOOL_PACK_PLUGIN_CATALOG.map(cloneToolPackMetadata);
18
- }
19
- const TOOL_PACK_PLUGIN_CATALOG = [
20
- {
21
- kind: "openui",
22
- role: "tools",
23
- packageName: "@assemblyline-agents/openui",
24
- description: "Full OpenUI component packs with developer policy, immutable revisions, and storage-issued publication links.",
25
- tools: [
26
- {
27
- name: "openui_create",
28
- helper: "defineOpenUiCreateTool",
29
- description: "Create an immutable artifact revision from developer-approved OpenUI components. Raw HTML is not accepted.",
30
- needsApproval: false
31
- },
32
- {
33
- name: "openui_update",
34
- helper: "defineOpenUiUpdateTool",
35
- description: "Create a new immutable revision of an existing OpenUI artifact. Raw HTML is not accepted.",
36
- needsApproval: false
37
- },
38
- {
39
- name: "openui_publish",
40
- helper: "defineOpenUiPublishTool",
41
- description: "Publish one OpenUI artifact revision to an unlisted, storage-issued HTTPS link.",
42
- needsApproval: false
43
- }
44
- ],
45
- config: {
46
- path: "tool-config/openui.ts",
47
- helper: "defineOpenUiConfig",
48
- options: {}
49
- },
50
- skills: ["openui-artifacts"],
51
- requiredConfig: [],
52
- optionalConfig: ["R2_PUBLIC_BASE_URL", "S3_PUBLIC_BASE_URL"],
53
- requiredCredentials: [],
54
- optionalCredentials: [],
55
- setup: [{
56
- kind: "tools",
57
- name: "openui-public-blob-origin",
58
- required: true,
59
- message: "Configure an HTTPS public base URL on the blob adapter, then review the generated OpenUI component and brand policy before publishing."
60
- }]
61
- }
62
- ];
63
- const READ_PATTERNS = [
64
- "regex:(^|[-_])(search|read|list|fetch|get|retrieve|query|lookup|find|describe|details?|discover)([-_]|$)"
65
- ];
66
- const WRITE_PATTERNS = [
67
- "regex:(^|[-_])(add|append|archive|assign|book|buy|cancel|checkout|close|complete|create|delete|draft|duplicate|edit|execute|insert|invite|kick|link|merge|modify|move|mutate|open|pay|post|publish|purchase|push|react|reaction|remove|rename|reply|reserve|resolve|reopen|run|schedule|send|set|share|submit|transfer|transition|unassign|unlink|update|upload|write)([-_]|$)"
68
- ];
69
- function catalogEntry(input) {
70
- const requiredConfig = [
71
- ...(input.urlEnv && !input.defaultUrl ? [input.urlEnv] : []),
72
- ];
73
- const optionalConfig = [
74
- ...(input.urlEnv && input.defaultUrl ? [input.urlEnv] : []),
75
- ...(input.optionalConfig ?? [])
76
- ];
77
- const requiredCredentials = [
78
- ...(input.tokenEnv && input.tokenRequired !== false ? [input.tokenEnv] : []),
79
- ...(input.relayCredential ? [input.relayCredential] : [])
80
- ];
81
- const optionalCredentials = [
82
- ...(input.tokenEnv && input.tokenRequired === false ? [input.tokenEnv] : [])
83
- ];
84
- return {
85
- kind: input.kind,
86
- role: "connection",
87
- packageName: input.packageName ?? `@assemblyline-agents/${input.kind}`,
88
- helper: input.helper,
89
- protocol: input.protocol ?? "mcp",
90
- ...(input.protocol === "sdk" ? {} : { transport: input.transport ?? "http" }),
91
- provider: input.provider ?? input.kind,
92
- description: input.description,
93
- ...(input.defaultUrl ? { defaultUrl: input.defaultUrl } : {}),
94
- ...(input.urlEnv ? { urlEnv: input.urlEnv } : {}),
95
- ...(input.tokenEnv ? { tokenEnv: input.tokenEnv } : {}),
96
- ...(input.tokenEnv ? { tokenRequired: input.tokenRequired !== false } : {}),
97
- ...(input.tokenHeader ? { tokenHeader: input.tokenHeader } : {}),
98
- ...(input.relayCredential ? { relayCredential: input.relayCredential } : {}),
99
- requiredConfig,
100
- optionalConfig,
101
- requiredCredentials,
102
- optionalCredentials,
103
- capabilities: input.protocol === "sdk"
104
- ? ["sdk", "live-tools", "host-execution", "private-assets"]
105
- : ["mcp", "live-tools", input.transport === "stdio" ? "stdio" : input.transport === "relay" ? "e2ee-device-relay" : "streamable-http"],
106
- scopes: [...(input.scopes ?? [])],
107
- // Plugins with user-scoped grants declare subject: "user" explicitly; an
108
- // unannotated plugin gets a deployment credential usable on every surface.
109
- subject: input.subject ?? "workspace",
110
- ...(input.tools ? { tools: cloneToolFilter(input.tools) } : {}),
111
- ...(input.hostRequirements ? { hostRequirements: cloneHostRequirements(input.hostRequirements) } : {}),
112
- readToolPatterns: input.readToolPatterns ?? READ_PATTERNS,
113
- writeToolPatterns: input.writeToolPatterns ?? (input.write ? WRITE_PATTERNS : []),
114
- ...(input.eventCatalog ? { eventCatalog: [...input.eventCatalog] } : {}),
115
- ...(input.defaultEvents ? { defaultEvents: [...input.defaultEvents] } : {}),
116
- ...(input.eventMode ? { eventMode: input.eventMode } : {}),
117
- ...(input.eventScope ? { eventScope: input.eventScope } : {}),
118
- ...(input.eventRequiredConfig ? { eventRequiredConfig: [...input.eventRequiredConfig] } : {}),
119
- ...(input.eventRequiredCredentials ? { eventRequiredCredentials: [...input.eventRequiredCredentials] } : {}),
120
- setup: [{
121
- kind: "connection",
122
- name: `${input.kind}-developer-configuration`,
123
- required: true,
124
- message: input.setupMessage ?? `Configure ${input.displayName} credentials, OAuth application, or MCP bridge for this deployment.`
125
- }]
126
- };
127
- }
128
- const HIGGSFIELD_PLUGIN = {
129
- kind: "higgsfield",
130
- role: "connection",
131
- packageName: "@assemblyline-agents/higgsfield",
132
- helper: "defineHiggsfieldConnection",
133
- protocol: "cli",
134
- transport: "sandbox",
135
- provider: "higgsfield",
136
- description: "Higgsfield creative media generation, analysis, and editing through the official CLI inside the agent sandbox.",
137
- command: "higgsfield",
138
- requiredConfig: [],
139
- optionalConfig: [],
140
- requiredCredentials: [],
141
- optionalCredentials: [],
142
- capabilities: ["sandbox-cli", "native-file-inputs", "media-generation", "video-analysis", "video-editing"],
143
- scopes: [],
144
- subject: "user",
145
- readToolPatterns: ["read"],
146
- writeToolPatterns: ["write"],
147
- setup: [{
148
- kind: "sandbox",
149
- name: "higgsfield-cli",
150
- required: true,
151
- message: "Install the official Higgsfield CLI in the sandbox image with `curl -fsSL https://raw.githubusercontent.com/higgsfield-ai/cli/main/install.sh | sh`, then run `higgsfield auth login` interactively inside each persistent, user-scoped sandbox. Do not bake account credentials into a shared image. Higgsfield generation and editing consume account credits."
152
- }]
153
- };
154
- const REMOTION_PLUGIN = {
155
- kind: "remotion",
156
- role: "connection",
157
- packageName: "@assemblyline-agents/remotion",
158
- helper: "defineRemotionConnection",
159
- protocol: "cli",
160
- transport: "sandbox",
161
- provider: "remotion",
162
- description: "Remotion composition discovery and rendering through the project CLI inside the active agent sandbox.",
163
- command: "npx",
164
- requiredConfig: [],
165
- optionalConfig: [],
166
- requiredCredentials: [],
167
- optionalCredentials: [],
168
- capabilities: ["sandbox-cli", "media-rendering", "workspace-artifacts"],
169
- scopes: [],
170
- subject: "environment",
171
- readToolPatterns: ["list_compositions", "check_versions"],
172
- writeToolPatterns: ["render_video", "render_still"],
173
- setup: [{
174
- kind: "sandbox",
175
- name: "remotion-cli",
176
- required: true,
177
- message: "Install Remotion and @remotion/cli in the sandbox project. Composition discovery and rendering execute inside the active run sandbox and write artifacts under /workspace."
178
- }]
179
- };
180
- const MIRROR_PLUGIN = {
181
- kind: "mirror",
182
- role: "connection",
183
- packageName: "@assemblyline-agents/mirror",
184
- helper: "defineMirrorConnection",
185
- protocol: "mcp",
186
- transport: "http",
187
- provider: "mirror",
188
- description: "User-scoped connected accounts, mirrored source records, live reads, and approval-gated actions through Mirror.",
189
- defaultUrl: "https://mirror.artificialillumination.co/mcp",
190
- urlEnv: "MIRROR_MCP_URL",
191
- requiredConfig: ["MIRROR_OAUTH_CLIENT_ID"],
192
- optionalConfig: ["MIRROR_MCP_URL", "MIRROR_OAUTH_ISSUER", "MIRROR_OAUTH_REDIRECT_URI"],
193
- requiredCredentials: [],
194
- optionalCredentials: [],
195
- capabilities: ["mcp", "oauth", "pkce", "live-tools", "streamable-http", "connected-accounts", "approval-gated-writes"],
196
- scopes: [],
197
- subject: "user",
198
- tools: {
199
- allow: [
200
- "mirror.connected_providers",
201
- "mirror.connected_provider_call",
202
- "mirror.create_connections_link",
203
- "mirror.query_records",
204
- "mirror.list_changes",
205
- "mirror.get_source",
206
- "mirror.live_read",
207
- "mirror.sync_now",
208
- "mirror.request_action",
209
- "mirror.get_pending_approvals",
210
- "mirror.get_skill",
211
- "mirror.approve_code",
212
- "mirror.agentcash_wallet_export",
213
- "mirror.register_agent",
214
- "mirror.whoami"
215
- ]
216
- },
217
- readToolPatterns: [
218
- "mirror.connected_providers",
219
- "mirror.query_records",
220
- "mirror.list_changes",
221
- "mirror.get_source",
222
- "mirror.live_read",
223
- "mirror.get_pending_approvals",
224
- "mirror.get_skill",
225
- "mirror.whoami"
226
- ],
227
- writeToolPatterns: [
228
- "mirror.connected_provider_call",
229
- "mirror.create_connections_link",
230
- "mirror.sync_now",
231
- "mirror.request_action",
232
- "mirror.approve_code",
233
- "mirror.agentcash_wallet_export",
234
- "mirror.register_agent"
235
- ],
236
- eventCatalog: ["source.changed"],
237
- defaultEvents: ["source.changed"],
238
- eventMode: "api",
239
- eventScope: "principal",
240
- setup: [{
241
- kind: "connection",
242
- name: "mirror-oauth-configuration",
243
- required: true,
244
- message: "Choose a stable public client id for this agent, set MIRROR_OAUTH_CLIENT_ID, and deploy with a reachable Assembly Line connection callback URL. Mirror uses OAuth Authorization Code + PKCE and stores provider credentials behind the user's Mirror account."
245
- }]
246
- };
247
- const MARGINS_PLUGIN = {
248
- kind: "margins",
249
- role: "connection",
250
- packageName: "@assemblyline-agents/margins",
251
- helper: "defineMarginsConnection",
252
- protocol: "mcp",
253
- transport: "http",
254
- provider: "margins",
255
- description: "Resource-scoped collaborative Markdown pages, folders, comments, suggestions, and conflict-safe edits through Margins.",
256
- defaultUrl: "https://margins.artificialillumination.co/mcp",
257
- urlEnv: "MARGINS_MCP_URL",
258
- requiredConfig: [],
259
- optionalConfig: [
260
- "MARGINS_MCP_URL",
261
- "MARGINS_ISSUER",
262
- "MARGINS_AGENT_ID",
263
- "MARGINS_AGENT_NAME",
264
- "MARGINS_AGENT_RUNTIME",
265
- "MARGINS_AGENT_HARNESS"
266
- ],
267
- requiredCredentials: [],
268
- optionalCredentials: [],
269
- capabilities: [
270
- "mcp",
271
- "host-side-pairing",
272
- "rotating-bearer-grants",
273
- "streamable-http",
274
- "resource-scoped",
275
- "collaborative-markdown",
276
- "conflict-safe-writes"
277
- ],
278
- scopes: ["margins"],
279
- subject: "user",
280
- tools: {
281
- allow: [
282
- "margins_status",
283
- "margins_context",
284
- "margins_review",
285
- "margins_map",
286
- "margins_graph",
287
- "margins_create_file",
288
- "margins_comment",
289
- "margins_edit",
290
- "margins_suggest",
291
- "margins_history",
292
- "margins_library"
293
- ]
294
- },
295
- readToolPatterns: [
296
- "margins_status",
297
- "margins_context",
298
- "margins_review",
299
- "margins_map",
300
- "margins_graph",
301
- "margins_history",
302
- "margins_library"
303
- ],
304
- writeToolPatterns: [
305
- "margins_create_file",
306
- "margins_comment",
307
- "margins_edit",
308
- "margins_suggest"
309
- ],
310
- setup: [{
311
- kind: "connection",
312
- name: "margins-binding-packet",
313
- required: true,
314
- message: "In Margins, create an agent invite for the exact page, folder, or workspace and paste its short-lived one-time binding packet into the agent chat. No developer OAuth registration or long-lived token environment variable is required."
315
- }]
316
- };
317
- const PROVENANCE_PLUGIN = {
318
- kind: "provenance",
319
- role: "connection",
320
- packageName: "@assemblyline-agents/provenance",
321
- helper: "defineProvenanceConnection",
322
- protocol: "mcp",
323
- transport: "http",
324
- provider: "provenance",
325
- description: "User-scoped append-only agent evidence, session reconstruction, tool traces, handoff bundles, and artifacts through Provenance.",
326
- defaultUrl: "https://provenance.artificialillumination.co/mcp",
327
- urlEnv: "PROVENANCE_MCP_URL",
328
- requiredConfig: ["PROVENANCE_OAUTH_CLIENT_ID"],
329
- optionalConfig: [
330
- "PROVENANCE_MCP_URL",
331
- "PROVENANCE_OAUTH_ISSUER",
332
- "PROVENANCE_OAUTH_REDIRECT_URI",
333
- "PROVENANCE_AGENT_ID",
334
- "PROVENANCE_AGENT_NAME",
335
- "PROVENANCE_AGENT_RUNTIME"
336
- ],
337
- requiredCredentials: [],
338
- optionalCredentials: [],
339
- capabilities: ["mcp", "oauth", "pkce", "live-tools", "streamable-http", "append-only-ledger", "agent-handoffs"],
340
- scopes: ["provenance:ledger"],
341
- subject: "user",
342
- tools: {
343
- allow: [
344
- "provenance.search_events",
345
- "provenance.get_event",
346
- "provenance.get_event_range",
347
- "provenance.get_turn_trace",
348
- "provenance.get_tool_trace",
349
- "provenance.get_related_events",
350
- "provenance.list_sessions",
351
- "provenance.handoff_bundle",
352
- "provenance.get_artifact",
353
- "provenance.get_session_definition",
354
- "provenance.register_agent",
355
- "provenance.list_agents",
356
- "provenance.agent_activity"
357
- ]
358
- },
359
- readToolPatterns: [
360
- "provenance.search_events",
361
- "provenance.get_event",
362
- "provenance.get_event_range",
363
- "provenance.get_turn_trace",
364
- "provenance.get_tool_trace",
365
- "provenance.get_related_events",
366
- "provenance.list_sessions",
367
- "provenance.handoff_bundle",
368
- "provenance.get_artifact",
369
- "provenance.get_session_definition",
370
- "provenance.list_agents",
371
- "provenance.agent_activity"
372
- ],
373
- writeToolPatterns: ["provenance.register_agent"],
374
- setup: [{
375
- kind: "connection",
376
- name: "provenance-oauth-configuration",
377
- required: true,
378
- message: "Register this Assembly Line deployment as a Provenance public OAuth client with its exact /assembly-line/connections/callback URI, then set PROVENANCE_OAUTH_CLIENT_ID. Provenance uses Authorization Code + PKCE and binds the issued token to the authenticated user and agent identity."
379
- }]
380
- };
381
- const CONNECTION_PLUGIN_CATALOG = [
382
- {
383
- kind: "1password",
384
- role: "connection",
385
- packageName: "@assemblyline-agents/1password",
386
- helper: "defineOnePasswordConnection",
387
- protocol: "sdk",
388
- provider: "1password",
389
- description: "Metadata-only 1Password vault and item browsing plus host-only credential resolution through the official SDK.",
390
- requiredConfig: [],
391
- optionalConfig: [],
392
- requiredCredentials: ["OP_SERVICE_ACCOUNT_TOKEN"],
393
- optionalCredentials: [],
394
- capabilities: ["sdk", "direct-api", "live-tools", "service-account", "vaults", "item-metadata", "credential-source"],
395
- scopes: [],
396
- subject: "environment",
397
- tools: {
398
- allow: ["list_vaults", "list_items", "search_items"]
399
- },
400
- readToolPatterns: ["list_vaults", "list_items", "search_items"],
401
- writeToolPatterns: [],
402
- setup: [{
403
- kind: "connection",
404
- name: "onepassword-service-account",
405
- required: true,
406
- message: "Create a dedicated 1Password service account, share only the intended vaults, and store its token as OP_SERVICE_ACCOUNT_TOKEN. Model-facing tools expose metadata only; concealed values remain host-side."
407
- }]
408
- },
409
- {
410
- kind: "a2a",
411
- role: "connection",
412
- packageName: "@assemblyline-agents/a2a",
413
- helper: "defineA2AConnection",
414
- protocol: "a2a",
415
- provider: "a2a",
416
- description: "Discover and delegate work to an independently deployed agent through the A2A v1.0 protocol.",
417
- requiredConfig: [],
418
- optionalConfig: [],
419
- requiredCredentials: [],
420
- optionalCredentials: [],
421
- capabilities: ["a2a", "agent-card-discovery", "remote-agent-tasks", "json-rpc"],
422
- scopes: [],
423
- subject: "environment",
424
- readToolPatterns: ["regex:^(?!cancel_task$).+"],
425
- writeToolPatterns: ["cancel_task"],
426
- setup: [{
427
- kind: "connection",
428
- name: "a2a-peer-configuration",
429
- required: true,
430
- message: "Configure an allowlisted Agent Card URL and a peer-scoped service credential for the remote agent."
431
- }]
432
- },
433
- HIGGSFIELD_PLUGIN,
434
- MARGINS_PLUGIN,
435
- MIRROR_PLUGIN,
436
- PROVENANCE_PLUGIN,
437
- {
438
- kind: "arcads",
439
- role: "connection",
440
- packageName: "@assemblyline-agents/arcads",
441
- helper: "defineArcadsConnection",
442
- protocol: "mcp",
443
- transport: "http",
444
- provider: "arcads",
445
- description: "Arcads media analysis, generation, and editing through the official hosted MCP server.",
446
- defaultUrl: "https://mcp.arcads.ai",
447
- requiredConfig: ["ARCADS_MCP_CLIENT_ID"],
448
- optionalConfig: ["ARCADS_MCP_REDIRECT_URI"],
449
- requiredCredentials: [],
450
- optionalCredentials: [],
451
- capabilities: ["mcp", "oauth", "live-tools", "streamable-http"],
452
- scopes: ["mcp", "offline_access"],
453
- subject: "user",
454
- readToolPatterns: [
455
- "regex:^arcads_(get_(?!upload_url$)|list|search|watch)"
456
- ],
457
- writeToolPatterns: [
458
- "arcads_get_upload_url",
459
- "regex:^arcads_(?!get_(?!upload_url$)|list|search|watch).+"
460
- ],
461
- setup: [{
462
- kind: "connection",
463
- name: "arcads-oauth-configuration",
464
- required: true,
465
- message: "Register an OAuth client with https://api.arcads.ai/oauth/register, set ARCADS_MCP_CLIENT_ID, and register the Assembly Line connection callback URL. Arcads generation and editing consume account credits."
466
- }]
467
- },
468
- {
469
- kind: "attio",
470
- role: "connection",
471
- packageName: "@assemblyline-agents/attio",
472
- helper: "defineAttioConnection",
473
- protocol: "mcp",
474
- transport: "http",
475
- provider: "attio",
476
- description: "Attio CRM records, lists, notes, tasks, comments, email and meeting intelligence, and reporting through Attio's official hosted MCP server.",
477
- defaultUrl: "https://mcp.attio.com/mcp",
478
- urlEnv: "ATTIO_MCP_URL",
479
- requiredConfig: ["ATTIO_MCP_CLIENT_ID"],
480
- optionalConfig: ["ATTIO_MCP_URL", "ATTIO_MCP_REDIRECT_URI"],
481
- requiredCredentials: [],
482
- optionalCredentials: [],
483
- capabilities: ["mcp", "oauth", "pkce", "refresh-token", "live-tools", "streamable-http", "crm", "semantic-search", "reporting"],
484
- scopes: ["mcp", "offline_access", "openid"],
485
- subject: "user",
486
- tools: {
487
- allow: [
488
- "search-records",
489
- "list-records",
490
- "get-records-by-ids",
491
- "create-record",
492
- "upsert-record",
493
- "update-record",
494
- "merge-records",
495
- "list-attribute-definitions",
496
- "list-lists",
497
- "list-list-attribute-definitions",
498
- "list-records-in-list",
499
- "add-record-to-list",
500
- "update-list",
501
- "update-list-entry-by-id",
502
- "update-list-entry-by-record-id",
503
- "create-comment",
504
- "list-comments",
505
- "list-comment-replies",
506
- "delete-comment",
507
- "create-note",
508
- "search-notes-by-metadata",
509
- "semantic-search-notes",
510
- "get-note-body",
511
- "update-note",
512
- "list-tasks",
513
- "create-task",
514
- "update-task",
515
- "search-meetings",
516
- "search-call-recordings-by-metadata",
517
- "semantic-search-call-recordings",
518
- "get-call-recording",
519
- "search-emails-by-metadata",
520
- "semantic-search-emails",
521
- "get-email-content",
522
- "list-workspace-members",
523
- "list-workspace-teams",
524
- "whoami",
525
- "run-basic-report",
526
- "query-particle-sql"
527
- ]
528
- },
529
- readToolPatterns: [
530
- "search-records",
531
- "list-records",
532
- "get-records-by-ids",
533
- "list-attribute-definitions",
534
- "list-lists",
535
- "list-list-attribute-definitions",
536
- "list-records-in-list",
537
- "list-comments",
538
- "list-comment-replies",
539
- "search-notes-by-metadata",
540
- "semantic-search-notes",
541
- "get-note-body",
542
- "list-tasks",
543
- "search-meetings",
544
- "search-call-recordings-by-metadata",
545
- "semantic-search-call-recordings",
546
- "get-call-recording",
547
- "search-emails-by-metadata",
548
- "semantic-search-emails",
549
- "get-email-content",
550
- "list-workspace-members",
551
- "list-workspace-teams",
552
- "whoami",
553
- "run-basic-report",
554
- "query-particle-sql"
555
- ],
556
- writeToolPatterns: [
557
- "create-record",
558
- "upsert-record",
559
- "update-record",
560
- "merge-records",
561
- "add-record-to-list",
562
- "update-list",
563
- "update-list-entry-by-id",
564
- "update-list-entry-by-record-id",
565
- "create-comment",
566
- "delete-comment",
567
- "create-note",
568
- "update-note",
569
- "create-task",
570
- "update-task"
571
- ],
572
- setup: [{
573
- kind: "connection",
574
- name: "attio-mcp-oauth",
575
- required: true,
576
- message: "Register a public OAuth client at https://app.attio.com/oauth/register for the Assembly Line connection callback, set ATTIO_MCP_CLIENT_ID, then let each user authorize Attio. For a shared company agent, explicitly set subject: \"workspace\" and preauthorize a dedicated Attio member through the protected operator connection flow."
577
- }]
578
- },
579
- {
580
- kind: "gmail",
581
- role: "connection",
582
- packageName: "@assemblyline-agents/gmail",
583
- helper: "defineGmailConnection",
584
- protocol: "http",
585
- provider: "gmail",
586
- description: "Gmail threads, messages, attachments, drafts, and sends through the Gmail REST API.",
587
- defaultBaseUrl: "https://gmail.googleapis.com/gmail/v1",
588
- baseUrlEnv: "GMAIL_API_BASE_URL",
589
- requiredConfig: ["GOOGLE_CLIENT_ID"],
590
- optionalConfig: ["GOOGLE_REDIRECT_URI", "GMAIL_API_BASE_URL"],
591
- requiredCredentials: ["GOOGLE_CLIENT_SECRET"],
592
- optionalCredentials: [],
593
- capabilities: ["http-api", "oauth", "pkce", "refresh-token", "live-tools"],
594
- scopes: [
595
- "https://www.googleapis.com/auth/gmail.readonly",
596
- "https://www.googleapis.com/auth/gmail.compose",
597
- "https://www.googleapis.com/auth/gmail.send"
598
- ],
599
- subject: "user",
600
- tools: { allow: [
601
- "gmail_get_profile", "gmail_list_messages", "gmail_get_message", "gmail_get_attachment",
602
- "gmail_list_threads", "gmail_get_thread", "gmail_list_labels", "gmail_get_label",
603
- "gmail_list_drafts", "gmail_get_draft", "gmail_create_draft", "gmail_update_draft",
604
- "gmail_delete_draft", "gmail_send_draft", "gmail_send_message"
605
- ] },
606
- readToolPatterns: [
607
- "gmail_get_profile", "gmail_list_messages", "gmail_get_message", "gmail_get_attachment",
608
- "gmail_list_threads", "gmail_get_thread", "gmail_list_labels", "gmail_get_label",
609
- "gmail_list_drafts", "gmail_get_draft"
610
- ],
611
- writeToolPatterns: ["gmail_create_draft", "gmail_update_draft", "gmail_delete_draft", "gmail_send_draft", "gmail_send_message"],
612
- eventCatalog: ["email.received"],
613
- defaultEvents: ["email.received"],
614
- eventMode: "watch",
615
- eventScope: "principal",
616
- eventRequiredConfig: ["GOOGLE_CLOUD_PROJECT", "GMAIL_PUBSUB_TOPIC"],
617
- eventRequiredCredentials: ["GMAIL_PUBSUB_VERIFICATION_TOKEN"],
618
- setup: [{
619
- kind: "connection",
620
- name: "gmail-oauth-configuration",
621
- required: true,
622
- message: "Create a Google OAuth web client, enable the Gmail API, set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET, and register the Assembly Line connection callback URL. Gmail authorization is stored as its own connection grant."
623
- }]
624
- },
625
- {
626
- kind: "google-calendar",
627
- role: "connection",
628
- packageName: "@assemblyline-agents/google-calendar",
629
- helper: "defineGoogleCalendarConnection",
630
- protocol: "http",
631
- provider: "google_calendar",
632
- description: "Google Calendar lists, events, availability, and scheduling through the Google Calendar REST API.",
633
- defaultBaseUrl: "https://www.googleapis.com/calendar/v3",
634
- baseUrlEnv: "GOOGLE_CALENDAR_API_BASE_URL",
635
- requiredConfig: ["GOOGLE_CLIENT_ID"],
636
- optionalConfig: ["GOOGLE_REDIRECT_URI", "GOOGLE_CALENDAR_API_BASE_URL"],
637
- requiredCredentials: ["GOOGLE_CLIENT_SECRET"],
638
- optionalCredentials: [],
639
- capabilities: ["http-api", "oauth", "pkce", "refresh-token", "live-tools"],
640
- scopes: [
641
- "https://www.googleapis.com/auth/calendar.readonly",
642
- "https://www.googleapis.com/auth/calendar.events"
643
- ],
644
- subject: "user",
645
- tools: { allow: [
646
- "google_calendar_list_calendars", "google_calendar_get_calendar", "google_calendar_list_events",
647
- "google_calendar_get_event", "google_calendar_list_instances", "google_calendar_query_freebusy",
648
- "google_calendar_create_event", "google_calendar_update_event", "google_calendar_delete_event", "google_calendar_move_event"
649
- ] },
650
- readToolPatterns: [
651
- "google_calendar_list_calendars", "google_calendar_get_calendar", "google_calendar_list_events",
652
- "google_calendar_get_event", "google_calendar_list_instances", "google_calendar_query_freebusy"
653
- ],
654
- writeToolPatterns: ["google_calendar_create_event", "google_calendar_update_event", "google_calendar_delete_event", "google_calendar_move_event"],
655
- eventCatalog: ["calendar.changed"],
656
- defaultEvents: ["calendar.changed"],
657
- eventMode: "watch",
658
- eventScope: "principal",
659
- setup: [{
660
- kind: "connection",
661
- name: "google-calendar-oauth-configuration",
662
- required: true,
663
- message: "Create a Google OAuth web client, enable the Google Calendar API, set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET, and register the Assembly Line connection callback URL. Calendar authorization is stored as its own connection grant."
664
- }]
665
- },
666
- {
667
- kind: "google-drive",
668
- role: "connection",
669
- packageName: "@assemblyline-agents/google-drive",
670
- helper: "defineGoogleDriveConnection",
671
- protocol: "http",
672
- provider: "google_drive",
673
- description: "Google Drive file search, downloads, uploads, organization, and sharing through the Google Drive REST API.",
674
- defaultBaseUrl: "https://www.googleapis.com",
675
- baseUrlEnv: "GOOGLE_DRIVE_API_BASE_URL",
676
- requiredConfig: ["GOOGLE_CLIENT_ID"],
677
- optionalConfig: ["GOOGLE_REDIRECT_URI", "GOOGLE_DRIVE_API_BASE_URL"],
678
- requiredCredentials: ["GOOGLE_CLIENT_SECRET"],
679
- optionalCredentials: [],
680
- capabilities: ["http-api", "oauth", "pkce", "refresh-token", "binary-transfer", "live-tools"],
681
- scopes: [
682
- "https://www.googleapis.com/auth/drive.readonly",
683
- "https://www.googleapis.com/auth/drive"
684
- ],
685
- subject: "user",
686
- tools: { allow: [
687
- "google_drive_get_about", "google_drive_list_shared_drives", "google_drive_get_shared_drive",
688
- "google_drive_list_files", "google_drive_get_file", "google_drive_download_file", "google_drive_export_file",
689
- "google_drive_list_permissions", "google_drive_get_permission", "google_drive_create_file",
690
- "google_drive_update_file", "google_drive_upload_file_content", "google_drive_copy_file", "google_drive_delete_file",
691
- "google_drive_create_permission", "google_drive_update_permission", "google_drive_delete_permission"
692
- ] },
693
- readToolPatterns: [
694
- "google_drive_get_about", "google_drive_list_shared_drives", "google_drive_get_shared_drive",
695
- "google_drive_list_files", "google_drive_get_file", "google_drive_download_file", "google_drive_export_file",
696
- "google_drive_list_permissions", "google_drive_get_permission"
697
- ],
698
- writeToolPatterns: [
699
- "google_drive_create_file", "google_drive_update_file", "google_drive_upload_file_content", "google_drive_copy_file",
700
- "google_drive_delete_file", "google_drive_create_permission", "google_drive_update_permission", "google_drive_delete_permission"
701
- ],
702
- eventCatalog: ["drive.changed"],
703
- defaultEvents: ["drive.changed"],
704
- eventMode: "watch",
705
- eventScope: "principal",
706
- setup: [{
707
- kind: "connection",
708
- name: "google-drive-oauth-configuration",
709
- required: true,
710
- message: "Create a Google OAuth web client, enable the Google Drive API, set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET, and register the Assembly Line connection callback URL. Drive authorization is stored as its own connection grant."
711
- }]
712
- },
713
- catalogEntry({ kind: "github", displayName: "GitHub", helper: "defineGitHubMcpConnection", packageName: "@assemblyline-agents/github", description: "GitHub repositories, issues, pull requests, and Actions through GitHub MCP.", defaultUrl: "https://api.githubcopilot.com/mcp/", urlEnv: "GITHUB_MCP_URL", tokenEnv: "GITHUB_MCP_TOKEN", write: true }),
714
- {
715
- kind: "github-app",
716
- role: "connection",
717
- packageName: "@assemblyline-agents/github",
718
- helper: "defineGitHubAppConnection",
719
- protocol: "credential",
720
- provider: "github",
721
- description: "Host-only GitHub App installation credentials for Git and the GitHub CLI inside an agent sandbox.",
722
- requiredConfig: ["GITHUB_APP_ID"],
723
- optionalConfig: [
724
- "GITHUB_APP_INSTALLATION_ID",
725
- "GITHUB_APP_SLUG",
726
- "GITHUB_APP_CLIENT_ID",
727
- "GITHUB_API_URL",
728
- "GITHUB_OAUTH_URL"
729
- ],
730
- requiredCredentials: ["GITHUB_APP_PRIVATE_KEY"],
731
- optionalCredentials: ["GITHUB_APP_CLIENT_SECRET", "GITHUB_APP_WEBHOOK_SECRET"],
732
- capabilities: ["sandbox-credentials", "github-app", "git", "github-cli"],
733
- scopes: [],
734
- subject: "user",
735
- readToolPatterns: [],
736
- writeToolPatterns: [],
737
- eventCatalog: [
738
- "issues.opened", "issues.edited", "issues.closed", "issue_comment.created",
739
- "pull_request.opened", "pull_request.synchronize", "pull_request.closed",
740
- "pull_request_review.submitted", "push", "workflow_run.completed",
741
- "installation.created", "installation.deleted", "installation_repositories.added",
742
- "installation_repositories.removed"
743
- ],
744
- defaultEvents: ["issues.opened", "issue_comment.created", "pull_request.opened", "pull_request_review.submitted", "push", "workflow_run.completed"],
745
- eventMode: "manual",
746
- eventScope: "connection",
747
- eventRequiredCredentials: ["GITHUB_APP_WEBHOOK_SECRET"],
748
- setup: [{
749
- kind: "connection",
750
- name: "github-app-developer-configuration",
751
- required: true,
752
- message: "Create and install a GitHub App, choose its repository access and permissions in GitHub, then store its credentials in the Assembly Line host secret store."
753
- }]
754
- },
755
- catalogEntry({ kind: "slack", displayName: "Slack", helper: "defineSlackConnection", packageName: "@assemblyline-agents/slack", description: "Slack workspace search, channels, messages, files, and users through Slack MCP.", defaultUrl: "https://mcp.slack.com/mcp", urlEnv: "SLACK_MCP_URL", tokenEnv: "SLACK_MCP_TOKEN", write: true }),
756
- catalogEntry({ kind: "telegram", displayName: "Telegram", helper: "defineTelegramConnection", packageName: "@assemblyline-agents/telegram", description: "Telegram account tools through a developer-operated MCP bridge.", urlEnv: "TELEGRAM_MCP_URL", tokenEnv: "TELEGRAM_MCP_TOKEN" }),
757
- catalogEntry({
758
- kind: "strava", displayName: "Strava", helper: "defineStravaConnection",
759
- description: "Strava profile and fitness activity tools through a developer-configured MCP server.", urlEnv: "STRAVA_MCP_URL", tokenEnv: "STRAVA_MCP_TOKEN",
760
- eventCatalog: ["activity.create", "activity.update", "activity.delete", "athlete.update"],
761
- defaultEvents: ["activity.create", "activity.update", "activity.delete", "athlete.update"], eventMode: "api", eventScope: "connection",
762
- eventRequiredConfig: ["STRAVA_CLIENT_ID"],
763
- eventRequiredCredentials: ["STRAVA_CLIENT_SECRET", "STRAVA_WEBHOOK_SIGNING_SECRET"]
764
- }),
765
- catalogEntry({
766
- kind: "polar", displayName: "Polar", helper: "definePolarConnection",
767
- description: "Polar workout and heart-rate tools through a developer-configured MCP server.", urlEnv: "POLAR_MCP_URL", tokenEnv: "POLAR_MCP_TOKEN",
768
- eventCatalog: ["EXERCISE", "SLEEP", "CONTINUOUS_HEART_RATE", "SLEEP_WISE_CIRCADIAN_BEDTIME", "SLEEP_WISE_ALERTNESS", "ACTIVITY_SUMMARY", "PHYSICAL_INFORMATION"],
769
- defaultEvents: ["EXERCISE", "SLEEP", "CONTINUOUS_HEART_RATE"], eventMode: "api", eventScope: "connection",
770
- eventRequiredConfig: ["POLAR_CLIENT_ID"],
771
- eventRequiredCredentials: ["POLAR_CLIENT_SECRET"]
772
- }),
773
- catalogEntry({ kind: "spotify", displayName: "Spotify", helper: "defineSpotifyConnection", description: "Spotify library, playlist, and playback tools through a developer-configured MCP server.", urlEnv: "SPOTIFY_MCP_URL", tokenEnv: "SPOTIFY_MCP_TOKEN", write: true }),
774
- catalogEntry({ kind: "xai", displayName: "xAI", helper: "defineXaiConnection", description: "xAI and X search tools through a developer-configured MCP server.", urlEnv: "XAI_MCP_URL", tokenEnv: "XAI_MCP_TOKEN" }),
775
- catalogEntry({
776
- kind: "exa",
777
- displayName: "Exa",
778
- helper: "defineExaConnection",
779
- description: "Current web search, page retrieval, and advanced filtered search through Exa's official hosted MCP server.",
780
- defaultUrl: "https://mcp.exa.ai/mcp",
781
- urlEnv: "EXA_MCP_URL",
782
- tokenEnv: "EXA_API_KEY",
783
- tokenRequired: false,
784
- subject: "environment",
785
- tools: {
786
- allow: [
787
- "web_search_exa",
788
- "web_fetch_exa",
789
- "web_search_advanced_exa"
790
- ]
791
- },
792
- readToolPatterns: [
793
- "web_search_exa",
794
- "web_fetch_exa",
795
- "web_search_advanced_exa"
796
- ],
797
- setupMessage: "Exa's hosted MCP works without credentials. Optionally set EXA_API_KEY to raise production rate limits; Assembly Line sends it only as the x-api-key header."
798
- }),
799
- catalogEntry({
800
- kind: "plaid", displayName: "Plaid", helper: "definePlaidConnection",
801
- description: "Read-only Plaid financial tools through a developer-configured MCP bridge.", urlEnv: "PLAID_MCP_URL", tokenEnv: "PLAID_MCP_TOKEN",
802
- eventCatalog: ["transactions.changed", "item.changed", "auth.changed", "identity.changed", "assets.changed", "holdings.changed", "investments.changed", "liabilities.changed", "payment.changed", "transfer.changed", "income.changed"],
803
- defaultEvents: ["transactions.changed", "item.changed"], eventMode: "api", eventScope: "connection",
804
- eventRequiredConfig: ["PLAID_CLIENT_ID"],
805
- eventRequiredCredentials: ["PLAID_SECRET"]
806
- }),
807
- catalogEntry({ kind: "granola", displayName: "Granola", helper: "defineGranolaConnection", description: "Granola meeting notes, transcripts, and action items through Granola MCP.", defaultUrl: "https://mcp.granola.ai/mcp", urlEnv: "GRANOLA_MCP_URL", tokenEnv: "GRANOLA_MCP_TOKEN" }),
808
- {
809
- kind: "grata",
810
- role: "connection",
811
- packageName: "@assemblyline-agents/grata",
812
- helper: "defineGrataConnection",
813
- protocol: "mcp",
814
- transport: "http",
815
- provider: "grata",
816
- description: "Private-company, ownership, funding, transaction, filing, contact, conference, and deal intelligence through Grata's official hosted MCP server.",
817
- defaultUrl: "https://mcp.grata.com",
818
- urlEnv: "GRATA_MCP_URL",
819
- requiredConfig: ["GRATA_MCP_CLIENT_ID"],
820
- optionalConfig: ["GRATA_MCP_URL", "GRATA_MCP_REDIRECT_URI"],
821
- requiredCredentials: ["GRATA_MCP_CLIENT_SECRET"],
822
- optionalCredentials: [],
823
- capabilities: ["mcp", "oauth", "pkce", "refresh-token", "live-tools", "streamable-http", "private-market-intelligence"],
824
- scopes: ["openid", "profile", "email", "offline_access"],
825
- subject: "user",
826
- readToolPatterns: READ_PATTERNS,
827
- writeToolPatterns: [
828
- ...WRITE_PATTERNS,
829
- "regex:(^|[-_])export([-_]|$)"
830
- ],
831
- setup: [{
832
- kind: "connection",
833
- name: "grata-mcp-oauth",
834
- required: true,
835
- message: "Register an OAuth client using client_secret_post with the selected Grata MCP region's /register endpoint for the Assembly Line connection callback, set GRATA_MCP_CLIENT_ID and GRATA_MCP_CLIENT_SECRET, then let each user authorize their Grata seat. Set GRATA_MCP_URL=https://eu-mcp.grata.com/ for European users."
836
- }]
837
- },
838
- catalogEntry({
839
- kind: "linear", displayName: "Linear", helper: "defineLinearConnection",
840
- description: "Linear issues, projects, cycles, and teams through Linear MCP.", defaultUrl: "https://mcp.linear.app/mcp", urlEnv: "LINEAR_MCP_URL", tokenEnv: "LINEAR_MCP_TOKEN", write: true,
841
- eventCatalog: ["issue.create", "issue.update", "issue.remove", "comment.create", "comment.update", "comment.remove", "project.create", "project.update", "project.remove", "cycle.create", "cycle.update", "cycle.remove", "document.create", "document.update", "document.remove", "customer.create", "customer.update", "customer.remove", "user.create", "user.update", "user.remove", "agentSessionEvent.created", "agentSessionEvent.prompted", "linear.changed"],
842
- defaultEvents: ["issue.create", "issue.update", "comment.create", "comment.update", "project.update", "agentSessionEvent.created", "agentSessionEvent.prompted", "linear.changed"],
843
- eventMode: "manual", eventScope: "principal", eventRequiredCredentials: ["LINEAR_WEBHOOK_SECRET"]
844
- }),
845
- catalogEntry({
846
- kind: "notion", displayName: "Notion", helper: "defineNotionConnection",
847
- description: "Notion pages, databases, comments, and workspace search through Notion MCP.", defaultUrl: "https://mcp.notion.com/mcp", urlEnv: "NOTION_MCP_URL", tokenEnv: "NOTION_MCP_TOKEN", write: true,
848
- eventCatalog: [
849
- "page.content_updated", "page.created", "page.deleted", "page.locked", "page.moved", "page.properties_updated", "page.undeleted", "page.unlocked",
850
- "database.content_updated", "database.created", "database.deleted", "database.moved", "database.schema_updated", "database.undeleted",
851
- "data_source.content_updated", "data_source.created", "data_source.deleted", "data_source.moved", "data_source.schema_updated", "data_source.undeleted",
852
- "comment.created", "comment.deleted", "comment.updated"
853
- ],
854
- defaultEvents: ["page.content_updated", "page.created", "page.deleted", "page.properties_updated", "data_source.schema_updated", "comment.created"],
855
- eventMode: "manual", eventScope: "principal"
856
- }),
857
- catalogEntry({
858
- kind: "monday", displayName: "monday.com", helper: "defineMondayConnection",
859
- description: "monday.com boards, items, workspaces, and docs through Platform MCP.", defaultUrl: "https://mcp.monday.com/mcp", urlEnv: "MONDAY_MCP_URL", tokenEnv: "MONDAY_MCP_TOKEN", write: true,
860
- eventCatalog: ["create_item", "change_column_value", "change_status_column_value", "change_name", "item_moved_to_any_group", "item_deleted", "item_archived", "create_update"],
861
- defaultEvents: ["create_item", "change_column_value", "change_status_column_value", "item_deleted", "create_update"], eventMode: "api", eventScope: "principal",
862
- eventRequiredCredentials: ["MONDAY_SIGNING_SECRET"]
863
- }),
864
- catalogEntry({
865
- kind: "jira", displayName: "Jira", helper: "defineJiraConnection",
866
- description: "Jira issues, projects, transitions, and JQL search through Atlassian MCP.", defaultUrl: "https://mcp.atlassian.com/v1/mcp/authv2", urlEnv: "JIRA_MCP_URL", tokenEnv: "JIRA_MCP_TOKEN", write: true,
867
- eventCatalog: ["jira:issue_created", "jira:issue_updated", "jira:issue_deleted", "comment_created", "comment_updated", "comment_deleted", "issue_property_set", "issue_property_deleted"],
868
- defaultEvents: ["jira:issue_created", "jira:issue_updated", "comment_created", "comment_updated"], eventMode: "api", eventScope: "principal"
869
- }),
870
- catalogEntry({
871
- kind: "hubspot", displayName: "HubSpot", helper: "defineHubSpotConnection",
872
- description: "HubSpot CRM records and associations through HubSpot MCP.", defaultUrl: "https://mcp.hubspot.com", urlEnv: "HUBSPOT_MCP_URL", tokenEnv: "HUBSPOT_MCP_TOKEN",
873
- eventCatalog: ["contact.creation", "contact.deletion", "contact.propertyChange", "company.creation", "company.deletion", "company.propertyChange", "deal.creation", "deal.deletion", "deal.propertyChange", "ticket.creation", "ticket.deletion", "ticket.propertyChange"],
874
- defaultEvents: ["contact.creation", "contact.deletion", "company.creation", "company.deletion", "deal.creation", "deal.deletion", "ticket.creation", "ticket.deletion"],
875
- eventMode: "api", eventScope: "connection", eventRequiredConfig: ["HUBSPOT_APP_ID"], eventRequiredCredentials: ["HUBSPOT_DEVELOPER_API_KEY", "HUBSPOT_CLIENT_SECRET"]
876
- }),
877
- catalogEntry({
878
- kind: "figma", displayName: "Figma", helper: "defineFigmaConnection",
879
- description: "Figma design, FigJam, Slides, and Dev Mode context through Figma MCP.",
880
- defaultUrl: "https://mcp.figma.com/mcp", urlEnv: "FIGMA_MCP_URL", tokenEnv: "FIGMA_MCP_TOKEN", write: true,
881
- eventCatalog: ["FILE_UPDATE", "FILE_DELETE", "FILE_VERSION_UPDATE", "LIBRARY_PUBLISH"],
882
- defaultEvents: ["FILE_UPDATE", "FILE_DELETE"], eventMode: "api", eventScope: "principal"
883
- }),
884
- catalogEntry({ kind: "paper", displayName: "Paper", helper: "definePaperConnection", description: "Paper design tools through a developer-exposed local MCP bridge.", urlEnv: "PAPER_MCP_URL", tokenEnv: "PAPER_MCP_TOKEN", tokenRequired: false, write: true }),
885
- catalogEntry({
886
- kind: "sentry", displayName: "Sentry", helper: "defineSentryConnection",
887
- description: "Sentry issues, events, projects, and teams through Sentry MCP.", defaultUrl: "https://mcp.sentry.dev/mcp", urlEnv: "SENTRY_MCP_URL", tokenEnv: "SENTRY_MCP_TOKEN", write: true,
888
- eventCatalog: ["event.created", "event.alert"], defaultEvents: ["event.created", "event.alert"], eventMode: "api", eventScope: "principal"
889
- }),
890
- catalogEntry({
891
- kind: "supabase", displayName: "Supabase", helper: "defineSupabaseConnection",
892
- description: "Supabase projects, databases, docs, and Edge Functions through Supabase MCP.", defaultUrl: "https://mcp.supabase.com/mcp", urlEnv: "SUPABASE_MCP_URL", tokenEnv: "SUPABASE_MCP_TOKEN", write: true,
893
- eventCatalog: ["row.inserted", "row.updated", "row.deleted"], defaultEvents: ["row.inserted", "row.updated", "row.deleted"], eventMode: "api", eventScope: "principal",
894
- eventRequiredCredentials: ["SUPABASE_WEBHOOK_SECRET"]
895
- }),
896
- catalogEntry({
897
- kind: "metabase", displayName: "Metabase", helper: "defineMetabaseConnection",
898
- description: "Metabase semantic-layer queries, questions, and dashboards through an instance MCP endpoint.", urlEnv: "METABASE_MCP_URL", tokenEnv: "METABASE_MCP_TOKEN", tokenRequired: false, write: true,
899
- eventCatalog: ["alert.triggered"], defaultEvents: ["alert.triggered"], eventMode: "manual", eventScope: "connection",
900
- eventRequiredCredentials: ["METABASE_WEBHOOK_SECRET"]
901
- }),
902
- catalogEntry({
903
- kind: "cloudflare", displayName: "Cloudflare", helper: "defineCloudflareConnection",
904
- description: "Cloudflare API and account tools through Cloudflare MCP.", defaultUrl: "https://mcp.cloudflare.com/mcp", urlEnv: "CLOUDFLARE_MCP_URL", tokenEnv: "CLOUDFLARE_MCP_TOKEN", write: true,
905
- eventCatalog: ["notification.received"], defaultEvents: ["notification.received"], eventMode: "api", eventScope: "principal",
906
- eventRequiredCredentials: ["CLOUDFLARE_WEBHOOK_SECRET"]
907
- }),
908
- catalogEntry({
909
- kind: "vercel", displayName: "Vercel", helper: "defineVercelConnection",
910
- description: "Vercel projects, deployments, logs, and teams through Vercel MCP.", defaultUrl: "https://mcp.vercel.com", urlEnv: "VERCEL_MCP_URL", tokenEnv: "VERCEL_MCP_TOKEN", write: true,
911
- eventCatalog: ["deployment.created", "deployment.succeeded", "deployment.promoted", "deployment.error", "deployment.cancelled", "project.created", "project.removed", "project.renamed", "project.env.created", "project.env.updated", "project.env.deleted", "firewall.attack.detected"],
912
- defaultEvents: ["deployment.created", "deployment.succeeded", "deployment.error", "deployment.cancelled"], eventMode: "api", eventScope: "principal"
913
- }),
914
- catalogEntry({
915
- kind: "railway", displayName: "Railway", helper: "defineRailwayConnection", packageName: "@assemblyline-agents/railway",
916
- description: "Railway projects, services, variables, and deployments through Railway MCP.", defaultUrl: "https://mcp.railway.com", urlEnv: "RAILWAY_MCP_URL", tokenEnv: "RAILWAY_MCP_TOKEN", write: true,
917
- eventCatalog: ["deployment.changed", "alert.triggered"], defaultEvents: ["deployment.changed", "alert.triggered"], eventMode: "manual", eventScope: "connection"
918
- }),
919
- catalogEntry({ kind: "refero", displayName: "Refero", helper: "defineReferoConnection", description: "Refero design references, screens, and product flows through Refero MCP.", defaultUrl: "https://api.refero.design/mcp", urlEnv: "REFERO_MCP_URL", tokenEnv: "REFERO_MCP_BEARER_TOKEN" }),
920
- catalogEntry({
921
- kind: "agentmail",
922
- displayName: "AgentMail",
923
- helper: "defineAgentMailConnection",
924
- description: "AgentMail inboxes, threads, messages, drafts, and attachments through the official hosted MCP server.",
925
- defaultUrl: "https://mcp.agentmail.to/mcp",
926
- urlEnv: "AGENTMAIL_MCP_URL",
927
- tokenEnv: "AGENTMAIL_API_KEY",
928
- tokenHeader: "x-api-key",
929
- subject: "environment",
930
- tools: {
931
- allow: [
932
- "list_inboxes",
933
- "get_inbox",
934
- "create_inbox",
935
- "update_inbox",
936
- "delete_inbox",
937
- "list_threads",
938
- "search_threads",
939
- "get_thread",
940
- "update_thread",
941
- "delete_thread",
942
- "list_messages",
943
- "search_messages",
944
- "send_message",
945
- "reply_to_message",
946
- "forward_message",
947
- "update_message",
948
- "create_draft",
949
- "list_drafts",
950
- "get_draft",
951
- "update_draft",
952
- "send_draft",
953
- "delete_draft",
954
- "get_attachment",
955
- "auth_me"
956
- ]
957
- },
958
- readToolPatterns: [
959
- "list_inboxes",
960
- "get_inbox",
961
- "list_threads",
962
- "search_threads",
963
- "get_thread",
964
- "list_messages",
965
- "search_messages",
966
- "list_drafts",
967
- "get_draft",
968
- "get_attachment",
969
- "auth_me"
970
- ],
971
- writeToolPatterns: [
972
- "create_inbox",
973
- "update_inbox",
974
- "delete_inbox",
975
- "update_thread",
976
- "delete_thread",
977
- "send_message",
978
- "reply_to_message",
979
- "forward_message",
980
- "update_message",
981
- "create_draft",
982
- "update_draft",
983
- "send_draft",
984
- "delete_draft"
985
- ],
986
- write: true,
987
- eventCatalog: [
988
- "message.received", "message.received.spam", "message.received.blocked",
989
- "message.received.unauthenticated", "message.sent", "message.delivered",
990
- "message.bounced", "message.complained", "message.rejected", "domain.verified"
991
- ],
992
- defaultEvents: ["message.received"],
993
- eventMode: "api",
994
- eventScope: "connection",
995
- setupMessage: "Create an AgentMail API key, set AGENTMAIL_API_KEY on the Assembly Line runtime host, and keep inbox and sender scope owned by the provider account."
996
- }),
997
- catalogEntry({
998
- kind: "resend",
999
- displayName: "Resend",
1000
- helper: "defineResendConnection",
1001
- description: "Transactional email, broadcasts, contacts, domains, templates, automations, and delivery data through Resend's official hosted MCP server.",
1002
- defaultUrl: "https://mcp.resend.com/mcp",
1003
- urlEnv: "RESEND_MCP_URL",
1004
- tokenEnv: "RESEND_API_KEY",
1005
- subject: "environment",
1006
- tools: {
1007
- block: [
1008
- "connect-to-editor",
1009
- "create-api-key",
1010
- "create-webhook",
1011
- "get-webhook"
1012
- ]
1013
- },
1014
- readToolPatterns: ["regex:^(get|list)-"],
1015
- writeToolPatterns: [
1016
- "get-tiptap-json-content",
1017
- "regex:^(add|batch-add|batch-remove|cancel|compose|create|disconnect|duplicate|manage|publish|remove|revoke|send|update|verify)-"
1018
- ],
1019
- write: true,
1020
- eventCatalog: [
1021
- "email.sent", "email.delivered", "email.delivery_delayed", "email.failed",
1022
- "email.opened", "email.clicked", "email.bounced", "email.complained",
1023
- "email.received", "email.scheduled", "email.suppressed",
1024
- "domain.created", "domain.updated", "domain.deleted",
1025
- "contact.created", "contact.updated", "contact.deleted"
1026
- ],
1027
- defaultEvents: ["email.received", "email.delivered", "email.failed", "email.bounced"],
1028
- eventMode: "api",
1029
- eventScope: "connection",
1030
- setupMessage: "Create a team-scoped Resend API key, set RESEND_API_KEY on the Assembly Line runtime host, and verify the sending domain. Full-platform reads require a full_access key; restrict the connection's visible tools when using a sending_access key."
1031
- }),
1032
- catalogEntry({ kind: "agentcash", displayName: "AgentCash", helper: "defineAgentCashConnection", description: "Paid API discovery, schema, balance, and request tools through an AgentCash MCP bridge.", urlEnv: "AGENTCASH_MCP_URL", tokenEnv: "AGENTCASH_MCP_BRIDGE_TOKEN", write: true }),
1033
- catalogEntry({
1034
- kind: "treg",
1035
- displayName: "Treg",
1036
- helper: "defineTregConnection",
1037
- description: "External API discovery, pricing, balance, team inventory, and credential-injected calls through Treg's hosted tool catalog.",
1038
- defaultUrl: "https://treg.to/mcp/",
1039
- urlEnv: "TREG_MCP_URL",
1040
- tokenEnv: "TREG_TOKEN",
1041
- tools: {
1042
- allow: [
1043
- "catalog_search",
1044
- "catalog_get",
1045
- "catalog_request",
1046
- "call",
1047
- "balance",
1048
- "my_tools"
1049
- ]
1050
- },
1051
- readToolPatterns: ["catalog_search", "catalog_get", "balance", "my_tools"],
1052
- writeToolPatterns: ["catalog_request", "call"],
1053
- write: true,
1054
- setupMessage: "Create an organization-scoped or agent token in Treg, set TREG_TOKEN on the Assembly Line runtime, and review whether Treg writes require approval. The call tool can spend prepaid balance or mutate an upstream service."
1055
- }),
1056
- {
1057
- kind: "x",
1058
- role: "connection",
1059
- packageName: "@assemblyline-agents/x",
1060
- helper: "defineXConnection",
1061
- protocol: "http",
1062
- provider: "x",
1063
- description: "Connected X account identity, private bookmarks, and reviewed post or reply publishing through X API v2.",
1064
- defaultBaseUrl: "https://api.x.com/2",
1065
- baseUrlEnv: "X_API_BASE_URL",
1066
- requiredConfig: ["X_API_CLIENT_ID"],
1067
- optionalConfig: ["X_API_REDIRECT_URI", "X_API_BASE_URL"],
1068
- requiredCredentials: ["X_API_CLIENT_SECRET"],
1069
- optionalCredentials: [],
1070
- capabilities: ["http-api", "oauth", "pkce", "refresh-token", "live-tools", "bookmarks", "publishing"],
1071
- scopes: ["bookmark.read", "tweet.read", "tweet.write", "users.read", "offline.access"],
1072
- subject: "user",
1073
- tools: {
1074
- allow: ["x_get_authenticated_user", "x_list_bookmarks", "x_create_post"]
1075
- },
1076
- readToolPatterns: ["x_get_authenticated_user", "x_list_bookmarks"],
1077
- writeToolPatterns: ["x_create_post"],
1078
- setup: [{
1079
- kind: "connection",
1080
- name: "x-developer-configuration",
1081
- required: true,
1082
- message: "Create a confidential X OAuth 2.0 App, enable the reviewed bookmark and post scopes, set X_API_CLIENT_ID and X_API_CLIENT_SECRET, and register the Assembly Line connection callback URL. Authorization Code + PKCE stores a refreshable per-user grant; X API usage and costs remain developer-owned."
1083
- }]
1084
- },
1085
- {
1086
- kind: "dropbox",
1087
- role: "connection",
1088
- packageName: "@assemblyline-agents/dropbox",
1089
- helper: "defineDropboxConnection",
1090
- protocol: "http",
1091
- provider: "dropbox",
1092
- description: "Dropbox account, file and folder metadata, search, temporary content links, and reviewed file operations through the Dropbox API.",
1093
- defaultBaseUrl: "https://api.dropboxapi.com/2",
1094
- baseUrlEnv: "DROPBOX_API_BASE_URL",
1095
- requiredConfig: ["DROPBOX_APP_KEY"],
1096
- optionalConfig: ["DROPBOX_REDIRECT_URI", "DROPBOX_API_BASE_URL"],
1097
- requiredCredentials: ["DROPBOX_APP_SECRET"],
1098
- optionalCredentials: [],
1099
- capabilities: ["http-api", "oauth", "pkce", "refresh-token", "live-tools"],
1100
- scopes: [
1101
- "account_info.read",
1102
- "files.metadata.read",
1103
- "files.content.read",
1104
- "files.content.write",
1105
- "sharing.read",
1106
- "sharing.write"
1107
- ],
1108
- subject: "user",
1109
- tools: {
1110
- allow: [
1111
- "users_get_current_account",
1112
- "users_get_space_usage",
1113
- "files_get_metadata",
1114
- "files_list_folder",
1115
- "files_list_folder_continue",
1116
- "files_search_v2",
1117
- "files_search_continue_v2",
1118
- "files_get_temporary_link",
1119
- "sharing_list_shared_links",
1120
- "files_create_folder_v2",
1121
- "files_copy_v2",
1122
- "files_move_v2",
1123
- "files_delete_v2",
1124
- "sharing_create_shared_link_with_settings"
1125
- ]
1126
- },
1127
- readToolPatterns: [
1128
- "users_get_current_account",
1129
- "users_get_space_usage",
1130
- "files_get_metadata",
1131
- "files_list_folder",
1132
- "files_list_folder_continue",
1133
- "files_search_v2",
1134
- "files_search_continue_v2",
1135
- "files_get_temporary_link",
1136
- "sharing_list_shared_links"
1137
- ],
1138
- writeToolPatterns: [
1139
- "files_create_folder_v2",
1140
- "files_copy_v2",
1141
- "files_move_v2",
1142
- "files_delete_v2",
1143
- "sharing_create_shared_link_with_settings"
1144
- ],
1145
- setup: [{
1146
- kind: "connection",
1147
- name: "dropbox-developer-configuration",
1148
- required: true,
1149
- message: "Register one Dropbox API app, enable the scopes required by this connection, set DROPBOX_APP_KEY and DROPBOX_APP_SECRET, and register the Assembly Line connection callback URL. OAuth Authorization Code + PKCE requests offline access for refreshable user grants."
1150
- }]
1151
- },
1152
- {
1153
- kind: "soundcloud",
1154
- role: "connection",
1155
- packageName: "@assemblyline-agents/soundcloud",
1156
- helper: "defineSoundCloudConnection",
1157
- protocol: "openapi",
1158
- provider: "soundcloud",
1159
- description: "SoundCloud tracks, playlists, users, likes, follows, reposts, and comments through the official API.",
1160
- defaultSpec: "https://developers.soundcloud.com/docs/api/explorer/api.json",
1161
- defaultBaseUrl: "https://api.soundcloud.com",
1162
- requiredConfig: ["SOUNDCLOUD_CLIENT_ID"],
1163
- optionalConfig: ["SOUNDCLOUD_REDIRECT_URI"],
1164
- requiredCredentials: ["SOUNDCLOUD_CLIENT_SECRET"],
1165
- optionalCredentials: [],
1166
- capabilities: ["openapi", "oauth", "live-tools"],
1167
- scopes: [],
1168
- subject: "user",
1169
- tools: { block: ["post_tracks"] },
1170
- readToolPatterns: ["regex:^get_"],
1171
- writeToolPatterns: ["regex:^(post|put|patch|delete)_"],
1172
- setup: [{
1173
- kind: "connection",
1174
- name: "soundcloud-developer-configuration",
1175
- required: true,
1176
- message: "Register a SoundCloud application and set SOUNDCLOUD_CLIENT_ID and SOUNDCLOUD_CLIENT_SECRET. Assembly Line handles OAuth 2.1 PKCE; the developer owns the app and redirect URI."
1177
- }]
1178
- },
1179
- catalogEntry({
1180
- kind: "browser-use",
1181
- displayName: "Browser Use Cloud",
1182
- helper: "defineBrowserUseConnection",
1183
- description: "Hosted browser automation sessions through Browser Use Cloud MCP.",
1184
- defaultUrl: "https://api.browser-use.com/v3/mcp",
1185
- tokenEnv: "BROWSER_USE_API_KEY",
1186
- tokenHeader: "x-browser-use-api-key",
1187
- subject: "environment",
1188
- tools: { allow: ["get_session", "get_session_messages", "list_sessions", "list_browser_profiles", "run_session", "send_task", "stop_session"] },
1189
- readToolPatterns: ["get_session", "get_session_messages", "list_sessions", "list_browser_profiles"],
1190
- writeToolPatterns: ["run_session", "send_task", "stop_session"],
1191
- eventCatalog: ["agent.task.status_update"],
1192
- defaultEvents: ["agent.task.status_update"],
1193
- eventMode: "manual",
1194
- eventScope: "connection",
1195
- eventRequiredCredentials: ["BROWSER_USE_WEBHOOK_SECRET"],
1196
- setupMessage: "Set BROWSER_USE_API_KEY for the Assembly Line host. Browser profiles, cost limits, and write authority remain developer-controlled."
1197
- }),
1198
- catalogEntry({
1199
- kind: "orgo",
1200
- displayName: "Orgo",
1201
- helper: "defineOrgoConnection",
1202
- description: "Persistent Orgo cloud desktops controlled through a packaged, credential-scrubbing REST bridge.",
1203
- protocol: "sdk",
1204
- tokenEnv: "ORGO_API_KEY",
1205
- subject: "environment",
1206
- tools: {
1207
- allow: [
1208
- "list_workspaces",
1209
- "create_workspace",
1210
- "list_computers",
1211
- "get_computer",
1212
- "create_computer",
1213
- "delete_computer",
1214
- "start_computer",
1215
- "stop_computer",
1216
- "restart_computer",
1217
- "screenshot",
1218
- "click",
1219
- "drag",
1220
- "type_text",
1221
- "press_key",
1222
- "scroll",
1223
- "wait",
1224
- "execute_bash",
1225
- "execute_python",
1226
- "capture_file",
1227
- "credential_fill"
1228
- ]
1229
- },
1230
- readToolPatterns: [
1231
- "list_workspaces",
1232
- "list_computers",
1233
- "get_computer",
1234
- "screenshot",
1235
- "capture_file"
1236
- ],
1237
- writeToolPatterns: [
1238
- "create_workspace",
1239
- "create_computer",
1240
- "delete_computer",
1241
- "start_computer",
1242
- "stop_computer",
1243
- "restart_computer",
1244
- "click",
1245
- "drag",
1246
- "type_text",
1247
- "press_key",
1248
- "scroll",
1249
- "wait",
1250
- "execute_bash",
1251
- "execute_python",
1252
- "credential_fill"
1253
- ],
1254
- optionalConfig: ["ORGO_API_BASE_URL"],
1255
- setupMessage: "Set ORGO_API_KEY on the Assembly Line runtime host. The developer owns Orgo workspaces, account limits, auto-stop policy, login state, and billing; the packaged bridge strips VNC credentials from results."
1256
- }),
1257
- catalogEntry({
1258
- kind: "peekaboo",
1259
- displayName: "Peekaboo",
1260
- helper: "definePeekabooConnection",
1261
- description: "Same-host macOS accessibility and input automation through Peekaboo's stdio MCP server.",
1262
- transport: "stdio",
1263
- subject: "environment",
1264
- tools: { allow: ["inspect_ui", "list", "permissions", "click", "type", "hotkey", "scroll", "drag", "swipe", "move", "set_value", "perform_action", "app", "window", "menu", "dock", "dialog", "space"] },
1265
- hostRequirements: {
1266
- deployTargets: ["local"],
1267
- platforms: ["darwin"],
1268
- message: "Peekaboo is a same-host macOS connection. Run this agent with the local deploy target on the Mac being controlled; hosted Railway, Docker, Fly, and VPS deployments cannot reach back to that Mac."
1269
- },
1270
- readToolPatterns: ["inspect_ui", "list", "permissions"],
1271
- writeToolPatterns: ["click", "type", "hotkey", "scroll", "drag", "swipe", "move", "set_value", "perform_action", "app", "window", "menu", "dock", "dialog", "space"],
1272
- setupMessage: "Local deployment only: install Peekaboo on the Assembly Line Mac (macOS 15+), grant that host process Accessibility and Screen Recording permissions, and use the local deploy target. Hosted targets are rejected."
1273
- }),
1274
- catalogEntry({
1275
- kind: "computer-use",
1276
- displayName: "Assembly Line Computer Use",
1277
- helper: "defineComputerUseConnection",
1278
- description: "End-to-end encrypted accessibility and input automation on a paired Mac through the Assembly Line device relay.",
1279
- transport: "relay",
1280
- defaultUrl: "https://computer-use.artificialillumination.co/v1",
1281
- urlEnv: "ASSEMBLY_LINE_COMPUTER_USE_RELAY_URL",
1282
- relayCredential: "ASSEMBLY_LINE_COMPUTER_USE_BINDING",
1283
- subject: "environment",
1284
- tools: { allow: ["inspect_ui", "list", "permissions", "click", "type", "hotkey", "scroll", "drag", "swipe", "move", "set_value", "perform_action", "app", "window", "menu", "dock", "dialog", "space"] },
1285
- readToolPatterns: ["inspect_ui", "list", "permissions"],
1286
- writeToolPatterns: ["click", "type", "hotkey", "scroll", "drag", "swipe", "move", "set_value", "perform_action", "app", "window", "menu", "dock", "dialog", "space"],
1287
- setupMessage: "Install Assembly Line Agent Builder on the Mac, enable Computer Host, pair this deployment, and set the generated ASSEMBLY_LINE_COMPUTER_USE_BINDING secret on the remote runtime. The binding is device-scoped and must not be placed in prompts or source control."
1288
- }),
1289
- catalogEntry({
1290
- kind: "ffmpeg",
1291
- displayName: "FFmpeg",
1292
- helper: "defineFfmpegConnection",
1293
- description: "Workspace-scoped media inspection, trimming, transcoding, stitching, audio replacement, frame extraction, and vertical reframing through FFmpeg.",
1294
- transport: "stdio",
1295
- subject: "environment",
1296
- tools: {
1297
- allow: [
1298
- "probe_media",
1299
- "trim_media",
1300
- "transcode_media",
1301
- "concat_media",
1302
- "replace_audio",
1303
- "extract_frames",
1304
- "reframe_vertical"
1305
- ]
1306
- },
1307
- readToolPatterns: ["probe_media"],
1308
- writeToolPatterns: [
1309
- "trim_media",
1310
- "transcode_media",
1311
- "concat_media",
1312
- "replace_audio",
1313
- "extract_frames",
1314
- "reframe_vertical"
1315
- ],
1316
- setupMessage: "Install ffmpeg and ffprobe on the Assembly Line runtime host. The plugin keeps all media paths inside its configured workspace root and exposes typed operations instead of arbitrary FFmpeg flags."
1317
- }),
1318
- REMOTION_PLUGIN
1319
- ];
1320
- function cloneToolFilter(filter) {
1321
- if (!filter)
1322
- return undefined;
1323
- if ("allow" in filter)
1324
- return { allow: [...filter.allow] };
1325
- if ("block" in filter)
1326
- return { block: [...filter.block] };
1327
- return { allOf: filter.allOf.map((child) => cloneToolFilter(child)) };
1328
- }
1329
- function cloneHostRequirements(requirements) {
1330
- return {
1331
- ...requirements,
1332
- ...(requirements.deployTargets ? { deployTargets: [...requirements.deployTargets] } : {}),
1333
- ...(requirements.platforms ? { platforms: [...requirements.platforms] } : {})
1334
- };
1335
- }
1336
- function cloneMetadata(entry) {
1337
- return {
1338
- ...entry,
1339
- requiredConfig: [...entry.requiredConfig],
1340
- optionalConfig: [...entry.optionalConfig],
1341
- requiredCredentials: [...entry.requiredCredentials],
1342
- optionalCredentials: [...entry.optionalCredentials],
1343
- capabilities: [...(entry.capabilities ?? [])],
1344
- scopes: [...(entry.scopes ?? [])],
1345
- readToolPatterns: [...entry.readToolPatterns],
1346
- writeToolPatterns: [...entry.writeToolPatterns],
1347
- ...(entry.tools ? { tools: cloneToolFilter(entry.tools) } : {}),
1348
- ...(entry.hostRequirements ? { hostRequirements: cloneHostRequirements(entry.hostRequirements) } : {})
1349
- };
1350
- }
1351
- function cloneToolPackMetadata(entry) {
1352
- return {
1353
- ...entry,
1354
- tools: entry.tools.map((tool) => ({ ...tool })),
1355
- ...(entry.config ? {
1356
- config: {
1357
- ...entry.config,
1358
- ...(entry.config.options ? { options: structuredClone(entry.config.options) } : {})
1359
- }
1360
- } : {}),
1361
- ...(entry.skills ? { skills: [...entry.skills] } : {}),
1362
- ...(entry.requiredConfig ? { requiredConfig: [...entry.requiredConfig] } : {}),
1363
- ...(entry.optionalConfig ? { optionalConfig: [...entry.optionalConfig] } : {}),
1364
- ...(entry.requiredCredentials ? { requiredCredentials: [...entry.requiredCredentials] } : {}),
1365
- ...(entry.optionalCredentials ? { optionalCredentials: [...entry.optionalCredentials] } : {}),
1366
- ...(entry.setup ? { setup: entry.setup.map((step) => ({ ...step })) } : {})
1367
- };
1368
- }
1369
3
  //# sourceMappingURL=plugin.js.map