feat: v1.5 release — serve-based orchestration, observability, dynamic plans, permissions#78
Merged
feat: v1.5 release — serve-based orchestration, observability, dynamic plans, permissions#78
Conversation
…sion forking, and fix-before-rollback (#68)
… and dynamic orchestration test phases
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Major release implementing serve-based orchestration as the new default execution mode, with rich observability, dynamic plan orchestration, configurable permission policies, and improved UX.
Issues closed: Closes #74, closes #65, closes #66, closes #68, closes #69, closes #75
Follow-up issues created:
mc_streamtool (deferred from feat: Rich job observability — structured telemetry, real-time dashboard, event logs, live streaming #66)Changes
Fix #74: Session-aware notification routing
launchSessionID), not whichever session happens to be activeFeat #65: Serve-based orchestration (5 components)
src/lib/port-allocator.ts): File-locked port allocation in configurable range (14100-14199)src/lib/sdk-client.ts): Typed client wrapper with health check polling and exponential backoffopencode serve --port Ninstead of TUI mode (configurable, default ON)src/lib/monitor.ts): SSE event subscription for deterministic state detection, replacing tmux output hashing for serve-mode jobs. Dual-mode: SSE for serve, tmux for TUI.src/lib/question-relay.ts): Permission requests routed to launching session with job context. Auto-approval for worktree-scoped operations.opencode attachfor serve-mode jobsFeat #66: Rich job observability
mc_statusenriched with current tool, files edited, activity log for serve-mode jobsmc_overviewshows real-time activity indicators (streaming/tool_call/blocked/idle)mc_capturesupports structured event capture withfilterparameterFeat #68: Dynamic plan orchestration (4 sub-features)
Feat #69: Permission policy engine
Feat #75: Session title annotations
Fix: cancelPlan race condition
unsubscribeFromMonitorEvents()andactivePlanId = nullbefore job killing incancelPlan()to prevent async completion handlers from racing with plan cleanup ("No active plan exists"console error)Fix: Model not forwarded in serve mode
createSessionAndPrompt()without passing the model, so spawned agents used the server's default model instead of inheriting the orchestrator's modelgetCurrentModelInfo(context?.sessionID)and passes it through to the SDKsendPrompt()call, matching how the TUI path already forwards the model via the-mflagTesting
Automated
bun run buildpassesbun testpasses — 801 tests across 47 files (up from 614)Manual E2E (427-test plan)
Full execution of the comprehensive manual test plan (
MANUAL_TEST_PLAN.md) covering all 17 MCP tools, all 12 job states, and all 8 plan states.mc_mergerequiresmainbranchmc_merge(mainbranch)-mflag or prompt file)launchSessionIDcaptured, routing verifiedBlocked tests (~51): Phase 6 and Phase 4 merge tests require
mainbranch. Testing was done onrelease/v1.5wheremc_mergecorrectly refuses to merge (validates main worktree is on default branch).Known issue found during manual testing
checkAgentReport()skipped for serve-mode jobs — The monitor'spoll()routes serve-mode jobs tosubscribeToSSE()and skipscheckAgentReport(). This meansmc_report(status: "blocked")andmc_report(status: "needs_review")write to the filesystem (visible inmc_status) but do NOT trigger alerts inmc_overviewor notifications. The monitor report pipeline is TUI-mode only. Filing as follow-up.Other discoveries during manual testing
opencode.jsonconfig had"opencode-mission-control"in the plugin list, loading the npm-cached v1.4.2 alongside the local dev build. The cached version couldn't parse v3 state files, causing"Invalid job state"errors. Fix: removed from global plugin list.Notes
useServeMode: true). Set tofalsein config to use legacy TUI mode.mc_streamtool is deferred to feat: add mc_stream tool for live job output streaming #76.@opencode-ai/sdk@^1.1.53added as a runtime dependency.