Skip to content
This repository was archived by the owner on Mar 31, 2026. It is now read-only.

Deploy/godgpt dev - #1507

Closed
louis4li wants to merge 425 commits into
feature/godgpt-mainfrom
deploy/godgpt-dev
Closed

louis4li wants to merge 425 commits into
feature/godgpt-mainfrom
deploy/godgpt-dev

Conversation

@louis4li

Copy link
Copy Markdown
Collaborator

No description provided.

ayannch and others added 30 commits August 26, 2025 20:55
- Update all GetGrain calls to use DailyPushConstants.TimezoneToGuid()
- Add InitializeAsync() calls to ensure timezone GAgents are properly initialized
- Pass intervalSeconds parameter to StartTestModeAsync as intended
- Ensures compatibility with new GUID-based timezone GAgent architecture

This works in conjunction with godgpt changes to resolve CQRS projection issues.
…evices

Instead of returning error when device not found in /api/push/device/{deviceId},
now returns empty device object with pushEnabled=true by default.

This simplifies frontend logic by providing consistent response format
and enables push notifications for new devices by default.
# Conflicts:
#	station/src/Aevatar.HttpApi/Controllers/AccountController.cs
# Conflicts:
#	Directory.Packages.props
#	station/src/Aevatar.HttpApi/Controllers/GodGPTController.cs
- Add null/empty timezone validation in GetTestStatus controller method
- Default to 'Asia/Shanghai' if timezone parameter is empty
- Prevents timezone validation errors when frontend sends empty values

This complements the godgpt timezone mapping fixes.
Features added:
- New HTTP endpoint GET /api/push/test/devices for debugging timezone device issues
- TimezoneDeviceInfo DTO in contracts
- GetDevicesInTimezoneAsync method in DailyPushService
- Enhanced device debugging capabilities for troubleshooting push delivery

This provides detailed device information to help debug the '4 users but only 1 with deviceId' issue.
kaiwenzhengaelf and others added 29 commits November 28, 2025 18:48
- Add ExportModels.cs with DTOs for export tasks
- Add IStateExportService interface for state export operations
- Add StateExportService implementation with MongoDB export logic
- Add StateExportController with async export endpoints
- Register StateExportService in AevatarHttpApiAdminModule

API Endpoints:
- POST /api/admin/export/start - Start export task
- GET /api/admin/export/status/{taskId} - Query task status
- GET /api/admin/export/download/{taskId} - Download export data
- GET /api/admin/export/types - List available state types
- Remove complex async task management (Redis/MongoDB storage)
- Add streaming export: GET /api/admin/export/stream
- Add direct export: GET /api/admin/export/all
- No storage needed - data streams directly to response
- Multi-Pod friendly - no shared state required
- Periodic flush keeps HTTP connection alive
- Replace streaming with pagination approach
- GET /summary - get total counts per type first
- GET /page?collection=xxx&skip=0&limit=1000 - fetch in batches
- Each request is short (<5s), no timeout risk
- Client loops until hasMore=false
- Remove unused IStateExportService interface
- Add StateExportGrain in Silo for proper Orleans State deserialization
- Add State Export API endpoints (collections, grain export)
- Support all Agent types via HybridGrainStateSerializer
- Add pagination support for large datasets
- Add start/stop scripts with MongoDB port-forward support
- Add comprehensive usage documentation

Features:
- Automatic State type discovery from collection names
- Production-ready pagination (no timeout issues)
- Detailed logging for debugging
- Support for all Orleans-serialized State types

Configuration:
- StateExport section in appsettings.json for MongoDB connection
- Supports readPreference for replica set read optimization
- Add ExportModels.cs with DTOs for export tasks
- Add IStateExportService interface for state export operations
- Add StateExportService implementation with MongoDB export logic
- Add StateExportController with async export endpoints
- Register StateExportService in AevatarHttpApiAdminModule

