@bjorntech/key-ferry 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +79 -13
  2. package/SECURITY.md +20 -0
  3. package/dist/contracts.d.ts +23 -0
  4. package/dist/contracts.d.ts.map +1 -1
  5. package/dist/contracts.js.map +1 -1
  6. package/dist/options.d.ts +7 -0
  7. package/dist/options.d.ts.map +1 -1
  8. package/dist/options.js +28 -2
  9. package/dist/options.js.map +1 -1
  10. package/dist/plugin.d.ts +4 -0
  11. package/dist/plugin.d.ts.map +1 -1
  12. package/dist/plugin.js +33 -171
  13. package/dist/plugin.js.map +1 -1
  14. package/dist/project-config.d.ts +3 -0
  15. package/dist/project-config.d.ts.map +1 -0
  16. package/dist/project-config.js +3 -0
  17. package/dist/project-config.js.map +1 -0
  18. package/dist/rpc.d.ts +141 -6
  19. package/dist/rpc.d.ts.map +1 -1
  20. package/dist/rpc.js +117 -35
  21. package/dist/rpc.js.map +1 -1
  22. package/dist/scoped-config.d.ts +35 -0
  23. package/dist/scoped-config.d.ts.map +1 -0
  24. package/dist/scoped-config.js +224 -0
  25. package/dist/scoped-config.js.map +1 -0
  26. package/dist/scoped-controller.d.ts +40 -0
  27. package/dist/scoped-controller.d.ts.map +1 -0
  28. package/dist/scoped-controller.js +468 -0
  29. package/dist/scoped-controller.js.map +1 -0
  30. package/dist/scopes/controller-helpers.d.ts +47 -0
  31. package/dist/scopes/controller-helpers.d.ts.map +1 -0
  32. package/dist/scopes/controller-helpers.js +268 -0
  33. package/dist/scopes/controller-helpers.js.map +1 -0
  34. package/dist/scopes/controller-types.d.ts +22 -0
  35. package/dist/scopes/controller-types.d.ts.map +1 -0
  36. package/dist/scopes/controller-types.js +2 -0
  37. package/dist/scopes/controller-types.js.map +1 -0
  38. package/dist/tui.d.ts +31 -33
  39. package/dist/tui.d.ts.map +1 -1
  40. package/dist/tui.js +111 -35
  41. package/dist/tui.js.map +1 -1
  42. package/docs/architecture.md +27 -1
  43. package/docs/troubleshooting.md +26 -1
  44. package/examples/README.md +47 -0
  45. package/examples/global/.env.schema +6 -0
  46. package/examples/global/opencode.json +31 -0
  47. package/examples/project/.env.schema +6 -0
  48. package/examples/project/.opencode/key-ferry.jsonc +10 -0
  49. package/examples/project/opencode.json +11 -0
  50. package/examples/{opencode.jsonc → single-project/opencode.json} +17 -16
  51. package/package.json +4 -1
  52. /package/examples/{.env.schema → single-project/.env.schema} +0 -0
