feat: SourceAdapter pattern + SourceRegistry (#1)#8
Conversation
- Merged inbox decisions from Kima, Bunk, Omar, Freamon into decisions.md - Created orchestration logs for each agent session - Updated all agent history files with cross-agent findings - Documented signal completeness analysis (32% → 82% with full implementation) - Recorded community source gap analysis and Phase 1/2/3 roadmap - Established SourceAdapter pattern recommendation for architecture scaling Key outcomes: - Current signal completeness: 32% (RSS + GitHub) - Phase 1 target: 50% (add Reddit, Dev.to, Stack Overflow) - Phase 2 target: 65% (add YouTube) - Phase 3 target: 82% (add social, podcasts, conferences) Deleted merged inbox files. Squad consensus: refactor first, then Phase 1. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Refactor discovery layer from monolithic content.ts/community.ts into pluggable adapter pattern: - SourceAdapter interface (inspired by Squad SDK SkillSource pattern) - SourceRegistry with parallel execution via Promise.allSettled() - RSSSourceAdapter extracted from content.ts - GitHubSourceAdapter extracted from community.ts - Shared helpers consolidated (generateCanonicalId, keywords, etc.) - Graceful degradation: failed adapters logged, others continue New adapters can be added by implementing SourceAdapter and registering with the registry — no changes to orchestrator needed. Closes #1 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
✅ LGTM from Stringer — SDK Pattern Compliance ReviewI wrote the architectural design for this refactor (stringer-issue1-sdk-design.md). This implementation is a faithful execution of that design. Checklist — All Passing
Minor Deviation — AcceptableMy design spec included an AdapterError class mirroring Squad SDK ErrorFactory.wrap(). The implementation uses plain Error objects instead. This is the right call — the registry already provides error isolation via RegistryResult.errors. Custom error class is over-engineering at this stage. Architecture Notes
Verdict: APPROVE. Ship it. 🚢 |
…ast to Channel type Code review fixes: - Remove redundant try-catch inside discoverAll(), let Promise.allSettled handle error isolation properly (was double-wrapping) - Use index-based iteration for settled results (cleaner, safer) - Add 'rss', 'stackoverflow', 'podcast' to Channel type union Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Project Plan fi Requirements |
Summary
Implements Issue #1: Architecture Refactor — SourceAdapter Pattern + SourceRegistry
Changes
Refactored the discovery layer from monolithic \content.ts/\community.ts\ into a pluggable adapter pattern inspired by Squad SDK's SkillSource pattern:
New Files
Modified Files
Architecture
ame, \displayName, \channel, \�alidate(), \discover(state)\
Testing
✅ TypeScript builds with zero errors (strict mode)
✅ Application runs successfully
✅ Same output: 9 report files generated in AspireContentEngine/
✅ 127 unique items discovered (RSS + GitHub)
✅ Graceful degradation: GitHub warning logged when GITHUB_TOKEN not set
Extensibility
New discovery sources can be added by:
Closes #1