@opencode/protocol 2.0.24 → 2.0.25

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 CHANGED
@@ -18,7 +18,7 @@ import { AgentGroup } from "./groups/agent.js";
18
18
  import { PluginGroup } from "./groups/plugin.js";
19
19
  import { ServerGroup } from "./groups/server.js";
20
20
  import { DebugGroup } from "./groups/debug.js";
21
- import { PtyGroup } from "./groups/pty.js";
21
+ import { makePtyGroup } from "./groups/pty.js";
22
22
  import { PersistentPtyGroup } from "./groups/persistent-pty.js";
23
23
  import { ShellGroup } from "./groups/shell.js";
24
24
  import { ReferenceGroup } from "./groups/reference.js";
@@ -33,12 +33,13 @@ import { WorktreeGroup } from "./groups/worktree.js";
33
33
  import { VcsGroup } from "./groups/vcs.js";
34
34
  import { MigrationGroup } from "./groups/migration.js";
35
35
  import { ConfigGroup } from "./groups/config.js";
36
- type LocationGroups<LocationId extends HttpApiMiddleware.AnyId> = HttpApiGroup.AddMiddleware<typeof AgentGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof PluginGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ModelGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ProviderGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof IntegrationGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof WebSearchGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof McpGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ProjectGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof FileSystemGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof CommandGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof SkillGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof RpcGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof PtyGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ShellGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ReferenceGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof VcsGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ConfigGroup, LocationId>;
36
+ type LocationGroups<LocationId extends HttpApiMiddleware.AnyId> = HttpApiGroup.AddMiddleware<typeof AgentGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof PluginGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ModelGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ProviderGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof IntegrationGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof WebSearchGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof McpGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ProjectGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof FileSystemGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof CommandGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof SkillGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof RpcGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ShellGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ReferenceGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof VcsGroup, LocationId> | HttpApiGroup.AddMiddleware<typeof ConfigGroup, LocationId>;
37
+ type PtyGroups<LocationId extends HttpApiMiddleware.AnyId, LocationService> = ReturnType<typeof makePtyGroup<LocationId, LocationService>>;
37
38
  type SessionGroups<SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService> = ReturnType<typeof makeSessionGroup<SessionLocationId, SessionLocationService, FormLocationId, FormLocationService>> | typeof MessageGroup;
38
39
  type FormGroups<LocationId extends HttpApiMiddleware.AnyId, LocationService> = ReturnType<typeof makeFormGroup<LocationId, LocationService>>;
39
40
  type LocationGroup<LocationId extends HttpApiMiddleware.AnyId, LocationService> = ReturnType<typeof makeLocationGroup<LocationId, LocationService>>;
40
41
  type MixedMiddlewareGroups<LocationId extends HttpApiMiddleware.AnyId, LocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService> = ReturnType<typeof makePermissionGroup<LocationId, LocationService, SessionLocationId, SessionLocationService>>;
41
- type ApiGroups<LocationId extends HttpApiMiddleware.AnyId, LocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService, Event extends HttpApiGroup.Constraint> = typeof ServerGroup | typeof DebugGroup | typeof MigrationGroup | typeof WorktreeGroup | typeof GenerateGroup | typeof PersistentPtyGroup | typeof CredentialGroup | LocationGroups<LocationId> | LocationGroup<LocationId, LocationService> | FormGroups<LocationId, LocationService> | SessionGroups<SessionLocationId, SessionLocationService, FormLocationId, FormLocationService> | MixedMiddlewareGroups<LocationId, LocationService, SessionLocationId, SessionLocationService> | Event;
42
+ type ApiGroups<LocationId extends HttpApiMiddleware.AnyId, LocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService, Event extends HttpApiGroup.Constraint> = typeof ServerGroup | typeof DebugGroup | typeof MigrationGroup | typeof WorktreeGroup | typeof GenerateGroup | typeof PersistentPtyGroup | typeof CredentialGroup | LocationGroups<LocationId> | LocationGroup<LocationId, LocationService> | PtyGroups<LocationId, LocationService> | FormGroups<LocationId, LocationService> | SessionGroups<SessionLocationId, SessionLocationService, FormLocationId, FormLocationService> | MixedMiddlewareGroups<LocationId, LocationService, SessionLocationId, SessionLocationService> | Event;
42
43
  type EventGroupFor<Definitions extends ReadonlyArray<Definition>> = ReturnType<typeof makeEventGroup<Definitions>>;
43
44
  export type Api<LocationId extends HttpApiMiddleware.AnyId, LocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService, Event extends HttpApiGroup.Constraint> = HttpApi.HttpApi<"server", HttpApiGroup.AddMiddleware<HttpApiGroup.AddMiddleware<ApiGroups<LocationId, LocationService, FormLocationId, FormLocationService, SessionLocationId, SessionLocationService, Event>, Authorization>, SchemaErrorMiddleware>>;
