@spinabot/brigade 1.6.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/agent-loop.d.ts +13 -0
- package/dist/agents/agent-loop.d.ts.map +1 -1
- package/dist/agents/agent-loop.js +5 -0
- package/dist/agents/agent-loop.js.map +1 -1
- package/dist/agents/channels/access-control/group-tool-policy.d.ts +73 -0
- package/dist/agents/channels/access-control/group-tool-policy.d.ts.map +1 -0
- package/dist/agents/channels/access-control/group-tool-policy.js +193 -0
- package/dist/agents/channels/access-control/group-tool-policy.js.map +1 -0
- package/dist/agents/channels/access-control/index.d.ts +1 -0
- package/dist/agents/channels/access-control/index.d.ts.map +1 -1
- package/dist/agents/channels/access-control/index.js +1 -0
- package/dist/agents/channels/access-control/index.js.map +1 -1
- package/dist/agents/channels/bluebubbles/account-config.d.ts +253 -0
- package/dist/agents/channels/bluebubbles/account-config.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/account-config.js +486 -0
- package/dist/agents/channels/bluebubbles/account-config.js.map +1 -0
- package/dist/agents/channels/bluebubbles/account-registry.d.ts +33 -0
- package/dist/agents/channels/bluebubbles/account-registry.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/account-registry.js +46 -0
- package/dist/agents/channels/bluebubbles/account-registry.js.map +1 -0
- package/dist/agents/channels/bluebubbles/adapter.d.ts +45 -0
- package/dist/agents/channels/bluebubbles/adapter.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/adapter.js +366 -0
- package/dist/agents/channels/bluebubbles/adapter.js.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.d.ts +52 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.js +118 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.js.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup.d.ts +114 -0
- package/dist/agents/channels/bluebubbles/catchup.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup.js +220 -0
- package/dist/agents/channels/bluebubbles/catchup.js.map +1 -0
- package/dist/agents/channels/bluebubbles/chat.d.ts +75 -0
- package/dist/agents/channels/bluebubbles/chat.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/chat.js +182 -0
- package/dist/agents/channels/bluebubbles/chat.js.map +1 -0
- package/dist/agents/channels/bluebubbles/connection.d.ts +95 -0
- package/dist/agents/channels/bluebubbles/connection.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/connection.js +413 -0
- package/dist/agents/channels/bluebubbles/connection.js.map +1 -0
- package/dist/agents/channels/bluebubbles/contact-names.d.ts +79 -0
- package/dist/agents/channels/bluebubbles/contact-names.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/contact-names.js +188 -0
- package/dist/agents/channels/bluebubbles/contact-names.js.map +1 -0
- package/dist/agents/channels/bluebubbles/debounce.d.ts +78 -0
- package/dist/agents/channels/bluebubbles/debounce.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/debounce.js +173 -0
- package/dist/agents/channels/bluebubbles/debounce.js.map +1 -0
- package/dist/agents/channels/bluebubbles/dedupe.d.ts +25 -0
- package/dist/agents/channels/bluebubbles/dedupe.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/dedupe.js +35 -0
- package/dist/agents/channels/bluebubbles/dedupe.js.map +1 -0
- package/dist/agents/channels/bluebubbles/effects.d.ts +17 -0
- package/dist/agents/channels/bluebubbles/effects.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/effects.js +57 -0
- package/dist/agents/channels/bluebubbles/effects.js.map +1 -0
- package/dist/agents/channels/bluebubbles/history.d.ts +56 -0
- package/dist/agents/channels/bluebubbles/history.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/history.js +140 -0
- package/dist/agents/channels/bluebubbles/history.js.map +1 -0
- package/dist/agents/channels/bluebubbles/index.d.ts +18 -0
- package/dist/agents/channels/bluebubbles/index.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/index.js +18 -0
- package/dist/agents/channels/bluebubbles/index.js.map +1 -0
- package/dist/agents/channels/bluebubbles/media.d.ts +104 -0
- package/dist/agents/channels/bluebubbles/media.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/media.js +222 -0
- package/dist/agents/channels/bluebubbles/media.js.map +1 -0
- package/dist/agents/channels/bluebubbles/messaging.d.ts +13 -0
- package/dist/agents/channels/bluebubbles/messaging.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/messaging.js +36 -0
- package/dist/agents/channels/bluebubbles/messaging.js.map +1 -0
- package/dist/agents/channels/bluebubbles/module.d.ts +24 -0
- package/dist/agents/channels/bluebubbles/module.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/module.js +52 -0
- package/dist/agents/channels/bluebubbles/module.js.map +1 -0
- package/dist/agents/channels/bluebubbles/normalize.d.ts +111 -0
- package/dist/agents/channels/bluebubbles/normalize.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/normalize.js +239 -0
- package/dist/agents/channels/bluebubbles/normalize.js.map +1 -0
- package/dist/agents/channels/bluebubbles/plugin.d.ts +46 -0
- package/dist/agents/channels/bluebubbles/plugin.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/plugin.js +242 -0
- package/dist/agents/channels/bluebubbles/plugin.js.map +1 -0
- package/dist/agents/channels/bluebubbles/probe.d.ts +79 -0
- package/dist/agents/channels/bluebubbles/probe.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/probe.js +138 -0
- package/dist/agents/channels/bluebubbles/probe.js.map +1 -0
- package/dist/agents/channels/bluebubbles/reactions.d.ts +46 -0
- package/dist/agents/channels/bluebubbles/reactions.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/reactions.js +207 -0
- package/dist/agents/channels/bluebubbles/reactions.js.map +1 -0
- package/dist/agents/channels/bluebubbles/send.d.ts +132 -0
- package/dist/agents/channels/bluebubbles/send.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/send.js +327 -0
- package/dist/agents/channels/bluebubbles/send.js.map +1 -0
- package/dist/agents/channels/bluebubbles/status-issues.d.ts +57 -0
- package/dist/agents/channels/bluebubbles/status-issues.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/status-issues.js +93 -0
- package/dist/agents/channels/bluebubbles/status-issues.js.map +1 -0
- package/dist/agents/channels/bluebubbles/types.d.ts +69 -0
- package/dist/agents/channels/bluebubbles/types.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/types.js +118 -0
- package/dist/agents/channels/bluebubbles/types.js.map +1 -0
- package/dist/agents/channels/bluebubbles/webhook.d.ts +97 -0
- package/dist/agents/channels/bluebubbles/webhook.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/webhook.js +249 -0
- package/dist/agents/channels/bluebubbles/webhook.js.map +1 -0
- package/dist/agents/channels/bundled-channel-metas.d.ts +13 -0
- package/dist/agents/channels/bundled-channel-metas.d.ts.map +1 -1
- package/dist/agents/channels/bundled-channel-metas.js +33 -0
- package/dist/agents/channels/bundled-channel-metas.js.map +1 -1
- package/dist/agents/channels/discord/account-config.d.ts +60 -0
- package/dist/agents/channels/discord/account-config.d.ts.map +1 -1
- package/dist/agents/channels/discord/account-config.js +89 -0
- package/dist/agents/channels/discord/account-config.js.map +1 -1
- package/dist/agents/channels/discord/adapter.d.ts +24 -1
- package/dist/agents/channels/discord/adapter.d.ts.map +1 -1
- package/dist/agents/channels/discord/adapter.js +208 -41
- package/dist/agents/channels/discord/adapter.js.map +1 -1
- package/dist/agents/channels/discord/component-blocks.d.ts +108 -0
- package/dist/agents/channels/discord/component-blocks.d.ts.map +1 -0
- package/dist/agents/channels/discord/component-blocks.js +113 -0
- package/dist/agents/channels/discord/component-blocks.js.map +1 -0
- package/dist/agents/channels/discord/components.d.ts +78 -0
- package/dist/agents/channels/discord/components.d.ts.map +1 -1
- package/dist/agents/channels/discord/components.js +89 -0
- package/dist/agents/channels/discord/components.js.map +1 -1
- package/dist/agents/channels/discord/connection.d.ts +195 -12
- package/dist/agents/channels/discord/connection.d.ts.map +1 -1
- package/dist/agents/channels/discord/connection.js +852 -38
- package/dist/agents/channels/discord/connection.js.map +1 -1
- package/dist/agents/channels/discord/directory-cache.d.ts +47 -0
- package/dist/agents/channels/discord/directory-cache.d.ts.map +1 -0
- package/dist/agents/channels/discord/directory-cache.js +131 -0
- package/dist/agents/channels/discord/directory-cache.js.map +1 -0
- package/dist/agents/channels/discord/directory-live.d.ts +61 -0
- package/dist/agents/channels/discord/directory-live.d.ts.map +1 -0
- package/dist/agents/channels/discord/directory-live.js +140 -0
- package/dist/agents/channels/discord/directory-live.js.map +1 -0
- package/dist/agents/channels/discord/format.d.ts +15 -0
- package/dist/agents/channels/discord/format.d.ts.map +1 -1
- package/dist/agents/channels/discord/format.js +56 -0
- package/dist/agents/channels/discord/format.js.map +1 -1
- package/dist/agents/channels/discord/guilds.d.ts +25 -0
- package/dist/agents/channels/discord/guilds.d.ts.map +1 -0
- package/dist/agents/channels/discord/guilds.js +46 -0
- package/dist/agents/channels/discord/guilds.js.map +1 -0
- package/dist/agents/channels/discord/inbound-extras.d.ts +166 -9
- package/dist/agents/channels/discord/inbound-extras.d.ts.map +1 -1
- package/dist/agents/channels/discord/inbound-extras.js +246 -8
- package/dist/agents/channels/discord/inbound-extras.js.map +1 -1
- package/dist/agents/channels/discord/index.d.ts +10 -3
- package/dist/agents/channels/discord/index.d.ts.map +1 -1
- package/dist/agents/channels/discord/index.js +10 -3
- package/dist/agents/channels/discord/index.js.map +1 -1
- package/dist/agents/channels/discord/modal-registry.d.ts +89 -0
- package/dist/agents/channels/discord/modal-registry.d.ts.map +1 -0
- package/dist/agents/channels/discord/modal-registry.js +104 -0
- package/dist/agents/channels/discord/modal-registry.js.map +1 -0
- package/dist/agents/channels/discord/modals.d.ts +100 -0
- package/dist/agents/channels/discord/modals.d.ts.map +1 -0
- package/dist/agents/channels/discord/modals.js +124 -0
- package/dist/agents/channels/discord/modals.js.map +1 -0
- package/dist/agents/channels/discord/permission-audit.d.ts +43 -0
- package/dist/agents/channels/discord/permission-audit.d.ts.map +1 -0
- package/dist/agents/channels/discord/permission-audit.js +192 -0
- package/dist/agents/channels/discord/permission-audit.js.map +1 -0
- package/dist/agents/channels/discord/plugin.d.ts +18 -2
- package/dist/agents/channels/discord/plugin.d.ts.map +1 -1
- package/dist/agents/channels/discord/plugin.js +73 -4
- package/dist/agents/channels/discord/plugin.js.map +1 -1
- package/dist/agents/channels/discord/probe.d.ts +23 -1
- package/dist/agents/channels/discord/probe.d.ts.map +1 -1
- package/dist/agents/channels/discord/probe.js +40 -5
- package/dist/agents/channels/discord/probe.js.map +1 -1
- package/dist/agents/channels/discord/rest-actions.d.ts +346 -0
- package/dist/agents/channels/discord/rest-actions.d.ts.map +1 -0
- package/dist/agents/channels/discord/rest-actions.js +559 -0
- package/dist/agents/channels/discord/rest-actions.js.map +1 -0
- package/dist/agents/channels/discord/rest-components.d.ts +122 -0
- package/dist/agents/channels/discord/rest-components.d.ts.map +1 -0
- package/dist/agents/channels/discord/rest-components.js +243 -0
- package/dist/agents/channels/discord/rest-components.js.map +1 -0
- package/dist/agents/channels/discord/security-audit.d.ts +29 -0
- package/dist/agents/channels/discord/security-audit.d.ts.map +1 -0
- package/dist/agents/channels/discord/security-audit.js +94 -0
- package/dist/agents/channels/discord/security-audit.js.map +1 -0
- package/dist/agents/channels/discord/security-doctor.d.ts +43 -0
- package/dist/agents/channels/discord/security-doctor.d.ts.map +1 -0
- package/dist/agents/channels/discord/security-doctor.js +83 -0
- package/dist/agents/channels/discord/security-doctor.js.map +1 -0
- package/dist/agents/channels/discord/status-issues.d.ts +37 -0
- package/dist/agents/channels/discord/status-issues.d.ts.map +1 -0
- package/dist/agents/channels/discord/status-issues.js +66 -0
- package/dist/agents/channels/discord/status-issues.js.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts +57 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.js +98 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.js.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding.d.ts +95 -0
- package/dist/agents/channels/discord/subagent-thread-binding.d.ts.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding.js +208 -0
- package/dist/agents/channels/discord/subagent-thread-binding.js.map +1 -0
- package/dist/agents/channels/discord/system-events.d.ts +31 -0
- package/dist/agents/channels/discord/system-events.d.ts.map +1 -0
- package/dist/agents/channels/discord/system-events.js +74 -0
- package/dist/agents/channels/discord/system-events.js.map +1 -0
- package/dist/agents/channels/general-callback.d.ts +12 -0
- package/dist/agents/channels/general-callback.d.ts.map +1 -1
- package/dist/agents/channels/general-callback.js +18 -0
- package/dist/agents/channels/general-callback.js.map +1 -1
- package/dist/agents/channels/imessage/account-config.d.ts +178 -0
- package/dist/agents/channels/imessage/account-config.d.ts.map +1 -0
- package/dist/agents/channels/imessage/account-config.js +371 -0
- package/dist/agents/channels/imessage/account-config.js.map +1 -0
- package/dist/agents/channels/imessage/adapter.d.ts +36 -0
- package/dist/agents/channels/imessage/adapter.d.ts.map +1 -0
- package/dist/agents/channels/imessage/adapter.js +286 -0
- package/dist/agents/channels/imessage/adapter.js.map +1 -0
- package/dist/agents/channels/imessage/client.d.ts +99 -0
- package/dist/agents/channels/imessage/client.d.ts.map +1 -0
- package/dist/agents/channels/imessage/client.js +231 -0
- package/dist/agents/channels/imessage/client.js.map +1 -0
- package/dist/agents/channels/imessage/connection.d.ts +101 -0
- package/dist/agents/channels/imessage/connection.d.ts.map +1 -0
- package/dist/agents/channels/imessage/connection.js +367 -0
- package/dist/agents/channels/imessage/connection.js.map +1 -0
- package/dist/agents/channels/imessage/format.d.ts +45 -0
- package/dist/agents/channels/imessage/format.d.ts.map +1 -0
- package/dist/agents/channels/imessage/format.js +170 -0
- package/dist/agents/channels/imessage/format.js.map +1 -0
- package/dist/agents/channels/imessage/history.d.ts +49 -0
- package/dist/agents/channels/imessage/history.d.ts.map +1 -0
- package/dist/agents/channels/imessage/history.js +74 -0
- package/dist/agents/channels/imessage/history.js.map +1 -0
- package/dist/agents/channels/imessage/index.d.ts +25 -0
- package/dist/agents/channels/imessage/index.d.ts.map +1 -0
- package/dist/agents/channels/imessage/index.js +25 -0
- package/dist/agents/channels/imessage/index.js.map +1 -0
- package/dist/agents/channels/imessage/media.d.ts +92 -0
- package/dist/agents/channels/imessage/media.d.ts.map +1 -0
- package/dist/agents/channels/imessage/media.js +196 -0
- package/dist/agents/channels/imessage/media.js.map +1 -0
- package/dist/agents/channels/imessage/messaging.d.ts +14 -0
- package/dist/agents/channels/imessage/messaging.d.ts.map +1 -0
- package/dist/agents/channels/imessage/messaging.js +37 -0
- package/dist/agents/channels/imessage/messaging.js.map +1 -0
- package/dist/agents/channels/imessage/module.d.ts +16 -0
- package/dist/agents/channels/imessage/module.d.ts.map +1 -0
- package/dist/agents/channels/imessage/module.js +23 -0
- package/dist/agents/channels/imessage/module.js.map +1 -0
- package/dist/agents/channels/imessage/monitor.d.ts +207 -0
- package/dist/agents/channels/imessage/monitor.d.ts.map +1 -0
- package/dist/agents/channels/imessage/monitor.js +504 -0
- package/dist/agents/channels/imessage/monitor.js.map +1 -0
- package/dist/agents/channels/imessage/plugin.d.ts +53 -0
- package/dist/agents/channels/imessage/plugin.d.ts.map +1 -0
- package/dist/agents/channels/imessage/plugin.js +215 -0
- package/dist/agents/channels/imessage/plugin.js.map +1 -0
- package/dist/agents/channels/imessage/probe.d.ts +68 -0
- package/dist/agents/channels/imessage/probe.d.ts.map +1 -0
- package/dist/agents/channels/imessage/probe.js +134 -0
- package/dist/agents/channels/imessage/probe.js.map +1 -0
- package/dist/agents/channels/imessage/remote-attachments.d.ts +61 -0
- package/dist/agents/channels/imessage/remote-attachments.d.ts.map +1 -0
- package/dist/agents/channels/imessage/remote-attachments.js +131 -0
- package/dist/agents/channels/imessage/remote-attachments.js.map +1 -0
- package/dist/agents/channels/imessage/send.d.ts +61 -0
- package/dist/agents/channels/imessage/send.d.ts.map +1 -0
- package/dist/agents/channels/imessage/send.js +108 -0
- package/dist/agents/channels/imessage/send.js.map +1 -0
- package/dist/agents/channels/imessage/targets.d.ts +91 -0
- package/dist/agents/channels/imessage/targets.d.ts.map +1 -0
- package/dist/agents/channels/imessage/targets.js +245 -0
- package/dist/agents/channels/imessage/targets.js.map +1 -0
- package/dist/agents/channels/imessage/watch-error.d.ts +23 -0
- package/dist/agents/channels/imessage/watch-error.d.ts.map +1 -0
- package/dist/agents/channels/imessage/watch-error.js +69 -0
- package/dist/agents/channels/imessage/watch-error.js.map +1 -0
- package/dist/agents/channels/inbound-pipeline.d.ts +11 -0
- package/dist/agents/channels/inbound-pipeline.d.ts.map +1 -1
- package/dist/agents/channels/inbound-pipeline.js +25 -4
- package/dist/agents/channels/inbound-pipeline.js.map +1 -1
- package/dist/agents/channels/manager.d.ts +9 -0
- package/dist/agents/channels/manager.d.ts.map +1 -1
- package/dist/agents/channels/manager.js.map +1 -1
- package/dist/agents/channels/sdk.d.ts +4 -0
- package/dist/agents/channels/sdk.d.ts.map +1 -1
- package/dist/agents/channels/sdk.js +4 -0
- package/dist/agents/channels/sdk.js.map +1 -1
- package/dist/agents/extensions/modules/index.d.ts.map +1 -1
- package/dist/agents/extensions/modules/index.js +12 -0
- package/dist/agents/extensions/modules/index.js.map +1 -1
- package/dist/agents/extensions/types.d.ts +7 -0
- package/dist/agents/extensions/types.d.ts.map +1 -1
- package/dist/agents/extensions/types.js.map +1 -1
- package/dist/agents/session-wiring.d.ts +31 -0
- package/dist/agents/session-wiring.d.ts.map +1 -1
- package/dist/agents/session-wiring.js +45 -2
- package/dist/agents/session-wiring.js.map +1 -1
- package/dist/agents/subagent-announce-delivery.d.ts +10 -0
- package/dist/agents/subagent-announce-delivery.d.ts.map +1 -1
- package/dist/agents/subagent-announce-delivery.js +1 -0
- package/dist/agents/subagent-announce-delivery.js.map +1 -1
- package/dist/agents/subagent-completion-bridge.d.ts.map +1 -1
- package/dist/agents/subagent-completion-bridge.js +81 -0
- package/dist/agents/subagent-completion-bridge.js.map +1 -1
- package/dist/agents/subagent-spawn.d.ts.map +1 -1
- package/dist/agents/subagent-spawn.js +57 -4
- package/dist/agents/subagent-spawn.js.map +1 -1
- package/dist/agents/tools/bluebubbles-action-tool.d.ts +66 -0
- package/dist/agents/tools/bluebubbles-action-tool.d.ts.map +1 -0
- package/dist/agents/tools/bluebubbles-action-tool.js +234 -0
- package/dist/agents/tools/bluebubbles-action-tool.js.map +1 -0
- package/dist/agents/tools/discord-action-tool.d.ts +224 -0
- package/dist/agents/tools/discord-action-tool.d.ts.map +1 -0
- package/dist/agents/tools/discord-action-tool.js +848 -0
- package/dist/agents/tools/discord-action-tool.js.map +1 -0
- package/dist/agents/tools/registry.d.ts.map +1 -1
- package/dist/agents/tools/registry.js +39 -0
- package/dist/agents/tools/registry.js.map +1 -1
- package/dist/agents/tools/sessions/index.d.ts +8 -0
- package/dist/agents/tools/sessions/index.d.ts.map +1 -1
- package/dist/agents/tools/sessions/index.js +15 -3
- package/dist/agents/tools/sessions/index.js.map +1 -1
- package/dist/buildstamp.json +1 -1
- package/dist/cli/commands/channels.d.ts +2 -0
- package/dist/cli/commands/channels.d.ts.map +1 -1
- package/dist/cli/commands/channels.js +58 -1
- package/dist/cli/commands/channels.js.map +1 -1
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +48 -2
- package/dist/core/server.js.map +1 -1
- package/dist/infra/net/fetch-guard.d.ts +24 -2
- package/dist/infra/net/fetch-guard.d.ts.map +1 -1
- package/dist/infra/net/fetch-guard.js +78 -31
- package/dist/infra/net/fetch-guard.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-spawn.js","sourceRoot":"","sources":["../../src/agents/subagent-spawn.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"subagent-spawn.js","sourceRoot":"","sources":["../../src/agents/subagent-spawn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `bluebubbles_action` — owner-only BlueBubbles group-admin surface.
|
|
3
|
+
*
|
|
4
|
+
* Brigade's live BlueBubbles adapter handles inbound + the everyday
|
|
5
|
+
* send/edit/react/typing/mark-read path, but it does NOT expose group
|
|
6
|
+
* administration (membership, rename, group icon). This tool fills that gap with
|
|
7
|
+
* a SELF-CONTAINED client over the same BlueBubbles REST plumbing the channel
|
|
8
|
+
* uses (`chat.ts` helpers over `buildBlueBubblesApiUrl` + the injectable
|
|
9
|
+
* `fetchImpl`): it resolves the server URL + password from config exactly like
|
|
10
|
+
* `probe.ts`, so it works whether or not the live adapter is up.
|
|
11
|
+
*
|
|
12
|
+
* Every action here needs the BlueBubbles server's Private API. The tool probes
|
|
13
|
+
* the server once (cached server/info) to learn the Private-API status, then
|
|
14
|
+
* refuses cleanly when it is off. One meta-tool with an `action` discriminator
|
|
15
|
+
* (keeps the prompt small) dispatches to the matching `chat.ts` helper.
|
|
16
|
+
*
|
|
17
|
+
* Owner-only: the standard `wrapOwnerOnlyToolExecution` gate (applied at
|
|
18
|
+
* session-wiring) already refuses non-owner senders + unattended cron turns, so
|
|
19
|
+
* this file does not re-implement auth. The registry only ASSEMBLES this tool
|
|
20
|
+
* when the BlueBubbles channel is configured (`channels.bluebubbles.enabled`),
|
|
21
|
+
* so a non-BlueBubbles install never sees it.
|
|
22
|
+
*/
|
|
23
|
+
import { Type } from "typebox";
|
|
24
|
+
import { type BlueBubblesActionFlags } from "../channels/bluebubbles/account-config.js";
|
|
25
|
+
import type { FetchLike } from "../channels/bluebubbles/types.js";
|
|
26
|
+
import type { BrigadeTool } from "./types.js";
|
|
27
|
+
declare const BlueBubblesActionParams: Type.TObject<{
|
|
28
|
+
action: Type.TUnion<[Type.TLiteral<"add-participant">, Type.TLiteral<"remove-participant">, Type.TLiteral<"rename-group">, Type.TLiteral<"set-group-icon">, Type.TLiteral<"leave-group">, Type.TLiteral<"send-effect">, Type.TLiteral<"reply">]>;
|
|
29
|
+
accountId: Type.TOptional<Type.TString>;
|
|
30
|
+
chatGuid: Type.TString;
|
|
31
|
+
address: Type.TOptional<Type.TString>;
|
|
32
|
+
displayName: Type.TOptional<Type.TString>;
|
|
33
|
+
iconPath: Type.TOptional<Type.TString>;
|
|
34
|
+
text: Type.TOptional<Type.TString>;
|
|
35
|
+
effect: Type.TOptional<Type.TString>;
|
|
36
|
+
replyToId: Type.TOptional<Type.TString>;
|
|
37
|
+
partIndex: Type.TOptional<Type.TInteger>;
|
|
38
|
+
}>;
|
|
39
|
+
interface BlueBubblesActionResult {
|
|
40
|
+
action: string;
|
|
41
|
+
ok: boolean;
|
|
42
|
+
message: string;
|
|
43
|
+
}
|
|
44
|
+
export interface MakeBlueBubblesActionToolOptions {
|
|
45
|
+
/** Inject the resolved server URL + password (tests). Defaults to config-resolve per call. */
|
|
46
|
+
resolveAccount?: (accountId: string) => {
|
|
47
|
+
serverUrl: string;
|
|
48
|
+
password: string;
|
|
49
|
+
timeoutMs?: number;
|
|
50
|
+
};
|
|
51
|
+
/** Inject the Private-API status (tests). When omitted, probed from the server per call. */
|
|
52
|
+
resolvePrivateApi?: (account: {
|
|
53
|
+
serverUrl: string;
|
|
54
|
+
password: string;
|
|
55
|
+
timeoutMs?: number;
|
|
56
|
+
}) => Promise<boolean | null>;
|
|
57
|
+
/** Inject the per-account action toggles (tests). Defaults to config-resolve per call. */
|
|
58
|
+
resolveActions?: (accountId: string) => BlueBubblesActionFlags;
|
|
59
|
+
/** Inject fetch (tests). Defaults to global fetch in the REST helpers. */
|
|
60
|
+
fetchImpl?: FetchLike;
|
|
61
|
+
/** Inject the icon file reader (tests). Defaults to reading from disk after the media-path guard. */
|
|
62
|
+
readIcon?: (path: string) => Promise<Uint8Array>;
|
|
63
|
+
}
|
|
64
|
+
export declare function makeBlueBubblesActionTool(opts?: MakeBlueBubblesActionToolOptions): BrigadeTool<typeof BlueBubblesActionParams, BlueBubblesActionResult>;
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=bluebubbles-action-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bluebubbles-action-tool.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/bluebubbles-action-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,OAAO,EAKN,KAAK,sBAAsB,EAE3B,MAAM,2CAA2C,CAAC;AAWnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAGlE,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,YAAY,CAAC;AAI/D,QAAA,MAAM,uBAAuB;;;;;;;;;;;EA8C3B,CAAC;AAEH,UAAU,uBAAuB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,gCAAgC;IAChD,8FAA8F;IAC9F,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpG,4FAA4F;IAC5F,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACtH,0FAA0F;IAC1F,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAC/D,0EAA0E;IAC1E,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACjD;AAED,wBAAgB,yBAAyB,CACxC,IAAI,GAAE,gCAAqC,GACzC,WAAW,CAAC,OAAO,uBAAuB,EAAE,uBAAuB,CAAC,CAkLtE"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `bluebubbles_action` — owner-only BlueBubbles group-admin surface.
|
|
3
|
+
*
|
|
4
|
+
* Brigade's live BlueBubbles adapter handles inbound + the everyday
|
|
5
|
+
* send/edit/react/typing/mark-read path, but it does NOT expose group
|
|
6
|
+
* administration (membership, rename, group icon). This tool fills that gap with
|
|
7
|
+
* a SELF-CONTAINED client over the same BlueBubbles REST plumbing the channel
|
|
8
|
+
* uses (`chat.ts` helpers over `buildBlueBubblesApiUrl` + the injectable
|
|
9
|
+
* `fetchImpl`): it resolves the server URL + password from config exactly like
|
|
10
|
+
* `probe.ts`, so it works whether or not the live adapter is up.
|
|
11
|
+
*
|
|
12
|
+
* Every action here needs the BlueBubbles server's Private API. The tool probes
|
|
13
|
+
* the server once (cached server/info) to learn the Private-API status, then
|
|
14
|
+
* refuses cleanly when it is off. One meta-tool with an `action` discriminator
|
|
15
|
+
* (keeps the prompt small) dispatches to the matching `chat.ts` helper.
|
|
16
|
+
*
|
|
17
|
+
* Owner-only: the standard `wrapOwnerOnlyToolExecution` gate (applied at
|
|
18
|
+
* session-wiring) already refuses non-owner senders + unattended cron turns, so
|
|
19
|
+
* this file does not re-implement auth. The registry only ASSEMBLES this tool
|
|
20
|
+
* when the BlueBubbles channel is configured (`channels.bluebubbles.enabled`),
|
|
21
|
+
* so a non-BlueBubbles install never sees it.
|
|
22
|
+
*/
|
|
23
|
+
import { readFile } from "node:fs/promises";
|
|
24
|
+
import { Type } from "typebox";
|
|
25
|
+
import { loadConfig } from "../../core/config.js";
|
|
26
|
+
import { BLUEBUBBLES_DEFAULT_ACCOUNT_ID, isBlueBubblesOpAllowed, resolveBlueBubblesAccount, resolveBlueBubblesActions, } from "../channels/bluebubbles/account-config.js";
|
|
27
|
+
import { addBlueBubblesParticipant, leaveBlueBubblesChat, removeBlueBubblesParticipant, renameBlueBubblesChat, setBlueBubblesGroupIcon, } from "../channels/bluebubbles/chat.js";
|
|
28
|
+
import { resolveEffectId } from "../channels/bluebubbles/effects.js";
|
|
29
|
+
import { probeBlueBubblesCached } from "../channels/bluebubbles/probe.js";
|
|
30
|
+
import { sendBlueBubblesText } from "../channels/bluebubbles/send.js";
|
|
31
|
+
import { validateOutboundMediaPath } from "../../security/media-path-guard.js";
|
|
32
|
+
import { jsonResult } from "./common.js";
|
|
33
|
+
/* ───────────────────────────── params ───────────────────────────── */
|
|
34
|
+
const BlueBubblesActionParams = Type.Object({
|
|
35
|
+
action: Type.Union([
|
|
36
|
+
Type.Literal("add-participant"),
|
|
37
|
+
Type.Literal("remove-participant"),
|
|
38
|
+
Type.Literal("rename-group"),
|
|
39
|
+
Type.Literal("set-group-icon"),
|
|
40
|
+
Type.Literal("leave-group"),
|
|
41
|
+
Type.Literal("send-effect"),
|
|
42
|
+
Type.Literal("reply"),
|
|
43
|
+
], {
|
|
44
|
+
description: "The BlueBubbles action to run. Group admin: add-participant / remove-participant (needs address), rename-group (needs displayName), set-group-icon (needs iconPath), leave-group. Rich send: send-effect (a bubble/screen effect — needs text + effect), reply (a native inline reply — needs text + replyToId). All require the server's Private API.",
|
|
45
|
+
}),
|
|
46
|
+
accountId: Type.Optional(Type.String({ description: "Which BlueBubbles account to act as (default: the configured default).", maxLength: 64 })),
|
|
47
|
+
chatGuid: Type.String({
|
|
48
|
+
description: "Target group chat GUID (e.g. `iMessage;+;chat123…`). The `chat_guid:` prefix is optional and stripped.",
|
|
49
|
+
maxLength: 256,
|
|
50
|
+
}),
|
|
51
|
+
address: Type.Optional(Type.String({ description: "add-participant / remove-participant: the phone number or email to add/remove.", maxLength: 256 })),
|
|
52
|
+
displayName: Type.Optional(Type.String({ description: "rename-group: the new group name.", maxLength: 256 })),
|
|
53
|
+
iconPath: Type.Optional(Type.String({ description: "set-group-icon: a local image file path to upload as the group photo.", maxLength: 1024 })),
|
|
54
|
+
text: Type.Optional(Type.String({ description: "send-effect / reply: the message text to send.", maxLength: 10_000 })),
|
|
55
|
+
effect: Type.Optional(Type.String({
|
|
56
|
+
description: "send-effect: the effect name (slam, loud, gentle, invisible-ink, echo, spotlight, balloons, confetti, love, lasers, fireworks, sparkles).",
|
|
57
|
+
maxLength: 64,
|
|
58
|
+
})),
|
|
59
|
+
replyToId: Type.Optional(Type.String({ description: "reply: the GUID of the message to reply to (inline thread).", maxLength: 256 })),
|
|
60
|
+
partIndex: Type.Optional(Type.Integer({ description: "reply: the part index of the replied-to message (default 0).", minimum: 0 })),
|
|
61
|
+
});
|
|
62
|
+
export function makeBlueBubblesActionTool(opts = {}) {
|
|
63
|
+
const resolveAccount = opts.resolveAccount ??
|
|
64
|
+
((accountId) => {
|
|
65
|
+
const acc = resolveBlueBubblesAccount(loadConfig(), accountId);
|
|
66
|
+
return { serverUrl: acc.serverUrl, password: acc.password, timeoutMs: acc.probeTimeoutMs };
|
|
67
|
+
});
|
|
68
|
+
const resolvePrivateApi = opts.resolvePrivateApi ??
|
|
69
|
+
(async (account) => {
|
|
70
|
+
// Served from the per-server TTL cache when fresh, so back-to-back actions
|
|
71
|
+
// don't each re-probe server/info.
|
|
72
|
+
const probe = await probeBlueBubblesCached({
|
|
73
|
+
accountId: `tool:${account.serverUrl}`,
|
|
74
|
+
serverUrl: account.serverUrl,
|
|
75
|
+
password: account.password,
|
|
76
|
+
...(account.timeoutMs !== undefined ? { timeoutMs: account.timeoutMs } : {}),
|
|
77
|
+
...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}),
|
|
78
|
+
});
|
|
79
|
+
return probe.privateApi;
|
|
80
|
+
});
|
|
81
|
+
const resolveActions = opts.resolveActions ??
|
|
82
|
+
((accountId) => resolveBlueBubblesActions(loadConfig(), accountId));
|
|
83
|
+
const readIcon = opts.readIcon ??
|
|
84
|
+
(async (path) => {
|
|
85
|
+
// Exfil guard — refuse a secret / system file before reading its bytes.
|
|
86
|
+
const verdict = validateOutboundMediaPath(path);
|
|
87
|
+
if (!verdict.ok)
|
|
88
|
+
throw new Error(verdict.reason ?? "icon path is not allowed");
|
|
89
|
+
return new Uint8Array(await readFile(path));
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
name: "bluebubbles_action",
|
|
93
|
+
label: "BlueBubbles action",
|
|
94
|
+
displaySummary: "managing a BlueBubbles group",
|
|
95
|
+
ownerOnly: true,
|
|
96
|
+
description: [
|
|
97
|
+
"Administer a BlueBubbles (iMessage) chat the everyday chat reply can't:",
|
|
98
|
+
"add-participant / remove-participant (by phone or email), rename-group, set-group-icon (a local image path), leave-group;",
|
|
99
|
+
"plus rich sends — send-effect (a bubble/screen effect with `text` + `effect`) and reply (a native inline reply with `text` + `replyToId`).",
|
|
100
|
+
"All actions require the BlueBubbles server's Private API; the tool reports clearly when it is off.",
|
|
101
|
+
"Owner-only. Every action needs a `chatGuid`; membership needs an `address`, rename needs `displayName`, set-group-icon needs `iconPath`.",
|
|
102
|
+
].join(" "),
|
|
103
|
+
parameters: BlueBubblesActionParams,
|
|
104
|
+
execute: async (_toolCallId, args) => {
|
|
105
|
+
const action = args.action;
|
|
106
|
+
const ok = (message) => jsonResult({ action, ok: true, message });
|
|
107
|
+
const fail = (message) => jsonResult({ action, ok: false, message });
|
|
108
|
+
const accountId = (args.accountId ?? "").trim() || BLUEBUBBLES_DEFAULT_ACCOUNT_ID;
|
|
109
|
+
let account;
|
|
110
|
+
try {
|
|
111
|
+
account = resolveAccount(accountId);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
return fail(`Cannot resolve the BlueBubbles account: ${err instanceof Error ? err.message : String(err)}`);
|
|
115
|
+
}
|
|
116
|
+
if (!account.serverUrl || !account.password) {
|
|
117
|
+
return fail("BlueBubbles is not configured — set channels.bluebubbles.serverUrl + password (or connect the channel) first, then retry.");
|
|
118
|
+
}
|
|
119
|
+
// Strip an optional `chat_guid:` prefix the agent might carry from an inbound id.
|
|
120
|
+
const chatGuid = (args.chatGuid ?? "").trim().replace(/^chat_guid:/i, "");
|
|
121
|
+
if (!chatGuid)
|
|
122
|
+
return fail(`${action} requires a \`chatGuid\`.`);
|
|
123
|
+
// Resolve the per-account action toggles + gate the action against them,
|
|
124
|
+
// PER-OP. Each op maps to a fine-grained flag that inherits its coarse
|
|
125
|
+
// umbrella when unset (group-admin ops ← `groupAdmin`; send-effect ←
|
|
126
|
+
// `effects`; reply ← always on) — so the operator can, e.g., allow
|
|
127
|
+
// rename-group but forbid remove-participant.
|
|
128
|
+
const actions = resolveActions(accountId);
|
|
129
|
+
const OP_FLAG = {
|
|
130
|
+
"add-participant": "addParticipant",
|
|
131
|
+
"remove-participant": "removeParticipant",
|
|
132
|
+
"rename-group": "renameGroup",
|
|
133
|
+
"set-group-icon": "setGroupIcon",
|
|
134
|
+
"leave-group": "leaveGroup",
|
|
135
|
+
"send-effect": "sendWithEffect",
|
|
136
|
+
reply: "reply",
|
|
137
|
+
};
|
|
138
|
+
const opFlag = OP_FLAG[action];
|
|
139
|
+
if (opFlag && !isBlueBubblesOpAllowed(actions, opFlag)) {
|
|
140
|
+
return fail(`BlueBubbles ${action} is disabled (channels.bluebubbles.actions.${opFlag} = false).`);
|
|
141
|
+
}
|
|
142
|
+
// Probe once for the Private-API status — every action here needs it.
|
|
143
|
+
const privateApi = await resolvePrivateApi(account).catch(() => null);
|
|
144
|
+
if (privateApi === false) {
|
|
145
|
+
return fail(`BlueBubbles ${action} requires the Private API, but it is disabled on the BlueBubbles server. Enable the Private API in the BlueBubbles macOS app, then retry.`);
|
|
146
|
+
}
|
|
147
|
+
const base = {
|
|
148
|
+
serverUrl: account.serverUrl,
|
|
149
|
+
password: account.password,
|
|
150
|
+
...(account.timeoutMs !== undefined ? { timeoutMs: account.timeoutMs } : {}),
|
|
151
|
+
...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}),
|
|
152
|
+
// We already refused on a definite `false` above; a `true` or unknown
|
|
153
|
+
// (`null`) status proceeds (the helper's own guard only blocks `false`).
|
|
154
|
+
privateApiEnabled: true,
|
|
155
|
+
};
|
|
156
|
+
try {
|
|
157
|
+
switch (action) {
|
|
158
|
+
case "add-participant": {
|
|
159
|
+
const address = (args.address ?? "").trim();
|
|
160
|
+
if (!address)
|
|
161
|
+
return fail("add-participant requires an `address`.");
|
|
162
|
+
await addBlueBubblesParticipant(base, { chatGuid, address });
|
|
163
|
+
return ok(`Added ${address} to the group.`);
|
|
164
|
+
}
|
|
165
|
+
case "remove-participant": {
|
|
166
|
+
const address = (args.address ?? "").trim();
|
|
167
|
+
if (!address)
|
|
168
|
+
return fail("remove-participant requires an `address`.");
|
|
169
|
+
await removeBlueBubblesParticipant(base, { chatGuid, address });
|
|
170
|
+
return ok(`Removed ${address} from the group.`);
|
|
171
|
+
}
|
|
172
|
+
case "rename-group": {
|
|
173
|
+
const displayName = (args.displayName ?? "").trim();
|
|
174
|
+
if (!displayName)
|
|
175
|
+
return fail("rename-group requires a `displayName`.");
|
|
176
|
+
await renameBlueBubblesChat(base, { chatGuid, displayName });
|
|
177
|
+
return ok(`Renamed the group to "${displayName}".`);
|
|
178
|
+
}
|
|
179
|
+
case "set-group-icon": {
|
|
180
|
+
const iconPath = (args.iconPath ?? "").trim();
|
|
181
|
+
if (!iconPath)
|
|
182
|
+
return fail("set-group-icon requires an `iconPath`.");
|
|
183
|
+
let bytes;
|
|
184
|
+
try {
|
|
185
|
+
bytes = await readIcon(iconPath);
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
return fail(`set-group-icon could not read the icon: ${err instanceof Error ? err.message : String(err)}`);
|
|
189
|
+
}
|
|
190
|
+
await setBlueBubblesGroupIcon(base, { chatGuid, bytes });
|
|
191
|
+
return ok("Updated the group icon.");
|
|
192
|
+
}
|
|
193
|
+
case "leave-group": {
|
|
194
|
+
await leaveBlueBubblesChat(base, { chatGuid });
|
|
195
|
+
return ok("Left the group.");
|
|
196
|
+
}
|
|
197
|
+
case "send-effect": {
|
|
198
|
+
const text = (args.text ?? "").trim();
|
|
199
|
+
if (!text)
|
|
200
|
+
return fail("send-effect requires `text`.");
|
|
201
|
+
const effect = (args.effect ?? "").trim();
|
|
202
|
+
if (!effect)
|
|
203
|
+
return fail("send-effect requires an `effect` name.");
|
|
204
|
+
if (!resolveEffectId(effect)) {
|
|
205
|
+
return fail(`Unknown effect "${effect}". Try one of: slam, loud, gentle, invisible-ink, echo, spotlight, balloons, confetti, love, lasers, fireworks, sparkles.`);
|
|
206
|
+
}
|
|
207
|
+
const sent = await sendBlueBubblesText(chatGuid, text, { ...base, effect });
|
|
208
|
+
return ok(`Sent with the "${effect}" effect${sent.messageId ? ` (message ${sent.messageId})` : ""}.`);
|
|
209
|
+
}
|
|
210
|
+
case "reply": {
|
|
211
|
+
const text = (args.text ?? "").trim();
|
|
212
|
+
if (!text)
|
|
213
|
+
return fail("reply requires `text`.");
|
|
214
|
+
const replyToId = (args.replyToId ?? "").trim();
|
|
215
|
+
if (!replyToId)
|
|
216
|
+
return fail("reply requires a `replyToId` (the message GUID to reply to).");
|
|
217
|
+
const sent = await sendBlueBubblesText(chatGuid, text, {
|
|
218
|
+
...base,
|
|
219
|
+
replyToMessageGuid: replyToId,
|
|
220
|
+
...(typeof args.partIndex === "number" ? { replyToPartIndex: args.partIndex } : {}),
|
|
221
|
+
});
|
|
222
|
+
return ok(`Replied to message ${replyToId}${sent.messageId ? ` (message ${sent.messageId})` : ""}.`);
|
|
223
|
+
}
|
|
224
|
+
default:
|
|
225
|
+
return fail(`Unknown action "${String(action)}".`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
return fail(`BlueBubbles ${action} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=bluebubbles-action-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bluebubbles-action-tool.js","sourceRoot":"","sources":["../../../src/agents/tools/bluebubbles-action-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `discord_action` — owner-only Discord guild action surface (Phase 4).
|
|
3
|
+
*
|
|
4
|
+
* Brigade's live Discord adapter handles inbound + the everyday send/edit/react
|
|
5
|
+
* path, but it does NOT expose the wide guild-management surface a full Discord
|
|
6
|
+
* bot needs: creating/editing channels + categories, role + member management, emoji /
|
|
7
|
+
* sticker / scheduled-event admin, rich embeds + polls + stickers + threads +
|
|
8
|
+
* search, and moderation (ban / unban / kick / timeout). This tool fills that
|
|
9
|
+
* gap with a SELF-CONTAINED Discord REST v10 client — exactly like `probe.ts`
|
|
10
|
+
* and Slack's `directory-live.ts`: it resolves the bot token via
|
|
11
|
+
* `resolveDiscordBotToken` and talks straight to `https://discord.com/api/v10`
|
|
12
|
+
* with `Authorization: Bot <token>`. It never reaches through the live
|
|
13
|
+
* adapter/connection, so it works the same whether or not the Gateway socket is
|
|
14
|
+
* up.
|
|
15
|
+
*
|
|
16
|
+
* One meta-tool with an `action` discriminator (keeps the prompt small) dispatches
|
|
17
|
+
* to the matching helper in `discord/rest-actions.ts`. Owner-only: the standard
|
|
18
|
+
* `wrapOwnerOnlyToolExecution` gate (applied at session-wiring) already refuses
|
|
19
|
+
* non-owner senders and unattended cron turns, so this file does not re-implement
|
|
20
|
+
* auth. The registry only ASSEMBLES this tool when the Discord channel is
|
|
21
|
+
* configured (`channels.discord.enabled`), so a non-Discord install never sees it.
|
|
22
|
+
*
|
|
23
|
+
* Each action validates its required params, calls the REST helper, and returns a
|
|
24
|
+
* compact `jsonResult({ action, ok, … })`. REST failures decode (permissions /
|
|
25
|
+
* 404 / rate-limit / unknown-resource) into an operator-readable message via the
|
|
26
|
+
* `DiscordRestError` carried up from the helper.
|
|
27
|
+
*
|
|
28
|
+
* `set-presence` (Phase 5) is the ONE action that is NOT a REST call: presence
|
|
29
|
+
* is a Gateway (websocket) operation, and this self-contained REST tool holds no
|
|
30
|
+
* live discord.js client handle. The clean path chosen here is CONFIG-WRITE — it
|
|
31
|
+
* persists `channels.discord.presence` via `mutateConfigAtomic`, and the live
|
|
32
|
+
* connection applies that presence on its next (re)connect (it re-reads the
|
|
33
|
+
* resolved presence on every start). This keeps the tool stateless + air-gap-
|
|
34
|
+
* safe and avoids reaching across module boundaries into the running gateway.
|
|
35
|
+
*/
|
|
36
|
+
import { Type } from "typebox";
|
|
37
|
+
import { type BrigadeConfig } from "../../config/io.js";
|
|
38
|
+
import type { BrigadeTool } from "./types.js";
|
|
39
|
+
declare const DiscordActionParams: Type.TObject<{
|
|
40
|
+
action: Type.TUnion<[Type.TLiteral<"send">, Type.TLiteral<"send-embed">, Type.TLiteral<"poll">, Type.TLiteral<"sticker">, Type.TLiteral<"read-messages">, Type.TLiteral<"list-reactions">, Type.TLiteral<"remove-reaction">, Type.TLiteral<"thread-create">, Type.TLiteral<"list-threads">, Type.TLiteral<"search-messages">, Type.TLiteral<"channel-create">, Type.TLiteral<"channel-edit">, Type.TLiteral<"channel-delete">, Type.TLiteral<"channel-move">, Type.TLiteral<"category-create">, Type.TLiteral<"category-edit">, Type.TLiteral<"category-delete">, Type.TLiteral<"role-list">, Type.TLiteral<"role-add">, Type.TLiteral<"role-remove">, Type.TLiteral<"role-info">, Type.TLiteral<"member-info">, Type.TLiteral<"emoji-list">, Type.TLiteral<"emoji-upload">, Type.TLiteral<"sticker-upload">, Type.TLiteral<"event-list">, Type.TLiteral<"event-create">, Type.TLiteral<"ban">, Type.TLiteral<"unban">, Type.TLiteral<"kick">, Type.TLiteral<"timeout">, Type.TLiteral<"untimeout">, Type.TLiteral<"set-presence">]>;
|
|
41
|
+
accountId: Type.TOptional<Type.TString>;
|
|
42
|
+
to: Type.TOptional<Type.TString>;
|
|
43
|
+
channelId: Type.TOptional<Type.TString>;
|
|
44
|
+
guildId: Type.TOptional<Type.TString>;
|
|
45
|
+
userId: Type.TOptional<Type.TString>;
|
|
46
|
+
messageId: Type.TOptional<Type.TString>;
|
|
47
|
+
roleId: Type.TOptional<Type.TString>;
|
|
48
|
+
categoryId: Type.TOptional<Type.TString>;
|
|
49
|
+
content: Type.TOptional<Type.TString>;
|
|
50
|
+
embed: Type.TOptional<Type.TObject<{
|
|
51
|
+
title: Type.TOptional<Type.TString>;
|
|
52
|
+
description: Type.TOptional<Type.TString>;
|
|
53
|
+
color: Type.TOptional<Type.TNumber>;
|
|
54
|
+
url: Type.TOptional<Type.TString>;
|
|
55
|
+
footer: Type.TOptional<Type.TString>;
|
|
56
|
+
image: Type.TOptional<Type.TString>;
|
|
57
|
+
thumbnail: Type.TOptional<Type.TString>;
|
|
58
|
+
fields: Type.TOptional<Type.TArray<Type.TObject<{
|
|
59
|
+
name: Type.TString;
|
|
60
|
+
value: Type.TString;
|
|
61
|
+
inline: Type.TOptional<Type.TBoolean>;
|
|
62
|
+
}>>>;
|
|
63
|
+
}>>;
|
|
64
|
+
embeds: Type.TOptional<Type.TArray<Type.TObject<{
|
|
65
|
+
title: Type.TOptional<Type.TString>;
|
|
66
|
+
description: Type.TOptional<Type.TString>;
|
|
67
|
+
color: Type.TOptional<Type.TNumber>;
|
|
68
|
+
url: Type.TOptional<Type.TString>;
|
|
69
|
+
footer: Type.TOptional<Type.TString>;
|
|
70
|
+
image: Type.TOptional<Type.TString>;
|
|
71
|
+
thumbnail: Type.TOptional<Type.TString>;
|
|
72
|
+
fields: Type.TOptional<Type.TArray<Type.TObject<{
|
|
73
|
+
name: Type.TString;
|
|
74
|
+
value: Type.TString;
|
|
75
|
+
inline: Type.TOptional<Type.TBoolean>;
|
|
76
|
+
}>>>;
|
|
77
|
+
}>>>;
|
|
78
|
+
components: Type.TOptional<Type.TArray<Type.TUnknown>>;
|
|
79
|
+
select: Type.TOptional<Type.TObject<{
|
|
80
|
+
kind: Type.TUnion<[Type.TLiteral<"string">, Type.TLiteral<"user">, Type.TLiteral<"role">, Type.TLiteral<"channel">, Type.TLiteral<"mentionable">]>;
|
|
81
|
+
customId: Type.TString;
|
|
82
|
+
placeholder: Type.TOptional<Type.TString>;
|
|
83
|
+
minValues: Type.TOptional<Type.TNumber>;
|
|
84
|
+
maxValues: Type.TOptional<Type.TNumber>;
|
|
85
|
+
options: Type.TOptional<Type.TArray<Type.TObject<{
|
|
86
|
+
label: Type.TString;
|
|
87
|
+
value: Type.TString;
|
|
88
|
+
description: Type.TOptional<Type.TString>;
|
|
89
|
+
}>>>;
|
|
90
|
+
}>>;
|
|
91
|
+
modal: Type.TOptional<Type.TObject<{
|
|
92
|
+
buttonLabel: Type.TString;
|
|
93
|
+
title: Type.TOptional<Type.TString>;
|
|
94
|
+
fields: Type.TArray<Type.TObject<{
|
|
95
|
+
id: Type.TString;
|
|
96
|
+
label: Type.TString;
|
|
97
|
+
style: Type.TOptional<Type.TUnion<[Type.TLiteral<"short">, Type.TLiteral<"paragraph">]>>;
|
|
98
|
+
required: Type.TOptional<Type.TBoolean>;
|
|
99
|
+
placeholder: Type.TOptional<Type.TString>;
|
|
100
|
+
}>>;
|
|
101
|
+
buttonStyle: Type.TOptional<Type.TNumber>;
|
|
102
|
+
}>>;
|
|
103
|
+
blocks: Type.TOptional<Type.TObject<{
|
|
104
|
+
blocks: Type.TArray<Type.TUnion<[Type.TObject<{
|
|
105
|
+
type: Type.TLiteral<"text">;
|
|
106
|
+
text: Type.TString;
|
|
107
|
+
}>, Type.TObject<{
|
|
108
|
+
type: Type.TLiteral<"section">;
|
|
109
|
+
texts: Type.TArray<Type.TString>;
|
|
110
|
+
accessory: Type.TOptional<Type.TUnion<[Type.TObject<{
|
|
111
|
+
kind: Type.TLiteral<"thumbnail">;
|
|
112
|
+
url: Type.TString;
|
|
113
|
+
}>, Type.TObject<{
|
|
114
|
+
kind: Type.TLiteral<"button">;
|
|
115
|
+
button: Type.TObject<{
|
|
116
|
+
label: Type.TString;
|
|
117
|
+
url: Type.TOptional<Type.TString>;
|
|
118
|
+
customId: Type.TOptional<Type.TString>;
|
|
119
|
+
style: Type.TOptional<Type.TNumber>;
|
|
120
|
+
}>;
|
|
121
|
+
}>]>>;
|
|
122
|
+
}>, Type.TObject<{
|
|
123
|
+
type: Type.TLiteral<"separator">;
|
|
124
|
+
divider: Type.TOptional<Type.TBoolean>;
|
|
125
|
+
spacing: Type.TOptional<Type.TUnion<[Type.TLiteral<"small">, Type.TLiteral<"large">]>>;
|
|
126
|
+
}>, Type.TObject<{
|
|
127
|
+
type: Type.TLiteral<"actions">;
|
|
128
|
+
buttons: Type.TArray<Type.TObject<{
|
|
129
|
+
label: Type.TString;
|
|
130
|
+
url: Type.TOptional<Type.TString>;
|
|
131
|
+
customId: Type.TOptional<Type.TString>;
|
|
132
|
+
style: Type.TOptional<Type.TNumber>;
|
|
133
|
+
}>>;
|
|
134
|
+
}>, Type.TObject<{
|
|
135
|
+
type: Type.TLiteral<"media-gallery">;
|
|
136
|
+
items: Type.TArray<Type.TObject<{
|
|
137
|
+
url: Type.TString;
|
|
138
|
+
description: Type.TOptional<Type.TString>;
|
|
139
|
+
spoiler: Type.TOptional<Type.TBoolean>;
|
|
140
|
+
}>>;
|
|
141
|
+
}>, Type.TObject<{
|
|
142
|
+
type: Type.TLiteral<"file">;
|
|
143
|
+
url: Type.TString;
|
|
144
|
+
spoiler: Type.TOptional<Type.TBoolean>;
|
|
145
|
+
}>]>>;
|
|
146
|
+
accentColor: Type.TOptional<Type.TNumber>;
|
|
147
|
+
}>>;
|
|
148
|
+
replyTo: Type.TOptional<Type.TString>;
|
|
149
|
+
silent: Type.TOptional<Type.TBoolean>;
|
|
150
|
+
question: Type.TOptional<Type.TString>;
|
|
151
|
+
answers: Type.TOptional<Type.TArray<Type.TString>>;
|
|
152
|
+
durationHours: Type.TOptional<Type.TNumber>;
|
|
153
|
+
allowMultiselect: Type.TOptional<Type.TBoolean>;
|
|
154
|
+
stickerIds: Type.TOptional<Type.TArray<Type.TString>>;
|
|
155
|
+
emoji: Type.TOptional<Type.TString>;
|
|
156
|
+
emojiName: Type.TOptional<Type.TString>;
|
|
157
|
+
emojiImage: Type.TOptional<Type.TString>;
|
|
158
|
+
stickerName: Type.TOptional<Type.TString>;
|
|
159
|
+
stickerDescription: Type.TOptional<Type.TString>;
|
|
160
|
+
stickerTags: Type.TOptional<Type.TString>;
|
|
161
|
+
stickerImage: Type.TOptional<Type.TString>;
|
|
162
|
+
limit: Type.TOptional<Type.TNumber>;
|
|
163
|
+
before: Type.TOptional<Type.TString>;
|
|
164
|
+
after: Type.TOptional<Type.TString>;
|
|
165
|
+
around: Type.TOptional<Type.TString>;
|
|
166
|
+
query: Type.TOptional<Type.TString>;
|
|
167
|
+
authorId: Type.TOptional<Type.TString>;
|
|
168
|
+
name: Type.TOptional<Type.TString>;
|
|
169
|
+
threadType: Type.TOptional<Type.TNumber>;
|
|
170
|
+
autoArchiveMinutes: Type.TOptional<Type.TNumber>;
|
|
171
|
+
channelType: Type.TOptional<Type.TNumber>;
|
|
172
|
+
parentId: Type.TOptional<Type.TString>;
|
|
173
|
+
topic: Type.TOptional<Type.TString>;
|
|
174
|
+
position: Type.TOptional<Type.TNumber>;
|
|
175
|
+
nsfw: Type.TOptional<Type.TBoolean>;
|
|
176
|
+
rateLimitPerUser: Type.TOptional<Type.TNumber>;
|
|
177
|
+
archived: Type.TOptional<Type.TBoolean>;
|
|
178
|
+
locked: Type.TOptional<Type.TBoolean>;
|
|
179
|
+
eventName: Type.TOptional<Type.TString>;
|
|
180
|
+
startTime: Type.TOptional<Type.TString>;
|
|
181
|
+
endTime: Type.TOptional<Type.TString>;
|
|
182
|
+
description: Type.TOptional<Type.TString>;
|
|
183
|
+
location: Type.TOptional<Type.TString>;
|
|
184
|
+
entityType: Type.TOptional<Type.TUnion<[Type.TLiteral<"stage">, Type.TLiteral<"voice">, Type.TLiteral<"external">]>>;
|
|
185
|
+
reason: Type.TOptional<Type.TString>;
|
|
186
|
+
deleteMessageDays: Type.TOptional<Type.TNumber>;
|
|
187
|
+
durationMinutes: Type.TOptional<Type.TNumber>;
|
|
188
|
+
status: Type.TOptional<Type.TUnion<[Type.TLiteral<"online">, Type.TLiteral<"idle">, Type.TLiteral<"dnd">, Type.TLiteral<"invisible">]>>;
|
|
189
|
+
activityType: Type.TOptional<Type.TUnion<[Type.TLiteral<"playing">, Type.TLiteral<"streaming">, Type.TLiteral<"listening">, Type.TLiteral<"watching">, Type.TLiteral<"custom">, Type.TLiteral<"competing">]>>;
|
|
190
|
+
activityText: Type.TOptional<Type.TString>;
|
|
191
|
+
activityUrl: Type.TOptional<Type.TString>;
|
|
192
|
+
}>;
|
|
193
|
+
interface DiscordActionResult {
|
|
194
|
+
action: string;
|
|
195
|
+
ok: boolean;
|
|
196
|
+
message: string;
|
|
197
|
+
data?: unknown;
|
|
198
|
+
}
|
|
199
|
+
/** Compact a payload so a large list result can't flood the model's context. Pure. */
|
|
200
|
+
export declare function capDiscordData(value: unknown, maxChars?: number): unknown;
|
|
201
|
+
/**
|
|
202
|
+
* Decode a `data:<mime>;base64,<payload>` URI into raw bytes + the MIME type, for
|
|
203
|
+
* the multipart sticker upload (which needs the file bytes, not a JSON image
|
|
204
|
+
* string like emoji-upload). Returns null when the input isn't a base64 data URI.
|
|
205
|
+
*/
|
|
206
|
+
export declare function decodeStickerDataUri(input: string): {
|
|
207
|
+
bytes: Uint8Array;
|
|
208
|
+
contentType: string;
|
|
209
|
+
} | null;
|
|
210
|
+
export interface MakeDiscordActionToolOptions {
|
|
211
|
+
/** Inject the resolved bot token (tests). When omitted, resolved from config per call. */
|
|
212
|
+
resolveToken?: (accountId: string) => string;
|
|
213
|
+
/** Inject fetch (tests). Defaults to global fetch in the REST helpers. */
|
|
214
|
+
fetchImpl?: typeof fetch;
|
|
215
|
+
/**
|
|
216
|
+
* Inject the config mutator (tests). Production uses `mutateConfigAtomic`.
|
|
217
|
+
* Used by `set-presence`, which persists `channels.discord.presence` so the
|
|
218
|
+
* live connection applies it on next (re)connect.
|
|
219
|
+
*/
|
|
220
|
+
mutateConfig?: (mutate: (current: BrigadeConfig) => BrigadeConfig) => Promise<BrigadeConfig>;
|
|
221
|
+
}
|
|
222
|
+
export declare function makeDiscordActionTool(opts?: MakeDiscordActionToolOptions): BrigadeTool<typeof DiscordActionParams, DiscordActionResult>;
|
|
223
|
+
export {};
|
|
224
|
+
//# sourceMappingURL=discord-action-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord-action-tool.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/discord-action-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAmD5E,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,YAAY,CAAC;AA6K/D,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsJvB,CAAC;AAEH,UAAU,mBAAmB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAOD,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAiB,GAAG,OAAO,CAcjF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUrG;AAID,MAAM,WAAW,4BAA4B;IAC5C,0FAA0F;IAC1F,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CAC7F;AA+BD,wBAAgB,qBAAqB,CACpC,IAAI,GAAE,4BAAiC,GACrC,WAAW,CAAC,OAAO,mBAAmB,EAAE,mBAAmB,CAAC,CA2gB9D"}
|