crewly 1.20.155 → 1.20.157

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 (197) hide show
  1. package/config/skills/agent/core/attach-file/SKILL.md +1 -1
  2. package/config/skills/agent/core/attach-file/execute.sh +1 -1
  3. package/config/skills/agent/core/reply-channel/SKILL.md +4 -1
  4. package/config/skills/agent/core/reply-chat/SKILL.md +17 -0
  5. package/config/skills/agent/core/reply-chat/execute.sh +6 -1
  6. package/config/skills/agent/core/slack-post/SKILL.md +1 -1
  7. package/dist/backend/backend/src/constants.d.ts +195 -4
  8. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  9. package/dist/backend/backend/src/constants.js +208 -6
  10. package/dist/backend/backend/src/constants.js.map +1 -1
  11. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +18 -0
  12. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  13. package/dist/backend/backend/src/controllers/chat/chat.controller.js +42 -6
  14. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  15. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -1
  16. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +5 -0
  17. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -1
  18. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  19. package/dist/backend/backend/src/controllers/slack/slack.controller.js +6 -1
  20. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  21. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts +18 -0
  22. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
  23. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +42 -0
  24. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
  25. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts +1 -0
  26. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js +3 -1
  28. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js.map +1 -1
  29. package/dist/backend/backend/src/index.d.ts.map +1 -1
  30. package/dist/backend/backend/src/index.js +15 -2
  31. package/dist/backend/backend/src/index.js.map +1 -1
  32. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +1 -0
  33. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  34. package/dist/backend/backend/src/services/agent/agent-registration.service.js +18 -4
  35. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  36. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts +13 -0
  37. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  38. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +16 -0
  39. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  40. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -1
  41. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +46 -3
  43. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +17 -4
  46. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  47. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts +93 -6
  48. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  49. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +169 -15
  50. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  51. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +2 -2
  52. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -1
  53. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +15 -2
  54. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -1
  55. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/slack/slack-initializer.js +7 -1
  57. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  58. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +40 -0
  59. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +86 -9
  61. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  62. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +1 -1
  63. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  64. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +33 -4
  65. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  66. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +227 -0
  67. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -0
  68. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +455 -0
  69. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -0
  70. package/dist/backend/backend/src/services/slack/slack-thread-key.d.ts +66 -0
  71. package/dist/backend/backend/src/services/slack/slack-thread-key.d.ts.map +1 -0
  72. package/dist/backend/backend/src/services/slack/slack-thread-key.js +109 -0
  73. package/dist/backend/backend/src/services/slack/slack-thread-key.js.map +1 -0
  74. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +89 -13
  75. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +224 -50
  77. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  78. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts +84 -0
  79. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js +301 -6
  81. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js.map +1 -1
  82. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +8 -0
  83. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js +16 -0
  85. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js.map +1 -1
  86. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts +28 -10
  87. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts.map +1 -1
  88. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js +46 -193
  89. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js.map +1 -1
  90. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +15 -2
  91. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -1
  92. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +26 -4
  93. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -1
  94. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +35 -0
  95. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -1
  96. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -1
  97. package/dist/backend/backend/src/services/v3/request.service.d.ts +2 -0
  98. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  99. package/dist/backend/backend/src/services/v3/request.service.js +16 -4
  100. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  101. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -1
  102. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js +2 -0
  103. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js.map +1 -1
  104. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  105. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +2 -1
  106. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  107. package/dist/backend/backend/src/services/v3/ticket-hygiene.d.ts +162 -0
  108. package/dist/backend/backend/src/services/v3/ticket-hygiene.d.ts.map +1 -0
  109. package/dist/backend/backend/src/services/v3/ticket-hygiene.js +221 -0
  110. package/dist/backend/backend/src/services/v3/ticket-hygiene.js.map +1 -0
  111. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +71 -6
  112. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/v3/ticket-intake.service.js +151 -25
  114. package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  115. package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts +22 -3
  116. package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
  117. package/dist/backend/backend/src/services/v3/ticket-review.service.js +99 -40
  118. package/dist/backend/backend/src/services/v3/ticket-review.service.js.map +1 -1
  119. package/dist/backend/backend/src/types/slack.types.d.ts +43 -0
  120. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  121. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  122. package/dist/backend/backend/src/types/v2/request.types.d.ts +13 -0
  123. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  124. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  125. package/dist/backend/build-info.json +2 -2
  126. package/dist/cli/backend/src/constants.d.ts +195 -4
  127. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  128. package/dist/cli/backend/src/constants.js +208 -6
  129. package/dist/cli/backend/src/constants.js.map +1 -1
  130. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +1 -0
  131. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  132. package/dist/cli/backend/src/services/agent/agent-registration.service.js +18 -4
  133. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  134. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +13 -0
  135. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  136. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +16 -0
  137. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  138. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -1
  139. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  140. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +46 -3
  141. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  142. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  143. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +17 -4
  144. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  145. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts +93 -6
  146. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  147. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +169 -15
  148. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  149. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +40 -0
  150. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  151. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +86 -9
  152. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  153. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +1 -1
  154. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  155. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +33 -4
  156. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  157. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +227 -0
  158. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -0
  159. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +455 -0
  160. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -0
  161. package/dist/cli/backend/src/services/slack/slack-thread-key.d.ts +66 -0
  162. package/dist/cli/backend/src/services/slack/slack-thread-key.d.ts.map +1 -0
  163. package/dist/cli/backend/src/services/slack/slack-thread-key.js +109 -0
  164. package/dist/cli/backend/src/services/slack/slack-thread-key.js.map +1 -0
  165. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +89 -13
  166. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  167. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +224 -50
  168. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  169. package/dist/cli/backend/src/services/v3/request.service.d.ts +2 -0
  170. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  171. package/dist/cli/backend/src/services/v3/request.service.js +16 -4
  172. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  173. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -1
  174. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js +2 -0
  175. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js.map +1 -1
  176. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  177. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +2 -1
  178. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  179. package/dist/cli/backend/src/services/v3/ticket-hygiene.d.ts +162 -0
  180. package/dist/cli/backend/src/services/v3/ticket-hygiene.d.ts.map +1 -0
  181. package/dist/cli/backend/src/services/v3/ticket-hygiene.js +221 -0
  182. package/dist/cli/backend/src/services/v3/ticket-hygiene.js.map +1 -0
  183. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +71 -6
  184. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  185. package/dist/cli/backend/src/services/v3/ticket-intake.service.js +151 -25
  186. package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  187. package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts +22 -3
  188. package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
  189. package/dist/cli/backend/src/services/v3/ticket-review.service.js +99 -40
  190. package/dist/cli/backend/src/services/v3/ticket-review.service.js.map +1 -1
  191. package/dist/cli/backend/src/types/slack.types.d.ts +43 -0
  192. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
  193. package/dist/cli/backend/src/types/slack.types.js.map +1 -1
  194. package/dist/cli/backend/src/types/v2/request.types.d.ts +13 -0
  195. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
  196. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
  197. package/package.json +1 -1
