Files
orca/src/shared/opencode-cli-version.ts
T
Brennan Benson 3a6bb347b5 Apply supported read-only controls to hidden text helpers (#38558)
* Keep background text generation read-only

* Align runtime MIME dependency in frozen lockfile

* Bundle MIME lookup data for background text tasks

* Preserve text task cancellation and process ownership during policy probes

* Update streamed generation fixture for permission probe

* fix: preserve naming recipes with compatible restrictions

* test: align naming contracts with single-attempt behavior

* fix: preserve older OpenCode helper restrictions

* test: complete OpenCode capability fixtures

* Separate supported read-only controls from naming retries
2026-11-06 04:15:29 -08:00

37 lines
1.2 KiB
TypeScript

import { compareAppVersions, isValidAppVersion } from './app-version'
export const OPENCODE_NATIVE_PROMPT_VERSIONS = ['2.0.12', '2.0.16'] as const
export type OpenCodeCliCapabilities = {
version: string | null
pluginApi: 'v1' | 'v2' | 'unknown'
promptMode: 'submit' | 'prefill' | 'unknown'
v1SessionPolicyFiltersTools: boolean
}
export function parseOpenCodeCliVersion(output: string | null | undefined): string | null {
const version = output
?.trim()
.match(/^(?:opencode\s+)?v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)$/i)?.[1]
return version && isValidAppVersion(version) ? version : null
}
export function getOpenCodeCliCapabilities(
output: string | null | undefined
): OpenCodeCliCapabilities {
const version = parseOpenCodeCliVersion(output)
const major = version?.split('.')[0]
return {
version,
pluginApi: major === '1' ? 'v1' : major === '2' ? 'v2' : 'unknown',
v1SessionPolicyFiltersTools:
major === '1' && version !== null && compareAppVersions(version, '1.3.0') >= 0,
promptMode:
major === '1'
? 'submit'
: OPENCODE_NATIVE_PROMPT_VERSIONS.some((supported) => supported === version)
? 'prefill'
: 'unknown'
}
}