geminimock 0.1.2 → 0.1.3
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 +77 -8
- package/dist/auth/account-store.d.ts +36 -0
- package/dist/auth/account-store.js +366 -0
- package/dist/auth/account-store.js.map +1 -0
- package/dist/auth/credential-store.d.ts +2 -0
- package/dist/auth/credential-store.js +33 -1
- package/dist/auth/credential-store.js.map +1 -1
- package/dist/auth/oauth-flow.d.ts +0 -2
- package/dist/auth/oauth-flow.js +122 -15
- package/dist/auth/oauth-flow.js.map +1 -1
- package/dist/auth/oauth-service.d.ts +12 -3
- package/dist/auth/oauth-service.js +90 -29
- package/dist/auth/oauth-service.js.map +1 -1
- package/dist/cli.js +336 -14
- package/dist/cli.js.map +1 -1
- package/dist/commands/auth-login.d.ts +16 -0
- package/dist/commands/auth-login.js +114 -0
- package/dist/commands/auth-login.js.map +1 -0
- package/dist/commands/auth-logout.d.ts +19 -0
- package/dist/commands/auth-logout.js +178 -0
- package/dist/commands/auth-logout.js.map +1 -0
- package/dist/config/env.d.ts +1 -0
- package/dist/config/env.js +3 -1
- package/dist/config/env.js.map +1 -1
- package/dist/gemini/code-assist-client.d.ts +15 -1
- package/dist/gemini/code-assist-client.js +101 -37
- package/dist/gemini/code-assist-client.js.map +1 -1
- package/dist/gemini/errors.d.ts +8 -0
- package/dist/gemini/errors.js +29 -0
- package/dist/gemini/errors.js.map +1 -0
- package/dist/server/app.js +8 -3
- package/dist/server/app.js.map +1 -1
- package/dist/server/background-service.d.ts +46 -0
- package/dist/server/background-service.js +332 -0
- package/dist/server/background-service.js.map +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { openSync, closeSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
5
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
6
|
+
import net from "node:net";
|
|
7
|
+
import { loadEnv } from "../config/env.js";
|
|
8
|
+
function defaultFileOps() {
|
|
9
|
+
return {
|
|
10
|
+
async mkdir(path) {
|
|
11
|
+
await mkdir(path, { recursive: true });
|
|
12
|
+
},
|
|
13
|
+
async readFile(path) {
|
|
14
|
+
return readFile(path, "utf8");
|
|
15
|
+
},
|
|
16
|
+
async writeFile(path, data) {
|
|
17
|
+
await writeFile(path, data, { encoding: "utf8", mode: 0o600 });
|
|
18
|
+
},
|
|
19
|
+
async rm(path) {
|
|
20
|
+
await rm(path, { force: true });
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function defaultSpawnProcess(command, args, logPath, env) {
|
|
25
|
+
const fd = openSync(logPath, "a");
|
|
26
|
+
const child = spawn(command, args, {
|
|
27
|
+
detached: true,
|
|
28
|
+
stdio: ["ignore", fd, fd],
|
|
29
|
+
env
|
|
30
|
+
});
|
|
31
|
+
closeSync(fd);
|
|
32
|
+
if (!child.pid) {
|
|
33
|
+
throw new Error("Failed to start background process");
|
|
34
|
+
}
|
|
35
|
+
child.unref();
|
|
36
|
+
return child.pid;
|
|
37
|
+
}
|
|
38
|
+
function defaultIsProcessAlive(pid) {
|
|
39
|
+
try {
|
|
40
|
+
process.kill(pid, 0);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async function sleep(ms) {
|
|
48
|
+
await new Promise((resolvePromise) => setTimeout(resolvePromise, ms));
|
|
49
|
+
}
|
|
50
|
+
function parsePid(raw) {
|
|
51
|
+
const trimmed = raw.trim();
|
|
52
|
+
if (!trimmed) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const value = Number.parseInt(trimmed, 10);
|
|
56
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
function parsePort(raw) {
|
|
62
|
+
const trimmed = raw.trim();
|
|
63
|
+
if (!trimmed) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
const value = Number.parseInt(trimmed, 10);
|
|
67
|
+
if (!Number.isInteger(value) || value <= 0 || value > 65535) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
async function readPid(fileOps, pidPath) {
|
|
73
|
+
try {
|
|
74
|
+
const raw = await fileOps.readFile(pidPath);
|
|
75
|
+
return parsePid(raw);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function readPort(fileOps, portPath) {
|
|
82
|
+
try {
|
|
83
|
+
const raw = await fileOps.readFile(portPath);
|
|
84
|
+
return parsePort(raw);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function isPortAvailable(host, port) {
|
|
91
|
+
return new Promise((resolvePromise) => {
|
|
92
|
+
const server = net.createServer();
|
|
93
|
+
server.once("error", () => resolvePromise(false));
|
|
94
|
+
server.listen(port, host, () => {
|
|
95
|
+
server.close(() => resolvePromise(true));
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
async function findEphemeralPort(host) {
|
|
100
|
+
return new Promise((resolvePromise, reject) => {
|
|
101
|
+
const server = net.createServer();
|
|
102
|
+
server.once("error", (error) => reject(error));
|
|
103
|
+
server.listen(0, host, () => {
|
|
104
|
+
const address = server.address();
|
|
105
|
+
if (!address || typeof address === "string") {
|
|
106
|
+
server.close(() => reject(new Error("Failed to allocate ephemeral port")));
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const port = address.port;
|
|
110
|
+
server.close(() => resolvePromise(port));
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async function resolveAvailablePortDefault(host, preferredPort) {
|
|
115
|
+
if (await isPortAvailable(host, preferredPort)) {
|
|
116
|
+
return preferredPort;
|
|
117
|
+
}
|
|
118
|
+
return findEphemeralPort(host);
|
|
119
|
+
}
|
|
120
|
+
async function isHealthyWithTimeout(fetchFn, url) {
|
|
121
|
+
try {
|
|
122
|
+
const response = await fetchFn(`${url}/health`, {
|
|
123
|
+
signal: AbortSignal.timeout(1_000)
|
|
124
|
+
});
|
|
125
|
+
return response.ok;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export function createBackgroundServiceManager(deps = {}) {
|
|
132
|
+
const fileOps = deps.fileOps ?? defaultFileOps();
|
|
133
|
+
const readEnv = deps.loadEnv ?? loadEnv;
|
|
134
|
+
const execPath = deps.execPath ?? process.execPath;
|
|
135
|
+
const entryPath = resolve(deps.entryPath ?? process.argv[1] ?? "");
|
|
136
|
+
const stateDir = deps.stateDir ?? join(homedir(), ".geminimock");
|
|
137
|
+
const runtimeEnv = deps.env ?? process.env;
|
|
138
|
+
const spawnProcess = deps.spawnProcess ?? defaultSpawnProcess;
|
|
139
|
+
const isProcessAlive = deps.isProcessAlive ?? defaultIsProcessAlive;
|
|
140
|
+
const killProcess = deps.killProcess ?? process.kill;
|
|
141
|
+
const fetchFn = deps.fetchFn ?? fetch;
|
|
142
|
+
const wait = deps.wait ?? sleep;
|
|
143
|
+
const resolveAvailablePort = deps.resolveAvailablePort ?? resolveAvailablePortDefault;
|
|
144
|
+
const env = readEnv();
|
|
145
|
+
const host = env.host;
|
|
146
|
+
const defaultPort = env.port;
|
|
147
|
+
const pidPath = join(stateDir, "server.pid");
|
|
148
|
+
const portPath = join(stateDir, "server.port");
|
|
149
|
+
const logPath = join(stateDir, "server.log");
|
|
150
|
+
function buildUrl(port) {
|
|
151
|
+
return `http://${host}:${port}`;
|
|
152
|
+
}
|
|
153
|
+
async function waitUntilHealthy(pid, url) {
|
|
154
|
+
const deadline = Date.now() + 15_000;
|
|
155
|
+
while (Date.now() < deadline) {
|
|
156
|
+
if (!isProcessAlive(pid)) {
|
|
157
|
+
throw new Error(`Background server exited during startup. Check log: ${logPath}`);
|
|
158
|
+
}
|
|
159
|
+
const healthy = await isHealthyWithTimeout(fetchFn, url);
|
|
160
|
+
if (healthy) {
|
|
161
|
+
if (!isProcessAlive(pid)) {
|
|
162
|
+
throw new Error(`Port is already in use by another process. Check log: ${logPath}`);
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
await wait(300);
|
|
167
|
+
}
|
|
168
|
+
throw new Error(`Background server did not become healthy in time. Check log: ${logPath}`);
|
|
169
|
+
}
|
|
170
|
+
async function isHealthyEndpointAvailable(url) {
|
|
171
|
+
return isHealthyWithTimeout(fetchFn, url);
|
|
172
|
+
}
|
|
173
|
+
async function start() {
|
|
174
|
+
await fileOps.mkdir(stateDir);
|
|
175
|
+
const existingPid = await readPid(fileOps, pidPath);
|
|
176
|
+
const storedPort = await readPort(fileOps, portPath);
|
|
177
|
+
const activePort = storedPort ?? defaultPort;
|
|
178
|
+
const activeUrl = buildUrl(activePort);
|
|
179
|
+
if (existingPid && isProcessAlive(existingPid)) {
|
|
180
|
+
return {
|
|
181
|
+
alreadyRunning: true,
|
|
182
|
+
pid: existingPid,
|
|
183
|
+
port: activePort,
|
|
184
|
+
url: activeUrl,
|
|
185
|
+
logPath
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
if (existingPid) {
|
|
189
|
+
await fileOps.rm(pidPath);
|
|
190
|
+
}
|
|
191
|
+
if (await isHealthyEndpointAvailable(activeUrl)) {
|
|
192
|
+
return {
|
|
193
|
+
alreadyRunning: true,
|
|
194
|
+
port: activePort,
|
|
195
|
+
url: activeUrl,
|
|
196
|
+
logPath
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const selectedPort = await resolveAvailablePort(host, defaultPort);
|
|
200
|
+
const selectedUrl = buildUrl(selectedPort);
|
|
201
|
+
const childEnv = {
|
|
202
|
+
...runtimeEnv,
|
|
203
|
+
GEMINI_CLI_API_HOST: host,
|
|
204
|
+
GEMINI_CLI_API_PORT: String(selectedPort)
|
|
205
|
+
};
|
|
206
|
+
const pid = spawnProcess(execPath, [entryPath, "serve"], logPath, childEnv);
|
|
207
|
+
await fileOps.writeFile(pidPath, `${pid}\n`);
|
|
208
|
+
await fileOps.writeFile(portPath, `${selectedPort}\n`);
|
|
209
|
+
try {
|
|
210
|
+
await waitUntilHealthy(pid, selectedUrl);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
if (isProcessAlive(pid)) {
|
|
214
|
+
try {
|
|
215
|
+
killProcess(pid, "SIGTERM");
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
await fileOps.rm(pidPath);
|
|
221
|
+
await fileOps.rm(portPath);
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
alreadyRunning: false,
|
|
226
|
+
pid,
|
|
227
|
+
port: selectedPort,
|
|
228
|
+
url: selectedUrl,
|
|
229
|
+
logPath
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
async function stop() {
|
|
233
|
+
const pid = await readPid(fileOps, pidPath);
|
|
234
|
+
const storedPort = await readPort(fileOps, portPath);
|
|
235
|
+
const activePort = storedPort ?? defaultPort;
|
|
236
|
+
const activeUrl = buildUrl(activePort);
|
|
237
|
+
if (!pid) {
|
|
238
|
+
if (await isHealthyEndpointAvailable(activeUrl)) {
|
|
239
|
+
return { stopped: false, unmanagedRunning: true };
|
|
240
|
+
}
|
|
241
|
+
return { stopped: false };
|
|
242
|
+
}
|
|
243
|
+
if (!isProcessAlive(pid)) {
|
|
244
|
+
await fileOps.rm(pidPath);
|
|
245
|
+
await fileOps.rm(portPath);
|
|
246
|
+
if (await isHealthyEndpointAvailable(activeUrl)) {
|
|
247
|
+
return { stopped: false, pid, unmanagedRunning: true };
|
|
248
|
+
}
|
|
249
|
+
return { stopped: false, pid };
|
|
250
|
+
}
|
|
251
|
+
try {
|
|
252
|
+
killProcess(pid, "SIGTERM");
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
}
|
|
256
|
+
for (let i = 0; i < 20; i += 1) {
|
|
257
|
+
if (!isProcessAlive(pid)) {
|
|
258
|
+
await fileOps.rm(pidPath);
|
|
259
|
+
await fileOps.rm(portPath);
|
|
260
|
+
return { stopped: true, pid };
|
|
261
|
+
}
|
|
262
|
+
await wait(200);
|
|
263
|
+
}
|
|
264
|
+
try {
|
|
265
|
+
killProcess(pid, "SIGKILL");
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
}
|
|
269
|
+
for (let i = 0; i < 10; i += 1) {
|
|
270
|
+
if (!isProcessAlive(pid)) {
|
|
271
|
+
await fileOps.rm(pidPath);
|
|
272
|
+
await fileOps.rm(portPath);
|
|
273
|
+
return { stopped: true, pid };
|
|
274
|
+
}
|
|
275
|
+
await wait(200);
|
|
276
|
+
}
|
|
277
|
+
throw new Error(`Failed to stop background server process ${pid}`);
|
|
278
|
+
}
|
|
279
|
+
async function status() {
|
|
280
|
+
const pid = await readPid(fileOps, pidPath);
|
|
281
|
+
const storedPort = await readPort(fileOps, portPath);
|
|
282
|
+
const activePort = storedPort ?? defaultPort;
|
|
283
|
+
const activeUrl = buildUrl(activePort);
|
|
284
|
+
if (!pid) {
|
|
285
|
+
if (await isHealthyEndpointAvailable(activeUrl)) {
|
|
286
|
+
return {
|
|
287
|
+
running: true,
|
|
288
|
+
port: activePort,
|
|
289
|
+
url: activeUrl,
|
|
290
|
+
logPath
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
running: false,
|
|
295
|
+
port: activePort,
|
|
296
|
+
url: activeUrl,
|
|
297
|
+
logPath
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
if (!isProcessAlive(pid)) {
|
|
301
|
+
await fileOps.rm(pidPath);
|
|
302
|
+
await fileOps.rm(portPath);
|
|
303
|
+
if (await isHealthyEndpointAvailable(activeUrl)) {
|
|
304
|
+
return {
|
|
305
|
+
running: true,
|
|
306
|
+
port: activePort,
|
|
307
|
+
url: activeUrl,
|
|
308
|
+
logPath
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
return {
|
|
312
|
+
running: false,
|
|
313
|
+
port: activePort,
|
|
314
|
+
url: activeUrl,
|
|
315
|
+
logPath
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
running: true,
|
|
320
|
+
pid,
|
|
321
|
+
port: activePort,
|
|
322
|
+
url: activeUrl,
|
|
323
|
+
logPath
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
return {
|
|
327
|
+
start,
|
|
328
|
+
stop,
|
|
329
|
+
status
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=background-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-service.js","sourceRoot":"","sources":["../../src/server/background-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "geminimock",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"geminimock": "dist/cli.js"
|
|
@@ -16,8 +16,13 @@
|
|
|
16
16
|
"scripts": {
|
|
17
17
|
"dev": "bun --watch src/cli.ts serve",
|
|
18
18
|
"start": "bun src/cli.ts serve",
|
|
19
|
+
"server:start": "bun src/cli.ts server start",
|
|
20
|
+
"server:stop": "bun src/cli.ts server stop",
|
|
21
|
+
"server:status": "bun src/cli.ts server status",
|
|
19
22
|
"auth:login": "bun src/cli.ts auth login",
|
|
20
23
|
"auth:logout": "bun src/cli.ts auth logout",
|
|
24
|
+
"auth:logout:all": "bun src/cli.ts auth logout --all",
|
|
25
|
+
"auth:accounts:list": "bun src/cli.ts auth accounts list",
|
|
21
26
|
"models:list": "bun src/cli.ts models list",
|
|
22
27
|
"self:update": "bun src/cli.ts update",
|
|
23
28
|
"test": "vitest run",
|