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.
Files changed (141) hide show
  1. package/config/skills/agent/core/project-tickets/SKILL.md +3 -2
  2. package/config/skills/agent/core/project-tickets/execute.sh +4 -4
  3. package/config/skills/agent/core/project-tickets/execute.test.sh +2 -2
  4. package/dist/backend/backend/src/constants.d.ts +70 -12
  5. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  6. package/dist/backend/backend/src/constants.js +70 -12
  7. package/dist/backend/backend/src/constants.js.map +1 -1
  8. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +1 -1
  9. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +5 -1
  11. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
  12. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +1 -1
  13. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +1 -1
  14. package/dist/backend/backend/src/controllers/system/usage.controller.d.ts +46 -0
  15. package/dist/backend/backend/src/controllers/system/usage.controller.d.ts.map +1 -0
  16. package/dist/backend/backend/src/controllers/system/usage.controller.js +181 -0
  17. package/dist/backend/backend/src/controllers/system/usage.controller.js.map +1 -0
  18. package/dist/backend/backend/src/index.d.ts +7 -0
  19. package/dist/backend/backend/src/index.d.ts.map +1 -1
  20. package/dist/backend/backend/src/index.js +59 -4
  21. package/dist/backend/backend/src/index.js.map +1 -1
  22. package/dist/backend/backend/src/routes/modules/system.routes.js +3 -3
  23. package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
  24. package/dist/backend/backend/src/services/agent/agent-registration.service.js +7 -7
  25. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  26. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts +4 -2
  27. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  28. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +6 -1
  29. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  30. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +2 -2
  31. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +4 -2
  33. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  34. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.d.ts +130 -0
  35. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.d.ts.map +1 -0
  36. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.js +274 -0
  37. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.js.map +1 -0
  38. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.d.ts +152 -0
  39. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.d.ts.map +1 -0
  40. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.js +311 -0
  41. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.js.map +1 -0
  42. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +53 -1
  43. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +51 -3
  45. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +4 -4
  47. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +1 -1
  49. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
  50. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts +4 -3
  51. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js +7 -4
  53. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js.map +1 -1
  54. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +40 -9
  55. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +68 -20
  57. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
  58. package/dist/backend/backend/src/services/spend/spend-cap-command.d.ts +48 -18
  59. package/dist/backend/backend/src/services/spend/spend-cap-command.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/spend/spend-cap-command.js +195 -62
  61. package/dist/backend/backend/src/services/spend/spend-cap-command.js.map +1 -1
  62. package/dist/backend/backend/src/services/spend/spend-cap.gate.d.ts +11 -15
  63. package/dist/backend/backend/src/services/spend/spend-cap.gate.d.ts.map +1 -1
  64. package/dist/backend/backend/src/services/spend/spend-cap.gate.js +8 -13
  65. package/dist/backend/backend/src/services/spend/spend-cap.gate.js.map +1 -1
  66. package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts +179 -64
  67. package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/spend/spend-cap.service.js +406 -149
  69. package/dist/backend/backend/src/services/spend/spend-cap.service.js.map +1 -1
  70. package/dist/backend/backend/src/services/spend/spend-cap.store.d.ts +52 -11
  71. package/dist/backend/backend/src/services/spend/spend-cap.store.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/spend/spend-cap.store.js +67 -21
  73. package/dist/backend/backend/src/services/spend/spend-cap.store.js.map +1 -1
  74. package/dist/backend/backend/src/services/spend/spend-cap.wiring.d.ts +3 -1
  75. package/dist/backend/backend/src/services/spend/spend-cap.wiring.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/spend/spend-cap.wiring.js +21 -7
  77. package/dist/backend/backend/src/services/spend/spend-cap.wiring.js.map +1 -1
  78. package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts +57 -36
  79. package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/spend/spend-ledger.service.js +80 -55
  81. package/dist/backend/backend/src/services/spend/spend-ledger.service.js.map +1 -1
  82. package/dist/backend/backend/src/services/task-pool/work-item-usage.d.ts +10 -1
  83. package/dist/backend/backend/src/services/task-pool/work-item-usage.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/task-pool/work-item-usage.js +2 -0
  85. package/dist/backend/backend/src/services/task-pool/work-item-usage.js.map +1 -1
  86. package/dist/backend/backend/src/services/usage/token-format.d.ts +49 -0
  87. package/dist/backend/backend/src/services/usage/token-format.d.ts.map +1 -0
  88. package/dist/backend/backend/src/services/usage/token-format.js +81 -0
  89. package/dist/backend/backend/src/services/usage/token-format.js.map +1 -0
  90. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts +132 -0
  91. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts.map +1 -0
  92. package/dist/backend/backend/src/services/usage/usage-stats.service.js +226 -0
  93. package/dist/backend/backend/src/services/usage/usage-stats.service.js.map +1 -0
  94. package/dist/backend/backend/src/types/decision.types.d.ts +2 -2
  95. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +24 -7
  96. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  97. package/dist/backend/backend/src/types/ticket-autopilot.types.js +29 -13
  98. package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
  99. package/dist/backend/build-info.json +2 -2
  100. package/dist/cli/backend/src/constants.d.ts +70 -12
  101. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  102. package/dist/cli/backend/src/constants.js +70 -12
  103. package/dist/cli/backend/src/constants.js.map +1 -1
  104. package/dist/cli/backend/src/services/agent/agent-registration.service.js +7 -7
  105. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  106. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts +4 -2
  107. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  108. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +6 -1
  109. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  110. package/dist/cli/backend/src/services/messaging/queue-processor.service.js +2 -2
  111. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  112. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +4 -2
  113. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  114. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +53 -1
  115. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  116. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +51 -3
  117. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  118. package/dist/cli/backend/src/services/spend/spend-cap.gate.d.ts +11 -15
  119. package/dist/cli/backend/src/services/spend/spend-cap.gate.d.ts.map +1 -1
  120. package/dist/cli/backend/src/services/spend/spend-cap.gate.js +8 -13
  121. package/dist/cli/backend/src/services/spend/spend-cap.gate.js.map +1 -1
  122. package/dist/cli/backend/src/services/task-pool/work-item-usage.d.ts +10 -1
  123. package/dist/cli/backend/src/services/task-pool/work-item-usage.d.ts.map +1 -1
  124. package/dist/cli/backend/src/services/task-pool/work-item-usage.js +2 -0
  125. package/dist/cli/backend/src/services/task-pool/work-item-usage.js.map +1 -1
  126. package/dist/cli/backend/src/services/usage/token-format.d.ts +49 -0
  127. package/dist/cli/backend/src/services/usage/token-format.d.ts.map +1 -0
  128. package/dist/cli/backend/src/services/usage/token-format.js +81 -0
  129. package/dist/cli/backend/src/services/usage/token-format.js.map +1 -0
  130. package/dist/cli/backend/src/types/decision.types.d.ts +2 -2
  131. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +24 -7
  132. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  133. package/dist/cli/backend/src/types/ticket-autopilot.types.js +29 -13
  134. package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
  135. package/frontend/dist/assets/{index-15c2faf2.js → index-49f50b45.js} +276 -276
  136. package/frontend/dist/index.html +1 -1
  137. package/package.json +1 -1
  138. package/dist/backend/backend/src/controllers/system/spend.controller.d.ts +0 -32
  139. package/dist/backend/backend/src/controllers/system/spend.controller.d.ts.map +0 -1
  140. package/dist/backend/backend/src/controllers/system/spend.controller.js +0 -100
  141. package/dist/backend/backend/src/controllers/system/spend.controller.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"spend-cap.gate.js","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap.gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH,IAAI,IAAI,GAAwB,IAAI,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAyB;IACvD,IAAI,GAAG,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe,EAAE,OAAe,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;IACzF,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,GAAG,IAAI,mEAAmE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC7G,CAAC;IACD,OAAO,GAAG,IAAI,6BAA6B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"spend-cap.gate.js","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap.gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAwBxD,IAAI,IAAI,GAAwB,IAAI,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAyB;IACvD,IAAI,GAAG,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe,EAAE,OAAe,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;IACzF,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,GAAG,IAAI,6DAA6D,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IAC7G,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,qBAAqB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,6BAA6B,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IACpI,CAAC;IACD,OAAO,GAAG,IAAI,6BAA6B,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAC7E,CAAC"}
