@hailer/mcp 1.1.16 → 1.1.17-beta.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 (313) hide show
  1. package/.claude/CLAUDE.md +117 -320
  2. package/.claude/commands/app-squad.md +86 -90
  3. package/.claude/commands/audit-squad.md +19 -19
  4. package/.claude/commands/autoplan.md +3 -3
  5. package/.claude/commands/cleanup-squad.md +16 -16
  6. package/.claude/commands/config-squad.md +30 -30
  7. package/.claude/commands/crud-squad.md +23 -23
  8. package/.claude/commands/data-squad.md +21 -21
  9. package/.claude/commands/debug-squad.md +44 -44
  10. package/.claude/commands/doc-squad.md +16 -16
  11. package/.claude/commands/help:agents.md +130 -99
  12. package/.claude/commands/help:commands.md +15 -15
  13. package/.claude/commands/help:faq.md +17 -17
  14. package/.claude/commands/help:plugins.md +1 -1
  15. package/.claude/commands/help:skills.md +18 -24
  16. package/.claude/commands/hotfix-squad.md +22 -22
  17. package/.claude/commands/integration-squad.md +22 -22
  18. package/.claude/commands/janitor-squad.md +31 -31
  19. package/.claude/commands/learn-auto.md +5 -5
  20. package/.claude/commands/learn.md +12 -20
  21. package/.claude/commands/onboard-squad.md +39 -49
  22. package/.claude/commands/plan-workspace.md +2 -2
  23. package/.claude/commands/publish.md +32 -37
  24. package/.claude/commands/review-squad.md +27 -27
  25. package/.claude/commands/stats.md +26 -12
  26. package/.claude/commands/swarm.md +25 -25
  27. package/.claude/skills/chrome-mcp-reference/SKILL.md +5 -0
  28. package/.claude/skills/hailer-api-client/SKILL.md +55 -16
  29. package/.claude/skills/hailer-app-builder/SKILL.md +4 -270
  30. package/.claude/skills/hailer-apps-pictures/SKILL.md +3 -3
  31. package/.claude/skills/hailer-design-system/SKILL.md +96 -4
  32. package/.claude/skills/hailer-monolith-automations/SKILL.md +138 -116
  33. package/.claude/skills/hailer-permissions-system/SKILL.md +6 -9
  34. package/.claude/skills/hailer-project-protocol/SKILL.md +20 -110
  35. package/.claude/skills/integration-patterns/SKILL.md +6 -6
  36. package/.claude/skills/lsp-setup/SKILL.md +8 -9
  37. package/.claude/skills/sdk-activity-patterns/SKILL.md +238 -0
  38. package/.claude/skills/{SDK-document-templates → sdk-document-templates}/SKILL.md +13 -340
  39. package/.claude/skills/{SDK-function-fields → sdk-function-fields}/SKILL.md +8 -40
  40. package/.claude/skills/{SDK-insight-queries → sdk-insight-queries}/SKILL.md +114 -392
  41. package/.claude/skills/{SDK-ws-config-skill → sdk-ws-config-skill}/SKILL.md +79 -310
  42. package/.claude/skills/zapier-hailer-patterns/SKILL.md +84 -361
  43. package/.opencode/package-lock.json +117 -0
  44. package/CLAUDE.md +5 -358
  45. package/dist/app.d.ts.map +1 -1
  46. package/dist/app.js +10 -127
  47. package/dist/app.js.map +1 -1
  48. package/dist/bot/bot-manager.d.ts +3 -14
  49. package/dist/bot/bot-manager.d.ts.map +1 -1
  50. package/dist/bot/bot-manager.js +13 -4
  51. package/dist/bot/bot-manager.js.map +1 -1
  52. package/dist/bot/bot.d.ts +23 -102
  53. package/dist/bot/bot.d.ts.map +1 -1
  54. package/dist/bot/bot.js +356 -1212
  55. package/dist/bot/bot.js.map +1 -1
  56. package/dist/bot/services/bot-permissions.d.ts +50 -0
  57. package/dist/bot/services/bot-permissions.d.ts.map +1 -0
  58. package/dist/bot/services/bot-permissions.js +198 -0
  59. package/dist/bot/services/bot-permissions.js.map +1 -0
  60. package/dist/bot/services/index.d.ts +4 -2
  61. package/dist/bot/services/index.d.ts.map +1 -1
  62. package/dist/bot/services/index.js +10 -5
  63. package/dist/bot/services/index.js.map +1 -1
  64. package/dist/bot/services/message-classifier.d.ts +1 -1
  65. package/dist/bot/services/message-classifier.d.ts.map +1 -1
  66. package/dist/bot/services/message-classifier.js.map +1 -1
  67. package/dist/bot/services/signal-router.d.ts +32 -0
  68. package/dist/bot/services/signal-router.d.ts.map +1 -0
  69. package/dist/bot/services/signal-router.js +132 -0
  70. package/dist/bot/services/signal-router.js.map +1 -0
  71. package/dist/bot/services/system-prompt.d.ts +12 -0
  72. package/dist/bot/services/system-prompt.d.ts.map +1 -0
  73. package/dist/bot/services/system-prompt.js +93 -0
  74. package/dist/bot/services/system-prompt.js.map +1 -0
  75. package/dist/bot/services/types.d.ts +7 -34
  76. package/dist/bot/services/types.d.ts.map +1 -1
  77. package/dist/bot/services/types.js +0 -3
  78. package/dist/bot/services/types.js.map +1 -1
  79. package/dist/bot/services/workspace-refresh.d.ts +47 -0
  80. package/dist/bot/services/workspace-refresh.d.ts.map +1 -0
  81. package/dist/bot/services/workspace-refresh.js +154 -0
  82. package/dist/bot/services/workspace-refresh.js.map +1 -0
  83. package/dist/bot-config/constants.d.ts +0 -36
  84. package/dist/bot-config/constants.d.ts.map +1 -1
  85. package/dist/bot-config/constants.js +1 -76
  86. package/dist/bot-config/constants.js.map +1 -1
  87. package/dist/bot-config/context.d.ts +2 -42
  88. package/dist/bot-config/context.d.ts.map +1 -1
  89. package/dist/bot-config/context.js +13 -134
  90. package/dist/bot-config/context.js.map +1 -1
  91. package/dist/bot-config/index.d.ts +6 -15
  92. package/dist/bot-config/index.d.ts.map +1 -1
  93. package/dist/bot-config/index.js +5 -80
  94. package/dist/bot-config/index.js.map +1 -1
  95. package/dist/bot-config/loader.d.ts +16 -4
  96. package/dist/bot-config/loader.d.ts.map +1 -1
  97. package/dist/bot-config/loader.js +187 -96
  98. package/dist/bot-config/loader.js.map +1 -1
  99. package/dist/bot-config/persistence.d.ts +1 -52
  100. package/dist/bot-config/persistence.d.ts.map +1 -1
  101. package/dist/bot-config/persistence.js +3 -213
  102. package/dist/bot-config/persistence.js.map +1 -1
  103. package/dist/bot-config/state.d.ts +0 -41
  104. package/dist/bot-config/state.d.ts.map +1 -1
  105. package/dist/bot-config/state.js +0 -151
  106. package/dist/bot-config/state.js.map +1 -1
  107. package/dist/bot-config/tools.d.ts +1 -1
  108. package/dist/bot-config/tools.js +27 -27
  109. package/dist/bot-config/tools.js.map +1 -1
  110. package/dist/bot-config/types.d.ts +39 -32
  111. package/dist/bot-config/types.d.ts.map +1 -1
  112. package/dist/bot-config/types.js +0 -3
  113. package/dist/bot-config/types.js.map +1 -1
  114. package/dist/bot-config/webhooks.d.ts +0 -4
  115. package/dist/bot-config/webhooks.d.ts.map +1 -1
  116. package/dist/bot-config/webhooks.js +0 -13
  117. package/dist/bot-config/webhooks.js.map +1 -1
  118. package/dist/commands/seed-config.js +16 -31
  119. package/dist/commands/seed-config.js.map +1 -1
  120. package/dist/config.d.ts +0 -9
  121. package/dist/config.d.ts.map +1 -1
  122. package/dist/config.js +0 -15
  123. package/dist/config.js.map +1 -1
  124. package/dist/mcp/hailer-clients.js +2 -2
  125. package/dist/mcp/hailer-clients.js.map +1 -1
  126. package/dist/mcp/tool-registry.d.ts +10 -115
  127. package/dist/mcp/tool-registry.d.ts.map +1 -1
  128. package/dist/mcp/tool-registry.js +39 -363
  129. package/dist/mcp/tool-registry.js.map +1 -1
  130. package/dist/mcp/tools/activity.d.ts +3 -0
  131. package/dist/mcp/tools/activity.d.ts.map +1 -1
  132. package/dist/mcp/tools/activity.js +8 -1
  133. package/dist/mcp/tools/activity.js.map +1 -1
  134. package/dist/mcp/tools/app-core.d.ts +3 -0
  135. package/dist/mcp/tools/app-core.d.ts.map +1 -1
  136. package/dist/mcp/tools/app-core.js +9 -2
  137. package/dist/mcp/tools/app-core.js.map +1 -1
  138. package/dist/mcp/tools/app-marketplace.d.ts +3 -0
  139. package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
  140. package/dist/mcp/tools/app-marketplace.js +13 -1
  141. package/dist/mcp/tools/app-marketplace.js.map +1 -1
  142. package/dist/mcp/tools/app-member.d.ts +3 -0
  143. package/dist/mcp/tools/app-member.d.ts.map +1 -1
  144. package/dist/mcp/tools/app-member.js +6 -1
  145. package/dist/mcp/tools/app-member.js.map +1 -1
  146. package/dist/mcp/tools/app-scaffold.d.ts +3 -0
  147. package/dist/mcp/tools/app-scaffold.d.ts.map +1 -1
  148. package/dist/mcp/tools/app-scaffold.js +15 -11
  149. package/dist/mcp/tools/app-scaffold.js.map +1 -1
  150. package/dist/mcp/tools/company.d.ts +3 -0
  151. package/dist/mcp/tools/company.d.ts.map +1 -1
  152. package/dist/mcp/tools/company.js +5 -1
  153. package/dist/mcp/tools/company.js.map +1 -1
  154. package/dist/mcp/tools/discussion.d.ts +3 -0
  155. package/dist/mcp/tools/discussion.d.ts.map +1 -1
  156. package/dist/mcp/tools/discussion.js +13 -2
  157. package/dist/mcp/tools/discussion.js.map +1 -1
  158. package/dist/mcp/tools/file.d.ts +3 -0
  159. package/dist/mcp/tools/file.d.ts.map +1 -1
  160. package/dist/mcp/tools/file.js +6 -1
  161. package/dist/mcp/tools/file.js.map +1 -1
  162. package/dist/mcp/tools/index.d.ts +7 -0
  163. package/dist/mcp/tools/index.d.ts.map +1 -0
  164. package/dist/mcp/tools/index.js +34 -0
  165. package/dist/mcp/tools/index.js.map +1 -0
  166. package/dist/mcp/tools/insight.d.ts +3 -0
  167. package/dist/mcp/tools/insight.d.ts.map +1 -1
  168. package/dist/mcp/tools/insight.js +18 -8
  169. package/dist/mcp/tools/insight.js.map +1 -1
  170. package/dist/mcp/tools/user.d.ts +3 -0
  171. package/dist/mcp/tools/user.d.ts.map +1 -1
  172. package/dist/mcp/tools/user.js +6 -1
  173. package/dist/mcp/tools/user.js.map +1 -1
  174. package/dist/mcp/tools/workflow-permissions.d.ts +3 -0
  175. package/dist/mcp/tools/workflow-permissions.d.ts.map +1 -1
  176. package/dist/mcp/tools/workflow-permissions.js +8 -1
  177. package/dist/mcp/tools/workflow-permissions.js.map +1 -1
  178. package/dist/mcp/tools/workflow.d.ts +3 -0
  179. package/dist/mcp/tools/workflow.d.ts.map +1 -1
  180. package/dist/mcp/tools/workflow.js +29 -28
  181. package/dist/mcp/tools/workflow.js.map +1 -1
  182. package/dist/mcp/utils/index.d.ts +4 -11
  183. package/dist/mcp/utils/index.d.ts.map +1 -1
  184. package/dist/mcp/utils/index.js +5 -36
  185. package/dist/mcp/utils/index.js.map +1 -1
  186. package/dist/mcp/utils/role-utils.d.ts +0 -32
  187. package/dist/mcp/utils/role-utils.d.ts.map +1 -1
  188. package/dist/mcp/utils/role-utils.js +0 -73
  189. package/dist/mcp/utils/role-utils.js.map +1 -1
  190. package/dist/mcp/utils/tool-helpers.d.ts +0 -25
  191. package/dist/mcp/utils/tool-helpers.d.ts.map +1 -1
  192. package/dist/mcp/utils/tool-helpers.js +0 -34
  193. package/dist/mcp/utils/tool-helpers.js.map +1 -1
  194. package/dist/mcp/webhook-handler.d.ts +4 -34
  195. package/dist/mcp/webhook-handler.d.ts.map +1 -1
  196. package/dist/mcp/webhook-handler.js +57 -74
  197. package/dist/mcp/webhook-handler.js.map +1 -1
  198. package/dist/mcp-server.d.ts.map +1 -1
  199. package/dist/mcp-server.js +3 -78
  200. package/dist/mcp-server.js.map +1 -1
  201. package/package.json +1 -2
  202. package/.claude/agents/agent-ada-skill-builder.md +0 -94
  203. package/.claude/agents/agent-alejandro-function-fields.md +0 -342
  204. package/.claude/agents/agent-bjorn-config-audit.md +0 -103
  205. package/.claude/agents/agent-builder-agent-creator.md +0 -130
  206. package/.claude/agents/agent-code-simplifier.md +0 -53
  207. package/.claude/agents/agent-dmitri-activity-crud.md +0 -159
  208. package/.claude/agents/agent-giuseppe-app-builder.md +0 -208
  209. package/.claude/agents/agent-gunther-mcp-tools.md +0 -39
  210. package/.claude/agents/agent-helga-workflow-config.md +0 -204
  211. package/.claude/agents/agent-igor-activity-mover-automation.md +0 -125
  212. package/.claude/agents/agent-ingrid-doc-templates.md +0 -261
  213. package/.claude/agents/agent-ivan-monolith.md +0 -154
  214. package/.claude/agents/agent-kenji-data-reader.md +0 -86
  215. package/.claude/agents/agent-lars-code-inspector.md +0 -102
  216. package/.claude/agents/agent-marco-mockup-builder.md +0 -110
  217. package/.claude/agents/agent-marcus-api-documenter.md +0 -323
  218. package/.claude/agents/agent-marketplace-publisher.md +0 -280
  219. package/.claude/agents/agent-marketplace-reviewer.md +0 -309
  220. package/.claude/agents/agent-permissions-handler.md +0 -208
  221. package/.claude/agents/agent-simple-writer.md +0 -48
  222. package/.claude/agents/agent-svetlana-code-review.md +0 -171
  223. package/.claude/agents/agent-tanya-test-runner.md +0 -333
  224. package/.claude/agents/agent-ui-designer.md +0 -100
  225. package/.claude/agents/agent-viktor-sql-insights.md +0 -212
  226. package/.claude/agents/agent-web-search.md +0 -55
  227. package/.claude/agents/agent-yevgeni-discussions.md +0 -45
  228. package/.claude/agents/agent-zara-zapier.md +0 -159
  229. package/.claude/skills/SDK-activity-patterns/SKILL.md +0 -428
  230. package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
  231. package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
  232. package/.claude/skills/agent-structure/SKILL.md +0 -98
  233. package/.claude/skills/delegation-routing/SKILL.md +0 -202
  234. package/.claude/skills/frontend-design/SKILL.md +0 -254
  235. package/.claude/skills/hailer-activity-mover/SKILL.md +0 -213
  236. package/.claude/skills/hailer-rest-api/SKILL.md +0 -61
  237. package/.claude/skills/hailer-rest-api/hailer-activities.md +0 -184
  238. package/.claude/skills/hailer-rest-api/hailer-admin.md +0 -473
  239. package/.claude/skills/hailer-rest-api/hailer-calendar.md +0 -256
  240. package/.claude/skills/hailer-rest-api/hailer-feed.md +0 -249
  241. package/.claude/skills/hailer-rest-api/hailer-insights.md +0 -195
  242. package/.claude/skills/hailer-rest-api/hailer-messaging.md +0 -276
  243. package/.claude/skills/hailer-rest-api/hailer-workflows.md +0 -283
  244. package/.claude/skills/insight-join-patterns/SKILL.md +0 -174
  245. package/.claude/skills/json-only-output/SKILL.md +0 -72
  246. package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
  247. package/.claude/skills/optional-parameters/SKILL.md +0 -72
  248. package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
  249. package/.claude/skills/tool-response-verification/SKILL.md +0 -92
  250. package/.opencode/agent/agent-ada-skill-builder.md +0 -35
  251. package/.opencode/agent/agent-alejandro-function-fields.md +0 -39
  252. package/.opencode/agent/agent-bjorn-config-audit.md +0 -36
  253. package/.opencode/agent/agent-builder-agent-creator.md +0 -39
  254. package/.opencode/agent/agent-code-simplifier.md +0 -31
  255. package/.opencode/agent/agent-dmitri-activity-crud.md +0 -40
  256. package/.opencode/agent/agent-giuseppe-app-builder.md +0 -37
  257. package/.opencode/agent/agent-gunther-mcp-tools.md +0 -39
  258. package/.opencode/agent/agent-helga-workflow-config.md +0 -204
  259. package/.opencode/agent/agent-igor-activity-mover-automation.md +0 -46
  260. package/.opencode/agent/agent-ingrid-doc-templates.md +0 -39
  261. package/.opencode/agent/agent-ivan-monolith.md +0 -46
  262. package/.opencode/agent/agent-kenji-data-reader.md +0 -53
  263. package/.opencode/agent/agent-lars-code-inspector.md +0 -28
  264. package/.opencode/agent/agent-marco-mockup-builder.md +0 -42
  265. package/.opencode/agent/agent-marcus-api-documenter.md +0 -53
  266. package/.opencode/agent/agent-marketplace-publisher.md +0 -44
  267. package/.opencode/agent/agent-marketplace-reviewer.md +0 -42
  268. package/.opencode/agent/agent-permissions-handler.md +0 -50
  269. package/.opencode/agent/agent-simple-writer.md +0 -45
  270. package/.opencode/agent/agent-svetlana-code-review.md +0 -39
  271. package/.opencode/agent/agent-tanya-test-runner.md +0 -57
  272. package/.opencode/agent/agent-ui-designer.md +0 -56
  273. package/.opencode/agent/agent-viktor-sql-insights.md +0 -34
  274. package/.opencode/agent/agent-web-search.md +0 -42
  275. package/.opencode/agent/agent-yevgeni-discussions.md +0 -37
  276. package/.opencode/agent/agent-zara-zapier.md +0 -53
  277. package/.opencode/commands/app-squad.md +0 -135
  278. package/.opencode/commands/audit-squad.md +0 -158
  279. package/.opencode/commands/autoplan.md +0 -563
  280. package/.opencode/commands/cleanup-squad.md +0 -98
  281. package/.opencode/commands/config-squad.md +0 -106
  282. package/.opencode/commands/crud-squad.md +0 -87
  283. package/.opencode/commands/data-squad.md +0 -97
  284. package/.opencode/commands/debug-squad.md +0 -303
  285. package/.opencode/commands/doc-squad.md +0 -65
  286. package/.opencode/commands/handoff.md +0 -137
  287. package/.opencode/commands/health.md +0 -49
  288. package/.opencode/commands/help-agents.md +0 -151
  289. package/.opencode/commands/help-commands.md +0 -32
  290. package/.opencode/commands/help-faq.md +0 -29
  291. package/.opencode/commands/help-plugins.md +0 -28
  292. package/.opencode/commands/help-skills.md +0 -7
  293. package/.opencode/commands/help-tools.md +0 -40
  294. package/.opencode/commands/help.md +0 -28
  295. package/.opencode/commands/hotfix-squad.md +0 -112
  296. package/.opencode/commands/integration-squad.md +0 -82
  297. package/.opencode/commands/janitor-squad.md +0 -167
  298. package/.opencode/commands/learn-auto.md +0 -120
  299. package/.opencode/commands/learn.md +0 -120
  300. package/.opencode/commands/mcp-list.md +0 -27
  301. package/.opencode/commands/onboard-squad.md +0 -140
  302. package/.opencode/commands/plan-workspace.md +0 -732
  303. package/.opencode/commands/prd.md +0 -131
  304. package/.opencode/commands/project-status.md +0 -82
  305. package/.opencode/commands/publish.md +0 -138
  306. package/.opencode/commands/recap.md +0 -69
  307. package/.opencode/commands/restore.md +0 -64
  308. package/.opencode/commands/review-squad.md +0 -152
  309. package/.opencode/commands/save.md +0 -24
  310. package/.opencode/commands/stats.md +0 -19
  311. package/.opencode/commands/swarm.md +0 -210
  312. package/.opencode/commands/tool-builder.md +0 -39
  313. package/.opencode/commands/ws-pull.md +0 -44
