@tickernelz/paperclip-pro-adapter-gemini-local 2026.925.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.
Files changed (86) hide show
  1. package/LICENSE +22 -0
  2. package/dist/cli/format-event.d.ts +2 -0
  3. package/dist/cli/format-event.d.ts.map +1 -0
  4. package/dist/cli/format-event.js +223 -0
  5. package/dist/cli/format-event.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +63 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/server/acp.d.ts +19 -0
  15. package/dist/server/acp.d.ts.map +1 -0
  16. package/dist/server/acp.js +404 -0
  17. package/dist/server/acp.js.map +1 -0
  18. package/dist/server/acp.test.d.ts +2 -0
  19. package/dist/server/acp.test.d.ts.map +1 -0
  20. package/dist/server/acp.test.js +662 -0
  21. package/dist/server/acp.test.js.map +1 -0
  22. package/dist/server/config-schema.d.ts +3 -0
  23. package/dist/server/config-schema.d.ts.map +1 -0
  24. package/dist/server/config-schema.js +67 -0
  25. package/dist/server/config-schema.js.map +1 -0
  26. package/dist/server/engine-availability.test.d.ts +2 -0
  27. package/dist/server/engine-availability.test.d.ts.map +1 -0
  28. package/dist/server/engine-availability.test.js +41 -0
  29. package/dist/server/engine-availability.test.js.map +1 -0
  30. package/dist/server/execute.acp-fallback.test.d.ts +2 -0
  31. package/dist/server/execute.acp-fallback.test.d.ts.map +1 -0
  32. package/dist/server/execute.acp-fallback.test.js +130 -0
  33. package/dist/server/execute.acp-fallback.test.js.map +1 -0
  34. package/dist/server/execute.d.ts +3 -0
  35. package/dist/server/execute.d.ts.map +1 -0
  36. package/dist/server/execute.js +625 -0
  37. package/dist/server/execute.js.map +1 -0
  38. package/dist/server/execute.remote.test.d.ts +2 -0
  39. package/dist/server/execute.remote.test.d.ts.map +1 -0
  40. package/dist/server/execute.remote.test.js +377 -0
  41. package/dist/server/execute.remote.test.js.map +1 -0
  42. package/dist/server/index.d.ts +9 -0
  43. package/dist/server/index.d.ts.map +1 -0
  44. package/dist/server/index.js +67 -0
  45. package/dist/server/index.js.map +1 -0
  46. package/dist/server/parse.d.ts +39 -0
  47. package/dist/server/parse.d.ts.map +1 -0
  48. package/dist/server/parse.js +268 -0
  49. package/dist/server/parse.js.map +1 -0
  50. package/dist/server/parse.test.d.ts +2 -0
  51. package/dist/server/parse.test.d.ts.map +1 -0
  52. package/dist/server/parse.test.js +166 -0
  53. package/dist/server/parse.test.js.map +1 -0
  54. package/dist/server/skills.d.ts +8 -0
  55. package/dist/server/skills.d.ts.map +1 -0
  56. package/dist/server/skills.js +69 -0
  57. package/dist/server/skills.js.map +1 -0
  58. package/dist/server/test.d.ts +3 -0
  59. package/dist/server/test.d.ts.map +1 -0
  60. package/dist/server/test.js +270 -0
  61. package/dist/server/test.js.map +1 -0
  62. package/dist/server/utils.d.ts +2 -0
  63. package/dist/server/utils.d.ts.map +1 -0
  64. package/dist/server/utils.js +7 -0
  65. package/dist/server/utils.js.map +1 -0
  66. package/dist/ui/build-config.d.ts +3 -0
  67. package/dist/ui/build-config.d.ts.map +1 -0
  68. package/dist/ui/build-config.js +39 -0
  69. package/dist/ui/build-config.js.map +1 -0
  70. package/dist/ui/build-config.test.d.ts +2 -0
  71. package/dist/ui/build-config.test.d.ts.map +1 -0
  72. package/dist/ui/build-config.test.js +63 -0
  73. package/dist/ui/build-config.test.js.map +1 -0
  74. package/dist/ui/index.d.ts +3 -0
  75. package/dist/ui/index.d.ts.map +1 -0
  76. package/dist/ui/index.js +3 -0
  77. package/dist/ui/index.js.map +1 -0
  78. package/dist/ui/parse-stdout.d.ts +3 -0
  79. package/dist/ui/parse-stdout.d.ts.map +1 -0
  80. package/dist/ui/parse-stdout.js +265 -0
  81. package/dist/ui/parse-stdout.js.map +1 -0
  82. package/dist/ui/parse-stdout.test.d.ts +2 -0
  83. package/dist/ui/parse-stdout.test.d.ts.map +1 -0
  84. package/dist/ui/parse-stdout.test.js +73 -0
  85. package/dist/ui/parse-stdout.test.js.map +1 -0
  86. package/package.json +58 -0
