Skip to content

feat(provider): OpenCodeNursedProvider for full process lifecycle management#366

Open
aaronwong1989 wants to merge 5 commits intohrygo:mainfrom
aaronwong1989:feat/358-opencode-nursed-provider
Open

feat(provider): OpenCodeNursedProvider for full process lifecycle management#366
aaronwong1989 wants to merge 5 commits intohrygo:mainfrom
aaronwong1989:feat/358-opencode-nursed-provider

Conversation

@aaronwong1989
Copy link
Copy Markdown
Collaborator

Summary

实现 OpenCodeNursedProvider,完全纳管 opencode serve 进程生命周期。

Components

File Lines Responsibility
provider/opencode_guardian.go 446 ProcessGuardian - 进程守护、health check、指数退避重启
provider/opencode_session.go 268 HTTPSessionManager - Session 生命周期、确定性 UUID v5 映射
provider/opencode_relay.go 424 EventRelay - SSE 事件订阅、过滤、Permission 路由
provider/opencode_nursed.go 533 OpenCodeNursedProvider - 组合层,Provider 接口实现

Key Features

  • 进程守护:指数退避重启(1s→2s→4s→8s→16s→30s),失败环形 buffer
  • Session 映射:确定性 UUID v5(namespace + sessionID),进程重启后通过 ListSession 恢复
  • WorkDir 模板:默认
  • Permission 路由:EventRelay 识别 permission.updated 事件,通过 callback 路由给 ChatApp 层
  • 配置连接:HealthCheckInterval、RestartBackoff、MaxFailBurst 等均可配置

Config Fields (OpenCodeConfig)

  • BinaryPath, ServeArgs, WorkDirTemplate
  • HealthCheckInterval, StartupTimeout, RestartBackoff, MaxFailBurst

Review Fixes Applied

  • P1-1: 配置字段连接到 ProcessGuardian
  • P1-2: 解决 Plugin 类型冲突(注释掉 OpenCodeServerProvider 的 init 注册)
  • P1-3: 实现 Session 恢复方法(ListSessions、findSessionByTitle、RecoverMappings)
  • P2-4: handleUnhealthy 锁管理重构
  • P2-5: mapEvent/mapPart 重复消除
  • P2-6: 工具状态使用常量

Refs #358

探云 Bot added 5 commits March 29, 2026 11:15
…gement (Refs hrygo#358)

Implements complete process management for opencode serve with:

- ProcessGuardian: Process lifecycle management with exponential backoff restart
- HTTPSessionManager: Deterministic UUID v5 session mapping with server-side recovery
- EventRelay: SSE event subscription, filtering, and routing
- OpenCodeNursedProvider: Provider interface combining all components

New OpenCodeConfig fields:
- BinaryPath: Path to opencode binary for managed mode
- ServeArgs: Additional arguments for serve command
- WorkDirTemplate: Template for session workdir resolution
- HealthCheckInterval: Health check interval (default 10s)
- StartupTimeout: Process startup timeout (default 60s)
- RestartBackoff: Custom backoff intervals
- MaxFailBurst: Max consecutive failures before dead state (default 1000)
…Provider

P1-1: Connect OpenCodeConfig fields to ProcessGuardian
- Parse HealthCheckInterval, StartupTimeout, RestartBackoff, MaxFailBurst
- Add GuardianConfig struct and NewProcessGuardianWithConfig
- Use DefaultGuardianConfig() for defaults

P1-2: Fix Plugin type conflict
- Comment out OpenCodeServerProvider init() registration
- OpenCodeNursedProvider now the sole ProviderTypeOpenCodeServer plugin

P1-3: Implement session recovery stubs
- HTTPSessionManager: add baseURL and password fields
- ListSessions: implement GET /session API call
- findSessionByTitle: iterate sessions to find matching title
- RecoverMappings: restore in-memory map from server sessions
- Add OCSession.Status field for status tracking

P2-4: Fix handleUnhealthy lock management
- Remove confusing defer/unlock mix
- Restructure to clear lock boundaries
- Remove unused recordFailure method

P2-5: Eliminate mapEvent/mapPart duplication
- Expose EventRelay.MapEvent public method
- OpenCodeNursedProvider.ParseEvent delegates to relay.MapEvent

P2-6: Use tool status constants
- Replace string literals with ToolStatusPending, ToolStatusRunning, etc.
- Update both opencode_nursed.go and opencode_relay.go
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.

1 participant