@argosvix/sdk 0.4.22-alpha.0 → 0.5.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/README.md +4 -9
- package/dist/aiSdkMiddleware.d.ts +36 -20
- package/dist/aiSdkMiddleware.d.ts.map +1 -1
- package/dist/aiSdkMiddleware.js +98 -31
- package/dist/aiSdkMiddleware.js.map +1 -1
- package/dist/approvals.d.ts +37 -29
- package/dist/approvals.d.ts.map +1 -1
- package/dist/approvals.js +24 -18
- package/dist/approvals.js.map +1 -1
- package/dist/budgetGate.d.ts +30 -24
- package/dist/budgetGate.d.ts.map +1 -1
- package/dist/budgetGate.js +118 -92
- package/dist/budgetGate.js.map +1 -1
- package/dist/client.d.ts +15 -10
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +271 -222
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +59 -48
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +72 -58
- package/dist/context.js.map +1 -1
- package/dist/flush.d.ts +6 -4
- package/dist/flush.d.ts.map +1 -1
- package/dist/flush.js +6 -4
- package/dist/flush.js.map +1 -1
- package/dist/ids.d.ts +3 -2
- package/dist/ids.d.ts.map +1 -1
- package/dist/ids.js +6 -5
- package/dist/ids.js.map +1 -1
- package/dist/langchainCallback.d.ts +14 -13
- package/dist/langchainCallback.d.ts.map +1 -1
- package/dist/langchainCallback.js +22 -17
- package/dist/langchainCallback.js.map +1 -1
- package/dist/policyScan.d.ts +29 -22
- package/dist/policyScan.d.ts.map +1 -1
- package/dist/policyScan.js +47 -38
- package/dist/policyScan.js.map +1 -1
- package/dist/pricing.d.ts +5 -5
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +24 -22
- package/dist/pricing.js.map +1 -1
- package/dist/prompts.d.ts +20 -17
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +21 -17
- package/dist/prompts.js.map +1 -1
- package/dist/query.d.ts +21 -21
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +14 -14
- package/dist/recorder.d.ts +39 -19
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +120 -69
- package/dist/recorder.js.map +1 -1
- package/dist/redaction.d.ts +35 -33
- package/dist/redaction.d.ts.map +1 -1
- package/dist/redaction.js +73 -64
- package/dist/redaction.js.map +1 -1
- package/dist/types.d.ts +131 -114
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +9 -9
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +9 -9
- package/dist/version.js.map +1 -1
- package/package.json +8 -2
package/dist/policyScan.d.ts
CHANGED
|
@@ -1,43 +1,50 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Scan used for the policy gate's block decision (part of the runtime control
|
|
3
|
+
* plane; separated and redesigned from the earlier reuse of redaction.ts).
|
|
4
4
|
*
|
|
5
|
-
* redaction.ts
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* The PATTERNS in redaction.ts are designed to be false-positive tolerant
|
|
6
|
+
* (over-masking is acceptable). Reusing them as a blocking predicate would stop
|
|
7
|
+
* legitimate calls in production (timestamps treated as card numbers, numeric
|
|
8
|
+
* IDs as phone numbers, base64 as secrets). This module takes the opposite
|
|
9
|
+
* stance: false negatives are tolerated, false positives are strictly avoided:
|
|
9
10
|
*
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* -
|
|
11
|
+
* - The scan target is not the JSON stringification of the payload but only
|
|
12
|
+
* the string values collected by recursively walking the object (numeric
|
|
13
|
+
* fields / TypedArrays are excluded from the start; this also fixes the
|
|
14
|
+
* problem where JSON escaping broke detection across newlines)
|
|
15
|
+
* - The base64 body of data: URLs and very long strings containing no
|
|
16
|
+
* whitespace are treated as binary and skipped (prevents probabilistic
|
|
17
|
+
* false positives on images / file blobs and wasted CPU)
|
|
18
|
+
* - Card numbers are verified with a Luhn checksum (rejects e.g. 13-digit
|
|
19
|
+
* epoch-ms values)
|
|
20
|
+
* - Phone numbers / Japanese My Number only match separator-delimited forms
|
|
21
|
+
* (no match on runs of consecutive digits)
|
|
22
|
+
* - Secrets require boundaries on both sides (prevents partial matches
|
|
23
|
+
* inside base64 or ID strings)
|
|
18
24
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
25
|
+
* On detection, returns which field matched (JSON path) plus a masked snippet
|
|
26
|
+
* so customers can debug false positives (plaintext is never returned).
|
|
21
27
|
*/
|
|
22
28
|
export interface PolicyScanHit {
|
|
23
29
|
kind: "pii" | "secret";
|
|
24
30
|
pattern: string;
|
|
25
|
-
/**
|
|
31
|
+
/** JSON path of the detected string value (e.g. messages[2].content). */
|
|
26
32
|
path: string;
|
|
27
|
-
/**
|
|
33
|
+
/** Masked snippet (e.g. "al***om"). Never contains plaintext. */
|
|
28
34
|
snippet: string;
|
|
29
35
|
}
|
|
30
|
-
/** Luhn checksum (
|
|
36
|
+
/** Luhn checksum (validates that a card number is plausible). */
|
|
31
37
|
export declare function luhnValid(digits: string): boolean;
|
|
32
38
|
interface TextValue {
|
|
33
39
|
path: string;
|
|
34
40
|
text: string;
|
|
35
41
|
}
|
|
36
|
-
/**
|
|
42
|
+
/** Recursively collect only string values from the payload object, with their paths. */
|
|
37
43
|
export declare function collectTextValues(payload: unknown): TextValue[];
|
|
38
44
|
/**
|
|
39
|
-
* payload
|
|
40
|
-
*
|
|
45
|
+
* Walk the payload and return the first violation, or null if none detected.
|
|
46
|
+
* Secrets are evaluated before PII (credentials are more severe than PII, so
|
|
47
|
+
* they take reporting priority).
|
|
41
48
|
*/
|
|
42
49
|
export declare function scanPolicyViolation(payload: unknown, opts: {
|
|
43
50
|
pii: boolean;
|
package/dist/policyScan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policyScan.d.ts","sourceRoot":"","sources":["../src/policyScan.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"policyScan.d.ts","sourceRoot":"","sources":["../src/policyScan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB;AAiDD,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAejD;AAcD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,CAgC/D;AAwCD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACvC,aAAa,GAAG,IAAI,CAkBtB"}
|
package/dist/policyScan.js
CHANGED
|
@@ -1,52 +1,60 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Scan used for the policy gate's block decision (part of the runtime control
|
|
3
|
+
* plane; separated and redesigned from the earlier reuse of redaction.ts).
|
|
4
4
|
*
|
|
5
|
-
* redaction.ts
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* The PATTERNS in redaction.ts are designed to be false-positive tolerant
|
|
6
|
+
* (over-masking is acceptable). Reusing them as a blocking predicate would stop
|
|
7
|
+
* legitimate calls in production (timestamps treated as card numbers, numeric
|
|
8
|
+
* IDs as phone numbers, base64 as secrets). This module takes the opposite
|
|
9
|
+
* stance: false negatives are tolerated, false positives are strictly avoided:
|
|
9
10
|
*
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* -
|
|
11
|
+
* - The scan target is not the JSON stringification of the payload but only
|
|
12
|
+
* the string values collected by recursively walking the object (numeric
|
|
13
|
+
* fields / TypedArrays are excluded from the start; this also fixes the
|
|
14
|
+
* problem where JSON escaping broke detection across newlines)
|
|
15
|
+
* - The base64 body of data: URLs and very long strings containing no
|
|
16
|
+
* whitespace are treated as binary and skipped (prevents probabilistic
|
|
17
|
+
* false positives on images / file blobs and wasted CPU)
|
|
18
|
+
* - Card numbers are verified with a Luhn checksum (rejects e.g. 13-digit
|
|
19
|
+
* epoch-ms values)
|
|
20
|
+
* - Phone numbers / Japanese My Number only match separator-delimited forms
|
|
21
|
+
* (no match on runs of consecutive digits)
|
|
22
|
+
* - Secrets require boundaries on both sides (prevents partial matches
|
|
23
|
+
* inside base64 or ID strings)
|
|
18
24
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
25
|
+
* On detection, returns which field matched (JSON path) plus a masked snippet
|
|
26
|
+
* so customers can debug false positives (plaintext is never returned).
|
|
21
27
|
*/
|
|
22
28
|
const MAX_DEPTH = 8;
|
|
23
29
|
const MAX_STRINGS = 500;
|
|
24
|
-
//
|
|
30
|
+
// Per-string scan cap (anything beyond it only has its head scanned; CPU cap for the hot path)
|
|
25
31
|
const MAX_STRING_SCAN_CHARS = 262_144;
|
|
26
|
-
//
|
|
32
|
+
// Threshold above which a long string with no whitespace is treated as binary / base64 and skipped
|
|
27
33
|
const BINARY_LIKE_MIN_CHARS = 4_096;
|
|
28
|
-
// ---- PII (
|
|
34
|
+
// ---- PII (for blocking; false positives strictly avoided) ----
|
|
29
35
|
const EMAIL_RE = /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/;
|
|
30
|
-
//
|
|
36
|
+
// Card number candidates (13-19 digits, with or without separators). Luhn-verified after matching.
|
|
31
37
|
const CC_CANDIDATE_RE = /(?<![\d-])(?:\d[ -]?){12,18}\d(?![\d-])/g;
|
|
32
|
-
//
|
|
38
|
+
// Phone forms requiring separators (JP leading-0 form + international form). Does not match runs of consecutive digits.
|
|
33
39
|
const PHONE_JP_RE = /(?<!\d)0\d{1,4}[- ]\d{1,4}[- ]\d{3,4}(?!\d)/;
|
|
34
40
|
const PHONE_INTL_RE = /(?<![\dA-Za-z])\+\d{1,3}[- ]\d{1,4}(?:[- ]\d{2,4}){1,3}(?!\d)/;
|
|
35
|
-
//
|
|
41
|
+
// Japanese My Number only in the 4-4-4 separated form (12 consecutive digits are indistinguishable from IDs, so excluded)
|
|
36
42
|
const MY_NUMBER_RE = /(?<![\d-])\d{4}-\d{4}-\d{4}(?![\d-])/;
|
|
37
|
-
// IPv4
|
|
43
|
+
// IPv4 validates octet values (0-255)
|
|
38
44
|
const IPV4_RE = /(?<![\d.])(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?![\d.])/;
|
|
39
|
-
// IPv6 (
|
|
40
|
-
//
|
|
41
|
-
// -
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
+
// IPv6 (detection added in a later revision). Kept conservative to strictly avoid
|
|
46
|
+
// false positives; limited to:
|
|
47
|
+
// - the full form (8 groups / 7 colons), or
|
|
48
|
+
// - the "::" compressed form with 2+ groups on the left (e.g. 2001:db8::1)
|
|
49
|
+
// Does not match times like "12:34:56" (3 groups, no "::"), C++ "std::vector"
|
|
50
|
+
// (non-hex), or MACs "00:1A:..." (6 groups, no "::"). Compressed forms with a
|
|
51
|
+
// single left group like "fe80::1" are intentionally excluded (a short hex::hex
|
|
52
|
+
// can occur incidentally in code).
|
|
45
53
|
const IPV6_RE = /(?<![0-9A-Fa-f:])(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){2,6}:(?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4}){0,5})?)(?![0-9A-Fa-f:])/;
|
|
46
|
-
// ---- secrets (
|
|
47
|
-
const B = "(?<![A-Za-z0-9_-])"; //
|
|
54
|
+
// ---- secrets (bounded on both sides) ----
|
|
55
|
+
const B = "(?<![A-Za-z0-9_-])"; // Left boundary (prevents partial matches inside base64 / ID strings)
|
|
48
56
|
const SECRET_PATTERNS = [
|
|
49
|
-
// anthropic
|
|
57
|
+
// anthropic before openai (otherwise sk-ant- would be classified as openai, making that pattern dead)
|
|
50
58
|
{ name: "anthropic_api_key", re: new RegExp(`${B}sk-ant-[A-Za-z0-9_-]{20,}`) },
|
|
51
59
|
{ name: "openai_api_key", re: new RegExp(`${B}sk-(?!ant-)[A-Za-z0-9_-]{20,}`) },
|
|
52
60
|
{ name: "aws_access_key", re: new RegExp(`${B}AKIA[0-9A-Z]{16}(?![A-Za-z0-9])`) },
|
|
@@ -57,7 +65,7 @@ const SECRET_PATTERNS = [
|
|
|
57
65
|
{ name: "private_key_block", re: /-----BEGIN [A-Z ]*PRIVATE KEY-----/ },
|
|
58
66
|
{ name: "argosvix_api_key", re: new RegExp(`${B}argk_[a-z0-9]{20,}`) },
|
|
59
67
|
];
|
|
60
|
-
/** Luhn checksum (
|
|
68
|
+
/** Luhn checksum (validates that a card number is plausible). */
|
|
61
69
|
export function luhnValid(digits) {
|
|
62
70
|
if (digits.length < 13 || digits.length > 19)
|
|
63
71
|
return false;
|
|
@@ -85,12 +93,12 @@ function maskSnippet(match) {
|
|
|
85
93
|
function isBinaryLike(text) {
|
|
86
94
|
if (text.startsWith("data:") && text.includes(";base64,"))
|
|
87
95
|
return true;
|
|
88
|
-
//
|
|
96
|
+
// A very long string with no whitespace at all is treated as base64 / a blob / concatenated tokens
|
|
89
97
|
if (text.length >= BINARY_LIKE_MIN_CHARS && !/\s/.test(text))
|
|
90
98
|
return true;
|
|
91
99
|
return false;
|
|
92
100
|
}
|
|
93
|
-
/**
|
|
101
|
+
/** Recursively collect only string values from the payload object, with their paths. */
|
|
94
102
|
export function collectTextValues(payload) {
|
|
95
103
|
const out = [];
|
|
96
104
|
const seen = new Set();
|
|
@@ -111,7 +119,7 @@ export function collectTextValues(payload) {
|
|
|
111
119
|
if (!value || typeof value !== "object" || depth >= MAX_DEPTH)
|
|
112
120
|
return;
|
|
113
121
|
if (seen.has(value))
|
|
114
|
-
return; // circular
|
|
122
|
+
return; // guard against circular references
|
|
115
123
|
seen.add(value);
|
|
116
124
|
if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer)
|
|
117
125
|
return;
|
|
@@ -166,8 +174,9 @@ function scanTextForSecret(text) {
|
|
|
166
174
|
return null;
|
|
167
175
|
}
|
|
168
176
|
/**
|
|
169
|
-
* payload
|
|
170
|
-
*
|
|
177
|
+
* Walk the payload and return the first violation, or null if none detected.
|
|
178
|
+
* Secrets are evaluated before PII (credentials are more severe than PII, so
|
|
179
|
+
* they take reporting priority).
|
|
171
180
|
*/
|
|
172
181
|
export function scanPolicyViolation(payload, opts) {
|
|
173
182
|
if (!opts.pii && !opts.secrets)
|
package/dist/policyScan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policyScan.js","sourceRoot":"","sources":["../src/policyScan.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"policyScan.js","sourceRoot":"","sources":["../src/policyScan.ts"],"names":[],"mappings":"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"}
|
package/dist/pricing.d.ts
CHANGED
|
@@ -18,13 +18,13 @@ export declare const PRICING: Record<Provider, Record<string, PricingEntry>>;
|
|
|
18
18
|
*/
|
|
19
19
|
export declare function calculateCost(provider: Provider, model: string, promptTokens: number, completionTokens: number): number;
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
21
|
+
* USD cost accounting for cache tokens, plus the cache savings amount.
|
|
22
22
|
*
|
|
23
|
-
* promptTokens
|
|
24
|
-
* uncached = promptTokens − cachedReadTokens − cachedWriteTokens(
|
|
23
|
+
* promptTokens is the total input including cache reads and writes. Breakdown:
|
|
24
|
+
* uncached = promptTokens − cachedReadTokens − cachedWriteTokens (floored at 0)
|
|
25
25
|
* cost = uncached×input + cachedRead×input×readMult + cachedWrite×input×writeMult + completion×output
|
|
26
|
-
* savings = cachedRead×input×(1 − readMult) ←
|
|
27
|
-
*
|
|
26
|
+
* savings = cachedRead×input×(1 − readMult) ← value of the read discount (the write premium is not included in savings)
|
|
27
|
+
* Unknown models return {0, 0}.
|
|
28
28
|
*/
|
|
29
29
|
export declare function calculateCostWithCache(provider: Provider, model: string, promptTokens: number, completionTokens: number, cachedReadTokens: number, cachedWriteTokens: number): {
|
|
30
30
|
costUsd: number;
|
package/dist/pricing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIzD;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAyFlE,CAAC;
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIzD;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAyFlE,CAAC;AAsBF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAGR;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,GACxB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CA2B9C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD;AAYD,qFAAqF;AACrF,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
package/dist/pricing.js
CHANGED
|
@@ -12,7 +12,7 @@ const warnedUnknownModels = new Set();
|
|
|
12
12
|
export const PRICING = {
|
|
13
13
|
openai: {
|
|
14
14
|
"gpt-5.5": { inputPer1M: 5.0, outputPer1M: 30.0 },
|
|
15
|
-
// xAI Grok(
|
|
15
|
+
// xAI Grok (arrives with provider "openai" because it is called via the OpenAI-compatible API)
|
|
16
16
|
"grok-4.5": { inputPer1M: 2.0, outputPer1M: 6.0 },
|
|
17
17
|
"gpt-5.4": { inputPer1M: 2.5, outputPer1M: 15.0 },
|
|
18
18
|
"gpt-5.4-mini": { inputPer1M: 0.75, outputPer1M: 4.5 },
|
|
@@ -57,19 +57,19 @@ export const PRICING = {
|
|
|
57
57
|
"claude-3-haiku": { inputPer1M: 0.25, outputPer1M: 1.25 },
|
|
58
58
|
},
|
|
59
59
|
gemini: {
|
|
60
|
-
// Gemini 3 series (
|
|
60
|
+
// Gemini 3 series (GA 2026-05-19; verified against ai.google.dev/pricing)
|
|
61
61
|
"gemini-3.5-flash": { inputPer1M: 1.5, outputPer1M: 9.0 },
|
|
62
|
-
// 3.1-pro
|
|
62
|
+
// 3.1-pro has context-size pricing tiers; we use the ≤200k default (preview IDs resolve via prefix match)
|
|
63
63
|
"gemini-3.1-pro": { inputPer1M: 2.0, outputPer1M: 12.0 },
|
|
64
64
|
"gemini-3-flash": { inputPer1M: 0.5, outputPer1M: 3.0 },
|
|
65
|
-
// Gemini 2.5 series (
|
|
66
|
-
// 2.5-pro
|
|
65
|
+
// Gemini 2.5 series (corrected 2026-05 against the official pricing page)
|
|
66
|
+
// 2.5-pro has context-size pricing tiers; we use the ≤200k default (we do not track context size)
|
|
67
67
|
"gemini-2.5-pro": { inputPer1M: 1.25, outputPer1M: 10.0 },
|
|
68
68
|
"gemini-2.5-flash": { inputPer1M: 0.3, outputPer1M: 2.5 },
|
|
69
69
|
// Gemini 2 series
|
|
70
70
|
"gemini-2.0-flash": { inputPer1M: 0.1, outputPer1M: 0.4 },
|
|
71
71
|
"gemini-2.0-pro": { inputPer1M: 1.25, outputPer1M: 5.0 },
|
|
72
|
-
// Gemini 1.5 series (
|
|
72
|
+
// Gemini 1.5 series (kept for legacy records)
|
|
73
73
|
"gemini-1.5-pro": { inputPer1M: 1.25, outputPer1M: 5.0 },
|
|
74
74
|
"gemini-1.5-flash": { inputPer1M: 0.075, outputPer1M: 0.3 },
|
|
75
75
|
},
|
|
@@ -100,15 +100,17 @@ export const PRICING = {
|
|
|
100
100
|
},
|
|
101
101
|
};
|
|
102
102
|
/**
|
|
103
|
-
*
|
|
104
|
-
* read =
|
|
105
|
-
*
|
|
106
|
-
* - OpenAI
|
|
107
|
-
* - Anthropic
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* -
|
|
103
|
+
* Per-provider prompt-cache price multipliers (as a ratio of the input rate).
|
|
104
|
+
* read = cache read (discounted) / write = cache write (premium, Anthropic only)
|
|
105
|
+
* Verified 2026-06-27 against each provider's official pricing:
|
|
106
|
+
* - OpenAI automatic caching: reads at 50% of input; no write charge
|
|
107
|
+
* - Anthropic explicit caching: reads at 10% / writes at 125% (5-minute TTL
|
|
108
|
+
* default). Note: 1-hour-TTL writes cost 200%, but we lack a token
|
|
109
|
+
* breakdown column, so we bill at the default 5-minute rate of 125%
|
|
110
|
+
* (write cost is slightly underestimated only when the 1h cache is used).
|
|
111
|
+
* - Gemini context cache: reads at 10% (revised from 25% to 10% in 2026-06,
|
|
112
|
+
* officially verified)
|
|
113
|
+
* - Mistral: no cache pricing
|
|
112
114
|
*/
|
|
113
115
|
const CACHE_MULTIPLIERS = {
|
|
114
116
|
openai: { read: 0.5, write: 1.0 },
|
|
@@ -127,13 +129,13 @@ export function calculateCost(provider, model, promptTokens, completionTokens) {
|
|
|
127
129
|
.costUsd;
|
|
128
130
|
}
|
|
129
131
|
/**
|
|
130
|
-
*
|
|
132
|
+
* USD cost accounting for cache tokens, plus the cache savings amount.
|
|
131
133
|
*
|
|
132
|
-
* promptTokens
|
|
133
|
-
* uncached = promptTokens − cachedReadTokens − cachedWriteTokens(
|
|
134
|
+
* promptTokens is the total input including cache reads and writes. Breakdown:
|
|
135
|
+
* uncached = promptTokens − cachedReadTokens − cachedWriteTokens (floored at 0)
|
|
134
136
|
* cost = uncached×input + cachedRead×input×readMult + cachedWrite×input×writeMult + completion×output
|
|
135
|
-
* savings = cachedRead×input×(1 − readMult) ←
|
|
136
|
-
*
|
|
137
|
+
* savings = cachedRead×input×(1 − readMult) ← value of the read discount (the write premium is not included in savings)
|
|
138
|
+
* Unknown models return {0, 0}.
|
|
137
139
|
*/
|
|
138
140
|
export function calculateCostWithCache(provider, model, promptTokens, completionTokens, cachedReadTokens, cachedWriteTokens) {
|
|
139
141
|
const providerPricing = PRICING[provider];
|
|
@@ -180,8 +182,8 @@ function warnOnceUnknown(key, message) {
|
|
|
180
182
|
return;
|
|
181
183
|
warnedUnknownModels.add(key);
|
|
182
184
|
// eslint-disable-next-line no-console
|
|
183
|
-
console.warn(`[argosvix] ${message} — pricing returned 0.
|
|
184
|
-
`
|
|
185
|
+
console.warn(`[argosvix] ${message} — pricing returned 0. Cost for this model will not be tracked` +
|
|
186
|
+
` until the SDK's pricing table is updated. Check for a newer @argosvix/sdk release.`);
|
|
185
187
|
}
|
|
186
188
|
/** Test-only helper: reset the warn-once state. Do not call from production code. */
|
|
187
189
|
export function __resetPricingWarnings() {
|
package/dist/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,OAAO,GAAmD;IACrE,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE;QACjD
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|
package/dist/prompts.d.ts
CHANGED
|
@@ -1,45 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* SDK-side resolution of deployed prompts.
|
|
3
3
|
*
|
|
4
|
-
* backend GET /v1/prompts/resolve?name=&label= (
|
|
5
|
-
*
|
|
6
|
-
* `prompt`
|
|
4
|
+
* Calls the backend GET /v1/prompts/resolve?name=&label= (available on the
|
|
5
|
+
* Free plan) and returns the current version for (name, label). Combined with
|
|
6
|
+
* withPrompt(), LLM calls made with that prompt automatically get a `prompt`
|
|
7
|
+
* tag ({name}@v{version}), enabling per-version quality/cost comparison.
|
|
7
8
|
*
|
|
8
9
|
* const p = await resolvePrompt("support-bot", { apiKey: process.env.ARGOSVIX_API_KEY! });
|
|
9
10
|
* await withPrompt(p, async () => {
|
|
10
11
|
* await client.chat.completions.create({ ... p.template ... });
|
|
11
12
|
* });
|
|
12
13
|
*
|
|
13
|
-
*
|
|
14
|
-
* - TTL
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* Design:
|
|
15
|
+
* - TTL cache (default 60 seconds) avoids a resolve fetch on every call
|
|
16
|
+
* (production hot path).
|
|
17
|
+
* - On fetch failure, a stale fallback returns the cached value even if it
|
|
18
|
+
* has expired (a transient prompt-fetch outage must not stop the app's
|
|
19
|
+
* main flow). If there is no cache either, it throws.
|
|
17
20
|
*/
|
|
18
21
|
export interface ResolvePromptOptions {
|
|
19
|
-
/** Argosvix API
|
|
22
|
+
/** Argosvix API key (argk_...). */
|
|
20
23
|
apiKey: string;
|
|
21
|
-
/**
|
|
24
|
+
/** Deployment environment label. Defaults to "production". */
|
|
22
25
|
label?: string;
|
|
23
|
-
/**
|
|
26
|
+
/** Backend endpoint. Defaults to https://ingest.argosvix.com. */
|
|
24
27
|
endpoint?: string;
|
|
25
|
-
/**
|
|
28
|
+
/** Cache TTL in ms. 0 disables caching. Defaults to 60000. */
|
|
26
29
|
cacheTtlMs?: number;
|
|
27
30
|
signal?: AbortSignal;
|
|
28
31
|
}
|
|
29
32
|
export interface ResolvedPrompt {
|
|
30
|
-
/**
|
|
33
|
+
/** Version ID in the prompt registry. */
|
|
31
34
|
id: string;
|
|
32
35
|
name: string;
|
|
33
36
|
version: number;
|
|
34
|
-
/**
|
|
37
|
+
/** Prompt body (template). */
|
|
35
38
|
template: string;
|
|
36
|
-
/** {{var}}
|
|
39
|
+
/** List of {{var}} variable names (if specified at registration). */
|
|
37
40
|
variables: string[] | null;
|
|
38
41
|
label: string;
|
|
39
|
-
/** withPrompt / tags.prompt
|
|
42
|
+
/** Tag value used by withPrompt / tags.prompt ({name}@v{version}). */
|
|
40
43
|
tag: string;
|
|
41
44
|
}
|
|
42
|
-
/**
|
|
45
|
+
/** Test-only: clears the cache. */
|
|
43
46
|
export declare function _clearPromptCache(): void;
|
|
44
47
|
export declare function resolvePrompt(name: string, options: ResolvePromptOptions): Promise<ResolvedPrompt>;
|
|
45
48
|
//# sourceMappingURL=prompts.d.ts.map
|
package/dist/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;CACb;AASD,mCAAmC;AACnC,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAuEzB"}
|
package/dist/prompts.js
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* SDK-side resolution of deployed prompts.
|
|
3
3
|
*
|
|
4
|
-
* backend GET /v1/prompts/resolve?name=&label= (
|
|
5
|
-
*
|
|
6
|
-
* `prompt`
|
|
4
|
+
* Calls the backend GET /v1/prompts/resolve?name=&label= (available on the
|
|
5
|
+
* Free plan) and returns the current version for (name, label). Combined with
|
|
6
|
+
* withPrompt(), LLM calls made with that prompt automatically get a `prompt`
|
|
7
|
+
* tag ({name}@v{version}), enabling per-version quality/cost comparison.
|
|
7
8
|
*
|
|
8
9
|
* const p = await resolvePrompt("support-bot", { apiKey: process.env.ARGOSVIX_API_KEY! });
|
|
9
10
|
* await withPrompt(p, async () => {
|
|
10
11
|
* await client.chat.completions.create({ ... p.template ... });
|
|
11
12
|
* });
|
|
12
13
|
*
|
|
13
|
-
*
|
|
14
|
-
* - TTL
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* Design:
|
|
15
|
+
* - TTL cache (default 60 seconds) avoids a resolve fetch on every call
|
|
16
|
+
* (production hot path).
|
|
17
|
+
* - On fetch failure, a stale fallback returns the cached value even if it
|
|
18
|
+
* has expired (a transient prompt-fetch outage must not stop the app's
|
|
19
|
+
* main flow). If there is no cache either, it throws.
|
|
17
20
|
*/
|
|
18
21
|
const DEFAULT_ENDPOINT = "https://ingest.argosvix.com";
|
|
19
22
|
const DEFAULT_LABEL = "production";
|
|
20
23
|
const DEFAULT_TTL_MS = 60_000;
|
|
21
24
|
const cache = new Map();
|
|
22
|
-
/**
|
|
25
|
+
/** Test-only: clears the cache. */
|
|
23
26
|
export function _clearPromptCache() {
|
|
24
27
|
cache.clear();
|
|
25
28
|
}
|
|
@@ -27,17 +30,18 @@ export async function resolvePrompt(name, options) {
|
|
|
27
30
|
const endpoint = options.endpoint ?? DEFAULT_ENDPOINT;
|
|
28
31
|
const label = options.label ?? DEFAULT_LABEL;
|
|
29
32
|
const ttl = options.cacheTtlMs ?? DEFAULT_TTL_MS;
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
+
// Include the apiKey in the cache key: in setups where a single process uses
|
|
34
|
+
// keys for multiple accounts, this prevents cross-account contamination where
|
|
35
|
+
// one account picks up another account's cached prompt (same reasoning as the
|
|
36
|
+
// observation sink's cross-account guard). In-memory only; never persisted.
|
|
33
37
|
const key = `${options.apiKey}|${endpoint}|${name}|${label}`;
|
|
34
38
|
const hit = cache.get(key);
|
|
35
39
|
if (hit && hit.expiresAt > Date.now())
|
|
36
40
|
return hit.value;
|
|
37
41
|
let res;
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
//
|
|
42
|
+
// Default 10-second timeout (mirroring the Python SDK). A hanging resolve
|
|
43
|
+
// would block the app's main flow (fetch the prompt, then call the LLM), so
|
|
44
|
+
// always enforce an upper bound. A caller-provided signal takes precedence.
|
|
41
45
|
const ctrl = options.signal ? null : new AbortController();
|
|
42
46
|
const timer = ctrl ? setTimeout(() => ctrl.abort(), 10_000) : null;
|
|
43
47
|
try {
|
|
@@ -50,7 +54,7 @@ export async function resolvePrompt(name, options) {
|
|
|
50
54
|
}
|
|
51
55
|
catch (err) {
|
|
52
56
|
if (hit)
|
|
53
|
-
return hit.value; //
|
|
57
|
+
return hit.value; // network failure / timeout = stale fallback
|
|
54
58
|
throw err;
|
|
55
59
|
}
|
|
56
60
|
finally {
|
|
@@ -59,7 +63,7 @@ export async function resolvePrompt(name, options) {
|
|
|
59
63
|
}
|
|
60
64
|
if (!res.ok) {
|
|
61
65
|
if (hit && res.status >= 500)
|
|
62
|
-
return hit.value; //
|
|
66
|
+
return hit.value; // stale allowed only for server failures
|
|
63
67
|
const body = (await res.json().catch(() => ({})));
|
|
64
68
|
throw new Error(`resolvePrompt(${name}, ${label}) failed (${res.status}): ${body.error ?? ""}`);
|
|
65
69
|
}
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|