Skip to content

feat(slack): parity phase 3 — 4 more gaps closed#14

Merged
0xmrpeter merged 5 commits into
mainfrom
feat/parity-phase-3
May 25, 2026
Merged

feat(slack): parity phase 3 — 4 more gaps closed#14
0xmrpeter merged 5 commits into
mainfrom
feat/parity-phase-3

Conversation

@0xmrpeter

Copy link
Copy Markdown
Contributor

Re-opened PR (original #12 closed when base deleted).

Closed gaps

  • Attachment 50MB guard
  • Graceful degradation on missing creds
  • Skill commands msgId persistence + self-heal
  • session:configChanged inline notice

Bumps to 2026.525.3. 117 tests pass.

0xmrpeter and others added 5 commits May 25, 2026 15:35
Matches Telegram pattern at adapter.ts:1572. Without this guard, large
files fail opaquely inside files.uploadV2 — the user sees nothing and
the agent doesn't know the file never arrived.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…hrowing

Before: start() threw 'Slack adapter requires botToken, appToken, and
signingSecret' — which cascades up and brings the whole OpenACP host
down even though the user only wanted Slack disabled.

Now:
- start() logs a warning naming the missing field(s) and returns early
- stop() guards against this.app being undefined (graceful-degrade path)
- index.ts setup gate now also checks signingSecret to short-circuit
  before constructing the adapter

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
In-memory _skillCommandsTs was lost on restart, causing sendSkillCommands
to post a duplicate card instead of updating the original. Now hydrate
from platform.skillMsgTs on first call after restart, and persist back
to the session record when a new card is posted.

Mirrors Telegram's SkillCommandManager pattern at
telegram/skill-command-manager.ts:43-46, 94-98.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…notice

Telegram updates its pinned control card when model/mode/bypass changes.
Without a control card in Slack, posting a brief inline notice
('⚙️ Session settings updated — model: `X`, mode: `Y`, bypass: on')
at least surfaces the change to users who aren't reading log output.

Listener registered in start(), torn down in stop().

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
If the user deletes the skill commands card, chat.update fails with
message_not_found and the cached ts becomes a permanent error loop.
Now we delete the cached ts on failure so the next sendSkillCommands
call posts a fresh card.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@0xmrpeter 0xmrpeter merged commit fe53cc6 into main May 25, 2026
6 checks passed
@0xmrpeter 0xmrpeter deleted the feat/parity-phase-3 branch May 25, 2026 08:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant