@bjorntech/key-ferry 0.1.7 → 0.1.8

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/README.md CHANGED
@@ -52,7 +52,7 @@ and preserve any unrelated entries already there:
52
52
  {
53
53
  "plugins": [
54
54
  {
55
- "package": "@bjorntech/key-ferry@0.1.7",
55
+ "package": "@bjorntech/key-ferry",
56
56
  "options": {
57
57
  "enabled": true,
58
58
  "requireStrictEgress": true,
@@ -0,0 +1,30 @@
1
+ import { Effect, Stream } from "effect";
2
+ import { type ProjectKeyFerryManagerFactory, type ProjectKeyFerryManagerOptions, type ProjectKeyFerryManagerService, type ResolvedEnvironment, type SafeStatus } from "./contracts.js";
3
+ export interface BrokerSubscription {
4
+ readonly current: Effect.Effect<SafeStatus>;
5
+ readonly changes: Stream.Stream<SafeStatus>;
6
+ }
7
+ export interface BrokerLease extends ProjectKeyFerryManagerService {
8
+ readonly subscribe: Effect.Effect<BrokerSubscription>;
9
+ readonly release: Effect.Effect<void>;
10
+ }
11
+ export interface BrokerRegistryOptions {
12
+ readonly canonicalize?: (directory: string) => Effect.Effect<string, unknown>;
13
+ readonly maxEntries?: number;
14
+ }
15
+ type BrokerResult = {
16
+ readonly status: SafeStatus;
17
+ readonly environment: ResolvedEnvironment;
18
+ };
19
+ /** A module-local broker; it deliberately does not communicate across processes. */
20
+ export declare function makeBrokerRegistry(configuration?: BrokerRegistryOptions): {
21
+ acquire: <R>(factory: ProjectKeyFerryManagerFactory<R>, options: ProjectKeyFerryManagerOptions) => Effect.Effect<BrokerLease, any, never>;
22
+ retry: (factory: ProjectKeyFerryManagerFactory<any>, options: ProjectKeyFerryManagerOptions) => Effect.Effect<BrokerResult, any, never>;
23
+ };
24
+ export declare const brokerRegistry: {
25
+ acquire: <R>(factory: ProjectKeyFerryManagerFactory<R>, options: ProjectKeyFerryManagerOptions) => Effect.Effect<BrokerLease, any, never>;
26
+ retry: (factory: ProjectKeyFerryManagerFactory<any>, options: ProjectKeyFerryManagerOptions) => Effect.Effect<BrokerResult, any, never>;
27
+ };
28
+ export type BrokerRegistry = ReturnType<typeof makeBrokerRegistry>;
29
+ export {};
30
+ //# sourceMappingURL=broker-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-registry.d.ts","sourceRoot":"","sources":["../src/broker-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,MAAM,EAON,MAAM,EACP,MAAM,QAAQ,CAAC;AAChB,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,EACxB,KAAK,UAAU,EAEhB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,WAAY,SAAQ,6BAA6B;IAChE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,KAAK,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAA;CAAE,CAAC;AA0H/F,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,aAAa,GAAE,qBAA0B;cAwPzD,CAAC,WACP,6BAA6B,CAAC,CAAC,CAAC,WAChC,6BAA6B,KACrC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC;qBA2B9B,6BAA6B,CAAC,GAAG,CAAC,WAClC,6BAA6B,KACrC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC;EAiD3C;AAED,eAAO,MAAM,cAAc;cAnFR,CAAC,WACP,6BAA6B,CAAC,CAAC,CAAC,WAChC,6BAA6B,KACrC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC;qBA2B9B,6BAA6B,CAAC,GAAG,CAAC,WAClC,6BAA6B,KACrC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC;CAmDM,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,347 @@
1
+ import { realpath } from "node:fs/promises";
2
+ import { Context, Deferred, Effect, Exit, Fiber, Layer, PubSub, Scope, Semaphore, Stream, } from "effect";
3
+ import { ProjectKeyFerryManager, VarlockError, } from "./contracts.js";
4
+ const adapterKeys = new Set([
5
+ "command",
6
+ "environmentKeys",
7
+ "startupTimeoutMs",
8
+ "commandTimeoutMs",
9
+ "reloadTimeoutMs",
10
+ "pollIntervalMs",
11
+ "requireStrictEgress",
12
+ ]);
13
+ function safeError(error, code) {
14
+ if (error instanceof VarlockError)
15
+ return error;
16
+ return new VarlockError({
17
+ code,
18
+ message: "Key Ferry manager operation failed",
19
+ retryable: code !== "disposed",
20
+ });
21
+ }
22
+ function stable(value) {
23
+ if (Array.isArray(value))
24
+ return `[${value.map(stable).join(",")}]`;
25
+ if (value && typeof value === "object")
26
+ return `{${Object.entries(value)
27
+ .sort(([a], [b]) => a.localeCompare(b))
28
+ .map(([key, item]) => `${JSON.stringify(key)}:${stable(item)}`)
29
+ .join(",")}}`;
30
+ return JSON.stringify(value);
31
+ }
32
+ function adapterOf(options) {
33
+ if (!options.adapter || typeof options.adapter !== "object")
34
+ throw new TypeError("manager adapter options are required");
35
+ return options.adapter;
36
+ }
37
+ function validateAdapterKeys(adapter) {
38
+ for (const key of Object.keys(adapter))
39
+ if (!adapterKeys.has(key))
40
+ throw new TypeError(`unsupported manager option: ${key}`);
41
+ }
42
+ function validateAdapterShape(adapter) {
43
+ if (!Array.isArray(adapter.command) || !Array.isArray(adapter.environmentKeys))
44
+ throw new TypeError("invalid manager adapter options");
45
+ if (adapter.environmentKeys.some((key) => typeof key !== "string"))
46
+ throw new TypeError("environmentKeys must be strings");
47
+ }
48
+ function validateOptions(options) {
49
+ const adapter = adapterOf(options);
50
+ validateAdapterKeys(adapter);
51
+ validateAdapterShape(adapter);
52
+ return adapter;
53
+ }
54
+ function keyFor(directory, options) {
55
+ const adapter = validateOptions(options);
56
+ return stable({
57
+ projectDirectory: directory,
58
+ owner: options.owner,
59
+ sessionID: options.sessionID,
60
+ command: adapter.command,
61
+ environmentKeys: [...new Set(adapter.environmentKeys)].sort(),
62
+ startupTimeoutMs: adapter.startupTimeoutMs,
63
+ commandTimeoutMs: adapter.commandTimeoutMs,
64
+ reloadTimeoutMs: adapter.reloadTimeoutMs,
65
+ pollIntervalMs: adapter.pollIntervalMs,
66
+ requireStrictEgress: adapter.requireStrictEgress,
67
+ });
68
+ }
69
+ function readinessChanged(entry, revision, ready) {
70
+ return revision !== entry.readinessRevision || ready !== entry.ready;
71
+ }
72
+ function awaitRefresh(entry, revision, ready, refresh) {
73
+ return Effect.gen(function* () {
74
+ const refreshed = yield* Deferred.await(refresh);
75
+ if (!readinessChanged(entry, revision, ready) && entry.ready === refresh)
76
+ return refreshed;
77
+ return yield* awaitCurrentReady(entry);
78
+ });
79
+ }
80
+ function awaitCurrentReady(entry) {
81
+ return Effect.gen(function* () {
82
+ while (true) {
83
+ const revision = entry.readinessRevision;
84
+ const ready = entry.ready;
85
+ const refresh = entry.refresh;
86
+ const result = yield* Deferred.await(ready);
87
+ if (readinessChanged(entry, revision, ready))
88
+ continue;
89
+ if (!refresh)
90
+ return result;
91
+ return yield* awaitRefresh(entry, revision, ready, refresh);
92
+ }
93
+ });
94
+ }
95
+ /** A module-local broker; it deliberately does not communicate across processes. */
96
+ export function makeBrokerRegistry(configuration = {}) {
97
+ const entries = new Set();
98
+ const factories = new WeakMap();
99
+ const lock = Effect.runSync(Semaphore.make(1));
100
+ const canonicalize = configuration.canonicalize ??
101
+ ((directory) => Effect.tryPromise(() => realpath(directory)));
102
+ const maxEntries = configuration.maxEntries ?? 128;
103
+ const publish = (entry, status) => {
104
+ entry.status = status;
105
+ return PubSub.publish(entry.events, status);
106
+ };
107
+ const start = (entry) => {
108
+ const operation = Effect.gen(function* () {
109
+ const context = yield* Layer.build(entry.factory.layer(entry.options)).pipe(Effect.provideService(Scope.Scope, entry.scope));
110
+ const manager = Context.get(context, ProjectKeyFerryManager);
111
+ entry.manager = manager;
112
+ const result = yield* manager.ensureReady;
113
+ yield* publish(entry, result.status);
114
+ return result;
115
+ });
116
+ return operation.pipe(Effect.catch((error) => {
117
+ const failure = safeError(error, "start_failed");
118
+ entry.failure = failure;
119
+ return publish(entry, {
120
+ phase: "failed",
121
+ projectDirectory: entry.options.projectDirectory,
122
+ generation: entry.status?.generation ?? 0,
123
+ error: failure,
124
+ }).pipe(Effect.flatMap(() => Effect.fail(failure)));
125
+ }));
126
+ };
127
+ const ensure = (entry) => Effect.gen(function* () {
128
+ if (entry.failure)
129
+ return yield* Effect.fail(entry.failure);
130
+ if (!entry.startup) {
131
+ entry.startup = yield* start(entry).pipe(Effect.forkDetach);
132
+ yield* Deferred.await(entry.ready).pipe(Effect.ignore);
133
+ }
134
+ return yield* awaitCurrentReady(entry);
135
+ });
136
+ const completeStartup = (entry, target) => Fiber.join(entry.startup).pipe(Effect.flatMap((result) => Deferred.succeed(target, result)), Effect.catch((error) => Deferred.fail(target, safeError(error, "start_failed"))), Effect.tap(() => Effect.sync(() => {
137
+ entry.attemptPending = false;
138
+ })), Effect.forkDetach);
139
+ const refreshShared = (entry) => Effect.gen(function* () {
140
+ if (entry.failure)
141
+ return yield* Effect.fail(entry.failure);
142
+ yield* Deferred.await(entry.ready);
143
+ const deferred = yield* lock.withPermit(Effect.gen(function* () {
144
+ if (entry.refresh)
145
+ return entry.refresh;
146
+ const next = yield* Deferred.make();
147
+ entry.refresh = next;
148
+ entry.readinessRevision += 1;
149
+ yield* publish(entry, {
150
+ phase: "starting",
151
+ projectDirectory: entry.options.projectDirectory,
152
+ generation: entry.status?.generation ?? 0,
153
+ });
154
+ yield* Effect.gen(function* () {
155
+ const result = yield* entry.manager.refreshReady;
156
+ yield* publish(entry, result.status);
157
+ yield* Deferred.succeed(next, result);
158
+ entry.ready = next;
159
+ entry.refresh = undefined;
160
+ }).pipe(Effect.catch((error) => {
161
+ const failure = safeError(error, "refresh_failed");
162
+ entry.failure = failure;
163
+ entry.refresh = undefined;
164
+ return publish(entry, {
165
+ phase: "failed",
166
+ projectDirectory: entry.options.projectDirectory,
167
+ generation: entry.status?.generation ?? 0,
168
+ error: failure,
169
+ }).pipe(Effect.flatMap(() => Deferred.fail(next, failure)));
170
+ }), Effect.forkIn(entry.scope));
171
+ return next;
172
+ }));
173
+ return yield* Deferred.await(deferred);
174
+ });
175
+ const getOrCreateEntry = (factory, options, directory) => Effect.gen(function* () {
176
+ const key = keyFor(directory, options);
177
+ const factoryMap = factories.get(factory) ?? new Map();
178
+ factories.set(factory, factoryMap);
179
+ const existing = factoryMap.get(key);
180
+ if (existing)
181
+ return existing;
182
+ if (entries.size >= maxEntries)
183
+ return yield* Effect.die(new Error("broker registry capacity reached"));
184
+ const entry = {
185
+ key,
186
+ options: {
187
+ ...options,
188
+ projectDirectory: directory,
189
+ },
190
+ factory,
191
+ scope: yield* Scope.make(),
192
+ events: yield* PubSub.unbounded({ replay: 1 }),
193
+ ready: yield* Deferred.make(),
194
+ leases: new Set(),
195
+ readinessRevision: 0,
196
+ disposed: false,
197
+ };
198
+ factoryMap.set(key, entry);
199
+ entries.add(entry);
200
+ return entry;
201
+ });
202
+ const disposeLeaseEntry = (entry, factoryMap, close) => Effect.gen(function* () {
203
+ if (entry.startup)
204
+ yield* Fiber.interrupt(entry.startup);
205
+ if (entry.manager)
206
+ yield* entry.manager.dispose;
207
+ yield* Scope.close(entry.scope, Exit.void);
208
+ }).pipe(Effect.catch(() => Effect.void), Effect.flatMap(() => lock.withPermit(Effect.gen(function* () {
209
+ if (entry.closing !== close)
210
+ return;
211
+ entry.manager = undefined;
212
+ entry.startup = undefined;
213
+ if (!entry.failure) {
214
+ entries.delete(entry);
215
+ factoryMap.delete(entry.key);
216
+ }
217
+ entry.closing = undefined;
218
+ yield* Deferred.succeed(close, undefined);
219
+ }))));
220
+ const acquireAttempt = (factory, options) => lock.withPermit(Effect.gen(function* () {
221
+ const directory = yield* canonicalize(options.projectDirectory).pipe(Effect.mapError(() => new TypeError("project directory does not exist")));
222
+ const factoryMap = factories.get(factory) ?? new Map();
223
+ factories.set(factory, factoryMap);
224
+ const entry = yield* getOrCreateEntry(factory, options, directory);
225
+ if (entry.closing)
226
+ return { waiting: entry.closing };
227
+ const leaseID = Symbol();
228
+ entry.leases.add(leaseID);
229
+ if (!entry.startup && !entry.failure) {
230
+ entry.attempt = entry.ready;
231
+ entry.attemptPending = true;
232
+ entry.startup = yield* start(entry).pipe(Effect.forkDetach);
233
+ yield* completeStartup(entry, entry.ready);
234
+ }
235
+ let released = false;
236
+ const managerEffect = (operation) => Effect.gen(function* () {
237
+ if (released)
238
+ return yield* Effect.die(safeError(undefined, "disposed"));
239
+ return yield* operation(entry.manager);
240
+ });
241
+ const release = Effect.gen(function* () {
242
+ const close = yield* lock.withPermit(Effect.gen(function* () {
243
+ if (released)
244
+ return undefined;
245
+ released = true;
246
+ entry.leases.delete(leaseID);
247
+ if (entry.leases.size !== 0 || entry.disposed)
248
+ return undefined;
249
+ entry.disposed = true;
250
+ const deferred = yield* Deferred.make();
251
+ entry.closing = deferred;
252
+ yield* disposeLeaseEntry(entry, factoryMap, deferred).pipe(Effect.forkDetach);
253
+ return deferred;
254
+ }));
255
+ if (close)
256
+ yield* Deferred.await(close);
257
+ });
258
+ const leaseEnsure = Effect.gen(function* () {
259
+ if (released)
260
+ return yield* Effect.fail(safeError(undefined, "disposed"));
261
+ return yield* ensure(entry);
262
+ });
263
+ const lease = {
264
+ status: Effect.sync(() => entry.status ?? {
265
+ phase: "starting",
266
+ projectDirectory: directory,
267
+ generation: 0,
268
+ }),
269
+ ensureStarted: leaseEnsure.pipe(Effect.flatMap(() => managerEffect((manager) => manager.ensureStarted))),
270
+ ensureReady: leaseEnsure,
271
+ environment: leaseEnsure.pipe(Effect.flatMap(() => managerEffect((manager) => manager.environment))),
272
+ refresh: refreshShared(entry).pipe(Effect.map(({ status }) => status)),
273
+ refreshReady: refreshShared(entry),
274
+ dispose: release,
275
+ withExclusive: (effect) => managerEffect((manager) => manager.withExclusive(effect)),
276
+ subscribe: Effect.succeed({
277
+ current: Effect.sync(() => entry.status ?? {
278
+ phase: "starting",
279
+ projectDirectory: directory,
280
+ generation: 0,
281
+ }),
282
+ changes: Stream.fromPubSub(entry.events),
283
+ }),
284
+ release,
285
+ };
286
+ return lease;
287
+ }));
288
+ const acquire = (factory, options) => Effect.gen(function* () {
289
+ const result = yield* acquireAttempt(factory, options);
290
+ if ("waiting" in result) {
291
+ yield* Deferred.await(result.waiting);
292
+ return yield* acquire(factory, options);
293
+ }
294
+ return result;
295
+ });
296
+ const retryAttempt = (factory, options) => Effect.gen(function* () {
297
+ const directory = yield* canonicalize(options.projectDirectory);
298
+ const target = yield* lock.withPermit(Effect.gen(function* () {
299
+ const entry = factories.get(factory)?.get(keyFor(directory, options));
300
+ return yield* retryEntry(entry);
301
+ }));
302
+ if ("waiting" in target)
303
+ return target;
304
+ return yield* Deferred.await(target);
305
+ });
306
+ const retry = (factory, options) => Effect.gen(function* () {
307
+ const result = yield* retryAttempt(factory, options);
308
+ if ("waiting" in result) {
309
+ yield* Deferred.await(result.waiting);
310
+ return yield* retry(factory, options);
311
+ }
312
+ return result;
313
+ });
314
+ const retryEntry = (entry) => {
315
+ if (!entry)
316
+ return Effect.fail(new VarlockError({
317
+ code: "not_ready",
318
+ message: "No failed broker entry",
319
+ retryable: false,
320
+ }));
321
+ if (entry.closing)
322
+ return Effect.succeed({ waiting: entry.closing });
323
+ if (entry.attempt && entry.attemptPending)
324
+ return Effect.succeed(entry.attempt);
325
+ if (!entry.failure)
326
+ return Effect.fail(new VarlockError({
327
+ code: "not_ready",
328
+ message: "No failed broker entry",
329
+ retryable: false,
330
+ }));
331
+ return Effect.gen(function* () {
332
+ entry.failure = undefined;
333
+ entry.disposed = false;
334
+ entry.scope = yield* Scope.make();
335
+ entry.manager = undefined;
336
+ entry.ready = yield* Deferred.make();
337
+ entry.attempt = entry.ready;
338
+ entry.attemptPending = true;
339
+ entry.startup = yield* start(entry).pipe(Effect.forkDetach);
340
+ yield* completeStartup(entry, entry.ready);
341
+ return entry.ready;
342
+ });
343
+ };
344
+ return { acquire, retry };
345
+ }
346
+ export const brokerRegistry = makeBrokerRegistry();
347
+ //# sourceMappingURL=broker-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-registry.js","sourceRoot":"","sources":["../src/broker-registry.ts"],"names":[],"mappings":"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"}
package/dist/plugin.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Mcp, Plugin } from "@opencode/plugin/effect";
2
2
  import { Types } from "effect";
3
+ import { type BrokerRegistry } from "./broker-registry.js";
3
4
  import type { ProjectKeyFerryManagerFactory, ResolvedEnvironment, SafeStatus } from "./contracts.js";
4
5
  import { type ValidatedOptions } from "./options.js";
5
6
  import { type RemoteRelayFactory, type RemoteRelayHandle } from "./remote.js";
@@ -12,6 +13,7 @@ export interface ProtectionState {
12
13
  readonly ready: boolean;
13
14
  readonly environment: ResolvedEnvironment;
14
15
  readonly remoteHandles?: ReadonlyMap<string, RemoteRelayHandle>;
16
+ readonly explicitlyDisabled?: ReadonlySet<string>;
15
17
  }
16
18
  /**
17
19
  * Apply only explicitly configured local protections. A selected remote
@@ -23,5 +25,5 @@ export type HealthPollDecision = "noop" | "clear" | "reconcile";
23
25
  /** Decide the side-effecting health action separately from its scheduler. */
24
26
  export declare function healthPollDecision(phase: SafeStatus["phase"], ready: boolean, remoteHandleCount: number, relayHealthy: boolean, generation: number, observedGeneration: number): HealthPollDecision;
25
27
  /** Construct the native OpenCode V2 plugin. The real manager is injected later. */
26
- export declare function makePlugin(factory: ProjectKeyFerryManagerFactory, relayFactory?: RemoteRelayFactory): Plugin.Plugin;
28
+ export declare function makePlugin(factory: ProjectKeyFerryManagerFactory, relayFactory?: RemoteRelayFactory, registry?: BrokerRegistry): Plugin.Plugin;
27
29
  //# sourceMappingURL=plugin.d.ts.map
@@ -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,EAAiB,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EACV,6BAA6B,EAE7B,mBAAmB,EACnB,UAAU,EACX,MAAM,gBAAgB,CAAC;AAExB,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;CACjE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,EACpC,KAAK,EAAE,eAAe,GACrB,IAAI,CAoDN;AAoCD,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,GAChC,MAAM,CAAC,MAAM,CA0Kf"}
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"}
package/dist/plugin.js CHANGED
@@ -1,9 +1,60 @@
1
1
  import { Mcp, Plugin } from "@opencode/plugin/effect";
2
- import { Effect, Scope, Types } from "effect";
3
- import { ProjectKeyFerryManager } from "./contracts.js";
2
+ import { Effect, Scope, Stream, Types } from "effect";
3
+ import { brokerRegistry } from "./broker-registry.js";
4
4
  import { managerOptions, 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
+ function preserveDisabled(name, server, state) {
8
+ return state.explicitlyDisabled?.has(name) ?? server.disabled === true;
9
+ }
10
+ function disableConfig(config) {
11
+ config.disabled = true;
12
+ }
13
+ function remoteCanBeProtected(config, state, handle) {
14
+ return config.type === "remote" && config.oauth === false && state.ready && handle !== undefined;
15
+ }
16
+ function updateRemoteConfig(config, mapping, state, handle, name, server) {
17
+ if (!remoteCanBeProtected(config, state, handle)) {
18
+ disableConfig(config);
19
+ return;
20
+ }
21
+ const remote = config;
22
+ const headers = safeForwardHeaders(remote.headers, mapping);
23
+ if (headers === undefined) {
24
+ disableConfig(config);
25
+ return;
26
+ }
27
+ remote.url = handle.localUrl;
28
+ remote.headers = { ...headers, [RELAY_AUTH_HEADER]: handle.downstreamToken };
29
+ if (!preserveDisabled(name, server, state))
30
+ config.disabled = false;
31
+ }
32
+ function applyRemoteProtection(editor, name, server, mapping, state) {
33
+ const handle = state.remoteHandles?.get(name);
34
+ editor.update(name, (config) => handle === undefined
35
+ ? disableConfig(config)
36
+ : updateRemoteConfig(config, mapping, state, handle, name, server));
37
+ }
38
+ function applyLocalProtection(editor, name, server, mapping, state) {
39
+ const resolved = Object.create(null);
40
+ let complete = state.ready;
41
+ for (const [outputName, sourceName] of Object.entries(mapping)) {
42
+ const value = state.environment[sourceName];
43
+ if (value === undefined)
44
+ complete = false;
45
+ else
46
+ resolved[outputName] = value;
47
+ }
48
+ editor.update(name, (config) => {
49
+ if (config.type !== "local" || !complete) {
50
+ disableConfig(config);
51
+ return;
52
+ }
53
+ config.environment = { ...(config.environment ?? {}), ...resolved };
54
+ if (!preserveDisabled(name, server, state))
55
+ config.disabled = false;
56
+ });
57
+ }
7
58
  /**
8
59
  * Apply only explicitly configured local protections. A selected remote
9
60
  * server, missing key, or unavailable manager is disabled rather than falling
@@ -15,65 +66,16 @@ export function applyProtection(editor, options, state) {
15
66
  if (!server)
16
67
  continue;
17
68
  if (isRemoteProtection(mapping)) {
18
- const handle = state.remoteHandles?.get(name);
19
- editor.update(name, (config) => {
20
- if (config.type !== "remote" || config.oauth !== false || !state.ready || !handle) {
21
- config.disabled = true;
22
- return;
23
- }
24
- const headers = safeForwardHeaders(config.headers, mapping);
25
- if (headers === undefined) {
26
- config.disabled = true;
27
- return;
28
- }
29
- config.url = handle.localUrl;
30
- config.headers = { ...headers, [RELAY_AUTH_HEADER]: handle.downstreamToken };
31
- // Preserve an intentional user disablement. The transformed config is
32
- // never allowed to enable a server disabled in project configuration.
33
- if (server.disabled !== true)
34
- config.disabled = false;
35
- });
69
+ applyRemoteProtection(editor, name, server, mapping, state);
36
70
  continue;
37
71
  }
38
72
  if (server.type !== "local") {
39
- editor.update(name, (config) => {
40
- config.disabled = true;
41
- });
73
+ editor.update(name, disableConfig);
42
74
  continue;
43
75
  }
44
- const resolved = Object.create(null);
45
- let complete = state.ready;
46
- for (const [outputName, sourceName] of Object.entries(mapping)) {
47
- const value = state.environment[sourceName];
48
- if (value === undefined)
49
- complete = false;
50
- else
51
- resolved[outputName] = value;
52
- }
53
- editor.update(name, (config) => {
54
- if (config.type !== "local") {
55
- config.disabled = true;
56
- return;
57
- }
58
- if (!complete) {
59
- config.disabled = true;
60
- return;
61
- }
62
- config.environment = { ...(config.environment ?? {}), ...resolved };
63
- // Preserve an intentional user disablement. Protection never enables a
64
- // server that was explicitly disabled in project configuration.
65
- if (server.disabled !== true)
66
- config.disabled = false;
67
- });
76
+ applyLocalProtection(editor, name, server, mapping, state);
68
77
  }
69
78
  }
70
- const ensureState = (manager) => manager.ensureReady.pipe(Effect.map(({ status, environment }) => ({
71
- status: sanitizeStatus(status),
72
- environment,
73
- })), Effect.catch((error) => manager.status.pipe(Effect.map((status) => ({
74
- status: sanitizeStatus({ ...status, error }),
75
- environment: {},
76
- })))));
77
79
  function snapshotServers(editor) {
78
80
  const result = new Map();
79
81
  for (const [name, config] of editor.list()) {
@@ -122,7 +124,7 @@ function parsePluginOptions(ctx) {
122
124
  return preflight.enabled ? parseOptions(ctx.options, ctx.location.project.directory) : preflight;
123
125
  }
124
126
  /** Construct the native OpenCode V2 plugin. The real manager is injected later. */
125
- export function makePlugin(factory, relayFactory) {
127
+ export function makePlugin(factory, relayFactory, registry = brokerRegistry) {
126
128
  return Plugin.define({
127
129
  id: "key-ferry",
128
130
  effect: (ctx) => {
@@ -131,14 +133,18 @@ export function makePlugin(factory, relayFactory) {
131
133
  return Effect.void;
132
134
  const program = Effect.gen(function* () {
133
135
  const pluginScope = yield* Effect.scope;
134
- const manager = yield* ProjectKeyFerryManager;
136
+ const brokerOptions = managerOptions(parsed, ctx.location.project.directory);
137
+ const lease = yield* registry.acquire(factory, brokerOptions);
138
+ yield* Effect.addFinalizer(() => lease.release);
135
139
  let state = { ready: false, environment: {} };
136
140
  let observedGeneration = -1;
137
141
  let remoteDiagnostics = [];
138
142
  let serverSnapshots = new Map();
143
+ let explicitlyDisabled = new Set();
144
+ let capturedDisabled = false;
139
145
  const remote = makeRemoteRelayCoordinator(relayFactory, parsed.adapter.allowPrivateNetwork);
140
146
  const setState = (next) => {
141
- state = next;
147
+ state = { ...next, explicitlyDisabled };
142
148
  };
143
149
  const publicStatus = (status) => sanitizeStatus({
144
150
  ...status,
@@ -166,20 +172,64 @@ export function makePlugin(factory, relayFactory) {
166
172
  return next;
167
173
  });
168
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
+ }
169
182
  serverSnapshots = snapshotServers(editor);
170
- applyProtection(editor, parsed.adapter, { ...state, remoteHandles: remote.handles });
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
+ });
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);
171
212
  });
172
- const initial = yield* ensureState(manager);
173
- yield* reconcileRemote(initial.status, initial.environment);
174
- observedGeneration = initial.status.generation;
213
+ yield* Effect.forkScoped(observeReady);
214
+ yield* Effect.forkScoped(observeChanges.pipe(Effect.catch(() => Effect.void)));
175
215
  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
+ });
176
226
  yield* ctx.rpc.register(KeyFerryRpc, {
177
- status: () => manager.status.pipe(Effect.map(publicStatus)),
227
+ status: () => lease.status.pipe(Effect.map(publicStatus)),
178
228
  refresh: (_, context) => Effect.gen(function* () {
179
- yield* remote.stopAll;
180
229
  setState({ ready: false, environment: {}, remoteHandles: remote.handles });
230
+ yield* remote.stopAll;
181
231
  yield* ctx.mcp.reload();
182
- const next = yield* manager.refreshReady;
232
+ const next = yield* explicitRecovery("refresh");
183
233
  yield* reconcileRemote(next.status, next.environment);
184
234
  yield* ctx.mcp.reload();
185
235
  return publicStatus(next.status);
@@ -188,20 +238,29 @@ export function makePlugin(factory, relayFactory) {
188
238
  setState({ ready: false, environment: {}, remoteHandles: remote.handles });
189
239
  }).pipe(Effect.andThen(ctx.mcp.reload()), Effect.andThen(Effect.fail(context.error("unavailable", publicMessage(error), rpcError(error))))))),
190
240
  doctor: (_, context) => Effect.gen(function* () {
191
- const next = yield* ensureState(manager);
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
+ })))));
192
248
  yield* reconcileRemote(next.status, next.environment);
193
249
  yield* ctx.mcp.reload();
194
250
  return publicStatus(next.status);
195
251
  }).pipe(Effect.catch((error) => Effect.fail(context.error("unavailable", publicMessage(error), rpcError(error))))),
196
252
  });
197
253
  const clearProtection = Effect.gen(function* () {
198
- yield* remote.stopAll;
199
254
  setState({ ready: false, environment: {}, remoteHandles: remote.handles });
255
+ yield* remote.stopAll;
200
256
  yield* ctx.mcp.reload();
201
257
  });
202
258
  const reconcileGeneration = (status) => Effect.gen(function* () {
203
259
  yield* remote.stopAll;
204
- const next = yield* ensureState(manager);
260
+ const next = yield* lease.ensureReady.pipe(Effect.map(({ status, environment }) => ({
261
+ status: sanitizeStatus(status),
262
+ environment,
263
+ })));
205
264
  observedGeneration = next.status.generation;
206
265
  if (next.status.phase === "ready") {
207
266
  yield* Effect.provideService(remote.reconcile(serverSnapshots, parsed.adapter.servers, next.environment, next.status.generation), Scope.Scope, pluginScope);
@@ -219,7 +278,7 @@ export function makePlugin(factory, relayFactory) {
219
278
  // generation gets a fresh, allowlisted environment before reconnecting.
220
279
  yield* Effect.forkScoped(Effect.forever(Effect.gen(function* () {
221
280
  yield* Effect.sleep("30 seconds");
222
- const status = yield* manager.status;
281
+ const status = yield* lease.status;
223
282
  const relayHealthy = yield* status.phase !== "ready"
224
283
  ? Effect.succeed(false)
225
284
  : remote.health;
@@ -227,13 +286,13 @@ export function makePlugin(factory, relayFactory) {
227
286
  const action = {
228
287
  noop: Effect.void,
229
288
  clear: clearProtection,
230
- reconcile: reconcileGeneration(status),
289
+ reconcile: reconcileGeneration(status).pipe(Effect.catch(() => Effect.void)),
231
290
  };
232
291
  yield* action[decision];
233
292
  })).pipe(Effect.catch(() => Effect.void)));
234
293
  yield* Effect.addFinalizer(() => remote.stopAll);
235
294
  });
236
- return Effect.provide(program, factory.layer(managerOptions(parsed, ctx.location.project.directory))).pipe(Effect.catch(() => Effect.void));
295
+ return program.pipe(Effect.catch(() => Effect.void));
237
296
  },
238
297
  });
