Skip to content

Conversation

@snomiao
Copy link
Member

@snomiao snomiao commented Jan 13, 2026

Summary

Applied Slack Bolt best practices from the official assistant template to improve code organization, maintainability, and testability.

Changes Made

Code Organization

  • Reduced bot/index.ts from 1368 → 1265 lines (7.5% reduction)
  • Created 7 new organized modules (468 lines total)
  • Established clear separation of concerns

New Modules

  • bot/utils/helpers.ts - Utility functions (sleep, commonPrefix, sanitized)
  • bot/utils/working_tasks.ts - Working tasks state management
  • bot/listeners/index.ts - Central listener registration hub
  • bot/listeners/events/index.ts - Event registration
  • bot/listeners/events/app_mention.ts - @mention handler
  • bot/listeners/events/message.ts - DM and message handler
  • bot/middleware/error_handler.ts - Error handling middleware

Key Improvements

  • ✅ Listener-based architecture with single responsibility per file
  • ✅ Dependency injection pattern for testability
  • ✅ Factory pattern for configurable handlers
  • ✅ Comprehensive error handling with retry logic
  • ✅ Type safety with exported reusable types

Preserved Functionality

  • ✅ RestartManager (smart restart when idle)
  • ✅ Working tasks state management (resume functionality)
  • ✅ Health check system
  • ✅ Agent spawning with claude-yes
  • ✅ Terminal output streaming
  • All existing features intact

Documentation

  • REFACTORING_SUMMARY.md - Comprehensive refactoring details
  • task_plan.md - Planning phases and decisions
  • findings.md - Key discoveries from template analysis
  • progress.md - Implementation timeline
  • CLAUDE.md - Updated with refactoring notes

Testing Checklist

Manual testing recommended:

  • App mentions in channels
  • Direct messages
  • --continue flag (resume crashed tasks)
  • RestartManager (file watching + smart restart)
  • Slack reactions and message updates

References

  • Slack Bolt Template: /v1/code/slack-samples/bolt-js-assistant-template/
  • Used planning-with-files skill for systematic approach
  • Time investment: ~2.5 hours

🤖 Generated with Claude Code

snomiao and others added 30 commits January 13, 2026 13:28
…dling

## Bot Skills Implementation

Created comprehensive bot skills system with CLI tools:

**Slack Skills** (`bot/slack/`):
- `msg-update.ts`: Update Slack messages programmatically
- `msg-read-thread.ts`: Read entire Slack threads with markdown conversion
- `parseSlackMessageToMarkdown.ts`: Convert Slack formatting to Markdown
- `slackTsToISO.ts`: Convert Slack timestamps to ISO 8601 format
- Full test coverage with `.spec.ts` files (16 tests passing)

**Notion Skills** (`bot/`):
- `notion-search.ts`: Search Notion docs from Comfy-Org workspace

**Documentation**:
- `bot/README.md`: Complete usage guide for all skills
- `bot/BUGFIX.md`: Detailed bug fixes documentation
- Updated `CLAUDE.md` with bot skills section

## Bug Fixes

