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
@@ -19,6 +19,7 @@ import { Router } from 'express';
19
19
  * - POST /:project/:id/assign — `{ assignee, start? }`
20
20
  * - POST /:project/:id/log — `{ note }`
21
21
  * - POST /:project/:id/link — `{ workItemId }` (link work already in flight)
22
+ * - POST /:project/:id/ask-owner — `{ question }` / `{ clear: true }` (needs-owner mark)
22
23
  *
23
24
  * @returns Express router for /api/project-tickets
24
25
  */
@@ -32,4 +33,15 @@ export declare function createProjectTicketsRouter(): Router;
32
33
  * @returns Express router for /api/project-tickets-migrate
33
34
  */
34
35
  export declare function createProjectTicketsMigrationRouter(): Router;
36
+ /**
37
+ * Router for the ticket autopilot switch (specs/2026-09-30-ticket-autopilot.md),
38
+ * outside the `/project-tickets/` prefix: it is an owner / orchestrator
39
+ * setting, and project settings are not writable over the mobile relay.
40
+ *
41
+ * - GET /:project — settings + status
42
+ * - POST /:project — `{ enabled?, driver?, dailyBudgetUsd?, maxInFlightPerMember? }`
43
+ *
44
+ * @returns Express router for /api/project-ticket-autopilot
45
+ */
46
+ export declare function createTicketAutopilotRouter(): Router;
35
47
  //# sourceMappingURL=project-tickets.routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-tickets.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/project-tickets/project-tickets.routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAejC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAanD;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAI5D"}
1
+ {"version":3,"file":"project-tickets.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/project-tickets/project-tickets.routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAkBjC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAcnD;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAI5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAKpD"}
@@ -5,7 +5,7 @@
5
5
  * @module controllers/project-tickets/project-tickets.routes
6
6
  */
7
7
  import { Router } from 'express';
8
- import { assignProjectTicket, claimProjectTicket, createProjectTicket, getProjectTicket, linkProjectTicket, listMyProjectTickets, listProjectTickets, logProjectTicket, migrateProjectTickets, transitionProjectTicket, updateProjectTicket, } from './project-tickets.controller.js';
8
+ import { askOwnerProjectTicket, assignProjectTicket, claimProjectTicket, createProjectTicket, getProjectTicket, getTicketAutopilot, linkProjectTicket, listMyProjectTickets, listProjectTickets, logProjectTicket, migrateProjectTickets, setTicketAutopilot, transitionProjectTicket, updateProjectTicket, } from './project-tickets.controller.js';
9
9
  /**
10
10
  * Create the project tickets router.
11
11
  *
@@ -20,6 +20,7 @@ import { assignProjectTicket, claimProjectTicket, createProjectTicket, getProjec
20
20
  * - POST /:project/:id/assign — `{ assignee, start? }`
21
21
  * - POST /:project/:id/log — `{ note }`
22
22
  * - POST /:project/:id/link — `{ workItemId }` (link work already in flight)
23
+ * - POST /:project/:id/ask-owner — `{ question }` / `{ clear: true }` (needs-owner mark)
23
24
  *
24
25
  * @returns Express router for /api/project-tickets
25
26
  */
@@ -35,6 +36,7 @@ export function createProjectTicketsRouter() {
35
36
  router.post('/:project/:id/assign', assignProjectTicket);
36
37
  router.post('/:project/:id/log', logProjectTicket);
37
38
  router.post('/:project/:id/link', linkProjectTicket);
39
+ router.post('/:project/:id/ask-owner', askOwnerProjectTicket);
38
40
  return router;
39
41
  }
40
42
  /**
@@ -50,4 +52,20 @@ export function createProjectTicketsMigrationRouter() {
50
52
  router.post('/:project', migrateProjectTickets);
51
53
  return router;
52
54
  }
55
+ /**
56
+ * Router for the ticket autopilot switch (specs/2026-09-30-ticket-autopilot.md),
57
+ * outside the `/project-tickets/` prefix: it is an owner / orchestrator
58
+ * setting, and project settings are not writable over the mobile relay.
59
+ *
60
+ * - GET /:project — settings + status
61
+ * - POST /:project — `{ enabled?, driver?, dailyBudgetUsd?, maxInFlightPerMember? }`
62
+ *
63
+ * @returns Express router for /api/project-ticket-autopilot
64
+ */
65
+ export function createTicketAutopilotRouter() {
66
+ const router = Router();
67
+ router.get('/:project', getTicketAutopilot);
68
+ router.post('/:project', setTicketAutopilot);
69
+ return router;
70
+ }
53
71
  //# sourceMappingURL=project-tickets.routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-tickets.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/project-tickets/project-tickets.routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,uBAAuB,CAAC,CAAC;IACjE,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mCAAmC;IACjD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"project-tickets.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/project-tickets/project-tickets.routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,uBAAuB,CAAC,CAAC;IACjE,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mCAAmC;IACjD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B;IACzC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -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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"}
