@action-llama/action-llama 0.27.5 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/credential-setup.d.ts +0 -1
- package/dist/agents/credential-setup.d.ts.map +1 -1
- package/dist/agents/credential-setup.js +2 -23
- package/dist/agents/credential-setup.js.map +1 -1
- package/dist/agents/prompt.js +1 -1
- package/dist/agents/prompt.js.map +1 -1
- package/dist/agents/scheduler-tools.d.ts +40 -0
- package/dist/agents/scheduler-tools.d.ts.map +1 -0
- package/dist/agents/scheduler-tools.js +178 -0
- package/dist/agents/scheduler-tools.js.map +1 -0
- package/dist/agents/transport-runner.d.ts +95 -0
- package/dist/agents/transport-runner.d.ts.map +1 -0
- package/dist/agents/transport-runner.js +653 -0
- package/dist/agents/transport-runner.js.map +1 -0
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/add.d.ts +1 -0
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +24 -9
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/agent.d.ts +0 -3
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +3 -67
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/main.js +1 -30
- package/dist/cli/main.js.map +1 -1
- package/dist/control/routes/dashboard-api.js +1 -1
- package/dist/control/routes/dashboard-api.js.map +1 -1
- package/dist/control/routes/log-helpers.d.ts +4 -4
- package/dist/control/routes/log-helpers.d.ts.map +1 -1
- package/dist/control/routes/log-helpers.js +12 -7
- package/dist/control/routes/log-helpers.js.map +1 -1
- package/dist/control/routes/logs.d.ts.map +1 -1
- package/dist/control/routes/logs.js +10 -10
- package/dist/control/routes/logs.js.map +1 -1
- package/dist/docker/providers/index.d.ts +0 -4
- package/dist/docker/providers/index.d.ts.map +1 -1
- package/dist/docker/providers/index.js +0 -38
- package/dist/docker/providers/index.js.map +1 -1
- package/dist/execution/execution.d.ts +0 -1
- package/dist/execution/execution.d.ts.map +1 -1
- package/dist/execution/execution.js +5 -9
- package/dist/execution/execution.js.map +1 -1
- package/dist/execution/index.d.ts +1 -11
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +1 -8
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/runner-setup.d.ts +6 -11
- package/dist/execution/runner-setup.d.ts.map +1 -1
- package/dist/execution/runner-setup.js +18 -14
- package/dist/execution/runner-setup.js.map +1 -1
- package/dist/execution/runtime-factory.d.ts +1 -15
- package/dist/execution/runtime-factory.d.ts.map +1 -1
- package/dist/execution/runtime-factory.js +1 -18
- package/dist/execution/runtime-factory.js.map +1 -1
- package/dist/gateway/index.d.ts +1 -1
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +6 -47
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/routes/system.d.ts +1 -4
- package/dist/gateway/routes/system.d.ts.map +1 -1
- package/dist/gateway/routes/system.js +3 -8
- package/dist/gateway/routes/system.js.map +1 -1
- package/dist/gateway/stores.d.ts +0 -4
- package/dist/gateway/stores.d.ts.map +1 -1
- package/dist/gateway/stores.js +2 -10
- package/dist/gateway/stores.js.map +1 -1
- package/dist/gateway/types.d.ts +0 -13
- package/dist/gateway/types.d.ts.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +11 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/scheduler/gateway-setup.d.ts +0 -2
- package/dist/scheduler/gateway-setup.d.ts.map +1 -1
- package/dist/scheduler/gateway-setup.js +2 -11
- package/dist/scheduler/gateway-setup.js.map +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +95 -55
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/validation.js +1 -1
- package/dist/scheduler/validation.js.map +1 -1
- package/dist/scheduler/watcher.d.ts +2 -8
- package/dist/scheduler/watcher.d.ts.map +1 -1
- package/dist/scheduler/watcher.js +7 -104
- package/dist/scheduler/watcher.js.map +1 -1
- package/dist/shared/config/load-agent.js +2 -2
- package/dist/shared/config/load-agent.js.map +1 -1
- package/dist/shared/config/load-project.js +2 -2
- package/dist/shared/config/load-project.js.map +1 -1
- package/dist/shared/config/types.d.ts +10 -2
- package/dist/shared/config/types.d.ts.map +1 -1
- package/dist/shared/constants.d.ts +1 -1
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +2 -2
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/credential-refs.js +1 -1
- package/dist/shared/credential-refs.js.map +1 -1
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +2 -2
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/validation.js +1 -1
- package/dist/shared/validation.js.map +1 -1
- package/dist/transport/docker-exec.d.ts +41 -0
- package/dist/transport/docker-exec.d.ts.map +1 -0
- package/dist/transport/docker-exec.js +331 -0
- package/dist/transport/docker-exec.js.map +1 -0
- package/dist/transport/host-user.d.ts +37 -0
- package/dist/transport/host-user.d.ts.map +1 -0
- package/dist/transport/host-user.js +232 -0
- package/dist/transport/host-user.js.map +1 -0
- package/dist/transport/index.d.ts +8 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +7 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/memory.d.ts +35 -0
- package/dist/transport/memory.d.ts.map +1 -0
- package/dist/transport/memory.js +110 -0
- package/dist/transport/memory.js.map +1 -0
- package/dist/transport/operations.d.ts +68 -0
- package/dist/transport/operations.d.ts.map +1 -0
- package/dist/transport/operations.js +164 -0
- package/dist/transport/operations.js.map +1 -0
- package/dist/transport/ssh.d.ts +43 -0
- package/dist/transport/ssh.d.ts.map +1 -0
- package/dist/transport/ssh.js +225 -0
- package/dist/transport/ssh.js.map +1 -0
- package/dist/transport/transport.d.ts +59 -0
- package/dist/transport/transport.d.ts.map +1 -0
- package/dist/transport/transport.js +29 -0
- package/dist/transport/transport.js.map +1 -0
- package/package.json +1 -1
- package/dist/agents/container-entry.d.ts +0 -31
- package/dist/agents/container-entry.d.ts.map +0 -1
- package/dist/agents/container-entry.js +0 -302
- package/dist/agents/container-entry.js.map +0 -1
- package/dist/agents/container-runner.d.ts +0 -59
- package/dist/agents/container-runner.d.ts.map +0 -1
- package/dist/agents/container-runner.js +0 -472
- package/dist/agents/container-runner.js.map +0 -1
- package/dist/agents/harness/claude-cli-harness.d.ts +0 -15
- package/dist/agents/harness/claude-cli-harness.d.ts.map +0 -1
- package/dist/agents/harness/claude-cli-harness.js +0 -260
- package/dist/agents/harness/claude-cli-harness.js.map +0 -1
- package/dist/agents/harness/consumer.d.ts +0 -31
- package/dist/agents/harness/consumer.d.ts.map +0 -1
- package/dist/agents/harness/consumer.js +0 -165
- package/dist/agents/harness/consumer.js.map +0 -1
- package/dist/agents/harness/factory.d.ts +0 -9
- package/dist/agents/harness/factory.d.ts.map +0 -1
- package/dist/agents/harness/factory.js +0 -25
- package/dist/agents/harness/factory.js.map +0 -1
- package/dist/agents/harness/index.d.ts +0 -9
- package/dist/agents/harness/index.d.ts.map +0 -1
- package/dist/agents/harness/index.js +0 -5
- package/dist/agents/harness/index.js.map +0 -1
- package/dist/agents/harness/pi-harness.d.ts +0 -18
- package/dist/agents/harness/pi-harness.d.ts.map +0 -1
- package/dist/agents/harness/pi-harness.js +0 -278
- package/dist/agents/harness/pi-harness.js.map +0 -1
- package/dist/agents/harness/types.d.ts +0 -57
- package/dist/agents/harness/types.d.ts.map +0 -1
- package/dist/agents/harness/types.js +0 -2
- package/dist/agents/harness/types.js.map +0 -1
- package/dist/agents/session-loop.d.ts +0 -36
- package/dist/agents/session-loop.d.ts.map +0 -1
- package/dist/agents/session-loop.js +0 -216
- package/dist/agents/session-loop.js.map +0 -1
- package/dist/agents/signals.d.ts +0 -34
- package/dist/agents/signals.d.ts.map +0 -1
- package/dist/agents/signals.js +0 -122
- package/dist/agents/signals.js.map +0 -1
- package/dist/cli/commands/claude.d.ts +0 -4
- package/dist/cli/commands/claude.d.ts.map +0 -1
- package/dist/cli/commands/claude.js +0 -6
- package/dist/cli/commands/claude.js.map +0 -1
- package/dist/cli/commands/run-agent.d.ts +0 -14
- package/dist/cli/commands/run-agent.d.ts.map +0 -1
- package/dist/cli/commands/run-agent.js +0 -270
- package/dist/cli/commands/run-agent.js.map +0 -1
- package/dist/docker/cloud-run-runtime.d.ts +0 -48
- package/dist/docker/cloud-run-runtime.d.ts.map +0 -1
- package/dist/docker/cloud-run-runtime.js +0 -490
- package/dist/docker/cloud-run-runtime.js.map +0 -1
- package/dist/docker/image.d.ts +0 -19
- package/dist/docker/image.d.ts.map +0 -1
- package/dist/docker/image.js +0 -111
- package/dist/docker/image.js.map +0 -1
- package/dist/execution/call-dispatcher.d.ts +0 -11
- package/dist/execution/call-dispatcher.d.ts.map +0 -1
- package/dist/execution/call-dispatcher.js +0 -75
- package/dist/execution/call-dispatcher.js.map +0 -1
- package/dist/execution/container-registry.d.ts +0 -42
- package/dist/execution/container-registry.d.ts.map +0 -1
- package/dist/execution/container-registry.js +0 -76
- package/dist/execution/container-registry.js.map +0 -1
- package/dist/execution/image-builder.d.ts +0 -48
- package/dist/execution/image-builder.d.ts.map +0 -1
- package/dist/execution/image-builder.js +0 -155
- package/dist/execution/image-builder.js.map +0 -1
- package/dist/execution/routes/calls.d.ts +0 -18
- package/dist/execution/routes/calls.d.ts.map +0 -1
- package/dist/execution/routes/calls.js +0 -74
- package/dist/execution/routes/calls.js.map +0 -1
- package/dist/execution/routes/locks.d.ts +0 -10
- package/dist/execution/routes/locks.d.ts.map +0 -1
- package/dist/execution/routes/locks.js +0 -166
- package/dist/execution/routes/locks.js.map +0 -1
- package/dist/execution/routes/shutdown.d.ts +0 -5
- package/dist/execution/routes/shutdown.d.ts.map +0 -1
- package/dist/execution/routes/shutdown.js +0 -24
- package/dist/execution/routes/shutdown.js.map +0 -1
- package/dist/execution/routes/signals.d.ts +0 -12
- package/dist/execution/routes/signals.d.ts.map +0 -1
- package/dist/execution/routes/signals.js +0 -123
- package/dist/execution/routes/signals.js.map +0 -1
- package/dist/execution/types.d.ts +0 -23
- package/dist/execution/types.d.ts.map +0 -1
- package/dist/execution/types.js +0 -2
- package/dist/execution/types.js.map +0 -1
- package/dist/gateway/routes/execution.d.ts +0 -24
- package/dist/gateway/routes/execution.d.ts.map +0 -1
- package/dist/gateway/routes/execution.js +0 -13
- package/dist/gateway/routes/execution.js.map +0 -1
- package/dist/scheduler/orphan-recovery.d.ts +0 -25
- package/dist/scheduler/orphan-recovery.d.ts.map +0 -1
- package/dist/scheduler/orphan-recovery.js +0 -144
- package/dist/scheduler/orphan-recovery.js.map +0 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SshTransport — executes commands on a remote host via a persistent SSH
|
|
3
|
+
* connection. Shell state (cwd, env vars) persists across exec() calls.
|
|
4
|
+
*
|
|
5
|
+
* File I/O uses the same SSH connection's stdin/stdout with base64 encoding
|
|
6
|
+
* to avoid opening additional connections.
|
|
7
|
+
*/
|
|
8
|
+
import { spawn } from "child_process";
|
|
9
|
+
import { randomBytes } from "crypto";
|
|
10
|
+
/** How long to wait for the shell to become ready after connecting (ms). */
|
|
11
|
+
const SHELL_READY_TIMEOUT_MS = 15_000;
|
|
12
|
+
/** Default command execution timeout (ms). */
|
|
13
|
+
const DEFAULT_EXEC_TIMEOUT_MS = 300_000;
|
|
14
|
+
/** Generate a unique delimiter that won't appear in command output. */
|
|
15
|
+
function makeDelimiter() {
|
|
16
|
+
return `__AL_DELIM_${randomBytes(8).toString("hex")}__`;
|
|
17
|
+
}
|
|
18
|
+
export class SshTransport {
|
|
19
|
+
opts;
|
|
20
|
+
shell = null;
|
|
21
|
+
ready = false;
|
|
22
|
+
buffer = "";
|
|
23
|
+
constructor(opts) {
|
|
24
|
+
this.opts = opts;
|
|
25
|
+
}
|
|
26
|
+
/** Establish the persistent SSH shell session. Must be called before exec(). */
|
|
27
|
+
async connect() {
|
|
28
|
+
const args = [
|
|
29
|
+
"-tt", // Force PTY allocation for interactive shell
|
|
30
|
+
"-o", "BatchMode=yes",
|
|
31
|
+
"-o", "ServerAliveInterval=15",
|
|
32
|
+
"-o", "ServerAliveCountMax=3",
|
|
33
|
+
];
|
|
34
|
+
if (this.opts.port) {
|
|
35
|
+
args.push("-p", String(this.opts.port));
|
|
36
|
+
}
|
|
37
|
+
if (this.opts.keyPath) {
|
|
38
|
+
args.push("-i", this.opts.keyPath);
|
|
39
|
+
}
|
|
40
|
+
// Apply custom SSH options
|
|
41
|
+
if (this.opts.sshOptions) {
|
|
42
|
+
for (const [key, value] of Object.entries(this.opts.sshOptions)) {
|
|
43
|
+
args.push("-o", `${key}=${value}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const target = this.opts.user
|
|
47
|
+
? `${this.opts.user}@${this.opts.host}`
|
|
48
|
+
: this.opts.host;
|
|
49
|
+
args.push(target);
|
|
50
|
+
// Launch interactive shell
|
|
51
|
+
args.push("bash", "--norc", "--noprofile");
|
|
52
|
+
this.shell = spawn("ssh", args, {
|
|
53
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
54
|
+
});
|
|
55
|
+
this.shell.stdout.on("data", (chunk) => {
|
|
56
|
+
// Strip ANSI escape sequences and carriage returns from PTY output
|
|
57
|
+
this.buffer += stripAnsi(chunk.toString());
|
|
58
|
+
});
|
|
59
|
+
this.shell.on("exit", () => {
|
|
60
|
+
this.ready = false;
|
|
61
|
+
});
|
|
62
|
+
// Wait for shell to be ready
|
|
63
|
+
const readyDelim = makeDelimiter();
|
|
64
|
+
this.shell.stdin.write(`echo "${readyDelim} $?"\n`);
|
|
65
|
+
await this.waitForDelimiter(readyDelim, this.opts.connectTimeoutMs ?? SHELL_READY_TIMEOUT_MS);
|
|
66
|
+
this.ready = true;
|
|
67
|
+
// Set initial cwd if specified
|
|
68
|
+
if (this.opts.cwd) {
|
|
69
|
+
await this.exec(`cd ${shellQuote(this.opts.cwd)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Wait for a delimiter to appear in the stdout buffer.
|
|
74
|
+
* Returns the output before the delimiter and the exit code.
|
|
75
|
+
*/
|
|
76
|
+
waitForDelimiter(delimiter, timeoutMs) {
|
|
77
|
+
return new Promise((resolve, reject) => {
|
|
78
|
+
const timer = setTimeout(() => {
|
|
79
|
+
clearInterval(poll);
|
|
80
|
+
reject(new Error(`Timed out waiting for SSH shell response (${timeoutMs}ms)`));
|
|
81
|
+
}, timeoutMs);
|
|
82
|
+
const check = () => {
|
|
83
|
+
const idx = this.buffer.indexOf(delimiter);
|
|
84
|
+
if (idx === -1)
|
|
85
|
+
return;
|
|
86
|
+
const lineEnd = this.buffer.indexOf("\n", idx);
|
|
87
|
+
if (lineEnd === -1)
|
|
88
|
+
return;
|
|
89
|
+
const output = this.buffer.slice(0, idx);
|
|
90
|
+
const delimLine = this.buffer.slice(idx, lineEnd);
|
|
91
|
+
this.buffer = this.buffer.slice(lineEnd + 1);
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
clearInterval(poll);
|
|
94
|
+
const match = delimLine.match(/\s+(\d+)\s*$/);
|
|
95
|
+
const exitCode = match ? parseInt(match[1], 10) : 0;
|
|
96
|
+
resolve({ output, exitCode });
|
|
97
|
+
};
|
|
98
|
+
const poll = setInterval(check, 10);
|
|
99
|
+
check();
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
async exec(command, options) {
|
|
103
|
+
if (!this.shell || !this.ready) {
|
|
104
|
+
throw new Error("Transport not connected. Call connect() first.");
|
|
105
|
+
}
|
|
106
|
+
const delimiter = makeDelimiter();
|
|
107
|
+
let stderr = "";
|
|
108
|
+
const stderrHandler = (chunk) => {
|
|
109
|
+
stderr += chunk.toString();
|
|
110
|
+
};
|
|
111
|
+
this.shell.stderr.on("data", stderrHandler);
|
|
112
|
+
// Abort handling
|
|
113
|
+
let aborted = false;
|
|
114
|
+
const onAbort = () => {
|
|
115
|
+
aborted = true;
|
|
116
|
+
this.shell?.stdin?.write("\x03\n");
|
|
117
|
+
};
|
|
118
|
+
if (options?.signal) {
|
|
119
|
+
if (options.signal.aborted) {
|
|
120
|
+
this.shell.stderr.removeListener("data", stderrHandler);
|
|
121
|
+
return { stdout: "", stderr: "Aborted", exitCode: 130 };
|
|
122
|
+
}
|
|
123
|
+
options.signal.addEventListener("abort", onAbort, { once: true });
|
|
124
|
+
}
|
|
125
|
+
const timeoutMs = options?.timeout ?? DEFAULT_EXEC_TIMEOUT_MS;
|
|
126
|
+
// Streaming
|
|
127
|
+
let streamingInterval;
|
|
128
|
+
let lastStreamedIdx = 0;
|
|
129
|
+
if (options?.onData) {
|
|
130
|
+
streamingInterval = setInterval(() => {
|
|
131
|
+
if (this.buffer.length > lastStreamedIdx) {
|
|
132
|
+
const newData = this.buffer.slice(lastStreamedIdx);
|
|
133
|
+
const delimIdx = newData.indexOf("__AL_DELIM_");
|
|
134
|
+
const safeData = delimIdx >= 0 ? newData.slice(0, delimIdx) : newData;
|
|
135
|
+
if (safeData.length > 0) {
|
|
136
|
+
options.onData(Buffer.from(safeData));
|
|
137
|
+
lastStreamedIdx += safeData.length;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}, 50);
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
this.shell.stdin.write(`${command}\necho "${delimiter} $?"\n`);
|
|
144
|
+
const { output, exitCode } = await this.waitForDelimiter(delimiter, timeoutMs);
|
|
145
|
+
return {
|
|
146
|
+
stdout: output.trimEnd(),
|
|
147
|
+
stderr: stderr.trimEnd(),
|
|
148
|
+
exitCode: aborted ? 130 : exitCode,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
if (aborted) {
|
|
153
|
+
return { stdout: "", stderr: "Aborted", exitCode: 130 };
|
|
154
|
+
}
|
|
155
|
+
throw err;
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
this.shell.stderr.removeListener("data", stderrHandler);
|
|
159
|
+
if (options?.signal) {
|
|
160
|
+
options.signal.removeEventListener("abort", onAbort);
|
|
161
|
+
}
|
|
162
|
+
if (streamingInterval)
|
|
163
|
+
clearInterval(streamingInterval);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async readFiles(paths) {
|
|
167
|
+
const result = new Map();
|
|
168
|
+
if (paths.length === 0)
|
|
169
|
+
return result;
|
|
170
|
+
// Use base64 encoding over the shell to read files without extra connections.
|
|
171
|
+
// For each file: base64-encode → capture in delimiter-framed output → decode locally.
|
|
172
|
+
for (const path of paths) {
|
|
173
|
+
try {
|
|
174
|
+
const { stdout, exitCode } = await this.exec(`test -r ${shellQuote(path)} && base64 ${shellQuote(path)} || echo "__AL_FILE_MISSING__"`, { timeout: 30_000 });
|
|
175
|
+
if (exitCode === 0 && !stdout.includes("__AL_FILE_MISSING__")) {
|
|
176
|
+
// Remove any whitespace (base64 may be wrapped)
|
|
177
|
+
const cleaned = stdout.replace(/\s/g, "");
|
|
178
|
+
result.set(path, Buffer.from(cleaned, "base64"));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Skip files that can't be read
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
async writeFiles(files) {
|
|
188
|
+
if (files.size === 0)
|
|
189
|
+
return;
|
|
190
|
+
// Use base64 encoding over the shell to write files without extra connections.
|
|
191
|
+
for (const [path, content] of files) {
|
|
192
|
+
const dir = path.substring(0, path.lastIndexOf("/"));
|
|
193
|
+
if (dir && dir !== "/") {
|
|
194
|
+
await this.exec(`mkdir -p ${shellQuote(dir)}`, { timeout: 10_000 });
|
|
195
|
+
}
|
|
196
|
+
const b64 = content.toString("base64");
|
|
197
|
+
// Use heredoc to avoid shell argument length limits
|
|
198
|
+
await this.exec(`echo '${b64}' | base64 -d > ${shellQuote(path)}`, { timeout: 30_000 });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async close() {
|
|
202
|
+
if (this.shell) {
|
|
203
|
+
this.ready = false;
|
|
204
|
+
try {
|
|
205
|
+
this.shell.stdin?.write("exit\n");
|
|
206
|
+
this.shell.stdin?.end();
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// stdin may already be closed
|
|
210
|
+
}
|
|
211
|
+
this.shell.kill();
|
|
212
|
+
this.shell = null;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/** Escape a string for use in a shell command. */
|
|
217
|
+
function shellQuote(s) {
|
|
218
|
+
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
219
|
+
}
|
|
220
|
+
/** Strip ANSI escape sequences and carriage returns from PTY output. */
|
|
221
|
+
function stripAnsi(s) {
|
|
222
|
+
// eslint-disable-next-line no-control-regex
|
|
223
|
+
return s.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, "").replace(/\r/g, "");
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=ssh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/transport/ssh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport — the abstraction layer between the scheduler (brain) and runtime (body).
|
|
3
|
+
*
|
|
4
|
+
* A transport provides a persistent connection to a runtime environment (container, VM,
|
|
5
|
+
* OS user) through which the scheduler can execute commands and transfer files. The agent
|
|
6
|
+
* (LLM) doesn't know about the transport — it sees standard tools (bash, read, write, edit)
|
|
7
|
+
* that happen to execute remotely.
|
|
8
|
+
*
|
|
9
|
+
* Transport implementations:
|
|
10
|
+
* - DockerExecTransport — local Docker via `docker exec`
|
|
11
|
+
* - SshTransport — remote VMs via SSH (future)
|
|
12
|
+
* - HostUserTransport — local OS user via `sudo -u` (future)
|
|
13
|
+
*/
|
|
14
|
+
/** Result of executing a command on the runtime. */
|
|
15
|
+
export interface ExecResult {
|
|
16
|
+
stdout: string;
|
|
17
|
+
stderr: string;
|
|
18
|
+
exitCode: number | null;
|
|
19
|
+
}
|
|
20
|
+
/** Options for command execution. */
|
|
21
|
+
export interface ExecOptions {
|
|
22
|
+
/** Callback for streaming stdout data as it arrives. */
|
|
23
|
+
onData?: (data: Buffer) => void;
|
|
24
|
+
/** AbortSignal to cancel execution. */
|
|
25
|
+
signal?: AbortSignal;
|
|
26
|
+
/** Timeout in milliseconds. */
|
|
27
|
+
timeout?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Transport interface — the contract all transport implementations must satisfy.
|
|
31
|
+
*
|
|
32
|
+
* Provides two channels:
|
|
33
|
+
* 1. A persistent shell session for command execution (exec)
|
|
34
|
+
* 2. A file transfer mechanism for reading/writing files (readFiles/writeFiles)
|
|
35
|
+
*/
|
|
36
|
+
export interface Transport {
|
|
37
|
+
/**
|
|
38
|
+
* Execute a command in the persistent shell session.
|
|
39
|
+
* Shell state (cwd, env vars) persists across calls.
|
|
40
|
+
*/
|
|
41
|
+
exec(command: string, options?: ExecOptions): Promise<ExecResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Read multiple files from the runtime in a single batch.
|
|
44
|
+
* Returns a map of path → contents. Missing files are omitted from the result.
|
|
45
|
+
*/
|
|
46
|
+
readFiles(paths: string[]): Promise<Map<string, Buffer>>;
|
|
47
|
+
/**
|
|
48
|
+
* Write multiple files to the runtime in a single batch.
|
|
49
|
+
* Creates parent directories as needed.
|
|
50
|
+
*/
|
|
51
|
+
writeFiles(files: Map<string, Buffer>): Promise<void>;
|
|
52
|
+
/** Close the transport connection and release resources. */
|
|
53
|
+
close(): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
/** Convenience: read a single file via the transport. */
|
|
56
|
+
export declare function readFile(transport: Transport, path: string): Promise<Buffer>;
|
|
57
|
+
/** Convenience: write a single file via the transport. */
|
|
58
|
+
export declare function writeFile(transport: Transport, path: string, content: Buffer): Promise<void>;
|
|
59
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/transport/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAElE;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEzD;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD,4DAA4D;IAC5D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,yDAAyD;AACzD,wBAAsB,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlF;AAED,0DAA0D;AAC1D,wBAAsB,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport — the abstraction layer between the scheduler (brain) and runtime (body).
|
|
3
|
+
*
|
|
4
|
+
* A transport provides a persistent connection to a runtime environment (container, VM,
|
|
5
|
+
* OS user) through which the scheduler can execute commands and transfer files. The agent
|
|
6
|
+
* (LLM) doesn't know about the transport — it sees standard tools (bash, read, write, edit)
|
|
7
|
+
* that happen to execute remotely.
|
|
8
|
+
*
|
|
9
|
+
* Transport implementations:
|
|
10
|
+
* - DockerExecTransport — local Docker via `docker exec`
|
|
11
|
+
* - SshTransport — remote VMs via SSH (future)
|
|
12
|
+
* - HostUserTransport — local OS user via `sudo -u` (future)
|
|
13
|
+
*/
|
|
14
|
+
/** Convenience: read a single file via the transport. */
|
|
15
|
+
export async function readFile(transport, path) {
|
|
16
|
+
const result = await transport.readFiles([path]);
|
|
17
|
+
const content = result.get(path);
|
|
18
|
+
if (!content) {
|
|
19
|
+
throw new Error(`File not found: ${path}`);
|
|
20
|
+
}
|
|
21
|
+
return content;
|
|
22
|
+
}
|
|
23
|
+
/** Convenience: write a single file via the transport. */
|
|
24
|
+
export async function writeFile(transport, path, content) {
|
|
25
|
+
const files = new Map();
|
|
26
|
+
files.set(path, content);
|
|
27
|
+
await transport.writeFiles(files);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiDH,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,SAAoB,EAAE,IAAY;IAC/D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAAoB,EAAE,IAAY,EAAE,OAAe;IACjF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,MAAM,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { DefaultResourceLoader, SettingsManager } from "@mariozechner/pi-coding-agent";
|
|
2
|
-
import type { AgentConfig } from "../shared/config.js";
|
|
3
|
-
/**
|
|
4
|
-
* Components initialized once and reused across invocations (Lambda) or
|
|
5
|
-
* used for the single run (Docker/ECS).
|
|
6
|
-
*/
|
|
7
|
-
export interface AgentInit {
|
|
8
|
-
agentConfig: AgentConfig;
|
|
9
|
-
skillBody: string;
|
|
10
|
-
timeoutSeconds: number;
|
|
11
|
-
resourceLoader: InstanceType<typeof DefaultResourceLoader>;
|
|
12
|
-
settingsManager: ReturnType<typeof SettingsManager.inMemory>;
|
|
13
|
-
signalDir: string;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* One-time initialization — called once during Lambda init (cold start) or
|
|
17
|
-
* at the start of a direct container run. Sets up PATH, signal dir, loads
|
|
18
|
-
* static config, creates reusable model/resourceLoader/settingsManager.
|
|
19
|
-
*/
|
|
20
|
-
export declare function initAgent(): Promise<AgentInit>;
|
|
21
|
-
/**
|
|
22
|
-
* Per-invocation handler. Loads credentials, creates a session, runs the
|
|
23
|
-
* prompt, reads signals, and returns an exit code.
|
|
24
|
-
*/
|
|
25
|
-
export declare function handleInvocation(init: AgentInit): Promise<number>;
|
|
26
|
-
/**
|
|
27
|
-
* Legacy single-function entrypoint. Calls initAgent() then handleInvocation().
|
|
28
|
-
* Kept for backward compatibility with non-Lambda container runs.
|
|
29
|
-
*/
|
|
30
|
-
export declare function runAgent(): Promise<number>;
|
|
31
|
-
//# sourceMappingURL=container-entry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"container-entry.d.ts","sourceRoot":"","sources":["../../src/agents/container-entry.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,qBAAqB,EACrB,eAAe,EAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAyBvD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAC;IAC3D,eAAe,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC7D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAiGpD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAkMvE;AAED;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAGhD"}
|