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
@@ -3,7 +3,7 @@ import { registerSystemControlRoutes } from '../../controllers/system/system-con
3
3
  import { getOwnerMessageWatchdog } from '../../services/messaging/owner-message-watchdog.service.js';
4
4
  import { registerRuntimeFallbackRoutes } from '../../controllers/system/runtime-fallback.controller.js';
5
5
  import { registerRuntimeTermsRoutes } from '../../controllers/system/runtime-terms.controller.js';
6
- import { registerSpendRoutes } from '../../controllers/system/spend.controller.js';
6
+ import { registerUsageRoutes } from '../../controllers/system/usage.controller.js';
7
7
  export function registerSystemRoutes(router, apiController) {
8
8
  // System Administration Routes
9
9
  router.get('/system/health', (req, res) => systemHandlers.getSystemHealth.call(apiController, req, res));
@@ -27,8 +27,8 @@ export function registerSystemRoutes(router, apiController) {
27
27
  registerRuntimeFallbackRoutes(router);
28
28
  // Owner consent for a runtime's first-run Terms (specs/2026-10-01-runtime-terms-consent.md)
29
29
  registerRuntimeTermsRoutes(router);
30
- // Spend per agent + daily spend caps (specs/2026-10-02-spend-cap.md)
31
- registerSpendRoutes(router);
30
+ // Token usage stats + daily token caps + boosts (specs/2026-10-02-spend-cap.md)
31
+ registerUsageRoutes(router);
32
32
  // API Health within /api scope
33
33
  router.get('/health', (req, res) => systemHandlers.healthCheck.call(apiController, req, res));
34
34
  // Local IP address for QR code generation (mobile access)
@@ -1 +1 @@
1
- {"version":3,"file":"system.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/routes/modules/system.routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/routes/modules/system.routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Repair orphan-superseded decisions.
3
+ *
4
+ * Bug: addDecision() at the decision cap marked the newest active decision
5
+ * `superseded` with no `supersededBy`. Rule: status === 'superseded' AND no
6
+ * supersededBy -> 'active'. Genuine supersessions (supersededBy set) are untouched.
7
+ *
8
+ * Dry-run by default; `--apply` writes (after backing up to
9
+ * decisions.json.bak-<timestamp>). Targets: every project in ~/.crewly/projects.json
10
+ * that has `.crewly/knowledge/decisions.json`, or explicit paths after the flags.
11
+ *
12
+ * Usage: npx tsx backend/src/scripts/repair-orphan-superseded-decisions.ts [--apply] [projectPath...]
13
+ *
14
+ * @module scripts/repair-orphan-superseded-decisions
15
+ */
16
+ /** Per-vault result. */
17
+ export interface VaultRepairResult {
18
+ file: string;
19
+ examined: number;
20
+ orphans: number;
21
+ repaired: number;
22
+ backup?: string;
23
+ error?: string;
24
+ }
25
+ /** Relative location of the decisions file inside a project. */
26
+ export declare const DECISIONS_REL_PATH: string;
27
+ /**
28
+ * Repair one decisions.json.
29
+ *
30
+ * @param file - Absolute path of decisions.json
31
+ * @param apply - Write changes when true; otherwise report only
32
+ * @returns Counts for the file; `error` is set when it could not be parsed
33
+ */
34
+ export declare function repairDecisionsFile(file: string, apply: boolean): Promise<VaultRepairResult>;
35
+ /**
36
+ * Resolve decisions.json files for the given project paths (or all registered projects).
37
+ *
38
+ * @param projectPaths - Explicit project roots; when empty, read ~/.crewly/projects.json
39
+ * @param projectsJson - Override path of projects.json (tests)
40
+ * @returns Existing decisions.json absolute paths
41
+ */
42
+ export declare function resolveDecisionFiles(projectPaths: string[], projectsJson?: string): Promise<string[]>;
43
+ /**
44
+ * Run the repair across projects.
45
+ *
46
+ * @returns results plus `ok=false` when zero files were examined (refuses to report success)
47
+ */
48
+ export declare function runRepair(opts: {
49
+ apply: boolean;
50
+ projectPaths?: string[];
51
+ projectsJson?: string;
52
+ }): Promise<{
53
+ ok: boolean;
54
+ results: VaultRepairResult[];
55
+ }>;
56
+ //# sourceMappingURL=repair-orphan-superseded-decisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair-orphan-superseded-decisions.d.ts","sourceRoot":"","sources":["../../../../../backend/src/scripts/repair-orphan-superseded-decisions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,wBAAwB;AACxB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,gEAAgE;AAChE,eAAO,MAAM,kBAAkB,QAAsD,CAAC;AAItF;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4BlG;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAc3G;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC,CAMhK"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Repair orphan-superseded decisions.
3
+ *
4
+ * Bug: addDecision() at the decision cap marked the newest active decision
5
+ * `superseded` with no `supersededBy`. Rule: status === 'superseded' AND no
6
+ * supersededBy -> 'active'. Genuine supersessions (supersededBy set) are untouched.
7
+ *
8
+ * Dry-run by default; `--apply` writes (after backing up to
9
+ * decisions.json.bak-<timestamp>). Targets: every project in ~/.crewly/projects.json
10
+ * that has `.crewly/knowledge/decisions.json`, or explicit paths after the flags.
11
+ *
12
+ * Usage: npx tsx backend/src/scripts/repair-orphan-superseded-decisions.ts [--apply] [projectPath...]
13
+ *
14
+ * @module scripts/repair-orphan-superseded-decisions
15
+ */
16
+ import * as fs from 'fs/promises';
17
+ import * as os from 'os';
18
+ import * as path from 'path';
19
+ /** Relative location of the decisions file inside a project. */
20
+ export const DECISIONS_REL_PATH = path.join('.crewly', 'knowledge', 'decisions.json');
21
+ /**
22
+ * Repair one decisions.json.
23
+ *
24
+ * @param file - Absolute path of decisions.json
25
+ * @param apply - Write changes when true; otherwise report only
26
+ * @returns Counts for the file; `error` is set when it could not be parsed
27
+ */
28
+ export async function repairDecisionsFile(file, apply) {
29
+ const result = { file, examined: 0, orphans: 0, repaired: 0 };
30
+ let data;
31
+ try {
32
+ data = JSON.parse(await fs.readFile(file, 'utf8'));
33
+ }
34
+ catch (err) {
35
+ result.error = `unreadable/malformed: ${err.message}`;
36
+ return result;
37
+ }
38
+ if (!Array.isArray(data)) {
39
+ result.error = 'not a JSON array';
40
+ return result;
41
+ }
42
+ const decisions = data;
43
+ result.examined = decisions.length;
44
+ const orphans = decisions.filter(d => d && d.status === 'superseded' && !d.supersededBy);
45
+ result.orphans = orphans.length;
46
+ if (orphans.length === 0 || !apply)
47
+ return result;
48
+ const backup = `${file}.bak-${new Date().toISOString().replace(/[:.]/g, '-')}`;
49
+ await fs.copyFile(file, backup);
50
+ result.backup = backup;
51
+ for (const d of orphans)
52
+ d.status = 'active';
53
+ const tmp = `${file}.tmp-${process.pid}`;
54
+ await fs.writeFile(tmp, JSON.stringify(decisions, null, 2));
55
+ await fs.rename(tmp, file);
56
+ result.repaired = orphans.length;
57
+ return result;
58
+ }
59
+ /**
60
+ * Resolve decisions.json files for the given project paths (or all registered projects).
61
+ *
62
+ * @param projectPaths - Explicit project roots; when empty, read ~/.crewly/projects.json
63
+ * @param projectsJson - Override path of projects.json (tests)
64
+ * @returns Existing decisions.json absolute paths
65
+ */
66
+ export async function resolveDecisionFiles(projectPaths, projectsJson) {
67
+ let roots = projectPaths;
68
+ if (roots.length === 0) {
69
+ const pj = projectsJson ?? path.join(os.homedir(), '.crewly', 'projects.json');
70
+ const raw = JSON.parse(await fs.readFile(pj, 'utf8'));
71
+ const list = Array.isArray(raw) ? raw : Object.values(raw.projects ?? raw);
72
+ roots = list.map(p => p?.path).filter((p) => typeof p === 'string');
73
+ }
74
+ const files = [];
75
+ for (const r of roots) {
76
+ const f = path.join(r, DECISIONS_REL_PATH);
77
+ try {
78
+ await fs.access(f);
79
+ files.push(f);
80
+ }
81
+ catch { /* no decisions file */ }
82
+ }
83
+ return files;
84
+ }
85
+ /**
86
+ * Run the repair across projects.
87
+ *
88
+ * @returns results plus `ok=false` when zero files were examined (refuses to report success)
89
+ */
90
+ export async function runRepair(opts) {
91
+ const files = await resolveDecisionFiles(opts.projectPaths ?? [], opts.projectsJson);
92
+ const results = [];
93
+ for (const f of files)
94
+ results.push(await repairDecisionsFile(f, opts.apply));
95
+ const parsed = results.filter(r => !r.error);
96
+ return { ok: parsed.length > 0 && results.every(r => !r.error), results };
97
+ }
98
+ async function main() {
99
+ const args = process.argv.slice(2);
100
+ const apply = args.includes('--apply');
101
+ const { ok, results } = await runRepair({ apply, projectPaths: args.filter(a => !a.startsWith('--')) });
102
+ console.log(apply ? 'MODE: apply' : 'MODE: dry-run (pass --apply to write)');
103
+ for (const r of results) {
104
+ console.log(`${r.file}: examined=${r.examined} orphans=${r.orphans} repaired=${r.repaired}${r.error ? ` ERROR=${r.error}` : ''}${r.backup ? ` backup=${r.backup}` : ''}`);
105
+ }
106
+ console.log(`${results.length} file(s) examined`);
107
+ if (results.length === 0)
108
+ console.log('NO FILES EXAMINED — refusing to report success');
109
+ process.exit(ok ? 0 : 1);
110
+ }
111
+ if (process.argv[1] && /repair-orphan-superseded-decisions\.(ts|js)$/.test(process.argv[1])) {
112
+ void main();
113
+ }
114
+ //# sourceMappingURL=repair-orphan-superseded-decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair-orphan-superseded-decisions.js","sourceRoot":"","sources":["../../../../../backend/src/scripts/repair-orphan-superseded-decisions.ts"],"names":[],"mappings":"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"}
@@ -2991,15 +2991,15 @@ Loop until done, blocked, or explicitly reassigned:
2991
2991
  error,
2992
2992
  };
2993
2993
  }
2994
- // Daily spend cap (specs/2026-10-02-spend-cap.md): waking a capped
2994
+ // Daily token cap (specs/2026-10-02-spend-cap.md): waking a capped
2995
2995
  // agent is refused with the reason. The orchestrator's session may still
2996
2996
  // start (an idle session costs nothing); its turns are held by the
2997
2997
  // delivery gate and its queue.
2998
2998
  if (config.sessionName !== ORCHESTRATOR_SESSION_NAME) {
2999
2999
  const spendStop = spendCapStopOf(config.sessionName);
3000
3000
  if (spendStop) {
3001
- const error = `${spendCapReason(spendStop)}; it starts again at midnight or when the owner raises the cap`;
3002
- this.logger.info('Refusing to wake an agent stopped by its daily spend cap', { sessionName: config.sessionName, capUsd: spendStop.capUsd });
3001
+ const error = `${spendCapReason(spendStop)}; it starts again at midnight or when the owner boosts it`;
3002
+ this.logger.info('Refusing to wake an agent stopped by a daily token cap', { sessionName: config.sessionName, capTokens: spendStop.capTokens, scope: spendStop.scope });
3003
3003
  return { success: false, sessionName: config.sessionName, error, errorCode: SPEND_CAP_CONSTANTS.ERROR_CODE };
3004
3004
  }
3005
3005
  }
@@ -3783,15 +3783,15 @@ Loop until done, blocked, or explicitly reassigned:
3783
3783
  message: '[RUNTIME_FALLBACK] Message queued while the agent moves to its fallback runtime',
3784
3784
  };
3785
3785
  }
3786
- // Daily spend cap (specs/2026-10-02-spend-cap.md): a capped agent
3786
+ // Daily token cap (specs/2026-10-02-spend-cap.md): a capped agent
3787
3787
  // starts no new turn. The message waits in the persistent queue and is
3788
- // delivered when the cap resets at midnight or the owner raises it.
3788
+ // delivered when the cap resets at midnight or the owner boosts it.
3789
3789
  const spendStop = spendCapStopOf(sessionName);
3790
3790
  if (spendStop) {
3791
3791
  SubAgentMessageQueue.getInstance().enqueue(sessionName, message);
3792
- this.logger.info('Daily spend cap reached — message queued, no new turn', {
3792
+ this.logger.info('Daily token cap reached — message queued, no new turn', {
3793
3793
  sessionName,
3794
- capUsd: spendStop.capUsd,
3794
+ capTokens: spendStop.capTokens,
3795
3795
  scope: spendStop.scope,
3796
3796
  messageLength: message.length,
3797
3797
  });