@hailer/mcp 1.2.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (764) 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 +102 -83
  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 +136 -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 +12 -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/session-store.d.ts +16 -16
  143. package/dist/mcp/session-store.d.ts.map +1 -1
  144. package/dist/mcp/session-store.js +16 -16
  145. package/dist/mcp/session-store.js.map +1 -1
  146. package/dist/mcp/tool-profiles.d.ts +69 -0
  147. package/dist/mcp/tool-profiles.d.ts.map +1 -0
  148. package/dist/mcp/tool-profiles.js +176 -0
  149. package/dist/mcp/tool-profiles.js.map +1 -0
  150. package/dist/mcp/tool-registry.d.ts +16 -0
  151. package/dist/mcp/tool-registry.d.ts.map +1 -1
  152. package/dist/mcp/tool-registry.js +91 -39
  153. package/dist/mcp/tool-registry.js.map +1 -1
  154. package/dist/mcp/tools/activity.d.ts.map +1 -1
  155. package/dist/mcp/tools/activity.js +398 -198
  156. package/dist/mcp/tools/activity.js.map +1 -1
  157. package/dist/mcp/tools/aliases.d.ts +11 -0
  158. package/dist/mcp/tools/aliases.d.ts.map +1 -0
  159. package/dist/mcp/tools/aliases.js +176 -0
  160. package/dist/mcp/tools/aliases.js.map +1 -0
  161. package/dist/mcp/tools/app-core.d.ts +6 -8
  162. package/dist/mcp/tools/app-core.d.ts.map +1 -1
  163. package/dist/mcp/tools/app-core.js +355 -254
  164. package/dist/mcp/tools/app-core.js.map +1 -1
  165. package/dist/mcp/tools/app-marketplace.d.ts +8 -16
  166. package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
  167. package/dist/mcp/tools/app-marketplace.js +604 -930
  168. package/dist/mcp/tools/app-marketplace.js.map +1 -1
  169. package/dist/mcp/tools/app.d.ts +4 -7
  170. package/dist/mcp/tools/app.d.ts.map +1 -1
  171. package/dist/mcp/tools/app.js +4 -7
  172. package/dist/mcp/tools/app.js.map +1 -1
  173. package/dist/mcp/tools/bot-self.d.ts +21 -0
  174. package/dist/mcp/tools/bot-self.d.ts.map +1 -0
  175. package/dist/mcp/tools/bot-self.js +174 -0
  176. package/dist/mcp/tools/bot-self.js.map +1 -0
  177. package/dist/mcp/tools/calendar.d.ts +21 -0
  178. package/dist/mcp/tools/calendar.d.ts.map +1 -0
  179. package/dist/mcp/tools/calendar.js +741 -0
  180. package/dist/mcp/tools/calendar.js.map +1 -0
  181. package/dist/mcp/tools/company.d.ts.map +1 -1
  182. package/dist/mcp/tools/company.js +2 -1
  183. package/dist/mcp/tools/company.js.map +1 -1
  184. package/dist/mcp/tools/date.js.map +1 -1
  185. package/dist/mcp/tools/discussion.d.ts +23 -3
  186. package/dist/mcp/tools/discussion.d.ts.map +1 -1
  187. package/dist/mcp/tools/discussion.js +417 -534
  188. package/dist/mcp/tools/discussion.js.map +1 -1
  189. package/dist/mcp/tools/file.d.ts.map +1 -1
  190. package/dist/mcp/tools/file.js +18 -16
  191. package/dist/mcp/tools/file.js.map +1 -1
  192. package/dist/mcp/tools/index.js +4 -4
  193. package/dist/mcp/tools/index.js.map +1 -1
  194. package/dist/mcp/tools/insight.d.ts +7 -5
  195. package/dist/mcp/tools/insight.d.ts.map +1 -1
  196. package/dist/mcp/tools/insight.js +419 -477
  197. package/dist/mcp/tools/insight.js.map +1 -1
  198. package/dist/mcp/tools/user.d.ts.map +1 -1
  199. package/dist/mcp/tools/user.js +15 -13
  200. package/dist/mcp/tools/user.js.map +1 -1
  201. package/dist/mcp/tools/workflow-permissions.d.ts +2 -4
  202. package/dist/mcp/tools/workflow-permissions.d.ts.map +1 -1
  203. package/dist/mcp/tools/workflow-permissions.js +88 -97
  204. package/dist/mcp/tools/workflow-permissions.js.map +1 -1
  205. package/dist/mcp/tools/workflow.d.ts +2 -7
  206. package/dist/mcp/tools/workflow.d.ts.map +1 -1
  207. package/dist/mcp/tools/workflow.js +817 -850
  208. package/dist/mcp/tools/workflow.js.map +1 -1
  209. package/dist/mcp/utils/api-errors.d.ts.map +1 -1
  210. package/dist/mcp/utils/api-errors.js +2 -2
  211. package/dist/mcp/utils/api-errors.js.map +1 -1
  212. package/dist/mcp/utils/data-transformers.d.ts.map +1 -1
  213. package/dist/mcp/utils/data-transformers.js +8 -4
  214. package/dist/mcp/utils/data-transformers.js.map +1 -1
  215. package/dist/mcp/utils/file-upload.d.ts.map +1 -1
  216. package/dist/mcp/utils/file-upload.js +1 -1
  217. package/dist/mcp/utils/file-upload.js.map +1 -1
  218. package/dist/mcp/utils/hailer-api-client.d.ts +81 -81
  219. package/dist/mcp/utils/hailer-api-client.d.ts.map +1 -1
  220. package/dist/mcp/utils/hailer-api-client.js +103 -101
  221. package/dist/mcp/utils/hailer-api-client.js.map +1 -1
  222. package/dist/mcp/utils/index.d.ts.map +1 -1
  223. package/dist/mcp/utils/index.js.map +1 -1
  224. package/dist/mcp/utils/logger.d.ts.map +1 -1
  225. package/dist/mcp/utils/logger.js.map +1 -1
  226. package/dist/mcp/utils/response-builder.d.ts.map +1 -1
  227. package/dist/mcp/utils/response-builder.js +8 -4
  228. package/dist/mcp/utils/response-builder.js.map +1 -1
  229. package/dist/mcp/utils/role-utils.d.ts.map +1 -1
  230. package/dist/mcp/utils/role-utils.js +6 -3
  231. package/dist/mcp/utils/role-utils.js.map +1 -1
  232. package/dist/mcp/utils/tool-helpers.d.ts.map +1 -1
  233. package/dist/mcp/utils/tool-helpers.js +2 -2
  234. package/dist/mcp/utils/tool-helpers.js.map +1 -1
  235. package/dist/mcp/utils/types.d.ts +1 -1
  236. package/dist/mcp/utils/types.d.ts.map +1 -1
  237. package/dist/mcp/utils/types.js.map +1 -1
  238. package/dist/mcp/webhook-handler.d.ts +43 -8
  239. package/dist/mcp/webhook-handler.d.ts.map +1 -1
  240. package/dist/mcp/webhook-handler.js +861 -116
  241. package/dist/mcp/webhook-handler.js.map +1 -1
  242. package/dist/mcp/workspace-admin-store.d.ts +49 -0
  243. package/dist/mcp/workspace-admin-store.d.ts.map +1 -0
  244. package/dist/mcp/workspace-admin-store.js +168 -0
  245. package/dist/mcp/workspace-admin-store.js.map +1 -0
  246. package/dist/mcp/workspace-cache.d.ts +2 -2
  247. package/dist/mcp/workspace-cache.d.ts.map +1 -1
  248. package/dist/mcp/workspace-cache.js +9 -5
  249. package/dist/mcp/workspace-cache.js.map +1 -1
  250. package/dist/mcp-server.d.ts +26 -11
  251. package/dist/mcp-server.d.ts.map +1 -1
  252. package/dist/mcp-server.js +360 -36
  253. package/dist/mcp-server.js.map +1 -1
  254. package/dist/plugins/vipunen/client.d.ts +41 -41
  255. package/dist/plugins/vipunen/client.d.ts.map +1 -1
  256. package/dist/plugins/vipunen/client.js +53 -48
  257. package/dist/plugins/vipunen/client.js.map +1 -1
  258. package/dist/plugins/vipunen/index.js.map +1 -1
  259. package/dist/plugins/vipunen/tools.d.ts.map +1 -1
  260. package/dist/plugins/vipunen/tools.js +6 -3
  261. package/dist/plugins/vipunen/tools.js.map +1 -1
  262. package/dist/public-chat/graduate.d.ts +29 -0
  263. package/dist/public-chat/graduate.d.ts.map +1 -0
  264. package/dist/public-chat/graduate.js +593 -0
  265. package/dist/public-chat/graduate.js.map +1 -0
  266. package/dist/public-chat/handler.d.ts +12 -0
  267. package/dist/public-chat/handler.d.ts.map +1 -0
  268. package/dist/public-chat/handler.js +179 -0
  269. package/dist/public-chat/handler.js.map +1 -0
  270. package/dist/public-chat/index.d.ts +16 -0
  271. package/dist/public-chat/index.d.ts.map +1 -0
  272. package/dist/public-chat/index.js +74 -0
  273. package/dist/public-chat/index.js.map +1 -0
  274. package/dist/public-chat/knowledge.d.ts +3 -0
  275. package/dist/public-chat/knowledge.d.ts.map +1 -0
  276. package/dist/public-chat/knowledge.js +1339 -0
  277. package/dist/public-chat/knowledge.js.map +1 -0
  278. package/dist/public-chat/rate-limit.d.ts +16 -0
  279. package/dist/public-chat/rate-limit.d.ts.map +1 -0
  280. package/dist/public-chat/rate-limit.js +51 -0
  281. package/dist/public-chat/rate-limit.js.map +1 -0
  282. package/dist/public-chat/session-store.d.ts +41 -0
  283. package/dist/public-chat/session-store.d.ts.map +1 -0
  284. package/dist/public-chat/session-store.js +95 -0
  285. package/dist/public-chat/session-store.js.map +1 -0
  286. package/dist/public-chat/studio-prewarm.d.ts +61 -0
  287. package/dist/public-chat/studio-prewarm.d.ts.map +1 -0
  288. package/dist/public-chat/studio-prewarm.js +162 -0
  289. package/dist/public-chat/studio-prewarm.js.map +1 -0
  290. package/dist/public-chat/system-prompt.d.ts +22 -0
  291. package/dist/public-chat/system-prompt.d.ts.map +1 -0
  292. package/dist/public-chat/system-prompt.js +428 -0
  293. package/dist/public-chat/system-prompt.js.map +1 -0
  294. package/package.json +14 -6
  295. package/scripts/build-public-chat-knowledge.py +101 -0
  296. package/scripts/probe-mcp-pricing.ts +52 -0
  297. package/scripts/smoke-public-chat-live.ts +148 -0
  298. package/scripts/smoke-public-chat.ts +110 -0
  299. package/.claude/CLAUDE.md +0 -126
  300. package/.claude/commands/audit-squad.md +0 -158
  301. package/.claude/commands/cleanup-squad.md +0 -98
  302. package/.claude/commands/config-squad.md +0 -106
  303. package/.claude/commands/crud-squad.md +0 -87
  304. package/.claude/commands/data-squad.md +0 -97
  305. package/.claude/commands/doc-squad.md +0 -65
  306. package/.claude/commands/help.md +0 -29
  307. package/.claude/commands/help:agents.md +0 -182
  308. package/.claude/commands/help:commands.md +0 -78
  309. package/.claude/commands/help:faq.md +0 -79
  310. package/.claude/commands/help:plugins.md +0 -50
  311. package/.claude/commands/help:skills.md +0 -87
  312. package/.claude/commands/help:tools.md +0 -75
  313. package/.claude/commands/hotfix-squad.md +0 -112
  314. package/.claude/commands/integration-squad.md +0 -82
  315. package/.claude/commands/janitor-squad.md +0 -167
  316. package/.claude/commands/onboard-squad.md +0 -130
  317. package/.claude/commands/swarm.md +0 -210
  318. package/.claude/commands/tool-builder.md +0 -39
  319. package/.claude/skills/publish-hailer-app/SKILL.md +0 -280
  320. package/dist/CLAUDE.md +0 -370
  321. package/dist/agents/bot-manager.d.ts +0 -48
  322. package/dist/agents/bot-manager.d.ts.map +0 -1
  323. package/dist/agents/bot-manager.js +0 -254
  324. package/dist/agents/bot-manager.js.map +0 -1
  325. package/dist/agents/bug-fixer/ai.d.ts +0 -80
  326. package/dist/agents/bug-fixer/ai.d.ts.map +0 -1
  327. package/dist/agents/bug-fixer/ai.js +0 -466
  328. package/dist/agents/bug-fixer/ai.js.map +0 -1
  329. package/dist/agents/bug-fixer/bot.d.ts +0 -92
  330. package/dist/agents/bug-fixer/bot.d.ts.map +0 -1
  331. package/dist/agents/bug-fixer/bot.js +0 -687
  332. package/dist/agents/bug-fixer/bot.js.map +0 -1
  333. package/dist/agents/bug-fixer/config.d.ts +0 -21
  334. package/dist/agents/bug-fixer/config.d.ts.map +0 -1
  335. package/dist/agents/bug-fixer/config.js +0 -218
  336. package/dist/agents/bug-fixer/config.js.map +0 -1
  337. package/dist/agents/bug-fixer/files.d.ts +0 -67
  338. package/dist/agents/bug-fixer/files.d.ts.map +0 -1
  339. package/dist/agents/bug-fixer/files.js +0 -386
  340. package/dist/agents/bug-fixer/files.js.map +0 -1
  341. package/dist/agents/bug-fixer/git.d.ts +0 -48
  342. package/dist/agents/bug-fixer/git.d.ts.map +0 -1
  343. package/dist/agents/bug-fixer/git.js +0 -298
  344. package/dist/agents/bug-fixer/git.js.map +0 -1
  345. package/dist/agents/bug-fixer/index.d.ts +0 -103
  346. package/dist/agents/bug-fixer/index.d.ts.map +0 -1
  347. package/dist/agents/bug-fixer/index.js +0 -262
  348. package/dist/agents/bug-fixer/index.js.map +0 -1
  349. package/dist/agents/bug-fixer/lsp.d.ts +0 -113
  350. package/dist/agents/bug-fixer/lsp.d.ts.map +0 -1
  351. package/dist/agents/bug-fixer/lsp.js +0 -485
  352. package/dist/agents/bug-fixer/lsp.js.map +0 -1
  353. package/dist/agents/bug-fixer/monitor.d.ts +0 -123
  354. package/dist/agents/bug-fixer/monitor.d.ts.map +0 -1
  355. package/dist/agents/bug-fixer/monitor.js +0 -629
  356. package/dist/agents/bug-fixer/monitor.js.map +0 -1
  357. package/dist/agents/bug-fixer/prompt.d.ts +0 -5
  358. package/dist/agents/bug-fixer/prompt.d.ts.map +0 -1
  359. package/dist/agents/bug-fixer/prompt.js +0 -94
  360. package/dist/agents/bug-fixer/prompt.js.map +0 -1
  361. package/dist/agents/bug-fixer/registries/pending-classification.d.ts +0 -28
  362. package/dist/agents/bug-fixer/registries/pending-classification.d.ts.map +0 -1
  363. package/dist/agents/bug-fixer/registries/pending-classification.js +0 -50
  364. package/dist/agents/bug-fixer/registries/pending-classification.js.map +0 -1
  365. package/dist/agents/bug-fixer/registries/pending-fix.d.ts +0 -33
  366. package/dist/agents/bug-fixer/registries/pending-fix.d.ts.map +0 -1
  367. package/dist/agents/bug-fixer/registries/pending-fix.js +0 -64
  368. package/dist/agents/bug-fixer/registries/pending-fix.js.map +0 -1
  369. package/dist/agents/bug-fixer/registries/pending.d.ts +0 -27
  370. package/dist/agents/bug-fixer/registries/pending.d.ts.map +0 -1
  371. package/dist/agents/bug-fixer/registries/pending.js +0 -49
  372. package/dist/agents/bug-fixer/registries/pending.js.map +0 -1
  373. package/dist/agents/bug-fixer/specialist-daemon.d.ts +0 -88
  374. package/dist/agents/bug-fixer/specialist-daemon.d.ts.map +0 -1
  375. package/dist/agents/bug-fixer/specialist-daemon.js +0 -431
  376. package/dist/agents/bug-fixer/specialist-daemon.js.map +0 -1
  377. package/dist/agents/bug-fixer/specialist.d.ts +0 -47
  378. package/dist/agents/bug-fixer/specialist.d.ts.map +0 -1
  379. package/dist/agents/bug-fixer/specialist.js +0 -327
  380. package/dist/agents/bug-fixer/specialist.js.map +0 -1
  381. package/dist/agents/bug-fixer/types.d.ts +0 -123
  382. package/dist/agents/bug-fixer/types.d.ts.map +0 -1
  383. package/dist/agents/bug-fixer/types.js +0 -9
  384. package/dist/agents/bug-fixer/types.js.map +0 -1
  385. package/dist/agents/factory.d.ts +0 -172
  386. package/dist/agents/factory.d.ts.map +0 -1
  387. package/dist/agents/factory.js +0 -706
  388. package/dist/agents/factory.js.map +0 -1
  389. package/dist/agents/hailer-expert/index.d.ts +0 -8
  390. package/dist/agents/hailer-expert/index.d.ts.map +0 -1
  391. package/dist/agents/hailer-expert/index.js +0 -14
  392. package/dist/agents/hailer-expert/index.js.map +0 -1
  393. package/dist/agents/hal/daemon.d.ts +0 -174
  394. package/dist/agents/hal/daemon.d.ts.map +0 -1
  395. package/dist/agents/hal/daemon.js +0 -1385
  396. package/dist/agents/hal/daemon.js.map +0 -1
  397. package/dist/agents/hal/definitions.d.ts +0 -42
  398. package/dist/agents/hal/definitions.d.ts.map +0 -1
  399. package/dist/agents/hal/definitions.js +0 -300
  400. package/dist/agents/hal/definitions.js.map +0 -1
  401. package/dist/agents/hal/index.d.ts +0 -3
  402. package/dist/agents/hal/index.d.ts.map +0 -1
  403. package/dist/agents/hal/index.js +0 -8
  404. package/dist/agents/hal/index.js.map +0 -1
  405. package/dist/agents/index.d.ts +0 -18
  406. package/dist/agents/index.d.ts.map +0 -1
  407. package/dist/agents/index.js +0 -48
  408. package/dist/agents/index.js.map +0 -1
  409. package/dist/agents/shared/base.d.ts +0 -253
  410. package/dist/agents/shared/base.d.ts.map +0 -1
  411. package/dist/agents/shared/base.js +0 -1122
  412. package/dist/agents/shared/base.js.map +0 -1
  413. package/dist/agents/shared/schemas/action-schema.d.ts +0 -62
  414. package/dist/agents/shared/schemas/action-schema.d.ts.map +0 -1
  415. package/dist/agents/shared/schemas/action-schema.js +0 -483
  416. package/dist/agents/shared/schemas/action-schema.js.map +0 -1
  417. package/dist/agents/shared/services/agent-registry.d.ts +0 -108
  418. package/dist/agents/shared/services/agent-registry.d.ts.map +0 -1
  419. package/dist/agents/shared/services/agent-registry.js +0 -469
  420. package/dist/agents/shared/services/agent-registry.js.map +0 -1
  421. package/dist/agents/shared/services/conversation-manager.d.ts +0 -57
  422. package/dist/agents/shared/services/conversation-manager.d.ts.map +0 -1
  423. package/dist/agents/shared/services/conversation-manager.js +0 -168
  424. package/dist/agents/shared/services/conversation-manager.js.map +0 -1
  425. package/dist/agents/shared/services/mcp-client.d.ts +0 -56
  426. package/dist/agents/shared/services/mcp-client.d.ts.map +0 -1
  427. package/dist/agents/shared/services/mcp-client.js +0 -124
  428. package/dist/agents/shared/services/mcp-client.js.map +0 -1
  429. package/dist/agents/shared/services/message-classifier.d.ts +0 -37
  430. package/dist/agents/shared/services/message-classifier.d.ts.map +0 -1
  431. package/dist/agents/shared/services/message-classifier.js +0 -203
  432. package/dist/agents/shared/services/message-classifier.js.map +0 -1
  433. package/dist/agents/shared/services/message-formatter.d.ts +0 -89
  434. package/dist/agents/shared/services/message-formatter.d.ts.map +0 -1
  435. package/dist/agents/shared/services/message-formatter.js +0 -390
  436. package/dist/agents/shared/services/message-formatter.js.map +0 -1
  437. package/dist/agents/shared/services/session-logger.d.ts +0 -162
  438. package/dist/agents/shared/services/session-logger.d.ts.map +0 -1
  439. package/dist/agents/shared/services/session-logger.js +0 -724
  440. package/dist/agents/shared/services/session-logger.js.map +0 -1
  441. package/dist/agents/shared/services/structured-output-executor.d.ts +0 -88
  442. package/dist/agents/shared/services/structured-output-executor.d.ts.map +0 -1
  443. package/dist/agents/shared/services/structured-output-executor.js +0 -296
  444. package/dist/agents/shared/services/structured-output-executor.js.map +0 -1
  445. package/dist/agents/shared/services/token-billing.d.ts +0 -72
  446. package/dist/agents/shared/services/token-billing.d.ts.map +0 -1
  447. package/dist/agents/shared/services/token-billing.js +0 -198
  448. package/dist/agents/shared/services/token-billing.js.map +0 -1
  449. package/dist/agents/shared/services/tool-executor.d.ts +0 -43
  450. package/dist/agents/shared/services/tool-executor.d.ts.map +0 -1
  451. package/dist/agents/shared/services/tool-executor.js +0 -175
  452. package/dist/agents/shared/services/tool-executor.js.map +0 -1
  453. package/dist/agents/shared/services/typing-indicator.d.ts +0 -24
  454. package/dist/agents/shared/services/typing-indicator.d.ts.map +0 -1
  455. package/dist/agents/shared/services/typing-indicator.js +0 -54
  456. package/dist/agents/shared/services/typing-indicator.js.map +0 -1
  457. package/dist/agents/shared/services/workspace-schema-cache.d.ts +0 -122
  458. package/dist/agents/shared/services/workspace-schema-cache.d.ts.map +0 -1
  459. package/dist/agents/shared/services/workspace-schema-cache.js +0 -507
  460. package/dist/agents/shared/services/workspace-schema-cache.js.map +0 -1
  461. package/dist/agents/shared/specialist.d.ts +0 -91
  462. package/dist/agents/shared/specialist.d.ts.map +0 -1
  463. package/dist/agents/shared/specialist.js +0 -399
  464. package/dist/agents/shared/specialist.js.map +0 -1
  465. package/dist/agents/shared/tool-schema-loader.d.ts +0 -65
  466. package/dist/agents/shared/tool-schema-loader.d.ts.map +0 -1
  467. package/dist/agents/shared/tool-schema-loader.js +0 -238
  468. package/dist/agents/shared/tool-schema-loader.js.map +0 -1
  469. package/dist/agents/shared/types.d.ts +0 -190
  470. package/dist/agents/shared/types.d.ts.map +0 -1
  471. package/dist/agents/shared/types.js +0 -13
  472. package/dist/agents/shared/types.js.map +0 -1
  473. package/dist/bot/bot-config.d.ts +0 -37
  474. package/dist/bot/bot-config.d.ts.map +0 -1
  475. package/dist/bot/bot-config.js +0 -219
  476. package/dist/bot/bot-config.js.map +0 -1
  477. package/dist/bot/services/__tests__/permission-guard.test.d.ts +0 -2
  478. package/dist/bot/services/__tests__/permission-guard.test.d.ts.map +0 -1
  479. package/dist/bot/services/__tests__/permission-guard.test.js +0 -357
  480. package/dist/bot/services/__tests__/permission-guard.test.js.map +0 -1
  481. package/dist/bot/services/session-logger.d.ts +0 -162
  482. package/dist/bot/services/session-logger.d.ts.map +0 -1
  483. package/dist/bot/services/session-logger.js +0 -724
  484. package/dist/bot/services/session-logger.js.map +0 -1
  485. package/dist/bot/services/workspace-schema-cache.d.ts +0 -122
  486. package/dist/bot/services/workspace-schema-cache.d.ts.map +0 -1
  487. package/dist/bot/services/workspace-schema-cache.js +0 -506
  488. package/dist/bot/services/workspace-schema-cache.js.map +0 -1
  489. package/dist/bot-config/tools.d.ts +0 -28
  490. package/dist/bot-config/tools.d.ts.map +0 -1
  491. package/dist/bot-config/tools.js +0 -279
  492. package/dist/bot-config/tools.js.map +0 -1
  493. package/dist/client/agents/base.d.ts +0 -207
  494. package/dist/client/agents/base.d.ts.map +0 -1
  495. package/dist/client/agents/base.js +0 -744
  496. package/dist/client/agents/base.js.map +0 -1
  497. package/dist/client/agents/definitions.d.ts +0 -53
  498. package/dist/client/agents/definitions.d.ts.map +0 -1
  499. package/dist/client/agents/definitions.js +0 -263
  500. package/dist/client/agents/definitions.js.map +0 -1
  501. package/dist/client/agents/orchestrator.d.ts +0 -141
  502. package/dist/client/agents/orchestrator.d.ts.map +0 -1
  503. package/dist/client/agents/orchestrator.js +0 -1062
  504. package/dist/client/agents/orchestrator.js.map +0 -1
  505. package/dist/client/agents/specialist.d.ts +0 -86
  506. package/dist/client/agents/specialist.d.ts.map +0 -1
  507. package/dist/client/agents/specialist.js +0 -340
  508. package/dist/client/agents/specialist.js.map +0 -1
  509. package/dist/client/bot-entrypoint.d.ts +0 -7
  510. package/dist/client/bot-entrypoint.d.ts.map +0 -1
  511. package/dist/client/bot-entrypoint.js +0 -103
  512. package/dist/client/bot-entrypoint.js.map +0 -1
  513. package/dist/client/bot-manager.d.ts +0 -44
  514. package/dist/client/bot-manager.d.ts.map +0 -1
  515. package/dist/client/bot-manager.js +0 -173
  516. package/dist/client/bot-manager.js.map +0 -1
  517. package/dist/client/bot-runner.d.ts +0 -35
  518. package/dist/client/bot-runner.d.ts.map +0 -1
  519. package/dist/client/bot-runner.js +0 -188
  520. package/dist/client/bot-runner.js.map +0 -1
  521. package/dist/client/chat-agent-daemon.d.ts +0 -464
  522. package/dist/client/chat-agent-daemon.d.ts.map +0 -1
  523. package/dist/client/chat-agent-daemon.js +0 -1774
  524. package/dist/client/chat-agent-daemon.js.map +0 -1
  525. package/dist/client/daemon-factory.d.ts +0 -106
  526. package/dist/client/daemon-factory.d.ts.map +0 -1
  527. package/dist/client/daemon-factory.js +0 -301
  528. package/dist/client/daemon-factory.js.map +0 -1
  529. package/dist/client/factory.d.ts +0 -111
  530. package/dist/client/factory.d.ts.map +0 -1
  531. package/dist/client/factory.js +0 -314
  532. package/dist/client/factory.js.map +0 -1
  533. package/dist/client/index.d.ts +0 -17
  534. package/dist/client/index.d.ts.map +0 -1
  535. package/dist/client/index.js +0 -38
  536. package/dist/client/index.js.map +0 -1
  537. package/dist/client/multi-bot-manager.d.ts +0 -42
  538. package/dist/client/multi-bot-manager.d.ts.map +0 -1
  539. package/dist/client/multi-bot-manager.js +0 -161
  540. package/dist/client/multi-bot-manager.js.map +0 -1
  541. package/dist/client/orchestrator-daemon.d.ts +0 -87
  542. package/dist/client/orchestrator-daemon.d.ts.map +0 -1
  543. package/dist/client/orchestrator-daemon.js +0 -444
  544. package/dist/client/orchestrator-daemon.js.map +0 -1
  545. package/dist/client/server.d.ts +0 -8
  546. package/dist/client/server.d.ts.map +0 -1
  547. package/dist/client/server.js +0 -251
  548. package/dist/client/server.js.map +0 -1
  549. package/dist/client/services/agent-registry.d.ts +0 -108
  550. package/dist/client/services/agent-registry.d.ts.map +0 -1
  551. package/dist/client/services/agent-registry.js +0 -630
  552. package/dist/client/services/agent-registry.js.map +0 -1
  553. package/dist/client/services/conversation-manager.d.ts +0 -50
  554. package/dist/client/services/conversation-manager.d.ts.map +0 -1
  555. package/dist/client/services/conversation-manager.js +0 -136
  556. package/dist/client/services/conversation-manager.js.map +0 -1
  557. package/dist/client/services/mcp-client.d.ts +0 -48
  558. package/dist/client/services/mcp-client.d.ts.map +0 -1
  559. package/dist/client/services/mcp-client.js +0 -105
  560. package/dist/client/services/mcp-client.js.map +0 -1
  561. package/dist/client/services/message-classifier.d.ts +0 -37
  562. package/dist/client/services/message-classifier.d.ts.map +0 -1
  563. package/dist/client/services/message-classifier.js +0 -187
  564. package/dist/client/services/message-classifier.js.map +0 -1
  565. package/dist/client/services/message-formatter.d.ts +0 -84
  566. package/dist/client/services/message-formatter.d.ts.map +0 -1
  567. package/dist/client/services/message-formatter.js +0 -353
  568. package/dist/client/services/message-formatter.js.map +0 -1
  569. package/dist/client/services/session-logger.d.ts +0 -106
  570. package/dist/client/services/session-logger.d.ts.map +0 -1
  571. package/dist/client/services/session-logger.js +0 -446
  572. package/dist/client/services/session-logger.js.map +0 -1
  573. package/dist/client/services/tool-executor.d.ts +0 -41
  574. package/dist/client/services/tool-executor.d.ts.map +0 -1
  575. package/dist/client/services/tool-executor.js +0 -169
  576. package/dist/client/services/tool-executor.js.map +0 -1
  577. package/dist/client/services/workspace-schema-cache.d.ts +0 -149
  578. package/dist/client/services/workspace-schema-cache.d.ts.map +0 -1
  579. package/dist/client/services/workspace-schema-cache.js +0 -732
  580. package/dist/client/services/workspace-schema-cache.js.map +0 -1
  581. package/dist/client/specialist-daemon.d.ts +0 -77
  582. package/dist/client/specialist-daemon.d.ts.map +0 -1
  583. package/dist/client/specialist-daemon.js +0 -197
  584. package/dist/client/specialist-daemon.js.map +0 -1
  585. package/dist/client/specialists.d.ts +0 -53
  586. package/dist/client/specialists.d.ts.map +0 -1
  587. package/dist/client/specialists.js +0 -178
  588. package/dist/client/specialists.js.map +0 -1
  589. package/dist/client/tool-schema-loader.d.ts +0 -62
  590. package/dist/client/tool-schema-loader.d.ts.map +0 -1
  591. package/dist/client/tool-schema-loader.js +0 -232
  592. package/dist/client/tool-schema-loader.js.map +0 -1
  593. package/dist/client/types.d.ts +0 -327
  594. package/dist/client/types.d.ts.map +0 -1
  595. package/dist/client/types.js +0 -121
  596. package/dist/client/types.js.map +0 -1
  597. package/dist/commands/seed-config.d.ts +0 -9
  598. package/dist/commands/seed-config.d.ts.map +0 -1
  599. package/dist/commands/seed-config.js +0 -377
  600. package/dist/commands/seed-config.js.map +0 -1
  601. package/dist/commands/setup.d.ts +0 -11
  602. package/dist/commands/setup.d.ts.map +0 -1
  603. package/dist/commands/setup.js +0 -320
  604. package/dist/commands/setup.js.map +0 -1
  605. package/dist/lib/discussion-lock.d.ts +0 -42
  606. package/dist/lib/discussion-lock.d.ts.map +0 -1
  607. package/dist/lib/discussion-lock.js +0 -110
  608. package/dist/lib/discussion-lock.js.map +0 -1
  609. package/dist/mcp/signal-handler.d.ts +0 -82
  610. package/dist/mcp/signal-handler.d.ts.map +0 -1
  611. package/dist/mcp/signal-handler.js +0 -406
  612. package/dist/mcp/signal-handler.js.map +0 -1
  613. package/dist/mcp/tools/__tests__/discussion-forward.test.d.ts +0 -2
  614. package/dist/mcp/tools/__tests__/discussion-forward.test.d.ts.map +0 -1
  615. package/dist/mcp/tools/__tests__/discussion-forward.test.js +0 -218
  616. package/dist/mcp/tools/__tests__/discussion-forward.test.js.map +0 -1
  617. package/dist/mcp/tools/app-member.d.ts +0 -14
  618. package/dist/mcp/tools/app-member.d.ts.map +0 -1
  619. package/dist/mcp/tools/app-member.js +0 -195
  620. package/dist/mcp/tools/app-member.js.map +0 -1
  621. package/dist/mcp/tools/app-scaffold.d.ts +0 -14
  622. package/dist/mcp/tools/app-scaffold.d.ts.map +0 -1
  623. package/dist/mcp/tools/app-scaffold.js +0 -581
  624. package/dist/mcp/tools/app-scaffold.js.map +0 -1
  625. package/dist/mcp/tools/bot-config/constants.d.ts +0 -23
  626. package/dist/mcp/tools/bot-config/constants.d.ts.map +0 -1
  627. package/dist/mcp/tools/bot-config/constants.js +0 -94
  628. package/dist/mcp/tools/bot-config/constants.js.map +0 -1
  629. package/dist/mcp/tools/bot-config/core.d.ts +0 -253
  630. package/dist/mcp/tools/bot-config/core.d.ts.map +0 -1
  631. package/dist/mcp/tools/bot-config/core.js +0 -2456
  632. package/dist/mcp/tools/bot-config/core.js.map +0 -1
  633. package/dist/mcp/tools/bot-config/index.d.ts +0 -10
  634. package/dist/mcp/tools/bot-config/index.d.ts.map +0 -1
  635. package/dist/mcp/tools/bot-config/index.js +0 -59
  636. package/dist/mcp/tools/bot-config/index.js.map +0 -1
  637. package/dist/mcp/tools/bot-config/tools.d.ts +0 -7
  638. package/dist/mcp/tools/bot-config/tools.d.ts.map +0 -1
  639. package/dist/mcp/tools/bot-config/tools.js +0 -15
  640. package/dist/mcp/tools/bot-config/tools.js.map +0 -1
  641. package/dist/mcp/tools/bot-config/types.d.ts +0 -50
  642. package/dist/mcp/tools/bot-config/types.d.ts.map +0 -1
  643. package/dist/mcp/tools/bot-config/types.js +0 -6
  644. package/dist/mcp/tools/bot-config/types.js.map +0 -1
  645. package/dist/mcp/tools/bug-fixer-tools.d.ts +0 -45
  646. package/dist/mcp/tools/bug-fixer-tools.d.ts.map +0 -1
  647. package/dist/mcp/tools/bug-fixer-tools.js +0 -1096
  648. package/dist/mcp/tools/bug-fixer-tools.js.map +0 -1
  649. package/dist/mcp/tools/document.d.ts +0 -11
  650. package/dist/mcp/tools/document.d.ts.map +0 -1
  651. package/dist/mcp/tools/document.js +0 -741
  652. package/dist/mcp/tools/document.js.map +0 -1
  653. package/dist/mcp/tools/investigate.d.ts +0 -9
  654. package/dist/mcp/tools/investigate.d.ts.map +0 -1
  655. package/dist/mcp/tools/investigate.js +0 -254
  656. package/dist/mcp/tools/investigate.js.map +0 -1
  657. package/dist/mcp/utils/pagination.d.ts +0 -40
  658. package/dist/mcp/utils/pagination.d.ts.map +0 -1
  659. package/dist/mcp/utils/pagination.js +0 -55
  660. package/dist/mcp/utils/pagination.js.map +0 -1
  661. package/dist/modules/bug-reports/bug-config.d.ts +0 -25
  662. package/dist/modules/bug-reports/bug-config.d.ts.map +0 -1
  663. package/dist/modules/bug-reports/bug-config.js +0 -187
  664. package/dist/modules/bug-reports/bug-config.js.map +0 -1
  665. package/dist/modules/bug-reports/bug-monitor.d.ts +0 -108
  666. package/dist/modules/bug-reports/bug-monitor.d.ts.map +0 -1
  667. package/dist/modules/bug-reports/bug-monitor.js +0 -510
  668. package/dist/modules/bug-reports/bug-monitor.js.map +0 -1
  669. package/dist/modules/bug-reports/giuseppe-agent.d.ts +0 -58
  670. package/dist/modules/bug-reports/giuseppe-agent.d.ts.map +0 -1
  671. package/dist/modules/bug-reports/giuseppe-agent.js +0 -467
  672. package/dist/modules/bug-reports/giuseppe-agent.js.map +0 -1
  673. package/dist/modules/bug-reports/giuseppe-ai.d.ts +0 -83
  674. package/dist/modules/bug-reports/giuseppe-ai.d.ts.map +0 -1
  675. package/dist/modules/bug-reports/giuseppe-ai.js +0 -466
  676. package/dist/modules/bug-reports/giuseppe-ai.js.map +0 -1
  677. package/dist/modules/bug-reports/giuseppe-bot.d.ts +0 -110
  678. package/dist/modules/bug-reports/giuseppe-bot.d.ts.map +0 -1
  679. package/dist/modules/bug-reports/giuseppe-bot.js +0 -804
  680. package/dist/modules/bug-reports/giuseppe-bot.js.map +0 -1
  681. package/dist/modules/bug-reports/giuseppe-daemon.d.ts +0 -80
  682. package/dist/modules/bug-reports/giuseppe-daemon.d.ts.map +0 -1
  683. package/dist/modules/bug-reports/giuseppe-daemon.js +0 -617
  684. package/dist/modules/bug-reports/giuseppe-daemon.js.map +0 -1
  685. package/dist/modules/bug-reports/giuseppe-files.d.ts +0 -64
  686. package/dist/modules/bug-reports/giuseppe-files.d.ts.map +0 -1
  687. package/dist/modules/bug-reports/giuseppe-files.js +0 -375
  688. package/dist/modules/bug-reports/giuseppe-files.js.map +0 -1
  689. package/dist/modules/bug-reports/giuseppe-git.d.ts +0 -48
  690. package/dist/modules/bug-reports/giuseppe-git.d.ts.map +0 -1
  691. package/dist/modules/bug-reports/giuseppe-git.js +0 -298
  692. package/dist/modules/bug-reports/giuseppe-git.js.map +0 -1
  693. package/dist/modules/bug-reports/giuseppe-lsp.d.ts +0 -113
  694. package/dist/modules/bug-reports/giuseppe-lsp.d.ts.map +0 -1
  695. package/dist/modules/bug-reports/giuseppe-lsp.js +0 -485
  696. package/dist/modules/bug-reports/giuseppe-lsp.js.map +0 -1
  697. package/dist/modules/bug-reports/giuseppe-prompt.d.ts +0 -5
  698. package/dist/modules/bug-reports/giuseppe-prompt.d.ts.map +0 -1
  699. package/dist/modules/bug-reports/giuseppe-prompt.js +0 -94
  700. package/dist/modules/bug-reports/giuseppe-prompt.js.map +0 -1
  701. package/dist/modules/bug-reports/index.d.ts +0 -77
  702. package/dist/modules/bug-reports/index.d.ts.map +0 -1
  703. package/dist/modules/bug-reports/index.js +0 -215
  704. package/dist/modules/bug-reports/index.js.map +0 -1
  705. package/dist/modules/bug-reports/pending-classification-registry.d.ts +0 -28
  706. package/dist/modules/bug-reports/pending-classification-registry.d.ts.map +0 -1
  707. package/dist/modules/bug-reports/pending-classification-registry.js +0 -50
  708. package/dist/modules/bug-reports/pending-classification-registry.js.map +0 -1
  709. package/dist/modules/bug-reports/pending-fix-registry.d.ts +0 -30
  710. package/dist/modules/bug-reports/pending-fix-registry.d.ts.map +0 -1
  711. package/dist/modules/bug-reports/pending-fix-registry.js +0 -42
  712. package/dist/modules/bug-reports/pending-fix-registry.js.map +0 -1
  713. package/dist/modules/bug-reports/pending-registry.d.ts +0 -27
  714. package/dist/modules/bug-reports/pending-registry.d.ts.map +0 -1
  715. package/dist/modules/bug-reports/pending-registry.js +0 -49
  716. package/dist/modules/bug-reports/pending-registry.js.map +0 -1
  717. package/dist/modules/bug-reports/types.d.ts +0 -123
  718. package/dist/modules/bug-reports/types.d.ts.map +0 -1
  719. package/dist/modules/bug-reports/types.js +0 -9
  720. package/dist/modules/bug-reports/types.js.map +0 -1
  721. package/dist/plugins/bug-fixer/index.d.ts +0 -2
  722. package/dist/plugins/bug-fixer/index.d.ts.map +0 -1
  723. package/dist/plugins/bug-fixer/index.js +0 -18
  724. package/dist/plugins/bug-fixer/index.js.map +0 -1
  725. package/dist/plugins/bug-fixer/tools.d.ts +0 -45
  726. package/dist/plugins/bug-fixer/tools.d.ts.map +0 -1
  727. package/dist/plugins/bug-fixer/tools.js +0 -1096
  728. package/dist/plugins/bug-fixer/tools.js.map +0 -1
  729. package/dist/plugins/vipunen/__tests__/tools.test.d.ts +0 -10
  730. package/dist/plugins/vipunen/__tests__/tools.test.d.ts.map +0 -1
  731. package/dist/plugins/vipunen/__tests__/tools.test.js +0 -646
  732. package/dist/plugins/vipunen/__tests__/tools.test.js.map +0 -1
  733. package/dist/routes/agents.d.ts +0 -44
  734. package/dist/routes/agents.d.ts.map +0 -1
  735. package/dist/routes/agents.js +0 -311
  736. package/dist/routes/agents.js.map +0 -1
  737. package/dist/services/agent-credential-store.d.ts +0 -73
  738. package/dist/services/agent-credential-store.d.ts.map +0 -1
  739. package/dist/services/agent-credential-store.js +0 -212
  740. package/dist/services/agent-credential-store.js.map +0 -1
  741. package/dist/stdio-server.d.ts +0 -14
  742. package/dist/stdio-server.d.ts.map +0 -1
  743. package/dist/stdio-server.js +0 -101
  744. package/dist/stdio-server.js.map +0 -1
  745. package/dist/workspace/context.d.ts +0 -148
  746. package/dist/workspace/context.d.ts.map +0 -1
  747. package/dist/workspace/context.js +0 -339
  748. package/dist/workspace/context.js.map +0 -1
  749. package/dist/workspace/credentials.d.ts +0 -55
  750. package/dist/workspace/credentials.d.ts.map +0 -1
  751. package/dist/workspace/credentials.js +0 -239
  752. package/dist/workspace/credentials.js.map +0 -1
  753. package/dist/workspace/index.d.ts +0 -21
  754. package/dist/workspace/index.d.ts.map +0 -1
  755. package/dist/workspace/index.js +0 -45
  756. package/dist/workspace/index.js.map +0 -1
  757. package/dist/workspace/loader.d.ts +0 -27
  758. package/dist/workspace/loader.d.ts.map +0 -1
  759. package/dist/workspace/loader.js +0 -222
  760. package/dist/workspace/loader.js.map +0 -1
  761. package/dist/workspace/schema.d.ts +0 -37
  762. package/dist/workspace/schema.d.ts.map +0 -1
  763. package/dist/workspace/schema.js +0 -192
  764. package/dist/workspace/schema.js.map +0 -1
