@deksden-com/dd-flow-cli 0.9.0-beta.134 → 0.9.0-beta.136

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.
Files changed (161) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +33 -0
  3. package/dist/build-info.json +7 -7
  4. package/dist/cli/command-inputs.js +1 -0
  5. package/dist/cli/command-metadata.js +144 -0
  6. package/dist/cli/command-option-descriptions.js +186 -0
  7. package/dist/cli/completion-cli.js +70 -0
  8. package/dist/cli/completion.js +57 -0
  9. package/dist/cli/error-output.js +52 -0
  10. package/dist/cli/executor-onboarding.js +71 -0
  11. package/dist/cli/harnesses.js +84 -0
  12. package/dist/cli/models.js +39 -0
  13. package/dist/cli/operator-profiles.js +61 -0
  14. package/dist/cli/output-options.js +35 -0
  15. package/dist/cli/response-file.js +69 -0
  16. package/dist/cli/run-cli.js +5 -0
  17. package/dist/cli/setup.js +147 -0
  18. package/dist/harness-runtime/OPENCODE-LICENSE.txt +24 -0
  19. package/dist/harness-runtime/bin/dd-opencode.mjs +1 -1
  20. package/dist/harness-runtime/lib/codex-capacity-policy.mjs +13 -0
  21. package/dist/harness-runtime/lib/dd-opencode-daemon.mjs +193 -39
  22. package/dist/harness-runtime/lib/dd-opencode.mjs +295 -100
  23. package/dist/harness-runtime/lib/delegation-instructions.mjs +3 -3
  24. package/dist/harness-runtime/lib/managed-daemon.mjs +1 -1
  25. package/dist/harness-runtime/lib/native-hook-command.d.mts +2 -2
  26. package/dist/harness-runtime/lib/native-hook-command.mjs +4 -4
  27. package/dist/harness-runtime/lib/opencode-plugin.mjs +60 -0
  28. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-1y4a697q.js +81 -0
  29. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-2ny4vxct.js +92 -0
  30. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-6mptkzbc.js +0 -0
  31. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-7x67cf1q.js +52 -0
  32. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-9rqn6x4v.js +16 -0
  33. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-9vdz0zwn.js +1661 -0
  34. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-ecs5ftka.js +1466 -0
  35. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-frbwqjmf.js +145 -0
  36. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-gne7h7mq.js +50 -0
  37. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-gx9wnkzr.js +105 -0
  38. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-m2eywc8w.js +0 -0
  39. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-nwcpakzx.js +12 -0
  40. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-q4g3afnw.js +623 -0
  41. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-qav6mfdz.js +0 -0
  42. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-sxt88q69.js +12 -0
  43. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-t1xa31vm.js +39 -0
  44. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-ve4aws36.js +103 -0
  45. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-vmytr4q8.js +4 -0
  46. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-vt9jbch8.js +36 -0
  47. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-vyas3vgt.js +0 -0
  48. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-wjyeq25y.js +30 -0
  49. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-xgnj2w4v.js +20 -0
  50. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-y2etg5bs.js +9 -0
  51. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-ydhz1zrh.js +238 -0
  52. package/dist/harness-runtime/vendor/opencode-client/chunks/service-probe-z6qdwcsf.js +62 -0
  53. package/dist/harness-runtime/vendor/opencode-client/contract.d.ts +1 -0
  54. package/dist/harness-runtime/vendor/opencode-client/contract.js +12 -0
  55. package/dist/harness-runtime/vendor/opencode-client/effect/api/api.d.ts +2806 -0
  56. package/dist/harness-runtime/vendor/opencode-client/effect/api/api.js +0 -0
  57. package/dist/harness-runtime/vendor/opencode-client/effect/api.d.ts +4 -0
  58. package/dist/harness-runtime/vendor/opencode-client/effect/api.js +0 -0
  59. package/dist/harness-runtime/vendor/opencode-client/effect/client.d.ts +2530 -0
  60. package/dist/harness-runtime/vendor/opencode-client/effect/client.js +15 -0
  61. package/dist/harness-runtime/vendor/opencode-client/effect/generated/client-error.d.ts +7 -0
  62. package/dist/harness-runtime/vendor/opencode-client/effect/generated/client-error.js +6 -0
  63. package/dist/harness-runtime/vendor/opencode-client/effect/generated/client.d.ts +2529 -0
  64. package/dist/harness-runtime/vendor/opencode-client/effect/generated/client.js +8 -0
  65. package/dist/harness-runtime/vendor/opencode-client/effect/generated/index.d.ts +2 -0
  66. package/dist/harness-runtime/vendor/opencode-client/effect/generated/index.js +12 -0
  67. package/dist/harness-runtime/vendor/opencode-client/effect/index.d.ts +35 -0
  68. package/dist/harness-runtime/vendor/opencode-client/effect/index.js +75 -0
  69. package/dist/harness-runtime/vendor/opencode-client/effect/rpc.d.ts +20 -0
  70. package/dist/harness-runtime/vendor/opencode-client/effect/rpc.js +11 -0
  71. package/dist/harness-runtime/vendor/opencode-client/effect/service.d.ts +90 -0
  72. package/dist/harness-runtime/vendor/opencode-client/effect/service.js +187 -0
  73. package/dist/harness-runtime/vendor/opencode-client/package.json +84 -0
  74. package/dist/harness-runtime/vendor/opencode-client/promise/api.d.ts +21 -0
  75. package/dist/harness-runtime/vendor/opencode-client/promise/api.js +0 -0
  76. package/dist/harness-runtime/vendor/opencode-client/promise/client.d.ts +252 -0
  77. package/dist/harness-runtime/vendor/opencode-client/promise/client.js +14 -0
  78. package/dist/harness-runtime/vendor/opencode-client/promise/generated/client-error.d.ts +8 -0
  79. package/dist/harness-runtime/vendor/opencode-client/promise/generated/client-error.js +6 -0
  80. package/dist/harness-runtime/vendor/opencode-client/promise/generated/client.d.ts +259 -0
  81. package/dist/harness-runtime/vendor/opencode-client/promise/generated/client.js +7 -0
  82. package/dist/harness-runtime/vendor/opencode-client/promise/generated/index.d.ts +3 -0
  83. package/dist/harness-runtime/vendor/opencode-client/promise/generated/index.js +79 -0
  84. package/dist/harness-runtime/vendor/opencode-client/promise/generated/types.d.ts +8932 -0
  85. package/dist/harness-runtime/vendor/opencode-client/promise/generated/types.js +70 -0
  86. package/dist/harness-runtime/vendor/opencode-client/promise/index.d.ts +6 -0
  87. package/dist/harness-runtime/vendor/opencode-client/promise/index.js +83 -0
  88. package/dist/harness-runtime/vendor/opencode-client/promise/rpc.d.ts +32 -0
  89. package/dist/harness-runtime/vendor/opencode-client/promise/rpc.js +7 -0
  90. package/dist/harness-runtime/vendor/opencode-client/promise/service.d.ts +24 -0
  91. package/dist/harness-runtime/vendor/opencode-client/promise/service.js +187 -0
  92. package/dist/harness-runtime/vendor/opencode-client/pty-handoff.d.ts +12 -0
  93. package/dist/harness-runtime/vendor/opencode-client/pty-handoff.js +14 -0
  94. package/dist/harness-runtime/vendor/opencode-client/rpc-runtime.d.ts +20 -0
  95. package/dist/harness-runtime/vendor/opencode-client/rpc-runtime.js +14 -0
  96. package/dist/harness-runtime/vendor/opencode-client/service-contender.d.ts +37 -0
  97. package/dist/harness-runtime/vendor/opencode-client/service-contender.js +10 -0
  98. package/dist/harness-runtime/vendor/opencode-client/service-probe.d.ts +70 -0
  99. package/dist/harness-runtime/vendor/opencode-client/service-probe.js +16 -0
  100. package/dist/harness-runtime/vendor/opencode-client/service-timing.d.ts +12 -0
  101. package/dist/harness-runtime/vendor/opencode-client/service-timing.js +10 -0
  102. package/dist/harness-runtime/vendor/opencode-client/service-version.d.ts +2 -0
  103. package/dist/harness-runtime/vendor/opencode-client/service-version.js +6 -0
  104. package/dist/harness-runtime/vendor/opencode-client/service.d.ts +52 -0
  105. package/dist/harness-runtime/vendor/opencode-client/service.js +1 -0
  106. package/dist/harness-runtime/vendor/opencode-client/shared-events.d.ts +11 -0
  107. package/dist/harness-runtime/vendor/opencode-client/shared-events.js +8 -0
  108. package/dist/harness-runtime/vendor/opencode-client/solid/connection.d.ts +37 -0
  109. package/dist/harness-runtime/vendor/opencode-client/solid/connection.js +10 -0
  110. package/dist/harness-runtime/vendor/opencode-client/solid/data.d.ts +211 -0
  111. package/dist/harness-runtime/vendor/opencode-client/solid/data.js +18 -0
  112. package/dist/harness-runtime/vendor/opencode-client/solid/index.d.ts +3 -0
  113. package/dist/harness-runtime/vendor/opencode-client/solid/index.js +32 -0
  114. package/dist/harness-runtime/vendor/opencode-client/solid/pty.d.ts +22 -0
  115. package/dist/harness-runtime/vendor/opencode-client/solid/pty.js +8 -0
  116. package/dist/harness-runtime/vendor/opencode-plugin.mjs +3 -0
  117. package/dist/services/cli-operation-classifier.js +4 -0
  118. package/dist/services/cli-upgrade-allowlist.js +27 -0
  119. package/dist/services/discovery/agy-discovery.js +2 -0
  120. package/dist/services/discovery/codex-discovery.js +2 -0
  121. package/dist/services/discovery/droid-discovery.js +2 -0
  122. package/dist/services/discovery/grok-discovery.js +2 -0
  123. package/dist/services/discovery/opencode-discovery.js +2 -0
  124. package/dist/services/discovery/static.js +31 -0
  125. package/dist/services/discovery/zcode-discovery.js +2 -0
  126. package/dist/services/engines.js +23 -25
  127. package/dist/services/eval-snapshots.js +1 -1
  128. package/dist/services/executor-onboarding.js +56 -0
  129. package/dist/services/external-work-launch.js +1 -1
  130. package/dist/services/harness-discovery.js +29 -0
  131. package/dist/services/harness-doctor.js +75 -0
  132. package/dist/services/harness-probe-effects.js +51 -0
  133. package/dist/services/harness-version-probe.js +100 -0
  134. package/dist/services/hooks.js +1 -1
  135. package/dist/services/hybrid-contracts.js +455 -0
  136. package/dist/services/installation-lock.js +92 -0
  137. package/dist/services/managed-processes.js +30 -0
  138. package/dist/services/merge-server.js +1 -1
  139. package/dist/services/model-catalog.js +109 -0
  140. package/dist/services/model-discovery.js +46 -0
  141. package/dist/services/operator-profiles.js +236 -0
  142. package/dist/services/release-archive-producer.js +52 -0
  143. package/dist/services/release-archive.js +143 -0
  144. package/dist/services/release-cache.js +142 -0
  145. package/dist/services/release-compatibility.js +18 -0
  146. package/dist/services/release-download.js +67 -0
  147. package/dist/services/release-envelope.js +104 -0
  148. package/dist/services/release-manifest.js +45 -0
  149. package/dist/services/release-payload.js +114 -0
  150. package/dist/services/release-producer.js +63 -0
  151. package/dist/services/release-provenance.js +160 -0
  152. package/dist/services/release-registry.js +66 -0
  153. package/dist/services/release-source.js +194 -0
  154. package/dist/services/run-controller-recovery.js +2 -2
  155. package/dist/services/run-controller.js +3 -2
  156. package/dist/services/run-health.js +149 -0
  157. package/dist/services/runs.js +61 -13
  158. package/dist/services/setup.js +377 -0
  159. package/dist/storage/database.js +18 -3
  160. package/dist/storage/writer-contract.js +8 -0
  161. package/package.json +4 -1
