@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.
- package/README.md +79 -13
- package/SECURITY.md +20 -0
- package/dist/contracts.d.ts +23 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js.map +1 -1
- package/dist/options.d.ts +7 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +28 -2
- package/dist/options.js.map +1 -1
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +33 -171
- package/dist/plugin.js.map +1 -1
- package/dist/project-config.d.ts +3 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +3 -0
- package/dist/project-config.js.map +1 -0
- package/dist/rpc.d.ts +141 -6
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +117 -35
- package/dist/rpc.js.map +1 -1
- package/dist/scoped-config.d.ts +35 -0
- package/dist/scoped-config.d.ts.map +1 -0
- package/dist/scoped-config.js +224 -0
- package/dist/scoped-config.js.map +1 -0
- package/dist/scoped-controller.d.ts +40 -0
- package/dist/scoped-controller.d.ts.map +1 -0
- package/dist/scoped-controller.js +468 -0
- package/dist/scoped-controller.js.map +1 -0
- package/dist/scopes/controller-helpers.d.ts +47 -0
- package/dist/scopes/controller-helpers.d.ts.map +1 -0
- package/dist/scopes/controller-helpers.js +268 -0
- package/dist/scopes/controller-helpers.js.map +1 -0
- package/dist/scopes/controller-types.d.ts +22 -0
- package/dist/scopes/controller-types.d.ts.map +1 -0
- package/dist/scopes/controller-types.js +2 -0
- package/dist/scopes/controller-types.js.map +1 -0
- package/dist/tui.d.ts +31 -33
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +111 -35
- package/dist/tui.js.map +1 -1
- package/docs/architecture.md +27 -1
- package/docs/troubleshooting.md +26 -1
- package/examples/README.md +47 -0
- package/examples/global/.env.schema +6 -0
- package/examples/global/opencode.json +31 -0
- package/examples/project/.env.schema +6 -0
- package/examples/project/.opencode/key-ferry.jsonc +10 -0
- package/examples/project/opencode.json +11 -0
- package/examples/{opencode.jsonc → single-project/opencode.json} +17 -16
- package/package.json +4 -1
- /package/examples/{.env.schema → single-project/.env.schema} +0 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { applyProtection } from "../plugin.js";
|
|
2
|
+
export function filterGroupMappings(group, bindings) {
|
|
3
|
+
return Object.fromEntries(Object.entries(group.servers).filter(([name]) => bindings[name] === group.id));
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Returns the semantic project inputs used by the configuration watcher.
|
|
7
|
+
*
|
|
8
|
+
* `sourceRoot` and the manager directory are resolved by scoped-config before
|
|
9
|
+
* this point. Including both prevents a project-root switch from reusing the
|
|
10
|
+
* Varlock process while keeping relative aliases and key ordering stable.
|
|
11
|
+
*/
|
|
12
|
+
export function configurationFingerprint(value) {
|
|
13
|
+
return JSON.stringify(stableValue({
|
|
14
|
+
project: value.project === undefined
|
|
15
|
+
? undefined
|
|
16
|
+
: {
|
|
17
|
+
servers: value.project.servers,
|
|
18
|
+
sourceRoot: value.project.sourceRoot,
|
|
19
|
+
managerProjectDirectory: value.project.manager.projectDirectory,
|
|
20
|
+
},
|
|
21
|
+
activation: value.activation,
|
|
22
|
+
bindings: value.bindings,
|
|
23
|
+
diagnostics: value.diagnostics,
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
function stableValue(value) {
|
|
27
|
+
if (Array.isArray(value))
|
|
28
|
+
return value.map(stableValue);
|
|
29
|
+
if (value === null || typeof value !== "object")
|
|
30
|
+
return value;
|
|
31
|
+
return Object.fromEntries(Object.entries(value)
|
|
32
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
33
|
+
.map(([key, item]) => [key, stableValue(item)]));
|
|
34
|
+
}
|
|
35
|
+
function optionalStatusFields(status) {
|
|
36
|
+
return {
|
|
37
|
+
...(status.pid === undefined ? {} : { pid: status.pid }),
|
|
38
|
+
...(status.lastRefreshAt === undefined ? {} : { lastRefreshAt: status.lastRefreshAt }),
|
|
39
|
+
...(status.error === undefined ? {} : { error: status.error }),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export function groupStatus(runtime, activation) {
|
|
43
|
+
const status = runtime.status ?? {
|
|
44
|
+
phase: "starting",
|
|
45
|
+
projectDirectory: runtime.group.sourceRoot,
|
|
46
|
+
generation: 0,
|
|
47
|
+
};
|
|
48
|
+
const diagnostics = [
|
|
49
|
+
...(status.diagnostics ?? []),
|
|
50
|
+
...runtime.remote.diagnostics,
|
|
51
|
+
];
|
|
52
|
+
return {
|
|
53
|
+
scope: runtime.id,
|
|
54
|
+
projectDirectory: status.projectDirectory,
|
|
55
|
+
phase: status.phase,
|
|
56
|
+
generation: status.generation,
|
|
57
|
+
...optionalStatusFields(status),
|
|
58
|
+
...(diagnostics.length === 0 ? {} : { diagnostics }),
|
|
59
|
+
...(activation === undefined ? {} : { activation }),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function emptyProtectionState() {
|
|
63
|
+
return { ready: false, environment: {} };
|
|
64
|
+
}
|
|
65
|
+
export function captureEditor(editor) {
|
|
66
|
+
const disabled = new Set();
|
|
67
|
+
const remote = new Map();
|
|
68
|
+
const environments = new Map();
|
|
69
|
+
for (const [name, value] of editor.list()) {
|
|
70
|
+
if (value.disabled === true)
|
|
71
|
+
disabled.add(name);
|
|
72
|
+
if (value.type === "local")
|
|
73
|
+
environments.set(name, { ...(value.environment ?? {}) });
|
|
74
|
+
if (value.type === "remote")
|
|
75
|
+
remote.set(name, remoteSnapshot(value));
|
|
76
|
+
}
|
|
77
|
+
return { disabled, remote, environments };
|
|
78
|
+
}
|
|
79
|
+
function remoteSnapshot(value) {
|
|
80
|
+
return {
|
|
81
|
+
type: "remote",
|
|
82
|
+
url: value.url,
|
|
83
|
+
...(value.headers === undefined ? {} : { headers: { ...value.headers } }),
|
|
84
|
+
...(value.oauth === undefined ? {} : { oauth: value.oauth }),
|
|
85
|
+
...(value.disabled === undefined ? {} : { disabled: value.disabled }),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export function cleanManagedEnvironment(editor, managed, injected, pristine) {
|
|
89
|
+
for (const [name, keys] of managed)
|
|
90
|
+
editor.update(name, (config) => restoreManaged(config, keys, pristine, name));
|
|
91
|
+
for (const [name, values] of injected)
|
|
92
|
+
editor.update(name, (config) => restoreInjected(config, values, pristine, name));
|
|
93
|
+
}
|
|
94
|
+
function restoreManaged(config, keys, pristine, name) {
|
|
95
|
+
if (config.type !== "local")
|
|
96
|
+
return;
|
|
97
|
+
const environment = { ...(config.environment ?? {}) };
|
|
98
|
+
for (const state of keys.values())
|
|
99
|
+
for (const key of Object.keys(state.injected))
|
|
100
|
+
restoreManagedKey(environment, key, state, keys, pristine, name);
|
|
101
|
+
keys.clear();
|
|
102
|
+
config.environment = environment;
|
|
103
|
+
}
|
|
104
|
+
function restoreManagedKey(environment, key, state, _keys, pristine, name) {
|
|
105
|
+
if (environment[key] !== state.injected[key])
|
|
106
|
+
pristine.set(name, { ...(pristine.get(name) ?? {}), [key]: environment[key] });
|
|
107
|
+
else if (state.original[key] === undefined)
|
|
108
|
+
delete environment[key];
|
|
109
|
+
else
|
|
110
|
+
environment[key] = state.original[key];
|
|
111
|
+
}
|
|
112
|
+
function restoreInjected(config, values, pristine, name) {
|
|
113
|
+
if (config.type !== "local")
|
|
114
|
+
return;
|
|
115
|
+
const environment = { ...(config.environment ?? {}) };
|
|
116
|
+
for (const [key, value] of Object.entries(values))
|
|
117
|
+
restoreInjectedKey(environment, key, value, pristine.get(name)?.[key]);
|
|
118
|
+
config.environment = environment;
|
|
119
|
+
}
|
|
120
|
+
function restoreInjectedKey(environment, key, injected, original) {
|
|
121
|
+
if (environment[key] !== injected)
|
|
122
|
+
return;
|
|
123
|
+
if (original === undefined)
|
|
124
|
+
delete environment[key];
|
|
125
|
+
else
|
|
126
|
+
environment[key] = original;
|
|
127
|
+
}
|
|
128
|
+
export function runtimeEnvironment(editor, runtime, pristine, managed, injected) {
|
|
129
|
+
for (const [name, mapping] of Object.entries(runtime.mappings)) {
|
|
130
|
+
if (!eligibleEnvironmentMapping(mapping, runtime.state.ready))
|
|
131
|
+
continue;
|
|
132
|
+
const server = editor.get(name);
|
|
133
|
+
if (server?.type !== "local")
|
|
134
|
+
continue;
|
|
135
|
+
rememberEnvironment(name, mapping, runtime, pristine, managed, injected);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function eligibleEnvironmentMapping(mapping, ready) {
|
|
139
|
+
return ready && typeof mapping === "object" && !("remote" in mapping);
|
|
140
|
+
}
|
|
141
|
+
function rememberEnvironment(name, mapping, runtime, pristine, managed, injected) {
|
|
142
|
+
const values = environmentValues(mapping, runtime.state.environment, pristine.get(name));
|
|
143
|
+
if (Object.keys(values.injected).length === 0)
|
|
144
|
+
return;
|
|
145
|
+
managed.set(name, new Map([[runtime.id, values]]));
|
|
146
|
+
injected.set(name, values.injected);
|
|
147
|
+
}
|
|
148
|
+
function environmentValues(mapping, environment, originalEnvironment) {
|
|
149
|
+
const injected = {};
|
|
150
|
+
const original = {};
|
|
151
|
+
for (const output of Object.keys(mapping)) {
|
|
152
|
+
const value = environment[mapping[output]];
|
|
153
|
+
if (value === undefined)
|
|
154
|
+
continue;
|
|
155
|
+
injected[output] = value;
|
|
156
|
+
original[output] = originalEnvironment?.[output];
|
|
157
|
+
}
|
|
158
|
+
return { original, injected };
|
|
159
|
+
}
|
|
160
|
+
export function selectRuntime(runtimes, bindings, selector) {
|
|
161
|
+
if (!selector?.scope && !selector?.server)
|
|
162
|
+
return defaultRuntime(runtimes);
|
|
163
|
+
const scope = selector.scope ?? (selector.server === undefined ? undefined : bindings[selector.server]);
|
|
164
|
+
return validSelection(scope, selector?.server, bindings) ? runtimes.get(scope) : undefined;
|
|
165
|
+
}
|
|
166
|
+
function defaultRuntime(runtimes) {
|
|
167
|
+
return runtimes.get("global") ?? runtimes.get("project");
|
|
168
|
+
}
|
|
169
|
+
function validSelection(scope, server, bindings) {
|
|
170
|
+
return scope !== undefined && (server === undefined || bindings[server] === scope);
|
|
171
|
+
}
|
|
172
|
+
export function aggregatePhase(base, scopes) {
|
|
173
|
+
const active = scopes.filter((item) => item.activation !== "awaiting_activation");
|
|
174
|
+
const unstable = active.some((item) => item.phase === "failed" || item.phase === "starting");
|
|
175
|
+
if (unstable)
|
|
176
|
+
return active.some((item) => item.phase === "ready") ? "degraded" : base;
|
|
177
|
+
return active.every((item) => item.phase === "ready") ? "ready" : base;
|
|
178
|
+
}
|
|
179
|
+
export function projectFallback(configuration) {
|
|
180
|
+
if (!configuration.project)
|
|
181
|
+
return undefined;
|
|
182
|
+
return {
|
|
183
|
+
scope: "project",
|
|
184
|
+
projectDirectory: configuration.project.sourceRoot,
|
|
185
|
+
phase: "stopped",
|
|
186
|
+
generation: 0,
|
|
187
|
+
activation: configuration.activation === "auto" ? "auto" : "awaiting_activation",
|
|
188
|
+
diagnostics: configuration.diagnostics,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
export function applyRuntimeProtection(editor, runtime, explicitlyDisabled) {
|
|
192
|
+
for (const name of Object.keys(runtime.mappings)) {
|
|
193
|
+
if (explicitlyDisabled.has(name))
|
|
194
|
+
continue;
|
|
195
|
+
editor.update(name, (config) => {
|
|
196
|
+
config.disabled = undefined;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
applyProtection(editor, { ...runtime.group.options.adapter, servers: runtime.mappings }, {
|
|
200
|
+
...runtime.state,
|
|
201
|
+
explicitlyDisabled,
|
|
202
|
+
remoteHandles: runtime.remote.handles,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
export function disableProjectServers(editor, configuration, inactive) {
|
|
206
|
+
for (const [name] of Object.entries(configuration.project?.servers ?? {})) {
|
|
207
|
+
if (configuration.bindings[name] !== "project")
|
|
208
|
+
continue;
|
|
209
|
+
editor.update(name, (config) => {
|
|
210
|
+
config.disabled = true;
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
for (const name of inactive)
|
|
214
|
+
editor.update(name, (config) => {
|
|
215
|
+
config.disabled = true;
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
export function selectedStatus(runtime, configuration, selector) {
|
|
219
|
+
if (runtime) {
|
|
220
|
+
const scoped = groupStatus(runtime, runtime.id === "project" ? configuration.activation : "auto");
|
|
221
|
+
return {
|
|
222
|
+
phase: scoped.phase,
|
|
223
|
+
projectDirectory: scoped.projectDirectory,
|
|
224
|
+
generation: scoped.generation,
|
|
225
|
+
...safeFields(scoped),
|
|
226
|
+
scopes: [scoped],
|
|
227
|
+
bindings: configuration.bindings,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
phase: "failed",
|
|
232
|
+
projectDirectory: configuration.global.sourceRoot,
|
|
233
|
+
generation: 0,
|
|
234
|
+
diagnostics: [
|
|
235
|
+
{
|
|
236
|
+
code: "server_unbound",
|
|
237
|
+
server: selector.server ?? "",
|
|
238
|
+
message: "server is not bound to an active scope",
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
function safeFields(status) {
|
|
244
|
+
return {
|
|
245
|
+
...(status.pid === undefined ? {} : { pid: status.pid }),
|
|
246
|
+
...(status.lastRefreshAt === undefined ? {} : { lastRefreshAt: status.lastRefreshAt }),
|
|
247
|
+
...(status.error === undefined ? {} : { error: status.error }),
|
|
248
|
+
...(status.diagnostics === undefined ? {} : { diagnostics: status.diagnostics }),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
export function statusBase(global, project, configuration) {
|
|
252
|
+
if (global?.status)
|
|
253
|
+
return global.status;
|
|
254
|
+
if (global)
|
|
255
|
+
return { phase: "starting", projectDirectory: global.group.sourceRoot, generation: 0 };
|
|
256
|
+
if (project)
|
|
257
|
+
return {
|
|
258
|
+
phase: project.phase,
|
|
259
|
+
projectDirectory: project.projectDirectory,
|
|
260
|
+
generation: project.generation,
|
|
261
|
+
...(project.error === undefined ? {} : { error: project.error }),
|
|
262
|
+
};
|
|
263
|
+
return { phase: "stopped", projectDirectory: configuration.global.sourceRoot, generation: 0 };
|
|
264
|
+
}
|
|
265
|
+
export function statusScopes(global, project) {
|
|
266
|
+
return [...(global ? [groupStatus(global, "auto")] : []), ...(project ? [project] : [])];
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=controller-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-helpers.js","sourceRoot":"","sources":["../../src/scopes/controller-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Scope } from "effect";
|
|
2
|
+
import type { BrokerLease } from "../broker-registry.js";
|
|
3
|
+
import type { ScopeId, SafeStatus } from "../contracts.js";
|
|
4
|
+
import type { ServerProtection } from "../options.js";
|
|
5
|
+
import type { ProtectionState } from "../plugin.js";
|
|
6
|
+
import type { RemoteRelayCoordinator } from "../remote.js";
|
|
7
|
+
import type { ScopedGroup } from "../scoped-config.js";
|
|
8
|
+
export type Runtime = {
|
|
9
|
+
readonly id: ScopeId;
|
|
10
|
+
readonly group: ScopedGroup;
|
|
11
|
+
lease?: BrokerLease;
|
|
12
|
+
readonly remote: RemoteRelayCoordinator;
|
|
13
|
+
mappings: Readonly<Record<string, ServerProtection>>;
|
|
14
|
+
state: ProtectionState;
|
|
15
|
+
status?: SafeStatus;
|
|
16
|
+
observedGeneration: number;
|
|
17
|
+
active: boolean;
|
|
18
|
+
readonly scope: Scope.Closeable;
|
|
19
|
+
epoch: number;
|
|
20
|
+
transitioning: boolean;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=controller-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-types.d.ts","sourceRoot":"","sources":["../../src/scopes/controller-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACrD,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-types.js","sourceRoot":"","sources":["../../src/scopes/controller-types.ts"],"names":[],"mappings":""}
|
package/dist/tui.d.ts
CHANGED
|
@@ -2,6 +2,23 @@ import { Plugin } from "@opencode/plugin/tui";
|
|
|
2
2
|
export interface SafeStatusView {
|
|
3
3
|
readonly phase: string;
|
|
4
4
|
readonly generation: number;
|
|
5
|
+
readonly activation?: "auto" | "manual" | "awaiting_activation";
|
|
6
|
+
readonly scopes?: readonly {
|
|
7
|
+
readonly scope: "global" | "project";
|
|
8
|
+
readonly phase: string;
|
|
9
|
+
readonly generation: number;
|
|
10
|
+
readonly activation?: "auto" | "manual" | "awaiting_activation";
|
|
11
|
+
readonly diagnostics?: readonly {
|
|
12
|
+
readonly server: string;
|
|
13
|
+
readonly code: string;
|
|
14
|
+
readonly message: string;
|
|
15
|
+
}[];
|
|
16
|
+
readonly error?: {
|
|
17
|
+
readonly code: string;
|
|
18
|
+
readonly message: string;
|
|
19
|
+
readonly retryable: boolean;
|
|
20
|
+
};
|
|
21
|
+
}[];
|
|
5
22
|
readonly diagnostics?: readonly {
|
|
6
23
|
readonly server: string;
|
|
7
24
|
readonly code: string;
|
|
@@ -17,43 +34,24 @@ export interface TuiActions {
|
|
|
17
34
|
readonly status: () => Promise<SafeStatusView>;
|
|
18
35
|
readonly refresh: () => Promise<SafeStatusView>;
|
|
19
36
|
readonly doctor: () => Promise<SafeStatusView>;
|
|
37
|
+
readonly activateProject?: () => Promise<SafeStatusView>;
|
|
38
|
+
readonly refreshProject?: () => Promise<SafeStatusView>;
|
|
39
|
+
readonly doctorProject?: () => Promise<SafeStatusView>;
|
|
20
40
|
readonly show: (title: string, message: string, variant: "info" | "success" | "warning" | "error") => void;
|
|
21
41
|
}
|
|
22
42
|
export declare function formatStatus(status: SafeStatusView): string;
|
|
23
|
-
export declare function createCommands(actions: TuiActions):
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
33
|
-
readonly run: () => Promise<void>;
|
|
34
|
-
}, {
|
|
35
|
-
readonly id: "key-ferry.refresh";
|
|
36
|
-
readonly title: "Key Ferry: Refresh";
|
|
37
|
-
readonly description: "Refresh the protected project environment";
|
|
38
|
-
readonly group: "Varlock";
|
|
39
|
-
readonly palette: true;
|
|
40
|
-
readonly slash: {
|
|
41
|
-
readonly name: "key-ferry-refresh";
|
|
42
|
-
readonly aliases: string[];
|
|
43
|
-
};
|
|
44
|
-
readonly run: () => Promise<void>;
|
|
45
|
-
}, {
|
|
46
|
-
readonly id: "key-ferry.doctor";
|
|
47
|
-
readonly title: "Key Ferry: Doctor";
|
|
48
|
-
readonly description: "Check Varlock readiness and protected connections";
|
|
49
|
-
readonly group: "Varlock";
|
|
50
|
-
readonly palette: true;
|
|
51
|
-
readonly slash: {
|
|
52
|
-
readonly name: "key-ferry-doctor";
|
|
53
|
-
readonly aliases: string[];
|
|
43
|
+
export declare function createCommands(actions: TuiActions): {
|
|
44
|
+
id: string;
|
|
45
|
+
title: string;
|
|
46
|
+
description: string;
|
|
47
|
+
group: string;
|
|
48
|
+
palette: true;
|
|
49
|
+
slash: {
|
|
50
|
+
name: string;
|
|
51
|
+
aliases: string[];
|
|
54
52
|
};
|
|
55
|
-
|
|
56
|
-
}];
|
|
53
|
+
run: () => Promise<void>;
|
|
54
|
+
}[];
|
|
57
55
|
declare const _default: Plugin.Definition;
|
|
58
56
|
export default _default;
|
|
59
57
|
//# sourceMappingURL=tui.d.ts.map
|
package/dist/tui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS;QAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,EAAE,CAAC;IACJ,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;CACnG;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,CACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,KAC9C,IAAI,CAAC;CACX;AAuBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,qBAAqB,CAAC;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS;QACzB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,qBAAqB,CAAC;QAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS;YAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;YACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;SAC1B,EAAE,CAAC;QACJ,QAAQ,CAAC,KAAK,CAAC,EAAE;YACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;SAC7B,CAAC;KACH,EAAE,CAAC;IACJ,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS;QAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,EAAE,CAAC;IACJ,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;CACnG;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IACvD,QAAQ,CAAC,IAAI,EAAE,CACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,KAC9C,IAAI,CAAC;CACX;AAuBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAK3D;AA4JD,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU;;;;;;;;iBALU,MAAM,EAAE;;;IAOnE;;AAED,wBA2BG"}
|
package/dist/tui.js
CHANGED
|
@@ -22,15 +22,102 @@ const errorMessage = (error) => {
|
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
24
|
export function formatStatus(status) {
|
|
25
|
-
const lines = status
|
|
25
|
+
const lines = formatOverview(status);
|
|
26
|
+
appendDiagnostics(lines, status.diagnostics);
|
|
27
|
+
for (const scope of status.scopes ?? [])
|
|
28
|
+
lines.push(...formatScope(scope));
|
|
29
|
+
return lines.join("\n");
|
|
30
|
+
}
|
|
31
|
+
function formatOverview(status) {
|
|
32
|
+
return status.error
|
|
26
33
|
? [`${status.error.message} (${status.error.code})`]
|
|
27
34
|
: [`State: ${status.phase}`, `Generation: ${status.generation}`];
|
|
28
|
-
for (const item of status.diagnostics ?? [])
|
|
29
|
-
lines.push(`${item.server}: ${item.message} (${item.code})`);
|
|
30
|
-
return lines.join("\n");
|
|
31
35
|
}
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
function appendDiagnostics(lines, diagnostics, prefix) {
|
|
37
|
+
for (const item of diagnostics ?? [])
|
|
38
|
+
lines.push(`${prefix ? `${prefix}/` : ""}${item.server}: ${item.message} (${item.code})`);
|
|
39
|
+
}
|
|
40
|
+
function formatScope(scope) {
|
|
41
|
+
const lines = [formatScopeHeader(scope)];
|
|
42
|
+
appendScopeError(lines, scope);
|
|
43
|
+
appendDiagnostics(lines, scope.diagnostics, scope.scope);
|
|
44
|
+
return lines;
|
|
45
|
+
}
|
|
46
|
+
function formatScopeHeader(scope) {
|
|
47
|
+
const activation = scope.activation ? `, ${scope.activation}` : "";
|
|
48
|
+
return `${scope.scope}: ${scope.phase} (generation ${scope.generation}${activation})`;
|
|
49
|
+
}
|
|
50
|
+
function appendScopeError(lines, scope) {
|
|
51
|
+
if (scope.error)
|
|
52
|
+
lines.push(`${scope.scope}: ${scope.error.message} (${scope.error.code})`);
|
|
53
|
+
}
|
|
54
|
+
const commandSpecs = [
|
|
55
|
+
{
|
|
56
|
+
id: "key-ferry.status",
|
|
57
|
+
title: "Key Ferry: Status",
|
|
58
|
+
description: "Show safe Key Ferry sidecar state",
|
|
59
|
+
slashName: "key-ferry-status",
|
|
60
|
+
alias: "vstatus",
|
|
61
|
+
toastTitle: "Varlock status",
|
|
62
|
+
success: "Status loaded",
|
|
63
|
+
operation: "status",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: "key-ferry.refresh",
|
|
67
|
+
title: "Key Ferry: Refresh",
|
|
68
|
+
description: "Refresh the protected project environment",
|
|
69
|
+
slashName: "key-ferry-refresh",
|
|
70
|
+
alias: "vrefresh",
|
|
71
|
+
toastTitle: "Varlock refresh",
|
|
72
|
+
success: "Refresh completed",
|
|
73
|
+
operation: "refresh",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: "key-ferry.doctor",
|
|
77
|
+
title: "Key Ferry: Doctor",
|
|
78
|
+
description: "Check Varlock readiness and protected connections",
|
|
79
|
+
slashName: "key-ferry-doctor",
|
|
80
|
+
alias: "vdoctor",
|
|
81
|
+
toastTitle: "Varlock doctor",
|
|
82
|
+
success: "Check completed",
|
|
83
|
+
operation: "doctor",
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: "key-ferry.project.activate",
|
|
87
|
+
title: "Key Ferry: Activate Project",
|
|
88
|
+
description: "Activate the protected project environment",
|
|
89
|
+
slashName: "key-ferry-project-activate",
|
|
90
|
+
alias: "vproject-activate",
|
|
91
|
+
toastTitle: "Varlock project activation",
|
|
92
|
+
success: "Project activation completed",
|
|
93
|
+
operation: "activateProject",
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: "key-ferry.project.refresh",
|
|
97
|
+
title: "Key Ferry: Refresh Project",
|
|
98
|
+
description: "Refresh the protected project environment",
|
|
99
|
+
slashName: "key-ferry-project-refresh",
|
|
100
|
+
alias: "vproject-refresh",
|
|
101
|
+
toastTitle: "Varlock project refresh",
|
|
102
|
+
success: "Project refresh completed",
|
|
103
|
+
operation: "refreshProject",
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: "key-ferry.project.doctor",
|
|
107
|
+
title: "Key Ferry: Doctor Project",
|
|
108
|
+
description: "Check project Varlock readiness",
|
|
109
|
+
slashName: "key-ferry-project-doctor",
|
|
110
|
+
alias: "vproject-doctor",
|
|
111
|
+
toastTitle: "Varlock project doctor",
|
|
112
|
+
success: "Project check completed",
|
|
113
|
+
operation: "doctorProject",
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
const unavailable = async () => {
|
|
117
|
+
throw { code: "unavailable" };
|
|
118
|
+
};
|
|
119
|
+
function runCommand(actions, title, operation, success) {
|
|
120
|
+
return async () => {
|
|
34
121
|
actions.show(title, "Working…", "info");
|
|
35
122
|
try {
|
|
36
123
|
const status = await operation();
|
|
@@ -40,35 +127,21 @@ export function createCommands(actions) {
|
|
|
40
127
|
actions.show(title, errorMessage(error), "error");
|
|
41
128
|
}
|
|
42
129
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
palette: true,
|
|
59
|
-
slash: { name: "key-ferry-refresh", aliases: ["vrefresh"] },
|
|
60
|
-
run: run("Varlock refresh", actions.refresh, "Refresh completed"),
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
id: "key-ferry.doctor",
|
|
64
|
-
title: "Key Ferry: Doctor",
|
|
65
|
-
description: "Check Varlock readiness and protected connections",
|
|
66
|
-
group: "Varlock",
|
|
67
|
-
palette: true,
|
|
68
|
-
slash: { name: "key-ferry-doctor", aliases: ["vdoctor"] },
|
|
69
|
-
run: run("Varlock doctor", actions.doctor, "Check completed"),
|
|
70
|
-
},
|
|
71
|
-
];
|
|
130
|
+
}
|
|
131
|
+
function createCommand(spec, actions) {
|
|
132
|
+
const operation = actions[spec.operation] ?? unavailable;
|
|
133
|
+
return {
|
|
134
|
+
id: spec.id,
|
|
135
|
+
title: spec.title,
|
|
136
|
+
description: spec.description,
|
|
137
|
+
group: "Varlock",
|
|
138
|
+
palette: true,
|
|
139
|
+
slash: { name: spec.slashName, aliases: [spec.alias] },
|
|
140
|
+
run: runCommand(actions, spec.toastTitle, operation, spec.success),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export function createCommands(actions) {
|
|
144
|
+
return commandSpecs.map((spec) => createCommand(spec, actions));
|
|
72
145
|
}
|
|
73
146
|
export default Plugin.define({
|
|
74
147
|
id: "key-ferry.tui",
|
|
@@ -85,6 +158,9 @@ export default Plugin.define({
|
|
|
85
158
|
status: () => rpc.status({}),
|
|
86
159
|
refresh: () => rpc.refresh({}),
|
|
87
160
|
doctor: () => rpc.doctor({}),
|
|
161
|
+
activateProject: () => rpc.activateProject({}),
|
|
162
|
+
refreshProject: () => rpc.refresh({ scope: "project" }),
|
|
163
|
+
doctorProject: () => rpc.doctor({ scope: "project" }),
|
|
88
164
|
show,
|
|
89
165
|
}),
|
|
90
166
|
}));
|
package/dist/tui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
|
package/docs/architecture.md
CHANGED
|
@@ -160,7 +160,8 @@ OpenCode host/TUI run.
|
|
|
160
160
|
state transitions, fail-closed readiness, refresh, and acquire/release.
|
|
161
161
|
4. `src/plugin.ts`: native V2 plugin layer, local/remote MCP transforms, RPC,
|
|
162
162
|
relay lifecycle, and cleanup.
|
|
163
|
-
5. `src/rpc.ts`: secret-free status and
|
|
163
|
+
5. `src/rpc.ts`: secret-free status, refresh, doctor, and activateProject RPC
|
|
164
|
+
definitions.
|
|
164
165
|
6. `src/options.ts`: validation of explicit project-scoped configuration.
|
|
165
166
|
7. `src/tui.ts`: optional status/refresh UX over the RPC shape.
|
|
166
167
|
8. `src/remote.ts`: adapter-side remote relay contract, target/header
|
|
@@ -177,3 +178,28 @@ ambient environment variables.
|
|
|
177
178
|
Cleanup is scope-owned and project-owned: it stops only the sidecar and relay
|
|
178
179
|
resources acquired by this plugin instance. It does not perform a global
|
|
179
180
|
Varlock shutdown and does not claim full sandbox isolation.
|
|
181
|
+
|
|
182
|
+
## Global and project scopes
|
|
183
|
+
|
|
184
|
+
The plugin may be installed once in native global OpenCode configuration. Its
|
|
185
|
+
`projectConfig.enabled` option is `false` by default, preserving the original
|
|
186
|
+
single-project behavior. When enabled, the loader reads the optional
|
|
187
|
+
`.opencode/key-ferry.jsonc` from the canonical current project root. The global
|
|
188
|
+
and project scopes have independent Varlock roots, managers, mappings, and
|
|
189
|
+
keysets; project configuration never imports or unions global mappings.
|
|
190
|
+
|
|
191
|
+
Project `servers` use the same validated mapping shape as native plugin
|
|
192
|
+
options. Reusing a global server name requires listing it in `overrides`; other
|
|
193
|
+
name collisions fail closed. `projectDirectory`, when present in the project
|
|
194
|
+
file, must resolve within the canonical project root. The global activation
|
|
195
|
+
policy is a floor: global manual policy cannot be escalated by a project, and
|
|
196
|
+
project manual policy can restrict global auto activation. Manual activation is
|
|
197
|
+
an in-memory current-location action, not an enrollment store.
|
|
198
|
+
|
|
199
|
+
A registry deduplicates identical global managers across contexts while keeping
|
|
200
|
+
project managers local. Broker startup is readiness-gated: protected MCP
|
|
201
|
+
servers remain disabled while a group starts, and a failure in one group does
|
|
202
|
+
not stop a healthy group. File watching and configuration reload are local to
|
|
203
|
+
the project group. Status, refresh, and doctor do not activate inactive groups;
|
|
204
|
+
`activateProject` is the explicit one-time activation operation for a manual
|
|
205
|
+
project.
|