@@ -1,35 +1,53 @@
1
1
  /**
2
2
  * Owner receipt (#828) — the renderer: {@link ReceiptData} → Slack mrkdwn.
3
3
  *
4
- * **All wording and layout lives in this file and nowhere else.** The owner
5
- * has not approved the format yet (Ava's manual receipt of 2026-09-26 is the
6
- * reference: `.crewly/research/2026-09-26-owner-receipt/receipt.slack.md`), so
7
- * changing a label, an emoji or the order of sections must never touch the
8
- * data layer. Pure: same data, same text.
4
+ * **All wording and layout lives in this file and nowhere else.** Pure: same
5
+ * data, same text.
6
+ *
7
+ * Redesigned 2026-09-28 after the owner found the first version overwhelming
8
+ * (14 asks + 17 「等你拍板」 with TKT numbers and his own words cut off
9
+ * mid-sentence). The receipt now says only two things, in Chinese, in at
10
+ * most ten lines:
11
+ *
12
+ * ```
13
+ * *Crewly 小票 · 9/28 周一*
14
+ * *今天做完的*
15
+ * • Think Tank:每天早上 8 点问你一个问题,已经设好
16
+ * • …(at most 3)
17
+ * *需要你决定的*
18
+ * • Atlas:每周一个 30 分钟的聊天,加上每月一场圆桌,哪个现实?
19
+ * • …(at most 3)
20
+ * 另有 N 件,在看板上
21
+ * ```
22
+ *
23
+ * Never: ticket numbers, the owner's own words, counts nobody asked for,
24
+ * lines for what is unknown (不详 / 没记). A section with nothing in it is
25
+ * left out; with nothing in either, the receipt is empty and not sent.
9
26
  *
10
27
  * Slack mrkdwn, not a code block: CJK text breaks monospace alignment on a
11
- * phone and links inside code are not clickable (Ava's format note §8).
28
+ * phone.
12
29
  *
13
30
  * @module services/v3/owner-receipt/owner-receipt.renderer
14
31
  */
15
32
  import type { ReceiptData } from './owner-receipt.types.js';
16
33
  /**
17
- * Escape the characters Slack reserves in message text. The owner's own
18
- * words go through this; links and emphasis are added after.
34
+ * Escape the characters Slack reserves in message text.
19
35
  *
20
36
  * @param text - Plain text
21
37
  * @returns Text safe inside a Slack message
22
38
  */
23
39
  export declare function escapeMrkdwn(text: string): string;
