@itznexus/itznexus-cli 1.43.0 → 1.45.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/agents/workspace.js +44 -25
- package/dist/commands/agents/workspace.js.map +1 -1
- package/dist/commands/api/agent-runs.d.ts +2 -0
- package/dist/commands/api/agent-runs.js +161 -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
|
@@ -7,15 +7,17 @@ import chalk from "chalk";
|
|
|
7
7
|
import { api } from "../../lib/api.js";
|
|
8
8
|
import { handleError } from "../../lib/format.js";
|
|
9
9
|
import { cleanupStaleInstructionFiles, fetchProjectBySlug, fetchRenderedInstructions, findInstructionConflicts, syncInstructionFiles, } from "../../lib/project-context.js";
|
|
10
|
-
// Materializes the whole workspace from Nexus:
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
10
|
+
// Materializes the whole workspace from Nexus: the root itself is the
|
|
11
|
+
// itzworkspace repo clone (workspace skills + thin CLAUDE.md, gitignores
|
|
12
|
+
// everything else), and every project with a slug gets a folder holding its
|
|
13
|
+
// repo clones and instruction files. Default-pipeline projects live at
|
|
14
|
+
// <root>/<slug>; upwork demos nest under <root>/upwork-workspace/<slug>,
|
|
15
|
+
// inside the upwork-workspace repo clone (same tooling-repo pattern).
|
|
15
16
|
const DEFAULT_ROOT = "~/itzworkspace";
|
|
16
17
|
const UPWORK_DIR = "upwork-workspace";
|
|
17
|
-
// Tooling
|
|
18
|
-
const
|
|
18
|
+
// Tooling repos (skills + README), not per-project repos: live in the main org.
|
|
19
|
+
const ROOT_REPO = "itzworking/itzworkspace";
|
|
20
|
+
const UPWORK_REPO = "itzworking/upwork-workspace";
|
|
19
21
|
const TERMINAL_STATUSES = new Set(["completed", "cancelled", "won", "dropped"]);
|
|
20
22
|
function expandHome(p) {
|
|
21
23
|
return p.startsWith("~/") ? path.join(os.homedir(), p.slice(2)) : p;
|
|
@@ -26,22 +28,35 @@ function git(args, cwd) {
|
|
|
26
28
|
function isGitRepo(dir) {
|
|
27
29
|
return fs.existsSync(path.join(dir, ".git"));
|
|
28
30
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
// Clones the tooling repo into dir, pulls it when already a clone, and adopts
|
|
32
|
+
// an existing plain folder in place (init + fetch + checkout): the root
|
|
33
|
+
// predates being a repo on machines that synced before it existed.
|
|
34
|
+
function ensureWorkspaceRepo(dir, repo, https) {
|
|
35
|
+
const label = path.basename(dir);
|
|
31
36
|
if (isGitRepo(dir)) {
|
|
32
37
|
return git(["pull", "--ff-only"], dir)
|
|
33
38
|
? null
|
|
34
|
-
: `${
|
|
35
|
-
}
|
|
36
|
-
if (fs.existsSync(dir)) {
|
|
37
|
-
return `${UPWORK_DIR}: exists but is not a git clone`;
|
|
39
|
+
: `${label}: pull failed (dirty or diverged), left as is`;
|
|
38
40
|
}
|
|
39
41
|
const url = https
|
|
40
|
-
? `https://github.com/${
|
|
41
|
-
: `git@github.com:${
|
|
42
|
-
if (!
|
|
42
|
+
? `https://github.com/${repo}.git`
|
|
43
|
+
: `git@github.com:${repo}.git`;
|
|
44
|
+
if (!fs.existsSync(dir)) {
|
|
45
|
+
if (git(["clone", url, dir], path.dirname(dir)))
|
|
46
|
+
return null;
|
|
43
47
|
fs.mkdirSync(dir, { recursive: true });
|
|
44
|
-
return `${
|
|
48
|
+
return `${label}: clone of ${repo} failed, created a plain folder`;
|
|
49
|
+
}
|
|
50
|
+
// reset --hard (not checkout) so stale local copies of the repo's few
|
|
51
|
+
// tooling files converge to the repo version instead of blocking adoption.
|
|
52
|
+
const adopted = git(["init", "-b", "main"], dir) &&
|
|
53
|
+
git(["remote", "add", "origin", url], dir) &&
|
|
54
|
+
git(["fetch", "origin"], dir) &&
|
|
55
|
+
git(["reset", "--hard", "origin/main"], dir) &&
|
|
56
|
+
git(["branch", "-u", "origin/main", "main"], dir);
|
|
57
|
+
if (!adopted) {
|
|
58
|
+
fs.rmSync(path.join(dir, ".git"), { recursive: true, force: true });
|
|
59
|
+
return `${label}: could not adopt existing folder as a ${repo} clone, left as is`;
|
|
45
60
|
}
|
|
46
61
|
return null;
|
|
47
62
|
}
|
|
@@ -99,7 +114,7 @@ async function syncProjectFolder(project, dir, opts) {
|
|
|
99
114
|
return result;
|
|
100
115
|
}
|
|
101
116
|
const syncCommand = new Command("sync")
|
|
102
|
-
.description("Sync the full workspace from Nexus: for every project with a slug
|
|
117
|
+
.description("Sync the full workspace from Nexus: converge the root itzworkspace repo (workspace skills + context), then for every project with a slug clone missing repos, fast-forward existing ones, and materialize instruction files. Default projects land in <root>/<slug>, upwork demos in <root>/upwork-workspace/<slug> (the upwork-workspace repo is cloned or pulled first). Terminal projects are skipped unless --all.")
|
|
103
118
|
.option("--root <dir>", "Workspace root folder", DEFAULT_ROOT)
|
|
104
119
|
.option("--project <slug>", "Only sync this project slug")
|
|
105
120
|
.option("--https", "Clone over HTTPS instead of SSH")
|
|
@@ -110,6 +125,15 @@ const syncCommand = new Command("sync")
|
|
|
110
125
|
try {
|
|
111
126
|
const root = expandHome(opts.root);
|
|
112
127
|
fs.mkdirSync(root, { recursive: true });
|
|
128
|
+
const warnings = [];
|
|
129
|
+
const warn = (message) => {
|
|
130
|
+
warnings.push(message);
|
|
131
|
+
if (!opts.json)
|
|
132
|
+
console.error(chalk.yellow("!"), message);
|
|
133
|
+
};
|
|
134
|
+
const rootWarning = ensureWorkspaceRepo(root, ROOT_REPO, !!opts.https);
|
|
135
|
+
if (rootWarning)
|
|
136
|
+
warn(rootWarning);
|
|
113
137
|
const projects = await api.get("/projects");
|
|
114
138
|
const targets = projects.filter((p) => p.slug &&
|
|
115
139
|
(opts.project
|
|
@@ -118,11 +142,10 @@ const syncCommand = new Command("sync")
|
|
|
118
142
|
if (opts.project && targets.length === 0) {
|
|
119
143
|
throw new Error(`No project with slug "${opts.project}"`);
|
|
120
144
|
}
|
|
121
|
-
const warnings = [];
|
|
122
145
|
if (targets.some((p) => p.pipeline === "upwork")) {
|
|
123
|
-
const warning =
|
|
146
|
+
const warning = ensureWorkspaceRepo(path.join(root, UPWORK_DIR), UPWORK_REPO, !!opts.https);
|
|
124
147
|
if (warning)
|
|
125
|
-
|
|
148
|
+
warn(warning);
|
|
126
149
|
}
|
|
127
150
|
const results = [];
|
|
128
151
|
const errored = [];
|
|
@@ -167,10 +190,6 @@ const syncCommand = new Command("sync")
|
|
|
167
190
|
}
|
|
168
191
|
}
|
|
169
192
|
}
|
|
170
|
-
for (const w of warnings) {
|
|
171
|
-
if (!opts.json)
|
|
172
|
-
console.error(chalk.yellow("!"), w);
|
|
173
|
-
}
|
|
174
193
|
const hasError = errored.length > 0 ||
|
|
175
194
|
results.some((r) => r.failed.length > 0 || r.conflicts.length > 0);
|
|
176
195
|
if (opts.json) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/commands/agents/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAEtC,
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/commands/agents/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
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 runs (newest first)")
|
|
7
|
+
.option("--status <status>", "running | completed | failed")
|
|
8
|
+
.option("--skill <skill>", "Only runs of this skill (e.g. demo-build)")
|
|
9
|
+
.option("--project <projectId>", "Only runs linked to this project (UUID)")
|
|
10
|
+
.option("--page <n>", "Page number (default 1)")
|
|
11
|
+
.option("--page-size <n>", "Rows per page (default 100)")
|
|
12
|
+
.option("--json", "Output as JSON")
|
|
13
|
+
.action(async (opts) => {
|
|
14
|
+
try {
|
|
15
|
+
const params = new URLSearchParams();
|
|
16
|
+
if (opts.status)
|
|
17
|
+
params.set("status", opts.status);
|
|
18
|
+
if (opts.skill)
|
|
19
|
+
params.set("skill", opts.skill);
|
|
20
|
+
if (opts.project)
|
|
21
|
+
params.set("projectId", opts.project);
|
|
22
|
+
if (opts.page)
|
|
23
|
+
params.set("page", opts.page);
|
|
24
|
+
if (opts.pageSize)
|
|
25
|
+
params.set("pageSize", opts.pageSize);
|
|
26
|
+
const qs = params.toString();
|
|
27
|
+
const data = await api.get(`/agent-runs${qs ? `?${qs}` : ""}`);
|
|
28
|
+
printList(data, [
|
|
29
|
+
{ key: "skill", label: "Skill", width: 16 },
|
|
30
|
+
{ key: "status", label: "Status", width: 12 },
|
|
31
|
+
{ key: "startedAt", label: "Started", width: 24 },
|
|
32
|
+
{ key: "endedAt", label: "Ended", width: 24 },
|
|
33
|
+
{ key: "id", label: "ID", width: 38 },
|
|
34
|
+
], opts);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
handleError(err);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
function printRun(run, opts) {
|
|
41
|
+
if (opts.json) {
|
|
42
|
+
console.log(JSON.stringify(run, null, 2));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
console.log(chalk.bold(run.skill));
|
|
46
|
+
printDetail(run, [
|
|
47
|
+
{ key: "id", label: "ID" },
|
|
48
|
+
{ key: "status", label: "Status" },
|
|
49
|
+
{ key: "skill", label: "Skill" },
|
|
50
|
+
{ key: "args", label: "Args" },
|
|
51
|
+
{ key: "projectId", label: "Project" },
|
|
52
|
+
{ key: "workspaceCommit", label: "Workspace commit" },
|
|
53
|
+
{ key: "error", label: "Error" },
|
|
54
|
+
{ key: "agentUserId", label: "Agent" },
|
|
55
|
+
{ key: "startedAt", label: "Started" },
|
|
56
|
+
{ key: "endedAt", label: "Ended" },
|
|
57
|
+
], opts);
|
|
58
|
+
}
|
|
59
|
+
const getCommand = new Command("get")
|
|
60
|
+
.description("Get an agent run")
|
|
61
|
+
.argument("<id>", "Agent run ID")
|
|
62
|
+
.option("--json", "Output as JSON")
|
|
63
|
+
.action(async (id, opts) => {
|
|
64
|
+
try {
|
|
65
|
+
const data = await api.get(`/agent-runs/${id}`);
|
|
66
|
+
printRun(data, opts);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
handleError(err);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
const startCommand = new Command("start")
|
|
73
|
+
.description("Record a run the caller is performing (born running, audit only)")
|
|
74
|
+
.requiredOption("--skill <skill>", "The skill being run (e.g. demo-build)")
|
|
75
|
+
.option("--args <json>", "Skill args as a JSON object")
|
|
76
|
+
.option("--project <projectId>", "Link to a project (UUID)")
|
|
77
|
+
.option("--workspace-commit <sha>", "itzworkspace HEAD at session start")
|
|
78
|
+
.option("--json", "Output as JSON")
|
|
79
|
+
.action(async (opts) => {
|
|
80
|
+
try {
|
|
81
|
+
const payload = { skill: opts.skill };
|
|
82
|
+
if (opts.args !== undefined) {
|
|
83
|
+
try {
|
|
84
|
+
payload.args = JSON.parse(opts.args);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
console.error(chalk.red("✗"), "--args must be valid JSON");
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (opts.project !== undefined)
|
|
92
|
+
payload.projectId = opts.project;
|
|
93
|
+
if (opts.workspaceCommit !== undefined) {
|
|
94
|
+
payload.workspaceCommit = opts.workspaceCommit;
|
|
95
|
+
}
|
|
96
|
+
const data = await api.post("/agent-runs", payload);
|
|
97
|
+
if (opts.json) {
|
|
98
|
+
console.log(JSON.stringify(data, null, 2));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
console.log(chalk.green("✓"), `Agent run started: ${chalk.bold(data.id)}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
handleError(err);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
const completeCommand = new Command("complete")
|
|
109
|
+
.description("Close a running agent run with a JSON result")
|
|
110
|
+
.argument("<id>", "Agent run ID")
|
|
111
|
+
.requiredOption("--result <json>", "Result as a JSON object")
|
|
112
|
+
.option("--json", "Output as JSON")
|
|
113
|
+
.action(async (id, opts) => {
|
|
114
|
+
try {
|
|
115
|
+
let result;
|
|
116
|
+
try {
|
|
117
|
+
result = JSON.parse(opts.result);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
console.error(chalk.red("✗"), "--result must be valid JSON");
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
const data = await api.post(`/agent-runs/${id}/complete`, {
|
|
124
|
+
result,
|
|
125
|
+
});
|
|
126
|
+
if (opts.json)
|
|
127
|
+
console.log(JSON.stringify(data, null, 2));
|
|
128
|
+
else
|
|
129
|
+
console.log(chalk.green("✓"), "Agent run completed");
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
handleError(err);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
const failCommand = new Command("fail")
|
|
136
|
+
.description("Close a running agent run as failed")
|
|
137
|
+
.argument("<id>", "Agent run ID")
|
|
138
|
+
.requiredOption("--error <message>", "Failure reason")
|
|
139
|
+
.option("--json", "Output as JSON")
|
|
140
|
+
.action(async (id, opts) => {
|
|
141
|
+
try {
|
|
142
|
+
const data = await api.post(`/agent-runs/${id}/fail`, {
|
|
143
|
+
error: opts.error,
|
|
144
|
+
});
|
|
145
|
+
if (opts.json)
|
|
146
|
+
console.log(JSON.stringify(data, null, 2));
|
|
147
|
+
else
|
|
148
|
+
console.log(chalk.green("✓"), "Agent run failed");
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
handleError(err);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
export const agentRunCommand = new Command("agent-run")
|
|
155
|
+
.description("Audit log of worker skill runs")
|
|
156
|
+
.addCommand(listCommand)
|
|
157
|
+
.addCommand(getCommand)
|
|
158
|
+
.addCommand(startCommand)
|
|
159
|
+
.addCommand(completeCommand)
|
|
160
|
+
.addCommand(failCommand);
|
|
161
|
+
//# 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 skill runs
|
|
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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"}
|