| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import { Effect, Layer, Stream } from "effect"
- import { HttpClient, HttpClientResponse } from "effect/unstable/http"
- import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
- import { LayerNode } from "@opencode-ai/util/effect/layer-node"
- import { Credential } from "@opencode-ai/core/credential"
- import { Config } from "@opencode-ai/core/config"
- import { Bus } from "@opencode-ai/core/bus"
- import { Form } from "@opencode-ai/core/form"
- import { Integration } from "@opencode-ai/core/integration"
- import { WebSearch } from "@opencode-ai/core/websearch"
- import { testEffect } from "../lib/effect"
- interface WebSearchRequest {
- readonly url: string
- readonly headers: Record<string, string>
- readonly body: unknown
- }
- export const requests: WebSearchRequest[] = []
- let responseBody = ""
- export function resetWebSearchFixture(body: string) {
- requests.length = 0
- responseBody = body
- }
- const http = Layer.succeed(
- HttpClient.HttpClient,
- HttpClient.make((request) =>
- Effect.sync(() => {
- if (request.body._tag !== "Uint8Array") throw new Error(`Unexpected request body: ${request.body._tag}`)
- requests.push({
- url: request.url,
- headers: request.headers,
- body: JSON.parse(new TextDecoder().decode(request.body.body)),
- })
- return HttpClientResponse.fromWeb(request, new Response(responseBody, { status: 200 }))
- }),
- ),
- )
- export const webSearchIntegrationTest = testEffect(
- Layer.merge(
- AppNodeBuilder.build(
- LayerNode.group([Integration.node, Credential.node, Bus.node, Form.node, WebSearch.node]),
- [
- [
- Config.node,
- Config.testLayer(),
- ],
- ],
- ),
- http,
- ),
- )
|