@@ -0,0 +1,8 @@
1
+ import {
2
+ make3
3
+ } from "../../chunks/service-probe-q4g3afnw.js";
4
+ import"../../chunks/service-probe-y2etg5bs.js";
5
+ import"../../chunks/service-probe-vmytr4q8.js";
6
+ export {
7
+ make3 as make
8
+ };
@@ -0,0 +1,2 @@
1
+ export { ClientError } from "./client-error.js";
2
+ export * as OpenCode from "./client.js";
@@ -0,0 +1,12 @@
1
+ import"../../chunks/service-probe-6mptkzbc.js";
2
+ import {
3
+ exports_client2
4
+ } from "../../chunks/service-probe-q4g3afnw.js";
5
+ import {
6
+ ClientError2
7
+ } from "../../chunks/service-probe-y2etg5bs.js";
8
+ import"../../chunks/service-probe-vmytr4q8.js";
9
+ export {
10
+ ClientError2 as ClientError,
11
+ exports_client2 as OpenCode
12
+ };
@@ -0,0 +1,35 @@
1
+ import type { Effect } from "effect";
2
+ import type { OpenCode } from "./client.js";
3
+ export * from "./generated/index";
4
+ export { OpenCode } from "./client.js";
5
+ export type { AgentApi, AppApi, CommandApi, ConfigApi, EventApi, IntegrationApi, ModelApi, PluginApi, ProviderApi, ReferenceApi, RpcApi, RpcClient, WebSearchApi, SessionApi, SkillApi, } from "./api.js";
6
+ export { Agent } from "@opencode/schema/agent";
7
+ export { Command } from "@opencode/schema/command";
8
+ export { Config } from "@opencode/schema/config";
9
+ export { Credential } from "@opencode/schema/credential";
10
+ export { Event } from "@opencode/schema/event";
11
+ export { EventLog } from "@opencode/schema/event-log";
12
+ export { FileSystem } from "@opencode/schema/filesystem";
13
+ export { Form } from "@opencode/schema/form";
14
+ export { Integration } from "@opencode/schema/integration";
15
+ export { Location } from "@opencode/schema/location";
16
+ export { Model } from "@opencode/schema/model";
17
+ export { Permission } from "@opencode/schema/permission";
18
+ export { PermissionSaved } from "@opencode/schema/permission-saved";
19
+ export { Project } from "@opencode/schema/project";
20
+ export { Worktree } from "@opencode/schema/worktree";
21
+ export { Vcs } from "@opencode/schema/vcs";
22
+ export { Provider } from "@opencode/schema/provider";
23
+ export { Pty } from "@opencode/schema/pty";
24
+ export { Question } from "@opencode/schema/question";
25
+ export { Reference } from "@opencode/schema/reference";
26
+ export { WebSearch } from "@opencode/schema/websearch";
27
+ export { AbsolutePath, RelativePath } from "@opencode/schema/schema";
28
+ export { Session } from "@opencode/schema/session";
29
+ export { SessionInbox } from "@opencode/schema/session-inbox";
30
+ export { SessionMessage } from "@opencode/schema/session-message";
31
+ export { Skill } from "@opencode/schema/skill";
32
+ export { Prompt } from "@opencode/schema/prompt";
33
+ export { PromptInput } from "@opencode/schema/prompt-input";
34
+ export type { OpenCodeEvent } from "@opencode/protocol/groups/event";
35
+ export type OpenCodeClient = Effect.Success<ReturnType<typeof OpenCode.make>>;
@@ -0,0 +1,75 @@
1
+ import {
2
+ ClientError2
3
+ } from "../chunks/service-probe-y2etg5bs.js";
4
+ import"../chunks/service-probe-vmytr4q8.js";
5
+ import"../chunks/service-probe-q4g3afnw.js";
6
+ import"../chunks/service-probe-6mptkzbc.js";
7
+ import"../chunks/service-probe-frbwqjmf.js";
8
+ import"../chunks/service-probe-t1xa31vm.js";
9
+ import"../chunks/service-probe-z6qdwcsf.js";
10
+ import {
11
+ exports_client
12
+ } from "../chunks/service-probe-7x67cf1q.js";
13
+
14
+ // src/effect/index.ts
15
+ import { Agent } from "@opencode/schema/agent";
16
+ import { Command } from "@opencode/schema/command";
17
+ import { Config } from "@opencode/schema/config";
18
+ import { Credential } from "@opencode/schema/credential";
19
+ import { Event } from "@opencode/schema/event";
20
+ import { EventLog } from "@opencode/schema/event-log";
21
+ import { FileSystem } from "@opencode/schema/filesystem";
22
+ import { Form } from "@opencode/schema/form";
23
+ import { Integration } from "@opencode/schema/integration";
24
+ import { Location } from "@opencode/schema/location";
25
+ import { Model } from "@opencode/schema/model";
26
+ import { Permission } from "@opencode/schema/permission";
27
+ import { PermissionSaved } from "@opencode/schema/permission-saved";
28
+ import { Project } from "@opencode/schema/project";
29
+ import { Worktree } from "@opencode/schema/worktree";
30
+ import { Vcs } from "@opencode/schema/vcs";
31
+ import { Provider } from "@opencode/schema/provider";
32
+ import { Pty } from "@opencode/schema/pty";
33
+ import { Question } from "@opencode/schema/question";
34
+ import { Reference } from "@opencode/schema/reference";
35
+ import { WebSearch } from "@opencode/schema/websearch";
36
+ import { AbsolutePath, RelativePath } from "@opencode/schema/schema";
37
+ import { Session } from "@opencode/schema/session";
38
+ import { SessionInbox } from "@opencode/schema/session-inbox";
39
+ import { SessionMessage } from "@opencode/schema/session-message";
40
+ import { Skill } from "@opencode/schema/skill";
41
+ import { Prompt } from "@opencode/schema/prompt";
42
+ import { PromptInput } from "@opencode/schema/prompt-input";
43
+ export {
44
+ AbsolutePath,
45
+ Agent,
46
+ ClientError2 as ClientError,
47
+ Command,
48
+ Config,
49
+ Credential,
50
+ Event,
51
+ EventLog,
52
+ FileSystem,
53
+ Form,
54
+ Integration,
55
+ Location,
56
+ Model,
57
+ exports_client as OpenCode,
58
+ Permission,
59
+ PermissionSaved,
60
+ Project,
61
+ Prompt,
62
+ PromptInput,
63
+ Provider,
64
+ Pty,
65
+ Question,
66
+ Reference,
67
+ RelativePath,
68
+ Session,
69
+ SessionInbox,
70
+ SessionMessage,
71
+ Skill,
72
+ Vcs,
73
+ WebSearch,
74
+ Worktree
75
+ };
@@ -0,0 +1,20 @@
1
+ export * as RpcClientRuntime from "./rpc.js";
2
+ import type { Rpc } from "@opencode/schema/rpc";
3
+ import type { RpcError, RpcInternalError } from "@opencode/protocol/errors";
4
+ import type { OpenCodeEvent } from "@opencode/protocol/groups/event";
5
+ import { Effect, Schema, Stream } from "effect";
6
+ import type { RpcArguments, RpcCallOptions } from "../promise/rpc.js";
7
+ import type { RpcCallInput, RpcCallOutput } from "./api/api.js";
8
+ type DecodeError<S> = S extends Schema.Top ? Schema.SchemaError : never;
9
+ export type RpcClient<D extends Rpc.Definition, E = never, Options = RpcCallOptions, EventError = E> = {
10
+ readonly [Name in keyof D["methods"]]: (...args: RpcArguments<Rpc.Input<D["methods"][Name]["input"]>, Options>) => Effect.Effect<Rpc.Output<D["methods"][Name]["output"]>, Rpc.MethodError<D["methods"][Name]> | DecodeError<D["methods"][Name]["output"]> | E>;
11
+ } & {
12
+ readonly events: {
13
+ readonly subscribe: <Name extends keyof D["events"] & string>(name: Name) => Stream.Stream<Rpc.EventPayload<D, Name>, DecodeError<D["events"][Name]["schema"]> | EventError>;
14
+ };
15
+ };
16
+ export interface RpcApi<E = never, Options = RpcCallOptions, EventError = E> {
17
+ <D extends Rpc.Definition>(definition: D): RpcClient<D, E, Options, EventError>;
18
+ }
19
+ export declare function make<CallError, EventError>(call: (input: RpcCallInput, options?: RpcCallOptions) => Effect.Effect<RpcCallOutput, CallError>, subscribe: () => Stream.Stream<OpenCodeEvent, EventError>): RpcApi<Exclude<CallError, RpcError | RpcInternalError> | Rpc.SystemError, RpcCallOptions, EventError>;
20
+ export declare function aborted(signal: AbortSignal): Effect.Effect<void, never, never>;
@@ -0,0 +1,11 @@
1
+ import {
2
+ make4,
3
+ aborted2,
4
+ exports_rpc
5
+ } from "../chunks/service-probe-z6qdwcsf.js";
6
+ import"../chunks/service-probe-t1xa31vm.js";
7
+ export {
8
+ exports_rpc as RpcClientRuntime,
9
+ aborted2 as aborted,
10
+ make4 as make
11
+ };
@@ -0,0 +1,90 @@
1
+ import { Effect, FileSystem, Schema } from "effect";
2
+ import type { DiscoverOptions, EnsureOptions, StopOptions } from "../service.js";
3
+ import { headers } from "../service-probe.js";
4
+ export * from "../service.js";
5
+ export { headers };
6
+ /** Contents of the local service registration file. */
7
+ export type Info = import("../service.js").Info;
8
+ /** Discover a healthy, compatible local service without starting one. */
9
+ export declare const discover: (options?: DiscoverOptions | undefined) => Effect.Effect<{
10
+ url: string;
11
+ auth: {
12
+ type: "basic";
13
+ username: string;
14
+ password: string;
15
+ } | undefined;
16
+ } | undefined, never, FileSystem.FileSystem>;
17
+ /** Recognize an authenticated compatible service bound to an expected URL, including while it starts or fails. */
18
+ export declare const incumbent: (options: DiscoverOptions & {
19
+ readonly url: string;
20
+ }) => Effect.Effect<{
21
+ endpoint: {
22
+ url: string;
23
+ auth: {
24
+ type: "basic";
25
+ username: string;
26
+ password: string;
27
+ } | undefined;
28
+ };
29
+ state: "failed" | "ready" | "waiting";
30
+ } | undefined, never, FileSystem.FileSystem>;
31
+ /** Ensure a healthy, compatible local service is running. */
32
+ export declare const ensure: (options?: EnsureOptions | undefined) => Effect.Effect<{
33
+ url: string;
34
+ auth: {
35
+ type: "basic";
36
+ username: string;
37
+ password: string;
38
+ } | undefined;
39
+ }, Error, FileSystem.FileSystem>;
40
+ /** Stop the registered local service. */
41
+ export declare const stop: (options?: StopOptions | undefined) => Effect.Effect<void, Error, FileSystem.FileSystem>;
42
+ /** Schema for the local service registration file. */
43
+ export declare const Info: Schema.Struct<{
44
+ readonly id: Schema.optional<Schema.String>;
45
+ readonly version: Schema.optional<Schema.String>;
46
+ readonly url: Schema.String;
47
+ readonly pid: Schema.Int;
48
+ readonly password: Schema.optional<Schema.String>;
49
+ }>;
50
+ /** Effect-based local service lifecycle operations. */
51
+ export declare const Service: {
52
+ discover: (options?: DiscoverOptions | undefined) => Effect.Effect<{
53
+ url: string;
54
+ auth: {
55
+ type: "basic";
56
+ username: string;
57
+ password: string;
58
+ } | undefined;
59
+ } | undefined, never, FileSystem.FileSystem>;
60
+ incumbent: (options: DiscoverOptions & {
61
+ readonly url: string;
62
+ }) => Effect.Effect<{
63
+ endpoint: {
64
+ url: string;
65
+ auth: {
66
+ type: "basic";
67
+ username: string;
68
+ password: string;
69
+ } | undefined;
70
+ };
71
+ state: "failed" | "ready" | "waiting";
72
+ } | undefined, never, FileSystem.FileSystem>;
73
+ ensure: (options?: EnsureOptions | undefined) => Effect.Effect<{
74
+ url: string;
75
+ auth: {
76
+ type: "basic";
77
+ username: string;
78
+ password: string;
79
+ } | undefined;
80
+ }, Error, FileSystem.FileSystem>;
81
+ stop: (options?: StopOptions | undefined) => Effect.Effect<void, Error, FileSystem.FileSystem>;
82
+ headers: typeof headers;
83
+ Info: Schema.Struct<{
84
+ readonly id: Schema.optional<Schema.String>;
85
+ readonly version: Schema.optional<Schema.String>;
86
+ readonly url: Schema.String;
87
+ readonly pid: Schema.Int;
88
+ readonly password: Schema.optional<Schema.String>;
89
+ }>;
90
+ };
@@ -0,0 +1,187 @@
1
+ import {
2
+ spawnServiceContender2,
3
+ contenderPool2
4
+ } from "../chunks/service-probe-ve4aws36.js";
5
+ import {
6
+ defaultEnsureTiming2,
7
+ ensureTiming2
8
+ } from "../chunks/service-probe-xgnj2w4v.js";
9
+ import {
10
+ matchesVersion2
11
+ } from "../chunks/service-probe-sxt88q69.js";
12
+ import {
13
+ prepare2,
14
+ environment2,
15
+ complete2,
16
+ clear2
17
+ } from "../chunks/service-probe-gx9wnkzr.js";
18
+ import {
19
+ decide2,
20
+ fallback2,
21
+ same2,
22
+ probeResult2,
23
+ headers2
24
+ } from "../chunks/service-probe-2ny4vxct.js";
25
+ import"../chunks/service-probe-qav6mfdz.js";
26
+
27
+ // src/effect/service.ts
28
+ import { Effect, FileSystem, Option, Schedule, Schema } from "effect";
29
+ var discover = Effect.fn("service.discover")(function* (options = {}) {
30
+ const found = (yield* registered(options.file)).service;
31
+ if (found?.state !== "ready")
32
+ return;
33
+ if (!found.compatible)
34
+ return;
35
+ if (!matchesVersion2(found.version, options))
36
+ return;
37
+ return found.endpoint;
38
+ });
39
+ var incumbent = Effect.fn("service.incumbent")(function* (options) {
40
+ const info = yield* read(options.file);
41
+ if (info === undefined)
42
+ return;
43
+ const found = (yield* Effect.promise(() => probeResult2({ ...info, url: options.url }))).service;
44
+ if (!found?.compatible)
45
+ return;
46
+ if (!matchesVersion2(found.version, options))
47
+ return;
48
+ return { endpoint: found.endpoint, state: found.state };
49
+ });
50
+ var ensure = Effect.fn("service.ensure")(function* (options = {}) {
51
+ const timing = ensureTiming2(options);
52
+ const pool = contenderPool2(timing);
53
+ let timeouts;
54
+ let announced = false;
55
+ const announce = (reason, previousVersion) => Effect.sync(() => {
56
+ if (announced)
57
+ return;
58
+ announced = true;
59
+ options.onStart?.(reason, previousVersion);
60
+ });
61
+ const spawnContender = Effect.gen(function* () {
62
+ const [command, ...args] = options.command ?? ["opencode", "serve", "--service"];
63
+ if (command === undefined)
64
+ return yield* Effect.fail(new Error("Missing service command"));
65
+ const env = yield* Effect.tryPromise(() => environment2(options.file ?? fallback2(), options.env));
66
+ return yield* Effect.try({
67
+ try: () => {
68
+ return spawnServiceContender2(command, args, env);
69
+ },
70
+ catch: (cause) => new Error("Failed to start server", { cause })
71
+ });
72
+ });
73
+ const found = yield* Effect.gen(function* () {
74
+ const registration = yield* registered(options.file, timing.requestTimeout);
75
+ const info = registration.info;
76
+ const service2 = registration.service;
77
+ if (registration.timedOut && info !== undefined) {
78
+ timeouts = {
79
+ info,
80
+ count: timeouts !== undefined && same2(timeouts.info, info) ? timeouts.count + 1 : 1
81
+ };
82
+ if (timeouts.count >= 3) {
83
+ yield* announce("missing");
84
+ yield* Effect.logWarning("Background service is unresponsive; recovery cannot preserve persistent terminals");
85
+ yield* Effect.tryPromise(() => clear2(options.file ?? fallback2()));
86
+ yield* terminate(info, options, timing);
87
+ pool.evict(info.pid);
88
+ pool.recruitNow();
89
+ timeouts = undefined;
90
+ }
91
+ } else
92
+ timeouts = undefined;
93
+ if (service2 !== undefined) {
94
+ pool.serviceAnswered();
95
+ const decision = decide2(service2, options);
96
+ if (decision._tag === "fail")
97
+ return yield* Effect.fail(decision.error);
98
+ if (decision._tag === "reuse") {
99
+ yield* Effect.tryPromise(() => complete2(options.file ?? fallback2(), service2.info));
100
+ return Option.some(service2);
101
+ }
102
+ if (decision._tag === "replace") {
103
+ yield* announce("version-mismatch", service2.version);
104
+ if (service2.state !== "ready")
105
+ yield* Effect.logWarning("Background service is not ready; replacement cannot preserve persistent terminals");
106
+ yield* stop({ file: options.file, pty: decision.pty }).pipe(Effect.ignore);
107
+ pool.evict(service2.info.pid);
108
+ }
109
+ return Option.none();
110
+ }
111
+ const failed = pool.reap();
112
+ if (failed !== undefined)
113
+ return yield* Effect.fail(failed);
114
+ if (pool.shouldRecruit(info !== undefined)) {
115
+ yield* announce("missing");
116
+ pool.add(yield* spawnContender);
117
+ }
118
+ return Option.none();
119
+ }).pipe(Effect.repeat({
120
+ until: Option.isSome,
121
+ schedule: Schedule.spaced(timing.pollInterval).pipe(Schedule.upTo({ duration: timing.promiseTimeout }))
122
+ }), Effect.ensuring(Effect.sync(() => pool.releaseAll())));
123
+ if (Option.isNone(found))
124
+ return yield* Effect.fail(pool.failure() ?? new Error("Timed out waiting for the background service to start"));
125
+ return found.value.endpoint;
126
+ });
127
+ var stop = Effect.fn("service.stop")(function* (options = {}) {
128
+ const info = yield* read(options.file);
129
+ yield* Effect.tryPromise(() => options.pty === "handoff" && info !== undefined ? prepare2(options.file ?? fallback2(), info, defaultEnsureTiming2.requestTimeout) : clear2(options.file ?? fallback2())).pipe(Effect.catch((cause) => Effect.logWarning("Failed to prepare persistent terminals for replacement", cause)));
130
+ if (info !== undefined)
131
+ yield* terminate(info, options, ensureTiming2(options));
132
+ });
133
+ var Info = Schema.Struct({
134
+ id: Schema.optional(Schema.String),
135
+ version: Schema.optional(Schema.String),
136
+ url: Schema.String,
137
+ pid: Schema.Int.check(Schema.isGreaterThan(0)),
138
+ password: Schema.optional(Schema.String)
139
+ });
140
+ var decode = Schema.decodeUnknownEffect(Schema.fromJsonString(Info));
141
+ var read = Effect.fnUntraced(function* (file) {
142
+ const fs = yield* FileSystem.FileSystem;
143
+ const text = yield* fs.readFileString(file ?? fallback2()).pipe(Effect.option);
144
+ if (Option.isNone(text))
145
+ return;
146
+ return yield* decode(text.value).pipe(Effect.option, Effect.map(Option.getOrUndefined));
147
+ });
148
+ var registered = Effect.fnUntraced(function* (file, timeout) {
149
+ const info = yield* read(file);
150
+ if (info === undefined)
151
+ return { info: undefined, service: undefined, timedOut: false };
152
+ return { info, ...yield* Effect.promise(() => probeResult2(info, timeout)) };
153
+ });
154
+ var poll = (timing) => Schedule.max([Schedule.spaced(timing.stopPollInterval), Schedule.recurs(timing.stopPollAttempts)]);
155
+ var signal = (pid, name) => Effect.try({ try: () => process.kill(pid, name), catch: (cause) => cause }).pipe(Effect.ignore);
156
+ var stopped = Effect.fnUntraced(function* (pid) {
157
+ const running = yield* Effect.try({ try: () => process.kill(pid, 0), catch: () => false }).pipe(Effect.orElseSucceed(() => false));
158
+ if (!running)
159
+ return true;
160
+ return yield* Effect.fail(new Error(`Server process ${pid} is still running`));
161
+ });
162
+ var terminate = Effect.fnUntraced(function* (info, options, timing) {
163
+ const current = yield* read(options.file);
164
+ if (current === undefined || !same2(current, info))
165
+ return;
166
+ yield* signal(info.pid, "SIGTERM");
167
+ const done = yield* stopped(info.pid).pipe(Effect.retry(poll(timing)), Effect.option);
168
+ if (Option.isNone(done)) {
169
+ yield* signal(info.pid, "SIGKILL");
170
+ yield* stopped(info.pid).pipe(Effect.retry(poll(timing)));
171
+ }
172
+ const latest = yield* read(options.file);
173
+ if (latest === undefined || !same2(latest, info))
174
+ return;
175
+ const fs = yield* FileSystem.FileSystem;
176
+ yield* fs.remove(options.file ?? fallback2()).pipe(Effect.ignore);
177
+ });
178
+ var Service = { discover, incumbent, ensure, stop, headers: headers2, Info };
179
+ export {
180
+ Info,
181
+ Service,
182
+ discover,
183
+ ensure,
184
+ headers2 as headers,
185
+ incumbent,
186
+ stop
187
+ };
@@ -0,0 +1,84 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "name": "@opencode/client",
4
+ "version": "2.0.28",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/anomalyco/opencode.git",
10
+ "directory": "packages/client"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "exports": {
19
+ ".": {
20
+ "import": "./dist/promise/index.js",
21
+ "types": "./dist/promise/index.d.ts"
22
+ },
23
+ "./promise": {
24
+ "import": "./dist/promise/index.js",
25
+ "types": "./dist/promise/index.d.ts"
26
+ },
27
+ "./promise/api": {
28
+ "import": "./dist/promise/api.js",
29
+ "types": "./dist/promise/api.d.ts"
30
+ },
31
+ "./service": {
32
+ "import": "./dist/promise/service.js",
33
+ "types": "./dist/promise/service.d.ts"
34
+ },
35
+ "./solid": {
36
+ "import": "./dist/solid/index.js",
37
+ "types": "./dist/solid/index.d.ts"
38
+ },
39
+ "./effect": {
40
+ "import": "./dist/effect/index.js",
41
+ "types": "./dist/effect/index.d.ts"
42
+ },
43
+ "./effect/api": {
44
+ "import": "./dist/effect/api.js",
45
+ "types": "./dist/effect/api.d.ts"
46
+ },
47
+ "./effect/service": {
48
+ "import": "./dist/effect/service.js",
49
+ "types": "./dist/effect/service.d.ts"
50
+ }
51
+ },
52
+ "scripts": {
53
+ "build": "bun run script/build-package.ts",
54
+ "generate": "bun run script/build.ts",
55
+ "check:generated": "bun run generate && git diff --exit-code -- src/promise/generated src/effect/generated src/effect/api",
56
+ "test": "bun test --timeout 5000",
57
+ "typecheck": "tsgo --noEmit"
58
+ },
59
+ "dependencies": {
60
+ "@opencode/schema": "2.0.28",
61
+ "@opencode/protocol": "2.0.28"
62
+ },
63
+ "peerDependencies": {
64
+ "effect": "4.0.1",
65
+ "solid-js": ">=1.9.0"
66
+ },
67
+ "peerDependenciesMeta": {
68
+ "effect": {
69
+ "optional": true
70
+ },
71
+ "solid-js": {
72
+ "optional": true
73
+ }
74
+ },
75
+ "devDependencies": {
76
+ "@effect/platform-node": "4.0.1",
77
+ "@opencode/httpapi-codegen": "2.0.28",
78
+ "@tsconfig/bun": "1.0.9",
79
+ "@types/bun": "1.4.0",
80
+ "@typescript/native-preview": "7.0.0-dev.20251207.1",
81
+ "effect": "4.0.1",
82
+ "solid-js": "1.9.15"
83
+ }
84
+ }
@@ -0,0 +1,21 @@
1
+ import type { OpenCode } from "./client.js";
2
+ type Client = ReturnType<typeof OpenCode.make>;
3
+ export type { RpcApi, RpcCallOptions, RpcClient, RpcEventPayload } from "./rpc.js";
4
+ export type AgentApi = Client["agent"];
5
+ export type CommandApi = Client["command"];
6
+ export type ConfigApi = Client["config"];
7
+ export type CredentialApi = Client["credential"];
8
+ export type EventApi = Client["event"];
9
+ export type GenerateApi = Client["generate"];
10
+ export type IntegrationApi = Client["integration"];
11
+ export type McpApi = Client["mcp"];
12
+ export type ModelApi = Client["model"];
13
+ export type PluginApi = Client["plugin"];
14
+ export type PermissionApi = Client["permission"];
15
+ export type ProviderApi = Client["provider"];
16
+ export type ReferenceApi = Client["reference"];
17
+ export type WebSearchApi = Client["websearch"];
18
+ export type SessionApi = Client["session"];
19
+ export type SkillApi = Client["skill"];
20
+ export type VcsApi = Client["vcs"];
21
+ export type WorktreeApi = Client["worktree"];