Merge remote-tracking branch 'origin/dev' into refactor/modular-code-enforcement
# Conflicts: # src/features/background-agent/manager.ts # src/features/background-agent/spawner.ts # src/features/tmux-subagent/manager.ts # src/shared/model-availability.test.ts # src/shared/model-availability.ts # src/shared/model-resolution-pipeline.ts # src/tools/delegate-task/executor.ts
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import { describe, it, expect, beforeEach, mock, spyOn } from "bun:test"
|
||||
import { resolveSession } from "./session-resolver"
|
||||
import type { OpencodeClient } from "./types"
|
||||
/// <reference types="bun-types" />
|
||||
|
||||
import { beforeEach, describe, expect, it, mock, spyOn } from "bun:test";
|
||||
import { resolveSession } from "./session-resolver";
|
||||
import type { OpencodeClient } from "./types";
|
||||
|
||||
const createMockClient = (overrides: {
|
||||
getResult?: { error?: unknown; data?: { id: string } }
|
||||
@@ -58,7 +60,9 @@ describe("resolveSession", () => {
|
||||
const result = resolveSession({ client: mockClient, sessionId })
|
||||
|
||||
// then
|
||||
await expect(result).rejects.toThrow(`Session not found: ${sessionId}`)
|
||||
await Promise.resolve(
|
||||
expect(result).rejects.toThrow(`Session not found: ${sessionId}`)
|
||||
)
|
||||
expect(mockClient.session.get).toHaveBeenCalledWith({
|
||||
path: { id: sessionId },
|
||||
})
|
||||
@@ -77,7 +81,12 @@ describe("resolveSession", () => {
|
||||
// then
|
||||
expect(result).toBe("new-session-id")
|
||||
expect(mockClient.session.create).toHaveBeenCalledWith({
|
||||
body: { title: "oh-my-opencode run" },
|
||||
body: {
|
||||
title: "oh-my-opencode run",
|
||||
permission: [
|
||||
{ permission: "question", action: "deny", pattern: "*" },
|
||||
],
|
||||
},
|
||||
})
|
||||
expect(mockClient.session.get).not.toHaveBeenCalled()
|
||||
})
|
||||
@@ -98,7 +107,12 @@ describe("resolveSession", () => {
|
||||
expect(result).toBe("retried-session-id")
|
||||
expect(mockClient.session.create).toHaveBeenCalledTimes(2)
|
||||
expect(mockClient.session.create).toHaveBeenCalledWith({
|
||||
body: { title: "oh-my-opencode run" },
|
||||
body: {
|
||||
title: "oh-my-opencode run",
|
||||
permission: [
|
||||
{ permission: "question", action: "deny", pattern: "*" },
|
||||
],
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
@@ -116,7 +130,9 @@ describe("resolveSession", () => {
|
||||
const result = resolveSession({ client: mockClient })
|
||||
|
||||
// then
|
||||
await expect(result).rejects.toThrow("Failed to create session after all retries")
|
||||
await Promise.resolve(
|
||||
expect(result).rejects.toThrow("Failed to create session after all retries")
|
||||
)
|
||||
expect(mockClient.session.create).toHaveBeenCalledTimes(3)
|
||||
})
|
||||
|
||||
@@ -134,7 +150,9 @@ describe("resolveSession", () => {
|
||||
const result = resolveSession({ client: mockClient })
|
||||
|
||||
// then
|
||||
await expect(result).rejects.toThrow("Failed to create session after all retries")
|
||||
await Promise.resolve(
|
||||
expect(result).rejects.toThrow("Failed to create session after all retries")
|
||||
)
|
||||
expect(mockClient.session.create).toHaveBeenCalledTimes(3)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -19,14 +19,18 @@ export async function resolveSession(options: {
|
||||
return sessionId
|
||||
}
|
||||
|
||||
let lastError: unknown
|
||||
for (let attempt = 1; attempt <= SESSION_CREATE_MAX_RETRIES; attempt++) {
|
||||
const res = await client.session.create({
|
||||
body: { title: "oh-my-opencode run" },
|
||||
body: {
|
||||
title: "oh-my-opencode run",
|
||||
// In CLI run mode there's no TUI to answer questions.
|
||||
permission: [
|
||||
{ permission: "question", action: "deny" as const, pattern: "*" },
|
||||
],
|
||||
} as any,
|
||||
})
|
||||
|
||||
if (res.error) {
|
||||
lastError = res.error
|
||||
console.error(
|
||||
pc.yellow(`Session create attempt ${attempt}/${SESSION_CREATE_MAX_RETRIES} failed:`)
|
||||
)
|
||||
@@ -44,9 +48,6 @@ export async function resolveSession(options: {
|
||||
return res.data.id
|
||||
}
|
||||
|
||||
lastError = new Error(
|
||||
`Unexpected response: ${JSON.stringify(res, null, 2)}`
|
||||
)
|
||||
console.error(
|
||||
pc.yellow(
|
||||
`Session create attempt ${attempt}/${SESSION_CREATE_MAX_RETRIES}: No session ID returned`
|
||||
|
||||
Reference in New Issue
Block a user