Explorar el Código

chore: generate

opencode-agent[bot] hace 2 meses
padre
commit
30ec231aaf

+ 21 - 7
packages/cli/bin/lildax.cjs

@@ -88,8 +88,17 @@ const names = (() => {
         return false
       }
     })()
-    if (musl) return arch === "x64" ? (baseline ? [`${base}-baseline-musl`, `${base}-musl`, `${base}-baseline`, base] : [`${base}-musl`, `${base}-baseline-musl`, base, `${base}-baseline`]) : [`${base}-musl`, base]
-    return arch === "x64" ? (baseline ? [`${base}-baseline`, base, `${base}-baseline-musl`, `${base}-musl`] : [base, `${base}-baseline`, `${base}-musl`, `${base}-baseline-musl`]) : [base, `${base}-musl`]
+    if (musl)
+      return arch === "x64"
+        ? baseline
+          ? [`${base}-baseline-musl`, `${base}-musl`, `${base}-baseline`, base]
+          : [`${base}-musl`, `${base}-baseline-musl`, base, `${base}-baseline`]
+        : [`${base}-musl`, base]
+    return arch === "x64"
+      ? baseline
+        ? [`${base}-baseline`, base, `${base}-baseline-musl`, `${base}-musl`]
+        : [base, `${base}-baseline`, `${base}-musl`, `${base}-baseline-musl`]
+      : [base, `${base}-musl`]
   }
   return arch === "x64" ? (baseline ? [`${base}-baseline`, base] : [base, `${base}-baseline`]) : [base]
 })()
