| feat: add PilotDeck support to onboarding and authentication flows
- Updated cliProviders to include 'pilotdeck'.
- Added PilotDeck provider details in AgentConnectionsStep.
- Extended CliProvider type to include 'pilotdeck'.
- Implemented PilotDeck specific command and title in ProviderLoginModal.
| 6 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| refactor: rename Polit/PolitDeck to Pilot/PilotDeck across entire codebase
Automated global rename covering all case variants:
- PolitDeck → PilotDeck, politdeck → pilotdeck, POLITDECK → PILOTDECK
- Polit → Pilot, polit → pilot, POLIT → PILOT, politDeck → pilotDeck
Includes:
- 648 content replacements across 200+ source files
- 24 file renames + 3 directory renames (src/polit→pilot, tests/polit→pilot, docs/polit-config→pilot-config)
- package.json name, bin, env vars updated
- package-lock.json regenerated
- "Politely" in server-manager.ts preserved via placeholder mechanism
- All 587 unit tests pass, tsc --noEmit clean
- E2E tests verified against real OpenRouter API (model, tool-use, context, lifecycle hooks)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 24 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| refactor: rename Polit/PolitDeck to Pilot/PilotDeck across entire codebase
Automated global rename covering all case variants:
- PolitDeck → PilotDeck, politdeck → pilotdeck, POLITDECK → PILOTDECK
- Polit → Pilot, polit → pilot, POLIT → PILOT, politDeck → pilotDeck
Includes:
- 648 content replacements across 200+ source files
- 24 file renames + 3 directory renames (src/polit→pilot, tests/polit→pilot, docs/polit-config→pilot-config)
- package.json name, bin, env vars updated
- package-lock.json regenerated
- "Politely" in server-manager.ts preserved via placeholder mechanism
- All 587 unit tests pass, tsc --noEmit clean
- E2E tests verified against real OpenRouter API (model, tool-use, context, lifecycle hooks)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 24 天前 |
| feat(channel): add QQ Bot channel adapter
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| chore(branding): complete cleanup of legacy CloudCLI/Claude Code references
- CLOUDCLI_DISABLE_LOCAL_AUTH → PILOTDECK_DISABLE_LOCAL_AUTH
- CLOUDCLI_CRON_DAEMON_* → PILOTDECK_CRON_DAEMON_*
- CLOUDCLI_GITHUB_STARS → PILOTDECK_GITHUB_STARS
- ~/.claude-code-ui/plugins/ → ~/.pilotdeck/plugins/
- claudecodeui-server → pilotdeck-server
- edgeClawConfig i18n key → pilotDeckConfig (248 refs in TSX + settings.json)
- claude-code-main source provenance comments → generic descriptions
- CloudCLI user-facing strings → PilotDeck
- DEFAULT_PROVIDER_FALLBACK "edgeclaw" → "pilotdeck"
- .claude/ config home → .pilotdeck/ in cron daemon services
Co-authored-by: Cursor <cursoragent@cursor.com>
| 9 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(weixin): add Weixin channel integration
- Introduced WeixinChannel and WeixinSessionMapper for handling Weixin messaging.
- Implemented mock server for testing Weixin interactions.
- Added Weixin event rendering logic.
- Updated package.json and package-lock.json to include weixin-ilink dependency.
- Created tests for Weixin channel functionality.
This commit enhances the messaging capabilities by integrating Weixin support, allowing for better interaction with Weixin users.
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |
| feat(channel): refactor platforms into per-channel folders + Feishu stream mode
Migrate all 16 legacy platform adapters from BasePlatformAdapter to the
ChannelAdapter pattern, one folder per channel (matching feishu/weixin layout).
Each new folder contains <Name>Channel.ts, <Name>SessionMapper.ts, and
<name>-render.ts; transport SDKs are imported lazily so they remain optional.
Telegram, Discord, Slack, Matrix, Mattermost, Signal, WhatsApp, BlueBubbles,
DingTalk, WeCom, WeCom Callback, Email, SMS, HomeAssistant, ApiServer, Webhook
all flow through gateway.submitTurn() and render GatewayEvents back to the
platform via their existing transport.
FeishuChannel gains:
- Lark Open API outbound (tenant_access_token cache + im/v1/messages)
- WSClient stream mode (default) — no public URL needed, mirrors weixin-ilink
- Webhook fallback with url_verification, encryptKey AES-256-CBC, verifyToken
- Event dedupe by event_id (LRU 2000)
- Per-chat concurrency guard
Config wiring:
- adapters.feishu now reads appId/appSecret/connectionMode/domainName
- adapters.weixin gated by enabled: true (no more unconditional QR login)
- New PilotPlatformAdapterConfig schema for the 16 platform channels
- loadEnabledChannels(adapters) lazily instantiates the matching channel
- pilotdeckServer.ts threads PilotConfig into channel.start({ config })
Drop the entire src/adapters/channel/platforms/ subtree.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 8 天前 |