mirror of
https://github.com/stablyai/orca.git
synced 2026-10-08 00:02:38 +00:00
* fix(source-control): generate clean OpenCode answers on local and SSH hosts Restack the original focused change onto current main, preserving every owned source and test blob and the merged CI contract and journal cleanup fixes. Original-commit:64bb15e3f2fix(source-control): generate clean OpenCode answers on local and SSH hosts Use configured models and JSON answer/error events, preserve run-first arguments, and handle the precise v2 variant rejection. Hydrate SSH execution-host PATH through the existing bounded login environment resolver before direct spawning. Credits: andy-murr (PR #5197 SSH environment intent) and coelho-doti (PR #13065 argument-order intent). Original-commit:1b60ec5d11fix(source-control): retry inline OpenCode model and variant options Original-commit:98fdecc7a3Preserve OpenCode named errors without a data message Restacked-from:98fdecc7a3Restacked-onto:f7b1f9d8be* fix(ci): prevent concurrent pnpm refresh during mobile typechecks (#24776) * fix(ci): run mobile typechecks without concurrent dependency refresh * test(ci): check effective Linux E2E package list * test(ci): preserve the mobile production compiler barrier --------- Co-authored-by: Orca Integration Recovery <orca-validation@invalid.example> * test(terminal): restore the live fish fixture prerequisites (#24947) A restored pane waits for the initial status replay before subscribing to PTY output. This fixture never settled that replay, so fish printed its mode-2031 arm before the renderer connected. Its PTY API also omitted the reset-input listener required by the serializer, aborting attachment. Settle and dispose the existing startup-snapshot registration and provide the same reset-listener mock used by the other PTY tests. The real fish child-stdin assertions and timeouts remain unchanged. No production change. * fix(shortcuts): defer TUI editing chords in terminal-first mode (#24640) Restack the original focused change onto current main, preserving every owned source and test blob and the merged CI contract and journal cleanup fixes. Original-commit:f707cde14afix(shortcuts): defer TUI editing chords in terminal-first mode Original-commit:0c6348e49edocs(shortcuts): describe deferred preview terminal chords Original-commit:be62c1b6c6Align worktree history shortcut metadata with terminal conflict policy Restacked-from:be62c1b6c6Restacked-onto:f7b1f9d8be* Register supervised Qoder China and Qwen Code (#24616) * Add Qoder session history and search with real CLI coverage * Allow the real Qoder marker file to end with a newline * Keep Qoder tool output out of history previews and search * Keep Qoder search pages readable by older clients * Verify persisted Qoder history after a real generated and resumed task * Negotiate Qoder filters before searching an older execution host * Combine search client imports for the CI plugin gate * Keep the relay search oracle aligned with legacy agent filtering * Register supervised Qoder China and Qwen lifecycle integration * Cover Qoder China mobile assets and mixed-host resume gates * Verify Qoder provider tags against the older released wire parser * Verify China and Qwen keep independent Windows hook scripts * Verify Qoder registrations against the installed older Windows release * test(qoder): align search capability contracts and pin old-host fencing * fix(qoder): rank exact picker identities and command aliases first * test(qoder): preserve the regional CLI shared icon expectation Keep the full bundled-asset and no-remote-image checks, with an explicit shared-logo basename for Qoder China. The map also works with older catalog type unions. * fix(qoder): align China catalog entry with fallback order --------- Co-authored-by: Orca Integration Recovery <orca-validation@invalid.example> * Use the measured pnpm lookup policy automatically in hosted root CI (#24951) * Select lookup automatically for the measured hosted root-install profile * Record hosted automatic-mode cold cache publication proof * fix: bound remote generation setup and honor OpenCode option terminators Count execution-host profile resolution inside the existing request deadline, cancel its waiter promptly, and pass only the remaining time to the child. Shared bounded profile probes keep their existing cache lifetime; the SSH transport margin is unchanged. Read OpenCode output format from active final-argv options before -- so literal prompt arguments cannot select the JSON finalizer. Fresh exact-source controls reproduce nine failures before; 139 related checks pass after, including primary/fallback delays, deadline boundaries, cancellation, parser metadata, and SSH lanes. Node typecheck and strict changed-file lint pass. * Continue Antigravity IDE and 2.0 history in new CLI conversations (#24692) * feat(antigravity): bridge IDE history into new CLI conversations * fix(antigravity): preserve fresh-launch model and environment for IDE references * fix(antigravity): forward IDE history opt-in through desktop IPC * fix(antigravity): rebuild remote IDE reference startup on its host * fix(antigravity): register IDE continuation action labels * fix(antigravity): confine IDE references and bound metadata reads * fix(antigravity): localize IDE continuation badges * Preserve scanner service cache assertions and refresh Antigravity opening metadata * Preserve Antigravity opening joins and target folder runtime authority * fix(opencode): retry timed-out SSH plugin updates (#24666) Preserve bounded retry behavior and the current-main status-envelope fields. Original-PR: #24124 Reviewed-source:103144f9c5Co-authored-by: Justas Brazauskas <brazauskasjustas@gmail.com> * fix(opencode): keep Go credentials private and resolve backend keys (#24615) Preserve the complete credential storage, migration, IPC, Settings and rate-limit refresh change alongside standalone GLM plans, current-main database diagnostics and the reviewed unknown-backend environment correction. Keep native discovery cancellation third and selected environment fourth. Original-topic-commit:7903f1cddbOriginal-topic-commit:588117b5cfOriginal-topic-commit:dedd4f8c86Original-topic-commit:6645dae104Original-topic-commit: a25b80c02c1af7830b0e6a65e72d965b3ad98276 Restacked-from: a25b80c02c1af7830b0e6a65e72d965b3ad98276 Restacked-onto:b032867021Co-authored-by: kespineira <kespineira@users.noreply.github.com> Co-authored-by: kevimux <kevimux@users.noreply.github.com> Reported-by: pullfrog Reviewed-full-source: 849fe093073f4c1606bd65d79a0c725d955d0d1f Native-helper-source:80dbe23237Reviewed-full-current-source: 36acb57d44adb3d378c0289c8c15f7da0fda214c * fix(opencode): enforce deadline through executable startup Keep synchronous Windows PATH resolution and child startup within the existing request budget. --------- Co-authored-by: Orca Integration Recovery <orca-validation@invalid.example> Co-authored-by: Justas Brazauskas <brazauskasjustas@gmail.com>
95 lines
3.2 KiB
TypeScript
95 lines
3.2 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { planCommitMessageGeneration } from './commit-message-plan'
|
|
import { openCodeVariantRetryPlan } from './opencode-generation-command'
|
|
|
|
const rejection = 'Unrecognized flag: --variant in command opencode run'
|
|
describe('OpenCode generation commands', () => {
|
|
it.each(['opencode', 'opencode.exe', 'opencode.cmd', 'opencode2'])(
|
|
'keeps run before launch flags for %s',
|
|
(binary) => {
|
|
const result = planCommitMessageGeneration(
|
|
{ agentId: 'opencode', model: 'default', agentCommandOverride: `${binary} --auto` },
|
|
'PROMPT'
|
|
)
|
|
expect(result).toMatchObject({
|
|
ok: true,
|
|
plan: {
|
|
args: ['run', '--auto', '--agent', 'build', '--format', 'json'],
|
|
stdinPayload: 'PROMPT',
|
|
outputFormat: 'opencode-json'
|
|
}
|
|
})
|
|
}
|
|
)
|
|
|
|
it('keeps explicit formatted output recipes on their requested output format', () => {
|
|
const result = planCommitMessageGeneration(
|
|
{ agentId: 'opencode', model: 'default', agentArgs: '--format default' },
|
|
'PROMPT'
|
|
)
|
|
if (!result.ok) {
|
|
throw new Error(result.error)
|
|
}
|
|
expect(result.plan.outputFormat).toBeUndefined()
|
|
})
|
|
|
|
it('retries only the precise v2 argv rejection, retaining the prompt and selected model', () => {
|
|
const result = planCommitMessageGeneration(
|
|
{ agentId: 'opencode', model: 'fixture/chat', thinkingLevel: 'high' },
|
|
'PROMPT'
|
|
)
|
|
if (!result.ok) {
|
|
throw new Error(result.error)
|
|
}
|
|
expect(openCodeVariantRetryPlan(result.plan, rejection)).toMatchObject({
|
|
args: ['run', '--model', 'fixture/chat#high', '--agent', 'build', '--format', 'json'],
|
|
stdinPayload: 'PROMPT'
|
|
})
|
|
expect(openCodeVariantRetryPlan(result.plan, 'provider rejected the request')).toBeNull()
|
|
expect(openCodeVariantRetryPlan(result.plan, 'Unrecognized flag: --other')).toBeNull()
|
|
})
|
|
it.each([
|
|
'--model=fixture/chat --variant=high',
|
|
'-mfixture/chat --variant=high',
|
|
'--variant high --model=fixture/chat',
|
|
'--variant=high -m fixture/chat'
|
|
])('retries the chosen recipe model and variant in %s', (agentArgs) => {
|
|
const result = planCommitMessageGeneration(
|
|
{ agentId: 'opencode', model: 'other/model', thinkingLevel: 'low', agentArgs },
|
|
'PROMPT'
|
|
)
|
|
if (!result.ok) {
|
|
throw new Error(result.error)
|
|
}
|
|
const retry = openCodeVariantRetryPlan(result.plan, rejection)
|
|
expect(retry?.args.join(' ')).toContain('fixture/chat#high')
|
|
expect(retry?.args.join(' ')).not.toContain('--variant')
|
|
expect(retry?.stdinPayload).toBe('PROMPT')
|
|
})
|
|
|
|
it('does not treat prompt tokens after the terminator as options', () => {
|
|
expect(
|
|
openCodeVariantRetryPlan(
|
|
{
|
|
binary: 'opencode',
|
|
label: 'OpenCode',
|
|
stdinPayload: null,
|
|
args: ['run', '--model=fixture/chat', '--', '--variant=high']
|
|
},
|
|
rejection
|
|
)
|
|
).toBeNull()
|
|
expect(
|
|
openCodeVariantRetryPlan(
|
|
{
|
|
binary: 'opencode',
|
|
label: 'OpenCode',
|
|
stdinPayload: null,
|
|
args: ['run', '--variant=high', '--', '--model=fixture/chat']
|
|
},
|
|
rejection
|
|
)
|
|
).toBeNull()
|
|
})
|
|
})
|