44
45
  export declare const makeApi: <const Definitions extends ReadonlyArray<Definition>, LocationId extends HttpApiMiddleware.AnyId, LocationService, FormLocationId extends HttpApiMiddleware.AnyId, FormLocationService, SessionLocationId extends HttpApiMiddleware.AnyId, SessionLocationService>(options: {
package/dist/api.js CHANGED
@@ -17,7 +17,7 @@ import { AgentGroup } from "./groups/agent.js";
17
17
  import { PluginGroup } from "./groups/plugin.js";
18
18
  import { ServerGroup } from "./groups/server.js";
19
19
  import { DebugGroup } from "./groups/debug.js";
20
- import { PtyGroup } from "./groups/pty.js";
20
+ import { makePtyGroup } from "./groups/pty.js";
21
21
  import { PersistentPtyGroup } from "./groups/persistent-pty.js";
22
22
  import { ShellGroup } from "./groups/shell.js";
23
23
  import { ReferenceGroup } from "./groups/reference.js";
@@ -54,7 +54,7 @@ const makeApiFromGroup = (eventGroup, locationMiddleware, formLocationMiddleware
54
54
  .add(SkillGroup.middleware(locationMiddleware))
55
55
  .add(RpcGroup.middleware(locationMiddleware))
56
56
  .add(eventGroup)
57
- .add(PtyGroup.middleware(locationMiddleware))
57
+ .add(makePtyGroup(locationMiddleware))
58
58
  .add(PersistentPtyGroup)
59
59
  .add(ShellGroup.middleware(locationMiddleware))
60
60
  .add(ReferenceGroup.middleware(locationMiddleware))
@@ -21,6 +21,10 @@ export declare const CredentialGroup: HttpApiGroup.HttpApiGroup<"server.credenti
21
21
  readonly key: Schema.String;
22
22
  readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
23
23
  readonly configuration: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.$Array<Schema.String>]>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.$Array<Schema.String>]>>>, never, never>;
24
+ }>, Schema.Struct<{
25
+ readonly type: Schema.Literal<"external">;
26
+ readonly methodID: Schema.brand<Schema.String, "Integration.MethodID">;
27
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
24
28
  }>]>;
25
29
  }>>;
26
30
  }>>, never, never, never> | HttpApiEndpoint.HttpApiEndpoint<"credential.create", "POST", "/api/credential", never, never, Schema.toCodecJson<Schema.Struct<{
@@ -43,6 +47,10 @@ export declare const CredentialGroup: HttpApiGroup.HttpApiGroup<"server.credenti
43
47
  readonly key: Schema.String;
44
48
  readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
45
49
  readonly configuration: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.$Array<Schema.String>]>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.$Array<Schema.String>]>>>, never, never>;
50
+ }>, Schema.Struct<{
51
+ readonly type: Schema.Literal<"external">;
52
+ readonly methodID: Schema.brand<Schema.String, "Integration.MethodID">;
53
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
46
54
  }>]>;
47
55
  readonly activate: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
48
56
  }>>, never, Schema.toCodecJson<Schema.Struct<{
@@ -65,6 +73,10 @@ export declare const CredentialGroup: HttpApiGroup.HttpApiGroup<"server.credenti
65
73
  readonly key: Schema.String;
66
74
  readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
67
75
  readonly configuration: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.$Array<Schema.String>]>>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.$Array<Schema.String>]>>>, never, never>;
76
+ }>, Schema.Struct<{
77
+ readonly type: Schema.Literal<"external">;
78
+ readonly methodID: Schema.brand<Schema.String, "Integration.MethodID">;
79
+ readonly metadata: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Record<Schema.String, Schema.Unknown>>>, Schema.optionalKey<Schema.$Record<Schema.String, Schema.Unknown>>, never, never>;
68
80
  }>]>;
69
81
  }>;
70
82
  }>>, Schema.toCodecJson<typeof ConflictError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"credential.update", "PATCH", "/api/credential/:credentialID", Schema.toCodecStringTree<Schema.Struct<{
package/dist/groups/fs.js CHANGED
@@ -33,7 +33,7 @@ export const FileSystemGroup = HttpApiGroup.make("server.fs")
33
33
  .annotateMerge(OpenApi.annotations({
34
34
  identifier: "fs.read",
35
35
  summary: "Read file",
36
- description: "Serve one file relative to the requested location.",
36
+ description: "Stream one file relative to the requested location with ETag, Last-Modified, and single-range HTTP Range support (206 Partial Content, 416 Range Not Satisfiable, and 304 Not Modified; multi-range and malformed Range headers fall back to 200).",
37
37
  })))
