@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 +1 -1
- package/dist/broker-registry.d.ts +30 -0
- package/dist/broker-registry.d.ts.map +1 -0
- package/dist/broker-registry.js +347 -0
- package/dist/broker-registry.js.map +1 -0
- package/dist/plugin.d.ts +3 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +129 -70
- package/dist/plugin.js.map +1 -1
- package/docs/troubleshooting.md +1 -1
- package/examples/opencode.jsonc +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -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
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -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,
|
|
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 {
|
|
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
|
-
|
|
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,
|
|
40
|
-
config.disabled = true;
|
|
41
|
-
});
|
|
73
|
+
editor.update(name, disableConfig);
|
|
42
74
|
continue;
|
|
43
75
|
}
|
|
44
|
-
|
|
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
|
|
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, {
|
|
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
|
-
|
|
173
|
-
yield*
|
|
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: () =>
|
|
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*
|
|
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*
|
|
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*
|
|
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*
|
|
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
|
|
295
|
+
return program.pipe(Effect.catch(() => Effect.void));
|
|
237
296
|
},
|
|
238
297
|
});
|
|
239
298
|
}
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
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,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,cAAc,EAAyC,MAAM,sBAAsB,CAAC;AAM7F,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;AAehF,SAAS,gBAAgB,CAAC,IAAY,EAAE,MAAwB,EAAE,KAAsB;IACtF,OAAO,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,MAA2C;IAChE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAA2C,EAC3C,KAAsB,EACtB,MAAqC;IAErC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,MAAM,KAAK,SAAS,CAAC;AACnG,CAAC;AAED,SAAS,kBAAkB,CACzB,MAA2C,EAC3C,OAAuD,EACvD,KAAsB,EACtB,MAAyB,EACzB,IAAY,EACZ,MAA2C;IAE3C,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QACjD,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,MAA0E,CAAC;IAC1F,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC7B,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;IAC7E,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtE,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAiB,EACjB,IAAY,EACZ,MAA2C,EAC3C,OAAuD,EACvD,KAAsB;IAEtB,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAC7B,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;QACvB,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CACrE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAiB,EACjB,IAAY,EACZ,MAA2C,EAC3C,OAA+B,EAC/B,KAAsB;IAEtB,MAAM,QAAQ,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA2B,CAAC;IACvF,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS;YAAE,QAAQ,GAAG,KAAK,CAAC;;YACrC,QAAQ,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,aAAa,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;QACpE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;YAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;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,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACnC,SAAS;QACX,CAAC;QACD,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,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,EACjC,WAA2B,cAAc;IAEzC,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,aAAa,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC7E,MAAM,KAAK,GAAgB,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAIxE,CAAC;gBACF,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAChD,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,IAAI,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC3C,IAAI,gBAAgB,GAAG,KAAK,CAAC;gBAC7B,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,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,CAAC;gBAC1C,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,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACtB,kBAAkB,GAAG,IAAI,GAAG,CAC1B,MAAM;6BACH,IAAI,EAAE;6BACN,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;6BAChD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CACzB,CAAC;wBACF,gBAAgB,GAAG,IAAI,CAAC;oBAC1B,CAAC;oBACD,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC1C,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;wBACtC,GAAG,KAAK;wBACR,kBAAkB;wBAClB,aAAa,EAAE,MAAM,CAAC,OAAO;qBAC9B,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACrC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC3E,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBACtB,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CACzC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAClB,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,kBAAkB;wBAAE,OAAO;oBAC3D,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;oBAC1D,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;oBAC9C,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC1B,CAAC,CAAC,CACH,EACD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAC/B,CAAC;gBACF,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACzC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;oBAC5C,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CACxD,MAAM,CAAC,KAAK,KAAK,OAAO;wBACtB,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CACpB,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAC7B,MAAM,CAAC,UAAU,GAAG,kBAAkB;4BACpC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gCAClB,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gCAC5C,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC;gCACvC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;4BAC1B,CAAC,CAAC;4BACJ,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,CACF;wBACH,CAAC,CAAC,UAAU,CACf,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBACvC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/E,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAExB,MAAM,gBAAgB,GAAG,CAAC,SAA+B,EAAE,EAAE,CAC3D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;oBACnC,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC9B,KAAK,CAAC,CAAC,UAAU,CAAC;wBAClB,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAIlD,CAAC;oBACJ,CAAC;oBACD,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU;wBAAE,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;oBACjE,OAAO,KAAK,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;gBACjF,CAAC,CAAC,CAAC;gBAEL,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE;oBACnC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBACzD,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAClB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC3E,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;wBACtB,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;wBACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;wBAChD,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,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;4BACvC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;4BAC9B,WAAW;yBACZ,CAAC,CAAC,EACH,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,KAAK,CAAC,MAAM,CAAC,IAAI,CACf,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;4BACtB,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;4BAC5C,WAAW,EAAE,EAAE;yBAChB,CAAC,CAAC,CACJ,CACF,CACF,CAAC;wBACF,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,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC3E,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBACtB,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,KAAK,CAAC,WAAW,CAAC,IAAI,CACxC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;wBACvC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;wBAC9B,WAAW;qBACZ,CAAC,CAAC,CACJ,CAAC;oBACF,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,KAAK,CAAC,MAAM,CAAC;oBACnC,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,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;qBACnB,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,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/docs/troubleshooting.md
CHANGED
|
@@ -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
|
|
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`.
|
package/examples/opencode.jsonc
CHANGED
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.
|
|
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",
|