crewly 1.16.0 → 1.17.1

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 (200) hide show
  1. package/README.md +33 -1
  2. package/config/roles/orchestrator/prompt.md +20 -5
  3. package/config/skills/agent/core/calendar-create/SKILL.md +62 -0
  4. package/config/skills/agent/core/calendar-create/execute.sh +91 -0
  5. package/config/skills/agent/core/calendar-create/execute.test.sh +80 -0
  6. package/config/skills/agent/core/calendar-list/SKILL.md +58 -0
  7. package/config/skills/agent/core/calendar-list/execute.sh +88 -0
  8. package/config/skills/agent/core/calendar-list/execute.test.sh +71 -0
  9. package/config/skills/agent/core/gmail-read/SKILL.md +61 -0
  10. package/config/skills/agent/core/gmail-read/execute.sh +62 -0
  11. package/config/skills/agent/core/gmail-read/execute.test.sh +68 -0
  12. package/config/skills/agent/core/gmail-search/SKILL.md +64 -0
  13. package/config/skills/agent/core/gmail-search/execute.sh +70 -0
  14. package/config/skills/agent/core/gmail-search/execute.test.sh +67 -0
  15. package/config/skills/agent/core/gmail-send/SKILL.md +69 -0
  16. package/config/skills/agent/core/gmail-send/execute.sh +114 -0
  17. package/config/skills/agent/core/gmail-send/execute.test.sh +83 -0
  18. package/config/skills/orchestrator/list-missions/SKILL.md +47 -0
  19. package/config/skills/orchestrator/list-missions/execute.sh +34 -0
  20. package/config/skills/orchestrator/list-missions/execute.test.sh +33 -0
  21. package/config/slack-master-app-manifest.json +64 -0
  22. package/dist/backend/backend/src/constants.d.ts +125 -0
  23. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  24. package/dist/backend/backend/src/constants.js +125 -0
  25. package/dist/backend/backend/src/constants.js.map +1 -1
  26. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +3 -1
  28. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/google/google.controller.d.ts +100 -0
  30. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -0
  31. package/dist/backend/backend/src/controllers/google/google.controller.js +293 -0
  32. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -0
  33. package/dist/backend/backend/src/controllers/google/google.routes.d.ts +26 -0
  34. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -0
  35. package/dist/backend/backend/src/controllers/google/google.routes.js +38 -0
  36. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -0
  37. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  38. package/dist/backend/backend/src/controllers/slack/slack.controller.js +209 -2
  39. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  40. package/dist/backend/backend/src/index.d.ts.map +1 -1
  41. package/dist/backend/backend/src/index.js +58 -8
  42. package/dist/backend/backend/src/index.js.map +1 -1
  43. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  44. package/dist/backend/backend/src/routes/api.routes.js +4 -0
  45. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  46. package/dist/backend/backend/src/services/cloud/cloud-initializer.d.ts +8 -0
  47. package/dist/backend/backend/src/services/cloud/cloud-initializer.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/cloud/cloud-initializer.js +25 -0
  49. package/dist/backend/backend/src/services/cloud/cloud-initializer.js.map +1 -1
  50. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
  51. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +1 -0
  53. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  54. package/dist/backend/backend/src/services/core/crewly-home.utils.d.ts +49 -0
  55. package/dist/backend/backend/src/services/core/crewly-home.utils.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/core/crewly-home.utils.js +86 -0
  57. package/dist/backend/backend/src/services/core/crewly-home.utils.js.map +1 -1
  58. package/dist/backend/backend/src/services/google/calendar.service.d.ts +98 -0
  59. package/dist/backend/backend/src/services/google/calendar.service.d.ts.map +1 -0
  60. package/dist/backend/backend/src/services/google/calendar.service.js +125 -0
  61. package/dist/backend/backend/src/services/google/calendar.service.js.map +1 -0
  62. package/dist/backend/backend/src/services/google/gmail.service.d.ts +165 -0
  63. package/dist/backend/backend/src/services/google/gmail.service.d.ts.map +1 -0
  64. package/dist/backend/backend/src/services/google/gmail.service.js +296 -0
  65. package/dist/backend/backend/src/services/google/gmail.service.js.map +1 -0
  66. package/dist/backend/backend/src/services/google/google-api.client.d.ts +44 -0
  67. package/dist/backend/backend/src/services/google/google-api.client.d.ts.map +1 -0
  68. package/dist/backend/backend/src/services/google/google-api.client.js +104 -0
  69. package/dist/backend/backend/src/services/google/google-api.client.js.map +1 -0
  70. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +159 -0
  71. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -0
  72. package/dist/backend/backend/src/services/google/google-workspace-token.service.js +274 -0
  73. package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -0
  74. package/dist/backend/backend/src/services/memory/mission-context.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/memory/mission-context.service.js +2 -1
  76. package/dist/backend/backend/src/services/memory/mission-context.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/memory/project-memory.service.js +3 -2
  79. package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -1
  80. package/dist/backend/backend/src/services/memory/session-memory.service.d.ts.map +1 -1
  81. package/dist/backend/backend/src/services/memory/session-memory.service.js +2 -1
  82. package/dist/backend/backend/src/services/memory/session-memory.service.js.map +1 -1
  83. package/dist/backend/backend/src/services/project/task.service.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/project/task.service.js +2 -3
  85. package/dist/backend/backend/src/services/project/task.service.js.map +1 -1
  86. package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts.map +1 -1
  87. package/dist/backend/backend/src/services/project/ticket-editor.service.js +2 -3
  88. package/dist/backend/backend/src/services/project/ticket-editor.service.js.map +1 -1
  89. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts +12 -1
  90. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -1
  91. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js +30 -0
  92. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js.map +1 -1
  93. package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts +186 -0
  94. package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts.map +1 -0
  95. package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js +409 -0
  96. package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js.map +1 -0
  97. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +95 -1
  98. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  99. package/dist/backend/backend/src/services/slack/slack-initializer.js +284 -4
  100. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  101. package/dist/backend/backend/src/services/slack/slack-instance-registry.service.d.ts +178 -0
  102. package/dist/backend/backend/src/services/slack/slack-instance-registry.service.d.ts.map +1 -0
  103. package/dist/backend/backend/src/services/slack/slack-instance-registry.service.js +392 -0
  104. package/dist/backend/backend/src/services/slack/slack-instance-registry.service.js.map +1 -0
  105. package/dist/backend/backend/src/services/slack/slack.service.d.ts +76 -1
  106. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  107. package/dist/backend/backend/src/services/slack/slack.service.js +234 -47
  108. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  109. package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
  110. package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -1
  111. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  112. package/dist/backend/backend/src/services/v3/mission-paths.d.ts +17 -0
  113. package/dist/backend/backend/src/services/v3/mission-paths.d.ts.map +1 -1
  114. package/dist/backend/backend/src/services/v3/mission-paths.js +21 -2
  115. package/dist/backend/backend/src/services/v3/mission-paths.js.map +1 -1
  116. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +4 -0
  117. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -1
  118. package/dist/backend/backend/src/services/v3/mission-reminder.service.js +17 -0
  119. package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -1
  120. package/dist/backend/backend/src/services/v3/okr-owner-guidance.service.d.ts +116 -0
  121. package/dist/backend/backend/src/services/v3/okr-owner-guidance.service.d.ts.map +1 -0
  122. package/dist/backend/backend/src/services/v3/okr-owner-guidance.service.js +254 -0
  123. package/dist/backend/backend/src/services/v3/okr-owner-guidance.service.js.map +1 -0
  124. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  125. package/dist/backend/backend/src/services/v3/request.service.js +2 -1
  126. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  127. package/dist/backend/backend/src/services/v3/task-projection.service.d.ts.map +1 -1
  128. package/dist/backend/backend/src/services/v3/task-projection.service.js +2 -1
  129. package/dist/backend/backend/src/services/v3/task-projection.service.js.map +1 -1
  130. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
  131. package/dist/backend/backend/src/services/v3/trigger-engine.service.js +2 -1
  132. package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
  133. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  134. package/dist/backend/backend/src/services/v3/v3-data.service.js +2 -1
  135. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  136. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
  137. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +6 -1
  138. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
  139. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
  140. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +3 -1
  141. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
  142. package/dist/backend/backend/src/types/slack.types.d.ts +141 -2
  143. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  144. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  145. package/dist/backend/backend/src/types/v2/mission.types.d.ts +2 -0
  146. package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
  147. package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
  148. package/dist/backend/build-info.json +2 -2
  149. package/dist/cli/backend/src/constants.d.ts +125 -0
  150. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  151. package/dist/cli/backend/src/constants.js +125 -0
  152. package/dist/cli/backend/src/constants.js.map +1 -1
  153. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +1 -1
  154. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  155. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js +1 -0
  156. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  157. package/dist/cli/backend/src/services/core/crewly-home.utils.d.ts +49 -0
  158. package/dist/cli/backend/src/services/core/crewly-home.utils.d.ts.map +1 -1
  159. package/dist/cli/backend/src/services/core/crewly-home.utils.js +86 -0
  160. package/dist/cli/backend/src/services/core/crewly-home.utils.js.map +1 -1
  161. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -1
  162. package/dist/cli/backend/src/services/memory/mission-context.service.js +2 -1
  163. package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -1
  164. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  165. package/dist/cli/backend/src/services/memory/project-memory.service.js +3 -2
  166. package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -1
  167. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -1
  168. package/dist/cli/backend/src/services/memory/session-memory.service.js +2 -1
  169. package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -1
  170. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts +12 -1
  171. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -1
  172. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js +30 -0
  173. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js.map +1 -1
  174. package/dist/cli/backend/src/services/slack/slack.service.d.ts +76 -1
  175. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  176. package/dist/cli/backend/src/services/slack/slack.service.js +234 -47
  177. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  178. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
  179. package/dist/cli/backend/src/services/v3/escalation-router.service.js +2 -1
  180. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -1
  181. package/dist/cli/backend/src/services/v3/mission-paths.d.ts +17 -0
  182. package/dist/cli/backend/src/services/v3/mission-paths.d.ts.map +1 -1
  183. package/dist/cli/backend/src/services/v3/mission-paths.js +21 -2
  184. package/dist/cli/backend/src/services/v3/mission-paths.js.map +1 -1
  185. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  186. package/dist/cli/backend/src/services/v3/request.service.js +2 -1
  187. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  188. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  189. package/dist/cli/backend/src/services/v3/v3-data.service.js +2 -1
  190. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
  191. package/dist/cli/backend/src/types/slack.types.d.ts +141 -2
  192. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
  193. package/dist/cli/backend/src/types/slack.types.js.map +1 -1
  194. package/dist/cli/backend/src/types/v2/mission.types.d.ts +2 -0
  195. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -1
  196. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -1
  197. package/frontend/dist/assets/{index-019817e2.js → index-c87332bf.js} +273 -273
  198. package/frontend/dist/assets/{index-a56613e7.css → index-f6b4230e.css} +1 -1
  199. package/frontend/dist/index.html +2 -2
  200. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-instance-registry.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-instance-registry.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,392 @@