38
38
  .add(HttpApiEndpoint.get("fs.list", "/api/fs/list", {
39
39
  query: ListQuery,
@@ -500,6 +500,247 @@ export declare const IntegrationGroup: HttpApiGroup.HttpApiGroup<"server.integra
500
500
  readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
501
501
  readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
502
502
  }>]>>>, never, never>;
503
+ }>, Schema.Struct<{
504
+ readonly id: Schema.brand<Schema.String, "Integration.MethodID">;
505
+ readonly type: Schema.Literal<"external">;
506
+ readonly label: Schema.String;
507
+ readonly form: Schema.decodeTo<Schema.optional<Schema.toType<Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
508
+ readonly type: Schema.Literal<"string">;
509
+ readonly format: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["email", "uri", "date", "date-time"]>>>, Schema.optionalKey<Schema.Literals<readonly ["email", "uri", "date", "date-time"]>>, never, never>;
510
+ readonly minLength: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
511
+ readonly maxLength: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
512
+ readonly pattern: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
513
+ readonly placeholder: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
514
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
515
+ readonly options: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
516
+ readonly value: Schema.String;
517
+ readonly label: Schema.String;
518
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
519
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
520
+ readonly value: Schema.String;
521
+ readonly label: Schema.String;
522
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
523
+ }>>>, never, never>;
524
+ readonly custom: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
525
+ readonly key: Schema.String;
526
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
527
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
528
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
529
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
530
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
531
+ readonly key: Schema.String;
532
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
533
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
534
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
535
+ readonly key: Schema.String;
536
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
537
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
538
+ }>>>, never, never>;
539
+ }>, Schema.Struct<{
540
+ readonly type: Schema.Literal<"number">;
541
+ readonly minimum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
542
+ readonly maximum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
543
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
544
+ readonly key: Schema.String;
545
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
546
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
547
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
548
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
549
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
550
+ readonly key: Schema.String;
551
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
552
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
553
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
554
+ readonly key: Schema.String;
555
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
556
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
557
+ }>>>, never, never>;
558
+ }>, Schema.Struct<{
559
+ readonly type: Schema.Literal<"integer">;
560
+ readonly minimum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
561
+ readonly maximum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
562
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
563
+ readonly key: Schema.String;
564
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
565
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
566
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
567
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
568
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
569
+ readonly key: Schema.String;
570
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
571
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
572
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
573
+ readonly key: Schema.String;
574
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
575
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
576
+ }>>>, never, never>;
577
+ }>, Schema.Struct<{
578
+ readonly type: Schema.Literal<"boolean">;
579
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
580
+ readonly key: Schema.String;
581
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
582
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
583
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
584
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
585
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
586
+ readonly key: Schema.String;
587
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
588
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
589
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
590
+ readonly key: Schema.String;
591
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
592
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
593
+ }>>>, never, never>;
594
+ }>, Schema.Struct<{
595
+ readonly type: Schema.Literal<"multiselect">;
596
+ readonly options: Schema.$Array<Schema.Struct<{
597
+ readonly value: Schema.String;
598
+ readonly label: Schema.String;
599
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
600
+ }>>;
601
+ readonly minItems: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
602
+ readonly maxItems: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
603
+ readonly custom: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
604
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.String>>>, Schema.optionalKey<Schema.$Array<Schema.String>>, never, never>;
605
+ readonly key: Schema.String;
606
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
607
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
608
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
609
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
610
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
611
+ readonly key: Schema.String;
612
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
613
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
614
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
615
+ readonly key: Schema.String;
616
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
617
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
618
+ }>>>, never, never>;
619
+ }>, Schema.Struct<{
620
+ readonly key: Schema.String;
621
+ readonly type: Schema.Literal<"external">;
622
+ readonly url: Schema.String;
623
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
624
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
625
+ }>]>>>>, Schema.optionalKey<Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
626
+ readonly type: Schema.Literal<"string">;
627
+ readonly format: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["email", "uri", "date", "date-time"]>>>, Schema.optionalKey<Schema.Literals<readonly ["email", "uri", "date", "date-time"]>>, never, never>;
628
+ readonly minLength: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
629
+ readonly maxLength: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
630
+ readonly pattern: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
631
+ readonly placeholder: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
632
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
633
+ readonly options: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
634
+ readonly value: Schema.String;
635
+ readonly label: Schema.String;
636
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
637
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
638
+ readonly value: Schema.String;
639
+ readonly label: Schema.String;
640
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
641
+ }>>>, never, never>;
642
+ readonly custom: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
643
+ readonly key: Schema.String;
644
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
645
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
646
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
647
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
648
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
649
+ readonly key: Schema.String;
650
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
651
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
652
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
653
+ readonly key: Schema.String;
654
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
655
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
656
+ }>>>, never, never>;
657
+ }>, Schema.Struct<{
658
+ readonly type: Schema.Literal<"number">;
659
+ readonly minimum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
660
+ readonly maximum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
661
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
662
+ readonly key: Schema.String;
663
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
664
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
665
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
666
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
667
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
668
+ readonly key: Schema.String;
669
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
670
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
671
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
672
+ readonly key: Schema.String;
673
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
674
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
675
+ }>>>, never, never>;
676
+ }>, Schema.Struct<{
677
+ readonly type: Schema.Literal<"integer">;
678
+ readonly minimum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
679
+ readonly maximum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
680
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
681
+ readonly key: Schema.String;
682
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
683
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
684
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
685
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
686
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
687
+ readonly key: Schema.String;
688
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
689
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
690
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
691
+ readonly key: Schema.String;
692
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
693
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
694
+ }>>>, never, never>;
695
+ }>, Schema.Struct<{
696
+ readonly type: Schema.Literal<"boolean">;
697
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
698
+ readonly key: Schema.String;
699
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
700
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
701
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
702
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
703
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
704
+ readonly key: Schema.String;
705
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
706
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
707
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
708
+ readonly key: Schema.String;
709
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
710
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
711
+ }>>>, never, never>;
712
+ }>, Schema.Struct<{
713
+ readonly type: Schema.Literal<"multiselect">;
714
+ readonly options: Schema.$Array<Schema.Struct<{
715
+ readonly value: Schema.String;
716
+ readonly label: Schema.String;
717
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
718
+ }>>;
719
+ readonly minItems: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
720
+ readonly maxItems: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
721
+ readonly custom: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
722
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.String>>>, Schema.optionalKey<Schema.$Array<Schema.String>>, never, never>;
723
+ readonly key: Schema.String;
724
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
725
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
726
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
727
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
728
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
729
+ readonly key: Schema.String;
730
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
731
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
732
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
733
+ readonly key: Schema.String;
734
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
735
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
736
+ }>>>, never, never>;
737
+ }>, Schema.Struct<{
738
+ readonly key: Schema.String;
739
+ readonly type: Schema.Literal<"external">;
740
+ readonly url: Schema.String;
741
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
742
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
743
+ }>]>>>, never, never>;
503
744
  }>, Schema.Struct<{
504
745
  readonly type: Schema.Literal<"env">;
505
746
  readonly names: Schema.$Array<Schema.String>;
@@ -510,7 +751,7 @@ export declare const IntegrationGroup: HttpApiGroup.HttpApiGroup<"server.integra
510
751
  create: () => string & import("effect/Brand").Brand<"Credential.ID">;
511
752
  };
