@rudderhq/agent-runtime-gemini-local 0.1.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/LICENSE +14 -0
- 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 +198 -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 +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -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 +489 -0
- package/dist/server/execute.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 +238 -0
- package/dist/server/parse.js.map +1 -0
- package/dist/server/skills.d.ts +7 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +66 -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 +219 -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 +84 -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 +247 -0
- package/dist/ui/parse-stdout.js.map +1 -0
- package/package.json +61 -0
- package/skills/para-memory-files/SKILL.md +114 -0
- package/skills/para-memory-files/references/schemas.md +35 -0
- package/skills/rudder/SKILL.md +265 -0
- package/skills/rudder/references/api-reference.md +253 -0
- package/skills/rudder/references/cli-reference.md +67 -0
- package/skills/rudder/references/organization-skills.md +155 -0
- package/skills/rudder-create-agent/SKILL.md +166 -0
- package/skills/rudder-create-agent/references/api-reference.md +172 -0
- package/skills/rudder-create-agent/references/cli-reference.md +126 -0
- package/skills/rudder-create-plugin/SKILL.md +103 -0
|
@@ -0,0 +1,489 @@
|
|
|
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 { asBoolean, asNumber, asString, asStringArray, buildRudderEnv, ensureAbsoluteDirectory, ensureCommandResolvable, ensureRudderSkillSymlink, ensureRudderCliInPath, joinPromptSections, ensurePathInEnv, readRudderRuntimeSkillEntries, resolveRudderDesiredSkillNames, removeMaintainerOnlySkillSymlinks, parseObject, redactEnvForLogs, renderTemplate, runChildProcess, selectPromptTemplate, } from "@rudderhq/agent-runtime-utils/server-utils";
|
|
6
|
+
import { DEFAULT_GEMINI_LOCAL_MODEL } from "../index.js";
|
|
7
|
+
import { describeGeminiFailure, detectGeminiAuthRequired, isGeminiTurnLimitResult, isGeminiUnknownSessionError, parseGeminiJsonl, } from "./parse.js";
|
|
8
|
+
import { firstNonEmptyLine } from "./utils.js";
|
|
9
|
+
const __moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const DEFAULT_RUDDER_INSTANCE_ID = "default";
|
|
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 renderRudderEnvNote(env) {
|
|
21
|
+
const rudderKeys = Object.keys(env)
|
|
22
|
+
.filter((key) => key.startsWith("RUDDER_"))
|
|
23
|
+
.sort();
|
|
24
|
+
if (rudderKeys.length === 0)
|
|
25
|
+
return "";
|
|
26
|
+
return [
|
|
27
|
+
"Rudder runtime note:",
|
|
28
|
+
`The following RUDDER_* environment variables are available in this run: ${rudderKeys.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, "RUDDER_API_URL") || !hasNonEmptyEnvValue(env, "RUDDER_API_KEY"))
|
|
36
|
+
return "";
|
|
37
|
+
return [
|
|
38
|
+
"Rudder CLI access note:",
|
|
39
|
+
"Use run_shell_command with the `rudder` CLI for Rudder control-plane work.",
|
|
40
|
+
"Read example:",
|
|
41
|
+
` run_shell_command({ command: "rudder agent me --json" })`,
|
|
42
|
+
"Mutating example:",
|
|
43
|
+
` run_shell_command({ command: "rudder issue checkout {id} --json" })`,
|
|
44
|
+
"",
|
|
45
|
+
"",
|
|
46
|
+
].join("\n");
|
|
47
|
+
}
|
|
48
|
+
function nonEmpty(value) {
|
|
49
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
50
|
+
}
|
|
51
|
+
async function pathExists(candidate) {
|
|
52
|
+
return fs.access(candidate).then(() => true).catch(() => false);
|
|
53
|
+
}
|
|
54
|
+
async function ensureParentDir(target) {
|
|
55
|
+
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
56
|
+
}
|
|
57
|
+
async function ensureSymlink(target, source) {
|
|
58
|
+
const existing = await fs.lstat(target).catch(() => null);
|
|
59
|
+
if (!existing) {
|
|
60
|
+
await ensureParentDir(target);
|
|
61
|
+
await fs.symlink(source, target);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (!existing.isSymbolicLink())
|
|
65
|
+
return;
|
|
66
|
+
const linkedPath = await fs.readlink(target).catch(() => null);
|
|
67
|
+
const resolvedLinkedPath = linkedPath ? path.resolve(path.dirname(target), linkedPath) : null;
|
|
68
|
+
if (resolvedLinkedPath === source)
|
|
69
|
+
return;
|
|
70
|
+
await fs.unlink(target);
|
|
71
|
+
await fs.symlink(source, target);
|
|
72
|
+
}
|
|
73
|
+
function resolveSharedGeminiHomeDir(env) {
|
|
74
|
+
return path.resolve(nonEmpty(env.HOME) ?? os.homedir());
|
|
75
|
+
}
|
|
76
|
+
function resolveManagedGeminiHomeDir(env, orgId) {
|
|
77
|
+
const rudderHome = nonEmpty(env.RUDDER_HOME) ?? path.resolve(os.homedir(), ".rudder");
|
|
78
|
+
const instanceId = nonEmpty(env.RUDDER_INSTANCE_ID) ?? DEFAULT_RUDDER_INSTANCE_ID;
|
|
79
|
+
return path.resolve(rudderHome, "instances", instanceId, "organizations", orgId, "gemini-home");
|
|
80
|
+
}
|
|
81
|
+
function resolveManagedGeminiSkillsDir(homeDir) {
|
|
82
|
+
return path.join(homeDir, ".gemini", "skills");
|
|
83
|
+
}
|
|
84
|
+
async function syncGeminiSharedHomeEntries(sourceHome, targetHome) {
|
|
85
|
+
const sourceGeminiDir = path.join(sourceHome, ".gemini");
|
|
86
|
+
const entries = await fs.readdir(sourceGeminiDir, { withFileTypes: true }).catch(() => []);
|
|
87
|
+
const targetGeminiDir = path.join(targetHome, ".gemini");
|
|
88
|
+
await fs.mkdir(targetGeminiDir, { recursive: true });
|
|
89
|
+
for (const entry of entries) {
|
|
90
|
+
if (entry.name === "skills")
|
|
91
|
+
continue;
|
|
92
|
+
await ensureSymlink(path.join(targetGeminiDir, entry.name), path.join(sourceGeminiDir, entry.name));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async function prepareManagedGeminiHome(env, onLog, orgId) {
|
|
96
|
+
const sourceHome = resolveSharedGeminiHomeDir(env);
|
|
97
|
+
const targetHome = resolveManagedGeminiHomeDir(env, orgId);
|
|
98
|
+
if (targetHome === sourceHome)
|
|
99
|
+
return targetHome;
|
|
100
|
+
await fs.mkdir(resolveManagedGeminiSkillsDir(targetHome), { recursive: true });
|
|
101
|
+
if (await pathExists(path.join(sourceHome, ".gemini"))) {
|
|
102
|
+
await syncGeminiSharedHomeEntries(sourceHome, targetHome);
|
|
103
|
+
}
|
|
104
|
+
await onLog("stdout", `[rudder] Using Rudder-managed Gemini home "${targetHome}" (seeded from "${sourceHome}").\n`);
|
|
105
|
+
return targetHome;
|
|
106
|
+
}
|
|
107
|
+
function geminiSkillsHome() {
|
|
108
|
+
return path.join(os.homedir(), ".gemini", "skills");
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Inject Rudder skills directly into `~/.gemini/skills/` via symlinks.
|
|
112
|
+
* This avoids needing GEMINI_CLI_HOME overrides, so the CLI naturally finds
|
|
113
|
+
* both its auth credentials and the injected skills in the real home directory.
|
|
114
|
+
*/
|
|
115
|
+
async function ensureGeminiSkillsInjected(onLog, skillsEntries, desiredSkillNames, targetSkillsHome) {
|
|
116
|
+
const desiredSet = new Set(desiredSkillNames ?? skillsEntries.map((entry) => entry.key));
|
|
117
|
+
const selectedEntries = skillsEntries.filter((entry) => desiredSet.has(entry.key));
|
|
118
|
+
if (selectedEntries.length === 0)
|
|
119
|
+
return;
|
|
120
|
+
const skillsHome = targetSkillsHome ?? geminiSkillsHome();
|
|
121
|
+
try {
|
|
122
|
+
await fs.mkdir(skillsHome, { recursive: true });
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
await onLog("stderr", `[rudder] Failed to prepare Gemini skills directory ${skillsHome}: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const removedSkills = await removeMaintainerOnlySkillSymlinks(skillsHome, selectedEntries.map((entry) => entry.runtimeName));
|
|
129
|
+
for (const skillName of removedSkills) {
|
|
130
|
+
await onLog("stderr", `[rudder] Removed maintainer-only Gemini skill "${skillName}" from ${skillsHome}\n`);
|
|
131
|
+
}
|
|
132
|
+
for (const entry of selectedEntries) {
|
|
133
|
+
const target = path.join(skillsHome, entry.runtimeName);
|
|
134
|
+
try {
|
|
135
|
+
const result = await ensureRudderSkillSymlink(entry.source, target);
|
|
136
|
+
if (result === "skipped")
|
|
137
|
+
continue;
|
|
138
|
+
await onLog("stderr", `[rudder] ${result === "repaired" ? "Repaired" : "Linked"} Gemini skill: ${entry.key}\n`);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
await onLog("stderr", `[rudder] Failed to link Gemini skill "${entry.key}": ${err instanceof Error ? err.message : String(err)}\n`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export async function execute(ctx) {
|
|
146
|
+
const { runId, agent, runtime, config, context, onLog, onMeta, onSpawn, authToken } = ctx;
|
|
147
|
+
const promptTemplate = selectPromptTemplate(asString(config.promptTemplate, ""), context);
|
|
148
|
+
const command = asString(config.command, "gemini");
|
|
149
|
+
const model = asString(config.model, DEFAULT_GEMINI_LOCAL_MODEL).trim();
|
|
150
|
+
const sandbox = asBoolean(config.sandbox, false);
|
|
151
|
+
const workspaceContext = parseObject(context.rudderWorkspace);
|
|
152
|
+
const workspaceCwd = asString(workspaceContext.cwd, "");
|
|
153
|
+
const workspaceSource = asString(workspaceContext.source, "");
|
|
154
|
+
const workspaceId = asString(workspaceContext.workspaceId, "");
|
|
155
|
+
const workspaceRepoUrl = asString(workspaceContext.repoUrl, "");
|
|
156
|
+
const workspaceRepoRef = asString(workspaceContext.repoRef, "");
|
|
157
|
+
const agentHome = asString(workspaceContext.agentHome, "");
|
|
158
|
+
const agentInstructionsDir = asString(workspaceContext.instructionsDir, "");
|
|
159
|
+
const agentMemoryDir = asString(workspaceContext.memoryDir, "");
|
|
160
|
+
const agentSkillsDir = asString(workspaceContext.agentSkillsDir, "");
|
|
161
|
+
const orgWorkspaceRoot = asString(workspaceContext.orgWorkspaceRoot, "");
|
|
162
|
+
const orgSkillsDir = asString(workspaceContext.orgSkillsDir, "");
|
|
163
|
+
const orgPlansDir = asString(workspaceContext.orgPlansDir, "");
|
|
164
|
+
const workspaceHints = Array.isArray(context.rudderWorkspaces)
|
|
165
|
+
? context.rudderWorkspaces.filter((value) => typeof value === "object" && value !== null)
|
|
166
|
+
: [];
|
|
167
|
+
const configuredCwd = asString(config.cwd, "");
|
|
168
|
+
const useConfiguredInsteadOfAgentHome = workspaceSource === "agent_home" && configuredCwd.length > 0;
|
|
169
|
+
const effectiveWorkspaceCwd = useConfiguredInsteadOfAgentHome ? "" : workspaceCwd;
|
|
170
|
+
const cwd = effectiveWorkspaceCwd || configuredCwd || process.cwd();
|
|
171
|
+
await ensureAbsoluteDirectory(cwd, { createIfMissing: true });
|
|
172
|
+
const envConfig = parseObject(config.env);
|
|
173
|
+
const managedHome = await prepareManagedGeminiHome({
|
|
174
|
+
...process.env,
|
|
175
|
+
...Object.fromEntries(Object.entries(envConfig).filter((entry) => typeof entry[1] === "string")),
|
|
176
|
+
}, onLog, agent.orgId);
|
|
177
|
+
const geminiSkillEntries = await readRudderRuntimeSkillEntries(config, __moduleDir);
|
|
178
|
+
const desiredGeminiSkillNames = resolveRudderDesiredSkillNames(config, geminiSkillEntries);
|
|
179
|
+
await ensureGeminiSkillsInjected(onLog, geminiSkillEntries, desiredGeminiSkillNames, resolveManagedGeminiSkillsDir(managedHome));
|
|
180
|
+
const hasExplicitApiKey = typeof envConfig.RUDDER_API_KEY === "string" && envConfig.RUDDER_API_KEY.trim().length > 0;
|
|
181
|
+
const env = { ...buildRudderEnv(agent) };
|
|
182
|
+
env.HOME = managedHome;
|
|
183
|
+
env.RUDDER_RUN_ID = runId;
|
|
184
|
+
const wakeTaskId = (typeof context.taskId === "string" && context.taskId.trim().length > 0 && context.taskId.trim()) ||
|
|
185
|
+
(typeof context.issueId === "string" && context.issueId.trim().length > 0 && context.issueId.trim()) ||
|
|
186
|
+
null;
|
|
187
|
+
const wakeReason = typeof context.wakeReason === "string" && context.wakeReason.trim().length > 0
|
|
188
|
+
? context.wakeReason.trim()
|
|
189
|
+
: null;
|
|
190
|
+
const wakeCommentId = (typeof context.wakeCommentId === "string" && context.wakeCommentId.trim().length > 0 && context.wakeCommentId.trim()) ||
|
|
191
|
+
(typeof context.commentId === "string" && context.commentId.trim().length > 0 && context.commentId.trim()) ||
|
|
192
|
+
null;
|
|
193
|
+
const approvalId = typeof context.approvalId === "string" && context.approvalId.trim().length > 0
|
|
194
|
+
? context.approvalId.trim()
|
|
195
|
+
: null;
|
|
196
|
+
const approvalStatus = typeof context.approvalStatus === "string" && context.approvalStatus.trim().length > 0
|
|
197
|
+
? context.approvalStatus.trim()
|
|
198
|
+
: null;
|
|
199
|
+
const linkedIssueIds = Array.isArray(context.issueIds)
|
|
200
|
+
? context.issueIds.filter((value) => typeof value === "string" && value.trim().length > 0)
|
|
201
|
+
: [];
|
|
202
|
+
if (wakeTaskId)
|
|
203
|
+
env.RUDDER_TASK_ID = wakeTaskId;
|
|
204
|
+
if (wakeReason)
|
|
205
|
+
env.RUDDER_WAKE_REASON = wakeReason;
|
|
206
|
+
if (wakeCommentId)
|
|
207
|
+
env.RUDDER_WAKE_COMMENT_ID = wakeCommentId;
|
|
208
|
+
if (approvalId)
|
|
209
|
+
env.RUDDER_APPROVAL_ID = approvalId;
|
|
210
|
+
if (approvalStatus)
|
|
211
|
+
env.RUDDER_APPROVAL_STATUS = approvalStatus;
|
|
212
|
+
if (linkedIssueIds.length > 0)
|
|
213
|
+
env.RUDDER_LINKED_ISSUE_IDS = linkedIssueIds.join(",");
|
|
214
|
+
if (effectiveWorkspaceCwd)
|
|
215
|
+
env.RUDDER_WORKSPACE_CWD = effectiveWorkspaceCwd;
|
|
216
|
+
if (workspaceSource)
|
|
217
|
+
env.RUDDER_WORKSPACE_SOURCE = workspaceSource;
|
|
218
|
+
if (workspaceId)
|
|
219
|
+
env.RUDDER_WORKSPACE_ID = workspaceId;
|
|
220
|
+
if (workspaceRepoUrl)
|
|
221
|
+
env.RUDDER_WORKSPACE_REPO_URL = workspaceRepoUrl;
|
|
222
|
+
if (workspaceRepoRef)
|
|
223
|
+
env.RUDDER_WORKSPACE_REPO_REF = workspaceRepoRef;
|
|
224
|
+
if (agentHome) {
|
|
225
|
+
env.AGENT_HOME = agentHome;
|
|
226
|
+
env.RUDDER_AGENT_ROOT = agentHome;
|
|
227
|
+
}
|
|
228
|
+
if (agentInstructionsDir)
|
|
229
|
+
env.RUDDER_AGENT_INSTRUCTIONS_DIR = agentInstructionsDir;
|
|
230
|
+
if (agentMemoryDir)
|
|
231
|
+
env.RUDDER_AGENT_MEMORY_DIR = agentMemoryDir;
|
|
232
|
+
if (agentSkillsDir)
|
|
233
|
+
env.RUDDER_AGENT_SKILLS_DIR = agentSkillsDir;
|
|
234
|
+
if (orgWorkspaceRoot)
|
|
235
|
+
env.RUDDER_ORG_WORKSPACE_ROOT = orgWorkspaceRoot;
|
|
236
|
+
if (orgSkillsDir)
|
|
237
|
+
env.RUDDER_ORG_SKILLS_DIR = orgSkillsDir;
|
|
238
|
+
if (orgPlansDir)
|
|
239
|
+
env.RUDDER_ORG_PLANS_DIR = orgPlansDir;
|
|
240
|
+
if (workspaceHints.length > 0)
|
|
241
|
+
env.RUDDER_WORKSPACES_JSON = JSON.stringify(workspaceHints);
|
|
242
|
+
for (const [key, value] of Object.entries(envConfig)) {
|
|
243
|
+
if (key === "HOME")
|
|
244
|
+
continue;
|
|
245
|
+
if (typeof value === "string")
|
|
246
|
+
env[key] = value;
|
|
247
|
+
}
|
|
248
|
+
env.HOME = managedHome;
|
|
249
|
+
if (!hasExplicitApiKey && authToken) {
|
|
250
|
+
env.RUDDER_API_KEY = authToken;
|
|
251
|
+
}
|
|
252
|
+
const effectiveEnv = Object.fromEntries(Object.entries({ ...process.env, ...env }).filter((entry) => typeof entry[1] === "string"));
|
|
253
|
+
const billingType = resolveGeminiBillingType(effectiveEnv);
|
|
254
|
+
const runtimeEnv = ensurePathInEnv(await ensureRudderCliInPath(__moduleDir, effectiveEnv));
|
|
255
|
+
await ensureCommandResolvable(command, cwd, runtimeEnv);
|
|
256
|
+
const timeoutSec = asNumber(config.timeoutSec, 0);
|
|
257
|
+
const graceSec = asNumber(config.graceSec, 20);
|
|
258
|
+
const extraArgs = (() => {
|
|
259
|
+
const fromExtraArgs = asStringArray(config.extraArgs);
|
|
260
|
+
if (fromExtraArgs.length > 0)
|
|
261
|
+
return fromExtraArgs;
|
|
262
|
+
return asStringArray(config.args);
|
|
263
|
+
})();
|
|
264
|
+
const runtimeSessionParams = parseObject(runtime.sessionParams);
|
|
265
|
+
const runtimeSessionId = asString(runtimeSessionParams.sessionId, runtime.sessionId ?? "");
|
|
266
|
+
const runtimeSessionCwd = asString(runtimeSessionParams.cwd, "");
|
|
267
|
+
const canResumeSession = runtimeSessionId.length > 0 &&
|
|
268
|
+
(runtimeSessionCwd.length === 0 || path.resolve(runtimeSessionCwd) === path.resolve(cwd));
|
|
269
|
+
const sessionId = canResumeSession ? runtimeSessionId : null;
|
|
270
|
+
if (runtimeSessionId && !canResumeSession) {
|
|
271
|
+
await onLog("stdout", `[rudder] Gemini session "${runtimeSessionId}" was saved for cwd "${runtimeSessionCwd}" and will not be resumed in "${cwd}".\n`);
|
|
272
|
+
}
|
|
273
|
+
const instructionsFilePath = asString(config.instructionsFilePath, "").trim();
|
|
274
|
+
const instructionsDir = instructionsFilePath ? `${path.dirname(instructionsFilePath)}/` : "";
|
|
275
|
+
let instructionsPrefix = "";
|
|
276
|
+
if (instructionsFilePath) {
|
|
277
|
+
try {
|
|
278
|
+
const instructionsContents = await fs.readFile(instructionsFilePath, "utf8");
|
|
279
|
+
instructionsPrefix =
|
|
280
|
+
`${instructionsContents}\n\n` +
|
|
281
|
+
`The above agent instructions were loaded from ${instructionsFilePath}. ` +
|
|
282
|
+
`Resolve any relative file references from ${instructionsDir}.\n\n`;
|
|
283
|
+
await onLog("stdout", `[rudder] Loaded agent instructions file: ${instructionsFilePath}\n`);
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
287
|
+
await onLog("stdout", `[rudder] Warning: could not read agent instructions file "${instructionsFilePath}": ${reason}\n`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const commandNotes = (() => {
|
|
291
|
+
const notes = ["Prompt is passed to Gemini via --prompt for non-interactive execution."];
|
|
292
|
+
notes.push("Added --approval-mode yolo for unattended execution.");
|
|
293
|
+
if (!instructionsFilePath)
|
|
294
|
+
return notes;
|
|
295
|
+
if (instructionsPrefix.length > 0) {
|
|
296
|
+
notes.push(`Loaded agent instructions from ${instructionsFilePath}`, `Prepended instructions + path directive to prompt (relative references from ${instructionsDir}).`);
|
|
297
|
+
return notes;
|
|
298
|
+
}
|
|
299
|
+
notes.push(`Configured instructionsFilePath ${instructionsFilePath}, but file could not be read; continuing without injected instructions.`);
|
|
300
|
+
return notes;
|
|
301
|
+
})();
|
|
302
|
+
/**
|
|
303
|
+
* Final prompt assembly order is intentional and shared across runtimes:
|
|
304
|
+
* 1) optional injected instructions prefix,
|
|
305
|
+
* 2) optional bootstrap prompt (only when not resuming a prior session),
|
|
306
|
+
* 3) optional session handoff markdown,
|
|
307
|
+
* 4) runtime/API access notes,
|
|
308
|
+
* 5) heartbeat prompt selected by wake trigger (assignment, mention, retry, fallback).
|
|
309
|
+
*
|
|
310
|
+
* Prompt example (comment mention wakeup):
|
|
311
|
+
* [instructions prefix]
|
|
312
|
+
* [bootstrap prompt]
|
|
313
|
+
* [session handoff note]
|
|
314
|
+
* [runtime/API access notes]
|
|
315
|
+
* You are agent agent-456 (Backend Worker). You were mentioned in a comment and your attention is needed.
|
|
316
|
+
* Comment: "@agent please check timeout handling in retry path."
|
|
317
|
+
*
|
|
318
|
+
* Reasoning: assignment/mention heartbeat templates carry issue/comment context so
|
|
319
|
+
* the agent can start useful work on turn one without spending extra tool calls on
|
|
320
|
+
* "what changed?" discovery.
|
|
321
|
+
*
|
|
322
|
+
* Traceability:
|
|
323
|
+
* - doc/plans/2026-04-07-agent-prompt-context-injection.md
|
|
324
|
+
* - doc/DEVELOPING.md
|
|
325
|
+
*/
|
|
326
|
+
const bootstrapPromptTemplate = asString(config.bootstrapPromptTemplate, "");
|
|
327
|
+
const templateData = {
|
|
328
|
+
agentId: agent.id,
|
|
329
|
+
orgId: agent.orgId,
|
|
330
|
+
runId,
|
|
331
|
+
organization: { id: agent.orgId },
|
|
332
|
+
agent,
|
|
333
|
+
run: {
|
|
334
|
+
id: runId,
|
|
335
|
+
source: context.wakeSource ?? "on_demand",
|
|
336
|
+
wakeReason: context.wakeReason ?? null,
|
|
337
|
+
},
|
|
338
|
+
context,
|
|
339
|
+
// Issue and comment context for enriched prompts
|
|
340
|
+
issue: context.issue ?? null,
|
|
341
|
+
comment: context.comment ?? null,
|
|
342
|
+
wakeReason: context.wakeReason ?? null,
|
|
343
|
+
wakeSource: context.wakeSource ?? null,
|
|
344
|
+
};
|
|
345
|
+
const renderedPrompt = renderTemplate(promptTemplate, templateData);
|
|
346
|
+
const renderedBootstrapPrompt = !sessionId && bootstrapPromptTemplate.trim().length > 0
|
|
347
|
+
? renderTemplate(bootstrapPromptTemplate, templateData).trim()
|
|
348
|
+
: "";
|
|
349
|
+
const sessionHandoffNote = asString(context.rudderSessionHandoffMarkdown, "").trim();
|
|
350
|
+
const rudderEnvNote = renderRudderEnvNote(env);
|
|
351
|
+
const apiAccessNote = renderApiAccessNote(env);
|
|
352
|
+
const prompt = joinPromptSections([
|
|
353
|
+
instructionsPrefix,
|
|
354
|
+
renderedBootstrapPrompt,
|
|
355
|
+
sessionHandoffNote,
|
|
356
|
+
rudderEnvNote,
|
|
357
|
+
apiAccessNote,
|
|
358
|
+
renderedPrompt,
|
|
359
|
+
]);
|
|
360
|
+
const promptMetrics = {
|
|
361
|
+
promptChars: prompt.length,
|
|
362
|
+
instructionsChars: instructionsPrefix.length,
|
|
363
|
+
bootstrapPromptChars: renderedBootstrapPrompt.length,
|
|
364
|
+
sessionHandoffChars: sessionHandoffNote.length,
|
|
365
|
+
runtimeNoteChars: rudderEnvNote.length + apiAccessNote.length,
|
|
366
|
+
heartbeatPromptChars: renderedPrompt.length,
|
|
367
|
+
};
|
|
368
|
+
const buildArgs = (resumeSessionId) => {
|
|
369
|
+
const args = ["--output-format", "stream-json"];
|
|
370
|
+
if (resumeSessionId)
|
|
371
|
+
args.push("--resume", resumeSessionId);
|
|
372
|
+
if (model && model !== DEFAULT_GEMINI_LOCAL_MODEL)
|
|
373
|
+
args.push("--model", model);
|
|
374
|
+
args.push("--approval-mode", "yolo");
|
|
375
|
+
if (sandbox) {
|
|
376
|
+
args.push("--sandbox");
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
args.push("--sandbox=none");
|
|
380
|
+
}
|
|
381
|
+
if (extraArgs.length > 0)
|
|
382
|
+
args.push(...extraArgs);
|
|
383
|
+
args.push("--prompt", prompt);
|
|
384
|
+
return args;
|
|
385
|
+
};
|
|
386
|
+
const runAttempt = async (resumeSessionId) => {
|
|
387
|
+
const args = buildArgs(resumeSessionId);
|
|
388
|
+
if (onMeta) {
|
|
389
|
+
await onMeta({
|
|
390
|
+
agentRuntimeType: "gemini_local",
|
|
391
|
+
command,
|
|
392
|
+
cwd,
|
|
393
|
+
commandNotes,
|
|
394
|
+
commandArgs: args.map((value, index) => (index === args.length - 1 ? `<prompt ${prompt.length} chars>` : value)),
|
|
395
|
+
env: redactEnvForLogs(env),
|
|
396
|
+
prompt,
|
|
397
|
+
promptMetrics,
|
|
398
|
+
context,
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
const proc = await runChildProcess(runId, command, args, {
|
|
402
|
+
cwd,
|
|
403
|
+
env,
|
|
404
|
+
timeoutSec,
|
|
405
|
+
graceSec,
|
|
406
|
+
onSpawn,
|
|
407
|
+
abortSignal: ctx.abortSignal,
|
|
408
|
+
onLog,
|
|
409
|
+
});
|
|
410
|
+
return {
|
|
411
|
+
proc,
|
|
412
|
+
parsed: parseGeminiJsonl(proc.stdout),
|
|
413
|
+
};
|
|
414
|
+
};
|
|
415
|
+
const toResult = (attempt, clearSessionOnMissingSession = false, isRetry = false) => {
|
|
416
|
+
const authMeta = detectGeminiAuthRequired({
|
|
417
|
+
parsed: attempt.parsed.resultEvent,
|
|
418
|
+
stdout: attempt.proc.stdout,
|
|
419
|
+
stderr: attempt.proc.stderr,
|
|
420
|
+
});
|
|
421
|
+
if (attempt.proc.timedOut) {
|
|
422
|
+
return {
|
|
423
|
+
exitCode: attempt.proc.exitCode,
|
|
424
|
+
signal: attempt.proc.signal,
|
|
425
|
+
timedOut: true,
|
|
426
|
+
errorMessage: `Timed out after ${timeoutSec}s`,
|
|
427
|
+
errorCode: authMeta.requiresAuth ? "gemini_auth_required" : null,
|
|
428
|
+
clearSession: clearSessionOnMissingSession,
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
const clearSessionForTurnLimit = isGeminiTurnLimitResult(attempt.parsed.resultEvent, attempt.proc.exitCode);
|
|
432
|
+
// On retry, don't fall back to old session ID — the old session was stale
|
|
433
|
+
const canFallbackToRuntimeSession = !isRetry;
|
|
434
|
+
const resolvedSessionId = attempt.parsed.sessionId
|
|
435
|
+
?? (canFallbackToRuntimeSession ? (runtimeSessionId ?? runtime.sessionId ?? null) : null);
|
|
436
|
+
const resolvedSessionParams = resolvedSessionId
|
|
437
|
+
? {
|
|
438
|
+
sessionId: resolvedSessionId,
|
|
439
|
+
cwd,
|
|
440
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
441
|
+
...(workspaceRepoUrl ? { repoUrl: workspaceRepoUrl } : {}),
|
|
442
|
+
...(workspaceRepoRef ? { repoRef: workspaceRepoRef } : {}),
|
|
443
|
+
}
|
|
444
|
+
: null;
|
|
445
|
+
const parsedError = typeof attempt.parsed.errorMessage === "string" ? attempt.parsed.errorMessage.trim() : "";
|
|
446
|
+
const stderrLine = firstNonEmptyLine(attempt.proc.stderr);
|
|
447
|
+
const structuredFailure = attempt.parsed.resultEvent
|
|
448
|
+
? describeGeminiFailure(attempt.parsed.resultEvent)
|
|
449
|
+
: null;
|
|
450
|
+
const fallbackErrorMessage = parsedError ||
|
|
451
|
+
structuredFailure ||
|
|
452
|
+
stderrLine ||
|
|
453
|
+
`Gemini exited with code ${attempt.proc.exitCode ?? -1}`;
|
|
454
|
+
return {
|
|
455
|
+
exitCode: attempt.proc.exitCode,
|
|
456
|
+
signal: attempt.proc.signal,
|
|
457
|
+
timedOut: false,
|
|
458
|
+
errorMessage: (attempt.proc.exitCode ?? 0) === 0 ? null : fallbackErrorMessage,
|
|
459
|
+
errorCode: (attempt.proc.exitCode ?? 0) !== 0 && authMeta.requiresAuth ? "gemini_auth_required" : null,
|
|
460
|
+
usage: attempt.parsed.usage,
|
|
461
|
+
sessionId: resolvedSessionId,
|
|
462
|
+
sessionParams: resolvedSessionParams,
|
|
463
|
+
sessionDisplayId: resolvedSessionId,
|
|
464
|
+
provider: "google",
|
|
465
|
+
biller: "google",
|
|
466
|
+
model,
|
|
467
|
+
billingType,
|
|
468
|
+
costUsd: attempt.parsed.costUsd,
|
|
469
|
+
resultJson: attempt.parsed.resultEvent ?? {
|
|
470
|
+
stdout: attempt.proc.stdout,
|
|
471
|
+
stderr: attempt.proc.stderr,
|
|
472
|
+
},
|
|
473
|
+
summary: attempt.parsed.summary,
|
|
474
|
+
question: attempt.parsed.question,
|
|
475
|
+
clearSession: clearSessionForTurnLimit || Boolean(clearSessionOnMissingSession && !resolvedSessionId),
|
|
476
|
+
};
|
|
477
|
+
};
|
|
478
|
+
const initial = await runAttempt(sessionId);
|
|
479
|
+
if (sessionId &&
|
|
480
|
+
!initial.proc.timedOut &&
|
|
481
|
+
(initial.proc.exitCode ?? 0) !== 0 &&
|
|
482
|
+
isGeminiUnknownSessionError(initial.proc.stdout, initial.proc.stderr)) {
|
|
483
|
+
await onLog("stdout", `[rudder] Gemini resume session "${sessionId}" is unavailable; retrying with a fresh session.\n`);
|
|
484
|
+
const retry = await runAttempt(null);
|
|
485
|
+
return toResult(retry, true, true);
|
|
486
|
+
}
|
|
487
|
+
return toResult(initial);
|
|
488
|
+
}
|
|
489
|
+
//# 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,7 @@
|
|
|
1
|
+
export { execute } from "./execute.js";
|
|
2
|
+
export { listGeminiSkills, syncGeminiSkills } from "./skills.js";
|
|
3
|
+
export { testEnvironment } from "./test.js";
|
|
4
|
+
export { parseGeminiJsonl, isGeminiUnknownSessionError, describeGeminiFailure, detectGeminiAuthRequired, isGeminiTurnLimitResult, } from "./parse.js";
|
|
5
|
+
import type { AgentRuntimeSessionCodec } from "@rudderhq/agent-runtime-utils";
|
|
6
|
+
export declare const sessionCodec: AgentRuntimeSessionCodec;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAM9E,eAAO,MAAM,YAAY,EAAE,wBAsD1B,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export { execute } from "./execute.js";
|
|
2
|
+
export { listGeminiSkills, syncGeminiSkills } from "./skills.js";
|
|
3
|
+
export { testEnvironment } from "./test.js";
|
|
4
|
+
export { parseGeminiJsonl, isGeminiUnknownSessionError, describeGeminiFailure, detectGeminiAuthRequired, isGeminiTurnLimitResult, } from "./parse.js";
|
|
5
|
+
function readNonEmptyString(value) {
|
|
6
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
7
|
+
}
|
|
8
|
+
export const sessionCodec = {
|
|
9
|
+
deserialize(raw) {
|
|
10
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
11
|
+
return null;
|
|
12
|
+
const record = raw;
|
|
13
|
+
const sessionId = readNonEmptyString(record.sessionId) ??
|
|
14
|
+
readNonEmptyString(record.session_id) ??
|
|
15
|
+
readNonEmptyString(record.sessionID);
|
|
16
|
+
if (!sessionId)
|
|
17
|
+
return null;
|
|
18
|
+
const cwd = readNonEmptyString(record.cwd) ??
|
|
19
|
+
readNonEmptyString(record.workdir) ??
|
|
20
|
+
readNonEmptyString(record.folder);
|
|
21
|
+
const workspaceId = readNonEmptyString(record.workspaceId) ?? readNonEmptyString(record.workspace_id);
|
|
22
|
+
const repoUrl = readNonEmptyString(record.repoUrl) ?? readNonEmptyString(record.repo_url);
|
|
23
|
+
const repoRef = readNonEmptyString(record.repoRef) ?? readNonEmptyString(record.repo_ref);
|
|
24
|
+
return {
|
|
25
|
+
sessionId,
|
|
26
|
+
...(cwd ? { cwd } : {}),
|
|
27
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
28
|
+
...(repoUrl ? { repoUrl } : {}),
|
|
29
|
+
...(repoRef ? { repoRef } : {}),
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
serialize(params) {
|
|
33
|
+
if (!params)
|
|
34
|
+
return null;
|
|
35
|
+
const sessionId = readNonEmptyString(params.sessionId) ??
|
|
36
|
+
readNonEmptyString(params.session_id) ??
|
|
37
|
+
readNonEmptyString(params.sessionID);
|
|
38
|
+
if (!sessionId)
|
|
39
|
+
return null;
|
|
40
|
+
const cwd = readNonEmptyString(params.cwd) ??
|
|
41
|
+
readNonEmptyString(params.workdir) ??
|
|
42
|
+
readNonEmptyString(params.folder);
|
|
43
|
+
const workspaceId = readNonEmptyString(params.workspaceId) ?? readNonEmptyString(params.workspace_id);
|
|
44
|
+
const repoUrl = readNonEmptyString(params.repoUrl) ?? readNonEmptyString(params.repo_url);
|
|
45
|
+
const repoRef = readNonEmptyString(params.repoRef) ?? readNonEmptyString(params.repo_ref);
|
|
46
|
+
return {
|
|
47
|
+
sessionId,
|
|
48
|
+
...(cwd ? { cwd } : {}),
|
|
49
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
50
|
+
...(repoUrl ? { repoUrl } : {}),
|
|
51
|
+
...(repoRef ? { repoRef } : {}),
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
getDisplayId(params) {
|
|
55
|
+
if (!params)
|
|
56
|
+
return null;
|
|
57
|
+
return (readNonEmptyString(params.sessionId) ??
|
|
58
|
+
readNonEmptyString(params.session_id) ??
|
|
59
|
+
readNonEmptyString(params.sessionID));
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export declare function parseGeminiJsonl(stdout: string): {
|
|
2
|
+
sessionId: string | null;
|
|
3
|
+
summary: string;
|
|
4
|
+
usage: {
|
|
5
|
+
inputTokens: number;
|
|
6
|
+
cachedInputTokens: number;
|
|
7
|
+
outputTokens: number;
|
|
8
|
+
};
|
|
9
|
+
costUsd: number | null;
|
|
10
|
+
errorMessage: string | null;
|
|
11
|
+
resultEvent: Record<string, unknown> | null;
|
|
12
|
+
question: {
|
|
13
|
+
prompt: string;
|
|
14
|
+
choices: Array<{
|
|
15
|
+
key: string;
|
|
16
|
+
label: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
}>;
|
|
19
|
+
} | null;
|
|
20
|
+
};
|
|
21
|
+
export declare function isGeminiUnknownSessionError(stdout: string, stderr: string): boolean;
|
|
22
|
+
export declare function describeGeminiFailure(parsed: Record<string, unknown>): string | null;
|
|
23
|
+
export declare function detectGeminiAuthRequired(input: {
|
|
24
|
+
parsed: Record<string, unknown> | null;
|
|
25
|
+
stdout: string;
|
|
26
|
+
stderr: string;
|
|
27
|
+
}): {
|
|
28
|
+
requiresAuth: boolean;
|
|
29
|
+
};
|
|
30
|
+
export declare function detectGeminiQuotaExhausted(input: {
|
|
31
|
+
parsed: Record<string, unknown> | null;
|
|
32
|
+
stdout: string;
|
|
33
|
+
stderr: string;
|
|
34
|
+
}): {
|
|
35
|
+
exhausted: boolean;
|
|
36
|
+
};
|
|
37
|
+
export declare function isGeminiTurnLimitResult(parsed: Record<string, unknown> | null | undefined, exitCode?: number | null): boolean;
|
|
38
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"AA0EA,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;gBAMrB,MAAM;iBAAW,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;;EAkGrG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUnF;AA+BD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CASpF;AAMD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,YAAY,EAAE,OAAO,CAAA;CAAE,CAU5B;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,CAUzB;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EAClD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAST"}
|