@aiden-ade/sandbox-agent 0.1.4 → 0.1.6
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/core-agent.d.ts +31 -0
- package/dist/core-agent.d.ts.map +1 -0
- package/dist/core-agent.js +238 -0
- package/dist/core-agent.js.map +1 -0
- package/dist/index.cjs +117 -101
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime-backends.d.ts +20 -0
- package/dist/runtime-backends.d.ts.map +1 -0
- package/dist/runtime-backends.js +769 -0
- package/dist/runtime-backends.js.map +1 -0
- package/dist/sandbox.d.ts +14 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +139 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/types.d.ts +210 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/updater.d.ts +15 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +50 -0
- package/dist/updater.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/web-presenter.d.ts +26 -0
- package/dist/web-presenter.d.ts.map +1 -0
- package/dist/web-presenter.js +73 -0
- package/dist/web-presenter.js.map +1 -0
- package/dist/ws-client.d.ts +27 -0
- package/dist/ws-client.d.ts.map +1 -0
- package/dist/ws-client.js +56 -0
- package/dist/ws-client.js.map +1 -0
- package/package.json +6 -7
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Agent for Aiden
|
|
3
|
+
* Runs CLI-backed agent runtimes with shared lifecycle handling.
|
|
4
|
+
*/
|
|
5
|
+
import type { AgentConfig, AgentBackendKind, AgentPresenter, AgentResult, AgentSupportTier } from "./types.js";
|
|
6
|
+
interface AgentRuntimeConfig {
|
|
7
|
+
backendKind?: AgentBackendKind;
|
|
8
|
+
runtimeCommand?: string;
|
|
9
|
+
runtimeArgs?: string[];
|
|
10
|
+
supportTier?: AgentSupportTier;
|
|
11
|
+
}
|
|
12
|
+
export declare class CoreAgent {
|
|
13
|
+
private presenter;
|
|
14
|
+
private abortController;
|
|
15
|
+
private runtime;
|
|
16
|
+
private pendingQuestionResolvers;
|
|
17
|
+
private pendingPlanApprovalResolvers;
|
|
18
|
+
constructor(presenter: AgentPresenter, runtime: AgentRuntimeConfig);
|
|
19
|
+
submitAnswer(questionId: string, answers: Record<string, string> | null): boolean;
|
|
20
|
+
submitPlanApproval(approvalId: string, approved: boolean): boolean;
|
|
21
|
+
abort(): void;
|
|
22
|
+
private isAbortError;
|
|
23
|
+
private resolveBackendKind;
|
|
24
|
+
private getDefaultSupportTier;
|
|
25
|
+
private buildCliEnvironment;
|
|
26
|
+
private buildRuntimeConfig;
|
|
27
|
+
private runCliBackend;
|
|
28
|
+
run(config: AgentConfig): Promise<AgentResult>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=core-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-agent.d.ts","sourceRoot":"","sources":["../src/core-agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,UAAU,kBAAkB;IAC1B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAmDD,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,wBAAwB,CACpB;IACZ,OAAO,CAAC,4BAA4B,CAAuD;gBAE/E,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB;IAK3D,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,OAAO;IAQjF,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO;IAQlE,KAAK,IAAI,IAAI;IAIpB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,mBAAmB;YAeb,kBAAkB;YAoClB,aAAa;IA4CrB,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;CAuErD"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Agent for Aiden
|
|
3
|
+
* Runs CLI-backed agent runtimes with shared lifecycle handling.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, mkdirSync, realpathSync } from "node:fs";
|
|
6
|
+
import { homedir } from "node:os";
|
|
7
|
+
import { join, resolve } from "node:path";
|
|
8
|
+
import { createClaudeCliBackend, createCodexRuntimeBackend, createGeminiCliBackend, createGenericCliPassthroughBackend, } from "./runtime-backends.js";
|
|
9
|
+
const MODE_CONFIG = {
|
|
10
|
+
agent: {},
|
|
11
|
+
plan: {
|
|
12
|
+
systemPromptHint: "You are in plan mode. Focus on analysis, sequencing, and implementation planning rather than making edits.",
|
|
13
|
+
},
|
|
14
|
+
debug: {
|
|
15
|
+
systemPromptHint: "You are in debug mode. Prioritize reproducing the issue, isolating the cause, and validating the fix.",
|
|
16
|
+
},
|
|
17
|
+
ask: {
|
|
18
|
+
systemPromptHint: "You are in ask mode. Stay read-only and explain the code or architecture clearly without changing files.",
|
|
19
|
+
},
|
|
20
|
+
review: {
|
|
21
|
+
systemPromptHint: "You are in review mode. Inspect the changes, identify real issues, and summarize risks and regressions.",
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
const DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
25
|
+
function canonicalizePath(inputPath) {
|
|
26
|
+
try {
|
|
27
|
+
const resolved = resolve(inputPath);
|
|
28
|
+
return existsSync(resolved) ? realpathSync(resolved) : resolved;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.warn("CoreAgent", "Failed to canonicalize path", { inputPath, error });
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function buildPromptWithFiles(task, files) {
|
|
36
|
+
if (!files || files.length === 0) {
|
|
37
|
+
return task;
|
|
38
|
+
}
|
|
39
|
+
const fileList = files.map((file) => `- ${file.filename} (${file.label}): ${file.tempPath}`).join("\n");
|
|
40
|
+
return `${task}
|
|
41
|
+
|
|
42
|
+
The user has attached the following files. You can read them using your available tools:
|
|
43
|
+
${fileList}`;
|
|
44
|
+
}
|
|
45
|
+
export class CoreAgent {
|
|
46
|
+
presenter;
|
|
47
|
+
abortController = null;
|
|
48
|
+
runtime;
|
|
49
|
+
pendingQuestionResolvers = new Map();
|
|
50
|
+
pendingPlanApprovalResolvers = new Map();
|
|
51
|
+
constructor(presenter, runtime) {
|
|
52
|
+
this.presenter = presenter;
|
|
53
|
+
this.runtime = runtime;
|
|
54
|
+
}
|
|
55
|
+
submitAnswer(questionId, answers) {
|
|
56
|
+
const resolver = this.pendingQuestionResolvers.get(questionId);
|
|
57
|
+
if (!resolver)
|
|
58
|
+
return false;
|
|
59
|
+
resolver(answers);
|
|
60
|
+
this.pendingQuestionResolvers.delete(questionId);
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
submitPlanApproval(approvalId, approved) {
|
|
64
|
+
const resolver = this.pendingPlanApprovalResolvers.get(approvalId);
|
|
65
|
+
if (!resolver)
|
|
66
|
+
return false;
|
|
67
|
+
resolver(approved);
|
|
68
|
+
this.pendingPlanApprovalResolvers.delete(approvalId);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
abort() {
|
|
72
|
+
this.abortController?.abort();
|
|
73
|
+
}
|
|
74
|
+
isAbortError(error) {
|
|
75
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
|
|
79
|
+
return (message.includes("aborted") ||
|
|
80
|
+
message.includes("interrupted") ||
|
|
81
|
+
message.includes("cancelled") ||
|
|
82
|
+
message.includes("canceled"));
|
|
83
|
+
}
|
|
84
|
+
resolveBackendKind(config) {
|
|
85
|
+
return this.runtime.backendKind || config.backendKind || "claude_cli";
|
|
86
|
+
}
|
|
87
|
+
getDefaultSupportTier(backendKind) {
|
|
88
|
+
switch (backendKind) {
|
|
89
|
+
case "claude_cli":
|
|
90
|
+
case "codex_app_server":
|
|
91
|
+
case "gemini_cli":
|
|
92
|
+
return "structured";
|
|
93
|
+
case "generic_cli":
|
|
94
|
+
default:
|
|
95
|
+
return "text";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
buildCliEnvironment() {
|
|
99
|
+
const loginEnv = process.env;
|
|
100
|
+
const env = {};
|
|
101
|
+
for (const [key, value] of Object.entries(loginEnv)) {
|
|
102
|
+
if (value !== undefined) {
|
|
103
|
+
env[key] = value;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
env.PATH = `/home/user/.local/node/bin:${env.PATH ?? ""}`;
|
|
107
|
+
return env;
|
|
108
|
+
}
|
|
109
|
+
async buildRuntimeConfig(config, safeProjectPath) {
|
|
110
|
+
const backendKind = this.resolveBackendKind(config);
|
|
111
|
+
const supportTier = config.supportTier || this.getDefaultSupportTier(backendKind);
|
|
112
|
+
const systemPromptParts = [config.systemPrompt?.trim()].filter(Boolean);
|
|
113
|
+
const modeHint = MODE_CONFIG[config.mode || "agent"]?.systemPromptHint;
|
|
114
|
+
if (modeHint) {
|
|
115
|
+
systemPromptParts.push(modeHint);
|
|
116
|
+
}
|
|
117
|
+
if (safeProjectPath) {
|
|
118
|
+
systemPromptParts.push([
|
|
119
|
+
`You are working inside: ${safeProjectPath}`,
|
|
120
|
+
"Prefer relative paths and keep your work scoped to this project.",
|
|
121
|
+
].join("\n"));
|
|
122
|
+
}
|
|
123
|
+
if (config.images?.length) {
|
|
124
|
+
this.presenter.onLog(`Image attachments are not yet passed directly to the CLI agent. Attached image count: ${config.images.length}.`);
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
...config,
|
|
128
|
+
backendKind,
|
|
129
|
+
supportTier,
|
|
130
|
+
runtimeCommand: config.runtimeCommand || this.runtime.runtimeCommand,
|
|
131
|
+
runtimeArgs: config.runtimeArgs || this.runtime.runtimeArgs,
|
|
132
|
+
selectedModel: config.selectedModel || DEFAULT_MODEL,
|
|
133
|
+
systemPrompt: systemPromptParts.join("\n\n") || undefined,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
async runCliBackend(config, safeProjectPath) {
|
|
137
|
+
const backendKind = this.resolveBackendKind(config);
|
|
138
|
+
const defaultCwd = join(homedir(), "Documents", "aiden");
|
|
139
|
+
if (!existsSync(defaultCwd)) {
|
|
140
|
+
mkdirSync(defaultCwd, { recursive: true });
|
|
141
|
+
}
|
|
142
|
+
const runtimeConfig = await this.buildRuntimeConfig(config, safeProjectPath);
|
|
143
|
+
const cwd = runtimeConfig.worktreePath || safeProjectPath || runtimeConfig.cwd || defaultCwd;
|
|
144
|
+
const promptText = buildPromptWithFiles(runtimeConfig.task, runtimeConfig.files);
|
|
145
|
+
const env = this.buildCliEnvironment();
|
|
146
|
+
const runtimeCommand = runtimeConfig.runtimeCommand || this.runtime.runtimeCommand;
|
|
147
|
+
const runtimeArgs = runtimeConfig.runtimeArgs || this.runtime.runtimeArgs || [];
|
|
148
|
+
const backend = backendKind === "claude_cli"
|
|
149
|
+
? createClaudeCliBackend(runtimeCommand || "claude", runtimeArgs)
|
|
150
|
+
: backendKind === "codex_app_server"
|
|
151
|
+
? createCodexRuntimeBackend(runtimeCommand || "codex", runtimeArgs)
|
|
152
|
+
: backendKind === "gemini_cli"
|
|
153
|
+
? createGeminiCliBackend(runtimeCommand || "gemini", runtimeArgs)
|
|
154
|
+
: createGenericCliPassthroughBackend(runtimeCommand || "generic-cli", runtimeArgs);
|
|
155
|
+
const result = await backend.run({
|
|
156
|
+
presenter: this.presenter,
|
|
157
|
+
config: runtimeConfig,
|
|
158
|
+
abortController: this.abortController,
|
|
159
|
+
cwd,
|
|
160
|
+
env,
|
|
161
|
+
promptText,
|
|
162
|
+
});
|
|
163
|
+
const normalizedResult = {
|
|
164
|
+
...result,
|
|
165
|
+
backendKind: backend.kind,
|
|
166
|
+
supportTier: backend.supportTier,
|
|
167
|
+
runtimeSessionId: result.runtimeSessionId || result.providerSessionId,
|
|
168
|
+
providerSessionId: result.providerSessionId || result.runtimeSessionId,
|
|
169
|
+
};
|
|
170
|
+
this.presenter.onComplete(normalizedResult);
|
|
171
|
+
return normalizedResult;
|
|
172
|
+
}
|
|
173
|
+
async run(config) {
|
|
174
|
+
this.abortController = new AbortController();
|
|
175
|
+
const backendKind = this.resolveBackendKind(config);
|
|
176
|
+
const supportTier = config.supportTier || this.getDefaultSupportTier(backendKind);
|
|
177
|
+
const initialConfig = {
|
|
178
|
+
...config,
|
|
179
|
+
backendKind,
|
|
180
|
+
supportTier,
|
|
181
|
+
runtimeCommand: config.runtimeCommand || this.runtime.runtimeCommand,
|
|
182
|
+
runtimeArgs: config.runtimeArgs || this.runtime.runtimeArgs,
|
|
183
|
+
};
|
|
184
|
+
this.presenter.onStart(initialConfig);
|
|
185
|
+
let safeProjectPath = initialConfig.projectPath;
|
|
186
|
+
if (initialConfig.projectPath) {
|
|
187
|
+
const canonicalized = canonicalizePath(initialConfig.projectPath);
|
|
188
|
+
if (canonicalized) {
|
|
189
|
+
safeProjectPath = canonicalized;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (safeProjectPath && !existsSync(safeProjectPath)) {
|
|
193
|
+
const message = `Project path no longer exists: "${safeProjectPath}". ` +
|
|
194
|
+
"Please update the project's local path in project settings before running the agent.";
|
|
195
|
+
this.presenter.onError(message, true);
|
|
196
|
+
const result = {
|
|
197
|
+
success: false,
|
|
198
|
+
summary: message,
|
|
199
|
+
filesModified: [],
|
|
200
|
+
planFilesCreated: [],
|
|
201
|
+
iterations: 0,
|
|
202
|
+
error: message,
|
|
203
|
+
backendKind,
|
|
204
|
+
supportTier,
|
|
205
|
+
};
|
|
206
|
+
this.presenter.onComplete(result);
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
return await this.runCliBackend(initialConfig, safeProjectPath);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
const interrupted = this.isAbortError(error);
|
|
214
|
+
const message = interrupted
|
|
215
|
+
? "Interrupted by user"
|
|
216
|
+
: error instanceof Error
|
|
217
|
+
? error.message
|
|
218
|
+
: String(error);
|
|
219
|
+
if (!interrupted) {
|
|
220
|
+
console.error("CoreAgent", "CLI runtime failed", error);
|
|
221
|
+
this.presenter.onError(message, true);
|
|
222
|
+
}
|
|
223
|
+
const result = {
|
|
224
|
+
success: false,
|
|
225
|
+
summary: message,
|
|
226
|
+
filesModified: [],
|
|
227
|
+
planFilesCreated: [],
|
|
228
|
+
iterations: 0,
|
|
229
|
+
error: message,
|
|
230
|
+
backendKind,
|
|
231
|
+
supportTier,
|
|
232
|
+
};
|
|
233
|
+
this.presenter.onComplete(result);
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=core-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-agent.js","sourceRoot":"","sources":["../src/core-agent.ts"],"names":[],"mappings":"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"}
|