API Endpoints:
- POST /api/admin/export/start - Start export task
- GET /api/admin/export/status/{taskId} - Query task status
- GET /api/admin/export/download/{taskId} - Download export data
- GET /api/admin/export/types - List available state types
- Remove complex async task management (Redis/MongoDB storage)
- Add streaming export: GET /api/admin/export/stream
- Add direct export: GET /api/admin/export/all
- No storage needed - data streams directly to response
- Multi-Pod friendly - no shared state required
- Periodic flush keeps HTTP connection alive
- Replace streaming with pagination approach
- GET /summary - get total counts per type first
- GET /page?collection=xxx&skip=0&limit=1000 - fetch in batches
- Each request is short (<5s), no timeout risk
- Client loops until hasMore=false
- Remove unused IStateExportService interface
- Add StateExportGrain in Silo for proper Orleans State deserialization
- Add State Export API endpoints (collections, grain export)
- Support all Agent types via HybridGrainStateSerializer
- Add pagination support for large datasets
- Add start/stop scripts with MongoDB port-forward support
- Add comprehensive usage documentation

Features:
- Automatic State type discovery from collection names
- Production-ready pagination (no timeout issues)
- Detailed logging for debugging
- Support for all Orleans-serialized State types

Configuration:
- StateExport section in appsettings.json for MongoDB connection
- Supports readPreference for replica set read optimization
- Move StateExportController, StateExportService, and ExportModels from HttpApi.Admin to HttpApi module
- Update namespaces: Aevatar.Admin.* -> Aevatar.*
- Keep route unchanged: /api/admin/export
- Register StateExportService in AevatarHttpApiModule
- Remove StateExportService registration from AevatarHttpApiAdminModule
- This allows Developer Host to integrate State Export API functionality
- Move StateExportController, StateExportService, and ExportModels from HttpApi.Admin to HttpApi module
- Update namespaces: Aevatar.Admin.* -> Aevatar.*
- Keep route unchanged: /api/admin/export
- Register StateExportService in AevatarHttpApiModule
- Remove StateExportService registration from AevatarHttpApiAdminModule
- This allows Developer Host to integrate State Export API functionality
- 将GodGPT.GAgents和GodGPT.Webhook版本统一为1.32.8-hotfix-testnet-2
- 修复GodGPTService中RecordAppRatingAsync缺少currentUserId参数的错误
- 修复GodGPTService中GetPaymentHistoryAsync的PaymentSummary类型转换
- 修复DailyPushService中7个方法调用错误(这些方法在1.32.8-hotfix-testnet-2中不存在):
  * RegisterOrUpdateDeviceAsync
  * StartTestModeAsync
  * StopTestModeAsync
  * GetTestStatusAsync
  * GetAllUserDevicesAsync
  * SendInstantPushAsync
  * ClearReadStatusAsync
- 这些方法已改为抛出NotImplementedException,等待包更新后恢复
- 当GeoIP文件存在时注册IpLocationService
- 当GeoIP文件不存在时注册NullIpLocationService作为fallback
- 添加NullIpLocationService实现类
- 更新StateExportGrain支持Orleansgodgptprod前缀的collection
- 修复MongoDB多主机连接字符串配置(移除directConnection参数)
- 更新ExtractTypeName方法以正确提取Orleansgodgptprod前缀的类型名
- 支持Orleansgodgptprod前缀的collection导出
- 修复MongoDB多主机连接字符串配置
- 解决合并冲突,保留deploy/godgpt-dev分支的版本
- Add ViewStateSnapshotWithMetadata wrapper deserialization for Stream collections
- Skip old EventLog format data (detected by EventLog/LogEvent markers in binary)
- Fix HasMore logic for pagination when documents are skipped
- Add explicit state type mappings for AnonymousUserGAgent and TwitterIdentityBindingGAgent
- Prioritize *GAgentState naming pattern for state type resolution
- Remove unused CleanConnectionString method
- Simplify logging (reduce verbose Information logs to Debug)
- Clean up test scripts
- Remove TotalCount calculation (CountDocumentsAsync is slow on large collections)
- Remove cursor pagination (performance test shows skip=540000 takes only 0.32s)
- Simplify return structure: only HasMore and Records fields
- Optimize HasMore detection: fetch limit+1 to determine if more data exists
- Performance: skip=540000 with limit=500 completes in ~0.32s
…ueries

- Add cursor parameter to ExportAsync for efficient pagination
- Cursor uses MongoDB _id index for O(log n) lookup vs O(n) skip scan
- Cursor and skip can be mixed (cursor takes priority)
- Cursor based on MongoDB document _id (filtered docs correctly skipped)
- Significantly improves performance for large offsets and high concurrency
- Backward compatible: skip still works when cursor is not provided
@louis4li louis4li closed this Jan 27, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants