feat: enable background subagents by default
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
import { afterEach, describe, expect, mock } from "bun:test"
|
||||
import { LayerNode } from "@opencode-ai/core/effect/layer-node"
|
||||
import { Effect, Layer } from "effect"
|
||||
import { Effect, Fiber, Layer } from "effect"
|
||||
import { Session as SessionNs } from "@/session/session"
|
||||
import { Job } from "@/job"
|
||||
import { disposeAllInstances, TestInstance } from "../fixture/fixture"
|
||||
import { testEffect } from "../lib/effect"
|
||||
import { pollWithTimeout, testEffect } from "../lib/effect"
|
||||
import { httpApiLayer, requestInDirectory } from "./httpapi-layer"
|
||||
|
||||
const it = testEffect(Layer.mergeAll(LayerNode.compile(SessionNs.node), httpApiLayer))
|
||||
const it = testEffect(Layer.mergeAll(LayerNode.compile(SessionNs.node), LayerNode.compile(Job.node), httpApiLayer))
|
||||
|
||||
afterEach(async () => {
|
||||
mock.restore()
|
||||
@@ -14,6 +15,19 @@ afterEach(async () => {
|
||||
})
|
||||
|
||||
describe("session action routes", () => {
|
||||
it.instance(
|
||||
"reports background subagents as available",
|
||||
() =>
|
||||
Effect.gen(function* () {
|
||||
const test = yield* TestInstance
|
||||
const res = yield* requestInDirectory("/experimental/capabilities", test.directory)
|
||||
|
||||
expect(res.status).toBe(200)
|
||||
expect(yield* res.json).toEqual({ backgroundSubagents: true })
|
||||
}),
|
||||
{ git: true },
|
||||
)
|
||||
|
||||
it.instance(
|
||||
"session routes expose metadata on create, update, get, and fork",
|
||||
() =>
|
||||
@@ -107,4 +121,33 @@ describe("session action routes", () => {
|
||||
}),
|
||||
{ git: true },
|
||||
)
|
||||
|
||||
it.instance(
|
||||
"experimental background route backgrounds a synchronous subagent",
|
||||
() =>
|
||||
Effect.gen(function* () {
|
||||
const test = yield* TestInstance
|
||||
const session = yield* Effect.acquireRelease(SessionNs.use.create({}), (created) =>
|
||||
SessionNs.use.remove(created.id).pipe(Effect.ignore),
|
||||
)
|
||||
const jobs = yield* Job.Service
|
||||
const job = yield* jobs.start({ type: "task", run: Effect.never })
|
||||
const waiting = yield* jobs.block({ id: job.id, sessionID: session.id }).pipe(Effect.forkChild)
|
||||
|
||||
const backgrounded = yield* pollWithTimeout(
|
||||
requestInDirectory(`/experimental/session/${session.id}/background`, test.directory, {
|
||||
method: "POST",
|
||||
}).pipe(
|
||||
Effect.flatMap((res) => res.json),
|
||||
Effect.map((value) => (value === true ? true : undefined)),
|
||||
),
|
||||
"background route never released the synchronous subagent",
|
||||
)
|
||||
|
||||
expect(backgrounded).toBe(true)
|
||||
expect(yield* Fiber.join(waiting)).toMatchObject({ type: "backgrounded", info: { id: job.id } })
|
||||
yield* jobs.cancel(job.id)
|
||||
}),
|
||||
{ git: true },
|
||||
)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user