初始化仓库
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# Slack Platform Feature Inventory
|
||||
|
||||
## What Existed Before Our Work (on main)
|
||||
|
||||
The Slack platform was added in commit `eaec71f` with basic functionality:
|
||||
|
||||
- **Message handling**: Direct messages only (`*slackevents.MessageEvent`)
|
||||
- **File attachments**: Image and audio download via `downloadSlackFile()`
|
||||
- **Threading**: Reply contexts capture channel + timestamp for threaded replies
|
||||
- **Socket Mode**: Connection via `app_token` + `bot_token`
|
||||
- **Session keys**: Format `slack:channel:user`
|
||||
- **Methods**: `New()`, `Start()`, `Reply()`, `Send()`, `Stop()`, `ReconstructReplyCtx()`
|
||||
|
||||
## What We Added (feat/multi-workspace branch)
|
||||
|
||||
### 1. App Mention Support
|
||||
- Handle `@bot` mentions in channels (`AppMentionEvent`)
|
||||
- `stripAppMentionText()` helper to extract clean message text
|
||||
- Commits: `ef37f6f`, `abc46cf`, `33cf135`
|
||||
|
||||
### 2. Slash Command Support
|
||||
- Handle `socketmode.EventTypeSlashCommand` events
|
||||
- Converts Slack `/command` to engine command format
|
||||
- Enables native `/btw`, `/new`, `/stop`, etc. from Slack
|
||||
- Commits: `81c6aec`, `2bd8518`
|
||||
|
||||
### 3. Multi-Workspace / Shared Sessions
|
||||
- `share_session_in_channel` config option
|
||||
- Session key can be channel-only (`slack:channel`) or user-scoped (`slack:channel:user`)
|
||||
- `ResolveChannelName()` via `ChannelNameResolver` interface
|
||||
- Channel name caching with `sync.RWMutex`
|
||||
- Commits: `647398f`, `62def03`
|
||||
|
||||
### 4. Typing Indicator (Emoji Reactions)
|
||||
- `StartTyping()` adds progressive emoji reactions to user's message
|
||||
- Timeline: immediately eyes, after 2min clock, then every 5min random emoji
|
||||
- All reactions cleaned up when agent completes
|
||||
- Commit: `231883c`
|
||||
|
||||
### 5. Security
|
||||
- `allow_from` config option with `core.CheckAllowFrom()` validation
|
||||
- Token redaction in error messages
|
||||
- Old message filtering via `core.IsOldMessage()`
|
||||
- Commits: `ae13e23`, `90f0e22`
|
||||
|
||||
### 6. Slack mrkdwn Formatting
|
||||
- System prompt instructs agent to use Slack's mrkdwn format (not standard Markdown)
|
||||
- `*bold*` instead of `**bold**`, no `## headings`, etc.
|
||||
- Commit: `b4a1144`
|
||||
|
||||
## Uncommitted Work (stashed)
|
||||
|
||||
### Context % Fix
|
||||
- SDK reports garbage `input_tokens` (single digits like 3, 22)
|
||||
- When SDK tokens < 100, falls back to agent's self-reported `[ctx: ~XX%]`
|
||||
- Previously: self-reported value was always stripped and replaced with broken SDK value
|
||||
|
||||
### --continue on First Connection (hasConnectedOnce)
|
||||
- On first session creation after engine startup, always uses `--continue`
|
||||
- Picks up most recent CLI session regardless of what's stored in session manager
|
||||
- Bridges direct CLI usage and cc-connect sessions
|
||||
- `hasConnectedOnce` atomic.Bool prevents subsequent connections from using --continue
|
||||
|
||||
## Current Configuration Options
|
||||
|
||||
| Option | Required | Description |
|
||||
|--------|----------|-------------|
|
||||
| `bot_token` | Yes | Slack bot OAuth token |
|
||||
| `app_token` | Yes | Slack app-level token for Socket Mode |
|
||||
| `allow_from` | No | User allowlist |
|
||||
| `share_session_in_channel` | No | Share session across all users in channel |
|
||||
|
||||
## Architecture Compliance
|
||||
|
||||
All Slack-specific code lives in `platform/slack/`. Core uses interface-based capability checks:
|
||||
- `ChannelNameResolver` for channel name lookup
|
||||
- `StartTyping()` via `TypingIndicator` interface (if implemented)
|
||||
- No hardcoded "slack" references in core/
|
||||
Reference in New Issue
Block a user