@astroanywhere/agent 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +76 -0
- package/README.md +178 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +401 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +9 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +16 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +19 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/setup.d.ts +20 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +585 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +16 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +638 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +63 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +5 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +85 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/execution/direct-strategy.d.ts +18 -0
- package/dist/execution/direct-strategy.d.ts.map +1 -0
- package/dist/execution/direct-strategy.js +156 -0
- package/dist/execution/direct-strategy.js.map +1 -0
- package/dist/execution/docker-strategy.d.ts +26 -0
- package/dist/execution/docker-strategy.d.ts.map +1 -0
- package/dist/execution/docker-strategy.js +222 -0
- package/dist/execution/docker-strategy.js.map +1 -0
- package/dist/execution/index.d.ts +14 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +13 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/kubernetes-exec-strategy.d.ts +23 -0
- package/dist/execution/kubernetes-exec-strategy.d.ts.map +1 -0
- package/dist/execution/kubernetes-exec-strategy.js +232 -0
- package/dist/execution/kubernetes-exec-strategy.js.map +1 -0
- package/dist/execution/registry.d.ts +41 -0
- package/dist/execution/registry.d.ts.map +1 -0
- package/dist/execution/registry.js +84 -0
- package/dist/execution/registry.js.map +1 -0
- package/dist/execution/slurm-strategy.d.ts +22 -0
- package/dist/execution/slurm-strategy.d.ts.map +1 -0
- package/dist/execution/slurm-strategy.js +219 -0
- package/dist/execution/slurm-strategy.js.map +1 -0
- package/dist/execution/types.d.ts +72 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +10 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +35 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +126 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/config.d.ts +174 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +399 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/copy-worktree.d.ts +73 -0
- package/dist/lib/copy-worktree.d.ts.map +1 -0
- package/dist/lib/copy-worktree.js +374 -0
- package/dist/lib/copy-worktree.js.map +1 -0
- package/dist/lib/git-pr.d.ts +63 -0
- package/dist/lib/git-pr.d.ts.map +1 -0
- package/dist/lib/git-pr.js +224 -0
- package/dist/lib/git-pr.js.map +1 -0
- package/dist/lib/hardware-id.d.ts +25 -0
- package/dist/lib/hardware-id.d.ts.map +1 -0
- package/dist/lib/hardware-id.js +186 -0
- package/dist/lib/hardware-id.js.map +1 -0
- package/dist/lib/hpc-context.d.ts +35 -0
- package/dist/lib/hpc-context.d.ts.map +1 -0
- package/dist/lib/hpc-context.js +167 -0
- package/dist/lib/hpc-context.js.map +1 -0
- package/dist/lib/prompt-templates.d.ts +195 -0
- package/dist/lib/prompt-templates.d.ts.map +1 -0
- package/dist/lib/prompt-templates.js +353 -0
- package/dist/lib/prompt-templates.js.map +1 -0
- package/dist/lib/providers.d.ts +27 -0
- package/dist/lib/providers.d.ts.map +1 -0
- package/dist/lib/providers.js +372 -0
- package/dist/lib/providers.js.map +1 -0
- package/dist/lib/repo-context.d.ts +18 -0
- package/dist/lib/repo-context.d.ts.map +1 -0
- package/dist/lib/repo-context.js +61 -0
- package/dist/lib/repo-context.js.map +1 -0
- package/dist/lib/repo-utils.d.ts +35 -0
- package/dist/lib/repo-utils.d.ts.map +1 -0
- package/dist/lib/repo-utils.js +222 -0
- package/dist/lib/repo-utils.js.map +1 -0
- package/dist/lib/resources.d.ts +17 -0
- package/dist/lib/resources.d.ts.map +1 -0
- package/dist/lib/resources.js +227 -0
- package/dist/lib/resources.js.map +1 -0
- package/dist/lib/slurm-detect.d.ts +15 -0
- package/dist/lib/slurm-detect.d.ts.map +1 -0
- package/dist/lib/slurm-detect.js +148 -0
- package/dist/lib/slurm-detect.js.map +1 -0
- package/dist/lib/slurm-executor.d.ts +70 -0
- package/dist/lib/slurm-executor.d.ts.map +1 -0
- package/dist/lib/slurm-executor.js +402 -0
- package/dist/lib/slurm-executor.js.map +1 -0
- package/dist/lib/slurm-job-monitor.d.ts +52 -0
- package/dist/lib/slurm-job-monitor.d.ts.map +1 -0
- package/dist/lib/slurm-job-monitor.js +212 -0
- package/dist/lib/slurm-job-monitor.js.map +1 -0
- package/dist/lib/ssh-discovery.d.ts +17 -0
- package/dist/lib/ssh-discovery.d.ts.map +1 -0
- package/dist/lib/ssh-discovery.js +287 -0
- package/dist/lib/ssh-discovery.js.map +1 -0
- package/dist/lib/ssh-installer.d.ts +69 -0
- package/dist/lib/ssh-installer.d.ts.map +1 -0
- package/dist/lib/ssh-installer.js +230 -0
- package/dist/lib/ssh-installer.js.map +1 -0
- package/dist/lib/streaming-prompt.d.ts +48 -0
- package/dist/lib/streaming-prompt.d.ts.map +1 -0
- package/dist/lib/streaming-prompt.js +91 -0
- package/dist/lib/streaming-prompt.js.map +1 -0
- package/dist/lib/task-executor.d.ts +114 -0
- package/dist/lib/task-executor.d.ts.map +1 -0
- package/dist/lib/task-executor.js +753 -0
- package/dist/lib/task-executor.js.map +1 -0
- package/dist/lib/websocket-client.d.ts +200 -0
- package/dist/lib/websocket-client.d.ts.map +1 -0
- package/dist/lib/websocket-client.js +781 -0
- package/dist/lib/websocket-client.js.map +1 -0
- package/dist/lib/workdir-safety.d.ts +63 -0
- package/dist/lib/workdir-safety.d.ts.map +1 -0
- package/dist/lib/workdir-safety.js +247 -0
- package/dist/lib/workdir-safety.js.map +1 -0
- package/dist/lib/worktree-include.d.ts +14 -0
- package/dist/lib/worktree-include.d.ts.map +1 -0
- package/dist/lib/worktree-include.js +68 -0
- package/dist/lib/worktree-include.js.map +1 -0
- package/dist/lib/worktree-setup.d.ts +18 -0
- package/dist/lib/worktree-setup.d.ts.map +1 -0
- package/dist/lib/worktree-setup.js +60 -0
- package/dist/lib/worktree-setup.js.map +1 -0
- package/dist/lib/worktree.d.ts +37 -0
- package/dist/lib/worktree.d.ts.map +1 -0
- package/dist/lib/worktree.js +411 -0
- package/dist/lib/worktree.js.map +1 -0
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +45 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +153 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session-bridge.d.ts +87 -0
- package/dist/mcp/session-bridge.d.ts.map +1 -0
- package/dist/mcp/session-bridge.js +317 -0
- package/dist/mcp/session-bridge.js.map +1 -0
- package/dist/mcp/tools.d.ts +70 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +234 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +197 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +16 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/providers/base-adapter.d.ts +56 -0
- package/dist/providers/base-adapter.d.ts.map +1 -0
- package/dist/providers/base-adapter.js +5 -0
- package/dist/providers/base-adapter.js.map +1 -0
- package/dist/providers/claude-code-adapter.d.ts +27 -0
- package/dist/providers/claude-code-adapter.d.ts.map +1 -0
- package/dist/providers/claude-code-adapter.js +298 -0
- package/dist/providers/claude-code-adapter.js.map +1 -0
- package/dist/providers/claude-sdk-adapter.d.ts +60 -0
- package/dist/providers/claude-sdk-adapter.d.ts.map +1 -0
- package/dist/providers/claude-sdk-adapter.js +632 -0
- package/dist/providers/claude-sdk-adapter.js.map +1 -0
- package/dist/providers/codex-adapter.d.ts +21 -0
- package/dist/providers/codex-adapter.d.ts.map +1 -0
- package/dist/providers/codex-adapter.js +197 -0
- package/dist/providers/codex-adapter.js.map +1 -0
- package/dist/providers/index.d.ts +26 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +58 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/slurm-adapter.d.ts +26 -0
- package/dist/providers/slurm-adapter.d.ts.map +1 -0
- package/dist/providers/slurm-adapter.js +146 -0
- package/dist/providers/slurm-adapter.js.map +1 -0
- package/dist/types.d.ts +592 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Codex CLI provider adapter
|
|
3
|
+
*
|
|
4
|
+
* Executes tasks using the Codex CLI
|
|
5
|
+
*/
|
|
6
|
+
import type { Task, TaskResult } from '../types.js';
|
|
7
|
+
import type { ProviderAdapter, TaskOutputStream, ProviderStatus } from './base-adapter.js';
|
|
8
|
+
export declare class CodexAdapter implements ProviderAdapter {
|
|
9
|
+
readonly type = "codex";
|
|
10
|
+
readonly name = "OpenAI Codex";
|
|
11
|
+
private activeTasks;
|
|
12
|
+
private maxTasks;
|
|
13
|
+
private lastError?;
|
|
14
|
+
private codexPath;
|
|
15
|
+
isAvailable(): Promise<boolean>;
|
|
16
|
+
execute(task: Task, stream: TaskOutputStream, signal: AbortSignal): Promise<TaskResult>;
|
|
17
|
+
getStatus(): Promise<ProviderStatus>;
|
|
18
|
+
private runCodex;
|
|
19
|
+
private extractArtifacts;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=codex-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-adapter.d.ts","sourceRoot":"","sources":["../../src/providers/codex-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG3F,qBAAa,YAAa,YAAW,eAAe;IAClD,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,IAAI,kBAAkB;IAE/B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAuB;IAElC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA0DvF,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAa1C,OAAO,CAAC,QAAQ;IAwGhB,OAAO,CAAC,gBAAgB;CAwBzB"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Codex CLI provider adapter
|
|
3
|
+
*
|
|
4
|
+
* Executes tasks using the Codex CLI
|
|
5
|
+
*/
|
|
6
|
+
import { spawn } from 'node:child_process';
|
|
7
|
+
import { getProvider } from '../lib/providers.js';
|
|
8
|
+
export class CodexAdapter {
|
|
9
|
+
type = 'codex';
|
|
10
|
+
name = 'OpenAI Codex';
|
|
11
|
+
activeTasks = 0;
|
|
12
|
+
maxTasks = 1;
|
|
13
|
+
lastError;
|
|
14
|
+
codexPath = null;
|
|
15
|
+
async isAvailable() {
|
|
16
|
+
const provider = await getProvider('codex');
|
|
17
|
+
if (provider?.available) {
|
|
18
|
+
this.codexPath = provider.path;
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
async execute(task, stream, signal) {
|
|
24
|
+
if (!this.codexPath) {
|
|
25
|
+
const available = await this.isAvailable();
|
|
26
|
+
if (!available) {
|
|
27
|
+
return {
|
|
28
|
+
taskId: task.id,
|
|
29
|
+
status: 'failed',
|
|
30
|
+
error: 'Codex not available',
|
|
31
|
+
startedAt: new Date().toISOString(),
|
|
32
|
+
completedAt: new Date().toISOString(),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
this.activeTasks++;
|
|
37
|
+
const startedAt = new Date().toISOString();
|
|
38
|
+
try {
|
|
39
|
+
stream.status('running', 0, 'Starting Codex');
|
|
40
|
+
const result = await this.runCodex(task, stream, signal);
|
|
41
|
+
return {
|
|
42
|
+
taskId: task.id,
|
|
43
|
+
status: result.exitCode === 0 ? 'completed' : 'failed',
|
|
44
|
+
exitCode: result.exitCode,
|
|
45
|
+
output: result.output,
|
|
46
|
+
error: result.error,
|
|
47
|
+
startedAt,
|
|
48
|
+
completedAt: new Date().toISOString(),
|
|
49
|
+
artifacts: result.artifacts,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
54
|
+
this.lastError = errorMsg;
|
|
55
|
+
if (signal.aborted) {
|
|
56
|
+
return {
|
|
57
|
+
taskId: task.id,
|
|
58
|
+
status: 'cancelled',
|
|
59
|
+
error: 'Task cancelled',
|
|
60
|
+
startedAt,
|
|
61
|
+
completedAt: new Date().toISOString(),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
taskId: task.id,
|
|
66
|
+
status: 'failed',
|
|
67
|
+
error: errorMsg,
|
|
68
|
+
startedAt,
|
|
69
|
+
completedAt: new Date().toISOString(),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
this.activeTasks--;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async getStatus() {
|
|
77
|
+
const available = await this.isAvailable();
|
|
78
|
+
const provider = await getProvider('codex');
|
|
79
|
+
return {
|
|
80
|
+
available,
|
|
81
|
+
version: provider?.version ?? null,
|
|
82
|
+
activeTasks: this.activeTasks,
|
|
83
|
+
maxTasks: this.maxTasks,
|
|
84
|
+
lastError: this.lastError,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
runCodex(task, stream, signal) {
|
|
88
|
+
return new Promise((resolve, reject) => {
|
|
89
|
+
// Codex CLI: use `exec` subcommand for non-interactive execution
|
|
90
|
+
// -a never: fully autonomous, never ask for terminal approval
|
|
91
|
+
// --json: structured JSONL output for parsing
|
|
92
|
+
//
|
|
93
|
+
// Sandbox policy depends on execution context:
|
|
94
|
+
// - docker/k8s/slurm: container/job IS the sandbox → danger-full-access
|
|
95
|
+
// - direct/local: use workspace-write for safety
|
|
96
|
+
const isContainerized = task.executionStrategy
|
|
97
|
+
&& ['docker', 'k8s-exec', 'slurm'].includes(task.executionStrategy);
|
|
98
|
+
const sandboxMode = isContainerized ? 'danger-full-access' : 'workspace-write';
|
|
99
|
+
const args = [
|
|
100
|
+
'exec',
|
|
101
|
+
'-a', 'never', // Fully autonomous — no approval prompts
|
|
102
|
+
'--sandbox', sandboxMode, // OS-level sandbox (relaxed if already containerized)
|
|
103
|
+
'--json', // JSONL output for structured parsing
|
|
104
|
+
task.prompt,
|
|
105
|
+
];
|
|
106
|
+
const env = {
|
|
107
|
+
...process.env,
|
|
108
|
+
...task.environment,
|
|
109
|
+
};
|
|
110
|
+
let proc;
|
|
111
|
+
try {
|
|
112
|
+
proc = spawn(this.codexPath, args, {
|
|
113
|
+
cwd: task.workingDirectory,
|
|
114
|
+
env,
|
|
115
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
reject(error);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
let stdout = '';
|
|
123
|
+
let stderr = '';
|
|
124
|
+
const artifacts = [];
|
|
125
|
+
const abortHandler = () => {
|
|
126
|
+
proc.kill('SIGTERM');
|
|
127
|
+
setTimeout(() => {
|
|
128
|
+
if (!proc.killed) {
|
|
129
|
+
proc.kill('SIGKILL');
|
|
130
|
+
}
|
|
131
|
+
}, 5000);
|
|
132
|
+
};
|
|
133
|
+
signal.addEventListener('abort', abortHandler);
|
|
134
|
+
proc.stdout?.on('data', (data) => {
|
|
135
|
+
const text = data.toString();
|
|
136
|
+
stdout += text;
|
|
137
|
+
stream.stdout(text);
|
|
138
|
+
});
|
|
139
|
+
proc.stderr?.on('data', (data) => {
|
|
140
|
+
const text = data.toString();
|
|
141
|
+
stderr += text;
|
|
142
|
+
stream.stderr(text);
|
|
143
|
+
});
|
|
144
|
+
proc.on('error', (error) => {
|
|
145
|
+
signal.removeEventListener('abort', abortHandler);
|
|
146
|
+
reject(error);
|
|
147
|
+
});
|
|
148
|
+
proc.on('close', (code) => {
|
|
149
|
+
signal.removeEventListener('abort', abortHandler);
|
|
150
|
+
// Parse output for any file artifacts mentioned
|
|
151
|
+
this.extractArtifacts(stdout, artifacts);
|
|
152
|
+
resolve({
|
|
153
|
+
exitCode: code ?? 1,
|
|
154
|
+
output: stdout,
|
|
155
|
+
error: stderr || undefined,
|
|
156
|
+
artifacts: artifacts.length > 0 ? artifacts : undefined,
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
if (task.timeout) {
|
|
160
|
+
setTimeout(() => {
|
|
161
|
+
if (!proc.killed) {
|
|
162
|
+
proc.kill('SIGTERM');
|
|
163
|
+
setTimeout(() => {
|
|
164
|
+
if (!proc.killed) {
|
|
165
|
+
proc.kill('SIGKILL');
|
|
166
|
+
}
|
|
167
|
+
}, 5000);
|
|
168
|
+
}
|
|
169
|
+
}, task.timeout);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
extractArtifacts(output, artifacts) {
|
|
174
|
+
// Look for common patterns indicating file creation/modification
|
|
175
|
+
// This is a heuristic approach as Codex output format may vary
|
|
176
|
+
const filePatterns = [
|
|
177
|
+
/Created file: (.+)/gi,
|
|
178
|
+
/Writing to (.+)/gi,
|
|
179
|
+
/Modified: (.+)/gi,
|
|
180
|
+
/Wrote (.+)/gi,
|
|
181
|
+
];
|
|
182
|
+
for (const pattern of filePatterns) {
|
|
183
|
+
let match;
|
|
184
|
+
while ((match = pattern.exec(output)) !== null) {
|
|
185
|
+
const filePath = match[1]?.trim();
|
|
186
|
+
if (filePath && !artifacts.some((a) => a.path === filePath)) {
|
|
187
|
+
artifacts.push({
|
|
188
|
+
type: 'file',
|
|
189
|
+
name: filePath,
|
|
190
|
+
path: filePath,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=codex-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-adapter.js","sourceRoot":"","sources":["../../src/providers/codex-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider adapters index
|
|
3
|
+
*/
|
|
4
|
+
export type { ProviderAdapter, TaskOutputStream, ProviderStatus } from './base-adapter.js';
|
|
5
|
+
export { ClaudeCodeAdapter } from './claude-code-adapter.js';
|
|
6
|
+
export { ClaudeSdkAdapter } from './claude-sdk-adapter.js';
|
|
7
|
+
export { CodexAdapter } from './codex-adapter.js';
|
|
8
|
+
import type { ProviderType } from '../types.js';
|
|
9
|
+
import type { ProviderAdapter } from './base-adapter.js';
|
|
10
|
+
/** Extended provider types including SDK variant */
|
|
11
|
+
export type ExtendedProviderType = ProviderType | 'claude-sdk';
|
|
12
|
+
/**
|
|
13
|
+
* Create a provider adapter by type.
|
|
14
|
+
* For 'claude-code', prefers the SDK adapter (in-process, supports steering)
|
|
15
|
+
* and falls back to the CLI adapter.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createProviderAdapter(type: ProviderType | ExtendedProviderType): ProviderAdapter | null;
|
|
18
|
+
/**
|
|
19
|
+
* Create a CLI-only provider adapter (for fallback when SDK is unavailable)
|
|
20
|
+
*/
|
|
21
|
+
export declare function createCliProviderAdapter(): ProviderAdapter;
|
|
22
|
+
/**
|
|
23
|
+
* Get all available provider adapters
|
|
24
|
+
*/
|
|
25
|
+
export declare function getAvailableAdapters(): Promise<ProviderAdapter[]>;
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKzD,oDAAoD;AACpD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,YAAY,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,GAAG,eAAe,GAAG,IAAI,CAmBvG;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,eAAe,CAE1D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAgBvE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider adapters index
|
|
3
|
+
*/
|
|
4
|
+
export { ClaudeCodeAdapter } from './claude-code-adapter.js';
|
|
5
|
+
export { ClaudeSdkAdapter } from './claude-sdk-adapter.js';
|
|
6
|
+
export { CodexAdapter } from './codex-adapter.js';
|
|
7
|
+
import { ClaudeCodeAdapter } from './claude-code-adapter.js';
|
|
8
|
+
import { ClaudeSdkAdapter } from './claude-sdk-adapter.js';
|
|
9
|
+
import { CodexAdapter } from './codex-adapter.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a provider adapter by type.
|
|
12
|
+
* For 'claude-code', prefers the SDK adapter (in-process, supports steering)
|
|
13
|
+
* and falls back to the CLI adapter.
|
|
14
|
+
*/
|
|
15
|
+
export function createProviderAdapter(type) {
|
|
16
|
+
switch (type) {
|
|
17
|
+
case 'claude-code':
|
|
18
|
+
// Prefer SDK adapter over CLI adapter for claude-code type
|
|
19
|
+
return new ClaudeSdkAdapter();
|
|
20
|
+
case 'claude-sdk':
|
|
21
|
+
return new ClaudeSdkAdapter();
|
|
22
|
+
case 'codex':
|
|
23
|
+
return new CodexAdapter();
|
|
24
|
+
case 'slurm':
|
|
25
|
+
// Slurm is no longer a standalone provider — HPC is handled via
|
|
26
|
+
// prompt injection in ClaudeSdkAdapter. Return null for backward compat.
|
|
27
|
+
return null;
|
|
28
|
+
case 'custom':
|
|
29
|
+
// Custom providers would need additional configuration
|
|
30
|
+
return null;
|
|
31
|
+
default:
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create a CLI-only provider adapter (for fallback when SDK is unavailable)
|
|
37
|
+
*/
|
|
38
|
+
export function createCliProviderAdapter() {
|
|
39
|
+
return new ClaudeCodeAdapter();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get all available provider adapters
|
|
43
|
+
*/
|
|
44
|
+
export async function getAvailableAdapters() {
|
|
45
|
+
const adapters = [
|
|
46
|
+
new ClaudeSdkAdapter(), // Prefer SDK over CLI
|
|
47
|
+
new ClaudeCodeAdapter(),
|
|
48
|
+
new CodexAdapter(),
|
|
49
|
+
];
|
|
50
|
+
const available = [];
|
|
51
|
+
for (const adapter of adapters) {
|
|
52
|
+
if (await adapter.isAvailable()) {
|
|
53
|
+
available.push(adapter);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return available;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAyC;IAC7E,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,2DAA2D;YAC3D,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,KAAK,YAAY;YACf,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,KAAK,OAAO;YACV,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,KAAK,OAAO;YACV,gEAAgE;YAChE,yEAAyE;YACzE,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,uDAAuD;YACvD,OAAO,IAAI,CAAC;QACd;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,iBAAiB,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,QAAQ,GAAsB;QAClC,IAAI,gBAAgB,EAAE,EAAE,sBAAsB;QAC9C,IAAI,iBAAiB,EAAE;QACvB,IAAI,YAAY,EAAE;KACnB,CAAC;IAEF,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slurm HPC provider adapter
|
|
3
|
+
*
|
|
4
|
+
* Bridges the ProviderAdapter interface to SlurmExecutor for HPC job execution.
|
|
5
|
+
*
|
|
6
|
+
* @deprecated Use {@link import('../execution/slurm-strategy.js').SlurmStrategy} instead.
|
|
7
|
+
* The execution strategy abstraction separates execution backends (SLURM, Docker, K8s)
|
|
8
|
+
* from AI model providers (Claude, Codex). This adapter is retained for backward
|
|
9
|
+
* compatibility but new code should use SlurmStrategy.
|
|
10
|
+
*/
|
|
11
|
+
import type { Task, TaskResult } from '../types.js';
|
|
12
|
+
import type { ProviderAdapter, TaskOutputStream, ProviderStatus } from './base-adapter.js';
|
|
13
|
+
/** @deprecated Use SlurmStrategy from execution/slurm-strategy.ts instead */
|
|
14
|
+
export declare class SlurmAdapter implements ProviderAdapter {
|
|
15
|
+
readonly type = "slurm";
|
|
16
|
+
readonly name = "Slurm HPC";
|
|
17
|
+
private slurmInfo;
|
|
18
|
+
private executor;
|
|
19
|
+
private activeTasks;
|
|
20
|
+
private readonly maxTasks;
|
|
21
|
+
private lastError?;
|
|
22
|
+
isAvailable(): Promise<boolean>;
|
|
23
|
+
execute(task: Task, stream: TaskOutputStream, signal: AbortSignal): Promise<TaskResult>;
|
|
24
|
+
getStatus(): Promise<ProviderStatus>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=slurm-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slurm-adapter.d.ts","sourceRoot":"","sources":["../../src/providers/slurm-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAA6B,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAK3F,6EAA6E;AAC7E,qBAAa,YAAa,YAAW,eAAe;IAClD,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAS;IAErB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA6GvF,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;CAa3C"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slurm HPC provider adapter
|
|
3
|
+
*
|
|
4
|
+
* Bridges the ProviderAdapter interface to SlurmExecutor for HPC job execution.
|
|
5
|
+
*
|
|
6
|
+
* @deprecated Use {@link import('../execution/slurm-strategy.js').SlurmStrategy} instead.
|
|
7
|
+
* The execution strategy abstraction separates execution backends (SLURM, Docker, K8s)
|
|
8
|
+
* from AI model providers (Claude, Codex). This adapter is retained for backward
|
|
9
|
+
* compatibility but new code should use SlurmStrategy.
|
|
10
|
+
*/
|
|
11
|
+
import { detectSlurm } from '../lib/slurm-detect.js';
|
|
12
|
+
import { SlurmExecutor } from '../lib/slurm-executor.js';
|
|
13
|
+
/** @deprecated Use SlurmStrategy from execution/slurm-strategy.ts instead */
|
|
14
|
+
export class SlurmAdapter {
|
|
15
|
+
type = 'slurm';
|
|
16
|
+
name = 'Slurm HPC';
|
|
17
|
+
slurmInfo = null;
|
|
18
|
+
executor = null;
|
|
19
|
+
activeTasks = 0;
|
|
20
|
+
maxTasks = 50;
|
|
21
|
+
lastError;
|
|
22
|
+
async isAvailable() {
|
|
23
|
+
try {
|
|
24
|
+
this.slurmInfo = await detectSlurm();
|
|
25
|
+
return this.slurmInfo.available;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
this.lastError = error instanceof Error ? error.message : String(error);
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async execute(task, stream, signal) {
|
|
33
|
+
if (!this.slurmInfo?.available) {
|
|
34
|
+
const available = await this.isAvailable();
|
|
35
|
+
if (!available || !this.slurmInfo) {
|
|
36
|
+
return {
|
|
37
|
+
taskId: task.id,
|
|
38
|
+
status: 'failed',
|
|
39
|
+
error: 'Slurm is not available on this machine',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!this.executor) {
|
|
44
|
+
this.executor = new SlurmExecutor(this.slurmInfo);
|
|
45
|
+
}
|
|
46
|
+
this.activeTasks++;
|
|
47
|
+
const startedAt = new Date().toISOString();
|
|
48
|
+
stream.status('running', 0, 'Submitting to Slurm');
|
|
49
|
+
// Parse Slurm config from task environment
|
|
50
|
+
let slurmConfig = {};
|
|
51
|
+
if (task.environment?.SLURM_CONFIG) {
|
|
52
|
+
try {
|
|
53
|
+
slurmConfig = JSON.parse(task.environment.SLURM_CONFIG);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Invalid config, use defaults
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Bridge Task → SlurmTaskInput
|
|
60
|
+
const slurmTask = {
|
|
61
|
+
taskId: task.id,
|
|
62
|
+
projectId: task.projectId,
|
|
63
|
+
nodeId: task.planNodeId,
|
|
64
|
+
title: task.prompt.substring(0, 80),
|
|
65
|
+
description: task.prompt,
|
|
66
|
+
workingDirectory: task.workingDirectory,
|
|
67
|
+
config: slurmConfig,
|
|
68
|
+
};
|
|
69
|
+
try {
|
|
70
|
+
const result = await this.executor.execute(slurmTask, {
|
|
71
|
+
onStatus: (jobStatus) => {
|
|
72
|
+
const stateMap = {
|
|
73
|
+
'PENDING': 'Job pending in queue',
|
|
74
|
+
'RUNNING': 'Job running',
|
|
75
|
+
'COMPLETING': 'Job completing',
|
|
76
|
+
'COMPLETED': 'Job completed',
|
|
77
|
+
'FAILED': 'Job failed',
|
|
78
|
+
'CANCELLED': 'Job cancelled',
|
|
79
|
+
'TIMEOUT': 'Job timed out',
|
|
80
|
+
'NODE_FAIL': 'Node failure',
|
|
81
|
+
'OUT_OF_MEMORY': 'Out of memory',
|
|
82
|
+
};
|
|
83
|
+
const message = stateMap[jobStatus.state] || `Job state: ${jobStatus.state}`;
|
|
84
|
+
const progress = jobStatus.state === 'RUNNING' ? 50 : jobStatus.state === 'COMPLETING' ? 90 : undefined;
|
|
85
|
+
stream.status('running', progress, message);
|
|
86
|
+
},
|
|
87
|
+
onOutput: (outputStream, data) => {
|
|
88
|
+
if (outputStream === 'stdout') {
|
|
89
|
+
stream.stdout(data);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
stream.stderr(data);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
signal,
|
|
96
|
+
});
|
|
97
|
+
this.activeTasks--;
|
|
98
|
+
const completedAt = new Date().toISOString();
|
|
99
|
+
if (result.status === 'cancelled') {
|
|
100
|
+
stream.status('cancelled', undefined, 'Job cancelled');
|
|
101
|
+
return {
|
|
102
|
+
taskId: task.id,
|
|
103
|
+
status: 'cancelled',
|
|
104
|
+
startedAt,
|
|
105
|
+
completedAt,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const taskStatus = result.status === 'completed' ? 'completed' : 'failed';
|
|
109
|
+
stream.status(taskStatus, 100, result.status === 'completed' ? 'Job completed' : 'Job failed');
|
|
110
|
+
return {
|
|
111
|
+
taskId: task.id,
|
|
112
|
+
status: taskStatus,
|
|
113
|
+
exitCode: result.exitCode,
|
|
114
|
+
output: result.output,
|
|
115
|
+
error: result.error,
|
|
116
|
+
startedAt,
|
|
117
|
+
completedAt,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
this.activeTasks--;
|
|
122
|
+
this.lastError = error instanceof Error ? error.message : String(error);
|
|
123
|
+
stream.status('failed', undefined, this.lastError);
|
|
124
|
+
return {
|
|
125
|
+
taskId: task.id,
|
|
126
|
+
status: 'failed',
|
|
127
|
+
error: this.lastError,
|
|
128
|
+
startedAt,
|
|
129
|
+
completedAt: new Date().toISOString(),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async getStatus() {
|
|
134
|
+
if (!this.slurmInfo) {
|
|
135
|
+
await this.isAvailable();
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
available: this.slurmInfo?.available ?? false,
|
|
139
|
+
version: this.slurmInfo?.version ?? null,
|
|
140
|
+
activeTasks: this.activeTasks,
|
|
141
|
+
maxTasks: this.maxTasks,
|
|
142
|
+
lastError: this.lastError,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=slurm-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slurm-adapter.js","sourceRoot":"","sources":["../../src/providers/slurm-adapter.ts"],"names":[],"mappings":"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"}
|