1
+ /**
2
+ * Slack Instance Registry Service — tells Crewly Cloud what this instance
3
+ * can handle, so Slack traffic reaches the right machine.
4
+ *
5
+ * Several OSS instances of one Crewly account may run at once (laptop,
6
+ * VPS, …). Cloud receives every Slack event for the account's workspace and
7
+ * routes it by a registry: which instance owns which team channel and which
8
+ * agent sessions, and which instance is the **primary** (DMs to the master
9
+ * bot and unmapped channels). This service keeps that registry fresh:
10
+ *
11
+ * - `PUT /api/cloud/slack/instances/:instanceId` on boot, on every team
12
+ * save (debounced) and every 5 minutes, with the team → channel mapping
13
+ * from `SlackTeamChannelService` and each team's member session names;
14
+ * - `POST /api/cloud/slack/agents/sync` with the team roster on boot and
15
+ * when a team is created, so Cloud provisions the per-agent apps; the
16
+ * returned `installUrls` (agents still needing their one-time install
17
+ * click) are kept for Settings.
18
+ *
19
+ * `instanceId` is the Cloud device id (`DeviceIdentityService`), the relay
20
+ * `queueId` comes from `CloudSyncService`, and `primary` is
21
+ * `CREWLY_SLACK_PRIMARY=1` or the persisted Settings toggle
22
+ * (`~/.crewly/slack-instance.json`).
23
+ *
24
+ * @module services/slack/slack-instance-registry.service
25
+ */
26
+ import * as path from 'path';
27
+ import { promises as fs } from 'fs';
28
+ import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
29
+ import { atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
30
+ import { LoggerService } from '../core/logger.service.js';
31
+ import { SLACK_CLOUD_CONSTANTS } from '../../constants.js';
32
+ import { SlackIdentityCloudError } from './slack-agent-identity.service.js';
33
+ import { teamChannelMembers } from './slack-team-channel.service.js';
34
+ /**
35
+ * Read the Crewly version from package.json (best-effort).
36
+ *
37
+ * @returns Version string or 'unknown'
38
+ */
39
+ async function readCrewlyVersion() {
40
+ try {
41
+ const raw = await fs.readFile(path.join(process.cwd(), 'package.json'), 'utf-8');
42
+ const pkg = JSON.parse(raw);
43
+ return pkg.version || 'unknown';
44
+ }
45
+ catch {
46
+ return 'unknown';
47
+ }
48
+ }
49
+ /**
50
+ * Service — see module docs.
51
+ */
52
+ export class SlackInstanceRegistryService {
53
+ logger;
54
+ deps;
55
+ settingsPath;
56
+ fetchImpl;
57
+ settings = null;
58
+ instanceId = null;
59
+ deviceName = null;
60
+ version = null;
61
+ heartbeatTimer = null;
62
+ debounceTimer = null;
63
+ unsubscribeStorage = null;
64
+ pendingInstalls = [];
65
+ lastHeartbeatAt = null;
66
+ lastError = null;
67
+ started = false;
68
+ /** Consecutive heartbeats skipped because the relay queue was not registered yet */
69
+ queueWaitRetries = 0;
70
+ constructor(deps) {
71
+ this.deps = deps;
72
+ this.settingsPath =
73
+ deps.settingsPath ?? path.join(getCrewlyHomePath(), SLACK_CLOUD_CONSTANTS.INSTANCE_SETTINGS_FILENAME);
74
+ this.fetchImpl = deps.fetchImpl ?? fetch;
75
+ this.logger = LoggerService.getInstance().createComponentLogger('SlackInstanceRegistry');
76
+ }
77
+ // -------------------------------------------------------------------------
78
+ // Lifecycle
79
+ // -------------------------------------------------------------------------
80
+ /**
81
+ * Boot: heartbeat + agent sync now, then heartbeat every 5 minutes and on
82
+ * every team save. Idempotent; never throws (Cloud failures are logged).
83
+ */
84
+ async start() {
85
+ if (this.started)
86
+ return;
87
+ this.started = true;
88
+ this.unsubscribeStorage = this.deps.storage.onStorageEvent((event) => this.handleStorageEvent(event));
89
+ const setI = this.deps.setInterval ?? setInterval;
90
+ this.heartbeatTimer = setI(() => {
91
+ void this.heartbeat();
92
+ }, SLACK_CLOUD_CONSTANTS.REGISTRY_HEARTBEAT_INTERVAL_MS);
93
+ this.heartbeatTimer.unref?.();
94
+ await this.heartbeat();
95
+ await this.syncAgents();
96
+ }
97
+ /** Undo {@link start}. */
98
+ stop() {
99
+ if (!this.started)
100
+ return;
101
+ this.unsubscribeStorage?.();
102
+ this.unsubscribeStorage = null;
103
+ if (this.heartbeatTimer) {
104
+ (this.deps.clearInterval ?? clearInterval)(this.heartbeatTimer);
105
+ this.heartbeatTimer = null;
106
+ }
107
+ if (this.debounceTimer) {
108
+ (this.deps.clearTimeout ?? clearTimeout)(this.debounceTimer);
109
+ this.debounceTimer = null;
110
+ }
111
+ this.started = false;
112
+ }
113
+ /**
114
+ * React to team lifecycle: every save re-registers (debounced — status
115
+ * writes fire this too); a created team also provisions its agents.
116
+ *
117
+ * @param event - Storage event
118
+ */
119
+ async handleStorageEvent(event) {
120
+ if (event.kind === 'team-saved' && event.created) {
121
+ await this.syncAgents();
122
+ }
123
+ this.scheduleHeartbeat();
124
+ }
125
+ // -------------------------------------------------------------------------
126
+ // Cloud calls
127
+ // -------------------------------------------------------------------------
128
+ /**
129
+ * Build the registry payload from the current teams, channel mappings
130
+ * and settings.
131
+ *
132
+ * @returns The `PUT /instances/:id` body
133
+ */
134
+ async buildPayload() {
135
+ const [{ deviceName }, teams, primary, version] = await Promise.all([
136
+ this.resolveIdentity(),
137
+ this.deps.storage.getTeams(),
138
+ this.isPrimary(),
139
+ this.resolveVersion(),
140
+ ]);
141
+ const teamChannels = this.deps.getTeamChannels();
142
+ return {
143
+ deviceName,
144
+ relayQueueId: this.deps.sync.getQueueId() ?? '',
145
+ primary,
146
+ teams: teams.map((team) => {
147
+ const channelId = teamChannels?.findByTeamId(team.id)?.slackChannelId;
148
+ return {
149
+ teamId: team.id,
150
+ name: team.name,
151
+ ...(channelId ? { channelId } : {}),
152
+ agents: teamChannelMembers(team).map((m) => m.sessionName),
153
+ };
154
+ }),
155
+ crewlyVersion: version,
156
+ };
157
+ }
158
+ /**
159
+ * `PUT /api/cloud/slack/instances/:instanceId`. Skipped (false) when not
160
+ * signed in to Cloud or before the relay queue is registered.
161
+ *
162
+ * @returns True when Cloud accepted the registration
163
+ */
164
+ async heartbeat() {
165
+ if (!this.isAvailable())
166
+ return false;
167
+ if (!this.deps.sync.getQueueId()) {
168
+ // Cloud Sync registers its queue asynchronously right after login;
169
+ // retry on the short debounce a few times, then leave it to the
170
+ // 5-minute cadence (and team saves).
171
+ this.logger.debug('Relay queue not registered yet — skipping Slack registry heartbeat');
172
+ if (this.started && this.queueWaitRetries < SLACK_CLOUD_CONSTANTS.QUEUE_WAIT_MAX_RETRIES) {
173
+ this.queueWaitRetries += 1;
174
+ this.scheduleHeartbeat();
175
+ }
176
+ return false;
177
+ }
178
+ try {
179
+ const { deviceId } = await this.resolveIdentity();
180
+ const payload = await this.buildPayload();
181
+ await this.cloudRequest('PUT', `${SLACK_CLOUD_CONSTANTS.INSTANCES_PATH}/${encodeURIComponent(deviceId)}`, payload);
182
+ this.queueWaitRetries = 0;
183
+ this.lastHeartbeatAt = new Date(this.now()).toISOString();
184
+ this.lastError = null;
185
+ this.logger.debug('Slack instance registered', {
186
+ instanceId: deviceId,
187
+ teams: payload.teams.length,
188
+ primary: payload.primary,
189
+ });
190
+ return true;
191
+ }
192
+ catch (err) {
193
+ this.lastError = err instanceof Error ? err.message : String(err);
194
+ this.logger.warn('Slack instance registry heartbeat failed', { error: this.lastError });
195
+ return false;
196
+ }
197
+ }
198
+ /**
199
+ * `POST /api/cloud/slack/agents/sync` with every team's roster; keeps the
200
+ * returned pending install links.
201
+ *
202
+ * @returns Cloud's answer, or null when skipped / failed
203
+ */
204
+ async syncAgents() {
205
+ if (!this.isAvailable())
206
+ return null;
207
+ try {
208
+ const teams = await this.deps.storage.getTeams();
209
+ const payload = {
210
+ teams: teams.map((team) => ({
211
+ teamId: team.id,
212
+ name: team.name,
213
+ agents: teamChannelMembers(team).map((m) => ({
214
+ agentSession: m.sessionName,
215
+ displayName: m.name || m.sessionName,
216
+ ...(m.avatar ? { avatar: m.avatar } : {}),
217
+ })),
218
+ })),
219
+ };
220
+ const result = await this.cloudRequest('POST', SLACK_CLOUD_CONSTANTS.AGENTS_SYNC_PATH, payload);
221
+ this.pendingInstalls = Array.isArray(result?.installUrls)
222
+ ? result.installUrls.filter((u) => u && typeof u.agentSession === 'string' && typeof u.url === 'string')
223
+ : [];
224
+ this.lastError = null;
225
+ if (this.pendingInstalls.length > 0) {
226
+ this.logger.info('Slack agent apps waiting for their install click', {
227
+ agents: this.pendingInstalls.map((p) => p.agentSession),
228
+ });
229
+ }
230
+ return { installUrls: [...this.pendingInstalls] };
231
+ }
232
+ catch (err) {
233
+ this.lastError = err instanceof Error ? err.message : String(err);
234
+ this.logger.warn('Slack agent sync failed', { error: this.lastError });
235
+ return null;
236
+ }
237
+ }
238
+ // -------------------------------------------------------------------------
239
+ // Primary flag
240
+ // -------------------------------------------------------------------------
241
+ /**
242
+ * Whether this instance is the account's primary: `CREWLY_SLACK_PRIMARY`
243
+ * (`1`/`true`) wins, otherwise the persisted Settings toggle.
244
+ *
245
+ * @returns True when primary
246
+ */
247
+ async isPrimary() {
248
+ const raw = ((this.deps.env ?? process.env)[SLACK_CLOUD_CONSTANTS.PRIMARY_ENV_VAR] ?? '').trim().toLowerCase();
249
+ if (raw === '1' || raw === 'true')
250
+ return true;
251
+ const settings = await this.loadSettings();
252
+ return settings.primary;
253
+ }
254
+ /**
255
+ * Persist the Settings toggle and re-register immediately so Cloud moves
256
+ * the flag (it clears `primary` on the account's other instances).
257
+ *
258
+ * @param primary - The new value
259
+ */
260
+ async setPrimary(primary) {
261
+ const settings = await this.loadSettings();
262
+ settings.primary = primary;
263
+ await fs.mkdir(path.dirname(this.settingsPath), { recursive: true });
264
+ await atomicWriteJson(this.settingsPath, settings);
265
+ await this.heartbeat();
266
+ }
267
+ // -------------------------------------------------------------------------
268
+ // Read model
269
+ // -------------------------------------------------------------------------
270
+ /**
271
+ * Agents still needing their one-time install click (from the last sync).
272
+ *
273
+ * @returns Copies
274
+ */
275
+ getPendingInstalls() {
276
+ return this.pendingInstalls.map((p) => ({ ...p }));
277
+ }
278
+ /** @returns The Cloud device id once resolved */
279
+ getInstanceId() {
280
+ return this.instanceId;
281
+ }
282
+ /** @returns ISO timestamp of the last accepted heartbeat */
283
+ getLastHeartbeatAt() {
284
+ return this.lastHeartbeatAt;
285
+ }
286
+ /** @returns Last Cloud failure, if the most recent call failed */
287
+ getLastError() {
288
+ return this.lastError;
289
+ }
290
+ /**
291
+ * Whether Cloud can be reached.
292
+ *
293
+ * @returns True when signed in with a token and url
294
+ */
295
+ isAvailable() {
296
+ return this.deps.cloud.isConnected() && !!this.deps.cloud.getToken() && !!this.deps.cloud.getCloudUrl();
297
+ }
298
+ // -------------------------------------------------------------------------
299
+ // Internals
300
+ // -------------------------------------------------------------------------
301
+ scheduleHeartbeat() {
302
+ if (this.debounceTimer)
303
+ return;
304
+ const setT = this.deps.setTimeout ?? setTimeout;
305
+ this.debounceTimer = setT(() => {
306
+ this.debounceTimer = null;
307
+ void this.heartbeat();
308
+ }, SLACK_CLOUD_CONSTANTS.TEAM_SAVED_DEBOUNCE_MS);
309
+ this.debounceTimer.unref?.();
310
+ }
311
+ async resolveIdentity() {
312
+ if (this.instanceId && this.deviceName)
313
+ return { deviceId: this.instanceId, deviceName: this.deviceName };
314
+ const identity = await this.deps.identity.getOrCreateIdentity();
315
+ this.instanceId = identity.deviceId;
316
+ this.deviceName = identity.deviceName;
317
+ return identity;
318
+ }
319
+ async resolveVersion() {
320
+ if (this.version)
321
+ return this.version;
322
+ this.version = this.deps.version ?? (await readCrewlyVersion());
323
+ return this.version;
324
+ }
325
+ async loadSettings() {
326
+ if (this.settings)
327
+ return this.settings;
328
+ const raw = await safeReadJson(this.settingsPath, null);
329
+ this.settings = { version: 1, primary: raw?.primary === true };
330
+ return this.settings;
331
+ }
332
+ now() {
333
+ return this.deps.now?.() ?? Date.now();
334
+ }
335
+ async cloudRequest(method, suffix, body) {
336
+ const token = this.deps.cloud.getToken();
337
+ const base = this.deps.cloud.getCloudUrl();
338
+ if (!token || !base) {
339
+ throw new SlackIdentityCloudError(401, 'not_logged_in', 'Not logged in to Crewly Cloud');
340
+ }
341
+ const url = `${base.replace(/\/$/, '')}${SLACK_CLOUD_CONSTANTS.CLOUD_PATH}${suffix}`;
342
+ const controller = new AbortController();
343
+ const timer = setTimeout(() => controller.abort(), SLACK_CLOUD_CONSTANTS.REQUEST_TIMEOUT_MS);
344
+ try {
345
+ const res = await this.fetchImpl(url, {
346
+ method,
347
+ headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
348
+ body: JSON.stringify(body),
349
+ signal: controller.signal,
350
+ });
351
+ const text = await res.text();
352
+ let parsed = {};
353
+ try {
354
+ parsed = JSON.parse(text);
355
+ }
356
+ catch {
357
+ parsed = {};
358
+ }
359
+ if (!res.ok || parsed.success !== true) {
360
+ throw new SlackIdentityCloudError(res.status, parsed.code ?? `http_${res.status}`, parsed.error ?? `Cloud request failed (${res.status})`);
361
+ }
362
+ return parsed.data;
363
+ }
364
+ catch (err) {
365
+ if (err instanceof SlackIdentityCloudError)
366
+ throw err;
367
+ const message = err instanceof Error ? err.message : String(err);
368
+ throw new SlackIdentityCloudError(502, 'network', `Cloud unreachable: ${message}`);
369
+ }
370
+ finally {
371
+ clearTimeout(timer);
372
+ }
373
+ }
374
+ }
375
+ let instance = null;
376
+ /**
377
+ * Install the process-wide instance (composition root).
378
+ *
379
+ * @param service - The service or null
380
+ */
381
+ export function setSlackInstanceRegistryService(service) {
382
+ instance = service;
383
+ }
384
+ /**
385
+ * The process-wide instance, or null before wiring.
386
+ *
387
+ * @returns The service or null
388
+ */
389
+ export function getSlackInstanceRegistryService() {
390
+ return instance;
391
+ }
392
+ //# sourceMappingURL=slack-instance-registry.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-instance-registry.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-instance-registry.service.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * @module services/slack
8
8
  */
9
9
  import { EventEmitter } from 'events';
10
- import type { SlackConfig, SlackIncomingMessage, SlackOutgoingMessage, SlackServiceStatus, SlackConversationContext, SlackNotification, SlackBlock, SlackChannelInfo } from '../../types/slack.types.js';
10
+ import type { SlackConfig, SlackIncomingMessage, SlackOutgoingMessage, SlackServiceStatus, SlackConversationContext, SlackNotification, SlackBlock, SlackChannelInfo, SlackTransport, SlackRawInboundEvent, SlackInboundMeta, SlackCloudEventEnvelope } from '../../types/slack.types.js';
11
11
  /**
12
12
  * Events emitted by SlackService
13
13
  */
@@ -29,6 +29,21 @@ interface FileUploadOptions {
29
29
  initialComment?: string;
30
30
  threadTs?: string;
31
31
  }
32
+ /**
33
+ * The slice of CloudSyncService the cloud transport listens on: relay
34
+ * messages of type `slack_event` carry a {@link SlackCloudEventEnvelope}.
35
+ */
36
+ export interface SlackCloudEventSource {
37
+ on(event: 'message', handler: (msg: SlackCloudRelayMessage) => void): unknown;
38
+ off(event: 'message', handler: (msg: SlackCloudRelayMessage) => void): unknown;
39
+ }
40
+ /** Minimal relay message shape (see `cloud-sync.types.ts` IncomingMessage). */
41
+ export interface SlackCloudRelayMessage {
42
+ id?: string;
43
+ type: string;
44
+ payload: unknown;
45
+ fromDeviceName?: string;
46
+ }
32
47
  /**
33
48
  * SlackService class for managing Slack bot operations
34
49
  */
@@ -67,13 +82,73 @@ export declare class SlackService extends EventEmitter {
67
82
  private lastPingAt;
68
83
  /** Number of consecutive health-check ping failures */
69
84
  private consecutivePingFailures;
85
+ /** Inbound transport the service was initialised with */
86
+ private transport;
87
+ /** Relay source the cloud transport is attached to (see attachCloudTransport) */
88
+ private cloudSource;
89
+ /** Bound relay listener so it can be detached */
90
+ private cloudListener;
70
91
  /**
71
92
  * Initialize the Slack service with configuration
72
93
  *
94
+ * With `config.transport === 'cloud'` no Socket Mode connection is opened:
95
+ * Crewly Cloud owns the Slack app and pushes events through the relay (see
96
+ * {@link attachCloudTransport}); only a Web API client is created for
97
+ * outbound calls, and the service reports connected as soon as a bot
98
+ * token is present.
99
+ *
73
100
  * @param config - Slack bot configuration
74
101
  * @returns Promise that resolves when connected
75
102
  */
76
103
  initialize(config: SlackConfig): Promise<void>;
104
+ /**
105
+ * Cloud transport bootstrap: build a bare Web API client from the bot
106
+ * token (no Bolt app, no socket, no reconnect loop). The bot user id from
107
+ * the Cloud config seeds the cache so routing never needs `auth.test`.
108
+ *
109
+ * @param config - Config with `transport: 'cloud'`
110
+ * @throws When the Web API client cannot be constructed
111
+ */
112
+ private initializeCloudTransport;
113
+ /**
114
+ * The inbound transport this service was initialised with.
115
+ *
116
+ * @returns `socket` (Bolt Socket Mode) or `cloud` (relay push)
117
+ */
118
+ getTransport(): SlackTransport;
119
+ /**
120
+ * Shared inbound handler for both transports. Turns a raw Slack `message`
121
+ * or `app_mention` event into a {@link SlackIncomingMessage}, applies the
122
+ * allow-list, bumps counters and emits `message` — exactly what the Socket
123
+ * Mode listeners did before the split, so a Cloud-pushed event routes the
124
+ * same way as one received over the socket.
125
+ *
126
+ * @param event - Raw Slack event object
127
+ * @param meta - Which transport delivered it (defaults to `socket`)
128
+ * @returns The emitted message, or null when the event was dropped
129
+ */
130
+ handleInboundEvent(event: SlackRawInboundEvent, meta?: SlackInboundMeta): SlackIncomingMessage | null;
131
+ /**
132
+ * Cloud transport entry point: unwrap a `slack_event` envelope and hand
133
+ * the raw event to {@link handleInboundEvent}. Reproduces what Bolt does
134
+ * for free on the socket path — its `ignoreSelf` middleware and the
135
+ * subtype filtering — so the master bot never reacts to its own posts and
136
+ * edits/joins/bot chatter never reach routing.
137
+ *
138
+ * @param envelope - The relay message `data`
139
+ * @returns The emitted message, or null when dropped
140
+ */
141
+ handleCloudEnvelope(envelope: SlackCloudEventEnvelope): SlackIncomingMessage | null;
142
+ /**
143
+ * Subscribe to a relay source (CloudSyncService) and route every
144
+ * `slack_event` message into {@link handleCloudEnvelope}. Idempotent —
145
+ * re-attaching replaces the previous subscription.
146
+ *
147
+ * @param source - Emitter of relay `message` events
148
+ */
149
+ attachCloudTransport(source: SlackCloudEventSource): void;
150
+ /** Undo {@link attachCloudTransport}. */
151
+ detachCloudTransport(): void;
77
152
  /**
78
153
  * Set up Slack event handlers
79
154
  */
@@ -1 +1 @@
1
- {"version":3,"file":"slack.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack.service.ts"],"names":[],"mappings":"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"}