512
753
  readonly label: Schema.String;
513
- readonly method: Schema.Literals<readonly ["key", "oauth"]>;
754
+ readonly method: Schema.Literals<readonly ["key", "oauth", "external"]>;
514
755
  readonly status: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
515
756
  readonly status: Schema.Literals<readonly ["needs_auth"]>;
516
757
  readonly message: Schema.String;
@@ -1034,6 +1275,247 @@ export declare const IntegrationGroup: HttpApiGroup.HttpApiGroup<"server.integra
1034
1275
  readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1035
1276
  readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1036
1277
  }>]>>>, never, never>;
1278
+ }>, Schema.Struct<{
1279
+ readonly id: Schema.brand<Schema.String, "Integration.MethodID">;
1280
+ readonly type: Schema.Literal<"external">;
1281
+ readonly label: Schema.String;
1282
+ readonly form: Schema.decodeTo<Schema.optional<Schema.toType<Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
1283
+ readonly type: Schema.Literal<"string">;
1284
+ readonly format: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["email", "uri", "date", "date-time"]>>>, Schema.optionalKey<Schema.Literals<readonly ["email", "uri", "date", "date-time"]>>, never, never>;
1285
+ readonly minLength: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
1286
+ readonly maxLength: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
1287
+ readonly pattern: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1288
+ readonly placeholder: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1289
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1290
+ readonly options: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1291
+ readonly value: Schema.String;
1292
+ readonly label: Schema.String;
1293
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1294
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1295
+ readonly value: Schema.String;
1296
+ readonly label: Schema.String;
1297
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1298
+ }>>>, never, never>;
1299
+ readonly custom: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1300
+ readonly key: Schema.String;
1301
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1302
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1303
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1304
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1305
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1306
+ readonly key: Schema.String;
1307
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1308
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1309
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1310
+ readonly key: Schema.String;
1311
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1312
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1313
+ }>>>, never, never>;
1314
+ }>, Schema.Struct<{
1315
+ readonly type: Schema.Literal<"number">;
1316
+ readonly minimum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1317
+ readonly maximum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1318
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1319
+ readonly key: Schema.String;
1320
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1321
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1322
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1323
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1324
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1325
+ readonly key: Schema.String;
1326
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1327
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1328
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1329
+ readonly key: Schema.String;
1330
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1331
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1332
+ }>>>, never, never>;
1333
+ }>, Schema.Struct<{
1334
+ readonly type: Schema.Literal<"integer">;
1335
+ readonly minimum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1336
+ readonly maximum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1337
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1338
+ readonly key: Schema.String;
1339
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1340
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1341
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1342
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1343
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1344
+ readonly key: Schema.String;
1345
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1346
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1347
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1348
+ readonly key: Schema.String;
1349
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1350
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1351
+ }>>>, never, never>;
1352
+ }>, Schema.Struct<{
1353
+ readonly type: Schema.Literal<"boolean">;
1354
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1355
+ readonly key: Schema.String;
1356
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1357
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1358
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1359
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1360
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1361
+ readonly key: Schema.String;
1362
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1363
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1364
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1365
+ readonly key: Schema.String;
1366
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1367
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1368
+ }>>>, never, never>;
1369
+ }>, Schema.Struct<{
1370
+ readonly type: Schema.Literal<"multiselect">;
1371
+ readonly options: Schema.$Array<Schema.Struct<{
1372
+ readonly value: Schema.String;
1373
+ readonly label: Schema.String;
1374
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1375
+ }>>;
1376
+ readonly minItems: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
1377
+ readonly maxItems: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
1378
+ readonly custom: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1379
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.String>>>, Schema.optionalKey<Schema.$Array<Schema.String>>, never, never>;
1380
+ readonly key: Schema.String;
1381
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1382
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1383
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1384
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1385
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1386
+ readonly key: Schema.String;
1387
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1388
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1389
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1390
+ readonly key: Schema.String;
1391
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1392
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1393
+ }>>>, never, never>;
1394
+ }>, Schema.Struct<{
1395
+ readonly key: Schema.String;
1396
+ readonly type: Schema.Literal<"external">;
1397
+ readonly url: Schema.String;
1398
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1399
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1400
+ }>]>>>>, Schema.optionalKey<Schema.NonEmptyArray<Schema.Union<readonly [Schema.Struct<{
1401
+ readonly type: Schema.Literal<"string">;
1402
+ readonly format: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Literals<readonly ["email", "uri", "date", "date-time"]>>>, Schema.optionalKey<Schema.Literals<readonly ["email", "uri", "date", "date-time"]>>, never, never>;
1403
+ readonly minLength: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
1404
+ readonly maxLength: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
1405
+ readonly pattern: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1406
+ readonly placeholder: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1407
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1408
+ readonly options: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1409
+ readonly value: Schema.String;
1410
+ readonly label: Schema.String;
1411
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1412
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1413
+ readonly value: Schema.String;
1414
+ readonly label: Schema.String;
1415
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1416
+ }>>>, never, never>;
1417
+ readonly custom: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1418
+ readonly key: Schema.String;
1419
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1420
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1421
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1422
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1423
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1424
+ readonly key: Schema.String;
1425
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1426
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1427
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1428
+ readonly key: Schema.String;
1429
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1430
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1431
+ }>>>, never, never>;
1432
+ }>, Schema.Struct<{
1433
+ readonly type: Schema.Literal<"number">;
1434
+ readonly minimum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1435
+ readonly maximum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1436
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1437
+ readonly key: Schema.String;
1438
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1439
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1440
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1441
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1442
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1443
+ readonly key: Schema.String;
1444
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1445
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1446
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1447
+ readonly key: Schema.String;
1448
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1449
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1450
+ }>>>, never, never>;
1451
+ }>, Schema.Struct<{
1452
+ readonly type: Schema.Literal<"integer">;
1453
+ readonly minimum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1454
+ readonly maximum: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1455
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Number>>, Schema.optionalKey<Schema.Number>, never, never>;
1456
+ readonly key: Schema.String;
1457
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1458
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1459
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1460
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1461
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1462
+ readonly key: Schema.String;
1463
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1464
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1465
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1466
+ readonly key: Schema.String;
1467
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1468
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1469
+ }>>>, never, never>;
1470
+ }>, Schema.Struct<{
1471
+ readonly type: Schema.Literal<"boolean">;
1472
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1473
+ readonly key: Schema.String;
1474
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1475
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1476
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1477
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1478
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1479
+ readonly key: Schema.String;
1480
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1481
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1482
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1483
+ readonly key: Schema.String;
1484
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1485
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1486
+ }>>>, never, never>;
1487
+ }>, Schema.Struct<{
1488
+ readonly type: Schema.Literal<"multiselect">;
1489
+ readonly options: Schema.$Array<Schema.Struct<{
1490
+ readonly value: Schema.String;
1491
+ readonly label: Schema.String;
1492
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1493
+ }>>;
1494
+ readonly minItems: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
1495
+ readonly maxItems: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
1496
+ readonly custom: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1497
+ readonly default: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.String>>>, Schema.optionalKey<Schema.$Array<Schema.String>>, never, never>;
1498
+ readonly key: Schema.String;
1499
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1500
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1501
+ readonly required: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1502
+ readonly hidden: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
1503
+ readonly when: Schema.decodeTo<Schema.optional<Schema.toType<Schema.$Array<Schema.Struct<{
1504
+ readonly key: Schema.String;
1505
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1506
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1507
+ }>>>>, Schema.optionalKey<Schema.$Array<Schema.Struct<{
1508
+ readonly key: Schema.String;
1509
+ readonly op: Schema.Literals<readonly ["eq", "neq"]>;
1510
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean]>;
1511
+ }>>>, never, never>;
1512
+ }>, Schema.Struct<{
1513
+ readonly key: Schema.String;
1514
+ readonly type: Schema.Literal<"external">;
1515
+ readonly url: Schema.String;
1516
+ readonly title: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1517
+ readonly description: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
1518
+ }>]>>>, never, never>;
1037
1519
  }>, Schema.Struct<{
1038
1520
  readonly type: Schema.Literal<"env">;
1039
1521
  readonly names: Schema.$Array<Schema.String>;
@@ -1044,7 +1526,7 @@ export declare const IntegrationGroup: HttpApiGroup.HttpApiGroup<"server.integra
1044
1526
  create: () => string & import("effect/Brand").Brand<"Credential.ID">;
1045
1527
  };
