crewly 1.9.0 → 1.10.0

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 (131) hide show
  1. package/config/roles/orchestrator/prompt.md +20 -2
  2. package/config/skills/agent/core/get-sops/SKILL.md +6 -2
  3. package/config/skills/agent/core/get-sops/execute.sh +26 -1
  4. package/config/skills/agent/core/get-team-norms/SKILL.md +69 -0
  5. package/config/skills/agent/core/update-sop/SKILL.md +73 -0
  6. package/config/skills/agent/core/update-sop/execute.sh +115 -0
  7. package/config/skills/agent/core/update-team-norm/SKILL.md +67 -0
  8. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +2 -0
  9. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +50 -1
  11. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  12. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +2 -0
  13. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -1
  14. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +6 -2
  15. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -1
  16. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/slack/slack.controller.js +10 -0
  18. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/system/system.controller.js +2 -1
  21. package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/team/team.controller.d.ts +17 -0
  23. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  24. package/dist/backend/backend/src/controllers/team/team.controller.js +32 -0
  25. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  26. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +45 -0
  27. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
  28. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +364 -46
  29. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
  30. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
  31. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +9 -1
  32. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
  33. package/dist/backend/backend/src/index.d.ts.map +1 -1
  34. package/dist/backend/backend/src/index.js +44 -70
  35. package/dist/backend/backend/src/index.js.map +1 -1
  36. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  37. package/dist/backend/backend/src/routes/api.routes.js +12 -6
  38. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  39. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +13 -4
  40. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  41. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +47 -11
  42. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  43. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts +28 -0
  44. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js +49 -0
  46. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js.map +1 -1
  47. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +60 -2
  48. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  49. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +93 -3
  50. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  51. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts +25 -0
  52. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -1
  53. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js +33 -0
  54. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -1
  55. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +28 -0
  56. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  57. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +48 -0
  58. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  59. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  60. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +30 -0
  62. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  63. package/dist/backend/backend/src/services/chat-v2/types.d.ts +14 -0
  64. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
  66. package/dist/backend/backend/src/services/index.d.ts +0 -1
  67. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/index.js +0 -1
  69. package/dist/backend/backend/src/services/index.js.map +1 -1
  70. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts +26 -108
  71. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js +26 -214
  73. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js.map +1 -1
  74. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +11 -0
  75. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +36 -0
  77. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  78. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
  79. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +21 -0
  81. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  82. package/dist/backend/backend/src/services/slack/slack.service.d.ts +12 -0
  83. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/slack/slack.service.js +53 -1
  85. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  86. package/dist/backend/backend/src/services/sop/sop.service.d.ts +10 -0
  87. package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -1
  88. package/dist/backend/backend/src/services/sop/sop.service.js +71 -10
  89. package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -1
  90. package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts +83 -0
  91. package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts.map +1 -0
  92. package/dist/backend/backend/src/services/wiki/sop-catalog.service.js +185 -0
  93. package/dist/backend/backend/src/services/wiki/sop-catalog.service.js.map +1 -0
  94. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
  95. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +12 -0
  96. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
  97. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts +43 -0
  98. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts.map +1 -0
  99. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js +67 -0
  100. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js.map +1 -0
  101. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +79 -19
  102. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  103. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +275 -106
  104. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  105. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
  106. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +13 -0
  107. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
  108. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts +13 -0
  109. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  110. package/dist/backend/backend/src/services/workflow/cron-task.service.js +43 -3
  111. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  112. package/dist/backend/backend/src/types/sop.types.d.ts +7 -0
  113. package/dist/backend/backend/src/types/sop.types.d.ts.map +1 -1
  114. package/dist/backend/backend/src/types/sop.types.js.map +1 -1
  115. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +7 -0
  116. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  117. package/dist/backend/backend/src/types/v2/work-item.types.js +1 -1
  118. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  119. package/dist/cli/backend/src/types/sop.types.d.ts +7 -0
  120. package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -1
  121. package/dist/cli/backend/src/types/sop.types.js.map +1 -1
  122. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +7 -0
  123. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  124. package/dist/cli/backend/src/types/v2/work-item.types.js +1 -1
  125. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  126. package/frontend/dist/assets/index-4099a91c.js +4961 -0
  127. package/frontend/dist/assets/index-44266b5d.css +42 -0
  128. package/frontend/dist/index.html +2 -2
  129. package/package.json +1 -1
  130. package/frontend/dist/assets/index-068bb4f6.css +0 -42
  131. package/frontend/dist/assets/index-c24ceb15.js +0 -4960
