feat: OpenCode session lifecycle and CLI controls (#315)
* feat: refine OpenCode session reuse strategy and cleanup
* fix: harden OpenCode session selection and lint errors
* refactor: centralize OpenCode reuse resolution flow
* fix: return 404 for missing session in message route
* feat: replace force remap with terminal reload control
* fix: protect project path from session kill cleanup
* fix: preserve fullscreen alignment without reload action
* fix: harden OpenCode session id handling and title reuse selection
* fix: show OpenCode reload control and remap before restart
* fix: preserve title-only OpenCode reuse with fallback mapping persistence
* fix: resolve remaining PR315 Bugbot findings
* fix: keep OpenCode discovery title-based without timestamp sorting
* fix: avoid enrichment race fallout in session listing
* fix: guard OpenCode discovery parse with array check
* fix: stabilize Linear comment integration check
* fix: harden OpenCode discovery and prompt option flow
* ux: clarify OpenCode terminal restart action
* fix: remap OpenCode session fresh on each restart
* fix: validate remap session ids before reuse
* fix: clean archived metadata only after purge
* docs: align OpenCode remap selection with title-based behavior
* fix: harden opencode cleanup and ignore local sisyphus state
* test: add timeout cleanup coverage for session enrichment
* fix: harden Linear integration helper against transient non-JSON errors
* fix: make linear integration assertions resilient to eventual consistency
* fix: remove unused fs import after rebase
* fix: address remaining Bugbot blockers for opencode session handling
* fix: avoid stale metadata overwrite during restore post-launch
* fix: forward subagent in orchestrator flows and defer reuse lookup
* fix: apply configured subagent fallback for session spawn
* fix: scope archived cleanup by project and delay archive restore write
* fix: normalize orchestrator strategy aliases in start display logic
* fix: centralize orchestrator strategy normalization in core
* fix: derive orchestrator reuse display from spawn result
* fix: keep cleanup results consistent across project-id collisions
* fix: namespace cleanup results when session IDs collide
* fix: harden GitHub issue stateReason fallback
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
* fix: avoid false failing CI state mapping
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
* fix: add tmux command timeouts
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
* fix: bound session API enrichment latency
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
* fix: repair scm-github merge resolution
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
* fix: repair lifecycle-manager test merge
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
* fix: delay archive metadata recreation until restore passes
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
* test: restore claim-pr session mocks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
* fix: address review findings for OpenCode lifecycle PR
- Fix stripControlChars to preserve newlines for reload commands
- Add SessionNotFoundError and use instanceof checks in API routes
- Document orchestratorSessionStrategy in YAML example
- Validate existingSessionId with asValidOpenCodeSessionId()
- Extract inline Node script to buildSessionLookupScript helper
- Create OpenCodeSessionManager interface for remap capability
- Create OpenCodeAgentConfig type for agent-specific config
- Change default orchestratorSessionStrategy from delete to reuse
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: guard reused session display without metadata
* chore: add agent config files to .gitignore
Agent configuration files (CLAUDE.md, AGENTS.md, IMPROVEMENTS.md, etc.) are personal and project-specific. They should not be committed to the repository.
Changes:
- Remove CLAUDE.md from git tracking
- Add agent config files to .gitignore
- Create .gitignore-template for reference
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore: update gitignore for agent config folder structure
Reorganized agent configuration files:
- CLAUDE.md and AGENTS.md stay in root (agents read them there)
- Tracking files move to .opencode/ (IMPROVEMENTS.md, etc.)
- Optional Claude files in .claude/
Updated .gitignore to ignore folders instead of individual files.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: tighten opencode remap and session discovery safeguards
* fix: address Bugbot findings in session manager
* fix: scope opencode discovery to opencode sessions
* fix: restore concurrent listing and strict permission literals
* fix: throw SessionNotFoundError, parallelize list enrichment, fix permissions type
- Session manager now throws SessionNotFoundError instead of plain Error
for missing sessions, so web API routes correctly return 404 (not 500)
- Parallelize session enrichment in list() — was sequential, causing O(N)
latency for N sessions with subprocess enrichment
- Fix AgentLaunchConfig.permissions type to accept legacy "skip" value
(AgentPermissionInput instead of AgentPermissionMode)
- Add happy-path and validation tests for /api/sessions/:id/message route
- Update all test mocks to use SessionNotFoundError
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: route ao send through session manager
* feat: add purge option to orchestrator stop
* fix: register opencode agent in web services
* test: align web API missing-session coverage
* fix: match notifier config by plugin name
* refactor: dedupe session lookup and tmux buffer send flow
* test: update send lifecycle wait expectation
* fix: harden send routing and cleanup purge controls
---------
Co-authored-by: Harsh <harsh@Ubuntu-24-Forrest.lan>
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Prateek <karnalprateek@gmail.com>