@corenel/harness 0.7.2 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/acp/agentMap.d.ts +32 -1
- package/dist/acp/agentMap.d.ts.map +1 -1
- package/dist/acp/agentMap.js +35 -1
- package/dist/acp/agentMap.js.map +1 -1
- package/dist/core/pricing.d.ts +14 -0
- package/dist/core/pricing.d.ts.map +1 -1
- package/dist/core/pricing.js +49 -0
- package/dist/core/pricing.js.map +1 -1
- package/dist/guardrail/builtins.js +1 -1
- package/dist/guardrail/builtins.js.map +1 -1
- package/dist/providers/gateway.d.ts +37 -4
- package/dist/providers/gateway.d.ts.map +1 -1
- package/dist/providers/gateway.js +185 -30
- package/dist/providers/gateway.js.map +1 -1
- package/dist/sidecar/host.d.ts +11 -0
- package/dist/sidecar/host.d.ts.map +1 -1
- package/dist/sidecar/host.js +4 -0
- package/dist/sidecar/host.js.map +1 -1
- package/dist/todos.d.ts +17 -10
- package/dist/todos.d.ts.map +1 -1
- package/dist/todos.js +112 -32
- package/dist/todos.js.map +1 -1
- package/dist/tools/namespaces.js +1 -1
- package/dist/tools/namespaces.js.map +1 -1
- package/package.json +2 -2
package/dist/acp/agentMap.d.ts
CHANGED
|
@@ -29,6 +29,37 @@ export interface AcpSessionUpdate {
|
|
|
29
29
|
*/
|
|
30
30
|
export declare function eventToSessionUpdate(ev: AgentEvent): AcpSessionUpdate | null;
|
|
31
31
|
/** Map our loop's stop reason onto ACP's. Unknown reasons report `end_turn`
|
|
32
|
-
* rather than inventing a value the client would not recognize.
|
|
32
|
+
* rather than inventing a value the client would not recognize.
|
|
33
|
+
*
|
|
34
|
+
* WHAT ARRIVES HERE IS NORMALIZED. The daemon's ACP prompt reads the reason off
|
|
35
|
+
* a run whose executor already put it through the shared vocabulary
|
|
36
|
+
* (`executor.ts`'s `normalizeRunStatus`), so the raw provider reasons reach
|
|
37
|
+
* this function only from a caller that skipped that edge. Both spellings are
|
|
38
|
+
* kept for that reason.
|
|
39
|
+
*
|
|
40
|
+
* `policy` -> `refusal` is that normalization's consequence, and it is the
|
|
41
|
+
* honest mapping for everything `policy` names: our own policy engine stopping
|
|
42
|
+
* the run, and the provider's two guardrails -- declining to answer
|
|
43
|
+
* ('refusal') and blocking the output it produced ('content_filter'). ACP's
|
|
44
|
+
* `refusal` means the agent would not continue, which is true of all of them;
|
|
45
|
+
* `end_turn` -- what these used to report -- tells the client the turn ended
|
|
46
|
+
* normally, which is true of none.
|
|
47
|
+
*
|
|
48
|
+
* `stuck` -> `max_tokens` is that same argument, applied to the other end of
|
|
49
|
+
* the vocabulary. An ACP stop reason describes the TURN'S OUTCOME, not which
|
|
50
|
+
* component decided it. `stuck` reaches here from TWO causes: the loop's
|
|
51
|
+
* no-progress guard (the model repeating one tool call, `loop.ts`) and a
|
|
52
|
+
* provider cutting the output off at its token ceiling (normalized from
|
|
53
|
+
* 'length'/'max_tokens'). ACP's `max_tokens` is exact for the second and
|
|
54
|
+
* IMPRECISE for the first -- a no-progress stop is reported to the client as a
|
|
55
|
+
* token limit the run did not actually hit, and this mapping accepts that
|
|
56
|
+
* knowingly. It is still the better answer, because both causes are "the turn
|
|
57
|
+
* did not finish" and `end_turn` is wrong for BOTH: trading a precise lie
|
|
58
|
+
* ("it completed") for an imprecise truth ("it stopped at a limit") is the
|
|
59
|
+
* right trade for a client deciding whether to continue the conversation.
|
|
60
|
+
*
|
|
61
|
+
* Note what is NOT here: the local budget gate normalizes to its own `budget`
|
|
62
|
+
* member and still reports `end_turn`, along with `error` and `stalled` --
|
|
63
|
+
* ACP's enum has no value for any of them. */
|
|
33
64
|
export declare function stopReasonForAcp(reason: string): string;
|
|
34
65
|
//# sourceMappingURL=agentMap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentMap.d.ts","sourceRoot":"","sources":["../../acp/agentMap.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAmC3C;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CAQ9D;AAED,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI,CA6B5E;AAED;
|
|
1
|
+
{"version":3,"file":"agentMap.d.ts","sourceRoot":"","sources":["../../acp/agentMap.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAmC3C;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CAQ9D;AAED,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI,CA6B5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CAgC8C;AAC9C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBvD"}
|
package/dist/acp/agentMap.js
CHANGED
|
@@ -92,7 +92,38 @@ export function eventToSessionUpdate(ev) {
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
/** Map our loop's stop reason onto ACP's. Unknown reasons report `end_turn`
|
|
95
|
-
* rather than inventing a value the client would not recognize.
|
|
95
|
+
* rather than inventing a value the client would not recognize.
|
|
96
|
+
*
|
|
97
|
+
* WHAT ARRIVES HERE IS NORMALIZED. The daemon's ACP prompt reads the reason off
|
|
98
|
+
* a run whose executor already put it through the shared vocabulary
|
|
99
|
+
* (`executor.ts`'s `normalizeRunStatus`), so the raw provider reasons reach
|
|
100
|
+
* this function only from a caller that skipped that edge. Both spellings are
|
|
101
|
+
* kept for that reason.
|
|
102
|
+
*
|
|
103
|
+
* `policy` -> `refusal` is that normalization's consequence, and it is the
|
|
104
|
+
* honest mapping for everything `policy` names: our own policy engine stopping
|
|
105
|
+
* the run, and the provider's two guardrails -- declining to answer
|
|
106
|
+
* ('refusal') and blocking the output it produced ('content_filter'). ACP's
|
|
107
|
+
* `refusal` means the agent would not continue, which is true of all of them;
|
|
108
|
+
* `end_turn` -- what these used to report -- tells the client the turn ended
|
|
109
|
+
* normally, which is true of none.
|
|
110
|
+
*
|
|
111
|
+
* `stuck` -> `max_tokens` is that same argument, applied to the other end of
|
|
112
|
+
* the vocabulary. An ACP stop reason describes the TURN'S OUTCOME, not which
|
|
113
|
+
* component decided it. `stuck` reaches here from TWO causes: the loop's
|
|
114
|
+
* no-progress guard (the model repeating one tool call, `loop.ts`) and a
|
|
115
|
+
* provider cutting the output off at its token ceiling (normalized from
|
|
116
|
+
* 'length'/'max_tokens'). ACP's `max_tokens` is exact for the second and
|
|
117
|
+
* IMPRECISE for the first -- a no-progress stop is reported to the client as a
|
|
118
|
+
* token limit the run did not actually hit, and this mapping accepts that
|
|
119
|
+
* knowingly. It is still the better answer, because both causes are "the turn
|
|
120
|
+
* did not finish" and `end_turn` is wrong for BOTH: trading a precise lie
|
|
121
|
+
* ("it completed") for an imprecise truth ("it stopped at a limit") is the
|
|
122
|
+
* right trade for a client deciding whether to continue the conversation.
|
|
123
|
+
*
|
|
124
|
+
* Note what is NOT here: the local budget gate normalizes to its own `budget`
|
|
125
|
+
* member and still reports `end_turn`, along with `error` and `stalled` --
|
|
126
|
+
* ACP's enum has no value for any of them. */
|
|
96
127
|
export function stopReasonForAcp(reason) {
|
|
97
128
|
switch (reason) {
|
|
98
129
|
case 'cancelled':
|
|
@@ -101,8 +132,11 @@ export function stopReasonForAcp(reason) {
|
|
|
101
132
|
case 'max-turns':
|
|
102
133
|
case 'max_turns':
|
|
103
134
|
return 'max_turn_requests';
|
|
135
|
+
case 'policy':
|
|
104
136
|
case 'refusal':
|
|
105
137
|
return 'refusal';
|
|
138
|
+
case 'stuck':
|
|
139
|
+
return 'max_tokens';
|
|
106
140
|
default:
|
|
107
141
|
return 'end_turn';
|
|
108
142
|
}
|
package/dist/acp/agentMap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentMap.js","sourceRoot":"","sources":["../../acp/agentMap.ts"],"names":[],"mappings":"AAmBA,4EAA4E;AAC5E,MAAM,UAAU,GAAgC;IAC9C,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,MAAM;IAClB,YAAY,EAAE,QAAQ;IACtB,eAAe,EAAE,QAAQ;IACzB,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,OAAO;IACnB,cAAc,EAAE,OAAO;IACvB,UAAU,EAAE,OAAO;IACnB,QAAQ,EAAE,OAAO;CAClB,CAAC;AAEF;+CAC+C;AAC/C,MAAM,eAAe,GAAgC;IACnD,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,OAAO;IACZ,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,OAAO;IACf,GAAG,EAAE,OAAO;IACZ,KAAK,EAAE,OAAO;CACf,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,aAAqB;IAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IACxE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,EAAE;QAAE,OAAO,eAAe,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAc;IACjD,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,iBAAiB;YACpB,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;QAC7F,KAAK,WAAW;YACd,OAAO;gBACL,aAAa,EAAE,WAAW;gBAC1B,UAAU,EAAE,EAAE,CAAC,EAAE;gBACjB,KAAK,EAAE,EAAE,CAAC,IAAI;gBACd,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,aAAa;gBACrB,QAAQ,EAAE,EAAE,CAAC,IAAI;aAClB,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO;gBACL,aAAa,EAAE,kBAAkB;gBACjC,UAAU,EAAE,EAAE,CAAC,EAAE;gBACjB,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;gBAC3C,SAAS,EAAE,EAAE,CAAC,MAAM;aACrB,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;QAC3G;YACE,uEAAuE;YACvE,oEAAoE;YACpE,qEAAqE;YACrE,8DAA8D;YAC9D,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;
|
|
1
|
+
{"version":3,"file":"agentMap.js","sourceRoot":"","sources":["../../acp/agentMap.ts"],"names":[],"mappings":"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"}
|
package/dist/core/pricing.d.ts
CHANGED
|
@@ -5,4 +5,18 @@ export interface ModelRates {
|
|
|
5
5
|
}
|
|
6
6
|
export declare const CACHED_INPUT_FRACTION = 0.5;
|
|
7
7
|
export declare function priceUsageWith(usage: Usage, rates: ModelRates | null): number | null;
|
|
8
|
+
export type PriceTable = Map<string, ModelRates>;
|
|
9
|
+
/** A usd cap can only be enforced against rates that actually cost something.
|
|
10
|
+
* Absent rates (the model never entered the table) and an all-zero rate both
|
|
11
|
+
* mean "spend will always read $0" -- neither can enforce a `maxUsd`. Every
|
|
12
|
+
* surface with a usd ceiling asks THIS question, so they cannot drift: the
|
|
13
|
+
* crew-run guard (executor.ts), the room guard (roomDeps.ts), and `corenel
|
|
14
|
+
* run`. */
|
|
15
|
+
export declare function pricedForUsd(rates: ModelRates | null): boolean;
|
|
16
|
+
/** Hydrate the rate table from the SAME backend the app uses (GET
|
|
17
|
+
* <endpoint>/llm-providers/available, Bearer login token), so prices are the
|
|
18
|
+
* current ones rather than a drifting static copy. An empty table means
|
|
19
|
+
* "cannot price" -- every caller must fail closed on a usd cap rather than
|
|
20
|
+
* treat unknown as free. */
|
|
21
|
+
export declare function hydratePrices(endpoint: string, getToken: () => Promise<string | null>, fetchImpl?: typeof fetch): Promise<PriceTable>;
|
|
8
22
|
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../core/pricing.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,WAAW,UAAU;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AACjE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAQpF"}
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../core/pricing.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,WAAW,UAAU;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AACjE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAQpF;AAYD,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEjD;;;;;WAKW;AACX,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAG9D;AASD;;;;4BAI4B;AAC5B,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EACtC,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,UAAU,CAAC,CAuBrB"}
|
package/dist/core/pricing.js
CHANGED
|
@@ -9,4 +9,53 @@ export function priceUsageWith(usage, rates) {
|
|
|
9
9
|
+ (cached / perM) * rates.inPrice * CACHED_INPUT_FRACTION
|
|
10
10
|
+ (usage.completionTokens / perM) * rates.outPrice;
|
|
11
11
|
}
|
|
12
|
+
/** A usd cap can only be enforced against rates that actually cost something.
|
|
13
|
+
* Absent rates (the model never entered the table) and an all-zero rate both
|
|
14
|
+
* mean "spend will always read $0" -- neither can enforce a `maxUsd`. Every
|
|
15
|
+
* surface with a usd ceiling asks THIS question, so they cannot drift: the
|
|
16
|
+
* crew-run guard (executor.ts), the room guard (roomDeps.ts), and `corenel
|
|
17
|
+
* run`. */
|
|
18
|
+
export function pricedForUsd(rates) {
|
|
19
|
+
if (!rates)
|
|
20
|
+
return false;
|
|
21
|
+
return rates.inPrice > 0 || rates.outPrice > 0;
|
|
22
|
+
}
|
|
23
|
+
/** Hydrate the rate table from the SAME backend the app uses (GET
|
|
24
|
+
* <endpoint>/llm-providers/available, Bearer login token), so prices are the
|
|
25
|
+
* current ones rather than a drifting static copy. An empty table means
|
|
26
|
+
* "cannot price" -- every caller must fail closed on a usd cap rather than
|
|
27
|
+
* treat unknown as free. */
|
|
28
|
+
export async function hydratePrices(endpoint, getToken, fetchImpl = fetch) {
|
|
29
|
+
const table = new Map();
|
|
30
|
+
let token = null;
|
|
31
|
+
try {
|
|
32
|
+
token = await getToken();
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
token = null;
|
|
36
|
+
}
|
|
37
|
+
if (!token)
|
|
38
|
+
return table;
|
|
39
|
+
try {
|
|
40
|
+
const res = await fetchImpl(`${endpoint.replace(/\/$/, '')}/llm-providers/available`, {
|
|
41
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
42
|
+
});
|
|
43
|
+
if (!res.ok)
|
|
44
|
+
return table;
|
|
45
|
+
const json = (await res.json());
|
|
46
|
+
for (const p of json.providers ?? []) {
|
|
47
|
+
for (const m of p.models ?? []) {
|
|
48
|
+
// An UNPRICED model must stay ABSENT from the table, never entered at
|
|
49
|
+
// rate 0: a zero entry is truthy, so a fail-closed usd guard would pass
|
|
50
|
+
// and then price every turn at $0, making `maxUsd` unenforceable.
|
|
51
|
+
// Absence is what makes the guard trip.
|
|
52
|
+
if (m.inputPrice == null || m.outputPrice == null)
|
|
53
|
+
continue;
|
|
54
|
+
table.set(m.model, { inPrice: m.inputPrice, outPrice: m.outputPrice });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch { /* leave the table empty -> caller fails closed on a usd cap */ }
|
|
59
|
+
return table;
|
|
60
|
+
}
|
|
12
61
|
//# sourceMappingURL=pricing.js.map
|
package/dist/core/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../core/pricing.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,MAAM,UAAU,cAAc,CAAC,KAAY,EAAE,KAAwB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAS,CAAC;IACvB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;UACjC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,qBAAqB;UACvD,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;AACvD,CAAC"}
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../core/pricing.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,MAAM,UAAU,cAAc,CAAC,KAAY,EAAE,KAAwB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAS,CAAC;IACvB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;UACjC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,qBAAqB;UACvD,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;AACvD,CAAC;AAcD;;;;;WAKW;AACX,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AACjD,CAAC;AASD;;;;4BAI4B;AAC5B,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,QAAsC,EACtC,YAA0B,KAAK;IAE/B,MAAM,KAAK,GAAe,IAAI,GAAG,EAAE,CAAC;IACpC,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,CAAC;QAAC,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,EAAE;YACpF,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwC,CAAC;QACvE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBAC/B,sEAAsE;gBACtE,wEAAwE;gBACxE,kEAAkE;gBAClE,wCAAwC;gBACxC,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI;oBAAE,SAAS;gBAC5D,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,+DAA+D,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -24,7 +24,7 @@ export const READ_ONLY_POLICY = {
|
|
|
24
24
|
// Sidecar fs write tool addresses as fs:sidecar_fs_write_file; cover it and any
|
|
25
25
|
// future fs mutator with the explicit deny (reads address fs:sidecar_fs_read_file,
|
|
26
26
|
// but mutating fs tools are caught here AND by mutatingDefault below).
|
|
27
|
-
'fs:sidecar_fs_write_file',
|
|
27
|
+
'fs:sidecar_fs_write_file', 'fs:sidecar_fs_write_bytes',
|
|
28
28
|
// Shell execution (sidecar_shell_exec, address shell:sidecar_shell_exec) is a
|
|
29
29
|
// side effect — denied outright under read-only, regardless of its own permission.
|
|
30
30
|
'shell:*',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../guardrail/builtins.ts"],"names":[],"mappings":"AAQA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAW;IACrC,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,6DAA6D;IAC1E,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE;QACX,qBAAqB,EAAE,OAAO,EAAE,8DAA8D;QAC9F,UAAU,EAAE,MAAM,EAAE,gDAAgD;KACrE;IACD,+EAA+E;CAChF,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAW;IACtC,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,4DAA4D;IACzE,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE;QACL,IAAI,EAAE;YACJ,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;YACrE,gFAAgF;YAChF,mFAAmF;YACnF,uEAAuE;YACvE,0BAA0B;
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../guardrail/builtins.ts"],"names":[],"mappings":"AAQA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAW;IACrC,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,6DAA6D;IAC1E,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE;QACX,qBAAqB,EAAE,OAAO,EAAE,8DAA8D;QAC9F,UAAU,EAAE,MAAM,EAAE,gDAAgD;KACrE;IACD,+EAA+E;CAChF,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAW;IACtC,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,4DAA4D;IACzE,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE;QACL,IAAI,EAAE;YACJ,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB;YACrE,gFAAgF;YAChF,mFAAmF;YACnF,uEAAuE;YACvE,0BAA0B,EAAE,2BAA2B;YACvD,8EAA8E;YAC9E,mFAAmF;YACnF,SAAS;YACT,oBAAoB,EAAE,eAAe,EAAE,sBAAsB;YAC7D,UAAU;SACX;KACF;IACD,WAAW,EAAE;QACX,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;QACrG,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM;QACrF,UAAU,EAAE,MAAM;KACnB;IACD,6EAA6E;IAC7E,uEAAuE;IACvE,2EAA2E;IAC3E,8EAA8E;IAC9E,8EAA8E;IAC9E,eAAe,EAAE,MAAM;CACxB,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAW;IACvC,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,iFAAiF;IAC9F,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE;QACX,UAAU,EAAE,KAAK,EAAE,0DAA0D;KAC9E;IACD,iBAAiB,EAAE,OAAO;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,QAAQ,EAAE,eAAe;IACzB,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,iBAAiB;CAC9B,CAAC"}
|
|
@@ -44,6 +44,37 @@ export declare function streamCompletion(client: OpenAI, params: StreamCompletio
|
|
|
44
44
|
export declare function createChatClient(auth: IAuthTokenProvider, opts?: {
|
|
45
45
|
origin?: string;
|
|
46
46
|
}): OpenAI;
|
|
47
|
+
/** A custom OpenAI-compatible provider as the router sees it. Carries the API
|
|
48
|
+
* key: never log a value of this type. */
|
|
49
|
+
export interface CustomProviderRoute {
|
|
50
|
+
baseURL: string;
|
|
51
|
+
apiKey: string;
|
|
52
|
+
models: string[];
|
|
53
|
+
}
|
|
54
|
+
/** Where a run's model calls may go. `gateway: false` means the hosted API is
|
|
55
|
+
* never used for a model call: an unclaimed model is refused locally. */
|
|
56
|
+
export interface ModelRouting {
|
|
57
|
+
gateway: boolean;
|
|
58
|
+
providers: CustomProviderRoute[];
|
|
59
|
+
}
|
|
60
|
+
export type ModelRoute = {
|
|
61
|
+
kind: 'custom';
|
|
62
|
+
provider: CustomProviderRoute;
|
|
63
|
+
} | {
|
|
64
|
+
kind: 'gateway';
|
|
65
|
+
} | {
|
|
66
|
+
kind: 'refused';
|
|
67
|
+
};
|
|
68
|
+
/** A custom provider that lists the model wins, whatever `gateway` says. */
|
|
69
|
+
export declare function routeForModel(model: string, routing: ModelRouting): ModelRoute;
|
|
70
|
+
export declare function modelRouteRefusalMessage(model: string): string;
|
|
71
|
+
/** A client whose every request is routed by the model it names: to the custom
|
|
72
|
+
* provider that serves it, else to the gateway when `routing.gateway` is true,
|
|
73
|
+
* else refused with no request made. Pure data in (no storage reads), so it is
|
|
74
|
+
* Worker-safe. */
|
|
75
|
+
export declare function createRoutedChatClient(auth: IAuthTokenProvider, routing: ModelRouting, opts?: {
|
|
76
|
+
origin?: string;
|
|
77
|
+
}): OpenAI;
|
|
47
78
|
/** Host-injected model→custom-provider lookup. The kernel transport knows how to
|
|
48
79
|
* build a custom client but NOT how the host decides which model belongs to one
|
|
49
80
|
* (that lookup reads app storage) — so the app registers it at boot. Default:
|
|
@@ -53,11 +84,13 @@ export type CustomProviderResolver = (model: string) => {
|
|
|
53
84
|
apiKey: string;
|
|
54
85
|
} | null | undefined;
|
|
55
86
|
export declare function setCustomProviderResolver(fn: CustomProviderResolver): void;
|
|
87
|
+
export declare function setGatewayAllowed(fn: () => boolean): void;
|
|
56
88
|
/** Route a model to its client: a custom OpenAI-compatible provider's direct
|
|
57
|
-
* client when the host's resolver claims the model, else the caller's gateway
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
89
|
+
* client when the host's resolver claims the model, else the caller's gateway
|
|
90
|
+
* when the host allows it, else a client that refuses without a request.
|
|
91
|
+
* The single source of truth for main-thread model->client routing (workflow
|
|
92
|
+
* runner, test runner, ...) so custom-provider handling can't drift between
|
|
93
|
+
* features. Main-thread only -- the resolver reads localStorage. */
|
|
61
94
|
export declare function clientForModel(model: string, gateway: OpenAI): OpenAI;
|
|
62
95
|
/** Host-injected proxy for custom-provider fetches. Returns a Response (e.g. routed
|
|
63
96
|
* through a local sidecar so a loopback LLM dodges browser CORS) or null to fall
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../providers/gateway.ts"],"names":[],"mappings":"AAIA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACxG,OAAO,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAMnE,YAAY,EAAE,KAAK,EAAE,CAAC;AAMtB,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEhD;AAUD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B;;gDAE4C;IAC5C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;+EAC2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAEpF,oHAAoH;AACpH,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,qBAAqB,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,KAAK,CAKnJ;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAmF7B;
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../providers/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,7 +75,7 @@ export async function streamCompletion(client, params, signal, onText) {
|
|
|
75
75
|
* custom BYO endpoint -- rather than trusting each to sanitise its own
|
|
76
76
|
* relaying. */
|
|
77
77
|
const detail = redactSecrets(String((typeof raw === 'string' ? raw : raw?.error || raw?.message) || err?.message || String(e)));
|
|
78
|
-
const msg = typeof err?.status === 'number' ?
|
|
78
|
+
const msg = typeof err?.status === 'number' ? `${statusPrefix(err.status, err.code)}: ${detail}` : detail;
|
|
79
79
|
alog('stream:create-error', msg);
|
|
80
80
|
throw new Error(msg);
|
|
81
81
|
}
|
|
@@ -117,37 +117,172 @@ export async function streamCompletion(client, params, signal, onText) {
|
|
|
117
117
|
alog('stream:end', { chunks: chunkN, contentLen: content.length, toolCalls: toolCalls.length, finishReason, usage });
|
|
118
118
|
return { content, toolCalls, usage, finishReason };
|
|
119
119
|
}
|
|
120
|
+
/* Machine-readable codes on the synthetic error bodies this module builds
|
|
121
|
+
* itself (a routing refusal, an unreachable custom provider). The SDK exposes a
|
|
122
|
+
* body's error.code as APIError.code. */
|
|
123
|
+
const LOCAL_FAILURE = {
|
|
124
|
+
refused: 'model_route_refused',
|
|
125
|
+
unreachable: 'custom_provider_unreachable',
|
|
126
|
+
};
|
|
127
|
+
/** How streamCompletion labels an HTTP-status failure. Only a response that
|
|
128
|
+
* really came back from the gateway is "Gateway NNN"; a locally produced one
|
|
129
|
+
* says so. Every label keeps "Status NNN" / "Gateway NNN" so recovery.ts's
|
|
130
|
+
* statusOf still reads the code and classifies it (both locals are fatal). */
|
|
131
|
+
function statusPrefix(status, code) {
|
|
132
|
+
if (code === LOCAL_FAILURE.refused)
|
|
133
|
+
return `Status ${status} (refused locally, nothing was sent)`;
|
|
134
|
+
if (code === LOCAL_FAILURE.unreachable)
|
|
135
|
+
return `Status ${status} (custom provider unreachable)`;
|
|
136
|
+
return `Gateway ${status}`;
|
|
137
|
+
}
|
|
138
|
+
/** One gateway request: the host's bearer token injected per call (so token
|
|
139
|
+
* refresh is automatic and it works from a Worker), plus the informational
|
|
140
|
+
* origin tag. Shared by the plain gateway client and the routed client, so the
|
|
141
|
+
* two cannot drift in how they authenticate. */
|
|
142
|
+
async function gatewayRequest(auth, opts, url, init) {
|
|
143
|
+
const headers = new Headers(init?.headers);
|
|
144
|
+
alog('gateway:token-wait');
|
|
145
|
+
const token = await auth.getToken().catch(() => null);
|
|
146
|
+
if (token)
|
|
147
|
+
headers.set('Authorization', `Bearer ${token}`);
|
|
148
|
+
else
|
|
149
|
+
headers.delete('Authorization');
|
|
150
|
+
// Static origin tag so the gateway can distinguish daemon-originated runs
|
|
151
|
+
// from interactive browser runs for entitlement metering. Enforcement is
|
|
152
|
+
// entirely server-side -- this is only ever an informational tag, never a
|
|
153
|
+
// client-side gate.
|
|
154
|
+
if (opts.origin)
|
|
155
|
+
headers.set('X-Prompd-Origin', opts.origin);
|
|
156
|
+
alog('gateway:fetch', { url, hasToken: !!token });
|
|
157
|
+
try {
|
|
158
|
+
const res = await fetch(url, { ...init, headers });
|
|
159
|
+
alog('gateway:status', res.status, res.statusText);
|
|
160
|
+
return res;
|
|
161
|
+
}
|
|
162
|
+
catch (e) {
|
|
163
|
+
alog('gateway:fetch-error', String(e?.message || e));
|
|
164
|
+
throw e;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
120
167
|
export function createChatClient(auth, opts = {}) {
|
|
121
168
|
return new OpenAI({
|
|
122
169
|
baseURL: gatewayBaseURL(),
|
|
123
170
|
// Real key lives server-side; this placeholder is replaced per-request by the
|
|
124
|
-
// Clerk token in
|
|
171
|
+
// Clerk token in gatewayRequest. The SDK requires a non-empty value.
|
|
172
|
+
apiKey: 'prompd-gateway',
|
|
173
|
+
dangerouslyAllowBrowser: true,
|
|
174
|
+
fetch: (url, init) => gatewayRequest(auth, opts, String(url), init),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/** A custom provider that lists the model wins, whatever `gateway` says. */
|
|
178
|
+
export function routeForModel(model, routing) {
|
|
179
|
+
const provider = routing.providers.find((p) => p.models.includes(model));
|
|
180
|
+
if (provider)
|
|
181
|
+
return { kind: 'custom', provider };
|
|
182
|
+
return routing.gateway ? { kind: 'gateway' } : { kind: 'refused' };
|
|
183
|
+
}
|
|
184
|
+
export function modelRouteRefusalMessage(model) {
|
|
185
|
+
return `Model "${model}" is not served by any of your custom providers, and routing model calls through the hosted API is turned off. `
|
|
186
|
+
+ 'Pick a model from a custom provider, or turn routing back on in Settings > Models.';
|
|
187
|
+
}
|
|
188
|
+
/* A refusal is a synthetic 403, not a thrown fetch error: the SDK wraps a
|
|
189
|
+
* thrown fetch in "Connection error." (losing the reason) and retries it,
|
|
190
|
+
* while a 4xx is surfaced with its body's message and never retried.
|
|
191
|
+
* Its body carries LOCAL_FAILURE.refused, so streamCompletion reports it as
|
|
192
|
+
* "Status 403 (refused locally, nothing was sent): <reason>" -- not as the
|
|
193
|
+
* gateway, which was never contacted. */
|
|
194
|
+
function refusalResponse(model) {
|
|
195
|
+
return new Response(JSON.stringify({ error: { message: modelRouteRefusalMessage(model), code: LOCAL_FAILURE.refused } }), { status: 403, headers: { 'content-type': 'application/json' } });
|
|
196
|
+
}
|
|
197
|
+
/** The request body's `model`, or null when it is not a JSON object naming one. */
|
|
198
|
+
function modelOfBody(body) {
|
|
199
|
+
if (typeof body !== 'string')
|
|
200
|
+
return null;
|
|
201
|
+
try {
|
|
202
|
+
const parsed = JSON.parse(body);
|
|
203
|
+
const model = parsed !== null && typeof parsed === 'object' ? parsed.model : undefined;
|
|
204
|
+
return typeof model === 'string' ? model : null;
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/** One request to a custom provider with its own key: never the host token,
|
|
211
|
+
* never the origin tag. Loopback URLs may go through the injected local proxy
|
|
212
|
+
* (a sidecar), exactly as createCustomClient does. */
|
|
213
|
+
async function customRequest(provider, url, init) {
|
|
214
|
+
const headers = new Headers(init?.headers);
|
|
215
|
+
headers.set('Authorization', `Bearer ${provider.apiKey || 'no-key'}`);
|
|
216
|
+
headers.delete('X-Prompd-Origin');
|
|
217
|
+
const req = { ...init, headers };
|
|
218
|
+
const proxied = localFetchProxy(url, req);
|
|
219
|
+
try {
|
|
220
|
+
return await (proxied ?? fetch(url, req));
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
// An abort stays an abort: the SDK reads it (with the aborted signal) as
|
|
224
|
+
// the user's Stop, which must never turn into a provider error.
|
|
225
|
+
if (req.signal?.aborted || isAbortError(e))
|
|
226
|
+
throw e;
|
|
227
|
+
alog('custom:fetch-error', hostOf(url));
|
|
228
|
+
return unreachableResponse(url);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/** By name, not instanceof: a DOMException is not an Error in every runtime. */
|
|
232
|
+
function isAbortError(e) {
|
|
233
|
+
return e !== null && typeof e === 'object' && e.name === 'AbortError';
|
|
234
|
+
}
|
|
235
|
+
/** The host (and port) of a URL, for a message: never the path or query, and
|
|
236
|
+
* never anything from the headers, so a key cannot ride along. */
|
|
237
|
+
function hostOf(url) {
|
|
238
|
+
try {
|
|
239
|
+
return new URL(url).host;
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return '(unparseable URL)';
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function customProviderUnreachableMessage(url) {
|
|
246
|
+
return `Could not reach your custom provider at ${hostOf(url)}: the browser's request failed with no response `
|
|
247
|
+
+ "(the server is down, the URL is wrong, or it does not allow this page's origin -- CORS). "
|
|
248
|
+
+ "Check the provider URL. For a local server, allow this page's origin (for Ollama, set OLLAMA_ORIGINS).";
|
|
249
|
+
}
|
|
250
|
+
/* A thrown fetch becomes a synthetic 400 for the same reason a refusal is a
|
|
251
|
+
* synthetic 403: the SDK wraps a throw in an opaque "Connection error." and
|
|
252
|
+
* retries it, and the agent loop classifies that as transient and retries it
|
|
253
|
+
* again. 400 is not retried by the SDK (it retries 408, 409, 429 and 5xx), is
|
|
254
|
+
* fatal to classifyStreamError, and -- unlike 404 -- is not read as "wrong
|
|
255
|
+
* model" by the workflow runner's isModelError. */
|
|
256
|
+
function unreachableResponse(url) {
|
|
257
|
+
return new Response(JSON.stringify({ error: { message: customProviderUnreachableMessage(url), code: LOCAL_FAILURE.unreachable } }), { status: 400, headers: { 'content-type': 'application/json' } });
|
|
258
|
+
}
|
|
259
|
+
/** A client whose every request is routed by the model it names: to the custom
|
|
260
|
+
* provider that serves it, else to the gateway when `routing.gateway` is true,
|
|
261
|
+
* else refused with no request made. Pure data in (no storage reads), so it is
|
|
262
|
+
* Worker-safe. */
|
|
263
|
+
export function createRoutedChatClient(auth, routing, opts = {}) {
|
|
264
|
+
const base = gatewayBaseURL();
|
|
265
|
+
return new OpenAI({
|
|
266
|
+
baseURL: base,
|
|
125
267
|
apiKey: 'prompd-gateway',
|
|
126
268
|
dangerouslyAllowBrowser: true,
|
|
127
269
|
fetch: async (url, init) => {
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
//
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
alog('gateway:status', res.status, res.statusText);
|
|
145
|
-
return res;
|
|
146
|
-
}
|
|
147
|
-
catch (e) {
|
|
148
|
-
alog('gateway:fetch-error', String(e?.message || e));
|
|
149
|
-
throw e;
|
|
150
|
-
}
|
|
270
|
+
const target = String(url);
|
|
271
|
+
const req = init;
|
|
272
|
+
const model = modelOfBody(req?.body);
|
|
273
|
+
const route = model === null
|
|
274
|
+
? (routing.gateway ? { kind: 'gateway' } : { kind: 'refused' })
|
|
275
|
+
: routeForModel(model, routing);
|
|
276
|
+
if (route.kind === 'refused')
|
|
277
|
+
return refusalResponse(model ?? '(unnamed)');
|
|
278
|
+
if (route.kind === 'gateway')
|
|
279
|
+
return gatewayRequest(auth, opts, target, req);
|
|
280
|
+
// The SDK only ever builds URLs under its baseURL. Anything else is a
|
|
281
|
+
// programming error, and guessing a destination for a transcript is not
|
|
282
|
+
// an acceptable way to handle one.
|
|
283
|
+
if (!target.startsWith(base))
|
|
284
|
+
throw new Error(`Refusing to route a request outside the chat API base: ${target}`);
|
|
285
|
+
return customRequest(route.provider, `${route.provider.baseURL.replace(/\/+$/, '')}${target.slice(base.length)}`, req);
|
|
151
286
|
},
|
|
152
287
|
});
|
|
153
288
|
}
|
|
@@ -155,14 +290,34 @@ let resolveCustomProvider = () => null;
|
|
|
155
290
|
export function setCustomProviderResolver(fn) {
|
|
156
291
|
resolveCustomProvider = fn;
|
|
157
292
|
}
|
|
293
|
+
/** Host-injected: may a model call use the hosted gateway? Default yes. The app
|
|
294
|
+
* wires its "Route model calls through the API" setting here. */
|
|
295
|
+
let gatewayAllowed = () => true;
|
|
296
|
+
export function setGatewayAllowed(fn) {
|
|
297
|
+
gatewayAllowed = fn;
|
|
298
|
+
}
|
|
299
|
+
/** A client that refuses every request locally -- what an unclaimed model gets
|
|
300
|
+
* when the gateway is disallowed. */
|
|
301
|
+
function createRefusingClient(model) {
|
|
302
|
+
return new OpenAI({
|
|
303
|
+
baseURL: 'http://model-route.invalid/v1',
|
|
304
|
+
apiKey: 'refused',
|
|
305
|
+
dangerouslyAllowBrowser: true,
|
|
306
|
+
maxRetries: 0,
|
|
307
|
+
fetch: async () => refusalResponse(model),
|
|
308
|
+
});
|
|
309
|
+
}
|
|
158
310
|
/** Route a model to its client: a custom OpenAI-compatible provider's direct
|
|
159
|
-
* client when the host's resolver claims the model, else the caller's gateway
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
311
|
+
* client when the host's resolver claims the model, else the caller's gateway
|
|
312
|
+
* when the host allows it, else a client that refuses without a request.
|
|
313
|
+
* The single source of truth for main-thread model->client routing (workflow
|
|
314
|
+
* runner, test runner, ...) so custom-provider handling can't drift between
|
|
315
|
+
* features. Main-thread only -- the resolver reads localStorage. */
|
|
163
316
|
export function clientForModel(model, gateway) {
|
|
164
317
|
const cp = resolveCustomProvider(model);
|
|
165
|
-
|
|
318
|
+
if (cp)
|
|
319
|
+
return createCustomClient(cp);
|
|
320
|
+
return gatewayAllowed() ? gateway : createRefusingClient(model);
|
|
166
321
|
}
|
|
167
322
|
let localFetchProxy = () => null;
|
|
168
323
|
export function setLocalFetchProxy(fn) { localFetchProxy = fn; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../providers/gateway.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../providers/gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/sidecar/host.d.ts
CHANGED
|
@@ -81,6 +81,17 @@ export interface SidecarHostOptions {
|
|
|
81
81
|
* `SidecarRooms.subscribe` in server.ts). Fires whether or not this client
|
|
82
82
|
* ever called `roomOpen`/`roomList`/`roomRead`. */
|
|
83
83
|
onRoomProgress?: (room: RoomSummary) => void;
|
|
84
|
+
/** The daemon asks the host to open a web page (the user is debugging it).
|
|
85
|
+
* Delivered verbatim: the GATING is the host's -- scheme allowlist, then
|
|
86
|
+
* loopback/private accepted silently and any other origin confirmed by the
|
|
87
|
+
* user -- because a policy decision split across two layers is one that ends
|
|
88
|
+
* up wrong in one of them. */
|
|
89
|
+
onOpenUrl?: (push: {
|
|
90
|
+
url: string;
|
|
91
|
+
title?: string;
|
|
92
|
+
note?: string;
|
|
93
|
+
meta?: Record<string, string>;
|
|
94
|
+
}) => void;
|
|
84
95
|
}
|
|
85
96
|
/** `mcp-call` resolves `ok: false` for a policy refusal (`mcp-error`) rather
|
|
86
97
|
* than rejecting -- see the field comment on `mcpCallPending` above for why. A
|