@@ -8,14 +8,14 @@
8
8
  * → controller broadcasts WS message frame (user bubble)
9
9
  * → controller calls ChatV2Dispatcher.dispatchToAgent(channel, messageDTO)
10
10
  * → sendMessageToAgent(agent_session, "[CHAT:<id>] <content>\n<hint>")
11
- * → agent processes + calls `reply-channel` skill
11
+ * → agent processes + calls `reply-chat` skill
12
12
  * → skill POSTs back to /api/chat/channels/:id/messages as the agent
13
13
  * → same controller path → WS message frame (agent bubble)
14
14
  *
15
15
  * This service is intentionally thin — a couple of dozen lines of glue
16
16
  * around the AgentRegistrationService's `sendMessageToAgent` primitive.
17
17
  * The dispatch prompt is extracted so tests can assert the format, which
18
- * is the contract the `reply-channel` skill relies on.
18
+ * is the contract the `reply-chat` skill relies on.
19
19
  *
20
20
  * @module services/chat-v2/chat-v2.dispatcher.service
21
21
  */
@@ -109,7 +109,7 @@ export interface ChatV2DispatcherOptions {
109
109
  agentSink: AgentMessageSink;
110
110
  /**
111
111
  * Override the prompt formatter for tests / future customization. The
112
- * default matches the `reply-channel` skill's parser exactly.
112
+ * default matches the `reply-chat` skill's parser exactly.
113
113
  */
114
114
  formatPrompt?: (args: FormatPromptArgs) => string;
115
115
  /**
@@ -132,6 +132,14 @@ export interface ChatV2DispatcherOptions {
132
132
  * Order doesn't matter — the dispatcher loops over the whole list.
133
133
  */
134
134
  huddleMembersFor?: (channelId: string) => readonly string[];
135
+ /**
136
+ * Activate-on-send hook. When a DM dispatch fails because the agent's
137
+ * session doesn't exist (inactive), the dispatcher calls this to start the
138
+ * agent, then retries delivery once. Returns true when the agent is now
139
+ * active. User-initiated, so it bypasses the orchestrator wake-gate by
140
+ * design. When omitted, inactive sends just queue (legacy behavior).
141
+ */
142
+ activateAgent?: (agentSession: string) => Promise<boolean>;
135
143
  }
136
144
  /** Inputs to the prompt formatter. */
