crewly 1.20.161 → 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 (137) 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 +84 -1
  8. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  9. package/dist/backend/backend/src/constants.js +105 -16
  10. package/dist/backend/backend/src/constants.js.map +1 -1
  11. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +43 -0
  12. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
  13. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +85 -0
  14. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
  15. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +12 -0
  16. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +19 -1
  18. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -1
  19. package/dist/backend/backend/src/index.d.ts.map +1 -1
  20. package/dist/backend/backend/src/index.js +30 -1
  21. package/dist/backend/backend/src/index.js.map +1 -1
  22. package/dist/backend/backend/src/models/Project.d.ts +3 -0
  23. package/dist/backend/backend/src/models/Project.d.ts.map +1 -1
  24. package/dist/backend/backend/src/models/Project.js +7 -0
  25. package/dist/backend/backend/src/models/Project.js.map +1 -1
  26. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  27. package/dist/backend/backend/src/routes/api.routes.js +3 -1
  28. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  29. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +66 -13
  30. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +161 -32
  32. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  33. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +48 -0
  34. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
  35. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +77 -1
  36. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
  37. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +223 -0
  38. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -0
  39. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +240 -0
  40. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -0
  41. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts +94 -0
  42. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts.map +1 -0
  43. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js +195 -0
  44. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js.map +1 -0
  45. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +286 -0
  46. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -0
  47. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +626 -0
  48. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -0
  49. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +37 -3
  50. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +57 -6
  52. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  53. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +21 -1
  54. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +62 -4
  56. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  57. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +6 -0
  58. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +9 -5
  60. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/task-pool/claim.service.d.ts +23 -3
  62. package/dist/backend/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/task-pool/claim.service.js +52 -11
  64. package/dist/backend/backend/src/services/task-pool/claim.service.js.map +1 -1
  65. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +42 -0
  66. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +82 -1
  68. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  69. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.d.ts +19 -0
  70. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.js +33 -0
  72. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.js.map +1 -1
  73. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +28 -0
  74. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +74 -29
  76. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +3 -2
  79. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  80. package/dist/backend/backend/src/types/index.d.ts +6 -0
  81. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  82. package/dist/backend/backend/src/types/index.js.map +1 -1
  83. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +73 -0
  84. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -0
  85. package/dist/backend/backend/src/types/ticket-autopilot.types.js +88 -0
  86. package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -0
  87. package/dist/backend/backend/src/types/v2/claim.types.d.ts +27 -0
  88. package/dist/backend/backend/src/types/v2/claim.types.d.ts.map +1 -1
  89. package/dist/backend/backend/src/types/v2/claim.types.js +37 -0
  90. package/dist/backend/backend/src/types/v2/claim.types.js.map +1 -1
  91. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +1 -1
  92. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  93. package/dist/backend/backend/src/types/v2/work-item.types.js +1 -0
  94. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  95. package/dist/backend/build-info.json +2 -2
  96. package/dist/cli/backend/src/constants.d.ts +84 -1
  97. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  98. package/dist/cli/backend/src/constants.js +105 -16
  99. package/dist/cli/backend/src/constants.js.map +1 -1
  100. package/dist/cli/backend/src/models/Project.d.ts +3 -0
  101. package/dist/cli/backend/src/models/Project.d.ts.map +1 -1
  102. package/dist/cli/backend/src/models/Project.js +7 -0
  103. package/dist/cli/backend/src/models/Project.js.map +1 -1
  104. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +66 -13
  105. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  106. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +161 -32
  107. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  108. package/dist/cli/backend/src/services/task-pool/claim.service.d.ts +23 -3
  109. package/dist/cli/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
  110. package/dist/cli/backend/src/services/task-pool/claim.service.js +52 -11
  111. package/dist/cli/backend/src/services/task-pool/claim.service.js.map +1 -1
  112. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +42 -0
  113. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  114. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +82 -1
  115. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  116. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.d.ts +19 -0
  117. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.d.ts.map +1 -1
  118. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.js +33 -0
  119. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.js.map +1 -1
  120. package/dist/cli/backend/src/types/index.d.ts +6 -0
  121. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  122. package/dist/cli/backend/src/types/index.js.map +1 -1
  123. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +73 -0
  124. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -0
  125. package/dist/cli/backend/src/types/ticket-autopilot.types.js +88 -0
  126. package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -0
  127. package/dist/cli/backend/src/types/v2/claim.types.d.ts +27 -0
  128. package/dist/cli/backend/src/types/v2/claim.types.d.ts.map +1 -1
  129. package/dist/cli/backend/src/types/v2/claim.types.js +37 -0
  130. package/dist/cli/backend/src/types/v2/claim.types.js.map +1 -1
  131. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +1 -1
  132. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  133. package/dist/cli/backend/src/types/v2/work-item.types.js +1 -0
  134. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  135. package/frontend/dist/assets/{index-8f30aa74.js → index-64c8a616.js} +2 -2
  136. package/frontend/dist/index.html +1 -1
  137. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  import { Project } from '../types/index.js';
