@hailer/mcp 1.2.1 → 2.0.0-beta.3

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 (768) hide show
  1. package/.claude/agents/agent-hailer-helper.md +118 -0
  2. package/.claude/commands/app-squad.md +16 -110
  3. package/.claude/commands/debug-squad.md +13 -290
  4. package/.claude/commands/publish.md +2 -2
  5. package/.claude/commands/review-squad.md +17 -139
  6. package/.claude/skills/create-and-publish-app/SKILL.md +105 -151
  7. package/.claude/skills/hailer-app-builder/SKILL.md +2 -2
  8. package/.claude/skills/hailer-ui-guide/SKILL.md +265 -0
  9. package/.env.example +50 -1
  10. package/CLAUDE.md +138 -10
  11. package/dist/app.d.ts.map +1 -1
  12. package/dist/app.js +3 -0
  13. package/dist/app.js.map +1 -1
  14. package/dist/bot/bot-manager.d.ts +9 -6
  15. package/dist/bot/bot-manager.d.ts.map +1 -1
  16. package/dist/bot/bot-manager.js +142 -31
  17. package/dist/bot/bot-manager.js.map +1 -1
  18. package/dist/bot/bot.d.ts +59 -16
  19. package/dist/bot/bot.d.ts.map +1 -1
  20. package/dist/bot/bot.js +889 -142
  21. package/dist/bot/bot.js.map +1 -1
  22. package/dist/bot/operation-logger.d.ts.map +1 -1
  23. package/dist/bot/operation-logger.js +24 -12
  24. package/dist/bot/operation-logger.js.map +1 -1
  25. package/dist/bot/services/bot-permissions.d.ts +2 -2
  26. package/dist/bot/services/bot-permissions.d.ts.map +1 -1
  27. package/dist/bot/services/bot-permissions.js +28 -9
  28. package/dist/bot/services/bot-permissions.js.map +1 -1
  29. package/dist/bot/services/conversation-manager.d.ts +23 -23
  30. package/dist/bot/services/conversation-manager.d.ts.map +1 -1
  31. package/dist/bot/services/conversation-manager.js +52 -49
  32. package/dist/bot/services/conversation-manager.js.map +1 -1
  33. package/dist/bot/services/helper-prompt.d.ts +8 -0
  34. package/dist/bot/services/helper-prompt.d.ts.map +1 -0
  35. package/dist/bot/services/helper-prompt.js +177 -0
  36. package/dist/bot/services/helper-prompt.js.map +1 -0
  37. package/dist/bot/services/message-classifier.d.ts +16 -16
  38. package/dist/bot/services/message-classifier.d.ts.map +1 -1
  39. package/dist/bot/services/message-classifier.js +55 -49
  40. package/dist/bot/services/message-classifier.js.map +1 -1
  41. package/dist/bot/services/message-formatter.d.ts +38 -38
  42. package/dist/bot/services/message-formatter.d.ts.map +1 -1
  43. package/dist/bot/services/message-formatter.js +81 -74
  44. package/dist/bot/services/message-formatter.js.map +1 -1
  45. package/dist/bot/services/permission-guard.d.ts.map +1 -1
  46. package/dist/bot/services/permission-guard.js +20 -10
  47. package/dist/bot/services/permission-guard.js.map +1 -1
  48. package/dist/bot/services/signal-router.d.ts.map +1 -1
  49. package/dist/bot/services/signal-router.js +11 -6
  50. package/dist/bot/services/signal-router.js.map +1 -1
  51. package/dist/bot/services/system-prompt.d.ts +14 -0
  52. package/dist/bot/services/system-prompt.d.ts.map +1 -1
  53. package/dist/bot/services/system-prompt.js +179 -4
  54. package/dist/bot/services/system-prompt.js.map +1 -1
  55. package/dist/bot/services/token-billing.d.ts +23 -23
  56. package/dist/bot/services/token-billing.d.ts.map +1 -1
  57. package/dist/bot/services/token-billing.js +51 -36
  58. package/dist/bot/services/token-billing.js.map +1 -1
  59. package/dist/bot/services/types.d.ts +3 -1
  60. package/dist/bot/services/types.d.ts.map +1 -1
  61. package/dist/bot/services/typing-indicator.d.ts +8 -8
  62. package/dist/bot/services/typing-indicator.d.ts.map +1 -1
  63. package/dist/bot/services/typing-indicator.js +12 -10
  64. package/dist/bot/services/typing-indicator.js.map +1 -1
  65. package/dist/bot/services/workspace-refresh.d.ts +3 -3
  66. package/dist/bot/services/workspace-refresh.d.ts.map +1 -1
  67. package/dist/bot/services/workspace-refresh.js +23 -13
  68. package/dist/bot/services/workspace-refresh.js.map +1 -1
  69. package/dist/bot/tool-executor.d.ts +10 -6
  70. package/dist/bot/tool-executor.d.ts.map +1 -1
  71. package/dist/bot/tool-executor.js +12 -6
  72. package/dist/bot/tool-executor.js.map +1 -1
  73. package/dist/bot/workspace-overview.d.ts.map +1 -1
  74. package/dist/bot/workspace-overview.js +6 -3
  75. package/dist/bot/workspace-overview.js.map +1 -1
  76. package/dist/bot-config/activity-error.d.ts +47 -0
  77. package/dist/bot-config/activity-error.d.ts.map +1 -0
  78. package/dist/bot-config/activity-error.js +67 -0
  79. package/dist/bot-config/activity-error.js.map +1 -0
  80. package/dist/bot-config/context.d.ts +4 -4
  81. package/dist/bot-config/context.d.ts.map +1 -1
  82. package/dist/bot-config/context.js +18 -14
  83. package/dist/bot-config/context.js.map +1 -1
  84. package/dist/bot-config/events.d.ts +45 -0
  85. package/dist/bot-config/events.d.ts.map +1 -0
  86. package/dist/bot-config/events.js +51 -0
  87. package/dist/bot-config/events.js.map +1 -0
  88. package/dist/bot-config/index.d.ts +3 -0
  89. package/dist/bot-config/index.d.ts.map +1 -1
  90. package/dist/bot-config/index.js +8 -1
  91. package/dist/bot-config/index.js.map +1 -1
  92. package/dist/bot-config/loader.d.ts +3 -0
  93. package/dist/bot-config/loader.d.ts.map +1 -1
  94. package/dist/bot-config/loader.js +45 -20
  95. package/dist/bot-config/loader.js.map +1 -1
  96. package/dist/bot-config/persistence.js.map +1 -1
  97. package/dist/bot-config/reconciler.d.ts +11 -0
  98. package/dist/bot-config/reconciler.d.ts.map +1 -0
  99. package/dist/bot-config/reconciler.js +121 -0
  100. package/dist/bot-config/reconciler.js.map +1 -0
  101. package/dist/bot-config/state.d.ts.map +1 -1
  102. package/dist/bot-config/state.js.map +1 -1
  103. package/dist/bot-config/types.d.ts +32 -0
  104. package/dist/bot-config/types.d.ts.map +1 -1
  105. package/dist/bot-config/webhooks.d.ts.map +1 -1
  106. package/dist/bot-config/webhooks.js.map +1 -1
  107. package/dist/bot-config/workflow-installer.d.ts +37 -0
  108. package/dist/bot-config/workflow-installer.d.ts.map +1 -0
  109. package/dist/bot-config/workflow-installer.js +346 -0
  110. package/dist/bot-config/workflow-installer.js.map +1 -0
  111. package/dist/cli.d.ts.map +1 -1
  112. package/dist/cli.js +54 -0
  113. package/dist/cli.js.map +1 -1
  114. package/dist/config.d.ts +23 -19
  115. package/dist/config.d.ts.map +1 -1
  116. package/dist/config.js +65 -27
  117. package/dist/config.js.map +1 -1
  118. package/dist/core.d.ts +6 -4
  119. package/dist/core.d.ts.map +1 -1
  120. package/dist/core.js +11 -16
  121. package/dist/core.js.map +1 -1
  122. package/dist/lib/logger.d.ts.map +1 -1
  123. package/dist/lib/logger.js +7 -4
  124. package/dist/lib/logger.js.map +1 -1
  125. package/dist/lib/request-logger.d.ts +19 -19
  126. package/dist/lib/request-logger.d.ts.map +1 -1
  127. package/dist/lib/request-logger.js +19 -19
  128. package/dist/lib/request-logger.js.map +1 -1
  129. package/dist/mcp/UserContextCache.d.ts +28 -22
  130. package/dist/mcp/UserContextCache.d.ts.map +1 -1
  131. package/dist/mcp/UserContextCache.js +23 -23
  132. package/dist/mcp/UserContextCache.js.map +1 -1
  133. package/dist/mcp/auth.js.map +1 -1
  134. package/dist/mcp/hailer-clients.d.ts +5 -4
  135. package/dist/mcp/hailer-clients.d.ts.map +1 -1
  136. package/dist/mcp/hailer-clients.js +61 -27
  137. package/dist/mcp/hailer-clients.js.map +1 -1
  138. package/dist/mcp/hailer-rpc.d.ts +40 -0
  139. package/dist/mcp/hailer-rpc.d.ts.map +1 -0
  140. package/dist/mcp/hailer-rpc.js +43 -0
  141. package/dist/mcp/hailer-rpc.js.map +1 -0
  142. package/dist/mcp/publish-auth-injector.d.ts +22 -0
  143. package/dist/mcp/publish-auth-injector.d.ts.map +1 -0
  144. package/dist/mcp/publish-auth-injector.js +100 -0
  145. package/dist/mcp/publish-auth-injector.js.map +1 -0
  146. package/dist/mcp/session-store.d.ts +16 -16
  147. package/dist/mcp/session-store.d.ts.map +1 -1
  148. package/dist/mcp/session-store.js +16 -16
  149. package/dist/mcp/session-store.js.map +1 -1
  150. package/dist/mcp/tool-profiles.d.ts +69 -0
  151. package/dist/mcp/tool-profiles.d.ts.map +1 -0
  152. package/dist/mcp/tool-profiles.js +176 -0
  153. package/dist/mcp/tool-profiles.js.map +1 -0
  154. package/dist/mcp/tool-registry.d.ts +16 -0
  155. package/dist/mcp/tool-registry.d.ts.map +1 -1
  156. package/dist/mcp/tool-registry.js +91 -39
  157. package/dist/mcp/tool-registry.js.map +1 -1
  158. package/dist/mcp/tools/activity.d.ts.map +1 -1
  159. package/dist/mcp/tools/activity.js +398 -198
  160. package/dist/mcp/tools/activity.js.map +1 -1
  161. package/dist/mcp/tools/aliases.d.ts +11 -0
  162. package/dist/mcp/tools/aliases.d.ts.map +1 -0
  163. package/dist/mcp/tools/aliases.js +176 -0
  164. package/dist/mcp/tools/aliases.js.map +1 -0
  165. package/dist/mcp/tools/app-core.d.ts +6 -8
  166. package/dist/mcp/tools/app-core.d.ts.map +1 -1
  167. package/dist/mcp/tools/app-core.js +355 -254
  168. package/dist/mcp/tools/app-core.js.map +1 -1
  169. package/dist/mcp/tools/app-marketplace.d.ts +8 -16
  170. package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
  171. package/dist/mcp/tools/app-marketplace.js +604 -930
  172. package/dist/mcp/tools/app-marketplace.js.map +1 -1
  173. package/dist/mcp/tools/app.d.ts +4 -7
  174. package/dist/mcp/tools/app.d.ts.map +1 -1
  175. package/dist/mcp/tools/app.js +4 -7
  176. package/dist/mcp/tools/app.js.map +1 -1
  177. package/dist/mcp/tools/bot-self.d.ts +21 -0
  178. package/dist/mcp/tools/bot-self.d.ts.map +1 -0
  179. package/dist/mcp/tools/bot-self.js +174 -0
  180. package/dist/mcp/tools/bot-self.js.map +1 -0
  181. package/dist/mcp/tools/calendar.d.ts +21 -0
  182. package/dist/mcp/tools/calendar.d.ts.map +1 -0
  183. package/dist/mcp/tools/calendar.js +741 -0
  184. package/dist/mcp/tools/calendar.js.map +1 -0
  185. package/dist/mcp/tools/company.d.ts.map +1 -1
  186. package/dist/mcp/tools/company.js +2 -1
  187. package/dist/mcp/tools/company.js.map +1 -1
  188. package/dist/mcp/tools/date.js.map +1 -1
  189. package/dist/mcp/tools/discussion.d.ts +23 -3
  190. package/dist/mcp/tools/discussion.d.ts.map +1 -1
  191. package/dist/mcp/tools/discussion.js +417 -534
  192. package/dist/mcp/tools/discussion.js.map +1 -1
  193. package/dist/mcp/tools/file.d.ts.map +1 -1
  194. package/dist/mcp/tools/file.js +18 -16
  195. package/dist/mcp/tools/file.js.map +1 -1
  196. package/dist/mcp/tools/index.js +4 -4
  197. package/dist/mcp/tools/index.js.map +1 -1
  198. package/dist/mcp/tools/insight.d.ts +7 -5
  199. package/dist/mcp/tools/insight.d.ts.map +1 -1
  200. package/dist/mcp/tools/insight.js +419 -477
  201. package/dist/mcp/tools/insight.js.map +1 -1
  202. package/dist/mcp/tools/user.d.ts.map +1 -1
  203. package/dist/mcp/tools/user.js +15 -13
  204. package/dist/mcp/tools/user.js.map +1 -1
  205. package/dist/mcp/tools/workflow-permissions.d.ts +2 -4
  206. package/dist/mcp/tools/workflow-permissions.d.ts.map +1 -1
  207. package/dist/mcp/tools/workflow-permissions.js +88 -97
  208. package/dist/mcp/tools/workflow-permissions.js.map +1 -1
  209. package/dist/mcp/tools/workflow.d.ts +2 -7
  210. package/dist/mcp/tools/workflow.d.ts.map +1 -1
  211. package/dist/mcp/tools/workflow.js +817 -850
  212. package/dist/mcp/tools/workflow.js.map +1 -1
  213. package/dist/mcp/utils/api-errors.d.ts.map +1 -1
  214. package/dist/mcp/utils/api-errors.js +2 -2
  215. package/dist/mcp/utils/api-errors.js.map +1 -1
  216. package/dist/mcp/utils/data-transformers.d.ts.map +1 -1
  217. package/dist/mcp/utils/data-transformers.js +8 -4
  218. package/dist/mcp/utils/data-transformers.js.map +1 -1
  219. package/dist/mcp/utils/file-upload.d.ts.map +1 -1
  220. package/dist/mcp/utils/file-upload.js +1 -1
  221. package/dist/mcp/utils/file-upload.js.map +1 -1
  222. package/dist/mcp/utils/hailer-api-client.d.ts +81 -81
  223. package/dist/mcp/utils/hailer-api-client.d.ts.map +1 -1
  224. package/dist/mcp/utils/hailer-api-client.js +103 -101
  225. package/dist/mcp/utils/hailer-api-client.js.map +1 -1
  226. package/dist/mcp/utils/index.d.ts.map +1 -1
  227. package/dist/mcp/utils/index.js.map +1 -1
  228. package/dist/mcp/utils/logger.d.ts.map +1 -1
  229. package/dist/mcp/utils/logger.js.map +1 -1
  230. package/dist/mcp/utils/response-builder.d.ts.map +1 -1
  231. package/dist/mcp/utils/response-builder.js +8 -4
  232. package/dist/mcp/utils/response-builder.js.map +1 -1
  233. package/dist/mcp/utils/role-utils.d.ts.map +1 -1
  234. package/dist/mcp/utils/role-utils.js +6 -3
  235. package/dist/mcp/utils/role-utils.js.map +1 -1
  236. package/dist/mcp/utils/tool-helpers.d.ts.map +1 -1
  237. package/dist/mcp/utils/tool-helpers.js +2 -2
  238. package/dist/mcp/utils/tool-helpers.js.map +1 -1
  239. package/dist/mcp/utils/types.d.ts +1 -1
  240. package/dist/mcp/utils/types.d.ts.map +1 -1
  241. package/dist/mcp/utils/types.js.map +1 -1
  242. package/dist/mcp/webhook-handler.d.ts +43 -8
  243. package/dist/mcp/webhook-handler.d.ts.map +1 -1
  244. package/dist/mcp/webhook-handler.js +861 -116
  245. package/dist/mcp/webhook-handler.js.map +1 -1
  246. package/dist/mcp/workspace-admin-store.d.ts +49 -0
  247. package/dist/mcp/workspace-admin-store.d.ts.map +1 -0
  248. package/dist/mcp/workspace-admin-store.js +168 -0
  249. package/dist/mcp/workspace-admin-store.js.map +1 -0
  250. package/dist/mcp/workspace-cache.d.ts +2 -2
  251. package/dist/mcp/workspace-cache.d.ts.map +1 -1
  252. package/dist/mcp/workspace-cache.js +9 -5
  253. package/dist/mcp/workspace-cache.js.map +1 -1
  254. package/dist/mcp-server.d.ts +26 -11
  255. package/dist/mcp-server.d.ts.map +1 -1
  256. package/dist/mcp-server.js +360 -36
  257. package/dist/mcp-server.js.map +1 -1
  258. package/dist/plugins/vipunen/client.d.ts +41 -41
  259. package/dist/plugins/vipunen/client.d.ts.map +1 -1
  260. package/dist/plugins/vipunen/client.js +53 -48
  261. package/dist/plugins/vipunen/client.js.map +1 -1
  262. package/dist/plugins/vipunen/index.js.map +1 -1
  263. package/dist/plugins/vipunen/tools.d.ts.map +1 -1
  264. package/dist/plugins/vipunen/tools.js +6 -3
  265. package/dist/plugins/vipunen/tools.js.map +1 -1
  266. package/dist/public-chat/graduate.d.ts +29 -0
  267. package/dist/public-chat/graduate.d.ts.map +1 -0
  268. package/dist/public-chat/graduate.js +593 -0
  269. package/dist/public-chat/graduate.js.map +1 -0
  270. package/dist/public-chat/handler.d.ts +12 -0
  271. package/dist/public-chat/handler.d.ts.map +1 -0
  272. package/dist/public-chat/handler.js +179 -0
  273. package/dist/public-chat/handler.js.map +1 -0
  274. package/dist/public-chat/index.d.ts +16 -0
  275. package/dist/public-chat/index.d.ts.map +1 -0
  276. package/dist/public-chat/index.js +74 -0
  277. package/dist/public-chat/index.js.map +1 -0
  278. package/dist/public-chat/knowledge.d.ts +3 -0
  279. package/dist/public-chat/knowledge.d.ts.map +1 -0
  280. package/dist/public-chat/knowledge.js +1339 -0
  281. package/dist/public-chat/knowledge.js.map +1 -0
  282. package/dist/public-chat/rate-limit.d.ts +16 -0
  283. package/dist/public-chat/rate-limit.d.ts.map +1 -0
  284. package/dist/public-chat/rate-limit.js +51 -0
  285. package/dist/public-chat/rate-limit.js.map +1 -0
  286. package/dist/public-chat/session-store.d.ts +41 -0
  287. package/dist/public-chat/session-store.d.ts.map +1 -0
  288. package/dist/public-chat/session-store.js +95 -0
  289. package/dist/public-chat/session-store.js.map +1 -0
  290. package/dist/public-chat/studio-prewarm.d.ts +61 -0
  291. package/dist/public-chat/studio-prewarm.d.ts.map +1 -0
  292. package/dist/public-chat/studio-prewarm.js +162 -0
  293. package/dist/public-chat/studio-prewarm.js.map +1 -0
  294. package/dist/public-chat/system-prompt.d.ts +22 -0
  295. package/dist/public-chat/system-prompt.d.ts.map +1 -0
  296. package/dist/public-chat/system-prompt.js +428 -0
  297. package/dist/public-chat/system-prompt.js.map +1 -0
  298. package/package.json +14 -7
  299. package/scripts/build-public-chat-knowledge.py +101 -0
  300. package/scripts/probe-mcp-pricing.ts +52 -0
  301. package/scripts/smoke-public-chat-live.ts +148 -0
  302. package/scripts/smoke-public-chat.ts +110 -0
  303. package/.claude/CLAUDE.md +0 -126
  304. package/.claude/commands/audit-squad.md +0 -158
  305. package/.claude/commands/cleanup-squad.md +0 -98
  306. package/.claude/commands/config-squad.md +0 -106
  307. package/.claude/commands/crud-squad.md +0 -87
  308. package/.claude/commands/data-squad.md +0 -97
  309. package/.claude/commands/doc-squad.md +0 -65
  310. package/.claude/commands/help.md +0 -29
  311. package/.claude/commands/help:agents.md +0 -182
  312. package/.claude/commands/help:commands.md +0 -78
  313. package/.claude/commands/help:faq.md +0 -79
  314. package/.claude/commands/help:plugins.md +0 -50
  315. package/.claude/commands/help:skills.md +0 -87
  316. package/.claude/commands/help:tools.md +0 -75
  317. package/.claude/commands/hotfix-squad.md +0 -112
  318. package/.claude/commands/integration-squad.md +0 -82
  319. package/.claude/commands/janitor-squad.md +0 -167
  320. package/.claude/commands/onboard-squad.md +0 -130
  321. package/.claude/commands/swarm.md +0 -210
  322. package/.claude/commands/tool-builder.md +0 -39
  323. package/.claude/skills/publish-hailer-app/SKILL.md +0 -280
  324. package/dist/CLAUDE.md +0 -370
  325. package/dist/agents/bot-manager.d.ts +0 -48
  326. package/dist/agents/bot-manager.d.ts.map +0 -1
  327. package/dist/agents/bot-manager.js +0 -254
  328. package/dist/agents/bot-manager.js.map +0 -1
  329. package/dist/agents/bug-fixer/ai.d.ts +0 -80
  330. package/dist/agents/bug-fixer/ai.d.ts.map +0 -1
  331. package/dist/agents/bug-fixer/ai.js +0 -466
  332. package/dist/agents/bug-fixer/ai.js.map +0 -1
  333. package/dist/agents/bug-fixer/bot.d.ts +0 -92
  334. package/dist/agents/bug-fixer/bot.d.ts.map +0 -1
  335. package/dist/agents/bug-fixer/bot.js +0 -687
  336. package/dist/agents/bug-fixer/bot.js.map +0 -1
  337. package/dist/agents/bug-fixer/config.d.ts +0 -21
  338. package/dist/agents/bug-fixer/config.d.ts.map +0 -1
  339. package/dist/agents/bug-fixer/config.js +0 -218
  340. package/dist/agents/bug-fixer/config.js.map +0 -1
  341. package/dist/agents/bug-fixer/files.d.ts +0 -67
  342. package/dist/agents/bug-fixer/files.d.ts.map +0 -1
  343. package/dist/agents/bug-fixer/files.js +0 -386
  344. package/dist/agents/bug-fixer/files.js.map +0 -1
  345. package/dist/agents/bug-fixer/git.d.ts +0 -48
  346. package/dist/agents/bug-fixer/git.d.ts.map +0 -1
  347. package/dist/agents/bug-fixer/git.js +0 -298
  348. package/dist/agents/bug-fixer/git.js.map +0 -1
  349. package/dist/agents/bug-fixer/index.d.ts +0 -103
  350. package/dist/agents/bug-fixer/index.d.ts.map +0 -1
  351. package/dist/agents/bug-fixer/index.js +0 -262
  352. package/dist/agents/bug-fixer/index.js.map +0 -1
  353. package/dist/agents/bug-fixer/lsp.d.ts +0 -113
  354. package/dist/agents/bug-fixer/lsp.d.ts.map +0 -1
  355. package/dist/agents/bug-fixer/lsp.js +0 -485
  356. package/dist/agents/bug-fixer/lsp.js.map +0 -1
  357. package/dist/agents/bug-fixer/monitor.d.ts +0 -123
  358. package/dist/agents/bug-fixer/monitor.d.ts.map +0 -1
  359. package/dist/agents/bug-fixer/monitor.js +0 -629
  360. package/dist/agents/bug-fixer/monitor.js.map +0 -1
  361. package/dist/agents/bug-fixer/prompt.d.ts +0 -5
  362. package/dist/agents/bug-fixer/prompt.d.ts.map +0 -1
  363. package/dist/agents/bug-fixer/prompt.js +0 -94
  364. package/dist/agents/bug-fixer/prompt.js.map +0 -1
  365. package/dist/agents/bug-fixer/registries/pending-classification.d.ts +0 -28
  366. package/dist/agents/bug-fixer/registries/pending-classification.d.ts.map +0 -1
  367. package/dist/agents/bug-fixer/registries/pending-classification.js +0 -50
  368. package/dist/agents/bug-fixer/registries/pending-classification.js.map +0 -1
  369. package/dist/agents/bug-fixer/registries/pending-fix.d.ts +0 -33
  370. package/dist/agents/bug-fixer/registries/pending-fix.d.ts.map +0 -1
  371. package/dist/agents/bug-fixer/registries/pending-fix.js +0 -64
  372. package/dist/agents/bug-fixer/registries/pending-fix.js.map +0 -1
  373. package/dist/agents/bug-fixer/registries/pending.d.ts +0 -27
  374. package/dist/agents/bug-fixer/registries/pending.d.ts.map +0 -1
  375. package/dist/agents/bug-fixer/registries/pending.js +0 -49
  376. package/dist/agents/bug-fixer/registries/pending.js.map +0 -1
  377. package/dist/agents/bug-fixer/specialist-daemon.d.ts +0 -88
  378. package/dist/agents/bug-fixer/specialist-daemon.d.ts.map +0 -1
  379. package/dist/agents/bug-fixer/specialist-daemon.js +0 -431
  380. package/dist/agents/bug-fixer/specialist-daemon.js.map +0 -1
  381. package/dist/agents/bug-fixer/specialist.d.ts +0 -47
  382. package/dist/agents/bug-fixer/specialist.d.ts.map +0 -1
  383. package/dist/agents/bug-fixer/specialist.js +0 -327
  384. package/dist/agents/bug-fixer/specialist.js.map +0 -1
  385. package/dist/agents/bug-fixer/types.d.ts +0 -123
  386. package/dist/agents/bug-fixer/types.d.ts.map +0 -1
  387. package/dist/agents/bug-fixer/types.js +0 -9
  388. package/dist/agents/bug-fixer/types.js.map +0 -1
  389. package/dist/agents/factory.d.ts +0 -172
  390. package/dist/agents/factory.d.ts.map +0 -1
  391. package/dist/agents/factory.js +0 -706
  392. package/dist/agents/factory.js.map +0 -1
  393. package/dist/agents/hailer-expert/index.d.ts +0 -8
  394. package/dist/agents/hailer-expert/index.d.ts.map +0 -1
  395. package/dist/agents/hailer-expert/index.js +0 -14
  396. package/dist/agents/hailer-expert/index.js.map +0 -1
  397. package/dist/agents/hal/daemon.d.ts +0 -174
  398. package/dist/agents/hal/daemon.d.ts.map +0 -1
  399. package/dist/agents/hal/daemon.js +0 -1385
  400. package/dist/agents/hal/daemon.js.map +0 -1
  401. package/dist/agents/hal/definitions.d.ts +0 -42
  402. package/dist/agents/hal/definitions.d.ts.map +0 -1
  403. package/dist/agents/hal/definitions.js +0 -300
  404. package/dist/agents/hal/definitions.js.map +0 -1
  405. package/dist/agents/hal/index.d.ts +0 -3
  406. package/dist/agents/hal/index.d.ts.map +0 -1
  407. package/dist/agents/hal/index.js +0 -8
  408. package/dist/agents/hal/index.js.map +0 -1
  409. package/dist/agents/index.d.ts +0 -18
  410. package/dist/agents/index.d.ts.map +0 -1
  411. package/dist/agents/index.js +0 -48
  412. package/dist/agents/index.js.map +0 -1
  413. package/dist/agents/shared/base.d.ts +0 -253
  414. package/dist/agents/shared/base.d.ts.map +0 -1
  415. package/dist/agents/shared/base.js +0 -1122
  416. package/dist/agents/shared/base.js.map +0 -1
  417. package/dist/agents/shared/schemas/action-schema.d.ts +0 -62
  418. package/dist/agents/shared/schemas/action-schema.d.ts.map +0 -1
  419. package/dist/agents/shared/schemas/action-schema.js +0 -483
  420. package/dist/agents/shared/schemas/action-schema.js.map +0 -1
  421. package/dist/agents/shared/services/agent-registry.d.ts +0 -108
  422. package/dist/agents/shared/services/agent-registry.d.ts.map +0 -1
  423. package/dist/agents/shared/services/agent-registry.js +0 -469
  424. package/dist/agents/shared/services/agent-registry.js.map +0 -1
  425. package/dist/agents/shared/services/conversation-manager.d.ts +0 -57
  426. package/dist/agents/shared/services/conversation-manager.d.ts.map +0 -1
  427. package/dist/agents/shared/services/conversation-manager.js +0 -168
  428. package/dist/agents/shared/services/conversation-manager.js.map +0 -1
  429. package/dist/agents/shared/services/mcp-client.d.ts +0 -56
  430. package/dist/agents/shared/services/mcp-client.d.ts.map +0 -1
  431. package/dist/agents/shared/services/mcp-client.js +0 -124
  432. package/dist/agents/shared/services/mcp-client.js.map +0 -1
  433. package/dist/agents/shared/services/message-classifier.d.ts +0 -37
  434. package/dist/agents/shared/services/message-classifier.d.ts.map +0 -1
  435. package/dist/agents/shared/services/message-classifier.js +0 -203
  436. package/dist/agents/shared/services/message-classifier.js.map +0 -1
  437. package/dist/agents/shared/services/message-formatter.d.ts +0 -89
  438. package/dist/agents/shared/services/message-formatter.d.ts.map +0 -1
  439. package/dist/agents/shared/services/message-formatter.js +0 -390
  440. package/dist/agents/shared/services/message-formatter.js.map +0 -1
  441. package/dist/agents/shared/services/session-logger.d.ts +0 -162
  442. package/dist/agents/shared/services/session-logger.d.ts.map +0 -1
  443. package/dist/agents/shared/services/session-logger.js +0 -724
  444. package/dist/agents/shared/services/session-logger.js.map +0 -1
  445. package/dist/agents/shared/services/structured-output-executor.d.ts +0 -88
  446. package/dist/agents/shared/services/structured-output-executor.d.ts.map +0 -1
  447. package/dist/agents/shared/services/structured-output-executor.js +0 -296
  448. package/dist/agents/shared/services/structured-output-executor.js.map +0 -1
  449. package/dist/agents/shared/services/token-billing.d.ts +0 -72
  450. package/dist/agents/shared/services/token-billing.d.ts.map +0 -1
  451. package/dist/agents/shared/services/token-billing.js +0 -198
  452. package/dist/agents/shared/services/token-billing.js.map +0 -1
  453. package/dist/agents/shared/services/tool-executor.d.ts +0 -43
  454. package/dist/agents/shared/services/tool-executor.d.ts.map +0 -1
  455. package/dist/agents/shared/services/tool-executor.js +0 -175
  456. package/dist/agents/shared/services/tool-executor.js.map +0 -1
  457. package/dist/agents/shared/services/typing-indicator.d.ts +0 -24
  458. package/dist/agents/shared/services/typing-indicator.d.ts.map +0 -1
  459. package/dist/agents/shared/services/typing-indicator.js +0 -54
  460. package/dist/agents/shared/services/typing-indicator.js.map +0 -1
  461. package/dist/agents/shared/services/workspace-schema-cache.d.ts +0 -122
  462. package/dist/agents/shared/services/workspace-schema-cache.d.ts.map +0 -1
  463. package/dist/agents/shared/services/workspace-schema-cache.js +0 -507
  464. package/dist/agents/shared/services/workspace-schema-cache.js.map +0 -1
  465. package/dist/agents/shared/specialist.d.ts +0 -91
  466. package/dist/agents/shared/specialist.d.ts.map +0 -1
  467. package/dist/agents/shared/specialist.js +0 -399
  468. package/dist/agents/shared/specialist.js.map +0 -1
  469. package/dist/agents/shared/tool-schema-loader.d.ts +0 -65
  470. package/dist/agents/shared/tool-schema-loader.d.ts.map +0 -1
  471. package/dist/agents/shared/tool-schema-loader.js +0 -238
  472. package/dist/agents/shared/tool-schema-loader.js.map +0 -1
  473. package/dist/agents/shared/types.d.ts +0 -190
  474. package/dist/agents/shared/types.d.ts.map +0 -1
  475. package/dist/agents/shared/types.js +0 -13
  476. package/dist/agents/shared/types.js.map +0 -1
  477. package/dist/bot/bot-config.d.ts +0 -37
  478. package/dist/bot/bot-config.d.ts.map +0 -1
  479. package/dist/bot/bot-config.js +0 -219
  480. package/dist/bot/bot-config.js.map +0 -1
  481. package/dist/bot/services/__tests__/permission-guard.test.d.ts +0 -2
  482. package/dist/bot/services/__tests__/permission-guard.test.d.ts.map +0 -1
  483. package/dist/bot/services/__tests__/permission-guard.test.js +0 -357
  484. package/dist/bot/services/__tests__/permission-guard.test.js.map +0 -1
  485. package/dist/bot/services/session-logger.d.ts +0 -162
  486. package/dist/bot/services/session-logger.d.ts.map +0 -1
  487. package/dist/bot/services/session-logger.js +0 -724
  488. package/dist/bot/services/session-logger.js.map +0 -1
  489. package/dist/bot/services/workspace-schema-cache.d.ts +0 -122
  490. package/dist/bot/services/workspace-schema-cache.d.ts.map +0 -1
  491. package/dist/bot/services/workspace-schema-cache.js +0 -506
  492. package/dist/bot/services/workspace-schema-cache.js.map +0 -1
  493. package/dist/bot-config/tools.d.ts +0 -28
  494. package/dist/bot-config/tools.d.ts.map +0 -1
  495. package/dist/bot-config/tools.js +0 -279
  496. package/dist/bot-config/tools.js.map +0 -1
  497. package/dist/client/agents/base.d.ts +0 -207
  498. package/dist/client/agents/base.d.ts.map +0 -1
  499. package/dist/client/agents/base.js +0 -744
  500. package/dist/client/agents/base.js.map +0 -1
  501. package/dist/client/agents/definitions.d.ts +0 -53
  502. package/dist/client/agents/definitions.d.ts.map +0 -1
  503. package/dist/client/agents/definitions.js +0 -263
  504. package/dist/client/agents/definitions.js.map +0 -1
  505. package/dist/client/agents/orchestrator.d.ts +0 -141
  506. package/dist/client/agents/orchestrator.d.ts.map +0 -1
  507. package/dist/client/agents/orchestrator.js +0 -1062
  508. package/dist/client/agents/orchestrator.js.map +0 -1
  509. package/dist/client/agents/specialist.d.ts +0 -86
  510. package/dist/client/agents/specialist.d.ts.map +0 -1
  511. package/dist/client/agents/specialist.js +0 -340
  512. package/dist/client/agents/specialist.js.map +0 -1
  513. package/dist/client/bot-entrypoint.d.ts +0 -7
  514. package/dist/client/bot-entrypoint.d.ts.map +0 -1
  515. package/dist/client/bot-entrypoint.js +0 -103
  516. package/dist/client/bot-entrypoint.js.map +0 -1
  517. package/dist/client/bot-manager.d.ts +0 -44
  518. package/dist/client/bot-manager.d.ts.map +0 -1
  519. package/dist/client/bot-manager.js +0 -173
  520. package/dist/client/bot-manager.js.map +0 -1
  521. package/dist/client/bot-runner.d.ts +0 -35
  522. package/dist/client/bot-runner.d.ts.map +0 -1
  523. package/dist/client/bot-runner.js +0 -188
  524. package/dist/client/bot-runner.js.map +0 -1
  525. package/dist/client/chat-agent-daemon.d.ts +0 -464
  526. package/dist/client/chat-agent-daemon.d.ts.map +0 -1
  527. package/dist/client/chat-agent-daemon.js +0 -1774
  528. package/dist/client/chat-agent-daemon.js.map +0 -1
  529. package/dist/client/daemon-factory.d.ts +0 -106
  530. package/dist/client/daemon-factory.d.ts.map +0 -1
  531. package/dist/client/daemon-factory.js +0 -301
  532. package/dist/client/daemon-factory.js.map +0 -1
  533. package/dist/client/factory.d.ts +0 -111
  534. package/dist/client/factory.d.ts.map +0 -1
  535. package/dist/client/factory.js +0 -314
  536. package/dist/client/factory.js.map +0 -1
  537. package/dist/client/index.d.ts +0 -17
  538. package/dist/client/index.d.ts.map +0 -1
  539. package/dist/client/index.js +0 -38
  540. package/dist/client/index.js.map +0 -1
  541. package/dist/client/multi-bot-manager.d.ts +0 -42
  542. package/dist/client/multi-bot-manager.d.ts.map +0 -1
  543. package/dist/client/multi-bot-manager.js +0 -161
  544. package/dist/client/multi-bot-manager.js.map +0 -1
  545. package/dist/client/orchestrator-daemon.d.ts +0 -87
  546. package/dist/client/orchestrator-daemon.d.ts.map +0 -1
  547. package/dist/client/orchestrator-daemon.js +0 -444
  548. package/dist/client/orchestrator-daemon.js.map +0 -1
  549. package/dist/client/server.d.ts +0 -8
  550. package/dist/client/server.d.ts.map +0 -1
  551. package/dist/client/server.js +0 -251
  552. package/dist/client/server.js.map +0 -1
  553. package/dist/client/services/agent-registry.d.ts +0 -108
  554. package/dist/client/services/agent-registry.d.ts.map +0 -1
  555. package/dist/client/services/agent-registry.js +0 -630
  556. package/dist/client/services/agent-registry.js.map +0 -1
  557. package/dist/client/services/conversation-manager.d.ts +0 -50
  558. package/dist/client/services/conversation-manager.d.ts.map +0 -1
  559. package/dist/client/services/conversation-manager.js +0 -136
  560. package/dist/client/services/conversation-manager.js.map +0 -1
  561. package/dist/client/services/mcp-client.d.ts +0 -48
  562. package/dist/client/services/mcp-client.d.ts.map +0 -1
  563. package/dist/client/services/mcp-client.js +0 -105
  564. package/dist/client/services/mcp-client.js.map +0 -1
  565. package/dist/client/services/message-classifier.d.ts +0 -37
  566. package/dist/client/services/message-classifier.d.ts.map +0 -1
  567. package/dist/client/services/message-classifier.js +0 -187
  568. package/dist/client/services/message-classifier.js.map +0 -1
  569. package/dist/client/services/message-formatter.d.ts +0 -84
  570. package/dist/client/services/message-formatter.d.ts.map +0 -1
  571. package/dist/client/services/message-formatter.js +0 -353
  572. package/dist/client/services/message-formatter.js.map +0 -1
  573. package/dist/client/services/session-logger.d.ts +0 -106
  574. package/dist/client/services/session-logger.d.ts.map +0 -1
  575. package/dist/client/services/session-logger.js +0 -446
  576. package/dist/client/services/session-logger.js.map +0 -1
  577. package/dist/client/services/tool-executor.d.ts +0 -41
  578. package/dist/client/services/tool-executor.d.ts.map +0 -1
  579. package/dist/client/services/tool-executor.js +0 -169
  580. package/dist/client/services/tool-executor.js.map +0 -1
  581. package/dist/client/services/workspace-schema-cache.d.ts +0 -149
  582. package/dist/client/services/workspace-schema-cache.d.ts.map +0 -1
  583. package/dist/client/services/workspace-schema-cache.js +0 -732
  584. package/dist/client/services/workspace-schema-cache.js.map +0 -1
  585. package/dist/client/specialist-daemon.d.ts +0 -77
  586. package/dist/client/specialist-daemon.d.ts.map +0 -1
  587. package/dist/client/specialist-daemon.js +0 -197
  588. package/dist/client/specialist-daemon.js.map +0 -1
  589. package/dist/client/specialists.d.ts +0 -53
  590. package/dist/client/specialists.d.ts.map +0 -1
  591. package/dist/client/specialists.js +0 -178
  592. package/dist/client/specialists.js.map +0 -1
  593. package/dist/client/tool-schema-loader.d.ts +0 -62
  594. package/dist/client/tool-schema-loader.d.ts.map +0 -1
  595. package/dist/client/tool-schema-loader.js +0 -232
  596. package/dist/client/tool-schema-loader.js.map +0 -1
  597. package/dist/client/types.d.ts +0 -327
  598. package/dist/client/types.d.ts.map +0 -1
  599. package/dist/client/types.js +0 -121
  600. package/dist/client/types.js.map +0 -1
  601. package/dist/commands/seed-config.d.ts +0 -9
  602. package/dist/commands/seed-config.d.ts.map +0 -1
  603. package/dist/commands/seed-config.js +0 -377
  604. package/dist/commands/seed-config.js.map +0 -1
  605. package/dist/commands/setup.d.ts +0 -11
  606. package/dist/commands/setup.d.ts.map +0 -1
  607. package/dist/commands/setup.js +0 -320
  608. package/dist/commands/setup.js.map +0 -1
  609. package/dist/lib/discussion-lock.d.ts +0 -42
  610. package/dist/lib/discussion-lock.d.ts.map +0 -1
  611. package/dist/lib/discussion-lock.js +0 -110
  612. package/dist/lib/discussion-lock.js.map +0 -1
  613. package/dist/mcp/signal-handler.d.ts +0 -82
  614. package/dist/mcp/signal-handler.d.ts.map +0 -1
  615. package/dist/mcp/signal-handler.js +0 -406
  616. package/dist/mcp/signal-handler.js.map +0 -1
  617. package/dist/mcp/tools/__tests__/discussion-forward.test.d.ts +0 -2
  618. package/dist/mcp/tools/__tests__/discussion-forward.test.d.ts.map +0 -1
  619. package/dist/mcp/tools/__tests__/discussion-forward.test.js +0 -218
  620. package/dist/mcp/tools/__tests__/discussion-forward.test.js.map +0 -1
  621. package/dist/mcp/tools/app-member.d.ts +0 -14
  622. package/dist/mcp/tools/app-member.d.ts.map +0 -1
  623. package/dist/mcp/tools/app-member.js +0 -195
  624. package/dist/mcp/tools/app-member.js.map +0 -1
  625. package/dist/mcp/tools/app-scaffold.d.ts +0 -14
  626. package/dist/mcp/tools/app-scaffold.d.ts.map +0 -1
  627. package/dist/mcp/tools/app-scaffold.js +0 -581
  628. package/dist/mcp/tools/app-scaffold.js.map +0 -1
  629. package/dist/mcp/tools/bot-config/constants.d.ts +0 -23
  630. package/dist/mcp/tools/bot-config/constants.d.ts.map +0 -1
  631. package/dist/mcp/tools/bot-config/constants.js +0 -94
  632. package/dist/mcp/tools/bot-config/constants.js.map +0 -1
  633. package/dist/mcp/tools/bot-config/core.d.ts +0 -253
  634. package/dist/mcp/tools/bot-config/core.d.ts.map +0 -1
  635. package/dist/mcp/tools/bot-config/core.js +0 -2456
  636. package/dist/mcp/tools/bot-config/core.js.map +0 -1
  637. package/dist/mcp/tools/bot-config/index.d.ts +0 -10
  638. package/dist/mcp/tools/bot-config/index.d.ts.map +0 -1
  639. package/dist/mcp/tools/bot-config/index.js +0 -59
  640. package/dist/mcp/tools/bot-config/index.js.map +0 -1
  641. package/dist/mcp/tools/bot-config/tools.d.ts +0 -7
  642. package/dist/mcp/tools/bot-config/tools.d.ts.map +0 -1
  643. package/dist/mcp/tools/bot-config/tools.js +0 -15
  644. package/dist/mcp/tools/bot-config/tools.js.map +0 -1
  645. package/dist/mcp/tools/bot-config/types.d.ts +0 -50
  646. package/dist/mcp/tools/bot-config/types.d.ts.map +0 -1
  647. package/dist/mcp/tools/bot-config/types.js +0 -6
  648. package/dist/mcp/tools/bot-config/types.js.map +0 -1
  649. package/dist/mcp/tools/bug-fixer-tools.d.ts +0 -45
  650. package/dist/mcp/tools/bug-fixer-tools.d.ts.map +0 -1
  651. package/dist/mcp/tools/bug-fixer-tools.js +0 -1096
  652. package/dist/mcp/tools/bug-fixer-tools.js.map +0 -1
  653. package/dist/mcp/tools/document.d.ts +0 -11
  654. package/dist/mcp/tools/document.d.ts.map +0 -1
  655. package/dist/mcp/tools/document.js +0 -741
  656. package/dist/mcp/tools/document.js.map +0 -1
  657. package/dist/mcp/tools/investigate.d.ts +0 -9
  658. package/dist/mcp/tools/investigate.d.ts.map +0 -1
  659. package/dist/mcp/tools/investigate.js +0 -254
  660. package/dist/mcp/tools/investigate.js.map +0 -1
  661. package/dist/mcp/utils/pagination.d.ts +0 -40
  662. package/dist/mcp/utils/pagination.d.ts.map +0 -1
  663. package/dist/mcp/utils/pagination.js +0 -55
  664. package/dist/mcp/utils/pagination.js.map +0 -1
  665. package/dist/modules/bug-reports/bug-config.d.ts +0 -25
  666. package/dist/modules/bug-reports/bug-config.d.ts.map +0 -1
  667. package/dist/modules/bug-reports/bug-config.js +0 -187
  668. package/dist/modules/bug-reports/bug-config.js.map +0 -1
  669. package/dist/modules/bug-reports/bug-monitor.d.ts +0 -108
  670. package/dist/modules/bug-reports/bug-monitor.d.ts.map +0 -1
  671. package/dist/modules/bug-reports/bug-monitor.js +0 -510
  672. package/dist/modules/bug-reports/bug-monitor.js.map +0 -1
  673. package/dist/modules/bug-reports/giuseppe-agent.d.ts +0 -58
  674. package/dist/modules/bug-reports/giuseppe-agent.d.ts.map +0 -1
  675. package/dist/modules/bug-reports/giuseppe-agent.js +0 -467
  676. package/dist/modules/bug-reports/giuseppe-agent.js.map +0 -1
  677. package/dist/modules/bug-reports/giuseppe-ai.d.ts +0 -83
  678. package/dist/modules/bug-reports/giuseppe-ai.d.ts.map +0 -1
  679. package/dist/modules/bug-reports/giuseppe-ai.js +0 -466
  680. package/dist/modules/bug-reports/giuseppe-ai.js.map +0 -1
  681. package/dist/modules/bug-reports/giuseppe-bot.d.ts +0 -110
  682. package/dist/modules/bug-reports/giuseppe-bot.d.ts.map +0 -1
  683. package/dist/modules/bug-reports/giuseppe-bot.js +0 -804
  684. package/dist/modules/bug-reports/giuseppe-bot.js.map +0 -1
  685. package/dist/modules/bug-reports/giuseppe-daemon.d.ts +0 -80
  686. package/dist/modules/bug-reports/giuseppe-daemon.d.ts.map +0 -1
  687. package/dist/modules/bug-reports/giuseppe-daemon.js +0 -617
  688. package/dist/modules/bug-reports/giuseppe-daemon.js.map +0 -1
  689. package/dist/modules/bug-reports/giuseppe-files.d.ts +0 -64
  690. package/dist/modules/bug-reports/giuseppe-files.d.ts.map +0 -1
  691. package/dist/modules/bug-reports/giuseppe-files.js +0 -375
  692. package/dist/modules/bug-reports/giuseppe-files.js.map +0 -1
  693. package/dist/modules/bug-reports/giuseppe-git.d.ts +0 -48
  694. package/dist/modules/bug-reports/giuseppe-git.d.ts.map +0 -1
  695. package/dist/modules/bug-reports/giuseppe-git.js +0 -298
  696. package/dist/modules/bug-reports/giuseppe-git.js.map +0 -1
  697. package/dist/modules/bug-reports/giuseppe-lsp.d.ts +0 -113
  698. package/dist/modules/bug-reports/giuseppe-lsp.d.ts.map +0 -1
  699. package/dist/modules/bug-reports/giuseppe-lsp.js +0 -485
  700. package/dist/modules/bug-reports/giuseppe-lsp.js.map +0 -1
  701. package/dist/modules/bug-reports/giuseppe-prompt.d.ts +0 -5
  702. package/dist/modules/bug-reports/giuseppe-prompt.d.ts.map +0 -1
  703. package/dist/modules/bug-reports/giuseppe-prompt.js +0 -94
  704. package/dist/modules/bug-reports/giuseppe-prompt.js.map +0 -1
  705. package/dist/modules/bug-reports/index.d.ts +0 -77
  706. package/dist/modules/bug-reports/index.d.ts.map +0 -1
  707. package/dist/modules/bug-reports/index.js +0 -215
  708. package/dist/modules/bug-reports/index.js.map +0 -1
  709. package/dist/modules/bug-reports/pending-classification-registry.d.ts +0 -28
  710. package/dist/modules/bug-reports/pending-classification-registry.d.ts.map +0 -1
  711. package/dist/modules/bug-reports/pending-classification-registry.js +0 -50
  712. package/dist/modules/bug-reports/pending-classification-registry.js.map +0 -1
  713. package/dist/modules/bug-reports/pending-fix-registry.d.ts +0 -30
  714. package/dist/modules/bug-reports/pending-fix-registry.d.ts.map +0 -1
  715. package/dist/modules/bug-reports/pending-fix-registry.js +0 -42
  716. package/dist/modules/bug-reports/pending-fix-registry.js.map +0 -1
  717. package/dist/modules/bug-reports/pending-registry.d.ts +0 -27
  718. package/dist/modules/bug-reports/pending-registry.d.ts.map +0 -1
  719. package/dist/modules/bug-reports/pending-registry.js +0 -49
  720. package/dist/modules/bug-reports/pending-registry.js.map +0 -1
  721. package/dist/modules/bug-reports/types.d.ts +0 -123
  722. package/dist/modules/bug-reports/types.d.ts.map +0 -1
  723. package/dist/modules/bug-reports/types.js +0 -9
  724. package/dist/modules/bug-reports/types.js.map +0 -1
  725. package/dist/plugins/bug-fixer/index.d.ts +0 -2
  726. package/dist/plugins/bug-fixer/index.d.ts.map +0 -1
  727. package/dist/plugins/bug-fixer/index.js +0 -18
  728. package/dist/plugins/bug-fixer/index.js.map +0 -1
  729. package/dist/plugins/bug-fixer/tools.d.ts +0 -45
  730. package/dist/plugins/bug-fixer/tools.d.ts.map +0 -1
  731. package/dist/plugins/bug-fixer/tools.js +0 -1096
  732. package/dist/plugins/bug-fixer/tools.js.map +0 -1
  733. package/dist/plugins/vipunen/__tests__/tools.test.d.ts +0 -10
  734. package/dist/plugins/vipunen/__tests__/tools.test.d.ts.map +0 -1
  735. package/dist/plugins/vipunen/__tests__/tools.test.js +0 -646
  736. package/dist/plugins/vipunen/__tests__/tools.test.js.map +0 -1
  737. package/dist/routes/agents.d.ts +0 -44
  738. package/dist/routes/agents.d.ts.map +0 -1
  739. package/dist/routes/agents.js +0 -311
  740. package/dist/routes/agents.js.map +0 -1
  741. package/dist/services/agent-credential-store.d.ts +0 -73
  742. package/dist/services/agent-credential-store.d.ts.map +0 -1
  743. package/dist/services/agent-credential-store.js +0 -212
  744. package/dist/services/agent-credential-store.js.map +0 -1
  745. package/dist/stdio-server.d.ts +0 -14
  746. package/dist/stdio-server.d.ts.map +0 -1
  747. package/dist/stdio-server.js +0 -101
  748. package/dist/stdio-server.js.map +0 -1
  749. package/dist/workspace/context.d.ts +0 -148
  750. package/dist/workspace/context.d.ts.map +0 -1
  751. package/dist/workspace/context.js +0 -339
  752. package/dist/workspace/context.js.map +0 -1
  753. package/dist/workspace/credentials.d.ts +0 -55
  754. package/dist/workspace/credentials.d.ts.map +0 -1
  755. package/dist/workspace/credentials.js +0 -239
  756. package/dist/workspace/credentials.js.map +0 -1
  757. package/dist/workspace/index.d.ts +0 -21
  758. package/dist/workspace/index.d.ts.map +0 -1
  759. package/dist/workspace/index.js +0 -45
  760. package/dist/workspace/index.js.map +0 -1
  761. package/dist/workspace/loader.d.ts +0 -27
  762. package/dist/workspace/loader.d.ts.map +0 -1
  763. package/dist/workspace/loader.js +0 -222
  764. package/dist/workspace/loader.js.map +0 -1
  765. package/dist/workspace/schema.d.ts +0 -37
  766. package/dist/workspace/schema.d.ts.map +0 -1
  767. package/dist/workspace/schema.js +0 -192
  768. package/dist/workspace/schema.js.map +0 -1
