@bjorntech/key-ferry 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +79 -13
  2. package/SECURITY.md +20 -0
  3. package/dist/contracts.d.ts +23 -0
  4. package/dist/contracts.d.ts.map +1 -1
  5. package/dist/contracts.js.map +1 -1
  6. package/dist/options.d.ts +7 -0
  7. package/dist/options.d.ts.map +1 -1
  8. package/dist/options.js +28 -2
  9. package/dist/options.js.map +1 -1
  10. package/dist/plugin.d.ts +4 -0
  11. package/dist/plugin.d.ts.map +1 -1
  12. package/dist/plugin.js +33 -171
  13. package/dist/plugin.js.map +1 -1
  14. package/dist/project-config.d.ts +3 -0
  15. package/dist/project-config.d.ts.map +1 -0
  16. package/dist/project-config.js +3 -0
  17. package/dist/project-config.js.map +1 -0
  18. package/dist/rpc.d.ts +141 -6
  19. package/dist/rpc.d.ts.map +1 -1
  20. package/dist/rpc.js +117 -35
  21. package/dist/rpc.js.map +1 -1
  22. package/dist/scoped-config.d.ts +35 -0
  23. package/dist/scoped-config.d.ts.map +1 -0
  24. package/dist/scoped-config.js +224 -0
  25. package/dist/scoped-config.js.map +1 -0
  26. package/dist/scoped-controller.d.ts +40 -0
  27. package/dist/scoped-controller.d.ts.map +1 -0
  28. package/dist/scoped-controller.js +468 -0
  29. package/dist/scoped-controller.js.map +1 -0
  30. package/dist/scopes/controller-helpers.d.ts +47 -0
  31. package/dist/scopes/controller-helpers.d.ts.map +1 -0
  32. package/dist/scopes/controller-helpers.js +268 -0
  33. package/dist/scopes/controller-helpers.js.map +1 -0
  34. package/dist/scopes/controller-types.d.ts +22 -0
  35. package/dist/scopes/controller-types.d.ts.map +1 -0
  36. package/dist/scopes/controller-types.js +2 -0
  37. package/dist/scopes/controller-types.js.map +1 -0
  38. package/dist/tui.d.ts +31 -33
  39. package/dist/tui.d.ts.map +1 -1
  40. package/dist/tui.js +111 -35
  41. package/dist/tui.js.map +1 -1
  42. package/docs/architecture.md +27 -1
  43. package/docs/troubleshooting.md +26 -1
  44. package/examples/README.md +47 -0
  45. package/examples/global/.env.schema +6 -0
  46. package/examples/global/opencode.json +31 -0
  47. package/examples/project/.env.schema +6 -0
  48. package/examples/project/.opencode/key-ferry.jsonc +10 -0
  49. package/examples/project/opencode.json +11 -0
  50. package/examples/{opencode.jsonc → single-project/opencode.json} +17 -16
  51. package/package.json +4 -1
  52. /package/examples/{.env.schema → single-project/.env.schema} +0 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @bjorntech/key-ferry
2
2
 
3
- Project-scoped Key Ferry credential proxy integration for OpenCode V2.
3
+ Global and project-scoped Key Ferry credential proxy integration for OpenCode V2.
4
4
 
5
5
  ## What it protects
6
6
 
@@ -45,7 +45,7 @@ native OpenCode V2 package types and Effect 4.0.1.
45
45
  ## Installation
46
46
 
47
47
  OpenCode installs configured npm plugins automatically. Add the package to the
48
- global OpenCode plugin configuration (normally `~/.config/opencode/opencode.jsonc`)
48
+ global OpenCode plugin configuration (normally `~/.config/opencode/opencode.json`)
49
49
  and preserve any unrelated entries already there:
50
50
 
51
51
  ```jsonc
@@ -87,9 +87,9 @@ brew install dmno-dev/tap/varlock
87
87
  varlock --version
88
88
  ```
89
89
 
