crewly 1.20.108 → 1.20.110

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 (138) hide show
  1. package/config/skills/agent/core/complete-task/SKILL.md +11 -0
  2. package/config/skills/agent/core/complete-task/execute.sh +16 -1
  3. package/config/skills/agent/core/complete-task/execute.test.sh +19 -0
  4. package/config/skills/agent/core/ticket-check/SKILL.md +62 -0
  5. package/config/skills/agent/core/ticket-check/execute.sh +71 -0
  6. package/config/skills/agent/core/ticket-check/execute.test.sh +69 -0
  7. package/dist/backend/backend/src/constants.d.ts +36 -0
  8. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  9. package/dist/backend/backend/src/constants.js +36 -0
  10. package/dist/backend/backend/src/constants.js.map +1 -1
  11. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts +42 -0
  12. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
  13. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +185 -0
  14. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
  15. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts +7 -0
  16. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js +16 -1
  18. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js.map +1 -1
  19. package/dist/backend/backend/src/index.d.ts.map +1 -1
  20. package/dist/backend/backend/src/index.js +84 -3
  21. package/dist/backend/backend/src/index.js.map +1 -1
  22. package/dist/backend/backend/src/services/cache/redis-cache.service.d.ts.map +1 -1
  23. package/dist/backend/backend/src/services/cache/redis-cache.service.js +8 -1
  24. package/dist/backend/backend/src/services/cache/redis-cache.service.js.map +1 -1
  25. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +1 -1
  26. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
  27. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +24 -0
  28. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  29. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +83 -3
  30. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  31. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +6 -0
  33. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  34. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +2 -2
  35. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  36. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +2 -2
  37. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  38. package/dist/backend/backend/src/services/system/version-check.service.d.ts +7 -1
  39. package/dist/backend/backend/src/services/system/version-check.service.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/system/version-check.service.js +10 -3
  41. package/dist/backend/backend/src/services/system/version-check.service.js.map +1 -1
  42. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +35 -0
  43. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +88 -6
  45. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.d.ts +92 -0
  47. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.d.ts.map +1 -0
  48. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.js +168 -0
  49. package/dist/backend/backend/src/services/task-pool/ticket-claim-policy.js.map +1 -0
  50. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +24 -12
  52. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  53. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts +8 -0
  54. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js +40 -0
  56. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js.map +1 -1
  57. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +9 -0
  59. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  60. package/dist/backend/backend/src/services/v3/request.service.d.ts +10 -0
  61. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  62. package/dist/backend/backend/src/services/v3/request.service.js +51 -0
  63. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  64. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts +17 -0
  65. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +52 -5
  67. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  68. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +63 -1
  69. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  70. package/dist/backend/backend/src/services/v3/ticket-intake.service.js +67 -1
  71. package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  72. package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts +242 -0
  73. package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts.map +1 -0
  74. package/dist/backend/backend/src/services/v3/ticket-review.service.js +456 -0
  75. package/dist/backend/backend/src/services/v3/ticket-review.service.js.map +1 -0
  76. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  77. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  78. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  79. package/dist/backend/backend/src/types/v2/request.types.d.ts +21 -1
  80. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  81. package/dist/backend/backend/src/types/v2/request.types.js +3 -2
  82. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  83. package/dist/backend/backend/src/types/v2/ticket.types.d.ts +71 -1
  84. package/dist/backend/backend/src/types/v2/ticket.types.d.ts.map +1 -1
  85. package/dist/backend/backend/src/types/v2/ticket.types.js +40 -0
  86. package/dist/backend/backend/src/types/v2/ticket.types.js.map +1 -1
  87. package/dist/backend/build-info.json +2 -2
  88. package/dist/cli/backend/src/constants.d.ts +36 -0
  89. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  90. package/dist/cli/backend/src/constants.js +36 -0
  91. package/dist/cli/backend/src/constants.js.map +1 -1
  92. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +2 -2
  93. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  94. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +2 -2
  95. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  96. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +35 -0
  97. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  98. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +88 -6
  99. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  100. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.d.ts +92 -0
  101. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.d.ts.map +1 -0
  102. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.js +168 -0
  103. package/dist/cli/backend/src/services/task-pool/ticket-claim-policy.js.map +1 -0
  104. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  105. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +9 -0
  106. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  107. package/dist/cli/backend/src/services/v3/request.service.d.ts +10 -0
  108. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  109. package/dist/cli/backend/src/services/v3/request.service.js +51 -0
  110. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  111. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts +17 -0
  112. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  113. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +52 -5
  114. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  115. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +63 -1
  116. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  117. package/dist/cli/backend/src/services/v3/ticket-intake.service.js +67 -1
  118. package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  119. package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts +242 -0
  120. package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts.map +1 -0
  121. package/dist/cli/backend/src/services/v3/ticket-review.service.js +456 -0
  122. package/dist/cli/backend/src/services/v3/ticket-review.service.js.map +1 -0
  123. package/dist/cli/backend/src/types/v2/index.d.ts +1 -1
  124. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
  125. package/dist/cli/backend/src/types/v2/index.js.map +1 -1
  126. package/dist/cli/backend/src/types/v2/request.types.d.ts +21 -1
  127. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
  128. package/dist/cli/backend/src/types/v2/request.types.js +3 -2
  129. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
  130. package/dist/cli/backend/src/types/v2/ticket.types.d.ts +71 -1
  131. package/dist/cli/backend/src/types/v2/ticket.types.d.ts.map +1 -1
  132. package/dist/cli/backend/src/types/v2/ticket.types.js +40 -0
  133. package/dist/cli/backend/src/types/v2/ticket.types.js.map +1 -1
  134. package/frontend/dist/assets/{index-f7b99e81.js → index-07e338a9.js} +284 -284
  135. package/frontend/dist/assets/index-8327e63e.css +42 -0
  136. package/frontend/dist/index.html +2 -2
  137. package/package.json +1 -1
  138. package/frontend/dist/assets/index-413c5813.css +0 -42
@@ -0,0 +1,242 @@
1
+ /**
2
+ * TicketReviewService — the back half of the ticket loop
3
+ * (specs/ticket-loop.md, Phase 2).
4
+ *
5
+ * Phase 1 files a ticket for every "please do X". This service decides when
6
+ * a ticket is answered and what the owner does about it:
7
+ *
8
+ * - **Answered.** An agent message in the ticket's own conversation (matched
9
+ * through the chat-v2 turn that opened it, {@link TicketReviewService.noteChatTurn})
10
+ * is recorded as the ticket's `reply`. Once that agent is idle again (or the
11
+ * reply has settled for {@link TICKET_CONSTANTS.REVIEW.SUBMIT_SETTLE_MS}) and
12
+ * no WorkItem of the ticket is still open, the ticket is submitted: it goes
13
+ * to 待验收 (`waiting_confirmation`), or straight to done for origins that
14
+ * need no review. This replaces the old blind "close any open Request 3–10
15
+ * minutes old" sweep, which closed tickets that nobody had answered.
16
+ * - **验过了** → done. **打回 + reason** → back to work; the reason becomes an
17
+ * acceptance criterion (#763: criteria grow from real review) and, when the
18
+ * owner sent it back from the board rather than the thread, a rework
19
+ * WorkItem is queued for whoever answered.
20
+ * - **Silence accepts.** 待验收 for {@link TICKET_CONSTANTS.REVIEW.AUTO_ACCEPT_MS}
21
+ * with no word → done, tagged `auto_accepted`. The owner is never pinged.
22
+ *
23
+ * The `done` gate itself lives in {@link RequestService.update}: without
24
+ * `accepted`, a ticket that needs review cannot become done by any path.
25
+ *
26
+ * @module services/v3/ticket-review.service
27
+ */
28
+ import { type Request, type RequestPriority } from '../../types/v2/request.types.js';
29
+ import { type TicketAcceptanceCheck, type TicketKind } from '../../types/v2/ticket.types.js';
30
+ /** Request store surface the review needs (narrow for tests). */
31
+ export interface ReviewRequestStore {
32
+ getById(id: string): Promise<Request | null>;
33
+ listAll(): Promise<Request[]>;
34
+ update(id: string, updates: Parameters<import('./request.service.js').RequestService['update']>[1]): Promise<Request>;
35
+ }
36
+ /** The slice of a chat-v2 message the review reads. */
37
+ export interface ReviewChatMessage {
38
+ id: string;
39
+ channelId: string;
40
+ senderType: string;
41
+ senderId: string;
42
+ content: string;
43
+ threadId?: string;
44
+ }
45
+ /** A rework request for {@link TicketReviewServiceDeps.createRework}. */
46
+ export interface ReworkInput {
47
+ ticket: Request;
48
+ reason: string;
49
+ /** Agent session to hand it to */
50
+ target: string;
51
+ }
52
+ /** Constructor dependencies. */
53
+ export interface TicketReviewServiceDeps {
54
+ requests: ReviewRequestStore;
55
+ /** Number of the ticket's WorkItems that are not terminal */
56
+ openWorkItemCount?: (requestId: string) => Promise<number>;
57
+ /** Queue a rework WorkItem; returns its id */
58
+ createRework?: (input: ReworkInput) => Promise<string | null>;
59
+ /** Swap the receipt to "done" (🎫 → ✅) */
60
+ markReceiptDone?: (ticket: Request) => Promise<void>;
61
+ /** Session the rework goes to when nobody answered (the orchestrator) */
62
+ fallbackAgent: string;
63
+ now?: () => Date;
64
+ }
65
+ /** Result of an owner action. */
66
+ export type ReviewActionResult = {
67
+ ok: true;
68
+ ticket: Request;
69
+ } | {
70
+ ok: false;
71
+ reason: 'not_found' | 'not_in_review' | 'already_done' | 'cancelled' | 'open_work' | 'invalid';
72
+ ticket?: Request;
73
+ };
74
+ /** Where a 打回 came from. */
75
+ export type RejectVia = 'thread' | 'board';
76
+ /** Fields the owner may change from the board. */
77
+ export interface TicketPatch {
78
+ title?: string;
79
+ priority?: RequestPriority;
80
+ kind?: TicketKind;
81
+ assignee?: string | null;
82
+ }
83
+ /**
84
+ * Review lifecycle of tickets. See module docs.
85
+ */
86
+ export declare class TicketReviewService {
87
+ private readonly deps;
88
+ private readonly logger;
89
+ private chain;
90
+ /**
91
+ * @param deps - Store and optional pool / receipt hooks
92
+ */
93
+ constructor(deps: TicketReviewServiceDeps);
94
+ /**
95
+ * Run one state change at a time, so an idle event and the sweep cannot
96
+ * submit the same ticket twice.
97
+ *
98
+ * @param fn - The change
99
+ * @returns Its result
100
+ */
101
+ private serial;
102
+ /**
103
+ * Remember the chat-v2 turn that opened a ticket, so agent answers in the
104
+ * same thread can be matched to it. Only the first turn counts.
105
+ *
106
+ * @param ticketId - The ticket
107
+ * @param message - The owner's persisted message
108
+ */
109
+ noteChatTurn(ticketId: string, message: Pick<ReviewChatMessage, 'id' | 'channelId' | 'threadId'>): Promise<void>;
110
+ /**
111
+ * An agent posted in chat-v2: record it as the answer of the ticket whose
112
+ * thread it is in. Top-level agent messages (no thread) count for the newest
113
+ * open ticket in that channel that the agent could be answering.
114
+ *
115
+ * @param message - The chat-v2 message
116
+ * @returns The ticket it was recorded on, or null
117
+ */
118
+ onChatMessage(message: ReviewChatMessage): Promise<Request | null>;
119
+ /**
120
+ * An agent finished its turn: submit the tickets it answered.
121
+ *
122
+ * @param sessionName - The agent
123
+ * @returns Tickets submitted
124
+ */
125
+ onAgentIdle(sessionName: string): Promise<Request[]>;
126
+ /**
127
+ * Periodic pass: submit answers that have settled (in case no idle event
128
+ * came), and auto-accept 待验收 tickets nobody objected to.
129
+ *
130
+ * @returns What changed
131
+ */
132
+ sweep(): Promise<{
133
+ submitted: number;
134
+ autoAccepted: number;
135
+ }>;
136
+ /**
137
+ * Submit every answered ticket that matches and has no open work.
138
+ *
139
+ * @param match - Which answered tickets to look at
140
+ * @returns Tickets submitted
141
+ */
142
+ private submitAnswered;
143
+ /**
144
+ * 验过了 — the owner accepts. Works from any open status (the owner may
145
+ * accept before the agent says it is finished), but not while WorkItems
146
+ * are still running.
147
+ *
148
+ * @param ref - `TKT-123`, `123` or id
149
+ * @returns The accepted ticket, or why not
150
+ */
151
+ verify(ref: string): Promise<ReviewActionResult>;
152
+ /**
153
+ * Move a ticket to done with the owner's (or the auto-accept's) blessing.
154
+ *
155
+ * @param ticket - The ticket
156
+ * @param tags - Tags to store
157
+ * @returns Result
158
+ */
159
+ private accept;
160
+ /**
161
+ * 打回 — the owner sends it back. The reason becomes an acceptance
162
+ * criterion; from the board (not the thread, where the agent already sees
163
+ * the owner's words) a rework WorkItem is queued for whoever answered.
164
+ *
165
+ * @param ref - `TKT-123`, `123` or id
166
+ * @param reason - Why (required; the thread path fills a placeholder)
167
+ * @param via - `thread` or `board`
168
+ * @returns The reopened ticket, or why not
169
+ */
170
+ reject(ref: string, reason: string, via: RejectVia): Promise<ReviewActionResult>;
171
+ /**
172
+ * A follow-up from the owner in a 待验收 ticket's thread that is neither
173
+ * 验过了 nor 打回: the agent is working again, so the ticket leaves 待验收
174
+ * (no reject counted).
175
+ *
176
+ * @param ticketId - The ticket
177
+ * @returns The ticket after the change
178
+ */
179
+ reopenOnFollowUp(ticketId: string): Promise<Request | null>;
180
+ /**
181
+ * Replace the live acceptance list. Criteria not in `items` are marked
182
+ * removed (kept for history); new texts are added as the owner's.
183
+ *
184
+ * @param ref - Ticket reference
185
+ * @param items - The list the owner wants, in order
186
+ * @returns The ticket
187
+ */
188
+ setAcceptance(ref: string, items: ReadonlyArray<{
189
+ text: string;
190
+ check?: TicketAcceptanceCheck;
191
+ }>): Promise<ReviewActionResult>;
192
+ /**
193
+ * An agent's self-check against one live criterion.
194
+ *
195
+ * @param ref - Ticket reference
196
+ * @param index - Position in the live list (0-based)
197
+ * @param result - pass / fail
198
+ * @param evidence - What it looked at
199
+ * @returns The ticket
200
+ */
201
+ selfCheck(ref: string, index: number, result: 'pass' | 'fail', evidence?: string): Promise<ReviewActionResult>;
202
+ /**
203
+ * Board edits: title, priority, kind, assignee.
204
+ *
205
+ * @param ref - Ticket reference
206
+ * @param patch - Changes
207
+ * @returns The ticket
208
+ */
209
+ patch(ref: string, patch: TicketPatch): Promise<ReviewActionResult>;
210
+ /**
211
+ * Find a ticket by `TKT-123`, `123` or id.
212
+ *
213
+ * @param ref - Reference
214
+ * @returns The ticket, or null
215
+ */
216
+ private resolve;
217
+ /**
218
+ * Best-effort receipt swap.
219
+ *
220
+ * @param ticket - The done ticket
221
+ */
222
+ private receiptDone;
223
+ /**
224
+ * Current time (injectable for tests).
225
+ *
226
+ * @returns Now
227
+ */
228
+ private now;
229
+ }
230
+ /**
231
+ * Install the process-wide review service (composition root).
232
+ *
233
+ * @param service - The service, or null to clear (tests)
234
+ */
235
+ export declare function setTicketReviewService(service: TicketReviewService | null): void;
236
+ /**
237
+ * The process-wide review service, or null before boot wired it.
238
+ *
239
+ * @returns The service or null
240
+ */
241
+ export declare function getTicketReviewService(): TicketReviewService | null;
242
+ //# sourceMappingURL=ticket-review.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-review.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/ticket-review.service.ts"],"names":[],"mappings":"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"}