24
40
  /**
25
- * Render a receipt as a Slack message.
41
+ * Render a receipt as a Slack message, or '' when there is nothing to say
42
+ * (nothing notable done, nothing waiting on the owner) — then it is not sent.
26
43
  *
27
44
  * @param data - Receipt data from the data layer
28
- * @returns Slack mrkdwn text
45
+ * @returns Slack mrkdwn text (at most ten lines), or ''
29
46
  *
30
47
  * @example
31
48
  * ```typescript
32
49
  * const text = renderReceiptSlack(buildReceiptData(inputs));
50
+ * if (text) await send(text);
33
51
  * ```
34
52
  */
35
53
  export declare function renderReceiptSlack(data: ReceiptData): string;
@@ -1 +1 @@
1
- {"version":3,"file":"owner-receipt.renderer.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAA4C,WAAW,EAAsC,MAAM,0BAA0B,CAAC;AAsD1I;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAqFD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CA0E5D"}
1
+ {"version":3,"file":"owner-receipt.renderer.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAI5D;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAyBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAY5D"}
@@ -1,68 +1,38 @@
1
1
  /**
2
2
  * Owner receipt (#828) — the renderer: {@link ReceiptData} → Slack mrkdwn.
3
3
  *
4
- * **All wording and layout lives in this file and nowhere else.** The owner
5
- * has not approved the format yet (Ava's manual receipt of 2026-09-26 is the
6
- * reference: `.crewly/research/2026-09-26-owner-receipt/receipt.slack.md`), so
7
- * changing a label, an emoji or the order of sections must never touch the
8
- * data layer. Pure: same data, same text.
4
+ * **All wording and layout lives in this file and nowhere else.** Pure: same
5
+ * data, same text.
6
+ *
7
+ * Redesigned 2026-09-28 after the owner found the first version overwhelming
8
+ * (14 asks + 17 「等你拍板」 with TKT numbers and his own words cut off
9
+ * mid-sentence). The receipt now says only two things, in Chinese, in at
10
+ * most ten lines:
11
+ *
12
+ * ```
13
+ * *Crewly 小票 · 9/28 周一*
14
+ * *今天做完的*
15
+ * • Think Tank:每天早上 8 点问你一个问题,已经设好
16
+ * • …(at most 3)
17
+ * *需要你决定的*
18
+ * • Atlas:每周一个 30 分钟的聊天,加上每月一场圆桌,哪个现实?
19
+ * • …(at most 3)
20
+ * 另有 N 件,在看板上
21
+ * ```
22
+ *
23
+ * Never: ticket numbers, the owner's own words, counts nobody asked for,
24
+ * lines for what is unknown (不详 / 没记). A section with nothing in it is
25
+ * left out; with nothing in either, the receipt is empty and not sent.
9
26
  *
10
27
  * Slack mrkdwn, not a code block: CJK text breaks monospace alignment on a
11
- * phone and links inside code are not clickable (Ava's format note §8).
28
+ * phone.
12
29
  *
13
30
  * @module services/v3/owner-receipt/owner-receipt.renderer
14
31
  */
15
- import { OWNER_RECEIPT_CONSTANTS } from '../../../constants.js';
16
32
  import { localParts } from './owner-receipt-data.js';
17
- /**
18
- * The coverage line (#828): how many messages the owner sent in the window
19
- * and what became of them, so the receipt never looks complete while showing
20
- * part of what he said. Unknown is 不详 — never 0, never left out.
21
- *
22
- * @param coverage - Coverage from the data layer
23
- * @param basis - How the window was chosen (for 今天 vs 这段时间)
24
- * @returns mrkdwn line
25
- */
26
- function coverageLine(coverage, basis) {
27
- const when = basis === 'local_day' ? '今天' : '这段时间';
28
- if (coverage.status === 'unknown')
29
- return `${when}你发了几条消息:不详(这段时间还没有开始记录)`;
30
- return (`${when}你发了 *${coverage.messages} 条消息*:${coverage.created} 条成了事项 · ` +
31
- `${coverage.appended} 条并进已有事项 · ${coverage.ignored} 条没记(确认/寒暄)`);
32
- }
33
- /** Emoji per outcome. */
34
- const OUTCOME_MARK = {
35
- done: '✅',
36
- to_review: '👀',
37
- in_progress: '🔄',
38
- blocked: '⛔',
39
- unowned: '⛔',
40
- dismissed: '✖',
41
- };
42
- /** Deliverable kinds as the count line names them. */
43
- const DELIVERABLE_LABEL = {
44
- pr: 'PR',
45
- issue: 'issue',
46
- file: '文件',
47
- link: '链接',
48
- };
49
- /** Short Chinese names for the time zones the owner is likely in. */
50
- const ZONE_LABEL = {
51
- 'America/New_York': '美东',
52
- 'America/Chicago': '美中',
53
- 'America/Denver': '美山地',
54
- 'America/Los_Angeles': '美西',
55
- 'Asia/Shanghai': '北京',
56
- 'Asia/Hong_Kong': '香港',
57
- 'Asia/Taipei': '台北',
58
- 'Asia/Tokyo': '东京',
59
- 'Europe/London': '伦敦',
60
- UTC: 'UTC',
61
- };
62
33
  const WEEKDAY_ZH = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
