codedeck 0.6.0 → 0.7.1
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/README.md +50 -35
- package/dist/cli/commands/claims.js +3 -2
- package/dist/cli/commands/claims.js.map +1 -1
- package/dist/cli/commands/doctor.js +8 -40
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/logs.js +2 -2
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/open.js +102 -11
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/ps.js +6 -6
- package/dist/cli/commands/ps.js.map +1 -1
- package/dist/cli/commands/review.js +36 -58
- package/dist/cli/commands/review.js.map +1 -1
- package/dist/cli/commands/run.js +27 -27
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/setup.js +96 -314
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/show.js +2 -1
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/ui.js +61 -0
- package/dist/cli/commands/ui.js.map +1 -0
- package/dist/cli/commands/usage-backfill.js +149 -0
- package/dist/cli/commands/usage-backfill.js.map +1 -0
- package/dist/cli/commands/usage.js +113 -45
- package/dist/cli/commands/usage.js.map +1 -1
- package/dist/cli/commands/wait.js +3 -2
- package/dist/cli/commands/wait.js.map +1 -1
- package/dist/cli/index.js +55 -39
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/web-launch.js +126 -0
- package/dist/cli/web-launch.js.map +1 -0
- package/dist/config/config.js +0 -70
- package/dist/config/config.js.map +1 -1
- package/dist/config/paths.js +1 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/setup.js +248 -0
- package/dist/config/setup.js.map +1 -0
- package/dist/config/web-host.js +31 -0
- package/dist/config/web-host.js.map +1 -0
- package/dist/config/web-port.js +24 -0
- package/dist/config/web-port.js.map +1 -0
- package/dist/core/claude-transcript.js +226 -0
- package/dist/core/claude-transcript.js.map +1 -0
- package/dist/core/errors.js +17 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/models.js +4 -1
- package/dist/core/models.js.map +1 -1
- package/dist/core/pricing.js +87 -55
- package/dist/core/pricing.js.map +1 -1
- package/dist/core/roles.js +6 -5
- package/dist/core/roles.js.map +1 -1
- package/dist/core/run-skills.js +114 -0
- package/dist/core/run-skills.js.map +1 -0
- package/dist/core/run-usage.js +56 -10
- package/dist/core/run-usage.js.map +1 -1
- package/dist/core/session.js +6 -16
- package/dist/core/session.js.map +1 -1
- package/dist/core/usage-query.js +41 -0
- package/dist/core/usage-query.js.map +1 -0
- package/dist/core/usage-source.js +17 -0
- package/dist/core/usage-source.js.map +1 -0
- package/dist/daemon/build-id.js +30 -0
- package/dist/daemon/build-id.js.map +1 -0
- package/dist/daemon/daemon.js +1257 -700
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/instance-lock.js +48 -0
- package/dist/daemon/instance-lock.js.map +1 -0
- package/dist/daemon/ipc.js +4 -3
- package/dist/daemon/ipc.js.map +1 -1
- package/dist/daemon/web-supervisor.js +251 -0
- package/dist/daemon/web-supervisor.js.map +1 -0
- package/dist/drivers/claude/driver.js +1 -0
- package/dist/drivers/claude/driver.js.map +1 -1
- package/dist/drivers/codex/driver.js +14 -3
- package/dist/drivers/codex/driver.js.map +1 -1
- package/dist/drivers/codex/host-skills.js +57 -0
- package/dist/drivers/codex/host-skills.js.map +1 -0
- package/dist/drivers/opencode/driver.js +6 -2
- package/dist/drivers/opencode/driver.js.map +1 -1
- package/dist/drivers/session-driver.js +7 -1
- package/dist/drivers/session-driver.js.map +1 -1
- package/dist/drivers/session-runtime.js +2 -0
- package/dist/drivers/session-runtime.js.map +1 -1
- package/dist/drivers/terminal.js +15 -0
- package/dist/drivers/terminal.js.map +1 -1
- package/dist/git/diff.js +29 -4
- package/dist/git/diff.js.map +1 -1
- package/dist/open/contract.js.map +1 -1
- package/dist/open/launchers/claude.js +78 -2
- package/dist/open/launchers/claude.js.map +1 -1
- package/dist/open/link-watcher.js +44 -0
- package/dist/open/link-watcher.js.map +1 -0
- package/dist/open/pty.js +330 -5
- package/dist/open/pty.js.map +1 -1
- package/dist/open/runtime.js +15 -12
- package/dist/open/runtime.js.map +1 -1
- package/dist/plugin/agents/general.md +33 -6
- package/dist/plugin/hooks/pane-ticker.ts +102 -0
- package/dist/plugin/hooks/register.tsx +39 -18
- package/dist/plugin/hooks/session-id.sh +1 -1
- package/dist/plugin/mods/agents/pane.ts +285 -156
- package/dist/plugin/mods/agents/types.ts +23 -3
- package/dist/plugin/statusline.sh +57 -32
- package/dist/store/database.js +49 -1
- package/dist/store/database.js.map +1 -1
- package/dist/store/native-links.js +80 -0
- package/dist/store/native-links.js.map +1 -0
- package/dist/store/sessions.js +166 -51
- package/dist/store/sessions.js.map +1 -1
- package/dist/store/usage-ledger.js +153 -0
- package/dist/store/usage-ledger.js.map +1 -0
- package/dist/utils/process.js +2 -16
- package/dist/utils/process.js.map +1 -1
- package/dist/web/brand.js +59 -0
- package/dist/web/brand.js.map +1 -0
- package/dist/web/child.js +67 -0
- package/dist/web/child.js.map +1 -0
- package/dist/web/home-page.js +48 -0
- package/dist/web/home-page.js.map +1 -0
- package/dist/web/review-page.js +12 -5
- package/dist/web/review-page.js.map +1 -1
- package/dist/web/security.js +170 -0
- package/dist/web/security.js.map +1 -0
- package/dist/web/server.js +198 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/setup-icons.js +37 -0
- package/dist/web/setup-icons.js.map +1 -0
- package/dist/web/setup-page.js +1795 -0
- package/dist/web/setup-page.js.map +1 -0
- package/dist/web/setup-routes.js +475 -0
- package/dist/web/setup-routes.js.map +1 -0
- package/dist/web/usage-page.js +609 -0
- package/dist/web/usage-page.js.map +1 -0
- package/dist/web/usage-routes.js +88 -0
- package/dist/web/usage-routes.js.map +1 -0
- package/dist/web/web-token.js +56 -0
- package/dist/web/web-token.js.map +1 -0
- package/package.json +1 -1
- package/dist/plugin/prompts/_partials/commit.md +0 -145
- package/dist/plugin/prompts/_partials/pr-writer.md +0 -186
|
@@ -1,14 +1,53 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import { IpcClient } from "../../daemon/ipc.js";
|
|
3
|
+
import { buildUsageQueryParams } from "../../core/usage-query.js";
|
|
3
4
|
import { getPaths } from "../../config/paths.js";
|
|
5
|
+
import { SESSION_ID_PATTERN } from "../../open/runtime.js";
|
|
4
6
|
import { Database } from "../../store/database.js";
|
|
5
7
|
import { SessionStore, resolveUsageDateRange } from "../../store/sessions.js";
|
|
6
8
|
import { renderSnapshot } from "../usage/snapshot.js";
|
|
7
9
|
import { runDashboard } from "../usage/dashboard.js";
|
|
10
|
+
import { backfillUsage } from "./usage-backfill.js";
|
|
11
|
+
import { parseOptionalWebPort } from "../../web/server.js";
|
|
12
|
+
import { launchWebPage } from "../web-launch.js";
|
|
13
|
+
function parseUsageObservation(value) {
|
|
14
|
+
if (value === undefined)
|
|
15
|
+
return undefined;
|
|
16
|
+
const separator = value.lastIndexOf("=");
|
|
17
|
+
if (separator <= 0 || separator === value.length - 1)
|
|
18
|
+
return undefined;
|
|
19
|
+
const nativeId = value.slice(0, separator);
|
|
20
|
+
const costUsd = Number(value.slice(separator + 1));
|
|
21
|
+
if (!SESSION_ID_PATTERN.test(nativeId) || !Number.isFinite(costUsd) || costUsd < 0)
|
|
22
|
+
return undefined;
|
|
23
|
+
return { nativeId, costUsd };
|
|
24
|
+
}
|
|
25
|
+
function parseTranscriptObservation(value) {
|
|
26
|
+
if (value === undefined)
|
|
27
|
+
return undefined;
|
|
28
|
+
const separator = value.indexOf("=");
|
|
29
|
+
if (separator <= 0 || separator === value.length - 1)
|
|
30
|
+
return undefined;
|
|
31
|
+
const nativeId = value.slice(0, separator);
|
|
32
|
+
const path = value.slice(separator + 1);
|
|
33
|
+
if (!SESSION_ID_PATTERN.test(nativeId))
|
|
34
|
+
return undefined;
|
|
35
|
+
return { nativeId, path };
|
|
36
|
+
}
|
|
8
37
|
export function formatUsageSummary(summary) {
|
|
9
38
|
const cost = `$${summary.costUsd.toFixed(2)}${summary.costComplete ? "" : "?"}`;
|
|
10
39
|
return `Run ${summary.runId}: ${summary.sessionCount} sessions, ${summary.inputTokens} input / ${summary.outputTokens} output / ${summary.cachedTokens} cached tokens, cost ${cost}`;
|
|
11
40
|
}
|
|
41
|
+
function renderUsageSnapshot(result, options) {
|
|
42
|
+
const { plain, by } = options;
|
|
43
|
+
if (by !== "origin")
|
|
44
|
+
return renderSnapshot(result, { plain, by });
|
|
45
|
+
const rows = result.byOrigin.map((bucket) => {
|
|
46
|
+
const cost = `$${bucket.costUsd.toFixed(2)}${bucket.costComplete ? "" : "?"}`;
|
|
47
|
+
return `${bucket.key}: ${bucket.sessionCount} sessions, ${bucket.inputTokens} input / ${bucket.outputTokens} output / ${bucket.cachedTokens} cached tokens, cost ${cost}`;
|
|
48
|
+
});
|
|
49
|
+
return ["Usage by origin", ...rows].join("\n");
|
|
50
|
+
}
|
|
12
51
|
export async function fetchUsageQuery(params) {
|
|
13
52
|
const client = new IpcClient();
|
|
14
53
|
try {
|
|
@@ -39,6 +78,7 @@ export async function fetchUsageQuery(params) {
|
|
|
39
78
|
byModel: [],
|
|
40
79
|
byAgent: [],
|
|
41
80
|
byRun: [],
|
|
81
|
+
byOrigin: [],
|
|
42
82
|
};
|
|
43
83
|
}
|
|
44
84
|
const db = new Database(paths.db, { readOnly: true });
|
|
@@ -51,7 +91,9 @@ export async function fetchUsageQuery(params) {
|
|
|
51
91
|
}
|
|
52
92
|
}
|
|
53
93
|
}
|
|
54
|
-
export function registerUsageCommand(program) {
|
|
94
|
+
export function registerUsageCommand(program, dependencies = {}) {
|
|
95
|
+
const queryUsage = dependencies.fetchUsageQuery ?? fetchUsageQuery;
|
|
96
|
+
const runBackfill = dependencies.backfillUsage ?? backfillUsage;
|
|
55
97
|
program
|
|
56
98
|
.command("usage")
|
|
57
99
|
.description("Show token usage, costs, and analytics across sessions or for a run")
|
|
@@ -66,13 +108,38 @@ export function registerUsageCommand(program) {
|
|
|
66
108
|
.option("-c, --current", "filter by current working directory repository")
|
|
67
109
|
.option("-m, --model <model>", "filter by model name")
|
|
68
110
|
.option("-a, --agent <agent>", "filter by agent harness (e.g. codex, claude)")
|
|
69
|
-
.option("--by <dimension>", "group by dimension: day, repo, model, agent, run")
|
|
111
|
+
.option("--by <dimension>", "group by dimension: day, repo, model, agent, run, origin")
|
|
112
|
+
.option("--observe <nativeId=cost>", "report live orchestrator cost")
|
|
113
|
+
.option("--transcript <nativeId=path>", "report live orchestrator transcript tokens")
|
|
114
|
+
.option("--backfill", "import historical orchestrator usage")
|
|
115
|
+
.option("--web", "open aggregate usage in the browser")
|
|
116
|
+
.option("--port <n>", "port for a new console (default: web.port from config, else 7777)")
|
|
117
|
+
.option("--no-open", "print the usage URL without opening a browser")
|
|
70
118
|
.option("-i, --tui", "open interactive full-screen TUI dashboard")
|
|
71
119
|
.option("-w, --watch", "watch usage in real time with live updates")
|
|
72
120
|
.option("--interval <seconds>", "refresh interval for --watch (default: 2)", "2")
|
|
73
121
|
.option("--plain", "output plain text table without ANSI colors")
|
|
74
122
|
.option("--json", "output usage data as JSON")
|
|
75
123
|
.action(async (runId, opts) => {
|
|
124
|
+
if (opts.backfill) {
|
|
125
|
+
try {
|
|
126
|
+
const summary = await runBackfill();
|
|
127
|
+
if (opts.json)
|
|
128
|
+
console.log(JSON.stringify(summary));
|
|
129
|
+
else
|
|
130
|
+
console.log(`Usage backfill: imported ${summary.imported}, skipped ${summary.skipped}`);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error(`Failed to backfill usage: ${error instanceof Error ? error.message : String(error)}`);
|
|
134
|
+
process.exitCode = 3;
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (opts.web && opts.tui) {
|
|
139
|
+
console.error("Options --web and --tui cannot be used together.");
|
|
140
|
+
process.exitCode = 2;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
76
143
|
const targetRunId = opts.run ?? runId;
|
|
77
144
|
// 1. Single-Run Branch (100% Backwards Compatible with statusline.sh)
|
|
78
145
|
if (targetRunId) {
|
|
@@ -87,7 +154,13 @@ export function registerUsageCommand(program) {
|
|
|
87
154
|
}
|
|
88
155
|
let summary;
|
|
89
156
|
try {
|
|
90
|
-
|
|
157
|
+
const observe = parseUsageObservation(opts.observe);
|
|
158
|
+
const transcript = parseTranscriptObservation(opts.transcript);
|
|
159
|
+
summary = await client.request("usage.get", {
|
|
160
|
+
runId: targetRunId,
|
|
161
|
+
...(observe ? { observe } : {}),
|
|
162
|
+
...(transcript ? { transcript } : {}),
|
|
163
|
+
});
|
|
91
164
|
}
|
|
92
165
|
catch (error) {
|
|
93
166
|
console.error(error instanceof Error ? error.message : String(error));
|
|
@@ -101,45 +174,40 @@ export function registerUsageCommand(program) {
|
|
|
101
174
|
return;
|
|
102
175
|
}
|
|
103
176
|
// 2. Aggregate Analytics Branch
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
else if (opts.today) {
|
|
111
|
-
period = "today";
|
|
112
|
-
}
|
|
113
|
-
else if (opts.days) {
|
|
114
|
-
const d = parseInt(opts.days, 10);
|
|
115
|
-
if (d === 3)
|
|
116
|
-
period = "3d";
|
|
117
|
-
else if (d === 7)
|
|
118
|
-
period = "7d";
|
|
119
|
-
else if (d === 30)
|
|
120
|
-
period = "30d";
|
|
121
|
-
else if (!isNaN(d) && d > 0) {
|
|
122
|
-
const now = new Date();
|
|
123
|
-
const sinceDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() - (d - 1), 0, 0, 0, 0);
|
|
124
|
-
since = sinceDate.toISOString();
|
|
177
|
+
const cwd = process.cwd();
|
|
178
|
+
const queryParams = buildUsageQueryParams(opts, cwd, new Date());
|
|
179
|
+
if (opts.web) {
|
|
180
|
+
let port;
|
|
181
|
+
try {
|
|
182
|
+
port = parseOptionalWebPort(opts.port);
|
|
125
183
|
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
186
|
+
process.exitCode = 1;
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
// The shared server has its own cwd, so the page gets filters already resolved here.
|
|
190
|
+
const query = Object.fromEntries(Object.entries({
|
|
191
|
+
period: queryParams.period,
|
|
192
|
+
repo: queryParams.repository,
|
|
193
|
+
model: queryParams.model,
|
|
194
|
+
agent: queryParams.agent,
|
|
195
|
+
since: queryParams.since,
|
|
196
|
+
until: queryParams.until,
|
|
197
|
+
by: opts.by,
|
|
198
|
+
interval: opts.interval,
|
|
199
|
+
}).filter((entry) => typeof entry[1] === "string" && entry[1] !== ""));
|
|
200
|
+
const code = await (dependencies.launch ?? launchWebPage)({
|
|
201
|
+
path: "/usage",
|
|
202
|
+
query,
|
|
203
|
+
title: "CodeDeck usage",
|
|
204
|
+
port,
|
|
205
|
+
open: opts.open !== false,
|
|
206
|
+
});
|
|
207
|
+
if (code !== 0)
|
|
208
|
+
process.exitCode = code;
|
|
209
|
+
return;
|
|
126
210
|
}
|
|
127
|
-
else if (!since) {
|
|
128
|
-
// Default to today if no temporal flags provided
|
|
129
|
-
period = "today";
|
|
130
|
-
}
|
|
131
|
-
let repository = opts.repo;
|
|
132
|
-
if (opts.current) {
|
|
133
|
-
repository = process.cwd();
|
|
134
|
-
}
|
|
135
|
-
const queryParams = {
|
|
136
|
-
period,
|
|
137
|
-
since,
|
|
138
|
-
until,
|
|
139
|
-
repository,
|
|
140
|
-
model: opts.model,
|
|
141
|
-
agent: opts.agent,
|
|
142
|
-
};
|
|
143
211
|
// Interactive TUI Mode
|
|
144
212
|
if (opts.tui) {
|
|
145
213
|
if (!process.stdout.isTTY || !process.stdin.isTTY) {
|
|
@@ -148,7 +216,7 @@ export function registerUsageCommand(program) {
|
|
|
148
216
|
return;
|
|
149
217
|
}
|
|
150
218
|
const fetcher = {
|
|
151
|
-
fetch: async (p) =>
|
|
219
|
+
fetch: async (p) => queryUsage({ ...queryParams, period: p }),
|
|
152
220
|
};
|
|
153
221
|
await runDashboard(fetcher, { input: process.stdin, output: process.stdout });
|
|
154
222
|
return;
|
|
@@ -157,8 +225,8 @@ export function registerUsageCommand(program) {
|
|
|
157
225
|
if (opts.watch) {
|
|
158
226
|
const intervalSec = Math.max(1, Number(opts.interval) || 2);
|
|
159
227
|
const printLive = async () => {
|
|
160
|
-
const res = await
|
|
161
|
-
const snap =
|
|
228
|
+
const res = await queryUsage(queryParams);
|
|
229
|
+
const snap = renderUsageSnapshot(res, { plain: false, by: opts.by });
|
|
162
230
|
process.stdout.write(`\x1b[H\x1b[2J${snap}\n\n \x1b[2mUpdating every ${intervalSec}s... (Ctrl+C to quit)\x1b[0m\n`);
|
|
163
231
|
};
|
|
164
232
|
await printLive();
|
|
@@ -172,7 +240,7 @@ export function registerUsageCommand(program) {
|
|
|
172
240
|
// Standard Fetch
|
|
173
241
|
let result;
|
|
174
242
|
try {
|
|
175
|
-
result = await
|
|
243
|
+
result = await queryUsage(queryParams);
|
|
176
244
|
}
|
|
177
245
|
catch (error) {
|
|
178
246
|
console.error(`Failed to fetch usage: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -185,7 +253,7 @@ export function registerUsageCommand(program) {
|
|
|
185
253
|
}
|
|
186
254
|
else {
|
|
187
255
|
const isPlain = opts.plain ?? !process.stdout.isTTY;
|
|
188
|
-
console.log(
|
|
256
|
+
console.log(renderUsageSnapshot(result, { plain: isPlain, by: opts.by }));
|
|
189
257
|
}
|
|
190
258
|
});
|
|
191
259
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/cli/commands/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/cli/commands/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { IpcClient } from "../../daemon/ipc.js";
|
|
2
2
|
import { getCliInvocation } from "../cli-name.js";
|
|
3
3
|
import { exitCodeForOutcome } from "../../core/errors.js";
|
|
4
|
+
import { shortSessionId } from "../../core/session.js";
|
|
4
5
|
import { waitForSession } from "../wait.js";
|
|
5
6
|
export function formatWaitResult(session) {
|
|
6
7
|
if (session.status === "failed" || session.status === "orphaned" || session.status === "interrupted") {
|
|
7
8
|
const failure = session.failure;
|
|
8
9
|
const tag = failure ? ` [${failure.blame}${failure.retryable ? ", retryable" : ""}]` : "";
|
|
9
10
|
const detail = failure?.detail ? `: ${String(failure.detail).slice(0, 200)}` : "";
|
|
10
|
-
return `✗ Session ${session.id} ${session.status}${tag}${detail}`;
|
|
11
|
+
return `✗ Session ${shortSessionId(session.id)} ${session.status}${tag}${detail}`;
|
|
11
12
|
}
|
|
12
|
-
return `✓ Session ${session.id} ${session.status}`;
|
|
13
|
+
return `✓ Session ${shortSessionId(session.id)} ${session.status}`;
|
|
13
14
|
}
|
|
14
15
|
export function registerWaitCommand(program) {
|
|
15
16
|
program
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
|
-
import { readFileSync } from "node:fs";
|
|
3
|
+
import { readFileSync, realpathSync } from "node:fs";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { registerRunCommand } from "./commands/run.js";
|
|
@@ -17,10 +17,10 @@ import { registerDiffCommand } from "./commands/diff.js";
|
|
|
17
17
|
import { registerDoctorCommand } from "./commands/doctor.js";
|
|
18
18
|
import { registerModelsCommand } from "./commands/models.js";
|
|
19
19
|
import { registerOpenCommand } from "./commands/open.js";
|
|
20
|
-
import { registerProfileCommand } from "./commands/profile.js";
|
|
21
20
|
import { registerSetupCommand } from "./commands/setup.js";
|
|
22
21
|
import { registerUsageCommand } from "./commands/usage.js";
|
|
23
22
|
import { registerReviewCommand } from "./commands/review.js";
|
|
23
|
+
import { registerUiCommand } from "./commands/ui.js";
|
|
24
24
|
import { getCliInvocation, getCliName } from "./cli-name.js";
|
|
25
25
|
function getVersion() {
|
|
26
26
|
try {
|
|
@@ -32,19 +32,20 @@ function getVersion() {
|
|
|
32
32
|
return "0.1.0";
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
35
|
+
export function createCliProgram() {
|
|
36
|
+
const program = new Command();
|
|
37
|
+
// CODEDECK_CLI_NAME renames the tool (for example a `codedeck-dev`
|
|
38
|
+
// alias), so the help below shows that name instead of `npx codedeck`.
|
|
39
|
+
const cliName = getCliName();
|
|
40
|
+
const cli = getCliInvocation();
|
|
41
|
+
program
|
|
42
|
+
.name(cliName)
|
|
43
|
+
.description("CodeDeck — local runtime for coding agents\nManage Claude, Codex, OpenCode and OMP through a single session interface")
|
|
44
|
+
.version(getVersion())
|
|
45
|
+
.helpOption("-h, --help", "display help for command")
|
|
46
|
+
.showHelpAfterError("(add --help for details)")
|
|
47
|
+
.showSuggestionAfterError(true)
|
|
48
|
+
.addHelpText("after", `
|
|
48
49
|
Examples:
|
|
49
50
|
$ ${cli} run "implement authentication" --agent claude --worktree
|
|
50
51
|
$ ${cli} run "fix the tests" --agent codex --bg
|
|
@@ -73,28 +74,43 @@ Recommended flow:
|
|
|
73
74
|
Run '${cli} <command> --help' for command-specific options.
|
|
74
75
|
Docs: https://github.com/4ndreello/run-agent
|
|
75
76
|
`);
|
|
76
|
-
registerRunCommand(program);
|
|
77
|
-
registerPsCommand(program);
|
|
78
|
-
registerClaimsCommand(program);
|
|
79
|
-
registerShowCommand(program);
|
|
80
|
-
registerRenameCommand(program);
|
|
81
|
-
registerLogsCommand(program);
|
|
82
|
-
registerWaitCommand(program);
|
|
83
|
-
registerSendCommand(program);
|
|
84
|
-
registerStopCommand(program);
|
|
85
|
-
registerDoneCommand(program);
|
|
86
|
-
registerDiffCommand(program);
|
|
87
|
-
registerDoctorCommand(program);
|
|
88
|
-
registerModelsCommand(program);
|
|
89
|
-
registerOpenCommand(program);
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
// Make `codedeck help` behave like `codedeck --help
|
|
95
|
-
program.command("help", { hidden: true }).action(() => program.outputHelp());
|
|
96
|
-
program
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
77
|
+
registerRunCommand(program);
|
|
78
|
+
registerPsCommand(program);
|
|
79
|
+
registerClaimsCommand(program);
|
|
80
|
+
registerShowCommand(program);
|
|
81
|
+
registerRenameCommand(program);
|
|
82
|
+
registerLogsCommand(program);
|
|
83
|
+
registerWaitCommand(program);
|
|
84
|
+
registerSendCommand(program);
|
|
85
|
+
registerStopCommand(program);
|
|
86
|
+
registerDoneCommand(program);
|
|
87
|
+
registerDiffCommand(program);
|
|
88
|
+
registerDoctorCommand(program);
|
|
89
|
+
registerModelsCommand(program);
|
|
90
|
+
registerOpenCommand(program);
|
|
91
|
+
registerSetupCommand(program);
|
|
92
|
+
registerUsageCommand(program);
|
|
93
|
+
registerReviewCommand(program);
|
|
94
|
+
registerUiCommand(program);
|
|
95
|
+
// Make `codedeck help` behave like `codedeck --help`.
|
|
96
|
+
program.command("help", { hidden: true }).action(() => program.outputHelp());
|
|
97
|
+
return program;
|
|
98
|
+
}
|
|
99
|
+
function isCliEntryPoint() {
|
|
100
|
+
const entryPath = process.argv[1];
|
|
101
|
+
if (!entryPath)
|
|
102
|
+
return false;
|
|
103
|
+
try {
|
|
104
|
+
return realpathSync(entryPath) === realpathSync(fileURLToPath(import.meta.url));
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return path.resolve(entryPath) === path.resolve(fileURLToPath(import.meta.url));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (isCliEntryPoint()) {
|
|
111
|
+
createCliProgram().parseAsync(process.argv).catch((err) => {
|
|
112
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
113
|
+
process.exit(1);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
100
116
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import { isIP } from "node:net";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { IpcClient } from "../daemon/ipc.js";
|
|
5
|
+
import { computeBuildId, distRootFor } from "../daemon/build-id.js";
|
|
6
|
+
import { loadConfig } from "../config/config.js";
|
|
7
|
+
import { invalidWebHostMessage, resolveWebHost } from "../config/web-host.js";
|
|
8
|
+
import { invalidWebPortMessage, resolveWebPort } from "../config/web-port.js";
|
|
9
|
+
import { openBrowser, startWebServer } from "../web/server.js";
|
|
10
|
+
import { resolveWebToken } from "../web/web-token.js";
|
|
11
|
+
import { createUiRoutes } from "./commands/ui.js";
|
|
12
|
+
/**
|
|
13
|
+
* Open a console page served by the daemon's web child and return the exit code.
|
|
14
|
+
* When the daemon cannot host it, serve the pages from this process instead.
|
|
15
|
+
*/
|
|
16
|
+
export async function launchWebPage(options, deps = {}) {
|
|
17
|
+
const client = deps.client ?? new IpcClient();
|
|
18
|
+
const log = deps.log ?? ((message) => console.log(message));
|
|
19
|
+
const error = deps.error ?? ((message) => console.error(message));
|
|
20
|
+
const config = (deps.loadConfig ?? loadConfig)();
|
|
21
|
+
const { port: preferredPort, invalid } = resolveWebPort(config);
|
|
22
|
+
const { host: configuredHost, invalid: invalidHost } = resolveWebHost(config);
|
|
23
|
+
if (invalid !== undefined)
|
|
24
|
+
error(invalidWebPortMessage(invalid));
|
|
25
|
+
if (invalidHost !== undefined)
|
|
26
|
+
error(invalidWebHostMessage(invalidHost));
|
|
27
|
+
const host = options.host ?? configuredHost;
|
|
28
|
+
const askedPort = options.port ?? preferredPort;
|
|
29
|
+
try {
|
|
30
|
+
await client.ensureDaemonStarted();
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
error("CodeDeck daemon is unavailable; serving from this process.");
|
|
34
|
+
return serveInProcess(options, host, askedPort, deps, error);
|
|
35
|
+
}
|
|
36
|
+
const params = {
|
|
37
|
+
...(options.host === undefined ? { preferredHost: configuredHost } : { host: options.host }),
|
|
38
|
+
...(options.port === undefined ? { preferredPort } : { port: options.port }),
|
|
39
|
+
build: deps.build ?? computeBuildId(distRootFor(import.meta.url)),
|
|
40
|
+
entry: deps.entry ?? fileURLToPath(new URL("../web/child.js", import.meta.url)),
|
|
41
|
+
};
|
|
42
|
+
let web;
|
|
43
|
+
try {
|
|
44
|
+
web = await client.request("web.ensure", params);
|
|
45
|
+
}
|
|
46
|
+
catch (failure) {
|
|
47
|
+
const { code, message, details } = failure;
|
|
48
|
+
if (code === "WEB_LISTEN_FAILED") {
|
|
49
|
+
error(listenFailureMessage(host, details?.port ?? askedPort, message));
|
|
50
|
+
return 1;
|
|
51
|
+
}
|
|
52
|
+
error(`CodeDeck daemon cannot host the web console (${code ?? "UNKNOWN"}); serving from this process.`);
|
|
53
|
+
return serveInProcess(options, host, askedPort, deps, error);
|
|
54
|
+
}
|
|
55
|
+
const activeHost = web.host ?? host;
|
|
56
|
+
warnForPlainHttp(activeHost, web.port, error);
|
|
57
|
+
if (web.port !== askedPort)
|
|
58
|
+
log(`CodeDeck web is running on port ${web.port} instead of ${askedPort}`);
|
|
59
|
+
const url = new URL(options.path, web.baseUrl);
|
|
60
|
+
for (const [key, value] of Object.entries(options.query ?? {}))
|
|
61
|
+
url.searchParams.set(key, value);
|
|
62
|
+
url.searchParams.set("t", web.token);
|
|
63
|
+
const pageUrl = url.toString();
|
|
64
|
+
if (options.open && !(await (deps.openBrowser ?? openBrowser)(pageUrl))) {
|
|
65
|
+
log(`Could not open a browser, visit ${pageUrl} manually.`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
log(`${options.title} on ${pageUrl}`);
|
|
69
|
+
}
|
|
70
|
+
printAlternateLinks(activeHost, web.port, options, web.token, deps.networkInterfaces ?? os.networkInterfaces, log);
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
async function serveInProcess(options, host, port, deps, error) {
|
|
74
|
+
const query = new URLSearchParams(options.query ?? {}).toString();
|
|
75
|
+
const log = deps.log ?? ((message) => console.log(message));
|
|
76
|
+
try {
|
|
77
|
+
const listening = await (deps.startServer ?? startWebServer)({
|
|
78
|
+
routes: createUiRoutes(),
|
|
79
|
+
host,
|
|
80
|
+
port,
|
|
81
|
+
fallbackToEphemeral: options.port === undefined,
|
|
82
|
+
// The same token as the daemon's web child, so neither server's cookie locks out the other.
|
|
83
|
+
token: (deps.resolveToken ?? resolveWebToken)(),
|
|
84
|
+
initialPath: query ? `${options.path}?${query}` : options.path,
|
|
85
|
+
title: options.title,
|
|
86
|
+
open: options.open,
|
|
87
|
+
openBrowser: deps.openBrowser,
|
|
88
|
+
log,
|
|
89
|
+
});
|
|
90
|
+
warnForPlainHttp(host, listening.port, error);
|
|
91
|
+
printAlternateLinks(host, listening.port, options, listening.security.token, deps.networkInterfaces ?? os.networkInterfaces, log);
|
|
92
|
+
}
|
|
93
|
+
catch (failure) {
|
|
94
|
+
error(listenFailureMessage(host, port, failure instanceof Error ? failure.message : String(failure)));
|
|
95
|
+
return 1;
|
|
96
|
+
}
|
|
97
|
+
// The server keeps this process alive until SIGINT or SIGTERM.
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
function listenFailureMessage(host, port, message) {
|
|
101
|
+
const displayedHost = isIP(host) === 6 ? `[${host}]` : host;
|
|
102
|
+
return `Failed to listen on ${displayedHost}:${port}: ${message}`;
|
|
103
|
+
}
|
|
104
|
+
function warnForPlainHttp(host, port, error) {
|
|
105
|
+
const ipVersion = isIP(host);
|
|
106
|
+
const loopback = ipVersion === 4
|
|
107
|
+
? host.startsWith("127.")
|
|
108
|
+
: ipVersion === 6 && new URL(`http://[${host}]/`).hostname.toLowerCase() === "[::1]";
|
|
109
|
+
if (loopback)
|
|
110
|
+
return;
|
|
111
|
+
error(`Warning: the console listens on ${host} over plain HTTP. Anyone who can reach port ${port} with the link gets full access; use it only on a trusted network such as Tailscale.`);
|
|
112
|
+
}
|
|
113
|
+
function printAlternateLinks(host, port, options, token, networkInterfaces, log) {
|
|
114
|
+
if (host !== "0.0.0.0" && host !== "::")
|
|
115
|
+
return;
|
|
116
|
+
for (const info of Object.values(networkInterfaces()).flatMap((addresses) => addresses ?? [])) {
|
|
117
|
+
if (info.family !== "IPv4" || info.internal)
|
|
118
|
+
continue;
|
|
119
|
+
const url = new URL(options.path, `http://${info.address}:${port}`);
|
|
120
|
+
for (const [key, value] of Object.entries(options.query ?? {}))
|
|
121
|
+
url.searchParams.set(key, value);
|
|
122
|
+
url.searchParams.set("t", token);
|
|
123
|
+
log(`Also on ${url.toString()}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=web-launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-launch.js","sourceRoot":"","sources":["../../src/cli/web-launch.ts"],"names":[],"mappings":"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"}
|