test(sdk-next): update embedded client namespaces
This commit is contained in:
@@ -26,54 +26,54 @@ test("embedded client uses the real router and handlers", async () => {
|
|||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
const created = yield* opencode.sessions.create({
|
const created = yield* opencode.session.create({
|
||||||
id: sessionID,
|
id: sessionID,
|
||||||
agent: Agent.ID.make("build"),
|
agent: Agent.ID.make("build"),
|
||||||
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
||||||
})
|
})
|
||||||
yield* opencode.sessions.switchModel({ sessionID, model })
|
yield* opencode.session.switchModel({ sessionID, model })
|
||||||
const selected = yield* opencode.sessions.get({ sessionID })
|
const selected = yield* opencode.session.get({ sessionID })
|
||||||
const page = yield* opencode.sessions.list({ directory: AbsolutePath.make(directory) })
|
const page = yield* opencode.session.list({ directory: AbsolutePath.make(directory) })
|
||||||
const active = yield* opencode.sessions.active()
|
const active = yield* opencode.session.active()
|
||||||
const admitted = yield* opencode.sessions.prompt({
|
const admitted = yield* opencode.session.prompt({
|
||||||
sessionID,
|
sessionID,
|
||||||
prompt: Prompt.make({ text: "Do not run" }),
|
prompt: Prompt.make({ text: "Do not run" }),
|
||||||
resume: false,
|
resume: false,
|
||||||
})
|
})
|
||||||
const context = yield* opencode.sessions.context({ sessionID })
|
const context = yield* opencode.session.context({ sessionID })
|
||||||
const wake = yield* opencode.sessions.prompt({
|
const wake = yield* opencode.session.prompt({
|
||||||
sessionID,
|
sessionID,
|
||||||
prompt: Prompt.make({ text: "Promote this input" }),
|
prompt: Prompt.make({ text: "Promote this input" }),
|
||||||
})
|
})
|
||||||
const prompted = yield* opencode.sessions.events({ sessionID }).pipe(
|
const prompted = yield* opencode.session.events({ sessionID }).pipe(
|
||||||
Stream.filter((event) => event.type === "session.next.prompted" && event.data.messageID === wake.id),
|
Stream.filter((event) => event.type === "session.next.prompted" && event.data.messageID === wake.id),
|
||||||
Stream.runHead,
|
Stream.runHead,
|
||||||
Effect.timeout("10 seconds"),
|
Effect.timeout("10 seconds"),
|
||||||
Effect.map(Option.getOrThrow),
|
Effect.map(Option.getOrThrow),
|
||||||
)
|
)
|
||||||
const wakeContext = yield* opencode.sessions.context({ sessionID })
|
const wakeContext = yield* opencode.session.context({ sessionID })
|
||||||
const event = yield* opencode.sessions
|
const event = yield* opencode.session
|
||||||
.events({ sessionID })
|
.events({ sessionID })
|
||||||
.pipe(Stream.take(1), Stream.runHead, Effect.map(Option.getOrUndefined))
|
.pipe(Stream.take(1), Stream.runHead, Effect.map(Option.getOrUndefined))
|
||||||
const modelMessage = Option.fromNullishOr(context.find((message) => message.type === "model-switched")).pipe(
|
const modelMessage = Option.fromNullishOr(context.find((message) => message.type === "model-switched")).pipe(
|
||||||
Option.getOrThrow,
|
Option.getOrThrow,
|
||||||
)
|
)
|
||||||
const message = yield* opencode.sessions.message({ sessionID, messageID: modelMessage.id })
|
const message = yield* opencode.session.message({ sessionID, messageID: modelMessage.id })
|
||||||
yield* opencode.sessions.interrupt({ sessionID })
|
yield* opencode.session.interrupt({ sessionID })
|
||||||
const other = yield* opencode.sessions.create({
|
const other = yield* opencode.session.create({
|
||||||
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
||||||
})
|
})
|
||||||
const missingSessionID = Session.ID.make(`ses_missing_${crypto.randomUUID()}`)
|
const missingSessionID = Session.ID.make(`ses_missing_${crypto.randomUUID()}`)
|
||||||
const missing = yield* Effect.all(
|
const missing = yield* Effect.all(
|
||||||
[
|
[
|
||||||
opencode.sessions.events({ sessionID: missingSessionID }).pipe(Stream.runHead, Effect.flip),
|
opencode.session.events({ sessionID: missingSessionID }).pipe(Stream.runHead, Effect.flip),
|
||||||
opencode.sessions.interrupt({ sessionID: missingSessionID }).pipe(Effect.flip),
|
opencode.session.interrupt({ sessionID: missingSessionID }).pipe(Effect.flip),
|
||||||
opencode.sessions.message({ sessionID: missingSessionID, messageID: modelMessage.id }).pipe(Effect.flip),
|
opencode.session.message({ sessionID: missingSessionID, messageID: modelMessage.id }).pipe(Effect.flip),
|
||||||
],
|
],
|
||||||
{ concurrency: "unbounded" },
|
{ concurrency: "unbounded" },
|
||||||
)
|
)
|
||||||
const missingMessage = yield* Effect.flip(
|
const missingMessage = yield* Effect.flip(
|
||||||
opencode.sessions.message({
|
opencode.session.message({
|
||||||
sessionID: other.id,
|
sessionID: other.id,
|
||||||
messageID: modelMessage.id,
|
messageID: modelMessage.id,
|
||||||
}),
|
}),
|
||||||
@@ -116,7 +116,7 @@ test("Location-owned runner events reach the ready global client", async () => {
|
|||||||
const opencode = yield* OpenCode.create()
|
const opencode = yield* OpenCode.create()
|
||||||
const connected = yield* Latch.make(false)
|
const connected = yield* Latch.make(false)
|
||||||
const prompted = yield* Deferred.make<OpenCodeEvent>()
|
const prompted = yield* Deferred.make<OpenCodeEvent>()
|
||||||
yield* opencode.events.subscribe().pipe(
|
yield* opencode.event.subscribe().pipe(
|
||||||
Stream.runForEach((event) =>
|
Stream.runForEach((event) =>
|
||||||
event.type === "server.connected"
|
event.type === "server.connected"
|
||||||
? connected.open
|
? connected.open
|
||||||
@@ -127,11 +127,11 @@ test("Location-owned runner events reach the ready global client", async () => {
|
|||||||
Effect.forkScoped,
|
Effect.forkScoped,
|
||||||
)
|
)
|
||||||
yield* connected.await
|
yield* connected.await
|
||||||
yield* opencode.sessions.create({
|
yield* opencode.session.create({
|
||||||
id: sessionID,
|
id: sessionID,
|
||||||
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
||||||
})
|
})
|
||||||
yield* opencode.sessions.prompt({ sessionID, prompt: Prompt.make({ text: "Observe this input" }) })
|
yield* opencode.session.prompt({ sessionID, prompt: Prompt.make({ text: "Observe this input" }) })
|
||||||
|
|
||||||
const event = yield* Deferred.await(prompted).pipe(Effect.timeout("4 seconds"))
|
const event = yield* Deferred.await(prompted).pipe(Effect.timeout("4 seconds"))
|
||||||
expect(event.durable).toEqual(expect.objectContaining({ aggregateID: sessionID, seq: expect.any(Number) }))
|
expect(event.durable).toEqual(expect.objectContaining({ aggregateID: sessionID, seq: expect.any(Number) }))
|
||||||
@@ -167,14 +167,14 @@ test("independent embedded hosts do not share live notifications", async () => {
|
|||||||
: Effect.void,
|
: Effect.void,
|
||||||
)
|
)
|
||||||
|
|
||||||
yield* first.events.subscribe().pipe(observe(firstReady, firstEvent), Effect.forkScoped)
|
yield* first.event.subscribe().pipe(observe(firstReady, firstEvent), Effect.forkScoped)
|
||||||
yield* second.events.subscribe().pipe(observe(secondReady, secondEvent), Effect.forkScoped)
|
yield* second.event.subscribe().pipe(observe(secondReady, secondEvent), Effect.forkScoped)
|
||||||
yield* Effect.all([firstReady.await, secondReady.await], { discard: true })
|
yield* Effect.all([firstReady.await, secondReady.await], { discard: true })
|
||||||
yield* first.sessions.create({
|
yield* first.session.create({
|
||||||
id: sessionID,
|
id: sessionID,
|
||||||
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
||||||
})
|
})
|
||||||
yield* first.sessions.switchAgent({ sessionID, agent: Agent.ID.make("plan") })
|
yield* first.session.switchAgent({ sessionID, agent: Agent.ID.make("plan") })
|
||||||
|
|
||||||
yield* firstEvent.await.pipe(Effect.timeout("2 seconds"))
|
yield* firstEvent.await.pipe(Effect.timeout("2 seconds"))
|
||||||
expect(Option.isNone(yield* secondEvent.await.pipe(Effect.timeoutOption("100 millis")))).toBe(true)
|
expect(Option.isNone(yield* secondEvent.await.pipe(Effect.timeoutOption("100 millis")))).toBe(true)
|
||||||
@@ -197,7 +197,7 @@ test("embedded client is available as a Layer service", async () => {
|
|||||||
const created = await Effect.runPromise(
|
const created = await Effect.runPromise(
|
||||||
Effect.gen(function* () {
|
Effect.gen(function* () {
|
||||||
const opencode = yield* OpenCode.Service
|
const opencode = yield* OpenCode.Service
|
||||||
return yield* opencode.sessions.create({
|
return yield* opencode.session.create({
|
||||||
id: sessionID,
|
id: sessionID,
|
||||||
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
location: Location.Ref.make({ directory: AbsolutePath.make(directory) }),
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user