63
34
  /**
64
- * Escape the characters Slack reserves in message text. The owner's own
65
- * words go through this; links and emphasis are added after.
35
+ * Escape the characters Slack reserves in message text.
66
36
  *
67
37
  * @param text - Plain text
68
38
  * @returns Text safe inside a Slack message
@@ -71,169 +41,52 @@ export function escapeMrkdwn(text) {
71
41
  return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
72
42
  }
73
43
  /**
74
- * `9/26 周六` and `21:00` for an instant in the owner's zone.
44
+ * `9/28 周一` for an instant in the owner's zone.
75
45
  *
76
46
  * @param iso - Instant
77
47
  * @param tz - Zone
78
- * @returns Date label and time label
48
+ * @returns Date label
79
49
  */
80
- function localLabels(iso, tz) {
50
+ function localDateLabel(iso, tz) {
81
51
  const p = localParts(new Date(iso), tz);
82
- return {
83
- date: `${p.month}/${p.day} ${WEEKDAY_ZH[p.weekday] ?? ''}`.trim(),
84
- time: `${p.hour}:${String(p.minute).padStart(2, '0')}`,
85
- };
86
- }
87
- /**
88
- * One deliverable as mrkdwn: a clickable link, or a file path in backticks.
89
- *
90
- * @param d - Deliverable
91
- * @returns mrkdwn
92
- */
93
- function deliverableText(d) {
94
- if (d.kind === 'file')
95
- return `\`${d.ref.replace(/`/g, "'")}\``;
96
- return `<${d.ref}|${escapeMrkdwn(d.label)}>`;
52
+ return `${p.month}/${p.day} ${WEEKDAY_ZH[p.weekday] ?? ''}`.trim();
97
53
  }
98
54
  /**
99
- * The part after "→" on an ask line.
55
+ * One bullet: `• <who>:<text>`, or `• <text>` when nobody is named.
100
56
  *
101
- * @param a - The ask
102
- * @returns mrkdwn, or '' when there is nothing to add
103
- */
104
- function askTail(a) {
105
- const links = a.deliverables.slice(0, 3).map(deliverableText).join(' · ');
106
- const more = a.deliverables.length > 3 ? ` 等 ${a.deliverables.length} 项` : '';
107
- switch (a.outcome) {
108
- case 'done':
109
- return links ? `${links}${more}` : a.isQuestion ? '已答' : '';
110
- case 'to_review':
111
- return links ? `${links}${more},等你看` : '已答,等你看';
112
- case 'in_progress':
113
- return links ? `在做:${links}${more}` : '在做';
114
- case 'blocked':
115
- return a.blockedReason ? `卡住:${escapeMrkdwn(a.blockedReason)}` : '卡住';
116
- case 'unowned':
117
- return '没人接';
118
- case 'dismissed':
119
- return '不用记';
120
- }
121
- }
122
- /**
123
- * One line per ask.
124
- *
125
- * @param a - The ask
126
- * @returns mrkdwn line
127
- */
128
- function askLine(a) {
129
- const tail = askTail(a);
130
- return `${OUTCOME_MARK[a.outcome]} ${escapeMrkdwn(a.text)}${tail ? ` → ${tail}` : ''}`;
131
- }
132
- /**
133
- * The cost line. A number only when it is real (#812: today's meter is
134
- * cumulative, so it is 没记); "$0" is never shown for missing data.
135
- *
136
- * @param teams - Team name + cost
57
+ * @param who - Team or agent, or null
58
+ * @param text - The line
137
59
  * @returns mrkdwn line
138
60
  */
