From 202ef062187d9330eade8d307b11d566e68473f9 Mon Sep 17 00:00:00 2001 From: boggedbrush Date: Sat, 18 Apr 2026 00:44:21 -0400 Subject: [PATCH 1/2] Add slash-command swarm mode with provider-native roles --- .github/assets/swarm-enabled.png | Bin 0 -> 345980 bytes apps/server/src/codexAppServerManager.test.ts | 33 ++++ apps/server/src/codexAppServerManager.ts | 16 +- .../src/provider/Layers/ClaudeAdapter.test.ts | 51 +++++- .../src/provider/Layers/ClaudeAdapter.ts | 65 ++++++- .../src/provider/Layers/CodexAdapter.test.ts | 33 ++++ .../src/provider/Layers/CodexAdapter.ts | 17 ++ apps/server/src/provider/swarm.ts | 160 ++++++++++++++++++ apps/web/src/components/ChatView.tsx | 34 +++- .../chat/CompactComposerControlsMenu.tsx | 30 ++-- .../components/chat/ComposerCommandMenu.tsx | 2 + .../chat/ComposerPrimaryActions.test.tsx | 25 +++ .../chat/ComposerPrimaryActions.tsx | 2 +- .../components/chat/InteractionModePill.tsx | 15 ++ apps/web/src/components/chat/swarmCopy.ts | 4 + .../settings/SettingsGeneralPanel.tsx | 49 +++++- apps/web/src/composer-logic.test.ts | 4 + apps/web/src/composer-logic.ts | 5 +- apps/web/src/composerDraftStore.test.ts | 4 +- apps/web/src/composerDraftStore.ts | 3 + apps/web/src/modeColors.ts | 1 + apps/web/src/modelSelection.ts | 2 + packages/contracts/src/orchestration.ts | 1 + packages/contracts/src/settings.ts | 5 + 24 files changed, 530 insertions(+), 31 deletions(-) create mode 100644 .github/assets/swarm-enabled.png create mode 100644 apps/server/src/provider/swarm.ts create mode 100644 apps/web/src/components/chat/swarmCopy.ts diff --git a/.github/assets/swarm-enabled.png b/.github/assets/swarm-enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8c1b22007dcff5cc47bc5512cab17e52afb670 GIT binary patch literal 345980 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