@rudderhq/agent-runtime-pi-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.
Files changed (58) hide show
  1. package/LICENSE +14 -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 +99 -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 +8 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +41 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/server/execute.d.ts +3 -0
  15. package/dist/server/execute.d.ts.map +1 -0
  16. package/dist/server/execute.js +548 -0
  17. package/dist/server/execute.js.map +1 -0
  18. package/dist/server/index.d.ts +8 -0
  19. package/dist/server/index.d.ts.map +1 -0
  20. package/dist/server/index.js +51 -0
  21. package/dist/server/index.js.map +1 -0
  22. package/dist/server/models.d.ts +20 -0
  23. package/dist/server/models.d.ts.map +1 -0
  24. package/dist/server/models.js +161 -0
  25. package/dist/server/models.js.map +1 -0
  26. package/dist/server/models.test.d.ts +2 -0
  27. package/dist/server/models.test.d.ts.map +1 -0
  28. package/dist/server/models.test.js +22 -0
  29. package/dist/server/models.test.js.map +1 -0
  30. package/dist/server/parse.d.ts +23 -0
  31. package/dist/server/parse.d.ts.map +1 -0
  32. package/dist/server/parse.js +180 -0
  33. package/dist/server/parse.js.map +1 -0
  34. package/dist/server/parse.test.d.ts +2 -0
  35. package/dist/server/parse.test.d.ts.map +1 -0
  36. package/dist/server/parse.test.js +206 -0
  37. package/dist/server/parse.test.js.map +1 -0
  38. package/dist/server/skills.d.ts +7 -0
  39. package/dist/server/skills.d.ts.map +1 -0
  40. package/dist/server/skills.js +66 -0
  41. package/dist/server/skills.js.map +1 -0
  42. package/dist/server/test.d.ts +3 -0
  43. package/dist/server/test.d.ts.map +1 -0
  44. package/dist/server/test.js +270 -0
  45. package/dist/server/test.js.map +1 -0
  46. package/dist/ui/build-config.d.ts +3 -0
  47. package/dist/ui/build-config.d.ts.map +1 -0
  48. package/dist/ui/build-config.js +82 -0
  49. package/dist/ui/build-config.js.map +1 -0
  50. package/dist/ui/index.d.ts +3 -0
  51. package/dist/ui/index.d.ts.map +1 -0
  52. package/dist/ui/index.js +3 -0
  53. package/dist/ui/index.js.map +1 -0
  54. package/dist/ui/parse-stdout.d.ts +3 -0
  55. package/dist/ui/parse-stdout.d.ts.map +1 -0
  56. package/dist/ui/parse-stdout.js +163 -0
  57. package/dist/ui/parse-stdout.js.map +1 -0
  58. package/package.json +60 -0