@@ -51,9 +51,14 @@ const logger_1 = require("./lib/logger");
51
51
  const config_1 = require("./config");
52
52
  const UserContextCache_1 = require("./mcp/UserContextCache");
53
53
  const tool_registry_1 = require("./mcp/tool-registry");
54
+ const tool_profiles_1 = require("./mcp/tool-profiles");
54
55
  const session_store_1 = require("./mcp/session-store");
55
56
  const webhook_handler_1 = require("./mcp/webhook-handler");
57
+ const workspace_admin_store_1 = require("./mcp/workspace-admin-store");
58
+ const rate_limit_1 = require("./public-chat/rate-limit");
59
+ const hailer_clients_1 = require("./mcp/hailer-clients");
56
60
  const vipunen_1 = require("./plugins/vipunen");
61
+ const public_chat_1 = require("./public-chat");
57
62
  // Load MCP instructions for Claude App
58
63
  // Try dist/mcp/ first (production), then src/mcp/ (development)
59
64
  let mcpInstructions;
@@ -83,6 +88,9 @@ class MCPServerService {
83
88
  config;
84
89
  toolRegistry;
85
90
  appConfig;
91
+ /** sessionId → profile + timestamp. Set at MCP initialize when clientInfo identifies an SDK-aware client. */
92
+ mcpClientProfiles = new Map();
93
+ static PROFILE_TTL_MS = 60 * 60 * 1000; // 1 hour
86
94
  constructor(config) {
87
95
  this.config = config;
88
96
  this.toolRegistry = config.toolRegistry;
@@ -100,6 +108,14 @@ class MCPServerService {
100
108
  });
101
109
  }
