@itznexus/itznexus-cli 1.100.0 → 1.102.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/claude.js +3 -3
- package/dist/commands/agents/claude.js.map +1 -1
- package/dist/commands/agents/grok.d.ts +2 -0
- package/dist/commands/agents/grok.js +86 -0
- package/dist/commands/agents/grok.js.map +1 -0
- package/dist/commands/api/agent-events.d.ts +2 -0
- package/dist/commands/api/{claude-events.js → agent-events.js} +22 -15
- package/dist/commands/api/agent-events.js.map +1 -0
- package/dist/commands/api/project-state.d.ts +2 -0
- package/dist/commands/api/project-state.js +87 -0
- package/dist/commands/api/project-state.js.map +1 -0
- package/dist/commands/api/projects.js +6 -4
- package/dist/commands/api/projects.js.map +1 -1
- package/dist/commands/api/tasks.js +38 -0
- package/dist/commands/api/tasks.js.map +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-event.d.ts +12 -0
- package/dist/lib/agent-event.js +2 -0
- package/dist/lib/agent-event.js.map +1 -0
- package/dist/lib/api.d.ts +2 -1
- package/dist/lib/api.js +4 -2
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/claude/normalize-events.d.ts +2 -12
- package/dist/lib/claude/normalize-events.js +2 -1
- package/dist/lib/claude/normalize-events.js.map +1 -1
- package/dist/lib/format.js +5 -0
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/grok/normalize-events.d.ts +9 -0
- package/dist/lib/grok/normalize-events.js +334 -0
- package/dist/lib/grok/normalize-events.js.map +1 -0
- package/package.json +1 -1
- package/dist/commands/api/bridge.d.ts +0 -2
- package/dist/commands/api/bridge.js +0 -268
- package/dist/commands/api/bridge.js.map +0 -1
- package/dist/commands/api/claude-events.d.ts +0 -2
- package/dist/commands/api/claude-events.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { Command } from "commander";
|
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import { api } from "../../lib/api.js";
|
|
4
4
|
import { handleError } from "../../lib/format.js";
|
|
5
|
-
import { normalizeClaudeEvents
|
|
5
|
+
import { normalizeClaudeEvents } from "../../lib/claude/normalize-events.js";
|
|
6
6
|
const BATCH_SIZE = 500;
|
|
7
7
|
const ingestCommand = new Command("ingest")
|
|
8
8
|
.description("Ingest local Claude Code chat history into Nexus")
|
|
@@ -27,7 +27,7 @@ const ingestCommand = new Command("ingest")
|
|
|
27
27
|
batch = [];
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
|
-
const result = await api.post("/
|
|
30
|
+
const result = await api.post("/agent-events", { events: batch });
|
|
31
31
|
inserted += result.inserted;
|
|
32
32
|
skipped += result.skipped;
|
|
33
33
|
batch = [];
|
|
@@ -69,7 +69,7 @@ async function resolveSince(raw) {
|
|
|
69
69
|
// Scope to the current identity: another machine or worker profile may
|
|
70
70
|
// have ingested more recent events, and a global "last" would skip ours.
|
|
71
71
|
const me = await api.get("/auth/me");
|
|
72
|
-
const rows = await api.get(`/
|
|
72
|
+
const rows = await api.get(`/agent-events?limit=1&actorId=${me.id}&provider=claude`);
|
|
73
73
|
return rows.length > 0 ? new Date(rows[0].occurredAt) : undefined;
|
|
74
74
|
}
|
|
75
75
|
const durationMatch = raw.match(/^(\d+)([hdw])$/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/commands/agents/claude.ts"],"names":[],"mappings":"AAAA,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,
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/commands/agents/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { handleError } from "../../lib/format.js";
|
|
5
|
+
import { normalizeGrokEvents } from "../../lib/grok/normalize-events.js";
|
|
6
|
+
const BATCH_SIZE = 500;
|
|
7
|
+
const ingestCommand = new Command("ingest")
|
|
8
|
+
.description("Ingest local Grok chat history into Nexus")
|
|
9
|
+
.option("--since <when>", "ISO date, duration like '24h', '7d', or 'last' (default). 'last' queries Nexus for the most recent Grok event of the current identity.", "last")
|
|
10
|
+
.option("--dry-run", "Normalize and count, do not push to API")
|
|
11
|
+
.option("--json", "Output as JSON")
|
|
12
|
+
.action(async (opts) => {
|
|
13
|
+
try {
|
|
14
|
+
const since = await resolveSince(opts.since);
|
|
15
|
+
if (!opts.json) {
|
|
16
|
+
console.log(chalk.dim(`Ingesting Grok events${since ? ` since ${since.toISOString()}` : " (full history)"}${opts.dryRun ? " [dry-run]" : ""}`));
|
|
17
|
+
}
|
|
18
|
+
let inserted = 0;
|
|
19
|
+
let skipped = 0;
|
|
20
|
+
let total = 0;
|
|
21
|
+
let batch = [];
|
|
22
|
+
const flush = async () => {
|
|
23
|
+
if (batch.length === 0)
|
|
24
|
+
return;
|
|
25
|
+
if (opts.dryRun) {
|
|
26
|
+
inserted += batch.length;
|
|
27
|
+
batch = [];
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const result = await api.post("/agent-events", { events: batch });
|
|
31
|
+
inserted += result.inserted;
|
|
32
|
+
skipped += result.skipped;
|
|
33
|
+
batch = [];
|
|
34
|
+
};
|
|
35
|
+
for await (const event of normalizeGrokEvents({ since })) {
|
|
36
|
+
batch.push(event);
|
|
37
|
+
total++;
|
|
38
|
+
if (batch.length >= BATCH_SIZE) {
|
|
39
|
+
await flush();
|
|
40
|
+
if (!opts.json) {
|
|
41
|
+
process.stdout.write(chalk.dim(` pushed ${inserted}/${total}\r`));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
await flush();
|
|
46
|
+
const result = {
|
|
47
|
+
total,
|
|
48
|
+
inserted,
|
|
49
|
+
skipped,
|
|
50
|
+
dryRun: !!opts.dryRun,
|
|
51
|
+
since: since?.toISOString() ?? null,
|
|
52
|
+
};
|
|
53
|
+
if (opts.json) {
|
|
54
|
+
console.log(JSON.stringify(result, null, 2));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.log(chalk.green("✓"), `${total} events normalized, ${inserted} inserted, ${skipped} skipped${opts.dryRun ? " (dry-run)" : ""}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
handleError(err);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
export const grokCommand = new Command("grok")
|
|
65
|
+
.description("Local agent: ingest Grok chat history")
|
|
66
|
+
.addCommand(ingestCommand);
|
|
67
|
+
async function resolveSince(raw) {
|
|
68
|
+
if (raw === "last") {
|
|
69
|
+
const me = await api.get("/auth/me");
|
|
70
|
+
const rows = await api.get(`/agent-events?limit=1&actorId=${me.id}&provider=grok`);
|
|
71
|
+
return rows.length > 0 ? new Date(rows[0].occurredAt) : undefined;
|
|
72
|
+
}
|
|
73
|
+
const durationMatch = raw.match(/^(\d+)([hdw])$/);
|
|
74
|
+
if (durationMatch) {
|
|
75
|
+
const n = Number(durationMatch[1]);
|
|
76
|
+
const unit = durationMatch[2];
|
|
77
|
+
const ms = unit === "h" ? 3600_000 : unit === "d" ? 86400_000 : 604800_000;
|
|
78
|
+
return new Date(Date.now() - n * ms);
|
|
79
|
+
}
|
|
80
|
+
const d = new Date(raw);
|
|
81
|
+
if (Number.isNaN(d.getTime())) {
|
|
82
|
+
throw new Error(`Invalid --since value: ${raw}. Use ISO date, '24h', '7d', or 'last'.`);
|
|
83
|
+
}
|
|
84
|
+
return d;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=grok.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok.js","sourceRoot":"","sources":["../../../src/commands/agents/grok.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,11 @@ import { Command } from "commander";
|
|
|
2
2
|
import { api } from "../../lib/api.js";
|
|
3
3
|
import { printList, handleError } from "../../lib/format.js";
|
|
4
4
|
const listCommand = new Command("list")
|
|
5
|
-
.description("List ingested
|
|
5
|
+
.description("List ingested agent events")
|
|
6
6
|
.option("--actor <userId>", "Filter by actor user ID")
|
|
7
|
-
.option("--session <
|
|
7
|
+
.option("--session <sessionId>", "Filter by session ID")
|
|
8
8
|
.option("--project <projectTag>", "Filter by project tag")
|
|
9
|
+
.option("--provider <name>", "Filter by provider (claude or grok)")
|
|
9
10
|
.option("--since <iso>", "Filter to events occurred after this ISO date")
|
|
10
11
|
.option("--until <iso>", "Filter to events occurred before this ISO date")
|
|
11
12
|
.option("--limit <n>", "Max results (default 50, max 5000)", "50")
|
|
@@ -16,21 +17,24 @@ const listCommand = new Command("list")
|
|
|
16
17
|
if (opts.actor)
|
|
17
18
|
params.set("actorId", opts.actor);
|
|
18
19
|
if (opts.session)
|
|
19
|
-
params.set("
|
|
20
|
+
params.set("sessionId", opts.session);
|
|
20
21
|
if (opts.project)
|
|
21
22
|
params.set("projectTag", opts.project);
|
|
23
|
+
if (opts.provider)
|
|
24
|
+
params.set("provider", opts.provider);
|
|
22
25
|
if (opts.since)
|
|
23
26
|
params.set("since", opts.since);
|
|
24
27
|
if (opts.until)
|
|
25
28
|
params.set("until", opts.until);
|
|
26
29
|
params.set("limit", opts.limit);
|
|
27
|
-
const data = await api.get(`/
|
|
30
|
+
const data = await api.get(`/agent-events?${params.toString()}`);
|
|
28
31
|
printList(data, [
|
|
29
32
|
{ key: "occurredAt", label: "When", width: 24 },
|
|
30
33
|
{ key: "eventType", label: "Type", width: 24 },
|
|
34
|
+
{ key: "provider", label: "Provider", width: 8 },
|
|
31
35
|
{ key: "projectTag", label: "Project", width: 18 },
|
|
32
36
|
{ key: "gitBranch", label: "Branch", width: 16 },
|
|
33
|
-
{ key: "
|
|
37
|
+
{ key: "sessionId", label: "Session", width: 36 },
|
|
34
38
|
], opts);
|
|
35
39
|
}
|
|
36
40
|
catch (err) {
|
|
@@ -38,12 +42,12 @@ const listCommand = new Command("list")
|
|
|
38
42
|
}
|
|
39
43
|
});
|
|
40
44
|
const getCommand = new Command("get")
|
|
41
|
-
.description("Get a single
|
|
42
|
-
.argument("<id>", "
|
|
45
|
+
.description("Get a single agent event")
|
|
46
|
+
.argument("<id>", "Agent event ID")
|
|
43
47
|
.option("--json", "Output as JSON")
|
|
44
48
|
.action(async (id, opts) => {
|
|
45
49
|
try {
|
|
46
|
-
const data = await api.get(`/
|
|
50
|
+
const data = await api.get(`/agent-events/${id}`);
|
|
47
51
|
console.log(JSON.stringify(data, null, 2));
|
|
48
52
|
void opts;
|
|
49
53
|
}
|
|
@@ -52,8 +56,9 @@ const getCommand = new Command("get")
|
|
|
52
56
|
}
|
|
53
57
|
});
|
|
54
58
|
const usageStatsCommand = new Command("usage-stats")
|
|
55
|
-
.description("Aggregate usage stats for
|
|
59
|
+
.description("Aggregate usage stats for agent events")
|
|
56
60
|
.option("--actor <userId>", "Filter by actor user ID")
|
|
61
|
+
.option("--provider <name>", "Filter by provider (claude or grok)")
|
|
57
62
|
.option("--project-tags <list>", "Comma-separated project tags")
|
|
58
63
|
.option("--since <iso>", "Window start (ISO)")
|
|
59
64
|
.option("--until <iso>", "Window end (ISO)")
|
|
@@ -63,6 +68,8 @@ const usageStatsCommand = new Command("usage-stats")
|
|
|
63
68
|
const params = new URLSearchParams();
|
|
64
69
|
if (opts.actor)
|
|
65
70
|
params.set("actorId", opts.actor);
|
|
71
|
+
if (opts.provider)
|
|
72
|
+
params.set("provider", opts.provider);
|
|
66
73
|
if (opts.projectTags)
|
|
67
74
|
params.set("projectTags", opts.projectTags);
|
|
68
75
|
if (opts.since)
|
|
@@ -70,7 +77,7 @@ const usageStatsCommand = new Command("usage-stats")
|
|
|
70
77
|
if (opts.until)
|
|
71
78
|
params.set("until", opts.until);
|
|
72
79
|
const qs = params.toString();
|
|
73
|
-
const data = await api.get(`/
|
|
80
|
+
const data = await api.get(`/agent-events/usage-stats${qs ? `?${qs}` : ""}`);
|
|
74
81
|
console.log(JSON.stringify(data, null, 2));
|
|
75
82
|
}
|
|
76
83
|
catch (err) {
|
|
@@ -78,11 +85,11 @@ const usageStatsCommand = new Command("usage-stats")
|
|
|
78
85
|
}
|
|
79
86
|
});
|
|
80
87
|
const projectTagsCommand = new Command("project-tags")
|
|
81
|
-
.description("List known
|
|
88
|
+
.description("List known agent-event project tags")
|
|
82
89
|
.option("--json", "Output as JSON")
|
|
83
90
|
.action(async (opts) => {
|
|
84
91
|
try {
|
|
85
|
-
const data = await api.get("/
|
|
92
|
+
const data = await api.get("/agent-events/project-tags");
|
|
86
93
|
if (opts.json) {
|
|
87
94
|
console.log(JSON.stringify(data, null, 2));
|
|
88
95
|
}
|
|
@@ -95,10 +102,10 @@ const projectTagsCommand = new Command("project-tags")
|
|
|
95
102
|
handleError(err);
|
|
96
103
|
}
|
|
97
104
|
});
|
|
98
|
-
export const
|
|
99
|
-
.description("Query ingested
|
|
105
|
+
export const agentEventCommand = new Command("agent-event")
|
|
106
|
+
.description("Query ingested agent events")
|
|
100
107
|
.addCommand(listCommand)
|
|
101
108
|
.addCommand(getCommand)
|
|
102
109
|
.addCommand(usageStatsCommand)
|
|
103
110
|
.addCommand(projectTagsCommand);
|
|
104
|
-
//# sourceMappingURL=
|
|
111
|
+
//# sourceMappingURL=agent-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-events.js","sourceRoot":"","sources":["../../../src/commands/api/agent-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { handleError } from "../../lib/format.js";
|
|
5
|
+
const KEYS_SHOWN = 8;
|
|
6
|
+
// Synthesis states whose remedy is an agent run rather than a human act.
|
|
7
|
+
const AGENT_CODES = new Set(["ingest-needed", "pm-ready", "dev-ready"]);
|
|
8
|
+
function keys(refs) {
|
|
9
|
+
if (!refs.length)
|
|
10
|
+
return chalk.dim("none");
|
|
11
|
+
const shown = refs.slice(0, KEYS_SHOWN).map((r) => r.key);
|
|
12
|
+
const more = refs.length - shown.length;
|
|
13
|
+
return shown.join(", ") + (more > 0 ? ` +${more} more` : "");
|
|
14
|
+
}
|
|
15
|
+
function countAndKeys(refs) {
|
|
16
|
+
return refs.length ? `${refs.length} (${keys(refs)})` : "0";
|
|
17
|
+
}
|
|
18
|
+
function printState(state) {
|
|
19
|
+
const title = [state.key, state.name].filter(Boolean).join(" · ");
|
|
20
|
+
console.log(chalk.bold(title), chalk.dim(`state ${state.generatedAt}`));
|
|
21
|
+
console.log("");
|
|
22
|
+
console.log(chalk.bold("State"));
|
|
23
|
+
const active = state.synthesis.filter((s) => s.active);
|
|
24
|
+
if (!active.length) {
|
|
25
|
+
console.log(chalk.dim(" pipeline is idle: no state is active"));
|
|
26
|
+
}
|
|
27
|
+
for (const s of active) {
|
|
28
|
+
const dot = AGENT_CODES.has(s.code) ? chalk.cyan("●") : chalk.yellow("●");
|
|
29
|
+
const detail = s.keys.length
|
|
30
|
+
? `: ${keys(s.keys.map((k) => ({ key: k })))}`
|
|
31
|
+
: "";
|
|
32
|
+
console.log(` ${dot} ${s.label} (${s.count})${detail}`);
|
|
33
|
+
}
|
|
34
|
+
console.log("");
|
|
35
|
+
console.log(chalk.bold("Ingest"));
|
|
36
|
+
console.log(` last: ${state.ingest.lastIngestedAt ?? chalk.dim("never")} · new since: ${state.ingest.newInteractions} interactions, ${state.ingest.newSlackMessages} Slack messages`);
|
|
37
|
+
console.log(` running: ${keys(state.ingest.running)} · awaiting review: ${keys(state.ingest.awaitingReview)}`);
|
|
38
|
+
console.log("");
|
|
39
|
+
console.log(chalk.bold("Requests"));
|
|
40
|
+
console.log(` to triage: ${countAndKeys(state.requests.pendingTriage)} · ready: ${countAndKeys(state.requests.ready)}`);
|
|
41
|
+
console.log(` in progress: ${countAndKeys(state.requests.inProgress)} · in review: ${countAndKeys(state.requests.inReview)}`);
|
|
42
|
+
for (const b of state.requests.blocked) {
|
|
43
|
+
console.log(` ${chalk.red("blocked")}: ${b.key} by ${b.blockedBy.join(", ")}`);
|
|
44
|
+
}
|
|
45
|
+
console.log("");
|
|
46
|
+
console.log(chalk.bold("Decisions"));
|
|
47
|
+
if (!state.decisions.open.length)
|
|
48
|
+
console.log(chalk.dim(" none open"));
|
|
49
|
+
for (const d of state.decisions.open) {
|
|
50
|
+
const who = d.assigneeEmail
|
|
51
|
+
? `${d.assigneeEmail}${d.assigneeRole ? ` (${d.assigneeRole})` : ""}`
|
|
52
|
+
: chalk.dim("unassigned");
|
|
53
|
+
const blocks = d.blocks.length ? `, blocks ${d.blocks.join(", ")}` : "";
|
|
54
|
+
console.log(` ${d.key} ${d.title} → ${who}${blocks}`);
|
|
55
|
+
}
|
|
56
|
+
console.log("");
|
|
57
|
+
console.log(chalk.bold("Sprints"));
|
|
58
|
+
if (!state.sprints.open.length)
|
|
59
|
+
console.log(chalk.dim(" no open sprint"));
|
|
60
|
+
for (const s of state.sprints.open) {
|
|
61
|
+
console.log(` ${s.name} (${s.status}): ${s.tasks.todo} todo · ${s.tasks.inProgress} in progress · ${s.tasks.review} review · ${s.tasks.done}/${s.tasks.total} done`);
|
|
62
|
+
}
|
|
63
|
+
console.log(` pool (backlog, unblocked): ${countAndKeys(state.sprints.pool)}`);
|
|
64
|
+
console.log("");
|
|
65
|
+
console.log(chalk.bold("Dev"));
|
|
66
|
+
console.log(` ready: ${countAndKeys(state.dev.ready)} · in progress: ${countAndKeys(state.dev.inProgress)} · awaiting acceptance: ${countAndKeys(state.dev.awaitingAcceptance)}`);
|
|
67
|
+
for (const b of state.dev.blocked) {
|
|
68
|
+
console.log(` ${chalk.red("blocked")}: ${b.key} on decision ${b.blockedBy.join(", ")}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export const stateCommand = new Command("state")
|
|
72
|
+
.description("Derived pipeline state of a project: a synthesis of named states (ingest needs to run, PM blocked, sprint needs setup, dev can run, ...) over per-stage detail and an attention rollup, so agents and humans know who is up next")
|
|
73
|
+
.argument("<id>", "Project ID, key (e.g. NEX), or slug (e.g. itznexus)")
|
|
74
|
+
.option("--json", "Output as JSON")
|
|
75
|
+
.action(async (id, opts) => {
|
|
76
|
+
try {
|
|
77
|
+
const state = await api.get(`/projects/${id}/state`);
|
|
78
|
+
if (opts.json)
|
|
79
|
+
console.log(JSON.stringify(state, null, 2));
|
|
80
|
+
else
|
|
81
|
+
printState(state);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
handleError(err);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=project-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-state.js","sourceRoot":"","sources":["../../../src/commands/api/project-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ import { instructionsCommand } from "./project-instructions.js";
|
|
|
10
10
|
import { projectCapabilityCommand } from "./project-capabilities.js";
|
|
11
11
|
import { projectArtifactCommand } from "./project-artifacts.js";
|
|
12
12
|
import { roleCommand } from "./project-roles.js";
|
|
13
|
+
import { stateCommand } from "./project-state.js";
|
|
13
14
|
const listCommand = new Command("list")
|
|
14
15
|
.description("List projects (non-terminated by default)")
|
|
15
16
|
.option("--status <status>", "Filter by exact status; overrides the default non-terminated scope")
|
|
@@ -823,8 +824,8 @@ const commitsCommand = new Command("commits")
|
|
|
823
824
|
handleError(err);
|
|
824
825
|
}
|
|
825
826
|
});
|
|
826
|
-
const
|
|
827
|
-
.description("Show
|
|
827
|
+
const agentSpendCommand = new Command("agent-spend")
|
|
828
|
+
.description("Show agent spend for a project")
|
|
828
829
|
.argument("<id>", "Project ID, key (e.g. NEX), or slug (e.g. itznexus)")
|
|
829
830
|
.option("--days <n>", "Window in days (1-365, default 30)", (v) => parseInt(v, 10))
|
|
830
831
|
.option("--json", "Output as JSON")
|
|
@@ -834,7 +835,7 @@ const claudeCostCommand = new Command("claude-cost")
|
|
|
834
835
|
if (opts.days != null)
|
|
835
836
|
params.set("days", String(opts.days));
|
|
836
837
|
const qs = params.toString();
|
|
837
|
-
const data = await api.get(`/projects/${id}/
|
|
838
|
+
const data = await api.get(`/projects/${id}/agent-spend${qs ? `?${qs}` : ""}`);
|
|
838
839
|
if (opts.json) {
|
|
839
840
|
console.log(JSON.stringify(data, null, 2));
|
|
840
841
|
return;
|
|
@@ -1039,6 +1040,7 @@ export const projectCommand = new Command("project")
|
|
|
1039
1040
|
.addCommand(detachRepoCommand)
|
|
1040
1041
|
.addCommand(awsAccountCommand)
|
|
1041
1042
|
.addCommand(dossierCommand)
|
|
1043
|
+
.addCommand(stateCommand)
|
|
1042
1044
|
.addCommand(lastIngestedCommand)
|
|
1043
1045
|
.addCommand(syncCommand)
|
|
1044
1046
|
.addCommand(environmentCommand)
|
|
@@ -1052,7 +1054,7 @@ export const projectCommand = new Command("project")
|
|
|
1052
1054
|
.addCommand(activeCommand)
|
|
1053
1055
|
.addCommand(commitStatsCommand)
|
|
1054
1056
|
.addCommand(commitsCommand)
|
|
1055
|
-
.addCommand(
|
|
1057
|
+
.addCommand(agentSpendCommand)
|
|
1056
1058
|
.addCommand(uptimeCommand)
|
|
1057
1059
|
.addCommand(uptimeGroupCommand)
|
|
1058
1060
|
.addCommand(documentsFolderCommand)
|