1046
1528
  readonly label: Schema.String;
1047
- readonly method: Schema.Literals<readonly ["key", "oauth"]>;
1529
+ readonly method: Schema.Literals<readonly ["key", "oauth", "external"]>;
1048
1530
  readonly status: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Struct<{
1049
1531
  readonly status: Schema.Literals<readonly ["needs_auth"]>;
1050
1532
  readonly message: Schema.String;
@@ -1084,6 +1566,16 @@ export declare const IntegrationGroup: HttpApiGroup.HttpApiGroup<"server.integra
1084
1566
  readonly key: Schema.String;
1085
1567
  readonly answer: Schema.optional<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.$Array<Schema.String>]>>>;
1086
1568
  readonly label: Schema.optional<Schema.String>;
1569
+ }>>, never, Schema.toCodecJson<HttpApiSchema.NoContent>, Schema.toCodecJson<typeof InvalidRequestError | typeof IntegrationNotFoundError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"integration.connect.external", "POST", "/api/integration/:integrationID/connect/external", Schema.toCodecStringTree<Schema.Struct<{
1570
+ integrationID: Schema.brand<Schema.String, "Integration.ID">;
1571
+ }>>, Schema.toCodecStringTree<Schema.Struct<{
1572
+ readonly location: Schema.optional<Schema.Struct<{
1573
+ readonly directory: Schema.optional<Schema.String>;
1574
+ }>>;
1575
+ }>>, Schema.toCodecJson<Schema.Struct<{
1576
+ readonly methodID: Schema.brand<Schema.String, "Integration.MethodID">;
1577
+ readonly answer: Schema.optional<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.$Array<Schema.String>]>>>;
1578
+ readonly label: Schema.optional<Schema.String>;
1087
1579
  }>>, never, Schema.toCodecJson<HttpApiSchema.NoContent>, Schema.toCodecJson<typeof InvalidRequestError | typeof IntegrationNotFoundError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"integration.oauth.connect", "POST", "/api/integration/:integrationID/connect/oauth", Schema.toCodecStringTree<Schema.Struct<{
1088
1580
  integrationID: Schema.brand<Schema.String, "Integration.ID">;
1089
1581
  }>>, Schema.toCodecStringTree<Schema.Struct<{
@@ -56,6 +56,23 @@ export const IntegrationGroup = HttpApiGroup.make("server.integration")
56
56
  identifier: "integration.connect.key",
57
57
  summary: "Connect with key",
58
58
  description: "Run a key authentication method and store the resulting credential.",
59
+ })))
60
+ .add(HttpApiEndpoint.post("integration.connect.external", "/api/integration/:integrationID/connect/external", {
61
+ params: { integrationID: Integration.ID },
62
+ query: LocationQuery,
63
+ payload: Schema.Struct({
64
+ methodID: Integration.MethodID,
65
+ answer: Schema.optional(Form.Answer),
66
+ label: Schema.optional(Schema.String),
67
+ }),
68
+ success: HttpApiSchema.NoContent,
69
+ error: [IntegrationNotFoundError, InvalidRequestError],
70
+ })
71
+ .annotateMerge(locationQueryOpenApi)
72
+ .annotateMerge(OpenApi.annotations({
73
+ identifier: "integration.connect.external",
74
+ summary: "Connect with external credentials",
75
+ description: "Run an external authentication method and store a reference to its credential source.",
59
76
  })))
