@ashlr/hub 3.7.0 → 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.
Files changed (65) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/build-identity.json +2 -2
  3. package/dist/core/policy/local-only.d.ts +142 -2
  4. package/dist/core/policy/local-only.js +204 -15
  5. package/dist/core/policy/local-only.js.map +1 -1
  6. package/dist/core/run/budget.d.ts +22 -8
  7. package/dist/core/run/budget.js +80 -12
  8. package/dist/core/run/budget.js.map +1 -1
  9. package/dist/core/run/sandboxed-engine.js +3 -3
  10. package/dist/core/run/sandboxed-engine.js.map +1 -1
  11. package/dist/core/universe/builtins/preparation/manifest.json +1 -1
  12. package/dist/core/universe/builtins/preparation/preparation-bridge.mjs +61 -9
  13. package/dist/core/universe/builtins/preparation/preparation-verification-fixtures.mjs +60 -8
  14. package/dist/core/verse/session-engine.d.ts +42 -1
  15. package/dist/core/verse/session-engine.js +79 -2
  16. package/dist/core/verse/session-engine.js.map +1 -1
  17. package/dist/core/web/public/next/assets/{App-vtaHB9mp.js → App-BsbJFA2j.js} +2 -2
  18. package/dist/core/web/public/next/assets/{App-vtaHB9mp.js.map → App-BsbJFA2j.js.map} +1 -1
  19. package/dist/core/web/public/next/assets/{ApprovalsSection-B-bFJ0I9.js → ApprovalsSection-2CCSoBTJ.js} +2 -2
  20. package/dist/core/web/public/next/assets/{ApprovalsSection-B-bFJ0I9.js.map → ApprovalsSection-2CCSoBTJ.js.map} +1 -1
  21. package/dist/core/web/public/next/assets/{AutonomySection-DoqmsCjw.js → AutonomySection-yeNNUPur.js} +2 -2
  22. package/dist/core/web/public/next/assets/{AutonomySection-DoqmsCjw.js.map → AutonomySection-yeNNUPur.js.map} +1 -1
  23. package/dist/core/web/public/next/assets/{ChatSection-vNPIJffd.js → ChatSection-DwDDnCZQ.js} +2 -2
  24. package/dist/core/web/public/next/assets/{ChatSection-vNPIJffd.js.map → ChatSection-DwDDnCZQ.js.map} +1 -1
  25. package/dist/core/web/public/next/assets/{ConfirmDialog-Dd2APQhB.js → ConfirmDialog-C363ty_c.js} +2 -2
  26. package/dist/core/web/public/next/assets/{ConfirmDialog-Dd2APQhB.js.map → ConfirmDialog-C363ty_c.js.map} +1 -1
  27. package/dist/core/web/public/next/assets/{Dialog-CPM9JxBc.js → Dialog-nK15L1M0.js} +2 -2
  28. package/dist/core/web/public/next/assets/{Dialog-CPM9JxBc.js.map → Dialog-nK15L1M0.js.map} +1 -1
  29. package/dist/core/web/public/next/assets/{DiffViewer-B84qVef9.js → DiffViewer-D369eZe8.js} +2 -2
  30. package/dist/core/web/public/next/assets/{DiffViewer-B84qVef9.js.map → DiffViewer-D369eZe8.js.map} +1 -1
  31. package/dist/core/web/public/next/assets/{McpSection-CEUpV_5X.js → McpSection-DVgiSYG1.js} +2 -2
  32. package/dist/core/web/public/next/assets/{McpSection-CEUpV_5X.js.map → McpSection-DVgiSYG1.js.map} +1 -1
  33. package/dist/core/web/public/next/assets/{Meter--h3MmZS-.js → Meter-Cmo1pLbk.js} +2 -2
  34. package/dist/core/web/public/next/assets/{Meter--h3MmZS-.js.map → Meter-Cmo1pLbk.js.map} +1 -1
  35. package/dist/core/web/public/next/assets/{MutationTokenDialog-DA8t97XT.js → MutationTokenDialog-B9I4PAcp.js} +2 -2
  36. package/dist/core/web/public/next/assets/{MutationTokenDialog-DA8t97XT.js.map → MutationTokenDialog-B9I4PAcp.js.map} +1 -1
  37. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-Bq7Vyud0.js → ResourcePoolConsoleApp-z6tJj3s9.js} +2 -2
  38. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-Bq7Vyud0.js.map → ResourcePoolConsoleApp-z6tJj3s9.js.map} +1 -1
  39. package/dist/core/web/public/next/assets/{RouteErrorBoundary-Badio_uO.js → RouteErrorBoundary-OSajL45F.js} +2 -2
  40. package/dist/core/web/public/next/assets/{RouteErrorBoundary-Badio_uO.js.map → RouteErrorBoundary-OSajL45F.js.map} +1 -1
  41. package/dist/core/web/public/next/assets/{SettingsSection-BwrpQlpP.js → SettingsSection-B3YH2Npi.js} +2 -2
  42. package/dist/core/web/public/next/assets/{SettingsSection-BwrpQlpP.js.map → SettingsSection-B3YH2Npi.js.map} +1 -1
  43. package/dist/core/web/public/next/assets/{UniverseConsoleApp-_FSohAdN.js → UniverseConsoleApp-wEKIzl1M.js} +2 -2
  44. package/dist/core/web/public/next/assets/{UniverseConsoleApp-_FSohAdN.js.map → UniverseConsoleApp-wEKIzl1M.js.map} +1 -1
  45. package/dist/core/web/public/next/assets/{UniverseView-DqcXbed4.js → UniverseView-CQVpJqqI.js} +2 -2
  46. package/dist/core/web/public/next/assets/{UniverseView-DqcXbed4.js.map → UniverseView-CQVpJqqI.js.map} +1 -1
  47. package/dist/core/web/public/next/assets/{UsageSection-Bq6Daaby.js → UsageSection-dToBThXe.js} +2 -2
  48. package/dist/core/web/public/next/assets/{UsageSection-Bq6Daaby.js.map → UsageSection-dToBThXe.js.map} +1 -1
  49. package/dist/core/web/public/next/assets/{VerseConsoleApp-CsIQv9id.js → VerseConsoleApp-DHU32JCQ.js} +3 -3
  50. package/dist/core/web/public/next/assets/{VerseConsoleApp-CsIQv9id.js.map → VerseConsoleApp-DHU32JCQ.js.map} +1 -1
  51. package/dist/core/web/public/next/assets/{charts-CTZJ-JrH.js → charts-BopViIha.js} +2 -2
  52. package/dist/core/web/public/next/assets/{charts-CTZJ-JrH.js.map → charts-BopViIha.js.map} +1 -1
  53. package/dist/core/web/public/next/assets/{global-D6bTxIRn.js → global-DMWakEhP.js} +2 -2
  54. package/dist/core/web/public/next/assets/{global-D6bTxIRn.js.map → global-DMWakEhP.js.map} +1 -1
  55. package/dist/core/web/public/next/assets/{icons-D9vlf85u.js → icons-L06pQH6j.js} +2 -2
  56. package/dist/core/web/public/next/assets/{icons-D9vlf85u.js.map → icons-L06pQH6j.js.map} +1 -1
  57. package/dist/core/web/public/next/assets/{index-CZamKRUg.js → index-CXgVQHek.js} +3 -3
  58. package/dist/core/web/public/next/assets/{index-CZamKRUg.js.map → index-CXgVQHek.js.map} +1 -1
  59. package/dist/core/web/public/next/assets/{queries-B8eBnFox.js → queries-D3sSlan1.js} +2 -2
  60. package/dist/core/web/public/next/assets/{queries-B8eBnFox.js.map → queries-D3sSlan1.js.map} +1 -1
  61. package/dist/core/web/public/next/assets/{use-guarded-action-bzrVVAYq.js → use-guarded-action-BxfJ9E-n.js} +2 -2
  62. package/dist/core/web/public/next/assets/{use-guarded-action-bzrVVAYq.js.map → use-guarded-action-BxfJ9E-n.js.map} +1 -1
  63. package/dist/core/web/public/next/index.html +1 -1
  64. package/dist/release-dependency-inventory.json +1 -1
  65. package/package.json +1 -1
