crewly 1.20.187 → 1.20.189

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 (151) 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/scripts/repair-orphan-superseded-decisions.d.ts +56 -0
  25. package/dist/backend/backend/src/scripts/repair-orphan-superseded-decisions.d.ts.map +1 -0
  26. package/dist/backend/backend/src/scripts/repair-orphan-superseded-decisions.js +114 -0
  27. package/dist/backend/backend/src/scripts/repair-orphan-superseded-decisions.js.map +1 -0
  28. package/dist/backend/backend/src/services/agent/agent-registration.service.js +7 -7
  29. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  30. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/memory/project-memory.service.js +21 -10
  32. package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -1
  33. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts +4 -2
  34. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  35. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +6 -1
  36. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  37. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +2 -2
  38. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +4 -2
  40. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  41. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.d.ts +130 -0
  42. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.d.ts.map +1 -0
  43. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.js +274 -0
  44. package/dist/backend/backend/src/services/monitoring/antigravity-usage-sync.service.js.map +1 -0
  45. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.d.ts +152 -0
  46. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.d.ts.map +1 -0
  47. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.js +311 -0
  48. package/dist/backend/backend/src/services/monitoring/codex-rollout-sync.service.js.map +1 -0
  49. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +53 -1
  50. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +51 -3
  52. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  53. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +4 -4
  54. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +1 -1
  56. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
  57. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts +4 -3
  58. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js +7 -4
  60. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js.map +1 -1
  61. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +40 -9
  62. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +68 -20
  64. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
  65. package/dist/backend/backend/src/services/spend/spend-cap-command.d.ts +48 -18
  66. package/dist/backend/backend/src/services/spend/spend-cap-command.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/spend/spend-cap-command.js +195 -62
  68. package/dist/backend/backend/src/services/spend/spend-cap-command.js.map +1 -1
  69. package/dist/backend/backend/src/services/spend/spend-cap.gate.d.ts +11 -15
  70. package/dist/backend/backend/src/services/spend/spend-cap.gate.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/spend/spend-cap.gate.js +8 -13
  72. package/dist/backend/backend/src/services/spend/spend-cap.gate.js.map +1 -1
  73. package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts +179 -64
  74. package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/spend/spend-cap.service.js +406 -149
  76. package/dist/backend/backend/src/services/spend/spend-cap.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/spend/spend-cap.store.d.ts +52 -11
  78. package/dist/backend/backend/src/services/spend/spend-cap.store.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/spend/spend-cap.store.js +67 -21
  80. package/dist/backend/backend/src/services/spend/spend-cap.store.js.map +1 -1
  81. package/dist/backend/backend/src/services/spend/spend-cap.wiring.d.ts +3 -1
  82. package/dist/backend/backend/src/services/spend/spend-cap.wiring.d.ts.map +1 -1
  83. package/dist/backend/backend/src/services/spend/spend-cap.wiring.js +21 -7
  84. package/dist/backend/backend/src/services/spend/spend-cap.wiring.js.map +1 -1
  85. package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts +57 -36
  86. package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts.map +1 -1
  87. package/dist/backend/backend/src/services/spend/spend-ledger.service.js +80 -55
  88. package/dist/backend/backend/src/services/spend/spend-ledger.service.js.map +1 -1
  89. package/dist/backend/backend/src/services/task-pool/work-item-usage.d.ts +10 -1
  90. package/dist/backend/backend/src/services/task-pool/work-item-usage.d.ts.map +1 -1
  91. package/dist/backend/backend/src/services/task-pool/work-item-usage.js +2 -0
  92. package/dist/backend/backend/src/services/task-pool/work-item-usage.js.map +1 -1
  93. package/dist/backend/backend/src/services/usage/token-format.d.ts +49 -0
  94. package/dist/backend/backend/src/services/usage/token-format.d.ts.map +1 -0
  95. package/dist/backend/backend/src/services/usage/token-format.js +81 -0
  96. package/dist/backend/backend/src/services/usage/token-format.js.map +1 -0
  97. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts +132 -0
  98. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts.map +1 -0
  99. package/dist/backend/backend/src/services/usage/usage-stats.service.js +226 -0
  100. package/dist/backend/backend/src/services/usage/usage-stats.service.js.map +1 -0
  101. package/dist/backend/backend/src/types/decision.types.d.ts +2 -2
  102. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +24 -7
  103. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  104. package/dist/backend/backend/src/types/ticket-autopilot.types.js +29 -13
  105. package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
  106. package/dist/backend/build-info.json +2 -2
  107. package/dist/cli/backend/src/constants.d.ts +70 -12
  108. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  109. package/dist/cli/backend/src/constants.js +70 -12
  110. package/dist/cli/backend/src/constants.js.map +1 -1
  111. package/dist/cli/backend/src/services/agent/agent-registration.service.js +7 -7
  112. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  113. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  114. package/dist/cli/backend/src/services/memory/project-memory.service.js +21 -10
  115. package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -1
  116. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts +4 -2
  117. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  118. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +6 -1
  119. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  120. package/dist/cli/backend/src/services/messaging/queue-processor.service.js +2 -2
  121. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  122. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +4 -2
  123. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  124. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +53 -1
  125. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  126. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +51 -3
  127. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  128. package/dist/cli/backend/src/services/spend/spend-cap.gate.d.ts +11 -15
  129. package/dist/cli/backend/src/services/spend/spend-cap.gate.d.ts.map +1 -1
  130. package/dist/cli/backend/src/services/spend/spend-cap.gate.js +8 -13
  131. package/dist/cli/backend/src/services/spend/spend-cap.gate.js.map +1 -1
  132. package/dist/cli/backend/src/services/task-pool/work-item-usage.d.ts +10 -1
  133. package/dist/cli/backend/src/services/task-pool/work-item-usage.d.ts.map +1 -1
  134. package/dist/cli/backend/src/services/task-pool/work-item-usage.js +2 -0
  135. package/dist/cli/backend/src/services/task-pool/work-item-usage.js.map +1 -1
  136. package/dist/cli/backend/src/services/usage/token-format.d.ts +49 -0
  137. package/dist/cli/backend/src/services/usage/token-format.d.ts.map +1 -0
  138. package/dist/cli/backend/src/services/usage/token-format.js +81 -0
  139. package/dist/cli/backend/src/services/usage/token-format.js.map +1 -0
  140. package/dist/cli/backend/src/types/decision.types.d.ts +2 -2
  141. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +24 -7
  142. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  143. package/dist/cli/backend/src/types/ticket-autopilot.types.js +29 -13
  144. package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
  145. package/frontend/dist/assets/{index-15c2faf2.js → index-49f50b45.js} +276 -276
  146. package/frontend/dist/index.html +1 -1
  147. package/package.json +1 -1
  148. package/dist/backend/backend/src/controllers/system/spend.controller.d.ts +0 -32
  149. package/dist/backend/backend/src/controllers/system/spend.controller.d.ts.map +0 -1
  150. package/dist/backend/backend/src/controllers/system/spend.controller.js +0 -100
  151. package/dist/backend/backend/src/controllers/system/spend.controller.js.map +0 -1
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Token usage stats, daily token caps and temporary boosts
3
+ * (Settings → System → Usage).
4
+ *
5
+ * - `GET /api/system/usage?days=7&groupBy=agent|team|project|workItem|runtime|day`
6
+ * — tokens aggregated over the last N local days (groupBy may be a comma list)
7
+ * - `GET /api/system/usage/caps?days=7` — caps, boosts and today's usage per agent / team
8
+ * - `PUT /api/system/usage/caps` — change caps (owner only)
9
+ * `{ defaultAgentCapTokens?, totalCapTokens?, agents?: { "<session>": n|null|"default" }, teams?: { "<teamId>": n|null } }`
10
+ * - `POST /api/system/usage/boost` — temporary boost (owner only)
11
+ * `{ scope: "team"|"agent"|"all", id?, extraTokens? | unlimited: true, until? }`
12
+ * - `DELETE /api/system/usage/boost/:id` — end a boost early (owner only)
13
+ *
14
+ * Kept for older clients: `GET /api/system/spend` (= usage/caps),
15
+ * `GET|PUT /api/system/spend/caps`. `POST /api/system/spend/raise` answers
16
+ * 410 — raises are boosts now.
17
+ *
18
+ * Owner only: a request from an agent session gets 403 — an agent never
19
+ * raises its own budget.
20
+ *
21
+ * specs/2026-10-02-spend-cap.md
22
+ *
23
+ * @module controllers/system/usage.controller
24
+ */
25
+ import { ensureOwnerCaller } from './system-control.controller.js';
26
+ import { getSpendCapService, SpendCapError } from '../../services/spend/spend-cap.service.js';
27
+ import { SPEND_CAP_CONSTANTS } from '../../constants.js';
28
+ import { parseGroupBy, UsageStatsService } from '../../services/usage/usage-stats.service.js';
29
+ import { TokenUsageService } from '../../services/monitoring/token-usage.service.js';
30
+ import { StorageService } from '../../services/core/storage.service.js';
31
+ import { TaskPoolService } from '../../services/task-pool/task-pool.service.js';
32
+ const NOT_READY = 'Usage tracking is not ready yet — Crewly is still starting.';
33
+ let defaultStats = null;
34
+ /**
35
+ * The backend's stats service, built from the process singletons.
36
+ *
37
+ * @returns Service
38
+ */
39
+ export function getUsageStatsService() {
40
+ if (!defaultStats) {
41
+ defaultStats = new UsageStatsService({
42
+ ledger: TokenUsageService.getInstance(),
43
+ teams: async () => (await StorageService.getInstance().getTeams()).map((t) => ({
44
+ id: t.id,
45
+ name: t.name,
46
+ projectIds: t.projectIds ?? [],
47
+ members: (t.members ?? []).map((m) => ({ session: m.sessionName, name: m.name })),
48
+ })),
49
+ projects: async () => (await StorageService.getInstance().getProjects()).map((p) => ({ id: p.id, name: p.name })),
50
+ workItems: async () => TaskPoolService.getInstance().getAllItems(),
51
+ });
52
+ }
53
+ return defaultStats;
54
+ }
55
+ /**
56
+ * Send an error.
57
+ *
58
+ * @param res - Response
59
+ * @param err - Error
60
+ */
61
+ function fail(res, err) {
62
+ const status = err instanceof SpendCapError ? err.status : 500;
63
+ res.status(status).json({ success: false, error: err instanceof Error ? err.message : String(err) });
64
+ }
65
+ /**
66
+ * Days query value.
67
+ *
68
+ * @param req - Request
69
+ * @returns Days
70
+ */
71
+ function daysOf(req) {
72
+ const raw = Number(req.query.days ?? SPEND_CAP_CONSTANTS.DEFAULT_DAYS);
73
+ return Number.isFinite(raw) ? raw : SPEND_CAP_CONSTANTS.DEFAULT_DAYS;
74
+ }
75
+ /**
76
+ * Register the routes.
77
+ *
78
+ * @param router - The /api router
79
+ * @param deps - Dependencies (default: the backend's)
80
+ */
81
+ export function registerUsageRoutes(router, deps = { caps: getSpendCapService, stats: getUsageStatsService }) {
82
+ router.get('/system/usage', async (req, res) => {
83
+ const stats = deps.stats();
84
+ if (!stats) {
85
+ res.status(503).json({ success: false, error: NOT_READY });
86
+ return;
87
+ }
88
+ try {
89
+ res.json({ success: true, data: await stats.query(daysOf(req), parseGroupBy(req.query.groupBy)) });
90
+ }
91
+ catch (err) {
92
+ fail(res, err);
93
+ }
94
+ });
95
+ const capsView = async (req, res) => {
96
+ const caps = deps.caps();
97
+ if (!caps) {
98
+ res.status(503).json({ success: false, error: NOT_READY });
99
+ return;
100
+ }
101
+ try {
102
+ res.json({ success: true, data: await caps.view(daysOf(req)) });
103
+ }
104
+ catch (err) {
105
+ fail(res, err);
106
+ }
107
+ };
108
+ router.get('/system/usage/caps', capsView);
109
+ router.get('/system/spend', capsView);
110
+ router.get('/system/spend/caps', (_req, res) => {
111
+ const caps = deps.caps();
112
+ if (!caps) {
113
+ res.status(503).json({ success: false, error: NOT_READY });
114
+ return;
115
+ }
116
+ res.json({ success: true, data: caps.getConfig() });
117
+ });
118
+ const setCaps = async (req, res) => {
119
+ if (!ensureOwnerCaller(req, res, 'token cap change'))
120
+ return;
121
+ const caps = deps.caps();
122
+ if (!caps) {
123
+ res.status(503).json({ success: false, error: NOT_READY });
124
+ return;
125
+ }
126
+ try {
127
+ res.json({ success: true, data: await caps.setCaps(req.body ?? {}) });
128
+ }
129
+ catch (err) {
130
+ fail(res, err);
131
+ }
132
+ };
133
+ router.put('/system/usage/caps', setCaps);
134
+ router.put('/system/spend/caps', setCaps);
135
+ router.post('/system/usage/boost', async (req, res) => {
136
+ if (!ensureOwnerCaller(req, res, 'usage boost'))
137
+ return;
138
+ const caps = deps.caps();
139
+ if (!caps) {
140
+ res.status(503).json({ success: false, error: NOT_READY });
141
+ return;
142
+ }
143
+ const b = (req.body ?? {});
144
+ try {
145
+ const boost = await caps.boost({
146
+ scope: b.scope,
147
+ id: typeof b.id === 'string' ? b.id : undefined,
148
+ extraTokens: b.extraTokens,
149
+ unlimited: b.unlimited === true,
150
+ until: typeof b.until === 'string' ? b.until : undefined,
151
+ by: 'owner',
152
+ });
153
+ res.json({ success: true, data: boost });
154
+ }
155
+ catch (err) {
156
+ fail(res, err);
157
+ }
158
+ });
159
+ router.delete('/system/usage/boost/:id', async (req, res) => {
160
+ if (!ensureOwnerCaller(req, res, 'usage boost removal'))
161
+ return;
162
+ const caps = deps.caps();
163
+ if (!caps) {
164
+ res.status(503).json({ success: false, error: NOT_READY });
165
+ return;
166
+ }
167
+ try {
168
+ const removed = await caps.removeBoost(req.params.id);
169
+ res.status(removed ? 200 : 404).json(removed ? { success: true, data: { id: req.params.id } } : { success: false, error: 'No such boost' });
170
+ }
171
+ catch (err) {
172
+ fail(res, err);
173
+ }
174
+ });
175
+ router.post('/system/spend/raise', (req, res) => {
176
+ if (!ensureOwnerCaller(req, res, 'spend cap raise'))
177
+ return;
178
+ res.status(410).json({ success: false, error: 'Caps are in tokens now; raise one for today with POST /api/system/usage/boost { scope, id, extraTokens | unlimited }' });
179
+ });
180
+ }
181
+ //# sourceMappingURL=usage.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/system/usage.controller.ts"],"names":[],"mappings":"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"}
@@ -246,6 +246,13 @@ export declare class CrewlyServer {
246
246
  /**
247
247
  * Start decision cards: the service, its Slack listeners and its deadline tick.
248
248
  */
249
+ /**
250
+ * Record Codex (rollout files) and Antigravity (conversation databases)
251
+ * usage in the shared token ledger, attributed to Crewly sessions.
252
+ *
253
+ * @param tokenUsage - The ledger
254
+ */
255
+ private startRuntimeUsageSyncs;
249
256
  private startDecisionCards;
250
257
  private startOwnerMessageWatchdog;
251
258
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
@@ -64,7 +64,7 @@ import { getSlackAutoWorkingService } from './services/slack/slack-auto-working.
64
64
  import { getSlackAgentDmService } from './services/slack/slack-agent-dm.service.js';
65
65
  import { sendBootAnnouncement, isFirstBoot, markBooted } from './services/boot/boot-announce.service.js';
66
66
  import { SubAgentMessageQueue } from './services/messaging/sub-agent-message-queue.service.js';
67
- import { SUB_AGENT_QUEUE_CONSTANTS, CHAT_CONTEXT_CONSTANTS, SAFE_RESTART, AUTO_UPDATE_CONSTANTS, PROCESS_EXIT_CODES, CLAUDE_STARTUP_CONSTANTS, WEB_CONSTANTS, TICKET_CONSTANTS, UNASSIGNED_ROUTE_CONSTANTS, CLOUD_TALK_CONSTANTS, STANDING_ANSWERS_CONSTANTS, TICKET_AUTOPILOT_CONSTANTS, WORK_ITEM_DESTINATION_CONSTANTS } from './constants.js';
67
+ import { SUB_AGENT_QUEUE_CONSTANTS, CHAT_CONTEXT_CONSTANTS, SAFE_RESTART, AUTO_UPDATE_CONSTANTS, PROCESS_EXIT_CODES, CLAUDE_STARTUP_CONSTANTS, WEB_CONSTANTS, TICKET_CONSTANTS, UNASSIGNED_ROUTE_CONSTANTS, CLOUD_TALK_CONSTANTS, STANDING_ANSWERS_CONSTANTS, TICKET_AUTOPILOT_CONSTANTS, WORK_ITEM_DESTINATION_CONSTANTS, CODEX_USAGE_SYNC_CONSTANTS, ANTIGRAVITY_USAGE_SYNC_CONSTANTS } from './constants.js';
68
68
  import { PtyActivityTrackerService } from './services/agent/pty-activity-tracker.service.js';
69
69
  import { InFlightTurnTracker } from './services/restart/in-flight-turn-tracker.service.js';
70
70
  import { TicketIntakeService, setTicketIntakeService, resolveTicketIdForSession, } from './services/v3/ticket-intake.service.js';
@@ -1977,7 +1977,7 @@ export class CrewlyServer {
1977
1977
  error: error instanceof Error ? error.message : String(error),
1978
1978
  });
