@s-gw/s-gw 0.1.0
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/.codex-plugin/plugin.json +35 -0
- package/.mcp.json +16 -0
- package/LICENSE +201 -0
- package/NOTICE +7 -0
- package/README.md +197 -0
- package/TRADEMARKS.md +9 -0
- package/assets/icons/aws-ec2.png +0 -0
- package/assets/icons/lucide/bot.svg +8 -0
- package/assets/icons/lucide/monitor.svg +5 -0
- package/assets/icons/lucide/server.svg +6 -0
- package/assets/icons/lucide/terminal.svg +4 -0
- package/assets/icons/s-gw-128.png +0 -0
- package/assets/icons/s-gw-16.png +0 -0
- package/assets/icons/s-gw-180.png +0 -0
- package/assets/icons/s-gw-192.png +0 -0
- package/assets/icons/s-gw-32.png +0 -0
- package/assets/icons/s-gw-64.png +0 -0
- package/assets/icons/s-gw-menu-bar-template.png +0 -0
- package/dist/agent-context.d.ts +17 -0
- package/dist/agent-context.js +207 -0
- package/dist/agents.d.ts +64 -0
- package/dist/agents.js +763 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +1385 -0
- package/dist/command-suggest.d.ts +3 -0
- package/dist/command-suggest.js +131 -0
- package/dist/console-server.d.ts +16 -0
- package/dist/console-server.js +978 -0
- package/dist/console-ui/assets/codex-DYTPdPxi.png +0 -0
- package/dist/console-ui/assets/cursor-CBrUTJD-.png +0 -0
- package/dist/console-ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/console-ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/console-ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/console-ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/console-ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/console-ui/assets/hermes-B8hNbJPm.png +0 -0
- package/dist/console-ui/assets/index-BxUf0Sye.js +96 -0
- package/dist/console-ui/assets/index-CmTiBR_w.css +2 -0
- package/dist/console-ui/assets/omnigent-Cxa4p2Mq.png +0 -0
- package/dist/console-ui/assets/openclaw-C5wL4ZVW.png +0 -0
- package/dist/console-ui/assets/opencode-D_wFATSC.png +0 -0
- package/dist/console-ui/assets/openhands-DnrlGgev.svg +9 -0
- package/dist/console-ui/assets/s-gw-64-ByMUGQ3K.png +0 -0
- package/dist/console-ui/assets/vscode-Bdtr9eyf.png +0 -0
- package/dist/console-ui/assets/zeptoclaw-DztQW8Sw.png +0 -0
- package/dist/console-ui/index.html +13 -0
- package/dist/crypto.d.ts +6 -0
- package/dist/crypto.js +53 -0
- package/dist/executor.d.ts +7 -0
- package/dist/executor.js +297 -0
- package/dist/gateway.d.ts +31 -0
- package/dist/gateway.js +114 -0
- package/dist/guard.d.ts +61 -0
- package/dist/guard.js +247 -0
- package/dist/install.d.ts +146 -0
- package/dist/install.js +629 -0
- package/dist/mcp-server.d.ts +2 -0
- package/dist/mcp-server.js +119 -0
- package/dist/native/s-gw-core +0 -0
- package/dist/native/s-gw-keychain-helper +0 -0
- package/dist/onepassword.d.ts +48 -0
- package/dist/onepassword.js +412 -0
- package/dist/paths.d.ts +4 -0
- package/dist/paths.js +22 -0
- package/dist/s-gw Menu Bar.app/Contents/Info.plist +28 -0
- package/dist/s-gw Menu Bar.app/Contents/MacOS/s-gw-menu-bar-helper +0 -0
- package/dist/s-gw Menu Bar.app/Contents/Resources/AppIcon.icns +0 -0
- package/dist/s-gw Menu Bar.app/Contents/Resources/AwsEc2.png +0 -0
- package/dist/s-gw Menu Bar.app/Contents/Resources/Lucide-bot.svg +8 -0
- package/dist/s-gw Menu Bar.app/Contents/Resources/Lucide-monitor.svg +5 -0
- package/dist/s-gw Menu Bar.app/Contents/Resources/Lucide-server.svg +6 -0
- package/dist/s-gw Menu Bar.app/Contents/Resources/Lucide-terminal.svg +4 -0
- package/dist/s-gw Menu Bar.app/Contents/Resources/MenuBarTemplate.png +0 -0
- package/dist/s-gw Menu Bar.app/Contents/_CodeSignature/CodeResources +194 -0
- package/dist/s-gw.app/Contents/Info.plist +28 -0
- package/dist/s-gw.app/Contents/MacOS/s-gw +0 -0
- package/dist/s-gw.app/Contents/Resources/AppIcon.icns +0 -0
- package/dist/s-gw.app/Contents/Resources/MenuBarTemplate.png +0 -0
- package/dist/s-gw.app/Contents/_CodeSignature/CodeResources +139 -0
- package/dist/scanner.d.ts +9 -0
- package/dist/scanner.js +437 -0
- package/dist/ssh.d.ts +31 -0
- package/dist/ssh.js +286 -0
- package/dist/store.d.ts +131 -0
- package/dist/store.js +1611 -0
- package/dist/types.d.ts +196 -0
- package/dist/types.js +2 -0
- package/dist/unlock.d.ts +29 -0
- package/dist/unlock.js +274 -0
- package/dist/windows/VERSION.txt +1 -0
- package/dist/windows/s-gw-client.cmd +4 -0
- package/dist/windows/s-gw-client.ps1 +106 -0
- package/dist/windows/s-gw-credential.cmd +4 -0
- package/dist/windows/s-gw-credential.ps1 +167 -0
- package/dist/windows/s-gw-helper.cmd +4 -0
- package/dist/windows/s-gw-helper.ps1 +180 -0
- package/docs/README.md +23 -0
- package/docs/agents.md +160 -0
- package/docs/architecture.md +72 -0
- package/docs/deployment.md +447 -0
- package/docs/detection.md +44 -0
- package/docs/images/s-gw-overview.png +0 -0
- package/docs/integrations.md +195 -0
- package/docs/keychain.md +39 -0
- package/docs/onepassword.md +84 -0
- package/docs/quickstart.md +104 -0
- package/docs/threat-model.md +100 -0
- package/docs/ui/THIRD_PARTY_NOTICES.md +111 -0
- package/docs/ui/apple-touch-icon.png +0 -0
- package/docs/ui/favicon-32.png +0 -0
- package/docs/ui/local-console.html +4477 -0
- package/docs/ui/vendor/d3-sankey/d3-array.LICENSE.txt +27 -0
- package/docs/ui/vendor/d3-sankey/d3-array.min.js +2 -0
- package/docs/ui/vendor/d3-sankey/d3-path.LICENSE.txt +27 -0
- package/docs/ui/vendor/d3-sankey/d3-path.min.js +2 -0
- package/docs/ui/vendor/d3-sankey/d3-sankey.LICENSE.txt +27 -0
- package/docs/ui/vendor/d3-sankey/d3-sankey.min.js +2 -0
- package/docs/ui/vendor/d3-sankey/d3-shape.LICENSE.txt +27 -0
- package/docs/ui/vendor/d3-sankey/d3-shape.min.js +2 -0
- package/docs/ui/vendor/sankeymatic/LICENSE.txt +17 -0
- package/docs/ui/vendor/sankeymatic/sankey.js +897 -0
- package/package.json +117 -0
- package/skills/s-gw/SKILL.md +19 -0
package/dist/guard.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import { resolveAgentProfile } from "./agents.js";
|
|
4
|
+
import { addLocalSecret, preferredLocalSecretBackend } from "./gateway.js";
|
|
5
|
+
import { previewHandle, scanText } from "./scanner.js";
|
|
6
|
+
const defaultAgentCommands = {
|
|
7
|
+
codex: "codex",
|
|
8
|
+
claudecode: "claude",
|
|
9
|
+
opencode: "opencode",
|
|
10
|
+
geminicli: "gemini",
|
|
11
|
+
openclaw: "openclaw",
|
|
12
|
+
zeptoclaw: "zeptoclaw",
|
|
13
|
+
openhands: "openhands",
|
|
14
|
+
antigravity: "agy"
|
|
15
|
+
};
|
|
16
|
+
export function guardStatus() {
|
|
17
|
+
const agents = [
|
|
18
|
+
"codex",
|
|
19
|
+
"claudecode",
|
|
20
|
+
"cursor",
|
|
21
|
+
"opencode",
|
|
22
|
+
"vscode",
|
|
23
|
+
"openclaw",
|
|
24
|
+
"zeptoclaw",
|
|
25
|
+
"hermes",
|
|
26
|
+
"windsurf",
|
|
27
|
+
"geminicli",
|
|
28
|
+
"copilot",
|
|
29
|
+
"openhands",
|
|
30
|
+
"antigravity",
|
|
31
|
+
"omnigent"
|
|
32
|
+
].map((id) => {
|
|
33
|
+
const profile = resolveAgentProfile(id);
|
|
34
|
+
return {
|
|
35
|
+
id: profile.id,
|
|
36
|
+
displayName: profile.displayName,
|
|
37
|
+
mcpStatus: profile.mcp.status,
|
|
38
|
+
configPaths: profile.mcp.configPaths,
|
|
39
|
+
defaultRunCommand: defaultAgentCommands[profile.id],
|
|
40
|
+
directRunSupported: Boolean(defaultAgentCommands[profile.id])
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
mode: "guarded-agent-launcher",
|
|
45
|
+
envScrubbing: true,
|
|
46
|
+
rawSecretPolicy: "credential-like environment values are replaced with stable SGW tokens before launch",
|
|
47
|
+
configInstall: "planned",
|
|
48
|
+
agents
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export async function prepareGuardedRun(store, options) {
|
|
52
|
+
const profile = resolveAgentProfile(options.agent);
|
|
53
|
+
const command = options.command || defaultAgentCommands[profile.id];
|
|
54
|
+
if (!command) {
|
|
55
|
+
throw new Error(`Guard run for ${profile.displayName} needs --command because it has no safe default CLI launcher yet.`);
|
|
56
|
+
}
|
|
57
|
+
const cwd = options.cwd || process.cwd();
|
|
58
|
+
const baseEnv = normalizeEnv(options.env || process.env);
|
|
59
|
+
for (const [key, value] of Object.entries(options.extraEnv || {})) {
|
|
60
|
+
baseEnv[key] = value;
|
|
61
|
+
}
|
|
62
|
+
const scrubbedEnv = [];
|
|
63
|
+
let guardedEnv = { ...baseEnv };
|
|
64
|
+
if (options.scrubEnv !== false) {
|
|
65
|
+
const scrubbed = await scrubEnvironment(store, profile, guardedEnv, {
|
|
66
|
+
persist: options.persist === true,
|
|
67
|
+
allowedCommands: options.allowedCommands || []
|
|
68
|
+
});
|
|
69
|
+
guardedEnv = scrubbed.env;
|
|
70
|
+
scrubbedEnv.push(...scrubbed.findings);
|
|
71
|
+
}
|
|
72
|
+
const instructions = guardInstructions(profile, scrubbedEnv);
|
|
73
|
+
guardedEnv.SGW_GUARD_MODE = "1";
|
|
74
|
+
guardedEnv.SGW_GUARD_AGENT = profile.id;
|
|
75
|
+
guardedEnv.SGW_GUARD_INSTRUCTIONS = instructions;
|
|
76
|
+
guardedEnv.SGW_GUARD_TOKENIZED_ENV = JSON.stringify(scrubbedEnv.map((item) => ({
|
|
77
|
+
name: item.name,
|
|
78
|
+
handle: item.handle,
|
|
79
|
+
token: item.token,
|
|
80
|
+
type: item.type,
|
|
81
|
+
provider: item.provider,
|
|
82
|
+
ruleId: item.ruleId,
|
|
83
|
+
severity: item.severity
|
|
84
|
+
})));
|
|
85
|
+
const args = options.args || [];
|
|
86
|
+
const warnings = [];
|
|
87
|
+
if (scrubbedEnv.length === 0) {
|
|
88
|
+
warnings.push("No credential-like environment variables were detected.");
|
|
89
|
+
}
|
|
90
|
+
if (profile.mcp.status !== "supported") {
|
|
91
|
+
warnings.push(`${profile.displayName} MCP setup is marked ${profile.mcp.status}; install/config may need manual review.`);
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
env: guardedEnv,
|
|
95
|
+
plan: {
|
|
96
|
+
agent: {
|
|
97
|
+
id: profile.id,
|
|
98
|
+
displayName: profile.displayName
|
|
99
|
+
},
|
|
100
|
+
command,
|
|
101
|
+
args,
|
|
102
|
+
cwd,
|
|
103
|
+
mode: "guarded",
|
|
104
|
+
scrubbedEnv,
|
|
105
|
+
keptEnvCount: Object.keys(guardedEnv).length - scrubbedEnv.length,
|
|
106
|
+
scrubbedEnvCount: scrubbedEnv.length,
|
|
107
|
+
mcp: {
|
|
108
|
+
serverName: "s-gw",
|
|
109
|
+
command: "s-gw-mcp"
|
|
110
|
+
},
|
|
111
|
+
instructions,
|
|
112
|
+
dryRun: options.persist !== true,
|
|
113
|
+
warnings
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export async function runGuardedAgent(store, options) {
|
|
118
|
+
const prepared = await prepareGuardedRun(store, {
|
|
119
|
+
...options,
|
|
120
|
+
persist: true
|
|
121
|
+
});
|
|
122
|
+
process.stderr.write(`s-gw guard mode: launching ${prepared.plan.agent.displayName}; tokenized ${prepared.plan.scrubbedEnvCount} environment credential(s).\n`);
|
|
123
|
+
const child = spawn(prepared.plan.command, prepared.plan.args, {
|
|
124
|
+
cwd: prepared.plan.cwd,
|
|
125
|
+
env: prepared.env,
|
|
126
|
+
stdio: "inherit"
|
|
127
|
+
});
|
|
128
|
+
return new Promise((resolve, reject) => {
|
|
129
|
+
child.once("error", reject);
|
|
130
|
+
child.once("exit", (code, signal) => {
|
|
131
|
+
if (signal) {
|
|
132
|
+
resolve(128 + signalToExitCode(signal));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
resolve(code ?? 1);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
async function scrubEnvironment(store, profile, env, options) {
|
|
140
|
+
const out = { ...env };
|
|
141
|
+
const findings = [];
|
|
142
|
+
for (const [name, value] of Object.entries(env)) {
|
|
143
|
+
if (shouldDropEnv(name)) {
|
|
144
|
+
delete out[name];
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (!value || shouldSkipEnv(name)) {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const line = `${name}=${value}`;
|
|
151
|
+
const result = await scanText(line, async (candidate) => {
|
|
152
|
+
if (!options.persist) {
|
|
153
|
+
return previewHandle(candidate);
|
|
154
|
+
}
|
|
155
|
+
const record = await addLocalSecret(store, {
|
|
156
|
+
name: `${profile.id} env ${name}`,
|
|
157
|
+
type: candidate.type,
|
|
158
|
+
provider: candidate.provider,
|
|
159
|
+
ruleId: candidate.ruleId,
|
|
160
|
+
severity: candidate.severity,
|
|
161
|
+
confidence: candidate.confidence,
|
|
162
|
+
value: candidate.value,
|
|
163
|
+
source: `guard-env:${profile.id}:${name}`,
|
|
164
|
+
policy: {
|
|
165
|
+
injectEnv: name,
|
|
166
|
+
allowedCommands: options.allowedCommands,
|
|
167
|
+
maxOutputBytes: 16_384
|
|
168
|
+
}
|
|
169
|
+
}, preferredLocalSecretBackend());
|
|
170
|
+
return record.handle;
|
|
171
|
+
});
|
|
172
|
+
if (result.findings.length === 0) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
const prefix = `${name}=`;
|
|
176
|
+
out[name] = result.tokenizedText.startsWith(prefix)
|
|
177
|
+
? result.tokenizedText.slice(prefix.length)
|
|
178
|
+
: result.findings.map((finding) => finding.token).join("\n");
|
|
179
|
+
for (const finding of result.findings) {
|
|
180
|
+
findings.push({
|
|
181
|
+
name,
|
|
182
|
+
handle: finding.handle,
|
|
183
|
+
token: finding.token,
|
|
184
|
+
type: finding.type,
|
|
185
|
+
provider: finding.provider,
|
|
186
|
+
ruleId: finding.ruleId,
|
|
187
|
+
severity: finding.severity
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return { env: out, findings };
|
|
192
|
+
}
|
|
193
|
+
function normalizeEnv(env) {
|
|
194
|
+
const out = {};
|
|
195
|
+
for (const [key, value] of Object.entries(env)) {
|
|
196
|
+
if (typeof value === "string") {
|
|
197
|
+
out[key] = value;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return out;
|
|
201
|
+
}
|
|
202
|
+
function shouldDropEnv(name) {
|
|
203
|
+
return (name === "SGW_MASTER_PASSPHRASE" ||
|
|
204
|
+
name === "SGW_GUARD_AGENT" ||
|
|
205
|
+
name === "SGW_GUARD_INSTRUCTIONS" ||
|
|
206
|
+
name === "SGW_GUARD_MODE" ||
|
|
207
|
+
name === "SGW_GUARD_TOKENIZED_ENV");
|
|
208
|
+
}
|
|
209
|
+
function shouldSkipEnv(name) {
|
|
210
|
+
const commonNonSecret = new Set([
|
|
211
|
+
"HOME",
|
|
212
|
+
"LANG",
|
|
213
|
+
"LOGNAME",
|
|
214
|
+
"OLDPWD",
|
|
215
|
+
"PATH",
|
|
216
|
+
"PWD",
|
|
217
|
+
"SHELL",
|
|
218
|
+
"SHLVL",
|
|
219
|
+
"TERM",
|
|
220
|
+
"TMPDIR",
|
|
221
|
+
"USER",
|
|
222
|
+
"_"
|
|
223
|
+
]);
|
|
224
|
+
return (commonNonSecret.has(name) ||
|
|
225
|
+
name.startsWith("npm_"));
|
|
226
|
+
}
|
|
227
|
+
function guardInstructions(profile, scrubbedEnv) {
|
|
228
|
+
const names = scrubbedEnv.map((item) => `${item.name}=${item.token}`).join(", ") || "none";
|
|
229
|
+
return [
|
|
230
|
+
`s-gw guard mode is active for ${profile.displayName}.`,
|
|
231
|
+
`Credential-like environment values were replaced with SGW handles: ${names}.`,
|
|
232
|
+
"Treat SGW handles as unique secret representations, not redactions.",
|
|
233
|
+
"Do not ask the user to paste raw credentials.",
|
|
234
|
+
"Use s-gw MCP tools to scan files/text and request local approved execution when a credential-backed action is needed.",
|
|
235
|
+
"Raw secret values must remain in the local s-gw store and local approved child processes."
|
|
236
|
+
].join(" ");
|
|
237
|
+
}
|
|
238
|
+
function signalToExitCode(signal) {
|
|
239
|
+
const known = {
|
|
240
|
+
SIGHUP: 1,
|
|
241
|
+
SIGINT: 2,
|
|
242
|
+
SIGQUIT: 3,
|
|
243
|
+
SIGTERM: 15
|
|
244
|
+
};
|
|
245
|
+
return known[signal] ?? 1;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=guard.js.map
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
export declare const consoleLabel = "com.s-gw.sgw.console";
|
|
2
|
+
export declare const menuBarLabel = "com.s-gw.sgw.menubar";
|
|
3
|
+
export interface PackageLayout {
|
|
4
|
+
packageRoot: string;
|
|
5
|
+
cliPath: string;
|
|
6
|
+
mcpPath: string;
|
|
7
|
+
keychainHelperPath: string;
|
|
8
|
+
macAppPath: string;
|
|
9
|
+
macAppBinaryPath: string;
|
|
10
|
+
menuBarAppPath: string;
|
|
11
|
+
menuBarBinaryPath: string;
|
|
12
|
+
windowsClientScriptPath: string;
|
|
13
|
+
windowsClientLauncherPath: string;
|
|
14
|
+
windowsHelperScriptPath: string;
|
|
15
|
+
windowsHelperLauncherPath: string;
|
|
16
|
+
windowsCredentialHelperPath: string;
|
|
17
|
+
}
|
|
18
|
+
export interface LaunchAgentStatus {
|
|
19
|
+
label: string;
|
|
20
|
+
plistPath: string;
|
|
21
|
+
installed: boolean;
|
|
22
|
+
loaded: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ServiceInstallOptions {
|
|
25
|
+
port?: number;
|
|
26
|
+
start?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface MenuBarOptions {
|
|
29
|
+
consoleUrl?: string;
|
|
30
|
+
port?: number;
|
|
31
|
+
start?: boolean;
|
|
32
|
+
show?: boolean;
|
|
33
|
+
notify?: boolean;
|
|
34
|
+
countMode?: MenuBarCountMode;
|
|
35
|
+
}
|
|
36
|
+
export type MenuBarCountMode = "pending" | "credentials" | "none";
|
|
37
|
+
export interface MacAppProcessInfo {
|
|
38
|
+
pid: number;
|
|
39
|
+
source: "record" | "process-list";
|
|
40
|
+
alive: boolean;
|
|
41
|
+
recordPath?: string;
|
|
42
|
+
bundleIdentifier?: string;
|
|
43
|
+
bundlePath?: string;
|
|
44
|
+
executablePath?: string;
|
|
45
|
+
command?: string;
|
|
46
|
+
startedAt?: string;
|
|
47
|
+
updatedAt?: string;
|
|
48
|
+
otherPids?: number[];
|
|
49
|
+
}
|
|
50
|
+
export interface MacAppOpenResult {
|
|
51
|
+
appPath: string;
|
|
52
|
+
consoleUrl: string;
|
|
53
|
+
reusedExisting: boolean;
|
|
54
|
+
process?: MacAppProcessInfo;
|
|
55
|
+
}
|
|
56
|
+
export interface WindowsOpenResult {
|
|
57
|
+
scriptPath: string;
|
|
58
|
+
launcherPath: string;
|
|
59
|
+
consoleUrl: string;
|
|
60
|
+
pid?: number;
|
|
61
|
+
}
|
|
62
|
+
export declare function getPackageLayout(): PackageLayout;
|
|
63
|
+
export declare function packageHealth(port?: number): {
|
|
64
|
+
packageRoot: string;
|
|
65
|
+
ready: boolean;
|
|
66
|
+
readiness: ReadinessVerdict;
|
|
67
|
+
cliPath: {
|
|
68
|
+
path: string;
|
|
69
|
+
exists: boolean;
|
|
70
|
+
};
|
|
71
|
+
mcpPath: {
|
|
72
|
+
path: string;
|
|
73
|
+
exists: boolean;
|
|
74
|
+
};
|
|
75
|
+
keychainHelperPath: {
|
|
76
|
+
path: string;
|
|
77
|
+
exists: boolean;
|
|
78
|
+
};
|
|
79
|
+
macAppPath: {
|
|
80
|
+
path: string;
|
|
81
|
+
exists: boolean;
|
|
82
|
+
};
|
|
83
|
+
macAppBinaryPath: {
|
|
84
|
+
path: string;
|
|
85
|
+
exists: boolean;
|
|
86
|
+
};
|
|
87
|
+
menuBarAppPath: {
|
|
88
|
+
path: string;
|
|
89
|
+
exists: boolean;
|
|
90
|
+
};
|
|
91
|
+
menuBarBinaryPath: {
|
|
92
|
+
path: string;
|
|
93
|
+
exists: boolean;
|
|
94
|
+
};
|
|
95
|
+
windowsClientScriptPath: {
|
|
96
|
+
path: string;
|
|
97
|
+
exists: boolean;
|
|
98
|
+
};
|
|
99
|
+
windowsClientLauncherPath: {
|
|
100
|
+
path: string;
|
|
101
|
+
exists: boolean;
|
|
102
|
+
};
|
|
103
|
+
windowsHelperScriptPath: {
|
|
104
|
+
path: string;
|
|
105
|
+
exists: boolean;
|
|
106
|
+
};
|
|
107
|
+
windowsHelperLauncherPath: {
|
|
108
|
+
path: string;
|
|
109
|
+
exists: boolean;
|
|
110
|
+
};
|
|
111
|
+
windowsCredentialHelperPath: {
|
|
112
|
+
path: string;
|
|
113
|
+
exists: boolean;
|
|
114
|
+
};
|
|
115
|
+
storePath: string;
|
|
116
|
+
consoleUrl: string;
|
|
117
|
+
unlock: import("./unlock.js").UnlockStatus;
|
|
118
|
+
launchAgents: {
|
|
119
|
+
console: LaunchAgentStatus;
|
|
120
|
+
menuBar: LaunchAgentStatus;
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
export interface ReadinessVerdict {
|
|
124
|
+
ok: boolean;
|
|
125
|
+
summary: string;
|
|
126
|
+
blockers: string[];
|
|
127
|
+
}
|
|
128
|
+
export declare function readinessForUnlock(unlockConfigured: boolean): ReadinessVerdict;
|
|
129
|
+
export declare function installConsoleLaunchAgent(options?: ServiceInstallOptions): Promise<LaunchAgentStatus>;
|
|
130
|
+
export declare function uninstallConsoleLaunchAgent(): Promise<LaunchAgentStatus>;
|
|
131
|
+
export declare function installMenuBarLaunchAgent(options?: MenuBarOptions): Promise<LaunchAgentStatus>;
|
|
132
|
+
export declare function uninstallMenuBarLaunchAgent(): Promise<LaunchAgentStatus>;
|
|
133
|
+
export declare function startInstalledLaunchAgent(kind: "console" | "menubar"): LaunchAgentStatus;
|
|
134
|
+
export declare function stopInstalledLaunchAgent(kind: "console" | "menubar"): LaunchAgentStatus;
|
|
135
|
+
export declare function launchAgentStatus(kind: "console" | "menubar"): LaunchAgentStatus;
|
|
136
|
+
export declare function openMenuBarHelper(options?: MenuBarOptions): {
|
|
137
|
+
appPath: string;
|
|
138
|
+
consoleUrl: string;
|
|
139
|
+
};
|
|
140
|
+
export declare function openMacApp(options?: MenuBarOptions): MacAppOpenResult;
|
|
141
|
+
export declare function openWindowsClient(options?: MenuBarOptions): WindowsOpenResult;
|
|
142
|
+
export declare function openWindowsHelper(options?: MenuBarOptions): WindowsOpenResult;
|
|
143
|
+
export declare function macAppProcessRecordPath(): string;
|
|
144
|
+
export declare function buildConsoleLaunchAgentPlist(port: number, logsDir: string): string;
|
|
145
|
+
export declare function buildMenuBarLaunchAgentPlist(options: MenuBarOptions, logsDir: string): string;
|
|
146
|
+
export declare function normalizeMenuBarCountMode(value?: string): MenuBarCountMode | undefined;
|