@ashlr/hub 3.5.1 → 3.8.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/CHANGELOG.md +165 -0
- package/README.md +3 -0
- package/dist/build-identity.json +2 -2
- package/dist/cli/activation.d.ts +41 -0
- package/dist/cli/activation.js +485 -0
- package/dist/cli/activation.js.map +1 -0
- package/dist/core/daemon/cutoff-checkpoint-scheduler.js +7 -0
- package/dist/core/daemon/cutoff-checkpoint-scheduler.js.map +1 -1
- package/dist/core/daemon/loop.d.ts +19 -0
- package/dist/core/daemon/loop.js +235 -5
- package/dist/core/daemon/loop.js.map +1 -1
- package/dist/core/daemon/overnight-status.d.ts +152 -0
- package/dist/core/daemon/overnight-status.js +275 -0
- package/dist/core/daemon/overnight-status.js.map +1 -0
- package/dist/core/daemon/post-merge-halt.d.ts +212 -0
- package/dist/core/daemon/post-merge-halt.js +503 -0
- package/dist/core/daemon/post-merge-halt.js.map +1 -0
- package/dist/core/daemon/run-window.d.ts +218 -0
- package/dist/core/daemon/run-window.js +420 -0
- package/dist/core/daemon/run-window.js.map +1 -0
- package/dist/core/fleet/generated-repair-resolution.d.ts +36 -0
- package/dist/core/fleet/generated-repair-resolution.js +245 -0
- package/dist/core/fleet/generated-repair-resolution.js.map +1 -0
- package/dist/core/local-runtime/llama/port.d.ts +17 -0
- package/dist/core/local-runtime/llama/port.js +47 -0
- package/dist/core/local-runtime/llama/port.js.map +1 -0
- package/dist/core/local-runtime/llama/proxy-host.d.ts +54 -0
- package/dist/core/local-runtime/llama/proxy-host.js +159 -0
- package/dist/core/local-runtime/llama/proxy-host.js.map +1 -0
- package/dist/core/local-runtime/llama/proxy-process.d.ts +148 -0
- package/dist/core/local-runtime/llama/proxy-process.js +250 -0
- package/dist/core/local-runtime/llama/proxy-process.js.map +1 -0
- package/dist/core/local-runtime/llama/proxy-record.d.ts +40 -0
- package/dist/core/local-runtime/llama/proxy-record.js +133 -0
- package/dist/core/local-runtime/llama/proxy-record.js.map +1 -0
- package/dist/core/local-runtime/llama/proxy-supervisor.d.ts +118 -0
- package/dist/core/local-runtime/llama/proxy-supervisor.js +511 -0
- package/dist/core/local-runtime/llama/proxy-supervisor.js.map +1 -0
- package/dist/core/policy/local-only.d.ts +142 -2
- package/dist/core/policy/local-only.js +204 -15
- package/dist/core/policy/local-only.js.map +1 -1
- package/dist/core/run/budget.d.ts +22 -8
- package/dist/core/run/budget.js +80 -12
- package/dist/core/run/budget.js.map +1 -1
- package/dist/core/run/sandboxed-engine.js +3 -3
- package/dist/core/run/sandboxed-engine.js.map +1 -1
- package/dist/core/universe/builtins/preparation/manifest.json +1 -1
- package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +61 -9
- package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +60 -8
- package/dist/core/verse/session-engine.d.ts +42 -1
- package/dist/core/verse/session-engine.js +79 -2
- package/dist/core/verse/session-engine.js.map +1 -1
- package/dist/core/web/public/next/assets/{App-BbVoUCIi.js → App-BsbJFA2j.js} +2 -2
- package/dist/core/web/public/next/assets/{App-BbVoUCIi.js.map → App-BsbJFA2j.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ApprovalsSection-BW9iVjUa.js → ApprovalsSection-2CCSoBTJ.js} +2 -2
- package/dist/core/web/public/next/assets/{ApprovalsSection-BW9iVjUa.js.map → ApprovalsSection-2CCSoBTJ.js.map} +1 -1
- package/dist/core/web/public/next/assets/{AutonomySection-Cpk_oEhc.css → AutonomySection-CHjxJt2z.css} +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-yeNNUPur.js +2 -0
- package/dist/core/web/public/next/assets/AutonomySection-yeNNUPur.js.map +1 -0
- package/dist/core/web/public/next/assets/ChatSection-BfnLe5dT.css +1 -0
- package/dist/core/web/public/next/assets/ChatSection-DwDDnCZQ.js +80 -0
- package/dist/core/web/public/next/assets/ChatSection-DwDDnCZQ.js.map +1 -0
- package/dist/core/web/public/next/assets/{ConfirmDialog-CXevY3Au.js → ConfirmDialog-C363ty_c.js} +2 -2
- package/dist/core/web/public/next/assets/{ConfirmDialog-CXevY3Au.js.map → ConfirmDialog-C363ty_c.js.map} +1 -1
- package/dist/core/web/public/next/assets/{Dialog-Bn0CgEGz.js → Dialog-nK15L1M0.js} +2 -2
- package/dist/core/web/public/next/assets/{Dialog-Bn0CgEGz.js.map → Dialog-nK15L1M0.js.map} +1 -1
- package/dist/core/web/public/next/assets/{DiffViewer-QKyisN2L.js → DiffViewer-D369eZe8.js} +2 -2
- package/dist/core/web/public/next/assets/{DiffViewer-QKyisN2L.js.map → DiffViewer-D369eZe8.js.map} +1 -1
- package/dist/core/web/public/next/assets/McpSection-D88QlDpG.css +1 -0
- package/dist/core/web/public/next/assets/McpSection-DVgiSYG1.js +2 -0
- package/dist/core/web/public/next/assets/McpSection-DVgiSYG1.js.map +1 -0
- package/dist/core/web/public/next/assets/Meter-CLcr-4wS.css +1 -0
- package/dist/core/web/public/next/assets/Meter-Cmo1pLbk.js +2 -0
- package/dist/core/web/public/next/assets/Meter-Cmo1pLbk.js.map +1 -0
- package/dist/core/web/public/next/assets/{MutationTokenDialog-DbSHPy3w.js → MutationTokenDialog-B9I4PAcp.js} +2 -2
- package/dist/core/web/public/next/assets/{MutationTokenDialog-DbSHPy3w.js.map → MutationTokenDialog-B9I4PAcp.js.map} +1 -1
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-C-PCgCzo.js → ResourcePoolConsoleApp-z6tJj3s9.js} +2 -2
- package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-C-PCgCzo.js.map → ResourcePoolConsoleApp-z6tJj3s9.js.map} +1 -1
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-Dw8ZjmkS.js → RouteErrorBoundary-OSajL45F.js} +2 -2
- package/dist/core/web/public/next/assets/{RouteErrorBoundary-Dw8ZjmkS.js.map → RouteErrorBoundary-OSajL45F.js.map} +1 -1
- package/dist/core/web/public/next/assets/SettingsSection-B3YH2Npi.js +2 -0
- package/dist/core/web/public/next/assets/SettingsSection-B3YH2Npi.js.map +1 -0
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-Bk5HipM0.js → UniverseConsoleApp-wEKIzl1M.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseConsoleApp-Bk5HipM0.js.map → UniverseConsoleApp-wEKIzl1M.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UniverseView-D8k9q0ce.js → UniverseView-CQVpJqqI.js} +2 -2
- package/dist/core/web/public/next/assets/{UniverseView-D8k9q0ce.js.map → UniverseView-CQVpJqqI.js.map} +1 -1
- package/dist/core/web/public/next/assets/{UsageSection-B2E06ZH1.js → UsageSection-dToBThXe.js} +2 -2
- package/dist/core/web/public/next/assets/{UsageSection-B2E06ZH1.js.map → UsageSection-dToBThXe.js.map} +1 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-CMkCizvL.css +1 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DHU32JCQ.js +3 -0
- package/dist/core/web/public/next/assets/VerseConsoleApp-DHU32JCQ.js.map +1 -0
- package/dist/core/web/public/next/assets/{charts-DSUpczxG.js → charts-BopViIha.js} +2 -2
- package/dist/core/web/public/next/assets/{charts-DSUpczxG.js.map → charts-BopViIha.js.map} +1 -1
- package/dist/core/web/public/next/assets/global-DMWakEhP.js +2 -0
- package/dist/core/web/public/next/assets/global-DMWakEhP.js.map +1 -0
- package/dist/core/web/public/next/assets/global-z-JfD3ow.css +1 -0
- package/dist/core/web/public/next/assets/{icons-BxOX8-XB.js → icons-L06pQH6j.js} +2 -2
- package/dist/core/web/public/next/assets/{icons-BxOX8-XB.js.map → icons-L06pQH6j.js.map} +1 -1
- package/dist/core/web/public/next/assets/{index-BMRIET7F.js → index-CXgVQHek.js} +3 -3
- package/dist/core/web/public/next/assets/{index-BMRIET7F.js.map → index-CXgVQHek.js.map} +1 -1
- package/dist/core/web/public/next/assets/{queries-AxnVa02h.js → queries-D3sSlan1.js} +2 -2
- package/dist/core/web/public/next/assets/{queries-AxnVa02h.js.map → queries-D3sSlan1.js.map} +1 -1
- package/dist/core/web/public/next/assets/{use-guarded-action-BO6c94Wp.js → use-guarded-action-BxfJ9E-n.js} +2 -2
- package/dist/core/web/public/next/assets/{use-guarded-action-BO6c94Wp.js.map → use-guarded-action-BxfJ9E-n.js.map} +1 -1
- package/dist/core/web/public/next/assets/workspace-model-v0a1gl-C.js +2 -0
- package/dist/core/web/public/next/assets/workspace-model-v0a1gl-C.js.map +1 -0
- package/dist/core/web/public/next/index.html +1 -1
- package/dist/release-dependency-inventory.json +1 -1
- package/package.json +1 -1
- package/dist/core/web/public/next/assets/AutonomySection-CRqHUhED.js +0 -2
- package/dist/core/web/public/next/assets/AutonomySection-CRqHUhED.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatSection-5irrh6Jw.js +0 -80
- package/dist/core/web/public/next/assets/ChatSection-5irrh6Jw.js.map +0 -1
- package/dist/core/web/public/next/assets/ChatSection-LQiAn6Eu.css +0 -1
- package/dist/core/web/public/next/assets/SettingsSection-CWxtTNlD.js +0 -2
- package/dist/core/web/public/next/assets/SettingsSection-CWxtTNlD.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-CRfZUV-T.js +0 -3
- package/dist/core/web/public/next/assets/VerseConsoleApp-CRfZUV-T.js.map +0 -1
- package/dist/core/web/public/next/assets/VerseConsoleApp-D2E3mU9a.css +0 -1
- package/dist/core/web/public/next/assets/global-C4jfYHrj.js +0 -2
- package/dist/core/web/public/next/assets/global-C4jfYHrj.js.map +0 -1
- package/dist/core/web/public/next/assets/global-D463gG1X.css +0 -1
- package/dist/core/web/public/next/assets/workspace-model-cE4LkKpE.js +0 -2
- package/dist/core/web/public/next/assets/workspace-model-cE4LkKpE.js.map +0 -1
|
@@ -25,6 +25,20 @@
|
|
|
25
25
|
* make impossible, so `test/local-only-dispatch-paths.test.ts` enumerates every
|
|
26
26
|
* known path and asserts it refuses.
|
|
27
27
|
*
|
|
28
|
+
* TWO AXES, ONE PREDICATE (docs/LOCALITY-VS-SPEND.md)
|
|
29
|
+
* --------------------------------------------------
|
|
30
|
+
* This module answers two different questions and must not confuse them:
|
|
31
|
+
*
|
|
32
|
+
* `EngineLocality` 'local' | 'cloud' — where does the process run?
|
|
33
|
+
* `Meteredness` 'free' | 'metered' | 'unknown' — can this spend money?
|
|
34
|
+
*
|
|
35
|
+
* `decidePermission` reads METEREDNESS and refuses anything that is not provably
|
|
36
|
+
* `'free'`, `'unknown'` included. Locality is still published, unchanged, for the
|
|
37
|
+
* consumers that genuinely mean "on this machine" — local-fleet membership, pool
|
|
38
|
+
* tiering, local-context injection. They are not interchangeable: `ashlrcode` is
|
|
39
|
+
* a local process that this hub hands paid credentials, and reading its locality
|
|
40
|
+
* as permission is exactly how it kept them.
|
|
41
|
+
*
|
|
28
42
|
* MODE RESOLUTION (config + env, env can only ENABLE)
|
|
29
43
|
* --------------------------------------------------
|
|
30
44
|
* persisted : cfg.foundry.localOnly === true (canonical)
|
|
@@ -86,6 +100,16 @@ export declare function localOnlyEnabled(cfg?: AshlrConfig, env?: EnvLike): bool
|
|
|
86
100
|
* tier 'mid' but locality 'cloud'. Conflating the two is how money gets spent.
|
|
87
101
|
*/
|
|
88
102
|
export type EngineLocality = 'local' | 'cloud';
|
|
103
|
+
/**
|
|
104
|
+
* Provider ids served from this machine. Everything else is treated as cloud.
|
|
105
|
+
*
|
|
106
|
+
* Exported so the parity suite can iterate the authority's OWN enumeration
|
|
107
|
+
* rather than restating it — a test carrying its own copy of this list would be
|
|
108
|
+
* the duplication this module exists to prevent. Consumers ask
|
|
109
|
+
* `providerLocality` / `providerMeteredness`; nothing outside this file should
|
|
110
|
+
* read the set to make a decision.
|
|
111
|
+
*/
|
|
112
|
+
export declare const LOCAL_PROVIDER_IDS: ReadonlySet<string>;
|
|
89
113
|
/** The engine that is permitted in every mode: in-process, no model call. */
|
|
90
114
|
export declare const ALWAYS_PERMITTED_ENGINE: EngineId;
|
|
91
115
|
/**
|
|
@@ -100,6 +124,105 @@ export declare function isLoopbackEndpoint(baseUrl: string | undefined): boolean
|
|
|
100
124
|
export declare function engineLocality(engine: string, cfg?: AshlrConfig, env?: EnvLike): EngineLocality;
|
|
101
125
|
/** Classify a provider id from `providers.ts` / the plugin provider registry. */
|
|
102
126
|
export declare function providerLocality(providerId: string): EngineLocality;
|
|
127
|
+
/**
|
|
128
|
+
* Can this subject bill you?
|
|
129
|
+
*
|
|
130
|
+
* SEPARATE FROM `EngineLocality` ON PURPOSE (docs/LOCALITY-VS-SPEND.md). Those
|
|
131
|
+
* two questions —
|
|
132
|
+
*
|
|
133
|
+
* locality: where does the inference run? (processes and endpoints)
|
|
134
|
+
* meteredness: can this spend money? (credentials and billing)
|
|
135
|
+
*
|
|
136
|
+
* — coincide for every subject except CLI agents, which is why one answer served
|
|
137
|
+
* both for as long as it did. For `ashlrcode` they do not: it is a local PROCESS
|
|
138
|
+
* that this hub hands `CLAUDE_CODE_OAUTH_TOKEN` / `ANTHROPIC_AUTH_TOKEN` and the
|
|
139
|
+
* config dirs where subscription auth lives (`run/sandboxed-engine.ts:782` and
|
|
140
|
+
* its env builder), after which the hub controls nothing. Local, and spendable.
|
|
141
|
+
*
|
|
142
|
+
* Reclassifying it as `'cloud'` would fix spend and break locality: local-fleet
|
|
143
|
+
* membership, pool tiering and local-context injection all legitimately want
|
|
144
|
+
* "runs on this machine". So this is a SECOND axis, never a rename of the first.
|
|
145
|
+
*
|
|
146
|
+
* `'unknown'` is a real answer, not a placeholder. A policy whose purpose is
|
|
147
|
+
* preventing spend cannot treat "I cannot tell" as "safe" — that is precisely
|
|
148
|
+
* how the `ashlrcode` gap survived. `decidePermission` refuses anything that is
|
|
149
|
+
* not provably `'free'`, `'unknown'` included.
|
|
150
|
+
*/
|
|
151
|
+
export type Meteredness = 'free' | 'metered' | 'unknown';
|
|
152
|
+
/**
|
|
153
|
+
* Meteredness of every cli-agent the hub ships, stated EXPLICITLY.
|
|
154
|
+
*
|
|
155
|
+
* A cli-agent is the one engine kind whose spend the hub cannot read off an
|
|
156
|
+
* endpoint: the binary chooses its own backend after the spawn. So each one is
|
|
157
|
+
* classified by hand here, and `test/local-only-consumer-parity.test.ts` fails
|
|
158
|
+
* if a new cli-agent reaches the registry without an entry.
|
|
159
|
+
*
|
|
160
|
+
* claude / codex / hermes / opencode — reach a vendor over the network. Metered.
|
|
161
|
+
*
|
|
162
|
+
* ashlrcode — METERED. `docs/ECOSYSTEM-MAP.md:151`: consumes `@anthropic-ai/sdk`
|
|
163
|
+
* + OpenAI (routing xAI/DeepSeek/Groq/Ollama) — cloud inference BY DEFAULT —
|
|
164
|
+
* and the hub hands every cli-agent spawn working subscription credentials.
|
|
165
|
+
* There is no flag the hub passes and `ac` honours, and no probe the hub can
|
|
166
|
+
* read, so "pointed at Ollama" is not a claim this process can verify.
|
|
167
|
+
* Owner decision (docs/LOCALITY-VS-SPEND.md, Option A). Option B — classify
|
|
168
|
+
* it `'free'` only when an ashlrcode-side local mode is CONFIRMED — stays the
|
|
169
|
+
* target, and must not ship before its enforcement exists.
|
|
170
|
+
*
|
|
171
|
+
* aw — UNKNOWN, not metered. `docs/ECOSYSTEM-MAP.md:155` describes a
|
|
172
|
+
* fully-local agent fleet where "no data leaves the machine unless cloud
|
|
173
|
+
* fallback is opted into". That opt-in lives in aw's own `.env` and agent
|
|
174
|
+
* configs, which this hub neither reads nor controls — so the honest answer
|
|
175
|
+
* is that we do not know, and `'unknown'` says exactly that. It is refused
|
|
176
|
+
* under local-only and priced as spend, identically to `'metered'`; the
|
|
177
|
+
* distinction is truthfulness in the refusal, not a difference in effect.
|
|
178
|
+
* Calling it `'metered'` would assert a fact about a third-party config we
|
|
179
|
+
* have not read, which is the same mistake in the opposite direction.
|
|
180
|
+
*/
|
|
181
|
+
export declare const CLI_AGENT_METEREDNESS: Readonly<Record<string, Meteredness>>;
|
|
182
|
+
/**
|
|
183
|
+
* Meteredness of a raw endpoint. A loopback URL genuinely cannot bill anyone.
|
|
184
|
+
*
|
|
185
|
+
* An absent or unparseable URL is `'unknown'` rather than `'metered'`: we are
|
|
186
|
+
* not asserting it costs money, we are saying we cannot tell. Both are refused.
|
|
187
|
+
*/
|
|
188
|
+
export declare function endpointMeteredness(baseUrl: string | undefined): Meteredness;
|
|
189
|
+
/**
|
|
190
|
+
* Meteredness of a provider id. The free set is the same roster as
|
|
191
|
+
* `LOCAL_PROVIDER_IDS` — for a PROVIDER the two axes really do coincide, because
|
|
192
|
+
* a provider id names a serving runtime rather than an agent that picks its own
|
|
193
|
+
* backend. Everything else in the provider id space is a billed vendor.
|
|
194
|
+
*/
|
|
195
|
+
export declare function providerMeteredness(providerId: string): Meteredness;
|
|
196
|
+
/**
|
|
197
|
+
* Meteredness of an engine id.
|
|
198
|
+
*
|
|
199
|
+
* builtin — in-process, no model call. Free.
|
|
200
|
+
* cli-agent — `CLI_AGENT_METEREDNESS`; an agent registered through
|
|
201
|
+
* `cfg.foundry.engines` that nobody classified is 'unknown'.
|
|
202
|
+
* api-model — the resolved base URL decides, exactly as locality does:
|
|
203
|
+
* a self-hosted endpoint behind an API key is still free if
|
|
204
|
+
* it answers on loopback. No resolvable URL ⇒ 'unknown'.
|
|
205
|
+
* absent from registry — 'unknown', except `llama-server`, which older builds
|
|
206
|
+
* synthesise inline in `run/engines.ts`.
|
|
207
|
+
*/
|
|
208
|
+
export declare function engineMeteredness(engine: string, cfg?: AshlrConfig, env?: EnvLike): Meteredness;
|
|
209
|
+
/**
|
|
210
|
+
* Meteredness of an id that may come from EITHER id space.
|
|
211
|
+
*
|
|
212
|
+
* `run/budget.ts` documents a provider id but `run/sandboxed-engine.ts` calls it
|
|
213
|
+
* with an engine id (`:1825`, `:2161`, `:3061`). Rather than leave that mismatch
|
|
214
|
+
* load-bearing, this resolver names the ambiguity and settles it by ASKING WHICH
|
|
215
|
+
* SPACE THE ID IS IN, in this order:
|
|
216
|
+
*
|
|
217
|
+
* 1. a free provider id (`ollama`, `lmstudio`, …) → free;
|
|
218
|
+
* 2. an id the engine registry resolves → `engineMeteredness` is authoritative,
|
|
219
|
+
* so `'local-coder'` (loopback, absent from the provider roster) is free and
|
|
220
|
+
* `'aw'` keeps its honest `'unknown'` instead of being flattened to metered;
|
|
221
|
+
* 3. anything else → the provider id space, where "not in the free set" means a
|
|
222
|
+
* billed vendor, so `'anthropic'` is metered rather than being mistaken for
|
|
223
|
+
* an unclassified engine.
|
|
224
|
+
*/
|
|
225
|
+
export declare function subjectMeteredness(id: string, cfg?: AshlrConfig, env?: EnvLike): Meteredness;
|
|
103
226
|
/**
|
|
104
227
|
* Resolve the engine id behind an executable name.
|
|
105
228
|
*
|
|
@@ -119,7 +242,13 @@ export interface LocalOnlySubject {
|
|
|
119
242
|
kind: LocalOnlySubjectKind;
|
|
120
243
|
/** Engine id, provider id, or base URL — whatever the operator would recognise. */
|
|
121
244
|
id: string;
|
|
245
|
+
/**
|
|
246
|
+
* Where the inference runs. Carried for diagnostics and for the consumers
|
|
247
|
+
* that legitimately ask "on this machine?" — NOT what the permission turns on.
|
|
248
|
+
*/
|
|
122
249
|
locality: EngineLocality;
|
|
250
|
+
/** Whether this subject can spend. THIS is what `decidePermission` reads. */
|
|
251
|
+
meteredness: Meteredness;
|
|
123
252
|
}
|
|
124
253
|
export interface LocalOnlyVerdict {
|
|
125
254
|
/** False means: do not dispatch. Refuse, loudly, naming `reason`. */
|
|
@@ -149,7 +278,12 @@ export declare function endpointPermitted(baseUrl: string, cfg?: AshlrConfig, en
|
|
|
149
278
|
* engine id. A binary that maps to no known engine is permitted — it is not a
|
|
150
279
|
* hub-managed agent, and refusing every unrecognised executable would break
|
|
151
280
|
* phantom wrapping and local tooling. Every engine the hub can actually route
|
|
152
|
-
* to IS in the registry, so a
|
|
281
|
+
* to IS in the registry, so a spendable seat always resolves.
|
|
282
|
+
*
|
|
283
|
+
* THIS IS THE SITE THE METEREDNESS SPLIT WAS FOR. `ac` resolves to `ashlrcode`,
|
|
284
|
+
* which was classified local and therefore permitted — and then handed
|
|
285
|
+
* `CLAUDE_CODE_OAUTH_TOKEN` by the very next call. It now resolves to `metered`
|
|
286
|
+
* and is refused, with no change needed at `run/engines.ts:455` itself.
|
|
153
287
|
*/
|
|
154
288
|
export declare function binPermitted(bin: string, cfg?: AshlrConfig, env?: EnvLike): LocalOnlyVerdict;
|
|
155
289
|
/**
|
|
@@ -169,7 +303,13 @@ export declare class LocalOnlyRefusal extends Error {
|
|
|
169
303
|
export declare function isLocalOnlyRefusal(err: unknown): err is LocalOnlyRefusal;
|
|
170
304
|
/** Throw `LocalOnlyRefusal` when `verdict` refuses; otherwise return. */
|
|
171
305
|
export declare function assertPermitted(verdict: LocalOnlyVerdict): void;
|
|
172
|
-
/**
|
|
306
|
+
/**
|
|
307
|
+
* Keep only engines permitted under the current mode.
|
|
308
|
+
*
|
|
309
|
+
* Delegates to `enginePermitted` rather than re-deriving the answer: a filter
|
|
310
|
+
* that reached for `engineLocality` would hand the routers a set the dispatcher
|
|
311
|
+
* then refuses, which is the "mysteriously worse result" this module forbids.
|
|
312
|
+
*/
|
|
173
313
|
export declare function filterPermittedEngines<T extends string>(engines: readonly T[], cfg?: AshlrConfig, env?: EnvLike): T[];
|
|
174
314
|
/**
|
|
175
315
|
* Engines from `candidates` that sit at `tier` AND are permitted right now.
|
|
@@ -25,6 +25,20 @@
|
|
|
25
25
|
* make impossible, so `test/local-only-dispatch-paths.test.ts` enumerates every
|
|
26
26
|
* known path and asserts it refuses.
|
|
27
27
|
*
|
|
28
|
+
* TWO AXES, ONE PREDICATE (docs/LOCALITY-VS-SPEND.md)
|
|
29
|
+
* --------------------------------------------------
|
|
30
|
+
* This module answers two different questions and must not confuse them:
|
|
31
|
+
*
|
|
32
|
+
* `EngineLocality` 'local' | 'cloud' — where does the process run?
|
|
33
|
+
* `Meteredness` 'free' | 'metered' | 'unknown' — can this spend money?
|
|
34
|
+
*
|
|
35
|
+
* `decidePermission` reads METEREDNESS and refuses anything that is not provably
|
|
36
|
+
* `'free'`, `'unknown'` included. Locality is still published, unchanged, for the
|
|
37
|
+
* consumers that genuinely mean "on this machine" — local-fleet membership, pool
|
|
38
|
+
* tiering, local-context injection. They are not interchangeable: `ashlrcode` is
|
|
39
|
+
* a local process that this hub hands paid credentials, and reading its locality
|
|
40
|
+
* as permission is exactly how it kept them.
|
|
41
|
+
*
|
|
28
42
|
* MODE RESOLUTION (config + env, env can only ENABLE)
|
|
29
43
|
* --------------------------------------------------
|
|
30
44
|
* persisted : cfg.foundry.localOnly === true (canonical)
|
|
@@ -182,8 +196,16 @@ export function localOnlyEnabled(cfg, env = process.env) {
|
|
|
182
196
|
* opencode) reaches a vendor over the network and is classified 'cloud'.
|
|
183
197
|
*/
|
|
184
198
|
const LOCAL_CLI_AGENTS = new Set(['ashlrcode', 'aw']);
|
|
185
|
-
/**
|
|
186
|
-
|
|
199
|
+
/**
|
|
200
|
+
* Provider ids served from this machine. Everything else is treated as cloud.
|
|
201
|
+
*
|
|
202
|
+
* Exported so the parity suite can iterate the authority's OWN enumeration
|
|
203
|
+
* rather than restating it — a test carrying its own copy of this list would be
|
|
204
|
+
* the duplication this module exists to prevent. Consumers ask
|
|
205
|
+
* `providerLocality` / `providerMeteredness`; nothing outside this file should
|
|
206
|
+
* read the set to make a decision.
|
|
207
|
+
*/
|
|
208
|
+
export const LOCAL_PROVIDER_IDS = new Set([
|
|
187
209
|
'ollama',
|
|
188
210
|
'lmstudio',
|
|
189
211
|
'llama-server',
|
|
@@ -267,6 +289,129 @@ export function engineLocality(engine, cfg, env = process.env) {
|
|
|
267
289
|
export function providerLocality(providerId) {
|
|
268
290
|
return LOCAL_PROVIDER_IDS.has(providerId.trim().toLowerCase()) ? 'local' : 'cloud';
|
|
269
291
|
}
|
|
292
|
+
/**
|
|
293
|
+
* Meteredness of every cli-agent the hub ships, stated EXPLICITLY.
|
|
294
|
+
*
|
|
295
|
+
* A cli-agent is the one engine kind whose spend the hub cannot read off an
|
|
296
|
+
* endpoint: the binary chooses its own backend after the spawn. So each one is
|
|
297
|
+
* classified by hand here, and `test/local-only-consumer-parity.test.ts` fails
|
|
298
|
+
* if a new cli-agent reaches the registry without an entry.
|
|
299
|
+
*
|
|
300
|
+
* claude / codex / hermes / opencode — reach a vendor over the network. Metered.
|
|
301
|
+
*
|
|
302
|
+
* ashlrcode — METERED. `docs/ECOSYSTEM-MAP.md:151`: consumes `@anthropic-ai/sdk`
|
|
303
|
+
* + OpenAI (routing xAI/DeepSeek/Groq/Ollama) — cloud inference BY DEFAULT —
|
|
304
|
+
* and the hub hands every cli-agent spawn working subscription credentials.
|
|
305
|
+
* There is no flag the hub passes and `ac` honours, and no probe the hub can
|
|
306
|
+
* read, so "pointed at Ollama" is not a claim this process can verify.
|
|
307
|
+
* Owner decision (docs/LOCALITY-VS-SPEND.md, Option A). Option B — classify
|
|
308
|
+
* it `'free'` only when an ashlrcode-side local mode is CONFIRMED — stays the
|
|
309
|
+
* target, and must not ship before its enforcement exists.
|
|
310
|
+
*
|
|
311
|
+
* aw — UNKNOWN, not metered. `docs/ECOSYSTEM-MAP.md:155` describes a
|
|
312
|
+
* fully-local agent fleet where "no data leaves the machine unless cloud
|
|
313
|
+
* fallback is opted into". That opt-in lives in aw's own `.env` and agent
|
|
314
|
+
* configs, which this hub neither reads nor controls — so the honest answer
|
|
315
|
+
* is that we do not know, and `'unknown'` says exactly that. It is refused
|
|
316
|
+
* under local-only and priced as spend, identically to `'metered'`; the
|
|
317
|
+
* distinction is truthfulness in the refusal, not a difference in effect.
|
|
318
|
+
* Calling it `'metered'` would assert a fact about a third-party config we
|
|
319
|
+
* have not read, which is the same mistake in the opposite direction.
|
|
320
|
+
*/
|
|
321
|
+
export const CLI_AGENT_METEREDNESS = Object.freeze({
|
|
322
|
+
claude: 'metered',
|
|
323
|
+
codex: 'metered',
|
|
324
|
+
hermes: 'metered',
|
|
325
|
+
opencode: 'metered',
|
|
326
|
+
ashlrcode: 'metered',
|
|
327
|
+
aw: 'unknown',
|
|
328
|
+
});
|
|
329
|
+
/**
|
|
330
|
+
* Meteredness of a raw endpoint. A loopback URL genuinely cannot bill anyone.
|
|
331
|
+
*
|
|
332
|
+
* An absent or unparseable URL is `'unknown'` rather than `'metered'`: we are
|
|
333
|
+
* not asserting it costs money, we are saying we cannot tell. Both are refused.
|
|
334
|
+
*/
|
|
335
|
+
export function endpointMeteredness(baseUrl) {
|
|
336
|
+
if (typeof baseUrl !== 'string' || baseUrl.trim().length === 0)
|
|
337
|
+
return 'unknown';
|
|
338
|
+
try {
|
|
339
|
+
new URL(baseUrl.trim());
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
return 'unknown';
|
|
343
|
+
}
|
|
344
|
+
return isLoopbackEndpoint(baseUrl) ? 'free' : 'metered';
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Meteredness of a provider id. The free set is the same roster as
|
|
348
|
+
* `LOCAL_PROVIDER_IDS` — for a PROVIDER the two axes really do coincide, because
|
|
349
|
+
* a provider id names a serving runtime rather than an agent that picks its own
|
|
350
|
+
* backend. Everything else in the provider id space is a billed vendor.
|
|
351
|
+
*/
|
|
352
|
+
export function providerMeteredness(providerId) {
|
|
353
|
+
return LOCAL_PROVIDER_IDS.has(providerId.trim().toLowerCase()) ? 'free' : 'metered';
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Meteredness of an engine id.
|
|
357
|
+
*
|
|
358
|
+
* builtin — in-process, no model call. Free.
|
|
359
|
+
* cli-agent — `CLI_AGENT_METEREDNESS`; an agent registered through
|
|
360
|
+
* `cfg.foundry.engines` that nobody classified is 'unknown'.
|
|
361
|
+
* api-model — the resolved base URL decides, exactly as locality does:
|
|
362
|
+
* a self-hosted endpoint behind an API key is still free if
|
|
363
|
+
* it answers on loopback. No resolvable URL ⇒ 'unknown'.
|
|
364
|
+
* absent from registry — 'unknown', except `llama-server`, which older builds
|
|
365
|
+
* synthesise inline in `run/engines.ts`.
|
|
366
|
+
*/
|
|
367
|
+
export function engineMeteredness(engine, cfg, env = process.env) {
|
|
368
|
+
const id = engine.trim().toLowerCase();
|
|
369
|
+
if (id === ALWAYS_PERMITTED_ENGINE)
|
|
370
|
+
return 'free';
|
|
371
|
+
const spec = resolveEngineSpec(engine, cfg);
|
|
372
|
+
if (!spec) {
|
|
373
|
+
if (id === 'llama-server')
|
|
374
|
+
return endpointMeteredness(llamaServerBaseUrl(cfg, env));
|
|
375
|
+
return 'unknown';
|
|
376
|
+
}
|
|
377
|
+
if (spec.kind === 'builtin')
|
|
378
|
+
return 'free';
|
|
379
|
+
if (spec.kind === 'cli-agent')
|
|
380
|
+
return CLI_AGENT_METEREDNESS[id] ?? 'unknown';
|
|
381
|
+
const api = spec.api;
|
|
382
|
+
const fromEnv = api?.baseUrlEnv ? env[api.baseUrlEnv]?.trim() : undefined;
|
|
383
|
+
const baseUrl = (fromEnv && fromEnv.length > 0 ? fromEnv : undefined) ?? api?.defaultBaseUrl;
|
|
384
|
+
return endpointMeteredness(baseUrl);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Meteredness of an id that may come from EITHER id space.
|
|
388
|
+
*
|
|
389
|
+
* `run/budget.ts` documents a provider id but `run/sandboxed-engine.ts` calls it
|
|
390
|
+
* with an engine id (`:1825`, `:2161`, `:3061`). Rather than leave that mismatch
|
|
391
|
+
* load-bearing, this resolver names the ambiguity and settles it by ASKING WHICH
|
|
392
|
+
* SPACE THE ID IS IN, in this order:
|
|
393
|
+
*
|
|
394
|
+
* 1. a free provider id (`ollama`, `lmstudio`, …) → free;
|
|
395
|
+
* 2. an id the engine registry resolves → `engineMeteredness` is authoritative,
|
|
396
|
+
* so `'local-coder'` (loopback, absent from the provider roster) is free and
|
|
397
|
+
* `'aw'` keeps its honest `'unknown'` instead of being flattened to metered;
|
|
398
|
+
* 3. anything else → the provider id space, where "not in the free set" means a
|
|
399
|
+
* billed vendor, so `'anthropic'` is metered rather than being mistaken for
|
|
400
|
+
* an unclassified engine.
|
|
401
|
+
*/
|
|
402
|
+
export function subjectMeteredness(id, cfg, env = process.env) {
|
|
403
|
+
const key = id.trim().toLowerCase();
|
|
404
|
+
if (key.length === 0)
|
|
405
|
+
return 'unknown';
|
|
406
|
+
if (LOCAL_PROVIDER_IDS.has(key))
|
|
407
|
+
return 'free';
|
|
408
|
+
const isEngineId = key === ALWAYS_PERMITTED_ENGINE ||
|
|
409
|
+
key === 'llama-server' || // may be synthesised inline rather than registered
|
|
410
|
+
resolveEngineSpec(id, cfg) !== undefined;
|
|
411
|
+
if (isEngineId)
|
|
412
|
+
return engineMeteredness(id, cfg, env);
|
|
413
|
+
return providerMeteredness(id);
|
|
414
|
+
}
|
|
270
415
|
/**
|
|
271
416
|
* Resolve the engine id behind an executable name.
|
|
272
417
|
*
|
|
@@ -311,7 +456,10 @@ const SUBJECT_NOUN = {
|
|
|
311
456
|
*/
|
|
312
457
|
export function decidePermission(subject, cfg, env = process.env) {
|
|
313
458
|
const mode = resolveLocalOnlyMode(cfg, env);
|
|
314
|
-
|
|
459
|
+
// THE RULE: refuse anything not PROVABLY free. Reading `locality` here is
|
|
460
|
+
// what let `ashlrcode` — a local process holding paid credentials — through,
|
|
461
|
+
// and treating 'unknown' as permitted is the same mistake one step removed.
|
|
462
|
+
if (!mode.enabled || subject.meteredness === 'free') {
|
|
315
463
|
return { permitted: true, subject, mode, reason: null };
|
|
316
464
|
}
|
|
317
465
|
return { permitted: false, subject, mode, reason: refusalReason(subject, mode) };
|
|
@@ -323,18 +471,37 @@ export function decidePermission(subject, cfg, env = process.env) {
|
|
|
323
471
|
*/
|
|
324
472
|
function refusalReason(subject, mode) {
|
|
325
473
|
const noun = SUBJECT_NOUN[subject.kind];
|
|
326
|
-
|
|
327
|
-
|
|
474
|
+
// 'unknown' gets its own sentence on purpose. Told "refusing to dispatch to
|
|
475
|
+
// cloud engine 'aw'" an operator reads a misclassification and goes to turn
|
|
476
|
+
// the mode off; told the hub cannot verify it is free, they get the truth.
|
|
477
|
+
const head = subject.meteredness === 'unknown'
|
|
478
|
+
? `local-only: refusing to dispatch to ${noun} '${subject.id}' — the hub cannot verify it is free. ` +
|
|
479
|
+
`It may reach a paid backend after dispatch and nothing here would see it, so it is not provably free and is refused. `
|
|
480
|
+
: `local-only: refusing to dispatch to cloud ${noun} '${subject.id}'. `;
|
|
481
|
+
const tail = subject.meteredness === 'unknown'
|
|
482
|
+
? ''
|
|
483
|
+
: `No cloud ${noun} is reachable while local-only is on — `;
|
|
484
|
+
return (`${head}${mode.detail} ${tail}` +
|
|
328
485
|
`run this work on a local engine (builtin, local-coder, llama-server), or turn the mode off with ` +
|
|
329
486
|
`cfg.foundry.localOnly=false (and unset ${LOCAL_ONLY_ENV_VAR}).`);
|
|
330
487
|
}
|
|
331
488
|
/** Is this ENGINE permitted right now? */
|
|
332
489
|
export function enginePermitted(engine, cfg, env = process.env) {
|
|
333
|
-
return decidePermission({
|
|
490
|
+
return decidePermission({
|
|
491
|
+
kind: 'engine',
|
|
492
|
+
id: engine,
|
|
493
|
+
locality: engineLocality(engine, cfg, env),
|
|
494
|
+
meteredness: engineMeteredness(engine, cfg, env),
|
|
495
|
+
}, cfg, env);
|
|
334
496
|
}
|
|
335
497
|
/** Is this PROVIDER permitted right now? */
|
|
336
498
|
export function providerPermitted(providerId, cfg, env = process.env) {
|
|
337
|
-
return decidePermission({
|
|
499
|
+
return decidePermission({
|
|
500
|
+
kind: 'provider',
|
|
501
|
+
id: providerId,
|
|
502
|
+
locality: providerLocality(providerId),
|
|
503
|
+
meteredness: providerMeteredness(providerId),
|
|
504
|
+
}, cfg, env);
|
|
338
505
|
}
|
|
339
506
|
/** Is this raw OpenAI-compatible ENDPOINT permitted right now? */
|
|
340
507
|
export function endpointPermitted(baseUrl, cfg, env = process.env) {
|
|
@@ -342,6 +509,7 @@ export function endpointPermitted(baseUrl, cfg, env = process.env) {
|
|
|
342
509
|
kind: 'endpoint',
|
|
343
510
|
id: baseUrl,
|
|
344
511
|
locality: isLoopbackEndpoint(baseUrl) ? 'local' : 'cloud',
|
|
512
|
+
meteredness: endpointMeteredness(baseUrl),
|
|
345
513
|
}, cfg, env);
|
|
346
514
|
}
|
|
347
515
|
/**
|
|
@@ -351,14 +519,22 @@ export function endpointPermitted(baseUrl, cfg, env = process.env) {
|
|
|
351
519
|
* engine id. A binary that maps to no known engine is permitted — it is not a
|
|
352
520
|
* hub-managed agent, and refusing every unrecognised executable would break
|
|
353
521
|
* phantom wrapping and local tooling. Every engine the hub can actually route
|
|
354
|
-
* to IS in the registry, so a
|
|
522
|
+
* to IS in the registry, so a spendable seat always resolves.
|
|
523
|
+
*
|
|
524
|
+
* THIS IS THE SITE THE METEREDNESS SPLIT WAS FOR. `ac` resolves to `ashlrcode`,
|
|
525
|
+
* which was classified local and therefore permitted — and then handed
|
|
526
|
+
* `CLAUDE_CODE_OAUTH_TOKEN` by the very next call. It now resolves to `metered`
|
|
527
|
+
* and is refused, with no change needed at `run/engines.ts:455` itself.
|
|
355
528
|
*/
|
|
356
529
|
export function binPermitted(bin, cfg, env = process.env) {
|
|
357
530
|
const id = engineIdForBin(bin, cfg);
|
|
358
531
|
if (id === undefined) {
|
|
359
532
|
return {
|
|
360
533
|
permitted: true,
|
|
361
|
-
|
|
534
|
+
// Deliberate: an executable no engine claims is outside the roster this
|
|
535
|
+
// policy governs, so it is 'free' in the only sense that applies — the
|
|
536
|
+
// hub is not handing it a seat, or credentials, or work.
|
|
537
|
+
subject: { kind: 'engine', id: bin, locality: 'local', meteredness: 'free' },
|
|
362
538
|
mode: resolveLocalOnlyMode(cfg, env),
|
|
363
539
|
reason: null,
|
|
364
540
|
};
|
|
@@ -371,7 +547,7 @@ export function binPermitted(bin, cfg, env = process.env) {
|
|
|
371
547
|
* heuristic here could know.
|
|
372
548
|
*/
|
|
373
549
|
export function cloudSubjectPermitted(kind, id, cfg, env = process.env) {
|
|
374
|
-
return decidePermission({ kind, id, locality: 'cloud' }, cfg, env);
|
|
550
|
+
return decidePermission({ kind, id, locality: 'cloud', meteredness: 'metered' }, cfg, env);
|
|
375
551
|
}
|
|
376
552
|
// ---------------------------------------------------------------------------
|
|
377
553
|
// Refusal
|
|
@@ -403,12 +579,18 @@ export function assertPermitted(verdict) {
|
|
|
403
579
|
// ---------------------------------------------------------------------------
|
|
404
580
|
// Routing helpers
|
|
405
581
|
// ---------------------------------------------------------------------------
|
|
406
|
-
/**
|
|
582
|
+
/**
|
|
583
|
+
* Keep only engines permitted under the current mode.
|
|
584
|
+
*
|
|
585
|
+
* Delegates to `enginePermitted` rather than re-deriving the answer: a filter
|
|
586
|
+
* that reached for `engineLocality` would hand the routers a set the dispatcher
|
|
587
|
+
* then refuses, which is the "mysteriously worse result" this module forbids.
|
|
588
|
+
*/
|
|
407
589
|
export function filterPermittedEngines(engines, cfg, env = process.env) {
|
|
408
590
|
const mode = resolveLocalOnlyMode(cfg, env);
|
|
409
591
|
if (!mode.enabled)
|
|
410
592
|
return [...engines];
|
|
411
|
-
return engines.filter((e) =>
|
|
593
|
+
return engines.filter((e) => enginePermitted(e, cfg, env).permitted);
|
|
412
594
|
}
|
|
413
595
|
/**
|
|
414
596
|
* Engines from `candidates` that sit at `tier` AND are permitted right now.
|
|
@@ -431,7 +613,8 @@ export function permittedEnginesAtTier(tier, candidates, cfg, env = process.env)
|
|
|
431
613
|
* and no endpoint credentials — only the subject id and the mode source.
|
|
432
614
|
*/
|
|
433
615
|
export function localOnlyReasonTag(verdict) {
|
|
434
|
-
|
|
616
|
+
const adjective = verdict.subject.meteredness === 'unknown' ? 'unclassified' : 'cloud';
|
|
617
|
+
return `local-only(${verdict.mode.source}): ${adjective} ${SUBJECT_NOUN[verdict.subject.kind]} '${verdict.subject.id}' refused`;
|
|
435
618
|
}
|
|
436
619
|
/**
|
|
437
620
|
* Build the operator snapshot. Read-only: resolves the mode, classifies every
|
|
@@ -453,11 +636,17 @@ export function localOnlyPolicySnapshot(cfg, env = process.env) {
|
|
|
453
636
|
ids.add('llama-server'); // may be synthesised inline rather than registered
|
|
454
637
|
const refuses = [];
|
|
455
638
|
for (const id of [...ids].sort()) {
|
|
456
|
-
|
|
639
|
+
// The list the UI renders MUST be the set the dispatcher refuses, so it is
|
|
640
|
+
// computed from meteredness — the same axis `decidePermission` reads. A
|
|
641
|
+
// panel filtered by locality would omit `ashlrcode` while the dispatcher
|
|
642
|
+
// refused it, and "Nothing can spend money while this is on" would be false
|
|
643
|
+
// in the one place an operator goes to check it.
|
|
644
|
+
const meteredness = engineMeteredness(id, cfg, env);
|
|
645
|
+
if (meteredness === 'free')
|
|
457
646
|
continue;
|
|
458
647
|
refuses.push({
|
|
459
648
|
engine: id,
|
|
460
|
-
reason: refusalReason({ kind: 'engine', id, locality:
|
|
649
|
+
reason: refusalReason({ kind: 'engine', id, locality: engineLocality(id, cfg, env), meteredness }, asIfEnabled),
|
|
461
650
|
});
|
|
462
651
|
}
|
|
463
652
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-only.js","sourceRoot":"","sources":["../../../src/core/policy/local-only.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local-only.js","sourceRoot":"","sources":["../../../src/core/policy/local-only.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
* Pure, deterministic functions — no I/O, no side effects. All functions
|
|
5
5
|
* return new objects; RunUsage is never mutated in place.
|
|
6
6
|
*/
|
|
7
|
-
import type { RunUsage, RunBudget } from '../types.js';
|
|
7
|
+
import type { AshlrConfig, RunUsage, RunBudget } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Test-only: drop memoised answers so suites that vary env or registry entries
|
|
10
|
+
* stay independent of each other's ordering.
|
|
11
|
+
*/
|
|
12
|
+
export declare function __resetBudgetMeterednessCacheForTests(): void;
|
|
8
13
|
/**
|
|
9
14
|
* Return a fresh, zeroed RunUsage.
|
|
10
15
|
*/
|
|
@@ -48,19 +53,28 @@ export declare const CACHE_READ_MULT = 0.1;
|
|
|
48
53
|
/**
|
|
49
54
|
* Estimated USD cost for a single model call.
|
|
50
55
|
*
|
|
51
|
-
* -
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
56
|
+
* - PROVABLY FREE subjects → 0. That is `subjectMeteredness(...) === 'free'`:
|
|
57
|
+
* loopback endpoints and the local serving runtimes, whatever they are called
|
|
58
|
+
* in either id space.
|
|
59
|
+
* - Everything else → looked up from the static price table by matching the id
|
|
60
|
+
* (case-insensitive prefix match against known keys). Falls back to a
|
|
61
|
+
* conservative $3/$15 per-M-token estimate when nothing matches — which is
|
|
62
|
+
* where `'ashlrcode'` lands, ON PURPOSE. A metered subject must never report
|
|
63
|
+
* $0; a wrong number invites scrutiny, a zero ends it.
|
|
55
64
|
* - M246: optional cache token params (default 0) add tiered cache pricing
|
|
56
65
|
* on top of the base cost. Existing callers with no cache args are unaffected.
|
|
57
66
|
*
|
|
58
|
-
* @param
|
|
67
|
+
* @param subject Provider id OR engine id — e.g. 'ollama', 'anthropic',
|
|
68
|
+
* 'local-coder', 'ashlrcode'. Both id spaces resolve; see
|
|
69
|
+
* `meterednessOf` for why this parameter used to lie.
|
|
59
70
|
* @param tokensIn Number of prompt/input tokens (non-cached).
|
|
60
71
|
* @param tokensOut Number of completion/output tokens.
|
|
61
72
|
* @param cacheRead M246: Cache-read tokens (0 by default).
|
|
62
73
|
* @param cacheWrite5m M246: 5-min TTL cache-write tokens (0 by default).
|
|
63
74
|
* @param cacheWrite1h M246: 1-hour TTL cache-write tokens (0 by default).
|
|
64
|
-
* @
|
|
75
|
+
* @param cfg Optional config, so engines registered through
|
|
76
|
+
* `cfg.foundry.engines` classify correctly. Omitting it
|
|
77
|
+
* can only make a subject LESS provably free, never more.
|
|
78
|
+
* @returns Estimated USD cost as a number (0 only when provably free).
|
|
65
79
|
*/
|
|
66
|
-
export declare function estCostUsd(
|
|
80
|
+
export declare function estCostUsd(subject: string, tokensIn: number, tokensOut: number, cacheRead?: number, cacheWrite5m?: number, cacheWrite1h?: number, cfg?: AshlrConfig): number;
|