1979
1979
  }
1980
- // Per-agent daily spend cap with a hard stop (specs/2026-10-02-spend-cap.md).
1980
+ // Daily token caps (agent / team / total) + boosts, hard stop (specs/2026-10-02-spend-cap.md).
1981
1981
  // Caps are off until the owner sets one.
1982
1982
  try {
1983
1983
  const { startSpendCaps } = await import('./services/spend/spend-cap.wiring.js');
@@ -1992,10 +1992,10 @@ export class CrewlyServer {
1992
1992
  },
1993
1993
  logger: LoggerService.getInstance().createComponentLogger('SpendCap'),
1994
1994
  });
1995
- this.logger.info('Spend caps wired');
1995
+ this.logger.info('Token caps wired');
1996
1996
  }
1997
1997
  catch (error) {
1998
- this.logger.warn('Failed to wire spend caps (non-critical)', {
1998
+ this.logger.warn('Failed to wire token caps (non-critical)', {
1999
1999
  error: error instanceof Error ? error.message : String(error),
2000
2000
  });
2001
2001
  }
@@ -2987,6 +2987,9 @@ export class CrewlyServer {
2987
2987
  });
2988
2988
  TicketAutopilotService.getInstance()?.stop();
2989
2989
  TicketAutopilotService.setInstance(autopilot);
2990
+ // Budgets are tokens now (specs/2026-10-02-spend-cap.md): convert
2991
+ // any pre-token USD budget once, logged per project.
2992
+ await autopilot.migrateUsdBudgets().catch((err) => this.logger.warn('Ticket autopilot USD→token budget migration failed (non-fatal)', { error: err instanceof Error ? err.message : String(err) }));
2990
2993
  autopilot.start();
2991
2994
  this.logger.info('Ticket autopilot started (acts only on projects that switched it on)');
2992
2995
  }
