crewly 1.20.160 → 1.20.162

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 (157) hide show
  1. package/config/roles/orchestrator/prompt.md +2 -0
  2. package/config/roles/team-leader/prompt.md +12 -0
  3. package/config/roles/team-leader/tl-addon.md +12 -0
  4. package/config/skills/agent/core/project-tickets/SKILL.md +32 -1
  5. package/config/skills/agent/core/project-tickets/execute.sh +56 -2
  6. package/config/skills/agent/core/project-tickets/execute.test.sh +22 -0
  7. package/dist/backend/backend/src/constants.d.ts +125 -1
  8. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  9. package/dist/backend/backend/src/constants.js +146 -16
  10. package/dist/backend/backend/src/constants.js.map +1 -1
  11. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +27 -0
  12. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
  13. package/dist/backend/backend/src/controllers/browser/browser.controller.js +203 -1
  14. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  15. package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
  16. package/dist/backend/backend/src/controllers/browser/browser.routes.js +4 -1
  17. package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
  18. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +43 -0
  19. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +85 -0
  21. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +12 -0
  23. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -1
  24. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +19 -1
  25. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -1
  26. package/dist/backend/backend/src/index.d.ts.map +1 -1
  27. package/dist/backend/backend/src/index.js +30 -1
  28. package/dist/backend/backend/src/index.js.map +1 -1
  29. package/dist/backend/backend/src/models/Project.d.ts +3 -0
  30. package/dist/backend/backend/src/models/Project.d.ts.map +1 -1
  31. package/dist/backend/backend/src/models/Project.js +7 -0
  32. package/dist/backend/backend/src/models/Project.js.map +1 -1
  33. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  34. package/dist/backend/backend/src/routes/api.routes.js +3 -1
  35. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  36. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +66 -13
  37. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  38. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +161 -32
  39. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  40. package/dist/backend/backend/src/services/browser/browser-session.service.d.ts +15 -0
  41. package/dist/backend/backend/src/services/browser/browser-session.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/browser/browser-session.service.js +25 -0
  43. package/dist/backend/backend/src/services/browser/browser-session.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/browser/owner-browser-input.d.ts +211 -0
  45. package/dist/backend/backend/src/services/browser/owner-browser-input.d.ts.map +1 -0
  46. package/dist/backend/backend/src/services/browser/owner-browser-input.js +373 -0
  47. package/dist/backend/backend/src/services/browser/owner-browser-input.js.map +1 -0
  48. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
  49. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +5 -3
  50. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
  51. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +48 -0
  52. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
  53. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +77 -1
  54. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
  55. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +223 -0
  56. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -0
  57. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +240 -0
  58. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -0
  59. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts +94 -0
  60. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts.map +1 -0
  61. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js +195 -0
  62. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js.map +1 -0
  63. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +286 -0
  64. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -0
  65. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +626 -0
  66. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -0
  67. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +37 -3
  68. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +57 -6
  70. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  71. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +21 -1
  72. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  73. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +62 -4
  74. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  75. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +6 -0
  76. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  77. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +9 -5
  78. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  79. package/dist/backend/backend/src/services/task-pool/claim.service.d.ts +23 -3
  80. package/dist/backend/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
  81. package/dist/backend/backend/src/services/task-pool/claim.service.js +52 -11
  82. package/dist/backend/backend/src/services/task-pool/claim.service.js.map +1 -1
  83. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +42 -0
  84. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  85. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +82 -1
  86. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  87. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.d.ts +19 -0
  88. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.d.ts.map +1 -1
  89. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.js +33 -0
  90. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.js.map +1 -1
  91. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +28 -0
  92. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  93. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +74 -29
  94. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  95. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  96. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +3 -2
  97. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  98. package/dist/backend/backend/src/types/index.d.ts +6 -0
  99. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  100. package/dist/backend/backend/src/types/index.js.map +1 -1
  101. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +73 -0
  102. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -0
  103. package/dist/backend/backend/src/types/ticket-autopilot.types.js +88 -0
  104. package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -0
  105. package/dist/backend/backend/src/types/v2/claim.types.d.ts +27 -0
  106. package/dist/backend/backend/src/types/v2/claim.types.d.ts.map +1 -1
  107. package/dist/backend/backend/src/types/v2/claim.types.js +37 -0
  108. package/dist/backend/backend/src/types/v2/claim.types.js.map +1 -1
  109. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +1 -1
  110. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  111. package/dist/backend/backend/src/types/v2/work-item.types.js +1 -0
  112. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  113. package/dist/backend/build-info.json +2 -2
  114. package/dist/cli/backend/src/constants.d.ts +125 -1
  115. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  116. package/dist/cli/backend/src/constants.js +146 -16
  117. package/dist/cli/backend/src/constants.js.map +1 -1
  118. package/dist/cli/backend/src/models/Project.d.ts +3 -0
  119. package/dist/cli/backend/src/models/Project.d.ts.map +1 -1
  120. package/dist/cli/backend/src/models/Project.js +7 -0
  121. package/dist/cli/backend/src/models/Project.js.map +1 -1
  122. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +66 -13
  123. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  124. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +161 -32
  125. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  126. package/dist/cli/backend/src/services/task-pool/claim.service.d.ts +23 -3
  127. package/dist/cli/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
  128. package/dist/cli/backend/src/services/task-pool/claim.service.js +52 -11
  129. package/dist/cli/backend/src/services/task-pool/claim.service.js.map +1 -1
  130. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +42 -0
  131. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  132. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +82 -1
  133. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  134. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.d.ts +19 -0
  135. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.d.ts.map +1 -1
  136. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.js +33 -0
  137. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.js.map +1 -1
  138. package/dist/cli/backend/src/types/index.d.ts +6 -0
  139. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  140. package/dist/cli/backend/src/types/index.js.map +1 -1
  141. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +73 -0
  142. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -0
  143. package/dist/cli/backend/src/types/ticket-autopilot.types.js +88 -0
  144. package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -0
  145. package/dist/cli/backend/src/types/v2/claim.types.d.ts +27 -0
  146. package/dist/cli/backend/src/types/v2/claim.types.d.ts.map +1 -1
  147. package/dist/cli/backend/src/types/v2/claim.types.js +37 -0
  148. package/dist/cli/backend/src/types/v2/claim.types.js.map +1 -1
  149. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +1 -1
  150. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  151. package/dist/cli/backend/src/types/v2/work-item.types.js +1 -0
  152. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  153. package/frontend/dist/assets/index-0707e2ac.css +42 -0
  154. package/frontend/dist/assets/{index-f79676aa.js → index-64c8a616.js} +265 -265
  155. package/frontend/dist/index.html +2 -2
  156. package/package.json +1 -1
  157. package/frontend/dist/assets/index-edd6f262.css +0 -42
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Ticket autopilot (specs/2026-09-30-ticket-autopilot.md).
3
+ *
4
+ * A per-project switch (default off). While it is on:
5
+ * - the project's driver (its team lead) is woken with ONE `ticket_triage`
6
+ * WorkItem listing the backlog tickets to decide (ready + assign, split,
7
+ * ask the owner, cancel) — only when someone on the team is idle, at most
8
+ * one live triage per project, at most every 30 min (sooner when a member
9
+ * goes idle with nothing ready);
10
+ * - brakes hold: a daily USD budget over the team's agents (pauses the
11
+ * autopilot and ticket auto-claim for the day, owner told once) and an
12
+ * in-progress cap per member ({@link ProjectTicketAutopilotPolicy});
13
+ * - the owner gets the open `needs-owner` questions batched into one phone
14
+ * message (at most every 2 h unless a new P0 one appears) and one evening
15
+ * digest (skipped when nothing changed).
16
+ *
17
+ * The approval boundary is unchanged: the autopilot only wakes the lead and
18
+ * talks to the owner; it never makes a ticket ready or starts work itself.
19
+ *
20
+ * @module services/project-tickets/ticket-autopilot.service
21
+ */
22
+ import { type ComponentLogger } from '../core/logger.service.js';
23
+ import type { Project, Team } from '../../types/index.js';
24
+ import { type WorkItem } from '../../types/v2/work-item.types.js';
25
+ import type { ProjectTicketList } from '../../types/project-ticket.types.js';
26
+ import { type ResolvedTicketAutopilotSettings, type TicketAutopilotSettingsInput } from '../../types/ticket-autopilot.types.js';
27
+ import { type ProjectTicketAccess, type ProjectTicketAutopilotPolicy, type ProjectTicketCaller } from './project-ticket-workflow.service.js';
28
+ import { type TriageDecision } from './ticket-autopilot-decision.js';
29
+ /** The subset of the task pool the autopilot uses. */
30
+ export interface TicketAutopilotPool {
31
+ addToPool(workItem: WorkItem): Promise<void>;
32
+ getAllItems(): Promise<WorkItem[]>;
33
+ cancelQueued(workItemId: string, reason: string): Promise<void>;
34
+ }
35
+ /** The subset of storage the autopilot uses. */
36
+ export interface TicketAutopilotDirectory {
37
+ getTeams(): Promise<Team[]>;
38
+ getProjects(): Promise<Project[]>;
39
+ saveProject(project: Project): Promise<void>;
40
+ }
41
+ /** The ticket store (read only). */
42
+ export interface TicketAutopilotTicketStore {
43
+ list(projectPath: string): Promise<ProjectTicketList>;
44
+ }
45
+ /** Project resolution + caller access (the ticket workflow). */
46
+ export interface TicketAutopilotWorkflow {
47
+ resolveProject(ref: string): Promise<Project>;
48
+ accessOf(caller: ProjectTicketCaller, project: Project): Promise<{
49
+ access: ProjectTicketAccess;
50
+ }>;
51
+ setAutopilotPolicy?(policy: ProjectTicketAutopilotPolicy | null): void;
52
+ }
53
+ /** Token / cost ledger (see TokenUsageService.getSessionUsageSince). */
54
+ export interface TicketAutopilotLedger {
55
+ getSessionUsageSince(sessionName: string, since: Date, until?: Date): {
56
+ cost: number;
57
+ };
58
+ }
59
+ /** A message to the owner through the usual owner-notification path. */
60
+ export interface OwnerNotice {
61
+ title: string;
62
+ message: string;
63
+ urgent: boolean;
64
+ }
65
+ /** Dependencies. */
66
+ export interface TicketAutopilotDeps {
67
+ tickets: TicketAutopilotTicketStore;
68
+ pool: TicketAutopilotPool;
69
+ directory: TicketAutopilotDirectory;
70
+ workflow: TicketAutopilotWorkflow;
71
+ ledger: TicketAutopilotLedger;
72
+ /** Sends to the owner; resolves false when it could not be sent (retried on the next tick) */
73
+ notifyOwner: (notice: OwnerNotice) => Promise<boolean>;
74
+ /** JSON file holding the autopilot's bookkeeping */
75
+ stateFile: string;
76
+ now?: () => Date;
77
+ logger?: ComponentLogger;
78
+ }
79
+ /** The driver of a project. */
80
+ export interface ResolvedDriver {
81
+ session: string;
82
+ teamId: string;
83
+ source: 'setting' | 'team_lead';
84
+ }
85
+ /** What {@link TicketAutopilotService.getStatus} returns. */
86
+ export interface TicketAutopilotStatus {
87
+ project: {
88
+ id: string;
89
+ name: string;
90
+ path: string;
91
+ };
92
+ settings: ResolvedTicketAutopilotSettings;
93
+ driver: ResolvedDriver | null;
94
+ spentTodayUsd: number;
95
+ pausedForToday: boolean;
96
+ triageInFlight: boolean;
97
+ lastTriageAt: string | null;
98
+ }
99
+ /** Outcome of one project evaluation. */
100
+ export interface ProjectEvaluation {
101
+ projectId: string;
102
+ decision: TriageDecision;
103
+ /** The triage WorkItem created, when the decision was `triage` */
104
+ workItem?: WorkItem;
105
+ }
106
+ export declare class TicketAutopilotService {
107
+ private static instance;
108
+ private readonly deps;
109
+ private readonly logger;
110
+ private readonly now;
111
+ private state;
112
+ private timer;
113
+ /** Serialises evaluations so an idle event and the tick never create two triages */
114
+ private chain;
115
+ /**
116
+ * @param deps - Stores, pool, ledger, owner notifier, state file, clock
117
+ */
118
+ constructor(deps: TicketAutopilotDeps);
119
+ /**
120
+ * The wired process-wide instance, or null before boot wired it.
121
+ *
122
+ * @returns Instance or null
123
+ */
124
+ static getInstance(): TicketAutopilotService | null;
125
+ /**
126
+ * Install the process-wide instance (boot path).
127
+ *
128
+ * @param service - Instance, or null to clear (tests)
129
+ */
130
+ static setInstance(service: TicketAutopilotService | null): void;
131
+ /**
132
+ * Install the brakes on the ticket workflow and start the periodic tick.
133
+ *
134
+ * @param intervalMs - Tick interval (0 = no timer; tests call {@link tick})
135
+ */
136
+ start(intervalMs?: number): void;
137
+ /** Stop the tick and remove the brakes. */
138
+ stop(): void;
139
+ /**
140
+ * The brakes the ticket workflow asks about.
141
+ *
142
+ * @returns Policy bound to this service
143
+ */
144
+ policy(): ProjectTicketAutopilotPolicy;
145
+ /**
146
+ * The project's autopilot settings and live status.
147
+ *
148
+ * @param ref - Project id, name or path
149
+ * @param caller - Owner or orchestrator
150
+ * @returns Settings, driver, today's spend, pause / triage state
151
+ * @throws ProjectTicketError(403/404)
152
+ */
153
+ getStatus(ref: string, caller: ProjectTicketCaller): Promise<TicketAutopilotStatus>;
154
+ /**
155
+ * Change the project's autopilot settings.
156
+ *
157
+ * @param ref - Project id, name or path
158
+ * @param input - `enabled`, `driver`, `dailyBudgetUsd`, `maxInFlightPerMember` (null resets one)
159
+ * @param caller - Owner or orchestrator
160
+ * @returns The new status
161
+ * @throws ProjectTicketError(400) on invalid input or a driver who is not a lead of a project team; (403/404)
162
+ */
163
+ updateSettings(ref: string, input: TicketAutopilotSettingsInput, caller: ProjectTicketCaller): Promise<TicketAutopilotStatus>;
164
+ /**
165
+ * Periodic pass: evaluate every enabled project, then the owner questions
166
+ * and the daily digest.
167
+ *
168
+ * @returns Per-project evaluations
169
+ */
170
+ tick(): Promise<ProjectEvaluation[]>;
171
+ /**
172
+ * A member went idle and AutoClaim found nothing ready for it: evaluate
173
+ * the enabled projects it works on right away (bounded by
174
+ * {@link TICKET_AUTOPILOT_CONSTANTS.IDLE_TRIGGER_MIN_INTERVAL_MS}).
175
+ *
176
+ * @param session - The idle agent
177
+ * @returns Per-project evaluations
178
+ */
179
+ onMemberIdle(session: string): Promise<ProjectEvaluation[]>;
180
+ /**
181
+ * Evaluate one project and, when {@link decideTriage} says so, wake its
182
+ * driver with a triage WorkItem.
183
+ *
184
+ * @param project - Project (with its stored settings)
185
+ * @param trigger - Periodic tick or a member going idle
186
+ * @param idleSession - The member that just went idle
187
+ * @returns The decision (and the WorkItem when one was created)
188
+ */
189
+ private evaluateProject;
190
+ /**
191
+ * The project's live triage item, if any. A triage item still queued
192
+ * (never picked up) after {@link TICKET_AUTOPILOT_CONSTANTS.TRIAGE_STALE_QUEUED_MS}
193
+ * is cancelled so a fresh one can replace it.
194
+ *
195
+ * @param project - Project
196
+ * @param nowMs - Clock
197
+ * @returns The live item, or null
198
+ */
199
+ private liveTriageItem;
200
+ /**
201
+ * Send the batched owner questions of every enabled project when due.
202
+ *
203
+ * @param projects - Enabled projects
204
+ * @returns True when a batch went out
205
+ */
206
+ private processOwnerQuestions;
207
+ /**
208
+ * Send the evening digest of the enabled projects when due.
209
+ *
210
+ * @param projects - Enabled projects
211
+ * @returns True when a digest went out
212
+ */
213
+ private processDigest;
214
+ /**
215
+ * Tell the owner once per day that a project's autopilot paused on its budget.
216
+ *
217
+ * @param project - Project
218
+ * @param ps - Its bookkeeping
219
+ * @param spent - Spent today
220
+ * @param budget - Daily budget
221
+ * @param now - Clock
222
+ */
223
+ private noticeBudgetPaused;
224
+ /**
225
+ * The settings view plus live status of a project.
226
+ *
227
+ * @param project - Project
228
+ * @returns Status
229
+ */
230
+ private statusOf;
231
+ /**
232
+ * Refuse anyone but the owner and the orchestrator.
233
+ *
234
+ * @param caller - Caller
235
+ * @param project - Project
236
+ * @throws ProjectTicketError(403)
237
+ */
238
+ private requireOwnerOrOrc;
239
+ /**
240
+ * Non-archived teams working on a project.
241
+ *
242
+ * @param project - Project
243
+ * @returns Teams
244
+ */
245
+ private projectTeams;
246
+ /**
247
+ * A lead of one of the teams running as `session`.
248
+ *
249
+ * @param teams - Project teams
250
+ * @param session - Session
251
+ * @returns The team id, or null
252
+ */
253
+ private findLead;
254
+ /**
255
+ * Who triages: the configured driver (must be a lead of a project team),
256
+ * else the first lead found on the project's teams.
257
+ *
258
+ * @param settings - Resolved settings
259
+ * @param teams - Project teams
260
+ * @returns Driver, or null when there is none
261
+ */
262
+ private resolveDriver;
263
+ /**
264
+ * USD spent since local midnight by the agents of the given teams.
265
+ *
266
+ * @param teams - Teams
267
+ * @returns Spend
268
+ */
269
+ private spentToday;
270
+ /**
271
+ * Run `fn` after every evaluation queued before it.
272
+ *
273
+ * @param fn - Work
274
+ * @returns Its result
275
+ */
276
+ private serial;
277
+ /**
278
+ * Load the bookkeeping (once per process).
279
+ *
280
+ * @returns State
281
+ */
282
+ private loadState;
283
+ /** Persist the bookkeeping (best-effort). */
284
+ private saveState;
285
+ }
286
+ //# sourceMappingURL=ticket-autopilot.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-autopilot.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/project-tickets/ticket-autopilot.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAc,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAA4C,KAAK,QAAQ,EAAuB,MAAM,mCAAmC,CAAC;AACjI,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC5F,OAAO,EAGL,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,EAClC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAaL,KAAK,cAAc,EAEpB,MAAM,gCAAgC,CAAC;AAsBxC,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnC,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,gDAAgD;AAChD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,oCAAoC;AACpC,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACvD;AAED,gEAAgE;AAChE,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,mBAAmB,CAAA;KAAE,CAAC,CAAC;IAClG,kBAAkB,CAAC,CAAC,MAAM,EAAE,4BAA4B,GAAG,IAAI,GAAG,IAAI,CAAC;CACxE;AAED,wEAAwE;AACxE,MAAM,WAAW,qBAAqB;IACpC,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxF;AAED,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,oBAAoB;AACpB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,0BAA0B,CAAC;IACpC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,wBAAwB,CAAC;IACpC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,8FAA8F;IAC9F,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAkBD,+BAA+B;AAC/B,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;CACjC;AAED,6DAA6D;AAC7D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAYD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuC;IAE9D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,KAAK,CAA+C;IAC5D,oFAAoF;IACpF,OAAO,CAAC,KAAK,CAAuC;IAEpD;;OAEG;gBACS,IAAI,EAAE,mBAAmB;IAMrC;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,sBAAsB,GAAG,IAAI;IAInD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI;IAQhE;;;;OAIG;IACH,KAAK,CAAC,UAAU,GAAE,MAAoD,GAAG,IAAI;IAY7E,2CAA2C;IAC3C,IAAI,IAAI,IAAI;IAMZ;;;;OAIG;IACH,MAAM,IAAI,4BAA4B;IAmBtC;;;;;;;OAOG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAMzF;;;;;;;;OAQG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,4BAA4B,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA0BnI;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAuB1C;;;;;;;OAOG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA2BjE;;;;;;;;OAQG;YACW,eAAe;IAuG7B;;;;;;;;OAQG;YACW,cAAc;IAsB5B;;;;;OAKG;YACW,qBAAqB;IAgCnC;;;;;OAKG;YACW,aAAa;IA+B3B;;;;;;;;OAQG;YACW,kBAAkB;IAgBhC;;;;;OAKG;YACW,QAAQ;IAoBtB;;;;;;OAMG;YACW,iBAAiB;IAO/B;;;;;OAKG;YACW,YAAY;IAI1B;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAShB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAYrB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAclB;;;;;OAKG;IACH,OAAO,CAAC,MAAM;IAMd;;;;OAIG;YACW,SAAS;IAYvB,6CAA6C;YAC/B,SAAS;CAQxB"}