137
145
  export interface FormatPromptArgs {
@@ -155,7 +163,7 @@ export interface FormatPromptArgs {
155
163
  * Default prompt formatter the agent sees when a user sends in their
156
164
  * chat channel.
157
165
  *
158
- * Format is intentionally stable and tag-prefixed so the `reply-channel`
166
+ * Format is intentionally stable and tag-prefixed so the `reply-chat`
159
167
  * skill (and future tooling) can reliably extract the channelId without
160
168
  * regex ambiguity. The `回复:` hint line gives the agent a one-step
161
169
  * instruction on how to reply.
@@ -171,6 +179,7 @@ export declare class ChatV2DispatcherService {
171
179
  private readonly formatPrompt;
172
180
  private readonly mentionResolver?;
173
181
  private readonly huddleMembersFor?;
182
+ private readonly activateAgent?;
174
183
  private readonly logger;
175
184
  constructor(options: ChatV2DispatcherOptions);
176
185
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.dispatcher.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.dispatcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EACV,qBAAqB,EAErB,aAAa,EACd,MAAM,+BAA+B,CAAC;AAOvC;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACtF;AAED,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,UAAU,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+DAA+D;AAC/D,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,MAAM,EAAE,aAAa,CAAC;IACtB,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,YAAY,EAAE,UAAU,GAAG,UAAU,CAAC;IACtC,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,QAAQ,EAAE,IAAI,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,MAAM,CAAC;IAClE,4DAA4D;IAC5D,UAAU,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;OAGG;IACH,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC3C;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC1C;AAED,+DAA+D;AAC/D,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,gBAAgB,CAAC;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAClD;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;CAC7D;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;CACxC;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAmBlE;AAMD;;;;GAIG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAA2C;IAC7E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,OAAO,EAAE,uBAAuB;IAQ5C;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,eAAe,CACnB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,qBAAqB,CAAC;IA4BjC;;;;;;;;;;;;;;;;;;;OAmBG;YACW,uBAAuB;IAoFrC;;;;;;;;;;;;OAYG;YACW,uBAAuB;IA+ErC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,eAAe,CACnB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,cAAc,CAAC;CAoD3B"}
1
+ {"version":3,"file":"chat-v2.dispatcher.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.dispatcher.service.ts"],"names":[],"mappings":"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"}
@@ -8,14 +8,14 @@
8
8
  * → controller broadcasts WS message frame (user bubble)
9
9
  * → controller calls ChatV2Dispatcher.dispatchToAgent(channel, messageDTO)
10
10
  * → sendMessageToAgent(agent_session, "[CHAT:<id>] <content>\n<hint>")
11
- * → agent processes + calls `reply-channel` skill
11
+ * → agent processes + calls `reply-chat` skill
12
12
  * → skill POSTs back to /api/chat/channels/:id/messages as the agent
13
13
  * → same controller path → WS message frame (agent bubble)
14
14
  *
15
15
  * This service is intentionally thin — a couple of dozen lines of glue
16
16
  * around the AgentRegistrationService's `sendMessageToAgent` primitive.
17
17
  * The dispatch prompt is extracted so tests can assert the format, which
18
- * is the contract the `reply-channel` skill relies on.
18
+ * is the contract the `reply-chat` skill relies on.
19
19
  *
20
20
  * @module services/chat-v2/chat-v2.dispatcher.service
21
21
  */
@@ -27,7 +27,7 @@ import { LoggerService } from '../core/logger.service.js';
27
27
  * Default prompt formatter the agent sees when a user sends in their
28
28
  * chat channel.
29
29
  *
30
- * Format is intentionally stable and tag-prefixed so the `reply-channel`
30
+ * Format is intentionally stable and tag-prefixed so the `reply-chat`
31
31
  * skill (and future tooling) can reliably extract the channelId without
32
32
  * regex ambiguity. The `回复:` hint line gives the agent a one-step
33
33
  * instruction on how to reply.
@@ -41,8 +41,8 @@ export function defaultFormatPrompt(args) {
41
41
  // to "optional" for non-@'d members.
42
42
  const mode = responseMode ?? 'required';
43
43
  const replyHint = mode === 'optional'
44
- ? `回复本频道: 你在此 huddle 中收到此消息但未被 @ — 如有必要可用 \`reply-channel\` skill (channelId="${channelId}") 回复,否则不回复也可以。`
45
- : `回复本频道: 用 \`reply-channel\` skill, 参数 channelId="${channelId}"、content="<your reply>"。`;
44
+ ? `回复本频道: 你在此 huddle 中收到此消息但未被 @ — 如有必要可用 \`reply-chat\` skill (conversationId="${channelId}") 回复,否则不回复也可以。`
45
+ : `回复本频道: 用 \`reply-chat\` skill, 参数 conversationId="${channelId}"、content="<your reply>"。`;
46
46
  return [
47
47
  `[CHAT:${channelId}]${idHint} <${senderId}@${channelName}>`,
48
48
  ``,
@@ -65,12 +65,14 @@ export class ChatV2DispatcherService {
65
65
  formatPrompt;
66
66
  mentionResolver;
67
67
  huddleMembersFor;
68
+ activateAgent;
68
69
  logger;
69
70
  constructor(options) {
70
71
  this.agentSink = options.agentSink;
71
72
  this.formatPrompt = options.formatPrompt ?? defaultFormatPrompt;
72
73
  this.mentionResolver = options.mentionResolver;
73
74
  this.huddleMembersFor = options.huddleMembersFor;
75
+ this.activateAgent = options.activateAgent;
74
76
  this.logger = LoggerService.getInstance().createComponentLogger('ChatV2Dispatcher');
75
77
  }
76
78
  /**
@@ -354,12 +356,46 @@ export class ChatV2DispatcherService {
354
356
  return { dispatched: false, error: errMsg };
355
357
  }
356
358
  if (!result.success) {
357
- this.logger.warn('chat-v2 dispatch reported failure', {
358
- channelId: channel.id,
359
- agentSession: channel.agentSession,
360
- err: result.error,
361
- });
362
- return { dispatched: false, error: result.error ?? 'unknown sink failure' };
359
+ // Auto-activate on send: the agent's session doesn't exist (inactive).
360
+ // When an activation hook is wired, start the agent and retry delivery
361
+ // once — so messaging an offline agent wakes it and delivers, instead
362
+ // of silently queueing. This is user-initiated, so it bypasses the
363
+ // orchestrator wake-gate by design.
364
+ if (this.activateAgent) {
365
+ this.logger.info('chat-v2 dispatch: agent inactive — activating on send', {
366
+ channelId: channel.id,
367
+ agentSession: channel.agentSession,
368
+ });
369
+ let activated = false;
370
+ try {
371
+ activated = await this.activateAgent(channel.agentSession);
372
+ }
373
+ catch (err) {
374
+ this.logger.warn('chat-v2 activate-on-send failed', {
375
+ agentSession: channel.agentSession,
376
+ err: err instanceof Error ? err.message : String(err),
377
+ });
378
+ }
379
+ if (activated) {
380
+ try {
381
+ result = await this.agentSink.sendMessageToAgent(channel.agentSession, prompt);
382
+ }
383
+ catch (err) {
384
+ return {
385
+ dispatched: false,
386
+ error: err instanceof Error ? err.message : String(err),
387
+ };
388
+ }
389
+ }
390
+ }
391
+ if (!result.success) {
392
+ this.logger.warn('chat-v2 dispatch reported failure', {
393
+ channelId: channel.id,
394
+ agentSession: channel.agentSession,
395
+ err: result.error,
396
+ });
397
+ return { dispatched: false, error: result.error ?? 'unknown sink failure' };
398
+ }
363
399
  }
364
400
  this.logger.debug('chat-v2 dispatched', {
365
401
  channelId: channel.id,
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.dispatcher.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.dispatcher.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-v2.dispatcher.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.dispatcher.service.ts"],"names":[],"mappings":"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"}
@@ -111,4 +111,32 @@ export declare function createOssAgentPresenceProvider(storage: IStorageServiceL
111
111
  isAgentActive?: IsAgentActiveFn;
112
112
  now?: () => number;
113
113
  }): IAgentPresenceProvider;
114
+ /**
115
+ * SYNCHRONOUS presence for the channel-LIST path.
116
+ *
117
+ * `ChatV2Service.toChannelDTO` is synchronous and `listChannels` builds many
118
+ * DTOs at once, so the channel rows (which drive the DM presence dots) need a
119
+ * sync `getPresence`. The async {@link createOssAgentPresenceProvider} backs
120
+ * the richer `/presence/:id` endpoint, but it was never wired into the service
121
+ * — so every DM dot fell back to `DEFAULT_PRESENCE` ('offline') regardless of
122
+ * whether the agent was actually running.
123
+ *
124
+ * This factory returns a sync presence keyed on runtime liveness — the SAME
125
+ * "is the agent's child process alive" signal behind the Dashboard's
126
+ * "Running Agents" count (`isAgentActive` → `getSessionBackendSync`) — so a DM
127
+ * dot turns green exactly when the agent is running. Busy/idle refinement needs
128
+ * the async team-status read and stays in the `/presence` provider; here online
129
+ * vs offline is what the dot needs.
130
+ *
131
+ * @param opts.isAliveSync - Liveness override (tests pass a stub).
132
+ * @param opts.now - Clock override (tests freeze `lastSeenAt`).
133
+ * @returns A sync `(agentSession) => { status, lastSeenAt }` for `getPresence`.
134
+ */
135
+ export declare function createOssSyncPresence(opts?: {
136
+ isAliveSync?: (agentSession: string) => boolean;
137
+ now?: () => number;
138
+ }): (agentSession: string) => {
139
+ status: ChatAgentPresenceDTO['status'];
140
+ lastSeenAt: number | null;
141
+ };
114
142
  //# sourceMappingURL=chat-v2.providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.providers.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,iDAAiD,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI,OAAO,CACjB,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,KAAK,CAAC;YACb,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,aAAa,EAAE,MAAM,CAAC;YACtB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC,CACH,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAExE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,0BAA0B,GAAG,MAAM,OAAO,CAAC;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAAC,CAAC;AAEV;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,mBAAmB,EAC5B,IAAI,GAAE;IACJ,yBAAyB,CAAC,EAAE,0BAA0B,CAAC;CACnD,GACL,uBAAuB,CA2DzB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EACjB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,oBAAoB,CAAC,QAAQ,CAAC,CAOhC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,mBAAmB,EAC5B,IAAI,GAAE;IACJ,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACf,GACL,sBAAsB,CAiDxB"}
1
+ {"version":3,"file":"chat-v2.providers.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,iDAAiD,CAAC;AAGzD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI,OAAO,CACjB,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,KAAK,CAAC;YACb,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,aAAa,EAAE,MAAM,CAAC;YACtB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC,CACH,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAExE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,0BAA0B,GAAG,MAAM,OAAO,CAAC;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAAC,CAAC;AAEV;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,mBAAmB,EAC5B,IAAI,GAAE;IACJ,yBAAyB,CAAC,EAAE,0BAA0B,CAAC;CACnD,GACL,uBAAuB,CA2DzB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EACjB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,oBAAoB,CAAC,QAAQ,CAAC,CAOhC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,mBAAmB,EAC5B,IAAI,GAAE;IACJ,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACf,GACL,sBAAsB,CAiDxB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,GAAE;IAC1C,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACf,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK;IAAE,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA2BvG"}
@@ -19,6 +19,7 @@
19
19
  *
20
20
  * @module services/chat-v2/chat-v2.providers
21
21
  */
22
+ import { getSessionBackendSync } from '../session/index.js';
22
23
  /**
23
24
  * Build the production `IAgentDirectoryProvider`. Flattens
24
25
  * `StorageService.getTeams()` into the narrow controller-facing shape,
@@ -179,4 +180,52 @@ export function createOssAgentPresenceProvider(storage, opts = {}) {
179
180
  },
180
181
  };
181
182
  }
183
+ /**
184
+ * SYNCHRONOUS presence for the channel-LIST path.
185
+ *
186
+ * `ChatV2Service.toChannelDTO` is synchronous and `listChannels` builds many
187
+ * DTOs at once, so the channel rows (which drive the DM presence dots) need a
188
+ * sync `getPresence`. The async {@link createOssAgentPresenceProvider} backs
189
+ * the richer `/presence/:id` endpoint, but it was never wired into the service
190
+ * — so every DM dot fell back to `DEFAULT_PRESENCE` ('offline') regardless of
191
+ * whether the agent was actually running.
192
+ *
193
+ * This factory returns a sync presence keyed on runtime liveness — the SAME
194
+ * "is the agent's child process alive" signal behind the Dashboard's
195
+ * "Running Agents" count (`isAgentActive` → `getSessionBackendSync`) — so a DM
196
+ * dot turns green exactly when the agent is running. Busy/idle refinement needs
197
+ * the async team-status read and stays in the `/presence` provider; here online
198
+ * vs offline is what the dot needs.
199
+ *
200
+ * @param opts.isAliveSync - Liveness override (tests pass a stub).
201
+ * @param opts.now - Clock override (tests freeze `lastSeenAt`).
202
+ * @returns A sync `(agentSession) => { status, lastSeenAt }` for `getPresence`.
203
+ */
204
+ export function createOssSyncPresence(opts = {}) {
205
+ const now = opts.now ?? Date.now;
206
+ const isLive = opts.isAliveSync ??
207
+ ((agentSession) => {
208
+ try {
209
+ const backend = getSessionBackendSync();
210
+ return (!!backend &&
211
+ backend.sessionExists(agentSession) &&
212
+ !!backend.isChildProcessAlive?.(agentSession));
213
+ }
214
+ catch {
215
+ return false;
216
+ }
217
+ });
218
+ return (agentSession) => {
219
+ let live = false;
220
+ try {
221
+ live = isLive(agentSession);
222
+ }
223
+ catch {
224
+ // toChannelDTO must never throw on presence (it'd blank the whole
225
+ // channel list) — degrade to offline.
226
+ live = false;
227
+ }
228
+ return { status: live ? 'online' : 'offline', lastSeenAt: live ? now() : null };
229
+ };
230
+ }
182
231
  //# sourceMappingURL=chat-v2.providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.providers.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-v2.providers.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.providers.ts"],"names":[],"mappings":"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"}
@@ -109,6 +109,13 @@ export interface ListChannelsArgs {
109
109
  * team_id) drop out of the result.
110
110
  */
111
111
  teamId?: string;
112
+ /**
113
+ * Include "bridged" channels (Slack inbound, owned by `'system'`) in the
114
+ * result. Defaults to true. Only applies to the unfiltered list (no
115
+ * `type`/`teamId` filter) — bridged threads are surfaced alongside the
116
+ * user's own DMs/channels in the consolidated chat list.
117
+ */
118
+ includeBridged?: boolean;
112
119
  }
113
120
  /** Arguments for `sendMessage`. */
114
121
  export interface SendMessageArgs {
@@ -223,10 +230,21 @@ export declare class ChatV2Service extends EventEmitter {
223
230
  private readonly db;
224
231
  private readonly channels;
225
232
  private readonly messages;
226
- private readonly presence;
233
+ private presence;
227
234
  private readonly validateTeamMembership;
228
235
  private readonly now;
229
236
  constructor(options: ChatV2ServiceOptions);
237
+ /**
238
+ * Wire (or replace) the synchronous presence provider used by the channel
239
+ * DTO mapper — i.e. what drives the DM presence dots in the conversation
240
+ * list. Settable POST-construction because the singleton is first-constructed
241
+ * by whichever caller wins the race (slack bridge, ws gateway, replay, …),
242
+ * usually with no presence wired; the composition root then calls this once
243
+ * so the dots reflect real agent liveness regardless of construction order.
244
+ *
245
+ * @param getPresence - Sync presence lookup (e.g. `createOssSyncPresence()`)
246
+ */
247
+ setPresenceProvider(getPresence: ChatV2ServiceOptions['getPresence']): void;
230
248
  /** Release the DB handle. Safe to call during graceful shutdown / in tests. */
231
249
  close(): void;
232
250
  /**
@@ -370,6 +388,35 @@ export declare class ChatV2Service extends EventEmitter {
370
388
  channel: ChatChannelDTO;
371
389
  created: boolean;
372
390
  };
391
+ /**
392
+ * Find-or-create the canonical `type='channel'` channel for a team.
393
+ *
394
+ * Backs the consolidated team-chat surface: opening a team's workspace
395
+ * deep-link must always land on a real channel, but nothing else
396
+ * auto-creates one. This is idempotent — if the team already has any
397
+ * active channel it is returned untouched; otherwise a single default
398
+ * channel (e.g. `#general`) is created. The same tenant/validation rules
399
+ * as the public {@link createChannel} apply (the caller must pass team
400
+ * membership when a `validateTeamMembership` check is wired).
401
+ *
402
+ * @param args - Ensure args
403
+ * @param args.teamId - The team to ensure a channel for (required)
404
+ * @param args.name - Display name for a freshly created channel; defaults to `#general`
405
+ * @param args.purpose - Optional channel purpose
406
+ * @param args.principal - The authenticated caller
407
+ * @returns The existing or freshly created channel, with `created` flag
408
+ * @throws {ChatError} `validation_error` (400) when `teamId` is blank
409
+ * @throws {ChatError} `forbidden_team` (403) when the caller fails the membership check
410
+ */
411
+ ensureTeamChannel(args: {
412
+ teamId: string;
413
+ name?: string;
414
+ purpose?: string;
415
+ principal: ChatPrincipal;
416
+ }): {
417
+ channel: ChatChannelDTO;
418
+ created: boolean;
419
+ };
373
420
  /**
374
421
  * Server-internal idempotent helper used by migration / bridge code to
375
422
  * map a legacy conversationId (e.g. `slack-D0AC7-1234`, `web-conv-abc`)
@@ -649,7 +696,18 @@ export declare class ChatV2Service extends EventEmitter {
649
696
  /** Fetch the channel and enforce caller = owner. */
650
697
  private requireOwnedChannel;
651
698
  /**
652
- * Fetch the channel and allow if the caller is the owner OR the bound agent.
699
+ * Fetch the channel and allow if the caller is the owner OR the bound agent
700
+ * OR the channel is a shared bridged Slack conversation.
701
+ *
702
+ * Slack-bridged channels (`slack-…`, persisted under the synthetic `'system'`
703
+ * owner by the inbound bridge) belong to no single Crewly user — exactly like
704
+ * {@link ChannelStore.listBridged} surfaces them in the consolidated list
705
+ * regardless of owner, this lets the web user READ them (e.g. the team-chat
706
+ * surface merges them inline into the Orchestrator timeline). Writes are still
707
+ * gated downstream by {@link resolveSender}, which throws `forbidden` unless
708
+ * the caller is the owner or bound agent — so this read allowance does not let
709
+ * a user post into a bridged channel.
710
+ *
653
711
  * Used for read + send; agents must always be acting from their own session.
654
712
  */
655
713
  private requireReadableChannel;
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-v2.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.service.ts"],"names":[],"mappings":"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"}
@@ -70,6 +70,19 @@ export class ChatV2Service extends EventEmitter {
70
70
  this.validateTeamMembership = options.validateTeamMembership;
71
71
  this.now = options.now ?? Date.now;
72
72
  }
73
+ /**
74
+ * Wire (or replace) the synchronous presence provider used by the channel
75
+ * DTO mapper — i.e. what drives the DM presence dots in the conversation
76
+ * list. Settable POST-construction because the singleton is first-constructed
77
+ * by whichever caller wins the race (slack bridge, ws gateway, replay, …),
78
+ * usually with no presence wired; the composition root then calls this once
79
+ * so the dots reflect real agent liveness regardless of construction order.
80
+ *
81
+ * @param getPresence - Sync presence lookup (e.g. `createOssSyncPresence()`)
82
+ */
83
+ setPresenceProvider(getPresence) {
84
+ this.presence = getPresence;
85
+ }
73
86
  /** Release the DB handle. Safe to call during graceful shutdown / in tests. */
74
87
  close() {
75
88
  try {
@@ -401,6 +414,44 @@ export class ChatV2Service extends EventEmitter {
401
414
  });
402
415
  return { channel, created: true };
403
416
  }
417
+ /**
418
+ * Find-or-create the canonical `type='channel'` channel for a team.
419
+ *
420
+ * Backs the consolidated team-chat surface: opening a team's workspace
421
+ * deep-link must always land on a real channel, but nothing else
422
+ * auto-creates one. This is idempotent — if the team already has any
423
+ * active channel it is returned untouched; otherwise a single default
424
+ * channel (e.g. `#general`) is created. The same tenant/validation rules
425
+ * as the public {@link createChannel} apply (the caller must pass team
426
+ * membership when a `validateTeamMembership` check is wired).
427
+ *
428
+ * @param args - Ensure args
429
+ * @param args.teamId - The team to ensure a channel for (required)
430
+ * @param args.name - Display name for a freshly created channel; defaults to `#general`
431
+ * @param args.purpose - Optional channel purpose
432
+ * @param args.principal - The authenticated caller
433
+ * @returns The existing or freshly created channel, with `created` flag
434
+ * @throws {ChatError} `validation_error` (400) when `teamId` is blank
435
+ * @throws {ChatError} `forbidden_team` (403) when the caller fails the membership check
436
+ */
437
+ ensureTeamChannel(args) {
438
+ const teamId = (args.teamId ?? '').trim();
439
+ if (teamId.length === 0) {
440
+ throw new ChatError(CHAT_ERROR_CODES.VALIDATION, 400, 'teamId is required');
441
+ }
442
+ const existing = this.channels.findActiveChannelByTeam(teamId);
443
+ if (existing) {
444
+ return { channel: this.toChannelDTO(existing), created: false };
445
+ }
446
+ const channel = this.createChannel({
447
+ name: (args.name ?? '#general').trim(),
448
+ purpose: args.purpose,
449
+ principal: args.principal,
450
+ type: 'channel',
451
+ teamId,
452
+ });
453
+ return { channel, created: true };
454
+ }
404
455
  /**
405
456
  * Server-internal idempotent helper used by migration / bridge code to
406
457
  * map a legacy conversationId (e.g. `slack-D0AC7-1234`, `web-conv-abc`)
@@ -618,6 +669,17 @@ export class ChatV2Service extends EventEmitter {
618
669
  type: args.type,
619
670
  teamId: teamIdFilter,
620
671
  });
672
+ // Surface bridged (Slack) threads alongside the user's own channels on
673
+ // the unfiltered list. They are owned by `'system'`, so listByOwner
674
+ // never returns them; merge + dedupe by id (the user's own row wins).
675
+ const includeBridged = (args.includeBridged ?? true) && args.type === undefined && teamIdFilter === undefined;
676
+ if (includeBridged) {
677
+ const seen = new Set(rows.map((r) => r.id));
678
+ const bridged = this.channels
679
+ .listBridged({ includeArchived: args.includeArchived, limit: args.limit })
680
+ .filter((r) => !seen.has(r.id));
681
+ return [...rows, ...bridged].map((r) => this.toChannelDTO(r));
682
+ }
621
683
  return rows.map((r) => this.toChannelDTO(r));
622
684
  }
623
685
  /**
@@ -964,9 +1026,25 @@ export class ChatV2Service extends EventEmitter {
964
1026
  limit: args.limit,
965
1027
  direction: args.direction,
966
1028
  });
1029
+ // Slack-style thread reply counts: one aggregate query for the whole
1030
+ // channel, then attach `replyCount`/`lastReplyAt` to the root-message
1031
+ // DTOs on this page. Root messages are those whose own `threadId` is
1032
+ // unset; replies never carry a count.
1033
+ const threadSummary = this.messages.threadReplySummary(args.channelId);
1034
+ const messages = page.rows.map((r) => {
1035
+ const dto = this.toMessageDTO(r, []);
1036
+ if (dto.threadId === undefined) {
1037
+ const summary = threadSummary.get(dto.id);
1038
+ if (summary) {
1039
+ dto.replyCount = summary.replyCount;
1040
+ dto.lastReplyAt = new Date(summary.lastReplyAtMs).toISOString();
1041
+ }
1042
+ }
1043
+ return dto;
1044
+ });
967
1045
  return {
968
1046
  channelId: args.channelId,
969
- messages: page.rows.map((r) => this.toMessageDTO(r, [])),
1047
+ messages,
970
1048
  nextCursor: page.nextCursor,
971
1049
  prevCursor: page.prevCursor,
972
1050
  };
@@ -986,7 +1064,18 @@ export class ChatV2Service extends EventEmitter {
986
1064
  return row;
987
1065
  }
988
1066
  /**
989
- * Fetch the channel and allow if the caller is the owner OR the bound agent.
1067
+ * Fetch the channel and allow if the caller is the owner OR the bound agent
1068
+ * OR the channel is a shared bridged Slack conversation.
1069
+ *
1070
+ * Slack-bridged channels (`slack-…`, persisted under the synthetic `'system'`
1071
+ * owner by the inbound bridge) belong to no single Crewly user — exactly like
1072
+ * {@link ChannelStore.listBridged} surfaces them in the consolidated list
1073
+ * regardless of owner, this lets the web user READ them (e.g. the team-chat
1074
+ * surface merges them inline into the Orchestrator timeline). Writes are still
1075
+ * gated downstream by {@link resolveSender}, which throws `forbidden` unless
1076
+ * the caller is the owner or bound agent — so this read allowance does not let
1077
+ * a user post into a bridged channel.
1078
+ *
990
1079
  * Used for read + send; agents must always be acting from their own session.
991
1080
  */
992
1081
  requireReadableChannel(channelId, principal) {
@@ -996,7 +1085,8 @@ export class ChatV2Service extends EventEmitter {
996
1085
  }
997
1086
  const isOwner = row.owner_user_id === principal.userId;
998
1087
  const isBoundAgent = !!principal.agentSession && principal.agentSession === row.agent_session;
999
- if (!isOwner && !isBoundAgent) {
1088
+ const isSharedBridged = row.id.startsWith('slack-');
1089
+ if (!isOwner && !isBoundAgent && !isSharedBridged) {
1000
1090
  throw new ChatError(CHAT_ERROR_CODES.CHANNEL_NOT_FOUND, 404, 'Channel not found');
1001
1091
  }
1002
1092
  if (row.archived_at) {