@@ -4,12 +4,17 @@
4
4
  *
5
5
  * Tools for managing Hailer discussions/chats:
6
6
  * - List user's discussions (READ)
7
- * - Fetch discussion messages with pagination (WRITE)
7
+ * - Fetch discussion messages, latest or older via beforeMessageId cursor (READ)
8
8
  * - Join/leave discussions (WRITE)
9
9
  * - Post messages to discussions (WRITE)
10
+ *
11
+ * get_activity_from_discussion is retired as a listed tool; its lookup logic
12
+ * lives on as the exported lookupActivityFromDiscussion helper (used by the
13
+ * central alias layer and by fetch_discussion_messages enrichment).
10
14
  */
11
15
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.discussionTools = exports.getActivityFromDiscussionTool = exports.inviteDiscussionMembersTool = exports.addDiscussionMessageTool = exports.leaveDiscussionTool = exports.joinDiscussionTool = exports.fetchPreviousDiscussionMessagesTool = exports.fetchDiscussionMessagesTool = exports.listMyDiscussionsTool = void 0;
16
+ exports.discussionTools = exports.inviteDiscussionMembersTool = exports.addDiscussionMessageTool = exports.leaveDiscussionTool = exports.joinDiscussionTool = exports.fetchDiscussionMessagesTool = exports.listMyDiscussionsTool = void 0;
17
+ exports.lookupActivityFromDiscussion = lookupActivityFromDiscussion;
13
18
  const zod_1 = require("zod");
