| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import { ConfigV1 } from "@kirincode-ai/core/v1/config/config"
- import { EventV2 } from "@kirincode-ai/core/event"
- import { EventManifest } from "@/event-manifest"
- import { InstanceDisposed } from "@/server/event"
- import "@kirincode-ai/core/account"
- import "@/server/event"
- import { Schema } from "effect"
- import { HttpApi, HttpApiEndpoint, HttpApiError, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi"
- import { described } from "./metadata"
- const GlobalHealth = Schema.Struct({
- healthy: Schema.Literal(true),
- version: Schema.String,
- })
- const SyncEventSchemas = EventManifest.Latest.values()
- .flatMap((definition) => {
- if (!definition.durable) return []
- return [
- Schema.Struct({
- type: Schema.Literal("sync"),
- id: EventV2.ID,
- syncEvent: Schema.Struct({
- type: Schema.Literal(EventV2.versionedType(definition.type, definition.durable.version)),
- id: EventV2.ID,
- seq: Schema.Finite,
- aggregateID: Schema.String,
- data: definition.data,
- }),
- }).annotate({ identifier: `SyncEvent.${definition.type}` }),
- ]
- })
- .toArray()
- const GlobalEventSchema = Schema.Struct({
- directory: Schema.String,
- project: Schema.optional(Schema.String),
- workspace: Schema.optional(Schema.String),
- payload: Schema.Union([
- ...EventManifest.Latest.values()
- .map((definition) =>
- Schema.Struct({ id: EventV2.ID, type: Schema.Literal(definition.type), properties: definition.data }),
- )
- .toArray(),
- InstanceDisposed,
- ...SyncEventSchemas,
- ]),
- }).annotate({ identifier: "GlobalEvent" })
- export const GlobalUpgradeInput = Schema.Struct({
- target: Schema.optional(Schema.String),
- })
- const GlobalUpgradeResult = Schema.Union([
- Schema.Struct({
- success: Schema.Literal(true),
- version: Schema.String,
- }),
- Schema.Struct({
- success: Schema.Literal(false),
- error: Schema.String,
- }),
- ])
- export const GlobalPaths = {
- health: "/global/health",
- event: "/global/event",
- config: "/global/config",
- dispose: "/global/dispose",
- upgrade: "/global/upgrade",
- } as const
- export const GlobalApi = HttpApi.make("global").add(
- HttpApiGroup.make("global")
- .add(
- HttpApiEndpoint.get("health", GlobalPaths.health, {
- success: described(GlobalHealth, "Health information"),
- }).annotateMerge(
- OpenApi.annotations({
- identifier: "global.health",
- summary: "Get health",
- description: "Get health information about the KirinCode server.",
- }),
- ),
- HttpApiEndpoint.get("event", GlobalPaths.event, {
- success: GlobalEventSchema,
- }).annotateMerge(
- OpenApi.annotations({
- identifier: "global.event",
- summary: "Get global events",
- description: "Subscribe to global events from the KirinCode system using server-sent events.",
- }),
- ),
- HttpApiEndpoint.get("configGet", GlobalPaths.config, {
- success: described(ConfigV1.Info, "Get global config info"),
- }).annotateMerge(
- OpenApi.annotations({
- identifier: "global.config.get",
- summary: "Get global configuration",
- description: "Retrieve the current global KirinCode configuration settings and preferences.",
- }),
- ),
- HttpApiEndpoint.patch("configUpdate", GlobalPaths.config, {
- payload: ConfigV1.Info,
- success: described(ConfigV1.Info, "Successfully updated global config"),
- error: HttpApiError.BadRequest,
- }).annotateMerge(
- OpenApi.annotations({
- identifier: "global.config.update",
- summary: "Update global configuration",
- description: "Update global KirinCode configuration settings and preferences.",
- }),
- ),
- HttpApiEndpoint.post("dispose", GlobalPaths.dispose, {
- success: described(Schema.Boolean, "Global disposed"),
- }).annotateMerge(
- OpenApi.annotations({
- identifier: "global.dispose",
- summary: "Dispose instance",
- description: "Clean up and dispose all KirinCode instances, releasing all resources.",
- }),
- ),
- HttpApiEndpoint.post("upgrade", GlobalPaths.upgrade, {
- payload: [HttpApiSchema.NoContent, GlobalUpgradeInput],
- success: described(GlobalUpgradeResult, "Upgrade result"),
- error: HttpApiError.BadRequest,
- }).annotateMerge(
- OpenApi.annotations({
- identifier: "global.upgrade",
- summary: "Upgrade kirincode",
- description: "Upgrade kirincode to the specified version or latest if not specified.",
- }),
- ),
- )
- .annotateMerge(OpenApi.annotations({ title: "global", description: "Global server routes." })),
- )
|