@evermore.work/adapter-gemini-local 2026.509.0-canary.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/dist/cli/format-event.d.ts +2 -0
- package/dist/cli/format-event.d.ts.map +1 -0
- package/dist/cli/format-event.js +218 -0
- package/dist/cli/format-event.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/server/execute.d.ts +3 -0
- package/dist/server/execute.d.ts.map +1 -0
- package/dist/server/execute.js +513 -0
- package/dist/server/execute.js.map +1 -0
- package/dist/server/execute.remote.test.d.ts +2 -0
- package/dist/server/execute.remote.test.d.ts.map +1 -0
- package/dist/server/execute.remote.test.js +285 -0
- package/dist/server/execute.remote.test.js.map +1 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +62 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/parse.d.ts +38 -0
- package/dist/server/parse.d.ts.map +1 -0
- package/dist/server/parse.js +260 -0
- package/dist/server/parse.js.map +1 -0
- package/dist/server/parse.test.d.ts +2 -0
- package/dist/server/parse.test.d.ts.map +1 -0
- package/dist/server/parse.test.js +117 -0
- package/dist/server/parse.test.js.map +1 -0
- package/dist/server/skills.d.ts +8 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +69 -0
- package/dist/server/skills.js.map +1 -0
- package/dist/server/test.d.ts +3 -0
- package/dist/server/test.d.ts.map +1 -0
- package/dist/server/test.js +247 -0
- package/dist/server/test.js.map +1 -0
- package/dist/server/utils.d.ts +2 -0
- package/dist/server/utils.d.ts.map +1 -0
- package/dist/server/utils.js +7 -0
- package/dist/server/utils.js.map +1 -0
- package/dist/ui/build-config.d.ts +3 -0
- package/dist/ui/build-config.d.ts.map +1 -0
- package/dist/ui/build-config.js +80 -0
- package/dist/ui/build-config.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/parse-stdout.d.ts +3 -0
- package/dist/ui/parse-stdout.d.ts.map +1 -0
- package/dist/ui/parse-stdout.js +261 -0
- package/dist/ui/parse-stdout.js.map +1 -0
- package/dist/ui/parse-stdout.test.d.ts +2 -0
- package/dist/ui/parse-stdout.test.d.ts.map +1 -0
- package/dist/ui/parse-stdout.test.js +67 -0
- package/dist/ui/parse-stdout.test.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,513 @@
|
|
|
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 { adapterExecutionTargetIsRemote, adapterExecutionTargetRemoteCwd, adapterExecutionTargetSessionIdentity, adapterExecutionTargetSessionMatches, adapterExecutionTargetUsesManagedHome, adapterExecutionTargetUsesEvermoreBridge, describeAdapterExecutionTarget, ensureAdapterExecutionTargetCommandResolvable, ensureAdapterExecutionTargetRuntimeCommandInstalled, prepareAdapterExecutionTargetRuntime, readAdapterExecutionTarget, readAdapterExecutionTargetHomeDir, resolveAdapterExecutionTargetCommandForLogs, runAdapterExecutionTargetProcess, runAdapterExecutionTargetShellCommand, startAdapterExecutionTargetEvermoreBridge, } from "@evermore.work/adapter-utils/execution-target";
|
|
6
|
+
import { asBoolean, asNumber, asString, asStringArray, applyEvermoreWorkspaceEnv, buildEvermoreEnv, buildInvocationEnvForLogs, ensureAbsoluteDirectory, ensureEvermoreSkillSymlink, joinPromptSections, ensurePathInEnv, readEvermoreRuntimeSkillEntries, readEvermoreIssueWorkModeFromContext, resolveEvermoreDesiredSkillNames, removeMaintainerOnlySkillSymlinks, parseObject, renderTemplate, renderEvermoreWakePrompt, shapeEvermoreWorkspaceEnvForExecution, stringifyEvermoreWakePayload, DEFAULT_EVERMORE_AGENT_PROMPT_TEMPLATE, } from "@evermore.work/adapter-utils/server-utils";
|
|
7
|
+
import { DEFAULT_GEMINI_LOCAL_MODEL, SANDBOX_INSTALL_COMMAND } from "../index.js";
|
|
8
|
+
import { describeGeminiFailure, detectGeminiAuthRequired, isGeminiTurnLimitResult, isGeminiUnknownSessionError, parseGeminiJsonl, } from "./parse.js";
|
|
9
|
+
import { firstNonEmptyLine } from "./utils.js";
|
|
10
|
+
const __moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
function hasNonEmptyEnvValue(env, key) {
|
|
12
|
+
const raw = env[key];
|
|
13
|
+
return typeof raw === "string" && raw.trim().length > 0;
|
|
14
|
+
}
|
|
15
|
+
function resolveGeminiBillingType(env) {
|
|
16
|
+
return hasNonEmptyEnvValue(env, "GEMINI_API_KEY") || hasNonEmptyEnvValue(env, "GOOGLE_API_KEY")
|
|
17
|
+
? "api"
|
|
18
|
+
: "subscription";
|
|
19
|
+
}
|
|
20
|
+
function renderEvermoreEnvNote(env) {
|
|
21
|
+
const evermoreKeys = Object.keys(env)
|
|
22
|
+
.filter((key) => key.startsWith("EVERMORE_"))
|
|
23
|
+
.sort();
|
|
24
|
+
if (evermoreKeys.length === 0)
|
|
25
|
+
return "";
|
|
26
|
+
return [
|
|
27
|
+
"Evermore runtime note:",
|
|
28
|
+
`The following EVERMORE_* environment variables are available in this run: ${evermoreKeys.join(", ")}`,
|
|
29
|
+
"Do not assume these variables are missing without checking your shell environment.",
|
|
30
|
+
"",
|
|
31
|
+
"",
|
|
32
|
+
].join("\n");
|
|
33
|
+
}
|
|
34
|
+
function renderApiAccessNote(env) {
|
|
35
|
+
if (!hasNonEmptyEnvValue(env, "EVERMORE_API_URL") || !hasNonEmptyEnvValue(env, "EVERMORE_API_KEY"))
|
|
36
|
+
return "";
|
|
37
|
+
return [
|
|
38
|
+
"Evermore API access note:",
|
|
39
|
+
"Use run_shell_command with curl to make Evermore API requests.",
|
|
40
|
+
"GET example:",
|
|
41
|
+
` run_shell_command({ command: "curl -s -H \\"Authorization: Bearer $EVERMORE_API_KEY\\" \\"$EVERMORE_API_URL/api/agents/me\\"" })`,
|
|
42
|
+
"POST/PATCH example:",
|
|
43
|
+
` run_shell_command({ command: "curl -s -X POST -H \\"Authorization: Bearer $EVERMORE_API_KEY\\" -H 'Content-Type: application/json' -H \\"X-Evermore-Run-Id: $EVERMORE_RUN_ID\\" -d '{...}' \\"$EVERMORE_API_URL/api/issues/{id}/checkout\\"" })`,
|
|
44
|
+
"",
|
|
45
|
+
"",
|
|
46
|
+
].join("\n");
|
|
47
|
+
}
|
|
48
|
+
function geminiSkillsHome() {
|
|
49
|
+
return path.join(os.homedir(), ".gemini", "skills");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Inject Evermore skills directly into `~/.gemini/skills/` via symlinks.
|
|
53
|
+
* This avoids needing GEMINI_CLI_HOME overrides, so the CLI naturally finds
|
|
54
|
+
* both its auth credentials and the injected skills in the real home directory.
|
|
55
|
+
*/
|
|
56
|
+
async function ensureGeminiSkillsInjected(onLog, skillsEntries, desiredSkillNames) {
|
|
57
|
+
const desiredSet = new Set(desiredSkillNames ?? skillsEntries.map((entry) => entry.key));
|
|
58
|
+
const selectedEntries = skillsEntries.filter((entry) => desiredSet.has(entry.key));
|
|
59
|
+
if (selectedEntries.length === 0)
|
|
60
|
+
return;
|
|
61
|
+
const skillsHome = geminiSkillsHome();
|
|
62
|
+
try {
|
|
63
|
+
await fs.mkdir(skillsHome, { recursive: true });
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
await onLog("stderr", `[evermore] Failed to prepare Gemini skills directory ${skillsHome}: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const removedSkills = await removeMaintainerOnlySkillSymlinks(skillsHome, selectedEntries.map((entry) => entry.runtimeName));
|
|
70
|
+
for (const skillName of removedSkills) {
|
|
71
|
+
await onLog("stderr", `[evermore] Removed maintainer-only Gemini skill "${skillName}" from ${skillsHome}\n`);
|
|
72
|
+
}
|
|
73
|
+
for (const entry of selectedEntries) {
|
|
74
|
+
const target = path.join(skillsHome, entry.runtimeName);
|
|
75
|
+
try {
|
|
76
|
+
const result = await ensureEvermoreSkillSymlink(entry.source, target);
|
|
77
|
+
if (result === "skipped")
|
|
78
|
+
continue;
|
|
79
|
+
await onLog("stderr", `[evermore] ${result === "repaired" ? "Repaired" : "Linked"} Gemini skill: ${entry.key}\n`);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
await onLog("stderr", `[evermore] Failed to link Gemini skill "${entry.key}": ${err instanceof Error ? err.message : String(err)}\n`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function buildGeminiSkillsDir(config) {
|
|
87
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "evermore-gemini-skills-"));
|
|
88
|
+
const target = path.join(tmp, "skills");
|
|
89
|
+
await fs.mkdir(target, { recursive: true });
|
|
90
|
+
const availableEntries = await readEvermoreRuntimeSkillEntries(config, __moduleDir);
|
|
91
|
+
const desiredNames = new Set(resolveEvermoreDesiredSkillNames(config, availableEntries));
|
|
92
|
+
for (const entry of availableEntries) {
|
|
93
|
+
if (!desiredNames.has(entry.key))
|
|
94
|
+
continue;
|
|
95
|
+
await fs.symlink(entry.source, path.join(target, entry.runtimeName));
|
|
96
|
+
}
|
|
97
|
+
return target;
|
|
98
|
+
}
|
|
99
|
+
export async function execute(ctx) {
|
|
100
|
+
const { runId, agent, runtime, config, context, onLog, onMeta, onSpawn, authToken } = ctx;
|
|
101
|
+
const executionTarget = readAdapterExecutionTarget({
|
|
102
|
+
executionTarget: ctx.executionTarget,
|
|
103
|
+
legacyRemoteExecution: ctx.executionTransport?.remoteExecution,
|
|
104
|
+
});
|
|
105
|
+
const executionTargetIsRemote = adapterExecutionTargetIsRemote(executionTarget);
|
|
106
|
+
const promptTemplate = asString(config.promptTemplate, DEFAULT_EVERMORE_AGENT_PROMPT_TEMPLATE);
|
|
107
|
+
const command = asString(config.command, "gemini");
|
|
108
|
+
const model = asString(config.model, DEFAULT_GEMINI_LOCAL_MODEL).trim();
|
|
109
|
+
const sandbox = asBoolean(config.sandbox, false);
|
|
110
|
+
const workspaceContext = parseObject(context.evermoreWorkspace);
|
|
111
|
+
const workspaceCwd = asString(workspaceContext.cwd, "");
|
|
112
|
+
const workspaceSource = asString(workspaceContext.source, "");
|
|
113
|
+
const workspaceId = asString(workspaceContext.workspaceId, "");
|
|
114
|
+
const workspaceRepoUrl = asString(workspaceContext.repoUrl, "");
|
|
115
|
+
const workspaceRepoRef = asString(workspaceContext.repoRef, "");
|
|
116
|
+
const agentHome = asString(workspaceContext.agentHome, "");
|
|
117
|
+
const workspaceHints = Array.isArray(context.evermoreWorkspaces)
|
|
118
|
+
? context.evermoreWorkspaces.filter((value) => typeof value === "object" && value !== null)
|
|
119
|
+
: [];
|
|
120
|
+
const configuredCwd = asString(config.cwd, "");
|
|
121
|
+
const useConfiguredInsteadOfAgentHome = workspaceSource === "agent_home" && configuredCwd.length > 0;
|
|
122
|
+
const effectiveWorkspaceCwd = useConfiguredInsteadOfAgentHome ? "" : workspaceCwd;
|
|
123
|
+
const cwd = effectiveWorkspaceCwd || configuredCwd || process.cwd();
|
|
124
|
+
const effectiveExecutionCwd = adapterExecutionTargetRemoteCwd(executionTarget, cwd);
|
|
125
|
+
const shapedWorkspaceEnv = shapeEvermoreWorkspaceEnvForExecution({
|
|
126
|
+
workspaceCwd: effectiveWorkspaceCwd,
|
|
127
|
+
workspaceHints,
|
|
128
|
+
executionTargetIsRemote,
|
|
129
|
+
executionCwd: effectiveExecutionCwd,
|
|
130
|
+
});
|
|
131
|
+
await ensureAbsoluteDirectory(cwd, { createIfMissing: true });
|
|
132
|
+
const geminiSkillEntries = await readEvermoreRuntimeSkillEntries(config, __moduleDir);
|
|
133
|
+
const desiredGeminiSkillNames = resolveEvermoreDesiredSkillNames(config, geminiSkillEntries);
|
|
134
|
+
if (!executionTargetIsRemote) {
|
|
135
|
+
await ensureGeminiSkillsInjected(onLog, geminiSkillEntries, desiredGeminiSkillNames);
|
|
136
|
+
}
|
|
137
|
+
const envConfig = parseObject(config.env);
|
|
138
|
+
const hasExplicitApiKey = typeof envConfig.EVERMORE_API_KEY === "string" && envConfig.EVERMORE_API_KEY.trim().length > 0;
|
|
139
|
+
const env = { ...buildEvermoreEnv(agent) };
|
|
140
|
+
env.EVERMORE_RUN_ID = runId;
|
|
141
|
+
const wakeTaskId = (typeof context.taskId === "string" && context.taskId.trim().length > 0 && context.taskId.trim()) ||
|
|
142
|
+
(typeof context.issueId === "string" && context.issueId.trim().length > 0 && context.issueId.trim()) ||
|
|
143
|
+
null;
|
|
144
|
+
const wakeReason = typeof context.wakeReason === "string" && context.wakeReason.trim().length > 0
|
|
145
|
+
? context.wakeReason.trim()
|
|
146
|
+
: null;
|
|
147
|
+
const wakeCommentId = (typeof context.wakeCommentId === "string" && context.wakeCommentId.trim().length > 0 && context.wakeCommentId.trim()) ||
|
|
148
|
+
(typeof context.commentId === "string" && context.commentId.trim().length > 0 && context.commentId.trim()) ||
|
|
149
|
+
null;
|
|
150
|
+
const approvalId = typeof context.approvalId === "string" && context.approvalId.trim().length > 0
|
|
151
|
+
? context.approvalId.trim()
|
|
152
|
+
: null;
|
|
153
|
+
const approvalStatus = typeof context.approvalStatus === "string" && context.approvalStatus.trim().length > 0
|
|
154
|
+
? context.approvalStatus.trim()
|
|
155
|
+
: null;
|
|
156
|
+
const linkedIssueIds = Array.isArray(context.issueIds)
|
|
157
|
+
? context.issueIds.filter((value) => typeof value === "string" && value.trim().length > 0)
|
|
158
|
+
: [];
|
|
159
|
+
const wakePayloadJson = stringifyEvermoreWakePayload(context.evermoreWake);
|
|
160
|
+
const issueWorkMode = readEvermoreIssueWorkModeFromContext(context);
|
|
161
|
+
if (wakeTaskId)
|
|
162
|
+
env.EVERMORE_TASK_ID = wakeTaskId;
|
|
163
|
+
if (issueWorkMode)
|
|
164
|
+
env.EVERMORE_ISSUE_WORK_MODE = issueWorkMode;
|
|
165
|
+
if (wakeReason)
|
|
166
|
+
env.EVERMORE_WAKE_REASON = wakeReason;
|
|
167
|
+
if (wakeCommentId)
|
|
168
|
+
env.EVERMORE_WAKE_COMMENT_ID = wakeCommentId;
|
|
169
|
+
if (approvalId)
|
|
170
|
+
env.EVERMORE_APPROVAL_ID = approvalId;
|
|
171
|
+
if (approvalStatus)
|
|
172
|
+
env.EVERMORE_APPROVAL_STATUS = approvalStatus;
|
|
173
|
+
if (linkedIssueIds.length > 0)
|
|
174
|
+
env.EVERMORE_LINKED_ISSUE_IDS = linkedIssueIds.join(",");
|
|
175
|
+
if (wakePayloadJson)
|
|
176
|
+
env.EVERMORE_WAKE_PAYLOAD_JSON = wakePayloadJson;
|
|
177
|
+
applyEvermoreWorkspaceEnv(env, {
|
|
178
|
+
workspaceCwd: shapedWorkspaceEnv.workspaceCwd,
|
|
179
|
+
workspaceSource,
|
|
180
|
+
workspaceId,
|
|
181
|
+
workspaceRepoUrl,
|
|
182
|
+
workspaceRepoRef,
|
|
183
|
+
agentHome,
|
|
184
|
+
});
|
|
185
|
+
if (shapedWorkspaceEnv.workspaceHints.length > 0) {
|
|
186
|
+
env.EVERMORE_WORKSPACES_JSON = JSON.stringify(shapedWorkspaceEnv.workspaceHints);
|
|
187
|
+
}
|
|
188
|
+
for (const [key, value] of Object.entries(envConfig)) {
|
|
189
|
+
if (typeof value === "string")
|
|
190
|
+
env[key] = value;
|
|
191
|
+
}
|
|
192
|
+
if (!hasExplicitApiKey && authToken) {
|
|
193
|
+
env.EVERMORE_API_KEY = authToken;
|
|
194
|
+
}
|
|
195
|
+
const effectiveEnv = Object.fromEntries(Object.entries({ ...process.env, ...env }).filter((entry) => typeof entry[1] === "string"));
|
|
196
|
+
const billingType = resolveGeminiBillingType(effectiveEnv);
|
|
197
|
+
const runtimeEnv = Object.fromEntries(Object.entries(ensurePathInEnv(effectiveEnv)).filter((entry) => typeof entry[1] === "string"));
|
|
198
|
+
const timeoutSec = asNumber(config.timeoutSec, 0);
|
|
199
|
+
const graceSec = asNumber(config.graceSec, 20);
|
|
200
|
+
await ensureAdapterExecutionTargetRuntimeCommandInstalled({
|
|
201
|
+
runId,
|
|
202
|
+
target: executionTarget,
|
|
203
|
+
installCommand: ctx.runtimeCommandSpec?.installCommand,
|
|
204
|
+
detectCommand: ctx.runtimeCommandSpec?.detectCommand,
|
|
205
|
+
cwd,
|
|
206
|
+
env: runtimeEnv,
|
|
207
|
+
timeoutSec,
|
|
208
|
+
graceSec,
|
|
209
|
+
onLog,
|
|
210
|
+
});
|
|
211
|
+
await ensureAdapterExecutionTargetCommandResolvable(command, executionTarget, cwd, runtimeEnv, { installCommand: SANDBOX_INSTALL_COMMAND });
|
|
212
|
+
const resolvedCommand = await resolveAdapterExecutionTargetCommandForLogs(command, executionTarget, cwd, runtimeEnv);
|
|
213
|
+
let loggedEnv = buildInvocationEnvForLogs(env, {
|
|
214
|
+
runtimeEnv,
|
|
215
|
+
includeRuntimeKeys: ["HOME"],
|
|
216
|
+
resolvedCommand,
|
|
217
|
+
});
|
|
218
|
+
const extraArgs = (() => {
|
|
219
|
+
const fromExtraArgs = asStringArray(config.extraArgs);
|
|
220
|
+
if (fromExtraArgs.length > 0)
|
|
221
|
+
return fromExtraArgs;
|
|
222
|
+
return asStringArray(config.args);
|
|
223
|
+
})();
|
|
224
|
+
let restoreRemoteWorkspace = null;
|
|
225
|
+
let remoteSkillsDir = null;
|
|
226
|
+
let localSkillsDir = null;
|
|
227
|
+
let remoteRuntimeRootDir = null;
|
|
228
|
+
let evermoreBridge = null;
|
|
229
|
+
if (executionTargetIsRemote) {
|
|
230
|
+
try {
|
|
231
|
+
localSkillsDir = await buildGeminiSkillsDir(config);
|
|
232
|
+
await onLog("stdout", `[evermore] Syncing workspace and Gemini runtime assets to ${describeAdapterExecutionTarget(executionTarget)}.\n`);
|
|
233
|
+
const preparedExecutionTargetRuntime = await prepareAdapterExecutionTargetRuntime({
|
|
234
|
+
target: executionTarget,
|
|
235
|
+
adapterKey: "gemini",
|
|
236
|
+
workspaceLocalDir: cwd,
|
|
237
|
+
installCommand: SANDBOX_INSTALL_COMMAND,
|
|
238
|
+
detectCommand: command,
|
|
239
|
+
assets: [{
|
|
240
|
+
key: "skills",
|
|
241
|
+
localDir: localSkillsDir,
|
|
242
|
+
followSymlinks: true,
|
|
243
|
+
}],
|
|
244
|
+
});
|
|
245
|
+
restoreRemoteWorkspace = () => preparedExecutionTargetRuntime.restoreWorkspace();
|
|
246
|
+
remoteRuntimeRootDir = preparedExecutionTargetRuntime.runtimeRootDir;
|
|
247
|
+
const managedHome = adapterExecutionTargetUsesManagedHome(executionTarget);
|
|
248
|
+
if (managedHome && preparedExecutionTargetRuntime.runtimeRootDir) {
|
|
249
|
+
env.HOME = preparedExecutionTargetRuntime.runtimeRootDir;
|
|
250
|
+
}
|
|
251
|
+
const remoteHomeDir = managedHome && preparedExecutionTargetRuntime.runtimeRootDir
|
|
252
|
+
? preparedExecutionTargetRuntime.runtimeRootDir
|
|
253
|
+
: await readAdapterExecutionTargetHomeDir(runId, executionTarget, {
|
|
254
|
+
cwd,
|
|
255
|
+
env,
|
|
256
|
+
timeoutSec,
|
|
257
|
+
graceSec,
|
|
258
|
+
onLog,
|
|
259
|
+
});
|
|
260
|
+
if (remoteHomeDir && preparedExecutionTargetRuntime.assetDirs.skills) {
|
|
261
|
+
remoteSkillsDir = path.posix.join(remoteHomeDir, ".gemini", "skills");
|
|
262
|
+
await runAdapterExecutionTargetShellCommand(runId, executionTarget, `mkdir -p ${JSON.stringify(path.posix.dirname(remoteSkillsDir))} && rm -rf ${JSON.stringify(remoteSkillsDir)} && cp -a ${JSON.stringify(preparedExecutionTargetRuntime.assetDirs.skills)} ${JSON.stringify(remoteSkillsDir)}`, { cwd, env, timeoutSec, graceSec, onLog });
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
await Promise.allSettled([
|
|
267
|
+
restoreRemoteWorkspace?.(),
|
|
268
|
+
localSkillsDir ? fs.rm(path.dirname(localSkillsDir), { recursive: true, force: true }).catch(() => undefined) : Promise.resolve(),
|
|
269
|
+
]);
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (executionTargetIsRemote && adapterExecutionTargetUsesEvermoreBridge(executionTarget)) {
|
|
274
|
+
evermoreBridge = await startAdapterExecutionTargetEvermoreBridge({
|
|
275
|
+
runId,
|
|
276
|
+
target: executionTarget,
|
|
277
|
+
runtimeRootDir: remoteRuntimeRootDir,
|
|
278
|
+
adapterKey: "gemini",
|
|
279
|
+
hostApiToken: env.EVERMORE_API_KEY,
|
|
280
|
+
onLog,
|
|
281
|
+
});
|
|
282
|
+
if (evermoreBridge) {
|
|
283
|
+
Object.assign(env, evermoreBridge.env);
|
|
284
|
+
loggedEnv = buildInvocationEnvForLogs(env, {
|
|
285
|
+
runtimeEnv: ensurePathInEnv({ ...process.env, ...env }),
|
|
286
|
+
includeRuntimeKeys: ["HOME"],
|
|
287
|
+
resolvedCommand,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
const runtimeSessionParams = parseObject(runtime.sessionParams);
|
|
292
|
+
const runtimeSessionId = asString(runtimeSessionParams.sessionId, runtime.sessionId ?? "");
|
|
293
|
+
const runtimeSessionCwd = asString(runtimeSessionParams.cwd, "");
|
|
294
|
+
const runtimeRemoteExecution = parseObject(runtimeSessionParams.remoteExecution);
|
|
295
|
+
const canResumeSession = runtimeSessionId.length > 0 &&
|
|
296
|
+
(runtimeSessionCwd.length === 0 || path.resolve(runtimeSessionCwd) === path.resolve(effectiveExecutionCwd)) &&
|
|
297
|
+
adapterExecutionTargetSessionMatches(runtimeRemoteExecution, executionTarget);
|
|
298
|
+
const sessionId = canResumeSession ? runtimeSessionId : null;
|
|
299
|
+
if (executionTargetIsRemote && runtimeSessionId && !canResumeSession) {
|
|
300
|
+
await onLog("stdout", `[evermore] Gemini session "${runtimeSessionId}" does not match the current remote execution identity and will not be resumed in "${effectiveExecutionCwd}". Starting a fresh remote session.\n`);
|
|
301
|
+
}
|
|
302
|
+
else if (runtimeSessionId && !canResumeSession) {
|
|
303
|
+
await onLog("stdout", `[evermore] Gemini session "${runtimeSessionId}" was saved for cwd "${runtimeSessionCwd}" and will not be resumed in "${effectiveExecutionCwd}".\n`);
|
|
304
|
+
}
|
|
305
|
+
const instructionsFilePath = asString(config.instructionsFilePath, "").trim();
|
|
306
|
+
const instructionsDir = instructionsFilePath ? `${path.dirname(instructionsFilePath)}/` : "";
|
|
307
|
+
let instructionsPrefix = "";
|
|
308
|
+
if (instructionsFilePath) {
|
|
309
|
+
try {
|
|
310
|
+
const instructionsContents = await fs.readFile(instructionsFilePath, "utf8");
|
|
311
|
+
instructionsPrefix =
|
|
312
|
+
`${instructionsContents}\n\n` +
|
|
313
|
+
`The above agent instructions were loaded from ${instructionsFilePath}. ` +
|
|
314
|
+
`Resolve any relative file references from ${instructionsDir}.\n\n`;
|
|
315
|
+
}
|
|
316
|
+
catch (err) {
|
|
317
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
318
|
+
await onLog("stdout", `[evermore] Warning: could not read agent instructions file "${instructionsFilePath}": ${reason}\n`);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
const commandNotes = (() => {
|
|
322
|
+
const notes = ["Prompt is passed to Gemini via --prompt for non-interactive execution."];
|
|
323
|
+
notes.push("Added --approval-mode yolo for unattended execution.");
|
|
324
|
+
if (!instructionsFilePath)
|
|
325
|
+
return notes;
|
|
326
|
+
if (instructionsPrefix.length > 0) {
|
|
327
|
+
notes.push(`Loaded agent instructions from ${instructionsFilePath}`, `Prepended instructions + path directive to prompt (relative references from ${instructionsDir}).`);
|
|
328
|
+
return notes;
|
|
329
|
+
}
|
|
330
|
+
notes.push(`Configured instructionsFilePath ${instructionsFilePath}, but file could not be read; continuing without injected instructions.`);
|
|
331
|
+
return notes;
|
|
332
|
+
})();
|
|
333
|
+
const bootstrapPromptTemplate = asString(config.bootstrapPromptTemplate, "");
|
|
334
|
+
const templateData = {
|
|
335
|
+
agentId: agent.id,
|
|
336
|
+
companyId: agent.companyId,
|
|
337
|
+
runId,
|
|
338
|
+
company: { id: agent.companyId },
|
|
339
|
+
agent,
|
|
340
|
+
run: { id: runId, source: "on_demand" },
|
|
341
|
+
context,
|
|
342
|
+
};
|
|
343
|
+
const renderedBootstrapPrompt = !sessionId && bootstrapPromptTemplate.trim().length > 0
|
|
344
|
+
? renderTemplate(bootstrapPromptTemplate, templateData).trim()
|
|
345
|
+
: "";
|
|
346
|
+
const wakePrompt = renderEvermoreWakePrompt(context.evermoreWake, { resumedSession: Boolean(sessionId) });
|
|
347
|
+
const shouldUseResumeDeltaPrompt = Boolean(sessionId) && wakePrompt.length > 0;
|
|
348
|
+
const renderedPrompt = shouldUseResumeDeltaPrompt ? "" : renderTemplate(promptTemplate, templateData);
|
|
349
|
+
const sessionHandoffNote = asString(context.evermoreSessionHandoffMarkdown, "").trim();
|
|
350
|
+
const evermoreEnvNote = renderEvermoreEnvNote(env);
|
|
351
|
+
const apiAccessNote = renderApiAccessNote(env);
|
|
352
|
+
const prompt = joinPromptSections([
|
|
353
|
+
instructionsPrefix,
|
|
354
|
+
renderedBootstrapPrompt,
|
|
355
|
+
wakePrompt,
|
|
356
|
+
sessionHandoffNote,
|
|
357
|
+
evermoreEnvNote,
|
|
358
|
+
apiAccessNote,
|
|
359
|
+
renderedPrompt,
|
|
360
|
+
]);
|
|
361
|
+
const promptMetrics = {
|
|
362
|
+
promptChars: prompt.length,
|
|
363
|
+
instructionsChars: instructionsPrefix.length,
|
|
364
|
+
bootstrapPromptChars: renderedBootstrapPrompt.length,
|
|
365
|
+
wakePromptChars: wakePrompt.length,
|
|
366
|
+
sessionHandoffChars: sessionHandoffNote.length,
|
|
367
|
+
runtimeNoteChars: evermoreEnvNote.length + apiAccessNote.length,
|
|
368
|
+
heartbeatPromptChars: renderedPrompt.length,
|
|
369
|
+
};
|
|
370
|
+
const buildArgs = (resumeSessionId) => {
|
|
371
|
+
const args = ["--output-format", "stream-json"];
|
|
372
|
+
if (resumeSessionId)
|
|
373
|
+
args.push("--resume", resumeSessionId);
|
|
374
|
+
if (model && model !== DEFAULT_GEMINI_LOCAL_MODEL)
|
|
375
|
+
args.push("--model", model);
|
|
376
|
+
args.push("--approval-mode", "yolo");
|
|
377
|
+
if (sandbox) {
|
|
378
|
+
args.push("--sandbox");
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
args.push("--sandbox=none");
|
|
382
|
+
}
|
|
383
|
+
if (extraArgs.length > 0)
|
|
384
|
+
args.push(...extraArgs);
|
|
385
|
+
args.push("--prompt", prompt);
|
|
386
|
+
return args;
|
|
387
|
+
};
|
|
388
|
+
const runAttempt = async (resumeSessionId) => {
|
|
389
|
+
const args = buildArgs(resumeSessionId);
|
|
390
|
+
if (onMeta) {
|
|
391
|
+
await onMeta({
|
|
392
|
+
adapterType: "gemini_local",
|
|
393
|
+
command: resolvedCommand,
|
|
394
|
+
cwd: effectiveExecutionCwd,
|
|
395
|
+
commandNotes,
|
|
396
|
+
commandArgs: args.map((value, index) => (index === args.length - 1 ? `<prompt ${prompt.length} chars>` : value)),
|
|
397
|
+
env: loggedEnv,
|
|
398
|
+
prompt,
|
|
399
|
+
promptMetrics,
|
|
400
|
+
context,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
const proc = await runAdapterExecutionTargetProcess(runId, executionTarget, command, args, {
|
|
404
|
+
cwd,
|
|
405
|
+
env,
|
|
406
|
+
timeoutSec,
|
|
407
|
+
graceSec,
|
|
408
|
+
onSpawn,
|
|
409
|
+
onLog,
|
|
410
|
+
});
|
|
411
|
+
return {
|
|
412
|
+
proc,
|
|
413
|
+
parsed: parseGeminiJsonl(proc.stdout),
|
|
414
|
+
};
|
|
415
|
+
};
|
|
416
|
+
const toResult = (attempt, clearSessionOnMissingSession = false, isRetry = false) => {
|
|
417
|
+
const authMeta = detectGeminiAuthRequired({
|
|
418
|
+
parsed: attempt.parsed.resultEvent,
|
|
419
|
+
stdout: attempt.proc.stdout,
|
|
420
|
+
stderr: attempt.proc.stderr,
|
|
421
|
+
});
|
|
422
|
+
if (attempt.proc.timedOut) {
|
|
423
|
+
return {
|
|
424
|
+
exitCode: attempt.proc.exitCode,
|
|
425
|
+
signal: attempt.proc.signal,
|
|
426
|
+
timedOut: true,
|
|
427
|
+
errorMessage: `Timed out after ${timeoutSec}s`,
|
|
428
|
+
errorCode: authMeta.requiresAuth ? "gemini_auth_required" : null,
|
|
429
|
+
clearSession: clearSessionOnMissingSession,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
const parsedError = typeof attempt.parsed.errorMessage === "string" ? attempt.parsed.errorMessage.trim() : "";
|
|
433
|
+
const stderrLine = firstNonEmptyLine(attempt.proc.stderr);
|
|
434
|
+
const structuredFailure = attempt.parsed.resultEvent
|
|
435
|
+
? describeGeminiFailure(attempt.parsed.resultEvent)
|
|
436
|
+
: null;
|
|
437
|
+
const fallbackErrorMessage = parsedError ||
|
|
438
|
+
structuredFailure ||
|
|
439
|
+
stderrLine ||
|
|
440
|
+
`Gemini exited with code ${attempt.proc.exitCode ?? -1}`;
|
|
441
|
+
const failed = (attempt.proc.exitCode ?? 0) !== 0;
|
|
442
|
+
const clearSessionForTurnLimit = isGeminiTurnLimitResult(attempt.parsed.resultEvent, attempt.proc.exitCode);
|
|
443
|
+
// On retry, don't fall back to old session ID — the old session was stale
|
|
444
|
+
const canFallbackToRuntimeSession = !isRetry;
|
|
445
|
+
const resolvedSessionId = attempt.parsed.sessionId
|
|
446
|
+
?? (canFallbackToRuntimeSession ? (runtimeSessionId ?? runtime.sessionId ?? null) : null);
|
|
447
|
+
const resolvedSessionParams = resolvedSessionId
|
|
448
|
+
? {
|
|
449
|
+
sessionId: resolvedSessionId,
|
|
450
|
+
cwd: effectiveExecutionCwd,
|
|
451
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
452
|
+
...(workspaceRepoUrl ? { repoUrl: workspaceRepoUrl } : {}),
|
|
453
|
+
...(workspaceRepoRef ? { repoRef: workspaceRepoRef } : {}),
|
|
454
|
+
...(executionTargetIsRemote
|
|
455
|
+
? {
|
|
456
|
+
remoteExecution: adapterExecutionTargetSessionIdentity(executionTarget),
|
|
457
|
+
}
|
|
458
|
+
: {}),
|
|
459
|
+
}
|
|
460
|
+
: null;
|
|
461
|
+
const resultJson = {
|
|
462
|
+
...(attempt.parsed.resultEvent ?? {
|
|
463
|
+
stdout: attempt.proc.stdout,
|
|
464
|
+
stderr: attempt.proc.stderr,
|
|
465
|
+
}),
|
|
466
|
+
...(failed && clearSessionForTurnLimit ? { stopReason: "max_turns_exhausted" } : {}),
|
|
467
|
+
};
|
|
468
|
+
return {
|
|
469
|
+
exitCode: attempt.proc.exitCode,
|
|
470
|
+
signal: attempt.proc.signal,
|
|
471
|
+
timedOut: false,
|
|
472
|
+
errorMessage: failed ? fallbackErrorMessage : null,
|
|
473
|
+
errorCode: failed && authMeta.requiresAuth
|
|
474
|
+
? "gemini_auth_required"
|
|
475
|
+
: failed && clearSessionForTurnLimit
|
|
476
|
+
? "max_turns_exhausted"
|
|
477
|
+
: null,
|
|
478
|
+
usage: attempt.parsed.usage,
|
|
479
|
+
sessionId: resolvedSessionId,
|
|
480
|
+
sessionParams: resolvedSessionParams,
|
|
481
|
+
sessionDisplayId: resolvedSessionId,
|
|
482
|
+
provider: "google",
|
|
483
|
+
biller: "google",
|
|
484
|
+
model,
|
|
485
|
+
billingType,
|
|
486
|
+
costUsd: attempt.parsed.costUsd,
|
|
487
|
+
resultJson,
|
|
488
|
+
summary: attempt.parsed.summary,
|
|
489
|
+
question: attempt.parsed.question,
|
|
490
|
+
clearSession: clearSessionForTurnLimit || Boolean(clearSessionOnMissingSession && !resolvedSessionId),
|
|
491
|
+
};
|
|
492
|
+
};
|
|
493
|
+
try {
|
|
494
|
+
const initial = await runAttempt(sessionId);
|
|
495
|
+
if (sessionId &&
|
|
496
|
+
!initial.proc.timedOut &&
|
|
497
|
+
(initial.proc.exitCode ?? 0) !== 0 &&
|
|
498
|
+
isGeminiUnknownSessionError(initial.proc.stdout, initial.proc.stderr)) {
|
|
499
|
+
await onLog("stdout", `[evermore] Gemini resume session "${sessionId}" is unavailable; retrying with a fresh session.\n`);
|
|
500
|
+
const retry = await runAttempt(null);
|
|
501
|
+
return toResult(retry, true, true);
|
|
502
|
+
}
|
|
503
|
+
return toResult(initial);
|
|
504
|
+
}
|
|
505
|
+
finally {
|
|
506
|
+
await Promise.all([
|
|
507
|
+
evermoreBridge?.stop(),
|
|
508
|
+
restoreRemoteWorkspace?.(),
|
|
509
|
+
localSkillsDir ? fs.rm(path.dirname(localSkillsDir), { recursive: true, force: true }).catch(() => undefined) : Promise.resolve(),
|
|
510
|
+
]);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/server/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.remote.test.d.ts","sourceRoot":"","sources":["../../src/server/execute.remote.test.ts"],"names":[],"mappings":""}
|