14
19
  const tool_registry_1 = require("../tool-registry");
15
20
  const index_1 = require("../utils/index");
@@ -24,8 +29,9 @@ const logger = (0, index_1.createLogger)({ component: 'discussion-tools' });
24
29
  * Sanitize string to remove invalid Unicode characters
25
30
  */
26
31
  function sanitizeString(str) {
27
- if (!str)
32
+ if (!str) {
28
33
  return '';
34
+ }
29
35
  return str.replace(/[\ud800-\udfff]/g, '\ufffd');
30
36
  }
31
37
  /**
@@ -95,7 +101,7 @@ exports.listMyDiscussionsTool = {
95
101
  responseText += `āŒ You are not currently participating in any discussions.\n\n`;
96
102
  responseText += `šŸ’” **TIP**: Join activity discussions using the \`join_discussion\` tool.`;
97
103
  return {
98
- content: [{ type: "text", text: responseText }],
104
+ content: [{ type: 'text', text: responseText }],
99
105
  };
100
106
  }
101
107
  // Collect all linked activity IDs to fetch their names
@@ -160,14 +166,16 @@ exports.listMyDiscussionsTool = {
160
166
  other: 'ā“ Other Discussions'
161
167
  };
162
168
  for (const [type, typeDiscussions] of Object.entries(discussionsByType)) {
163
- if (typeDiscussions.length === 0)
169
+ if (typeDiscussions.length === 0) {
164
170
  continue;
171
+ }
165
172
  responseText += `${typeLabels[type]} (${typeDiscussions.length}):\n\n`;
166
173
  typeDiscussions.forEach((discussion, index) => {
167
174
  const unreadCount = unreadCounts[discussion._id] || 0;
168
175
  responseText += `${index + 1}. `;
169
- if (unreadCount > 0)
176
+ if (unreadCount > 0) {
170
177
  responseText += `šŸ”“ `;
178
+ }
171
179
  // For activity discussions, prefer the activity name over discussion.name
172
180
  let displayName = sanitizeString(discussion.name) || 'Untitled';
173
181
  if (discussion.linked_activity && activityNames[discussion.linked_activity]) {
@@ -216,19 +224,20 @@ exports.listMyDiscussionsTool = {
216
224
  return {
217
225
  content: [
218
226
  {
219
- type: "text",
227
+ type: 'text',
220
228
  text: responseText,
221
229
  },
222
230
  ],
223
231
  };
224
232
  }
225
233
  catch (error) {
226
- if (!request_logger_1.RequestLogger.getCurrent())
227
- logger.error("Failed to list discussions", error);
234
+ if (!request_logger_1.RequestLogger.getCurrent()) {
235
+ logger.error('Failed to list discussions', error);
236
+ }
228
237
  return {
229
238
  content: [
230
239
  {
231
- type: "text",
240
+ type: 'text',
232
241
  text: `āŒ Failed to list discussions: ${error instanceof Error ? error.message : String(error)}`,
233
242
  },
234
243
  ],
@@ -236,10 +245,335 @@ exports.listMyDiscussionsTool = {
236
245
  }
237
246
  },
238
247
  };
248
+ /**
249
+ * Reverse lookup: find the activity linked to a discussion.
250
+ *
251
+ * Replaces the retired get_activity_from_discussion tool - the central alias
252
+ * layer keeps the old tool name callable through this helper, and
253
+ * fetch_discussion_messages uses it for includeLinkedActivity enrichment.
254
+ *
255
+ * Returns null when the discussion is not found, has no linked activity, or
256
+ * the linked activity cannot be loaded. API errors propagate to the caller.
257
+ */
258
+ async function lookupActivityFromDiscussion(discussionId, context) {
259
+ const syncResponse = await context.hailer.request('v2.discussion.sync', [{ timestamp: 0 }]);
260
+ const discussions = syncResponse.discussions || [];
261
+ const targetDiscussion = discussions.find((disc) => disc._id === discussionId);
262
+ if (!targetDiscussion?.linked_activity) {
263
+ logger.debug('No linked activity for discussion', {
264
+ discussionId,
265
+ discussionFound: !!targetDiscussion
266
+ });
267
+ return null;
268
+ }
269
+ const activityId = targetDiscussion.linked_activity;
270
+ const activity = await context.hailer.fetchActivityById(activityId);
271
+ if (!activity) {
272
+ logger.debug('Linked activity could not be loaded', { discussionId, activityId });
273
+ return null;
274
+ }
275
+ return {
276
+ activityId: activity._id,
277
+ name: activity.name || 'Untitled',
278
+ workflowId: activity.workflowId || null
279
+ };
280
+ }
281
+ /**
282
+ * Best-effort linked-activity lookup for response enrichment - never throws
283
+ */
284
+ async function safeLinkedActivityLookup(discussionId, context) {
285
+ try {
286
+ return await lookupActivityFromDiscussion(discussionId, context);
287
+ }
288
+ catch (error) {
289
+ logger.debug('Linked activity enrichment failed', {
290
+ discussionId,
291
+ error: error instanceof Error ? error.message : String(error)
292
+ });
293
+ return null;
294
+ }
295
+ }
239
296
  // ============================================================================
