| 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(web-adapter): add HTTP /api/web/* routes, web session DTO, and dual-parity test harness
- src/adapters/web: HTTP router for project files / git status / diff,
with workspace-root validation so traversal-style paths return 403
instead of leaking the host filesystem.
- src/web/client: GatewayBrowserClient + protocol/web-message helpers
used by the browser to talk to the gateway over WebSocket and HTTP.
- src/web/server: listProjects / describeProject / readSessionMessages
flattening session.transcript into stable WebMessage rows for the UI.
- tests/web-ui-* + tests/adapters/web: contract tests, dual-parity
scenarios (text stream, abort, history vs live equivalence), and
http-router/project-files/project-git tests covering the new surface.
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 天前 |