@@ -0,0 +1,404 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { ensureAdapterExecutionTargetCommandResolvable, readAdapterExecutionTarget, resolveAdapterExecutionTargetCwd, runAdapterExecutionTargetShellCommand, } from "@tickernelz/paperclip-pro-adapter-utils/execution-target";
6
+ import { DEFAULT_ACP_ENGINE_MODE, DEFAULT_ACP_ENGINE_NON_INTERACTIVE_PERMISSIONS, DEFAULT_ACP_ENGINE_PERMISSION_MODE, DEFAULT_ACP_ENGINE_WARM_HANDLE_IDLE_MS, } from "@tickernelz/paperclip-pro-adapter-utils/acpx-engine/constants";
7
+ import { asNumber, asString, parseObject, } from "@tickernelz/paperclip-pro-adapter-utils/server-utils";
8
+ import { createWorkspaceRestoreTeardown } from "@tickernelz/paperclip-pro-adapter-utils/workspace-restore-teardown";
9
+ import { DEFAULT_GEMINI_LOCAL_MODEL } from "../index.js";
10
+ const moduleDir = path.dirname(fileURLToPath(import.meta.url));
11
+ const packageRootDir = path.resolve(moduleDir, "../..");
12
+ const MIN_ACP_NODE_VERSION = "24.11.0";
13
+ function normalizeEngine(value) {
14
+ const raw = typeof value === "string" ? value.trim().toLowerCase() : "";
15
+ if (raw === "acp")
16
+ return { engine: "acp", explicit: true };
17
+ if (raw === "cli")
18
+ return { engine: "cli", explicit: true };
19
+ return { engine: "acp", explicit: false };
20
+ }
21
+ export function resolveGeminiExecutionEngine(config) {
22
+ return normalizeEngine(config.engine);
23
+ }
24
+ export async function resolveGeminiExecutionEngineForRun(input) {
25
+ const selection = normalizeEngine(input.config.engine);
26
+ // Engine availability must never change the agent's execution or permission contract.
27
+ if (selection.engine === "cli")
28
+ return selection;
29
+ const unavailable = (reason) => ({
30
+ ...selection,
31
+ unavailableReason: `${reason} Repair the ACP setup, or explicitly set engine=cli to use the CLI engine.`,
32
+ });
33
+ const reason = await geminiAcpUnavailableReason(input);
34
+ return reason ? unavailable(reason) : selection;
35
+ }
36
+ function firstNonEmptyString(...values) {
37
+ for (const value of values) {
38
+ if (typeof value !== "string")
39
+ continue;
40
+ const trimmed = value.trim();
41
+ if (trimmed.length > 0)
42
+ return trimmed;
43
+ }
44
+ return undefined;
45
+ }
46
+ export function buildGeminiAcpConfig(config) {
47
+ const configuredAgentCommand = firstNonEmptyString(config.agentCommand, config.acpAgentCommand);
48
+ const configuredGeminiCommand = firstNonEmptyString(config.command);
49
+ const agentCommand = configuredAgentCommand ?? (configuredGeminiCommand ? `${configuredGeminiCommand} --acp` : undefined);
50
+ const stateDir = firstNonEmptyString(config.stateDir, config.acpStateDir);
51
+ const mode = firstNonEmptyString(config.mode, config.acpMode) ?? DEFAULT_ACP_ENGINE_MODE;
52
+ const permissionMode = firstNonEmptyString(config.permissionMode, config.acpPermissionMode) ??
53
+ DEFAULT_ACP_ENGINE_PERMISSION_MODE;
54
+ const nonInteractivePermissions = firstNonEmptyString(config.nonInteractivePermissions, config.acpNonInteractivePermissions) ??
55
+ DEFAULT_ACP_ENGINE_NON_INTERACTIVE_PERMISSIONS;
56
+ const warmHandleIdleMs = config.warmHandleIdleMs ??
57
+ config.acpWarmHandleIdleMs ??
58
+ DEFAULT_ACP_ENGINE_WARM_HANDLE_IDLE_MS;
59
+ const next = {
60
+ ...config,
61
+ agent: "gemini",
62
+ mode,
63
+ permissionMode,
64
+ nonInteractivePermissions,
65
+ warmHandleIdleMs,
66
+ ...(agentCommand ? { agentCommand } : {}),
67
+ ...(stateDir ? { stateDir } : {}),
68
+ };
69
+ const model = asString(next.model, "").trim();
70
+ if (!model || model === DEFAULT_GEMINI_LOCAL_MODEL)
71
+ delete next.model;
72
+ return next;
73
+ }
74
+ /**
75
+ * Host skills dir the shared engine materializes this run's Gemini skills into.
76
+ * Derived here — inside the adapter boundary — from the same generic `config`
77
+ * the engine reads (`config.env.HOME` else the process home), so the remote seam
78
+ * ships exactly the dir the engine's `prepareGeminiSkillRuntime` prepared without
79
+ * the engine having to hand a Gemini-specific path across the seam.
80
+ */
81
+ function resolveGeminiSkillsHome(config) {
82
+ const envConfig = parseObject(config.env);
83
+ const configuredHome = typeof envConfig.HOME === "string" && envConfig.HOME.trim().length > 0
84
+ ? path.resolve(envConfig.HOME.trim())
85
+ : os.homedir();
86
+ return path.join(configuredHome, ".gemini", "skills");
87
+ }
88
+ /**
89
+ * Gemini remote managed-home seed for the runner-backed remote sandbox ACP lane.
90
+ * Mirrors the Gemini CLI lane (`gemini-local/execute.ts`): set `HOME` to the
91
+ * managed runtime root, ship the prepared skills dir as the `skills` asset,
92
+ * `cp -a` it into `$HOME/.gemini/skills` in-sandbox, and — only when an API key
93
+ * is present — pre-select the api-key auth in `$HOME/.gemini/settings.json`
94
+ * (Gemini refuses headless runs without a persisted auth selection).
95
+ *
96
+ * The seed never writes key bytes: the key is only read as a boolean signal to
97
+ * decide whether to persist the auth-method selector. Gemini has no credential
98
+ * copy-back. The teardown hook therefore only syncs the sandbox workspace back to
99
+ * the host; it does not touch credentials.
100
+ */
101
+ async function prepareGeminiRemoteManagedHome(input) {
102
+ const { env, runId, onLog, executionTarget } = input;
103
+ // Fail-open workspace sync-back for every exit path (mirrors the Gemini CLI
104
+ // lane's restore-hook finally and the Codex ACP seam's teardown). Gemini has no
105
+ // credential copy-back, so the teardown only syncs the sandbox workspace back to
106
+ // the host. A restore miss is logged and never fails the run.
107
+ const registerWorkspaceSyncBack = (stagedRuntime) => createWorkspaceRestoreTeardown({
108
+ stagedRuntime,
109
+ onLog,
110
+ startMessage: "[paperclip] Restoring workspace changes from the sandbox.\n",
111
+ failurePrefix: "[paperclip] Gemini ACP teardown workspace restore failed",
112
+ });
113
+ const geminiSkillsHome = resolveGeminiSkillsHome(input.config);
114
+ const stagedRuntime = await input.stage(geminiSkillsHome
115
+ ? [{ key: "skills", localDir: geminiSkillsHome, followSymlinks: true }]
116
+ : []);
117
+ // Managed HOME = the per-run runtime root. `useRemoteProcessSession` already
118
+ // guarantees a sandbox (managed-home) target, so the runtime root replaces the
119
+ // image home for this run.
120
+ const managedRemoteHomeDir = stagedRuntime.runtimeRootDir;
121
+ if (!managedRemoteHomeDir) {
122
+ // No runtime root resolved — leave HOME as-is (host fallback) and skip the
123
+ // in-sandbox seed; nothing to remap onto. The workspace still staged, so the
124
+ // sync-back teardown still applies.
125
+ return { stagedRuntime, teardown: registerWorkspaceSyncBack(stagedRuntime) };
126
+ }
127
+ env.HOME = managedRemoteHomeDir;
128
+ const shellOptions = {
129
+ cwd: stagedRuntime.workspaceRemoteDir ?? input.workspaceLocalDir,
130
+ env,
131
+ timeoutSec: Math.max(input.timeoutSec, 15),
132
+ graceSec: 20,
133
+ onLog,
134
+ };
135
+ // Copy the shipped skills into $HOME/.gemini/skills so the CLI finds them under
136
+ // the managed home.
137
+ const remoteSkillsAssetDir = stagedRuntime.assetDirs.skills;
138
+ if (remoteSkillsAssetDir) {
139
+ const remoteSkillsDir = path.posix.join(managedRemoteHomeDir, ".gemini", "skills");
140
+ await runAdapterExecutionTargetShellCommand(runId, executionTarget, `mkdir -p ${JSON.stringify(path.posix.dirname(remoteSkillsDir))} && rm -rf ${JSON.stringify(remoteSkillsDir)} && cp -a ${JSON.stringify(remoteSkillsAssetDir)} ${JSON.stringify(remoteSkillsDir)}`, shellOptions);
141
+ }
142
+ // Pre-select api-key auth (file-only; no key bytes) so headless Gemini does not
143
+ // fail with "Invalid auth method selected". Only the credential's PRESENCE is
144
+ // used as a signal — no key bytes are written to settings.json.
145
+ //
146
+ // The presence check reads ONLY the resolved run `env` — the credential state
147
+ // this seam actually provisions into the sandbox (adapter-config env + resolved
148
+ // secret refs, repointed onto the in-sandbox HOME). A key that exists only in
149
+ // the host `process.env` is NOT a reliable signal: the remote sandbox does not
150
+ // inherit the host environment, so persisting a `gemini-api-key` selector off a
151
+ // host-only key would start headless Gemini with an auth method whose credential
152
+ // is unavailable in-sandbox and fail authentication. We therefore select api-key
153
+ // auth only when the key is present in the run env that reaches the sandbox. An
154
+ // existing settings.json (user-shipped via workspace) is left untouched.
155
+ const hasGeminiApiKey = Boolean(env.GEMINI_API_KEY || env.GOOGLE_API_KEY);
156
+ if (hasGeminiApiKey) {
157
+ const remoteSettingsPath = path.posix.join(managedRemoteHomeDir, ".gemini", "settings.json");
158
+ const authSettingsJson = JSON.stringify({
159
+ selectedAuthType: "gemini-api-key",
160
+ security: { auth: { selectedType: "gemini-api-key" } },
161
+ });
162
+ await runAdapterExecutionTargetShellCommand(runId, executionTarget, `mkdir -p ${JSON.stringify(path.posix.dirname(remoteSettingsPath))} && { [ -f ${JSON.stringify(remoteSettingsPath)} ] || printf '%s' ${JSON.stringify(authSettingsJson)} > ${JSON.stringify(remoteSettingsPath)}; }`, shellOptions);
163
+ }
164
+ return { stagedRuntime, teardown: registerWorkspaceSyncBack(stagedRuntime) };
165
+ }
166
+ function withGeminiAcpDefaults(options) {
167
+ return {
168
+ prepareRemoteManagedHome: prepareGeminiRemoteManagedHome,
169
+ ...options,
170
+ adapterType: "gemini_local",
171
+ moduleDir,
172
+ packageRootDir,
173
+ };
174
+ }
175
+ export function createGeminiAcpExecutor(options = {}) {
176
+ let executor = null;
177
+ return async (ctx) => {
178
+ let currentExecutor = executor;
179
+ if (!currentExecutor) {
180
+ const { createAcpxEngineExecutor } = await import("@tickernelz/paperclip-pro-adapter-utils/acpx-engine/execute");
181
+ currentExecutor = createAcpxEngineExecutor(withGeminiAcpDefaults(options));
182
+ executor = currentExecutor;
183
+ }
184
+ return currentExecutor({
185
+ ...ctx,
186
+ config: buildGeminiAcpConfig(ctx.config),
187
+ });
188
+ };
189
+ }
190
+ function parseVersion(version) {
191
+ const match = version.match(/^v?(\d+)\.(\d+)\.(\d+)/);
192
+ if (!match)
193
+ return [0, 0, 0];
194
+ return [Number(match[1]), Number(match[2]), Number(match[3])];
195
+ }
196
+ export function nodeVersionMeetsGeminiAcpMinimum(version = process.version) {
197
+ const [major, minor, patch] = parseVersion(version);
198
+ const [minMajor, minMinor, minPatch] = parseVersion(MIN_ACP_NODE_VERSION);
199
+ if (major !== minMajor)
200
+ return major > minMajor;
201
+ if (minor !== minMinor)
202
+ return minor > minMinor;
203
+ return patch >= minPatch;
204
+ }
205
+ async function pathExists(candidate) {
206
+ return fs.access(candidate).then(() => true).catch(() => false);
207
+ }
208
+ function hasPathSeparator(command) {
209
+ return command.includes("/") || command.includes("\\");
210
+ }
211
+ function firstShellToken(command) {
212
+ const trimmed = command.trim();
213
+ if (!trimmed)
214
+ return null;
215
+ if (trimmed.startsWith("'") || trimmed.startsWith("\""))
216
+ return null;
217
+ return trimmed.split(/\s+/, 1)[0] ?? null;
218
+ }
219
+ async function findCommandOnPath(binName, pathValue = process.env.PATH ?? "") {
220
+ for (const segment of pathValue.split(path.delimiter)) {
221
+ if (!segment)
222
+ continue;
223
+ const candidate = path.join(segment, binName);
224
+ if (await pathExists(candidate))
225
+ return candidate;
226
+ }
227
+ return null;
228
+ }
229
+ function resolveConfigPath(config) {
230
+ const envConfig = parseObject(config.env);
231
+ return typeof envConfig.PATH === "string" && envConfig.PATH.trim().length > 0
232
+ ? envConfig.PATH
233
+ : process.env.PATH ?? "";
234
+ }
235
+ async function commandIsResolvable(command, pathValue = process.env.PATH ?? "", input) {
236
+ const token = firstShellToken(command);
237
+ if (!token)
238
+ return true;
239
+ const target = readAdapterExecutionTarget({
240
+ executionTarget: input?.executionTarget,
241
+ legacyRemoteExecution: input?.executionTransport?.remoteExecution,
242
+ });
243
+ if (target?.kind === "remote") {
244
+ try {
245
+ await ensureAdapterExecutionTargetCommandResolvable(token, target, resolveAdapterExecutionTargetCwd(target, asString(input?.config.cwd, ""), process.cwd()), process.env);
246
+ return true;
247
+ }
248
+ catch {
249
+ return false;
250
+ }
251
+ }
252
+ if (path.isAbsolute(token) || hasPathSeparator(token))
253
+ return pathExists(token);
254
+ return (await findCommandOnPath(token, pathValue)) !== null;
255
+ }
256
+ function resolveGeminiAcpCommand(config) {
257
+ const configured = firstNonEmptyString(config.agentCommand, config.acpAgentCommand);
258
+ if (configured)
259
+ return configured;
260
+ const geminiCommand = firstNonEmptyString(config.command) ?? "gemini";
261
+ return `${geminiCommand} --acp`;
262
+ }
263
+ function sandboxTargetHasProcessSessionBridge(target) {
264
+ return target?.kind === "remote" && target.transport === "sandbox" && Boolean(target.runner);
265
+ }
266
+ async function geminiAcpUnavailableReason(input) {
267
+ const target = readAdapterExecutionTarget({
268
+ executionTarget: input.executionTarget,
269
+ legacyRemoteExecution: input.executionTransport?.remoteExecution,
270
+ });
271
+ if (target?.kind === "remote" && !sandboxTargetHasProcessSessionBridge(target)) {
272
+ if (target.transport === "sandbox") {
273
+ return "Gemini ACP requires a bidirectional remote process target; this sandbox exposes only one-shot command execution.";
274
+ }
275
+ return "Gemini ACP supports sandbox remote targets only; this run targets a non-sandbox remote environment.";
276
+ }
277
+ if (!nodeVersionMeetsGeminiAcpMinimum()) {
278
+ return `Node ${process.version} (${process.execPath}) does not satisfy Gemini ACP's Node >=${MIN_ACP_NODE_VERSION} prerequisite.`;
279
+ }
280
+ const command = resolveGeminiAcpCommand(input.config);
281
+ if (!(await commandIsResolvable(command, resolveConfigPath(input.config), input))) {
282
+ return `Gemini ACP command is not available: ${command}.`;
283
+ }
284
+ return null;
285
+ }
286
+ function summarizeStatus(checks) {
287
+ if (checks.some((check) => check.level === "error"))
288
+ return "fail";
289
+ if (checks.some((check) => check.level === "warn"))
290
+ return "warn";
291
+ return "pass";
292
+ }
293
+ function isNonEmpty(value) {
294
+ return typeof value === "string" && value.trim().length > 0;
295
+ }
296
+ export async function testGeminiAcpEnvironment(ctx) {
297
+ const checks = [];
298
+ const config = parseObject(ctx.config);
299
+ const target = ctx.executionTarget ?? null;
300
+ const targetIsRemote = target?.kind === "remote";
301
+ checks.push({
302
+ code: "gemini_engine_selected",
303
+ level: "info",
304
+ message: "Execution engine selected: ACP.",
305
+ hint: "Set engine=cli to use the existing Gemini CLI lane.",
306
+ });
307
+ if (targetIsRemote) {
308
+ checks.push({
309
+ code: "gemini_acp_remote_target",
310
+ level: "info",
311
+ message: "Gemini ACP will run against the remote execution environment.",
312
+ hint: "Remote ACP requires a bidirectional process target such as SSH or Paperclip's sandbox process-session bridge.",
313
+ });
314
+ }
315
+ const cwd = asString(config.cwd, process.cwd());
316
+ try {
317
+ await fs.mkdir(cwd, { recursive: true });
318
+ checks.push({
319
+ code: "gemini_acp_cwd_valid",
320
+ level: "info",
321
+ message: `Working directory is valid: ${cwd}`,
322
+ });
323
+ }
324
+ catch (err) {
325
+ checks.push({
326
+ code: "gemini_acp_cwd_invalid",
327
+ level: "error",
328
+ message: err instanceof Error ? err.message : "Invalid working directory",
329
+ detail: cwd,
330
+ });
331
+ }
332
+ checks.push({
333
+ code: nodeVersionMeetsGeminiAcpMinimum() ? "gemini_acp_node_supported" : "gemini_acp_node_unsupported",
334
+ level: nodeVersionMeetsGeminiAcpMinimum() ? "info" : "error",
335
+ message: nodeVersionMeetsGeminiAcpMinimum()
336
+ ? `Node ${process.version} satisfies ACP runtime requirements.`
337
+ : `Node ${process.version} (${process.execPath}) does not satisfy ACP runtime requirements.`,
338
+ hint: nodeVersionMeetsGeminiAcpMinimum()
339
+ ? undefined
340
+ : `Run Gemini ACP with Node >=${MIN_ACP_NODE_VERSION} or switch engine=cli.`,
341
+ });
342
+ const command = resolveGeminiAcpCommand(config);
343
+ const commandResolvable = await commandIsResolvable(command, resolveConfigPath(config), {
344
+ config,
345
+ executionTarget: ctx.executionTarget,
346
+ });
347
+ checks.push({
348
+ code: commandResolvable ? "gemini_acp_command_resolvable" : "gemini_acp_command_missing",
349
+ level: commandResolvable ? "info" : "error",
350
+ message: commandResolvable
351
+ ? `Gemini ACP command is executable: ${command}`
352
+ : `Gemini ACP command is not available: ${command}`,
353
+ hint: commandResolvable
354
+ ? undefined
355
+ : "Install the Gemini CLI with ACP support, or set agentCommand to a valid Gemini ACP server command.",
356
+ });
357
+ const envConfig = parseObject(config.env);
358
+ const considerHostEnv = !targetIsRemote;
359
+ const hasGca = envConfig.GOOGLE_GENAI_USE_GCA === "true" || (considerHostEnv && process.env.GOOGLE_GENAI_USE_GCA === "true");
360
+ const configGeminiApiKey = envConfig.GEMINI_API_KEY;
361
+ const hostGeminiApiKey = considerHostEnv ? process.env.GEMINI_API_KEY : undefined;
362
+ const configGoogleApiKey = envConfig.GOOGLE_API_KEY;
363
+ const hostGoogleApiKey = considerHostEnv ? process.env.GOOGLE_API_KEY : undefined;
364
+ if (isNonEmpty(configGeminiApiKey) ||
365
+ isNonEmpty(hostGeminiApiKey) ||
366
+ isNonEmpty(configGoogleApiKey) ||
367
+ isNonEmpty(hostGoogleApiKey) ||
368
+ hasGca) {
369
+ const source = hasGca
370
+ ? "Google account login (GCA)"
371
+ : isNonEmpty(configGeminiApiKey) || isNonEmpty(configGoogleApiKey)
372
+ ? "adapter config env"
373
+ : "server environment";
374
+ checks.push({
375
+ code: "gemini_acp_credentials_detected",
376
+ level: "info",
377
+ message: "Gemini credentials are set for ACP authentication.",
378
+ detail: `Detected in ${source}.`,
379
+ });
380
+ }
381
+ else if (!targetIsRemote) {
382
+ checks.push({
383
+ code: "gemini_acp_credentials_not_detected",
384
+ level: "warn",
385
+ message: "No Gemini ACP credentials were detected.",
386
+ hint: "Set GEMINI_API_KEY / GOOGLE_API_KEY, enable Google account auth, or run `gemini auth login` before starting a Gemini ACP agent.",
387
+ });
388
+ }
389
+ const mode = firstNonEmptyString(config.mode, config.acpMode) ?? DEFAULT_ACP_ENGINE_MODE;
390
+ const warmHandleIdleMs = asNumber(config.warmHandleIdleMs ?? config.acpWarmHandleIdleMs, DEFAULT_ACP_ENGINE_WARM_HANDLE_IDLE_MS);
391
+ checks.push({
392
+ code: "gemini_acp_runtime_scaffold",
393
+ level: "info",
394
+ message: "Gemini ACP runtime execution is available through the shared ACP engine.",
395
+ detail: `mode=${mode}; warmHandleIdleMs=${warmHandleIdleMs}`,
396
+ });
397
+ return {
398
+ adapterType: ctx.adapterType,
399
+ status: summarizeStatus(checks),
400
+ checks,
401
+ testedAt: new Date().toISOString(),
402
+ };
403
+ }
404
+ //# sourceMappingURL=acp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/server/acp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,OAAO,EACL,6CAA6C,EAC7C,0BAA0B,EAC1B,gCAAgC,EAChC,qCAAqC,GACtC,MAAM,0DAA0D,CAAC;AAClE,OAAO,EACL,uBAAuB,EACvB,8CAA8C,EAC9C,kCAAkC,EAClC,sCAAsC,GACvC,MAAM,+DAA+D,CAAC;AAMvE,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,WAAW,GACZ,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,oEAAoE,CAAC;AACpH,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAqBvC,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5D,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAA+B;IAC1E,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,KAAkC;IAElC,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,sFAAsF;IACtF,IAAI,SAAS,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IACjD,MAAM,WAAW,GAAG,CAAC,MAAc,EAAyB,EAAE,CAAC,CAAC;QAC9D,GAAG,SAAS;QACZ,iBAAiB,EAAE,GAAG,MAAM,4EAA4E;KACzG,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAG,MAAiB;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACzC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAA+B;IAClE,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IAChG,MAAM,uBAAuB,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,sBAAsB,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,uBAAuB,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1H,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,uBAAuB,CAAC;IACzF,MAAM,cAAc,GAClB,mBAAmB,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,iBAAiB,CAAC;QACpE,kCAAkC,CAAC;IACrC,MAAM,yBAAyB,GAC7B,mBAAmB,CAAC,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,4BAA4B,CAAC;QAC1F,8CAA8C,CAAC;IACjD,MAAM,gBAAgB,GACpB,MAAM,CAAC,gBAAgB;QACvB,MAAM,CAAC,mBAAmB;QAC1B,sCAAsC,CAAC;IAEzC,MAAM,IAAI,GAA4B;QACpC,GAAG,MAAM;QACT,KAAK,EAAE,QAAQ;QACf,IAAI;QACJ,cAAc;QACd,yBAAyB;QACzB,gBAAgB;QAChB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC;IACF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,0BAA0B;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,MAA+B;IAC9D,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,cAAc,GAClB,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACpE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,8BAA8B,CAC3C,KAAmC;IAEnC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IACrD,4EAA4E;IAC5E,gFAAgF;IAChF,iFAAiF;IACjF,8DAA8D;IAC9D,MAAM,yBAAyB,GAAG,CAChC,aAA2D,EAClB,EAAE,CAC3C,8BAA8B,CAAC;QAC7B,aAAa;QACb,KAAK;QACL,YAAY,EAAE,6DAA6D;QAC3E,aAAa,EAAE,0DAA0D;KAC1E,CAAC,CAAC;IACL,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,KAAK,CACrC,gBAAgB;QACd,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QACvE,CAAC,CAAC,EAAE,CACP,CAAC;IAEF,6EAA6E;IAC7E,+EAA+E;IAC/E,2BAA2B;IAC3B,MAAM,oBAAoB,GAAG,aAAa,CAAC,cAAc,CAAC;IAC1D,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,2EAA2E;QAC3E,6EAA6E;QAC7E,oCAAoC;QACpC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,yBAAyB,CAAC,aAAa,CAAC,EAAE,CAAC;IAC/E,CAAC;IACD,GAAG,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAEhC,MAAM,YAAY,GAAG;QACnB,GAAG,EAAE,aAAa,CAAC,kBAAkB,IAAI,KAAK,CAAC,iBAAiB;QAChE,GAAG;QACH,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;QAC1C,QAAQ,EAAE,EAAE;QACZ,KAAK;KACN,CAAC;IAEF,gFAAgF;IAChF,oBAAoB;IACpB,MAAM,oBAAoB,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC;IAC5D,IAAI,oBAAoB,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACnF,MAAM,qCAAqC,CACzC,KAAK,EACL,eAAe,EACf,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,EAClM,YAAY,CACb,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,8EAA8E;IAC9E,gEAAgE;IAChE,EAAE;IACF,8EAA8E;IAC9E,gFAAgF;IAChF,8EAA8E;IAC9E,+EAA+E;IAC/E,gFAAgF;IAChF,iFAAiF;IACjF,iFAAiF;IACjF,gFAAgF;IAChF,yEAAyE;IACzE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1E,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAC7F,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;YACtC,gBAAgB,EAAE,gBAAgB;YAClC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAAE;SACvD,CAAC,CAAC;QACH,MAAM,qCAAqC,CACzC,KAAK,EACL,eAAe,EACf,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EACpN,YAAY,CACb,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,yBAAyB,CAAC,aAAa,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAiC;IAC9D,OAAO;QACL,wBAAwB,EAAE,8BAA8B;QACxD,GAAG,OAAO;QACV,WAAW,EAAE,cAAc;QAC3B,SAAS;QACT,cAAc;KACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAO,GAA6B,EAAE;IAC5E,IAAI,QAAQ,GAA6B,IAAI,CAAC;IAC9C,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,eAAe,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,6DAA6D,CAAC,CAAC;YACjH,eAAe,GAAG,wBAAwB,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,QAAQ,GAAG,eAAe,CAAC;QAC7B,CAAC;QACD,OAAO,eAAe,CAAC;YACrB,GAAG,GAAG;YACN,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC;SACzC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;IACxE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;IAC1E,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,GAAG,QAAQ,CAAC;IAChD,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,GAAG,QAAQ,CAAC;IAChD,OAAO,KAAK,IAAI,QAAQ,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,SAAiB;IACzC,OAAO,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;IAClF,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA+B;IACxD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAC3E,CAAC,CAAC,SAAS,CAAC,IAAI;QAChB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAe,EACf,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAClC,KAAmC;IAEnC,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,0BAA0B,CAAC;QACxC,eAAe,EAAE,KAAK,EAAE,eAAe;QACvC,qBAAqB,EAAE,KAAK,EAAE,kBAAkB,EAAE,eAAe;KAClE,CAAC,CAAC;IACH,IAAI,MAAM,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,6CAA6C,CACjD,KAAK,EACL,MAAM,EACN,gCAAgC,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,EACxF,OAAO,CAAC,GAAG,CACZ,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAChF,OAAO,CAAC,MAAM,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC;AAC9D,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA+B;IAC9D,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACpF,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC;IACtE,OAAO,GAAG,aAAa,QAAQ,CAAC;AAClC,CAAC;AAED,SAAS,oCAAoC,CAC3C,MAAqD;IAErD,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/F,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,KAAkC;IAElC,MAAM,MAAM,GAAG,0BAA0B,CAAC;QACxC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,qBAAqB,EAAE,KAAK,CAAC,kBAAkB,EAAE,eAAe;KACjE,CAAC,CAAC;IACH,IAAI,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,oCAAoC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/E,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,kHAAkH,CAAC;QAC5H,CAAC;QACD,OAAO,qGAAqG,CAAC;IAC/G,CAAC;IACD,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC;QACxC,OAAO,QAAQ,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,0CAA0C,oBAAoB,gBAAgB,CAAC;IACpI,CAAC;IACD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QAClF,OAAO,wCAAwC,OAAO,GAAG,CAAC;IAC5D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,MAAiC;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IACnE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAClE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAkC;IAElC,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC;IAC3C,MAAM,cAAc,GAAG,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC;IAEjD,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,iCAAiC;QAC1C,IAAI,EAAE,qDAAqD;KAC5D,CAAC,CAAC;IAEH,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,+DAA+D;YACxE,IAAI,EAAE,+GAA+G;SACtH,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,sBAAsB;YAC5B,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,+BAA+B,GAAG,EAAE;SAC9C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B;YACzE,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,gCAAgC,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,6BAA6B;QACtG,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QAC5D,OAAO,EAAE,gCAAgC,EAAE;YACzC,CAAC,CAAC,QAAQ,OAAO,CAAC,OAAO,sCAAsC;YAC/D,CAAC,CAAC,QAAQ,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,8CAA8C;QAC9F,IAAI,EAAE,gCAAgC,EAAE;YACtC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,8BAA8B,oBAAoB,wBAAwB;KAC/E,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE;QACtF,MAAM;QACN,eAAe,EAAE,GAAG,CAAC,eAAe;KACrC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,4BAA4B;QACxF,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QAC3C,OAAO,EAAE,iBAAiB;YACxB,CAAC,CAAC,qCAAqC,OAAO,EAAE;YAChD,CAAC,CAAC,wCAAwC,OAAO,EAAE;QACrD,IAAI,EAAE,iBAAiB;YACrB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,oGAAoG;KACzG,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,CAAC,cAAc,CAAC;IACxC,MAAM,MAAM,GAAG,SAAS,CAAC,oBAAoB,KAAK,MAAM,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM,CAAC,CAAC;IAC7H,MAAM,kBAAkB,GAAG,SAAS,CAAC,cAAc,CAAC;IACpD,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,kBAAkB,GAAG,SAAS,CAAC,cAAc,CAAC;IACpD,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,IACE,UAAU,CAAC,kBAAkB,CAAC;QAC9B,UAAU,CAAC,gBAAgB,CAAC;QAC5B,UAAU,CAAC,kBAAkB,CAAC;QAC9B,UAAU,CAAC,gBAAgB,CAAC;QAC5B,MAAM,EACN,CAAC;QACD,MAAM,MAAM,GAAG,MAAM;YACnB,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,UAAU,CAAC,kBAAkB,CAAC;gBAChE,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,oBAAoB,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iCAAiC;YACvC,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,oDAAoD;YAC7D,MAAM,EAAE,eAAe,MAAM,GAAG;SACjC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,qCAAqC;YAC3C,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,0CAA0C;YACnD,IAAI,EAAE,iIAAiI;SACxI,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,uBAAuB,CAAC;IACzF,MAAM,gBAAgB,GAAG,QAAQ,CAC/B,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,mBAAmB,EACrD,sCAAsC,CACvC,CAAC;IACF,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,6BAA6B;QACnC,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,0EAA0E;QACnF,MAAM,EAAE,QAAQ,IAAI,sBAAsB,gBAAgB,EAAE;KAC7D,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;QAC/B,MAAM;QACN,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=acp.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp.test.d.ts","sourceRoot":"","sources":["../../src/server/acp.test.ts"],"names":[],"mappings":""}