60
77
  .add(HttpApiEndpoint.post("integration.oauth.connect", "/api/integration/:integrationID/connect/oauth", {
61
78
  params: { integrationID: Integration.ID },
@@ -153,6 +153,8 @@ export declare const ModelGroup: HttpApiGroup.HttpApiGroup<"server.model", HttpA
153
153
  readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
154
154
  readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
155
155
  readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
156
+ readonly supportsThinkingBlockBinding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
157
+ readonly supportsEffortUpdates: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
156
158
  }>>>, Schema.optionalKey<Schema.Struct<{
157
159
  readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<Model.ReasoningField, Model.ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<Model.ReasoningField, Model.ReasoningField, never, never>>, never, never>;
158
160
  readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
@@ -160,6 +162,8 @@ export declare const ModelGroup: HttpApiGroup.HttpApiGroup<"server.model", HttpA
160
162
  readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
161
163
  readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
162
164
  readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
165
+ readonly supportsThinkingBlockBinding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
166
+ readonly supportsEffortUpdates: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
163
167
  }>>, never, never>;
164
168
  readonly package: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
165
169
  }> & {
@@ -337,6 +341,8 @@ export declare const ModelGroup: HttpApiGroup.HttpApiGroup<"server.model", HttpA
337
341
  readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
338
342
  readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
339
343
  readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
344
+ readonly supportsThinkingBlockBinding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
345
+ readonly supportsEffortUpdates: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
340
346
  }>>>, Schema.optionalKey<Schema.Struct<{
341
347
  readonly reasoningField: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Codec<Model.ReasoningField, Model.ReasoningField, never, never>>>, Schema.optionalKey<Schema.Codec<Model.ReasoningField, Model.ReasoningField, never, never>>, never, never>;
342
348
  readonly requireReasoning: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
@@ -344,6 +350,8 @@ export declare const ModelGroup: HttpApiGroup.HttpApiGroup<"server.model", HttpA
344
350
  readonly requireFinishReason: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
345
351
  readonly requireAssistantAfterTool: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
346
352
  readonly supportsPromptCacheKey: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
353
+ readonly supportsThinkingBlockBinding: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
354
+ readonly supportsEffortUpdates: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Boolean>>, Schema.optionalKey<Schema.Boolean>, never, never>;
347
355
  }>>, never, never>;
348
356
  readonly package: Schema.decodeTo<Schema.optional<Schema.toType<Schema.String>>, Schema.optionalKey<Schema.String>, never, never>;
349
357
  }> & {
@@ -1,11 +1,11 @@
1
- import { Schema } from "effect";
2
- import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "effect/unstable/httpapi";
3
- import { ForbiddenError, PtyNotFoundError } from "../errors.js";
1
+ import { Context, Schema } from "effect";
2
+ import { HttpApiEndpoint, HttpApiGroup, HttpApiMiddleware, HttpApiSchema } from "effect/unstable/httpapi";
3
+ import { ForbiddenError, LocationNotFoundError, PtyNotFoundError } from "../errors.js";
4
4
  export declare const PTY_CONNECT_TICKET_QUERY = "ticket";
5
5
  export declare const PTY_CONNECT_TOKEN_HEADER = "x-opencode-ticket";
6
6
  export declare const PTY_CONNECT_TOKEN_HEADER_VALUE = "1";
7
7
  export declare function hasPtyConnectTicketURL(url: URL): boolean;
8
- export declare const PtyGroup: HttpApiGroup.HttpApiGroup<"server.pty", HttpApiEndpoint.HttpApiEndpoint<"pty.list", "GET", "/api/pty", never, Schema.toCodecStringTree<Schema.Struct<{
8
+ export declare const makePtyGroup: <LocationId extends HttpApiMiddleware.AnyId, LocationService>(locationMiddleware: Context.Key<LocationId, LocationService>) => HttpApiGroup.HttpApiGroup<"server.pty", HttpApiEndpoint.HttpApiEndpoint<"pty.list", "GET", "/api/pty", never, Schema.toCodecStringTree<Schema.Struct<{
9
9
  readonly location: Schema.optional<Schema.Struct<{
10
10
  readonly directory: Schema.optional<Schema.String>;
11
11
  }>>;
@@ -26,7 +26,7 @@ export declare const PtyGroup: HttpApiGroup.HttpApiGroup<"server.pty", HttpApiEn
26
26
  readonly pid: Schema.Int;
27
27
  readonly exitCode: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
28
28
  }>>;
29
- }>>, never, never, never> | HttpApiEndpoint.HttpApiEndpoint<"pty.create", "POST", "/api/pty", never, Schema.toCodecStringTree<Schema.Struct<{
29
+ }>>, never, LocationId, HttpApiMiddleware.Requires<LocationId>> | HttpApiEndpoint.HttpApiEndpoint<"pty.create", "POST", "/api/pty", never, Schema.toCodecStringTree<Schema.Struct<{
30
30
  readonly location: Schema.optional<Schema.Struct<{
31
31
  readonly directory: Schema.optional<Schema.String>;
32
32
  }>>;
@@ -53,7 +53,7 @@ export declare const PtyGroup: HttpApiGroup.HttpApiGroup<"server.pty", HttpApiEn
53
53
  readonly pid: Schema.Int;
54
54
  readonly exitCode: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
55
55
  }>;
56
- }>>, never, never, never> | HttpApiEndpoint.HttpApiEndpoint<"pty.get", "GET", "/api/pty/:ptyID", Schema.toCodecStringTree<Schema.Struct<{
56
+ }>>, never, LocationId, HttpApiMiddleware.Requires<LocationId>> | HttpApiEndpoint.HttpApiEndpoint<"pty.get", "GET", "/api/pty/:ptyID", Schema.toCodecStringTree<Schema.Struct<{
57
57
  ptyID: Schema.brand<Schema.String, "PtyID"> & {
58
58
  create: () => string & import("effect/Brand").Brand<"PtyID">;
59
59
  ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
@@ -79,7 +79,7 @@ export declare const PtyGroup: HttpApiGroup.HttpApiGroup<"server.pty", HttpApiEn
79
79
  readonly pid: Schema.Int;
80
80
  readonly exitCode: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
81
81
  }>;
82
- }>>, Schema.toCodecJson<typeof PtyNotFoundError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"pty.update", "PUT", "/api/pty/:ptyID", Schema.toCodecStringTree<Schema.Struct<{
82
+ }>>, Schema.toCodecJson<typeof PtyNotFoundError>, LocationId, HttpApiMiddleware.Requires<LocationId>> | HttpApiEndpoint.HttpApiEndpoint<"pty.update", "PUT", "/api/pty/:ptyID", Schema.toCodecStringTree<Schema.Struct<{
83
83
  ptyID: Schema.brand<Schema.String, "PtyID"> & {
84
84
  create: () => string & import("effect/Brand").Brand<"PtyID">;
85
85
  ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
@@ -114,7 +114,7 @@ export declare const PtyGroup: HttpApiGroup.HttpApiGroup<"server.pty", HttpApiEn
114
114
  readonly pid: Schema.Int;
115
115
  readonly exitCode: Schema.decodeTo<Schema.optional<Schema.toType<Schema.Int>>, Schema.optionalKey<Schema.Int>, never, never>;
116
116
  }>;
117
- }>>, Schema.toCodecJson<typeof PtyNotFoundError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"pty.remove", "DELETE", "/api/pty/:ptyID", Schema.toCodecStringTree<Schema.Struct<{
117
+ }>>, Schema.toCodecJson<typeof PtyNotFoundError>, LocationId, HttpApiMiddleware.Requires<LocationId>> | HttpApiEndpoint.HttpApiEndpoint<"pty.remove", "DELETE", "/api/pty/:ptyID", Schema.toCodecStringTree<Schema.Struct<{
118
118
  ptyID: Schema.brand<Schema.String, "PtyID"> & {
119
119
  create: () => string & import("effect/Brand").Brand<"PtyID">;
120
120
  ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
@@ -123,7 +123,7 @@ export declare const PtyGroup: HttpApiGroup.HttpApiGroup<"server.pty", HttpApiEn
123
123
  readonly location: Schema.optional<Schema.Struct<{
124
124
  readonly directory: Schema.optional<Schema.String>;
125
125
  }>>;
126
- }>>, never, never, Schema.toCodecJson<HttpApiSchema.NoContent>, Schema.toCodecJson<typeof PtyNotFoundError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"pty.connectToken", "POST", "/api/pty/:ptyID/connect-token", Schema.toCodecStringTree<Schema.Struct<{
126
+ }>>, never, never, Schema.toCodecJson<HttpApiSchema.NoContent>, Schema.toCodecJson<typeof PtyNotFoundError>, LocationId, HttpApiMiddleware.Requires<LocationId>> | HttpApiEndpoint.HttpApiEndpoint<"pty.connectToken", "POST", "/api/pty/:ptyID/connect-token", Schema.toCodecStringTree<Schema.Struct<{
127
127
  ptyID: Schema.brand<Schema.String, "PtyID"> & {
128
128
  create: () => string & import("effect/Brand").Brand<"PtyID">;
129
129
  ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
@@ -142,9 +142,9 @@ export declare const PtyGroup: HttpApiGroup.HttpApiGroup<"server.pty", HttpApiEn
142
142
  readonly ticket: Schema.String;
143
143
  readonly expires_in: Schema.Int;
144
144
  }>;
145
- }>>, Schema.toCodecJson<typeof ForbiddenError | typeof PtyNotFoundError>, never, never> | HttpApiEndpoint.HttpApiEndpoint<"pty.connect", "GET", "/api/pty/:ptyID/connect", Schema.toCodecStringTree<Schema.Struct<{
145
+ }>>, Schema.toCodecJson<typeof ForbiddenError | typeof PtyNotFoundError>, LocationId, HttpApiMiddleware.Requires<LocationId>> | HttpApiEndpoint.HttpApiEndpoint<"pty.connect", "GET", "/api/pty/:ptyID/connect", Schema.toCodecStringTree<Schema.Struct<{
146
146
  ptyID: Schema.brand<Schema.String, "PtyID"> & {
147
147
  create: () => string & import("effect/Brand").Brand<"PtyID">;
148
148
  ascending: (id?: string) => string & import("effect/Brand").Brand<"PtyID">;
149
149
  };
150
- }>>, never, never, never, Schema.toCodecJson<Schema.Boolean>, Schema.toCodecJson<typeof ForbiddenError | typeof PtyNotFoundError>, never, never>, false>;
150
+ }>>, never, never, never, Schema.toCodecJson<Schema.Boolean>, Schema.toCodecJson<typeof LocationNotFoundError | typeof ForbiddenError | typeof PtyNotFoundError>, never, never>, false>;
@@ -1,9 +1,9 @@
1
1
  import { Pty } from "@opencode/schema/pty";
