mirror of
https://github.com/stablyai/orca.git
synced 2026-11-01 01:27:35 +00:00
* fix: wait for OpenCode worker composer before first dispatch Reuse captured composer readiness on local and paired execution hosts and revoke launching-shell paste anchors. Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> * feat(opencode): probe execution-host CLI capabilities * fix(opencode): select plugin default for execution host loader * fix(opencode): limit prompt prefill capability to verified release * feat(opencode): probe launch capabilities on the execution host * fix(opencode): select plugin loader for the launched host binary * fix(opencode): match WSL probe cwd and declared guest environment * fix(opencode): preserve launch environment deletion boundaries * wip(opencode): authorize native startup prompt intent at execution owner * fix(opencode): atomically replace status plugin entrypoints * fix(opencode): retain plugin permissions across restrictive umasks * test(opencode): resolve permission fixture from primary cwd * feat(opencode): install startup prompt plugin independently of status hooks * fix(opencode): wait for admitted startup intent and preserve failed-launch briefs * fix(opencode): confine overlay manifest cleanup to owned directories Co-authored-by: Adnan Khan <adnank11427@gmail.com> * fix: wait for OpenCode worker composer before first dispatch Reuse captured composer readiness on local and paired execution hosts and revoke launching-shell paste anchors. Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> * feat(opencode): probe execution-host CLI capabilities * fix(opencode): select plugin default for execution host loader * fix(opencode): limit prompt prefill capability to verified release * feat(opencode): probe launch capabilities on the execution host * fix(opencode): select plugin loader for the launched host binary * fix(opencode): match WSL probe cwd and declared guest environment * fix(opencode): preserve launch environment deletion boundaries * wip(opencode): authorize native startup prompt intent at execution owner * fix(opencode): atomically replace status plugin entrypoints * fix(opencode): retain plugin permissions across restrictive umasks * test(opencode): resolve permission fixture from primary cwd * feat(opencode): install startup prompt plugin independently of status hooks * fix(opencode): wait for admitted startup intent and preserve failed-launch briefs * fix(opencode): unsubscribe hook settings during async host shutdown * STRICT launch CI contract correction * CAPS launch CI contract correction * INTENT launch CI contract correction * test: initialize Claude prompt state in output retention fixture * Wait for OpenCode location hydration in intent startup * Bind OpenCode startup readiness to the current location in intent startup * Collect retired source-scoped OpenCode configuration overlays conservatively Credit brennanb2025 for the original bounded, delayed overlay garbage-collection contribution in PR #7627. Preserve ambiguous legacy and shared-service state. * Correct inaccessible-source fixture without spying on native ESM exports * Keep delayed OpenCode cleanup within existing file limits * Reuse the overlay manifest module for existing owned-entry operations * Use the existing filesystem import in the ownership mock * test(opencode): keep overlay GC link tests portable --------- Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> Co-authored-by: Ahmed Nagy <ahmednagy25t@gmail.com> Co-authored-by: Adnan Khan <adnank11427@gmail.com> Co-authored-by: Orca startup hydration review <agents@stably.ai> Co-authored-by: OpenCode Campaign <opencode-campaign@users.noreply.github.com>
62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
|
|
import { tmpdir } from 'node:os'
|
|
import { join } from 'node:path'
|
|
import { expect, it } from 'vitest'
|
|
import {
|
|
readOpenCodeOverlayManifest,
|
|
OPENCODE_OVERLAY_MANIFEST_FILE
|
|
} from './opencode-overlay-manifest'
|
|
|
|
it('accepts only string manifest entries and tolerates invalid persisted shapes', () => {
|
|
const root = mkdtempSync(join(tmpdir(), 'orca-overlay-manifest-'))
|
|
try {
|
|
const path = join(root, OPENCODE_OVERLAY_MANIFEST_FILE)
|
|
for (const text of ['null', '1', '{']) {
|
|
writeFileSync(path, text)
|
|
expect(readOpenCodeOverlayManifest(root)).toEqual({ topLevelEntries: [], pluginEntries: [] })
|
|
}
|
|
writeFileSync(
|
|
path,
|
|
JSON.stringify({
|
|
topLevelEntries: ['valid', 1, null],
|
|
pluginEntries: [{ bad: true }, 'plugin.js']
|
|
})
|
|
)
|
|
expect(readOpenCodeOverlayManifest(root)).toEqual({
|
|
topLevelEntries: ['valid'],
|
|
pluginEntries: ['plugin.js']
|
|
})
|
|
} finally {
|
|
rmSync(root, { recursive: true, force: true })
|
|
}
|
|
})
|
|
|
|
it('keeps source ownership optional for older manifests and rejects non-string metadata', () => {
|
|
const root = mkdtempSync(join(tmpdir(), 'orca-overlay-source-manifest-'))
|
|
try {
|
|
const file = join(root, OPENCODE_OVERLAY_MANIFEST_FILE)
|
|
for (const source of [undefined, null, 42, {}]) {
|
|
writeFileSync(
|
|
file,
|
|
JSON.stringify({ topLevelEntries: [], pluginEntries: [], sourceConfigDir: source })
|
|
)
|
|
expect(readOpenCodeOverlayManifest(root)).toEqual({ topLevelEntries: [], pluginEntries: [] })
|
|
}
|
|
writeFileSync(
|
|
file,
|
|
JSON.stringify({
|
|
topLevelEntries: ['opencode.json'],
|
|
pluginEntries: [],
|
|
sourceConfigDir: '/owned/source'
|
|
})
|
|
)
|
|
expect(readOpenCodeOverlayManifest(root)).toEqual({
|
|
topLevelEntries: ['opencode.json'],
|
|
pluginEntries: [],
|
|
sourceConfigDir: '/owned/source'
|
|
})
|
|
} finally {
|
|
rmSync(root, { recursive: true, force: true })
|
|
}
|
|
})
|