@@ -0,0 +1,468 @@
1
+ import { Effect, Exit, Scope, Stream } from "effect";
2
+ import { VarlockError } from "./contracts.js";
3
+ import {} from "./plugin.js";
4
+ import { makeRemoteRelayCoordinator, } from "./remote.js";
5
+ import { aggregatePhase, applyRuntimeProtection, captureEditor, cleanManagedEnvironment, configurationFingerprint, emptyProtectionState, filterGroupMappings, groupStatus, projectFallback, runtimeEnvironment, selectRuntime, disableProjectServers, selectedStatus, statusBase, statusScopes, } from "./scopes/controller-helpers.js";
6
+ function projectNames(configuration, runtime) {
7
+ const names = new Set(Object.keys(configuration.project?.servers ?? {}).filter((name) => configuration.bindings[name] === "project"));
8
+ if (runtime)
9
+ for (const name of Object.keys(runtime.mappings))
10
+ names.add(name);
11
+ return names;
12
+ }
13
+ function inactiveNames(names, next) {
14
+ return new Set([...names].filter((name) => next.bindings[name] === undefined));
15
+ }
16
+ function restoreRuntimeEnvironment(config, state) {
17
+ if (config.type !== "local")
18
+ return;
19
+ const environment = { ...(config.environment ?? {}) };
20
+ for (const key of Object.keys(state.injected))
21
+ restoreRuntimeKey(environment, state, key);
22
+ config.environment = environment;
23
+ }
24
+ function restoreRuntimeKey(environment, state, key) {
25
+ if (environment[key] !== state.injected[key])
26
+ return;
27
+ if (state.original[key] === undefined)
28
+ delete environment[key];
29
+ else
30
+ environment[key] = state.original[key];
31
+ }
32
+ function removeInjectedEnvironment(config, entries) {
33
+ if (config.type !== "local")
34
+ return;
35
+ const environment = { ...(config.environment ?? {}) };
36
+ for (const state of entries.values())
37
+ removeInjectedEntries(environment, state);
38
+ config.environment = environment;
39
+ }
40
+ function removeInjectedEntries(environment, state) {
41
+ for (const key of Object.keys(state.injected))
42
+ removeInjectedKey(environment, state, key);
43
+ }
44
+ function removeInjectedKey(environment, state, key) {
45
+ if (environment[key] === state.injected[key])
46
+ delete environment[key];
47
+ }
48
+ function runtimeIsCurrent(runtime, runtimes, expectedEpoch) {
49
+ return runtime.active && runtime.epoch === expectedEpoch && runtimes.get(runtime.id) === runtime;
50
+ }
51
+ /** Coordinates independent manager/relay lifecycles without merging scopes. */
52
+ export function makeScopedController(options) {
53
+ const runtimes = new Map();
54
+ let configuration = options.configuration;
55
+ let editor = options.editor;
56
+ const pristine = new Map();
57
+ const pristineEnvironment = new Map();
58
+ const managedEnvironment = new Map();
59
+ const lastInjected = new Map();
60
+ let explicitlyDisabled = new Set();
61
+ let captured = false;
62
+ let inactiveProjectNames = new Set();
63
+ const capture = (nextEditor) => {
64
+ if (captured)
65
+ return;
66
+ captured = true;
67
+ const snapshot = captureEditor(nextEditor);
68
+ explicitlyDisabled = snapshot.disabled;
69
+ for (const [name, value] of snapshot.remote)
70
+ pristine.set(name, value);
71
+ for (const [name, value] of snapshot.environments)
72
+ pristineEnvironment.set(name, value);
73
+ };
74
+ const cleanupManagedEnvironment = (nextEditor) => cleanManagedEnvironment(nextEditor, managedEnvironment, lastInjected, pristineEnvironment);
75
+ const rememberManagedEnvironment = (nextEditor, runtime) => runtimeEnvironment(nextEditor, runtime, pristineEnvironment, managedEnvironment, lastInjected);
76
+ const removeManagedForRuntime = (editor, runtime) => {
77
+ for (const [name, entries] of managedEnvironment) {
78
+ const state = entries.get(runtime.id);
79
+ if (!state)
80
+ continue;
81
+ editor.update(name, (config) => restoreRuntimeEnvironment(config, state));
82
+ entries.delete(runtime.id);
83
+ }
84
+ };
85
+ const removeUnboundManaged = (editor) => {
86
+ const bound = new Set([...runtimes.values()].flatMap((runtime) => Object.keys(runtime.mappings)));
87
+ for (const [name, entries] of managedEnvironment) {
88
+ if (bound.has(name))
89
+ continue;
90
+ editor.update(name, (config) => removeInjectedEnvironment(config, entries));
91
+ managedEnvironment.delete(name);
92
+ }
93
+ };
94
+ const projectStatus = () => {
95
+ const runtime = runtimes.get("project");
96
+ if (runtime)
97
+ return groupStatus(runtime, configuration.activation);
98
+ return projectFallback(configuration);
99
+ };
100
+ const apply = (editor) => {
101
+ capture(editor);
102
+ cleanupManagedEnvironment(editor);
103
+ for (const runtime of runtimes.values()) {
104
+ applyRuntimeProtection(editor, runtime, explicitlyDisabled);
105
+ rememberManagedEnvironment(editor, runtime);
106
+ }
107
+ const project = projectStatus();
108
+ if (project && !runtimes.has("project"))
109
+ disableProjectServers(editor, configuration, inactiveProjectNames);
110
+ else
111
+ for (const name of inactiveProjectNames)
112
+ editor.update(name, (config) => {
113
+ config.disabled = true;
114
+ });
115
+ };
116
+ const clear = (runtime, phase = "starting") => Effect.gen(function* () {
117
+ if (!runtime.active)
118
+ return;
119
+ runtime.epoch += 1;
120
+ runtime.status = {
121
+ phase,
122
+ projectDirectory: runtime.group.sourceRoot,
123
+ generation: runtime.status?.generation ?? 0,
124
+ };
125
+ runtime.state = emptyProtectionState();
126
+ yield* runtime.remote.stopAll;
127
+ apply(editor);
128
+ yield* options.reload();
129
+ });
130
+ const reconcileRemote = (runtime, status, environment) => status.phase === "ready"
131
+ ? Effect.provideService(runtime.remote.reconcile(new Map(Object.keys(runtime.mappings)
132
+ .map((name) => [name, pristine.get(name)])
133
+ .filter((entry) => entry[1] !== undefined)), runtime.mappings, environment, status.generation), Scope.Scope, options.scope)
134
+ : runtime.remote.stopAll;
135
+ const reconcile = (runtime, status, environment, expectedEpoch = runtime.epoch) => Effect.gen(function* () {
136
+ if (!runtime.active || runtime.epoch !== expectedEpoch)
137
+ return;
138
+ runtime.status = status;
139
+ yield* reconcileRemote(runtime, status, environment);
140
+ if (!runtimeIsCurrent(runtime, runtimes, expectedEpoch)) {
141
+ yield* runtime.remote.stopAll;
142
+ return;
143
+ }
144
+ runtime.state = {
145
+ ready: status.phase === "ready",
146
+ environment,
147
+ remoteHandles: runtime.remote.handles,
148
+ explicitlyDisabled,
149
+ };
150
+ runtime.observedGeneration = status.generation;
151
+ apply(editor);
152
+ yield* options.reload();
153
+ });
154
+ const startObserver = (runtime) => runtime.lease
155
+ ? Effect.suspend(() => {
156
+ const epoch = runtime.epoch;
157
+ const lease = runtime.lease;
158
+ return lease.ensureReady.pipe(Effect.flatMap(({ status, environment }) => runtime.active ? reconcile(runtime, status, environment, epoch) : Effect.void), Effect.catch((error) => Effect.gen(function* () {
159
+ if (!runtime.active)
160
+ return;
161
+ runtime.status = {
162
+ phase: "failed",
163
+ projectDirectory: runtime.group.sourceRoot,
164
+ generation: runtime.status?.generation ?? 0,
165
+ error,
166
+ };
167
+ yield* clear(runtime, "failed");
168
+ })), Effect.forkIn(runtime.scope));
169
+ })
170
+ : Effect.void;
171
+ const subscribeRuntime = (runtime) => Effect.gen(function* () {
172
+ const lease = runtime.lease;
173
+ if (!lease)
174
+ return;
175
+ const subscription = yield* lease.subscribe;
176
+ yield* Stream.runForEach(subscription.changes, (next) => !runtime.active || runtime.transitioning
177
+ ? Effect.void
178
+ : next.phase === "ready"
179
+ ? Effect.gen(function* () {
180
+ const epoch = runtime.epoch;
181
+ const environment = yield* lease.environment;
182
+ if (runtime.active && next.generation >= runtime.observedGeneration)
183
+ yield* reconcile(runtime, next, environment, epoch);
184
+ })
185
+ : clear(runtime, next.phase === "failed" ? "failed" : "starting"));
186
+ }).pipe(Effect.catch(() => Effect.void));
187
+ const heartbeat = (runtime) => Effect.sleep("30 seconds").pipe(Effect.andThen(heartbeatAfterSleep(runtime)));
188
+ const heartbeatAfterSleep = (runtime) => {
189
+ const lease = runtime.lease;
190
+ if (!(lease && runtime.active))
191
+ return Effect.void;
192
+ return lease.status.pipe(Effect.flatMap((current) => heartbeatStatus(runtime, lease, current)));
193
+ };
194
+ const heartbeatReady = (runtime, lease, current) => Effect.gen(function* () {
195
+ if (!(yield* runtime.remote.health))
196
+ return yield* clear(runtime);
197
+ yield* heartbeatGeneration(runtime, lease, current);
198
+ });
199
+ const heartbeatGeneration = (runtime, lease, current) => current.generation <= runtime.observedGeneration
200
+ ? Effect.void
201
+ : Effect.gen(function* () {
202
+ const epoch = runtime.epoch;
203
+ const environment = yield* lease.environment;
204
+ yield* reconcile(runtime, current, environment, epoch);
205
+ });
206
+ const heartbeatStatus = (runtime, lease, current) => current.phase !== "ready"
207
+ ? clear(runtime, current.phase === "failed" ? "failed" : "starting")
208
+ : heartbeatReady(runtime, lease, current);
209
+ const acquire = (group) => Effect.gen(function* () {
210
+ const scope = yield* Scope.make();
211
+ const runtime = {
212
+ id: group.id,
213
+ group,
214
+ lease: undefined,
215
+ remote: makeRemoteRelayCoordinator(options.relayFactory, group.options.adapter.allowPrivateNetwork),
216
+ mappings: filterGroupMappings(group, configuration.bindings),
217
+ state: emptyProtectionState(),
218
+ observedGeneration: -1,
219
+ active: true,
220
+ scope,
221
+ epoch: 0,
222
+ transitioning: false,
223
+ };
224
+ runtimes.set(group.id, runtime);
225
+ const lease = yield* options.registry.acquire(options.factory, group.manager).pipe(Effect.map((value) => value), Effect.catch((error) => Effect.sync(() => {
226
+ runtime.status = {
227
+ phase: "failed",
228
+ projectDirectory: group.sourceRoot,
229
+ generation: 0,
230
+ error: error instanceof VarlockError
231
+ ? error
232
+ : new VarlockError({
233
+ code: "unavailable",
234
+ message: "Key Ferry manager is unavailable",
235
+ retryable: true,
236
+ }),
237
+ };
238
+ }).pipe(Effect.as(undefined))));
239
+ if (lease) {
240
+ runtime.lease = lease;
241
+ yield* startObserver(runtime);
242
+ yield* subscribeRuntime(runtime).pipe(Effect.forkIn(runtime.scope));
243
+ }
244
+ yield* Effect.forever(heartbeat(runtime)).pipe(Effect.catch(() => Effect.void), Effect.forkIn(runtime.scope));
245
+ return runtime;
246
+ });
247
+ const start = Effect.gen(function* () {
248
+ if (options.startEmptyGlobal || Object.keys(configuration.global.servers).length > 0)
249
+ yield* acquire(configuration.global);
250
+ if (configuration.project && configuration.activation === "auto")
251
+ yield* acquire(configuration.project);
252
+ });
253
+ const selected = (selector) => selectRuntime(runtimes, configuration.bindings, selector);
254
+ const status = Effect.sync(() => {
255
+ const global = runtimes.get("global");
256
+ const project = projectStatus();
257
+ const base = statusBase(global, project, configuration);
258
+ if (!project && configuration.diagnostics.length === 0)
259
+ return base;
260
+ const scopes = statusScopes(global, project);
261
+ const aggregate = aggregatePhase(base.phase, scopes);
262
+ return {
263
+ ...base,
264
+ phase: aggregate,
265
+ scopes,
266
+ bindings: configuration.bindings,
267
+ ...(configuration.diagnostics.length === 0 ? {} : { diagnostics: configuration.diagnostics }),
268
+ };
269
+ });
270
+ const statusSelected = (selector) => Effect.sync(() => {
271
+ if (!selector?.scope && !selector?.server)
272
+ return Effect.runSync(status);
273
+ return selectedStatus(selected(selector), configuration, selector);
274
+ });
275
+ const acquireForOperation = (runtime, kind) => options.registry.acquire(options.factory, runtime.group.manager).pipe(Effect.map((value) => value), Effect.catch((error) => kind === "doctor"
276
+ ? Effect.sync(() => {
277
+ runtime.status = {
278
+ phase: "failed",
279
+ projectDirectory: runtime.group.sourceRoot,
280
+ generation: 0,
281
+ error: error instanceof VarlockError
282
+ ? error
283
+ : new VarlockError({
284
+ code: "unavailable",
285
+ message: "Key Ferry manager is unavailable",
286
+ retryable: true,
287
+ }),
288
+ };
289
+ }).pipe(Effect.as(undefined))
290
+ : Effect.fail(error)));
291
+ const operationStarting = (runtime, kind, lease) => kind === "doctor"
292
+ ? lease.ensureReady.pipe(Effect.catch((error) => Effect.sync(() => {
293
+ runtime.status = {
294
+ phase: "failed",
295
+ projectDirectory: runtime.group.sourceRoot,
296
+ generation: runtime.status?.generation ?? 0,
297
+ error,
298
+ };
299
+ })))
300
+ : lease.ensureReady;
301
+ const operationFailed = (runtime, kind) => Effect.gen(function* () {
302
+ yield* clear(runtime);
303
+ if (kind === "doctor") {
304
+ yield* options.registry.retry(options.factory, runtime.group.manager).pipe(Effect.catch((error) => Effect.sync(() => {
305
+ runtime.status = {
306
+ phase: "failed",
307
+ projectDirectory: runtime.group.sourceRoot,
308
+ generation: runtime.status?.generation ?? 0,
309
+ error,
310
+ };
311
+ })));
312
+ return;
313
+ }
314
+ const result = yield* options.registry.retry(options.factory, runtime.group.manager);
315
+ runtime.status = result.status;
316
+ yield* reconcile(runtime, result.status, result.environment);
317
+ });
318
+ const operationRefresh = (runtime, lease) => Effect.gen(function* () {
319
+ yield* clear(runtime);
320
+ const epoch = runtime.epoch;
321
+ if (!runtimes.has("global")) {
322
+ const nextStatus = yield* lease.refresh;
323
+ const environment = yield* lease.environment;
324
+ yield* reconcile(runtime, nextStatus, environment, epoch);
325
+ return;
326
+ }
327
+ const result = yield* lease.refreshReady;
328
+ yield* reconcile(runtime, result.status, result.environment, epoch);
329
+ });
330
+ const operationReady = (runtime, lease) => Effect.gen(function* () {
331
+ if (!(yield* runtime.remote.health))
332
+ yield* runtime.remote.stopAll;
333
+ const epoch = runtime.epoch;
334
+ const result = yield* lease.ensureReady;
335
+ yield* reconcile(runtime, result.status, result.environment, epoch);
336
+ });
337
+ const prepareOperation = (runtime, kind) => runtime.lease
338
+ ? Effect.succeed({ lease: runtime.lease, acquired: false })
339
+ : acquireForOperation(runtime, kind).pipe(Effect.flatMap((lease) => {
340
+ if (!lease)
341
+ return Effect.succeed(undefined);
342
+ runtime.lease = lease;
343
+ return startObserver(runtime).pipe(Effect.as({ lease, acquired: true }));
344
+ }));
345
+ const operateCurrent = (runtime, kind, lease) => Effect.gen(function* () {
346
+ const current = yield* lease.status;
347
+ if (current.phase === "starting") {
348
+ yield* operationStarting(runtime, kind, lease);
349
+ return;
350
+ }
351
+ if (current.phase === "failed")
352
+ return yield* operationFailed(runtime, kind);
353
+ if (kind === "refresh")
354
+ return yield* operationRefresh(runtime, lease);
355
+ yield* operationReady(runtime, lease);
356
+ });
357
+ const operation = (kind, selector) => Effect.gen(function* () {
358
+ const runtime = selected(selector);
359
+ if (!runtime)
360
+ return yield* status;
361
+ runtime.transitioning = true;
362
+ return yield* Effect.gen(function* () {
363
+ const prepared = yield* prepareOperation(runtime, kind);
364
+ if (!prepared || (kind === "doctor" && prepared.acquired))
365
+ return yield* status;
366
+ yield* operateCurrent(runtime, kind, prepared.lease);
367
+ return yield* status;
368
+ }).pipe(Effect.ensuring(Effect.sync(() => {
369
+ runtime.transitioning = false;
370
+ })));
371
+ });
372
+ const activateProject = Effect.gen(function* () {
373
+ if (!configuration.project)
374
+ return yield* status;
375
+ const existing = runtimes.get("project");
376
+ if (existing)
377
+ return yield* status;
378
+ yield* acquire(configuration.project);
379
+ return yield* status;
380
+ });
381
+ const retireProject = (runtime) => Effect.gen(function* () {
382
+ const previousNames = new Set(Object.keys(runtime.mappings));
383
+ runtime.active = false;
384
+ runtime.epoch += 1;
385
+ runtime.status = {
386
+ phase: "stopped",
387
+ projectDirectory: runtime.group.sourceRoot,
388
+ generation: runtime.status?.generation ?? 0,
389
+ };
390
+ runtime.state = emptyProtectionState();
391
+ runtimes.delete("project");
392
+ inactiveProjectNames = previousNames;
393
+ removeManagedForRuntime(editor, runtime);
394
+ apply(editor);
395
+ yield* options.reload();
396
+ yield* runtime.remote.stopAll;
397
+ if (runtime.lease)
398
+ yield* runtime.lease.release;
399
+ yield* Scope.close(runtime.scope, Exit.void);
400
+ });
401
+ const updateProjectConfiguration = (next) => {
402
+ const global = runtimes.get("global");
403
+ if (global) {
404
+ global.transitioning = true;
405
+ global.mappings = filterGroupMappings(global.group, next.bindings);
406
+ }
407
+ cleanupManagedEnvironment(editor);
408
+ removeUnboundManaged(editor);
409
+ return global;
410
+ };
411
+ const replaceProject = (next) => Effect.gen(function* () {
412
+ const previous = runtimes.get("project");
413
+ const previousNames = projectNames(configuration, previous);
414
+ configuration = next;
415
+ if (previous)
416
+ yield* retireProject(previous);
417
+ inactiveProjectNames = inactiveNames(previousNames, next);
418
+ const global = updateProjectConfiguration(next);
419
+ if (next.project && next.activation === "auto")
420
+ yield* acquire(next.project);
421
+ apply(editor);
422
+ yield* options.reload();
423
+ if (global)
424
+ global.transitioning = false;
425
+ });
426
+ /** Polls semantic configuration, so comment-only edits do not reauthenticate. */
427
+ const watch = (load) => Effect.forkIn(Effect.gen(function* () {
428
+ let previous = configurationFingerprint(configuration);
429
+ while (true) {
430
+ yield* Effect.sleep(options.watchIntervalMs ?? 250);
431
+ const next = yield* Effect.promise(load);
432
+ const current = configurationFingerprint(next);
433
+ if (current === previous)
434
+ continue;
435
+ previous = current;
436
+ yield* replaceProject(next);
437
+ }
438
+ }).pipe(Effect.catch(() => Effect.void)), options.scope);
439
+ const dispose = Effect.suspend(() => Effect.forEach([...runtimes.values()], (runtime) => {
440
+ runtime.active = false;
441
+ runtime.epoch += 1;
442
+ runtime.status = {
443
+ phase: "stopped",
444
+ projectDirectory: runtime.group.sourceRoot,
445
+ generation: runtime.status?.generation ?? 0,
446
+ };
447
+ apply(editor);
448
+ return runtime.remote.stopAll.pipe(Effect.andThen(runtime.lease ? runtime.lease.release : Effect.void), Effect.andThen(Scope.close(runtime.scope, Exit.void)));
449
+ }, { concurrency: "unbounded" }).pipe(Effect.asVoid));
450
+ const setEditor = (next) => {
451
+ editor = next;
452
+ };
453
+ return {
454
+ start,
455
+ capture,
456
+ apply,
457
+ setEditor,
458
+ status,
459
+ statusSelected,
460
+ operation,
461
+ activateProject,
462
+ replaceProject,
463
+ watch,
464
+ dispose,
465
+ runtimes,
466
+ };
467
+ }
468
+ //# sourceMappingURL=scoped-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-controller.js","sourceRoot":"","sources":["../src/scoped-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { SafeScopeStatus, SafeStatus, ScopeId } from "../contracts.js";
2
+ import type { ServerProtection } from "../options.js";
3
+ import { type McpEditor, type ProtectionState } from "../plugin.js";
4
+ import type { ManagedEnvironmentState } from "../plugin.js";
5
+ import type { ScopedConfiguration, ScopedGroup } from "../scoped-config.js";
6
+ import type { Runtime } from "./controller-types.js";
7
+ export declare function filterGroupMappings(group: ScopedGroup, bindings: Readonly<Record<string, ScopeId>>): Readonly<Record<string, ServerProtection>>;
8
+ /**
9
+ * Returns the semantic project inputs used by the configuration watcher.
10
+ *
11
+ * `sourceRoot` and the manager directory are resolved by scoped-config before
12
+ * this point. Including both prevents a project-root switch from reusing the
13
+ * Varlock process while keeping relative aliases and key ordering stable.
14
+ */
15
+ export declare function configurationFingerprint(value: ScopedConfiguration): string;
16
+ export declare function groupStatus(runtime: Runtime, activation?: SafeScopeStatus["activation"]): SafeScopeStatus;
17
+ export declare function emptyProtectionState(): ProtectionState;
18
+ export declare function captureEditor(editor: McpEditor): {
19
+ disabled: Set<string>;
20
+ remote: Map<string, NonNullable<ReturnType<typeof remoteSnapshot>>>;
21
+ environments: Map<string, Readonly<Record<string, string>>>;
22
+ };
23
+ declare function remoteSnapshot(value: any): {
24
+ disabled?: any;
25
+ oauth?: any;
26
+ headers?: any;
27
+ type: "remote";
28
+ url: any;
29
+ };
30
+ export declare function cleanManagedEnvironment(editor: McpEditor, managed: Map<string, Map<string, ManagedEnvironmentState>>, injected: Map<string, Record<string, string>>, pristine: Map<string, Readonly<Record<string, string>>>): void;
31
+ export declare function runtimeEnvironment(editor: McpEditor, runtime: Runtime, pristine: Map<string, Readonly<Record<string, string>>>, managed: Map<string, Map<string, ManagedEnvironmentState>>, injected: Map<string, Record<string, string>>): void;
32
+ export declare function selectRuntime(runtimes: Map<ScopeId, Runtime>, bindings: Readonly<Record<string, ScopeId>>, selector?: {
33
+ readonly scope?: ScopeId;
34
+ readonly server?: string;
35
+ }): Runtime | undefined;
36
+ export declare function aggregatePhase(base: SafeStatus["phase"], scopes: readonly SafeScopeStatus[]): SafeStatus["phase"];
37
+ export declare function projectFallback(configuration: ScopedConfiguration): SafeScopeStatus | undefined;
38
+ export declare function applyRuntimeProtection(editor: McpEditor, runtime: Runtime, explicitlyDisabled: ReadonlySet<string>): void;
39
+ export declare function disableProjectServers(editor: McpEditor, configuration: ScopedConfiguration, inactive: ReadonlySet<string>): void;
40
+ export declare function selectedStatus(runtime: Runtime | undefined, configuration: ScopedConfiguration, selector: {
41
+ readonly scope?: ScopeId;
42
+ readonly server?: string;
43
+ }): SafeStatus;
44
+ export declare function statusBase(global: Runtime | undefined, project: SafeScopeStatus | undefined, configuration: ScopedConfiguration): SafeStatus;
45
+ export declare function statusScopes(global: Runtime | undefined, project: SafeScopeStatus | undefined): SafeScopeStatus[];
46
+ export {};
47
+ //# sourceMappingURL=controller-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-helpers.d.ts","sourceRoot":"","sources":["../../src/scopes/controller-helpers.ts"],"names":[],"mappings":"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"}