@@ -0,0 +1,32 @@
1
+ /**
2
+ * SignalRouter — rate limiting, dedup, discussion state, engagement logic.
3
+ *
4
+ * Extracted from Bot to keep signal handling separate from LLM processing.
5
+ */
6
+ import { Logger } from '../../lib/logger';
7
+ import { IncomingMessage, DiscussionState, ResponseMode } from './types';
8
+ export declare class SignalRouter {
9
+ private logger;
10
+ private processedMessageIds;
11
+ private signalTimestampsPerDiscussion;
12
+ private globalSignalTimestamps;
13
+ private discussionStates;
14
+ /** Discussions currently being processed (concurrency guard) */
15
+ readonly processingDiscussions: Set<string>;
16
+ constructor(logger: Logger);
17
+ /** Returns true if this message was already seen. Adds it to the set if not. */
18
+ isDuplicate(dedupKey: string): boolean;
19
+ removeDedupKey(key: string): void;
20
+ private pruneDedup;
21
+ /** Returns true if the message should be dropped due to rate limiting. */
22
+ isRateLimited(discussionId: string): boolean;
23
+ getOrCreateState(discussionId: string): DiscussionState;
24
+ getState(discussionId: string): DiscussionState | undefined;
25
+ get disengageThreshold(): number;
26
+ /** Check if a message should trigger a bot response based on response mode. */
27
+ checkTrigger(message: IncomingMessage, responseMode: ResponseMode): boolean;
28
+ /** Check if a message is an explicit trigger (mention, reply, or DM). */
29
+ isExplicitTrigger(message: IncomingMessage): boolean;
30
+ clear(): void;
31
+ }
32
+ //# sourceMappingURL=signal-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-router.d.ts","sourceRoot":"","sources":["../../../src/bot/services/signal-router.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQzE,qBAAa,YAAY;IASX,OAAO,CAAC,MAAM;IAR1B,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,6BAA6B,CAA+B;IACpE,OAAO,CAAC,sBAAsB,CAAgB;IAC9C,OAAO,CAAC,gBAAgB,CAAsC;IAE9D,gEAAgE;IAChE,QAAQ,CAAC,qBAAqB,cAAqB;gBAE/B,MAAM,EAAE,MAAM;IAIlC,gFAAgF;IAChF,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOtC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIjC,OAAO,CAAC,UAAU;IASlB,0EAA0E;IAC1E,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAgC5C,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe;IA0BvD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI3D,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAID,+EAA+E;IAC/E,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO;IAW3E,yEAAyE;IACzE,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;IAMpD,KAAK,IAAI,IAAI;CASd"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ /**
3
+ * SignalRouter — rate limiting, dedup, discussion state, engagement logic.
4
+ *
5
+ * Extracted from Bot to keep signal handling separate from LLM processing.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.SignalRouter = void 0;
9
+ const RATE_LIMIT_WINDOW = 60_000;
10
+ const RATE_LIMIT_PER_DISCUSSION = 30;
11
+ const RATE_LIMIT_GLOBAL = 100;
12
+ const DISENGAGE_THRESHOLD = 5;
13
+ const MAX_DISCUSSION_STATES = 200;
14
+ class SignalRouter {
15
+ logger;
16
+ processedMessageIds = new Set();
17
+ signalTimestampsPerDiscussion = new Map();
18
+ globalSignalTimestamps = [];
19
+ discussionStates = new Map();
20
+ /** Discussions currently being processed (concurrency guard) */
21
+ processingDiscussions = new Set();
22
+ constructor(logger) {
23
+ this.logger = logger;
24
+ }
25
+ // ===== DEDUP =====
26
+ /** Returns true if this message was already seen. Adds it to the set if not. */
27
+ isDuplicate(dedupKey) {
28
+ if (this.processedMessageIds.has(dedupKey))
29
+ return true;
30
+ this.processedMessageIds.add(dedupKey);
31
+ this.pruneDedup();
32
+ return false;
33
+ }
34
+ removeDedupKey(key) {
35
+ this.processedMessageIds.delete(key);
36
+ }
37
+ pruneDedup() {
38
+ if (this.processedMessageIds.size > 500) {
39
+ const ids = Array.from(this.processedMessageIds);
40
+ this.processedMessageIds = new Set(ids.slice(-250));
41
+ }
42
+ }
43
+ // ===== RATE LIMITING =====
44
+ /** Returns true if the message should be dropped due to rate limiting. */
45
+ isRateLimited(discussionId) {
46
+ const now = Date.now();
47
+ const cutoff = now - RATE_LIMIT_WINDOW;
48
+ // Per-discussion (check only, don't push yet)
49
+ let discTimestamps = this.signalTimestampsPerDiscussion.get(discussionId);
50
+ if (!discTimestamps) {
51
+ discTimestamps = [];
52
+ this.signalTimestampsPerDiscussion.set(discussionId, discTimestamps);
53
+ }
54
+ while (discTimestamps.length > 0 && discTimestamps[0] < cutoff)
55
+ discTimestamps.shift();
56
+ if (discTimestamps.length >= RATE_LIMIT_PER_DISCUSSION) {
57
+ this.logger.warn('Per-discussion rate limit exceeded', { discussionId, count: discTimestamps.length });
58
+ return true;
59
+ }
60
+ // Global
61
+ while (this.globalSignalTimestamps.length > 0 && this.globalSignalTimestamps[0] < cutoff)
62
+ this.globalSignalTimestamps.shift();
63
+ if (this.globalSignalTimestamps.length >= RATE_LIMIT_GLOBAL) {
64
+ this.logger.warn('Global rate limit exceeded', { count: this.globalSignalTimestamps.length });
65
+ return true;
66
+ }
67
+ // Both checks passed — now record the timestamps
68
+ discTimestamps.push(now);
69
+ this.globalSignalTimestamps.push(now);
70
+ return false;
71
+ }
72
+ // ===== DISCUSSION STATE =====
73
+ getOrCreateState(discussionId) {
74
+ let state = this.discussionStates.get(discussionId);
75
+ if (state) {
76
+ // LRU: move to end
77
+ this.discussionStates.delete(discussionId);
78
+ this.discussionStates.set(discussionId, state);
79
+ return state;
80
+ }
81
+ // Evict oldest if at capacity
82
+ if (this.discussionStates.size >= MAX_DISCUSSION_STATES) {
83
+ const oldest = this.discussionStates.keys().next().value;
84
+ if (oldest)
85
+ this.discussionStates.delete(oldest);
86
+ }
87
+ state = {
88
+ contextBuffer: [],
89
+ abortController: null,
90
+ state: 'idle',
91
+ consecutiveNonResponses: 0,
92
+ lastProgressTime: 0,
93
+ };
94
+ this.discussionStates.set(discussionId, state);
95
+ return state;
96
+ }
97
+ getState(discussionId) {
98
+ return this.discussionStates.get(discussionId);
99
+ }
100
+ get disengageThreshold() {
101
+ return DISENGAGE_THRESHOLD;
102
+ }
103
+ // ===== ENGAGEMENT =====
104
+ /** Check if a message should trigger a bot response based on response mode. */
105
+ checkTrigger(message, responseMode) {
106
+ if (message.isPrivateDiscussion)
107
+ return true;
108
+ switch (responseMode) {
109
+ case 'mention_only': return message.isMention;
110
+ case 'reply_only': return message.isReplyToBot;
111
+ case 'mention_or_reply': return message.isMention || message.isReplyToBot;
112
+ case 'always':
113
+ default: return true;
114
+ }
115
+ }
116
+ /** Check if a message is an explicit trigger (mention, reply, or DM). */
117
+ isExplicitTrigger(message) {
118
+ return message.isMention || message.isReplyToBot || message.isPrivateDiscussion;
119
+ }
120
+ // ===== CLEANUP =====
121
+ clear() {
122
+ for (const [, state] of this.discussionStates) {
123
+ state.abortController?.abort();
124
+ }
125
+ this.discussionStates.clear();
126
+ this.signalTimestampsPerDiscussion.clear();
127
+ this.globalSignalTimestamps = [];
128
+ this.processingDiscussions.clear();
129
+ }
130
+ }
131
+ exports.SignalRouter = SignalRouter;
132
+ //# sourceMappingURL=signal-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-router.js","sourceRoot":"","sources":["../../../src/bot/services/signal-router.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAKH,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAa,YAAY;IASH;IARZ,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,6BAA6B,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5D,sBAAsB,GAAa,EAAE,CAAC;IACtC,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE9D,gEAAgE;IACvD,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnD,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEtC,oBAAoB;IAEpB,gFAAgF;IAChF,WAAW,CAAC,QAAgB;QAC1B,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,4BAA4B;IAE5B,0EAA0E;IAC1E,aAAa,CAAC,YAAoB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,GAAG,iBAAiB,CAAC;QAEvC,8CAA8C;QAC9C,IAAI,cAAc,GAAG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM;YAAE,cAAc,CAAC,KAAK,EAAE,CAAC;QACvF,IAAI,cAAc,CAAC,MAAM,IAAI,yBAAyB,EAAE,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;YACvG,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS;QACT,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,MAAM;YAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QAC9H,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9F,OAAO,IAAI,CAAC;QACd,CAAC;QAED,iDAAiD;QACjD,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+BAA+B;IAE/B,gBAAgB,CAAC,YAAoB;QACnC,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,KAAK,EAAE,CAAC;YACV,mBAAmB;YACnB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,qBAAqB,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACzD,IAAI,MAAM;gBAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,GAAG;YACN,aAAa,EAAE,EAAE;YACjB,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,MAAM;YACb,uBAAuB,EAAE,CAAC;YAC1B,gBAAgB,EAAE,CAAC;SACpB,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,YAAoB;QAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,yBAAyB;IAEzB,+EAA+E;IAC/E,YAAY,CAAC,OAAwB,EAAE,YAA0B;QAC/D,IAAI,OAAO,CAAC,mBAAmB;YAAE,OAAO,IAAI,CAAC;QAC7C,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,cAAc,CAAC,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC;YAC9C,KAAK,YAAY,CAAC,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC;YAC/C,KAAK,kBAAkB,CAAC,CAAC,OAAO,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;YAC1E,KAAK,QAAQ,CAAC;YACd,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,iBAAiB,CAAC,OAAwB;QACxC,OAAO,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAClF,CAAC;IAED,sBAAsB;IAEtB,KAAK;QACH,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9C,KAAK,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,CAAC;QAC3C,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;CACF;AAnID,oCAmIC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * System prompt builder for bot instances.
3
+ */
4
+ import { HailerV2CoreInitResponse } from '../../mcp/utils/types';
5
+ /** Build the full system prompt for the LLM. */
6
+ export declare function buildSystemPrompt(opts: {
7
+ init: HailerV2CoreInitResponse | null;
8
+ userId: string;
9
+ workspaceOverview: string;
10
+ customPrompt?: string;
11
+ }): string;
12
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../../src/bot/services/system-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAYjE,gDAAgD;AAChD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAgFT"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ /**
3
+ * System prompt builder for bot instances.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildSystemPrompt = buildSystemPrompt;
7
+ /** Resolve the bot's display name from init data. */
8
+ function getBotDisplayName(init, userId) {
9
+ if (!init?.users || !userId)
10
+ return 'Assistant';
11
+ const user = init.users[userId];
12
+ if (!user)
13
+ return 'Assistant';
14
+ const name = user.display_name || user.fullName ||
15
+ `${user.firstname || ''} ${user.lastname || ''}`.trim();
16
+ return name || 'Assistant';
17
+ }
18
+ /** Build the full system prompt for the LLM. */
19
+ function buildSystemPrompt(opts) {
20
+ const wsName = opts.init?.network?.name || 'Workspace';
21
+ const botName = getBotDisplayName(opts.init, opts.userId);
22
+ const identity = `<bot-identity>
23
+ Your user ID: ${opts.userId}
24
+ Your display name: ${botName}
25
+ Workspace: ${wsName}
26
+ </bot-identity>`;
27
+ const platformRules = `<platform-rules>
28
+ - Use tools to answer questions — don't guess or make up data.
29
+ - When a tool call fails, tell the user what failed and why. Never silently try alternatives.
30
+ - For bulk operations, batch into groups of 25-50 per tool call.
31
+ - NEVER output raw URLs like https://app.hailer.com/...
32
+
33
+ HAILERTAG LINKING (mandatory — no exceptions):
34
+ - EVERY activity, user, or discussion reference MUST be a clickable link: [Display Name](objectId)
35
+ - Examples: [AC Milan deal](691ffe654217e9e8434e578a), [John Smith](691ffe654217e9e8434e5123)
36
+ - Tool responses include both names and IDs — ALWAYS use them to create links.
37
+ - If you have an ID and a name, link it. No bold text, no plain text, no raw IDs.
38
+ - NEVER use links for workflows, phases, teams, or groups — those don't support linking. Use plain text names.
39
+ - NEVER output bare 24-character hex IDs.
40
+
41
+ DISCUSSION PRIVACY:
42
+ - Private DMs with other users are confidential. Never reveal their existence, IDs, or content.
43
+ - Activity discussions are open — check them freely. The system enforces permissions automatically.
44
+ - When asked about shared discussions with someone, check activity discussions for that person. If a tool call is denied, just skip that discussion and move on — don't explain the permission system to the user.
45
+ </platform-rules>`;
46
+ const now = new Date();
47
+ const isoDate = now.toISOString().split('T')[0];
48
+ const dayOfWeek = now.getUTCDay();
49
+ const weekNum = Math.ceil(((+now - +new Date(now.getFullYear(), 0, 1)) / 86400000 + new Date(now.getFullYear(), 0, 1).getDay() + 1) / 7);
50
+ const dateContext = `<current-date>
51
+ Today: ${now.toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })} (${isoDate}, ISO week ${weekNum}, day ${dayOfWeek})
52
+ Time: ${now.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false, timeZone: 'Europe/Helsinki' })} Europe/Helsinki
53
+ Year: ${now.getFullYear()}
54
+
55
+ DATE HANDLING — CRITICAL:
56
+ - The current year is ${now.getFullYear()}. When no year is specified, ALWAYS use ${now.getFullYear()} (or ${now.getFullYear() + 1} if the date has already passed this year).
57
+ - European/Finnish dates use DD.MM.YYYY or DD.M.YYYY format (day first, NOT month first). "18.7.2026" = July 18, 2026. "3.12" = December 3. Never confuse day and month.
58
+ - Resolve relative dates in any language (Finnish, Swedish, English, etc.) by calculating from today's date.
59
+ - For activity date fields, always output YYYY-MM-DD format. The system auto-converts to timestamps.
60
+ - If a date is ambiguous, ask the user to clarify.
61
+ </current-date>`;
62
+ const wsContext = `<workspace-context>
63
+ ${opts.workspaceOverview}
64
+ </workspace-context>`;
65
+ if (opts.customPrompt?.trim()) {
66
+ const body = opts.customPrompt.trim()
67
+ .replace(/\{wsName\}/g, wsName)
68
+ .replace(/\{userId\}/g, opts.userId)
69
+ .replace(/\{botName\}/g, botName);
70
+ return `${body}\n\n${platformRules}\n\n${identity}\n\n${dateContext}\n\n${wsContext}`;
71
+ }
72
+ const defaultBehavior = `<behavior>
73
+ - Be concise. Short answers, no filler.
74
+ - Never list your capabilities unprompted.
75
+ - Never use emojis unless the user does first.
76
+ - ACT FIRST. When the user asks for something, use your tools and get the answer. Do NOT ask "would you like me to check?" or list the steps you could take. Just do it. You have 10 tool iterations — use them.
77
+ - Only ask for clarification when the request is genuinely ambiguous (e.g. which workflow, which player).
78
+ - When showing data, use clean formatting. Don't over-explain.
79
+ - Always reference actual workspace data — never speak in generic terms.
80
+ </behavior>`;
81
+ return `You are a workspace assistant for "${wsName}" on Hailer.
82
+
83
+ ${identity}
84
+
85
+ ${platformRules}
86
+
87
+ ${defaultBehavior}
88
+
89
+ ${dateContext}
90
+
91
+ ${wsContext}`;
92
+ }
93
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../../src/bot/services/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,13 @@
4
4
  * Shared types for bot service layer.
