aimeat 1.16.2 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.env.example +6 -1
- package/dist/locales/en.json +166 -4
- package/dist/locales/fi.json +166 -4
- package/dist/public/components/Card.js +17 -3
- package/dist/public/components/Collapsible.js +39 -0
- package/dist/public/components/CopyButton.js +55 -24
- package/dist/public/components/DataTable.js +57 -0
- package/dist/public/components/EmptyState.js +28 -0
- package/dist/public/components/KeyValueRow.js +37 -0
- package/dist/public/components/Modal.js +22 -5
- package/dist/public/components/Pagination.js +70 -0
- package/dist/public/components/SearchBar.js +44 -0
- package/dist/public/components/StatusDot.js +29 -0
- package/dist/public/components/TagList.js +53 -0
- package/dist/public/components/ToggleSwitch.js +28 -0
- package/dist/public/components/index.js +41 -1
- package/dist/public/css/components/tags.css +24 -0
- package/dist/public/css/style-testbed.css +135 -0
- package/dist/public/css/theme.css +556 -34
- package/dist/public/css/views/admin-agent-integration.css +2 -33
- package/dist/public/css/views/admin.css +730 -686
- package/dist/public/css/views/agents-detail.css +402 -14
- package/dist/public/css/views/help.css +2 -1
- package/dist/public/css/views/hobbies.css +53 -33
- package/dist/public/css/views/marketplace.css +73 -60
- package/dist/public/css/views/openclaw.css +12 -6
- package/dist/public/css/views/portal-classic.css +34 -26
- package/dist/public/css/views/portal-dev.css +41 -32
- package/dist/public/css/views/portal.css +14 -18
- package/dist/public/css/views/profile.css +252 -164
- package/dist/public/css/views/public-knowledge-viewer.css +18 -6
- package/dist/public/css/views/scheduler.css +100 -0
- package/dist/public/js/format.js +41 -0
- package/dist/public/js/services/agent-tasks.js +14 -1
- package/dist/public/js/services/generator-spec-validate.js +5 -1
- package/dist/public/js/services/schedules.js +53 -0
- package/dist/public/js/style-testbed.js +170 -0
- package/dist/public/js/theme.js +114 -0
- package/dist/public/spa.html +74 -16
- package/dist/public/style-testbed.html +420 -0
- package/dist/public/views/admin/agent-integration-tab.js +23 -38
- package/dist/public/views/admin/agent-tasks-tab.js +14 -21
- package/dist/public/views/admin/chat-instances-tab.js +1 -1
- package/dist/public/views/admin/config-tab.js +7 -2
- package/dist/public/views/admin/cortex-tab.js +20 -14
- package/dist/public/views/admin/csm-tab.js +22 -18
- package/dist/public/views/admin/directory-tab.js +3 -3
- package/dist/public/views/admin/email-tab.js +23 -28
- package/dist/public/views/admin/federation-tab.js +15 -5
- package/dist/public/views/admin/generator-debug-tab.js +10 -8
- package/dist/public/views/admin/genesis-tab.js +4 -4
- package/dist/public/views/admin/ghii-tab.js +3 -3
- package/dist/public/views/admin/knowledge-tab.js +15 -5
- package/dist/public/views/admin/matching-tab.js +3 -3
- package/dist/public/views/admin/memory-tab.js +16 -20
- package/dist/public/views/admin/msm-tab.js +30 -17
- package/dist/public/views/admin/overview-tab.js +7 -7
- package/dist/public/views/admin/packages-tab.js +10 -9
- package/dist/public/views/admin/portal-tab.js +14 -4
- package/dist/public/views/admin/prompts-tab.js +5 -5
- package/dist/public/views/admin/push-tab.js +15 -4
- package/dist/public/views/admin/realtime-tab.js +3 -3
- package/dist/public/views/admin/services-tab.js +18 -27
- package/dist/public/views/admin/shared.js +48 -58
- package/dist/public/views/admin/sharing-groups-tab.js +5 -10
- package/dist/public/views/admin/stats-tab.js +3 -3
- package/dist/public/views/guides.js +9 -13
- package/dist/public/views/help.js +3 -24
- package/dist/public/views/hobbies.js +47 -41
- package/dist/public/views/marketplace.js +42 -34
- package/dist/public/views/openclaw.js +0 -1
- package/dist/public/views/portal-classic.js +4 -15
- package/dist/public/views/portal-dev.js +28 -30
- package/dist/public/views/portal.js +16 -21
- package/dist/public/views/portfolio.js +11 -12
- package/dist/public/views/profile/access-tab.js +250 -1
- package/dist/public/views/profile/agents/agent-card.js +75 -4
- package/dist/public/views/profile/agents/tab-activity.js +15 -13
- package/dist/public/views/profile/agents/tab-agent-config.js +60 -6
- package/dist/public/views/profile/agents/tab-integration.js +37 -60
- package/dist/public/views/profile/agents/tab-messages.js +10 -1
- package/dist/public/views/profile/agents/tab-quality.js +25 -19
- package/dist/public/views/profile/agents/tab-schedules.js +110 -0
- package/dist/public/views/profile/agents-activity-subtab.js +4 -4
- package/dist/public/views/profile/agents-services-subtab.js +5 -4
- package/dist/public/views/profile/agents-tab.js +141 -37
- package/dist/public/views/profile/agents-tasks-subtab.js +221 -26
- package/dist/public/views/profile/calibrator-batch.js +5 -11
- package/dist/public/views/profile/calibrator-tab.js +4 -9
- package/dist/public/views/profile/chat-sessions-tab.js +9 -5
- package/dist/public/views/profile/email-tab.js +2 -2
- package/dist/public/views/profile/extensions-tab.js +27 -22
- package/dist/public/views/profile/federation-tab.js +4 -1
- package/dist/public/views/profile/foundry-detail.js +22 -23
- package/dist/public/views/profile/foundry-tab.js +12 -13
- package/dist/public/views/profile/generator-dashboard/DebugPanel.js +4 -7
- package/dist/public/views/profile/generator-dashboard/use-dashboard-core.js +4 -1
- package/dist/public/views/profile/generator-dashboard/use-edit-mode.js +3 -2
- package/dist/public/views/profile/generator-detail.js +26 -30
- package/dist/public/views/profile/generator-tab.js +5 -5
- package/dist/public/views/profile/knowledge-tab.js +12 -12
- package/dist/public/views/profile/landing-page.js +100 -149
- package/dist/public/views/profile/memory-tab.js +15 -11
- package/dist/public/views/profile/node-stats-tab.js +3 -3
- package/dist/public/views/profile/nodes-tab.js +10 -3
- package/dist/public/views/profile/notifications-tab.js +3 -3
- package/dist/public/views/profile/packages-tab.js +14 -14
- package/dist/public/views/profile/scheduler-tab.js +340 -0
- package/dist/public/views/profile/services-tab.js +1 -1
- package/dist/public/views/profile/shared.js +16 -12
- package/dist/public/views/profile/wallet-tab.js +27 -50
- package/dist/public/views/profile/work-tab.js +29 -31
- package/dist/public/views/profile.js +24 -0
- package/dist/public/views/public-knowledge-viewer.js +9 -18
- package/dist/src/auth/middleware.d.ts +3 -2
- package/dist/src/auth/middleware.d.ts.map +1 -1
- package/dist/src/auth/middleware.js +78 -3
- package/dist/src/auth/middleware.js.map +1 -1
- package/dist/src/cli/init-wizard.d.ts.map +1 -1
- package/dist/src/cli/init-wizard.js +13 -1
- package/dist/src/cli/init-wizard.js.map +1 -1
- package/dist/src/config.d.ts +6 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +12 -1
- package/dist/src/config.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +708 -8
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/mcp/agent-schedules.d.ts +23 -0
- package/dist/src/mcp/agent-schedules.d.ts.map +1 -0
- package/dist/src/mcp/agent-schedules.js +175 -0
- package/dist/src/mcp/agent-schedules.js.map +1 -0
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +6 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions.js +55 -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 +12 -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/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +2 -0
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/models/agent-task-schemas.d.ts +6 -0
- package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
- package/dist/src/models/agent-task-schemas.js +6 -0
- package/dist/src/models/agent-task-schemas.js.map +1 -1
- package/dist/src/models/schemas.d.ts +1 -0
- package/dist/src/models/schemas.d.ts.map +1 -1
- package/dist/src/models/schemas.js +4 -0
- package/dist/src/models/schemas.js.map +1 -1
- package/dist/src/routes/access-tokens.d.ts +17 -0
- package/dist/src/routes/access-tokens.d.ts.map +1 -0
- package/dist/src/routes/access-tokens.js +164 -0
- package/dist/src/routes/access-tokens.js.map +1 -0
- package/dist/src/routes/agent-tasks.d.ts +2 -0
- package/dist/src/routes/agent-tasks.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks.js +118 -23
- package/dist/src/routes/agent-tasks.js.map +1 -1
- package/dist/src/routes/agents.d.ts.map +1 -1
- package/dist/src/routes/agents.js +46 -0
- package/dist/src/routes/agents.js.map +1 -1
- package/dist/src/routes/ai.d.ts +6 -9
- package/dist/src/routes/ai.d.ts.map +1 -1
- package/dist/src/routes/ai.js +26 -175
- package/dist/src/routes/ai.js.map +1 -1
- package/dist/src/routes/apps.d.ts.map +1 -1
- package/dist/src/routes/apps.js +104 -34
- package/dist/src/routes/apps.js.map +1 -1
- package/dist/src/routes/auth.d.ts.map +1 -1
- package/dist/src/routes/auth.js +77 -4
- package/dist/src/routes/auth.js.map +1 -1
- package/dist/src/routes/cortex.d.ts +2 -1
- package/dist/src/routes/cortex.d.ts.map +1 -1
- package/dist/src/routes/cortex.js +13 -8
- package/dist/src/routes/cortex.js.map +1 -1
- package/dist/src/routes/extensions.d.ts.map +1 -1
- package/dist/src/routes/extensions.js +85 -51
- package/dist/src/routes/extensions.js.map +1 -1
- package/dist/src/routes/generator.d.ts.map +1 -1
- package/dist/src/routes/generator.js +109 -43
- package/dist/src/routes/generator.js.map +1 -1
- package/dist/src/routes/ghii.d.ts.map +1 -1
- package/dist/src/routes/ghii.js +34 -13
- package/dist/src/routes/ghii.js.map +1 -1
- package/dist/src/routes/libs.d.ts +15 -0
- package/dist/src/routes/libs.d.ts.map +1 -1
- package/dist/src/routes/libs.js +178 -55
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +1 -0
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/schedules.d.ts +33 -0
- package/dist/src/routes/schedules.d.ts.map +1 -0
- package/dist/src/routes/schedules.js +380 -0
- package/dist/src/routes/schedules.js.map +1 -0
- package/dist/src/server-bootstrap/config-init.js +2 -2
- package/dist/src/server-bootstrap/config-init.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +7 -0
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/service-init.js +2 -1
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/services/access-token.d.ts +28 -0
- package/dist/src/services/access-token.d.ts.map +1 -0
- package/dist/src/services/access-token.js +37 -0
- package/dist/src/services/access-token.js.map +1 -0
- package/dist/src/services/ai-completion.d.ts +83 -0
- package/dist/src/services/ai-completion.d.ts.map +1 -0
- package/dist/src/services/ai-completion.js +187 -0
- package/dist/src/services/ai-completion.js.map +1 -0
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +3 -0
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/generator-prompt-seeds.d.ts.map +1 -1
- package/dist/src/services/generator-prompt-seeds.js +6 -3
- package/dist/src/services/generator-prompt-seeds.js.map +1 -1
- package/dist/src/services/generator-prompts/spec-validate.d.ts.map +1 -1
- package/dist/src/services/generator-prompts/spec-validate.js +6 -2
- package/dist/src/services/generator-prompts/spec-validate.js.map +1 -1
- package/dist/src/services/generator-registration.d.ts +12 -4
- package/dist/src/services/generator-registration.d.ts.map +1 -1
- package/dist/src/services/generator-registration.js +71 -0
- package/dist/src/services/generator-registration.js.map +1 -1
- package/dist/src/services/generator-validate.d.ts +10 -0
- package/dist/src/services/generator-validate.d.ts.map +1 -1
- package/dist/src/services/generator-validate.js +180 -36
- package/dist/src/services/generator-validate.js.map +1 -1
- package/dist/src/services/owner-session.d.ts +43 -0
- package/dist/src/services/owner-session.d.ts.map +1 -0
- package/dist/src/services/owner-session.js +175 -0
- package/dist/src/services/owner-session.js.map +1 -0
- package/dist/src/services/schedule-constraints.d.ts +65 -0
- package/dist/src/services/schedule-constraints.d.ts.map +1 -0
- package/dist/src/services/schedule-constraints.js +106 -0
- package/dist/src/services/schedule-constraints.js.map +1 -0
- package/dist/src/services/scheduler.d.ts +34 -0
- package/dist/src/services/scheduler.d.ts.map +1 -1
- package/dist/src/services/scheduler.js +266 -22
- package/dist/src/services/scheduler.js.map +1 -1
- package/dist/src/services/skill-bundle/generator.js +19 -0
- package/dist/src/services/skill-bundle/generator.js.map +1 -1
- package/dist/src/storage/interface.d.ts +48 -4
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/interface.js.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +31 -0
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +187 -9
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +31 -0
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +131 -8
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-task.js +6 -4
- package/dist/src/storage/providers/sqlite/repos/agent-task.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +79 -8
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/pat.repository.d.ts +40 -0
- package/dist/src/storage/repositories/pat.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/pat.repository.js +14 -0
- package/dist/src/storage/repositories/pat.repository.js.map +1 -0
- package/dist/src/storage/repositories/scheduler.repository.d.ts +2 -0
- package/dist/src/storage/repositories/scheduler.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/session.repository.d.ts +51 -0
- package/dist/src/storage/repositories/session.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/session.repository.js +12 -0
- package/dist/src/storage/repositories/session.repository.js.map +1 -1
- package/dist/src/utils/env-config.d.ts.map +1 -1
- package/dist/src/utils/env-config.js +25 -1
- package/dist/src/utils/env-config.js.map +1 -1
- package/dist/src/utils/env-validator.d.ts.map +1 -1
- package/dist/src/utils/env-validator.js +4 -0
- package/dist/src/utils/env-validator.js.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.prisma +48 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-init.js","sourceRoot":"","sources":["../../../src/server-bootstrap/service-init.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"service-init.js","sourceRoot":"","sources":["../../../src/server-bootstrap/service-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file access-token.ts
|
|
3
|
+
* @description Shared resolution for owner-created Personal Access Tokens (PATs). Maps a
|
|
4
|
+
* raw token to the identity + roles it grants (revoked/expired checked, roles re-read from
|
|
5
|
+
* the owner's CURRENT roles so a token never grants more than the owner holds). Used by the
|
|
6
|
+
* auth middleware (Bearer header), the exchange endpoint, and the PAT-backed refresh cookie.
|
|
7
|
+
* @structure PAT_PREFIX; ResolvedPat; resolvePat(storage, rawToken).
|
|
8
|
+
* @usage import { resolvePat, PAT_PREFIX } from '../services/access-token.js'
|
|
9
|
+
* @version-history
|
|
10
|
+
* v1.0.0 - 2026-06-03 - Initial (plan 2026-06-03-agent-access-tokens).
|
|
11
|
+
*/
|
|
12
|
+
import type { Storage } from '../storage/interface.js';
|
|
13
|
+
/** Raw PATs carry this prefix so they're distinguishable from JWTs / session tokens. */
|
|
14
|
+
export declare const PAT_PREFIX = "aimeat_pat_";
|
|
15
|
+
export interface ResolvedPat {
|
|
16
|
+
patId: string;
|
|
17
|
+
sub: string;
|
|
18
|
+
owner: string;
|
|
19
|
+
roles: string[];
|
|
20
|
+
scopes: string[];
|
|
21
|
+
expiresAt: string | null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Resolve a raw PAT to its granted identity, or null if missing / revoked / expired / the
|
|
25
|
+
* owner no longer exists. Pure: callers decide whether to record usage (touchPat).
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolvePat(storage: Storage, rawToken: string): Promise<ResolvedPat | null>;
|
|
28
|
+
//# sourceMappingURL=access-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-token.d.ts","sourceRoot":"","sources":["../../../src/services/access-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGvD,wFAAwF;AACxF,eAAO,MAAM,UAAU,gBAAgB,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAyBhG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { hashToken } from './owner-session.js';
|
|
2
|
+
/** Raw PATs carry this prefix so they're distinguishable from JWTs / session tokens. */
|
|
3
|
+
export const PAT_PREFIX = 'aimeat_pat_';
|
|
4
|
+
/**
|
|
5
|
+
* Resolve a raw PAT to its granted identity, or null if missing / revoked / expired / the
|
|
6
|
+
* owner no longer exists. Pure: callers decide whether to record usage (touchPat).
|
|
7
|
+
*/
|
|
8
|
+
export async function resolvePat(storage, rawToken) {
|
|
9
|
+
const pat = await storage.getPatByHash(hashToken(rawToken));
|
|
10
|
+
if (!pat)
|
|
11
|
+
return null;
|
|
12
|
+
if (pat.expiresAt && Date.now() >= Date.parse(pat.expiresAt))
|
|
13
|
+
return null;
|
|
14
|
+
const ownerRecord = await storage.getOwner(pat.owner);
|
|
15
|
+
if (!ownerRecord)
|
|
16
|
+
return null;
|
|
17
|
+
let sub;
|
|
18
|
+
let roles;
|
|
19
|
+
let scopes;
|
|
20
|
+
if (pat.grantOperator) {
|
|
21
|
+
sub = pat.owner;
|
|
22
|
+
roles = ownerRecord.roles.includes('operator') ? ['owner', 'operator'] : ['owner'];
|
|
23
|
+
scopes = [];
|
|
24
|
+
}
|
|
25
|
+
else if (pat.grantOwner) {
|
|
26
|
+
sub = pat.owner;
|
|
27
|
+
roles = ['owner'];
|
|
28
|
+
scopes = [];
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
sub = pat.gaii;
|
|
32
|
+
roles = ['agent'];
|
|
33
|
+
scopes = pat.scopes;
|
|
34
|
+
}
|
|
35
|
+
return { patId: pat.id, sub, owner: pat.owner, roles, scopes, expiresAt: pat.expiresAt };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=access-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-token.js","sourceRoot":"","sources":["../../../src/services/access-token.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,wFAAwF;AACxF,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AAWxC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAgB,EAAE,QAAgB;IACjE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,IAAI,GAAW,CAAC;IAChB,IAAI,KAAe,CAAC;IACpB,IAAI,MAAgB,CAAC;IACrB,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;QAChB,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACnF,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;SAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAC1B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;QAChB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;QACf,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ai-completion.ts
|
|
3
|
+
* @description Reusable server-side AI completion for a single owner, using the
|
|
4
|
+
* owner's encrypted OpenRouter (or compatible) key + budget settings stored in
|
|
5
|
+
* memory. Extracted from routes/ai.ts so both the HTTP route (/v1/ai/complete)
|
|
6
|
+
* and the scheduler's `ai`-kind jobs share ONE code path: key decrypt, model
|
|
7
|
+
* selection, daily-budget + per-app-quota enforcement, provider call, and
|
|
8
|
+
* per-day usage accounting (ai-usage.<gaii>.<day>). The scheduler's daily_limit
|
|
9
|
+
* constraint reads the same usage record via getTodayUsage().
|
|
10
|
+
* @structure
|
|
11
|
+
* - completeForOwner(storage, config, gaii, opts) — runs one completion
|
|
12
|
+
* - getTodayUsage(storage, gaii) — read today's spend record (constraints/UI)
|
|
13
|
+
* - getDailyBudgetUsd(prefs) / todayKey() — small shared helpers
|
|
14
|
+
* - AiCompletionError — typed error carrying { code, status } for the route
|
|
15
|
+
* @usage
|
|
16
|
+
* import { completeForOwner, AiCompletionError } from '../services/ai-completion.js';
|
|
17
|
+
* const r = await completeForOwner(storage, config, gaii, { prompt });
|
|
18
|
+
* @version-history
|
|
19
|
+
* v1.0.0 — 2026-06-03 — Extracted from routes/ai.ts for reuse by the scheduler
|
|
20
|
+
*/
|
|
21
|
+
import type { AimeatConfig } from '../config.js';
|
|
22
|
+
import type { Storage } from '../storage/interface.js';
|
|
23
|
+
/** Defaults applied when the user hasn't set explicit values. */
|
|
24
|
+
export declare const DEFAULT_DAILY_BUDGET_USD = 1;
|
|
25
|
+
export declare const DEFAULT_APP_DAILY_USD = 0.1;
|
|
26
|
+
export interface UsageRecord {
|
|
27
|
+
/** ISO date key (YYYY-MM-DD). */
|
|
28
|
+
date: string;
|
|
29
|
+
total_cost_usd: number;
|
|
30
|
+
total_calls: number;
|
|
31
|
+
total_tokens: number;
|
|
32
|
+
per_app: Record<string, {
|
|
33
|
+
cost_usd: number;
|
|
34
|
+
calls: number;
|
|
35
|
+
tokens: number;
|
|
36
|
+
}>;
|
|
37
|
+
updated_at: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function todayKey(): string;
|
|
40
|
+
export declare function getDailyBudgetUsd(prefs: Record<string, unknown>): number;
|
|
41
|
+
/** Typed error so the HTTP route can map to a status/code and the scheduler can log it. */
|
|
42
|
+
export declare class AiCompletionError extends Error {
|
|
43
|
+
code: string;
|
|
44
|
+
status: number;
|
|
45
|
+
constructor(code: string, status: number, message: string);
|
|
46
|
+
}
|
|
47
|
+
export interface CompleteForOwnerOptions {
|
|
48
|
+
prompt: string;
|
|
49
|
+
systemPrompt?: string;
|
|
50
|
+
model?: string;
|
|
51
|
+
modelRole?: 'reasoning' | 'execution';
|
|
52
|
+
temperature?: number;
|
|
53
|
+
topP?: number;
|
|
54
|
+
maxTokens?: number;
|
|
55
|
+
/** Optional app/source attribution — enables allowlist + per-app quota. */
|
|
56
|
+
appId?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface CompleteForOwnerResult {
|
|
59
|
+
content: string;
|
|
60
|
+
model: string;
|
|
61
|
+
usage: {
|
|
62
|
+
promptTokens: number;
|
|
63
|
+
completionTokens: number;
|
|
64
|
+
totalTokens: number;
|
|
65
|
+
costUsd: number;
|
|
66
|
+
costExact: boolean;
|
|
67
|
+
};
|
|
68
|
+
budget: {
|
|
69
|
+
dailyBudgetUsd: number;
|
|
70
|
+
spentTodayUsd: number;
|
|
71
|
+
remainingUsd: number;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** Read today's usage record for an owner (used by the daily_limit constraint + the usage route). */
|
|
75
|
+
export declare function getTodayUsage(storage: Storage, gaii: string): Promise<UsageRecord>;
|
|
76
|
+
/**
|
|
77
|
+
* Run one AI completion on behalf of an owner. Loads the owner's key + budget
|
|
78
|
+
* settings, enforces the daily budget (and per-app quota/allowlist if appId is
|
|
79
|
+
* given), calls the provider, and records usage. Throws AiCompletionError on any
|
|
80
|
+
* gated/failure condition.
|
|
81
|
+
*/
|
|
82
|
+
export declare function completeForOwner(storage: Storage, config: AimeatConfig, gaii: string, opts: CompleteForOwnerOptions): Promise<CompleteForOwnerResult>;
|
|
83
|
+
//# sourceMappingURL=ai-completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-completion.d.ts","sourceRoot":"","sources":["../../../src/services/ai-completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAoBvD,iEAAiE;AACjE,eAAO,MAAM,wBAAwB,IAAM,CAAC;AAC5C,eAAO,MAAM,qBAAqB,MAAO,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAOD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAExE;AAED,2FAA2F;AAC3F,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;gBACH,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAM1D;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAOD,qGAAqG;AACrG,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAGxF;AAeD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAiIjC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { decrypt, getEncryptionKey } from './encryption.js';
|
|
2
|
+
import { complete } from './openrouter.js';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
const DEFAULT_BASE_URLS = {
|
|
5
|
+
openrouter: 'https://openrouter.ai/api/v1',
|
|
6
|
+
lmstudio: 'http://localhost:1234/v1',
|
|
7
|
+
custom: '',
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Rough cost estimate when the provider didn't report one (LM Studio, custom).
|
|
11
|
+
* The user's OpenRouter dashboard is authoritative — budgets exist to prevent
|
|
12
|
+
* runaways, not to bill.
|
|
13
|
+
*/
|
|
14
|
+
const FALLBACK_PROMPT_COST_PER_TOKEN = 0.000005;
|
|
15
|
+
const FALLBACK_COMPLETION_COST_PER_TOKEN = 0.000015;
|
|
16
|
+
/** Defaults applied when the user hasn't set explicit values. */
|
|
17
|
+
export const DEFAULT_DAILY_BUDGET_USD = 1.0;
|
|
18
|
+
export const DEFAULT_APP_DAILY_USD = 0.10;
|
|
19
|
+
export function todayKey() {
|
|
20
|
+
return new Date().toISOString().slice(0, 10);
|
|
21
|
+
}
|
|
22
|
+
function estimateCostUsd(promptTokens, completionTokens) {
|
|
23
|
+
return promptTokens * FALLBACK_PROMPT_COST_PER_TOKEN
|
|
24
|
+
+ completionTokens * FALLBACK_COMPLETION_COST_PER_TOKEN;
|
|
25
|
+
}
|
|
26
|
+
export function getDailyBudgetUsd(prefs) {
|
|
27
|
+
return typeof prefs.daily_budget_usd === 'number' ? prefs.daily_budget_usd : DEFAULT_DAILY_BUDGET_USD;
|
|
28
|
+
}
|
|
29
|
+
/** Typed error so the HTTP route can map to a status/code and the scheduler can log it. */
|
|
30
|
+
export class AiCompletionError extends Error {
|
|
31
|
+
code;
|
|
32
|
+
status;
|
|
33
|
+
constructor(code, status, message) {
|
|
34
|
+
super(message);
|
|
35
|
+
this.name = 'AiCompletionError';
|
|
36
|
+
this.code = code;
|
|
37
|
+
this.status = status;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const emptyUsage = () => ({
|
|
41
|
+
date: todayKey(), total_cost_usd: 0, total_calls: 0, total_tokens: 0,
|
|
42
|
+
per_app: {}, updated_at: new Date().toISOString(),
|
|
43
|
+
});
|
|
44
|
+
/** Read today's usage record for an owner (used by the daily_limit constraint + the usage route). */
|
|
45
|
+
export async function getTodayUsage(storage, gaii) {
|
|
46
|
+
const rec = await storage.getMemory(gaii, `ai-usage.${gaii}.${todayKey()}`);
|
|
47
|
+
return rec?.value ?? emptyUsage();
|
|
48
|
+
}
|
|
49
|
+
async function upsertUsage(storage, gaii, value) {
|
|
50
|
+
const key = `ai-usage.${gaii}.${todayKey()}`;
|
|
51
|
+
const existing = await storage.getMemory(gaii, key);
|
|
52
|
+
const now = new Date().toISOString();
|
|
53
|
+
await storage.setMemory({
|
|
54
|
+
key, ownerGaii: gaii, value, visibility: 'private', tags: ['ai', 'usage'],
|
|
55
|
+
ttlHours: null,
|
|
56
|
+
version: existing ? existing.version + 1 : 1,
|
|
57
|
+
createdAt: existing?.createdAt ?? now,
|
|
58
|
+
updatedAt: now,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Run one AI completion on behalf of an owner. Loads the owner's key + budget
|
|
63
|
+
* settings, enforces the daily budget (and per-app quota/allowlist if appId is
|
|
64
|
+
* given), calls the provider, and records usage. Throws AiCompletionError on any
|
|
65
|
+
* gated/failure condition.
|
|
66
|
+
*/
|
|
67
|
+
export async function completeForOwner(storage, config, gaii, opts) {
|
|
68
|
+
if (!opts.prompt || typeof opts.prompt !== 'string') {
|
|
69
|
+
throw new AiCompletionError('INVALID_BODY', 400, 'prompt is required.');
|
|
70
|
+
}
|
|
71
|
+
if (opts.prompt.length > 200_000) {
|
|
72
|
+
throw new AiCompletionError('PROMPT_TOO_LONG', 400, 'prompt exceeds 200k characters.');
|
|
73
|
+
}
|
|
74
|
+
const [apiKeyRecord, prefsRecord, usageRecord] = await Promise.all([
|
|
75
|
+
storage.getMemory(gaii, 'openrouter.apikey'),
|
|
76
|
+
storage.getMemory(gaii, 'openrouter.settings'),
|
|
77
|
+
storage.getMemory(gaii, `ai-usage.${gaii}.${todayKey()}`),
|
|
78
|
+
]);
|
|
79
|
+
const prefs = prefsRecord?.value ?? {};
|
|
80
|
+
const provider = prefs.provider || 'openrouter';
|
|
81
|
+
const baseUrl = prefs.baseUrl || DEFAULT_BASE_URLS[provider];
|
|
82
|
+
// ── App allowlist (only when an appId is supplied / configured) ──
|
|
83
|
+
const allowlist = Array.isArray(prefs.app_allowlist) ? prefs.app_allowlist : null;
|
|
84
|
+
if (allowlist && opts.appId && !allowlist.includes(opts.appId)) {
|
|
85
|
+
throw new AiCompletionError('APP_NOT_ALLOWED', 403, `App "${opts.appId}" is not in your AI allowlist. Enable it from Settings.`);
|
|
86
|
+
}
|
|
87
|
+
if (allowlist && !opts.appId) {
|
|
88
|
+
throw new AiCompletionError('APP_ID_REQUIRED', 403, 'app_id is required because you have configured an AI app allowlist.');
|
|
89
|
+
}
|
|
90
|
+
// ── Decrypt key (optional for non-openrouter providers) ──
|
|
91
|
+
let decryptedKey;
|
|
92
|
+
const encrypted = apiKeyRecord?.value?.encrypted;
|
|
93
|
+
if (encrypted) {
|
|
94
|
+
const encKey = getEncryptionKey(config);
|
|
95
|
+
if (!encKey) {
|
|
96
|
+
throw new AiCompletionError('ENCRYPTION_NOT_CONFIGURED', 503, 'Encryption key not configured. Set AIMEAT_ENCRYPTION_KEY or AIMEAT_TOTP_ENCRYPTION_KEY.');
|
|
97
|
+
}
|
|
98
|
+
decryptedKey = decrypt(encrypted, encKey);
|
|
99
|
+
}
|
|
100
|
+
else if (provider === 'openrouter') {
|
|
101
|
+
throw new AiCompletionError('NO_API_KEY', 400, 'No OpenRouter API key configured. Set one in Settings.');
|
|
102
|
+
}
|
|
103
|
+
// ── Budget check ──
|
|
104
|
+
const usage = usageRecord?.value ?? emptyUsage();
|
|
105
|
+
const dailyBudget = getDailyBudgetUsd(prefs);
|
|
106
|
+
if (usage.total_cost_usd >= dailyBudget) {
|
|
107
|
+
throw new AiCompletionError('QUOTA_EXHAUSTED', 402, `Daily AI budget hit ($${usage.total_cost_usd.toFixed(4)} / $${dailyBudget}). Raise it in Settings or wait until midnight UTC.`);
|
|
108
|
+
}
|
|
109
|
+
const appQuotas = prefs.app_quotas ?? {};
|
|
110
|
+
if (opts.appId) {
|
|
111
|
+
const appQuota = appQuotas[opts.appId]?.daily_usd ?? DEFAULT_APP_DAILY_USD;
|
|
112
|
+
const appSpent = usage.per_app[opts.appId]?.cost_usd ?? 0;
|
|
113
|
+
if (appSpent >= appQuota) {
|
|
114
|
+
throw new AiCompletionError('APP_QUOTA_EXHAUSTED', 402, `Daily AI quota for "${opts.appId}" hit ($${appSpent.toFixed(4)} / $${appQuota}). Raise it in Settings.`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// ── Model selection ──
|
|
118
|
+
let selectedModel;
|
|
119
|
+
if (typeof opts.model === 'string' && opts.model) {
|
|
120
|
+
selectedModel = opts.model;
|
|
121
|
+
}
|
|
122
|
+
else if (opts.modelRole === 'reasoning' && prefs.reasoningModel) {
|
|
123
|
+
selectedModel = prefs.reasoningModel;
|
|
124
|
+
}
|
|
125
|
+
else if (opts.modelRole === 'execution' && prefs.executionModel) {
|
|
126
|
+
selectedModel = prefs.executionModel;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
selectedModel = prefs.model
|
|
130
|
+
|| prefs.executionModel
|
|
131
|
+
|| prefs.reasoningModel
|
|
132
|
+
|| 'anthropic/claude-sonnet-4';
|
|
133
|
+
}
|
|
134
|
+
const options = {
|
|
135
|
+
temperature: opts.temperature ?? (typeof prefs.temperature === 'number' ? prefs.temperature : undefined),
|
|
136
|
+
top_p: opts.topP ?? (typeof prefs.top_p === 'number' ? prefs.top_p : undefined),
|
|
137
|
+
max_tokens: typeof opts.maxTokens === 'number' && opts.maxTokens > 0
|
|
138
|
+
? (opts.maxTokens | 0)
|
|
139
|
+
: (typeof prefs.max_tokens === 'number' ? prefs.max_tokens : undefined),
|
|
140
|
+
};
|
|
141
|
+
let result;
|
|
142
|
+
try {
|
|
143
|
+
result = await complete(decryptedKey, selectedModel, opts.prompt, opts.systemPrompt, baseUrl, options);
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
const status = e.status;
|
|
147
|
+
if (status === 401)
|
|
148
|
+
throw new AiCompletionError('INVALID_API_KEY', 401, 'API key was rejected by the provider.');
|
|
149
|
+
if (status === 429)
|
|
150
|
+
throw new AiCompletionError('RATE_LIMITED', 429, 'Provider rate limit hit. Try again later.');
|
|
151
|
+
throw new AiCompletionError('PROVIDER_ERROR', 502, e.message);
|
|
152
|
+
}
|
|
153
|
+
const promptTok = result.usage?.prompt_tokens ?? 0;
|
|
154
|
+
const completionTok = result.usage?.completion_tokens ?? 0;
|
|
155
|
+
const totalTok = result.usage?.total_tokens ?? (promptTok + completionTok);
|
|
156
|
+
const costExact = typeof result.usage?.cost_usd === 'number';
|
|
157
|
+
const costUsd = costExact ? result.usage.cost_usd : estimateCostUsd(promptTok, completionTok);
|
|
158
|
+
// ── Record usage (idempotent within the day) ──
|
|
159
|
+
const updated = {
|
|
160
|
+
date: todayKey(),
|
|
161
|
+
total_cost_usd: usage.total_cost_usd + costUsd,
|
|
162
|
+
total_calls: usage.total_calls + 1,
|
|
163
|
+
total_tokens: usage.total_tokens + totalTok,
|
|
164
|
+
per_app: { ...usage.per_app },
|
|
165
|
+
updated_at: new Date().toISOString(),
|
|
166
|
+
};
|
|
167
|
+
const appKey = opts.appId || '_unknown';
|
|
168
|
+
const existing = updated.per_app[appKey] ?? { cost_usd: 0, calls: 0, tokens: 0 };
|
|
169
|
+
updated.per_app[appKey] = {
|
|
170
|
+
cost_usd: existing.cost_usd + costUsd,
|
|
171
|
+
calls: existing.calls + 1,
|
|
172
|
+
tokens: existing.tokens + totalTok,
|
|
173
|
+
};
|
|
174
|
+
await upsertUsage(storage, gaii, updated);
|
|
175
|
+
logger.info(`[ai] gaii=${gaii} app=${appKey} model=${result.model} tokens=${totalTok} cost=$${costUsd.toFixed(4)} day_total=$${updated.total_cost_usd.toFixed(4)}`);
|
|
176
|
+
return {
|
|
177
|
+
content: result.content,
|
|
178
|
+
model: result.model,
|
|
179
|
+
usage: { promptTokens: promptTok, completionTokens: completionTok, totalTokens: totalTok, costUsd, costExact },
|
|
180
|
+
budget: {
|
|
181
|
+
dailyBudgetUsd: dailyBudget,
|
|
182
|
+
spentTodayUsd: updated.total_cost_usd,
|
|
183
|
+
remainingUsd: Math.max(0, dailyBudget - updated.total_cost_usd),
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=ai-completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-completion.js","sourceRoot":"","sources":["../../../src/services/ai-completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../../src/services/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;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,
|
|
1
|
+
{"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../../src/services/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;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,EAkTzC,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,CAY5E;AAED,wDAAwD;AACxD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG3D"}
|
|
@@ -261,6 +261,9 @@ export const CONFIG_FIELDS = [
|
|
|
261
261
|
{ key: 'agentMaxTokensPerTask', dotPath: 'agent.max_tokens_per_task', envVar: 'AIMEAT_AGENT_MAX_TOKENS_PER_TASK', type: 'number', validate: (v) => typeof v === 'number' && v >= 1000 && v <= 10000000, immutable: false, description: 'Maximum token budget per agent task', range: '1000-10000000' },
|
|
262
262
|
{ key: 'agentMandatoryLogging', dotPath: 'agent.mandatory_logging', envVar: 'AIMEAT_AGENT_MANDATORY_LOGGING', type: 'boolean', validate: (v) => typeof v === 'boolean', immutable: false, description: 'Require agents to log all significant actions' },
|
|
263
263
|
{ key: 'agentAimeatFirstEnabled', dotPath: 'agent.aimeat_first', envVar: 'AIMEAT_AGENT_AIMEAT_FIRST', type: 'boolean', validate: (v) => typeof v === 'boolean', immutable: false, description: 'Enable AIMEAT-first principle in agent directives' },
|
|
264
|
+
// ── Agent Tasks triage (Phase 1, mutable) ──
|
|
265
|
+
{ 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)' },
|
|
266
|
+
{ 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' },
|
|
264
267
|
];
|
|
265
268
|
// ── Derived Lookup Maps ──
|
|
266
269
|
/** dotPath -> ConfigFieldDef (mutable fields only) */
|