mirror of
https://github.com/wu736139669/hapi.git
synced 2026-10-08 19:19:42 +00:00
feat(opencode): add plan mode, reasoning effort, and status telemetry (#688)
* feat(opencode): support plan mode * feat(opencode): support reasoning effort * feat(opencode): surface context usage in web Bridge OpenCode ACP usage updates into the existing token-count pipeline so the web status bar can show live context and cache information without a separate UI path. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(opencode): restrict plan mode to remote, rollback reasoning effort on failure - Block local OpenCode plan startup (tools not enforced in local path) - Allow remote OpenCode plan only (ACP permission handler denies tools) - Guard web /permission-mode endpoint for local OpenCode plan sessions - Rollback session reasoning effort when OpenCode rejects set_config_option - Wire rollback callback through opencodeLoop to runOpencode closure - Add tests: local plan rejected, remote plan allowed, web guard, effort rollback * fix(web): auto-retry OpenCode models query to populate model selector without refresh - Retry early failures (RPC may still be registering on new sessions) - Poll briefly until availableModels is non-empty - Stop polling once model options are discovered - Add tests for retry/poll/stop policy * fix(opencode): cap model discovery polling --------- Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -18,10 +18,12 @@ interface OpencodeLoopOptions {
|
||||
api: ApiClient;
|
||||
permissionMode?: PermissionMode;
|
||||
model?: string;
|
||||
modelReasoningEffort?: string | null;
|
||||
resumeSessionId?: string;
|
||||
hookServer: OpencodeHookServer;
|
||||
hookUrl: string;
|
||||
onSessionReady?: (session: OpencodeSession) => void;
|
||||
onReasoningEffortRollback?: (effort: string | null) => void;
|
||||
}
|
||||
|
||||
export async function opencodeLoop(opts: OpencodeLoopOptions): Promise<void> {
|
||||
@@ -40,7 +42,8 @@ export async function opencodeLoop(opts: OpencodeLoopOptions): Promise<void> {
|
||||
mode: startingMode,
|
||||
startedBy,
|
||||
startingMode,
|
||||
permissionMode: opts.permissionMode ?? 'default'
|
||||
permissionMode: opts.permissionMode ?? 'default',
|
||||
modelReasoningEffort: opts.modelReasoningEffort
|
||||
});
|
||||
|
||||
if (opts.resumeSessionId) {
|
||||
@@ -55,7 +58,9 @@ export async function opencodeLoop(opts: OpencodeLoopOptions): Promise<void> {
|
||||
hookServer: opts.hookServer,
|
||||
hookUrl: opts.hookUrl
|
||||
}),
|
||||
runRemote: (instance) => opencodeRemoteLauncher(instance),
|
||||
runRemote: (instance) => opencodeRemoteLauncher(instance, {
|
||||
onReasoningEffortRollback: opts.onReasoningEffortRollback
|
||||
}),
|
||||
onSessionReady: opts.onSessionReady
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user