@@ -63,7 +63,7 @@ import { getSlackTypingPlaceholderService } from './services/slack/slack-typing-
63
63
  import { getSlackAgentDmService } from './services/slack/slack-agent-dm.service.js';
64
64
  import { sendBootAnnouncement, isFirstBoot, markBooted } from './services/boot/boot-announce.service.js';
65
65
  import { SubAgentMessageQueue } from './services/messaging/sub-agent-message-queue.service.js';
66
- 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 } from './constants.js';
66
+ 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 } from './constants.js';
67
67
  import { PtyActivityTrackerService } from './services/agent/pty-activity-tracker.service.js';
68
68
  import { InFlightTurnTracker } from './services/restart/in-flight-turn-tracker.service.js';
69
69
  import { TicketIntakeService, setTicketIntakeService, resolveTicketIdForSession, } from './services/v3/ticket-intake.service.js';
@@ -1779,6 +1779,7 @@ export class CrewlyServer {
1779
1779
  const oauthMonitor = OAuthReloginMonitorService.getInstance();
1780
1780
  oauthMonitor.setEventBusService(this.eventBusService);
1781
1781
  oauthMonitor.setNoticeQueue(this.messageQueueService);
1782
+ oauthMonitor.setAgentNameResolver(async (sessionName) => (await this.storageService.findMemberBySessionName(sessionName))?.member.name ?? null);
1782
1783
  oauthMonitor.setSlackProvider(async () => {
1783
1784
  const slack = getSlackService();
1784
1785
  return slack.isConnected() ? slack : null;
@@ -2692,6 +2693,34 @@ export class CrewlyServer {
2692
2693
  const { projectTicketWorkflow } = await import('./controllers/project-tickets/project-tickets.controller.js');
2693
2694
  projectTicketWorkflow().start(this.eventBusService);
2694
2695
  this.logger.info('Project ticket workflow started — tickets follow their WorkItems');
2696
+ // Ticket autopilot (specs/2026-09-30-ticket-autopilot.md): per-project
2697
+ // switch, default off. Wakes a project's lead to triage its backlog and
2698
+ // sends the owner batched questions + an evening digest through the
2699
+ // usual Slack owner-notification path. Kill switch: CREWLY_TICKET_AUTOPILOT=0.
2700
+ if (process.env[TICKET_AUTOPILOT_CONSTANTS.ENV_SWITCH] !== '0') {
2701
+ const { createDefaultTicketAutopilot } = await import('./controllers/project-tickets/project-tickets.controller.js');
2702
+ const { TicketAutopilotService } = await import('./services/project-tickets/ticket-autopilot.service.js');
2703
+ const autopilot = createDefaultTicketAutopilot(async ({ title, message, urgent }) => {
2704
+ const slack = getSlackService();
2705
+ if (!slack.isConnected())
2706
+ return false;
2707
+ await slack.sendNotification({
2708
+ type: 'project_update',
2709
+ title,
2710
+ message,
2711
+ urgency: urgent ? 'high' : 'normal',
2712
+ timestamp: new Date().toISOString(),
2713
+ });
2714
+ return true;
2715
+ });
2716
+ TicketAutopilotService.getInstance()?.stop();
2717
+ TicketAutopilotService.setInstance(autopilot);
2718
+ autopilot.start();
2719
+ this.logger.info('Ticket autopilot started (acts only on projects that switched it on)');
2720
+ }
2721
+ else {
2722
+ this.logger.info('Ticket autopilot off (CREWLY_TICKET_AUTOPILOT=0)');
2723
+ }
2695
2724
  }
2696
2725
  catch (autoClaimErr) {
2697
2726
  this.logger.warn('AgentAutoClaimService initialization failed (non-critical)', {