102
110
  setupMiddleware() {
111
+ // Trust all private-range hops (ingress, hailer-api /proxy/mcp) so req.ip
112
+ // resolves to the first PUBLIC address in X-Forwarded-For regardless of
113
+ // how many internal proxies the request traversed. The public ingress
114
+ // (ALB in prod, Traefik in dev) always appends the real client IP as the
115
+ // rightmost entry, and every internal hop is loopback/RFC1918, so this
116
+ // is hop-count-agnostic and spoof-safe for internet clients. Required
117
+ // for per-visitor rate-limit buckets.
118
+ this.app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal']);
103
119
  // Configure CORS - empty array means allow all origins (like original cors())
104
120
  if (this.config.corsOrigins.length === 0) {
105
121
  this.app.use((0, cors_1.default)());
@@ -322,7 +338,8 @@ class MCPServerService {
322
338
  });
323
339
  // Legacy POST callback for backwards compatibility
324
340
  this.app.post(`${API_PREFIX}/oauth/callback`, express_1.default.urlencoded({ extended: true }), (req, res) => {
325
- req.logger.debug('OAuth callback POST body', { body: req.body });
341
+ // Body contains access_token (a credential) log only field names, not values.
342
+ req.logger.debug('OAuth callback POST received', { fields: Object.keys(req.body ?? {}) });
326
343
  const { access_token, error } = req.body;
327
344
  if (error) {
328
345
  return res.status(400).send(`<html><body><h1>Authorization Failed</h1><p>Error: ${this.escapeHtml(String(error))}</p></body></html>`);
@@ -363,35 +380,84 @@ class MCPServerService {
363
380
  const webhookPath = (0, webhook_handler_1.getWebhookPath)();
364
381
  if (webhookPath) {
365
382
  // POST /webhook/{token} - Receives updates from Hailer workflow webhooks
366
- this.app.post(webhookPath, (req, res) => {
383
+ this.app.post(webhookPath, async (req, res) => {
367
384
  req.logger.debug('Bot config webhook received', {
368
385
  activityId: req.body?._id,
369
386
  activityName: req.body?.name,
370
387
  workspaceId: req.body?.cid,
371
388
  });
389
+ // Always return 200 so Hailer doesn't auto-suspend webhook delivery
390
+ // after consecutive non-2xx responses. Errors are logged; the body
391
+ // carries `success: false` + `error` for anyone polling the status
392
+ // endpoint.
372
393
  try {
373
- const result = (0, webhook_handler_1.handleBotConfigWebhook)(req.body);
394
+ const result = await (0, webhook_handler_1.handleBotConfigWebhook)(req.body);
374
395
  if (result.success) {
375
396
  req.logger.debug('Bot config updated via webhook', {
376
397
  action: result.action,
377
398
  workspaceId: result.workspaceId,
378
399
  botType: result.botType,
379
400
  });
380
- res.status(200).json(result);
381
401
  }
382
402
  else {
383
- req.logger.warn('Bot config webhook failed', { error: result.error });
384
- res.status(400).json(result);
403
+ req.logger.warn('Bot config webhook handled with non-success', { error: result.error });
385
404
  }
405
+ res.status(200).json(result);
386
406
  }
387
407
  catch (error) {
388
408
  req.logger.error('Bot config webhook error', { error });
389
- res.status(500).json({
409
+ res.status(200).json({
390
410
  success: false,
391
411
  error: error instanceof Error ? error.message : 'Internal error',
392
412
  });
393
413
  }
394
414
  });
415
+ // DELETE /webhook/{token}/bot/:activityId?workspaceId=X&actorUid=Y&actorName=Z
416
+ // Called by AI Hub when the user deletes a bot, BEFORE the activity is
417
+ // removed in Hailer. Tears down the Hailer user account (via the bot's
418
+ // own session) and removes the local config entry, so deletion in AI Hub
419
+ // is propagated atomically rather than waiting for the reconciler tick.
420
+ // actorUid/actorName are optional and used purely for audit attribution
421
+ // — the actual operations run with the admin API key.
422
+ this.app.delete(`${webhookPath}/bot/:activityId`, async (req, res) => {
423
+ const activityId = req.params.activityId;
424
+ const workspaceId = typeof req.query.workspaceId === 'string' ? req.query.workspaceId : '';
425
+ if (!workspaceId) {
426
+ res.status(400).json({ error: 'workspaceId query param required' });
427
+ return;
428
+ }
429
+ const actor = {
430
+ uid: typeof req.query.actorUid === 'string' ? req.query.actorUid : undefined,
431
+ name: typeof req.query.actorName === 'string' ? req.query.actorName : undefined,
432
+ };
433
+ try {
434
+ const outcome = await (0, webhook_handler_1.destroyBot)(workspaceId, activityId, actor);
435
+ if (!outcome.teardownOk) {
436
+ // 502: the config entry is gone and AI Hub will still delete
437
+ // the activity, but the Hailer user account was not torn down
438
+ // (no listener, or listener threw). Operator needs to know.
439
+ res.status(502).json({
440
+ success: false,
441
+ removed: !!outcome.removed,
442
+ email: outcome.removed?.email ?? null,
443
+ error: outcome.teardownError ?? 'teardown skipped',
444
+ });
445
+ return;
446
+ }
447
+ res.status(200).json({
448
+ success: true,
449
+ removed: !!outcome.removed,
450
+ email: outcome.removed?.email ?? null,
451
+ });
452
+ }
453
+ catch (err) {
454
+ req.logger.error('Bot destroy failed', { workspaceId, activityId, actor, err });
455
+ res.status(500).json({
456
+ success: false,
457
+ error: err instanceof Error ? err.message : 'Internal error',
458
+ });
459
+ }
460
+ });
395
461
  // GET /webhook/{token}/status - Status endpoint to see all workspace configs
396
462
  this.app.get(`${webhookPath}/status`, (_req, res) => {
397
463
  const configs = (0, webhook_handler_1.listWorkspaceConfigs)();
@@ -411,6 +477,179 @@ class MCPServerService {
411
477
  else {
412
478
  this.logger.debug('Webhook endpoint disabled (no WEBHOOK_TOKEN)');
413
479
  }
480
+ const adminCheckCacheTtlMs = 3000;
481
+ const adminCheckCacheMax = 1000;
482
+ const adminCheckCache = new Map();
483
+ const sweepAdminCheckCache = (now) => {
484
+ for (const [staleKey, entry] of adminCheckCache) {
485
+ if (now - entry.time >= adminCheckCacheTtlMs) {
486
+ adminCheckCache.delete(staleKey);
487
+ }
488
+ }
489
+ };
490
+ // Bounded insert: TTL is otherwise only checked on read, so attacker-
491
+ // supplied random workspaceIds would grow the map without bound. Sweep
492
+ // expired entries when full, then evict the oldest (Maps iterate in
493
+ // insertion order) as a last resort.
494
+ const setAdminCheckCache = (key, body) => {
495
+ const now = Date.now();
496
+ if (adminCheckCache.size >= adminCheckCacheMax) {
497
+ sweepAdminCheckCache(now);
498
+ }
499
+ const oldestKey = adminCheckCache.keys().next().value;
500
+ if (adminCheckCache.size >= adminCheckCacheMax && oldestKey) {
501
+ adminCheckCache.delete(oldestKey);
502
+ }
503
+ adminCheckCache.set(key, { body, time: now });
504
+ };
505
+ // Route-scoped CORS: AI Hub polls /check with `credentials: 'include'`
506
+ // through api.hailer.com /proxy/mcp, and the proxy copies upstream
507
+ // response headers verbatim — so the global allow-all
508
+ // `Access-Control-Allow-Origin: *` from setupMiddleware would reach the
509
+ // browser and make it reject every credentialed response. Reflect only
510
+ // the AI Hub app origins, with credentials enabled. The POST is a
511
+ // top-level form navigation (no CORS), so only the GET needs this.
512
+ const adminAuthorizeCors = (0, cors_1.default)({
513
+ origin: config_1.environment.ADMIN_CORS_ORIGINS,
514
+ credentials: true,
515
+ });
516
+ // /check returns the stored admin's uid (opaque ObjectId) so AI Hub can
517
+ // compare against the current user and distinguish "you are connected"
518
+ // from "another admin connected this workspace." Name/email are NOT
519
+ // returned — this endpoint is reachable over plaintext HTTP given only
520
+ // the workspaceId, and we don't want admin PII traveling on the wire.
521
+ this.app.get('/admin-authorize/check', adminAuthorizeCors, async (req, res) => {
522
+ const workspaceId = typeof req.query.workspaceId === 'string' ? req.query.workspaceId : '';
523
+ if (!workspaceId) {
524
+ res.status(400).json({ error: 'workspaceId required' });
525
+ return;
526
+ }
527
+ // Generous per-IP budget: the AI Hub popup polls every ~1.5s for up
528
+ // to 120s (~81 requests per full flow incl. the baseline probe);
529
+ // 250/hr fits three timed-out flows plus app-startup checks. Keyed
530
+ // by IP only — keying by IP+workspaceId would let one IP mint
531
+ // unlimited fresh buckets via random workspaceIds. AI Hub treats
532
+ // non-200 as { hasKey: false } and keeps polling, so 429 degrades
533
+ // gracefully. Reachable only via the session-gated /proxy/mcp in
534
+ // prod, so this is defense-in-depth, not the primary gate.
535
+ const rate = (0, rate_limit_1.checkRate)(`admin-check:${req.ip ?? 'unknown'}`, 250);
536
+ if (!rate.ok) {
537
+ res.status(429).json({ error: 'rate_limited', retryAfterSec: rate.retryAfterSec });
538
+ return;
539
+ }
540
+ const cached = adminCheckCache.get(workspaceId);
541
+ if (cached && Date.now() - cached.time < adminCheckCacheTtlMs) {
542
+ res.json(cached.body);
543
+ return;
544
+ }
545
+ const record = await (0, workspace_admin_store_1.getValidatedAdminRecord)(workspaceId);
546
+ let body = { hasKey: false };
547
+ if (record) {
548
+ body = {
549
+ hasKey: true,
550
+ installedAt: record.installedAt,
551
+ expiresAt: record.expiresAt,
552
+ admin: { uid: record.uid },
553
+ };
554
+ }
555
+ setAdminCheckCache(workspaceId, body);
556
+ res.json(body);
557
+ });
558
+ this.app.post('/admin-authorize', express_1.default.urlencoded({ extended: true }), async (req, res) => {
559
+ const completeUrl = (status, message) => {
560
+ const base = `${config_1.environment.HAILER_APP_URL}/#/authorize/complete?status=${status}`;
561
+ return message ? `${base}&message=${encodeURIComponent(message)}` : base;
562
+ };
563
+ try {
564
+ // Rate-limit the expensive write (each call runs live core.init
565
+ // validation). Namespaced key so it has its own per-IP budget,
566
+ // separate from the public-chat limiter sharing this module.
567
+ const rate = (0, rate_limit_1.checkRate)(`admin-authorize:${req.ip ?? 'unknown'}`);
568
+ if (!rate.ok) {
569
+ req.logger.warn('Admin authorize: rate limited', { retryAfterSec: rate.retryAfterSec });
570
+ res.redirect(303, completeUrl('error', 'Too many attempts — please wait a moment and try again.'));
571
+ return;
572
+ }
573
+ const workspaceId = typeof req.query.workspaceId === 'string' ? req.query.workspaceId : '';
574
+ const apiKey = typeof req.body?.apiKey === 'string' ? req.body.apiKey : '';
575
+ req.logger.debug('Admin authorize POST received', {
576
+ workspaceId,
577
+ hasApiKey: !!apiKey,
578
+ contentType: req.headers['content-type'],
579
+ bodyKeys: req.body ? Object.keys(req.body) : [],
580
+ queryKeys: Object.keys(req.query),
581
+ });
582
+ if (!workspaceId || !apiKey) {
583
+ res.redirect(303, completeUrl('error', 'Missing workspaceId or apiKey'));
584
+ return;
585
+ }
586
+ // Validate the key by resolving the admin's identity, and capture it for audit/display.
587
+ let identity;
588
+ let targetRole;
589
+ let adminClient;
590
+ try {
591
+ adminClient = await (0, hailer_clients_1.createHailerClientByApiKey)(apiKey);
592
+ identity = await (0, workspace_admin_store_1.resolveAdminIdentity)(adminClient);
593
+ targetRole = identity.uid ? await (0, workspace_admin_store_1.resolveRoleInWorkspace)(adminClient, identity.uid, workspaceId) : undefined;
594
+ }
595
+ catch (validateErr) {
596
+ req.logger.warn('Admin authorize: API key validation failed', {
597
+ workspaceId,
598
+ error: validateErr instanceof Error ? validateErr.message : validateErr,
599
+ });
600
+ res.redirect(303, completeUrl('error', 'API key validation failed'));
601
+ return;
602
+ }
603
+ if (!identity.uid) {
604
+ res.redirect(303, completeUrl('error', 'API key did not resolve to a user'));
605
+ return;
606
+ }
607
+ if (!identity.emailVerified) {
608
+ // Unverified admin email → Hailer blocks the bot invite (403
609
+ // 'Validate your email.') → reinvite doom loop. Refuse the key
610
+ // until the admin verifies (fail-closed on missing/false).
611
+ req.logger.warn('Admin authorize: email not verified — refusing to persist', {
612
+ workspaceId, adminUid: identity.uid,
613
+ });
614
+ res.redirect(303, completeUrl('error', 'Please verify your Hailer email before connecting this workspace.'));
615
+ return;
616
+ }
617
+ // Authorize the key against the target workspace. This endpoint is
618
+ // reachable publicly via the api.hailer.com /proxy/mcp service, so we
619
+ // must not store a key for a workspace it is not entitled to. The
620
+ // user must be an admin/owner of the TARGET workspace — checked
621
+ // directly via v2.network.get, NOT via identity.workspaceId: that is
622
+ // the key's ambient current-workspace pointer (init.network._id),
623
+ // which follows last-viewed/switchEcosystem and falsely rejects
624
+ // admins whose pointer sits in another workspace.
625
+ if (targetRole !== 'admin' && targetRole !== 'owner') {
626
+ req.logger.warn('Admin authorize: user is not an admin/owner of the target workspace', {
627
+ workspaceId, adminUid: identity.uid, targetRole, ambientWorkspaceId: identity.workspaceId,
628
+ });
629
+ res.redirect(303, completeUrl('error', 'Only workspace admins or owners can connect bot credentials'));
630
+ return;
631
+ }
632
+ // The popup path bypasses webhooks, so stale 'email-not-verified'
633
+ // markers written by earlier webhook rejections never get cleared
634
+ // — AI Hub's pill stays wedged red even with a verified key
635
+ // stored. Sweep BEFORE persisting so /check flips to hasKey only
636
+ // once markers are gone. clearAdminKeyErrors never throws.
637
+ if (adminClient) {
638
+ await (0, webhook_handler_1.clearAdminKeyErrors)(adminClient, workspaceId);
639
+ }
640
+ (0, workspace_admin_store_1.persistAdminCredentials)(workspaceId, apiKey, identity);
641
+ adminCheckCache.delete(workspaceId);
642
+ req.logger.info('Admin credentials stored via authorize flow', {
643
+ workspaceId,
644
+ adminUid: identity.uid,
645
+ });
646
+ res.redirect(303, completeUrl('success'));
647
+ }
648
+ catch (error) {
649
+ req.logger.error('Admin authorize failed', { error });
650
+ res.redirect(303, completeUrl('error', 'Storage failed'));
651
+ }
652
+ });
414
653
  // ===== Daemon status endpoint =====
415
654
  this.app.get('/daemon/status', (_, res) => {
416
655
  if (!this.config.getDaemonStatus) {
@@ -426,9 +665,9 @@ class MCPServerService {
426
665
  });
427
666
  // ===== Hailer MCP endpoint — Direct API key auth (for Claude Code, mcp-remote, SDK) =====
428
667
  // Restored original mcpHandler from pre-Cowork era with BOT_INTERNAL filtering and strict access control
429
- const mcpHandler = async (req, res, apiKeyOverride) => {
668
+ const mcpHandler = async (req, res, apiKeyOverride, profile) => {
430
669
  const apiKey = apiKeyOverride || req.query.apiKey;
431
- req.logger.debug('MCP request received', { method: req.body?.method, apiKey: apiKey?.slice(0, 8) + '...' });
670
+ req.logger.debug('MCP request received', { method: req.body?.method, apiKey: apiKey?.slice(0, 8) + '...', profile });
432
671
  try {
433
672
  const mcpRequest = req.body;
434
673
  if (!mcpRequest.params) {
@@ -438,7 +677,13 @@ class MCPServerService {
438
677
  if (mcpRequest.method === 'tools/list') {
439
678
  req.logger.debug('Handling tools/list request');
440
679
  let filterConfig;
441
- if (apiKey) {
680
+ // Resolve effective profile: explicit route override OR session-tracked clientInfo
681
+ const effectiveProfile = this.resolveSessionProfile(req, profile);
682
+ if (effectiveProfile) {
683
+ filterConfig = (0, tool_profiles_1.profileFilterConfig)(effectiveProfile);
684
+ req.logger.debug('Using profile tool allowlist', { profile: effectiveProfile, source: profile ? 'route' : 'clientInfo' });
685
+ }
686
+ else if (apiKey) {
442
687
  try {
443
688
  const agentConfig = this.appConfig.getClientConfig(apiKey);
444
689
  if (agentConfig.allowedTools || agentConfig.allowedGroups) {
@@ -455,12 +700,10 @@ class MCPServerService {
455
700
  // BOT_INTERNAL filtering: only include if explicitly requested (for daemons)
456
701
  const includeBotInternal = mcpRequest.params?.includeBotInternal === true;
457
702
  if (!filterConfig) {
458
- filterConfig = {
459
- allowedGroups: [tool_registry_1.ToolGroup.READ, tool_registry_1.ToolGroup.WRITE, tool_registry_1.ToolGroup.PLAYGROUND]
460
- };
461
- req.logger.debug('Using default tool filter (excludes NUCLEAR and BOT_INTERNAL)');
703
+ filterConfig = (0, tool_profiles_1.profileFilterConfig)(config_1.environment.MCP_DEFAULT_PROFILE);
704
+ req.logger.debug('Using default profile tool filter', { profile: config_1.environment.MCP_DEFAULT_PROFILE });
462
705
  }
463
- else if (filterConfig.allowedGroups) {
706
+ if (filterConfig.allowedGroups) {
464
707
  filterConfig.allowedGroups = filterConfig.allowedGroups.filter(g => (includeBotInternal || g !== tool_registry_1.ToolGroup.BOT_INTERNAL) &&
465
708
  (config_1.environment.ENABLE_NUCLEAR_TOOLS || g !== tool_registry_1.ToolGroup.NUCLEAR));
466
709
  }
@@ -493,13 +736,30 @@ class MCPServerService {
493
736
  if (!this.canAccessToolStrict(name, apiKey)) {
494
737
  return this.sendMcpError(res, mcpRequest.id, -32603, `Access denied to tool: ${name}`, 403);
495
738
  }
739
+ // Profile enforcement — explicit route/clientInfo profile, else the
740
+ // default profile when no per-account config governs this key
741
+ if (!this.canAccessToolForProfile(name, apiKey, this.resolveSessionProfile(req, profile))) {
742
+ return this.sendMcpError(res, mcpRequest.id, -32603, `Tool not available in this connection's profile: ${name}`, 403);
743
+ }
496
744
  const userContext = await UserContextCache_1.UserContextCache.getContext(apiKey);
497
745
  result = await this.toolRegistry.executeTool(name, args, userContext);
498
746
  }
499
747
  else if (mcpRequest.method === 'initialize') {
500
748
  const sessionId = `session-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
501
749
  res.setHeader('Mcp-Session-Id', sessionId);
502
- req.logger.info('Client connected', { sessionId, clientInfo: mcpRequest.params?.clientInfo });
750
+ const clientInfo = mcpRequest.params?.clientInfo;
751
+ req.logger.info('Client connected', { sessionId, clientInfo });
752
+ // Auto-detect SDK-aware clients (e.g. OpenCode in Hailer Studio sessions)
753
+ if (clientInfo?.name === 'opencode') {
754
+ this.mcpClientProfiles.set(sessionId, { profile: 'sdk', ts: Date.now() });
755
+ // Lazy TTL cleanup — drop entries older than PROFILE_TTL_MS on each insert
756
+ const cutoff = Date.now() - MCPServerService.PROFILE_TTL_MS;
757
+ for (const [sid, entry] of this.mcpClientProfiles) {
758
+ if (entry.ts < cutoff)
759
+ this.mcpClientProfiles.delete(sid);
760
+ }
761
+ req.logger.debug('Assigned sdk profile to session', { sessionId, clientName: clientInfo.name });
762
+ }
503
763
  result = {
504
764
  protocolVersion: '2024-11-05',
505
765
  capabilities: { tools: {} },
@@ -532,18 +792,25 @@ class MCPServerService {
532
792
  }
533
793
  catch (error) {
534
794
  const errorMessage = error instanceof Error ? error.message : String(error);
795
+ const apiKeyForLog = typeof req.query.apiKey === 'string'
796
+ ? req.query.apiKey.slice(0, 8) + '...'
797
+ : undefined;
535
798
  if (errorMessage.includes('Multi-workspace credentials detected')) {
536
- req.logger.warn('Multi-workspace credentials blocked', { apiKey: req.query.apiKey });
799
+ req.logger.warn('Multi-workspace credentials blocked', { apiKey: apiKeyForLog });
537
800
  this.sendMcpError(res, req.body?.id || null, -32001, errorMessage, 200);
538
801
  }
539
802
  else {
540
- req.logger.error('MCP handler error', error, { apiKey: req.query.apiKey });
803
+ req.logger.error('MCP handler error', error, { apiKey: apiKeyForLog });
541
804
  this.sendMcpError(res, req.body?.id || null, -32000, `Server error: ${errorMessage}`, 500);
542
805
  }
543
806
  }
544
807
  };
545
808
  // Route 1: /api/mcp?apiKey=xxx (standard format)
546
809
  this.app.post('/api/mcp', (req, res) => mcpHandler(req, res));
810
+ // Route 1b: /api/studio/mcp?apiKey=xxx — Studio sessions (SDK-aware tool surface)
811
+ this.app.post('/api/studio/mcp', (req, res) => mcpHandler(req, res, undefined, 'sdk'));
812
+ // Route 1c: /api/sdk/mcp?apiKey=xxx — canonical alias for SDK projects (same surface as Studio)
813
+ this.app.post('/api/sdk/mcp', (req, res) => mcpHandler(req, res, undefined, 'sdk'));
547
814
  // Route 2: /:apiKey (simplified format - API key as path)
548
815
  // Matches 16-64 char alphanumeric keys, but ONLY for MCP requests (has jsonrpc field)
549
816
  this.app.post('/:apiKey([a-zA-Z0-9_-]{16,64})', (req, res, next) => {
@@ -675,6 +942,10 @@ class MCPServerService {
675
942
  label: 'Cowork'
676
943
  });
677
944
  });
945
+ // Public chat (anonymous) — login-page demo chatbot.
946
+ const publicChatRegistered = (0, public_chat_1.registerPublicChatRoutes)(this.app, {
947
+ anthropicApiKey: config_1.environment.ANTHROPIC_API_KEY,
948
+ });
678
949
  this.logger.debug('Routes configured', {
679
950
  routes: [
680
951
  '/health',
@@ -683,6 +954,10 @@ class MCPServerService {
683
954
  '/:apiKey (Hailer — API key as path)',
684
955
  `${API_PREFIX}/mcp (Cowork — OAuth)`,
685
956
  '/api/vipunen (Vipunen — Bearer key)',
957
+ ...(publicChatRegistered ? [
958
+ `${public_chat_1.PUBLIC_CHAT_ROUTE} (public chat — anonymous)`,
959
+ `${public_chat_1.PUBLIC_CHAT_AUTHORIZE_ROUTE} (public chat — graduation)`,
960
+ ] : []),
686
961
  '/.well-known/oauth-authorization-server',
687
962
  '/.well-known/oauth-protected-resource',
688
963
  `${API_PREFIX}/oauth/register`,
@@ -718,14 +993,15 @@ class MCPServerService {
718
993
  return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
719
994
  }
720
995
  /**
721
- * Strict access control for /api/mcp — returns false on catch (no config = no access)
722
- */
996
+ * Strict access control for /api/mcp — returns false on catch (no config = no access)
997
+ */
723
998
  canAccessToolStrict(toolName, apiKey) {
724
999
  // User API Keys aren't in CLIENT_CONFIGS — apply permissive access (non-NUCLEAR)
725
1000
  if (apiKey.startsWith('userapikey_')) {
726
1001
  const tool = this.toolRegistry.getTool(toolName);
727
- if (!tool)
1002
+ if (!tool) {
728
1003
  return false;
1004
+ }
729
1005
  if (tool.group === tool_registry_1.ToolGroup.NUCLEAR && !config_1.environment.ENABLE_NUCLEAR_TOOLS) {
730
1006
  return false;
731
1007
  }
@@ -747,8 +1023,8 @@ class MCPServerService {
747
1023
  }
748
1024
  }
749
1025
  /**
750
- * Permissive access control for Cowork — allows non-NUCLEAR tools on catch (OAuth sessions)
751
- */
1026
+ * Permissive access control for Cowork — allows non-NUCLEAR tools on catch (OAuth sessions)
1027
+ */
752
1028
  canAccessToolPermissive(toolName, apiKey) {
753
1029
  try {
754
1030
  const agentConfig = this.appConfig.getClientConfig(apiKey);
@@ -763,8 +1039,9 @@ class MCPServerService {
763
1039
  }
764
1040
  catch {
765
1041
  const tool = this.toolRegistry.getTool(toolName);
766
- if (!tool)
1042
+ if (!tool) {
767
1043
  return false;
1044
+ }
768
1045
  if (tool.group === tool_registry_1.ToolGroup.NUCLEAR && !config_1.environment.ENABLE_NUCLEAR_TOOLS) {
769
1046
  return false;
770
1047
  }
@@ -772,9 +1049,53 @@ class MCPServerService {
772
1049
  }
773
1050
  }
774
1051
  /**
775
- * Cowork MCP JSON-RPC handler for /api/cowork/mcp (OAuth multi-user).
776
- * Permissive access control, contextType filter, OAuth 401 flow.
777
- */
1052
+ * Resolve the connection's tool profile: explicit route override first,
1053
+ * else the session-tracked profile assigned at MCP initialize (clientInfo).
1054
+ */
1055
+ resolveSessionProfile(req, routeProfile) {
1056
+ if (routeProfile) {
1057
+ return routeProfile;
1058
+ }
1059
+ const sessionHeader = req.headers['mcp-session-id'];
1060
+ const sessionId = Array.isArray(sessionHeader) ? sessionHeader[0] : sessionHeader;
1061
+ if (!sessionId) {
1062
+ return undefined;
1063
+ }
1064
+ const entry = this.mcpClientProfiles.get(sessionId);
1065
+ if (entry && Date.now() - entry.ts < MCPServerService.PROFILE_TTL_MS) {
1066
+ return entry.profile;
1067
+ }
1068
+ return undefined;
1069
+ }
1070
+ /**
1071
+ * Profile enforcement for tools/call. An explicit route/clientInfo profile
1072
+ * always governs. Otherwise per-account allowedTools/allowedGroups config
1073
+ * takes precedence (already enforced by canAccessToolStrict/Permissive);
1074
+ * keys without explicit config fall back to the server's default profile.
1075
+ */
1076
+ canAccessToolForProfile(toolName, apiKey, explicitProfile) {
1077
+ const tool = this.toolRegistry.getTool(toolName);
1078
+ if (!tool) {
1079
+ return false;
1080
+ }
1081
+ if (explicitProfile) {
1082
+ return (0, tool_profiles_1.isToolAllowedForProfile)(explicitProfile, tool);
1083
+ }
1084
+ try {
1085
+ const agentConfig = this.appConfig.getClientConfig(apiKey);
1086
+ if (agentConfig.allowedTools || agentConfig.allowedGroups) {
1087
+ return true;
1088
+ }
1089
+ }
1090
+ catch {
1091
+ // No per-account config — default profile governs
1092
+ }
1093
+ return (0, tool_profiles_1.isToolAllowedForProfile)(config_1.environment.MCP_DEFAULT_PROFILE, tool);
1094
+ }
1095
+ /**
1096
+ * Cowork MCP JSON-RPC handler for /api/cowork/mcp (OAuth multi-user).
1097
+ * Permissive access control, contextType filter, OAuth 401 flow.
1098
+ */
778
1099
  async handleCoworkMcp(req, res, options) {
779
1100
  req.logger.debug(`${options.label} MCP request received`, { method: req.body?.method });
780
1101
  try {
@@ -805,12 +1126,10 @@ class MCPServerService {
805
1126
  }
806
1127
  }
807
1128
  if (!filterConfig) {
808
- filterConfig = {
809
- allowedGroups: [tool_registry_1.ToolGroup.READ, tool_registry_1.ToolGroup.WRITE, tool_registry_1.ToolGroup.PLAYGROUND]
810
- };
811
- req.logger.debug('Using default tool filter (excludes NUCLEAR)');
1129
+ filterConfig = (0, tool_profiles_1.profileFilterConfig)(config_1.environment.MCP_DEFAULT_PROFILE);
1130
+ req.logger.debug('Using default profile tool filter', { profile: config_1.environment.MCP_DEFAULT_PROFILE });
812
1131
  }
813
- else if (filterConfig.allowedGroups) {
1132
+ if (filterConfig.allowedGroups) {
814
1133
  filterConfig.allowedGroups = filterConfig.allowedGroups.filter(g => (config_1.environment.ENABLE_NUCLEAR_TOOLS || g !== tool_registry_1.ToolGroup.NUCLEAR));
815
1134
  }
816
1135
  result = {
@@ -847,6 +1166,11 @@ class MCPServerService {
847
1166
  if (!this.canAccessToolPermissive(name, apiKey)) {
848
1167
  return this.sendMcpError(res, mcpRequest.id, -32603, `Access denied to tool: ${name}`, 403);
849
1168
  }
1169
+ // Profile enforcement — Cowork has no route/clientInfo profile, so
1170
+ // per-account config governs, else the default profile
1171
+ if (!this.canAccessToolForProfile(name, apiKey)) {
1172
+ return this.sendMcpError(res, mcpRequest.id, -32603, `Tool not available in this connection's profile: ${name}`, 403);
1173
+ }
850
1174
  if (contextType === 'none') {
851
1175
  return this.sendMcpError(res, mcpRequest.id, -32602, `Tool not found: ${name}`, 404);
852
1176
  }
@@ -894,8 +1218,8 @@ class MCPServerService {
894
1218
  }
895
1219
  }
896
1220
  /**
897
- * Send MCP success response via SSE
898
- */
1221
+ * Send MCP success response via SSE
1222
+ */
899
1223
  sendMcpResult(res, id, result) {
900
1224
  const response = { jsonrpc: '2.0', result, id };
901
1225
  res.setHeader('Content-Type', 'text/event-stream');
@@ -905,8 +1229,8 @@ class MCPServerService {
905
1229
  res.end();
906
1230
  }
907
1231
  /**
908
- * Send MCP error response
909
- */
1232
+ * Send MCP error response
1233
+ */
910
1234
  sendMcpError(res, id, code, message, httpStatus) {
911
1235
  const errorResponse = {
912
1236
  jsonrpc: '2.0',