240
297
  // TOOL 2: FETCH DISCUSSION MESSAGES
241
298
  // ============================================================================
242
- const fetchDiscussionMessagesDescription = `Read latest messages from any Hailer discussion/chat (up to 50 messages - API limit)`;
299
+ /**
300
+ * Extract a forwarded message (and any nested forwards, max depth 10) into optimized form
301
+ */
302
+ function extractForwardedMessage(context, fwd, depth = 0) {
303
+ if (depth > 10) {
304
+ return null;
305
+ }
306
+ const fwdUserInfo = (0, workspace_cache_1.getUserById)(context.workspaceCache, fwd.uid);
307
+ let fwdUsername = `User ${fwd.uid}`;
308
+ if (fwdUserInfo) {
309
+ const fullName = `${fwdUserInfo.firstname || ''} ${fwdUserInfo.lastname || ''}`.trim();
310
+ fwdUsername = fullName || fwdUserInfo.fullName || `User ${fwd.uid}`;
311
+ }
312
+ const extracted = {
313
+ _id: fwd._id,
314
+ uid: fwd.uid,
315
+ username: fwdUsername,
316
+ created: new Date(fwd.created).toLocaleString(),
317
+ msg: fwd.msg || '',
318
+ type: fwd.type
319
+ };
320
+ if (fwd.forwardMessageId) {
321
+ extracted.forwardMessageId = fwd.forwardMessageId;
322
+ }
323
+ const nested = fwd.forwardMessage ? extractForwardedMessage(context, fwd.forwardMessage, depth + 1) : null;
324
+ if (nested) {
325
+ extracted.forwardMessage = nested;
326
+ }
327
+ return extracted;
328
+ }
329
+ /**
330
+ * Convert a raw discussion message into optimized form - strips base64 payloads, resolves usernames
331
+ */
332
+ function optimizeMessage(context, msg) {
333
+ let cleanMsg = msg.msg || '';
334
+ if (cleanMsg) {
335
+ cleanMsg = cleanMsg.replace(/data:[^;]+;base64,[A-Za-z0-9+/=]+/g, '[FILE_REMOVED]');
336
+ cleanMsg = cleanMsg.replace(/!\[.*?\]\(data:[^)]+\)/g, '[IMAGE_REMOVED]');
337
+ }
338
+ const userInfo = (0, workspace_cache_1.getUserById)(context.workspaceCache, msg.uid);
339
+ let username = `User ${msg.uid}`;
340
+ if (userInfo) {
341
+ const fullName = `${userInfo.firstname || ''} ${userInfo.lastname || ''}`.trim();
342
+ username = fullName || userInfo.fullName || `User ${msg.uid}`;
343
+ }
344
+ const optimizedMsg = {
345
+ _id: msg._id,
346
+ uid: msg.uid,
347
+ username: username,
348
+ created: new Date(msg.created).toLocaleString(),
349
+ type: msg.type,
350
+ msg: cleanMsg
351
+ };
352
+ const isSystemWithoutText = msg.type !== 'user' && !msg.msg;
353
+ if (isSystemWithoutText) {
354
+ optimizedMsg.systemDescription = formatSystemMessage(msg);
355
+ }
356
+ if (isSystemWithoutText && msg.meta && Object.keys(msg.meta).length > 0) {
357
+ optimizedMsg.meta = msg.meta;
358
+ }
359
+ if (msg.replyTo) {
360
+ optimizedMsg.replyTo = msg.replyTo;
361
+ }
362
+ if (msg.forwardMessageId) {
363
+ optimizedMsg.forwardMessageId = msg.forwardMessageId;
364
+ }
365
+ const forwarded = msg.forwardMessage ? extractForwardedMessage(context, msg.forwardMessage, 0) : null;
366
+ if (forwarded) {
367
+ optimizedMsg.forwardMessage = forwarded;
368
+ }
369
+ return optimizedMsg;
370
+ }
371
+ /**
372
+ * Latest-messages branch of fetch_discussion_messages (no beforeMessageId)
373
+ */
374
+ async function fetchLatestMessages(args, context) {
375
+ const limit = args.limit || 50;
376
+ let discussionId = args.discussionId;
377
+ logger.debug('Fetching discussion messages', {
378
+ discussionId: discussionId,
379
+ limit: limit,
380
+ includeLinkedActivity: !!args.includeLinkedActivity,
381
+ apiKey: context.apiKey.substring(0, 8) + '...'
382
+ });
383
+ try {
384
+ // Auto-detect: if this is an activity ID, get its discussion ID
385
+ // Try fetching as discussion first, if it fails, check if it's an activity
386
+ let result;
387
+ try {
388
+ result = await context.hailer.fetchDiscussionMessages(discussionId, limit);
389
+ }
390
+ catch (firstError) {
391
+ // If first attempt fails, try loading as activity to get discussion ID
392
+ logger.debug('First fetch failed, checking if this is an activity ID', {
393
+ providedId: discussionId,
394
+ error: firstError?.msg || firstError?.message
395
+ });
396
+ const activity = await context.hailer.fetchActivityById(discussionId).catch(() => null);
397
+ if (!activity?.discussion) {
398
+ // Not an activity or no discussion linked, rethrow original error
399
+ throw firstError;
400
+ }
401
+ logger.debug('Auto-converted activity ID to discussion ID', {
402
+ activityId: discussionId,
403
+ discussionId: activity.discussion,
404
+ activityName: activity.name
405
+ });
406
+ discussionId = activity.discussion;
407
+ result = await context.hailer.fetchDiscussionMessages(discussionId, limit);
408
+ }
409
+ const messages = result.messages || [];
410
+ const messageCount = messages.length;
411
+ const userMessages = messages.filter((msg) => msg.type === 'user');
412
+ const recentMessage = messages[0];
413
+ const optimizedMessages = messages.map((msg) => optimizeMessage(context, msg));
414
+ const optimizedResult = {
415
+ oldestLoaded: result.oldestLoaded,
416
+ newestLoaded: result.newestLoaded,
417
+ messages: optimizedMessages
418
+ };
419
+ if (args.includeLinkedActivity) {
420
+ optimizedResult.linkedActivity = await safeLinkedActivityLookup(discussionId, context);
421
+ }
422
+ let responseText = `šŸ“¬ Successfully fetched ${messageCount} messages from discussion ${args.discussionId}`;
423
+ if (result.truncated) {
424
+ responseText += ` (limited from ${result.originalCount} available messages)`;
425
+ }
426
+ const recentSummary = recentMessage
427
+ ? `"${recentMessage.msg || 'System event'}" at ${new Date(recentMessage.created).toLocaleString()}`
428
+ : 'No messages';
429
+ responseText += `\n\nšŸ“Š Summary:`;
430
+ responseText += `\n- ${userMessages.length} user messages`;
431
+ responseText += `\n- ${messages.length - userMessages.length} system messages (joins, activity creation, etc.)`;
432
+ responseText += `\n- Most recent: ${recentSummary}`;
433
+ responseText += `\n- Requested limit: ${limit} messages (API max: 50)`;
434
+ if (result.truncated) {
435
+ responseText += `\n- āš ļø More messages available: ${result.originalCount - limit} additional messages not shown`;
436
+ }
437
+ if (optimizedMessages.length > 0) {
438
+ const oldestMessage = optimizedMessages[optimizedMessages.length - 1];
439
+ responseText += `\n\nšŸ”„ **PAGINATION**: To get older messages, call fetch_discussion_messages again with:`;
440
+ responseText += `\n- discussionId: "${discussionId}"`;
441
+ responseText += `\n- beforeMessageId: "${oldestMessage._id}"`;
442
+ responseText += `\n- batches: 1-10 (each batch = ~50 messages)`;
443
+ }
444
+ responseText += `\n\nšŸ’” Use this to understand conversation context, get project updates, or analyze team communications!`;
445
+ responseText += `\n\nOptimized conversation data (essential fields only):\n${JSON.stringify(optimizedResult, null, 2)}`;
446
+ return {
447
+ content: [
448
+ {
449
+ type: 'text',
450
+ text: responseText,
451
+ },
452
+ ],
453
+ };
454
+ }
455
+ catch (error) {
456
+ if (!request_logger_1.RequestLogger.getCurrent()) {
457
+ logger.error('Error fetching discussion messages', error);
458
+ }
459
+ const errorMessage = error instanceof Error
460
+ ? error.message
461
+ : (typeof error === 'object' && error !== null)
462
+ ? JSON.stringify(error, null, 2)
463
+ : String(error);
464
+ const isPermissionError = errorMessage.toLowerCase().includes('permission') ||
465
+ errorMessage.toLowerCase().includes('access') ||
466
+ errorMessage.toLowerCase().includes('forbidden') ||
467
+ errorMessage.toLowerCase().includes('unauthorized');
468
+ let helpText = `āŒ Error fetching discussion messages: ${errorMessage}\n\n`;
469
+ if (isPermissionError) {
470
+ helpText += `šŸ”’ **PERMISSION REQUIRED**: You need to join this discussion before you can read messages.\n\n` +
471
+ `šŸ’” **Solution**: Use the join_discussion tool first:\n` +
472
+ ` join_discussion(discussionId: "${args.discussionId}")\n\n`;
473
+ }
474
+ helpText += `šŸ’” Tips:\n` +
475
+ `- Make sure the discussion ID is correct (24-character string)\n` +
476
+ `- You must be a member/follower of the discussion to read messages\n` +
477
+ `- Some discussions may be private or require specific permissions\n\n` +
478
+ `Example discussion ID: '683ef53087e3d8329abaa3ad'`;
479
+ return {
480
+ content: [
481
+ {
482
+ type: 'text',
483
+ text: helpText,
484
+ },
485
+ ],
486
+ };
487
+ }
488
+ }
489
+ /**
490
+ * Older-messages branch of fetch_discussion_messages (beforeMessageId cursor)
491
+ */
492
+ async function fetchPreviousMessages(args, context) {
493
+ const batches = args.batches || 1;
494
+ logger.debug('Fetching previous discussion messages', {
495
+ discussionId: args.discussionId,
496
+ beforeMessageId: args.beforeMessageId,
497
+ batches: batches,
498
+ includeLinkedActivity: !!args.includeLinkedActivity,
499
+ apiKey: context.apiKey.substring(0, 8) + '...'
500
+ });
501
+ try {
502
+ const result = await context.hailer.fetchPreviousDiscussionMessages(args.beforeMessageId, batches);
503
+ const messages = result.messages || [];
504
+ const messageCount = messages.length;
505
+ const userMessages = messages.filter((msg) => msg.type === 'user');
506
+ const oldestMessage = messages.length > 0 ? messages[messages.length - 1] : null;
507
+ const optimizedMessages = messages.map((msg) => optimizeMessage(context, msg));
508
+ const optimizedResult = {
509
+ messages: optimizedMessages,
510
+ totalFetched: result.totalFetched,
511
+ batchesCompleted: result.batchesCompleted,
512
+ oldestMessageId: result.oldestMessageId,
513
+ hasMore: result.hasMore
514
+ };
515
+ if (args.includeLinkedActivity) {
516
+ optimizedResult.linkedActivity = await safeLinkedActivityLookup(args.discussionId, context);
517
+ }
518
+ let responseText = `šŸ“¬ Successfully fetched ${messageCount} previous messages`;
519
+ responseText += `\n\nšŸ“Š Summary:`;
520
+ responseText += `\n- ${userMessages.length} user messages`;
521
+ responseText += `\n- ${messages.length - userMessages.length} system messages`;
522
+ responseText += `\n- Batches completed: ${result.batchesCompleted}/${batches}`;
523
+ responseText += `\n- Total messages fetched: ${result.totalFetched}`;
524
+ if (oldestMessage) {
525
+ const oldestSummary = `"${oldestMessage.msg || 'System event'}" at ${new Date(oldestMessage.created).toLocaleString()}`;
526
+ responseText += `\n- Oldest message: ${oldestSummary}`;
527
+ }
528
+ if (result.hasMore && optimizedMessages.length > 0) {
529
+ const oldestOptimizedMessage = optimizedMessages[optimizedMessages.length - 1];
530
+ responseText += `\n\nšŸ”„ **CONTINUE PAGINATION**: To get even older messages, call fetch_discussion_messages with:`;
531
+ responseText += `\n- discussionId: "${args.discussionId}"`;
532
+ responseText += `\n- beforeMessageId: "${oldestOptimizedMessage._id}"`;
533
+ responseText += `\n- batches: 1-10 (for more history)`;
534
+ }
535
+ if (!result.hasMore) {
536
+ responseText += `\n\nāœ… **END OF HISTORY**: No more messages available in this discussion.`;
537
+ }
538
+ responseText += `\n\nšŸ’” Use this to explore conversation history and understand context!`;
539
+ responseText += `\n\nOptimized conversation data (essential fields only):\n${JSON.stringify(optimizedResult, null, 2)}`;
540
+ return {
541
+ content: [
542
+ {
543
+ type: 'text',
544
+ text: responseText,
545
+ },
546
+ ],
547
+ };
548
+ }
549
+ catch (error) {
550
+ if (!request_logger_1.RequestLogger.getCurrent()) {
551
+ logger.error('Error fetching previous discussion messages', error);
552
+ }
553
+ const errorMessage = error instanceof Error ? error.message : String(error);
554
+ const helpText = `āŒ Error fetching previous discussion messages: ${errorMessage}\n\n` +
555
+ `šŸ’” **IMPORTANT**: beforeMessageId must be a MESSAGE ID, not a DISCUSSION ID!\n\n` +
556
+ `**How to get the correct beforeMessageId:**\n` +
557
+ `1. First call fetch_discussion_messages with only your discussionId\n` +
558
+ `2. Look at the last message in the results\n` +
559
+ `3. Use that message's '_id' field as beforeMessageId\n\n` +
560
+ `**Example:**\n` +
561
+ `- āŒ Wrong: "682dcfa9d36a4907a88bb279" (this is a discussion ID)\n` +
562
+ `- āœ… Correct: "68e5c1903b104307efdebce9" (this is a message ID)\n\n` +
563
+ `Message IDs are usually different from discussion IDs!`;
564
+ return {
565
+ content: [
566
+ {
567
+ type: 'text',
568
+ text: helpText,
569
+ },
570
+ ],
571
+ };
572
+ }
573
+ }
574
+ const fetchDiscussionMessagesDescription = 'Read messages from any Hailer discussion/chat (up to 50 per batch - API limit). ' +
575
+ "Latest messages by default; pass beforeMessageId (a message '_id' from a previous result) to page back through older history. " +
576
+ 'Optionally set includeLinkedActivity to also return the activity linked to the discussion';
243
577
  exports.fetchDiscussionMessagesTool = {
244
578
  name: 'fetch_discussion_messages',
245
579
  group: tool_registry_1.ToolGroup.READ,
@@ -247,337 +581,47 @@ exports.fetchDiscussionMessagesTool = {
247
581
  schema: zod_1.z.object({
248
582
  discussionId: zod_1.z
249
583
  .string()
250
- .min(24, "Discussion ID must be at least 24 characters")
251
- .describe("The discussion ID to read messages from. You can get this from activity results (look for 'discussion' field) or from URLs like https://app.hailer.com/#/discussions/DISCUSSION_ID"),
584
+ .min(24, 'Discussion ID must be at least 24 characters')
585
+ .describe("The discussion ID to read messages from. You can get this from activity results (look for 'discussion' field) " +
586
+ 'or from URLs like https://app.hailer.com/#/discussions/DISCUSSION_ID'),
252
587
  limit: zod_1.z
253
588
  .number()
254
589
  .int()
255
- .min(1, "Limit must be at least 1")
256
- .max(50, "Limit cannot exceed 50 messages (API maximum)")
590
+ .min(1, 'Limit must be at least 1')
591
+ .max(50, 'Limit cannot exceed 50 messages (API maximum)')
257
592
  .default(50)
258
593
  .optional()
259
- .describe("Number of messages to fetch (default: 50, max: 50 due to API limit). Use fetch_previous_discussion_messages for older messages")
260
- }),
261
- async execute(args, context) {
262
- const limit = args.limit || 50;
263
- let discussionId = args.discussionId;
264
- logger.debug('Fetching discussion messages', {
265
- discussionId: discussionId,
266
- limit: limit,
267
- apiKey: context.apiKey.substring(0, 8) + '...'
268
- });
269
- try {
270
- // Auto-detect: if this is an activity ID, get its discussion ID
271
- // Try fetching as discussion first, if it fails, check if it's an activity
272
- let result;
273
- try {
274
- result = await context.hailer.fetchDiscussionMessages(discussionId, limit);
275
- }
276
- catch (firstError) {
277
- // If first attempt fails, try loading as activity to get discussion ID
278
- logger.debug('First fetch failed, checking if this is an activity ID', {
279
- providedId: discussionId,
280
- error: firstError?.msg || firstError?.message
281
- });
282
- try {
283
- const activity = await context.hailer.fetchActivityById(discussionId);
284
- if (activity?.discussion) {
285
- logger.debug('Auto-converted activity ID to discussion ID', {
286
- activityId: discussionId,
287
- discussionId: activity.discussion,
288
- activityName: activity.name
289
- });
290
- discussionId = activity.discussion;
291
- result = await context.hailer.fetchDiscussionMessages(discussionId, limit);
292
- }
293
- else {
294
- // Not an activity or no discussion linked, rethrow original error
295
- throw firstError;
296
- }
297
- }
298
- catch (activityError) {
299
- // Activity lookup failed too, rethrow original error
300
- throw firstError;
301
- }
302
- }
303
- const messages = result.messages || [];
304
- const messageCount = messages.length;
305
- const userMessages = messages.filter((m) => m.type === "user");
306
- const recentMessage = messages[0];
307
- function extractForwardedMessage(fwd, depth = 0) {
308
- if (depth > 10)
309
- return null;
310
- const fwdUserInfo = (0, workspace_cache_1.getUserById)(context.workspaceCache, fwd.uid);
311
- let fwdUsername = `User ${fwd.uid}`;
312
- if (fwdUserInfo) {
313
- const fullName = `${fwdUserInfo.firstname || ''} ${fwdUserInfo.lastname || ''}`.trim();
314
- fwdUsername = fullName || fwdUserInfo.fullName || `User ${fwd.uid}`;
315
- }
316
- const extracted = {
317
- _id: fwd._id,
318
- uid: fwd.uid,
319
- username: fwdUsername,
320
- created: new Date(fwd.created).toLocaleString(),
321
- msg: fwd.msg || '',
322
- type: fwd.type
323
- };
324
- if (fwd.forwardMessageId)
325
- extracted.forwardMessageId = fwd.forwardMessageId;
326
- if (fwd.forwardMessage) {
327
- const nested = extractForwardedMessage(fwd.forwardMessage, depth + 1);
328
- if (nested)
329
- extracted.forwardMessage = nested;
330
- }
331
- return extracted;
332
- }
333
- const optimizedMessages = messages.map((msg) => {
334
- let cleanMsg = msg.msg || '';
335
- if (cleanMsg) {
336
- cleanMsg = cleanMsg.replace(/data:[^;]+;base64,[A-Za-z0-9+/=]+/g, '[FILE_REMOVED]');
337
- cleanMsg = cleanMsg.replace(/!\[.*?\]\(data:[^)]+\)/g, '[IMAGE_REMOVED]');
338
- }
339
- const userInfo = (0, workspace_cache_1.getUserById)(context.workspaceCache, msg.uid);
340
- let username = `User ${msg.uid}`;
341
- if (userInfo) {
342
- const fullName = `${userInfo.firstname || ''} ${userInfo.lastname || ''}`.trim();
343
- username = fullName || userInfo.fullName || `User ${msg.uid}`;
344
- }
345
- const optimizedMsg = {
346
- _id: msg._id,
347
- uid: msg.uid,
348
- username: username,
349
- created: new Date(msg.created).toLocaleString(),
350
- type: msg.type,
351
- msg: cleanMsg
352
- };
353
- if (msg.type !== 'user' && !msg.msg) {
354
- optimizedMsg.systemDescription = formatSystemMessage(msg);
355
- if (msg.meta && Object.keys(msg.meta).length > 0) {
356
- optimizedMsg.meta = msg.meta;
357
- }
358
- }
359
- if (msg.replyTo) {
360
- optimizedMsg.replyTo = msg.replyTo;
361
- }
362
- if (msg.forwardMessageId) {
363
- optimizedMsg.forwardMessageId = msg.forwardMessageId;
364
- }
365
- if (msg.forwardMessage) {
366
- const forwarded = extractForwardedMessage(msg.forwardMessage, 0);
367
- if (forwarded)
368
- optimizedMsg.forwardMessage = forwarded;
369
- }
370
- return optimizedMsg;
371
- });
372
- const optimizedResult = {
373
- oldestLoaded: result.oldestLoaded,
374
- newestLoaded: result.newestLoaded,
375
- messages: optimizedMessages
376
- };
377
- let responseText = `šŸ“¬ Successfully fetched ${messageCount} messages from discussion ${args.discussionId}`;
378
- if (result.truncated) {
379
- responseText += ` (limited from ${result.originalCount} available messages)`;
380
- }
381
- responseText += `\n\nšŸ“Š Summary:\n- ${userMessages.length} user messages\n- ${messages.length - userMessages.length} system messages (joins, activity creation, etc.)\n- Most recent: ${recentMessage ? `"${recentMessage.msg || "System event"}" at ${new Date(recentMessage.created).toLocaleString()}` : "No messages"}`;
382
- responseText += `\n- Requested limit: ${limit} messages (API max: 50)`;
383
- if (result.truncated) {
384
- responseText += `\n- āš ļø More messages available: ${result.originalCount - limit} additional messages not shown`;
385
- }
386
- if (optimizedMessages.length > 0) {
387
- const oldestMessage = optimizedMessages[optimizedMessages.length - 1];
388
- responseText += `\n\nšŸ”„ **PAGINATION**: To get older messages, use fetch_previous_discussion_messages with:`;
389
- responseText += `\n- oldestMessageId: "${oldestMessage._id}"`;
390
- responseText += `\n- batches: 1-10 (each batch = ~50 messages)`;
391
- }
392
- responseText += `\n\nšŸ’” Use this to understand conversation context, get project updates, or analyze team communications!\n\nOptimized conversation data (essential fields only):\n${JSON.stringify(optimizedResult, null, 2)}`;
393
- return {
394
- content: [
395
- {
396
- type: "text",
397
- text: responseText,
398
- },
399
- ],
400
- };
401
- }
402
- catch (error) {
403
- if (!request_logger_1.RequestLogger.getCurrent())
404
- logger.error("Error fetching discussion messages", error);
405
- const errorMessage = error instanceof Error
406
- ? error.message
407
- : (typeof error === 'object' && error !== null)
408
- ? JSON.stringify(error, null, 2)
409
- : String(error);
410
- const isPermissionError = errorMessage.toLowerCase().includes('permission') ||
411
- errorMessage.toLowerCase().includes('access') ||
412
- errorMessage.toLowerCase().includes('forbidden') ||
413
- errorMessage.toLowerCase().includes('unauthorized');
414
- let helpText = `āŒ Error fetching discussion messages: ${errorMessage}\n\n`;
415
- if (isPermissionError) {
416
- helpText += `šŸ”’ **PERMISSION REQUIRED**: You need to join this discussion before you can read messages.\n\n` +
417
- `šŸ’” **Solution**: Use the join_discussion tool first:\n` +
418
- ` join_discussion(discussionId: "${args.discussionId}")\n\n`;
419
- }
420
- helpText += `šŸ’” Tips:\n` +
421
- `- Make sure the discussion ID is correct (24-character string)\n` +
422
- `- You must be a member/follower of the discussion to read messages\n` +
423
- `- Some discussions may be private or require specific permissions\n\n` +
424
- `Example discussion ID: '683ef53087e3d8329abaa3ad'`;
425
- return {
426
- content: [
427
- {
428
- type: "text",
429
- text: helpText,
430
- },
431
- ],
432
- };
433
- }
434
- },
435
- };
436
- // ============================================================================
437
- // TOOL 3: FETCH PREVIOUS DISCUSSION MESSAGES
438
- // ============================================================================
439
- const fetchPreviousDiscussionMessagesDescription = `Fetch older messages from a discussion using pagination - requires a message ID from previous results to continue from`;
440
- exports.fetchPreviousDiscussionMessagesTool = {
441
- name: 'fetch_previous_discussion_messages',
442
- group: tool_registry_1.ToolGroup.READ,
443
- description: fetchPreviousDiscussionMessagesDescription,
444
- schema: zod_1.z.object({
445
- oldestMessageId: zod_1.z
594
+ .describe('Number of messages to fetch (default: 50, max: 50 due to API limit). Use beforeMessageId for older messages'),
595
+ beforeMessageId: zod_1.z
446
596
  .string()
447
- .min(24, "Message ID must be at least 24 characters")
448
- .describe("The ID of the oldest message from your previous fetch - use this to continue pagination. Get this from the '_id' field of the last message in previous results"),
597
+ .min(24, 'Message ID must be at least 24 characters')
598
+ .optional()
599
+ .describe("Pagination cursor: the '_id' of the oldest message from a previous fetch (a MESSAGE ID, not a discussion ID). " +
600
+ 'When set, fetches messages older than this message'),
449
601
  batches: zod_1.z
450
602
  .number()
451
603
  .int()
452
- .min(1, "Batches must be at least 1")
453
- .max(10, "Cannot fetch more than 10 batches at once")
604
+ .min(1, 'Batches must be at least 1')
605
+ .max(10, 'Cannot fetch more than 10 batches at once')
454
606
  .default(1)
455
607
  .optional()
456
- .describe("Number of previous message batches to fetch (default: 1, max: 10). Each batch contains up to 50 messages. Use higher values to get more history in one call")
608
+ .describe('Number of older message batches to fetch (default: 1, max: 10). Each batch contains up to 50 messages. ' +
609
+ 'Only used together with beforeMessageId'),
610
+ includeLinkedActivity: zod_1.z
611
+ .boolean()
612
+ .optional()
613
+ .describe('Set true to include the activity linked to this discussion ({ activityId, name, workflowId } or null). ' +
614
+ 'Costs an extra API call (default: false)')
457
615
  }),
458
616
  async execute(args, context) {
459
- const batches = args.batches || 1;
460
- logger.debug('Fetching previous discussion messages', {
461
- oldestMessageId: args.oldestMessageId,
462
- batches: batches,
463
- apiKey: context.apiKey.substring(0, 8) + '...'
464
- });
465
- try {
466
- const result = await context.hailer.fetchPreviousDiscussionMessages(args.oldestMessageId, batches);
467
- const messages = result.messages || [];
468
- const messageCount = messages.length;
469
- const userMessages = messages.filter((m) => m.type === "user");
470
- const oldestMessage = messages.length > 0 ? messages[messages.length - 1] : null;
471
- function extractForwardedMessage(fwd, depth = 0) {
472
- if (depth > 10)
473
- return null;
474
- const fwdUserInfo = (0, workspace_cache_1.getUserById)(context.workspaceCache, fwd.uid);
475
- let fwdUsername = `User ${fwd.uid}`;
476
- if (fwdUserInfo) {
477
- const fullName = `${fwdUserInfo.firstname || ''} ${fwdUserInfo.lastname || ''}`.trim();
478
- fwdUsername = fullName || fwdUserInfo.fullName || `User ${fwd.uid}`;
479
- }
480
- const extracted = {
481
- _id: fwd._id,
482
- uid: fwd.uid,
483
- username: fwdUsername,
484
- created: new Date(fwd.created).toLocaleString(),
485
- msg: fwd.msg || '',
486
- type: fwd.type
487
- };
488
- if (fwd.forwardMessageId)
489
- extracted.forwardMessageId = fwd.forwardMessageId;
490
- if (fwd.forwardMessage) {
491
- const nested = extractForwardedMessage(fwd.forwardMessage, depth + 1);
492
- if (nested)
493
- extracted.forwardMessage = nested;
494
- }
495
- return extracted;
496
- }
497
- const optimizedMessages = messages.map((msg) => {
498
- let cleanMsg = msg.msg || '';
499
- if (cleanMsg) {
500
- cleanMsg = cleanMsg.replace(/data:[^;]+;base64,[A-Za-z0-9+/=]+/g, '[FILE_REMOVED]');
501
- cleanMsg = cleanMsg.replace(/!\[.*?\]\(data:[^)]+\)/g, '[IMAGE_REMOVED]');
502
- }
503
- const userInfo = (0, workspace_cache_1.getUserById)(context.workspaceCache, msg.uid);
504
- let username = `User ${msg.uid}`;
505
- if (userInfo) {
506
- const fullName = `${userInfo.firstname || ''} ${userInfo.lastname || ''}`.trim();
507
- username = fullName || userInfo.fullName || `User ${msg.uid}`;
508
- }
509
- const optimizedMsg = {
510
- _id: msg._id,
511
- uid: msg.uid,
512
- username: username,
513
- created: new Date(msg.created).toLocaleString(),
514
- type: msg.type || 'user',
515
- msg: cleanMsg
516
- };
517
- if (msg.replyTo) {
518
- optimizedMsg.replyTo = msg.replyTo;
519
- }
520
- if (msg.forwardMessageId) {
521
- optimizedMsg.forwardMessageId = msg.forwardMessageId;
522
- }
523
- if (msg.forwardMessage) {
524
- const forwarded = extractForwardedMessage(msg.forwardMessage, 0);
525
- if (forwarded)
526
- optimizedMsg.forwardMessage = forwarded;
527
- }
528
- return optimizedMsg;
529
- });
530
- const optimizedResult = {
531
- messages: optimizedMessages,
532
- totalFetched: result.totalFetched,
533
- batchesCompleted: result.batchesCompleted,
534
- oldestMessageId: result.oldestMessageId,
535
- hasMore: result.hasMore
536
- };
537
- let responseText = `šŸ“¬ Successfully fetched ${messageCount} previous messages`;
538
- responseText += `\n\nšŸ“Š Summary:`;
539
- responseText += `\n- ${userMessages.length} user messages`;
540
- responseText += `\n- ${messages.length - userMessages.length} system messages`;
541
- responseText += `\n- Batches completed: ${result.batchesCompleted}/${batches}`;
542
- responseText += `\n- Total messages fetched: ${result.totalFetched}`;
543
- if (oldestMessage) {
544
- responseText += `\n- Oldest message: "${oldestMessage.msg || 'System event'}" at ${new Date(oldestMessage.created).toLocaleString()}`;
545
- }
546
- if (result.hasMore && optimizedMessages.length > 0) {
547
- const oldestOptimizedMessage = optimizedMessages[optimizedMessages.length - 1];
548
- responseText += `\n\nšŸ”„ **CONTINUE PAGINATION**: To get even older messages:`;
549
- responseText += `\n- oldestMessageId: "${oldestOptimizedMessage._id}"`;
550
- responseText += `\n- batches: 1-10 (for more history)`;
551
- }
552
- else if (!result.hasMore) {
553
- responseText += `\n\nāœ… **END OF HISTORY**: No more messages available in this discussion.`;
554
- }
555
- responseText += `\n\nšŸ’” Use this to explore conversation history and understand context!\n\nOptimized conversation data (essential fields only):\n${JSON.stringify(optimizedResult, null, 2)}`;
556
- return {
557
- content: [
558
- {
559
- type: "text",
560
- text: responseText,
561
- },
562
- ],
563
- };
564
- }
565
- catch (error) {
566
- if (!request_logger_1.RequestLogger.getCurrent())
567
- logger.error("Error fetching previous discussion messages", error);
568
- return {
569
- content: [
570
- {
571
- type: "text",
572
- text: `āŒ Error fetching previous discussion messages: ${error instanceof Error ? error.message : String(error)}\n\nšŸ’” **IMPORTANT**: Make sure you're using a MESSAGE ID, not a DISCUSSION ID!\n\n**How to get the correct oldestMessageId:**\n1. First call fetch_discussion_messages with your discussionId\n2. Look at the last message in the results\n3. Use that message's '_id' field as oldestMessageId\n\n**Example:**\n- āŒ Wrong: "682dcfa9d36a4907a88bb279" (this is a discussion ID)\n- āœ… Correct: "68e5c1903b104307efdebce9" (this is a message ID)\n\nMessage IDs are usually different from discussion IDs!`,
573
- },
574
- ],
575
- };
617
+ if (args.beforeMessageId) {
618
+ return fetchPreviousMessages(args, context);
576
619
  }
620
+ return fetchLatestMessages(args, context);
577
621
  },
578
622
  };