5
5
  * These are decoupled from the agent system's types.
6
6
  */
7
+ export type HailerSignalType = 'activities.updated' | 'activities.created' | 'activities.deleted' | 'discussion.message' | 'messenger.new' | 'user.joined' | 'user.left' | 'workspace.updated' | 'process.updated' | 'cache.invalidate' | 'company.new_invitation';
8
+ export interface HailerSignal {
9
+ type: HailerSignalType;
10
+ data: Record<string, unknown>;
11
+ timestamp: number;
12
+ workspaceId?: string;
13
+ }
7
14
  /** Response from v3.discussion.message.latest */
8
15
  export interface MessageLatestResponse {
9
16
  messages: HailerMessage[];
@@ -128,40 +135,6 @@ export interface DiscussionState {
128
135
  consecutiveNonResponses: number;
129
136
  lastProgressTime: number;
130
137
  }
131
- export interface SessionMetrics {
132
- inputTokens: number;
133
- outputTokens: number;
134
- cacheCreationTokens: number;
135
- cacheReadTokens: number;
136
- toolCalls: number;
137
- writeOperations: number;
138
- messagesProcessed: number;
139
- responsesPosted: number;
140
- apiCalls: number;
141
- }
142
- /** Detail about a write operation */
143
- export interface WriteDetail {
144
- tool: string;
145
- what: string;
146
- targetId?: string;
147
- }
148
- export interface ActivitySession {
149
- activityId: string;
150
- activityName: string;
151
- discussionId: string;
152
- workspaceId: string;
153
- startTime: number;
154
- lastActivityTime: number;
155
- metrics: SessionMetrics;
156
- actions: string[];
157
- previousLogId: string | null;
158
- conversation: string[];
159
- writeDetails: WriteDetail[];
160
- triggerRequest: string | null;
161
- requestedBy: string | null;
162
- requestedById: string | null;
163
- }
164
- export declare const SESSION_IDLE_TIMEOUT = 60000;
165
138
  /** MCP tool result from server */
166
139
  export interface McpToolResult {
167
140
  content?: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bot/services/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bot/services/types.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,4 @@
6
6
  * These are decoupled from the agent system's types.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.SESSION_IDLE_TIMEOUT = void 0;
10
- // ===== CONSTANTS =====
11
- exports.SESSION_IDLE_TIMEOUT = 60_000; // 60 seconds
12
9
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/bot/services/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA+KH,wBAAwB;AAEX,QAAA,oBAAoB,GAAG,MAAM,CAAC,CAAC,aAAa"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/bot/services/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * WorkspaceRefresh — debounced workspace data refresh from Hailer signals.
3
+ *
4
+ * When process.updated, workspace.updated, or cache.invalidate signals fire,
5
+ * schedules a single debounced API call to re-fetch and rebuild caches.
6
+ */
7
+ import { Logger } from '../../lib/logger';
8
+ import { HailerClient } from '../../mcp/hailer-clients';
9
+ import { HailerV2CoreInitResponse } from '../../mcp/utils/types';
10
+ import { WorkspaceCache } from '../../mcp/workspace-cache';
11
+ import { UserContext } from '../../mcp/UserContextCache';
12
+ import { BotPermissions } from './bot-permissions';
13
+ export interface WorkspaceState {
14
+ init: HailerV2CoreInitResponse;
15
+ workspaceCache: WorkspaceCache;
16
+ workspaceOverview: string;
17
+ workspaceId: string | undefined;
18
+ }
19
+ export declare class WorkspaceRefresh {
20
+ private logger;
21
+ private refreshTimer;
22
+ private refreshDirty;
23
+ private refreshScope;
24
+ private isRefreshing;
25
+ private refreshQueued;
26
+ constructor(logger: Logger);
27
+ /** Schedule a debounced refresh. Scopes: 'processes', 'network', 'full'. */
28
+ schedule(scope: 'processes' | 'network' | 'full'): void;
29
+ /** Set the callback that does the actual refresh. */
30
+ private onRefresh;
31
+ /** Wire up the refresh handler. */
32
+ setHandler(handler: (scopes: Set<string>) => Promise<void>): void;
33
+ private execute;
34
+ /** Cancel pending refresh. */
35
+ cancel(): void;
36
+ /**
37
+ * Perform the actual data refresh: fetch fresh init, rebuild caches.
38
+ * Static helper so bot.ts can use it in the handler callback.
39
+ */
40
+ static refresh(client: HailerClient, scopes: Set<string>, currentInit: HailerV2CoreInitResponse, configWorkspaceId: string | undefined, permissions: BotPermissions, userContext: UserContext | null, logger: Logger): Promise<WorkspaceState>;
41
+ }
42
+ /**
43
+ * Backfill workspaceCache.usersById with entries from network.members
44
+ * that are missing from init.users (partial user list).
45
+ */
46
+ export declare function backfillWorkspaceCacheMembers(workspaceCache: WorkspaceCache, init: HailerV2CoreInitResponse, logger: Logger): void;
47
+ //# sourceMappingURL=workspace-refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-refresh.d.ts","sourceRoot":"","sources":["../../../src/bot/services/workspace-refresh.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAA0B,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAwB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,qBAAa,gBAAgB;IAQzB,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;gBAGpB,MAAM,EAAE,MAAM;IAGxB,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI;IAYvD,qDAAqD;IACrD,OAAO,CAAC,SAAS,CAAyD;IAE1E,mCAAmC;IACnC,UAAU,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;YAInD,OAAO;IAyBrB,8BAA8B;IAC9B,MAAM,IAAI,IAAI;IAOd;;;OAGG;WACU,OAAO,CAClB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACnB,WAAW,EAAE,wBAAwB,EACrC,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,WAAW,EAAE,cAAc,EAC3B,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC;CA6C3B;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,wBAAwB,EAC9B,MAAM,EAAE,MAAM,GACb,IAAI,CAwBN"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ /**
3
+ * WorkspaceRefresh — debounced workspace data refresh from Hailer signals.
4
+ *
5
+ * When process.updated, workspace.updated, or cache.invalidate signals fire,
6
+ * schedules a single debounced API call to re-fetch and rebuild caches.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.WorkspaceRefresh = void 0;
10
+ exports.backfillWorkspaceCacheMembers = backfillWorkspaceCacheMembers;
11
+ const types_1 = require("../../mcp/utils/types");
12
+ const workspace_cache_1 = require("../../mcp/workspace-cache");
13
+ const workspace_overview_1 = require("../workspace-overview");
14
+ class WorkspaceRefresh {
15
+ logger;
16
+ refreshTimer = null;
17
+ refreshDirty = false;
18
+ refreshScope = new Set();
19
+ isRefreshing = false;
20
+ refreshQueued = false;
21
+ constructor(logger) {
22
+ this.logger = logger;
23
+ }
24
+ /** Schedule a debounced refresh. Scopes: 'processes', 'network', 'full'. */
25
+ schedule(scope) {
26
+ this.refreshDirty = true;
27
+ if (scope === 'full') {
28
+ this.refreshScope.clear();
29
+ this.refreshScope.add('full');
30
+ }
31
+ else if (!this.refreshScope.has('full')) {
32
+ this.refreshScope.add(scope);
33
+ }
34
+ if (this.refreshTimer)
35
+ clearTimeout(this.refreshTimer);
36
+ this.refreshTimer = setTimeout(() => this.execute(), 2000);
37
+ }
38
+ /** Set the callback that does the actual refresh. */
39
+ onRefresh = null;
40
+ /** Wire up the refresh handler. */
41
+ setHandler(handler) {
42
+ this.onRefresh = handler;
43
+ }
44
+ async execute() {
45
+ if (!this.refreshDirty || !this.onRefresh)
46
+ return;
47
+ if (this.isRefreshing) {
48
+ this.refreshQueued = true;
49
+ return;
50
+ }
51
+ this.isRefreshing = true;
52
+ this.refreshDirty = false;
53
+ const scopes = new Set(this.refreshScope);
54
+ this.refreshScope.clear();
55
+ this.refreshTimer = null;
56
+ try {
57
+ await this.onRefresh(scopes);
58
+ }
59
+ catch (error) {
60
+ this.logger.error('Failed to refresh workspace data', error);
61
+ }
62
+ finally {
63
+ this.isRefreshing = false;
64
+ if (this.refreshQueued) {
65
+ this.refreshQueued = false;
66
+ this.execute();
67
+ }
68
+ }
69
+ }
70
+ /** Cancel pending refresh. */
71
+ cancel() {
72
+ if (this.refreshTimer) {
73
+ clearTimeout(this.refreshTimer);
74
+ this.refreshTimer = null;
75
+ }
76
+ }
77
+ /**
78
+ * Perform the actual data refresh: fetch fresh init, rebuild caches.
79
+ * Static helper so bot.ts can use it in the handler callback.
80
+ */
81
+ static async refresh(client, scopes, currentInit, configWorkspaceId, permissions, userContext, logger) {
82
+ const isFull = scopes.has('full');
83
+ const keys = isFull
84
+ ? ['processes', 'users', 'network', 'networks', 'teams', 'groups']
85
+ : Array.from(scopes);
86
+ if (keys.includes('processes') && !keys.includes('users'))
87
+ keys.push('users');
88
+ logger.debug('Refreshing workspace data', { keys });
89
+ const freshData = await client.socket.request('v2.core.init', [keys]);
90
+ (0, types_1.normalizeInitProcesses)(freshData);
91
+ // Merge fresh data
92
+ if (freshData.processes)
93
+ currentInit.processes = freshData.processes;
94
+ if (freshData.users)
95
+ currentInit.users = freshData.users;
96
+ if (freshData.network)
97
+ currentInit.network = freshData.network;
98
+ if (freshData.networks)
99
+ currentInit.networks = freshData.networks;
100
+ if (freshData.teams)
101
+ currentInit.teams = freshData.teams;
102
+ if (freshData.groups)
103
+ currentInit.groups = freshData.groups;
104
+ const workspaceId = currentInit.network?._id || configWorkspaceId;
105
+ // Rebuild caches
106
+ const workspaceCache = (0, workspace_cache_1.createWorkspaceCache)(currentInit, {
107
+ excludeTranslations: true,
108
+ excludeSystemMessages: true,
109
+ excludeEmptyFields: true,
110
+ compactUserData: true,
111
+ includeWorkspaceNamesInTools: false,
112
+ });
113
+ backfillWorkspaceCacheMembers(workspaceCache, currentInit, logger);
114
+ permissions.build(currentInit, workspaceId);
115
+ const workspaceOverview = (0, workspace_overview_1.generateWorkspaceOverview)(currentInit);
116
+ // Update UserContext
117
+ if (userContext) {
118
+ userContext.init = currentInit;
119
+ userContext.workspaceCache = workspaceCache;
120
+ }
121
+ return { init: currentInit, workspaceCache, workspaceOverview, workspaceId };
122
+ }
123
+ }
124
+ exports.WorkspaceRefresh = WorkspaceRefresh;
125
+ /**
126
+ * Backfill workspaceCache.usersById with entries from network.members
127
+ * that are missing from init.users (partial user list).
128
+ */
129
+ function backfillWorkspaceCacheMembers(workspaceCache, init, logger) {
130
+ const network = init.network;
131
+ if (!network?.members)
132
+ return;
133
+ const members = Array.isArray(network.members) ? network.members : Object.values(network.members);
134
+ let backfilled = 0;
135
+ for (const member of members) {
136
+ if (member.uid && !workspaceCache.usersById[member.uid]) {
137
+ const stub = {
138
+ id: member.uid,
139
+ firstname: member.firstname || '',
140
+ lastname: member.lastname || '',
141
+ fullName: member.firstname && member.lastname
142
+ ? `${member.firstname} ${member.lastname}`
143
+ : member.firstname || member.lastname || '',
144
+ companies: [],
145
+ lastSeen: 0,
146
+ };
147
+ workspaceCache.usersById[member.uid] = stub;
148
+ workspaceCache.users.push(stub);
149
+ backfilled++;
150
+ }
151
+ }
152
+ logger.debug('Workspace cache member backfill', { totalMembers: members.length, backfilled });
153
+ }
154
+ //# sourceMappingURL=workspace-refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-refresh.js","sourceRoot":"","sources":["../../../src/bot/services/workspace-refresh.ts"],"names":[],"mappings":"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"}
@@ -1,42 +1,6 @@
1
1
  /**
2
2
  * Bot Configuration Constants
3
- *
4
- * Consolidated from mcp/tools/bot-config/constants.ts
5
3
  */
6
- /** Legacy state file (deprecated - use .bot-config/*.json instead) */
7
- export declare const LOCAL_STATE_FILE: string;
8
- /** Directory for schema configs */
9
- export declare const SCHEMAS_DIR: string;
10
- /** Credentials file */
11
- export declare const LOCAL_CREDENTIALS_FILE: string;
12
4
  /** Bot config directory */
13
5
  export declare const BOT_CONFIG_DIR: string;
14
- /** Window for deduplicating signals */
15
- export declare const SIGNAL_DEDUP_WINDOW_MS = 5000;
16
- /** Debounce time for restart triggers */
17
- export declare const RESTART_DEBOUNCE_MS = 500;
18
- /** Workflow name patterns for Agent Directory */
19
- export declare const AGENT_DIRECTORY_PATTERNS: string[];
20
- /** Phase name patterns for deployed/active bots */
21
- export declare const DEPLOYED_PHASE_PATTERNS: string[];
22
- /** Phase name patterns for retired/disabled bots */
23
- export declare const RETIRED_PHASE_PATTERNS: string[];
24
- export declare const FIELD_KEY_HAILER_PROFILE: string[];
25
- export declare const FIELD_KEY_EMAIL: string[];
26
- export declare const FIELD_KEY_PASSWORD: string[];
27
- export declare const FIELD_KEY_BOT_TYPE: string[];
28
- export declare const FIELD_KEY_SCHEMA_CONFIG: string[];
29
- export declare const FIELD_KEY_SYSTEM_PROMPT: string[];
30
- /** Fallback activity IDs when discovery fails */
31
- export declare const LEGACY_AGENT_ACTIVITY_IDS: Record<string, string>;
32
- export interface BotInfo {
33
- id: string;
34
- name: string;
35
- description: string;
36
- icon: string;
37
- }
38
- /**
39
- * Available bots - single source of truth
40
- */
41
- export declare const AVAILABLE_BOTS: BotInfo[];
42
6
  //# sourceMappingURL=constants.d.ts.map