@itznexus/itznexus-cli 1.44.0 → 1.46.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/commands/api/agent-runs.d.ts +2 -0
- package/dist/commands/api/agent-runs.js +232 -0
- package/dist/commands/api/agent-runs.js.map +1 -0
- package/dist/index.js +3 -3
- package/package.json +1 -1
- package/dist/commands/api/agent-jobs.d.ts +0 -2
- package/dist/commands/api/agent-jobs.js +0 -213
- package/dist/commands/api/agent-jobs.js.map +0 -1
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { printList, printDetail, handleError } from "../../lib/format.js";
|
|
5
|
+
function parseJsonOption(raw, flag) {
|
|
6
|
+
try {
|
|
7
|
+
return JSON.parse(raw);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
console.error(chalk.red("✗"), `${flag} must be valid JSON`);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const listCommand = new Command("list")
|
|
15
|
+
.description("List agent runs (newest first), each with its skill sessions")
|
|
16
|
+
.option("--status <status>", "running | completed | failed")
|
|
17
|
+
.option("--name <name>", "Only runs with this name (e.g. demo-build)")
|
|
18
|
+
.option("--project <projectId>", "Only runs linked to this project (UUID)")
|
|
19
|
+
.option("--page <n>", "Page number (default 1)")
|
|
20
|
+
.option("--page-size <n>", "Rows per page (default 100)")
|
|
21
|
+
.option("--json", "Output as JSON")
|
|
22
|
+
.action(async (opts) => {
|
|
23
|
+
try {
|
|
24
|
+
const params = new URLSearchParams();
|
|
25
|
+
if (opts.status)
|
|
26
|
+
params.set("status", opts.status);
|
|
27
|
+
if (opts.name)
|
|
28
|
+
params.set("name", opts.name);
|
|
29
|
+
if (opts.project)
|
|
30
|
+
params.set("projectId", opts.project);
|
|
31
|
+
if (opts.page)
|
|
32
|
+
params.set("page", opts.page);
|
|
33
|
+
if (opts.pageSize)
|
|
34
|
+
params.set("pageSize", opts.pageSize);
|
|
35
|
+
const qs = params.toString();
|
|
36
|
+
const data = await api.get(`/agent-runs${qs ? `?${qs}` : ""}`);
|
|
37
|
+
const rows = data.map((run) => ({
|
|
38
|
+
...run,
|
|
39
|
+
skillCount: run.skills?.length ?? 0,
|
|
40
|
+
}));
|
|
41
|
+
printList(rows, [
|
|
42
|
+
{ key: "name", label: "Name", width: 16 },
|
|
43
|
+
{ key: "status", label: "Status", width: 12 },
|
|
44
|
+
{ key: "skillCount", label: "Skills", width: 7 },
|
|
45
|
+
{ key: "startedAt", label: "Started", width: 24 },
|
|
46
|
+
{ key: "endedAt", label: "Ended", width: 24 },
|
|
47
|
+
{ key: "id", label: "ID", width: 38 },
|
|
48
|
+
], opts);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
handleError(err);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
function printRun(run, opts) {
|
|
55
|
+
if (opts.json) {
|
|
56
|
+
console.log(JSON.stringify(run, null, 2));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
console.log(chalk.bold(run.name));
|
|
60
|
+
printDetail(run, [
|
|
61
|
+
{ key: "id", label: "ID" },
|
|
62
|
+
{ key: "status", label: "Status" },
|
|
63
|
+
{ key: "projectId", label: "Project" },
|
|
64
|
+
{ key: "workspaceCommit", label: "Workspace commit" },
|
|
65
|
+
{ key: "outcome", label: "Outcome" },
|
|
66
|
+
{ key: "error", label: "Error" },
|
|
67
|
+
{ key: "agentUserId", label: "Agent" },
|
|
68
|
+
{ key: "startedAt", label: "Started" },
|
|
69
|
+
{ key: "endedAt", label: "Ended" },
|
|
70
|
+
], opts);
|
|
71
|
+
for (const skill of run.skills ?? []) {
|
|
72
|
+
console.log(chalk.bold(`\n #${skill.position} /${skill.skill}`));
|
|
73
|
+
printDetail(skill, [
|
|
74
|
+
{ key: "id", label: "ID" },
|
|
75
|
+
{ key: "status", label: "Status" },
|
|
76
|
+
{ key: "args", label: "Args" },
|
|
77
|
+
{ key: "result", label: "Result" },
|
|
78
|
+
{ key: "error", label: "Error" },
|
|
79
|
+
{ key: "startedAt", label: "Started" },
|
|
80
|
+
{ key: "endedAt", label: "Ended" },
|
|
81
|
+
], opts);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const getCommand = new Command("get")
|
|
85
|
+
.description("Get an agent run with its skill sessions")
|
|
86
|
+
.argument("<id>", "Agent run ID")
|
|
87
|
+
.option("--json", "Output as JSON")
|
|
88
|
+
.action(async (id, opts) => {
|
|
89
|
+
try {
|
|
90
|
+
const data = await api.get(`/agent-runs/${id}`);
|
|
91
|
+
printRun(data, opts);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
handleError(err);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
const startCommand = new Command("start")
|
|
98
|
+
.description("Record a unit of work the caller is performing (born running, audit only)")
|
|
99
|
+
.requiredOption("--name <name>", "Slug-like label of what runs (usually the skill name)")
|
|
100
|
+
.option("--project <projectId>", "Link to a project (UUID)")
|
|
101
|
+
.option("--workspace-commit <sha>", "itzworkspace HEAD at work start")
|
|
102
|
+
.option("--json", "Output as JSON")
|
|
103
|
+
.action(async (opts) => {
|
|
104
|
+
try {
|
|
105
|
+
const payload = { name: opts.name };
|
|
106
|
+
if (opts.project !== undefined)
|
|
107
|
+
payload.projectId = opts.project;
|
|
108
|
+
if (opts.workspaceCommit !== undefined) {
|
|
109
|
+
payload.workspaceCommit = opts.workspaceCommit;
|
|
110
|
+
}
|
|
111
|
+
const data = await api.post("/agent-runs", payload);
|
|
112
|
+
if (opts.json)
|
|
113
|
+
console.log(JSON.stringify(data, null, 2));
|
|
114
|
+
else {
|
|
115
|
+
console.log(chalk.green("✓"), `Agent run started: ${chalk.bold(data.id)}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
handleError(err);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
const completeCommand = new Command("complete")
|
|
123
|
+
.description("Close a running agent run, optionally with a JSON outcome")
|
|
124
|
+
.argument("<id>", "Agent run ID")
|
|
125
|
+
.option("--outcome <json>", "Worker-observed outcome as a JSON object")
|
|
126
|
+
.option("--json", "Output as JSON")
|
|
127
|
+
.action(async (id, opts) => {
|
|
128
|
+
try {
|
|
129
|
+
const payload = {};
|
|
130
|
+
if (opts.outcome !== undefined) {
|
|
131
|
+
payload.outcome = parseJsonOption(opts.outcome, "--outcome");
|
|
132
|
+
}
|
|
133
|
+
const data = await api.post(`/agent-runs/${id}/complete`, payload);
|
|
134
|
+
if (opts.json)
|
|
135
|
+
console.log(JSON.stringify(data, null, 2));
|
|
136
|
+
else
|
|
137
|
+
console.log(chalk.green("✓"), "Agent run completed");
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
handleError(err);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
const failCommand = new Command("fail")
|
|
144
|
+
.description("Close a running agent run as failed (also fails its running skills)")
|
|
145
|
+
.argument("<id>", "Agent run ID")
|
|
146
|
+
.requiredOption("--error <message>", "Failure reason")
|
|
147
|
+
.option("--json", "Output as JSON")
|
|
148
|
+
.action(async (id, opts) => {
|
|
149
|
+
try {
|
|
150
|
+
const data = await api.post(`/agent-runs/${id}/fail`, {
|
|
151
|
+
error: opts.error,
|
|
152
|
+
});
|
|
153
|
+
if (opts.json)
|
|
154
|
+
console.log(JSON.stringify(data, null, 2));
|
|
155
|
+
else
|
|
156
|
+
console.log(chalk.green("✓"), "Agent run failed");
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
handleError(err);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
const skillStartCommand = new Command("skill-start")
|
|
163
|
+
.description("Attach a skill session (born running) to a running agent run")
|
|
164
|
+
.argument("<runId>", "Agent run ID")
|
|
165
|
+
.requiredOption("--skill <skill>", "The slash command run (e.g. demo-build)")
|
|
166
|
+
.option("--args <json>", "Skill args as a JSON object")
|
|
167
|
+
.option("--json", "Output as JSON")
|
|
168
|
+
.action(async (runId, opts) => {
|
|
169
|
+
try {
|
|
170
|
+
const payload = { skill: opts.skill };
|
|
171
|
+
if (opts.args !== undefined) {
|
|
172
|
+
payload.args = parseJsonOption(opts.args, "--args");
|
|
173
|
+
}
|
|
174
|
+
const data = await api.post(`/agent-runs/${runId}/skills`, payload);
|
|
175
|
+
if (opts.json)
|
|
176
|
+
console.log(JSON.stringify(data, null, 2));
|
|
177
|
+
else {
|
|
178
|
+
console.log(chalk.green("✓"), `Skill session started: ${chalk.bold(data.id)}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
handleError(err);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
const skillCompleteCommand = new Command("skill-complete")
|
|
186
|
+
.description("Close a running skill session with its RESULT.json")
|
|
187
|
+
.argument("<runId>", "Agent run ID")
|
|
188
|
+
.argument("<skillId>", "Skill session ID")
|
|
189
|
+
.requiredOption("--result <json>", "The session result as a JSON object")
|
|
190
|
+
.option("--json", "Output as JSON")
|
|
191
|
+
.action(async (runId, skillId, opts) => {
|
|
192
|
+
try {
|
|
193
|
+
const result = parseJsonOption(opts.result, "--result");
|
|
194
|
+
const data = await api.post(`/agent-runs/${runId}/skills/${skillId}/complete`, { result });
|
|
195
|
+
if (opts.json)
|
|
196
|
+
console.log(JSON.stringify(data, null, 2));
|
|
197
|
+
else
|
|
198
|
+
console.log(chalk.green("✓"), "Skill session completed");
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
handleError(err);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
const skillFailCommand = new Command("skill-fail")
|
|
205
|
+
.description("Close a running skill session as failed")
|
|
206
|
+
.argument("<runId>", "Agent run ID")
|
|
207
|
+
.argument("<skillId>", "Skill session ID")
|
|
208
|
+
.requiredOption("--error <message>", "Failure reason")
|
|
209
|
+
.option("--json", "Output as JSON")
|
|
210
|
+
.action(async (runId, skillId, opts) => {
|
|
211
|
+
try {
|
|
212
|
+
const data = await api.post(`/agent-runs/${runId}/skills/${skillId}/fail`, { error: opts.error });
|
|
213
|
+
if (opts.json)
|
|
214
|
+
console.log(JSON.stringify(data, null, 2));
|
|
215
|
+
else
|
|
216
|
+
console.log(chalk.green("✓"), "Skill session failed");
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
handleError(err);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
export const agentRunCommand = new Command("agent-run")
|
|
223
|
+
.description("Audit log of worker units of work and their skill sessions")
|
|
224
|
+
.addCommand(listCommand)
|
|
225
|
+
.addCommand(getCommand)
|
|
226
|
+
.addCommand(startCommand)
|
|
227
|
+
.addCommand(completeCommand)
|
|
228
|
+
.addCommand(failCommand)
|
|
229
|
+
.addCommand(skillStartCommand)
|
|
230
|
+
.addCommand(skillCompleteCommand)
|
|
231
|
+
.addCommand(skillFailCommand);
|
|
232
|
+
//# sourceMappingURL=agent-runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-runs.js","sourceRoot":"","sources":["../../../src/commands/api/agent-runs.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -49,7 +49,7 @@ import { deploymentCommand } from "./commands/api/deployments.js";
|
|
|
49
49
|
import { telemetryCommand } from "./commands/api/telemetry.js";
|
|
50
50
|
import { gmailMessageCommand } from "./commands/api/gmail-messages.js";
|
|
51
51
|
import { emailCaptureCommand, emailCaptureFormCommand, } from "./commands/api/email-captures.js";
|
|
52
|
-
import {
|
|
52
|
+
import { agentRunCommand } from "./commands/api/agent-runs.js";
|
|
53
53
|
import { capabilityCommand } from "./commands/api/capabilities.js";
|
|
54
54
|
import { awsAccountCommand } from "./commands/api/aws-accounts.js";
|
|
55
55
|
// Agent commands (local logic on top of the API)
|
|
@@ -111,7 +111,7 @@ OPS
|
|
|
111
111
|
audit-log Query audit logs
|
|
112
112
|
pipeline View pipeline definitions
|
|
113
113
|
notification Manage your notifications
|
|
114
|
-
agent-
|
|
114
|
+
agent-run Audit log of worker runs and their skill sessions
|
|
115
115
|
capability Browse the capability catalog
|
|
116
116
|
|
|
117
117
|
AGENTS (local logic)
|
|
@@ -186,7 +186,7 @@ program.addCommand(jobCommand);
|
|
|
186
186
|
program.addCommand(auditLogCommand);
|
|
187
187
|
program.addCommand(pipelineCommand);
|
|
188
188
|
program.addCommand(notificationCommand);
|
|
189
|
-
program.addCommand(
|
|
189
|
+
program.addCommand(agentRunCommand);
|
|
190
190
|
program.addCommand(capabilityCommand);
|
|
191
191
|
// Agents
|
|
192
192
|
program.addCommand(claudeCommand);
|
package/package.json
CHANGED
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import chalk from "chalk";
|
|
3
|
-
import { api } from "../../lib/api.js";
|
|
4
|
-
import { printList, printDetail, handleError } from "../../lib/format.js";
|
|
5
|
-
const listCommand = new Command("list")
|
|
6
|
-
.description("List agent jobs")
|
|
7
|
-
.option("--status <status>", "pending | running | completed | failed")
|
|
8
|
-
.option("--category <category>", "dev | pm | upwork")
|
|
9
|
-
.option("--driver <driver>", "claude | codex")
|
|
10
|
-
.option("--project <projectId>", "Only jobs linked to this project (UUID)")
|
|
11
|
-
.option("--json", "Output as JSON")
|
|
12
|
-
.action(async (opts) => {
|
|
13
|
-
try {
|
|
14
|
-
const params = new URLSearchParams();
|
|
15
|
-
if (opts.status)
|
|
16
|
-
params.set("status", opts.status);
|
|
17
|
-
if (opts.category)
|
|
18
|
-
params.set("category", opts.category);
|
|
19
|
-
if (opts.driver)
|
|
20
|
-
params.set("driver", opts.driver);
|
|
21
|
-
if (opts.project)
|
|
22
|
-
params.set("projectId", opts.project);
|
|
23
|
-
const qs = params.toString();
|
|
24
|
-
const data = await api.get(`/agent-jobs${qs ? `?${qs}` : ""}`);
|
|
25
|
-
printList(data, [
|
|
26
|
-
{ key: "category", label: "Cat", width: 6 },
|
|
27
|
-
{ key: "driver", label: "Driver", width: 8 },
|
|
28
|
-
{ key: "status", label: "Status", width: 12 },
|
|
29
|
-
{ key: "title", label: "Title", width: 14 },
|
|
30
|
-
{ key: "mission", label: "Mission", width: 30 },
|
|
31
|
-
{ key: "createdAt", label: "Created", width: 24 },
|
|
32
|
-
{ key: "id", label: "ID", width: 38 },
|
|
33
|
-
], opts);
|
|
34
|
-
}
|
|
35
|
-
catch (err) {
|
|
36
|
-
handleError(err);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
function printJob(job, opts) {
|
|
40
|
-
if (opts.json) {
|
|
41
|
-
console.log(JSON.stringify(job, null, 2));
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
console.log(chalk.bold(job.mission));
|
|
45
|
-
printDetail(job, [
|
|
46
|
-
{ key: "id", label: "ID" },
|
|
47
|
-
{ key: "category", label: "Category" },
|
|
48
|
-
{ key: "driver", label: "Driver" },
|
|
49
|
-
{ key: "status", label: "Status" },
|
|
50
|
-
{ key: "title", label: "Title" },
|
|
51
|
-
{ key: "formatSpec", label: "Format spec" },
|
|
52
|
-
{ key: "projectId", label: "Project" },
|
|
53
|
-
{ key: "attempts", label: "Attempts" },
|
|
54
|
-
{ key: "error", label: "Error" },
|
|
55
|
-
{ key: "claimedBy", label: "Claimed by" },
|
|
56
|
-
{ key: "startedAt", label: "Started" },
|
|
57
|
-
{ key: "completedAt", label: "Completed" },
|
|
58
|
-
{ key: "createdAt", label: "Created" },
|
|
59
|
-
], opts);
|
|
60
|
-
}
|
|
61
|
-
const getCommand = new Command("get")
|
|
62
|
-
.description("Get an agent job")
|
|
63
|
-
.argument("<id>", "Agent job ID")
|
|
64
|
-
.option("--json", "Output as JSON")
|
|
65
|
-
.action(async (id, opts) => {
|
|
66
|
-
try {
|
|
67
|
-
const data = await api.get(`/agent-jobs/${id}`);
|
|
68
|
-
printJob(data, opts);
|
|
69
|
-
}
|
|
70
|
-
catch (err) {
|
|
71
|
-
handleError(err);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
function jobPayload(opts) {
|
|
75
|
-
const payload = {
|
|
76
|
-
category: opts.category,
|
|
77
|
-
driver: opts.driver,
|
|
78
|
-
mission: opts.mission,
|
|
79
|
-
};
|
|
80
|
-
if (opts.title !== undefined)
|
|
81
|
-
payload.title = opts.title;
|
|
82
|
-
if (opts.formatSpec !== undefined)
|
|
83
|
-
payload.formatSpec = opts.formatSpec;
|
|
84
|
-
if (opts.project !== undefined)
|
|
85
|
-
payload.projectId = opts.project;
|
|
86
|
-
return payload;
|
|
87
|
-
}
|
|
88
|
-
const createCommand = new Command("create")
|
|
89
|
-
.description("Create an agent job (queued until a worker claims it)")
|
|
90
|
-
.requiredOption("--category <category>", "dev | pm")
|
|
91
|
-
.requiredOption("--driver <driver>", "claude | codex")
|
|
92
|
-
.requiredOption("--mission <text>", "What the agent should do")
|
|
93
|
-
.option("--title <text>", "Short human label for the job")
|
|
94
|
-
.option("--format-spec <text>", "Expected output format")
|
|
95
|
-
.option("--project <projectId>", "Link to a project (UUID, must have a slug)")
|
|
96
|
-
.option("--json", "Output as JSON")
|
|
97
|
-
.action(async (opts) => {
|
|
98
|
-
try {
|
|
99
|
-
const data = await api.post("/agent-jobs", jobPayload(opts));
|
|
100
|
-
if (opts.json) {
|
|
101
|
-
console.log(JSON.stringify(data, null, 2));
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
console.log(chalk.green("✓"), `Agent job created: ${chalk.bold(data.id)}`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
catch (err) {
|
|
108
|
-
handleError(err);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
const startCommand = new Command("start")
|
|
112
|
-
.description("Record a run the caller is already performing (born running, claimed by the caller)")
|
|
113
|
-
.requiredOption("--category <category>", "dev | pm | upwork")
|
|
114
|
-
.requiredOption("--driver <driver>", "claude | codex")
|
|
115
|
-
.requiredOption("--mission <text>", "What the run is doing")
|
|
116
|
-
.option("--title <text>", "Short human label for the run")
|
|
117
|
-
.option("--format-spec <text>", "Expected output format")
|
|
118
|
-
.option("--project <projectId>", "Link to a project (UUID)")
|
|
119
|
-
.option("--json", "Output as JSON")
|
|
120
|
-
.action(async (opts) => {
|
|
121
|
-
try {
|
|
122
|
-
const data = await api.post("/agent-jobs/start", jobPayload(opts));
|
|
123
|
-
if (opts.json) {
|
|
124
|
-
console.log(JSON.stringify(data, null, 2));
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
console.log(chalk.green("✓"), `Agent run started: ${chalk.bold(data.id)}`);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
handleError(err);
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
const claimCommand = new Command("claim")
|
|
135
|
-
.description("Claim the oldest pending job of a category")
|
|
136
|
-
.requiredOption("--category <category>", "dev | pm")
|
|
137
|
-
.option("--json", "Output as JSON")
|
|
138
|
-
.action(async (opts) => {
|
|
139
|
-
try {
|
|
140
|
-
const data = await api.post("/agent-jobs/claim", {
|
|
141
|
-
category: opts.category,
|
|
142
|
-
});
|
|
143
|
-
if (opts.json) {
|
|
144
|
-
console.log(JSON.stringify(data, null, 2));
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
if (!data) {
|
|
148
|
-
console.log(chalk.dim("No pending jobs to claim."));
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
console.log(chalk.green("✓"), `Claimed ${chalk.bold(data.id)}`);
|
|
152
|
-
printJob(data, opts);
|
|
153
|
-
}
|
|
154
|
-
catch (err) {
|
|
155
|
-
handleError(err);
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
const completeCommand = new Command("complete")
|
|
159
|
-
.description("Mark a claimed job complete with a JSON result")
|
|
160
|
-
.argument("<id>", "Agent job ID")
|
|
161
|
-
.requiredOption("--result <json>", "Result as a JSON object")
|
|
162
|
-
.option("--json", "Output as JSON")
|
|
163
|
-
.action(async (id, opts) => {
|
|
164
|
-
try {
|
|
165
|
-
let result;
|
|
166
|
-
try {
|
|
167
|
-
result = JSON.parse(opts.result);
|
|
168
|
-
}
|
|
169
|
-
catch {
|
|
170
|
-
console.error(chalk.red("✗"), "--result must be valid JSON");
|
|
171
|
-
process.exit(1);
|
|
172
|
-
}
|
|
173
|
-
const data = await api.post(`/agent-jobs/${id}/complete`, {
|
|
174
|
-
result,
|
|
175
|
-
});
|
|
176
|
-
if (opts.json)
|
|
177
|
-
console.log(JSON.stringify(data, null, 2));
|
|
178
|
-
else
|
|
179
|
-
console.log(chalk.green("✓"), "Agent job completed");
|
|
180
|
-
}
|
|
181
|
-
catch (err) {
|
|
182
|
-
handleError(err);
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
const failCommand = new Command("fail")
|
|
186
|
-
.description("Mark a claimed job failed (requeues until max attempts)")
|
|
187
|
-
.argument("<id>", "Agent job ID")
|
|
188
|
-
.requiredOption("--error <message>", "Failure reason")
|
|
189
|
-
.option("--json", "Output as JSON")
|
|
190
|
-
.action(async (id, opts) => {
|
|
191
|
-
try {
|
|
192
|
-
const data = await api.post(`/agent-jobs/${id}/fail`, {
|
|
193
|
-
error: opts.error,
|
|
194
|
-
});
|
|
195
|
-
if (opts.json)
|
|
196
|
-
console.log(JSON.stringify(data, null, 2));
|
|
197
|
-
else
|
|
198
|
-
console.log(chalk.green("✓"), data.status === "failed" ? "Agent job failed" : "Agent job requeued");
|
|
199
|
-
}
|
|
200
|
-
catch (err) {
|
|
201
|
-
handleError(err);
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
export const agentJobCommand = new Command("agent-job")
|
|
205
|
-
.description("Manage the external agent work queue")
|
|
206
|
-
.addCommand(listCommand)
|
|
207
|
-
.addCommand(getCommand)
|
|
208
|
-
.addCommand(createCommand)
|
|
209
|
-
.addCommand(startCommand)
|
|
210
|
-
.addCommand(claimCommand)
|
|
211
|
-
.addCommand(completeCommand)
|
|
212
|
-
.addCommand(failCommand);
|
|
213
|
-
//# sourceMappingURL=agent-jobs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-jobs.js","sourceRoot":"","sources":["../../../src/commands/api/agent-jobs.ts"],"names":[],"mappings":"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"}
|