@action-llama/action-llama 0.9.2 → 0.10.1
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/AGENTS.md +56 -28
- package/README.md +1 -1
- package/dist/agents/container-entry.d.ts +31 -0
- package/dist/agents/container-entry.d.ts.map +1 -1
- package/dist/agents/container-entry.js +83 -62
- package/dist/agents/container-entry.js.map +1 -1
- package/dist/agents/container-runner.d.ts +3 -4
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js +21 -33
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/execution-engine.d.ts +17 -0
- package/dist/agents/execution-engine.d.ts.map +1 -0
- package/dist/agents/execution-engine.js +196 -0
- package/dist/agents/execution-engine.js.map +1 -0
- package/dist/agents/git-environment.d.ts +18 -0
- package/dist/agents/git-environment.d.ts.map +1 -0
- package/dist/agents/git-environment.js +63 -0
- package/dist/agents/git-environment.js.map +1 -0
- package/dist/agents/lambda-handler.d.ts +2 -5
- package/dist/agents/lambda-handler.d.ts.map +1 -1
- package/dist/agents/lambda-handler.js +9 -10
- package/dist/agents/lambda-handler.js.map +1 -1
- package/dist/agents/prompt.d.ts +4 -2
- package/dist/agents/prompt.d.ts.map +1 -1
- package/dist/agents/prompt.js +57 -5
- package/dist/agents/prompt.js.map +1 -1
- package/dist/agents/runner.d.ts +7 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +54 -25
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/signals.d.ts +34 -0
- package/dist/agents/signals.d.ts.map +1 -0
- package/dist/agents/signals.js +116 -0
- package/dist/agents/signals.js.map +1 -0
- package/dist/agents/status-reporter.d.ts +34 -0
- package/dist/agents/status-reporter.d.ts.map +1 -0
- package/dist/agents/status-reporter.js +64 -0
- package/dist/agents/status-reporter.js.map +1 -0
- package/dist/cli/commands/chat.js +2 -2
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/creds.js +3 -3
- package/dist/cli/commands/creds.js.map +1 -1
- package/dist/cli/commands/doctor.js +3 -3
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/kill.d.ts +4 -0
- package/dist/cli/commands/kill.d.ts.map +1 -0
- package/dist/cli/commands/kill.js +30 -0
- package/dist/cli/commands/kill.js.map +1 -0
- package/dist/cli/commands/new.js +2 -2
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/pause.d.ts +4 -0
- package/dist/cli/commands/pause.d.ts.map +1 -0
- package/dist/cli/commands/pause.js +30 -0
- package/dist/cli/commands/pause.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +4 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +30 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/run.d.ts +0 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +7 -18
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/start.d.ts +0 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +7 -8
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +74 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/main.js +27 -4
- package/dist/cli/main.js.map +1 -1
- package/dist/cloud/scheduler-image.d.ts.map +1 -1
- package/dist/cloud/scheduler-image.js +9 -3
- package/dist/cloud/scheduler-image.js.map +1 -1
- package/dist/credentials/prompter.js +3 -3
- package/dist/credentials/prompter.js.map +1 -1
- package/dist/docker/aws-shared.d.ts.map +1 -1
- package/dist/docker/aws-shared.js +42 -19
- package/dist/docker/aws-shared.js.map +1 -1
- package/dist/docker/lambda-runtime.d.ts +2 -0
- package/dist/docker/lambda-runtime.d.ts.map +1 -1
- package/dist/docker/lambda-runtime.js +40 -14
- package/dist/docker/lambda-runtime.js.map +1 -1
- package/dist/docker/local-runtime.d.ts +2 -0
- package/dist/docker/local-runtime.d.ts.map +1 -1
- package/dist/docker/local-runtime.js +31 -0
- package/dist/docker/local-runtime.js.map +1 -1
- package/dist/docker/runtime.d.ts +4 -0
- package/dist/docker/runtime.d.ts.map +1 -1
- package/dist/gateway/call-store.d.ts +39 -0
- package/dist/gateway/call-store.d.ts.map +1 -0
- package/dist/gateway/call-store.js +101 -0
- package/dist/gateway/call-store.js.map +1 -0
- package/dist/gateway/index.d.ts +8 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +23 -2
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/routes/calls.d.ts +17 -0
- package/dist/gateway/routes/calls.d.ts.map +1 -0
- package/dist/gateway/routes/calls.js +63 -0
- package/dist/gateway/routes/calls.js.map +1 -0
- package/dist/gateway/routes/control.d.ts +10 -0
- package/dist/gateway/routes/control.d.ts.map +1 -0
- package/dist/gateway/routes/control.js +64 -0
- package/dist/gateway/routes/control.js.map +1 -0
- package/dist/gateway/routes/locks.d.ts.map +1 -1
- package/dist/gateway/routes/locks.js +12 -0
- package/dist/gateway/routes/locks.js.map +1 -1
- package/dist/gateway/routes/signals.d.ts +11 -0
- package/dist/gateway/routes/signals.d.ts.map +1 -0
- package/dist/gateway/routes/signals.js +103 -0
- package/dist/gateway/routes/signals.js.map +1 -0
- package/dist/gateway/types.d.ts +16 -0
- package/dist/gateway/types.d.ts.map +1 -1
- package/dist/scheduler/config-validator.d.ts +18 -0
- package/dist/scheduler/config-validator.d.ts.map +1 -0
- package/dist/scheduler/config-validator.js +53 -0
- package/dist/scheduler/config-validator.js.map +1 -0
- package/dist/scheduler/cron-manager.d.ts +14 -0
- package/dist/scheduler/cron-manager.d.ts.map +1 -0
- package/dist/scheduler/cron-manager.js +75 -0
- package/dist/scheduler/cron-manager.js.map +1 -0
- package/dist/scheduler/event-queue.d.ts +7 -4
- package/dist/scheduler/event-queue.d.ts.map +1 -1
- package/dist/scheduler/event-queue.js +4 -2
- package/dist/scheduler/event-queue.js.map +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +126 -115
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/runner-pool.d.ts +20 -0
- package/dist/scheduler/runner-pool.d.ts.map +1 -1
- package/dist/scheduler/runner-pool.js +32 -4
- package/dist/scheduler/runner-pool.js.map +1 -1
- package/dist/scheduler/runtime-factory.d.ts +11 -0
- package/dist/scheduler/runtime-factory.d.ts.map +1 -0
- package/dist/scheduler/runtime-factory.js +98 -0
- package/dist/scheduler/runtime-factory.js.map +1 -0
- package/dist/scheduler/shutdown-handler.d.ts +16 -0
- package/dist/scheduler/shutdown-handler.d.ts.map +1 -0
- package/dist/scheduler/shutdown-handler.js +44 -0
- package/dist/scheduler/shutdown-handler.js.map +1 -0
- package/dist/scheduler/trigger-dispatcher.d.ts +12 -0
- package/dist/scheduler/trigger-dispatcher.d.ts.map +1 -0
- package/dist/scheduler/trigger-dispatcher.js +46 -0
- package/dist/scheduler/trigger-dispatcher.js.map +1 -0
- package/dist/scheduler/types.d.ts +8 -0
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/scheduler/webhook-setup.d.ts +28 -0
- package/dist/scheduler/webhook-setup.d.ts.map +1 -0
- package/dist/scheduler/webhook-setup.js +146 -0
- package/dist/scheduler/webhook-setup.js.map +1 -0
- package/dist/setup/prompts.js +4 -4
- package/dist/setup/prompts.js.map +1 -1
- package/dist/shared/config.d.ts +4 -0
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/credentials.d.ts +11 -31
- package/dist/shared/credentials.d.ts.map +1 -1
- package/dist/shared/credentials.js +22 -87
- package/dist/shared/credentials.js.map +1 -1
- package/dist/shared/exit-codes.d.ts +18 -0
- package/dist/shared/exit-codes.d.ts.map +1 -0
- package/dist/shared/exit-codes.js +40 -0
- package/dist/shared/exit-codes.js.map +1 -0
- package/dist/shared/filesystem-backend.d.ts +4 -0
- package/dist/shared/filesystem-backend.d.ts.map +1 -1
- package/dist/shared/filesystem-backend.js +35 -0
- package/dist/shared/filesystem-backend.js.map +1 -1
- package/dist/tui/status-tracker.d.ts +23 -0
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js +36 -0
- package/dist/tui/status-tracker.js.map +1 -1
- package/docker/Dockerfile +6 -8
- package/docker/bin/al-call +8 -0
- package/docker/bin/al-check +4 -0
- package/docker/bin/al-exit +4 -0
- package/docker/bin/al-rerun +8 -0
- package/docker/bin/al-return +14 -0
- package/docker/bin/al-shutdown +5 -0
- package/docker/bin/al-status +9 -0
- package/docker/bin/al-wait +29 -0
- package/docker/bin/rlock +5 -0
- package/docker/bin/rlock-heartbeat +5 -0
- package/docker/bin/runlock +5 -0
- package/package.json +1 -1
- package/skills/environment.md +1 -1
- package/skills/resource-locks.md +1 -1
- package/skills/signals.md +67 -25
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from "crypto";
|
|
2
2
|
export class ContainerAgentRunner {
|
|
3
3
|
_running = false;
|
|
4
|
-
|
|
5
|
-
_triggers = [];
|
|
6
|
-
_triggerAccum = null;
|
|
4
|
+
_returnValue = undefined;
|
|
7
5
|
runtime;
|
|
8
6
|
globalConfig;
|
|
9
7
|
agentConfig;
|
|
@@ -31,6 +29,12 @@ export class ContainerAgentRunner {
|
|
|
31
29
|
get isRunning() {
|
|
32
30
|
return this._running;
|
|
33
31
|
}
|
|
32
|
+
abort() {
|
|
33
|
+
this.logger.info("Container agent runner abort requested");
|
|
34
|
+
// For container runners, we'd need to kill the container
|
|
35
|
+
// This is a placeholder - a full implementation would need to track
|
|
36
|
+
// the running container and kill it
|
|
37
|
+
}
|
|
34
38
|
forwardLogLine(line) {
|
|
35
39
|
if (!line.trim())
|
|
36
40
|
return;
|
|
@@ -74,31 +78,18 @@ export class ContainerAgentRunner {
|
|
|
74
78
|
catch {
|
|
75
79
|
// Not JSON — treat as plain output
|
|
76
80
|
}
|
|
77
|
-
// Detect
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
this.logger.info("rerun requested");
|
|
85
|
-
this.statusTracker?.addLogLine(this.agentConfig.name, "rerun requested");
|
|
86
|
-
}
|
|
87
|
-
// Accumulate [TRIGGER: agent]...[/TRIGGER] blocks across lines
|
|
88
|
-
const triggerOpen = line.match(/^\[TRIGGER:\s*(\S+)\]$/);
|
|
89
|
-
if (triggerOpen) {
|
|
90
|
-
this._triggerAccum = { agent: triggerOpen[1], lines: [] };
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
if (this._triggerAccum) {
|
|
94
|
-
if (line === "[/TRIGGER]") {
|
|
95
|
-
this._triggers.push({ agent: this._triggerAccum.agent, context: this._triggerAccum.lines.join("\n").trim() });
|
|
96
|
-
this._triggerAccum = null;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
this._triggerAccum.lines.push(line);
|
|
81
|
+
// Detect structured signal-result logs for return values
|
|
82
|
+
try {
|
|
83
|
+
const parsed = JSON.parse(line);
|
|
84
|
+
if (parsed._log && parsed.msg === "signal-result") {
|
|
85
|
+
if (parsed.type === "return" && parsed.value) {
|
|
86
|
+
this._returnValue = parsed.value;
|
|
87
|
+
}
|
|
100
88
|
}
|
|
101
89
|
}
|
|
90
|
+
catch {
|
|
91
|
+
// Not JSON — plain output, nothing to detect
|
|
92
|
+
}
|
|
102
93
|
}
|
|
103
94
|
async run(prompt, triggerInfo) {
|
|
104
95
|
if (this._running) {
|
|
@@ -116,9 +107,7 @@ export class ContainerAgentRunner {
|
|
|
116
107
|
// Best-effort check — proceed if it fails
|
|
117
108
|
}
|
|
118
109
|
this._running = true;
|
|
119
|
-
this.
|
|
120
|
-
this._triggers = [];
|
|
121
|
-
this._triggerAccum = null;
|
|
110
|
+
this._returnValue = undefined;
|
|
122
111
|
const runReason = triggerInfo
|
|
123
112
|
? (triggerInfo.source
|
|
124
113
|
? (triggerInfo.type === 'agent' ? `triggered by ${triggerInfo.source}` : `${triggerInfo.type} (${triggerInfo.source})`)
|
|
@@ -195,8 +184,7 @@ export class ContainerAgentRunner {
|
|
|
195
184
|
logStream.stop();
|
|
196
185
|
logStream = undefined;
|
|
197
186
|
if (exitCode === 42) {
|
|
198
|
-
// Exit code 42 = rerun requested
|
|
199
|
-
// to avoid race conditions with log-based [RERUN] detection
|
|
187
|
+
// Exit code 42 = rerun requested
|
|
200
188
|
this.logger.info({ exitCode, elapsed: `${elapsed}s` }, "container finished (rerun requested)");
|
|
201
189
|
runResult = "rerun";
|
|
202
190
|
}
|
|
@@ -207,7 +195,7 @@ export class ContainerAgentRunner {
|
|
|
207
195
|
}
|
|
208
196
|
else {
|
|
209
197
|
this.logger.info({ exitCode, elapsed: `${elapsed}s` }, "container finished");
|
|
210
|
-
runResult =
|
|
198
|
+
runResult = "completed";
|
|
211
199
|
}
|
|
212
200
|
}
|
|
213
201
|
catch (err) {
|
|
@@ -230,7 +218,7 @@ export class ContainerAgentRunner {
|
|
|
230
218
|
this.statusTracker?.endRun(this.agentConfig.name, elapsed, runError);
|
|
231
219
|
this._running = false;
|
|
232
220
|
}
|
|
233
|
-
return { result: runResult, triggers: this.
|
|
221
|
+
return { result: runResult, triggers: [], returnValue: this._returnValue };
|
|
234
222
|
}
|
|
235
223
|
}
|
|
236
224
|
//# sourceMappingURL=container-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-runner.js","sourceRoot":"","sources":["../../src/agents/container-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAQpC,MAAM,OAAO,oBAAoB;IACvB,QAAQ,GAAG,KAAK,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"container-runner.js","sourceRoot":"","sources":["../../src/agents/container-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AgentConfig } from "../shared/config.js";
|
|
2
|
+
import type { Logger } from "../shared/logger.js";
|
|
3
|
+
import type { StatusTracker } from "../tui/status-tracker.js";
|
|
4
|
+
export type RunResult = "completed" | "rerun" | "error";
|
|
5
|
+
export interface ExecutionResult {
|
|
6
|
+
result: RunResult;
|
|
7
|
+
outputText: string;
|
|
8
|
+
unrecoverableErrors: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class ExecutionEngine {
|
|
11
|
+
private agentConfig;
|
|
12
|
+
private logger;
|
|
13
|
+
private statusTracker?;
|
|
14
|
+
constructor(agentConfig: AgentConfig, logger: Logger, statusTracker?: StatusTracker);
|
|
15
|
+
execute(prompt: string, cwd: string): Promise<ExecutionResult>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=execution-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-engine.d.ts","sourceRoot":"","sources":["../../src/agents/execution-engine.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAmBD,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAE1B,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa;IAM7E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAsLrE"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { getModel } from "@mariozechner/pi-ai";
|
|
2
|
+
import { AuthStorage, createAgentSession, DefaultResourceLoader, SessionManager, SettingsManager, createCodingTools, } from "@mariozechner/pi-coding-agent";
|
|
3
|
+
import { readFileSync, existsSync, mkdtempSync, rmSync } from "fs";
|
|
4
|
+
import { resolve, join } from "path";
|
|
5
|
+
import { tmpdir } from "os";
|
|
6
|
+
import { loadCredentialField } from "../shared/credentials.js";
|
|
7
|
+
import { installSignalCommands, readSignals } from "./signals.js";
|
|
8
|
+
const UNRECOVERABLE_PATTERNS = [
|
|
9
|
+
"permission denied",
|
|
10
|
+
"could not read from remote repository",
|
|
11
|
+
"resource not accessible by personal access token",
|
|
12
|
+
"bad credentials",
|
|
13
|
+
"authentication failed",
|
|
14
|
+
"the requested url returned error: 403",
|
|
15
|
+
"denied to ",
|
|
16
|
+
];
|
|
17
|
+
function isUnrecoverableError(text) {
|
|
18
|
+
const lower = text.toLowerCase();
|
|
19
|
+
return UNRECOVERABLE_PATTERNS.some((p) => lower.includes(p));
|
|
20
|
+
}
|
|
21
|
+
const UNRECOVERABLE_THRESHOLD = 3;
|
|
22
|
+
export class ExecutionEngine {
|
|
23
|
+
agentConfig;
|
|
24
|
+
logger;
|
|
25
|
+
statusTracker;
|
|
26
|
+
constructor(agentConfig, logger, statusTracker) {
|
|
27
|
+
this.agentConfig = agentConfig;
|
|
28
|
+
this.logger = logger;
|
|
29
|
+
this.statusTracker = statusTracker;
|
|
30
|
+
}
|
|
31
|
+
async execute(prompt, cwd) {
|
|
32
|
+
// Set up file-based signal IPC
|
|
33
|
+
const signalTmpDir = mkdtempSync(join(tmpdir(), "al-signals-"));
|
|
34
|
+
const signalDir = join(signalTmpDir, "signals");
|
|
35
|
+
const signalBinDir = join(signalTmpDir, "bin");
|
|
36
|
+
installSignalCommands(signalBinDir, signalDir);
|
|
37
|
+
const savedPath = process.env.PATH;
|
|
38
|
+
process.env.PATH = `${signalBinDir}:${process.env.PATH || ""}`;
|
|
39
|
+
process.env.AL_SIGNAL_DIR = signalDir;
|
|
40
|
+
const agentsFile = resolve(cwd, "ACTIONS.md");
|
|
41
|
+
const { model } = this.agentConfig;
|
|
42
|
+
// ACTIONS.md must exist on disk (written during al new)
|
|
43
|
+
if (!existsSync(agentsFile)) {
|
|
44
|
+
throw new Error(`ACTIONS.md not found at ${agentsFile}. Run 'al new' to create it.`);
|
|
45
|
+
}
|
|
46
|
+
const agentsContent = readFileSync(agentsFile, "utf-8");
|
|
47
|
+
const llmModel = getModel(model.provider, model.model);
|
|
48
|
+
const authStorage = AuthStorage.create();
|
|
49
|
+
if (model.authType !== "pi_auth") {
|
|
50
|
+
// Try to load API key using provider-specific credential type
|
|
51
|
+
const credentialType = `${model.provider}_key`;
|
|
52
|
+
try {
|
|
53
|
+
const credential = await loadCredentialField(credentialType, "default", "token");
|
|
54
|
+
if (credential) {
|
|
55
|
+
authStorage.setRuntimeApiKey(model.provider, credential);
|
|
56
|
+
this.logger.debug(`Loaded ${credentialType} credential for ${model.provider}`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.logger.warn(`${credentialType} credential not found — agent may fail to authenticate. Run 'al doctor' to configure it.`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
this.logger.warn(`Failed to load credential for provider ${model.provider}: ${credentialType} credential type may not be configured.`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const resourceLoader = new DefaultResourceLoader({
|
|
67
|
+
noExtensions: true,
|
|
68
|
+
agentsFilesOverride: () => ({
|
|
69
|
+
agentsFiles: [
|
|
70
|
+
{ path: agentsFile, content: agentsContent },
|
|
71
|
+
],
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
await resourceLoader.reload();
|
|
75
|
+
const settingsManager = SettingsManager.inMemory({
|
|
76
|
+
compaction: { enabled: true },
|
|
77
|
+
retry: { enabled: true, maxRetries: 2 },
|
|
78
|
+
});
|
|
79
|
+
const { session } = await createAgentSession({
|
|
80
|
+
cwd,
|
|
81
|
+
model: llmModel,
|
|
82
|
+
thinkingLevel: model.thinkingLevel,
|
|
83
|
+
authStorage,
|
|
84
|
+
resourceLoader,
|
|
85
|
+
tools: createCodingTools(cwd),
|
|
86
|
+
sessionManager: SessionManager.inMemory(),
|
|
87
|
+
settingsManager,
|
|
88
|
+
});
|
|
89
|
+
// Subscribe to events for logging
|
|
90
|
+
const pendingCmds = new Map();
|
|
91
|
+
let outputText = "";
|
|
92
|
+
let currentTurnText = "";
|
|
93
|
+
let unrecoverableErrors = 0;
|
|
94
|
+
session.subscribe((event) => {
|
|
95
|
+
if (event.type === "message_update" && event.assistantMessageEvent?.type === "text_delta") {
|
|
96
|
+
const delta = event.assistantMessageEvent.delta;
|
|
97
|
+
outputText += delta;
|
|
98
|
+
currentTurnText += delta;
|
|
99
|
+
}
|
|
100
|
+
if (event.type === "message_end") {
|
|
101
|
+
if (currentTurnText.trim()) {
|
|
102
|
+
this.logger.info({ text: currentTurnText.trim() }, "assistant");
|
|
103
|
+
}
|
|
104
|
+
currentTurnText = "";
|
|
105
|
+
}
|
|
106
|
+
if (event.type === "tool_execution_start") {
|
|
107
|
+
const cmd = String(event.args?.command || "");
|
|
108
|
+
if (event.toolName === "bash") {
|
|
109
|
+
pendingCmds.set(event.toolCallId, cmd);
|
|
110
|
+
this.logger.info({ cmd: cmd.slice(0, 200) }, "bash");
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.logger.debug({ tool: event.toolName }, "tool start");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (event.type === "tool_execution_end") {
|
|
117
|
+
const resultStr = typeof event.result === "string"
|
|
118
|
+
? event.result
|
|
119
|
+
: JSON.stringify(event.result);
|
|
120
|
+
const originCmd = pendingCmds.get(event.toolCallId);
|
|
121
|
+
pendingCmds.delete(event.toolCallId);
|
|
122
|
+
if (event.isError) {
|
|
123
|
+
this.logger.error({ tool: event.toolName, result: resultStr.slice(0, 1000) }, "tool error");
|
|
124
|
+
// Extract a human-readable error message from the result
|
|
125
|
+
let errorMsg = resultStr;
|
|
126
|
+
try {
|
|
127
|
+
const parsed = JSON.parse(resultStr);
|
|
128
|
+
if (parsed?.content?.[0]?.text) {
|
|
129
|
+
errorMsg = parsed.content[0].text;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch { /* use raw string */ }
|
|
133
|
+
const cmdPrefix = originCmd ? `$ ${originCmd.slice(0, 80)} — ` : "";
|
|
134
|
+
const detail = `${cmdPrefix}${errorMsg.slice(0, 200)}`;
|
|
135
|
+
this.statusTracker?.setAgentError(this.agentConfig.name, detail);
|
|
136
|
+
this.statusTracker?.addLogLine(this.agentConfig.name, `ERROR: ${detail}`);
|
|
137
|
+
if (isUnrecoverableError(errorMsg)) {
|
|
138
|
+
unrecoverableErrors++;
|
|
139
|
+
if (unrecoverableErrors >= UNRECOVERABLE_THRESHOLD) {
|
|
140
|
+
this.logger.error("Aborting: repeated auth/permission failures — check credentials");
|
|
141
|
+
this.statusTracker?.addLogLine(this.agentConfig.name, "ABORT: repeated auth/permission failures — check credentials");
|
|
142
|
+
session.dispose();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.logger.debug({ tool: event.toolName, resultLength: resultStr.length }, "tool done");
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
// Retry on rate limit errors with exponential backoff
|
|
152
|
+
const MAX_PROMPT_RETRIES = 5;
|
|
153
|
+
const DEFAULT_BACKOFF_MS = 30_000;
|
|
154
|
+
const MAX_BACKOFF_MS = 300_000;
|
|
155
|
+
for (let attempt = 0; attempt <= MAX_PROMPT_RETRIES; attempt++) {
|
|
156
|
+
try {
|
|
157
|
+
await session.prompt(prompt);
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
catch (promptErr) {
|
|
161
|
+
const msg = String(promptErr?.message || promptErr || "");
|
|
162
|
+
const isRateLimit = msg.includes("rate_limit") || msg.includes("429") || msg.includes("529") || msg.includes("overloaded");
|
|
163
|
+
if (!isRateLimit || attempt === MAX_PROMPT_RETRIES) {
|
|
164
|
+
throw promptErr;
|
|
165
|
+
}
|
|
166
|
+
const delayMs = Math.min(DEFAULT_BACKOFF_MS * Math.pow(2, attempt), MAX_BACKOFF_MS);
|
|
167
|
+
this.logger.warn({ attempt: attempt + 1, delayMs }, "rate limited, retrying prompt");
|
|
168
|
+
this.statusTracker?.addLogLine(this.agentConfig.name, `Rate limited, retrying in ${Math.round(delayMs / 1000)}s...`);
|
|
169
|
+
await new Promise((r) => setTimeout(r, delayMs));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
session.dispose();
|
|
173
|
+
// Read signal files
|
|
174
|
+
const signals = readSignals(signalDir);
|
|
175
|
+
// Clean up signal dir and restore PATH
|
|
176
|
+
if (savedPath !== undefined) {
|
|
177
|
+
process.env.PATH = savedPath;
|
|
178
|
+
}
|
|
179
|
+
delete process.env.AL_SIGNAL_DIR;
|
|
180
|
+
try {
|
|
181
|
+
rmSync(signalTmpDir, { recursive: true, force: true });
|
|
182
|
+
}
|
|
183
|
+
catch { /* best-effort */ }
|
|
184
|
+
let result;
|
|
185
|
+
if (signals.rerun) {
|
|
186
|
+
this.logger.info({ outputLength: outputText.length }, "run completed, rerun requested");
|
|
187
|
+
result = "rerun";
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this.logger.info({ outputLength: outputText.length }, "run completed");
|
|
191
|
+
result = "completed";
|
|
192
|
+
}
|
|
193
|
+
return { result, outputText, unrecoverableErrors };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=execution-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-engine.js","sourceRoot":"","sources":["../../src/agents/execution-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Logger } from "../shared/logger.js";
|
|
2
|
+
export interface SavedEnv {
|
|
3
|
+
[key: string]: string | undefined;
|
|
4
|
+
}
|
|
5
|
+
export declare class GitEnvironment {
|
|
6
|
+
private logger;
|
|
7
|
+
constructor(logger: Logger);
|
|
8
|
+
/**
|
|
9
|
+
* Sets up git environment variables from credentials
|
|
10
|
+
* Returns the previous values so they can be restored later
|
|
11
|
+
*/
|
|
12
|
+
setup(credentials: string[]): Promise<SavedEnv>;
|
|
13
|
+
/**
|
|
14
|
+
* Restores git environment variables to their previous values
|
|
15
|
+
*/
|
|
16
|
+
restore(saved: SavedEnv): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=git-environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-environment.d.ts","sourceRoot":"","sources":["../../src/agents/git-environment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AASlD,MAAM,WAAW,QAAQ;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAI1B;;;OAGG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgCrD;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;CAW/B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { parseCredentialRef, loadCredentialField } from "../shared/credentials.js";
|
|
2
|
+
const GIT_ENV_KEYS = [
|
|
3
|
+
"GIT_AUTHOR_NAME",
|
|
4
|
+
"GIT_COMMITTER_NAME",
|
|
5
|
+
"GIT_AUTHOR_EMAIL",
|
|
6
|
+
"GIT_COMMITTER_EMAIL",
|
|
7
|
+
];
|
|
8
|
+
export class GitEnvironment {
|
|
9
|
+
logger;
|
|
10
|
+
constructor(logger) {
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Sets up git environment variables from credentials
|
|
15
|
+
* Returns the previous values so they can be restored later
|
|
16
|
+
*/
|
|
17
|
+
async setup(credentials) {
|
|
18
|
+
// Save current git env vars so they can be restored later
|
|
19
|
+
const savedGitEnv = {};
|
|
20
|
+
for (const key of GIT_ENV_KEYS) {
|
|
21
|
+
savedGitEnv[key] = process.env[key];
|
|
22
|
+
}
|
|
23
|
+
// Set git author identity from git_ssh credential (scoped to this run)
|
|
24
|
+
const gitSshRef = credentials.find((ref) => parseCredentialRef(ref).type === "git_ssh");
|
|
25
|
+
if (gitSshRef) {
|
|
26
|
+
const { instance } = parseCredentialRef(gitSshRef);
|
|
27
|
+
try {
|
|
28
|
+
const gitName = await loadCredentialField("git_ssh", instance, "username");
|
|
29
|
+
if (gitName) {
|
|
30
|
+
process.env.GIT_AUTHOR_NAME = gitName;
|
|
31
|
+
process.env.GIT_COMMITTER_NAME = gitName;
|
|
32
|
+
this.logger.debug({ gitName }, "Set git author name from credential");
|
|
33
|
+
}
|
|
34
|
+
const gitEmail = await loadCredentialField("git_ssh", instance, "email");
|
|
35
|
+
if (gitEmail) {
|
|
36
|
+
process.env.GIT_AUTHOR_EMAIL = gitEmail;
|
|
37
|
+
process.env.GIT_COMMITTER_EMAIL = gitEmail;
|
|
38
|
+
this.logger.debug({ gitEmail }, "Set git author email from credential");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
this.logger.warn({ err, gitSshRef }, "Failed to load git SSH credential");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return savedGitEnv;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Restores git environment variables to their previous values
|
|
49
|
+
*/
|
|
50
|
+
restore(saved) {
|
|
51
|
+
// Restore the git env vars we may have overwritten so other
|
|
52
|
+
// agents running in the same process get a clean slate.
|
|
53
|
+
for (const key of GIT_ENV_KEYS) {
|
|
54
|
+
if (saved[key] === undefined) {
|
|
55
|
+
delete process.env[key];
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
process.env[key] = saved[key];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=git-environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-environment.js","sourceRoot":"","sources":["../../src/agents/git-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGnF,MAAM,YAAY,GAAG;IACnB,iBAAiB;IACjB,oBAAoB;IACpB,kBAAkB;IAClB,qBAAqB;CACb,CAAC;AAMX,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IAEvB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,WAAqB;QAC/B,0DAA0D;QAC1D,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,uEAAuE;QACvE,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACxF,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC3E,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC;oBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,qCAAqC,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzE,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC;oBACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,QAAQ,CAAC;oBAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,sCAAsC,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,mCAAmC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAe;QACrB,4DAA4D;QAC5D,wDAAwD;QACxD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -5,11 +5,8 @@
|
|
|
5
5
|
* This handler replaces the default ENTRYPOINT on Lambda via ImageConfig,
|
|
6
6
|
* keeping container-entry.ts as the direct entrypoint for Docker/ECS.
|
|
7
7
|
*
|
|
8
|
-
* During init (
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* During invocation: runAgent() is called, which does all the real work
|
|
12
|
-
* (loading config, credentials, running the LLM session).
|
|
8
|
+
* During init: initAgent() runs once (loads config, creates model/resourceLoader).
|
|
9
|
+
* During invocation: handleInvocation() runs per-request (credentials, session).
|
|
13
10
|
*/
|
|
14
11
|
export {};
|
|
15
12
|
//# sourceMappingURL=lambda-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda-handler.d.ts","sourceRoot":"","sources":["../../src/agents/lambda-handler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lambda-handler.d.ts","sourceRoot":"","sources":["../../src/agents/lambda-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -5,12 +5,10 @@
|
|
|
5
5
|
* This handler replaces the default ENTRYPOINT on Lambda via ImageConfig,
|
|
6
6
|
* keeping container-entry.ts as the direct entrypoint for Docker/ECS.
|
|
7
7
|
*
|
|
8
|
-
* During init (
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* During invocation: runAgent() is called, which does all the real work
|
|
12
|
-
* (loading config, credentials, running the LLM session).
|
|
8
|
+
* During init: initAgent() runs once (loads config, creates model/resourceLoader).
|
|
9
|
+
* During invocation: handleInvocation() runs per-request (credentials, session).
|
|
13
10
|
*/
|
|
11
|
+
import { initAgent, handleInvocation } from "./container-entry.js";
|
|
14
12
|
const RUNTIME_API = process.env.AWS_LAMBDA_RUNTIME_API;
|
|
15
13
|
function emitLog(level, msg, data) {
|
|
16
14
|
console.log(JSON.stringify({ _log: true, level, msg, ...data, ts: Date.now() }));
|
|
@@ -19,8 +17,10 @@ async function main() {
|
|
|
19
17
|
if (!RUNTIME_API) {
|
|
20
18
|
throw new Error("AWS_LAMBDA_RUNTIME_API not set — this file should only run on Lambda");
|
|
21
19
|
}
|
|
22
|
-
//
|
|
23
|
-
|
|
20
|
+
// Init phase — runs once during cold start. Hoists reusable work
|
|
21
|
+
// (PATH setup, signal dir, config parsing, model creation) out of
|
|
22
|
+
// the per-invocation hot path.
|
|
23
|
+
const init = await initAgent();
|
|
24
24
|
// Lambda Runtime API loop. In practice, each agent invocation runs for
|
|
25
25
|
// minutes, so this loop only executes once before the process exits.
|
|
26
26
|
while (true) {
|
|
@@ -48,13 +48,13 @@ async function main() {
|
|
|
48
48
|
catch {
|
|
49
49
|
// Payload may be empty or malformed — continue without secrets
|
|
50
50
|
}
|
|
51
|
-
const exitCode = await
|
|
51
|
+
const exitCode = await handleInvocation(init);
|
|
52
52
|
await fetch(`http://${RUNTIME_API}/2018-06-01/runtime/invocation/${requestId}/response`, {
|
|
53
53
|
method: "POST",
|
|
54
54
|
body: JSON.stringify({ statusCode: exitCode === 0 ? 200 : exitCode }),
|
|
55
55
|
});
|
|
56
56
|
// Exit with the agent's exit code so Lambda's REPORT line reflects
|
|
57
|
-
// success/failure and the scheduler can detect
|
|
57
|
+
// success/failure and the scheduler can detect rerun (exit 42).
|
|
58
58
|
process.exit(exitCode);
|
|
59
59
|
}
|
|
60
60
|
catch (err) {
|
|
@@ -77,5 +77,4 @@ async function main() {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
main();
|
|
80
|
-
export {};
|
|
81
80
|
//# sourceMappingURL=lambda-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda-handler.js","sourceRoot":"","sources":["../../src/agents/lambda-handler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lambda-handler.js","sourceRoot":"","sources":["../../src/agents/lambda-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/prompt.d.ts
CHANGED
|
@@ -2,8 +2,10 @@ import type { AgentConfig } from "../shared/config.js";
|
|
|
2
2
|
import type { WebhookContext } from "../webhooks/types.js";
|
|
3
3
|
export interface PromptSkills {
|
|
4
4
|
locking?: boolean;
|
|
5
|
+
calling?: boolean;
|
|
5
6
|
}
|
|
6
7
|
export declare function buildLockSkill(): string;
|
|
8
|
+
export declare function buildCallSkill(): string;
|
|
7
9
|
export declare function buildCredentialContext(credentials: string[]): string;
|
|
8
10
|
/**
|
|
9
11
|
* Build the static portion of the prompt that is identical across all trigger types.
|
|
@@ -17,10 +19,10 @@ export declare function buildPromptSkeleton(agentConfig: AgentConfig, skills?: P
|
|
|
17
19
|
*/
|
|
18
20
|
export declare function buildScheduledSuffix(): string;
|
|
19
21
|
export declare function buildManualSuffix(): string;
|
|
20
|
-
export declare function
|
|
22
|
+
export declare function buildCalledSuffix(callerAgent: string, context: string): string;
|
|
21
23
|
export declare function buildWebhookSuffix(context: WebhookContext): string;
|
|
22
24
|
export declare function buildScheduledPrompt(agentConfig: AgentConfig, skills?: PromptSkills): string;
|
|
23
25
|
export declare function buildManualPrompt(agentConfig: AgentConfig, skills?: PromptSkills): string;
|
|
24
|
-
export declare function
|
|
26
|
+
export declare function buildCalledPrompt(agentConfig: AgentConfig, callerAgent: string, context: string, skills?: PromptSkills): string;
|
|
25
27
|
export declare function buildWebhookPrompt(agentConfig: AgentConfig, context: WebhookContext, skills?: PromptSkills): string;
|
|
26
28
|
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agents/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,IAAI,MAAM,CA8CvC;AAMD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAkCpE;
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agents/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,IAAI,MAAM,CA8CvC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAgDvC;AAMD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAkCpE;AAwBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAM3F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAGlE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE5F;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAEzF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE/H;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAEnH"}
|