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.
- package/README.md +1 -1
- package/dist/.env.example +10 -1
- package/dist/build-stamp.json +4 -4
- package/dist/locales/en.json +9263 -9225
- package/dist/locales/es.json +9255 -9217
- package/dist/locales/fi.json +9263 -9225
- package/dist/public/css/views/admin.css +935 -860
- package/dist/public/css/views/chat.css +393 -388
- package/dist/public/js/services/admin.js +12 -0
- package/dist/public/robots.node.txt +4 -0
- package/dist/public/views/admin/config-tab.js +333 -185
- package/dist/public/views/admin/usage-tab.js +373 -307
- package/dist/public/views/chat/parts.js +25 -6
- package/dist/public/views/profile/landing-page.cards.js +732 -700
- package/dist/public/views/profile/landing-page.js +6 -2
- package/dist/scripts/audit-mcp-schemas.js +22 -6
- package/dist/scripts/audit-mcp-schemas.js.map +1 -1
- package/dist/scripts/check-ai-disclosure.d.ts +1 -1
- package/dist/scripts/check-ai-disclosure.d.ts.map +1 -1
- package/dist/scripts/check-ai-disclosure.js +19 -3
- package/dist/scripts/check-ai-disclosure.js.map +1 -1
- package/dist/scripts/check-config-coverage.d.ts +2 -0
- package/dist/scripts/check-config-coverage.d.ts.map +1 -0
- package/dist/scripts/check-config-coverage.js +129 -0
- package/dist/scripts/check-config-coverage.js.map +1 -0
- package/dist/src/auth/ai-gate.d.ts +25 -0
- package/dist/src/auth/ai-gate.d.ts.map +1 -0
- package/dist/src/auth/ai-gate.js +21 -0
- package/dist/src/auth/ai-gate.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.js +102 -20
- package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.js +38 -9
- package/dist/src/cli/connect/tool-call-defs-agent.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-apps.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-apps.js +199 -103
- package/dist/src/cli/connect/tool-call-defs-apps.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-core.js +149 -26
- package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-organism.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-organism.js +20 -3
- package/dist/src/cli/connect/tool-call-defs-organism.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-packages.d.ts +23 -0
- package/dist/src/cli/connect/tool-call-defs-packages.d.ts.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-packages.js +45 -0
- package/dist/src/cli/connect/tool-call-defs-packages.js.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-workflows.d.ts +14 -0
- package/dist/src/cli/connect/tool-call-defs-workflows.d.ts.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-workflows.js +75 -0
- package/dist/src/cli/connect/tool-call-defs-workflows.js.map +1 -0
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +54 -1
- package/dist/src/cli/connect/tool-call.js.map +1 -1
- package/dist/src/config-types-ai.d.ts +13 -0
- package/dist/src/config-types-ai.d.ts.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +2 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +196 -0
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +8 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +25 -8
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/packages.d.ts +17 -0
- package/dist/src/mcp/catalog/definitions/packages.d.ts.map +1 -0
- package/dist/src/mcp/catalog/definitions/packages.js +46 -0
- package/dist/src/mcp/catalog/definitions/packages.js.map +1 -0
- package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions.js +2 -0
- package/dist/src/mcp/catalog/definitions.js.map +1 -1
- package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
- package/dist/src/mcp/catalog/scopes.js +2 -0
- package/dist/src/mcp/catalog/scopes.js.map +1 -1
- package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
- package/dist/src/mcp/catalog/surfaces.js +2 -0
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/routes/admin-usage.d.ts.map +1 -1
- package/dist/src/routes/admin-usage.js +57 -0
- package/dist/src/routes/admin-usage.js.map +1 -1
- package/dist/src/routes/ai.d.ts.map +1 -1
- package/dist/src/routes/ai.js +4 -15
- package/dist/src/routes/ai.js.map +1 -1
- package/dist/src/routes/bootstrap.d.ts +2 -1
- package/dist/src/routes/bootstrap.d.ts.map +1 -1
- package/dist/src/routes/bootstrap.js +7 -18
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/chat.d.ts +3 -0
- package/dist/src/routes/chat.d.ts.map +1 -1
- package/dist/src/routes/chat.js +20 -0
- package/dist/src/routes/chat.js.map +1 -1
- package/dist/src/routes/llm-proxy.d.ts +34 -0
- package/dist/src/routes/llm-proxy.d.ts.map +1 -0
- package/dist/src/routes/llm-proxy.js +258 -0
- package/dist/src/routes/llm-proxy.js.map +1 -0
- package/dist/src/routes/sitemaps.d.ts +22 -0
- package/dist/src/routes/sitemaps.d.ts.map +1 -0
- package/dist/src/routes/sitemaps.js +67 -0
- package/dist/src/routes/sitemaps.js.map +1 -0
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +2 -0
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/services/ai-completion.d.ts +76 -0
- package/dist/src/services/ai-completion.d.ts.map +1 -1
- package/dist/src/services/ai-completion.js +104 -68
- package/dist/src/services/ai-completion.js.map +1 -1
- package/dist/src/services/chat-session.d.ts +3 -0
- package/dist/src/services/chat-session.d.ts.map +1 -1
- package/dist/src/services/chat-session.js +4 -0
- package/dist/src/services/chat-session.js.map +1 -1
- package/dist/src/services/config-schema.d.ts +4 -0
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +33 -0
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/goose-acp.d.ts.map +1 -1
- package/dist/src/services/goose-acp.js +11 -0
- package/dist/src/services/goose-acp.js.map +1 -1
- package/dist/src/services/handbooks/appdev.d.ts +1 -1
- package/dist/src/services/handbooks/appdev.d.ts.map +1 -1
- package/dist/src/services/handbooks/appdev.js +7 -1
- package/dist/src/services/handbooks/appdev.js.map +1 -1
- package/dist/src/services/openrouter.d.ts +23 -0
- package/dist/src/services/openrouter.d.ts.map +1 -1
- package/dist/src/services/openrouter.js +32 -1
- package/dist/src/services/openrouter.js.map +1 -1
- package/dist/src/services/usage-summary.d.ts +15 -0
- package/dist/src/services/usage-summary.d.ts.map +1 -1
- package/dist/src/services/usage-summary.js +15 -0
- package/dist/src/services/usage-summary.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.js +23 -4
- package/dist/src/storage/providers/postgres-kysely/methods/wallet.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/work.d.ts +5 -0
- package/dist/src/storage/providers/sqlite/methods/work.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/work.js +34 -22
- package/dist/src/storage/providers/sqlite/methods/work.js.map +1 -1
- 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":"AAAA
|
|
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
|
-
|
|
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
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
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
|
|
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
|
|
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
|
|
277
|
+
let model;
|
|
283
278
|
if (typeof opts.model === 'string' && opts.model) {
|
|
284
|
-
|
|
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
|
-
|
|
284
|
+
model = roleModel('vision');
|
|
290
285
|
}
|
|
291
286
|
else if (opts.modelRole === 'reasoning' && roleModel('reasoning')) {
|
|
292
|
-
|
|
287
|
+
model = roleModel('reasoning');
|
|
293
288
|
}
|
|
294
289
|
else if (opts.modelRole === 'execution' && roleModel('execution')) {
|
|
295
|
-
|
|
290
|
+
model = roleModel('execution');
|
|
296
291
|
}
|
|
297
292
|
else {
|
|
298
|
-
|
|
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
|
-
|
|
307
|
+
model = config.modelFreeFallback;
|
|
313
308
|
degradedToFree = true;
|
|
314
309
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
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
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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 =
|
|
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=${
|
|
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:
|
|
361
|
+
content: outcome.content,
|
|
375
362
|
generator: {
|
|
376
|
-
model:
|
|
377
|
-
provider,
|
|
378
|
-
pipeline:
|
|
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=${
|
|
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:
|
|
401
|
-
spentTodayUsd:
|
|
402
|
-
remainingUsd: Math.max(0,
|
|
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:
|
|
406
|
-
...(
|
|
407
|
-
? { allowanceRemainingUsd:
|
|
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":"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"}
|
|
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
|
|
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":"
|
|
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
|
|
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) */
|