codedeck 0.7.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 +49 -34
- 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 +8 -9
- 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.js +65 -42
- 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 +87 -0
- package/dist/core/claude-transcript.js.map +1 -1
- 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 +73 -50
- 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 +4 -1
- 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/daemon/build-id.js +30 -0
- package/dist/daemon/build-id.js.map +1 -0
- package/dist/daemon/daemon.js +1116 -767
- 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/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-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/pty.js +330 -5
- package/dist/open/pty.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 +33 -8
- package/dist/plugin/mods/agents/pane.ts +259 -136
- package/dist/plugin/mods/agents/types.ts +19 -3
- package/dist/plugin/statusline.sh +22 -34
- package/dist/store/database.js +5 -1
- package/dist/store/database.js.map +1 -1
- package/dist/store/sessions.js +55 -12
- package/dist/store/sessions.js.map +1 -1
- 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
package/dist/core/pricing.js
CHANGED
|
@@ -1,50 +1,57 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Static prices are USD per 1,000,000 tokens. Keep this table versioned with
|
|
3
|
-
* the code.
|
|
4
|
-
*
|
|
3
|
+
* the code. All entries use OpenRouter list prices fetched 2026-09-25 unless
|
|
4
|
+
* noted otherwise. Models absent here deliberately have no fallback price and
|
|
5
|
+
* therefore produce null from computeSessionCost().
|
|
5
6
|
*/
|
|
6
7
|
export const MODEL_PRICES = {
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
"gpt-5": { input: 1, output:
|
|
10
|
-
"gpt-5.5": { input:
|
|
11
|
-
"gpt-5.6-luna": { input:
|
|
8
|
+
// OpenRouter list prices, fetched 2026-09-25.
|
|
9
|
+
"gpt-6-luna": { input: 0.1, output: 0.5, cached: 0.01 },
|
|
10
|
+
"gpt-5": { input: 1.25, output: 10, cached: 0.125 },
|
|
11
|
+
"gpt-5.5": { input: 5, output: 30, cached: 0.5 },
|
|
12
|
+
"gpt-5.6-luna": { input: 0.2, output: 1.2, cached: 0.02 },
|
|
13
|
+
// Still a placeholder.
|
|
12
14
|
"gpt-5.7": { input: 1, output: 5 },
|
|
15
|
+
// This id is not listed on OpenRouter; keep the existing price.
|
|
13
16
|
"meta/muse-spark-1.3-contributor": { input: 0.1, output: 0.2, cached: 0.002 },
|
|
14
|
-
"openrouter/z-ai/glm-5.3-flash": { input: 0.
|
|
15
|
-
"openai-codex/gpt-5.6-luna": { input:
|
|
16
|
-
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
"claude-opus-4-8": { input:
|
|
20
|
-
"claude-opus-5": { input:
|
|
17
|
+
"openrouter/z-ai/glm-5.3-flash": { input: 0.045, output: 0.6, cached: 0.0285 },
|
|
18
|
+
"openai-codex/gpt-5.6-luna": { input: 0.2, output: 1.2, cached: 0.02 },
|
|
19
|
+
"deepseek-v4-flash-0731": { input: 0.03, output: 0.32, cached: 0.016 },
|
|
20
|
+
// Free tier by name; not listed on OpenRouter.
|
|
21
|
+
"muse-spark-1.3-contributor-free": { input: 0, output: 0, cached: 0 },
|
|
22
|
+
"claude-opus-4-8": { input: 5, output: 25, cached: 0.5 },
|
|
23
|
+
"claude-opus-5": { input: 5, output: 25, cached: 0.5 },
|
|
24
|
+
"claude-opus-5-5": { input: 4, output: 20, cached: 0.2 },
|
|
25
|
+
"claude-fable-5": { input: 10, output: 50, cached: 1 },
|
|
26
|
+
"claude-fable-5-1": { input: 10, output: 50, cached: 0.25 },
|
|
21
27
|
"claude-sonnet-4-6": { input: 3, output: 15, cached: 0.3 },
|
|
22
|
-
"claude-sonnet-5": { input:
|
|
23
|
-
"claude-haiku-4-5": { input:
|
|
28
|
+
"claude-sonnet-5": { input: 2, output: 10, cached: 0.2 },
|
|
29
|
+
"claude-haiku-4-5": { input: 1, output: 5, cached: 0.1 },
|
|
24
30
|
// Alibaba Qwen models.
|
|
25
|
-
"qwen3.8-max": { input: 2, output: 6, cached: 0.
|
|
26
|
-
"qwen3.8-flash": { input: 0.
|
|
31
|
+
"qwen3.8-max": { input: 2, output: 6, cached: 0.25 },
|
|
32
|
+
"qwen3.8-flash": { input: 0.15, output: 0.47, cached: 0.016 },
|
|
33
|
+
// qwen-max and qwen-turbo are not listed on OpenRouter; prices kept as before.
|
|
27
34
|
"qwen-max": { input: 2, output: 6, cached: 0.2 },
|
|
28
|
-
"qwen-plus": { input: 0.
|
|
35
|
+
"qwen-plus": { input: 0.26, output: 0.78, cached: 0.052 },
|
|
29
36
|
"qwen-turbo": { input: 0.05, output: 0.2, cached: 0.005 },
|
|
30
37
|
// Google Antigravity (Gemini) models.
|
|
31
|
-
"gemini-3.8-flash": { input: 0.
|
|
32
|
-
"gemini-3.8-flash-high": { input: 0.
|
|
33
|
-
"gemini-3.8-flash-medium": { input: 0.
|
|
34
|
-
"gemini-3.8-flash-low": { input: 0.
|
|
35
|
-
"gemini-3.7-flash": { input: 0.
|
|
36
|
-
"gemini-3.7-flash-high": { input: 0.
|
|
37
|
-
"gemini-3.7-flash-medium": { input: 0.
|
|
38
|
-
"gemini-3.7-flash-low": { input: 0.
|
|
39
|
-
"gemini-3.6-flash": { input: 0.
|
|
40
|
-
"gemini-3.6-flash-high": { input: 0.
|
|
41
|
-
"gemini-3.6-flash-medium": { input: 0.
|
|
42
|
-
"gemini-3.6-flash-low": { input: 0.
|
|
43
|
-
"gemini-3.1-pro": { input:
|
|
44
|
-
"gemini-3.1-pro-high": { input:
|
|
45
|
-
"gemini-3.1-pro-low": { input:
|
|
46
|
-
"gemini-2.5-flash": { input: 0.
|
|
47
|
-
"gemini-2.5-pro": { input: 1.25, output:
|
|
38
|
+
"gemini-3.8-flash": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
39
|
+
"gemini-3.8-flash-high": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
40
|
+
"gemini-3.8-flash-medium": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
41
|
+
"gemini-3.8-flash-low": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
42
|
+
"gemini-3.7-flash": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
43
|
+
"gemini-3.7-flash-high": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
44
|
+
"gemini-3.7-flash-medium": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
45
|
+
"gemini-3.7-flash-low": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
46
|
+
"gemini-3.6-flash": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
47
|
+
"gemini-3.6-flash-high": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
48
|
+
"gemini-3.6-flash-medium": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
49
|
+
"gemini-3.6-flash-low": { input: 0.75, output: 3.75, cached: 0.075 },
|
|
50
|
+
"gemini-3.1-pro": { input: 2, output: 12, cached: 0.2 },
|
|
51
|
+
"gemini-3.1-pro-high": { input: 2, output: 12, cached: 0.2 },
|
|
52
|
+
"gemini-3.1-pro-low": { input: 2, output: 12, cached: 0.2 },
|
|
53
|
+
"gemini-2.5-flash": { input: 0.3, output: 2.5, cached: 0.03 },
|
|
54
|
+
"gemini-2.5-pro": { input: 1.25, output: 10, cached: 0.125 },
|
|
48
55
|
};
|
|
49
56
|
function isFiniteNumber(value) {
|
|
50
57
|
return typeof value === "number" && Number.isFinite(value);
|
|
@@ -70,34 +77,44 @@ export function resolveModelPrice(model) {
|
|
|
70
77
|
const trimmed = model.trim();
|
|
71
78
|
if (!trimmed)
|
|
72
79
|
return undefined;
|
|
73
|
-
// 1. Direct match with original string
|
|
74
|
-
if (MODEL_PRICES[trimmed])
|
|
75
|
-
return MODEL_PRICES[trimmed];
|
|
76
|
-
// 2. Strip trailing display labels (e.g. "model-id Display Name")
|
|
77
80
|
const idOnly = trimmed.split(/\s+/)[0] ?? trimmed;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// 3. Strip leading provider prefix (e.g. "opencode/...", "alibaba-token-plan/...", "openrouter/...")
|
|
81
|
+
const candidates = [trimmed, idOnly];
|
|
82
|
+
// Strip leading provider prefixes such as "opencode/..." and "openrouter/...".
|
|
81
83
|
const slashIdx = idOnly.indexOf("/");
|
|
82
84
|
if (slashIdx !== -1) {
|
|
83
85
|
const afterFirstSlash = idOnly.slice(slashIdx + 1);
|
|
84
|
-
|
|
85
|
-
return MODEL_PRICES[afterFirstSlash];
|
|
86
|
-
// If there's another slash (e.g. openrouter/meta/model-name), test last component
|
|
86
|
+
candidates.push(afterFirstSlash);
|
|
87
87
|
const lastSlashIdx = idOnly.lastIndexOf("/");
|
|
88
88
|
if (lastSlashIdx !== slashIdx) {
|
|
89
|
-
|
|
90
|
-
if (MODEL_PRICES[lastComponent])
|
|
91
|
-
return MODEL_PRICES[lastComponent];
|
|
89
|
+
candidates.push(idOnly.slice(lastSlashIdx + 1));
|
|
92
90
|
}
|
|
93
91
|
}
|
|
94
|
-
|
|
92
|
+
for (const candidate of candidates) {
|
|
93
|
+
const price = resolvePriceCandidate(candidate);
|
|
94
|
+
if (price)
|
|
95
|
+
return price;
|
|
96
|
+
}
|
|
97
|
+
// Case-insensitive fallback.
|
|
95
98
|
const lower = idOnly.toLowerCase();
|
|
96
99
|
if (lower !== idOnly) {
|
|
97
100
|
return resolveModelPrice(lower);
|
|
98
101
|
}
|
|
99
102
|
return undefined;
|
|
100
103
|
}
|
|
104
|
+
function resolvePriceCandidate(candidate) {
|
|
105
|
+
const pending = [candidate];
|
|
106
|
+
for (const modelId of pending) {
|
|
107
|
+
const price = MODEL_PRICES[modelId];
|
|
108
|
+
if (price)
|
|
109
|
+
return price;
|
|
110
|
+
const withoutDate = modelId.replace(/-\d{8}$/, "");
|
|
111
|
+
if (withoutDate !== modelId)
|
|
112
|
+
pending.push(withoutDate);
|
|
113
|
+
const withoutContext = modelId.replace(/\[[^\]]+\]$/, "");
|
|
114
|
+
if (withoutContext !== modelId)
|
|
115
|
+
pending.push(withoutContext);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
101
118
|
/**
|
|
102
119
|
* Returns a reported cost when one exists, otherwise calculates a static-table
|
|
103
120
|
* estimate. Cached tokens use the input price unless the model declares its
|
|
@@ -134,4 +151,10 @@ export function computeSessionCost({ model, usage, reportedCost, cachedInInput =
|
|
|
134
151
|
export function cachedInInputFor(agent) {
|
|
135
152
|
return agent === "codex";
|
|
136
153
|
}
|
|
154
|
+
export function totalTokensFor(agent, usage) {
|
|
155
|
+
const inputTokens = usage?.inputTokens ?? 0;
|
|
156
|
+
const outputTokens = usage?.outputTokens ?? 0;
|
|
157
|
+
const cachedTokens = usage?.cachedTokens ?? 0;
|
|
158
|
+
return inputTokens + outputTokens + (cachedInInputFor(agent) ? 0 : cachedTokens);
|
|
159
|
+
}
|
|
137
160
|
//# sourceMappingURL=pricing.js.map
|
package/dist/core/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/core/pricing.ts"],"names":[],"mappings":"AASA
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/core/pricing.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAyC;IAChE,8CAA8C;IAC9C,YAAY,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACvD,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;IACnD,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IAChD,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACzD,uBAAuB;IACvB,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IAClC,gEAAgE;IAChE,iCAAiC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;IAC7E,+BAA+B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;IAC9E,2BAA2B,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IACtE,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACtE,+CAA+C;IAC/C,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IAErE,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IACxD,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IACtD,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IACxD,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;IACtD,kBAAkB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAC3D,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IAC1D,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IACxD,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;IAExD,uBAAuB;IACvB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;IACpD,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAC7D,+EAA+E;IAC/E,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;IAChD,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACzD,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE;IAEzD,sCAAsC;IACtC,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAChE,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACrE,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACvE,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACpE,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAChE,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACrE,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACvE,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACpE,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAChE,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACrE,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACvE,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACpE,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IACvD,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5D,oBAAoB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IAC3D,kBAAkB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAC7D,gBAAgB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;CAC7D,CAAC;AAeF,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAyB;IAClD,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,OAAO,CACL,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;QAC3B,KAAK,CAAC,KAAK,IAAI,CAAC;QAChB,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5B,KAAK,CAAC,MAAM,IAAI,CAAC;QACjB,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CACpF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAgC;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAClD,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAErC,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACnD,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEjC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IAED,6BAA6B;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5B,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,WAAW,KAAK,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,cAAc,KAAK,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,EACL,KAAK,EACL,YAAY,EACZ,aAAa,GAAG,KAAK,GACG;IACxB,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;IAC9C,IACE,aAAa;QACb,cAAc,CAAC,WAAW,CAAC;QAC3B,cAAc,CAAC,YAAY,CAAC;QAC5B,YAAY,GAAG,WAAW,EAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,cAAc,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,qEAAqE;IACrE,IAAI,cAAc,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC;IAE3E,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,IACE,CAAC,iBAAiB,CAAC,WAAW,CAAC;QAC/B,CAAC,iBAAiB,CAAC,YAAY,CAAC;QAChC,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;IAChD,OAAO,CACL,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,KAAK;QACxE,YAAY,GAAG,KAAK,CAAC,MAAM;QAC3B,YAAY,GAAG,WAAW,CAC3B,GAAG,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,OAAO,KAAK,KAAK,OAAO,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAgC,EAChC,KAAwB;IAExB,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;IAC9C,OAAO,WAAW,GAAG,YAAY,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;AACnF,CAAC"}
|
package/dist/core/roles.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { composeRunSection } from "./run-skills.js";
|
|
4
5
|
/**
|
|
5
6
|
* Resolve the bundled plugin from this module, not from the caller's cwd.
|
|
6
7
|
* Source files live below src/core; built files live below dist/core, and the
|
|
@@ -75,12 +76,12 @@ export function readCore(pluginDir) {
|
|
|
75
76
|
return fs.readFileSync(coreFile, "utf8");
|
|
76
77
|
}
|
|
77
78
|
/**
|
|
78
|
-
* The run-path composer: core first, then the role body,
|
|
79
|
-
* Core-first is deliberate: the inviolables take precedence
|
|
80
|
-
* and the shared prefix aids cache reuse across roles.
|
|
79
|
+
* The run-path composer: core first, then the role body, run instructions,
|
|
80
|
+
* and the task. Core-first is deliberate: the inviolables take precedence
|
|
81
|
+
* over role detail and the shared prefix aids cache reuse across roles.
|
|
81
82
|
*/
|
|
82
83
|
export function composeRunPrompt(pluginDir, role, prompt) {
|
|
83
|
-
return `${readCore(pluginDir).trimEnd()}\n\n---\n\n${roleBody(pluginDir, role)}\n\n---\n\n${prompt}`;
|
|
84
|
+
return `${readCore(pluginDir).trimEnd()}\n\n---\n\n${roleBody(pluginDir, role)}\n\n---\n\n${composeRunSection(pluginDir)}\n\n---\n\n${prompt}`;
|
|
84
85
|
}
|
|
85
86
|
/**
|
|
86
87
|
* Turns whatever `--role` carried into the prompt a worker receives.
|
|
@@ -92,7 +93,7 @@ export function composeRunPrompt(pluginDir, role, prompt) {
|
|
|
92
93
|
*/
|
|
93
94
|
export function resolveRolePrompt(pluginDir, roleInput, prompt) {
|
|
94
95
|
if (roleInput === undefined)
|
|
95
|
-
return prompt
|
|
96
|
+
return `${composeRunSection(pluginDir)}\n\n---\n\n${prompt}`;
|
|
96
97
|
const role = parseRole(roleInput);
|
|
97
98
|
if (!role) {
|
|
98
99
|
throw new Error(`Invalid role "${roleInput}". Available roles: ${ROLES.join(", ")}`);
|
package/dist/core/roles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/core/roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/core/roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const FRONTMATTER = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;
|
|
4
|
+
function parseScalar(value) {
|
|
5
|
+
const trimmed = value.trim();
|
|
6
|
+
if (!trimmed)
|
|
7
|
+
return "";
|
|
8
|
+
if (trimmed.startsWith("'")) {
|
|
9
|
+
const quoted = /^('(?:''|[^'])*')(?:\s+#.*)?$/.exec(trimmed)?.[1];
|
|
10
|
+
if (!quoted)
|
|
11
|
+
return undefined;
|
|
12
|
+
return quoted.slice(1, -1).replace(/''/g, "'");
|
|
13
|
+
}
|
|
14
|
+
if (trimmed.startsWith('"')) {
|
|
15
|
+
const quoted = /^("(?:\\.|[^"\\])*")(?:\s+#.*)?$/.exec(trimmed)?.[1];
|
|
16
|
+
if (!quoted)
|
|
17
|
+
return undefined;
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(quoted);
|
|
20
|
+
return typeof parsed === "string" ? parsed : undefined;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const commentStart = trimmed.search(/\s#/);
|
|
27
|
+
return (commentStart === -1 ? trimmed : trimmed.slice(0, commentStart)).trimEnd();
|
|
28
|
+
}
|
|
29
|
+
function parseSkillFrontmatter(source) {
|
|
30
|
+
const match = FRONTMATTER.exec(source);
|
|
31
|
+
if (!match)
|
|
32
|
+
return undefined;
|
|
33
|
+
let name;
|
|
34
|
+
let description;
|
|
35
|
+
const lines = match[1].split(/\r?\n/);
|
|
36
|
+
let index = 0;
|
|
37
|
+
while (index < lines.length) {
|
|
38
|
+
const line = lines[index];
|
|
39
|
+
const field = /^(name|description):(.*)$/.exec(line);
|
|
40
|
+
if (!field) {
|
|
41
|
+
index++;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const rawValue = field[2] ?? "";
|
|
45
|
+
if (field[1] === "description") {
|
|
46
|
+
const block = /^([>|])[+-]?$/.exec(rawValue.trim());
|
|
47
|
+
if (block) {
|
|
48
|
+
const content = [];
|
|
49
|
+
let next = index + 1;
|
|
50
|
+
while (next < lines.length && (lines[next] === "" || /^[ \t]/.test(lines[next]))) {
|
|
51
|
+
content.push(lines[next].replace(/^[ \t]+/, ""));
|
|
52
|
+
next++;
|
|
53
|
+
}
|
|
54
|
+
const joined = block[1] === ">" ? content.join(" ") : content.join("\n");
|
|
55
|
+
description = joined.replace(/\s+/g, " ").trim();
|
|
56
|
+
index = next;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const value = parseScalar(rawValue);
|
|
61
|
+
if (field[1] === "name")
|
|
62
|
+
name = value;
|
|
63
|
+
else
|
|
64
|
+
description = value;
|
|
65
|
+
index++;
|
|
66
|
+
}
|
|
67
|
+
if (!name)
|
|
68
|
+
return undefined;
|
|
69
|
+
return { name, description: description ?? "" };
|
|
70
|
+
}
|
|
71
|
+
export function readRunSkills(pluginDir) {
|
|
72
|
+
const skillsDir = path.join(pluginDir, "skills");
|
|
73
|
+
let entries;
|
|
74
|
+
try {
|
|
75
|
+
entries = fs.readdirSync(skillsDir);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
const skills = [];
|
|
81
|
+
for (const entry of entries) {
|
|
82
|
+
const skillPath = path.resolve(skillsDir, entry, "SKILL.md");
|
|
83
|
+
try {
|
|
84
|
+
if (!fs.statSync(skillPath).isFile())
|
|
85
|
+
continue;
|
|
86
|
+
const parsed = parseSkillFrontmatter(fs.readFileSync(skillPath, "utf8"));
|
|
87
|
+
if (!parsed)
|
|
88
|
+
continue;
|
|
89
|
+
skills.push({ ...parsed, path: skillPath });
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// One malformed or unreadable skill must not prevent a run prompt.
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return skills.sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0);
|
|
96
|
+
}
|
|
97
|
+
export function composeRunSection(pluginDir) {
|
|
98
|
+
const lines = [
|
|
99
|
+
"## Run instructions",
|
|
100
|
+
"This worker runs non-interactively in the background.",
|
|
101
|
+
"Nobody answers approval, direction, or confirmation questions during this run.",
|
|
102
|
+
"When a skill or habit says to ask before implementing, make the reasonable call, record the assumption in the final report, and deliver.",
|
|
103
|
+
"Report a real blocker, such as a missing credential, a change outside the owned files, or a stop condition in the briefing, then stop. Follow the briefing's stop conditions.",
|
|
104
|
+
];
|
|
105
|
+
const skills = readRunSkills(pluginDir);
|
|
106
|
+
if (skills.length === 0)
|
|
107
|
+
return lines.join("\n");
|
|
108
|
+
lines.push("", "## CodeDeck skills", "When the prompt asks for a skill by one of these names, read its `SKILL.md` and follow it. Resolve relative references against that file's directory.");
|
|
109
|
+
for (const skill of skills) {
|
|
110
|
+
lines.push(`- ${skill.name}: ${skill.description}`, ` ${skill.path}`);
|
|
111
|
+
}
|
|
112
|
+
return lines.join("\n");
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=run-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-skills.js","sourceRoot":"","sources":["../../src/core/run-skills.ts"],"names":[],"mappings":"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"}
|
package/dist/core/run-usage.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cachedInInputFor, computeSessionCost } from "./pricing.js";
|
|
1
|
+
import { cachedInInputFor, computeSessionCost, totalTokensFor } from "./pricing.js";
|
|
2
2
|
import { isActiveStatus } from "./session.js";
|
|
3
3
|
/**
|
|
4
4
|
* Aggregates the last persisted usage value for each session in a run.
|
|
@@ -16,6 +16,7 @@ export function aggregateRunUsage(runId, sessions, attributions = [], linkStates
|
|
|
16
16
|
inputTokens: 0,
|
|
17
17
|
outputTokens: 0,
|
|
18
18
|
cachedTokens: 0,
|
|
19
|
+
totalTokens: 0,
|
|
19
20
|
costUsd: 0,
|
|
20
21
|
sessionCount: 0,
|
|
21
22
|
activeSessionCount: 0,
|
|
@@ -27,6 +28,7 @@ export function aggregateRunUsage(runId, sessions, attributions = [], linkStates
|
|
|
27
28
|
inputTokens: 0,
|
|
28
29
|
outputTokens: 0,
|
|
29
30
|
cachedTokens: 0,
|
|
31
|
+
totalTokens: 0,
|
|
30
32
|
sources: [],
|
|
31
33
|
},
|
|
32
34
|
total: { costUsd: 0 },
|
|
@@ -38,6 +40,7 @@ export function aggregateRunUsage(runId, sessions, attributions = [], linkStates
|
|
|
38
40
|
target.inputTokens += usage?.inputTokens ?? 0;
|
|
39
41
|
target.outputTokens += usage?.outputTokens ?? 0;
|
|
40
42
|
target.cachedTokens += usage?.cachedTokens ?? 0;
|
|
43
|
+
target.totalTokens += totalTokensFor(session.agent, usage);
|
|
41
44
|
const costUsd = computeSessionCost({
|
|
42
45
|
model: session.model,
|
|
43
46
|
cachedInInput: cachedInInputFor(session.agent),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-usage.js","sourceRoot":"","sources":["../../src/core/run-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"run-usage.js","sourceRoot":"","sources":["../../src/core/run-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAC;AAoC5D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,QAA4B,EAC5B,eAA0C,EAAE,EAC5C,aAAsC,EAAE;IAExC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAmB,CAAC;IAClD,KAAK,MAAM,OAAO,IAAI,QAAQ;QAAE,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAExE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAClC,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;SACzB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;SAC9C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAChC,CAAC;IACF,MAAM,OAAO,GAAoB;QAC/B,KAAK;QACL,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC;QACf,kBAAkB,EAAE,CAAC;QACrB,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,CAAC;QACtB,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,EAAE;SACZ;QACD,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;KACtB,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/D,MAAM,CAAC,WAAW,IAAI,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,IAAI,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,YAAY,IAAI,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE3D,MAAM,OAAO,GAAG,kBAAkB,CAAC;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;YAC9C,YAAY,EAAE,KAAK,EAAE,IAAI;YACzB,KAAK,EAAE;gBACL,WAAW,EAAE,KAAK,EAAE,WAAW;gBAC/B,YAAY,EAAE,KAAK,EAAE,YAAY;gBACjC,YAAY,EAAE,KAAK,EAAE,YAAY;aAClC;SACF,CAAC,CAAC;QACH,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC7B,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACnE,CAAC;IACH,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IACE,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;YAC7C,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,UAAU,CAAC,EACjE,CAAC;YACD,OAAO,CAAC,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC;YAAE,SAAS;QAC/D,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC;QACnC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;QAChD,OAAO;KACR,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;IAEvE,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/core/session.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
1
2
|
export const AGENT_IDS = ["claude", "codex", "opencode", "omp", "antigravity"];
|
|
2
3
|
export function normalizeAgentId(value) {
|
|
3
4
|
if (typeof value !== "string")
|
|
@@ -11,6 +12,10 @@ export function normalizeAgentId(value) {
|
|
|
11
12
|
export function isAgentId(value) {
|
|
12
13
|
return typeof value === "string" && AGENT_IDS.includes(value);
|
|
13
14
|
}
|
|
15
|
+
export const SESSION_ID_DISPLAY_LENGTH = 8;
|
|
16
|
+
export function shortSessionId(id) {
|
|
17
|
+
return id.slice(0, SESSION_ID_DISPLAY_LENGTH);
|
|
18
|
+
}
|
|
14
19
|
export function isTerminalStatus(status) {
|
|
15
20
|
return status === "completed" || status === "failed" || status === "stopped" || status === "orphaned" || status === "interrupted";
|
|
16
21
|
}
|
|
@@ -23,22 +28,7 @@ export function liveStatus(status, pid, alive) {
|
|
|
23
28
|
return status;
|
|
24
29
|
}
|
|
25
30
|
export function generateSessionId() {
|
|
26
|
-
|
|
27
|
-
// Use 8 hex chars, display first 4 but store full
|
|
28
|
-
const bytes = new Uint8Array(4);
|
|
29
|
-
// Node crypto
|
|
30
|
-
// Use simple random for now; crypto available globally
|
|
31
|
-
try {
|
|
32
|
-
// @ts-ignore
|
|
33
|
-
globalThis.crypto?.getRandomValues?.(bytes);
|
|
34
|
-
if (bytes[0] === 0 && bytes[1] === 0 && bytes[2] === 0 && bytes[3] === 0)
|
|
35
|
-
throw new Error("zero");
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
for (let i = 0; i < 4; i++)
|
|
39
|
-
bytes[i] = Math.floor(Math.random() * 256);
|
|
40
|
-
}
|
|
41
|
-
return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("").slice(0, 4);
|
|
31
|
+
return randomBytes(8).toString("hex");
|
|
42
32
|
}
|
|
43
33
|
export function generateBranchName(slug, sessionId) {
|
|
44
34
|
const clean = slug
|
package/dist/core/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,CAAU,CAAC;AAGxF,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,aAAa,CAAC;IAC/C,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,SAA+B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;AAChD,CAAC;AAiFD,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,aAAa,CAAC;AACpI,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,MAAM,CAAC;AACxG,CAAC;AAOD,MAAM,UAAU,UAAU,CACxB,MAAqB,EACrB,GAA8B,EAC9B,KAAc;IAEd,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,SAAiB;IAChE,MAAM,KAAK,GAAG,IAAI;SACf,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC;IAC1B,OAAO,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function buildUsageQueryParams(opts, cwd, now) {
|
|
2
|
+
let period;
|
|
3
|
+
let since = opts.since;
|
|
4
|
+
const until = opts.until;
|
|
5
|
+
if (opts.all) {
|
|
6
|
+
period = "all";
|
|
7
|
+
}
|
|
8
|
+
else if (opts.today) {
|
|
9
|
+
period = "today";
|
|
10
|
+
}
|
|
11
|
+
else if (opts.days) {
|
|
12
|
+
const days = parseInt(opts.days, 10);
|
|
13
|
+
if (days === 3)
|
|
14
|
+
period = "3d";
|
|
15
|
+
else if (days === 7)
|
|
16
|
+
period = "7d";
|
|
17
|
+
else if (days === 30)
|
|
18
|
+
period = "30d";
|
|
19
|
+
else if (!isNaN(days) && days > 0) {
|
|
20
|
+
const sinceDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() - (days - 1), 0, 0, 0, 0);
|
|
21
|
+
since = sinceDate.toISOString();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else if (!since) {
|
|
25
|
+
// Default to today if no temporal flags provided
|
|
26
|
+
period = "today";
|
|
27
|
+
}
|
|
28
|
+
let repository = opts.repo;
|
|
29
|
+
if (opts.current) {
|
|
30
|
+
repository = cwd;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
period,
|
|
34
|
+
since,
|
|
35
|
+
until,
|
|
36
|
+
repository,
|
|
37
|
+
model: opts.model,
|
|
38
|
+
agent: opts.agent,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=usage-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-query.js","sourceRoot":"","sources":["../../src/core/usage-query.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,qBAAqB,CACnC,IAAuB,EACvB,GAAW,EACX,GAAS;IAET,IAAI,MAA+B,CAAC;IACpC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,KAAK,CAAC;IACjB,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,CAAC;YAAE,MAAM,GAAG,IAAI,CAAC;aACzB,IAAI,IAAI,KAAK,CAAC;YAAE,MAAM,GAAG,IAAI,CAAC;aAC9B,IAAI,IAAI,KAAK,EAAE;YAAE,MAAM,GAAG,KAAK,CAAC;aAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtG,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,iDAAiD;QACjD,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,UAAU,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,OAAO;QACL,MAAM;QACN,KAAK;QACL,KAAK;QACL,UAAU;QACV,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAA4B;KACzC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
/** The dist root of a compiled module: two directories above `dist/<dir>/<file>.js`. */
|
|
5
|
+
export function distRootFor(moduleUrl) {
|
|
6
|
+
return path.dirname(path.dirname(fileURLToPath(moduleUrl)));
|
|
7
|
+
}
|
|
8
|
+
/** Newest `.js` mtime under `root`, as a decimal string; `"0"` when there is none. */
|
|
9
|
+
export function computeBuildId(root) {
|
|
10
|
+
let newest = 0;
|
|
11
|
+
const walk = (dir) => {
|
|
12
|
+
let entries;
|
|
13
|
+
try {
|
|
14
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
for (const entry of entries) {
|
|
20
|
+
const full = path.join(dir, entry.name);
|
|
21
|
+
if (entry.isDirectory())
|
|
22
|
+
walk(full);
|
|
23
|
+
else if (entry.isFile() && entry.name.endsWith(".js"))
|
|
24
|
+
newest = Math.max(newest, fs.statSync(full).mtimeMs);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
walk(root);
|
|
28
|
+
return String(newest);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=build-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-id.js","sourceRoot":"","sources":["../../src/daemon/build-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,wFAAwF;AACxF,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC/B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
|