@@ -0,0 +1,548 @@
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 { inferOpenAiCompatibleBiller } from "@rudderhq/agent-runtime-utils";
6
+ import { asString, asNumber, asStringArray, parseObject, buildRudderEnv, joinPromptSections, redactEnvForLogs, ensureAbsoluteDirectory, ensureCommandResolvable, ensureRudderSkillSymlink, ensureRudderCliInPath, ensurePathInEnv, readRudderRuntimeSkillEntries, resolveRudderDesiredSkillNames, removeMaintainerOnlySkillSymlinks, renderTemplate, runChildProcess, selectPromptTemplate, } from "@rudderhq/agent-runtime-utils/server-utils";
7
+ import { isPiUnknownSessionError, parsePiJsonl } from "./parse.js";
8
+ import { ensurePiModelConfiguredAndAvailable } from "./models.js";
9
+ const __moduleDir = path.dirname(fileURLToPath(import.meta.url));
10
+ const DEFAULT_RUDDER_INSTANCE_ID = "default";
11
+ function firstNonEmptyLine(text) {
12
+ return (text
13
+ .split(/\r?\n/)
14
+ .map((line) => line.trim())
15
+ .find(Boolean) ?? "");
16
+ }
17
+ function parseModelProvider(model) {
18
+ if (!model)
19
+ return null;
20
+ const trimmed = model.trim();
21
+ if (!trimmed.includes("/"))
22
+ return null;
23
+ return trimmed.slice(0, trimmed.indexOf("/")).trim() || null;
24
+ }
25
+ function parseModelId(model) {
26
+ if (!model)
27
+ return null;
28
+ const trimmed = model.trim();
29
+ if (!trimmed.includes("/"))
30
+ return trimmed || null;
31
+ return trimmed.slice(trimmed.indexOf("/") + 1).trim() || null;
32
+ }
33
+ function nonEmpty(value) {
34
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
35
+ }
36
+ async function pathExists(candidate) {
37
+ return fs.access(candidate).then(() => true).catch(() => false);
38
+ }
39
+ async function ensureParentDir(target) {
40
+ await fs.mkdir(path.dirname(target), { recursive: true });
41
+ }
42
+ async function ensureSymlink(target, source) {
43
+ const existing = await fs.lstat(target).catch(() => null);
44
+ if (!existing) {
45
+ await ensureParentDir(target);
46
+ await fs.symlink(source, target);
47
+ return;
48
+ }
49
+ if (!existing.isSymbolicLink())
50
+ return;
51
+ const linkedPath = await fs.readlink(target).catch(() => null);
52
+ const resolvedLinkedPath = linkedPath ? path.resolve(path.dirname(target), linkedPath) : null;
53
+ if (resolvedLinkedPath === source)
54
+ return;
55
+ await fs.unlink(target);
56
+ await fs.symlink(source, target);
57
+ }
58
+ function resolveSharedPiHomeDir(env) {
59
+ return path.resolve(nonEmpty(env.HOME) ?? os.homedir());
60
+ }
61
+ function resolveManagedPiHomeDir(env, orgId) {
62
+ const rudderHome = nonEmpty(env.RUDDER_HOME) ?? path.resolve(os.homedir(), ".rudder");
63
+ const instanceId = nonEmpty(env.RUDDER_INSTANCE_ID) ?? DEFAULT_RUDDER_INSTANCE_ID;
64
+ return path.resolve(rudderHome, "instances", instanceId, "organizations", orgId, "pi-home");
65
+ }
66
+ function resolvePiRoot(homeDir) {
67
+ return path.join(homeDir, ".pi");
68
+ }
69
+ function resolvePiSessionsDir(homeDir) {
70
+ return path.join(resolvePiRoot(homeDir), "paperclips");
71
+ }
72
+ function resolvePiSkillsDir(homeDir) {
73
+ return path.join(resolvePiRoot(homeDir), "agent", "skills");
74
+ }
75
+ async function syncPiSharedHomeEntries(sourceHome, targetHome) {
76
+ const sourcePiDir = resolvePiRoot(sourceHome);
77
+ const targetPiDir = resolvePiRoot(targetHome);
78
+ await fs.mkdir(targetPiDir, { recursive: true });
79
+ const topEntries = await fs.readdir(sourcePiDir, { withFileTypes: true }).catch(() => []);
80
+ for (const entry of topEntries) {
81
+ if (entry.name === "agent" || entry.name === "paperclips")
82
+ continue;
83
+ await ensureSymlink(path.join(targetPiDir, entry.name), path.join(sourcePiDir, entry.name));
84
+ }
85
+ const sourceAgentDir = path.join(sourcePiDir, "agent");
86
+ if (!(await pathExists(sourceAgentDir)))
87
+ return;
88
+ const targetAgentDir = path.join(targetPiDir, "agent");
89
+ await fs.mkdir(targetAgentDir, { recursive: true });
90
+ const agentEntries = await fs.readdir(sourceAgentDir, { withFileTypes: true }).catch(() => []);
91
+ for (const entry of agentEntries) {
92
+ if (entry.name === "skills")
93
+ continue;
94
+ await ensureSymlink(path.join(targetAgentDir, entry.name), path.join(sourceAgentDir, entry.name));
95
+ }
96
+ }
97
+ async function prepareManagedPiHome(env, onLog, orgId) {
98
+ const sourceHome = resolveSharedPiHomeDir(env);
99
+ const targetHome = resolveManagedPiHomeDir(env, orgId);
100
+ if (targetHome === sourceHome)
101
+ return targetHome;
102
+ await fs.mkdir(resolvePiSkillsDir(targetHome), { recursive: true });
103
+ await fs.mkdir(resolvePiSessionsDir(targetHome), { recursive: true });
104
+ if (await pathExists(resolvePiRoot(sourceHome))) {
105
+ await syncPiSharedHomeEntries(sourceHome, targetHome);
106
+ }
107
+ await onLog("stdout", `[rudder] Using Rudder-managed Pi home "${targetHome}" (seeded from "${sourceHome}").\n`);
108
+ return targetHome;
109
+ }
110
+ async function ensurePiSkillsInjected(onLog, skillsEntries, skillsDir, desiredSkillNames) {
111
+ const desiredSet = new Set(desiredSkillNames ?? skillsEntries.map((entry) => entry.key));
112
+ const selectedEntries = skillsEntries.filter((entry) => desiredSet.has(entry.key));
113
+ if (selectedEntries.length === 0)
114
+ return;
115
+ await fs.mkdir(skillsDir, { recursive: true });
116
+ const removedSkills = await removeMaintainerOnlySkillSymlinks(skillsDir, selectedEntries.map((entry) => entry.runtimeName));
117
+ for (const skillName of removedSkills) {
118
+ await onLog("stderr", `[rudder] Removed maintainer-only Pi skill "${skillName}" from ${skillsDir}\n`);
119
+ }
120
+ for (const entry of selectedEntries) {
121
+ const target = path.join(skillsDir, entry.runtimeName);
122
+ try {
123
+ const result = await ensureRudderSkillSymlink(entry.source, target);
124
+ if (result === "skipped")
125
+ continue;
126
+ await onLog("stderr", `[rudder] ${result === "repaired" ? "Repaired" : "Injected"} Pi skill "${entry.runtimeName}" into ${skillsDir}\n`);
127
+ }
128
+ catch (err) {
129
+ await onLog("stderr", `[rudder] Failed to inject Pi skill "${entry.runtimeName}" into ${skillsDir}: ${err instanceof Error ? err.message : String(err)}\n`);
130
+ }
131
+ }
132
+ }
133
+ function resolvePiBiller(env, provider) {
134
+ return inferOpenAiCompatibleBiller(env, null) ?? provider ?? "unknown";
135
+ }
136
+ async function ensureSessionsDir(sessionsDir) {
137
+ await fs.mkdir(sessionsDir, { recursive: true });
138
+ return sessionsDir;
139
+ }
140
+ function buildSessionPath(sessionsDir, agentId, timestamp) {
141
+ const safeTimestamp = timestamp.replace(/[:.]/g, "-");
142
+ return path.join(sessionsDir, `${safeTimestamp}-${agentId}.jsonl`);
143
+ }
144
+ export async function execute(ctx) {
145
+ const { runId, agent, runtime, config, context, onLog, onMeta, onSpawn, authToken } = ctx;
146
+ const promptTemplate = selectPromptTemplate(asString(config.promptTemplate, ""), context);
147
+ const command = asString(config.command, "pi");
148
+ const model = asString(config.model, "").trim();
149
+ const thinking = asString(config.thinking, "").trim();
150
+ // Parse model into provider and model id
151
+ const provider = parseModelProvider(model);
152
+ const modelId = parseModelId(model);
153
+ const workspaceContext = parseObject(context.rudderWorkspace);
154
+ const workspaceCwd = asString(workspaceContext.cwd, "");
155
+ const workspaceSource = asString(workspaceContext.source, "");
156
+ const workspaceId = asString(workspaceContext.workspaceId, "");
157
+ const workspaceRepoUrl = asString(workspaceContext.repoUrl, "");
158
+ const workspaceRepoRef = asString(workspaceContext.repoRef, "");
159
+ const agentHome = asString(workspaceContext.agentHome, "");
160
+ const agentInstructionsDir = asString(workspaceContext.instructionsDir, "");
161
+ const agentMemoryDir = asString(workspaceContext.memoryDir, "");
162
+ const agentSkillsDir = asString(workspaceContext.agentSkillsDir, "");
163
+ const orgWorkspaceRoot = asString(workspaceContext.orgWorkspaceRoot, "");
164
+ const orgSkillsDir = asString(workspaceContext.orgSkillsDir, "");
165
+ const orgPlansDir = asString(workspaceContext.orgPlansDir, "");
166
+ const workspaceHints = Array.isArray(context.rudderWorkspaces)
167
+ ? context.rudderWorkspaces.filter((value) => typeof value === "object" && value !== null)
168
+ : [];
169
+ const configuredCwd = asString(config.cwd, "");
170
+ const useConfiguredInsteadOfAgentHome = workspaceSource === "agent_home" && configuredCwd.length > 0;
171
+ const effectiveWorkspaceCwd = useConfiguredInsteadOfAgentHome ? "" : workspaceCwd;
172
+ const cwd = effectiveWorkspaceCwd || configuredCwd || process.cwd();
173
+ await ensureAbsoluteDirectory(cwd, { createIfMissing: true });
174
+ const envConfig = parseObject(config.env);
175
+ const managedHome = await prepareManagedPiHome({
176
+ ...process.env,
177
+ ...Object.fromEntries(Object.entries(envConfig).filter((entry) => typeof entry[1] === "string")),
178
+ }, onLog, agent.orgId);
179
+ const sessionsDir = resolvePiSessionsDir(managedHome);
180
+ const skillsDir = resolvePiSkillsDir(managedHome);
181
+ // Ensure sessions directory exists
182
+ await ensureSessionsDir(sessionsDir);
183
+ // Inject skills
184
+ const piSkillEntries = await readRudderRuntimeSkillEntries(config, __moduleDir);
185
+ const desiredPiSkillNames = resolveRudderDesiredSkillNames(config, piSkillEntries);
186
+ await ensurePiSkillsInjected(onLog, piSkillEntries, skillsDir, desiredPiSkillNames);
187
+ // Build environment
188
+ const hasExplicitApiKey = typeof envConfig.RUDDER_API_KEY === "string" && envConfig.RUDDER_API_KEY.trim().length > 0;
189
+ const env = { ...buildRudderEnv(agent) };
190
+ env.HOME = managedHome;
191
+ env.RUDDER_RUN_ID = runId;
192
+ const wakeTaskId = (typeof context.taskId === "string" && context.taskId.trim().length > 0 && context.taskId.trim()) ||
193
+ (typeof context.issueId === "string" && context.issueId.trim().length > 0 && context.issueId.trim()) ||
194
+ null;
195
+ const wakeReason = typeof context.wakeReason === "string" && context.wakeReason.trim().length > 0
196
+ ? context.wakeReason.trim()
197
+ : null;
198
+ const wakeCommentId = (typeof context.wakeCommentId === "string" && context.wakeCommentId.trim().length > 0 && context.wakeCommentId.trim()) ||
199
+ (typeof context.commentId === "string" && context.commentId.trim().length > 0 && context.commentId.trim()) ||
200
+ null;
201
+ const approvalId = typeof context.approvalId === "string" && context.approvalId.trim().length > 0
202
+ ? context.approvalId.trim()
203
+ : null;
204
+ const approvalStatus = typeof context.approvalStatus === "string" && context.approvalStatus.trim().length > 0
205
+ ? context.approvalStatus.trim()
206
+ : null;
207
+ const linkedIssueIds = Array.isArray(context.issueIds)
208
+ ? context.issueIds.filter((value) => typeof value === "string" && value.trim().length > 0)
209
+ : [];
210
+ if (wakeTaskId)
211
+ env.RUDDER_TASK_ID = wakeTaskId;
212
+ if (wakeReason)
213
+ env.RUDDER_WAKE_REASON = wakeReason;
214
+ if (wakeCommentId)
215
+ env.RUDDER_WAKE_COMMENT_ID = wakeCommentId;
216
+ if (approvalId)
217
+ env.RUDDER_APPROVAL_ID = approvalId;
218
+ if (approvalStatus)
219
+ env.RUDDER_APPROVAL_STATUS = approvalStatus;
220
+ if (linkedIssueIds.length > 0)
221
+ env.RUDDER_LINKED_ISSUE_IDS = linkedIssueIds.join(",");
222
+ if (workspaceCwd)
223
+ env.RUDDER_WORKSPACE_CWD = workspaceCwd;
224
+ if (workspaceSource)
225
+ env.RUDDER_WORKSPACE_SOURCE = workspaceSource;
226
+ if (workspaceId)
227
+ env.RUDDER_WORKSPACE_ID = workspaceId;
228
+ if (workspaceRepoUrl)
229
+ env.RUDDER_WORKSPACE_REPO_URL = workspaceRepoUrl;
230
+ if (workspaceRepoRef)
231
+ env.RUDDER_WORKSPACE_REPO_REF = workspaceRepoRef;
232
+ if (agentHome) {
233
+ env.AGENT_HOME = agentHome;
234
+ env.RUDDER_AGENT_ROOT = agentHome;
235
+ }
236
+ if (agentInstructionsDir)
237
+ env.RUDDER_AGENT_INSTRUCTIONS_DIR = agentInstructionsDir;
238
+ if (agentMemoryDir)
239
+ env.RUDDER_AGENT_MEMORY_DIR = agentMemoryDir;
240
+ if (agentSkillsDir)
241
+ env.RUDDER_AGENT_SKILLS_DIR = agentSkillsDir;
242
+ if (orgWorkspaceRoot)
243
+ env.RUDDER_ORG_WORKSPACE_ROOT = orgWorkspaceRoot;
244
+ if (orgSkillsDir)
245
+ env.RUDDER_ORG_SKILLS_DIR = orgSkillsDir;
246
+ if (orgPlansDir)
247
+ env.RUDDER_ORG_PLANS_DIR = orgPlansDir;
248
+ if (workspaceHints.length > 0)
249
+ env.RUDDER_WORKSPACES_JSON = JSON.stringify(workspaceHints);
250
+ for (const [key, value] of Object.entries(envConfig)) {
251
+ if (key === "HOME")
252
+ continue;
253
+ if (typeof value === "string")
254
+ env[key] = value;
255
+ }
256
+ env.HOME = managedHome;
257
+ if (!hasExplicitApiKey && authToken) {
258
+ env.RUDDER_API_KEY = authToken;
259
+ }
260
+ const runtimeEnv = Object.fromEntries(Object.entries(ensurePathInEnv(await ensureRudderCliInPath(__moduleDir, { ...process.env, ...env }))).filter((entry) => typeof entry[1] === "string"));
261
+ await ensureCommandResolvable(command, cwd, runtimeEnv);
262
+ // Validate model is available before execution
263
+ await ensurePiModelConfiguredAndAvailable({
264
+ model,
265
+ command,
266
+ cwd,
267
+ env: runtimeEnv,
268
+ });
269
+ const timeoutSec = asNumber(config.timeoutSec, 0);
270
+ const graceSec = asNumber(config.graceSec, 20);
271
+ const extraArgs = (() => {
272
+ const fromExtraArgs = asStringArray(config.extraArgs);
273
+ if (fromExtraArgs.length > 0)
274
+ return fromExtraArgs;
275
+ return asStringArray(config.args);
276
+ })();
277
+ // Handle session
278
+ const runtimeSessionParams = parseObject(runtime.sessionParams);
279
+ const runtimeSessionId = asString(runtimeSessionParams.sessionId, runtime.sessionId ?? "");
280
+ const runtimeSessionCwd = asString(runtimeSessionParams.cwd, "");
281
+ const canResumeSession = runtimeSessionId.length > 0 &&
282
+ (runtimeSessionCwd.length === 0 || path.resolve(runtimeSessionCwd) === path.resolve(cwd));
283
+ const sessionPath = canResumeSession
284
+ ? runtimeSessionId
285
+ : buildSessionPath(sessionsDir, agent.id, new Date().toISOString());
286
+ if (runtimeSessionId && !canResumeSession) {
287
+ await onLog("stdout", `[rudder] Pi session "${runtimeSessionId}" was saved for cwd "${runtimeSessionCwd}" and will not be resumed in "${cwd}".\n`);
288
+ }
289
+ // Ensure session file exists (Pi requires this on first run)
290
+ if (!canResumeSession) {
291
+ try {
292
+ await fs.writeFile(sessionPath, "", { flag: "wx" });
293
+ }
294
+ catch (err) {
295
+ // File may already exist, that's ok
296
+ if (err.code !== "EEXIST") {
297
+ throw err;
298
+ }
299
+ }
300
+ }
301
+ // Handle instructions file and build system prompt extension
302
+ const instructionsFilePath = asString(config.instructionsFilePath, "").trim();
303
+ const resolvedInstructionsFilePath = instructionsFilePath
304
+ ? path.resolve(cwd, instructionsFilePath)
305
+ : "";
306
+ const instructionsFileDir = instructionsFilePath ? `${path.dirname(instructionsFilePath)}/` : "";
307
+ let systemPromptExtension = "";
308
+ let instructionsReadFailed = false;
309
+ if (resolvedInstructionsFilePath) {
310
+ try {
311
+ const instructionsContents = await fs.readFile(resolvedInstructionsFilePath, "utf8");
312
+ systemPromptExtension =
313
+ `${instructionsContents}\n\n` +
314
+ `The above agent instructions were loaded from ${resolvedInstructionsFilePath}. ` +
315
+ `Resolve any relative file references from ${instructionsFileDir}.\n\n` +
316
+ `You are agent {{agent.id}} ({{agent.name}}). Continue your Rudder work.`;
317
+ await onLog("stdout", `[rudder] Loaded agent instructions file: ${resolvedInstructionsFilePath}\n`);
318
+ }
319
+ catch (err) {
320
+ instructionsReadFailed = true;
321
+ const reason = err instanceof Error ? err.message : String(err);
322
+ await onLog("stdout", `[rudder] Warning: could not read agent instructions file "${resolvedInstructionsFilePath}": ${reason}\n`);
323
+ // Fall back to base prompt template
324
+ systemPromptExtension = promptTemplate;
325
+ }
326
+ }
327
+ else {
328
+ systemPromptExtension = promptTemplate;
329
+ }
330
+ /**
331
+ * Final prompt assembly order is intentional and shared across runtimes:
332
+ * 1) optional bootstrap prompt (only when not resuming a prior session),
333
+ * 2) optional session handoff markdown,
334
+ * 3) heartbeat prompt selected by wake trigger (assignment, mention, retry, fallback).
335
+ *
336
+ * Prompt example (retry wakeup):
337
+ * [bootstrap prompt]
338
+ * [session handoff note]
339
+ * You are agent agent-789 (Infra Agent). Your previous run was interrupted and is being resumed.
340
+ * Previous Run ID: run-123
341
+ * Reason: heartbeat_timeout
342
+ *
343
+ * PI also keeps a rendered system prompt extension in sync with the heartbeat prompt.
344
+ * Reasoning: assignment/mention heartbeat templates carry issue/comment context so
345
+ * the agent can start useful work on turn one without spending extra tool calls on
346
+ * "what changed?" discovery.
347
+ *
348
+ * Traceability:
349
+ * - doc/plans/2026-04-07-agent-prompt-context-injection.md
350
+ * - doc/DEVELOPING.md
351
+ */
352
+ const bootstrapPromptTemplate = asString(config.bootstrapPromptTemplate, "");
353
+ const templateData = {
354
+ agentId: agent.id,
355
+ orgId: agent.orgId,
356
+ runId,
357
+ organization: { id: agent.orgId },
358
+ agent,
359
+ run: {
360
+ id: runId,
361
+ source: context.wakeSource ?? "on_demand",
362
+ wakeReason: context.wakeReason ?? null,
363
+ },
364
+ context,
365
+ // Issue and comment context for enriched prompts
366
+ issue: context.issue ?? null,
367
+ comment: context.comment ?? null,
368
+ wakeReason: context.wakeReason ?? null,
369
+ wakeSource: context.wakeSource ?? null,
370
+ };
371
+ const renderedSystemPromptExtension = renderTemplate(systemPromptExtension, templateData);
372
+ const renderedHeartbeatPrompt = renderTemplate(promptTemplate, templateData);
373
+ const renderedBootstrapPrompt = !canResumeSession && bootstrapPromptTemplate.trim().length > 0
374
+ ? renderTemplate(bootstrapPromptTemplate, templateData).trim()
375
+ : "";
376
+ const sessionHandoffNote = asString(context.rudderSessionHandoffMarkdown, "").trim();
377
+ const userPrompt = joinPromptSections([
378
+ renderedBootstrapPrompt,
379
+ sessionHandoffNote,
380
+ renderedHeartbeatPrompt,
381
+ ]);
382
+ const promptMetrics = {
383
+ systemPromptChars: renderedSystemPromptExtension.length,
384
+ promptChars: userPrompt.length,
385
+ bootstrapPromptChars: renderedBootstrapPrompt.length,
386
+ sessionHandoffChars: sessionHandoffNote.length,
387
+ heartbeatPromptChars: renderedHeartbeatPrompt.length,
388
+ };
389
+ const commandNotes = (() => {
390
+ if (!resolvedInstructionsFilePath)
391
+ return [];
392
+ if (instructionsReadFailed) {
393
+ return [
394
+ `Configured instructionsFilePath ${resolvedInstructionsFilePath}, but file could not be read; continuing without injected instructions.`,
395
+ ];
396
+ }
397
+ return [
398
+ `Loaded agent instructions from ${resolvedInstructionsFilePath}`,
399
+ `Appended instructions + path directive to system prompt (relative references from ${instructionsFileDir}).`,
400
+ ];
401
+ })();
402
+ const buildArgs = (sessionFile) => {
403
+ const args = [];
404
+ // Use RPC mode for proper lifecycle management (waits for agent completion)
405
+ args.push("--mode", "rpc");
406
+ // Use --append-system-prompt to extend Pi's default system prompt
407
+ args.push("--append-system-prompt", renderedSystemPromptExtension);
408
+ if (provider)
409
+ args.push("--provider", provider);
410
+ if (modelId)
411
+ args.push("--model", modelId);
412
+ if (thinking)
413
+ args.push("--thinking", thinking);
414
+ args.push("--tools", "read,bash,edit,write,grep,find,ls");
415
+ args.push("--session", sessionFile);
416
+ // Add Rudder skills directory so Pi can load the rudder skill
417
+ args.push("--skill", skillsDir);
418
+ if (extraArgs.length > 0)
419
+ args.push(...extraArgs);
420
+ return args;
421
+ };
422
+ const buildRpcStdin = () => {
423
+ // Send the prompt as an RPC command
424
+ const promptCommand = {
425
+ type: "prompt",
426
+ message: userPrompt,
427
+ };
428
+ return JSON.stringify(promptCommand) + "\n";
429
+ };
430
+ const runAttempt = async (sessionFile) => {
431
+ const args = buildArgs(sessionFile);
432
+ if (onMeta) {
433
+ await onMeta({
434
+ agentRuntimeType: "pi_local",
435
+ command,
436
+ cwd,
437
+ commandNotes,
438
+ commandArgs: args,
439
+ env: redactEnvForLogs(env),
440
+ prompt: userPrompt,
441
+ promptMetrics,
442
+ context,
443
+ });
444
+ }
445
+ // Buffer stdout by lines to handle partial JSON chunks
446
+ let stdoutBuffer = "";
447
+ const bufferedOnLog = async (stream, chunk) => {
448
+ if (stream === "stderr") {
449
+ // Pass stderr through immediately (not JSONL)
450
+ await onLog(stream, chunk);
451
+ return;
452
+ }
453
+ // Buffer stdout and emit only complete lines
454
+ stdoutBuffer += chunk;
455
+ const lines = stdoutBuffer.split("\n");
456
+ // Keep the last (potentially incomplete) line in the buffer
457
+ stdoutBuffer = lines.pop() || "";
458
+ // Emit complete lines
459
+ for (const line of lines) {
460
+ if (line) {
461
+ await onLog(stream, line + "\n");
462
+ }
463
+ }
464
+ };
465
+ const proc = await runChildProcess(runId, command, args, {
466
+ cwd,
467
+ env: runtimeEnv,
468
+ timeoutSec,
469
+ graceSec,
470
+ onSpawn,
471
+ abortSignal: ctx.abortSignal,
472
+ onLog: bufferedOnLog,
473
+ stdin: buildRpcStdin(),
474
+ });
475
+ // Flush any remaining buffer content
476
+ if (stdoutBuffer) {
477
+ await onLog("stdout", stdoutBuffer);
478
+ }
479
+ return {
480
+ proc,
481
+ rawStderr: proc.stderr,
482
+ parsed: parsePiJsonl(proc.stdout),
483
+ };
484
+ };
485
+ const toResult = (attempt, clearSessionOnMissingSession = false) => {
486
+ if (attempt.proc.timedOut) {
487
+ return {
488
+ exitCode: attempt.proc.exitCode,
489
+ signal: attempt.proc.signal,
490
+ timedOut: true,
491
+ errorMessage: `Timed out after ${timeoutSec}s`,
492
+ clearSession: clearSessionOnMissingSession,
493
+ };
494
+ }
495
+ const resolvedSessionId = clearSessionOnMissingSession ? null : sessionPath;
496
+ const resolvedSessionParams = resolvedSessionId
497
+ ? { sessionId: resolvedSessionId, cwd }
498
+ : null;
499
+ const stderrLine = firstNonEmptyLine(attempt.proc.stderr);
500
+ const rawExitCode = attempt.proc.exitCode;
501
+ const fallbackErrorMessage = stderrLine || `Pi exited with code ${rawExitCode ?? -1}`;
502
+ return {
503
+ exitCode: rawExitCode,
504
+ signal: attempt.proc.signal,
505
+ timedOut: false,
506
+ errorMessage: (rawExitCode ?? 0) === 0 ? null : fallbackErrorMessage,
507
+ usage: {
508
+ inputTokens: attempt.parsed.usage.inputTokens,
509
+ outputTokens: attempt.parsed.usage.outputTokens,
510
+ cachedInputTokens: attempt.parsed.usage.cachedInputTokens,
511
+ },
512
+ sessionId: resolvedSessionId,
513
+ sessionParams: resolvedSessionParams,
514
+ sessionDisplayId: resolvedSessionId,
515
+ provider: provider,
516
+ biller: resolvePiBiller(runtimeEnv, provider),
517
+ model: model,
518
+ billingType: "unknown",
519
+ costUsd: attempt.parsed.usage.costUsd,
520
+ resultJson: {
521
+ stdout: attempt.proc.stdout,
522
+ stderr: attempt.proc.stderr,
523
+ },
524
+ summary: attempt.parsed.finalMessage ?? attempt.parsed.messages.join("\n\n").trim(),
525
+ clearSession: Boolean(clearSessionOnMissingSession),
526
+ };
527
+ };
528
+ const initial = await runAttempt(sessionPath);
529
+ const initialFailed = !initial.proc.timedOut && ((initial.proc.exitCode ?? 0) !== 0 || initial.parsed.errors.length > 0);
530
+ if (canResumeSession &&
531
+ initialFailed &&
532
+ isPiUnknownSessionError(initial.proc.stdout, initial.rawStderr)) {
533
+ await onLog("stdout", `[rudder] Pi session "${runtimeSessionId}" is unavailable; retrying with a fresh session.\n`);
534
+ const newSessionPath = buildSessionPath(sessionsDir, agent.id, new Date().toISOString());
535
+ try {
536
+ await fs.writeFile(newSessionPath, "", { flag: "wx" });
537
+ }
538
+ catch (err) {
539
+ if (err.code !== "EEXIST") {
540
+ throw err;
541
+ }
542
+ }
543
+ const retry = await runAttempt(newSessionPath);
544
+ return toResult(retry, true);
545
+ }
546
+ return toResult(initial);
547
+ }
548
+ //# 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,8 @@
1
+ import type { AgentRuntimeSessionCodec } from "@rudderhq/agent-runtime-utils";
2
+ export declare const sessionCodec: AgentRuntimeSessionCodec;
3
+ export { execute } from "./execute.js";
4
+ export { listPiSkills, syncPiSkills } from "./skills.js";
5
+ export { testEnvironment } from "./test.js";
6
+ export { listPiModels, discoverPiModels, discoverPiModelsCached, ensurePiModelConfiguredAndAvailable, resetPiModelsCacheForTests, } from "./models.js";
7
+ export { parsePiJsonl, isPiUnknownSessionError } from "./parse.js";
8
+ //# 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,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAM9E,eAAO,MAAM,YAAY,EAAE,wBA0C1B,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,mCAAmC,EACnC,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,51 @@
1
+ function readNonEmptyString(value) {
2
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
3
+ }
4
+ export const sessionCodec = {
5
+ deserialize(raw) {
6
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
7
+ return null;
8
+ const record = raw;
9
+ const sessionId = readNonEmptyString(record.sessionId) ??
10
+ readNonEmptyString(record.session_id) ??
11
+ readNonEmptyString(record.session);
12
+ if (!sessionId)
13
+ return null;
14
+ const cwd = readNonEmptyString(record.cwd) ??
15
+ readNonEmptyString(record.workdir) ??
16
+ readNonEmptyString(record.folder);
17
+ return {
18
+ sessionId,
19
+ ...(cwd ? { cwd } : {}),
20
+ };
21
+ },
22
+ serialize(params) {
23
+ if (!params)
24
+ return null;
25
+ const sessionId = readNonEmptyString(params.sessionId) ??
26
+ readNonEmptyString(params.session_id) ??
27
+ readNonEmptyString(params.session);
28
+ if (!sessionId)
29
+ return null;
30
+ const cwd = readNonEmptyString(params.cwd) ??
31
+ readNonEmptyString(params.workdir) ??
32
+ readNonEmptyString(params.folder);
33
+ return {
34
+ sessionId,
35
+ ...(cwd ? { cwd } : {}),
36
+ };
37
+ },
38
+ getDisplayId(params) {
39
+ if (!params)
40
+ return null;
41
+ return (readNonEmptyString(params.sessionId) ??
42
+ readNonEmptyString(params.session_id) ??
43
+ readNonEmptyString(params.session));
44
+ },
45
+ };
46
+ export { execute } from "./execute.js";
47
+ export { listPiSkills, syncPiSkills } from "./skills.js";
48
+ export { testEnvironment } from "./test.js";
49
+ export { listPiModels, discoverPiModels, discoverPiModelsCached, ensurePiModelConfiguredAndAvailable, resetPiModelsCacheForTests, } from "./models.js";
50
+ export { parsePiJsonl, isPiUnknownSessionError } from "./parse.js";
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAEA,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAA6B;IACpD,WAAW,CAAC,GAAY;QACtB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/E,MAAM,MAAM,GAAG,GAA8B,CAAC;QAC9C,MAAM,SAAS,GACb,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;YACrC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,GAAG,GACP,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC;YAC9B,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;YAClC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO;YACL,SAAS;YACT,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxB,CAAC;IACJ,CAAC;IACD,SAAS,CAAC,MAAsC;QAC9C,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,SAAS,GACb,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;YACrC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,GAAG,GACP,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC;YAC9B,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;YAClC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO;YACL,SAAS;YACT,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxB,CAAC;IACJ,CAAC;IACD,YAAY,CAAC,MAAsC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,CACL,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;YACrC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CACnC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,mCAAmC,EACnC,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}