@@ -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
- * - Local providers (ollama, lmstudio) → always 0.
52
- * - Cloud providers → looked up from the static price table by matching
53
- * the provider id (case-insensitive prefix match against known keys).
54
- * Falls back to a conservative $3/$15 per-M-token estimate when unknown.
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 provider Provider id string (e.g. 'ollama', 'anthropic', 'openai').
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
- * @returns Estimated USD cost as a number (0 for local).
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(provider: string, tokensIn: number, tokensOut: number, cacheRead?: number, cacheWrite5m?: number, cacheWrite1h?: number): number;
80
+ export declare function estCostUsd(subject: string, tokensIn: number, tokensOut: number, cacheRead?: number, cacheWrite5m?: number, cacheWrite1h?: number, cfg?: AshlrConfig): number;
@@ -4,6 +4,7 @@
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 { subjectMeteredness } from '../policy/local-only.js';
7
8
  // ---------------------------------------------------------------------------
8
9
  // Static price table (rough $/M-token estimates for cloud providers).
9
10
  // Local providers always return 0. Cloud prices are ESTIMATES only — used
@@ -36,8 +37,66 @@ const PRICE_OUT = {
36
37
  mistral: 6.0,
37
38
  cohere: 3.0,
38
39
  };
39
- /** Providers that are always local (zero cost). */
40
- const LOCAL_PROVIDERS = new Set(['ollama', 'lmstudio']);
40
+ // ---------------------------------------------------------------------------
41
+ // What costs nothing — asked, never restated
42
+ // ---------------------------------------------------------------------------
43
+ /**
44
+ * WHAT MAKES A CALL FREE IS METEREDNESS, NEVER LOCALITY.
45
+ *
46
+ * This file used to carry its own two-entry set (`ollama`, `lmstudio`). That was
47
+ * wrong in one direction — `local-coder` and `llama-server` serve the same
48
+ * weights off the same loopback port and were priced as cloud — and the obvious
49
+ * repair was worse in the other: routing the question through
50
+ * `engineLocality` would have called `ashlrcode` local and billed every
51
+ * ashlrcode run at $0.
52
+ *
53
+ * ZERO IS WORSE THAN WRONG. Before this change `'ashlrcode'` matched no price
54
+ * key and fell to the conservative $3/$15 estimate: a wrong number, but a
55
+ * VISIBLE one, and a wrong number invites scrutiny where a zero ends it. So the
56
+ * question asked here is the spend question, and `ashlrcode` stays priced.
57
+ *
58
+ * `subjectMeteredness` also settles the id-space confusion this function was
59
+ * living with: the doc comment below said "provider id" while
60
+ * `run/sandboxed-engine.ts` passed an ENGINE id at `:1825`, `:2161` and
61
+ * `:3061`. Both id spaces now resolve, and the parameter is named for it.
62
+ */
63
+ function meterednessOf(subject, cfg) {
64
+ const key = subject.trim().toLowerCase();
65
+ if (key.length === 0)
66
+ return 'unknown';
67
+ const bucket = cacheBucket(cfg);
68
+ const hit = bucket.get(key);
69
+ if (hit !== undefined)
70
+ return hit;
71
+ const answer = subjectMeteredness(subject, cfg);
72
+ bucket.set(key, answer);
73
+ return answer;
74
+ }
75
+ /**
76
+ * Memoised because `estCostUsd` runs once per model step and per usage event in
77
+ * the rollup, while `subjectMeteredness` resolves the whole engine registry.
78
+ * Keyed by cfg identity so a caller that passes a different config is not served
79
+ * another config's answer; the no-cfg bucket is separate for the same reason.
80
+ */
81
+ const meterednessByCfg = new WeakMap();
82
+ const meterednessNoCfg = new Map();
83
+ function cacheBucket(cfg) {
84
+ if (!cfg)
85
+ return meterednessNoCfg;
86
+ const existing = meterednessByCfg.get(cfg);
87
+ if (existing)
88
+ return existing;
89
+ const fresh = new Map();
90
+ meterednessByCfg.set(cfg, fresh);
91
+ return fresh;
92
+ }
93
+ /**
94
+ * Test-only: drop memoised answers so suites that vary env or registry entries
95
+ * stay independent of each other's ordering.
96
+ */
97
+ export function __resetBudgetMeterednessCacheForTests() {
98
+ meterednessNoCfg.clear();
99
+ }
41
100
  // ---------------------------------------------------------------------------
42
101
  // Public API
43
102
  // ---------------------------------------------------------------------------
@@ -95,25 +154,34 @@ export const CACHE_READ_MULT = 0.1; // cache read (served from cache)
95
154
  /**
96
155
  * Estimated USD cost for a single model call.
97
156
  *
98
- * - Local providers (ollama, lmstudio) → always 0.
99
- * - Cloud providers → looked up from the static price table by matching
100
- * the provider id (case-insensitive prefix match against known keys).
101
- * Falls back to a conservative $3/$15 per-M-token estimate when unknown.
157
+ * - PROVABLY FREE subjects → 0. That is `subjectMeteredness(...) === 'free'`:
158
+ * loopback endpoints and the local serving runtimes, whatever they are called
159
+ * in either id space.
160
+ * - Everything else → looked up from the static price table by matching the id
161
+ * (case-insensitive prefix match against known keys). Falls back to a
162
+ * conservative $3/$15 per-M-token estimate when nothing matches — which is
163
+ * where `'ashlrcode'` lands, ON PURPOSE. A metered subject must never report
164
+ * $0; a wrong number invites scrutiny, a zero ends it.
102
165
  * - M246: optional cache token params (default 0) add tiered cache pricing
103
166
  * on top of the base cost. Existing callers with no cache args are unaffected.
104
167
  *
105
- * @param provider Provider id string (e.g. 'ollama', 'anthropic', 'openai').
168
+ * @param subject Provider id OR engine id — e.g. 'ollama', 'anthropic',
169
+ * 'local-coder', 'ashlrcode'. Both id spaces resolve; see
170
+ * `meterednessOf` for why this parameter used to lie.
106
171
  * @param tokensIn Number of prompt/input tokens (non-cached).
107
172
  * @param tokensOut Number of completion/output tokens.
108
173
  * @param cacheRead M246: Cache-read tokens (0 by default).
109
174
  * @param cacheWrite5m M246: 5-min TTL cache-write tokens (0 by default).
110
175
  * @param cacheWrite1h M246: 1-hour TTL cache-write tokens (0 by default).
111
- * @returns Estimated USD cost as a number (0 for local).
176
+ * @param cfg Optional config, so engines registered through
177
+ * `cfg.foundry.engines` classify correctly. Omitting it
178
+ * can only make a subject LESS provably free, never more.
179
+ * @returns Estimated USD cost as a number (0 only when provably free).
112
180
  */
113
- export function estCostUsd(provider, tokensIn, tokensOut, cacheRead = 0, cacheWrite5m = 0, cacheWrite1h = 0) {
114
- const key = provider.toLowerCase();
115
- // Fast path: known local providers
116
- if (LOCAL_PROVIDERS.has(key))
181
+ export function estCostUsd(subject, tokensIn, tokensOut, cacheRead = 0, cacheWrite5m = 0, cacheWrite1h = 0, cfg) {
182
+ const key = subject.toLowerCase();
183
+ // Fast path: nothing that is PROVABLY free can bill anyone.
184
+ if (meterednessOf(subject, cfg) === 'free')
117
185
  return 0;
118
186
  // Prefix match against the price table keys
119
187
  let priceIn = 3.0; // conservative fallback
@@ -1 +1 @@
1
- {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../../src/core/run/budget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../../src/core/run/budget.ts"],"names":[],"mappings":"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"}
@@ -1448,7 +1448,7 @@ export async function runEngineSandboxed(engine, goal, cfg, opts) {
1448
1448
  hasReportedUsage = true;
1449
1449
  usage.tokensIn += res.usage.tokensIn;
1450
1450
  usage.tokensOut += res.usage.tokensOut;
1451
- usage.estCostUsd = estCostUsd(engine, usage.tokensIn, usage.tokensOut);
1451
+ usage.estCostUsd = estCostUsd(engine, usage.tokensIn, usage.tokensOut, 0, 0, 0, cfg);
1452
1452
  }
1453
1453
  // Persist one fixed-schema row per actual retry attempt. Raw prompt/argv,
1454
1454
  // output/error, paths, diffs, environment, and file content never cross
@@ -1757,7 +1757,7 @@ export async function runEngineSandboxed(engine, goal, cfg, opts) {
1757
1757
  hasReportedUsage = true;
1758
1758
  usage.tokensIn += r.usage.tokensIn;
1759
1759
  usage.tokensOut += r.usage.tokensOut;
1760
- usage.estCostUsd = estCostUsd(engine, usage.tokensIn, usage.tokensOut);
1760
+ usage.estCostUsd = estCostUsd(engine, usage.tokensIn, usage.tokensOut, 0, 0, 0, cfg);
1761
1761
  }
1762
1762
  if (processCleanupUnconfirmed(r))
1763
1763
  processCleanupFailure = r;
@@ -2597,7 +2597,7 @@ export async function runApiModelSandboxed(engine, goal, cfg, opts) {
2597
2597
  }
2598
2598
  const finalUsage = {
2599
2599
  ...usage,
2600
- estCostUsd: estCostUsd(engine, usage.tokensIn, usage.tokensOut),
2600
+ estCostUsd: estCostUsd(engine, usage.tokensIn, usage.tokensOut, 0, 0, 0, cfg),
2601
2601
  };
2602
2602
  setRunActionCount(actionCounts, 'modelSteps', steps.filter((step) => step.kind === 'model').length);
2603
2603
  setRunActionCount(actionCounts, 'toolSteps', steps.filter((step) => step.kind === 'tool').length);