579
623
  // ============================================================================
580
- // TOOL 4: JOIN DISCUSSION
624
+ // TOOL 3: JOIN DISCUSSION
581
625
  // ============================================================================
582
626
  const joinDiscussionDescription = `<purpose>Bot joins a discussion and optionally invites ONE user</purpose>
583
627
  <when-to-use>
@@ -599,30 +643,30 @@ exports.joinDiscussionTool = {
599
643
  schema: zod_1.z.object({
600
644
  activityId: zod_1.z
601
645
  .string()
602
- .min(24, "Activity ID must be at least 24 characters")
646
+ .min(24, 'Activity ID must be at least 24 characters')
603
647
  .optional()
604
- .describe("Activity ID to join its discussion (preferred method for activity discussions)"),
648
+ .describe('Activity ID to join its discussion (preferred method for activity discussions)'),
605
649
  discussionId: zod_1.z
606
650
  .string()
607
- .min(24, "Discussion ID must be at least 24 characters")
651
+ .min(24, 'Discussion ID must be at least 24 characters')
608
652
  .optional()
609
- .describe("Discussion ID to join directly (use this for non-activity discussions)"),
653
+ .describe('Discussion ID to join directly (use this for non-activity discussions)'),
610
654
  inviteUserId: zod_1.z
611
655
  .string()
612
- .min(24, "User ID must be at least 24 characters")
656
+ .min(24, 'User ID must be at least 24 characters')
613
657
  .optional()
614
- .describe("User ID to invite. Get from incoming message user_id attribute when user asks to be invited."),
658
+ .describe('User ID to invite. Get from incoming message user_id attribute when user asks to be invited.'),
615
659
  welcomeReason: zod_1.z
616
660
  .string()
617
661
  .optional()
618
- .describe("Context/reason for the invite - posted as welcome message in the discussion."),
662
+ .describe('Context/reason for the invite - posted as welcome message in the discussion.'),
619
663
  sourceActivityId: zod_1.z
620
664
  .string()
621
665
  .min(24)
622
666
  .optional()
623
667
  .describe("IMPORTANT: The activity_id from the CURRENT discussion where the request was made. This creates a 'came from' link in the welcome message. Get this from the incoming message's activity_id attribute.")
624
668
  }).refine((data) => data.activityId || data.discussionId, {
625
- message: "Either activityId or discussionId must be provided"
669
+ message: 'Either activityId or discussionId must be provided'
626
670
  }),
627
671
  async execute(args, context) {
628
672
  logger.debug('Joining discussion', {
@@ -694,7 +738,7 @@ exports.joinDiscussionTool = {
694
738
  else {
695
739
  return {
696
740
  content: [{
697
- type: "text",
741
+ type: 'text',
698
742
  text: `āŒ Error: Either activityId or discussionId must be provided`,
699
743
  }],
700
744
  };
@@ -819,14 +863,15 @@ exports.joinDiscussionTool = {
819
863
  }
820
864
  return {
821
865
  content: [{
822
- type: "text",
866
+ type: 'text',
823
867
  text: responseText,
824
868
  }],
825
869
  };
826
870
  }
827
871
  catch (error) {
828
- if (!request_logger_1.RequestLogger.getCurrent())
829
- logger.error("Error joining discussion", error);
872
+ if (!request_logger_1.RequestLogger.getCurrent()) {
873
+ logger.error('Error joining discussion', error);
874
+ }
830
875
  const errorMessage = error instanceof Error
831
876
  ? error.message
832
877
  : (typeof error === 'object' && error !== null)
@@ -835,7 +880,7 @@ exports.joinDiscussionTool = {
835
880
  return {
836
881
  content: [
837
882
  {
838
- type: "text",
883
+ type: 'text',
839
884
  text: `āŒ Error joining discussion: ${errorMessage}\n\n` +
840
885
  `šŸ’” Troubleshooting:\n` +
841
886
  `- For activity discussions: Use join_discussion(activityId: "...")\n` +
@@ -853,7 +898,7 @@ exports.joinDiscussionTool = {
853
898
  },
854
899
  };
855
900
  // ============================================================================
856
- // TOOL 5: LEAVE DISCUSSION
901
+ // TOOL 4: LEAVE DISCUSSION
857
902
  // ============================================================================
858
903
  const leaveDiscussionDescription = `Leave a discussion - Bot removes itself from a discussion.