239
298
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAO9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,YAAY,GAGb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GAKnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAchF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAiB,EACjB,OAAoC,EACpC,KAAsB;IAEtB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;oBAClF,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACvB,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC5D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACvB,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC7B,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC7E,sEAAsE;gBACtE,sEAAsE;gBACtE,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;oBAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC7B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA2B,CAAC;QACvF,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3B,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,KAAK,KAAK,SAAS;gBAAE,QAAQ,GAAG,KAAK,CAAC;;gBACrC,QAAQ,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,MAAM,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;YACpE,uEAAuE;YACvE,gEAAgE;YAChE,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;gBAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,OAAsC,EAAE,EAAE,CAC7D,OAAO,CAAC,WAAW,CAAC,IAAI,CACtB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;IAC9B,WAAW;CACZ,CAAC,CAAC,EACH,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;IAC5C,WAAW,EAAE,EAAE;CAChB,CAAC,CAAC,CACJ,CACF,CACF,CAAC;AAEJ,SAAS,eAAe,CAAC,MAAiB;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACvC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3E,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9D,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvE,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvE,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACpE,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;SACxE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAID,SAAS,yBAAyB,CAAC,KAAc,EAAE,iBAAyB;IAC1E,IAAI,KAAK;QAAE,OAAO,OAAO,CAAC;IAC1B,IAAI,iBAAiB,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAc,EACd,YAAqB,EACrB,UAAkB,EAClB,kBAA0B;IAE1B,IAAI,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC;IAClC,IAAI,UAAU,KAAK,kBAAkB;QAAE,OAAO,WAAW,CAAC;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,kBAAkB,CAChC,KAA0B,EAC1B,KAAc,EACd,iBAAyB,EACzB,YAAqB,EACrB,UAAkB,EAClB,kBAA0B;IAE1B,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAClF,OAAO,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAClF,CAAC;AAOD,SAAS,kBAAkB,CAAC,GAAyB;IACnD,sEAAsE;IACtE,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnG,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,UAAU,CACxB,OAAsC,EACtC,YAAiC;IAEjC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,WAAW;QACf,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACxC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC;gBAC9C,IAAI,KAAK,GAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;gBAC/D,IAAI,kBAAkB,GAAG,CAAC,CAAC,CAAC;gBAC5B,IAAI,iBAAiB,GAAgC,EAAE,CAAC;gBACxD,IAAI,eAAe,GAA8C,IAAI,GAAG,EAAE,CAAC;gBAC3E,MAAM,MAAM,GAAG,0BAA0B,CAAC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;gBAC5F,MAAM,QAAQ,GAAG,CAAC,IAAqB,EAAE,EAAE;oBACzC,KAAK,GAAG,IAAI,CAAC;gBACf,CAAC,CAAC;gBACF,MAAM,YAAY,GAAG,CAAC,MAAkB,EAAc,EAAE,CACtD,cAAc,CAAC;oBACb,GAAG,MAAM;oBACT,GAAG,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;iBAC9E,CAAC,CAAC;gBACL,MAAM,eAAe,GAAG,CACtB,MAAkB,EAClB,WAA6C,EAC7C,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAClB,qEAAqE;oBACrE,oEAAoE;oBACpE,qDAAqD;oBACrD,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;wBAC7B,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;4BAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;wBACnD,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC1B,MAAM,CAAC,SAAS,CACd,eAAe,EACf,MAAM,CAAC,OAAO,CAAC,OAAO,EACtB,WAAW,EACX,MAAM,CAAC,UAAU,CAClB,EACD,KAAK,CAAC,KAAK,EACX,WAAW,CACZ,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBACxB,CAAC;oBACD,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;oBACvC,MAAM,IAAI,GAAG;wBACX,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,OAAO;wBAC/B,WAAW;wBACX,aAAa,EAAE,MAAM,CAAC,OAAO;qBAC9B,CAAC;oBACF,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACf,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;gBACL,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;oBAClC,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC1C,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvF,CAAC,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC5C,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC5D,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC/C,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAExB,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE;oBACnC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC3D,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAClB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;wBACtB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC3E,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;wBACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;wBACzC,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;wBACtD,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;wBACxB,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;wBACf,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;wBACvC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC7E,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAChC,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,IAAI,CACT,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CACpE,CACF,CACF,CACF,CACF;oBACH,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;wBACzC,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;wBACtD,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;wBACxB,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CACjF,CACF;iBACJ,CAAC,CAAC;gBAEH,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAC1C,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBACtB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC3E,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,MAAM,mBAAmB,GAAG,CAAC,MAAkB,EAAE,EAAE,CACjD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAClB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBACzC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;oBAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;wBAClC,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC1B,MAAM,CAAC,SAAS,CACd,eAAe,EACf,MAAM,CAAC,OAAO,CAAC,OAAO,EACtB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,CAAC,UAAU,CACvB,EACD,KAAK,CAAC,KAAK,EACX,WAAW,CACZ,CAAC;wBACF,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;oBACzC,CAAC;oBACD,QAAQ,CAAC;wBACP,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO;wBACpC,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,aAAa,EAAE,MAAM,CAAC,OAAO;qBAC9B,CAAC,CAAC;oBACH,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBAEL,uEAAuE;gBACvE,qEAAqE;gBACrE,wEAAwE;gBACxE,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAClB,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBAClC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;oBACrC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO;wBAClD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;wBACvB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAClB,MAAM,QAAQ,GAAG,kBAAkB,CACjC,MAAM,CAAC,KAAK,EACZ,KAAK,CAAC,KAAK,EACX,MAAM,CAAC,OAAO,CAAC,IAAI,EACnB,YAAY,EACZ,MAAM,CAAC,UAAU,EACjB,kBAAkB,CACnB,CAAC;oBACF,MAAM,MAAM,GAAG;wBACb,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,KAAK,EAAE,eAAe;wBACtB,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC;qBACmB,CAAC;oBAC5D,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC,CAAC,CACH,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CACxC,CAAC;gBACF,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,OAAO,CACnB,OAAO,EACP,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACtE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ native OpenCode OAuth and transport behavior.
25
25
 
26
26
  ## Plugin does not load
27
27
 
28
- Add `@bjorntech/key-ferry@0.1.5` to the OpenCode V2 `plugins` list and preserve
28
+ Add `@bjorntech/key-ferry` to the OpenCode V2 `plugins` list and preserve
29
29
  unrelated configuration. OpenCode installs configured npm plugins
30
30
  automatically. Install Varlock separately, preferably with
31
31
  `brew install dmno-dev/tap/varlock`.
@@ -4,7 +4,7 @@
4
4
  {
5
5
  // Merge this entry into your existing config; preserve unrelated
6
6
  // plugins and MCP servers.
7
- "package": "@bjorntech/key-ferry@0.1.7",
7
+ "package": "@bjorntech/key-ferry",
8
8
  "options": {
9
9
  "enabled": true,
10
10
  "projectDirectory": ".",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@bjorntech/key-ferry",
4
- "version": "0.1.7",
4
+ "version": "0.1.8",
5
5
  "description": "Project-scoped Key Ferry integration for OpenCode V2",
6
6
  "keywords": [],
7
7
  "homepage": "https://github.com/bjorntech/key-ferry#readme",