@@ -3118,6 +3121,9 @@ export class CrewlyServer {
3118
3121
  }
3119
3122
  });
3120
3123
  await transcriptSync.start();
3124
+ // Codex and Antigravity usage into the same ledger
3125
+ // (specs/2026-10-02-spend-cap.md §Sources).
3126
+ await this.startRuntimeUsageSyncs(tokenUsageService);
3121
3127
  this.logger.info('Token usage tracking initialized');
3122
3128
  }
3123
3129
  catch (tokenErr) {
@@ -4701,6 +4707,55 @@ export class CrewlyServer {
4701
4707
  /**
4702
4708
  * Start decision cards: the service, its Slack listeners and its deadline tick.
4703
4709
  */
4710
+ /**
4711
+ * Record Codex (rollout files) and Antigravity (conversation databases)
4712
+ * usage in the shared token ledger, attributed to Crewly sessions.
4713
+ *
4714
+ * @param tokenUsage - The ledger
4715
+ */
4716
+ async startRuntimeUsageSyncs(tokenUsage) {
4717
+ const crewlyHome = this.config.crewlyHome;
4718
+ const sessions = () => getSessionStatePersistence().getRegisteredSessionsMap();
4719
+ try {
4720
+ const { CodexRolloutSyncService } = await import('./services/monitoring/codex-rollout-sync.service.js');
4721
+ const { defaultCodexHome } = await import('./services/agent/runtime-session-recovery.js');
4722
+ const codex = new CodexRolloutSyncService({
4723
+ codexHome: defaultCodexHome(),
4724
+ cursorFile: path.join(crewlyHome, CODEX_USAGE_SYNC_CONSTANTS.CURSOR_FILE),
4725
+ sessions,
4726
+ record: (session, e) => tokenUsage.recordUsage(session, session, e.input, e.output, e.model, undefined, {
4727
+ cachedInput: e.cachedInput,
4728
+ timestamp: e.timestamp,
4729
+ runtime: RUNTIME_TYPES.CODEX_CLI,
4730
+ }),
4731
+ logger: LoggerService.getInstance().createComponentLogger('CodexUsageSync'),
4732
+ });
4733
+ await codex.start();
4734
+ }
4735
+ catch (err) {
4736
+ this.logger.warn('Codex usage sync not started (non-fatal)', { error: err instanceof Error ? err.message : String(err) });
4737
+ }
4738
+ try {
4739
+ const { AntigravityUsageSyncService, sqliteStepReader } = await import('./services/monitoring/antigravity-usage-sync.service.js');
4740
+ const { getAntigravityConfigDir } = await import('./utils/antigravity-settings.utils.js');
4741
+ const { createBareModuleRequire } = await import('./utils/node-require.utils.js');
4742
+ const agy = new AntigravityUsageSyncService({
4743
+ configDir: getAntigravityConfigDir(),
4744
+ cursorFile: path.join(crewlyHome, ANTIGRAVITY_USAGE_SYNC_CONSTANTS.CURSOR_FILE),
4745
+ sessions,
4746
+ readSteps: sqliteStepReader(createBareModuleRequire(typeof require === 'function' ? require : null)),
4747
+ record: (session, e) => tokenUsage.recordUsage(session, session, e.input, e.output, e.model, undefined, {
4748
+ timestamp: e.timestamp,
4749
+ runtime: RUNTIME_TYPES.ANTIGRAVITY_CLI,
4750
+ }),
4751
+ logger: LoggerService.getInstance().createComponentLogger('AntigravityUsageSync'),
4752
+ });
4753
+ await agy.start();
4754
+ }
4755
+ catch (err) {
4756
+ this.logger.warn('Antigravity usage sync not started (non-fatal)', { error: err instanceof Error ? err.message : String(err) });
4757
+ }
4758
+ }
4704
4759
  async startDecisionCards() {
4705
4760
  try {
4706
4761
  const { createDecisionService, attachDecisionSlackListeners, attachSkipAllCommand } = await import('./services/decisions/decision.wiring.js');