agent-worker 0.15.0 → 0.16.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/{backends-C7pQwuAx.mjs → backends-D7DT0uox.mjs} +3 -3
- package/dist/{backends-BYWmuyF9.mjs → backends-DUvcm-ce.mjs} +1 -1
- package/dist/cli/index.mjs +17 -7
- package/dist/index.mjs +1 -1
- package/dist/{runner-DB-b57iZ.mjs → runner-IkYhcbio.mjs} +21 -1
- package/dist/{workflow-DQ6Eju4n.mjs → workflow-Ctto0bJt.mjs} +2 -2
- package/package.json +8 -41
|
@@ -84,7 +84,7 @@ async function createModelWithProvider(modelName, provider) {
|
|
|
84
84
|
const pkg = PROVIDER_PACKAGES[provider];
|
|
85
85
|
if (!pkg) throw new Error(`Unknown provider: ${provider}. Supported: ${Object.keys(PROVIDER_PACKAGES).join(", ")}`);
|
|
86
86
|
const providerFn = await loadProvider(provider, pkg.package, pkg.export);
|
|
87
|
-
if (!providerFn) throw new Error(`
|
|
87
|
+
if (!providerFn) throw new Error(`Failed to load ${pkg.package} for provider "${provider}". Try reinstalling agent-worker.`);
|
|
88
88
|
return providerFn(modelName);
|
|
89
89
|
}
|
|
90
90
|
const { name, base_url, api_key } = provider;
|
|
@@ -92,7 +92,7 @@ async function createModelWithProvider(modelName, provider) {
|
|
|
92
92
|
if (!pkg) throw new Error(`Unknown provider: ${name}. Supported: ${Object.keys(PROVIDER_PACKAGES).join(", ")}`);
|
|
93
93
|
if (!base_url && !api_key) {
|
|
94
94
|
const providerFn = await loadProvider(name, pkg.package, pkg.export);
|
|
95
|
-
if (!providerFn) throw new Error(`
|
|
95
|
+
if (!providerFn) throw new Error(`Failed to load ${pkg.package} for provider "${name}". Try reinstalling agent-worker.`);
|
|
96
96
|
return providerFn(modelName);
|
|
97
97
|
}
|
|
98
98
|
const opts = {};
|
|
@@ -176,7 +176,7 @@ async function loadProviderModel(provider, modelName) {
|
|
|
176
176
|
const config = PROVIDER_PACKAGES[provider];
|
|
177
177
|
if (!config) throw new Error(`Unknown provider: ${provider}. Supported: ${Object.keys(PROVIDER_PACKAGES).join(", ")}. Or use gateway format: provider/model (e.g., openai/gpt-5.2)`);
|
|
178
178
|
const providerFn = await loadProvider(provider, config.package, config.export);
|
|
179
|
-
if (!providerFn) throw new Error(`
|
|
179
|
+
if (!providerFn) throw new Error(`Failed to load ${config.package} for provider "${provider}". Try reinstalling agent-worker.`);
|
|
180
180
|
return providerFn(modelName);
|
|
181
181
|
}
|
|
182
182
|
/**
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { C as CLAUDE_MODEL_MAP, D as SDK_MODEL_ALIASES, E as OPENCODE_MODEL_MAP, O as getModelForBackend, S as BACKEND_DEFAULT_MODELS, T as CURSOR_MODEL_MAP, _ as extractCodexResult, a as createMockBackend, b as execWithIdleTimeout, c as extractOpenCodeResult, d as CodexBackend, f as ClaudeCodeBackend, g as extractClaudeResult, h as createStreamParser, i as MockAIBackend, k as normalizeBackendType, l as opencodeAdapter, m as codexAdapter, n as createBackend, o as SdkBackend, p as claudeAdapter, r as listBackends, s as OpenCodeBackend, t as checkBackends, u as CursorBackend, v as formatEvent, w as CODEX_MODEL_MAP, x as DEFAULT_IDLE_TIMEOUT, y as IdleTimeoutError } from "./backends-
|
|
1
|
+
import { C as CLAUDE_MODEL_MAP, D as SDK_MODEL_ALIASES, E as OPENCODE_MODEL_MAP, O as getModelForBackend, S as BACKEND_DEFAULT_MODELS, T as CURSOR_MODEL_MAP, _ as extractCodexResult, a as createMockBackend, b as execWithIdleTimeout, c as extractOpenCodeResult, d as CodexBackend, f as ClaudeCodeBackend, g as extractClaudeResult, h as createStreamParser, i as MockAIBackend, k as normalizeBackendType, l as opencodeAdapter, m as codexAdapter, n as createBackend, o as SdkBackend, p as claudeAdapter, r as listBackends, s as OpenCodeBackend, t as checkBackends, u as CursorBackend, v as formatEvent, w as CODEX_MODEL_MAP, x as DEFAULT_IDLE_TIMEOUT, y as IdleTimeoutError } from "./backends-D7DT0uox.mjs";
|
|
2
2
|
|
|
3
3
|
export { listBackends };
|
package/dist/cli/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { A as parseModel, I as getDefaultModel, L as isAutoProvider, P as createModelAsync, R as resolveModelFallback, a as createMockBackend, j as FRONTIER_MODELS, k as normalizeBackendType, n as createBackend } from "../backends-
|
|
2
|
+
import { A as parseModel, I as getDefaultModel, L as isAutoProvider, P as createModelAsync, R as resolveModelFallback, a as createMockBackend, j as FRONTIER_MODELS, k as normalizeBackendType, n as createBackend } from "../backends-D7DT0uox.mjs";
|
|
3
3
|
import { t as createTool } from "../create-tool-gcUuI1FD.mjs";
|
|
4
4
|
import { generateText, stepCountIs, tool } from "ai";
|
|
5
5
|
import { existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync } from "node:fs";
|
|
@@ -2284,6 +2284,8 @@ function createAgentLoop(config) {
|
|
|
2284
2284
|
let wakeResolver = null;
|
|
2285
2285
|
let pollTimeout = null;
|
|
2286
2286
|
let directRunning = false;
|
|
2287
|
+
let _hasFailures = false;
|
|
2288
|
+
let _lastError;
|
|
2287
2289
|
const scheduleConfig = agent.schedule;
|
|
2288
2290
|
let resolvedSchedule;
|
|
2289
2291
|
if (scheduleConfig) try {
|
|
@@ -2384,6 +2386,8 @@ function createAgentLoop(config) {
|
|
|
2384
2386
|
}
|
|
2385
2387
|
}
|
|
2386
2388
|
if (lastResult && !lastResult.success) {
|
|
2389
|
+
_hasFailures = true;
|
|
2390
|
+
_lastError = lastResult.error;
|
|
2387
2391
|
errorLog(`ERROR max retries exhausted, acknowledging to prevent loop`);
|
|
2388
2392
|
await contextProvider.ackInbox(name, latestId);
|
|
2389
2393
|
}
|
|
@@ -2399,6 +2403,12 @@ function createAgentLoop(config) {
|
|
|
2399
2403
|
get state() {
|
|
2400
2404
|
return state;
|
|
2401
2405
|
},
|
|
2406
|
+
get hasFailures() {
|
|
2407
|
+
return _hasFailures;
|
|
2408
|
+
},
|
|
2409
|
+
get lastError() {
|
|
2410
|
+
return _lastError;
|
|
2411
|
+
},
|
|
2402
2412
|
async start() {
|
|
2403
2413
|
if (state !== "stopped") throw new Error(`Loop ${name} is already running`);
|
|
2404
2414
|
state = "idle";
|
|
@@ -3221,7 +3231,7 @@ function createDaemonApp(options) {
|
|
|
3221
3231
|
const key = `${workflowName}:${tag}`;
|
|
3222
3232
|
if (s.workflows.has(key)) return c.json({ error: `Workflow already running: ${key}` }, 409);
|
|
3223
3233
|
try {
|
|
3224
|
-
const { runWorkflowWithLoops } = await import("../runner-
|
|
3234
|
+
const { runWorkflowWithLoops } = await import("../runner-IkYhcbio.mjs");
|
|
3225
3235
|
const result = await runWorkflowWithLoops({
|
|
3226
3236
|
workflow,
|
|
3227
3237
|
workflowName,
|
|
@@ -3872,7 +3882,7 @@ Note: Workflow name is inferred from YAML 'name' field or filename.
|
|
|
3872
3882
|
Workflow-defined params (see 'params:' in YAML) are passed after '--'.
|
|
3873
3883
|
Set GITHUB_TOKEN env var to access private repositories.
|
|
3874
3884
|
`).action(async (file, options) => {
|
|
3875
|
-
const { parseWorkflowFile, parseWorkflowParams, formatParamHelp, runWorkflowWithLoops } = await import("../workflow-
|
|
3885
|
+
const { parseWorkflowFile, parseWorkflowParams, formatParamHelp, runWorkflowWithLoops } = await import("../workflow-Ctto0bJt.mjs");
|
|
3876
3886
|
const tag = options.tag || DEFAULT_TAG;
|
|
3877
3887
|
const parsedWorkflow = await parseWorkflowFile(file, { tag });
|
|
3878
3888
|
const workflowName = parsedWorkflow.name;
|
|
@@ -3895,7 +3905,7 @@ Note: Workflow name is inferred from YAML 'name' field or filename.
|
|
|
3895
3905
|
isCleaningUp = true;
|
|
3896
3906
|
console.log("\nInterrupted, cleaning up...");
|
|
3897
3907
|
if (loops) {
|
|
3898
|
-
const { shutdownLoops } = await import("../workflow-
|
|
3908
|
+
const { shutdownLoops } = await import("../workflow-Ctto0bJt.mjs");
|
|
3899
3909
|
const { createSilentLogger } = await Promise.resolve().then(() => logger_exports);
|
|
3900
3910
|
await shutdownLoops(loops, createSilentLogger());
|
|
3901
3911
|
}
|
|
@@ -3970,7 +3980,7 @@ Workflow runs inside the daemon. Use ls/stop to manage:
|
|
|
3970
3980
|
Note: Workflow name is inferred from YAML 'name' field or filename.
|
|
3971
3981
|
Workflow-defined params (see 'params:' in YAML) are passed after '--'.
|
|
3972
3982
|
`).action(async (file, options) => {
|
|
3973
|
-
const { parseWorkflowFile, parseWorkflowParams, formatParamHelp } = await import("../workflow-
|
|
3983
|
+
const { parseWorkflowFile, parseWorkflowParams, formatParamHelp } = await import("../workflow-Ctto0bJt.mjs");
|
|
3974
3984
|
const { ensureDaemon } = await Promise.resolve().then(() => agent_exports);
|
|
3975
3985
|
const tag = options.tag || DEFAULT_TAG;
|
|
3976
3986
|
const parsedWorkflow = await parseWorkflowFile(file, { tag });
|
|
@@ -4169,7 +4179,7 @@ function registerInfoCommands(program) {
|
|
|
4169
4179
|
console.log(`Auto: AGENT_DEFAULT_MODELS="deepseek-chat, anthropic/claude-sonnet-4-5"`);
|
|
4170
4180
|
});
|
|
4171
4181
|
program.command("backends").description("Check available backends (SDK, CLI tools)").action(async () => {
|
|
4172
|
-
const { listBackends } = await import("../backends-
|
|
4182
|
+
const { listBackends } = await import("../backends-DUvcm-ce.mjs");
|
|
4173
4183
|
const backends = await listBackends();
|
|
4174
4184
|
console.log("Backend Status:\n");
|
|
4175
4185
|
for (const backend of backends) {
|
|
@@ -4249,7 +4259,7 @@ async function resolveDir(targetInput) {
|
|
|
4249
4259
|
|
|
4250
4260
|
//#endregion
|
|
4251
4261
|
//#region package.json
|
|
4252
|
-
var version = "0.
|
|
4262
|
+
var version = "0.16.0";
|
|
4253
4263
|
|
|
4254
4264
|
//#endregion
|
|
4255
4265
|
//#region src/cli/index.ts
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as createModelWithProvider, M as SUPPORTED_PROVIDERS, N as createModel, P as createModelAsync, a as createMockBackend, d as CodexBackend, f as ClaudeCodeBackend, i as MockAIBackend, j as FRONTIER_MODELS, n as createBackend, o as SdkBackend, r as listBackends, t as checkBackends, u as CursorBackend } from "./backends-
|
|
1
|
+
import { F as createModelWithProvider, M as SUPPORTED_PROVIDERS, N as createModel, P as createModelAsync, a as createMockBackend, d as CodexBackend, f as ClaudeCodeBackend, i as MockAIBackend, j as FRONTIER_MODELS, n as createBackend, o as SdkBackend, r as listBackends, t as checkBackends, u as CursorBackend } from "./backends-D7DT0uox.mjs";
|
|
2
2
|
import { t as createTool } from "./create-tool-gcUuI1FD.mjs";
|
|
3
3
|
import { ToolLoopAgent, stepCountIs } from "ai";
|
|
4
4
|
import { createBashTool } from "bash-tool";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./backends-
|
|
1
|
+
import "./backends-D7DT0uox.mjs";
|
|
2
2
|
import "./create-tool-gcUuI1FD.mjs";
|
|
3
3
|
import { K as EventLog, _ as FileContextProvider, g as runWithHttp, i as createSilentLogger, n as createWiredLoop, r as createChannelLogger, s as checkWorkflowIdle, v as createFileContextProvider, z as createContextMCPServer } from "./cli/index.mjs";
|
|
4
4
|
import { n as createMemoryContextProvider } from "./memory-provider-ZLOKyCxA.mjs";
|
|
@@ -602,6 +602,26 @@ async function runWorkflowWithLoops(config) {
|
|
|
602
602
|
}
|
|
603
603
|
}
|
|
604
604
|
if (isIdle) {
|
|
605
|
+
const failedAgents = [...loops.entries()].filter(([, loop]) => loop.hasFailures).map(([agentName, loop]) => ({
|
|
606
|
+
name: agentName,
|
|
607
|
+
error: loop.lastError
|
|
608
|
+
}));
|
|
609
|
+
if (failedAgents.length > 0) {
|
|
610
|
+
const elapsed = ((Date.now() - startTime) / 1e3).toFixed(1);
|
|
611
|
+
const details = failedAgents.map((a) => `${a.name}: ${a.error}`).join("; ");
|
|
612
|
+
logger.info(`Workflow failed (${elapsed}s): ${details}`);
|
|
613
|
+
channelWatcher?.stop();
|
|
614
|
+
await shutdownLoops(loops, logger);
|
|
615
|
+
await runtime.shutdown();
|
|
616
|
+
return {
|
|
617
|
+
success: false,
|
|
618
|
+
error: details,
|
|
619
|
+
setupResults: runtime.setupResults,
|
|
620
|
+
duration: Date.now() - startTime,
|
|
621
|
+
contextProvider: runtime.contextProvider,
|
|
622
|
+
feedback: runtime.getFeedback?.()
|
|
623
|
+
};
|
|
624
|
+
}
|
|
605
625
|
const elapsed = ((Date.now() - startTime) / 1e3).toFixed(1);
|
|
606
626
|
logger.info(`Workflow complete (${elapsed}s)`);
|
|
607
627
|
break;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import "./backends-
|
|
1
|
+
import "./backends-D7DT0uox.mjs";
|
|
2
2
|
import "./create-tool-gcUuI1FD.mjs";
|
|
3
3
|
import { a as getBackendByType, b as resolveContextDir, c as createAgentLoop, d as generateWorkflowMCPConfig, f as writeBackendMcpConfig, h as LOOP_DEFAULTS, i as createSilentLogger, k as CONTEXT_DEFAULTS, l as runSdkAgent, m as formatInbox, n as createWiredLoop, o as getBackendForModel, p as buildAgentPrompt, r as createChannelLogger, s as checkWorkflowIdle, t as createMinimalRuntime, u as runMockAgent } from "./cli/index.mjs";
|
|
4
4
|
import "./memory-provider-ZLOKyCxA.mjs";
|
|
5
|
-
import { createWorkflowProvider, initWorkflow, n as interpolate, runWorkflowWithLoops, shutdownLoops, t as createContext } from "./runner-
|
|
5
|
+
import { createWorkflowProvider, initWorkflow, n as interpolate, runWorkflowWithLoops, shutdownLoops, t as createContext } from "./runner-IkYhcbio.mjs";
|
|
6
6
|
import { existsSync, mkdirSync, readFileSync, rmSync } from "node:fs";
|
|
7
7
|
import { basename, dirname, join, resolve } from "node:path";
|
|
8
8
|
import { parse } from "yaml";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-worker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "SDK and CLI for creating and testing agent workers with Vercel AI SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.mjs",
|
|
@@ -32,6 +32,13 @@
|
|
|
32
32
|
"prepublishOnly": "bun run build"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
+
"@ai-sdk/anthropic": "^3.0.0",
|
|
36
|
+
"@ai-sdk/deepseek": "^1.0.0",
|
|
37
|
+
"@ai-sdk/google": "^1.0.0",
|
|
38
|
+
"@ai-sdk/groq": "^1.0.0",
|
|
39
|
+
"@ai-sdk/mistral": "^1.0.0",
|
|
40
|
+
"@ai-sdk/openai": "^3.0.0",
|
|
41
|
+
"@ai-sdk/xai": "^1.0.0",
|
|
35
42
|
"@clack/prompts": "^1.0.0",
|
|
36
43
|
"@hono/node-server": "^1.19.9",
|
|
37
44
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
@@ -50,13 +57,6 @@
|
|
|
50
57
|
"zod": "^4.3.6"
|
|
51
58
|
},
|
|
52
59
|
"devDependencies": {
|
|
53
|
-
"@ai-sdk/anthropic": "^3.0.0",
|
|
54
|
-
"@ai-sdk/deepseek": "^1.0.0",
|
|
55
|
-
"@ai-sdk/google": "^1.0.0",
|
|
56
|
-
"@ai-sdk/groq": "^1.0.0",
|
|
57
|
-
"@ai-sdk/mistral": "^1.0.0",
|
|
58
|
-
"@ai-sdk/openai": "^3.0.0",
|
|
59
|
-
"@ai-sdk/xai": "^1.0.0",
|
|
60
60
|
"@types/bun": "latest",
|
|
61
61
|
"@types/node": ">=22",
|
|
62
62
|
"@typescript/native-preview": "^7.0.0-dev.20260203.1",
|
|
@@ -64,39 +64,6 @@
|
|
|
64
64
|
"oxlint": "^1.43.0",
|
|
65
65
|
"tsdown": "^0.20.1"
|
|
66
66
|
},
|
|
67
|
-
"peerDependencies": {
|
|
68
|
-
"@ai-sdk/anthropic": "^3.0.0",
|
|
69
|
-
"@ai-sdk/deepseek": "^1.0.0",
|
|
70
|
-
"@ai-sdk/google": "^1.0.0",
|
|
71
|
-
"@ai-sdk/groq": "^1.0.0",
|
|
72
|
-
"@ai-sdk/mistral": "^1.0.0",
|
|
73
|
-
"@ai-sdk/openai": "^3.0.0",
|
|
74
|
-
"@ai-sdk/xai": "^1.0.0",
|
|
75
|
-
"typescript": "^5"
|
|
76
|
-
},
|
|
77
|
-
"peerDependenciesMeta": {
|
|
78
|
-
"@ai-sdk/anthropic": {
|
|
79
|
-
"optional": true
|
|
80
|
-
},
|
|
81
|
-
"@ai-sdk/openai": {
|
|
82
|
-
"optional": true
|
|
83
|
-
},
|
|
84
|
-
"@ai-sdk/deepseek": {
|
|
85
|
-
"optional": true
|
|
86
|
-
},
|
|
87
|
-
"@ai-sdk/google": {
|
|
88
|
-
"optional": true
|
|
89
|
-
},
|
|
90
|
-
"@ai-sdk/groq": {
|
|
91
|
-
"optional": true
|
|
92
|
-
},
|
|
93
|
-
"@ai-sdk/mistral": {
|
|
94
|
-
"optional": true
|
|
95
|
-
},
|
|
96
|
-
"@ai-sdk/xai": {
|
|
97
|
-
"optional": true
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
67
|
"repository": {
|
|
101
68
|
"type": "git",
|
|
102
69
|
"url": "https://github.com/lidessen/moniro.git",
|