859
904
 
@@ -873,20 +918,20 @@ exports.leaveDiscussionTool = {
873
918
  schema: zod_1.z.object({
874
919
  activityId: zod_1.z
875
920
  .string()
876
- .min(24, "Activity ID must be at least 24 characters")
921
+ .min(24, 'Activity ID must be at least 24 characters')
877
922
  .optional()
878
- .describe("Activity ID to leave its discussion (preferred method for activity discussions)"),
923
+ .describe('Activity ID to leave its discussion (preferred method for activity discussions)'),
879
924
  discussionId: zod_1.z
880
925
  .string()
881
- .min(24, "Discussion ID must be at least 24 characters")
926
+ .min(24, 'Discussion ID must be at least 24 characters')
882
927
  .optional()
883
- .describe("Discussion ID to leave directly")
928
+ .describe('Discussion ID to leave directly')
884
929
  }).refine((data) => data.activityId || data.discussionId, {
885
- message: "Either activityId or discussionId must be provided"
930
+ message: 'Either activityId or discussionId must be provided'
886
931
  }),
887
932
  async execute(args, context) {
888
933
  // DEBUG: Log raw input to diagnose LLM tool calling issues
889
- logger.debug("leave_discussion called", {
934
+ logger.debug('leave_discussion called', {
890
935
  hasActivityId: !!args.activityId,
891
936
  hasDiscussionId: !!args.discussionId,
892
937
  activityId: args.activityId || '(not provided)',
@@ -906,7 +951,7 @@ exports.leaveDiscussionTool = {
906
951
  return {
907
952
  content: [
908
953
  {
909
- type: "text",
954
+ type: 'text',
910
955
  text: `āœ… Successfully left activity discussion!\n\n` +
911
956
  `šŸ“‹ **Activity**: ${activity.name || args.activityId}\n` +
912
957
  `šŸ’¬ **Discussion ID**: ${discussionId}\n` +
@@ -925,7 +970,7 @@ exports.leaveDiscussionTool = {
925
970
  return {
926
971
  content: [
927
972
  {
928
- type: "text",
973
+ type: 'text',
929
974
  text: `āœ… Successfully left discussion!\n\n` +
930
975
  `šŸ’¬ **Discussion ID**: ${args.discussionId}\n\n` +
931
976
  `šŸ”” You will no longer receive notifications from this discussion.\n\n` +
@@ -938,15 +983,16 @@ exports.leaveDiscussionTool = {
938
983
  return {
939
984
  content: [
940
985
  {
941
- type: "text",
986
+ type: 'text',
942
987
  text: `āŒ Error: Either activityId or discussionId must be provided`,
943
988
  },
944
989
  ],
945
990
  };
946
991
  }
947
992
  catch (error) {
948
- if (!request_logger_1.RequestLogger.getCurrent())
949
- logger.error("Error leaving discussion", error);
993
+ if (!request_logger_1.RequestLogger.getCurrent()) {
994
+ logger.error('Error leaving discussion', error);
995
+ }
950
996
  const errorMessage = error instanceof Error
951
997
  ? error.message
952
998
  : (typeof error === 'object' && error !== null)
@@ -955,7 +1001,7 @@ exports.leaveDiscussionTool = {
955
1001
  return {
956
1002
  content: [
957
1003
  {
958
- type: "text",
1004
+ type: 'text',
959
1005
  text: `āŒ Error leaving discussion: ${errorMessage}\n\n` +
960
1006
  `šŸ’” Troubleshooting:\n` +
961
1007
  `- For activity discussions: Use leave_discussion(activityId: "...")\n` +
@@ -973,7 +1019,7 @@ exports.leaveDiscussionTool = {
973
1019
  },
974
1020
  };
975
1021
  // ============================================================================
976
- // TOOL 6: ADD DISCUSSION MESSAGE
1022
+ // TOOL 5: ADD DISCUSSION MESSAGE
977
1023
  // ============================================================================
978
1024
  const addDiscussionMessageDescription = `Post a message to a Hailer discussion with optional file attachments - AI agents can participate in conversations`;
979
1025
  exports.addDiscussionMessageTool = {
@@ -981,9 +1027,9 @@ exports.addDiscussionMessageTool = {
981
1027
  group: tool_registry_1.ToolGroup.WRITE,
982
1028
  description: addDiscussionMessageDescription,
983
1029
  schema: zod_1.z.object({
984
- discussionId: zod_1.z.string().min(24, "Discussion ID must be at least 24 characters").describe("The discussion ID where to post the message"),
985
- content: zod_1.z.string().min(1, "Message content cannot be empty").describe("The message text to post"),
986
- fileIds: zod_1.z.array(zod_1.z.string()).optional().describe("Optional array of file IDs to attach (from upload_files tool)")
1030
+ discussionId: zod_1.z.string().min(24, 'Discussion ID must be at least 24 characters').describe('The discussion ID where to post the message'),
1031
+ content: zod_1.z.string().min(1, 'Message content cannot be empty').describe('The message text to post'),
1032
+ fileIds: zod_1.z.array(zod_1.z.string()).optional().describe('Optional array of file IDs to attach (from upload_files tool)')
987
1033
  }),
988
1034
  async execute(args, context) {
989
1035
  try {
@@ -996,7 +1042,7 @@ exports.addDiscussionMessageTool = {
996
1042
  return {
997
1043
  content: [
998
1044
  {
999
- type: "text",
1045
+ type: 'text',
1000
1046
  text: responseText,
1001
1047
  },
1002
1048
  ],
@@ -1006,7 +1052,7 @@ exports.addDiscussionMessageTool = {
1006
1052
  return {
1007
1053
  content: [
1008
1054
  {
1009
- type: "text",
1055
+ type: 'text',
1010
1056
  text: `āŒ Error posting message: ${error instanceof Error ? error.message : (typeof error === 'object' ? JSON.stringify(error) : String(error))}\n\nšŸ’” Tips:\n- Make sure the discussion ID is correct (24-character string)\n- Check that you have permission to post to this discussion\n- Verify the discussion exists and is accessible\n- If attaching files, ensure file IDs are valid (from upload_files tool)\n\nExample discussion ID: '683ef53087e3d8329abaa3ad'`,
1011
1057
  },
1012
1058
  ],
@@ -1015,7 +1061,7 @@ exports.addDiscussionMessageTool = {
1015
1061
  },
1016
1062
  };
1017
1063
  // ============================================================================
1018
- // TOOL 7: INVITE DISCUSSION MEMBERS
1064
+ // TOOL 6: INVITE DISCUSSION MEMBERS
1019
1065
  // ============================================================================
1020
1066
  const inviteDiscussionMembersDescription = `<purpose>Invite users to a discussion WITHOUT the bot joining. Use this to add people to activity discussions.</purpose>
1021
1067
  <when-to-use>
@@ -1031,12 +1077,12 @@ exports.inviteDiscussionMembersTool = {
1031
1077
  schema: zod_1.z.object({
1032
1078
  discussionId: zod_1.z
1033
1079
  .string()
1034
- .min(24, "Discussion ID must be at least 24 characters")
1035
- .describe("The discussion ID where to invite members"),
1080
+ .min(24, 'Discussion ID must be at least 24 characters')
1081
+ .describe('The discussion ID where to invite members'),
1036
1082
  userIds: zod_1.z
1037
- .array(zod_1.z.string().min(24, "User ID must be at least 24 characters"))
1038
- .min(1, "At least one user ID must be provided")
1039
- .describe("Array of user IDs to invite to the discussion. Use search_workspace_users to find user IDs")
1083
+ .array(zod_1.z.string().min(24, 'User ID must be at least 24 characters'))
1084
+ .min(1, 'At least one user ID must be provided')
1085
+ .describe('Array of user IDs to invite to the discussion. Use search_workspace_users to find user IDs')
1040
1086
  }),
1041
1087
  async execute(args, context) {
1042
1088
  logger.debug('Inviting members to discussion', {
@@ -1059,7 +1105,7 @@ exports.inviteDiscussionMembersTool = {
1059
1105
  if (isDm) {
1060
1106
  return {
1061
1107
  content: [{
1062
- type: "text",
1108
+ type: 'text',
1063
1109
  text: `āŒ Cannot invite members to a private chat.\n\n` +
1064
1110
  `Private chats are 1-on-1 conversations and cannot have additional members.\n` +
1065
1111
  `šŸ’” To include more people, create a group discussion instead.`
@@ -1120,7 +1166,7 @@ exports.inviteDiscussionMembersTool = {
1120
1166
  const alreadyMembersList = alreadyMembers.map((userId) => `- ${getUserName(userId)} (${userId})`).join('\n');
1121
1167
  return {
1122
1168
  content: [{
1123
- type: "text",
1169
+ type: 'text',
1124
1170
  text: `ā„¹ļø All users are already members of this discussion!\n\n` +
1125
1171
  `šŸ’¬ **Discussion ID**: ${args.discussionId}\n` +
1126
1172
  `šŸ‘„ **Already Members**:\n${alreadyMembersList}\n\n` +
@@ -1150,12 +1196,13 @@ exports.inviteDiscussionMembersTool = {
1150
1196
  `- Receive notifications for new activity\n\n` +
1151
1197
  `šŸ”— **Discussion Link:** https://app.hailer.com/#/discussions/${args.discussionId}`;
1152
1198
  return {
1153
- content: [{ type: "text", text: responseText }],
1199
+ content: [{ type: 'text', text: responseText }],
1154
1200
  };
1155
1201
  }
1156
1202
  catch (error) {
1157
- if (!request_logger_1.RequestLogger.getCurrent())
1158
- logger.error("Error inviting discussion members", error);
1203
+ if (!request_logger_1.RequestLogger.getCurrent()) {
1204
+ logger.error('Error inviting discussion members', error);
1205
+ }
1159
1206
  const errorMessage = error instanceof Error
1160
1207
  ? error.message
1161
1208
  : (typeof error === 'object' && error !== null)
@@ -1164,7 +1211,7 @@ exports.inviteDiscussionMembersTool = {
1164
1211
  return {
1165
1212
  content: [
1166
1213
  {
1167
- type: "text",
1214
+ type: 'text',
1168
1215
  text: `āŒ Error inviting members to discussion: ${errorMessage}\n\n` +
1169
1216
  `šŸ’” Troubleshooting:\n` +
1170
1217
  `- Verify the discussion ID is correct (24-character string)\n` +
@@ -1184,177 +1231,13 @@ exports.inviteDiscussionMembersTool = {
1184
1231
  };
1185
1232
  // Note: Hailer API does not have a "kick" or "remove members" feature.
1186
1233
  // Bots can only remove themselves using the leave_discussion tool.
1187
- // ============================================================================
1188
- // TOOL 8: GET ACTIVITY FROM DISCUSSION
1189
- // ============================================================================
1190
- const getActivityFromDiscussionDescription = `šŸ” Reverse lookup: Get activity details from a discussion ID
1191
-
1192
- **Purpose**: When you have a discussion ID but need to know what activity it belongs to.
1193
-
1194
- **Example**:
1195
- \`\`\`javascript
1196
- get_activity_from_discussion({
1197
- discussionId: "691ffe874217e9e8434e57f5"
1198
- })
1199
- \`\`\`
1200
-
1201
- **Returns**: Activity name, ID, workflow info, phase, and field values
1202
-
1203
- **Use Cases**:
1204
- - Identify which activity a discussion belongs to
1205
- - Get activity context when processing discussion messages
1206
- - Navigate from chat to activity details`;
1207
- exports.getActivityFromDiscussionTool = {
1208
- name: 'get_activity_from_discussion',
1209
- group: tool_registry_1.ToolGroup.READ,
1210
- description: getActivityFromDiscussionDescription,
1211
- schema: zod_1.z.object({
1212
- discussionId: zod_1.z
1213
- .string()
1214
- .min(24, "Discussion ID must be at least 24 characters")
1215
- .describe("The discussion ID to look up the associated activity for")
1216
- }),
1217
- async execute(args, context) {
1218
- logger.debug('Getting activity from discussion', {
1219
- discussionId: args.discussionId,
1220
- apiKey: context.apiKey.substring(0, 8) + '...'
1221
- });
1222
- try {
1223
- // First, sync discussions to find the one with this ID
1224
- const syncResponse = await context.hailer.request('v2.discussion.sync', [{ timestamp: 0 }]);
1225
- const discussions = syncResponse.discussions || [];
1226
- const targetDiscussion = discussions.find((d) => d._id === args.discussionId);
1227
- if (!targetDiscussion) {
1228
- return {
1229
- content: [{
1230
- type: "text",
1231
- text: `āŒ Discussion not found: ${args.discussionId}\n\n` +
1232
- `šŸ’” **Possible reasons:**\n` +
1233
- `- You are not a member of this discussion\n` +
1234
- `- The discussion ID is incorrect\n` +
1235
- `- The discussion has been deleted\n\n` +
1236
- `**Tip**: Use \`list_my_discussions\` to see discussions you have access to.`
1237
- }]
1238
- };
1239
- }
1240
- // Check if this discussion is linked to an activity
1241
- if (!targetDiscussion.linked_activity) {
1242
- let discussionType = 'unknown';
1243
- if (targetDiscussion.linked_event) {
1244
- discussionType = 'event';
1245
- }
1246
- else if (targetDiscussion.private === true) {
1247
- discussionType = 'private';
1248
- }
1249
- else if (targetDiscussion.private === false) {
1250
- discussionType = 'group';
1251
- }
1252
- return {
1253
- content: [{
1254
- type: "text",
1255
- text: `āš ļø Discussion found but not linked to an activity\n\n` +
1256
- `šŸ’¬ **Discussion ID**: \`${args.discussionId}\`\n` +
1257
- `šŸ“‹ **Type**: ${discussionType}\n` +
1258
- `šŸ“ **Name**: ${sanitizeString(targetDiscussion.name) || 'Untitled'}\n` +
1259
- (targetDiscussion.linked_event ? `šŸ“… **Event ID**: \`${targetDiscussion.linked_event}\`\n` : '') +
1260
- `\nšŸ’” This discussion is not associated with any activity.`
1261
- }]
1262
- };
1263
- }
1264
- // Fetch the linked activity details
1265
- const activityId = targetDiscussion.linked_activity;
1266
- const activity = await context.hailer.fetchActivityById(activityId);
1267
- if (!activity) {
1268
- return {
1269
- content: [{
1270
- type: "text",
1271
- text: `āš ļø Discussion is linked to activity \`${activityId}\` but activity could not be loaded.\n\n` +
1272
- `šŸ’” **Possible reasons:**\n` +
1273
- `- The activity has been deleted\n` +
1274
- `- You don't have permission to view the activity\n` +
1275
- `- The activity is in a different workspace`
1276
- }]
1277
- };
1278
- }
1279
- // Build comprehensive response
1280
- let responseText = `āœ… **Activity Found!**\n\n`;
1281
- responseText += `šŸ“‹ **Activity Details:**\n`;
1282
- responseText += `- **Name**: ${activity.name || 'Untitled'}\n`;
1283
- responseText += `- **Activity ID**: \`${activity._id}\`\n`;
1284
- responseText += `- **Discussion ID**: \`${args.discussionId}\`\n`;
1285
- if (activity.workflowId) {
1286
- responseText += `- **Workflow ID**: \`${activity.workflowId}\`\n`;
1287
- }
1288
- if (activity.workflowName) {
1289
- responseText += `- **Workflow**: ${activity.workflowName}\n`;
1290
- }
1291
- if (activity.phaseName) {
1292
- responseText += `- **Phase**: ${activity.phaseName}\n`;
1293
- }
1294
- if (activity.phaseId) {
1295
- responseText += `- **Phase ID**: \`${activity.phaseId}\`\n`;
1296
- }
1297
- if (activity.created) {
1298
- responseText += `- **Created**: ${new Date(activity.created).toLocaleString()}\n`;
1299
- }
1300
- if (activity.updated) {
1301
- responseText += `- **Updated**: ${new Date(activity.updated).toLocaleString()}\n`;
1302
- }
1303
- // Add field values if present
1304
- if (activity.fields && Object.keys(activity.fields).length > 0) {
1305
- responseText += `\nšŸ“Š **Field Values:**\n`;
1306
- for (const [fieldId, value] of Object.entries(activity.fields)) {
1307
- if (value !== null && value !== undefined && value !== '') {
1308
- const displayValue = typeof value === 'object' ? JSON.stringify(value) : String(value);
1309
- responseText += `- \`${fieldId}\`: ${displayValue}\n`;
1310
- }
1311
- }
1312
- }
1313
- responseText += `\nšŸ”— **Links:**\n`;
1314
- responseText += `- Activity: https://app.hailer.com/#/activities/${activity._id}\n`;
1315
- responseText += `- Discussion: https://app.hailer.com/#/discussions/${args.discussionId}\n`;
1316
- responseText += `\nšŸ’” **Next Steps:**\n`;
1317
- responseText += `- View full activity: \`show_activity_by_id({ activityId: "${activity._id}" })\`\n`;
1318
- responseText += `- List workflow activities: \`list_activities({ workflowId: "${activity.workflowId}", phaseId: "${activity.phaseId}", fields: [...] })\``;
1319
- return {
1320
- content: [{
1321
- type: "text",
1322
- text: responseText
1323
- }]
1324
- };
1325
- }
1326
- catch (error) {
1327
- if (!request_logger_1.RequestLogger.getCurrent())
1328
- logger.error("Error getting activity from discussion", error);
1329
- const errorMessage = error instanceof Error
1330
- ? error.message
1331
- : (typeof error === 'object' && error !== null)
1332
- ? JSON.stringify(error, null, 2)
1333
- : String(error);
1334
- return {
1335
- content: [{
1336
- type: "text",
1337
- text: `āŒ Error getting activity from discussion: ${errorMessage}\n\n` +
1338
- `šŸ’” **Troubleshooting:**\n` +
1339
- `- Verify the discussion ID is correct (24-character string)\n` +
1340
- `- Ensure you have access to the discussion\n` +
1341
- `- Try \`list_my_discussions\` to see available discussions\n\n` +
1342
- `šŸ“– **Example:**\n` +
1343
- `get_activity_from_discussion({ discussionId: "691ffe874217e9e8434e57f5" })`
1344
- }]
1345
- };
1346
- }
1347
- }
1348
- };
1349
1234
  /** All discussion tools */
1350
1235
  exports.discussionTools = [
1351
1236
  exports.listMyDiscussionsTool,
1352
1237
  exports.fetchDiscussionMessagesTool,
1353
- exports.fetchPreviousDiscussionMessagesTool,
1238
+ exports.addDiscussionMessageTool,
1354
1239
  exports.joinDiscussionTool,
1355
1240
  exports.leaveDiscussionTool,
1356
- exports.addDiscussionMessageTool,
1357
1241
  exports.inviteDiscussionMembersTool,
1358
- exports.getActivityFromDiscussionTool,
1359
1242
  ];
1360
1243
  //# sourceMappingURL=discussion.js.map