@@ -98,10 +107,11 @@ function findBinary(startDir) {
   let current = startDir
   for (;;) {
     const modules = path.join(current, "node_modules")
-    if (fs.existsSync(modules)) for (const name of names) {
-      const candidate = path.join(modules, name, "bin", binary)
-      if (fs.existsSync(candidate)) return candidate
-    }
+    if (fs.existsSync(modules))
+      for (const name of names) {
+        const candidate = path.join(modules, name, "bin", binary)
+        if (fs.existsSync(candidate)) return candidate
+      }
     const parent = path.dirname(current)
     if (parent === current) return
     current = parent
@@ -110,7 +120,11 @@ function findBinary(startDir) {
 
 const resolved = envPath || (fs.existsSync(cached) ? cached : findBinary(scriptDir))
 if (!resolved) {
-  console.error("It seems that your package manager failed to install the right lildax CLI package. Try manually installing " + names.map((name) => `"${name}"`).join(" or ") + " package")
+  console.error(
+    "It seems that your package manager failed to install the right lildax CLI package. Try manually installing " +
+      names.map((name) => `"${name}"`).join(" or ") +
+      " package",
+  )
   process.exit(1)
 }
 run(resolved)

+ 5 - 1
packages/cli/script/publish.ts

@@ -44,5 +44,9 @@ await Bun.file(`./dist/${pkg.name}/package.json`).write(
   ),
 )
 
-await Promise.all(Object.entries(binaries).map(([name, version]) => publish(`./dist/${name.replace("@opencode-ai/", "")}`, name, version)))
+await Promise.all(
+  Object.entries(binaries).map(([name, version]) =>
+    publish(`./dist/${name.replace("@opencode-ai/", "")}`, name, version),
+  ),
+)
 await publish(`./dist/${pkg.name}`, pkg.name, version)

+ 3 - 1
packages/cli/src/framework/runtime.ts

@@ -11,7 +11,9 @@ export type Input<Value> =
       : never
 
 type RuntimeHandler = (input: unknown) => Effect.Effect<void, unknown, Daemon.Service>
-type Loader<Node extends Spec.Any> = () => Promise<{ default: (input: Input<Node>) => Effect.Effect<void, any, Daemon.Service> }>
+type Loader<Node extends Spec.Any> = () => Promise<{
+  default: (input: Input<Node>) => Effect.Effect<void, any, Daemon.Service>
+}>
 type ProvidedCommand = Command.Command<string, unknown, unknown, unknown, Daemon.Service>
 
 export type Handlers<Node extends Spec.Any> = keyof Node["commands"] extends never

+ 3 - 5
packages/cli/src/services/daemon.ts

@@ -125,11 +125,9 @@ export const layer = Layer.effect(
     const register = Effect.fn("cli.daemon.register")(function* (address: HttpServer.Address) {
       const temp = file + ".tmp"
       yield* fs.makeDirectory(directory, { recursive: true })
-      yield* fs.writeFileString(
-        temp,
-        JSON.stringify({ url: HttpServer.formatAddress(address), pid: process.pid }),
-        { mode: 0o600 },
-      )
+      yield* fs.writeFileString(temp, JSON.stringify({ url: HttpServer.formatAddress(address), pid: process.pid }), {
+        mode: 0o600,
+      })
       yield* fs.rename(temp, file)
       // The metadata file represents this live listener, not persistent config.
       // Scope shutdown removes it when the server exits normally.

+ 3 - 1
packages/core/src/config/plugin/command.ts

@@ -22,7 +22,9 @@ export const Plugin = PluginV2.define({
     const documents = yield* Effect.forEach(yield* config.entries(), (entry) => {
       if (entry.type === "document") return Effect.succeed([{ commands: entry.info.commands }])
       return loadDirectory(fs, entry.path).pipe(
-        Effect.map((commands) => [{ commands: Object.fromEntries(commands.map((command) => [command.name, command.info])) }]),
+        Effect.map((commands) => [
+          { commands: Object.fromEntries(commands.map((command) => [command.name, command.info])) },
+        ]),
       )
     }).pipe(Effect.map((documents) => documents.flat()))
 

+ 6 - 2
packages/core/src/config/plugin/skill.ts

@@ -23,8 +23,12 @@ export const Plugin = PluginV2.define({
 
     yield* transform((editor) => {
       for (const directory of directories) {
-        editor.source(new SkillV2.DirectorySource({ type: "directory", path: AbsolutePath.make(path.join(directory, "skill")) }))
-        editor.source(new SkillV2.DirectorySource({ type: "directory", path: AbsolutePath.make(path.join(directory, "skills")) }))
+        editor.source(
+          new SkillV2.DirectorySource({ type: "directory", path: AbsolutePath.make(path.join(directory, "skill")) }),
+        )
+        editor.source(
+          new SkillV2.DirectorySource({ type: "directory", path: AbsolutePath.make(path.join(directory, "skills")) }),
+        )
       }
       for (const item of items) {
         if (URL.canParse(item) && /^(https?:)$/.test(new URL(item).protocol)) {

+ 3 - 1
packages/core/src/plugin/skill.ts

@@ -10,7 +10,9 @@ export const Plugin = PluginV2.define({
   effect: Effect.gen(function* () {
     const skill = yield* SkillV2.Service
     const transform = yield* skill.transform()
-    const content = yield* Effect.promise(() => Bun.file(new URL("./skill/customize-opencode.md", import.meta.url)).text())
+    const content = yield* Effect.promise(() =>
+      Bun.file(new URL("./skill/customize-opencode.md", import.meta.url)).text(),
+    )
 
     yield* transform((editor) => {
       editor.source(

+ 5 - 1
packages/core/src/skill.ts

@@ -37,7 +37,11 @@ export const Source = Schema.Union([DirectorySource, UrlSource, EmbeddedSource])
       return false
     },
     key: (source: DirectorySource | UrlSource | EmbeddedSource) =>
-      source.type === "directory" ? `directory:${source.path}` : source.type === "url" ? `url:${source.url}` : `embedded:${source.skill.name}`,
+      source.type === "directory"
+        ? `directory:${source.path}`
+        : source.type === "url"
+          ? `url:${source.url}`
+          : `embedded:${source.skill.name}`,
   })),
 )
 export type Source = typeof Source.Type

+ 5 - 5
packages/core/test/plugin/command.test.ts

@@ -12,10 +12,7 @@ const project = AbsolutePath.make("/repo")
 const it = testEffect(
   CommandV2.locationLayer.pipe(
     Layer.provide(
-      Layer.succeed(
-        Location.Service,
-        Location.Service.of(location({ directory }, { projectDirectory: project })),
-      ),
+      Layer.succeed(Location.Service, Location.Service.of(location({ directory }, { projectDirectory: project }))),
     ),
   ),
 )
@@ -26,7 +23,10 @@ describe("CommandPlugin.Plugin", () => {
       const command = yield* CommandV2.Service
       yield* CommandPlugin.Plugin.effect.pipe(
         Effect.provideService(CommandV2.Service, command),
-        Effect.provideService(Location.Service, Location.Service.of(location({ directory }, { projectDirectory: project }))),
+        Effect.provideService(
+          Location.Service,
+          Location.Service.of(location({ directory }, { projectDirectory: project })),
+        ),
       )
 
       expect(yield* command.get("init")).toMatchObject({

+ 2 - 8
packages/opencode/src/provider/provider.ts

@@ -1017,20 +1017,14 @@ export type Error = ModelNotFoundError | InitError | NoProvidersError | NoModels
 export interface Interface {
   readonly list: () => Effect.Effect<Record<ProviderV2.ID, Info>>
   readonly getProvider: (providerID: ProviderV2.ID) => Effect.Effect<Info>
-  readonly getModel: (
-    providerID: ProviderV2.ID,
-    modelID: ModelV2.ID,
-  ) => Effect.Effect<Model, ModelNotFoundError>
+  readonly getModel: (providerID: ProviderV2.ID, modelID: ModelV2.ID) => Effect.Effect<Model, ModelNotFoundError>
   readonly getLanguage: (model: Model) => Effect.Effect<LanguageModelV3, ModelNotFoundError>
   readonly closest: (
     providerID: ProviderV2.ID,
     query: string[],
   ) => Effect.Effect<{ providerID: ProviderV2.ID; modelID: string } | undefined>
   readonly getSmallModel: (providerID: ProviderV2.ID) => Effect.Effect<Model | undefined>
-  readonly defaultModel: () => Effect.Effect<
-    { providerID: ProviderV2.ID; modelID: ModelV2.ID },
-    DefaultModelError
-  >
+  readonly defaultModel: () => Effect.Effect<{ providerID: ProviderV2.ID; modelID: ModelV2.ID }, DefaultModelError>
 }
 
 interface State {

+ 9 - 1
packages/opencode/src/server/routes/instance/httpapi/server.ts

@@ -192,7 +192,15 @@ type RouteRequirements =
 export function createRoutes(
   corsOptions?: CorsOptions,
 ): Layer.Layer<never, EffectConfig.ConfigError, RouteRequirements> {
-  return Layer.mergeAll(rootApiRoutes, eventApiRoutes, ptyConnectApiRoutes, instanceRoutes, v2Routes, docRoute, uiRoute).pipe(
+  return Layer.mergeAll(
+    rootApiRoutes,
+    eventApiRoutes,
+    ptyConnectApiRoutes,
+    instanceRoutes,
+    v2Routes,
+    docRoute,
+    uiRoute,
+  ).pipe(
     Layer.provide([
       errorLayer,
       compressionLayer,

+ 16 - 31
packages/opencode/src/session/session.ts

@@ -574,10 +574,7 @@ export const layer: Layer.Layer<
       }
       log.info("created", result)
 
-      yield* events.publish(
-        SessionV1.Event.Created,
-        { sessionID: result.id, info: result },
-      )
+      yield* events.publish(SessionV1.Event.Created, { sessionID: result.id, info: result })
 
       return result
     })
@@ -664,10 +661,7 @@ export const layer: Layer.Layer<
           yield* remove(child.id)
         }
 
-        yield* events.publish(
-          SessionV1.Event.Deleted,
-          { sessionID, info: session },
-        )
+        yield* events.publish(SessionV1.Event.Deleted, { sessionID, info: session })
         yield* events.remove(sessionID)
       } catch (e) {
         log.error(e)
@@ -682,14 +676,11 @@ export const layer: Layer.Layer<
 
     const updatePart = <T extends SessionV1.Part>(part: T): Effect.Effect<T> =>
       Effect.gen(function* () {
-        yield* events.publish(
-          SessionV1.Event.PartUpdated,
-          {
-            sessionID: part.sessionID,
-            part: structuredClone(part),
-            time: Date.now(),
-          },
-        )
+        yield* events.publish(SessionV1.Event.PartUpdated, {
+          sessionID: part.sessionID,
+          part: structuredClone(part),
+          time: Date.now(),
+        })
         return part
       }).pipe(Effect.withSpan("Session.updatePart"))
 
@@ -892,13 +883,10 @@ export const layer: Layer.Layer<
       sessionID: SessionID
       messageID: MessageID
     }) {
-      yield* events.publish(
-        SessionV1.Event.MessageRemoved,
-        {
-          sessionID: input.sessionID,
-          messageID: input.messageID,
-        },
-      )
+      yield* events.publish(SessionV1.Event.MessageRemoved, {
+        sessionID: input.sessionID,
+        messageID: input.messageID,
+      })
       return input.messageID
     })
 
@@ -907,14 +895,11 @@ export const layer: Layer.Layer<
       messageID: MessageID
       partID: PartID
     }) {
-      yield* events.publish(
-        SessionV1.Event.PartRemoved,
-        {
-          sessionID: input.sessionID,
-          messageID: input.messageID,
-          partID: input.partID,
-        },
-      )
+      yield* events.publish(SessionV1.Event.PartRemoved, {
+        sessionID: input.sessionID,
+        messageID: input.messageID,
+        partID: input.partID,
+      })
       return input.partID
     })
 

+ 2 - 8
packages/opencode/test/provider/provider.test.ts

@@ -980,14 +980,8 @@ it.instance(
 it.instance("getModel returns consistent results", () =>
   Effect.gen(function* () {
     yield* set("ANTHROPIC_API_KEY", "test-api-key")
-    const model1 = yield* Provider.use.getModel(
-      ProviderV2.ID.anthropic,
-      ModelV2.ID.make("claude-sonnet-4-20250514"),
-    )
-    const model2 = yield* Provider.use.getModel(
-      ProviderV2.ID.anthropic,
-      ModelV2.ID.make("claude-sonnet-4-20250514"),
-    )
+    const model1 = yield* Provider.use.getModel(ProviderV2.ID.anthropic, ModelV2.ID.make("claude-sonnet-4-20250514"))
+    const model2 = yield* Provider.use.getModel(ProviderV2.ID.anthropic, ModelV2.ID.make("claude-sonnet-4-20250514"))
     expect(model1.providerID).toEqual(model2.providerID)
     expect(model1.id).toEqual(model2.id)
     expect(model1).toEqual(model2)

+ 2 - 1
packages/opencode/test/server/httpapi-session.test.ts

@@ -457,7 +457,8 @@ describe("session HttpApi", () => {
           })}`,
           { headers },
         )
-        const sessionCursor = (yield* json<{ data: Session.Info[]; cursor: { next?: string } }>(sessionPage)).cursor.next
+        const sessionCursor = (yield* json<{ data: Session.Info[]; cursor: { next?: string } }>(sessionPage)).cursor
+          .next
         expect(sessionCursor).toBeTruthy()
         expect(JSON.parse(Buffer.from(sessionCursor!, "base64url").toString("utf8"))).toMatchObject({
           order: "asc",

+ 4 - 1
packages/opencode/test/server/httpapi-v2-location.test.ts

@@ -57,7 +57,10 @@ describe("v2 location HttpApi", () => {
     for (const route of ["/api/command", "/api/skill"]) {
       const response = await request(route, tmp.path)
       expect(response.status).toBe(200)
-      const body = (await response.json()) as { location: { directory: string; project: { id: string } }; data: unknown }
+      const body = (await response.json()) as {
+        location: { directory: string; project: { id: string } }
+        data: unknown
+      }
       expect(body.data).toBeArray()
       expect(body.location.directory).toBe(tmp.path)
       expect(body.location.project.id).toBeTruthy()

+ 1 - 4
packages/opencode/test/session/llm.test.ts

@@ -1671,10 +1671,7 @@ describe("session.llm.stream", () => {
         ]
         const request = waitRequest("/messages", createEventResponse(chunks))
 
-        const resolved = yield* Provider.use.getModel(
-          ProviderV2.ID.make("anthropic"),
-          ModelV2.ID.make(model.id),
-        )
+        const resolved = yield* Provider.use.getModel(ProviderV2.ID.make("anthropic"), ModelV2.ID.make(model.id))
         const sessionID = SessionID.make("session-test-anthropic-tools")
         const agent = {
           name: "test",

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 838 - 608
packages/sdk/openapi.json


+ 8 - 6
packages/server/src/handlers/v2/event.ts

@@ -34,13 +34,15 @@ export const eventHandlers = HttpApiBuilder.group(V2Api, "v2.event", (handlers)
         return HttpServerResponse.stream(
           Stream.make(connected).pipe(
             Stream.concat(
-              events.all().pipe(
-                Stream.filter(
-                  (event) =>
-                    event.location?.directory === location.directory &&
-                    event.location.workspaceID === location.workspaceID,
+              events
+                .all()
+                .pipe(
+                  Stream.filter(
+                    (event) =>
+                      event.location?.directory === location.directory &&
+                      event.location.workspaceID === location.workspaceID,
+                  ),
                 ),
-              ),
             ),
             Stream.map(eventData),
             Stream.pipeThroughChannel(Sse.encode()),

+ 16 - 15
packages/server/src/routes.ts

@@ -14,23 +14,24 @@ import { schemaErrorLayer } from "./middleware/schema-error"
 
 export function createRoutes(password?: string) {
   return HttpApiBuilder.layer(V2Api).pipe(
-  Layer.provide(v2Handlers),
-  Layer.provide(v2AuthorizationLayer),
-  Layer.provide(schemaErrorLayer),
-  Layer.provide(
-    password
-      ? ServerAuth.Config.layer({ username: "opencode", password: Option.some(password) })
-      : ServerAuth.Config.defaultLayer,
-  ),
-  Layer.provide(LocationServiceMap.layer),
-  Layer.provide(PermissionSaved.layer),
-  Layer.provide(SessionV2.defaultLayer),
-  Layer.provide(Database.defaultLayer),
-  Layer.provide(EventV2.defaultLayer),
-  Layer.provide(FetchHttpClient.layer),
+    Layer.provide(v2Handlers),
+    Layer.provide(v2AuthorizationLayer),
+    Layer.provide(schemaErrorLayer),
+    Layer.provide(
+      password
+        ? ServerAuth.Config.layer({ username: "opencode", password: Option.some(password) })
+        : ServerAuth.Config.defaultLayer,
+    ),
+    Layer.provide(LocationServiceMap.layer),
+    Layer.provide(PermissionSaved.layer),
+    Layer.provide(SessionV2.defaultLayer),
+    Layer.provide(Database.defaultLayer),
+    Layer.provide(EventV2.defaultLayer),
+    Layer.provide(FetchHttpClient.layer),
   )
 }
 
 export const routes = createRoutes()
 
-export const webHandler = () => HttpRouter.toWebHandler(routes.pipe(Layer.provide(HttpServer.layerServices)), { disableLogger: true })
+export const webHandler = () =>
+  HttpRouter.toWebHandler(routes.pipe(Layer.provide(HttpServer.layerServices)), { disableLogger: true })

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio