aimeat 3.3.0 → 3.3.2

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 (141) hide show
  1. package/README.md +1 -1
  2. package/dist/.env.example +10 -1
  3. package/dist/build-stamp.json +4 -4
  4. package/dist/locales/en.json +9263 -9225
  5. package/dist/locales/es.json +9255 -9217
  6. package/dist/locales/fi.json +9263 -9225
  7. package/dist/public/css/views/admin.css +935 -860
  8. package/dist/public/css/views/chat.css +393 -388
  9. package/dist/public/js/services/admin.js +12 -0
  10. package/dist/public/robots.node.txt +4 -0
  11. package/dist/public/views/admin/config-tab.js +333 -185
  12. package/dist/public/views/admin/usage-tab.js +373 -307
  13. package/dist/public/views/chat/parts.js +25 -6
  14. package/dist/public/views/profile/landing-page.cards.js +732 -700
  15. package/dist/public/views/profile/landing-page.js +6 -2
  16. package/dist/scripts/audit-mcp-schemas.js +22 -6
  17. package/dist/scripts/audit-mcp-schemas.js.map +1 -1
  18. package/dist/scripts/check-ai-disclosure.d.ts +1 -1
  19. package/dist/scripts/check-ai-disclosure.d.ts.map +1 -1
  20. package/dist/scripts/check-ai-disclosure.js +19 -3
  21. package/dist/scripts/check-ai-disclosure.js.map +1 -1
  22. package/dist/scripts/check-config-coverage.d.ts +2 -0
  23. package/dist/scripts/check-config-coverage.d.ts.map +1 -0
  24. package/dist/scripts/check-config-coverage.js +129 -0
  25. package/dist/scripts/check-config-coverage.js.map +1 -0
  26. package/dist/src/auth/ai-gate.d.ts +25 -0
  27. package/dist/src/auth/ai-gate.d.ts.map +1 -0
  28. package/dist/src/auth/ai-gate.js +21 -0
  29. package/dist/src/auth/ai-gate.js.map +1 -0
  30. package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
  31. package/dist/src/cli/connect/mcp/tools/apps.js +102 -20
  32. package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
  33. package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
  34. package/dist/src/cli/connect/tool-call-defs-agent.js +38 -9
  35. package/dist/src/cli/connect/tool-call-defs-agent.js.map +1 -1
  36. package/dist/src/cli/connect/tool-call-defs-apps.d.ts.map +1 -1
  37. package/dist/src/cli/connect/tool-call-defs-apps.js +199 -103
  38. package/dist/src/cli/connect/tool-call-defs-apps.js.map +1 -1
  39. package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
  40. package/dist/src/cli/connect/tool-call-defs-core.js +149 -26
  41. package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
  42. package/dist/src/cli/connect/tool-call-defs-organism.d.ts.map +1 -1
  43. package/dist/src/cli/connect/tool-call-defs-organism.js +20 -3
  44. package/dist/src/cli/connect/tool-call-defs-organism.js.map +1 -1
  45. package/dist/src/cli/connect/tool-call-defs-packages.d.ts +23 -0
  46. package/dist/src/cli/connect/tool-call-defs-packages.d.ts.map +1 -0
  47. package/dist/src/cli/connect/tool-call-defs-packages.js +45 -0
  48. package/dist/src/cli/connect/tool-call-defs-packages.js.map +1 -0
  49. package/dist/src/cli/connect/tool-call-defs-workflows.d.ts +14 -0
  50. package/dist/src/cli/connect/tool-call-defs-workflows.d.ts.map +1 -0
  51. package/dist/src/cli/connect/tool-call-defs-workflows.js +75 -0
  52. package/dist/src/cli/connect/tool-call-defs-workflows.js.map +1 -0
  53. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  54. package/dist/src/cli/connect/tool-call.js +54 -1
  55. package/dist/src/cli/connect/tool-call.js.map +1 -1
  56. package/dist/src/config-types-ai.d.ts +13 -0
  57. package/dist/src/config-types-ai.d.ts.map +1 -1
  58. package/dist/src/config.d.ts.map +1 -1
  59. package/dist/src/config.js +2 -0
  60. package/dist/src/config.js.map +1 -1
  61. package/dist/src/generated/api-types.d.ts +196 -0
  62. package/dist/src/generated/api-types.d.ts.map +1 -1
  63. package/dist/src/mcp/annotations.d.ts.map +1 -1
  64. package/dist/src/mcp/annotations.js +8 -0
  65. package/dist/src/mcp/annotations.js.map +1 -1
  66. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
  67. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +25 -8
  68. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
  69. package/dist/src/mcp/catalog/definitions/packages.d.ts +17 -0
  70. package/dist/src/mcp/catalog/definitions/packages.d.ts.map +1 -0
  71. package/dist/src/mcp/catalog/definitions/packages.js +46 -0
  72. package/dist/src/mcp/catalog/definitions/packages.js.map +1 -0
  73. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  74. package/dist/src/mcp/catalog/definitions.js +2 -0
  75. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  76. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
  77. package/dist/src/mcp/catalog/scopes.js +2 -0
  78. package/dist/src/mcp/catalog/scopes.js.map +1 -1
  79. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  80. package/dist/src/mcp/catalog/surfaces.js +2 -0
  81. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  82. package/dist/src/routes/admin-usage.d.ts.map +1 -1
  83. package/dist/src/routes/admin-usage.js +57 -0
  84. package/dist/src/routes/admin-usage.js.map +1 -1
  85. package/dist/src/routes/ai.d.ts.map +1 -1
  86. package/dist/src/routes/ai.js +4 -15
  87. package/dist/src/routes/ai.js.map +1 -1
  88. package/dist/src/routes/bootstrap.d.ts +2 -1
  89. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  90. package/dist/src/routes/bootstrap.js +7 -18
  91. package/dist/src/routes/bootstrap.js.map +1 -1
  92. package/dist/src/routes/chat.d.ts +3 -0
  93. package/dist/src/routes/chat.d.ts.map +1 -1
  94. package/dist/src/routes/chat.js +20 -0
  95. package/dist/src/routes/chat.js.map +1 -1
  96. package/dist/src/routes/llm-proxy.d.ts +34 -0
  97. package/dist/src/routes/llm-proxy.d.ts.map +1 -0
  98. package/dist/src/routes/llm-proxy.js +258 -0
  99. package/dist/src/routes/llm-proxy.js.map +1 -0
  100. package/dist/src/routes/sitemaps.d.ts +22 -0
  101. package/dist/src/routes/sitemaps.d.ts.map +1 -0
  102. package/dist/src/routes/sitemaps.js +67 -0
  103. package/dist/src/routes/sitemaps.js.map +1 -0
  104. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  105. package/dist/src/server-bootstrap/routes-loader.js +2 -0
  106. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  107. package/dist/src/services/ai-completion.d.ts +76 -0
  108. package/dist/src/services/ai-completion.d.ts.map +1 -1
  109. package/dist/src/services/ai-completion.js +104 -68
  110. package/dist/src/services/ai-completion.js.map +1 -1
  111. package/dist/src/services/chat-session.d.ts +3 -0
  112. package/dist/src/services/chat-session.d.ts.map +1 -1
  113. package/dist/src/services/chat-session.js +4 -0
  114. package/dist/src/services/chat-session.js.map +1 -1
  115. package/dist/src/services/config-schema.d.ts +4 -0
  116. package/dist/src/services/config-schema.d.ts.map +1 -1
  117. package/dist/src/services/config-schema.js +33 -0
  118. package/dist/src/services/config-schema.js.map +1 -1
  119. package/dist/src/services/goose-acp.d.ts.map +1 -1
  120. package/dist/src/services/goose-acp.js +11 -0
  121. package/dist/src/services/goose-acp.js.map +1 -1
  122. package/dist/src/services/handbooks/appdev.d.ts +1 -1
  123. package/dist/src/services/handbooks/appdev.d.ts.map +1 -1
  124. package/dist/src/services/handbooks/appdev.js +7 -1
  125. package/dist/src/services/handbooks/appdev.js.map +1 -1
  126. package/dist/src/services/openrouter.d.ts +23 -0
  127. package/dist/src/services/openrouter.d.ts.map +1 -1
  128. package/dist/src/services/openrouter.js +32 -1
  129. package/dist/src/services/openrouter.js.map +1 -1
  130. package/dist/src/services/usage-summary.d.ts +15 -0
  131. package/dist/src/services/usage-summary.d.ts.map +1 -1
  132. package/dist/src/services/usage-summary.js +15 -0
  133. package/dist/src/services/usage-summary.js.map +1 -1
  134. package/dist/src/storage/providers/postgres-kysely/methods/wallet.d.ts.map +1 -1
  135. package/dist/src/storage/providers/postgres-kysely/methods/wallet.js +23 -4
  136. package/dist/src/storage/providers/postgres-kysely/methods/wallet.js.map +1 -1
  137. package/dist/src/storage/providers/sqlite/methods/work.d.ts +5 -0
  138. package/dist/src/storage/providers/sqlite/methods/work.d.ts.map +1 -1
  139. package/dist/src/storage/providers/sqlite/methods/work.js +34 -22
  140. package/dist/src/storage/providers/sqlite/methods/work.js.map +1 -1
  141. package/package.json +4 -1
@@ -19,6 +19,11 @@
19
19
  * import { completeForOwner, AiCompletionError } from '../services/ai-completion.js';
20
20
  * const r = await completeForOwner(storage, config, gaii, { prompt });
21
21
  * @version-history
22
+ * v3.0.0 — 2026-08-16 — The decision and the bookkeeping are their own functions, prepareAiCall
23
+ * and settleAiCall, and completeForOwner runs both. Nothing changed about what either does; the
24
+ * chat proxy needs the same key choice, the same budget gate, the same free-model fallback and
25
+ * the same usage record, and the alternative was a second implementation of all four on the
26
+ * door that spends the most money.
22
27
  * v1.x — 2026-08-16 — Which key pays is decided in services/ai-allowance.ts: the person's own,
23
28
  * then the node's if they have allowance left. `apiKeyScope` stops being hardcoded to 'own' —
24
29
  * it was hardcoded because before the node had a key of its own there was only one possible
@@ -83,6 +88,9 @@ export interface UsageRecord {
83
88
  updated_at: string;
84
89
  }
85
90
  export declare function todayKey(): string;
91
+ /** The fallback when the provider does not report a cost. Exported so the chat proxy uses the same
92
+ * arithmetic rather than a second guess at what a turn was worth. */
93
+ export declare function estimateCostUsd(promptTokens: number, completionTokens: number): number;
86
94
  export declare function getDailyBudgetUsd(prefs: Record<string, unknown>): number;
87
95
  /** Typed error so the HTTP route can map to a status/code and the scheduler can log it. */
88
96
  export declare class AiCompletionError extends Error {
@@ -230,5 +238,73 @@ export declare function getUsageHistory(storage: Storage, gaii: string, days?: n
230
238
  * given), calls the provider, and records usage. Throws AiCompletionError on any
231
239
  * gated/failure condition.
232
240
  */
241
+ /**
242
+ * Everything decided BEFORE a model is called, for one owner and one call.
243
+ *
244
+ * Which pocket pays, which model answers, whether the allowance has run out and the answer has to
245
+ * come from a free model instead of a refusal: those are one decision, and this is where it is made.
246
+ * `completeForOwner` runs it and then calls the provider itself; the chat proxy runs the same one
247
+ * and then streams the provider's own bytes back. Two call shapes, one set of rules — the alternative
248
+ * was a second implementation of the key choice and the budget, which is how a paywall ends up
249
+ * enforced on one door and not the other.
250
+ */
251
+ export interface AiCallPlan {
252
+ prefs: Record<string, unknown>;
253
+ provider: ProviderType;
254
+ baseUrl: string;
255
+ /** The decrypted key that will pay. Never logged, never returned to a caller. */
256
+ key: string | undefined;
257
+ keyScope: 'own' | 'node';
258
+ /** What is left on the node's allowance, when the node is paying. */
259
+ allowanceRemainingUsd?: number;
260
+ /** Today's usage record, read once so the settle step does not read it again. */
261
+ usage: UsageRecord;
262
+ dailyBudgetUsd: number;
263
+ model: string;
264
+ /** True when the allowance was spent and a free model is answering instead of nothing. */
265
+ degradedToFree: boolean;
266
+ }
267
+ export interface PrepareAiCallOptions {
268
+ /** An explicit model. A caller that named one is not asking the node to choose. */
269
+ model?: string;
270
+ modelRole?: 'reasoning' | 'execution';
271
+ appId?: string;
272
+ /** Image inputs need a vision-capable model, whatever the owner's text default is. */
273
+ hasImages?: boolean;
274
+ }
275
+ /**
276
+ * Decide who pays, what answers, and whether this call may happen at all.
277
+ *
278
+ * Throws before anything is spent: a provider the node does not allow, an app the owner has not
279
+ * allowed, a missing key, a daily budget already used up. Refusing before the write is the order,
280
+ * not just the presence of the checks.
281
+ */
282
+ export declare function prepareAiCall(storage: Storage, config: AimeatConfig, gaii: string, opts?: PrepareAiCallOptions): Promise<AiCallPlan>;
283
+ export interface AiCallOutcome {
284
+ /** The model that actually answered, which is not always the one that was asked for. */
285
+ model: string;
286
+ promptTokens: number;
287
+ completionTokens: number;
288
+ totalTokens: number;
289
+ costUsd: number;
290
+ /** The text the model produced, hashed into the provenance record. */
291
+ content: string;
292
+ appId?: string;
293
+ /** Where this call came from, for the usage record. */
294
+ source: string;
295
+ }
296
+ export interface AiCallSettlement {
297
+ usage: UsageRecord;
298
+ allowanceRemainingUsd?: number;
299
+ provenance?: AiProvenanceRecordRow;
300
+ }
301
+ /**
302
+ * Everything recorded AFTER a model answered: usage, the allowance draw-down, and provenance.
303
+ *
304
+ * Bookkeeping never fails a call the owner has already paid for, so the provenance mint is caught
305
+ * and logged rather than thrown — an operator seeing that line knows generated content is going out
306
+ * unrecorded, which is exactly the thing they would want to fix.
307
+ */
308
+ export declare function settleAiCall(storage: Storage, config: AimeatConfig, gaii: string, plan: AiCallPlan, outcome: AiCallOutcome): Promise<AiCallSettlement>;
233
309
  export declare function completeForOwner(storage: Storage, config: AimeatConfig, gaii: string, opts: CompleteForOwnerOptions): Promise<CompleteForOwnerResult>;
234
310
  //# sourceMappingURL=ai-completion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-completion.d.ts","sourceRoot":"","sources":["../../../src/services/ai-completion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-completion.d.ts","sourceRoot":"","sources":["../../../src/services/ai-completion.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,9 @@ export const DEFAULT_DAILY_BUDGET_USD = 1.0;
19
19
  export function todayKey() {
20
20
  return new Date().toISOString().slice(0, 10);
21
21
  }
22
- function estimateCostUsd(promptTokens, completionTokens) {
22
+ /** The fallback when the provider does not report a cost. Exported so the chat proxy uses the same
23
+ * arithmetic rather than a second guess at what a turn was worth. */
24
+ export function estimateCostUsd(promptTokens, completionTokens) {
23
25
  return promptTokens * FALLBACK_PROMPT_COST_PER_TOKEN
24
26
  + completionTokens * FALLBACK_COMPLETION_COST_PER_TOKEN;
25
27
  }
@@ -245,18 +247,13 @@ async function upsertUsage(storage, gaii, value) {
245
247
  });
246
248
  }
247
249
  /**
248
- * Run one AI completion on behalf of an owner. Loads the owner's key + budget
249
- * settings, enforces the daily budget (and per-app quota/allowlist if appId is
250
- * given), calls the provider, and records usage. Throws AiCompletionError on any
251
- * gated/failure condition.
250
+ * Decide who pays, what answers, and whether this call may happen at all.
251
+ *
252
+ * Throws before anything is spent: a provider the node does not allow, an app the owner has not
253
+ * allowed, a missing key, a daily budget already used up. Refusing before the write is the order,
254
+ * not just the presence of the checks.
252
255
  */
253
- export async function completeForOwner(storage, config, gaii, opts) {
254
- if (!opts.prompt || typeof opts.prompt !== 'string') {
255
- throw new AiCompletionError('INVALID_BODY', 400, 'prompt is required.');
256
- }
257
- if (opts.prompt.length > 200_000) {
258
- throw new AiCompletionError('PROMPT_TOO_LONG', 400, 'prompt exceeds 200k characters.');
259
- }
256
+ export async function prepareAiCall(storage, config, gaii, opts = {}) {
260
257
  const [apiKeyRecord, prefsRecord, usageRecord] = await Promise.all([
261
258
  storage.getMemory(gaii, 'openrouter.apikey'),
262
259
  storage.getMemory(gaii, 'openrouter.settings'),
@@ -271,31 +268,29 @@ export async function completeForOwner(storage, config, gaii, opts) {
271
268
  // then the node's if they have allowance left. An own key is never metered here — it is their
272
269
  // money and their provider account, which is the whole reason bringing one is recommended.
273
270
  const keyChoice = await resolveAiKey(storage, config, gaii, provider, apiKeyRecord?.value);
274
- const decryptedKey = keyChoice.key;
275
271
  const usage = usageRecord?.value ?? emptyUsage();
276
- const dailyBudget = assertWithinBudget(usage, prefs, opts.appId);
272
+ const dailyBudgetUsd = assertWithinBudget(usage, prefs, opts.appId);
277
273
  // ── Model selection ──
278
- const hasImages = Array.isArray(opts.images) && opts.images.length > 0;
279
274
  // Each role asks the owner first and the node second (services/ai-model-defaults.ts). With no
280
275
  // instance defaults configured every branch resolves exactly as it did before that existed.
281
276
  const roleModel = (role) => resolveModelFor(config, prefs, role);
282
- let selectedModel;
277
+ let model;
283
278
  if (typeof opts.model === 'string' && opts.model) {
284
- selectedModel = opts.model;
279
+ model = opts.model;
285
280
  }
286
- else if (hasImages && roleModel('vision')) {
281
+ else if (opts.hasImages && roleModel('vision')) {
287
282
  // Image inputs need a vision-capable model — the owner's default may be text-only. Use the
288
283
  // configured visionModel (e.g. qwen-2.5-VL) for any request carrying images.
289
- selectedModel = roleModel('vision');
284
+ model = roleModel('vision');
290
285
  }
291
286
  else if (opts.modelRole === 'reasoning' && roleModel('reasoning')) {
292
- selectedModel = roleModel('reasoning');
287
+ model = roleModel('reasoning');
293
288
  }
294
289
  else if (opts.modelRole === 'execution' && roleModel('execution')) {
295
- selectedModel = roleModel('execution');
290
+ model = roleModel('execution');
296
291
  }
297
292
  else {
298
- selectedModel = roleModel('chat')
293
+ model = roleModel('chat')
299
294
  || roleModel('execution')
300
295
  || roleModel('reasoning')
301
296
  // Vendor-neutral default: OpenRouter's free-models router (no specific vendor hardcoded).
@@ -309,44 +304,36 @@ export async function completeForOwner(storage, config, gaii, opts) {
309
304
  if (!config.modelFreeFallback) {
310
305
  throw new AiCompletionError('QUOTA_EXHAUSTED', 402, 'Your allowance on this node is used up. Add more, or set your own OpenRouter key in Settings.');
311
306
  }
312
- selectedModel = config.modelFreeFallback;
307
+ model = config.modelFreeFallback;
313
308
  degradedToFree = true;
314
309
  }
315
- const options = {
316
- temperature: opts.temperature ?? (typeof prefs.temperature === 'number' ? prefs.temperature : undefined),
317
- top_p: opts.topP ?? (typeof prefs.top_p === 'number' ? prefs.top_p : undefined),
318
- max_tokens: typeof opts.maxTokens === 'number' && opts.maxTokens > 0
319
- ? (opts.maxTokens | 0)
320
- : (typeof prefs.max_tokens === 'number' ? prefs.max_tokens : undefined),
310
+ return {
311
+ prefs, provider, baseUrl,
312
+ key: keyChoice.key,
313
+ keyScope: keyChoice.scope,
314
+ ...(keyChoice.scope === 'node' ? { allowanceRemainingUsd: keyChoice.remainingUsd } : {}),
315
+ usage, dailyBudgetUsd, model, degradedToFree,
321
316
  };
322
- let result;
323
- try {
324
- result = await complete(decryptedKey, selectedModel, opts.prompt, opts.systemPrompt, baseUrl, options, opts.images);
325
- }
326
- catch (e) {
327
- const status = e.status;
328
- if (status === 401)
329
- throw new AiCompletionError('INVALID_API_KEY', 401, 'API key was rejected by the provider.');
330
- if (status === 429)
331
- throw new AiCompletionError('RATE_LIMITED', 429, 'Provider rate limit hit. Try again later.');
332
- throw new AiCompletionError('PROVIDER_ERROR', 502, e.message);
333
- }
334
- const promptTok = result.usage?.prompt_tokens ?? 0;
335
- const completionTok = result.usage?.completion_tokens ?? 0;
336
- const totalTok = result.usage?.total_tokens ?? (promptTok + completionTok);
337
- const costExact = typeof result.usage?.cost_usd === 'number';
338
- const costUsd = costExact ? result.usage.cost_usd : estimateCostUsd(promptTok, completionTok);
339
- // ── Record usage (idempotent within the day) ──
340
- const updated = await recordAiUsage(storage, gaii, usage, {
341
- costUsd, tokens: totalTok, appId: opts.appId,
342
- model: result.model, provider, promptTokens: promptTok, completionTokens: completionTok,
343
- source: 'ai-complete', apiKeyScope: keyChoice.scope,
317
+ }
318
+ /**
319
+ * Everything recorded AFTER a model answered: usage, the allowance draw-down, and provenance.
320
+ *
321
+ * Bookkeeping never fails a call the owner has already paid for, so the provenance mint is caught
322
+ * and logged rather than thrown — an operator seeing that line knows generated content is going out
323
+ * unrecorded, which is exactly the thing they would want to fix.
324
+ */
325
+ export async function settleAiCall(storage, config, gaii, plan, outcome) {
326
+ const updated = await recordAiUsage(storage, gaii, plan.usage, {
327
+ costUsd: outcome.costUsd, tokens: outcome.totalTokens, appId: outcome.appId,
328
+ model: outcome.model, provider: plan.provider,
329
+ promptTokens: outcome.promptTokens, completionTokens: outcome.completionTokens,
330
+ source: outcome.source, apiKeyScope: plan.keyScope,
344
331
  });
345
332
  // Only the node's key draws down an allowance. An own key is the person's own account.
346
- const allowanceAfter = keyChoice.scope === 'node'
347
- ? await debitAllowance(storage, config, gaii, costUsd)
333
+ const allowanceAfter = plan.keyScope === 'node'
334
+ ? await debitAllowance(storage, config, gaii, outcome.costUsd)
348
335
  : null;
349
- logger.info(`[ai] gaii=${gaii} app=${opts.appId || '_unknown'} model=${result.model} tokens=${totalTok} cost=$${costUsd.toFixed(4)} day_total=$${updated.total_cost_usd.toFixed(4)}`);
336
+ logger.info(`[ai] gaii=${gaii} app=${outcome.appId || '_unknown'} model=${outcome.model} tokens=${outcome.totalTokens} cost=$${outcome.costUsd.toFixed(4)} day_total=$${updated.total_cost_usd.toFixed(4)}`);
350
337
  // ── Mint the provenance record (TARGET-058) ──
351
338
  // THE mint point for an observed generation. The node just watched a model produce these exact
352
339
  // bytes, so it stamps what it saw: stampedBy 'node', observed true, model, provider, principal,
@@ -362,7 +349,7 @@ export async function completeForOwner(storage, config, gaii, opts) {
362
349
  // attaches it to something public, and goes back to a 404 when they unpublish. A completion is
363
350
  // the owner's own until then.
364
351
  let provenance;
365
- if (config.aiProvenance) {
352
+ if (config.aiProvenance && outcome.content) {
366
353
  try {
367
354
  provenance = await mintProvenance(storage, {
368
355
  stampedBy: 'node',
@@ -371,11 +358,11 @@ export async function completeForOwner(storage, config, gaii, opts) {
371
358
  level: 'ai-generated',
372
359
  humanInvolvement: 'none',
373
360
  method: 'fully-generated',
374
- content: result.content,
361
+ content: outcome.content,
375
362
  generator: {
376
- model: result.model,
377
- provider,
378
- pipeline: opts.appId,
363
+ model: outcome.model,
364
+ provider: plan.provider,
365
+ pipeline: outcome.appId,
379
366
  // What the model VENDOR does about marking is not something we can observe from here.
380
367
  // `unknown` is the honest answer, and it is never silently upgraded to 'yes'.
381
368
  upstreamMarks: 'unknown',
@@ -389,24 +376,73 @@ export async function completeForOwner(storage, config, gaii, opts) {
389
376
  // A completion the owner has already paid for must not fail because bookkeeping did. Logged
390
377
  // rather than swallowed: an operator who sees this knows generated content is going out
391
378
  // unrecorded, which is exactly the thing they would want to fix.
392
- logger.warn(`[ai] provenance mint failed for gaii=${gaii} model=${result.model}: ${err.message}`);
379
+ logger.warn(`[ai] provenance mint failed for gaii=${gaii} model=${outcome.model}: ${err.message}`);
393
380
  }
394
381
  }
382
+ return {
383
+ usage: updated,
384
+ ...(plan.keyScope === 'node'
385
+ ? { allowanceRemainingUsd: allowanceAfter ? Math.max(0, allowanceAfter.granted_usd - allowanceAfter.spent_usd) : plan.allowanceRemainingUsd }
386
+ : {}),
387
+ provenance,
388
+ };
389
+ }
390
+ export async function completeForOwner(storage, config, gaii, opts) {
391
+ if (!opts.prompt || typeof opts.prompt !== 'string') {
392
+ throw new AiCompletionError('INVALID_BODY', 400, 'prompt is required.');
393
+ }
394
+ if (opts.prompt.length > 200_000) {
395
+ throw new AiCompletionError('PROMPT_TOO_LONG', 400, 'prompt exceeds 200k characters.');
396
+ }
397
+ const hasImages = Array.isArray(opts.images) && opts.images.length > 0;
398
+ const plan = await prepareAiCall(storage, config, gaii, {
399
+ model: opts.model, modelRole: opts.modelRole, appId: opts.appId, hasImages,
400
+ });
401
+ const { prefs } = plan;
402
+ const options = {
403
+ temperature: opts.temperature ?? (typeof prefs.temperature === 'number' ? prefs.temperature : undefined),
404
+ top_p: opts.topP ?? (typeof prefs.top_p === 'number' ? prefs.top_p : undefined),
405
+ max_tokens: typeof opts.maxTokens === 'number' && opts.maxTokens > 0
406
+ ? (opts.maxTokens | 0)
407
+ : (typeof prefs.max_tokens === 'number' ? prefs.max_tokens : undefined),
408
+ };
409
+ let result;
410
+ try {
411
+ result = await complete(plan.key, plan.model, opts.prompt, opts.systemPrompt, plan.baseUrl, options, opts.images);
412
+ }
413
+ catch (e) {
414
+ const status = e.status;
415
+ if (status === 401)
416
+ throw new AiCompletionError('INVALID_API_KEY', 401, 'API key was rejected by the provider.');
417
+ if (status === 429)
418
+ throw new AiCompletionError('RATE_LIMITED', 429, 'Provider rate limit hit. Try again later.');
419
+ throw new AiCompletionError('PROVIDER_ERROR', 502, e.message);
420
+ }
421
+ const promptTok = result.usage?.prompt_tokens ?? 0;
422
+ const completionTok = result.usage?.completion_tokens ?? 0;
423
+ const totalTok = result.usage?.total_tokens ?? (promptTok + completionTok);
424
+ const costExact = typeof result.usage?.cost_usd === 'number';
425
+ const costUsd = costExact ? result.usage.cost_usd : estimateCostUsd(promptTok, completionTok);
426
+ const settled = await settleAiCall(storage, config, gaii, plan, {
427
+ model: result.model,
428
+ promptTokens: promptTok, completionTokens: completionTok, totalTokens: totalTok,
429
+ costUsd, content: result.content, appId: opts.appId, source: 'ai-complete',
430
+ });
395
431
  return {
396
432
  content: result.content,
397
433
  model: result.model,
398
434
  usage: { promptTokens: promptTok, completionTokens: completionTok, totalTokens: totalTok, costUsd, costExact },
399
435
  budget: {
400
- dailyBudgetUsd: dailyBudget,
401
- spentTodayUsd: updated.total_cost_usd,
402
- remainingUsd: Math.max(0, dailyBudget - updated.total_cost_usd),
436
+ dailyBudgetUsd: plan.dailyBudgetUsd,
437
+ spentTodayUsd: settled.usage.total_cost_usd,
438
+ remainingUsd: Math.max(0, plan.dailyBudgetUsd - settled.usage.total_cost_usd),
403
439
  },
404
- provenance,
405
- keySource: keyChoice.scope,
406
- ...(keyChoice.scope === 'node'
407
- ? { allowanceRemainingUsd: allowanceAfter ? Math.max(0, allowanceAfter.granted_usd - allowanceAfter.spent_usd) : keyChoice.remainingUsd }
440
+ provenance: settled.provenance,
441
+ keySource: plan.keyScope,
442
+ ...(settled.allowanceRemainingUsd !== undefined
443
+ ? { allowanceRemainingUsd: settled.allowanceRemainingUsd }
408
444
  : {}),
409
- ...(degradedToFree ? { degradedToFreeModel: true } : {}),
445
+ ...(plan.degradedToFree ? { degradedToFreeModel: true } : {}),
410
446
  };
411
447
  }
412
448
  //# sourceMappingURL=ai-completion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-completion.js","sourceRoot":"","sources":["../../../src/services/ai-completion.ts"],"names":[],"mappings":"AA6DA,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAqB,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAkB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,8BAA8B,GAAG,QAAQ,CAAC;AAChD,MAAM,kCAAkC,GAAG,QAAQ,CAAC;AAEpD;;sCAEsC;AACtC,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAe5C,MAAM,UAAU,QAAQ;IACtB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,eAAe,CAAC,YAAoB,EAAE,gBAAwB;IACrE,OAAO,YAAY,GAAG,8BAA8B;UAChD,gBAAgB,GAAG,kCAAkC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA8B;IAC9D,OAAO,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACxG,CAAC;AAED,2FAA2F;AAC3F,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,IAAI,CAAS;IACb,MAAM,CAAS;IACf,YAAY,IAAY,EAAE,MAAc,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB,EAAE,OAAe;IACzE,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACpD,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QAAC,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAAC,CAAC;IAC/D,MAAM,CAAC;QAAC,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,EAAE,gCAAgC,OAAO,EAAE,CAAC,CAAC;IAAC,CAAC;IAC1G,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,EAAE,GAAG,EACrD,qBAAqB,YAAY,kEAAkE,CAAC,CAAC;IACzG,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAAC,KAA8B,EAAE,KAAc;IAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,aAA0B,CAAC,CAAC,CAAC,IAAI,CAAC;IAChG,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,EAChD,QAAQ,KAAK,yDAAyD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,EAChD,qEAAqE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED;8DAC8D;AAC9D,MAAM,UAAU,eAAe,CAC7B,MAAoB,EAAE,iBAA0B,EAAE,QAAsB;IAExE,MAAM,SAAS,GAAI,iBAAwD,EAAE,SAAS,CAAC;IACvF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,iBAAiB,CAAC,2BAA2B,EAAE,GAAG,EAC1D,yFAAyF,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,MAAM,IAAI,iBAAiB,CAAC,YAAY,EAAE,GAAG,EAAE,wDAAwD,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAkB,EAAE,KAA8B,EAAE,KAAc;IAElE,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,cAAc,IAAI,WAAW,EAAE,CAAC;QACxC,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,EAChD,yBAAyB,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,WAAW,qDAAqD,CAAC,CAAC;IACrI,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,8FAA8F;QAC9F,6FAA6F;QAC7F,4EAA4E;QAC5E,MAAM,SAAS,GAAI,KAAK,CAAC,UAAiE,IAAI,EAAE,CAAC;QACjG,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,IAAI,WAAW,CAAC;QAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC;QACrD,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,qBAAqB,EAAE,GAAG,EACpD,uBAAuB,KAAK,WAAW,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,QAAQ,0BAA0B,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAgB,EAAE,IAAY,EAAE,KAAkB,EAClD,IAQC;IAED,MAAM,OAAO,GAAgB;QAC3B,IAAI,EAAE,QAAQ,EAAE;QAChB,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO;QACnD,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC;QAClC,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM;QAC9C,aAAa,EAAE,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QACpE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;QAC7B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACjF,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;QACxB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO;QAC1C,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QACrC,aAAa,EAAE,CAAC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;KACxE,CAAC;IACF,MAAM,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE1C,+FAA+F;IAC/F,iGAAiG;IACjG,+FAA+F;IAC/F,oCAAoC;IACpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,OAAO,EAAE;gBAC9B,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;gBACpC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,CAAC;gBAC5C,wFAAwF;gBACxF,kFAAkF;gBAClF,eAAe,EAAE,IAAI,CAAC,OAAO;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,aAAa;gBACpC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK;gBACtC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;gBACvB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,+DAA+D,EAAE;gBAC3E,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAuDD,MAAM,UAAU,GAAG,GAAgB,EAAE,CAAC,CAAC;IACrC,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;IACpE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CAClD,CAAC,CAAC;AAEH,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAgB,EAAE,IAAY;IAChE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5E,OAAQ,GAAG,EAAE,KAAiC,IAAI,UAAU,EAAE,CAAC;AACjE,CAAC;AAqBD,MAAM,WAAW,GAAG,GAAgB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAE7G,SAAS,gBAAgB,CAAC,GAAgB,EAAE,GAAgB;IAC1D,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC;IACxC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC;IACpC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;IAClC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5G,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;QAChC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QAC5B,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC1B,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAgB,EAAE,IAAY,EAAE,IAAI,GAAG,EAAE;IAC7E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,IAAI,GAAG,EAAE,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,OAAO;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAoB,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;SAClE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAE1B,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;IAC7E,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK;YAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK;YAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACzD,IAAI,GAAG,CAAC,IAAI,IAAI,MAAM;YAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,sFAAsF;IACtF,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,OAAgB,EAAE,IAAY,EAAE,KAAkB;IAC3E,MAAM,GAAG,GAAG,YAAY,IAAI,IAAI,QAAQ,EAAE,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,CAAC,SAAS,CAAC;QACtB,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;QACzE,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG;QACrC,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgB,EAChB,MAAoB,EACpB,IAAY,EACZ,IAA6B;IAE7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,IAAI,iBAAiB,CAAC,cAAc,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,EAAE,iCAAiC,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,mBAAmB,CAAC;QAC5C,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,qBAAqB,CAAC;QAC9C,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI,QAAQ,EAAE,EAAE,CAAC;KAC1D,CAAC,CAAC;IACH,MAAM,KAAK,GAAI,WAAW,EAAE,KAAiC,IAAI,EAAE,CAAC;IACpE,MAAM,QAAQ,GAAI,KAAK,CAAC,QAAyB,IAAI,YAAY,CAAC;IAClE,MAAM,OAAO,GAAI,KAAK,CAAC,OAAkB,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEzE,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,iGAAiG;IACjG,8FAA8F;IAC9F,2FAA2F;IAC3F,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IAC3F,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC;IAEnC,MAAM,KAAK,GAAI,WAAW,EAAE,KAAiC,IAAI,UAAU,EAAE,CAAC;IAC9E,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAEjE,wBAAwB;IACxB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACvE,8FAA8F;IAC9F,4FAA4F;IAC5F,MAAM,SAAS,GAAG,CAAC,IAAe,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5E,IAAI,aAAqB,CAAC;IAC1B,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACjD,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,CAAC;SAAM,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,2FAA2F;QAC3F,6EAA6E;QAC7E,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAW,CAAC;IAChD,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QACpE,aAAa,GAAG,SAAS,CAAC,WAAW,CAAW,CAAC;IACnD,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QACpE,aAAa,GAAG,SAAS,CAAC,WAAW,CAAW,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC;eAC5B,SAAS,CAAC,WAAW,CAAC;eACtB,SAAS,CAAC,WAAW,CAAC;YACzB,0FAA0F;eACvF,iBAAiB,CAAC;IACzB,CAAC;IAED,+FAA+F;IAC/F,mGAAmG;IACnG,4EAA4E;IAC5E,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,IAAI,SAAS,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC9B,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,EAChD,+FAA+F,CAAC,CAAC;QACrG,CAAC;QACD,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACzC,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QACxG,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,UAAU,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC;YAClE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,UAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;KACtF,CAAC;IAEF,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,MAAM,GAAI,CAAyB,CAAC,MAAM,CAAC;QACjD,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,GAAG,EAAE,uCAAuC,CAAC,CAAC;QACjH,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,iBAAiB,CAAC,cAAc,EAAE,GAAG,EAAE,2CAA2C,CAAC,CAAC;QAClH,MAAM,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,GAAG,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,iBAAiB,IAAI,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC;IAC7D,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAM,CAAC,QAAS,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEhG,iDAAiD;IACjD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;QACxD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK;QAC5C,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa;QACvF,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,KAAK;KACpD,CAAC,CAAC;IACH,uFAAuF;IACvF,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,KAAK,MAAM;QAC/C,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;QACtD,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,QAAQ,IAAI,CAAC,KAAK,IAAI,UAAU,UAAU,MAAM,CAAC,KAAK,WAAW,QAAQ,UAAU,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtL,gDAAgD;IAChD,+FAA+F;IAC/F,gGAAgG;IAChG,+FAA+F;IAC/F,yEAAyE;IACzE,EAAE;IACF,+FAA+F;IAC/F,4FAA4F;IAC5F,kGAAkG;IAClG,EAAE;IACF,wFAAwF;IACxF,iGAAiG;IACjG,+FAA+F;IAC/F,8BAA8B;IAC9B,IAAI,UAA6C,CAAC;IAClD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE;gBACzC,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,cAAc;gBACrB,gBAAgB,EAAE,MAAM;gBACxB,MAAM,EAAE,iBAAiB;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE;oBACT,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,QAAQ;oBACR,QAAQ,EAAE,IAAI,CAAC,KAAK;oBACpB,sFAAsF;oBACtF,8EAA8E;oBAC9E,aAAa,EAAE,SAAS;iBACzB;gBACD,WAAW,EAAE,MAAM,CAAC,aAAa;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,4FAA4F;YAC5F,wFAAwF;YACxF,iEAAiE;YACjE,MAAM,CAAC,IAAI,CAAC,wCAAwC,IAAI,UAAU,MAAM,CAAC,KAAK,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE;QAC9G,MAAM,EAAE;YACN,cAAc,EAAE,WAAW;YAC3B,aAAa,EAAE,OAAO,CAAC,cAAc;YACrC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;SAChE;QACD,UAAU;QACV,SAAS,EAAE,SAAS,CAAC,KAAK;QAC1B,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,MAAM;YAC5B,CAAC,CAAC,EAAE,qBAAqB,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE;YACzI,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ai-completion.js","sourceRoot":"","sources":["../../../src/services/ai-completion.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,9 @@
20
20
  * @usage
21
21
  * for await (const u of runChatTurn({ storage, config }, ownerName, threadId, text)) { … }
22
22
  * @version-history
23
+ * v1.1.0 — 2026-08-16 — An agent turn records the model when the node is the one that chose it
24
+ * (AIMEAT_GOOSE_MODEL). ChatTurn.model has existed since the first version and nothing ever
25
+ * wrote it, so the chip naming the model never appeared.
23
26
  * v1.0.1 — 2026-08-16 — The work log keys tool calls by id rather than title. Only the opening
24
27
  * event carries a title, so every call stayed at "starting" no matter how it ended. Seen in a
25
28
  * browser against a real agent, where one completed call read as still running.
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../../src/services/chat-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMrF,MAAM,WAAW,QAAQ;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE;AAOpE,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAEzD;AAuBD,4DAA4D;AAC5D,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAsCD;;;;;;;;GAQG;AACH,wBAAuB,WAAW,CAC9B,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAClE,cAAc,CAAC,aAAa,CAAC,CAyD/B;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAClC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAC/C,OAAO,CAAC,IAAI,CAAC,CAEf"}
1
+ {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../../src/services/chat-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMrF,MAAM,WAAW,QAAQ;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE;AAOpE,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAEzD;AAuBD,4DAA4D;AAC5D,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAsCD;;;;;;;;GAQG;AACH,wBAAuB,WAAW,CAC9B,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAClE,cAAc,CAAC,aAAa,CAAC,CA6D/B;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAClC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAC/C,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -130,6 +130,10 @@ export async function* runChatTurn(deps, ownerName, threadId, text) {
130
130
  text: answer,
131
131
  at: new Date().toISOString(),
132
132
  ...(tools.size ? { tools: [...tools.values()] } : {}),
133
+ // Only what the node itself chose. ACP's `done` update carries a stop reason and a token
134
+ // count and no model name, so a node that leaves the model to goose's own configuration
135
+ // genuinely does not know which one answered — and says nothing rather than guessing.
136
+ ...(config.gooseModel ? { model: config.gooseModel } : {}),
133
137
  };
134
138
  await appendTurn(storage, gaii, threadId, turn).catch((e) => {
135
139
  logger.warn(`[chat] could not save the agent turn: ${e.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session.js","sourceRoot":"","sources":["../../../src/services/chat-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-session.js","sourceRoot":"","sources":["../../../src/services/chat-session.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,10 @@
10
10
  * - CONFIG_FIELDS: the exhaustive field list grouped by domain (node, morsel policy, auth, features, work, quotas, federation, ...)
11
11
  *
12
12
  * @version-history
13
+ * v1.2.0 — 2026-08-16 — The `ai.` group: whose key pays, which model answers each role, the
14
+ * free allowance, and the chat agent's binary/provider/model. Every one of them decides what
15
+ * the node spends and every one of them was .env-and-restart only, so an operator could not
16
+ * see whether the house key was set, let alone change a model.
13
17
  * v1.1.0 — 2026-07-14 — mcpCardCommerceTools row (TARGET-034 phase D)
14
18
  * v1.0.0 — 2026-07-13 — Header added; file pre-dates header standard
15
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../../src/services/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,GAAG,EAAE,MAAM,YAAY,CAAC;IACxB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,0BAA0B;IAC1B,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IAClC,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;CACpD;AAID,eAAO,MAAM,aAAa,EAAE,cAAc,EA6UzC,CAAC;AAIF,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAM,CAAC;AAErE,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAM,CAAC;AAEjE,uCAAuC;AACvC,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC;AAE1D,uCAAuC;AACvC,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC;AAW1D,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAa5E;AAED,wDAAwD;AACxD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG3D"}
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../../src/services/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,GAAG,EAAE,MAAM,YAAY,CAAC;IACxB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,0BAA0B;IAC1B,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IAClC,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;CACpD;AAID,eAAO,MAAM,aAAa,EAAE,cAAc,EA4WzC,CAAC;AAIF,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAM,CAAC;AAErE,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAM,CAAC;AAEjE,uCAAuC;AACvC,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC;AAE1D,uCAAuC;AACvC,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC;AAW1D,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAa5E;AAED,wDAAwD;AACxD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG3D"}
@@ -10,6 +10,10 @@
10
10
  * - CONFIG_FIELDS: the exhaustive field list grouped by domain (node, morsel policy, auth, features, work, quotas, federation, ...)
11
11
  *
12
12
  * @version-history
13
+ * v1.2.0 — 2026-08-16 — The `ai.` group: whose key pays, which model answers each role, the
14
+ * free allowance, and the chat agent's binary/provider/model. Every one of them decides what
15
+ * the node spends and every one of them was .env-and-restart only, so an operator could not
16
+ * see whether the house key was set, let alone change a model.
13
17
  * v1.1.0 — 2026-07-14 — mcpCardCommerceTools row (TARGET-034 phase D)
14
18
  * v1.0.0 — 2026-07-13 — Header added; file pre-dates header standard
15
19
  */
@@ -294,6 +298,35 @@ export const CONFIG_FIELDS = [
294
298
  // ── Agent Tasks triage (Phase 1, mutable) ──
295
299
  { key: 'taskAutoArchive', dotPath: 'tasks.auto_archive', envVar: 'AIMEAT_TASK_AUTO_ARCHIVE', type: 'boolean', validate: (v) => typeof v === 'boolean', immutable: false, description: 'Auto-archive completed tasks older than the archive window (Tasks tab)' },
296
300
  { key: 'taskArchiveAfterHours', dotPath: 'tasks.archive_after_hours', envVar: 'AIMEAT_TASK_ARCHIVE_AFTER_HOURS', type: 'number', validate: (v) => typeof v === 'number' && Number.isInteger(v) && v >= 1 && v <= 8760, immutable: false, description: 'Hours a completed task stays in Recent before auto-archiving', range: '1-8760' },
301
+ // ── AI: whose key pays, which model answers, what the house grants (mutable) ──
302
+ //
303
+ // These decide what the node SPENDS, and until now every one of them was reachable only by
304
+ // editing .env and restarting. An operator changing a model had to deploy; an operator wondering
305
+ // whether the house key was even set had no way to look. Both are the wrong shape for a setting
306
+ // that costs money.
307
+ //
308
+ // The two keys are `configured` rather than `visible`: the admin API answers whether a key is set
309
+ // and never what it is. A mutable field takes effect on the next read of `config`, so a model
310
+ // default applies to the very next completion. The chat agent's own settings are the exception
311
+ // worth knowing: the goose child reads them from its environment at spawn, so a change reaches
312
+ // the next agent process rather than the one already running.
313
+ { key: 'openrouterInstanceKey', dotPath: 'ai.instance_key', envVar: 'AIMEAT_OPENROUTER_INSTANCE_KEY', type: 'string', validate: () => true, immutable: false, description: "This node's own OpenRouter key, spent by anyone who has not brought their own (metered per person by the allowance below)", adminDisplay: 'configured' },
314
+ { key: 'chatFreeAllowanceUsd', dotPath: 'ai.free_allowance_usd', envVar: 'AIMEAT_CHAT_FREE_ALLOWANCE_USD', type: 'float', validate: v => typeof v === 'number' && v >= 0 && v <= 1000, immutable: false, description: "Free starting allowance in USD on the node's key, granted ONCE per person and never renewed. 0 grants nothing", range: '0-1000' },
315
+ { key: 'modelFreeFallback', dotPath: 'ai.model_free_fallback', envVar: 'AIMEAT_MODEL_FREE_FALLBACK', type: 'string', validate: () => true, immutable: false, description: 'Model used when a person on the node key has spent their allowance. Empty refuses instead of degrading' },
316
+ { key: 'modelDefaultChat', dotPath: 'ai.model_default_chat', envVar: 'AIMEAT_MODEL_DEFAULT_CHAT', type: 'string', validate: () => true, immutable: false, description: 'Default chat model when the owner has not chosen one' },
317
+ { key: 'modelDefaultReasoning', dotPath: 'ai.model_default_reasoning', envVar: 'AIMEAT_MODEL_DEFAULT_REASONING', type: 'string', validate: () => true, immutable: false, description: 'Default reasoning model when the owner has not chosen one' },
318
+ { key: 'modelDefaultExecution', dotPath: 'ai.model_default_execution', envVar: 'AIMEAT_MODEL_DEFAULT_EXECUTION', type: 'string', validate: () => true, immutable: false, description: 'Default execution model when the owner has not chosen one' },
319
+ { key: 'modelDefaultVision', dotPath: 'ai.model_default_vision', envVar: 'AIMEAT_MODEL_DEFAULT_VISION', type: 'string', validate: () => true, immutable: false, description: 'Default model for reading images. Must accept image input' },
320
+ { key: 'modelDefaultStt', dotPath: 'ai.model_default_stt', envVar: 'AIMEAT_MODEL_DEFAULT_STT', type: 'string', validate: () => true, immutable: false, description: 'Default speech-to-text model. Empty means nobody can use the microphone until they set one themselves' },
321
+ { key: 'modelDefaultImage', dotPath: 'ai.model_default_image', envVar: 'AIMEAT_MODEL_DEFAULT_IMAGE', type: 'string', validate: () => true, immutable: false, description: 'Default model for generating images. Must produce image output' },
322
+ { key: 'sttLanguageDefault', dotPath: 'ai.stt_language_default', envVar: 'AIMEAT_STT_LANGUAGE_DEFAULT', type: 'string', validate: () => true, immutable: false, description: 'Language hint for transcription (e.g. fi) when the owner has not set one' },
323
+ // ── AI: the built-in chat agent (a `goose acp` child process) ──
324
+ { key: 'gooseBin', dotPath: 'ai.chat_agent_bin', envVar: 'AIMEAT_GOOSE_BIN', type: 'string', validate: () => true, immutable: false, description: 'Path to the goose binary. EMPTY DISABLES THE CHAT ENTIRELY. Takes effect on the next agent start' },
325
+ { key: 'goosePathRoot', dotPath: 'ai.chat_agent_path_root', envVar: 'AIMEAT_GOOSE_PATH_ROOT', type: 'string', validate: () => true, immutable: false, description: "The agent's own config and session store, away from any human's goose profile" },
326
+ { key: 'gooseProvider', dotPath: 'ai.chat_agent_provider', envVar: 'AIMEAT_GOOSE_PROVIDER', type: 'string', validate: () => true, immutable: false, description: "Provider the chat agent runs on (e.g. openrouter). Empty leaves goose's own configuration alone" },
327
+ { key: 'gooseModel', dotPath: 'ai.chat_agent_model', envVar: 'AIMEAT_GOOSE_MODEL', type: 'string', validate: () => true, immutable: false, description: 'Model the chat agent runs on. Also what the node records as the model that answered a turn' },
328
+ { key: 'gooseProviderApiKey', dotPath: 'ai.chat_agent_key', envVar: 'AIMEAT_GOOSE_PROVIDER_API_KEY', type: 'string', validate: () => true, immutable: false, description: 'The key EVERY chat turn is spent from. Not metered per person: the allowance above does not apply to the chat', adminDisplay: 'configured' },
329
+ { key: 'chatMaxLiveThreads', dotPath: 'ai.chat_max_live_threads', envVar: 'AIMEAT_CHAT_MAX_LIVE_THREADS', type: 'number', validate: v => typeof v === 'number' && Number.isInteger(v) && v >= 1 && v <= 1000, immutable: false, description: 'How many conversations stay open before the oldest rolls into a per-month archive record', range: '1-1000' },
297
330
  ];
298
331
  // ── Derived Lookup Maps ──
299
332
  /** dotPath -> ConfigFieldDef (mutable fields only) */