2
2
  import { PtyTicket } from "@opencode/schema/pty-ticket";
3
3
  import { Location } from "@opencode/schema/location";
4
- import { Schema } from "effect";
5
- import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi";
6
- import { ForbiddenError, PtyNotFoundError } from "../errors.js";
4
+ import { Context, Schema } from "effect";
5
+ import { HttpApiEndpoint, HttpApiGroup, HttpApiMiddleware, HttpApiSchema, OpenApi } from "effect/unstable/httpapi";
6
+ import { ForbiddenError, LocationNotFoundError, PtyNotFoundError } from "../errors.js";
7
7
  import { LocationQuery, locationQueryOpenApi } from "./location.js";
8
8
  export const PTY_CONNECT_TICKET_QUERY = "ticket";
9
9
  export const PTY_CONNECT_TOKEN_HEADER = "x-opencode-ticket";
@@ -14,7 +14,7 @@ const PTY_CONNECT_PATH = /^\/api\/pty\/[^/]+\/connect$/;
14
14
  export function hasPtyConnectTicketURL(url) {
15
15
  return PTY_CONNECT_PATH.test(url.pathname) && !!url.searchParams.get(PTY_CONNECT_TICKET_QUERY);
16
16
  }
17
- export const PtyGroup = HttpApiGroup.make("server.pty")
17
+ export const makePtyGroup = (locationMiddleware) => HttpApiGroup.make("server.pty")
18
18
  .add(HttpApiEndpoint.get("pty.list", "/api/pty", {
19
19
  query: LocationQuery,
20
20
  success: Location.response(Schema.Array(Pty.Info)),
@@ -86,13 +86,13 @@ export const PtyGroup = HttpApiGroup.make("server.pty")
86
86
  summary: "Create PTY WebSocket token",
87
87
  description: "Create a short-lived single-use ticket for opening a PTY WebSocket connection.",
88
88
  })))
89
+ .middleware(locationMiddleware)
89
90
  .add(
90
- // Query fields are decoded in the raw handler after the existence check so a missing
91
- // session responds with an empty 404 before any upgrade work.
91
+ // Query fields are decoded in the raw handler before upgrade work.
92
92
  HttpApiEndpoint.get("pty.connect", "/api/pty/:ptyID/connect", {
93
93
  params: { ptyID: Pty.ID },
94
94
  success: Schema.Boolean,
95
- error: [ForbiddenError, PtyNotFoundError],
95
+ error: [ForbiddenError, PtyNotFoundError, LocationNotFoundError],
96
96
  }).annotateMerge(OpenApi.annotations({
97
97
  identifier: "pty.connect",
98
98
  summary: "Connect to PTY session",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@opencode/protocol",
4
- "version": "2.0.24",
4
+ "version": "2.0.25",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -32,7 +32,7 @@
32
32
  "typecheck": "tsgo --noEmit"
33
33
  },
34
34
  "dependencies": {
35
- "@opencode/schema": "2.0.24",
35
+ "@opencode/schema": "2.0.25",
36
36
  "effect": "4.0.0-rc.112"
37
37
  },
38
38
  "devDependencies": {