@@ -1,22 +1,24 @@
1
1
  /**
2
- * Per-agent daily spend cap with a hard stop.
2
+ * Daily token caps with a hard stop: per agent, per team and all agents
3
+ * together, plus temporary boosts.
3
4
  *
5
+ * - The unit is tokens (input incl. cached + output, see `eventTokens`).
4
6
  * - Caps are the owner's own limits (unlike the runtime fallback, which
5
7
  * reacts to a provider's usage limit). All are OFF until the owner sets
6
- * one: a default per-agent cap, per-agent overrides, and an optional
7
- * all-agents daily total.
8
+ * one: a default per-agent cap, per-agent overrides, per-team caps, and an
9
+ * optional all-agents total.
8
10
  * - At {@link SPEND_CAP_CONSTANTS.WARN_FRACTION} of a cap the owner gets ONE
9
11
  * heads-up.
10
12
  * - At 100% the agent is hard-stopped: {@link stopOf} answers the delivery
11
13
  * and wake gates, so no new turn starts (the current one may finish) and
12
- * messages stay queued. The owner gets ONE decision card: "Raise to $Y
13
- * today" / "Keep stopped".
14
- * - Local midnight resets everything; raises last for the day they were
15
- * made. When a stop lifts (midnight, raise, cap change) the queued
16
- * messages are released.
17
- *
18
- * Spend comes from {@link SpendLedger} (the shared token ledger and its one
19
- * cost computation).
14
+ * messages stay queued. The owner gets ONE decision card: "Boost +X
15
+ * today" / "Unlimited today" / "Keep stopped".
16
+ * - A boost covers an agent, a team (its members) or everyone. For every
17
+ * agent it covers, it adds `extraTokens` to EVERY cap checked for that
18
+ * agent (its own, its team's, the total), or lifts them all
19
+ * (`unlimited`). It ends at `until` — by default the next local midnight.
20
+ * - Local midnight resets the day; when a stop lifts (midnight, boost, cap
21
+ * change) the queued messages are released.
20
22
  *
21
23
  * specs/2026-10-02-spend-cap.md
22
24
  *
@@ -25,8 +27,8 @@
25
27
  import type { OwnerDecision } from '../../types/decision.types.js';
26
28
  import type { SystemAskInput } from '../decisions/decision.service.js';
27
29
  import { type SpendCapGate, type SpendStop } from './spend-cap.gate.js';
28
- import { type SpendLedger, type SpendSummary } from './spend-ledger.service.js';
29
- import { type SpendCapConfig, type SpendCapStoreLike } from './spend-cap.store.js';
30
+ import type { SpendLedger, SpendSummary } from './spend-ledger.service.js';
31
+ import { type SpendCapConfig, type SpendCapStoreLike, type UsageBoost } from './spend-cap.store.js';
30
32
  /** Minimal logger. */