90
- If Homebrew is unavailable, use the pinned Varlock 1.23.0 installer from the
91
- official Varlock source and ensure the resulting `varlock` executable is on
92
- `PATH`. The plugin does not install Varlock or unlock a secret store.
90
+ The plugin does not install Varlock or unlock a secret store. Configure its
91
+ environment and authentication separately, following the
92
+ [Varlock documentation](https://varlock.dev/).
93
93
 
94
94
  The package's sibling `./tui` export is discovered automatically when the
95
95
  server plugin is loaded. Do not add a duplicate `cli.json` entry for an
@@ -97,10 +97,61 @@ ordinary server-plugin installation. A global `cli.json` entry is only useful
97
97
  for a CLI-only deployment or a CLI connected to a remote OpenCode server that
98
98
  already loaded the server plugin.
99
99
 
100
- Set `projectDirectory` to the project root containing the schema, or to a
101
- central Varlock configuration directory such as `~/.config/key-ferry`. It does
102
- not need to be a Git repository. The plugin starts and owns its Varlock sidecar
103
- itself; do not wrap OpenCode or manually run `varlock proxy`.
100
+ Set `projectDirectory` to the Varlock project root containing the schema. The
101
+ plugin starts and owns its Varlock sidecar itself; do not wrap OpenCode or
102
+ manually run `varlock proxy`.
103
+
104
+ ## Global configuration and project opt-in
105
+
106
+ The native plugin entry can be installed once in OpenCode's global configuration.
107
+ Set `projectConfig.enabled` to `true` to make a project file eligible; it is
108
+ `false` by default for backwards compatibility. The global configuration owns
109
+ one Varlock group and its mappings. A project at the current OpenCode project
110
+ root can add a second, independent group in
111
+ `.opencode/key-ferry.jsonc`:
112
+
113
+ ```jsonc
114
+ {
115
+ "enabled": true,
116
+ "servers": {
117
+ "project-mcp": { "env": ["PROJECT_API_KEY"] }
118
+ }
119
+ }
120
+ ```
121
+
122
+ Use [the global example](examples/global/opencode.json), the
123
+ [project native example](examples/project/opencode.json), and the
124
+ [project mapping example](examples/project/.opencode/key-ferry.jsonc) as copyable
125
+ shapes. The project file only maps MCP servers that already exist in the
126
+ project's native OpenCode configuration; it does not define or install an MCP
127
+ server, and it does not need a second Key Ferry plugin entry. The paired
128
+ [native project example](examples/project/opencode.json) shows that separate
129
+ definition. The
130
+ synthetic `GLOBAL_API_KEY` and `PROJECT_API_KEY` names are schema references,
131
+ not credentials; configure each Varlock root and its secret source separately
132
+ using the [Varlock documentation](https://varlock.dev/). The project file is
133
+ read relative to the canonical project root, not the service
134
+ working directory, and its optional `projectDirectory` must remain inside that
135
+ root. It contains project mappings only: global mappings, environment keys, and
136
+ Varlock schema are never imported or unioned. Project mappings that reuse a
137
+ global server name must list that name in `overrides`; otherwise the collision
138
+ is rejected. Other globally bound servers are unaffected.
139
+
140
+ The global `projectConfig.activation` policy is a floor. `"auto"` activates an
141
+ eligible project automatically; `"manual"` requires the explicit
142
+ `key-ferry.activateProject` command. A project may restrict automatic global
143
+ activation with its own `"activation": "manual"`, but cannot escalate a manual
144
+ global policy. Manual activation is in-memory for the current location and is
145
+ not a stored enrollment list. Status is pure and reports all configured scopes,
146
+ including an inactive project scope. Default refresh and doctor retain their
147
+ global behavior; scoped project operations act only on the selected active
148
+ project group and never activate it. Use `activateProject` first when the
149
+ project is awaiting activation.
150
+
151
+ This opt-in is an execution policy, not an authentication or security boundary.
152
+ Varlock providers and `@exec` can execute code, and an untrusted repository is
153
+ not sandboxed by this feature. Review project files before enabling global
154
+ automatic activation.
104
155
 
105
156
  ## Configuration
106
157
 
@@ -133,8 +184,12 @@ are rejected. Literal local/private IP targets are rejected unless the
133
184
  explicit `allowPrivateNetwork: true` policy is set. Normal corporate DNS
134
185
  names are not rejected merely because they may resolve internally.
135
186
 
136
- Use `examples/.env.schema` for synthetic strict-egress values only. Mark each
137
- remote upstream host with `@proxy(domain="...")` and keep
187
+ Use `examples/single-project/.env.schema` only for the legacy single-root example. For the
188
+ global/project setup, copy `examples/global/.env.schema` into the configured
189
+ global Varlock root and `examples/project/.env.schema` into the project's
190
+ separate Varlock root. Do not reuse one combined schema or work around this
191
+ separation with Varlock imports: Varlock loads the full schema before Key Ferry
192
+ filters requested keys. Mark each remote upstream host with `@proxy(domain="...")` and keep
138
193
  `@proxyConfig={egress="strict"}`. Configure any secret source through Varlock;
139
194
  Key Ferry does not install Varlock, create its schema, or configure provider
140
195
  authentication. Never commit a real secret.
@@ -146,16 +201,27 @@ authentication. Never commit a real secret.
146
201
  | `key-ferry.status` | `/key-ferry-status` | `status` |
147
202
  | `key-ferry.refresh` | `/key-ferry-refresh` | `refresh` |
148
203
  | `key-ferry.doctor` | `/key-ferry-doctor` | `doctor` |
204
+ | `key-ferry.project.activate` | `/key-ferry-project-activate` | `activateProject` |
205
+ | `key-ferry.project.refresh` | `/key-ferry-project-refresh` | `refresh({ scope: "project" })` |
206
+ | `key-ferry.project.doctor` | `/key-ferry-project-doctor` | `doctor({ scope: "project" })` |
149
207
 
150
208
  The rename is intentionally breaking for the 0.1.0 release: no `varlock-*`
151
209
  command aliases are retained.
152
210
 
153
211
  Refresh and doctor report safe lifecycle and remote-configuration diagnostics.
154
- They do not provide credential prompts or collect credentials. Doctor can
212
+ Project commands select the active project group; they do not activate an
213
+ inactive project. `activateProject` starts an eligible manual project once for
214
+ the current location. They do not provide credential prompts or collect
215
+ credentials. Doctor can
155
216
  reconcile or recreate unhealthy selected `oauth:false` remote relays after
156
217
  Varlock readiness succeeds, so authentication still depends on the configured
157
218
  Varlock context.
158
219
 
220
+ Native plugin activation does not imply broker readiness. During startup,
221
+ mapped servers remain fail-closed until their group is ready; a healthy group
222
+ continues if another group fails. A disabled integration does not register
223
+ status RPC, so a 404 is expected.
224
+
159
225
  ## Transport and lifecycle limits
160
226
 
161
227
  The relay supports Streamable HTTP POST/GET/DELETE, streaming SSE, scoped
@@ -207,4 +273,4 @@ OpenCode TUI session.
207
273
  See [Architecture](docs/architecture.md),
208
274
  [Troubleshooting](docs/troubleshooting.md), and
209
275
  [Quality checks](docs/quality.md),
210
- [the example configuration](examples/opencode.jsonc).
276
+ [the single-project example](examples/single-project/opencode.json), [the global configuration example](examples/global/opencode.json), and [the project file example](examples/project/.opencode/key-ferry.jsonc).
package/SECURITY.md CHANGED
@@ -67,6 +67,26 @@ are covered by the project verification commands. Opt-in fixture results do not
67
67
  constitute production certification, compatibility with every external MCP
68
68
  provider, or a fully live OpenCode host/TUI session.
69
69
 
70
+ ## Global project configuration
71
+
72
+ A globally installed plugin can opt into loading a project-local
73
+ `.opencode/key-ferry.jsonc`, but `projectConfig.enabled` defaults to false.
74
+ Enabling it is a conscious workspace execution policy: project Varlock
75
+ providers and `@exec` may execute code, and this feature does not sandbox an
76
+ untrusted repository or authenticate it. Review project files before choosing
77
+ global automatic activation.
78
+
79
+ Global and project managers, Varlock roots, mappings, and environment keysets
80
+ remain separate. Project configuration does not import global mappings or
81
+ credentials. A project directory selector is restricted to the canonical
82
+ project root. Manual activation is held only in memory for the current
83
+ location; it is not an enrollment or allowlist mechanism.
84
+
85
+ Keep the Varlock schemas for those roots separate as well. Varlock loads a
86
+ schema before Key Ferry filters the requested environment keys, so a combined
87
+ schema would make both roots resolve every definition even though the broker
88
+ mappings remain separate.
89
+
70
90
  ## Reporting a vulnerability
71
91
 
72
92
  Report vulnerabilities through the repository's GitHub security reporting
@@ -10,6 +10,13 @@ export type ProjectDirectory = string & {
10
10
  readonly __projectDirectory: unique symbol;
11
11
  };
12
12
  export type ManagerPhase = "stopped" | "starting" | "ready" | "degraded" | "failed" | "stopping";
13
+ /** The two supported Key Ferry lifecycle scopes. */
14
+ export type ScopeId = "global" | "project";
15
+ /** Optional scope routing for public RPC operations. */
16
+ export interface ScopeSelector {
17
+ readonly scope?: ScopeId;
18
+ readonly server?: string;
19
+ }
13
20
  export type VarlockErrorCode = "invalid_config" | "unavailable" | "start_failed" | "refresh_failed" | "not_ready" | "disposed" | "protocol_error" | "timeout";
14
21
  declare const VarlockError_base: Schema.Class<VarlockError, Schema.TaggedStruct<"Varlock.Error", {
15
22
  readonly code: Schema.Literals<readonly ["invalid_config", "unavailable", "start_failed", "refresh_failed", "not_ready", "disposed", "protocol_error", "timeout"]>;
@@ -29,6 +36,22 @@ export interface SafeStatus {
29
36
  readonly lastRefreshAt?: string;
30
37
  readonly error?: VarlockError;
31
38
  readonly diagnostics?: readonly SafeDiagnostic[];
39
+ /** Present when the controller is serving more than the legacy global scope. */
40
+ readonly scopes?: readonly SafeScopeStatus[];
41
+ /** Server-to-scope bindings, never server configuration or credentials. */
42
+ readonly bindings?: Readonly<Record<string, ScopeId>>;
43
+ }
44
+ /** Secret-free status for one scope in an aggregate status response. */
45
+ export interface SafeScopeStatus {
46
+ readonly scope: ScopeId;
47
+ readonly projectDirectory: ProjectDirectory;
48
+ readonly phase: ManagerPhase;
49
+ readonly generation: number;
50
+ readonly pid?: number;
51
+ readonly lastRefreshAt?: string;
52
+ readonly error?: VarlockError;
53
+ readonly diagnostics?: readonly SafeDiagnostic[];
54
+ readonly activation?: "auto" | "manual" | "awaiting_activation";
32
55
  }
33
56
  /** Secret-free configuration diagnostics surfaced to RPC/TUI consumers. */
34
57
  export interface SafeDiagnostic {
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAwB/D,sEAAsE;AACtE,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,WAAW,EAAgB,CAAC,eAAe,EAAE;IACpF,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;QACpB,gBAAgB;QAChB,aAAa;QACb,cAAc;QACd,gBAAgB;QAChB,WAAW;QACX,UAAU;QACV,gBAAgB;QAChB,SAAS;KACD,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,OAAO;CAC1B,CAAC;CAAG;AAkEL,uEAAuE;AACvE,MAAM,OAAO,sBAAuB,SAAQ,OAAO,CAAC,OAAO,EAGxD,CAAC,kCAAkC,CAAC;CAAG;AA+D1C,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,OAAO,EAAyC,CAC1F,0BAA0B,CAC3B;CAAG;AAEJ,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;IACnF,OAAO,KAAyB,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAiC/D,sEAAsE;AACtE,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,WAAW,EAAgB,CAAC,eAAe,EAAE;IACpF,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;QACpB,gBAAgB;QAChB,aAAa;QACb,cAAc;QACd,gBAAgB;QAChB,WAAW;QACX,UAAU;QACV,gBAAgB;QAChB,SAAS;KACD,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,OAAO;CAC1B,CAAC;CAAG;AAmFL,uEAAuE;AACvE,MAAM,OAAO,sBAAuB,SAAQ,OAAO,CAAC,OAAO,EAGxD,CAAC,kCAAkC,CAAC;CAAG;AA+D1C,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,OAAO,EAAyC,CAC1F,0BAA0B,CAC3B;CAAG;AAEJ,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;IACnF,OAAO,KAAyB,CAAC;AACnC,CAAC"}
package/dist/options.d.ts CHANGED
@@ -33,6 +33,13 @@ export interface ValidatedOptions {
33
33
  readonly manager: Omit<KeyFerryPluginOptions, "adapter"> & {
34
34
  readonly adapter: VarlockAdapterOptions;
35
35
  };
36
+ readonly projectConfig: ProjectConfigOptions;
37
+ }
38
+ export type ProjectConfigActivation = "auto" | "manual";
39
+ export interface ProjectConfigOptions {
40
+ readonly enabled: boolean;
41
+ readonly activation: ProjectConfigActivation;
42
+ readonly file: string;
36
43
  }
37
44
  /**
38
45
  * Decode untrusted OpenCode plugin options without touching process.env.
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAGxB,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC;KAC1E,CAAC;CACH;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,2BAA2B,CAAC;AAE9F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7D,oFAAoF;IACpF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,GAAG;QACzD,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;KACzC,CAAC;CACH;AA4QD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,OAAO,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,gBAAgB,UAAO,GACtB,gBAAgB,CAQlB;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,MAAM,GAChB,6BAA6B,CA6B/B"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAGxB,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC;KAC1E,CAAC;CACH;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,2BAA2B,CAAC;AAE9F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7D,oFAAoF;IACpF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,GAAG;QACzD,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;CAC9C;AAED,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAySD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,OAAO,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,gBAAgB,UAAO,GACtB,gBAAgB,CAQlB;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,MAAM,GAChB,6BAA6B,CA6B/B"}
package/dist/options.js CHANGED
@@ -134,6 +134,31 @@ function readBoolean(input, name, fallback) {
134
134
  throw new TypeError(`${name} must be a boolean`);
135
135
  return value;
136
136
  }
137
+ function normalizeProjectConfig(input) {
138
+ const value = input.projectConfig;
139
+ if (value === undefined)
140
+ return defaultProjectConfig();
141
+ if (!isRecord(value))
142
+ throw new TypeError("projectConfig must be an object");
143
+ return readProjectConfig(value);
144
+ }
145
+ function defaultProjectConfig() {
146
+ return { enabled: false, activation: "auto", file: ".opencode/key-ferry.jsonc" };
147
+ }
148
+ function readActivation(value) {
149
+ const activation = value ?? "auto";
150
+ if (activation !== "auto" && activation !== "manual")
151
+ throw new TypeError("projectConfig.activation must be auto or manual");
152
+ return activation;
153
+ }
154
+ function readProjectConfig(value) {
155
+ const enabled = readBoolean(value, "enabled", false);
156
+ const activation = readActivation(value.activation);
157
+ const file = value.file ?? ".opencode/key-ferry.jsonc";
158
+ if (typeof file !== "string" || file.length === 0 || file.startsWith("/") || file.includes("\0"))
159
+ throw new TypeError("projectConfig.file must be a relative path");
160
+ return { enabled, activation, file };
161
+ }
137
162
  function readTimeout(input, name, fallback, maximum) {
138
163
  const value = input[name];
139
164
  return value === undefined ? fallback : positiveInteger(value, name, maximum);
@@ -199,7 +224,7 @@ function resolveProjectDirectory(input, directory, resolveDirectory) {
199
224
  const value = resolveDirectory ? resolve(directory ?? process.cwd(), configured) : configured;
200
225
  return brandProjectDirectory(value);
201
226
  }
202
- function makeValidatedOptions(enabled, projectDirectory, adapter) {
227
+ function makeValidatedOptions(enabled, projectDirectory, adapter, projectConfig) {
203
228
  const manager = {
204
229
  enabled,
205
230
  ...(projectDirectory === undefined ? {} : { projectDirectory }),
@@ -210,6 +235,7 @@ function makeValidatedOptions(enabled, projectDirectory, adapter) {
210
235
  ...(projectDirectory === undefined ? {} : { projectDirectory }),
211
236
  adapter,
212
237
  manager,
238
+ projectConfig,
213
239
  };
214
240
  }
215
241
  /**
@@ -224,7 +250,7 @@ export function parseOptions(raw, directory, resolveDirectory = true) {
224
250
  const enabled = readBoolean(input, "enabled", true);
225
251
  const adapter = normalizeAdapter(input);
226
252
  const projectDirectory = resolveProjectDirectory(input, directory, resolveDirectory);
227
- return makeValidatedOptions(enabled, projectDirectory, adapter);
253
+ return makeValidatedOptions(enabled, projectDirectory, adapter, normalizeProjectConfig(input));
228
254
  }
229
255
  export function managerOptions(options, directory) {
230
256
  const environmentKeys = [
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
package/dist/plugin.d.ts CHANGED
@@ -15,6 +15,10 @@ export interface ProtectionState {
15
15
  readonly remoteHandles?: ReadonlyMap<string, RemoteRelayHandle>;
16
16
  readonly explicitlyDisabled?: ReadonlySet<string>;
17
17
  }
18
+ export interface ManagedEnvironmentState {
19
+ readonly original: Readonly<Record<string, string | undefined>>;
20
+ readonly injected: Readonly<Record<string, string>>;
21
+ }
18
22
  /**
19
23
  * Apply only explicitly configured local protections. A selected remote
20
24
  * server, missing key, or unavailable manager is disabled rather than falling
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAyB,KAAK,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,KAAK,EACV,6BAA6B,EAC7B,mBAAmB,EACnB,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,SAAS;IACxB,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;IACjE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACnE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;CAC3F;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnD;AAgFD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,EACpC,KAAK,EAAE,eAAe,GACrB,IAAI,CAcN;AAoBD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAoBhE,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAC1B,KAAK,EAAE,OAAO,EACd,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB,kBAAkB,CAGpB;AAeD,mFAAmF;AACnF,wBAAgB,UAAU,CACxB,OAAO,EAAE,6BAA6B,EACtC,YAAY,CAAC,EAAE,kBAAkB,EACjC,QAAQ,GAAE,cAA+B,GACxC,MAAM,CAAC,MAAM,CA8Pf"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EACV,6BAA6B,EAC7B,mBAAmB,EACnB,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,SAAS;IACxB,IAAI,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;IACjE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACnE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;CAC3F;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAgFD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,EACpC,KAAK,EAAE,eAAe,GACrB,IAAI,CAcN;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAoBhE,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAC1B,KAAK,EAAE,OAAO,EACd,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB,kBAAkB,CAGpB;AAeD,mFAAmF;AACnF,wBAAgB,UAAU,CACxB,OAAO,EAAE,6BAA6B,EACtC,YAAY,CAAC,EAAE,kBAAkB,EACjC,QAAQ,GAAE,cAA+B,GACxC,MAAM,CAAC,MAAM,CAqEf"}
package/dist/plugin.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import { Mcp, Plugin } from "@opencode/plugin/effect";
2
- import { Effect, Scope, Stream, Types } from "effect";
2
+ import { Effect, Types } from "effect";
3
3
  import { brokerRegistry } from "./broker-registry.js";
4
- import { managerOptions, parseOptions, } from "./options.js";
4
+ import { parseOptions } from "./options.js";
5
5
  import { makeRemoteRelayCoordinator, RELAY_AUTH_HEADER, safeForwardHeaders, isRemoteProtection, } from "./remote.js";
6
6
  import { KeyFerryRpc, publicMessage, rpcError, sanitizeStatus } from "./rpc.js";
7
+ import { loadScopedConfiguration } from "./scoped-config.js";
8
+ import { makeScopedController } from "./scoped-controller.js";
7
9
  function preserveDisabled(name, server, state) {
8
10
  return state.explicitlyDisabled?.has(name) ?? server.disabled === true;
9
11
  }
@@ -76,24 +78,6 @@ export function applyProtection(editor, options, state) {
76
78
  applyLocalProtection(editor, name, server, mapping, state);
77
79
  }
78
80
  }
79
- function snapshotServers(editor) {
80
- const result = new Map();
81
- for (const [name, config] of editor.list()) {
82
- if (config.type !== "remote")
83
- continue;
84
- result.set(name, {
85
- type: "remote",
86
- url: config.url,
87
- ...(config.headers === undefined ? {} : { headers: { ...config.headers } }),
88
- ...(config.oauth === undefined ? {} : { oauth: config.oauth }),
89
- ...(config.disabled === undefined ? {} : { disabled: config.disabled }),
90
- ...(config.codemode === undefined ? {} : { codemode: config.codemode }),
91
- ...(config.timeout === undefined ? {} : { timeout: config.timeout }),
92
- ...(config.protocol === undefined ? {} : { protocol: config.protocol }),
93
- });
94
- }
95
- return result;
96
- }
97
81
  function unavailableHealthDecision(ready, remoteHandleCount) {
98
82
  if (ready)
99
83
  return "clear";
@@ -133,164 +117,42 @@ export function makePlugin(factory, relayFactory, registry = brokerRegistry) {
133
117
  return Effect.void;
134
118
  const program = Effect.gen(function* () {
135
119
  const pluginScope = yield* Effect.scope;
136
- const brokerOptions = managerOptions(parsed, ctx.location.project.directory);
137
- const lease = yield* registry.acquire(factory, brokerOptions);
138
- yield* Effect.addFinalizer(() => lease.release);
139
- let state = { ready: false, environment: {} };
140
- let observedGeneration = -1;
141
- let remoteDiagnostics = [];
142
- let serverSnapshots = new Map();
143
- let explicitlyDisabled = new Set();
144
- let capturedDisabled = false;
145
- const remote = makeRemoteRelayCoordinator(relayFactory, parsed.adapter.allowPrivateNetwork);
146
- const setState = (next) => {
147
- state = { ...next, explicitlyDisabled };
148
- };
149
- const publicStatus = (status) => sanitizeStatus({
150
- ...status,
151
- ...(remoteDiagnostics.length === 0 ? {} : { diagnostics: remoteDiagnostics }),
152
- });
153
- const reconcileRemote = (status, environment) => Effect.gen(function* () {
154
- // A health failure may have stopped and removed the current handles.
155
- // Reconcile from the manager capability again during doctor, rather
156
- // than treating doctor as a metadata-only operation.
157
- if (status.phase === "ready") {
158
- if (!(yield* remote.health))
159
- yield* remote.stopAll;
160
- yield* Effect.provideService(remote.reconcile(serverSnapshots, parsed.adapter.servers, environment, status.generation), Scope.Scope, pluginScope);
120
+ const configuration = yield* Effect.promise(() => loadScopedConfiguration(ctx.options, { project: ctx.location.project }));
121
+ let controller;
122
+ yield* ctx.mcp.transform((next) => {
123
+ if (controller) {
124
+ controller.setEditor(next);
125
+ controller.apply(next);
161
126
  }
162
127
  else {
163
- yield* remote.stopAll;
128
+ controller = makeScopedController({
129
+ configuration,
130
+ factory,
131
+ relayFactory,
132
+ registry,
133
+ scope: pluginScope,
134
+ reload: ctx.mcp.reload,
135
+ editor: next,
136
+ startEmptyGlobal: !parsed.projectConfig.enabled,
137
+ });
138
+ controller.capture(next);
139
+ controller.apply(next);
164
140
  }
165
- remoteDiagnostics = remote.diagnostics;
166
- const next = {
167
- ready: status.phase === "ready",
168
- environment,
169
- remoteHandles: remote.handles,
170
- };
171
- setState(next);
172
- return next;
173
- });
174
- yield* ctx.mcp.transform((editor) => {
175
- if (!capturedDisabled) {
176
- explicitlyDisabled = new Set(editor
177
- .list()
178
- .filter(([, config]) => config.disabled === true)
179
- .map(([name]) => name));
180
- capturedDisabled = true;
181
- }
182
- serverSnapshots = snapshotServers(editor);
183
- applyProtection(editor, parsed.adapter, {
184
- ...state,
185
- explicitlyDisabled,
186
- remoteHandles: remote.handles,
187
- });
188
- });
189
- const failClosed = Effect.gen(function* () {
190
- setState({ ready: false, environment: {}, remoteHandles: remote.handles });
191
- yield* remote.stopAll;
192
- yield* ctx.mcp.reload();
193
141
  });
194
- const observeReady = lease.ensureReady.pipe(Effect.flatMap((result) => Effect.gen(function* () {
195
- if (result.status.generation <= observedGeneration)
196
- return;
197
- yield* reconcileRemote(result.status, result.environment);
198
- observedGeneration = result.status.generation;
199
- yield* ctx.mcp.reload();
200
- })), Effect.catch(() => failClosed));
201
- const observeChanges = Effect.gen(function* () {
202
- const subscription = yield* lease.subscribe;
203
- yield* Stream.runForEach(subscription.changes, (status) => status.phase === "ready"
204
- ? lease.environment.pipe(Effect.flatMap((environment) => status.generation > observedGeneration
205
- ? Effect.gen(function* () {
206
- yield* reconcileRemote(status, environment);
207
- observedGeneration = status.generation;
208
- yield* ctx.mcp.reload();
209
- })
210
- : Effect.void))
211
- : failClosed);
212
- });
213
- yield* Effect.forkScoped(observeReady);
214
- yield* Effect.forkScoped(observeChanges.pipe(Effect.catch(() => Effect.void)));
142
+ if (!controller)
143
+ return;
144
+ const activeController = controller;
145
+ yield* Effect.addFinalizer(() => activeController.dispose);
146
+ yield* activeController.start;
147
+ if (parsed.projectConfig.enabled)
148
+ yield* activeController.watch(() => loadScopedConfiguration(ctx.options, { project: ctx.location.project }));
215
149
  yield* ctx.mcp.reload();
216
- const explicitRecovery = (operation) => Effect.gen(function* () {
217
- const status = yield* lease.status;
218
- if (status.phase === "failed") {
219
- yield* failClosed;
220
- return yield* registry.retry(factory, brokerOptions);
221
- }
222
- if (status.phase === "starting")
223
- return yield* lease.ensureReady;
224
- return yield* operation === "refresh" ? lease.refreshReady : lease.ensureReady;
225
- });
226
150
  yield* ctx.rpc.register(KeyFerryRpc, {
227
- status: () => lease.status.pipe(Effect.map(publicStatus)),
228
- refresh: (_, context) => Effect.gen(function* () {
229
- setState({ ready: false, environment: {}, remoteHandles: remote.handles });
230
- yield* remote.stopAll;
231
- yield* ctx.mcp.reload();
232
- const next = yield* explicitRecovery("refresh");
233
- yield* reconcileRemote(next.status, next.environment);
234
- yield* ctx.mcp.reload();
235
- return publicStatus(next.status);
236
- }).pipe(Effect.catch((error) => Effect.sync(() => {
237
- remoteDiagnostics = remote.diagnostics;
238
- setState({ ready: false, environment: {}, remoteHandles: remote.handles });
239
- }).pipe(Effect.andThen(ctx.mcp.reload()), Effect.andThen(Effect.fail(context.error("unavailable", publicMessage(error), rpcError(error))))))),
240
- doctor: (_, context) => Effect.gen(function* () {
241
- const next = yield* explicitRecovery("doctor").pipe(Effect.map(({ status, environment }) => ({
242
- status: sanitizeStatus(status),
243
- environment,
244
- })), Effect.catch((error) => lease.status.pipe(Effect.map((status) => ({
245
- status: sanitizeStatus({ ...status, error }),
246
- environment: {},
247
- })))));
248
- yield* reconcileRemote(next.status, next.environment);
249
- yield* ctx.mcp.reload();
250
- return publicStatus(next.status);
251
- }).pipe(Effect.catch((error) => Effect.fail(context.error("unavailable", publicMessage(error), rpcError(error))))),
252
- });
253
- const clearProtection = Effect.gen(function* () {
254
- setState({ ready: false, environment: {}, remoteHandles: remote.handles });
255
- yield* remote.stopAll;
256
- yield* ctx.mcp.reload();
257
- });
258
- const reconcileGeneration = (status) => Effect.gen(function* () {
259
- yield* remote.stopAll;
260
- const next = yield* lease.ensureReady.pipe(Effect.map(({ status, environment }) => ({
261
- status: sanitizeStatus(status),
262
- environment,
263
- })));
264
- observedGeneration = next.status.generation;
265
- if (next.status.phase === "ready") {
266
- yield* Effect.provideService(remote.reconcile(serverSnapshots, parsed.adapter.servers, next.environment, next.status.generation), Scope.Scope, pluginScope);
267
- remoteDiagnostics = remote.diagnostics;
268
- }
269
- setState({
270
- ready: next.status.phase === "ready",
271
- environment: next.environment,
272
- remoteHandles: remote.handles,
273
- });
274
- yield* ctx.mcp.reload();
151
+ status: (input) => activeController.statusSelected(input).pipe(Effect.map(sanitizeStatus)),
152
+ refresh: (input, context) => activeController.operation("refresh", input).pipe(Effect.map(sanitizeStatus), Effect.catch((error) => Effect.fail(context.error("unavailable", publicMessage(error), rpcError(error))))),
153
+ doctor: (input, context) => activeController.operation("doctor", input).pipe(Effect.map(sanitizeStatus), Effect.catch((error) => Effect.fail(context.error("unavailable", publicMessage(error), rpcError(error))))),
154
+ activateProject: (_, context) => activeController.activateProject.pipe(Effect.map(sanitizeStatus), Effect.catch((error) => Effect.fail(context.error("unavailable", publicMessage(error), rpcError(error))))),
275
155
  });
276
- // The manager owns process health. Poll only safe metadata and disable
277
- // protected servers immediately if the owned process dies. A changed
278
- // generation gets a fresh, allowlisted environment before reconnecting.
279
- yield* Effect.forkScoped(Effect.forever(Effect.gen(function* () {
280
- yield* Effect.sleep("30 seconds");
281
- const status = yield* lease.status;
282
- const relayHealthy = yield* status.phase !== "ready"
283
- ? Effect.succeed(false)
284
- : remote.health;
285
- const decision = healthPollDecision(status.phase, state.ready, remote.handles.size, relayHealthy, status.generation, observedGeneration);
286
- const action = {
287
- noop: Effect.void,
288
- clear: clearProtection,
289
- reconcile: reconcileGeneration(status).pipe(Effect.catch(() => Effect.void)),
290
- };
291
- yield* action[decision];
292
- })).pipe(Effect.catch(() => Effect.void)));
293
- yield* Effect.addFinalizer(() => remote.stopAll);
294
156
  });
295
157
  return program.pipe(Effect.catch(() => Effect.void));
296
158
  },