crewly 1.20.187 → 1.20.188
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/config/skills/agent/core/project-tickets/SKILL.md +3 -2
- package/config/skills/agent/core/project-tickets/execute.sh +4 -4
- package/config/skills/agent/core/project-tickets/execute.test.sh +2 -2
- package/dist/backend/backend/src/constants.d.ts +70 -12
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +70 -12
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +5 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +1 -1
- package/dist/backend/backend/src/controllers/system/usage.controller.d.ts +46 -0
- package/dist/backend/backend/src/controllers/system/usage.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/usage.controller.js +181 -0
- package/dist/backend/backend/src/controllers/system/usage.controller.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts +7 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +59 -4
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.js +3 -3
- package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +7 -7
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts +4 -2
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +6 -1
- package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +2 -2
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +4 -2
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.d.ts +130 -0
- package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.js +274 -0
- package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.d.ts +152 -0
- package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.js +311 -0
- package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +53 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js +51 -3
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +4 -4
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts +4 -3
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js +7 -4
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +40 -9
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +68 -20
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap-command.d.ts +48 -18
- package/dist/backend/backend/src/services/spend/spend-cap-command.d.ts.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap-command.js +195 -62
- package/dist/backend/backend/src/services/spend/spend-cap-command.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.gate.d.ts +11 -15
- package/dist/backend/backend/src/services/spend/spend-cap.gate.d.ts.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.gate.js +8 -13
- package/dist/backend/backend/src/services/spend/spend-cap.gate.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts +179 -64
- package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.service.js +406 -149
- package/dist/backend/backend/src/services/spend/spend-cap.service.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.store.d.ts +52 -11
- package/dist/backend/backend/src/services/spend/spend-cap.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.store.js +67 -21
- package/dist/backend/backend/src/services/spend/spend-cap.store.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.wiring.d.ts +3 -1
- package/dist/backend/backend/src/services/spend/spend-cap.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.wiring.js +21 -7
- package/dist/backend/backend/src/services/spend/spend-cap.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts +57 -36
- package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-ledger.service.js +80 -55
- package/dist/backend/backend/src/services/spend/spend-ledger.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/work-item-usage.d.ts +10 -1
- package/dist/backend/backend/src/services/task-pool/work-item-usage.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/work-item-usage.js +2 -0
- package/dist/backend/backend/src/services/task-pool/work-item-usage.js.map +1 -1
- package/dist/backend/backend/src/services/usage/token-format.d.ts +49 -0
- package/dist/backend/backend/src/services/usage/token-format.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage/token-format.js +81 -0
- package/dist/backend/backend/src/services/usage/token-format.js.map +1 -0
- package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts +132 -0
- package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/usage/usage-stats.service.js +226 -0
- package/dist/backend/backend/src/services/usage/usage-stats.service.js.map +1 -0
- package/dist/backend/backend/src/types/decision.types.d.ts +2 -2
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +24 -7
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/ticket-autopilot.types.js +29 -13
- package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +70 -12
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +70 -12
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +7 -7
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts +4 -2
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +6 -1
- package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js +2 -2
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +4 -2
- package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +53 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js +51 -3
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/cli/backend/src/services/spend/spend-cap.gate.d.ts +11 -15
- package/dist/cli/backend/src/services/spend/spend-cap.gate.d.ts.map +1 -1
- package/dist/cli/backend/src/services/spend/spend-cap.gate.js +8 -13
- package/dist/cli/backend/src/services/spend/spend-cap.gate.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/work-item-usage.d.ts +10 -1
- package/dist/cli/backend/src/services/task-pool/work-item-usage.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/work-item-usage.js +2 -0
- package/dist/cli/backend/src/services/task-pool/work-item-usage.js.map +1 -1
- package/dist/cli/backend/src/services/usage/token-format.d.ts +49 -0
- package/dist/cli/backend/src/services/usage/token-format.d.ts.map +1 -0
- package/dist/cli/backend/src/services/usage/token-format.js +81 -0
- package/dist/cli/backend/src/services/usage/token-format.js.map +1 -0
- package/dist/cli/backend/src/types/decision.types.d.ts +2 -2
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +24 -7
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/ticket-autopilot.types.js +29 -13
- package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/frontend/dist/assets/{index-15c2faf2.js → index-49f50b45.js} +276 -276
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/backend/backend/src/controllers/system/spend.controller.d.ts +0 -32
- package/dist/backend/backend/src/controllers/system/spend.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/system/spend.controller.js +0 -100
- package/dist/backend/backend/src/controllers/system/spend.controller.js.map +0 -1
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* the orc — so it works while the orc itself is stopped
|
|
2
|
+
* Token caps and boosts from the owner's DM with the orc. Handled by the
|
|
3
|
+
* backend, not the orc — so it works while the orc itself is stopped:
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* - `set daily cap to
|
|
7
|
-
* - `set
|
|
8
|
-
* - `
|
|
9
|
-
* - `
|
|
5
|
+
* Caps (amounts in tokens: `5M`, `500k`, `2000万`, `5000000`):
|
|
6
|
+
* - `set daily cap for Ella to 5M` / `set daily cap to 5M` (default per agent)
|
|
7
|
+
* - `set team cap for CE to 50M` / `set daily cap for team CE to 50M`
|
|
8
|
+
* - `set daily total cap to 200M` (all agents together)
|
|
9
|
+
* - `remove daily cap for Ella` / `remove team cap for CE` / `remove daily cap` / `remove daily total cap`
|
|
10
|
+
*
|
|
11
|
+
* Boosts (until local midnight):
|
|
12
|
+
* - `boost CE by 20M today` / `boost Ella by 5M` / `boost everyone by 10M today`
|
|
13
|
+
* - `unlimited today for everyone` / `unlimited today for CE` / `CE unlimited today`
|
|
14
|
+
* - `放开 CE 今天` / `今天放开 CE` / `今天全部放开` / `给 CE 加 20M` / `CE 今天加 2000万`
|
|
15
|
+
*
|
|
16
|
+
* A target is everyone, a team (by name) or an agent (by name / session);
|
|
17
|
+
* a name that is both a team and an agent means the team. Replies are
|
|
18
|
+
* English (harness text rule).
|
|
10
19
|
*
|
|
11
20
|
* While the orc is stopped by a cap, every other owner DM to it gets one
|
|
12
21
|
* harness line saying so (the message itself stays queued for the orc).
|
|
@@ -17,34 +26,41 @@
|
|
|
17
26
|
*/
|
|
18
27
|
import type { SlackIncomingMessage } from '../../types/slack.types.js';
|
|
19
28
|
import { type SpendStop } from './spend-cap.gate.js';
|
|
20
|
-
import { type SpendCapPatch } from './spend-cap.service.js';
|
|
21
|
-
/** A parsed command. */
|
|
29
|
+
import { type BoostInput, type SpendCapPatch } from './spend-cap.service.js';
|
|
30
|
+
/** A parsed command. `target` is the name as typed (resolved later). */
|
|
22
31
|
export type SpendCapCommand = {
|
|
23
32
|
kind: 'set';
|
|
24
33
|
target: string | null;
|
|
25
|
-
|
|
34
|
+
team?: boolean;
|
|
35
|
+
tokens: number;
|
|
26
36
|
} | {
|
|
27
37
|
kind: 'set_total';
|
|
28
|
-
|
|
38
|
+
tokens: number;
|
|
29
39
|
} | {
|
|
30
40
|
kind: 'remove';
|
|
31
41
|
target: string | null;
|
|
42
|
+
team?: boolean;
|
|
32
43
|
} | {
|
|
33
44
|
kind: 'remove_total';
|
|
34
45
|
} | {
|
|
35
|
-
kind: '
|
|
46
|
+
kind: 'boost';
|
|
36
47
|
target: string;
|
|
37
|
-
|
|
48
|
+
tokens: number;
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'unlimited';
|
|
51
|
+
target: string;
|
|
52
|
+
} | {
|
|
53
|
+
kind: 'usd_hint';
|
|
38
54
|
};
|
|
39
55
|
/**
|
|
40
|
-
* Parse a
|
|
56
|
+
* Parse a cap / boost command.
|
|
41
57
|
*
|
|
42
58
|
* @param text - Message text
|
|
43
59
|
* @returns The command, or null when the message is not one
|
|
44
60
|
*
|
|
45
61
|
* @example
|
|
46
|
-
* parseSpendCapCommand('
|
|
47
|
-
* parseSpendCapCommand('
|
|
62
|
+
* parseSpendCapCommand('boost CE by 20M today') // { kind: 'boost', target: 'ce', tokens: 20000000 }
|
|
63
|
+
* parseSpendCapCommand('放开 CE 今天') // { kind: 'unlimited', target: 'ce' }
|
|
48
64
|
*/
|
|
49
65
|
export declare function parseSpendCapCommand(text: string | undefined): SpendCapCommand | null;
|
|
50
66
|
/** An agent the owner can name. */
|
|
@@ -52,6 +68,11 @@ export interface NamedAgent {
|
|
|
52
68
|
session: string;
|
|
53
69
|
name: string;
|
|
54
70
|
}
|
|
71
|
+
/** A team the owner can name. */
|
|
72
|
+
export interface NamedTeam {
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
}
|
|
55
76
|
/**
|
|
56
77
|
* Resolve the agent the owner named.
|
|
57
78
|
*
|
|
@@ -60,6 +81,14 @@ export interface NamedAgent {
|
|
|
60
81
|
* @returns Session, or null when unknown / ambiguous
|
|
61
82
|
*/
|
|
62
83
|
export declare function resolveAgent(who: string, agents: NamedAgent[]): string | null;
|
|
84
|
+
/**
|
|
85
|
+
* Resolve the team the owner named.
|
|
86
|
+
*
|
|
87
|
+
* @param who - Team name or id (`team CE` works too)
|
|
88
|
+
* @param teams - Teams
|
|
89
|
+
* @returns Team, or null when unknown / ambiguous
|
|
90
|
+
*/
|
|
91
|
+
export declare function resolveTeam(who: string, teams: NamedTeam[]): NamedTeam | null;
|
|
63
92
|
/** What the interceptor needs. */
|
|
64
93
|
export interface SpendCapCommandDeps {
|
|
65
94
|
/** `orc` when the message is the owner writing in their DM with the orc */
|
|
@@ -68,8 +97,9 @@ export interface SpendCapCommandDeps {
|
|
|
68
97
|
reply: (text: string, target: unknown) => Promise<unknown>;
|
|
69
98
|
/** Configured agents (orc included) */
|
|
70
99
|
agents: () => Promise<NamedAgent[]>;
|
|
100
|
+
teams: () => Promise<NamedTeam[]>;
|
|
71
101
|
setCaps: (patch: SpendCapPatch) => Promise<unknown>;
|
|
72
|
-
|
|
102
|
+
boost: (input: BoostInput) => Promise<unknown>;
|
|
73
103
|
/** The orc's stop, or null */
|
|
74
104
|
orcStop: () => SpendStop | null;
|
|
75
105
|
onError?: (err: unknown) => void;
|
|
@@ -88,7 +118,7 @@ export declare function orcCappedReply(stop: SpendStop): string;
|
|
|
88
118
|
* @param deps - Collaborators
|
|
89
119
|
* @returns The owner's one-line answer
|
|
90
120
|
*/
|
|
91
|
-
export declare function runSpendCapCommand(cmd: SpendCapCommand, deps: Pick<SpendCapCommandDeps, 'agents' | 'setCaps' | '
|
|
121
|
+
export declare function runSpendCapCommand(cmd: SpendCapCommand, deps: Pick<SpendCapCommandDeps, 'agents' | 'teams' | 'setCaps' | 'boost'>): Promise<string>;
|
|
92
122
|
/**
|
|
93
123
|
* The Slack bridge interceptor for the owner's orc DM.
|
|
94
124
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spend-cap-command.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap-command.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"spend-cap-command.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* the orc — so it works while the orc itself is stopped
|
|
2
|
+
* Token caps and boosts from the owner's DM with the orc. Handled by the
|
|
3
|
+
* backend, not the orc — so it works while the orc itself is stopped:
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* - `set daily cap to
|
|
7
|
-
* - `set
|
|
8
|
-
* - `
|
|
9
|
-
* - `
|
|
5
|
+
* Caps (amounts in tokens: `5M`, `500k`, `2000万`, `5000000`):
|
|
6
|
+
* - `set daily cap for Ella to 5M` / `set daily cap to 5M` (default per agent)
|
|
7
|
+
* - `set team cap for CE to 50M` / `set daily cap for team CE to 50M`
|
|
8
|
+
* - `set daily total cap to 200M` (all agents together)
|
|
9
|
+
* - `remove daily cap for Ella` / `remove team cap for CE` / `remove daily cap` / `remove daily total cap`
|
|
10
|
+
*
|
|
11
|
+
* Boosts (until local midnight):
|
|
12
|
+
* - `boost CE by 20M today` / `boost Ella by 5M` / `boost everyone by 10M today`
|
|
13
|
+
* - `unlimited today for everyone` / `unlimited today for CE` / `CE unlimited today`
|
|
14
|
+
* - `放开 CE 今天` / `今天放开 CE` / `今天全部放开` / `给 CE 加 20M` / `CE 今天加 2000万`
|
|
15
|
+
*
|
|
16
|
+
* A target is everyone, a team (by name) or an agent (by name / session);
|
|
17
|
+
* a name that is both a team and an agent means the team. Replies are
|
|
18
|
+
* English (harness text rule).
|
|
10
19
|
*
|
|
11
20
|
* While the orc is stopped by a cap, every other owner DM to it gets one
|
|
12
21
|
* harness line saying so (the message itself stays queued for the orc).
|
|
@@ -15,11 +24,28 @@
|
|
|
15
24
|
*
|
|
16
25
|
* @module services/spend/spend-cap-command
|
|
17
26
|
*/
|
|
18
|
-
import { ORCHESTRATOR_SESSION_NAME
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
import { ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
|
|
28
|
+
import { compactTokens, formatTokens, parseTokenAmount } from '../usage/token-format.js';
|
|
29
|
+
import { spendCapReason } from './spend-cap.gate.js';
|
|
30
|
+
import { suggestedBoost } from './spend-cap.service.js';
|
|
31
|
+
/** A name a boost may target from free text: short ASCII, or an "everyone" word. */
|
|
32
|
+
const NAME = /^[a-z0-9][a-z0-9 _.@-]{0,39}$/;
|
|
33
|
+
/**
|
|
34
|
+
* Whether free text after a boost keyword is a plausible target (so an
|
|
35
|
+
* ordinary sentence that happens to start with 放开 / ends with "unlimited
|
|
36
|
+
* today" still goes to the orc).
|
|
37
|
+
*
|
|
38
|
+
* @param who - Candidate target
|
|
39
|
+
* @returns True when it may be a team / agent name or "everyone"
|
|
40
|
+
*/
|
|
41
|
+
function plausibleTarget(who) {
|
|
42
|
+
return EVERYONE.has(who) || NAME.test(who);
|
|
43
|
+
}
|
|
44
|
+
/** Words for "everyone". */
|
|
45
|
+
const EVERYONE = new Set(['everyone', 'everybody', 'all', 'all agents', 'every agent', 'the whole crew', 'total', '所有人', '全部', '大家', '所有', '全员', '全部人']);
|
|
46
|
+
const AMOUNT = String.raw `(\d+(?:\.\d+)?\s*(?:k|m|mil|million|b|bn|billion|万|亿)?)(?:\s*tokens?)?`;
|
|
47
|
+
const CAP = String.raw `(?:daily\s+)?(?:token\s+|spend(?:ing)?\s+|usage\s+)?cap`;
|
|
48
|
+
const TODAY = String.raw `(?:\s*(?:for\s+)?today)?`;
|
|
23
49
|
/**
|
|
24
50
|
* Normalise a message for matching.
|
|
25
51
|
*
|
|
@@ -32,44 +58,101 @@ function norm(text) {
|
|
|
32
58
|
.replace(/[`*_]/g, '')
|
|
33
59
|
.toLowerCase()
|
|
34
60
|
.replace(/[\s.。!!~~]+$/u, '')
|
|
35
|
-
.replace(/^(?:please|pls)\s
|
|
61
|
+
.replace(/^(?:please|pls|请)\s*/u, '')
|
|
36
62
|
.replace(/\s+/g, ' ')
|
|
37
63
|
.trim();
|
|
38
64
|
}
|
|
39
65
|
/**
|
|
40
|
-
*
|
|
66
|
+
* Amount text → tokens.
|
|
67
|
+
*
|
|
68
|
+
* @param text - e.g. `20m`, `2000万`
|
|
69
|
+
* @returns Tokens, or null
|
|
70
|
+
*/
|
|
71
|
+
function amount(text) {
|
|
72
|
+
return parseTokenAmount(text.replace(/\s+/g, ''));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse a cap / boost command.
|
|
41
76
|
*
|
|
42
77
|
* @param text - Message text
|
|
43
78
|
* @returns The command, or null when the message is not one
|
|
44
79
|
*
|
|
45
80
|
* @example
|
|
46
|
-
* parseSpendCapCommand('
|
|
47
|
-
* parseSpendCapCommand('
|
|
81
|
+
* parseSpendCapCommand('boost CE by 20M today') // { kind: 'boost', target: 'ce', tokens: 20000000 }
|
|
82
|
+
* parseSpendCapCommand('放开 CE 今天') // { kind: 'unlimited', target: 'ce' }
|
|
48
83
|
*/
|
|
49
84
|
export function parseSpendCapCommand(text) {
|
|
50
85
|
if (!text)
|
|
51
86
|
return null;
|
|
52
87
|
const t = norm(text);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
88
|
+
if (!t)
|
|
89
|
+
return null;
|
|
90
|
+
let m;
|
|
91
|
+
const num = (s) => amount(s);
|
|
92
|
+
// ---- caps
|
|
93
|
+
m = new RegExp(String.raw `^set (?:the )?(?:daily total|total daily|total)(?: token| spend(?:ing)?)? cap to ${AMOUNT}$`).exec(t);
|
|
94
|
+
if (m && num(m[1]))
|
|
95
|
+
return { kind: 'set_total', tokens: num(m[1]) };
|
|
96
|
+
m = new RegExp(String.raw `^set (?:the )?(?:daily )?team (?:token )?cap for (.+?) to ${AMOUNT}(?: (?:a|per) day)?$`).exec(t);
|
|
97
|
+
if (m && num(m[2]))
|
|
98
|
+
return { kind: 'set', target: m[1].trim(), team: true, tokens: num(m[2]) };
|
|
99
|
+
m = new RegExp(String.raw `^set (?:the )?${CAP} for team (.+?) to ${AMOUNT}(?: (?:a|per) day)?$`).exec(t);
|
|
100
|
+
if (m && num(m[2]))
|
|
101
|
+
return { kind: 'set', target: m[1].trim(), team: true, tokens: num(m[2]) };
|
|
56
102
|
m = new RegExp(String.raw `^set (?:the )?${CAP}(?: for (.+?))? to ${AMOUNT}(?: (?:a|per) day)?$`).exec(t);
|
|
57
|
-
if (m)
|
|
58
|
-
return { kind: 'set', target: m[1]?.trim() || null,
|
|
59
|
-
m = /^(?:remove|clear|turn off|disable) (?:the )?(?:daily total|total daily|total)(?: spend(?:ing)?)? cap$/.exec(t);
|
|
103
|
+
if (m && num(m[2]))
|
|
104
|
+
return { kind: 'set', target: m[1]?.trim() || null, tokens: num(m[2]) };
|
|
105
|
+
m = /^(?:remove|clear|turn off|disable) (?:the )?(?:daily total|total daily|total)(?: token| spend(?:ing)?)? cap$/.exec(t);
|
|
60
106
|
if (m)
|
|
61
107
|
return { kind: 'remove_total' };
|
|
108
|
+
m = /^(?:remove|clear|turn off|disable) (?:the )?(?:daily )?team cap for (.+)$/.exec(t) ?? new RegExp(String.raw `^(?:remove|clear|turn off|disable) (?:the )?${CAP} for team (.+)$`).exec(t);
|
|
109
|
+
if (m)
|
|
110
|
+
return { kind: 'remove', target: m[1].trim(), team: true };
|
|
62
111
|
m = new RegExp(String.raw `^(?:remove|clear|turn off|disable) (?:the )?${CAP}(?: for (.+))?$`).exec(t);
|
|
63
112
|
if (m)
|
|
64
113
|
return { kind: 'remove', target: m[1]?.trim() || null };
|
|
65
|
-
|
|
114
|
+
// ---- boosts (English)
|
|
115
|
+
m = new RegExp(String.raw `^boost (.+?) (?:by |\+)\s*${AMOUNT}${TODAY}$`).exec(t);
|
|
116
|
+
if (m && num(m[2]))
|
|
117
|
+
return { kind: 'boost', target: m[1].trim(), tokens: num(m[2]) };
|
|
118
|
+
m = new RegExp(String.raw `^give (.+?) (?:\+)?${AMOUNT} (?:more|extra)${TODAY}$`).exec(t);
|
|
119
|
+
if (m && num(m[2]))
|
|
120
|
+
return { kind: 'boost', target: m[1].trim(), tokens: num(m[2]) };
|
|
121
|
+
m = /^(?:unlimited|no (?:token )?cap|no limit)(?: tokens?)? (?:for )?today(?: for (.+))?$/.exec(t);
|
|
66
122
|
if (m)
|
|
67
|
-
return { kind: '
|
|
68
|
-
m =
|
|
123
|
+
return { kind: 'unlimited', target: m[1]?.trim() || 'everyone' };
|
|
124
|
+
m = /^(?:unlimited|no (?:token )?cap|no limit) (?:tokens? )?for (.+?)(?: (?:for )?today)?$/.exec(t);
|
|
125
|
+
if (m)
|
|
126
|
+
return { kind: 'unlimited', target: m[1].trim() };
|
|
127
|
+
m = /^(?:lift|remove|drop) (?:the )?(?:daily )?(?:token )?caps? (?:for|on) (.+?) (?:for )?today$/.exec(t);
|
|
128
|
+
if (m)
|
|
129
|
+
return { kind: 'unlimited', target: m[1].trim() };
|
|
130
|
+
m = /^(.+?) unlimited today$/.exec(t);
|
|
131
|
+
if (m && plausibleTarget(m[1].trim()))
|
|
132
|
+
return { kind: 'unlimited', target: m[1].trim() };
|
|
133
|
+
// ---- boosts (Chinese)
|
|
134
|
+
const zh = t.replace(/\s+/g, ' ');
|
|
135
|
+
m = /^(?:今天)?\s*(?:全部|全都|所有人|大家)?\s*放开(?:吧)?\s*(.*?)\s*(?:今天|今日)?(?:吧)?$/u.exec(zh);
|
|
69
136
|
if (m) {
|
|
70
|
-
const
|
|
71
|
-
|
|
137
|
+
const who = m[1].trim();
|
|
138
|
+
const all = /^(?:今天|今日)?\s*(?:全部|全都|所有人|大家)/u.test(zh) || EVERYONE.has(who) || who === '';
|
|
139
|
+
if (all)
|
|
140
|
+
return { kind: 'unlimited', target: 'everyone' };
|
|
141
|
+
if (plausibleTarget(who))
|
|
142
|
+
return { kind: 'unlimited', target: who };
|
|
72
143
|
}
|
|
144
|
+
m = /^(.+?)\s*(?:今天|今日)\s*(?:不限|不封顶|放开)$/u.exec(zh);
|
|
145
|
+
if (m && plausibleTarget(m[1].trim()))
|
|
146
|
+
return { kind: 'unlimited', target: m[1].trim() };
|
|
147
|
+
m = new RegExp(String.raw `^(?:今天)?\s*给\s*(.+?)\s*(?:今天)?\s*(?:加|多加|增加)\s*${AMOUNT}$`, 'u').exec(zh);
|
|
148
|
+
if (m && num(m[2]) && plausibleTarget(m[1].trim()))
|
|
149
|
+
return { kind: 'boost', target: m[1].trim(), tokens: num(m[2]) };
|
|
150
|
+
m = new RegExp(String.raw `^(.+?)\s*(?:今天|今日)\s*(?:加|多加|增加)\s*${AMOUNT}$`, 'u').exec(zh);
|
|
151
|
+
if (m && num(m[2]) && plausibleTarget(m[1].trim()))
|
|
152
|
+
return { kind: 'boost', target: m[1].trim(), tokens: num(m[2]) };
|
|
153
|
+
// ---- the pre-token dollar forms: answer with the token form instead of passing them on
|
|
154
|
+
if (/^(?:set|raise|remove) .*cap.*\$\s*\d/.test(t))
|
|
155
|
+
return { kind: 'usd_hint' };
|
|
73
156
|
return null;
|
|
74
157
|
}
|
|
75
158
|
/**
|
|
@@ -89,6 +172,21 @@ export function resolveAgent(who, agents) {
|
|
|
89
172
|
const byName = agents.filter((a) => a.name.toLowerCase() === w);
|
|
90
173
|
return byName.length === 1 ? byName[0].session : null;
|
|
91
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Resolve the team the owner named.
|
|
177
|
+
*
|
|
178
|
+
* @param who - Team name or id (`team CE` works too)
|
|
179
|
+
* @param teams - Teams
|
|
180
|
+
* @returns Team, or null when unknown / ambiguous
|
|
181
|
+
*/
|
|
182
|
+
export function resolveTeam(who, teams) {
|
|
183
|
+
const w = who.trim().toLowerCase().replace(/^(?:the )?team\s+/, '').replace(/\s+team$/, '');
|
|
184
|
+
const byId = teams.find((t) => t.id.toLowerCase() === w);
|
|
185
|
+
if (byId)
|
|
186
|
+
return byId;
|
|
187
|
+
const byName = teams.filter((t) => t.name.toLowerCase() === w);
|
|
188
|
+
return byName.length === 1 ? byName[0] : null;
|
|
189
|
+
}
|
|
92
190
|
/**
|
|
93
191
|
* The orc's harness line while it is stopped by a cap.
|
|
94
192
|
*
|
|
@@ -96,9 +194,9 @@ export function resolveAgent(who, agents) {
|
|
|
96
194
|
* @returns One line
|
|
97
195
|
*/
|
|
98
196
|
export function orcCappedReply(stop) {
|
|
99
|
-
const
|
|
100
|
-
const
|
|
101
|
-
return `${spendCapReason(stop, 'Orc')}. No new turns start until midnight; your message is queued. To
|
|
197
|
+
const extra = compactTokens(suggestedBoost(stop.capTokens));
|
|
198
|
+
const who = stop.scope === 'total' ? 'everyone' : stop.scope === 'team' ? (stop.teamName ?? 'the team') : 'orc';
|
|
199
|
+
return `${spendCapReason(stop, 'Orc')}. No new turns start until midnight; your message is queued. To lift it for today, reply \`boost ${who} by ${extra} today\` or \`unlimited today for ${who}\` (or Settings → System → Usage).`;
|
|
102
200
|
}
|
|
103
201
|
/**
|
|
104
202
|
* Run a parsed command.
|
|
@@ -109,52 +207,87 @@ export function orcCappedReply(stop) {
|
|
|
109
207
|
*/
|
|
110
208
|
export async function runSpendCapCommand(cmd, deps) {
|
|
111
209
|
const agents = await deps.agents();
|
|
112
|
-
const
|
|
210
|
+
const teams = await deps.teams();
|
|
211
|
+
const agentOf = (target) => {
|
|
113
212
|
const session = resolveAgent(target, agents);
|
|
114
213
|
if (!session)
|
|
115
|
-
return
|
|
116
|
-
|
|
117
|
-
|
|
214
|
+
return null;
|
|
215
|
+
return { session, name: session === ORCHESTRATOR_SESSION_NAME ? 'Orc' : (agents.find((a) => a.session === session)?.name ?? session) };
|
|
216
|
+
};
|
|
217
|
+
const unknown = (target) => `I don't know a team or agent called "${target}". Use a team name (e.g. ${teams[0]?.name ?? 'CE'}), an agent's name or session name, or "everyone".`;
|
|
218
|
+
const resolve = (target, preferTeam) => {
|
|
219
|
+
if (EVERYONE.has(target.trim().toLowerCase()))
|
|
220
|
+
return { scope: 'all' };
|
|
221
|
+
const team = resolveTeam(target, teams);
|
|
222
|
+
const agent = agentOf(target);
|
|
223
|
+
if (team && (preferTeam || !agent))
|
|
224
|
+
return { scope: 'team', team };
|
|
225
|
+
if (agent)
|
|
226
|
+
return { scope: 'agent', ...agent };
|
|
227
|
+
return unknown(target);
|
|
118
228
|
};
|
|
229
|
+
const label = (t) => (t.scope === 'all' ? 'everyone' : t.scope === 'team' ? `team ${t.team.name}` : t.name);
|
|
230
|
+
const boostInput = (t) => t.scope === 'all' ? { scope: 'all' } : t.scope === 'team' ? { scope: 'team', id: t.team.id } : { scope: 'agent', id: t.session };
|
|
119
231
|
switch (cmd.kind) {
|
|
232
|
+
case 'usd_hint':
|
|
233
|
+
return 'Caps are counted in tokens now, not dollars. Try `set daily cap for orc to 5M`, `set team cap for CE to 50M`, or `boost CE by 20M today`.';
|
|
120
234
|
case 'set_total':
|
|
121
|
-
await deps.setCaps({
|
|
122
|
-
return `Daily
|
|
235
|
+
await deps.setCaps({ totalCapTokens: cmd.tokens });
|
|
236
|
+
return `Daily token cap set to ${formatTokens(cmd.tokens)} for all agents together.`;
|
|
123
237
|
case 'remove_total':
|
|
124
|
-
await deps.setCaps({
|
|
125
|
-
return 'Daily total
|
|
238
|
+
await deps.setCaps({ totalCapTokens: null });
|
|
239
|
+
return 'Daily total token cap removed.';
|
|
126
240
|
case 'set': {
|
|
127
241
|
if (!cmd.target) {
|
|
128
|
-
await deps.setCaps({
|
|
129
|
-
return `Daily
|
|
242
|
+
await deps.setCaps({ defaultAgentCapTokens: cmd.tokens });
|
|
243
|
+
return `Daily token cap set to ${formatTokens(cmd.tokens)} per agent (agents with their own cap keep it).`;
|
|
130
244
|
}
|
|
131
|
-
const
|
|
132
|
-
if (typeof
|
|
133
|
-
return
|
|
134
|
-
|
|
135
|
-
|
|
245
|
+
const t = resolve(cmd.target, cmd.team === true);
|
|
246
|
+
if (typeof t === 'string')
|
|
247
|
+
return t;
|
|
248
|
+
if (t.scope === 'all') {
|
|
249
|
+
await deps.setCaps({ totalCapTokens: cmd.tokens });
|
|
250
|
+
return `Daily token cap set to ${formatTokens(cmd.tokens)} for all agents together.`;
|
|
251
|
+
}
|
|
252
|
+
if (t.scope === 'team') {
|
|
253
|
+
await deps.setCaps({ teams: { [t.team.id]: cmd.tokens } });
|
|
254
|
+
return `Daily token cap for team ${t.team.name} set to ${formatTokens(cmd.tokens)} (all its members together).`;
|
|
255
|
+
}
|
|
256
|
+
await deps.setCaps({ agents: { [t.session]: cmd.tokens } });
|
|
257
|
+
return `Daily token cap for ${t.name} set to ${formatTokens(cmd.tokens)}.`;
|
|
136
258
|
}
|
|
137
259
|
case 'remove': {
|
|
138
260
|
if (!cmd.target) {
|
|
139
|
-
await deps.setCaps({
|
|
140
|
-
return 'Default daily
|
|
261
|
+
await deps.setCaps({ defaultAgentCapTokens: null });
|
|
262
|
+
return 'Default daily token cap removed (agents with their own cap keep it).';
|
|
141
263
|
}
|
|
142
|
-
const
|
|
143
|
-
if (typeof
|
|
144
|
-
return
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
case 'raise': {
|
|
149
|
-
if (cmd.target === C.TOTAL_TARGET) {
|
|
150
|
-
const cap = await deps.raiseToday(C.TOTAL_TARGET, cmd.usd);
|
|
151
|
-
return `Daily total spend cap raised to ${formatUsd(cap)} for today.`;
|
|
264
|
+
const t = resolve(cmd.target, cmd.team === true);
|
|
265
|
+
if (typeof t === 'string')
|
|
266
|
+
return t;
|
|
267
|
+
if (t.scope === 'all') {
|
|
268
|
+
await deps.setCaps({ totalCapTokens: null });
|
|
269
|
+
return 'Daily total token cap removed.';
|
|
152
270
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return
|
|
156
|
-
|
|
157
|
-
|
|
271
|
+
if (t.scope === 'team') {
|
|
272
|
+
await deps.setCaps({ teams: { [t.team.id]: null } });
|
|
273
|
+
return `Team ${t.team.name} has no daily token cap now.`;
|
|
274
|
+
}
|
|
275
|
+
await deps.setCaps({ agents: { [t.session]: null } });
|
|
276
|
+
return `${t.name} has no daily token cap now.`;
|
|
277
|
+
}
|
|
278
|
+
case 'boost': {
|
|
279
|
+
const t = resolve(cmd.target, true);
|
|
280
|
+
if (typeof t === 'string')
|
|
281
|
+
return t;
|
|
282
|
+
await deps.boost({ ...boostInput(t), extraTokens: cmd.tokens, by: 'orc-dm' });
|
|
283
|
+
return `Boosted ${label(t)} by +${formatTokens(cmd.tokens)} until midnight. Queued messages are being delivered.`;
|
|
284
|
+
}
|
|
285
|
+
case 'unlimited': {
|
|
286
|
+
const t = resolve(cmd.target, true);
|
|
287
|
+
if (typeof t === 'string')
|
|
288
|
+
return t;
|
|
289
|
+
await deps.boost({ ...boostInput(t), unlimited: true, by: 'orc-dm' });
|
|
290
|
+
return `No token cap for ${label(t)} until midnight. Queued messages are being delivered.`;
|
|
158
291
|
}
|
|
159
292
|
}
|
|
160
293
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spend-cap-command.js","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap-command.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spend-cap-command.js","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Token cap gate — the process-wide hook the delivery and wake paths ask
|
|
3
3
|
* "may this agent start a new turn?". Kept apart from the service so the
|
|
4
4
|
* hot paths (agent registration, the orc queue processor, the owner-message
|
|
5
5
|
* watchdog) import a tiny module with no dependencies of its own.
|
|
@@ -11,12 +11,15 @@
|
|
|
11
11
|
/** Why an agent may not start a new turn today. */
|
|
12
12
|
export interface SpendStop {
|
|
13
13
|
session: string;
|
|
14
|
-
/** `agent`: its own cap; `total`: the all-agents
|
|
15
|
-
scope: 'agent' | 'total';
|
|
16
|
-
/** The cap in force (
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
|
|
14
|
+
/** `agent`: its own cap; `team`: its team's cap; `total`: the all-agents cap */
|
|
15
|
+
scope: 'agent' | 'team' | 'total';
|
|
16
|
+
/** The cap in force (tokens, boosts included) */
|
|
17
|
+
capTokens: number;
|
|
18
|
+
/** Tokens used today against it */
|
|
19
|
+
usedTokens: number;
|
|
20
|
+
/** For a team stop: the team */
|
|
21
|
+
teamId?: string;
|
|
22
|
+
teamName?: string;
|
|
20
23
|
}
|
|
21
24
|
/** What the service exposes to the gate. */
|
|
22
25
|
export interface SpendCapGate {
|
|
@@ -47,14 +50,7 @@ export declare function spendCapStopOf(session: string): SpendStop | null;
|
|
|
47
50
|
*/
|
|
48
51
|
export declare function spendCapNameOf(session: string): string;
|
|
49
52
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* @param usd - Amount
|
|
53
|
-
* @returns e.g. `$5.00`
|
|
54
|
-
*/
|
|
55
|
-
export declare function formatUsd(usd: number): string;
|
|
56
|
-
/**
|
|
57
|
-
* The one-line reason, e.g. "Orc hit its daily spend cap ($5.00)".
|
|
53
|
+
* The one-line reason, e.g. "Orc hit its daily token cap (5M tokens)".
|
|
58
54
|
*
|
|
59
55
|
* @param stop - The stop
|
|
60
56
|
* @param name - Owner-facing name (default: looked up)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spend-cap.gate.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap.gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"spend-cap.gate.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap.gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,mDAAmD;AACnD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C,qDAAqD;IACrD,aAAa,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CACzC;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAMhE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,GAAE,MAAqC,GAAG,MAAM,CAQnG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Token cap gate — the process-wide hook the delivery and wake paths ask
|
|
3
3
|
* "may this agent start a new turn?". Kept apart from the service so the
|
|
4
4
|
* hot paths (agent registration, the orc queue processor, the owner-message
|
|
5
5
|
* watchdog) import a tiny module with no dependencies of its own.
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module services/spend/spend-cap.gate
|
|
10
10
|
*/
|
|
11
|
+
import { formatTokens } from '../usage/token-format.js';
|
|
11
12
|
let gate = null;
|
|
12
13
|
/**
|
|
13
14
|
* Install (or clear) the gate.
|
|
@@ -47,16 +48,7 @@ export function spendCapNameOf(session) {
|
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* @param usd - Amount
|
|
53
|
-
* @returns e.g. `$5.00`
|
|
54
|
-
*/
|
|
55
|
-
export function formatUsd(usd) {
|
|
56
|
-
return `$${(Math.round(usd * 100) / 100).toFixed(2)}`;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* The one-line reason, e.g. "Orc hit its daily spend cap ($5.00)".
|
|
51
|
+
* The one-line reason, e.g. "Orc hit its daily token cap (5M tokens)".
|
|
60
52
|
*
|
|
61
53
|
* @param stop - The stop
|
|
62
54
|
* @param name - Owner-facing name (default: looked up)
|
|
@@ -64,8 +56,11 @@ export function formatUsd(usd) {
|
|
|
64
56
|
*/
|
|
65
57
|
export function spendCapReason(stop, name = spendCapNameOf(stop.session)) {
|
|
66
58
|
if (stop.scope === 'total') {
|
|
67
|
-
return `${name} is stopped: all agents together hit the daily
|
|
59
|
+
return `${name} is stopped: all agents together hit the daily token cap (${formatTokens(stop.capTokens)})`;
|
|
60
|
+
}
|
|
61
|
+
if (stop.scope === 'team') {
|
|
62
|
+
return `${name} is stopped: team ${stop.teamName ?? stop.teamId ?? ''} hit its daily token cap (${formatTokens(stop.capTokens)})`;
|
|
68
63
|
}
|
|
69
|
-
return `${name} hit its daily
|
|
64
|
+
return `${name} hit its daily token cap (${formatTokens(stop.capTokens)})`;
|
|
70
65
|
}
|
|
71
66
|
//# sourceMappingURL=spend-cap.gate.js.map
|