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.
- package/config/skills/agent/core/attach-file/SKILL.md +1 -1
- package/config/skills/agent/core/attach-file/execute.sh +1 -1
- package/config/skills/agent/core/reply-channel/SKILL.md +4 -1
- package/config/skills/agent/core/reply-chat/SKILL.md +17 -0
- package/config/skills/agent/core/reply-chat/execute.sh +6 -1
- package/config/skills/agent/core/slack-post/SKILL.md +1 -1
- package/dist/backend/backend/src/constants.d.ts +195 -4
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +208 -6
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +18 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +42 -6
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +5 -0
- package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +6 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts +18 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +42 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.js +3 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +15 -2
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +18 -4
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts +13 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +16 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +46 -3
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +17 -4
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts +93 -6
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +169 -15
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +2 -2
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +15 -2
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +7 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +40 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +86 -9
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +33 -4
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +227 -0
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +455 -0
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-thread-key.d.ts +66 -0
- package/dist/backend/backend/src/services/slack/slack-thread-key.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-thread-key.js +109 -0
- package/dist/backend/backend/src/services/slack/slack-thread-key.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +89 -13
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +224 -50
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts +84 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js +301 -6
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +8 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js +16 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts +28 -10
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js +46 -193
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +15 -2
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +26 -4
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +35 -0
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.d.ts +2 -0
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +16 -4
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js +2 -0
- package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +2 -1
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-hygiene.d.ts +162 -0
- package/dist/backend/backend/src/services/v3/ticket-hygiene.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-hygiene.js +221 -0
- package/dist/backend/backend/src/services/v3/ticket-hygiene.js.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +71 -6
- package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-intake.service.js +151 -25
- package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts +22 -3
- package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.js +99 -40
- package/dist/backend/backend/src/services/v3/ticket-review.service.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +43 -0
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.d.ts +13 -0
- package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +195 -4
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +208 -6
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +1 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +18 -4
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +13 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +16 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +46 -3
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +17 -4
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts +93 -6
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +169 -15
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +40 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +86 -9
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +33 -4
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +227 -0
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +455 -0
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-thread-key.d.ts +66 -0
- package/dist/cli/backend/src/services/slack/slack-thread-key.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-thread-key.js +109 -0
- package/dist/cli/backend/src/services/slack/slack-thread-key.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +89 -13
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +224 -50
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.d.ts +2 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.js +16 -4
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js +2 -0
- package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +2 -1
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-hygiene.d.ts +162 -0
- package/dist/cli/backend/src/services/v3/ticket-hygiene.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-hygiene.js +221 -0
- package/dist/cli/backend/src/services/v3/ticket-hygiene.js.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +71 -6
- package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-intake.service.js +151 -25
- package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts +22 -3
- package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.js +99 -40
- package/dist/cli/backend/src/services/v3/ticket-review.service.js.map +1 -1
- package/dist/cli/backend/src/types/slack.types.d.ts +43 -0
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/slack.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.d.ts +13 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
- 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.**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
|
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.
|
|
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
|
|
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.**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
|
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.
|
|
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, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
72
42
|
}
|
|
73
43
|
/**
|
|
74
|
-
* `9/
|
|
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
|
|
48
|
+
* @returns Date label
|
|
79
49
|
*/
|
|
80
|
-
function
|
|
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
|
-
*
|
|
55
|
+
* One bullet: `• <who>:<text>`, or `• <text>` when nobody is named.
|
|
100
56
|
*
|
|
101
|
-
* @param
|
|
102
|
-
* @
|
|
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
|
|
140
|
-
|
|
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
|
-
|
|
164
|
-
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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(
|
|
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":"AAAA
|
|
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
|
-
/**
|
|
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":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAKrE,OAAO,
|
|
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":"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,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAA0B,MAAM,yBAAyB,CAAC;
|
|
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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"}
|
|
@@ -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;
|
|
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"}
|