31
33
  export interface SpendCapLogger {
32
34
  info(message: string, meta?: Record<string, unknown>): void;
@@ -37,10 +39,17 @@ export interface SpendCapDecisions {
37
39
  askSystem(input: SystemAskInput): Promise<OwnerDecision>;
38
40
  replyInThread(id: string, text: string): Promise<boolean>;
39
41
  }
42
+ /** A team, as caps need it. */
43
+ export interface CapTeam {
44
+ id: string;
45
+ name: string;
46
+ /** Member sessions */
47
+ members: string[];
48
+ }
40
49
  /** Collaborators. */
41
50
  export interface SpendCapServiceDeps {
42
51
  store: SpendCapStoreLike;
43
- ledger: Pick<SpendLedger, 'spentToday' | 'totalToday' | 'summarize' | 'invalidate'>;
52
+ ledger: Pick<SpendLedger, 'usedToday' | 'groupToday' | 'totalToday' | 'summarize' | 'invalidate'>;
44
53
  /** One line to the owner (Slack DM from this machine's orc bot); false/throw = not sent */
45
54
  notifyOwner: (text: string) => Promise<unknown>;
46
55
  /** Decision cards (null before they are wired: the stop is then a plain notice) */
@@ -49,21 +58,38 @@ export interface SpendCapServiceDeps {
49
58
  displayNameOf?: (session: string) => string;
50
59
  /** Sessions the owner configured (orc + team members), for the caps view */
51
60
  knownSessions?: () => Promise<string[]>;
61
+ /** Teams and their member sessions */
62
+ teams?: () => Promise<CapTeam[]>;
52
63
  /** Stops lifted: deliver what was queued for these sessions */
53
64
  onReleased?: (sessions: string[]) => Promise<void>;
54
65
  now?: () => Date;
55
66
  logger?: SpendCapLogger;
56
67
  }
57
- /** Body of `PUT /api/system/spend/caps`. */
68
+ /** Body of `PUT /api/system/usage/caps`. Amounts are tokens (a number, or text like "20M"). */
58
69
  export interface SpendCapPatch {
59
- /** Default per-agent cap (USD); null turns it off */
60
- defaultAgentCapUsd?: number | null;
61
- /** All-agents total cap (USD); null turns it off */
62
- totalCapUsd?: number | null;
63
- /** Session → cap (USD), `null` = no cap for this agent, `"default"` = drop the override */
64
- agents?: Record<string, number | null | 'default'>;
70
+ /** Default per-agent cap; null turns it off */
71
+ defaultAgentCapTokens?: unknown;
72
+ /** All-agents total cap; null turns it off */
73
+ totalCapTokens?: unknown;
74
+ /** Session → cap, `null` = no cap for this agent, `"default"` = drop the override */
75
+ agents?: Record<string, unknown>;
76
+ /** Team id → cap, `null` = drop the team's cap */
77
+ teams?: Record<string, unknown>;
78
+ }
79
+ /** Body of `POST /api/system/usage/boost`. */
80
+ export interface BoostInput {
81
+ scope: 'team' | 'agent' | 'all';
82
+ /** Team id / name, or agent session / name (not for `all`) */
83
+ id?: string;
84
+ /** Extra tokens today (number or "20M") */
85
+ extraTokens?: unknown;
86
+ /** No cap at all */
87
+ unlimited?: boolean;
88
+ /** ISO end time; default the next local midnight */
89
+ until?: string;
90
+ by?: string;
65
91
  }
66
- /** A rejected cap change. */
92
+ /** A rejected change. */
67
93
  export declare class SpendCapError extends Error {
68
94
  readonly status: number;
69
95
  /**
@@ -72,53 +98,83 @@ export declare class SpendCapError extends Error {
72
98
  */
73
99
  constructor(status: number, message: string);
74
100
  }
75
- /** One agent in the view. */
101
+ /** Where an agent's own cap comes from. */
102
+ export type CapSource = 'override' | 'default' | 'none' | 'exempt';
103
+ /** One agent in the caps view. */
76
104
  export interface SpendCapAgentView {
77
105
  session: string;
78
106
  name: string;
107
+ teamId?: string;
79
108
  runtimes: string[];
80
- todayUsd: number;
81
- windowUsd: number;
109
+ todayTokens: number;
110
+ windowTokens: number;
82
111
  daily: number[];
83
- /** Cap in force today (USD), null = none */
84
- capUsd: number | null;
85
- /** Where the cap comes from */
86
- capSource: 'override' | 'default' | 'raised' | 'none' | 'exempt';
87
- /** Stopped right now, and why */
112
+ /** Own cap in force today (boosts included), null = none */
113
+ capTokens: number | null;
114
+ /** Own cap before boosts */
115
+ baseCapTokens: number | null;
116
+ capSource: CapSource;
117
+ /** Boosts covering it */
118
+ boosted: boolean;
119
+ unlimited: boolean;
88
120
  stopped: boolean;
89
121
  stopReason?: string;
90
122
  }
91
- /** What `GET /api/system/spend` returns. */
123
+ /** One team in the caps view. */
124
+ export interface SpendCapTeamView {
125
+ teamId: string;
126
+ name: string;
127
+ members: string[];
128
+ todayTokens: number;
129
+ baseCapTokens: number | null;
130
+ /** Cap in force today (team / everyone boosts included), null = none */
131
+ capTokens: number | null;
132
+ extraTokens: number;
133
+ unlimited: boolean;
134
+ /** Boosts on this team (not counting everyone-boosts) */
135
+ boosts: UsageBoost[];
136
+ stopped: boolean;
137
+ }
138
+ /** What `GET /api/system/usage/caps` returns. */
92
139
  export interface SpendView extends Omit<SpendSummary, 'agents'> {
93
140
  agents: SpendCapAgentView[];
141
+ teams: SpendCapTeamView[];
94
142
  caps: SpendCapConfig;
95
- /** Raises in force today: target → USD */
96
- raisedToday: Record<string, number>;
97
- /** Total cap in force today (raise included), null = off */
98
- totalCapTodayUsd: number | null;
99
- /** Suggested default per-agent cap: last window's p90 agent-day, rounded up to whole dollars (null = no data) */
100
- suggestedAgentCapUsd: number | null;
143
+ /** Boosts in force */
144
+ boosts: UsageBoost[];
145
+ /** Total cap in force today (everyone boosts included), null = off */
146
+ totalCapTodayTokens: number | null;
147
+ /** Suggested default per-agent cap: the window's p90 agent-day, rounded up to a whole million (null = no data) */
148
+ suggestedAgentCapTokens: number | null;
101
149
  /** All agents together stopped by the total cap */
102
150
  totalStopped: boolean;
103
151
  }
104
152
  /**
105
- * The "Raise to $Y today" amount: the cap times RAISE_FACTOR, rounded up to
106
- * whole dollars, and always above what was already spent.
153
+ * Round up to a whole million (at least 1M).
107
154
  *
108
- * @param capUsd - Cap in force
109
- * @param spentUsd - Spent today
110
- * @returns USD
155
+ * @param tokens - Tokens
156
+ * @returns Rounded tokens
111
157
  */
112
- export declare function suggestedRaise(capUsd: number, spentUsd: number): number;
158
+ export declare function roundUpMillions(tokens: number): number;
113
159
  /**
114
- * Read the amount out of a "Raise to $Y today" option label.
160
+ * The "Boost +X today" amount on a cap card: the cap times BOOST_FACTOR,
161
+ * rounded up to a whole million.
162
+ *
163
+ * @param capTokens - Cap in force
164
+ * @returns Tokens
165
+ */
166
+ export declare function suggestedBoost(capTokens: number): number;
167
+ /**
168
+ * Read the amount out of a "Boost +X tokens today" option label.
115
169
  *
116
170
  * @param label - Option label
117
- * @returns USD, or null when the label is not a raise
171
+ * @returns Tokens, `unlimited`, or null when the label is not a boost
118
172
  */
119
- export declare function raiseAmountOf(label: string | undefined): number | null;
173
+ export declare function boostOfLabel(label: string | undefined): number | 'unlimited' | null;
174
+ /** Team target key. */
175
+ export declare function teamTarget(teamId: string): string;
120
176
  /**
121
- * Per-agent daily spend cap service.
177
+ * Daily token cap service.
122
178
  */
123
179
  export declare class SpendCapService implements SpendCapGate {
124
180
  private readonly deps;
@@ -128,9 +184,11 @@ export declare class SpendCapService implements SpendCapGate {
128
184
  private timer;
129
185
  /** Sessions stopped at the last evaluation (to release them when the stop lifts) */
130
186
  private lastStopped;
131
- /** Evaluation passes run one after another */
132
187
  private chain;
133
188
  private queuedPass;
189
+ /** Team index, refreshed on every evaluation (the gate is synchronous) */
190
+ private teamList;
191
+ private teamsOfSession;
134
192
  /**
135
193
  * @param deps - Collaborators
136
194
  */
@@ -139,6 +197,8 @@ export declare class SpendCapService implements SpendCapGate {
139
197
  start(): void;
140
198
  /** Stop the tick. */
141
199
  stop(): void;
200
+ /** Re-read the team list now (tests; the tick does it too). */
201
+ refreshTeams(): Promise<void>;
142
202
  /** @returns The owner's caps (a copy) */
143
203
  getConfig(): SpendCapConfig;
144
204
  /**
@@ -149,18 +209,64 @@ export declare class SpendCapService implements SpendCapGate {
149
209
  * @throws SpendCapError on a bad value
150
210
  */
151
211
  setCaps(patch: SpendCapPatch): Promise<SpendCapConfig>;
212
+ /** @returns Boosts in force (expired ones are dropped) */
213
+ activeBoosts(): UsageBoost[];
214
+ /**
215
+ * Add a temporary boost.
216
+ *
217
+ * @param input - Scope, target, extra tokens or unlimited, optional end
218
+ * @returns The boost
219
+ * @throws SpendCapError on a bad request
220
+ */
221
+ boost(input: BoostInput): Promise<UsageBoost>;
222
+ /**
223
+ * End a boost early.
224
+ *
225
+ * @param id - Boost id
226
+ * @returns True when it existed
227
+ */
228
+ removeBoost(id: string): Promise<boolean>;
229
+ /**
230
+ * Owner-facing description of a boost target.
231
+ *
232
+ * @param target - Boost target
233
+ * @returns e.g. `everyone`, `team CE`, `Ella`
234
+ */
235
+ describeTarget(target: string): string;
152
236
  /**
153
- * Lift a cap for today only.
237
+ * Extra tokens / unlimited a boost set gives for one target set.
154
238
  *
155
- * @param target - Agent session, or `*` for the all-agents total
156
- * @param usd - New cap for today (must be above today's spend)
157
- * @returns The new cap for today
158
- * @throws SpendCapError when the amount is not above today's spend
239
+ * @param covers - Which boost targets apply
240
+ * @returns Sum of extras and whether any is unlimited
159
241
  */
160
- raiseToday(target: string, usd: unknown): Promise<number>;
242
+ private boostFor;
243
+ /** Boosts covering an agent: its own, its teams', everyone's. */
244
+ private boostForSession;
245
+ /**
246
+ * Boosts covering a team (team and everyone boosts) — what the ticket
247
+ * autopilot budget of the team's projects honours.
248
+ *
249
+ * @param teamId - Team id
250
+ * @returns Extra tokens and unlimited
251
+ */
252
+ boostForTeam(teamId: string): {
253
+ extra: number;
254
+ unlimited: boolean;
255
+ };
256
+ /**
257
+ * Boosts covering any of several teams, each boost counted once (a
258
+ * project worked on by two teams).
259
+ *
260
+ * @param teamIds - Team ids
261
+ * @returns Extra tokens and unlimited
262
+ */
263
+ boostForTeams(teamIds: readonly string[]): {
264
+ extra: number;
265
+ unlimited: boolean;
266
+ };
161
267
  /**
162
268
  * The stop in force for a session (the delivery / wake gate). Synchronous
163
- * and live: it reads today's spend now, not at the last tick.
269
+ * and live: it reads today's usage now, not at the last tick.
164
270
  *
165
271
  * @param session - Agent session
166
272
  * @returns Stop, or null when the agent may run
@@ -174,26 +280,27 @@ export declare class SpendCapService implements SpendCapGate {
174
280
  */
175
281
  displayNameOf(session: string): string;
176
282
  /**
177
- * Cap in force today for a target, and where it comes from.
283
+ * An agent's own cap before boosts, and where it comes from.
178
284
  *
179
- * @param target - Agent session, or `*`
285
+ * @param session - Agent session
180
286
  * @returns Cap (null = none) and source
181
287
  */
182
- capOf(target: string): {
183
- capUsd: number | null;
184
- source: SpendCapAgentView['capSource'];
288
+ ownCapOf(session: string): {
289
+ capTokens: number | null;
290
+ source: CapSource;
185
291
  };
186
292
  /**
187
- * Spend plus caps for the API / Settings panel.
293
+ * Usage plus caps for the API / Settings panel.
188
294
  *
189
295
  * @param days - Window
190
296
  * @returns View
191
297
  */
192
298
  view(days?: number): Promise<SpendView>;
193
299
  /**
194
- * One enforcement pass: day roll, 80% notices, stop announcements (one
195
- * card per stop), and releasing agents whose stop lifted. Passes run
196
- * one at a time; a call during a pass gets another pass after it.
300
+ * One enforcement pass: day roll, boost expiry, 80% notices, stop
301
+ * announcements (one card per stop), and releasing agents whose stop
302
+ * lifted. Passes run one at a time; a call during a pass gets another
303
+ * pass after it.
197
304
  */
198
305
  evaluate(): Promise<void>;
199
306
  /**
@@ -204,12 +311,20 @@ export declare class SpendCapService implements SpendCapGate {
204
311
  */
205
312
  onSettled(d: OwnerDecision): Promise<null>;
206
313
  private evaluateOnce;
314
+ /**
315
+ * The cap in force for a cap target, with the boosts that cover the
316
+ * target itself (for notices and cards).
317
+ */
318
+ private capForTarget;
207
319
  private checkThresholds;
208
320
  private announceStop;
209
321
  private anyCap;
210
322
  private computeStop;
211
323
  private stopKey;
212
324
  private scheduleEvaluate;
325
+ private activeBoostsRaw;
326
+ private pruneBoosts;
327
+ private resolveBoostTarget;
213
328
  /** Reset today's bookkeeping when the local day changed. */
214
329
  private rollDay;
215
330
  private nextMidnight;
@@ -1 +1 @@
1
- {"version":3,"file":"spend-cap.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spend-cap.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/spend/spend-cap.service.ts"],"names":[],"mappings":"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"}