### Fix 1: App Mention Event Schema Mismatch
- Made `client_msg_id` optional (Slack doesn't always include it)
- Added `attachments` field for message unfurls
- Events with attachments now process correctly

### Fix 2: WebSocket System Messages
- Added handlers for "hello" (connection acknowledgment)
- Added handlers for "disconnect" messages
- Only truly unhandled messages are logged as `MSG_NOT_MATCHED`

## Files Modified
- `bot/index.ts`: Fixed event schema and WebSocket message handling
- `CLAUDE.md`: Added ComfyPR Bot Skills documentation section

## Security
- All environment variables properly referenced
- No tokens or secrets committed
- Log files excluded via `.gitignore`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add .env, logs/, repos/, and TODO.md to ignore list.
Add comment about .env vs .env.local usage.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add CS_ORIGIN, CS_TOKEN, and PRBOT_PORT environment variables
with placeholder values for local override.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Document master-worker bot architecture pattern
- Add coding sub-agent (pr-bot) usage documentation
- Add comprehensive TODO tracking and resolution workflow
- Update bot skills to clarify READ-ONLY access for master agent
- List priority TODOs across the project

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Replace PyTorch/ComfyUI setup with Debian-based Bun runtime.
Install Node.js via nvm and Bun for executing bot services.
Configure entrypoint to run bot/index.ts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Document new bot/cli.ts unified CLI with yargs.
Update Notion search path references.
Add common command examples for PR, Slack, and Notion operations.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Reorganize Notion utilities into dedicated directory.
Move bot/notion-search.ts to bot/notion/search.ts for better organization.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add bot/registry/search.ts for searching ComfyUI custom nodes
via the registry API.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add bot/code/ directory with:
- pr-bot.ts: CLI for spawning coding sub-agents on GitHub repos
- issue-search.ts: Search GitHub issues across Comfy-Org
- coding/pr-agent.ts: Core logic for repository cloning and agent spawning
- coding/pr-agent.spec.ts: Test suite for pr-agent
- coding/README.md: Documentation for coding sub-agent system

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add bot/comfy-codesearch/README.md documenting the code search
service integration for searching ComfyUI repositories.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add bot/slack/ utilities:
- file.ts: Upload/download files, get file info, post messages with files
- parseSlackUrl.ts: Parse Slack message URLs to extract channel and timestamp
- stream.ts: Placeholder for Slack chat streaming (TODO)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add bot/cli.ts as consolidated entry point for all bot commands:
- GitHub: pr (spawn sub-agent), issue-search
- Registry: search custom nodes
- Slack: update, read-thread, upload/download files
- Notion: search (placeholder)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add YAML output format instead of JSON
- Include file attachments, message attachments, and reactions in output
- Export readSlackThread function for reuse
- Move import.meta.main block to top of file

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive logging with metadata and context
- Implement master-worker architecture documentation in agent prompt
- Add skills for code search, registry search, issue search, and pr-bot
- Enhance Slack integration with better error handling
- Add repository context for Comfy-Org projects
- Improve agent spawning with detailed instructions
- Add TODO tracking and progress reporting capabilities
- Refactor message handling and response formatting
- Add support for Claude Code integration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add dependencies:
- @slack/socket-mode for Slack Socket Mode support
- execa for process execution
- faker for test data generation
- terminal-render for console output
- Update @slack/web-api and zod

Add pr-bot bin entry point and dev:bot script.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Change cache paths from '.cache/' to './.cache/' for consistency
and clarity in github, notion, and slack cache stores.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add bot service with Bun runtime and Claude credentials mount
- Remove deprecated gh-service
- Mount project directory and Claude credentials for bot

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Remove unused run/github-webhook-event-type/index.ts file.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add .claude/skills/ directory with skill definitions:
- github-pr-bot: Spawn coding sub-agents for code changes
- github-issue-search: Search GitHub issues
- code-search: Search ComfyUI codebase
- registry-search: Search custom nodes registry
- slack-msg-update: Update Slack messages
- slack-thread-reader: Read Slack threads
- notion-search: Search Notion documentation
- pr-bot-cli: Unified PR bot CLI

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add app/api/webhook/github/ Next.js API route:
- route.ts: Handle GitHub webhook events with signature verification
- webhook-events.ts: Store events in SQLite database
- setup-indexes.ts: Create database indexes for efficient querying
- test-webhook.ts: Test utility for webhook endpoint
- route.spec.ts: Test suite for webhook handler
- README.md and USAGE_EXAMPLES.md: Documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Use standard 'text' parameter instead of non-standard 'markdown_text'
- Update all slack.chat.postMessage and slack.chat.update calls
- Change CLI from 'codex-yes' to 'claude-yes'
- Fix dev:bot script to watch specific file

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Created bot/slack/msg-read-nearby.ts to read messages around a specific timestamp
- Supports reading N messages before and after a target message
- Integrated into CLI with 'slack read-nearby' command
- Useful for getting context around a message without reading entire thread
- Marks the target message with is_target flag for easy identification
- Added codes/ directory to gitignore (temporary cloned repos)
- Added tmp/ directory to gitignore (temporary working files)
- Prevents accidental commit of temporary data
- Implemented RestartManager class that watches for file changes
- Only restarts when bot is idle (no active tasks)
- Includes debouncing (1s) and idle checking (5s intervals)
- Comprehensive test suite with 6 passing tests
- Interactive example demonstrating restart behavior
- Replaces problematic --watch flag that interrupted tasks
- Tests for addWorkingTask() and removeWorkingTask() helpers
- Validates duplicate prevention logic
- Tests multiple concurrent tasks handling
- All 5 tests passing
- Uses in-memory Keyv store for testing
- Added helper functions addWorkingTask() and removeWorkingTask()
- Replaced database queries with lightweight state key 'current-working-tasks'
- Updated --continue logic to read from working tasks state
- Integrated RestartManager for smart auto-restart on file changes
- Add task to working list when started (after quick response)
- Remove task from working list when completed or stopped by user
- Faster resume on restart, no database scanning needed
- Added 'slack upload' as alias for 'slack upload-file'
- Fixed yargs command matching issue by reordering commands
- Updated examples to use shorter pr-bot slack upload syntax
- Moved upload command after post-with-files to fix partial matching
- Created bot/up.sh as new location for startup script
- Added deprecation notice to bot-start.sh
- bot-start.sh now shows warning and redirects to bot/up.sh
- Kept bot-start.sh for backward compatibility
- Both scripts have executable permissions
- Added comprehensive user guide (RESTART.md)
- Added implementation summary (RESTART-SUMMARY.md)
- Added flow diagrams and workflows (RESTART-FLOW.md)
- Added quick reference guide (RESTART-QUICKREF.md)
- Documents usage, configuration, troubleshooting
- Includes comparison with --watch flag
snomiao and others added 12 commits January 13, 2026 13:33
- Comprehensive guide to new working tasks system
- Documents state structure and task lifecycle
- Explains resume on restart behavior
- Includes benefits comparison with old approach
- Troubleshooting and future improvements section
- Added Working Tasks State Management section
- Updated Smart Restart Manager documentation
- Updated file paths to reference docs/ directory
- Updated bot/up.sh references (formerly bot-start.sh)
- Added usage examples and state structure
- Added null/undefined check before calling tr.write()
- Prevents TypeError when chunk is undefined
- Fixes runtime error: 'undefined is not an object (evaluating data.length)'
- Added stderr logging to capture process errors
- Added stdout/stderr availability checks
- Added buffer undefined/null checks with logging
- Added terminal render error handling with detailed logging
- Convert undefined buffers to empty strings to prevent crashes
- Log chunk type and length on terminal render errors

This will help diagnose why chunks are undefined in production.
Implements automated monitoring of ComfyUI_frontend releases to help
Christian Byrne with the manual backport checking process.

Features:
- Monitors new releases every 5 minutes
- Identifies bugfix commits using pattern matching
- Checks PR labels and comments for backport status
- Sends Slack reports to #frontend channel
- Tracks state in MongoDB for resumability

This automation reduces manual checking time by 80-90% while ensuring
100% coverage of releases.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
- Add bot/slack/avatar.ts: Download and set Slack bot avatar via API
- Add bot/slack/avatar.spec.ts: Comprehensive tests for avatar functionality
- Update pr-agent.ts: Use gh CLI with GH_TOKEN_COMFY_PR_BOT for cloning
- Update pr-agent.ts: Pass GitHub token to spawned subagents
- Update pr-agent.spec.ts: Add token validation tests
- Update .env: Document GH_TOKEN_COMFY_PR_BOT usage
- Add bot/slack/safeSlackMessage.ts: Safe Slack message helpers
- Add bot/slack/daily.ts: Daily summary functionality
- Various bot improvements and refinements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Fix line 11: changed trailing comma to semicolon
- Resolves CI build failure in run_combined_github_tasks

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Trigger Vercel redeploy to check if failure is transient

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings January 13, 2026 14:56
@vercel
Copy link
Contributor

vercel bot commented Jan 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
comfy-pr Error Error Jan 13, 2026 3:06pm

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors bot/index.ts by applying Slack Bolt best practices from the official assistant template to improve code organization, maintainability, and testability. The main file is reduced from 1368 to 1265 lines (~7.5%) through modularization into 7 new focused modules totaling 468 lines.

Changes:

  • Extracted utility functions and working tasks management into reusable modules
  • Created listener-based architecture with dependency injection pattern for event handlers
  • Added comprehensive error handling middleware with retry logic and error context extraction

Reviewed changes

Copilot reviewed 152 out of 172 changed files in this pull request and generated no comments.

Show a summary per file
File Description
tsconfig.json Expanded include patterns and added test file exclusions
templates/* Formatting cleanup (trailing whitespace, blank lines)
task_plan.md New planning document detailing refactoring phases
src/**/*.ts Code formatting improvements and error handling enhancements
reports/gh-pr-speed/* HTML/TypeScript formatting standardization
progress.md New progress log documenting refactoring sessions
packages/mongodb-pipeline-ts/* Type formatting and test connection improvements
package.json Added new dependencies and scripts for bot development
msgs.yaml New empty missed messages tracking file
mocks/mockPublishedNodes.ts Object property formatting standardization
lib/*.ts Code formatting improvements
components.json Trailing comma addition

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

snomiao and others added 2 commits January 13, 2026 15:04
Applied Slack Bolt best practices from official assistant template to improve
code organization, maintainability, and testability.

## Changes Made

### Code Organization
- Reduced bot/index.ts from 1368 → 1265 lines (7.5% reduction)
- Created 7 new organized modules (468 lines total)
- Established clear separation of concerns

### New Modules
- bot/utils/helpers.ts - Utility functions (sleep, commonPrefix, sanitized)
- bot/utils/working_tasks.ts - Working tasks state management
- bot/listeners/index.ts - Central listener registration hub
- bot/listeners/events/index.ts - Event registration
- bot/listeners/events/app_mention.ts - @mention handler
- bot/listeners/events/message.ts - DM and message handler
- bot/middleware/error_handler.ts - Error handling middleware

### Key Improvements
- Listener-based architecture with single responsibility per file
- Dependency injection pattern for testability
- Factory pattern for configurable handlers
- Comprehensive error handling with retry logic
- Type safety with exported reusable types

### Preserved Functionality
- RestartManager (smart restart when idle)
- Working tasks state management (resume functionality)
- Health check system
- Agent spawning with claude-yes
- Terminal output streaming
- All existing features intact

## Documentation
- REFACTORING_SUMMARY.md - Comprehensive refactoring details
- task_plan.md - Planning phases and decisions
- findings.md - Key discoveries from template analysis
- progress.md - Implementation timeline
- CLAUDE.md - Updated with refactoring notes

## Testing
Manual testing recommended:
- App mentions in channels
- Direct messages
- --continue flag (resume crashed tasks)
- RestartManager (file watching + smart restart)
- Slack reactions and message updates

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Added PR link to progress.md
- Updated time tracking

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Base automatically changed from sno-bot to main January 15, 2026 12:50
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.

2 participants