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
@@ -13,9 +13,17 @@ export interface TicketAutopilotSettings {
13
13
  /** Session that triages; absent = the lead of the project's team */
14
14
  driver?: string;
15
15
  /**
16
- * Daily spend (USD) of the project's team agents since local midnight at
17
- * which the autopilot pauses for the rest of the day. Absent = the default
18
- * ({@link TICKET_AUTOPILOT_CONSTANTS.DEFAULT_DAILY_BUDGET_USD}).
16
+ * Daily tokens (input incl. cached + output) of the project's team agents
17
+ * since local midnight at which the autopilot pauses for the rest of the
18
+ * day. Absent = the default
19
+ * ({@link TICKET_AUTOPILOT_CONSTANTS.DEFAULT_DAILY_BUDGET_TOKENS}). A usage
20
+ * boost on the project's teams raises it for the day.
21
+ */
22
+ dailyBudgetTokens?: number;
23
+ /**
24
+ * Pre-token budget in USD. Read only to migrate it: converted with
25
+ * {@link USAGE_CONSTANTS.TOKENS_PER_USD} (see {@link legacyBudgetTokens}).
26
+ * @deprecated
19
27
  */
20
28
  dailyBudgetUsd?: number;
21
29
  /** In-progress tickets one member may hold at a time (default 1) */
@@ -26,7 +34,7 @@ export interface ResolvedTicketAutopilotSettings {
26
34
  enabled: boolean;
27
35
  /** The configured driver, or null (= the project team's lead) */
28
36
  driver: string | null;
29
- dailyBudgetUsd: number;
37
+ dailyBudgetTokens: number;
30
38
  maxInFlightPerMember: number;
31
39
  }
32
40
  /** A change request for the settings (API / skill body). */
@@ -34,7 +42,9 @@ export interface TicketAutopilotSettingsInput {
34
42
  enabled?: unknown;
35
43
  /** A session name; `null` or `''` resets to the team lead */
36
44
  driver?: unknown;
37
- /** A positive number; `null` resets to the default */
45
+ /** Tokens: a positive number or text like "20M"; `null` resets to the default */
46
+ dailyBudgetTokens?: unknown;
47
+ /** Rejected: budgets are in tokens now */
38
48
  dailyBudgetUsd?: unknown;
39
49
  /** An integer 1..limit; `null` resets to the default */
40
50
  maxInFlightPerMember?: unknown;
@@ -53,6 +63,13 @@ export type TicketAutopilotInputResult = {
53
63
  * @param stored - `Project.ticketAutopilot` (may be undefined or partial)
54
64
  * @returns Settings with defaults
55
65
  */
66
+ /**
67
+ * The token budget a stored pre-token USD budget converts to, or null.
68
+ *
69
+ * @param stored - Stored settings
70
+ * @returns Tokens (USD × TOKENS_PER_USD), or null when there is no USD budget
71
+ */
72
+ export declare function legacyBudgetTokens(stored: Partial<TicketAutopilotSettings> | undefined | null): number | null;
56
73
  export declare function resolveTicketAutopilotSettings(stored: Partial<TicketAutopilotSettings> | undefined | null): ResolvedTicketAutopilotSettings;
57
74
  /**
58
75
  * Apply a change request to the stored settings, validating every field.
@@ -65,8 +82,8 @@ export declare function resolveTicketAutopilotSettings(stored: Partial<TicketAut
65
82
  *
66
83
  * @example
67
84
  * ```typescript
68
- * applyTicketAutopilotInput(undefined, { enabled: true, dailyBudgetUsd: 10 });
69
- * // → { ok: true, settings: { enabled: true, dailyBudgetUsd: 10 } }
85
+ * applyTicketAutopilotInput(undefined, { enabled: true, dailyBudgetTokens: '10M' });
86
+ * // → { ok: true, settings: { enabled: true, dailyBudgetTokens: 10000000 } }
70
87
  * ```
71
88
  */
72
89
  export declare function applyTicketAutopilotInput(current: Partial<TicketAutopilotSettings> | undefined | null, input: TicketAutopilotSettingsInput): TicketAutopilotInputResult;
@@ -1 +1 @@
1
- {"version":3,"file":"ticket-autopilot.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/ticket-autopilot.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,+EAA+E;AAC/E,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,6CAA6C;AAC7C,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,4DAA4D;AAC5D,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,oDAAoD;AACpD,MAAM,MAAM,0BAA0B,GAClC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC/C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,+BAA+B,CAY3I;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,SAAS,GAAG,IAAI,EAC5D,KAAK,EAAE,4BAA4B,GAClC,0BAA0B,CAmC5B"}
1
+ {"version":3,"file":"ticket-autopilot.types.d.ts","sourceRoot":"","sources":["../../../../../backend/src/types/ticket-autopilot.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,+EAA+E;AAC/E,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,6CAA6C;AAC7C,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,4DAA4D;AAC5D,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0CAA0C;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,oDAAoD;AACpD,MAAM,MAAM,0BAA0B,GAClC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC/C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC;;;;;GAKG;AACH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG7G;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,+BAA+B,CAY3I;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,SAAS,GAAG,IAAI,EAC5D,KAAK,EAAE,4BAA4B,GAClC,0BAA0B,CAuC5B"}
@@ -6,20 +6,31 @@
6
6
  *
7
7
  * @module types/ticket-autopilot.types
8
8
  */
9
- import { TICKET_AUTOPILOT_CONSTANTS } from '../constants.js';
9
+ import { TICKET_AUTOPILOT_CONSTANTS, USAGE_CONSTANTS } from '../constants.js';
10
+ import { parseTokenAmount } from '../services/usage/token-format.js';
10
11
  /**
11
12
  * Fill in the defaults of stored (possibly absent) settings.
12
13
  *
13
14
  * @param stored - `Project.ticketAutopilot` (may be undefined or partial)
14
15
  * @returns Settings with defaults
15
16
  */
17
+ /**
18
+ * The token budget a stored pre-token USD budget converts to, or null.
19
+ *
20
+ * @param stored - Stored settings
21
+ * @returns Tokens (USD × TOKENS_PER_USD), or null when there is no USD budget
22
+ */
23
+ export function legacyBudgetTokens(stored) {
24
+ const usd = stored?.dailyBudgetUsd;
25
+ return typeof usd === 'number' && Number.isFinite(usd) && usd > 0 ? Math.round(usd * USAGE_CONSTANTS.TOKENS_PER_USD) : null;
26
+ }
16
27
  export function resolveTicketAutopilotSettings(stored) {
17
- const budget = stored?.dailyBudgetUsd;
28
+ const budget = stored?.dailyBudgetTokens ?? legacyBudgetTokens(stored) ?? undefined;
18
29
  const cap = stored?.maxInFlightPerMember;
19
30
  return {
20
31
  enabled: stored?.enabled === true,
21
32
  driver: typeof stored?.driver === 'string' && stored.driver.trim() ? stored.driver.trim() : null,
22
- dailyBudgetUsd: typeof budget === 'number' && Number.isFinite(budget) && budget > 0 ? budget : TICKET_AUTOPILOT_CONSTANTS.DEFAULT_DAILY_BUDGET_USD,
33
+ dailyBudgetTokens: typeof budget === 'number' && Number.isFinite(budget) && budget > 0 ? budget : TICKET_AUTOPILOT_CONSTANTS.DEFAULT_DAILY_BUDGET_TOKENS,
23
34
  maxInFlightPerMember: typeof cap === 'number' && Number.isInteger(cap) && cap >= 1 && cap <= TICKET_AUTOPILOT_CONSTANTS.MAX_IN_FLIGHT_PER_MEMBER_LIMIT
24
35
  ? cap
25
36
  : TICKET_AUTOPILOT_CONSTANTS.DEFAULT_MAX_IN_FLIGHT_PER_MEMBER,
@@ -36,16 +47,18 @@ export function resolveTicketAutopilotSettings(stored) {
36
47
  *
37
48
  * @example
38
49
  * ```typescript
39
- * applyTicketAutopilotInput(undefined, { enabled: true, dailyBudgetUsd: 10 });
40
- * // → { ok: true, settings: { enabled: true, dailyBudgetUsd: 10 } }
50
+ * applyTicketAutopilotInput(undefined, { enabled: true, dailyBudgetTokens: '10M' });
51
+ * // → { ok: true, settings: { enabled: true, dailyBudgetTokens: 10000000 } }
41
52
  * ```
42
53
  */
43
54
  export function applyTicketAutopilotInput(current, input) {
44
55
  const next = { enabled: current?.enabled === true };
45
56
  if (typeof current?.driver === 'string' && current.driver.trim())
46
57
  next.driver = current.driver.trim();
47
- if (typeof current?.dailyBudgetUsd === 'number')
48
- next.dailyBudgetUsd = current.dailyBudgetUsd;
58
+ if (typeof current?.dailyBudgetTokens === 'number')
59
+ next.dailyBudgetTokens = current.dailyBudgetTokens;
60
+ else if (legacyBudgetTokens(current) !== null)
61
+ next.dailyBudgetTokens = legacyBudgetTokens(current);
49
62
  if (typeof current?.maxInFlightPerMember === 'number')
50
63
  next.maxInFlightPerMember = current.maxInFlightPerMember;
51
64
  if (input.enabled !== undefined) {
@@ -62,13 +75,16 @@ export function applyTicketAutopilotInput(current, input) {
62
75
  return { ok: false, error: 'driver must be a session name (or null for the team lead)' };
63
76
  }
64
77
  if (input.dailyBudgetUsd !== undefined) {
65
- if (input.dailyBudgetUsd === null)
66
- delete next.dailyBudgetUsd;
78
+ return { ok: false, error: 'Budgets are in tokens now: send dailyBudgetTokens (e.g. 20000000 or "20M") instead of dailyBudgetUsd' };
79
+ }
80
+ if (input.dailyBudgetTokens !== undefined) {
81
+ if (input.dailyBudgetTokens === null)
82
+ delete next.dailyBudgetTokens;
67
83
  else {
68
- const n = typeof input.dailyBudgetUsd === 'string' ? Number(input.dailyBudgetUsd) : input.dailyBudgetUsd;
69
- if (typeof n !== 'number' || !Number.isFinite(n) || n <= 0)
70
- return { ok: false, error: 'dailyBudgetUsd must be a positive number of US dollars' };
71
- next.dailyBudgetUsd = n;
84
+ const n = parseTokenAmount(input.dailyBudgetTokens);
85
+ if (n === null)
86
+ return { ok: false, error: 'dailyBudgetTokens must be a positive number of tokens (e.g. 20000000 or "20M")' };
87
+ next.dailyBudgetTokens = n;
72
88
  }
73
89
  }
74
90
  if (input.maxInFlightPerMember !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"ticket-autopilot.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/ticket-autopilot.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ticket-autopilot.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/ticket-autopilot.types.ts"],"names":[],"mappings":"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"}