## 🎯 目标 打通 Feed/Chatter API 从协议到 Client SDK 的"最后一公里"。Schema、Contract、Service 均已完成,缺少 Route Handler 和 Client SDK 接入。 ## 📊 当前状态 | 层级 | 文件 | 状态 | |------|------|------| | Schema | `spec/src/data/feed.zod.ts` | ✅ | | API Protocol | `spec/src/api/feed-api.zod.ts` (14 个端点) | ✅ | | Contract | `spec/src/contracts/feed-service.ts` (`IFeedService`) | ✅ | | Service Impl | `services/service-feed/InMemoryFeedAdapter` (40+ tests) | ✅ | | **Route Handler** | `objectql/protocol.ts` → Feed 方法 | 🔴 缺失 | | **Client SDK** | `client.feed.*` namespace | 🔴 缺失 | ## 📋 Tasks ### 1. Route Handler (`packages/objectql`) 在 `ObjectStackProtocolImplementation` 中新增 14 个 Feed 方法,对应 `FeedApiContracts`: - [ ] `listFeed` → `GET /api/data/:object/:recordId/feed` - [ ] `createFeedItem` → `POST /api/data/:object/:recordId/feed` - [ ] `updateFeedItem` → `PUT /api/data/:object/:recordId/feed/:feedId` - [ ] `deleteFeedItem` → `DELETE /api/data/:object/:recordId/feed/:feedId` - [ ] `addReaction` → `POST /api/data/:object/:recordId/feed/:feedId/reactions` - [ ] `removeReaction` → `DELETE /api/data/:object/:recordId/feed/:feedId/reactions/:emoji` - [ ] `pinFeedItem` / `unpinFeedItem` → Pin/Unpin endpoints - [ ] `starFeedItem` / `unstarFeedItem` → Star/Unstar endpoints - [ ] `searchFeed` → `GET /api/data/:object/:recordId/feed/search` - [ ] `getChangelog` → `GET /api/data/:object/:recordId/changelog` - [ ] `subscribe` / `unsubscribe` → Record subscription endpoints ### 2. Client SDK (`packages/client`) - [ ] 在 `ObjectStackClient` 中新增 `feed` namespace,包含 14 个方法 - [ ] 在 `getRoute()` 中新增 `feed` 路由类型(使用 `/api/data` 子路径模式) - [ ] 新增 `client.feed.*` 的类型导出 - [ ] 编写 MSW 测试验证 Client ↔ Server 集成 ### 3. Discovery 增强 - [ ] 在 `getDiscovery()` 返回的 `services` 中新增 `feed` service 状态 - [ ] 在 `capabilities` 中新增 `feed: true` 和 `comments: true` ### 4. 测试 - [ ] Route handler 单元测试 - [ ] Client SDK MSW 集成测试 - [ ] 验证 `FeedApiContracts` 的 input/output schema 与实际请求/响应一致 ## 🔗 关联 - 阻塞 ObjectUI Roadmap P1.5(Comments & Collaboration) - 参考: `FeedApiContracts` in `packages/spec/src/api/feed-api.zod.ts` - 参考: `InMemoryFeedAdapter` in `packages/services/service-feed/` - Parent: objectstack-ai/spec#753
🎯 目标
打通 Feed/Chatter API 从协议到 Client SDK 的"最后一公里"。Schema、Contract、Service 均已完成,缺少 Route Handler 和 Client SDK 接入。
📊 当前状态
spec/src/data/feed.zod.tsspec/src/api/feed-api.zod.ts(14 个端点)spec/src/contracts/feed-service.ts(IFeedService)services/service-feed/InMemoryFeedAdapter(40+ tests)objectql/protocol.ts→ Feed 方法client.feed.*namespace📋 Tasks
1. Route Handler (
packages/objectql)在
ObjectStackProtocolImplementation中新增 14 个 Feed 方法,对应FeedApiContracts:listFeed→GET /api/data/:object/:recordId/feedcreateFeedItem→POST /api/data/:object/:recordId/feedupdateFeedItem→PUT /api/data/:object/:recordId/feed/:feedIddeleteFeedItem→DELETE /api/data/:object/:recordId/feed/:feedIdaddReaction→POST /api/data/:object/:recordId/feed/:feedId/reactionsremoveReaction→DELETE /api/data/:object/:recordId/feed/:feedId/reactions/:emojipinFeedItem/unpinFeedItem→ Pin/Unpin endpointsstarFeedItem/unstarFeedItem→ Star/Unstar endpointssearchFeed→GET /api/data/:object/:recordId/feed/searchgetChangelog→GET /api/data/:object/:recordId/changelogsubscribe/unsubscribe→ Record subscription endpoints2. Client SDK (
packages/client)ObjectStackClient中新增feednamespace,包含 14 个方法getRoute()中新增feed路由类型(使用/api/data子路径模式)client.feed.*的类型导出3. Discovery 增强
getDiscovery()返回的services中新增feedservice 状态capabilities中新增feed: true和comments: true4. 测试
FeedApiContracts的 input/output schema 与实际请求/响应一致🔗 关联
FeedApiContractsinpackages/spec/src/api/feed-api.zod.tsInMemoryFeedAdapterinpackages/services/service-feed/