- Create api.proto with PluginAPI service definition covering all 236
methods from server/public/plugin/api.go
- Create api_user_team.proto with User, Session, and Team request/response
messages with placeholder fields
- Create api_channel_post.proto with Channel, Post, and Emoji messages
- Create api_kv_config.proto with KV store, config, plugin, and logging
messages
- Create api_file_bot.proto with File, Upload, and Bot messages
- Create api_remaining.proto with Server, Command, Preference, OAuth,
Group, SharedChannel, Property, and Audit messages
- Add ViewUsersRestrictions to common.proto
- Add apiverify tool that parses Go API interface and proto service
to ensure parity
- Update Makefile with new proto file mappings
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add RequestContext message for request metadata (plugin_id, request_id,
session_id, user_id) to enable logging correlation across Go/Python
- Add params field (google.protobuf.Struct) to AppError for error message
interpolation, matching model.AppError's params field
- Document RPC envelope conventions in proto comments:
- Request messages: {Method}Request with RequestContext as field 1
- Response messages: {Method}Response with AppError as field 1
- Error strategy: Response-embedded AppError (Option B) for full
semantic preservation, gRPC status reserved for transport errors
- Regenerate Go code with new types
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add common.proto with Empty, StringMap, and AppError messages
- Add user.proto with User message (34 fields mirroring model.User)
- Add channel.proto with Channel, ChannelType enum, ChannelBannerInfo
- Add post.proto with Post, PostMetadata, PostEmbed, PostPriority, Reaction
- Add team.proto with Team, TeamMember, TeamUnread, TeamType enum
- Add file.proto with FileInfo, FileUploadResponse, FileData
- Update Makefile to support all proto files with proper import mappings
- Remove bootstrap.proto (replaced by common.proto)
- Use google.protobuf.Struct for dynamic JSON fields (Post.props, Channel.props)
- All timestamps are int64 (milliseconds since epoch)
- All IDs are strings (26-char base32)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>