@shield-agent/kya 0.1.8 → 0.1.10
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/LIMITATIONS.md +2 -0
- package/README.md +5 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +12 -2
- package/dist/client.js.map +1 -1
- package/dist/commands/dash.d.ts.map +1 -1
- package/dist/commands/dash.js +2 -11
- package/dist/commands/dash.js.map +1 -1
- package/dist/commands/orr.d.ts +5 -0
- package/dist/commands/orr.d.ts.map +1 -1
- package/dist/commands/orr.js +108 -4
- package/dist/commands/orr.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -4
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/http.d.ts +2 -0
- package/dist/mcp/http.d.ts.map +1 -1
- package/dist/mcp/http.js +21 -2
- package/dist/mcp/http.js.map +1 -1
- package/dist/mcp/protocol.d.ts.map +1 -1
- package/dist/mcp/protocol.js +25 -4
- package/dist/mcp/protocol.js.map +1 -1
- package/dist/offline-evaluate.d.ts.map +1 -1
- package/dist/offline-evaluate.js +4 -4
- package/dist/offline-evaluate.js.map +1 -1
- package/dist/sample-tools.d.ts.map +1 -1
- package/dist/sample-tools.js +4 -1
- package/dist/sample-tools.js.map +1 -1
- package/dist/showback/cost-per-task.d.ts +50 -0
- package/dist/showback/cost-per-task.d.ts.map +1 -0
- package/dist/showback/cost-per-task.js +187 -0
- package/dist/showback/cost-per-task.js.map +1 -0
- package/dist/showback/rates.d.ts +18 -0
- package/dist/showback/rates.d.ts.map +1 -0
- package/dist/showback/rates.js +34 -0
- package/dist/showback/rates.js.map +1 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost-per-task showback (observe only). Not a PEP. Not a billing meter.
|
|
3
|
+
* Subagents are nested steps on one run (parentRunId), not extra registry seats.
|
|
4
|
+
*/
|
|
5
|
+
import { estimateRequestUsd } from "./rates.js";
|
|
6
|
+
export const SHOWBACK_DISCLAIMER = "Estimate from published list prices. Not a billing meter. Not a PEP.";
|
|
7
|
+
function nonNeg(n) {
|
|
8
|
+
if (typeof n !== "number" || !Number.isFinite(n) || n < 0)
|
|
9
|
+
return 0;
|
|
10
|
+
return Math.floor(n);
|
|
11
|
+
}
|
|
12
|
+
function requestCost(rec) {
|
|
13
|
+
const retries = nonNeg(rec.retries);
|
|
14
|
+
const multiplier = 1 + retries;
|
|
15
|
+
const one = estimateRequestUsd(rec.model, nonNeg(rec.tokensIn), nonNeg(rec.tokensOut), nonNeg(rec.reasoningTokens));
|
|
16
|
+
if (one === null)
|
|
17
|
+
return null;
|
|
18
|
+
return one * multiplier;
|
|
19
|
+
}
|
|
20
|
+
function requestTokens(rec) {
|
|
21
|
+
const retries = nonNeg(rec.retries);
|
|
22
|
+
const multiplier = 1 + retries;
|
|
23
|
+
return {
|
|
24
|
+
in: nonNeg(rec.tokensIn) * multiplier,
|
|
25
|
+
out: (nonNeg(rec.tokensOut) + nonNeg(rec.reasoningTokens)) * multiplier,
|
|
26
|
+
steps: multiplier,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function runKey(rec) {
|
|
30
|
+
if (rec.parentRunId && rec.parentRunId.trim())
|
|
31
|
+
return rec.parentRunId.trim();
|
|
32
|
+
if (rec.runId && rec.runId.trim())
|
|
33
|
+
return rec.runId.trim();
|
|
34
|
+
return `solo:${rec.agentId}`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Roll usage into per-run and per-agent showback.
|
|
38
|
+
* Nested subagents share parentRunId and roll into that run's cost-per-task.
|
|
39
|
+
*/
|
|
40
|
+
export function buildShowback(records) {
|
|
41
|
+
const byRun = new Map();
|
|
42
|
+
for (const rec of records) {
|
|
43
|
+
if (!rec.agentId || !rec.agentId.trim())
|
|
44
|
+
continue;
|
|
45
|
+
const key = runKey(rec);
|
|
46
|
+
const tok = requestTokens(rec);
|
|
47
|
+
const usd = requestCost(rec);
|
|
48
|
+
let row = byRun.get(key);
|
|
49
|
+
if (!row) {
|
|
50
|
+
row = {
|
|
51
|
+
parentAgentId: rec.agentId,
|
|
52
|
+
tokensIn: 0,
|
|
53
|
+
tokensOut: 0,
|
|
54
|
+
usd: 0,
|
|
55
|
+
usdKnown: true,
|
|
56
|
+
steps: 0,
|
|
57
|
+
subagents: new Set(),
|
|
58
|
+
};
|
|
59
|
+
byRun.set(key, row);
|
|
60
|
+
}
|
|
61
|
+
if (rec.parentRunId) {
|
|
62
|
+
row.subagents.add(rec.agentId);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
row.parentAgentId = rec.agentId;
|
|
66
|
+
}
|
|
67
|
+
row.tokensIn += tok.in;
|
|
68
|
+
row.tokensOut += tok.out;
|
|
69
|
+
row.steps += tok.steps;
|
|
70
|
+
if (usd === null) {
|
|
71
|
+
row.usdKnown = false;
|
|
72
|
+
}
|
|
73
|
+
else if (row.usdKnown) {
|
|
74
|
+
row.usd = (row.usd ?? 0) + usd;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const perRun = [...byRun.entries()].map(([runId, row]) => ({
|
|
78
|
+
runId,
|
|
79
|
+
parentAgentId: row.parentAgentId,
|
|
80
|
+
tokensIn: row.tokensIn,
|
|
81
|
+
tokensOut: row.tokensOut,
|
|
82
|
+
estimatedUsd: row.usdKnown ? roundUsd(row.usd ?? 0) : null,
|
|
83
|
+
steps: row.steps,
|
|
84
|
+
subagentIds: [...row.subagents].sort(),
|
|
85
|
+
}));
|
|
86
|
+
perRun.sort((a, b) => a.runId.localeCompare(b.runId));
|
|
87
|
+
const byAgent = new Map();
|
|
88
|
+
for (const rec of records) {
|
|
89
|
+
if (!rec.agentId || !rec.agentId.trim())
|
|
90
|
+
continue;
|
|
91
|
+
const tok = requestTokens(rec);
|
|
92
|
+
const usd = requestCost(rec);
|
|
93
|
+
let row = byAgent.get(rec.agentId);
|
|
94
|
+
if (!row) {
|
|
95
|
+
row = { tokensIn: 0, tokensOut: 0, usd: 0, usdKnown: true, runs: new Set() };
|
|
96
|
+
byAgent.set(rec.agentId, row);
|
|
97
|
+
}
|
|
98
|
+
row.tokensIn += tok.in;
|
|
99
|
+
row.tokensOut += tok.out;
|
|
100
|
+
row.runs.add(runKey(rec));
|
|
101
|
+
if (usd === null)
|
|
102
|
+
row.usdKnown = false;
|
|
103
|
+
else if (row.usdKnown)
|
|
104
|
+
row.usd = (row.usd ?? 0) + usd;
|
|
105
|
+
}
|
|
106
|
+
const perAgent = [...byAgent.entries()].map(([agentId, row]) => ({
|
|
107
|
+
agentId,
|
|
108
|
+
tokensIn: row.tokensIn,
|
|
109
|
+
tokensOut: row.tokensOut,
|
|
110
|
+
estimatedUsd: row.usdKnown ? roundUsd(row.usd ?? 0) : null,
|
|
111
|
+
runs: row.runs.size,
|
|
112
|
+
}));
|
|
113
|
+
perAgent.sort((a, b) => a.agentId.localeCompare(b.agentId));
|
|
114
|
+
let totalIn = 0;
|
|
115
|
+
let totalOut = 0;
|
|
116
|
+
let totalUsd = 0;
|
|
117
|
+
let usdKnown = true;
|
|
118
|
+
for (const r of perRun) {
|
|
119
|
+
totalIn += r.tokensIn;
|
|
120
|
+
totalOut += r.tokensOut;
|
|
121
|
+
if (r.estimatedUsd === null)
|
|
122
|
+
usdKnown = false;
|
|
123
|
+
else
|
|
124
|
+
totalUsd += r.estimatedUsd;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
billingMeter: false,
|
|
128
|
+
disclaimer: SHOWBACK_DISCLAIMER,
|
|
129
|
+
totalTokensIn: totalIn,
|
|
130
|
+
totalTokensOut: totalOut,
|
|
131
|
+
estimatedUsd: usdKnown && perRun.length > 0 ? roundUsd(totalUsd) : perRun.length === 0 ? 0 : null,
|
|
132
|
+
perRun,
|
|
133
|
+
perAgent,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function roundUsd(n) {
|
|
137
|
+
return Math.round(n * 1_000_000) / 1_000_000;
|
|
138
|
+
}
|
|
139
|
+
export function parseUsageRecords(raw) {
|
|
140
|
+
if (!Array.isArray(raw)) {
|
|
141
|
+
throw new Error("usage must be an array");
|
|
142
|
+
}
|
|
143
|
+
if (raw.length > 500) {
|
|
144
|
+
throw new Error("usage exceeds 500 rows");
|
|
145
|
+
}
|
|
146
|
+
const out = [];
|
|
147
|
+
for (const item of raw) {
|
|
148
|
+
if (!item || typeof item !== "object")
|
|
149
|
+
continue;
|
|
150
|
+
const o = item;
|
|
151
|
+
const agentId = typeof o.agentId === "string" ? o.agentId : typeof o.agent_id === "string" ? o.agent_id : "";
|
|
152
|
+
if (!agentId.trim())
|
|
153
|
+
continue;
|
|
154
|
+
const tokensIn = num(o.tokensIn ?? o.tokens_in);
|
|
155
|
+
const tokensOut = num(o.tokensOut ?? o.tokens_out);
|
|
156
|
+
out.push({
|
|
157
|
+
agentId: agentId.trim(),
|
|
158
|
+
parentRunId: str(o.parentRunId ?? o.parent_run_id),
|
|
159
|
+
runId: str(o.runId ?? o.run_id),
|
|
160
|
+
model: str(o.model),
|
|
161
|
+
route: str(o.route),
|
|
162
|
+
environment: str(o.environment ?? o.env),
|
|
163
|
+
tokensIn,
|
|
164
|
+
tokensOut,
|
|
165
|
+
reasoningTokens: optionalNum(o.reasoningTokens ?? o.reasoning_tokens),
|
|
166
|
+
retries: optionalNum(o.retries),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return out;
|
|
170
|
+
}
|
|
171
|
+
function str(v) {
|
|
172
|
+
return typeof v === "string" && v.trim() ? v.trim() : undefined;
|
|
173
|
+
}
|
|
174
|
+
function num(v) {
|
|
175
|
+
if (typeof v === "number" && Number.isFinite(v))
|
|
176
|
+
return Math.max(0, Math.floor(v));
|
|
177
|
+
if (typeof v === "string" && v.trim() && Number.isFinite(Number(v))) {
|
|
178
|
+
return Math.max(0, Math.floor(Number(v)));
|
|
179
|
+
}
|
|
180
|
+
return 0;
|
|
181
|
+
}
|
|
182
|
+
function optionalNum(v) {
|
|
183
|
+
if (v === undefined || v === null || v === "")
|
|
184
|
+
return undefined;
|
|
185
|
+
return num(v);
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=cost-per-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-per-task.js","sourceRoot":"","sources":["../../src/showback/cost-per-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Published list-price estimates for display-only showback.
|
|
3
|
+
* Dated 2026-08-29. Not an invoice. Unknown models return null USD.
|
|
4
|
+
* Keep in lockstep with Java PublishedModelRates (same test vectors).
|
|
5
|
+
*/
|
|
6
|
+
export interface ModelRate {
|
|
7
|
+
readonly model: string;
|
|
8
|
+
/** USD per 1M input tokens */
|
|
9
|
+
readonly inputPer1M: number;
|
|
10
|
+
/** USD per 1M output tokens (reasoning billed as output when present) */
|
|
11
|
+
readonly outputPer1M: number;
|
|
12
|
+
}
|
|
13
|
+
/** Rates table as of 2026-08-29. Estimate only. */
|
|
14
|
+
export declare const PUBLISHED_MODEL_RATES: readonly ModelRate[];
|
|
15
|
+
export declare function lookupRate(model: string | undefined | null): ModelRate | null;
|
|
16
|
+
/** USD for one request. Returns null when the model has no published rate. */
|
|
17
|
+
export declare function estimateRequestUsd(model: string | undefined | null, tokensIn: number, tokensOut: number, reasoningTokens?: number): number | null;
|
|
18
|
+
//# sourceMappingURL=rates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rates.d.ts","sourceRoot":"","sources":["../../src/showback/rates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,mDAAmD;AACnD,eAAO,MAAM,qBAAqB,EAAE,SAAS,SAAS,EAQrD,CAAC;AAMF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAK7E;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAChC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,SAAI,GAClB,MAAM,GAAG,IAAI,CAMf"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Published list-price estimates for display-only showback.
|
|
3
|
+
* Dated 2026-08-29. Not an invoice. Unknown models return null USD.
|
|
4
|
+
* Keep in lockstep with Java PublishedModelRates (same test vectors).
|
|
5
|
+
*/
|
|
6
|
+
/** Rates table as of 2026-08-29. Estimate only. */
|
|
7
|
+
export const PUBLISHED_MODEL_RATES = [
|
|
8
|
+
{ model: "gpt-4o", inputPer1M: 2.5, outputPer1M: 10 },
|
|
9
|
+
{ model: "gpt-4o-mini", inputPer1M: 0.15, outputPer1M: 0.6 },
|
|
10
|
+
{ model: "claude-sonnet-4", inputPer1M: 3, outputPer1M: 15 },
|
|
11
|
+
{ model: "claude-3-5-sonnet", inputPer1M: 3, outputPer1M: 15 },
|
|
12
|
+
{ model: "claude-3-5-haiku", inputPer1M: 0.8, outputPer1M: 4 },
|
|
13
|
+
{ model: "grok-4", inputPer1M: 3, outputPer1M: 15 },
|
|
14
|
+
{ model: "grok-2", inputPer1M: 2, outputPer1M: 10 },
|
|
15
|
+
];
|
|
16
|
+
const byModel = new Map(PUBLISHED_MODEL_RATES.map((r) => [r.model.toLowerCase(), r]));
|
|
17
|
+
export function lookupRate(model) {
|
|
18
|
+
if (!model)
|
|
19
|
+
return null;
|
|
20
|
+
const key = model.trim().toLowerCase();
|
|
21
|
+
if (!key)
|
|
22
|
+
return null;
|
|
23
|
+
return byModel.get(key) ?? null;
|
|
24
|
+
}
|
|
25
|
+
/** USD for one request. Returns null when the model has no published rate. */
|
|
26
|
+
export function estimateRequestUsd(model, tokensIn, tokensOut, reasoningTokens = 0) {
|
|
27
|
+
const rate = lookupRate(model);
|
|
28
|
+
if (!rate)
|
|
29
|
+
return null;
|
|
30
|
+
const inTok = Math.max(0, tokensIn);
|
|
31
|
+
const outTok = Math.max(0, tokensOut) + Math.max(0, reasoningTokens);
|
|
32
|
+
return (inTok * rate.inputPer1M + outTok * rate.outputPer1M) / 1_000_000;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=rates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rates.js","sourceRoot":"","sources":["../../src/showback/rates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,mDAAmD;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAyB;IACzD,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE;IACrD,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;IAC5D,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAC5D,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAC9D,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE;IAC9D,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IACnD,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;CACpD,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAU,CAAC,CACtE,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAgC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAClC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAChC,KAAgC,EAChC,QAAgB,EAChB,SAAiB,EACjB,eAAe,GAAG,CAAC;IAEnB,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IACrE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;AAC3E,CAAC"}
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/The-Pixel-Boys/shield-kya",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "0.1.
|
|
10
|
+
"version": "0.1.10",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@shield-agent/kya",
|
|
15
|
-
"version": "0.1.
|
|
15
|
+
"version": "0.1.10",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|