@kilocode/protocol 0.0.0-stage → 0.0.0-v2-9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.ts +58 -0
- package/dist/api.js +77 -0
- package/dist/client.d.ts +63 -0
- package/dist/client.js +55 -0
- package/dist/errors.d.ts +193 -0
- package/dist/errors.js +152 -0
- package/dist/groups/agent.d.ts +225 -0
- package/dist/groups/agent.js +30 -0
- package/dist/groups/command.d.ts +15 -0
- package/dist/groups/command.js +20 -0
- package/dist/groups/config.d.ts +14 -0
- package/dist/groups/config.js +32 -0
- package/dist/groups/credential.d.ts +93 -0
- package/dist/groups/credential.js +50 -0
- package/dist/groups/debug.d.ts +22 -0
- package/dist/groups/debug.js +49 -0
- package/dist/groups/event.d.ts +14853 -0
- package/dist/groups/event.js +51 -0
- package/dist/groups/form.d.ts +138 -0
- package/dist/groups/form.js +18 -0
- package/dist/groups/fs.d.ts +48 -0
- package/dist/groups/fs.js +73 -0
- package/dist/groups/generate.d.ts +33 -0
- package/dist/groups/generate.js +23 -0
- package/dist/groups/integration.d.ts +1724 -0
- package/dist/groups/integration.js +169 -0
- package/dist/groups/location.d.ts +23 -0
- package/dist/groups/location.js +45 -0
- package/dist/groups/mcp.d.ts +103 -0
- package/dist/groups/mcp.js +114 -0
- package/dist/groups/message.d.ts +1416 -0
- package/dist/groups/message.js +77 -0
- package/dist/groups/migration.d.ts +28 -0
- package/dist/groups/migration.js +21 -0
- package/dist/groups/model.d.ts +399 -0
- package/dist/groups/model.js +33 -0
- package/dist/groups/permission.d.ts +175 -0
- package/dist/groups/permission.js +110 -0
- package/dist/groups/persistent-pty.d.ts +242 -0
- package/dist/groups/persistent-pty.js +92 -0
- package/dist/groups/plugin.d.ts +86 -0
- package/dist/groups/plugin.js +45 -0
- package/dist/groups/project.d.ts +83 -0
- package/dist/groups/project.js +33 -0
- package/dist/groups/provider.d.ts +231 -0
- package/dist/groups/provider.js +34 -0
- package/dist/groups/pty.d.ts +151 -0
- package/dist/groups/pty.js +112 -0
- package/dist/groups/reference.d.ts +25 -0
- package/dist/groups/reference.js +33 -0
- package/dist/groups/rpc.d.ts +21 -0
- package/dist/groups/rpc.js +24 -0
- package/dist/groups/server.d.ts +44 -0
- package/dist/groups/server.js +53 -0
- package/dist/groups/session.d.ts +11380 -0
- package/dist/groups/session.js +611 -0
- package/dist/groups/shell.d.ts +125 -0
- package/dist/groups/shell.js +64 -0
- package/dist/groups/skill.d.ts +19 -0
- package/dist/groups/skill.js +20 -0
- package/dist/groups/vcs.d.ts +87 -0
- package/dist/groups/vcs.js +93 -0
- package/dist/groups/voice.d.ts +93 -0
- package/dist/groups/voice.js +89 -0
- package/dist/groups/websearch.d.ts +29 -0
- package/dist/groups/websearch.js +34 -0
- package/dist/groups/worktree.d.ts +41 -0
- package/dist/groups/worktree.js +52 -0
- package/dist/middleware/authorization.d.ts +13 -0
- package/dist/middleware/authorization.js +6 -0
- package/dist/middleware/schema-error.d.ts +13 -0
- package/dist/middleware/schema-error.js +4 -0
- package/dist/simulation.d.ts +1830 -0
- package/dist/simulation.js +497 -0
- package/package.json +45 -4
- package/README.md +0 -3
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "effect/http-api";
|
|
3
|
+
import { InvalidRequestError, ServiceUnavailableError } from "../errors.js";
|
|
4
|
+
export declare const PluginGroup: HttpApiGroup.HttpApiGroup<"server.plugin", HttpApiEndpoint.HttpApiEndpoint<"plugin.check", "POST", "/api/plugin/check", never, Schema.toCodecStringTree<Schema.Struct<{
|
|
5
|
+
readonly location: Schema.optional<Schema.Struct<{
|
|
6
|
+
readonly directory: Schema.optional<Schema.String>;
|
|
7
|
+
}>>;
|
|
8
|
+
}>>, Schema.toCodecJson<Schema.Struct<{
|
|
9
|
+
readonly target: Schema.optional<Schema.String>;
|
|
10
|
+
}>>, never, Schema.toCodecJson<Schema.Struct<{
|
|
11
|
+
readonly location: Schema.Struct<{
|
|
12
|
+
readonly directory: Schema.brand<Schema.String, "AbsolutePath">;
|
|
13
|
+
}>;
|
|
14
|
+
readonly data: Schema.$Array<Schema.Struct<{
|
|
15
|
+
readonly id: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Plugin.ID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Plugin.ID">>, never, never>;
|
|
16
|
+
readonly source: Schema.Union<readonly [Schema.Struct<{
|
|
17
|
+
readonly type: Schema.Literal<"builtin">;
|
|
18
|
+
}>, Schema.Struct<{
|
|
19
|
+
readonly type: Schema.Literal<"package">;
|
|
20
|
+
readonly target: Schema.String;
|
|
21
|
+
readonly version: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
22
|
+
readonly outdated: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
23
|
+
readonly updating: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
24
|
+
}>, Schema.Struct<{
|
|
25
|
+
readonly type: Schema.Literal<"local">;
|
|
26
|
+
readonly path: Schema.String;
|
|
27
|
+
}>, Schema.Struct<{
|
|
28
|
+
readonly type: Schema.Literal<"sdk">;
|
|
29
|
+
}>]>;
|
|
30
|
+
readonly features: Schema.Struct<{
|
|
31
|
+
readonly server: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
32
|
+
readonly tui: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
33
|
+
readonly rpc: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
34
|
+
}>;
|
|
35
|
+
readonly state: Schema.Union<readonly [Schema.Struct<{
|
|
36
|
+
readonly status: Schema.Literal<"active">;
|
|
37
|
+
}>, Schema.Struct<{
|
|
38
|
+
readonly status: Schema.Literal<"failed">;
|
|
39
|
+
readonly error: Schema.String;
|
|
40
|
+
readonly ref: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
41
|
+
}>]>;
|
|
42
|
+
}>>;
|
|
43
|
+
}>>, Schema.toCodecJson<typeof InvalidRequestError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"plugin.list", "GET", "/api/plugin", never, Schema.toCodecStringTree<Schema.Struct<{
|
|
44
|
+
readonly location: Schema.optional<Schema.Struct<{
|
|
45
|
+
readonly directory: Schema.optional<Schema.String>;
|
|
46
|
+
}>>;
|
|
47
|
+
}>>, never, never, Schema.toCodecJson<Schema.Struct<{
|
|
48
|
+
readonly location: Schema.Struct<{
|
|
49
|
+
readonly directory: Schema.brand<Schema.String, "AbsolutePath">;
|
|
50
|
+
}>;
|
|
51
|
+
readonly data: Schema.$Array<Schema.Struct<{
|
|
52
|
+
readonly id: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Plugin.ID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Plugin.ID">>, never, never>;
|
|
53
|
+
readonly source: Schema.Union<readonly [Schema.Struct<{
|
|
54
|
+
readonly type: Schema.Literal<"builtin">;
|
|
55
|
+
}>, Schema.Struct<{
|
|
56
|
+
readonly type: Schema.Literal<"package">;
|
|
57
|
+
readonly target: Schema.String;
|
|
58
|
+
readonly version: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
59
|
+
readonly outdated: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
60
|
+
readonly updating: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
61
|
+
}>, Schema.Struct<{
|
|
62
|
+
readonly type: Schema.Literal<"local">;
|
|
63
|
+
readonly path: Schema.String;
|
|
64
|
+
}>, Schema.Struct<{
|
|
65
|
+
readonly type: Schema.Literal<"sdk">;
|
|
66
|
+
}>]>;
|
|
67
|
+
readonly features: Schema.Struct<{
|
|
68
|
+
readonly server: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
69
|
+
readonly tui: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
70
|
+
readonly rpc: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literal<true>>>, Schema.optionalKey<Schema.Literal<true>>, never, never>;
|
|
71
|
+
}>;
|
|
72
|
+
readonly state: Schema.Union<readonly [Schema.Struct<{
|
|
73
|
+
readonly status: Schema.Literal<"active">;
|
|
74
|
+
}>, Schema.Struct<{
|
|
75
|
+
readonly status: Schema.Literal<"failed">;
|
|
76
|
+
readonly error: Schema.String;
|
|
77
|
+
readonly ref: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
78
|
+
}>]>;
|
|
79
|
+
}>>;
|
|
80
|
+
}>>, never, never, never> | HttpApiEndpoint.HttpApiEndpoint<"plugin.update", "POST", "/api/plugin/update", never, Schema.toCodecStringTree<Schema.Struct<{
|
|
81
|
+
readonly location: Schema.optional<Schema.Struct<{
|
|
82
|
+
readonly directory: Schema.optional<Schema.String>;
|
|
83
|
+
}>>;
|
|
84
|
+
}>>, Schema.toCodecJson<Schema.Struct<{
|
|
85
|
+
readonly targets: Schema.$Array<Schema.String>;
|
|
86
|
+
}>>, never, Schema.toCodecJson<HttpApiSchema.NoContent>, Schema.toCodecJson<typeof InvalidRequestError | typeof ServiceUnavailableError>, never, never>, false>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Location } from "@opencode/schema/location";
|
|
2
|
+
import { Plugin } from "@opencode/schema/plugin";
|
|
3
|
+
import { Schema } from "effect";
|
|
4
|
+
import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/http-api";
|
|
5
|
+
import { InvalidRequestError, ServiceUnavailableError } from "../errors.js";
|
|
6
|
+
import { LocationQuery, locationQueryOpenApi } from "./location.js";
|
|
7
|
+
export const PluginGroup = HttpApiGroup.make("server.plugin")
|
|
8
|
+
.add(HttpApiEndpoint.get("plugin.list", "/api/plugin", {
|
|
9
|
+
query: LocationQuery,
|
|
10
|
+
success: Location.response(Schema.Array(Plugin.Info)),
|
|
11
|
+
})
|
|
12
|
+
.annotateMerge(locationQueryOpenApi)
|
|
13
|
+
.annotateMerge(OpenApi.annotations({
|
|
14
|
+
identifier: "plugin.list",
|
|
15
|
+
summary: "List plugins",
|
|
16
|
+
description: "Retrieve enabled server plugins and their current status.",
|
|
17
|
+
})))
|
|
18
|
+
.add(HttpApiEndpoint.post("plugin.check", "/api/plugin/check", {
|
|
19
|
+
query: LocationQuery,
|
|
20
|
+
payload: Schema.Struct({ target: Schema.String.pipe(Schema.optional) }),
|
|
21
|
+
success: Location.response(Schema.Array(Plugin.Info)),
|
|
22
|
+
error: InvalidRequestError,
|
|
23
|
+
})
|
|
24
|
+
.annotateMerge(locationQueryOpenApi)
|
|
25
|
+
.annotateMerge(OpenApi.annotations({
|
|
26
|
+
identifier: "plugin.check",
|
|
27
|
+
summary: "Check plugin updates",
|
|
28
|
+
description: "Check one or all package plugins for available updates.",
|
|
29
|
+
})))
|
|
30
|
+
.add(HttpApiEndpoint.post("plugin.update", "/api/plugin/update", {
|
|
31
|
+
query: LocationQuery,
|
|
32
|
+
payload: Schema.Struct({ targets: Schema.Array(Schema.String) }),
|
|
33
|
+
success: HttpApiSchema.NoContent,
|
|
34
|
+
error: [InvalidRequestError, ServiceUnavailableError],
|
|
35
|
+
})
|
|
36
|
+
.annotateMerge(locationQueryOpenApi)
|
|
37
|
+
.annotateMerge(OpenApi.annotations({
|
|
38
|
+
identifier: "plugin.update",
|
|
39
|
+
summary: "Update plugins",
|
|
40
|
+
description: "Update package plugins concurrently and notify active locations to reload them. Responds once every update has finished; fails when any update fails.",
|
|
41
|
+
})))
|
|
42
|
+
.annotateMerge(OpenApi.annotations({
|
|
43
|
+
title: "plugin",
|
|
44
|
+
description: "Experimental plugin routes.",
|
|
45
|
+
}));
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { HttpApiEndpoint, HttpApiGroup } from "effect/http-api";
|
|
3
|
+
import { ProjectNotFoundError } from "../errors.js";
|
|
4
|
+
export declare const ProjectGroup: HttpApiGroup.HttpApiGroup<"server.project", HttpApiEndpoint.HttpApiEndpoint<"project.list", "GET", "/api/project", never, Schema.toCodecStringTree<Schema.Struct<{
|
|
5
|
+
readonly archived: Schema.optional<Schema.decodeTo<Schema.Boolean, Schema.Literals<readonly ["true", "false"]>, never, never>>;
|
|
6
|
+
}>>, never, never, Schema.toCodecJson<Schema.$Array<Schema.Struct<{
|
|
7
|
+
readonly id: Schema.brand<Schema.String, "Project.ID"> & {
|
|
8
|
+
global: string & import("effect/Brand").Brand<"Project.ID">;
|
|
9
|
+
};
|
|
10
|
+
readonly canonical: Schema.brand<Schema.String, "AbsolutePath">;
|
|
11
|
+
readonly vcs: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
12
|
+
readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
13
|
+
readonly icon: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
|
|
14
|
+
readonly url: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
15
|
+
readonly override: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
16
|
+
readonly color: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
17
|
+
}>>>, Schema.optionalKey<Schema.Struct<{
|
|
18
|
+
readonly url: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
19
|
+
readonly override: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
20
|
+
readonly color: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
21
|
+
}>>, never, never>;
|
|
22
|
+
readonly commands: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
|
|
23
|
+
readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
24
|
+
}>>>, Schema.optionalKey<Schema.Struct<{
|
|
25
|
+
readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
26
|
+
}>>, never, never>;
|
|
27
|
+
readonly time: Schema.Struct<{
|
|
28
|
+
readonly created: Schema.Int;
|
|
29
|
+
readonly updated: Schema.Int;
|
|
30
|
+
readonly active: Schema.Int;
|
|
31
|
+
readonly archived: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
|
|
32
|
+
}>;
|
|
33
|
+
readonly sandboxes: Schema.$Array<Schema.String>;
|
|
34
|
+
}>>>, never, never, never> | HttpApiEndpoint.HttpApiEndpoint<"project.update", "PATCH", "/api/project/:projectID", Schema.toCodecStringTree<Schema.Struct<{
|
|
35
|
+
projectID: Schema.brand<Schema.String, "Project.ID"> & {
|
|
36
|
+
global: string & import("effect/Brand").Brand<"Project.ID">;
|
|
37
|
+
};
|
|
38
|
+
}>>, never, Schema.toCodecJson<Schema.Struct<{
|
|
39
|
+
readonly canonical: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "AbsolutePath">>>, Schema.optionalKey<Schema.brand<Schema.String, "AbsolutePath">>, never, never>;
|
|
40
|
+
readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
41
|
+
readonly icon: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
|
|
42
|
+
readonly url: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
43
|
+
readonly override: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
44
|
+
readonly color: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
45
|
+
}>>>, Schema.optionalKey<Schema.Struct<{
|
|
46
|
+
readonly url: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
47
|
+
readonly override: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
48
|
+
readonly color: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
49
|
+
}>>, never, never>;
|
|
50
|
+
readonly commands: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
|
|
51
|
+
readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
52
|
+
}>>>, Schema.optionalKey<Schema.Struct<{
|
|
53
|
+
readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
54
|
+
}>>, never, never>;
|
|
55
|
+
}>>, never, Schema.toCodecJson<Schema.Struct<{
|
|
56
|
+
readonly id: Schema.brand<Schema.String, "Project.ID"> & {
|
|
57
|
+
global: string & import("effect/Brand").Brand<"Project.ID">;
|
|
58
|
+
};
|
|
59
|
+
readonly canonical: Schema.brand<Schema.String, "AbsolutePath">;
|
|
60
|
+
readonly vcs: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
61
|
+
readonly name: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
62
|
+
readonly icon: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
|
|
63
|
+
readonly url: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
64
|
+
readonly override: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
65
|
+
readonly color: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
66
|
+
}>>>, Schema.optionalKey<Schema.Struct<{
|
|
67
|
+
readonly url: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
68
|
+
readonly override: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
69
|
+
readonly color: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
70
|
+
}>>, never, never>;
|
|
71
|
+
readonly commands: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
|
|
72
|
+
readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
73
|
+
}>>>, Schema.optionalKey<Schema.Struct<{
|
|
74
|
+
readonly start: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
|
|
75
|
+
}>>, never, never>;
|
|
76
|
+
readonly time: Schema.Struct<{
|
|
77
|
+
readonly created: Schema.Int;
|
|
78
|
+
readonly updated: Schema.Int;
|
|
79
|
+
readonly active: Schema.Int;
|
|
80
|
+
readonly archived: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
|
|
81
|
+
}>;
|
|
82
|
+
readonly sandboxes: Schema.$Array<Schema.String>;
|
|
83
|
+
}>>, Schema.toCodecJson<typeof ProjectNotFoundError>, never, never>, false>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Project } from "@opencode/schema/project";
|
|
2
|
+
import { Schema, SchemaGetter, Struct } from "effect";
|
|
3
|
+
import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/http-api";
|
|
4
|
+
import { ProjectNotFoundError } from "../errors.js";
|
|
5
|
+
const root = "/api/project";
|
|
6
|
+
const UpdatePayload = Schema.Struct(Struct.omit(Project.UpdateInput.fields, ["projectID"]));
|
|
7
|
+
const BooleanFromString = Schema.Literals(["true", "false"]).pipe(Schema.decodeTo(Schema.Boolean, {
|
|
8
|
+
decode: SchemaGetter.transform((value) => value === "true"),
|
|
9
|
+
encode: SchemaGetter.transform((value) => (value ? "true" : "false")),
|
|
10
|
+
}));
|
|
11
|
+
export const ProjectGroup = HttpApiGroup.make("server.project")
|
|
12
|
+
.add(HttpApiEndpoint.get("project.list", root, {
|
|
13
|
+
query: Schema.Struct({ archived: BooleanFromString.pipe(Schema.optional) }),
|
|
14
|
+
success: Schema.Array(Project.Info),
|
|
15
|
+
}).annotateMerge(OpenApi.annotations({
|
|
16
|
+
identifier: "project.list",
|
|
17
|
+
summary: "List projects",
|
|
18
|
+
description: "List known projects. Archived projects are excluded unless archived=true.",
|
|
19
|
+
})))
|
|
20
|
+
.add(HttpApiEndpoint.patch("project.update", `${root}/:projectID`, {
|
|
21
|
+
params: { projectID: Project.ID },
|
|
22
|
+
payload: UpdatePayload,
|
|
23
|
+
success: Project.Info,
|
|
24
|
+
error: ProjectNotFoundError,
|
|
25
|
+
}).annotateMerge(OpenApi.annotations({
|
|
26
|
+
identifier: "project.update",
|
|
27
|
+
summary: "Update project",
|
|
28
|
+
description: "Update the project canonical directory, display metadata, and workspace commands.",
|
|
29
|
+
})))
|
|
30
|
+
.annotateMerge(OpenApi.annotations({
|
|
31
|
+
title: "project",
|
|
32
|
+
description: "Project routes.",
|
|
33
|
+
}));
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { Provider } from "@opencode/schema/provider";
|
|
2
|
+
import { Schema } from "effect";
|
|
3
|
+
import { HttpApiEndpoint, HttpApiGroup } from "effect/http-api";
|
|
4
|
+
import { ProviderNotFoundError, ServiceUnavailableError } from "../errors.js";
|
|
5
|
+
export declare const ProviderGroup: HttpApiGroup.HttpApiGroup<"server.provider", HttpApiEndpoint.HttpApiEndpoint<"provider.get", "GET", "/api/provider/:providerID", Schema.toCodecStringTree<Schema.Struct<{
|
|
6
|
+
providerID: Schema.brand<Schema.String, "Provider.ID"> & {
|
|
7
|
+
opencode: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
8
|
+
anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
9
|
+
openai: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
10
|
+
google: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
11
|
+
googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
12
|
+
githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
13
|
+
amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
14
|
+
azure: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
15
|
+
openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
16
|
+
mistral: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
17
|
+
gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
18
|
+
};
|
|
19
|
+
}>>, Schema.toCodecStringTree<Schema.Struct<{
|
|
20
|
+
readonly location: Schema.optional<Schema.Struct<{
|
|
21
|
+
readonly directory: Schema.optional<Schema.String>;
|
|
22
|
+
}>>;
|
|
23
|
+
}>>, never, never, Schema.toCodecJson<Schema.Struct<{
|
|
24
|
+
readonly location: Schema.Struct<{
|
|
25
|
+
readonly directory: Schema.brand<Schema.String, "AbsolutePath">;
|
|
26
|
+
}>;
|
|
27
|
+
readonly data: Schema.Struct<{
|
|
28
|
+
readonly settings: Schema.decodeTo<Schema.optional<Schema.toType<Schema.StructWithRest<Schema.Struct<{
|
|
29
|
+
readonly timeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
30
|
+
readonly headerTimeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
31
|
+
readonly chunkTimeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
32
|
+
readonly compaction: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Struct<{
|
|
33
|
+
readonly type: Schema.Literal<"summary">;
|
|
34
|
+
}>, Schema.Struct<{
|
|
35
|
+
readonly type: Schema.Literal<"native">;
|
|
36
|
+
}>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Struct<{
|
|
37
|
+
readonly type: Schema.Literal<"summary">;
|
|
38
|
+
}>, Schema.Struct<{
|
|
39
|
+
readonly type: Schema.Literal<"native">;
|
|
40
|
+
}>]>>, never, never>;
|
|
41
|
+
readonly transport: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["http", "websocket"]>>>, Schema.optionalKey<Schema.Literals<readonly ["http", "websocket"]>>, never, never>;
|
|
42
|
+
readonly encoding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["zstd", "gzip", "none"]>>>, Schema.optionalKey<Schema.Literals<readonly ["zstd", "gzip", "none"]>>, never, never>;
|
|
43
|
+
}>, readonly [Schema.$Record<Schema.String, Schema.Any>]>>>, Schema.optionalKey<Schema.StructWithRest<Schema.Struct<{
|
|
44
|
+
readonly timeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
45
|
+
readonly headerTimeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
46
|
+
readonly chunkTimeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
47
|
+
readonly compaction: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Struct<{
|
|
48
|
+
readonly type: Schema.Literal<"summary">;
|
|
49
|
+
}>, Schema.Struct<{
|
|
50
|
+
readonly type: Schema.Literal<"native">;
|
|
51
|
+
}>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Struct<{
|
|
52
|
+
readonly type: Schema.Literal<"summary">;
|
|
53
|
+
}>, Schema.Struct<{
|
|
54
|
+
readonly type: Schema.Literal<"native">;
|
|
55
|
+
}>]>>, never, never>;
|
|
56
|
+
readonly transport: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["http", "websocket"]>>>, Schema.optionalKey<Schema.Literals<readonly ["http", "websocket"]>>, never, never>;
|
|
57
|
+
readonly encoding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["zstd", "gzip", "none"]>>>, Schema.optionalKey<Schema.Literals<readonly ["zstd", "gzip", "none"]>>, never, never>;
|
|
58
|
+
}>, readonly [Schema.$Record<Schema.String, Schema.Any>]>>, never, never>;
|
|
59
|
+
readonly headers: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.String>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.String>>, never, never>;
|
|
60
|
+
readonly body: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Any>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Any>>, never, never>;
|
|
61
|
+
readonly id: Schema.brand<Schema.String, "Provider.ID"> & {
|
|
62
|
+
opencode: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
63
|
+
anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
64
|
+
openai: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
65
|
+
google: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
66
|
+
googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
67
|
+
githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
68
|
+
amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
69
|
+
azure: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
70
|
+
openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
71
|
+
mistral: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
72
|
+
gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
73
|
+
};
|
|
74
|
+
readonly canonical: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Provider.ID"> & {
|
|
75
|
+
opencode: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
76
|
+
anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
77
|
+
openai: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
78
|
+
google: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
79
|
+
googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
80
|
+
githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
81
|
+
amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
82
|
+
azure: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
83
|
+
openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
84
|
+
mistral: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
85
|
+
gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
86
|
+
}>>, Schema.optionalKey<Schema.brand<Schema.String, "Provider.ID"> & {
|
|
87
|
+
opencode: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
88
|
+
anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
89
|
+
openai: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
90
|
+
google: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
91
|
+
googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
92
|
+
githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
93
|
+
amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
94
|
+
azure: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
95
|
+
openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
96
|
+
mistral: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
97
|
+
gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
98
|
+
}>, never, never>;
|
|
99
|
+
readonly integrationID: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Integration.ID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Integration.ID">>, never, never>;
|
|
100
|
+
readonly name: Schema.String;
|
|
101
|
+
readonly activation: Schema.Literals<readonly ["auto", "enabled", "disabled"]>;
|
|
102
|
+
readonly package: Schema.String;
|
|
103
|
+
readonly compatibility: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
|
|
104
|
+
readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("@opencode/schema/model-compatibility").ReasoningField, import("@opencode/schema/model-compatibility").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("@opencode/schema/model-compatibility").ReasoningField, import("@opencode/schema/model-compatibility").ReasoningField, never, never>>, never, never>;
|
|
105
|
+
readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
106
|
+
readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
|
|
107
|
+
readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
108
|
+
readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
109
|
+
readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
110
|
+
readonly streamUsage: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
111
|
+
readonly cacheFormat: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["anthropic", "alibaba"]>>>, Schema.optionalKey<Schema.Literals<readonly ["anthropic", "alibaba"]>>, never, never>;
|
|
112
|
+
}>>>, Schema.optionalKey<Schema.Struct<{
|
|
113
|
+
readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("@opencode/schema/model-compatibility").ReasoningField, import("@opencode/schema/model-compatibility").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("@opencode/schema/model-compatibility").ReasoningField, import("@opencode/schema/model-compatibility").ReasoningField, never, never>>, never, never>;
|
|
114
|
+
readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
115
|
+
readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
|
|
116
|
+
readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
117
|
+
readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
118
|
+
readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
119
|
+
readonly streamUsage: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
120
|
+
readonly cacheFormat: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["anthropic", "alibaba"]>>>, Schema.optionalKey<Schema.Literals<readonly ["anthropic", "alibaba"]>>, never, never>;
|
|
121
|
+
}>>, never, never>;
|
|
122
|
+
}> & {
|
|
123
|
+
empty: (id: Provider.ID) => Provider.Info;
|
|
124
|
+
};
|
|
125
|
+
}>>, Schema.toCodecJson<typeof ServiceUnavailableError | typeof ProviderNotFoundError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"provider.list", "GET", "/api/provider", never, Schema.toCodecStringTree<Schema.Struct<{
|
|
126
|
+
readonly location: Schema.optional<Schema.Struct<{
|
|
127
|
+
readonly directory: Schema.optional<Schema.String>;
|
|
128
|
+
}>>;
|
|
129
|
+
}>>, never, never, Schema.toCodecJson<Schema.Struct<{
|
|
130
|
+
readonly location: Schema.Struct<{
|
|
131
|
+
readonly directory: Schema.brand<Schema.String, "AbsolutePath">;
|
|
132
|
+
}>;
|
|
133
|
+
readonly data: Schema.$Array<Schema.Struct<{
|
|
134
|
+
readonly settings: Schema.decodeTo<Schema.optional<Schema.toType<Schema.StructWithRest<Schema.Struct<{
|
|
135
|
+
readonly timeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
136
|
+
readonly headerTimeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
137
|
+
readonly chunkTimeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
138
|
+
readonly compaction: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Struct<{
|
|
139
|
+
readonly type: Schema.Literal<"summary">;
|
|
140
|
+
}>, Schema.Struct<{
|
|
141
|
+
readonly type: Schema.Literal<"native">;
|
|
142
|
+
}>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Struct<{
|
|
143
|
+
readonly type: Schema.Literal<"summary">;
|
|
144
|
+
}>, Schema.Struct<{
|
|
145
|
+
readonly type: Schema.Literal<"native">;
|
|
146
|
+
}>]>>, never, never>;
|
|
147
|
+
readonly transport: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["http", "websocket"]>>>, Schema.optionalKey<Schema.Literals<readonly ["http", "websocket"]>>, never, never>;
|
|
148
|
+
readonly encoding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["zstd", "gzip", "none"]>>>, Schema.optionalKey<Schema.Literals<readonly ["zstd", "gzip", "none"]>>, never, never>;
|
|
149
|
+
}>, readonly [Schema.$Record<Schema.String, Schema.Any>]>>>, Schema.optionalKey<Schema.StructWithRest<Schema.Struct<{
|
|
150
|
+
readonly timeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
151
|
+
readonly headerTimeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
152
|
+
readonly chunkTimeout: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Finite, Schema.Literal<false>]>>, never, never>;
|
|
153
|
+
readonly compaction: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Union<readonly [Schema.Struct<{
|
|
154
|
+
readonly type: Schema.Literal<"summary">;
|
|
155
|
+
}>, Schema.Struct<{
|
|
156
|
+
readonly type: Schema.Literal<"native">;
|
|
157
|
+
}>]>>>, Schema.optionalKey<Schema.Union<readonly [Schema.Struct<{
|
|
158
|
+
readonly type: Schema.Literal<"summary">;
|
|
159
|
+
}>, Schema.Struct<{
|
|
160
|
+
readonly type: Schema.Literal<"native">;
|
|
161
|
+
}>]>>, never, never>;
|
|
162
|
+
readonly transport: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["http", "websocket"]>>>, Schema.optionalKey<Schema.Literals<readonly ["http", "websocket"]>>, never, never>;
|
|
163
|
+
readonly encoding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["zstd", "gzip", "none"]>>>, Schema.optionalKey<Schema.Literals<readonly ["zstd", "gzip", "none"]>>, never, never>;
|
|
164
|
+
}>, readonly [Schema.$Record<Schema.String, Schema.Any>]>>, never, never>;
|
|
165
|
+
readonly headers: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.String>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.String>>, never, never>;
|
|
166
|
+
readonly body: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Any>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Any>>, never, never>;
|
|
167
|
+
readonly id: Schema.brand<Schema.String, "Provider.ID"> & {
|
|
168
|
+
opencode: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
169
|
+
anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
170
|
+
openai: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
171
|
+
google: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
172
|
+
googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
173
|
+
githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
174
|
+
amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
175
|
+
azure: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
176
|
+
openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
177
|
+
mistral: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
178
|
+
gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
179
|
+
};
|
|
180
|
+
readonly canonical: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Provider.ID"> & {
|
|
181
|
+
opencode: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
182
|
+
anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
183
|
+
openai: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
184
|
+
google: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
185
|
+
googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
186
|
+
githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
187
|
+
amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
188
|
+
azure: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
189
|
+
openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
190
|
+
mistral: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
191
|
+
gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
192
|
+
}>>, Schema.optionalKey<Schema.brand<Schema.String, "Provider.ID"> & {
|
|
193
|
+
opencode: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
194
|
+
anthropic: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
195
|
+
openai: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
196
|
+
google: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
197
|
+
googleVertex: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
198
|
+
githubCopilot: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
199
|
+
amazonBedrock: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
200
|
+
azure: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
201
|
+
openrouter: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
202
|
+
mistral: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
203
|
+
gitlab: string & import("effect/Brand").Brand<"Provider.ID">;
|
|
204
|
+
}>, never, never>;
|
|
205
|
+
readonly integrationID: Schema.decodeTo<Schema.optional<Schema.toType<Schema.brand<Schema.String, "Integration.ID">>>, Schema.optionalKey<Schema.brand<Schema.String, "Integration.ID">>, never, never>;
|
|
206
|
+
readonly name: Schema.String;
|
|
207
|
+
readonly activation: Schema.Literals<readonly ["auto", "enabled", "disabled"]>;
|
|
208
|
+
readonly package: Schema.String;
|
|
209
|
+
readonly compatibility: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
|
|
210
|
+
readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("@opencode/schema/model-compatibility").ReasoningField, import("@opencode/schema/model-compatibility").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("@opencode/schema/model-compatibility").ReasoningField, import("@opencode/schema/model-compatibility").ReasoningField, never, never>>, never, never>;
|
|
211
|
+
readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
212
|
+
readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
|
|
213
|
+
readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
214
|
+
readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
215
|
+
readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
216
|
+
readonly streamUsage: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
217
|
+
readonly cacheFormat: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["anthropic", "alibaba"]>>>, Schema.optionalKey<Schema.Literals<readonly ["anthropic", "alibaba"]>>, never, never>;
|
|
218
|
+
}>>>, Schema.optionalKey<Schema.Struct<{
|
|
219
|
+
readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<import("@opencode/schema/model-compatibility").ReasoningField, import("@opencode/schema/model-compatibility").ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<import("@opencode/schema/model-compatibility").ReasoningField, import("@opencode/schema/model-compatibility").ReasoningField, never, never>>, never, never>;
|
|
220
|
+
readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
221
|
+
readonly maxTokensField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>>, Schema.optionalKey<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>, never, never>;
|
|
222
|
+
readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
223
|
+
readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
224
|
+
readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
225
|
+
readonly streamUsage: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
|
|
226
|
+
readonly cacheFormat: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["anthropic", "alibaba"]>>>, Schema.optionalKey<Schema.Literals<readonly ["anthropic", "alibaba"]>>, never, never>;
|
|
227
|
+
}>>, never, never>;
|
|
228
|
+
}> & {
|
|
229
|
+
empty: (id: Provider.ID) => Provider.Info;
|
|
230
|
+
}>;
|
|
231
|
+
}>>, Schema.toCodecJson<typeof ServiceUnavailableError>, never, never>, false>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Provider } from "@opencode/schema/provider";
|
|
2
|
+
import { Location } from "@opencode/schema/location";
|
|
3
|
+
import { Schema } from "effect";
|
|
4
|
+
import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/http-api";
|
|
5
|
+
import { ProviderNotFoundError, ServiceUnavailableError } from "../errors.js";
|
|
6
|
+
import { LocationQuery, locationQueryOpenApi } from "./location.js";
|
|
7
|
+
export const ProviderGroup = HttpApiGroup.make("server.provider")
|
|
8
|
+
.add(HttpApiEndpoint.get("provider.list", "/api/provider", {
|
|
9
|
+
query: LocationQuery,
|
|
10
|
+
success: Location.response(Schema.Array(Provider.Info)),
|
|
11
|
+
error: ServiceUnavailableError,
|
|
12
|
+
})
|
|
13
|
+
.annotateMerge(locationQueryOpenApi)
|
|
14
|
+
.annotateMerge(OpenApi.annotations({
|
|
15
|
+
identifier: "provider.list",
|
|
16
|
+
summary: "List providers",
|
|
17
|
+
description: "Retrieve active AI providers so clients can show provider availability and configuration.",
|
|
18
|
+
})))
|
|
19
|
+
.add(HttpApiEndpoint.get("provider.get", "/api/provider/:providerID", {
|
|
20
|
+
params: { providerID: Provider.ID },
|
|
21
|
+
query: LocationQuery,
|
|
22
|
+
success: Location.response(Provider.Info),
|
|
23
|
+
error: [ProviderNotFoundError, ServiceUnavailableError],
|
|
24
|
+
})
|
|
25
|
+
.annotateMerge(locationQueryOpenApi)
|
|
26
|
+
.annotateMerge(OpenApi.annotations({
|
|
27
|
+
identifier: "provider.get",
|
|
28
|
+
summary: "Get provider",
|
|
29
|
+
description: "Retrieve a single AI provider so clients can inspect its availability and endpoint settings.",
|
|
30
|
+
})))
|
|
31
|
+
.annotateMerge(OpenApi.annotations({
|
|
32
|
+
title: "provider",
|
|
33
|
+
description: "Experimental provider routes.",
|
|
34
|
+
}));
|