139
- function costLine(teams) {
140
- if (teams.length === 0)
141
- return '*花费*:没记(今天没有工作项)';
142
- if (teams.every((t) => t.cost.status === 'not_tracked')) {
143
- const meter = teams.some((t) => t.cost.status === 'not_tracked' && t.cost.reason === 'cumulative_meter');
144
- return meter
145
- ? '*花费*:各团队都 没记(成本字段是会话累计值,不是当天花费,#812)'
146
- : '*花费*:各团队都 没记(没有花费数据)';
147
- }
148
- const parts = teams.map((t) => t.cost.status === 'tracked' ? `${escapeMrkdwn(t.team)} $${t.cost.usd.toFixed(2)}` : `${escapeMrkdwn(t.team)} 没记`);
149
- return `*花费*:${parts.join(' · ')}`;
61
+ function bullet(who, text) {
62
+ return `• ${who ? `${escapeMrkdwn(who)}:` : ''}${escapeMrkdwn(text)}`;
150
63
  }
151
64
  /**
152
- * Render a receipt as a Slack message.
65
+ * Render a receipt as a Slack message, or '' when there is nothing to say
66
+ * (nothing notable done, nothing waiting on the owner) — then it is not sent.
153
67
  *
154
68
  * @param data - Receipt data from the data layer
155
- * @returns Slack mrkdwn text
69
+ * @returns Slack mrkdwn text (at most ten lines), or ''
156
70
  *
157
71
  * @example
158
72
  * ```typescript
159
73
  * const text = renderReceiptSlack(buildReceiptData(inputs));
74
+ * if (text) await send(text);
160
75
  * ```
161
76
  */
162
77
  export function renderReceiptSlack(data) {
163
- const tz = data.window.timezone;
164
- const zone = ZONE_LABEL[tz] ?? tz;
165
- const end = localLabels(data.window.to, tz);
166
- const start = localLabels(data.window.from, tz);
167
- const span = data.window.basis === 'since_last_receipt'
168
- ? `(${zone},上次小票 ${start.date === end.date ? '' : `${start.date} `}${start.time} 起)`
169
- : `(${zone} ${start.time}–${end.time})`;
170
- const lines = [`*Crewly 小票 · ${end.date}*${span}`, coverageLine(data.coverage, data.window.basis)];
171
- if (data.askCount === 0) {
172
- lines.push('这段时间你没有提新的事。');
173
- }
174
- else {
175
- const counts = Object.keys(data.outcomes)
176
- .filter((o) => data.outcomes[o] > 0)
177
- // unowned and blocked share the ⛔ mark: count them together.
178
- .reduce((acc, o) => {
179
- const mark = OUTCOME_MARK[o];
180
- const hit = acc.find(([m]) => m === mark);
181
- if (hit)
182
- hit[1] += data.outcomes[o];
183
- else
184
- acc.push([mark, data.outcomes[o]]);
185
- return acc;
186
- }, [])
187
- .map(([m, n]) => `${m} ${n}`)
188
- .join(' · ');
189
- lines.push(`你提了 *${data.askCount} 件事*:${counts}`);
190
- const made = Object.keys(data.deliverables)
191
- .filter((k) => data.deliverables[k] > 0)
192
- .map((k) => `${DELIVERABLE_LABEL[k]} ${data.deliverables[k]}`);
193
- if (made.length > 0)
194
- lines.push(`交付:${made.join(' · ')}`);
195
- }
196
- // Asks by team, capped for a phone.
197
- let shown = 0;
198
- let hidden = 0;
199
- for (const t of data.teams) {
200
- const room = OWNER_RECEIPT_CONSTANTS.MAX_ASK_LINES - shown;
201
- if (room <= 0) {
202
- hidden += t.asks.length;
203
- continue;
204
- }
205
- const header = t.lead ? `${t.team}(${t.lead})` : t.team;
206
- lines.push('', `*${escapeMrkdwn(header)}*`);
207
- for (const a of t.asks.slice(0, room))
208
- lines.push(askLine(a));
209
- shown += Math.min(room, t.asks.length);
210
- hidden += Math.max(0, t.asks.length - room);
211
- }
212
- if (hidden > 0)
213
- lines.push(`…另有 ${hidden} 件,见看板`);
214
- // Appended messages that still read like a request: he can say 「拆出来」.
215
- if (data.possiblyMissed.length > 0) {
216
- lines.push('', `*可能漏记(${data.possiblyMissed.length})* — 回复「拆出来」就单独记一件`);
217
- for (const m of data.possiblyMissed.slice(0, OWNER_RECEIPT_CONSTANTS.MAX_POSSIBLY_MISSED)) {
218
- lines.push(`• ${escapeMrkdwn(m.text)} → 并进了 ${m.tkt ?? '一件事'}`);
219
- }
220
- const more = data.possiblyMissed.length - OWNER_RECEIPT_CONSTANTS.MAX_POSSIBLY_MISSED;
221
- if (more > 0)
222
- lines.push(`…另有 ${more} 条,见看板`);
78
+ if (data.highlights.length === 0 && data.decisionsTotal === 0)
79
+ return '';
80
+ const lines = [`*Crewly 小票 · ${localDateLabel(data.window.to, data.window.timezone)}*`];
81
+ if (data.highlights.length > 0) {
82
+ lines.push('*今天做完的*', ...data.highlights.map((h) => bullet(h.team, h.summary)));
223
83
  }
224
- // Waiting on you.
225
- if (data.waiting.length > 0) {
226
- lines.push('', `*等你拍板(${data.waiting.length})*`);
227
- data.waiting.slice(0, OWNER_RECEIPT_CONSTANTS.MAX_WAITING_LINES).forEach((w, i) => {
228
- const id = w.tkt ? `${w.tkt} ` : '';
229
- const q = w.question ? ` — ${escapeMrkdwn(w.question)}` : '';
230
- lines.push(`${i + 1}. ${id}${escapeMrkdwn(w.text)}${q}`);
231
- });
232
- const rest = data.waiting.length - OWNER_RECEIPT_CONSTANTS.MAX_WAITING_LINES;
84
+ if (data.decisionsTotal > 0) {
85
+ lines.push('*需要你决定的*', ...data.decisions.map((d) => bullet(d.from, d.question)));
86
+ const rest = data.decisionsTotal - data.decisions.length;
233
87
  if (rest > 0)
234
- lines.push(`…另有 ${rest} 件等你,见看板`);
88
+ lines.push(`另有 ${rest} 件,在看板上`);
235
89
  }
236
- lines.push('', costLine(data.teams));
237
90
  return lines.join('\n');
238
91
  }
239
92
  //# sourceMappingURL=owner-receipt.renderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"owner-receipt.renderer.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"owner-receipt.renderer.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,GAAW,EAAE,EAAU;IAC7C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,MAAM,CAAC,GAAkB,EAAE,IAAY;IAC9C,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACzE,MAAM,KAAK,GAAa,CAAC,gBAAgB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACzD,IAAI,IAAI,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -27,6 +27,8 @@ export interface OwnerReceiptServiceDeps {
27
27
  loadTeamIndex: () => Promise<Map<string, string>>;
28
28
  /** team name → lead's display name (built once per receipt); absent → no lead shown */
29
29
  loadTeamLeadIndex?: () => Promise<Map<string, string>>;
30
+ /** session → agent display name (built once per receipt); absent → decisions name the team */
31
+ loadAgentNameIndex?: () => Promise<Map<string, string>>;
30
32
  /** Slack DM to the owner; null = cannot send (the API still works) */
31
33
  sender?: ReceiptSender | null;
32
34
  /** State file (default ~/.crewly/owner-receipt.json); null = in memory (tests) */
@@ -45,14 +47,18 @@ export interface GenerateOptions {
45
47
  /** `since_last_receipt` (default) or `local_day` */
46
48
  mode?: 'since_last_receipt' | 'local_day';
47
49
  }
48
- /** What {@link OwnerReceiptService.send} did. */
50
+ /**
51
+ * What {@link OwnerReceiptService.send} did. `nothing_to_say`: nothing
52
+ * notable was done and nothing waits on the owner, so no receipt went out
53
+ * (2026-09-28) — the window still moves, as after a send.
54
+ */
49
55
  export type SendResult = {
50
56
  sent: true;
51
57
  text: string;
52
58
  data: ReceiptData;
53
59
  } | {
54
60
  sent: false;
55
- reason: 'no_sender' | 'sender_failed';
61
+ reason: 'no_sender' | 'sender_failed' | 'nothing_to_say';
56
62
  text: string;
57
63
  data: ReceiptData;
58
64
  };
@@ -124,6 +130,13 @@ export declare class OwnerReceiptService {
124
130
  * @returns What happened
125
131
  */
126
132
  private sendNow;
133
+ /**
134
+ * Move the window: the next receipt starts where this one ended, and today
135
+ * counts as done.
136
+ *
137
+ * @param data - The receipt that went out (or was skipped)
138
+ */
139
+ private markSent;
127
140
  /**
128
141
  * Persist state.
129
142
  *
@@ -1 +1 @@
1
- {"version":3,"file":"owner-receipt.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"owner-receipt.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.service.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ import { safeReadJson, modifyJsonFile } from '../../../utils/file-io.utils.js';
18
18
  import { LoggerService } from '../../core/logger.service.js';
19
19
  import { getCrewlyHomePath } from '../../core/crewly-home.utils.js';
20
20
  import { redactSensitive } from '../../wiki/wiki-redaction.js';
21
- import { buildReceiptData, localDate, localParts, resolveReceiptWindow } from './owner-receipt-data.js';
21
+ import { buildReceiptData, isReceiptEmpty, localDate, localParts, resolveReceiptWindow } from './owner-receipt-data.js';
22
22
  import { renderReceiptSlack } from './owner-receipt.renderer.js';
23
23
  import { applySettingsPatch, defaultReceiptSettings, } from './owner-receipt.types.js';
24
24
  /** Nightly owner receipt. */
@@ -78,12 +78,13 @@ export class OwnerReceiptService {
78
78
  ...(state.lastSentAt ? { lastSentAt: state.lastSentAt } : {}),
79
79
  ...opts,
80
80
  });
81
- const [requests, workItems, teams, teamLeads, intakeLog] = await Promise.all([
81
+ const [requests, workItems, teams, teamLeads, intakeLog, agentNames] = await Promise.all([
82
82
  this.deps.listRequests(),
83
83
  this.deps.listWorkItems(),
84
84
  this.deps.loadTeamIndex(),
85
85
  this.deps.loadTeamLeadIndex ? this.deps.loadTeamLeadIndex() : Promise.resolve(null),
86
86
  this.deps.readIntakeLog ? this.deps.readIntakeLog().catch(() => null) : Promise.resolve(null),
87
+ this.deps.loadAgentNameIndex ? this.deps.loadAgentNameIndex().catch(() => null) : Promise.resolve(null),
87
88
  ]);
88
89
  const data = buildReceiptData({
89
90
  requests,
@@ -91,6 +92,7 @@ export class OwnerReceiptService {
91
92
  window,
92
93
  teamOf: (session) => teams.get(session) ?? null,
93
94
  ...(teamLeads ? { teamLeadOf: (team) => teamLeads.get(team) ?? null } : {}),
95
+ ...(agentNames ? { agentNameOf: (session) => agentNames.get(session) ?? null } : {}),
94
96
  intakeLog,
95
97
  ...(this.deps.cost ? { cost: this.deps.cost } : {}),
96
98
  now,
@@ -145,6 +147,12 @@ export class OwnerReceiptService {
145
147
  */
146
148
  async sendNow() {
147
149
  const { data, text } = await this.generate();
150
+ if (isReceiptEmpty(data) || !text) {
151
+ // Nothing done worth telling, nothing waiting on him: no message at all.
152
+ await this.markSent(data);
153
+ this.logger.info('Owner receipt skipped (nothing to say)', { from: data.window.from, to: data.window.to });
154
+ return { sent: false, reason: 'nothing_to_say', text, data };
155
+ }
148
156
  if (!this.deps.sender)
149
157
  return { sent: false, reason: 'no_sender', text, data };
150
158
  let ok = false;
@@ -156,14 +164,28 @@ export class OwnerReceiptService {
156
164
  }
157
165
  if (!ok)
158
166
  return { sent: false, reason: 'sender_failed', text, data };
167
+ await this.markSent(data);
168
+ this.logger.info('Owner receipt sent', {
169
+ highlights: data.highlights.length,
170
+ decisions: data.decisionsTotal,
171
+ from: data.window.from,
172
+ to: data.window.to,
173
+ });
174
+ return { sent: true, text, data };
175
+ }
176
+ /**
177
+ * Move the window: the next receipt starts where this one ended, and today
178
+ * counts as done.
179
+ *
180
+ * @param data - The receipt that went out (or was skipped)
181
+ */
182
+ async markSent(data) {
159
183
  const state = await this.getState();
160
184
  await this.writeState({
161
185
  ...state,
162
186
  lastSentAt: data.window.to,
163
187
  lastSentLocalDate: localDate(new Date(data.window.to), state.settings.timezone),
164
188
  });
165
- this.logger.info('Owner receipt sent', { asks: data.askCount, waiting: data.waiting.length, from: data.window.from, to: data.window.to });
166
- return { sent: true, text, data };
167
189
  }
168
190
  /**
169
191
  * Persist state.
@@ -1 +1 @@
1
- {"version":3,"file":"owner-receipt.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"owner-receipt.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAwB,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAA0B,MAAM,yBAAyB,CAAC;AAChJ,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GAIvB,MAAM,0BAA0B,CAAC;AA4ClC,6BAA6B;AAC7B,MAAM,OAAO,mBAAmB;IAUD;IATZ,MAAM,CAAkB;IACjC,WAAW,GAAsB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,EAAE,CAAC;IAC/D,SAAS,CAAgB;IAC1C,0EAA0E;IAClE,OAAO,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEtD;;OAEG;IACH,YAA6B,IAA6B;QAA7B,SAAI,GAAJ,IAAI,CAAyB;QACxD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QAChF,IAAI,CAAC,SAAS;YACZ,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3H,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,YAAY,CAA2B,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACnH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;QACnF,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,EAAE,EAAE,CAAC;IAClG,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,KAAc;QACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAC9B,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAwB,EAAE;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,GAAG;YACH,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;YACjC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,IAAI;SACR,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvF,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YACnF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7F,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;SACxG,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,gBAAgB,CAAC;YAC5B,QAAQ;YACR,SAAS;YACT,MAAM;YACN,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;YAC/C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,SAAS;YACT,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACnE,CAAC;IAED;;;;;;OAMG;IACH,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,2EAA2E;QAC3E,2EAA2E;QAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,KAAK;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,iBAAiB,KAAK,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1E,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,OAAO;QACnB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7C,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClC,yEAAyE;YACzE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3G,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/E,IAAI,EAAE,GAAG,KAAK,CAAC;QACf,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnH,CAAC;QACD,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACrE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAClC,SAAS,EAAE,IAAI,CAAC,cAAc;YAC9B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;SACnB,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,QAAQ,CAAC,IAAiB;QACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,CAAC,UAAU,CAAC;YACpB,GAAG,KAAK;YACR,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YAC1B,iBAAiB,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,UAAU,CAAC,KAAwB;QAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,OAAO;QACT,CAAC;QACD,MAAM,cAAc,CAA8C,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACvG,CAAC;IAED;;;;OAIG;IACK,GAAG;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACtD,CAAC;CACF;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,IAAI,QAAQ,GAA+B,IAAI,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAmC;IACxE,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -122,6 +122,35 @@ export interface ReceiptPossiblyMissed {
122
122
  splitCommand: string;
123
123
  at: string;
124
124
  }
125
+ /**
126
+ * One 「今天做完的」 line (2026-09-28 redesign): what got done, as an outcome
127
+ * in the agent's words — never the owner's ask.
128
+ */
129
+ export interface ReceiptHighlight {
130
+ ticketId: string;
131
+ /** Team (or the orchestrator's label) that actually did it; null when unknown */
132
+ team: string | null;
133
+ /** The outcome, one short line from the agent's answer (redacted, no links or paths) */
134
+ summary: string;
135
+ /** Deliverables found in the answer (the line prefers tickets that have some) */
136
+ deliverableCount: number;
137
+ completedAt: string;
138
+ }
139
+ /**
140
+ * One 「需要你决定的」 line: something genuinely blocked on the owner, phrased
141
+ * as the question he is asked.
142
+ */
143
+ export interface ReceiptDecision {
144
+ /** Ticket or WorkItem id */
145
+ id: string;
146
+ source: 'ticket_review' | 'owner_escalation';
147
+ /** Who asks: the agent's name, else its team; null when unknown */
148
+ from: string | null;
149
+ /** The question, one short line (redacted) */
150
+ question: string;
151
+ /** When it started waiting */
152
+ since: string;
153
+ }
125
154
  /** Everything a receipt says. */
126
155
  export interface ReceiptData {
127
156
  window: ReceiptWindow;
@@ -139,6 +168,12 @@ export interface ReceiptData {
139
168
  coverage: ReceiptCoverage;
140
169
  /** Appended messages that still read like a request, oldest first (all of them) */
141
170
  possiblyMissed: ReceiptPossiblyMissed[];
171
+ /** 「今天做完的」: the best few outcomes of the window (at most MAX_HIGHLIGHTS) */
172
+ highlights: ReceiptHighlight[];
173
+ /** 「需要你决定的」: the first few things blocked on the owner (at most MAX_DECISIONS) */
174
+ decisions: ReceiptDecision[];
175
+ /** How many things are blocked on the owner in all (the rest: 「另有 N 件,在看板上」) */
176
+ decisionsTotal: number;
142
177
  generatedAt: string;
143
178
  }
144
179
  /** Owner-set delivery settings. */
@@ -1 +1 @@
1
- {"version":3,"file":"owner-receipt.types.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"owner-receipt.types.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"owner-receipt.types.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAiBhE,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD,MAAM;IACN,WAAW;IACX,aAAa;IACb,SAAS;IACT,SAAS;IACT,WAAW;CACH,CAAC;AAyIX,0BAA0B;AAC1B,MAAM,YAAY,GAAG,2BAA2B,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAAW;IACzC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA6B,EAC7B,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAC3G,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,IAAI,GAAyB,EAAE,GAAG,OAAO,EAAE,CAAC;IAClD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;QACnG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;QACpI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6DAA6D,EAAE,CAAC;QAC7H,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,uBAAuB,CAAC,YAAY;QAC1C,QAAQ,EAAE,uBAAuB,CAAC,gBAAgB;KACnD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"owner-receipt.types.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/v3/owner-receipt/owner-receipt.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAiBhE,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD,MAAM;IACN,WAAW;IACX,aAAa;IACb,SAAS;IACT,SAAS;IACT,WAAW;CACH,CAAC;AA8KX,0BAA0B;AAC1B,MAAM,YAAY,GAAG,2BAA2B,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAAW;IACzC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA6B,EAC7B,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAC3G,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,IAAI,GAAyB,EAAE,GAAG,OAAO,EAAE,CAAC;IAClD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;QACnG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC;QACpI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6DAA6D,EAAE,CAAC;QAC7H,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,uBAAuB,CAAC,YAAY;QAC1C,QAAQ,EAAE,uBAAuB,CAAC,gBAAgB;KACnD,CAAC;AACJ,CAAC"}