2
+ import type { TicketAutopilotSettings } from '../types/ticket-autopilot.types.js';
2
3
  export declare class ProjectModel implements Project {
3
4
  id: string;
4
5
  name: string;
@@ -7,6 +8,8 @@ export declare class ProjectModel implements Project {
7
8
  status: 'active' | 'paused' | 'completed' | 'stopped';
8
9
  /** Onboarding v3 (B1) — see `Project.firstLaunchedAt` for semantics. */
9
10
  firstLaunchedAt?: string;
11
+ /** Ticket autopilot switch — see `Project.ticketAutopilot`. */
12
+ ticketAutopilot?: TicketAutopilotSettings;
10
13
  createdAt: string;
11
14
  updatedAt: string;
12
15
  constructor(data: Partial<Project>);
@@ -1 +1 @@
1
- {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../../../../backend/src/models/Project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,qBAAa,YAAa,YAAW,OAAO;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACtD,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;gBAEN,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;IAWlC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAK7C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAU9C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBjD,gBAAgB,IAAI,MAAM,EAAE;IAI5B,MAAM,IAAI,OAAO;IAkBjB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY;CAG7C"}
1
+ {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../../../../backend/src/models/Project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF,qBAAa,YAAa,YAAW,OAAO;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACtD,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;gBAEN,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;IAYlC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAK7C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAU9C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBjD,gBAAgB,IAAI,MAAM,EAAE;IAI5B,MAAM,IAAI,OAAO;IAsBjB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY;CAG7C"}
@@ -6,6 +6,8 @@ export class ProjectModel {
6
6
  status;
7
7
  /** Onboarding v3 (B1) — see `Project.firstLaunchedAt` for semantics. */
8
8
  firstLaunchedAt;
9
+ /** Ticket autopilot switch — see `Project.ticketAutopilot`. */
10
+ ticketAutopilot;
9
11
  createdAt;
10
12
  updatedAt;
11
13
  constructor(data) {
@@ -15,6 +17,7 @@ export class ProjectModel {
15
17
  this.teams = data.teams || {};
16
18
  this.status = data.status || 'stopped';
17
19
  this.firstLaunchedAt = data.firstLaunchedAt;
20
+ this.ticketAutopilot = data.ticketAutopilot ? { ...data.ticketAutopilot } : undefined;
18
21
  this.createdAt = data.createdAt || new Date().toISOString();
19
22
  this.updatedAt = data.updatedAt || new Date().toISOString();
20
23
  }
@@ -70,6 +73,10 @@ export class ProjectModel {
70
73
  if (this.firstLaunchedAt !== undefined) {
71
74
  json.firstLaunchedAt = this.firstLaunchedAt;
72
75
  }
76
+ // Same for the ticket autopilot switch: absent means off.
77
+ if (this.ticketAutopilot !== undefined) {
78
+ json.ticketAutopilot = { ...this.ticketAutopilot };
79
+ }
73
80
  return json;
74
81
  }
75
82
  static fromJSON(data) {
@@ -1 +1 @@
1
- {"version":3,"file":"Project.js","sourceRoot":"","sources":["../../../../../backend/src/models/Project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Project.js","sourceRoot":"","sources":["../../../../../backend/src/models/Project.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.routes.d.ts","sourceRoot":"","sources":["../../../../../backend/src/routes/api.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AA0EjE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAuSpE"}
1
+ {"version":3,"file":"api.routes.d.ts","sourceRoot":"","sources":["../../../../../backend/src/routes/api.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AA0EjE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAySpE"}
@@ -41,7 +41,7 @@ import { createIntentTaskRouter } from '../controllers/intent-task/intent-task.r
41
41
  import { createTaskPoolRouter, createTaskScoreRouter } from '../controllers/task-pool/task-pool.routes.js';
42
42
  import { createRequestRouter } from '../controllers/request/request.routes.js';
43
43
  import { createTicketsRouter } from '../controllers/tickets/tickets.routes.js';
44
- import { createProjectTicketsMigrationRouter, createProjectTicketsRouter } from '../controllers/project-tickets/project-tickets.routes.js';
44
+ import { createProjectTicketsMigrationRouter, createProjectTicketsRouter, createTicketAutopilotRouter } from '../controllers/project-tickets/project-tickets.routes.js';
45
45
  import { createOwnerReceiptRouter } from '../controllers/owner-receipt/owner-receipt.routes.js';
46
46
  import { createHarnessRouter } from '../controllers/harness/harness.routes.js';
47
47
  import { createSkillSetupRouter } from '../controllers/skill-setup/skill-setup.routes.js';
@@ -159,6 +159,8 @@ export function createApiRoutes(apiController) {
159
159
  // backlog, one markdown file per ticket in <project>/.crewly/tickets/.
160
160
  router.use('/project-tickets', createProjectTicketsRouter());
161
161
  router.use('/project-tickets-migrate', createProjectTicketsMigrationRouter());
162
+ // Ticket autopilot switch (specs/2026-09-30-ticket-autopilot.md), owner / orchestrator only.
163
+ router.use('/project-ticket-autopilot', createTicketAutopilotRouter());
162
164
  // #828: the daily owner receipt (dashboard data + settings + send now)
163
165
  router.use('/owner-receipt', createOwnerReceiptRouter());
164
166
  // Harness onboarding (specs/onboarding-harness-login.md): detect, install,
@@ -1 +1 @@
1
- {"version":3,"file":"api.routes.js","sourceRoot":"","sources":["../../../../../backend/src/routes/api.routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.routes.js","sourceRoot":"","sources":["../../../../../backend/src/routes/api.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAmB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,+BAA+B,EAAE,MAAM,0DAA0D,CAAC;AAC3G,OAAO,EAAE,kCAAkC,EAAE,MAAM,0EAA0E,CAAC;AAC9H,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAC3G,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,mCAAmC,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,0DAA0D,CAAC;AACxK,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,2BAA2B,EAAE,MAAM,4DAA4D,CAAC;AACzG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mDAAmD,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4EAA4E,CAAC;AAC9H,OAAO,oBAAoB,MAAM,0DAA0D,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAC;AAClG,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,0CAA0C,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,aAA4B;IAC1D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,kEAAkE;IAClE,MAAM,OAAO,GAAe;QAC1B,cAAc,EAAE,aAAa,CAAC,cAAc;QAC5C,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,wBAAwB,EAAE,aAAa,CAAC,wBAAwB;QAChE,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,uBAAuB,EAAE,aAAa,CAAC,uBAAuB;QAC9D,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;QAC1D,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;QAC1D,+BAA+B,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YAC3D,gEAAgE;YAChE,MAAM,EAAE,+BAA+B,EAAE,GAAG,MAAM,MAAM,CAAC,8CAA8C,CAAC,CAAC;YACzG,OAAO,+BAA+B,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;IAEF,6CAA6C;IAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1C,sCAAsC;IACtC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE9C,kEAAkE;IAClE,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;IAEvD,uBAAuB;IACvB,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAElD,kCAAkC;IAClC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACvD,8EAA8E;IAC9E,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAE5C,gCAAgC;IAChC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAE9C,8BAA8B;IAC9B,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAExD,kEAAkE;IAClE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAE5C,2EAA2E;IAC3E,kFAAkF;IAClF,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAExC,kEAAkE;IAClE,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAEtD,wEAAwE;IACxE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAExD,8EAA8E;IAC9E,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAEtD,iEAAiE;IACjE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAEjD,sDAAsD;IACtD,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE9C,kEAAkE;IAClE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE9C,6DAA6D;IAC7D,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAExD,sFAAsF;IACtF,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAG1C,gEAAgE;IAChE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAEjD,sEAAsE;IACtE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAElD,kFAAkF;IAClF,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAErD,8CAA8C;IAC9C,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE9C,6EAA6E;IAC7E,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAEzD,yEAAyE;IACzE,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,CAAC,CAAC;IAE/D,4EAA4E;IAC5E,uEAAuE;IACvE,kFAAkF;IAClF,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAE7D,iEAAiE;IACjE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAEpD,sFAAsF;IACtF,oFAAoF;IACpF,MAAM,CAAC,GAAG,CAAC,0BAA0B,EAAE,kCAAkC,EAAE,CAAC,CAAC;IAE7E,4DAA4D;IAC5D,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAE3C,qEAAqE;IACrE,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAEtD,0CAA0C;IAC1C,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE/C,uEAAuE;IACvE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC9C,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,CAAC,0BAA0B,EAAE,mCAAmC,EAAE,CAAC,CAAC;IAC9E,6FAA6F;IAC7F,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACvE,uEAAuE;IACvE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAEzD,2EAA2E;IAC3E,iEAAiE;IACjE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE9C,sEAAsE;IACtE,2EAA2E;IAC3E,oEAAoE;IACpE,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACrD,uEAAuE;IACvE,0EAA0E;IAC1E,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAE7C,oDAAoD;IACpD,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAEjD,kFAAkF;IAClF,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAE9C,uEAAuE;IACvE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAEpD,iFAAiF;IACjF,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,CAAC,CAAC;IAE/D,kEAAkE;IAClE,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAErD,yEAAyE;IACzE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE9C,2DAA2D;IAC3D,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAErD,4DAA4D;IAC5D,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAExD,kFAAkF;IAClF,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE/C,qEAAqE;IACrE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAE5C,2EAA2E;IAC3E,iFAAiF;IACjF,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC5C,sEAAsE;IACtE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE9C,0FAA0F;IAC1F,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAE1C,uGAAuG;IACvG,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAE3D,oDAAoD;IACpD,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAEnD,6EAA6E;IAC7E,6EAA6E;IAC7E,qEAAqE;IACrE,6BAA6B;IAC7B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,gCAAgC,EAAE,CAAC,CAAC;IAE1D,2EAA2E;IAC3E,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;IAErD,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAEnD,yEAAyE;IACzE,kFAAkF;IAClF,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAEhD,uEAAuE;IACvE,8EAA8E;IAC9E,sDAAsD;IACtD,EAAE;IACF,0EAA0E;IAC1E,iEAAiE;IACjE,oEAAoE;IACpE,qDAAqD;IACrD,EAAE;IACF,uEAAuE;IACvE,mEAAmE;IACnE,wEAAwE;IACxE,mEAAmE;IACnE,8DAA8D;IAC9D,MAAM,aAAa,GAAG,gBAAgB,CAAC;QACrC,sBAAsB,EAAE,gCAAgC,EAAE;KAC3D,CAAC,CAAC;IACH,wEAAwE;IACxE,wEAAwE;IACxE,0EAA0E;IAC1E,oEAAoE;IACpE,6EAA6E;IAC7E,0EAA0E;IAC1E,6BAA6B;IAC7B,aAAa,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,CACR,OAAO,EACP,kBAAkB,CAAC,aAAa,EAAE;QAChC,SAAS,EAAE,+BAA+B,CAAC,aAAa,CAAC,cAAc,CAAC;QACxE,QAAQ,EAAE,8BAA8B,CAAC,aAAa,CAAC,cAAc,CAAC;KACvE,CAAC,CACH,CAAC;IAEF,wFAAwF;IACxF,kFAAkF;IAClF,4BAA4B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACpD,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5C,uBAAuB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/C,sBAAsB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,yBAAyB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACjD,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,8BAA8B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtD,yBAAyB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACjD,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5C,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,kDAAkD;IAClD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,6CAA6C,CAAC,CAAC;YAChG,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1E,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,6CAA6C,CAAC,CAAC;YAChG,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YACrD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACvG,+DAA+D;YAC/D,qEAAqE;YACrE,kEAAkE;YAClE,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC9E,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wDAAwD,EAAE,CAAC,CAAC;gBAC1G,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,WAAW,EAAE,CAAC,OAAO,CAChE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,IAAI,MAAM,EAAE,OAAO,CACzD,CAAC;YACF,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACjG,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,EAAE;IACF,yEAAyE;IACzE,iFAAiF;IACjF,sFAAsF;IACtF,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,mEAAmE;IACnE,MAAM,mBAAmB,GAAG,CAAC,IAA+B,EAAE,GAA+B,EAAQ,EAAE;QACrG,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACpG,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;IAErD,wEAAwE;IACxE,uDAAuD;IACvD,MAAM,wBAAwB,GAAG,CAAC,IAA+B,EAAE,GAA+B,EAAQ,EAAE;QAC1G,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,wBAAwB,CAAC,CAAC;IAEhE,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -25,6 +25,37 @@ import type { RuntimeType } from '../../constants.js';
25
25
  import type { EventBusService } from '../event-bus/event-bus.service.js';
26
26
  import type { EnqueueMessageInput } from '../../types/messaging.types.js';
27
27
  import type { ExpiryReport } from '../harness/harness-relogin.service.js';
28
+ /**
29
+ * The part of a captured screen where a sign-in prompt can be: the last
30
+ * `TAIL_LINES` non-empty lines, and among them the ones that are not the
31
+ * agent's own transcript. A transcript block opens with a marker
32
+ * (`⏺`, `⎿`, `•`, …) and runs over blank lines and indented continuation
33
+ * lines until a line that is neither — which is why the scan covers the
34
+ * whole screen, not just the tail.
35
+ *
36
+ * @param screen - ANSI-free screen text
37
+ * @returns `tail` (every tail line) and `signInLines` (tail minus transcript)
38
+ */
39
+ export declare function loginScreenRegion(screen: string): {
40
+ tail: string[];
41
+ signInLines: string[];
42
+ };
43
+ /**
44
+ * Owner-facing sign-in notice. Written for an owner who is on a phone, not
45
+ * at the machine: it names the agent, gives the login link and code when the
46
+ * screen showed them, and says what to reply to get the phone re-login.
47
+ *
48
+ * @param info - The pending login record
49
+ * @param agentName - Display name of the agent (falls back to the session name)
50
+ * @returns The notice text
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * formatLoginNotice({ sessionName: 's', runtimeType: 'claude-code', url: null, code: null, ... }, 'Atlas');
55
+ * // → 'Atlas needs you to sign in to Claude Code. Reply 「重新登录 claude」 (or "relogin claude") to Crewly and it will send you a sign-in link.'
56
+ * ```
57
+ */
58
+ export declare function formatLoginNotice(info: LoginRequiredInfo, agentName?: string | null): string;
28
59
  /**
29
60
  * URL capture mode — active after /login is sent, waiting for OAuth URL.
30
61
  */
@@ -122,6 +153,8 @@ export interface LoginNoticeSlackLike {
122
153
  * `/login` or its own sign-in notice for that session.
123
154
  */
124
155
  export type HarnessExpiryHandler = (report: ExpiryReport) => boolean;
156
+ /** Looks up an agent's display name by its session name (null when unknown). */
157
+ export type AgentNameResolver = (sessionName: string) => Promise<string | null> | string | null;
125
158
  /**
126
159
  * Minimal chat surface (terminal gateway + chat-v2) for surfacing the notice
127
160
  * in the orchestrator conversation the owner is looking at.
@@ -169,6 +202,8 @@ export declare class OAuthReloginMonitorService {
169
202
  private sweepTimer;
170
203
  /** Slack re-login coordinator for expired harness logins (optional) */
171
204
  private harnessExpiryHandler;
205
+ /** Session name → agent display name, for the owner-facing notice (optional) */
206
+ private agentNameResolver;
172
207
  private constructor();
173
208
  /**
174
209
  * Provide the orchestrator message queue used to push the owner-facing
@@ -192,6 +227,22 @@ export declare class OAuthReloginMonitorService {
192
227
  * @param provider - Returns the chat surface, or null when unavailable
193
228
  */
194
229
  setChatProvider(provider: (() => LoginNoticeChatLike | null) | null): void;
230
+ /**
231
+ * Provide a session → display-name lookup so the sign-in notice names the
232
+ * agent ("Atlas") instead of its session id.
233
+ *
234
+ * @param resolver - Lookup, or null to fall back to the session name
235
+ */
236
+ setAgentNameResolver(resolver: AgentNameResolver | null): void;
237
+ /**
238
+ * Display name for a session: the orchestrator's fixed name, else the
239
+ * resolver's answer, else null (the notice then uses the session name).
240
+ * Synchronous when there is nothing to look up.
241
+ *
242
+ * @param sessionName - PTY session name
243
+ * @returns Display name or null (or a promise of it when the resolver is async)
244
+ */
245
+ private resolveAgentName;
195
246
  /**
196
247
  * Hand expired harness logins to a coordinator (Slack re-login) instead
197
248
  * of sending `/login` into each agent and notifying per agent.
@@ -247,23 +298,32 @@ export declare class OAuthReloginMonitorService {
247
298
  clearLoginRequired(sessionName: string): boolean;
248
299
  /**
249
300
  * Inspect screen text for a sign-in screen and extract the login URL and
250
- * device code. Runtime-agnostic: the pattern sets in
251
- * `LOGIN_REQUIRED_PATTERN_SETS` cover Codex (device-code and browser
252
- * flows), Claude Code and Gemini CLI. Plain substring matching — no regex
253
- * on untrusted length.
301
+ * device code. Only the runtime's own sign-in patterns are tried
302
+ * (`LOGIN_REQUIRED_PATTERN_SETS`; every runtime's when it is unknown).
303
+ * Plain substring matching — no regex on untrusted length.
304
+ *
305
+ * `screen` scope (a captured live screen — this decides): only the last
306
+ * `LOGIN_SCREEN_REGION.TAIL_LINES` non-empty lines count, the agent's own
307
+ * transcript blocks among them are skipped, and a busy runtime or one at
308
+ * its chat prompt is never on a sign-in screen. `trigger` scope (the
309
+ * rolling PTY buffer, whose redraws have no reliable "bottom") matches the
310
+ * whole text and is only a cue to capture and inspect the live screen.
254
311
  *
255
312
  * @param screen - Captured terminal text (ANSI is stripped defensively)
313
+ * @param runtimeType - Session runtime, or null to try every runtime's patterns
314
+ * @param scope - `screen` (strict, default) or `trigger` (rolling buffer)
256
315
  * @returns The extracted url/code, or null when no sign-in screen is showing
257
316
  *
258
317
  * @example
259
318
  * ```typescript
260
319
  * monitor.detectLoginRequired(
261
- * 'Go to https://auth.openai.com/codex/device and enter code FBVZ-MJHKK'
320
+ * 'Go to https://auth.openai.com/codex/device and enter code FBVZ-MJHKK',
321
+ * 'codex-cli',
262
322
  * );
263
323
  * // → { url: 'https://auth.openai.com/codex/device', code: 'FBVZ-MJHKK' }
264
324
  * ```
265
325
  */
266
- detectLoginRequired(screen: string): LoginRequiredDetection | null;
326
+ detectLoginRequired(screen: string, runtimeType?: RuntimeType | null, scope?: 'screen' | 'trigger'): LoginRequiredDetection | null;
267
327
  /**
268
328
  * Check one session's current screen for a sign-in state, flag/notify on
269
329
  * a new detection, and clear the flag once login is done.
@@ -287,13 +347,6 @@ export declare class OAuthReloginMonitorService {
287
347
  * @param info - The pending login record
288
348
  */
289
349
  private notifyLoginRequired;
290
- /**
291
- * Human-readable notice: "Agent X needs you to sign in: <url> code <XXXX-XXXXX>".
292
- *
293
- * @param info - The pending login record
294
- * @returns The notice text
295
- */
296
- private formatLoginNotice;
297
350
  /**
298
351
  * Find a device/authorization code such as `FBVZ-MJHKK`: an upper-case
299
352
  * alphanumeric head of `DEVICE_CODE_HEAD_LEN` chars, a dash, and a tail of
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-relogin-monitor.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/oauth-relogin-monitor.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-relogin-monitor.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/oauth-relogin-monitor.service.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ import { v4 as uuidv4 } from 'uuid';
25
25
  import { LoggerService } from '../core/logger.service.js';
26
26
  import { getSessionBackendSync, } from '../session/index.js';
27
27
  import { stripAnsiCodes } from '../../utils/terminal-output.utils.js';
28
- import { OAUTH_RELOGIN_CONSTANTS, OAUTH_ERROR_PATTERN_SETS, LOGIN_REQUIRED_PATTERN_SETS, LOGIN_COMPLETED_MARKERS, LOGIN_REQUIRED_CONSTANTS, ORCHESTRATOR_SESSION_NAME, RUNTIME_TYPES, } from '../../constants.js';
28
+ import { OAUTH_RELOGIN_CONSTANTS, OAUTH_ERROR_PATTERN_SETS, LOGIN_REQUIRED_PATTERN_SETS, LOGIN_SCREEN_REGION, LOGIN_COMPLETED_MARKERS, LOGIN_REQUIRED_CONSTANTS, ORCHESTRATOR_SESSION_NAME, RUNTIME_TYPES, } from '../../constants.js';
29
29
  import { detectLoginExpiry } from '../harness/login-expiry-rules.js';
30
30
  /**
31
31
  * Runtimes Crewly must never type `/login` into. Antigravity CLI runs only on
@@ -33,6 +33,93 @@ import { detectLoginExpiry } from '../harness/login-expiry-rules.js';
33
33
  * account (OAuth) login, and agy has no `/login` command anyway.
34
34
  */
35
35
  const NO_RELOGIN_COMMAND_RUNTIMES = new Set([RUNTIME_TYPES.ANTIGRAVITY_CLI]);
36
+ /**
37
+ * Sign-in pattern sets for a runtime; every runtime's when it is unknown.
38
+ *
39
+ * @param runtimeType - Session runtime, or null
40
+ * @returns Pattern sets to try (AND within a set)
41
+ */
42
+ function loginPatternSetsFor(runtimeType) {
43
+ if (runtimeType === null)
44
+ return Object.values(LOGIN_REQUIRED_PATTERN_SETS).flat();
45
+ return LOGIN_REQUIRED_PATTERN_SETS[runtimeType] ?? [];
46
+ }
47
+ /**
48
+ * The part of a captured screen where a sign-in prompt can be: the last
49
+ * `TAIL_LINES` non-empty lines, and among them the ones that are not the
50
+ * agent's own transcript. A transcript block opens with a marker
51
+ * (`⏺`, `⎿`, `•`, …) and runs over blank lines and indented continuation
52
+ * lines until a line that is neither — which is why the scan covers the
53
+ * whole screen, not just the tail.
54
+ *
55
+ * @param screen - ANSI-free screen text
56
+ * @returns `tail` (every tail line) and `signInLines` (tail minus transcript)
57
+ */
58
+ export function loginScreenRegion(screen) {
59
+ const { TAIL_LINES, TRANSCRIPT_MARKERS, TRANSCRIPT_INDENT } = LOGIN_SCREEN_REGION;
60
+ const indent = ' '.repeat(TRANSCRIPT_INDENT);
61
+ const lines = [];
62
+ let inBlock = false;
63
+ for (const text of screen.split(/\r?\n/)) {
64
+ const trimmed = text.trimStart();
65
+ if (trimmed.length === 0)
66
+ continue;
67
+ if (TRANSCRIPT_MARKERS.some((marker) => trimmed.startsWith(marker))) {
68
+ inBlock = true;
69
+ }
70
+ else if (!text.startsWith(indent)) {
71
+ inBlock = false;
72
+ }
73
+ lines.push({ text, transcript: inBlock });
74
+ }
75
+ const tail = lines.slice(-TAIL_LINES);
76
+ return {
77
+ tail: tail.map((line) => line.text),
78
+ signInLines: tail.filter((line) => !line.transcript).map((line) => line.text),
79
+ };
80
+ }
81
+ /**
82
+ * What the owner replies (in their Slack DM with Crewly) to start the phone
83
+ * re-login for a runtime — the phrases `parseOwnerLoginRequest` accepts.
84
+ * Only harnesses with a broker login are listed.
85
+ */
86
+ const PHONE_RELOGIN_REPLIES = {
87
+ [RUNTIME_TYPES.CLAUDE_CODE]: { label: 'Claude Code', zh: '重新登录 claude', en: 'relogin claude' },
88
+ [RUNTIME_TYPES.CODEX_CLI]: { label: 'Codex', zh: '重新登录 codex', en: 'relogin codex' },
89
+ };
90
+ /**
91
+ * Owner-facing sign-in notice. Written for an owner who is on a phone, not
92
+ * at the machine: it names the agent, gives the login link and code when the
93
+ * screen showed them, and says what to reply to get the phone re-login.
94
+ *
95
+ * @param info - The pending login record
96
+ * @param agentName - Display name of the agent (falls back to the session name)
97
+ * @returns The notice text
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * formatLoginNotice({ sessionName: 's', runtimeType: 'claude-code', url: null, code: null, ... }, 'Atlas');
102
+ * // → 'Atlas needs you to sign in to Claude Code. Reply 「重新登录 claude」 (or "relogin claude") to Crewly and it will send you a sign-in link.'
103
+ * ```
104
+ */
105
+ export function formatLoginNotice(info, agentName = null) {
106
+ const name = agentName?.trim() || info.sessionName;
107
+ const phone = info.runtimeType ? PHONE_RELOGIN_REPLIES[info.runtimeType] : undefined;
108
+ let text = `${name} needs you to sign in${phone ? ` to ${phone.label}` : ''}`;
109
+ if (info.url)
110
+ text += `: ${info.url}`;
111
+ if (info.code)
112
+ text += ` code ${info.code}`;
113
+ text += '.';
114
+ if (phone) {
115
+ const lead = info.url || info.code ? ' Or reply' : ' Reply';
116
+ text += `${lead} 「${phone.zh}」 (or "${phone.en}") to Crewly and it will send you a sign-in link.`;
117
+ }
118
+ else if (!info.url && !info.code) {
119
+ text += ' It is waiting on its sign-in screen on the machine it runs on.';
120
+ }
121
+ return text;
122
+ }
36
123
  // =============================================================================
37
124
  // Service
38
125
  // =============================================================================
@@ -71,6 +158,8 @@ export class OAuthReloginMonitorService {
71
158
  sweepTimer = null;
72
159
  /** Slack re-login coordinator for expired harness logins (optional) */
73
160
  harnessExpiryHandler = null;
161
+ /** Session name → agent display name, for the owner-facing notice (optional) */
162
+ agentNameResolver = null;
74
163
  constructor() {
75
164
  this.logger = LoggerService.getInstance().createComponentLogger('OAuthReloginMonitor');
76
165
  }
@@ -102,6 +191,36 @@ export class OAuthReloginMonitorService {
102
191
  setChatProvider(provider) {
103
192
  this.chatProvider = provider;
104
193
  }
194
+ /**
195
+ * Provide a session → display-name lookup so the sign-in notice names the
196
+ * agent ("Atlas") instead of its session id.
197
+ *
198
+ * @param resolver - Lookup, or null to fall back to the session name
199
+ */
200
+ setAgentNameResolver(resolver) {
201
+ this.agentNameResolver = resolver;
202
+ }
203
+ /**
204
+ * Display name for a session: the orchestrator's fixed name, else the
205
+ * resolver's answer, else null (the notice then uses the session name).
206
+ * Synchronous when there is nothing to look up.
207
+ *
208
+ * @param sessionName - PTY session name
209
+ * @returns Display name or null (or a promise of it when the resolver is async)
210
+ */
211
+ resolveAgentName(sessionName) {
212
+ if (sessionName === ORCHESTRATOR_SESSION_NAME)
213
+ return 'Orchestrator';
214
+ if (!this.agentNameResolver)
215
+ return null;
216
+ try {
217
+ const name = this.agentNameResolver(sessionName);
218
+ return name instanceof Promise ? name.catch(() => null) : name;
219
+ }
220
+ catch {
221
+ return null;
222
+ }
223
+ }
105
224
  /**
106
225
  * Hand expired harness logins to a coordinator (Slack re-login) instead
107
226
  * of sending `/login` into each agent and notifying per agent.
@@ -204,28 +323,46 @@ export class OAuthReloginMonitorService {
204
323
  }
205
324
  /**
206
325
  * Inspect screen text for a sign-in screen and extract the login URL and
207
- * device code. Runtime-agnostic: the pattern sets in
208
- * `LOGIN_REQUIRED_PATTERN_SETS` cover Codex (device-code and browser
209
- * flows), Claude Code and Gemini CLI. Plain substring matching — no regex
210
- * on untrusted length.
326
+ * device code. Only the runtime's own sign-in patterns are tried
327
+ * (`LOGIN_REQUIRED_PATTERN_SETS`; every runtime's when it is unknown).
328
+ * Plain substring matching — no regex on untrusted length.
329
+ *
330
+ * `screen` scope (a captured live screen — this decides): only the last
331
+ * `LOGIN_SCREEN_REGION.TAIL_LINES` non-empty lines count, the agent's own
332
+ * transcript blocks among them are skipped, and a busy runtime or one at
333
+ * its chat prompt is never on a sign-in screen. `trigger` scope (the
334
+ * rolling PTY buffer, whose redraws have no reliable "bottom") matches the
335
+ * whole text and is only a cue to capture and inspect the live screen.
211
336
  *
212
337
  * @param screen - Captured terminal text (ANSI is stripped defensively)
338
+ * @param runtimeType - Session runtime, or null to try every runtime's patterns
339
+ * @param scope - `screen` (strict, default) or `trigger` (rolling buffer)
213
340
  * @returns The extracted url/code, or null when no sign-in screen is showing
214
341
  *
215
342
  * @example
216
343
  * ```typescript
217
344
  * monitor.detectLoginRequired(
218
- * 'Go to https://auth.openai.com/codex/device and enter code FBVZ-MJHKK'
345
+ * 'Go to https://auth.openai.com/codex/device and enter code FBVZ-MJHKK',
346
+ * 'codex-cli',
219
347
  * );
220
348
  * // → { url: 'https://auth.openai.com/codex/device', code: 'FBVZ-MJHKK' }
221
349
  * ```
222
350
  */
223
- detectLoginRequired(screen) {
351
+ detectLoginRequired(screen, runtimeType = null, scope = 'screen') {
224
352
  if (!screen || typeof screen !== 'string')
225
353
  return null;
226
354
  const clean = stripAnsiCodes(screen);
227
355
  const lower = clean.toLowerCase();
228
- const matched = LOGIN_REQUIRED_PATTERN_SETS.some((patternSet) => patternSet.every((pattern) => lower.includes(pattern.toLowerCase())));
356
+ let region = clean;
357
+ if (scope === 'screen') {
358
+ const { tail, signInLines } = loginScreenRegion(clean);
359
+ const tailLower = tail.join('\n').toLowerCase();
360
+ if (LOGIN_SCREEN_REGION.NOT_SIGN_IN_MARKERS.some((marker) => tailLower.includes(marker)))
361
+ return null;
362
+ region = signInLines.join('\n');
363
+ }
364
+ const regionLower = region.toLowerCase();
365
+ const matched = loginPatternSetsFor(runtimeType).some((patternSet) => patternSet.every((pattern) => regionLower.includes(pattern.toLowerCase())));
229
366
  if (!matched)
230
367
  return null;
231
368
  // Login just finished (e.g. codex's "Signed in with your ChatGPT
@@ -233,8 +370,8 @@ export class OAuthReloginMonitorService {
233
370
  if (LOGIN_COMPLETED_MARKERS.some((marker) => lower.includes(marker)))
234
371
  return null;
235
372
  return {
236
- url: this.extractHttpsUrl(clean, false),
237
- code: this.extractDeviceCode(clean),
373
+ url: this.extractHttpsUrl(region, false),
374
+ code: this.extractDeviceCode(region),
238
375
  };
239
376
  }
240
377
  /**
@@ -250,7 +387,10 @@ export class OAuthReloginMonitorService {
250
387
  // An expired login the Slack re-login coordinator owns: it DMs the
251
388
  // owner once per harness, so this session gets no notice of its own.
252
389
  const handledByRelogin = this.reportHarnessExpiry(sessionName, screen, knownRuntime, 'screen');
253
- const detection = this.detectLoginRequired(screen);
390
+ // An expiry the coordinator took ("⎿ Login expired · Please run /login")
391
+ // is in the transcript, which the sign-in-screen check skips, but the
392
+ // agent still needs a sign-in — keep the flag for the dashboard.
393
+ const detection = this.detectLoginRequired(screen, knownRuntime) ?? (handledByRelogin ? { url: null, code: null } : null);
254
394
  const existing = this.loginRequired.get(sessionName);
255
395
  if (!detection) {
256
396
  if (existing) {
@@ -336,8 +476,11 @@ export class OAuthReloginMonitorService {
336
476
  * @param info - The pending login record
337
477
  */
338
478
  async notifyLoginRequired(info) {
339
- const message = this.formatLoginNotice(info);
479
+ // Mark notified before the name lookup so a sweep during it does not notify twice.
340
480
  info.notifiedAt = new Date().toISOString();
481
+ const pendingName = this.resolveAgentName(info.sessionName);
482
+ const agentName = pendingName instanceof Promise ? await pendingName : pendingName;
483
+ const message = formatLoginNotice(info, agentName);
341
484
  this.logger.warn(`[LOGIN REQUIRED] ${message}`, { sessionName: info.sessionName });
342
485
  // 1. Event bus
343
486
  if (this.eventBusService) {
@@ -432,22 +575,6 @@ export class OAuthReloginMonitorService {
432
575
  }
433
576
  }
434
577
  }
435
- /**
436
- * Human-readable notice: "Agent X needs you to sign in: <url> code <XXXX-XXXXX>".
437
- *
438
- * @param info - The pending login record
439
- * @returns The notice text
440
- */
441
- formatLoginNotice(info) {
442
- const parts = [`Agent ${info.sessionName} needs you to sign in`];
443
- if (info.url)
444
- parts.push(`: ${info.url}`);
445
- if (info.code)
446
- parts.push(` code ${info.code}`);
447
- if (!info.url && !info.code)
448
- parts.push(' (open its terminal to complete login)');
449
- return parts.join('');
450
- }
451
578
  /**
452
579
  * Find a device/authorization code such as `FBVZ-MJHKK`: an upper-case
453
580
  * alphanumeric head of `DEVICE_CODE_HEAD_LEN` chars, a dash, and a tail of
@@ -707,10 +834,12 @@ export class OAuthReloginMonitorService {
707
834
  // are NOT subject to the startup grace period — a fresh install shows
708
835
  // the login screen within seconds of spawn, which is exactly when the
709
836
  // expiry patterns below would still be muted.
710
- if (this.detectLoginRequired(state.buffer)) {
711
- // The buffer is only the trigger — inspect the live screen so the
712
- // URL and code are read together and the flag clears once login is
713
- // done (stale login text lingers in the rolling buffer for a while).
837
+ if (this.detectLoginRequired(state.buffer, state.runtimeType, 'trigger')) {
838
+ // The buffer is only the trigger — the live screen decides, with the
839
+ // strict screen rule (bottom of the screen, no transcript, not busy),
840
+ // so an agent quoting sign-in text in its reply is not a sign-in
841
+ // screen. It also reads URL and code together and clears the flag
842
+ // once login is done (stale login text lingers in the buffer).
714
843
  let screen = '';
715
844
  try {
716
845
  screen = getSessionBackendSync()?.captureOutput(sessionName, LOGIN_REQUIRED_CONSTANTS.SWEEP_CAPTURE_LINES) ?? '';