@hailer/mcp 1.1.16 → 1.1.17-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/.claude/CLAUDE.md +117 -320
  2. package/.claude/commands/app-squad.md +86 -90
  3. package/.claude/commands/audit-squad.md +19 -19
  4. package/.claude/commands/autoplan.md +3 -3
  5. package/.claude/commands/cleanup-squad.md +16 -16
  6. package/.claude/commands/config-squad.md +30 -30
  7. package/.claude/commands/crud-squad.md +23 -23
  8. package/.claude/commands/data-squad.md +21 -21
  9. package/.claude/commands/debug-squad.md +44 -44
  10. package/.claude/commands/doc-squad.md +16 -16
  11. package/.claude/commands/help:agents.md +130 -99
  12. package/.claude/commands/help:commands.md +15 -15
  13. package/.claude/commands/help:faq.md +17 -17
  14. package/.claude/commands/help:plugins.md +1 -1
  15. package/.claude/commands/help:skills.md +18 -24
  16. package/.claude/commands/hotfix-squad.md +22 -22
  17. package/.claude/commands/integration-squad.md +22 -22
  18. package/.claude/commands/janitor-squad.md +31 -31
  19. package/.claude/commands/learn-auto.md +5 -5
  20. package/.claude/commands/learn.md +12 -20
  21. package/.claude/commands/onboard-squad.md +39 -49
  22. package/.claude/commands/plan-workspace.md +2 -2
  23. package/.claude/commands/publish.md +32 -37
  24. package/.claude/commands/review-squad.md +27 -27
  25. package/.claude/commands/stats.md +26 -12
  26. package/.claude/commands/swarm.md +25 -25
  27. package/.claude/skills/chrome-mcp-reference/SKILL.md +5 -0
  28. package/.claude/skills/hailer-api-client/SKILL.md +55 -16
  29. package/.claude/skills/hailer-app-builder/SKILL.md +4 -270
  30. package/.claude/skills/hailer-apps-pictures/SKILL.md +3 -3
  31. package/.claude/skills/hailer-design-system/SKILL.md +96 -4
  32. package/.claude/skills/hailer-monolith-automations/SKILL.md +138 -116
  33. package/.claude/skills/hailer-permissions-system/SKILL.md +6 -9
  34. package/.claude/skills/hailer-project-protocol/SKILL.md +20 -110
  35. package/.claude/skills/integration-patterns/SKILL.md +6 -6
  36. package/.claude/skills/lsp-setup/SKILL.md +8 -9
  37. package/.claude/skills/sdk-activity-patterns/SKILL.md +238 -0
  38. package/.claude/skills/{SDK-document-templates → sdk-document-templates}/SKILL.md +13 -340
  39. package/.claude/skills/{SDK-function-fields → sdk-function-fields}/SKILL.md +8 -40
  40. package/.claude/skills/{SDK-insight-queries → sdk-insight-queries}/SKILL.md +114 -392
  41. package/.claude/skills/{SDK-ws-config-skill → sdk-ws-config-skill}/SKILL.md +79 -310
  42. package/.claude/skills/zapier-hailer-patterns/SKILL.md +84 -361
  43. package/.opencode/package-lock.json +117 -0
  44. package/CLAUDE.md +5 -358
  45. package/dist/app.d.ts.map +1 -1
  46. package/dist/app.js +10 -127
  47. package/dist/app.js.map +1 -1
  48. package/dist/bot/bot-manager.d.ts +3 -14
  49. package/dist/bot/bot-manager.d.ts.map +1 -1
  50. package/dist/bot/bot-manager.js +13 -4
  51. package/dist/bot/bot-manager.js.map +1 -1
  52. package/dist/bot/bot.d.ts +23 -102
  53. package/dist/bot/bot.d.ts.map +1 -1
  54. package/dist/bot/bot.js +356 -1212
  55. package/dist/bot/bot.js.map +1 -1
  56. package/dist/bot/services/bot-permissions.d.ts +50 -0
  57. package/dist/bot/services/bot-permissions.d.ts.map +1 -0
  58. package/dist/bot/services/bot-permissions.js +198 -0
  59. package/dist/bot/services/bot-permissions.js.map +1 -0
  60. package/dist/bot/services/index.d.ts +4 -2
  61. package/dist/bot/services/index.d.ts.map +1 -1
  62. package/dist/bot/services/index.js +10 -5
  63. package/dist/bot/services/index.js.map +1 -1
  64. package/dist/bot/services/message-classifier.d.ts +1 -1
  65. package/dist/bot/services/message-classifier.d.ts.map +1 -1
  66. package/dist/bot/services/message-classifier.js.map +1 -1
  67. package/dist/bot/services/signal-router.d.ts +32 -0
  68. package/dist/bot/services/signal-router.d.ts.map +1 -0
  69. package/dist/bot/services/signal-router.js +132 -0
  70. package/dist/bot/services/signal-router.js.map +1 -0
  71. package/dist/bot/services/system-prompt.d.ts +12 -0
  72. package/dist/bot/services/system-prompt.d.ts.map +1 -0
  73. package/dist/bot/services/system-prompt.js +93 -0
  74. package/dist/bot/services/system-prompt.js.map +1 -0
  75. package/dist/bot/services/types.d.ts +7 -34
  76. package/dist/bot/services/types.d.ts.map +1 -1
  77. package/dist/bot/services/types.js +0 -3
  78. package/dist/bot/services/types.js.map +1 -1
  79. package/dist/bot/services/workspace-refresh.d.ts +47 -0
  80. package/dist/bot/services/workspace-refresh.d.ts.map +1 -0
  81. package/dist/bot/services/workspace-refresh.js +154 -0
  82. package/dist/bot/services/workspace-refresh.js.map +1 -0
  83. package/dist/bot-config/constants.d.ts +0 -36
  84. package/dist/bot-config/constants.d.ts.map +1 -1
  85. package/dist/bot-config/constants.js +1 -76
  86. package/dist/bot-config/constants.js.map +1 -1
  87. package/dist/bot-config/context.d.ts +2 -42
  88. package/dist/bot-config/context.d.ts.map +1 -1
  89. package/dist/bot-config/context.js +13 -134
  90. package/dist/bot-config/context.js.map +1 -1
  91. package/dist/bot-config/index.d.ts +6 -15
  92. package/dist/bot-config/index.d.ts.map +1 -1
  93. package/dist/bot-config/index.js +5 -80
  94. package/dist/bot-config/index.js.map +1 -1
  95. package/dist/bot-config/loader.d.ts +16 -4
  96. package/dist/bot-config/loader.d.ts.map +1 -1
  97. package/dist/bot-config/loader.js +187 -96
  98. package/dist/bot-config/loader.js.map +1 -1
  99. package/dist/bot-config/persistence.d.ts +1 -52
  100. package/dist/bot-config/persistence.d.ts.map +1 -1
  101. package/dist/bot-config/persistence.js +3 -213
  102. package/dist/bot-config/persistence.js.map +1 -1
  103. package/dist/bot-config/state.d.ts +0 -41
  104. package/dist/bot-config/state.d.ts.map +1 -1
  105. package/dist/bot-config/state.js +0 -151
  106. package/dist/bot-config/state.js.map +1 -1
  107. package/dist/bot-config/tools.d.ts +1 -1
  108. package/dist/bot-config/tools.js +27 -27
  109. package/dist/bot-config/tools.js.map +1 -1
  110. package/dist/bot-config/types.d.ts +39 -32
  111. package/dist/bot-config/types.d.ts.map +1 -1
  112. package/dist/bot-config/types.js +0 -3
  113. package/dist/bot-config/types.js.map +1 -1
  114. package/dist/bot-config/webhooks.d.ts +0 -4
  115. package/dist/bot-config/webhooks.d.ts.map +1 -1
  116. package/dist/bot-config/webhooks.js +0 -13
  117. package/dist/bot-config/webhooks.js.map +1 -1
  118. package/dist/commands/seed-config.js +16 -31
  119. package/dist/commands/seed-config.js.map +1 -1
  120. package/dist/config.d.ts +0 -9
  121. package/dist/config.d.ts.map +1 -1
  122. package/dist/config.js +0 -15
  123. package/dist/config.js.map +1 -1
  124. package/dist/mcp/hailer-clients.js +2 -2
  125. package/dist/mcp/hailer-clients.js.map +1 -1
  126. package/dist/mcp/tool-registry.d.ts +10 -115
  127. package/dist/mcp/tool-registry.d.ts.map +1 -1
  128. package/dist/mcp/tool-registry.js +39 -363
  129. package/dist/mcp/tool-registry.js.map +1 -1
  130. package/dist/mcp/tools/activity.d.ts +3 -0
  131. package/dist/mcp/tools/activity.d.ts.map +1 -1
  132. package/dist/mcp/tools/activity.js +8 -1
  133. package/dist/mcp/tools/activity.js.map +1 -1
  134. package/dist/mcp/tools/app-core.d.ts +3 -0
  135. package/dist/mcp/tools/app-core.d.ts.map +1 -1
  136. package/dist/mcp/tools/app-core.js +9 -2
  137. package/dist/mcp/tools/app-core.js.map +1 -1
  138. package/dist/mcp/tools/app-marketplace.d.ts +3 -0
  139. package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
  140. package/dist/mcp/tools/app-marketplace.js +13 -1
  141. package/dist/mcp/tools/app-marketplace.js.map +1 -1
  142. package/dist/mcp/tools/app-member.d.ts +3 -0
  143. package/dist/mcp/tools/app-member.d.ts.map +1 -1
  144. package/dist/mcp/tools/app-member.js +6 -1
  145. package/dist/mcp/tools/app-member.js.map +1 -1
  146. package/dist/mcp/tools/app-scaffold.d.ts +3 -0
  147. package/dist/mcp/tools/app-scaffold.d.ts.map +1 -1
  148. package/dist/mcp/tools/app-scaffold.js +15 -11
  149. package/dist/mcp/tools/app-scaffold.js.map +1 -1
  150. package/dist/mcp/tools/company.d.ts +3 -0
  151. package/dist/mcp/tools/company.d.ts.map +1 -1
  152. package/dist/mcp/tools/company.js +5 -1
  153. package/dist/mcp/tools/company.js.map +1 -1
  154. package/dist/mcp/tools/discussion.d.ts +3 -0
  155. package/dist/mcp/tools/discussion.d.ts.map +1 -1
  156. package/dist/mcp/tools/discussion.js +13 -2
  157. package/dist/mcp/tools/discussion.js.map +1 -1
  158. package/dist/mcp/tools/file.d.ts +3 -0
  159. package/dist/mcp/tools/file.d.ts.map +1 -1
  160. package/dist/mcp/tools/file.js +6 -1
  161. package/dist/mcp/tools/file.js.map +1 -1
  162. package/dist/mcp/tools/index.d.ts +7 -0
  163. package/dist/mcp/tools/index.d.ts.map +1 -0
  164. package/dist/mcp/tools/index.js +34 -0
  165. package/dist/mcp/tools/index.js.map +1 -0
  166. package/dist/mcp/tools/insight.d.ts +3 -0
  167. package/dist/mcp/tools/insight.d.ts.map +1 -1
  168. package/dist/mcp/tools/insight.js +18 -8
  169. package/dist/mcp/tools/insight.js.map +1 -1
  170. package/dist/mcp/tools/user.d.ts +3 -0
  171. package/dist/mcp/tools/user.d.ts.map +1 -1
  172. package/dist/mcp/tools/user.js +6 -1
  173. package/dist/mcp/tools/user.js.map +1 -1
  174. package/dist/mcp/tools/workflow-permissions.d.ts +3 -0
  175. package/dist/mcp/tools/workflow-permissions.d.ts.map +1 -1
  176. package/dist/mcp/tools/workflow-permissions.js +8 -1
  177. package/dist/mcp/tools/workflow-permissions.js.map +1 -1
  178. package/dist/mcp/tools/workflow.d.ts +3 -0
  179. package/dist/mcp/tools/workflow.d.ts.map +1 -1
  180. package/dist/mcp/tools/workflow.js +29 -28
  181. package/dist/mcp/tools/workflow.js.map +1 -1
  182. package/dist/mcp/utils/index.d.ts +4 -11
  183. package/dist/mcp/utils/index.d.ts.map +1 -1
  184. package/dist/mcp/utils/index.js +5 -36
  185. package/dist/mcp/utils/index.js.map +1 -1
  186. package/dist/mcp/utils/role-utils.d.ts +0 -32
  187. package/dist/mcp/utils/role-utils.d.ts.map +1 -1
  188. package/dist/mcp/utils/role-utils.js +0 -73
  189. package/dist/mcp/utils/role-utils.js.map +1 -1
  190. package/dist/mcp/utils/tool-helpers.d.ts +0 -25
  191. package/dist/mcp/utils/tool-helpers.d.ts.map +1 -1
  192. package/dist/mcp/utils/tool-helpers.js +0 -34
  193. package/dist/mcp/utils/tool-helpers.js.map +1 -1
  194. package/dist/mcp/webhook-handler.d.ts +4 -34
  195. package/dist/mcp/webhook-handler.d.ts.map +1 -1
  196. package/dist/mcp/webhook-handler.js +57 -74
  197. package/dist/mcp/webhook-handler.js.map +1 -1
  198. package/dist/mcp-server.d.ts.map +1 -1
  199. package/dist/mcp-server.js +3 -78
  200. package/dist/mcp-server.js.map +1 -1
  201. package/package.json +1 -2
  202. package/.claude/agents/agent-ada-skill-builder.md +0 -94
  203. package/.claude/agents/agent-alejandro-function-fields.md +0 -342
  204. package/.claude/agents/agent-bjorn-config-audit.md +0 -103
  205. package/.claude/agents/agent-builder-agent-creator.md +0 -130
  206. package/.claude/agents/agent-code-simplifier.md +0 -53
  207. package/.claude/agents/agent-dmitri-activity-crud.md +0 -159
  208. package/.claude/agents/agent-giuseppe-app-builder.md +0 -208
  209. package/.claude/agents/agent-gunther-mcp-tools.md +0 -39
  210. package/.claude/agents/agent-helga-workflow-config.md +0 -204
  211. package/.claude/agents/agent-igor-activity-mover-automation.md +0 -125
  212. package/.claude/agents/agent-ingrid-doc-templates.md +0 -261
  213. package/.claude/agents/agent-ivan-monolith.md +0 -154
  214. package/.claude/agents/agent-kenji-data-reader.md +0 -86
  215. package/.claude/agents/agent-lars-code-inspector.md +0 -102
  216. package/.claude/agents/agent-marco-mockup-builder.md +0 -110
  217. package/.claude/agents/agent-marcus-api-documenter.md +0 -323
  218. package/.claude/agents/agent-marketplace-publisher.md +0 -280
  219. package/.claude/agents/agent-marketplace-reviewer.md +0 -309
  220. package/.claude/agents/agent-permissions-handler.md +0 -208
  221. package/.claude/agents/agent-simple-writer.md +0 -48
  222. package/.claude/agents/agent-svetlana-code-review.md +0 -171
  223. package/.claude/agents/agent-tanya-test-runner.md +0 -333
  224. package/.claude/agents/agent-ui-designer.md +0 -100
  225. package/.claude/agents/agent-viktor-sql-insights.md +0 -212
  226. package/.claude/agents/agent-web-search.md +0 -55
  227. package/.claude/agents/agent-yevgeni-discussions.md +0 -45
  228. package/.claude/agents/agent-zara-zapier.md +0 -159
  229. package/.claude/skills/SDK-activity-patterns/SKILL.md +0 -428
  230. package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
  231. package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
  232. package/.claude/skills/agent-structure/SKILL.md +0 -98
  233. package/.claude/skills/delegation-routing/SKILL.md +0 -202
  234. package/.claude/skills/frontend-design/SKILL.md +0 -254
  235. package/.claude/skills/hailer-activity-mover/SKILL.md +0 -213
  236. package/.claude/skills/hailer-rest-api/SKILL.md +0 -61
  237. package/.claude/skills/hailer-rest-api/hailer-activities.md +0 -184
  238. package/.claude/skills/hailer-rest-api/hailer-admin.md +0 -473
  239. package/.claude/skills/hailer-rest-api/hailer-calendar.md +0 -256
  240. package/.claude/skills/hailer-rest-api/hailer-feed.md +0 -249
  241. package/.claude/skills/hailer-rest-api/hailer-insights.md +0 -195
  242. package/.claude/skills/hailer-rest-api/hailer-messaging.md +0 -276
  243. package/.claude/skills/hailer-rest-api/hailer-workflows.md +0 -283
  244. package/.claude/skills/insight-join-patterns/SKILL.md +0 -174
  245. package/.claude/skills/json-only-output/SKILL.md +0 -72
  246. package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
  247. package/.claude/skills/optional-parameters/SKILL.md +0 -72
  248. package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
  249. package/.claude/skills/tool-response-verification/SKILL.md +0 -92
  250. package/.opencode/agent/agent-ada-skill-builder.md +0 -35
  251. package/.opencode/agent/agent-alejandro-function-fields.md +0 -39
  252. package/.opencode/agent/agent-bjorn-config-audit.md +0 -36
  253. package/.opencode/agent/agent-builder-agent-creator.md +0 -39
  254. package/.opencode/agent/agent-code-simplifier.md +0 -31
  255. package/.opencode/agent/agent-dmitri-activity-crud.md +0 -40
  256. package/.opencode/agent/agent-giuseppe-app-builder.md +0 -37
  257. package/.opencode/agent/agent-gunther-mcp-tools.md +0 -39
  258. package/.opencode/agent/agent-helga-workflow-config.md +0 -204
  259. package/.opencode/agent/agent-igor-activity-mover-automation.md +0 -46
  260. package/.opencode/agent/agent-ingrid-doc-templates.md +0 -39
  261. package/.opencode/agent/agent-ivan-monolith.md +0 -46
  262. package/.opencode/agent/agent-kenji-data-reader.md +0 -53
  263. package/.opencode/agent/agent-lars-code-inspector.md +0 -28
  264. package/.opencode/agent/agent-marco-mockup-builder.md +0 -42
  265. package/.opencode/agent/agent-marcus-api-documenter.md +0 -53
  266. package/.opencode/agent/agent-marketplace-publisher.md +0 -44
  267. package/.opencode/agent/agent-marketplace-reviewer.md +0 -42
  268. package/.opencode/agent/agent-permissions-handler.md +0 -50
  269. package/.opencode/agent/agent-simple-writer.md +0 -45
  270. package/.opencode/agent/agent-svetlana-code-review.md +0 -39
  271. package/.opencode/agent/agent-tanya-test-runner.md +0 -57
  272. package/.opencode/agent/agent-ui-designer.md +0 -56
  273. package/.opencode/agent/agent-viktor-sql-insights.md +0 -34
  274. package/.opencode/agent/agent-web-search.md +0 -42
  275. package/.opencode/agent/agent-yevgeni-discussions.md +0 -37
  276. package/.opencode/agent/agent-zara-zapier.md +0 -53
  277. package/.opencode/commands/app-squad.md +0 -135
  278. package/.opencode/commands/audit-squad.md +0 -158
  279. package/.opencode/commands/autoplan.md +0 -563
  280. package/.opencode/commands/cleanup-squad.md +0 -98
  281. package/.opencode/commands/config-squad.md +0 -106
  282. package/.opencode/commands/crud-squad.md +0 -87
  283. package/.opencode/commands/data-squad.md +0 -97
  284. package/.opencode/commands/debug-squad.md +0 -303
  285. package/.opencode/commands/doc-squad.md +0 -65
  286. package/.opencode/commands/handoff.md +0 -137
  287. package/.opencode/commands/health.md +0 -49
  288. package/.opencode/commands/help-agents.md +0 -151
  289. package/.opencode/commands/help-commands.md +0 -32
  290. package/.opencode/commands/help-faq.md +0 -29
  291. package/.opencode/commands/help-plugins.md +0 -28
  292. package/.opencode/commands/help-skills.md +0 -7
  293. package/.opencode/commands/help-tools.md +0 -40
  294. package/.opencode/commands/help.md +0 -28
  295. package/.opencode/commands/hotfix-squad.md +0 -112
  296. package/.opencode/commands/integration-squad.md +0 -82
  297. package/.opencode/commands/janitor-squad.md +0 -167
  298. package/.opencode/commands/learn-auto.md +0 -120
  299. package/.opencode/commands/learn.md +0 -120
  300. package/.opencode/commands/mcp-list.md +0 -27
  301. package/.opencode/commands/onboard-squad.md +0 -140
  302. package/.opencode/commands/plan-workspace.md +0 -732
  303. package/.opencode/commands/prd.md +0 -131
  304. package/.opencode/commands/project-status.md +0 -82
  305. package/.opencode/commands/publish.md +0 -138
  306. package/.opencode/commands/recap.md +0 -69
  307. package/.opencode/commands/restore.md +0 -64
  308. package/.opencode/commands/review-squad.md +0 -152
  309. package/.opencode/commands/save.md +0 -24
  310. package/.opencode/commands/stats.md +0 -19
  311. package/.opencode/commands/swarm.md +0 -210
  312. package/.opencode/commands/tool-builder.md +0 -39
  313. package/.opencode/commands/ws-pull.md +0 -44
@@ -1,104 +1,29 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Bot Config Module
4
- *
5
- * Unified bot configuration management.
6
- * Handles credentials, state, webhooks, persistence, and MCP tools per workspace.
7
- *
8
- * This module consolidates all bot configuration functionality that was previously
9
- * split between mcp/tools/bot-config/ and this module.
10
4
  */
11
5
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.reloadConfigFromHailer = exports.getActiveWorkspace = exports.setActiveWorkspace = exports.cleanupBotConfig = exports.getPersistenceStatus = exports.getAllLocalBotCredentials = exports.getLocalBotCredentials = exports.isPersistenceInitialized = exports.initWorkspaceSchema = exports.initBotConfigPersistence = exports.handleActivityPhaseChange = exports.cleanupBotState = exports.notifyDaemonRestartNeeded = exports.onDaemonRestartNeeded = exports.onBotStateChange = exports.setBotUserId = exports.setBotEnabled = exports.getEnabledBotsWithTypes = exports.getBotType = exports.getBotUserId = exports.getBotContextBotState = exports.getBotState = exports.invalidateConfigCache = exports.saveBotConfig = exports.getOrLoadBotConfig = exports.loadBotConfigs = exports.getBotContextByWorkflowId = exports.clearAllBotContexts = exports.removeBotContext = exports.hasBotContext = exports.listBotContexts = exports.getExistingBotContext = exports.getBotContext = exports.BotContext = exports.AVAILABLE_BOTS = exports.LEGACY_AGENT_ACTIVITY_IDS = exports.FIELD_KEY_SCHEMA_CONFIG = exports.FIELD_KEY_BOT_TYPE = exports.FIELD_KEY_PASSWORD = exports.FIELD_KEY_EMAIL = exports.FIELD_KEY_HAILER_PROFILE = exports.RETIRED_PHASE_PATTERNS = exports.DEPLOYED_PHASE_PATTERNS = exports.AGENT_DIRECTORY_PATTERNS = exports.RESTART_DEBOUNCE_MS = exports.SIGNAL_DEDUP_WINDOW_MS = exports.BOT_CONFIG_DIR = exports.LOCAL_CREDENTIALS_FILE = exports.SCHEMAS_DIR = exports.LOCAL_STATE_FILE = void 0;
13
- exports.botConfigTools = exports.checkSpecialistStatusTool = exports.disableBotTool = exports.enableBotTool = exports.listBotsConfigTool = void 0;
14
- // ============================================================================
15
- // Constants
16
- // ============================================================================
6
+ exports.reloadConfigFromHailer = exports.setActiveWorkspace = exports.handleActivityPhaseChange = exports.setBotEnabled = exports.listWorkspaceConfigFiles = exports.saveWorkspaceConfigFile = exports.loadWorkspaceConfigFile = exports.invalidateConfigCache = exports.loadFlatBotConfigs = exports.loadBotConfigs = exports.getBotContextByWorkflowId = exports.listBotContexts = exports.getExistingBotContext = exports.getBotContext = exports.BotContext = exports.BOT_CONFIG_DIR = void 0;
17
7
  var constants_1 = require("./constants");
18
- // File paths
19
- Object.defineProperty(exports, "LOCAL_STATE_FILE", { enumerable: true, get: function () { return constants_1.LOCAL_STATE_FILE; } });
20
- Object.defineProperty(exports, "SCHEMAS_DIR", { enumerable: true, get: function () { return constants_1.SCHEMAS_DIR; } });
21
- Object.defineProperty(exports, "LOCAL_CREDENTIALS_FILE", { enumerable: true, get: function () { return constants_1.LOCAL_CREDENTIALS_FILE; } });
22
8
  Object.defineProperty(exports, "BOT_CONFIG_DIR", { enumerable: true, get: function () { return constants_1.BOT_CONFIG_DIR; } });
23
- // Signal processing
24
- Object.defineProperty(exports, "SIGNAL_DEDUP_WINDOW_MS", { enumerable: true, get: function () { return constants_1.SIGNAL_DEDUP_WINDOW_MS; } });
25
- Object.defineProperty(exports, "RESTART_DEBOUNCE_MS", { enumerable: true, get: function () { return constants_1.RESTART_DEBOUNCE_MS; } });
26
- // Schema discovery patterns
27
- Object.defineProperty(exports, "AGENT_DIRECTORY_PATTERNS", { enumerable: true, get: function () { return constants_1.AGENT_DIRECTORY_PATTERNS; } });
28
- Object.defineProperty(exports, "DEPLOYED_PHASE_PATTERNS", { enumerable: true, get: function () { return constants_1.DEPLOYED_PHASE_PATTERNS; } });
29
- Object.defineProperty(exports, "RETIRED_PHASE_PATTERNS", { enumerable: true, get: function () { return constants_1.RETIRED_PHASE_PATTERNS; } });
30
- // Field key patterns
31
- Object.defineProperty(exports, "FIELD_KEY_HAILER_PROFILE", { enumerable: true, get: function () { return constants_1.FIELD_KEY_HAILER_PROFILE; } });
32
- Object.defineProperty(exports, "FIELD_KEY_EMAIL", { enumerable: true, get: function () { return constants_1.FIELD_KEY_EMAIL; } });
33
- Object.defineProperty(exports, "FIELD_KEY_PASSWORD", { enumerable: true, get: function () { return constants_1.FIELD_KEY_PASSWORD; } });
34
- Object.defineProperty(exports, "FIELD_KEY_BOT_TYPE", { enumerable: true, get: function () { return constants_1.FIELD_KEY_BOT_TYPE; } });
35
- Object.defineProperty(exports, "FIELD_KEY_SCHEMA_CONFIG", { enumerable: true, get: function () { return constants_1.FIELD_KEY_SCHEMA_CONFIG; } });
36
- // Legacy IDs
37
- Object.defineProperty(exports, "LEGACY_AGENT_ACTIVITY_IDS", { enumerable: true, get: function () { return constants_1.LEGACY_AGENT_ACTIVITY_IDS; } });
38
- // Bot definitions
39
- Object.defineProperty(exports, "AVAILABLE_BOTS", { enumerable: true, get: function () { return constants_1.AVAILABLE_BOTS; } });
40
- // ============================================================================
41
- // Context (main source of truth)
42
- // ============================================================================
43
9
  var context_1 = require("./context");
44
10
  Object.defineProperty(exports, "BotContext", { enumerable: true, get: function () { return context_1.BotContext; } });
45
11
  Object.defineProperty(exports, "getBotContext", { enumerable: true, get: function () { return context_1.getBotContext; } });
46
12
  Object.defineProperty(exports, "getExistingBotContext", { enumerable: true, get: function () { return context_1.getExistingBotContext; } });
47
13
  Object.defineProperty(exports, "listBotContexts", { enumerable: true, get: function () { return context_1.listBotContexts; } });
48
- Object.defineProperty(exports, "hasBotContext", { enumerable: true, get: function () { return context_1.hasBotContext; } });
49
- Object.defineProperty(exports, "removeBotContext", { enumerable: true, get: function () { return context_1.removeBotContext; } });
50
- Object.defineProperty(exports, "clearAllBotContexts", { enumerable: true, get: function () { return context_1.clearAllBotContexts; } });
51
14
  Object.defineProperty(exports, "getBotContextByWorkflowId", { enumerable: true, get: function () { return context_1.getBotContextByWorkflowId; } });
52
- // ============================================================================
53
- // Loader (reads from .bot-config/*.json)
54
- // ============================================================================
55
15
  var loader_1 = require("./loader");
56
16
  Object.defineProperty(exports, "loadBotConfigs", { enumerable: true, get: function () { return loader_1.loadBotConfigs; } });
57
- Object.defineProperty(exports, "getOrLoadBotConfig", { enumerable: true, get: function () { return loader_1.getOrLoadBotConfig; } });
58
- Object.defineProperty(exports, "saveBotConfig", { enumerable: true, get: function () { return loader_1.saveBotConfig; } });
17
+ Object.defineProperty(exports, "loadFlatBotConfigs", { enumerable: true, get: function () { return loader_1.loadFlatBotConfigs; } });
59
18
  Object.defineProperty(exports, "invalidateConfigCache", { enumerable: true, get: function () { return loader_1.invalidateConfigCache; } });
60
- // ============================================================================
61
- // State management
62
- // ============================================================================
19
+ Object.defineProperty(exports, "loadWorkspaceConfigFile", { enumerable: true, get: function () { return loader_1.loadWorkspaceConfigFile; } });
20
+ Object.defineProperty(exports, "saveWorkspaceConfigFile", { enumerable: true, get: function () { return loader_1.saveWorkspaceConfigFile; } });
21
+ Object.defineProperty(exports, "listWorkspaceConfigFiles", { enumerable: true, get: function () { return loader_1.listWorkspaceConfigFiles; } });
63
22
  var state_1 = require("./state");
64
- Object.defineProperty(exports, "getBotState", { enumerable: true, get: function () { return state_1.getBotState; } });
65
- Object.defineProperty(exports, "getBotContextBotState", { enumerable: true, get: function () { return state_1.getBotContextBotState; } });
66
- Object.defineProperty(exports, "getBotUserId", { enumerable: true, get: function () { return state_1.getBotUserId; } });
67
- Object.defineProperty(exports, "getBotType", { enumerable: true, get: function () { return state_1.getBotType; } });
68
- Object.defineProperty(exports, "getEnabledBotsWithTypes", { enumerable: true, get: function () { return state_1.getEnabledBotsWithTypes; } });
69
23
  Object.defineProperty(exports, "setBotEnabled", { enumerable: true, get: function () { return state_1.setBotEnabled; } });
70
- Object.defineProperty(exports, "setBotUserId", { enumerable: true, get: function () { return state_1.setBotUserId; } });
71
- Object.defineProperty(exports, "onBotStateChange", { enumerable: true, get: function () { return state_1.onBotStateChange; } });
72
- Object.defineProperty(exports, "onDaemonRestartNeeded", { enumerable: true, get: function () { return state_1.onDaemonRestartNeeded; } });
73
- Object.defineProperty(exports, "notifyDaemonRestartNeeded", { enumerable: true, get: function () { return state_1.notifyDaemonRestartNeeded; } });
74
- Object.defineProperty(exports, "cleanupBotState", { enumerable: true, get: function () { return state_1.cleanupBotState; } });
75
- // ============================================================================
76
- // Webhooks (phase change handling)
77
- // ============================================================================
78
24
  var webhooks_1 = require("./webhooks");
79
25
  Object.defineProperty(exports, "handleActivityPhaseChange", { enumerable: true, get: function () { return webhooks_1.handleActivityPhaseChange; } });
80
- // ============================================================================
81
- // Persistence
82
- // ============================================================================
83
26
  var persistence_1 = require("./persistence");
84
- Object.defineProperty(exports, "initBotConfigPersistence", { enumerable: true, get: function () { return persistence_1.initBotConfigPersistence; } });
85
- Object.defineProperty(exports, "initWorkspaceSchema", { enumerable: true, get: function () { return persistence_1.initWorkspaceSchema; } });
86
- Object.defineProperty(exports, "isPersistenceInitialized", { enumerable: true, get: function () { return persistence_1.isPersistenceInitialized; } });
87
- Object.defineProperty(exports, "getLocalBotCredentials", { enumerable: true, get: function () { return persistence_1.getLocalBotCredentials; } });
88
- Object.defineProperty(exports, "getAllLocalBotCredentials", { enumerable: true, get: function () { return persistence_1.getAllLocalBotCredentials; } });
89
- Object.defineProperty(exports, "getPersistenceStatus", { enumerable: true, get: function () { return persistence_1.getPersistenceStatus; } });
90
- Object.defineProperty(exports, "cleanupBotConfig", { enumerable: true, get: function () { return persistence_1.cleanupBotConfig; } });
91
- // Workspace management
92
27
  Object.defineProperty(exports, "setActiveWorkspace", { enumerable: true, get: function () { return persistence_1.setActiveWorkspace; } });
93
- Object.defineProperty(exports, "getActiveWorkspace", { enumerable: true, get: function () { return persistence_1.getActiveWorkspace; } });
94
28
  Object.defineProperty(exports, "reloadConfigFromHailer", { enumerable: true, get: function () { return persistence_1.reloadConfigFromHailer; } });
95
- // ============================================================================
96
- // MCP Tools
97
- // ============================================================================
98
- var tools_1 = require("./tools");
99
- Object.defineProperty(exports, "listBotsConfigTool", { enumerable: true, get: function () { return tools_1.listBotsConfigTool; } });
100
- Object.defineProperty(exports, "enableBotTool", { enumerable: true, get: function () { return tools_1.enableBotTool; } });
101
- Object.defineProperty(exports, "disableBotTool", { enumerable: true, get: function () { return tools_1.disableBotTool; } });
102
- Object.defineProperty(exports, "checkSpecialistStatusTool", { enumerable: true, get: function () { return tools_1.checkSpecialistStatusTool; } });
103
- Object.defineProperty(exports, "botConfigTools", { enumerable: true, get: function () { return tools_1.botConfigTools; } });
104
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bot-config/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;AAEH,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,yCAuBqB;AAtBnB,aAAa;AACb,6GAAA,gBAAgB,OAAA;AAChB,wGAAA,WAAW,OAAA;AACX,mHAAA,sBAAsB,OAAA;AACtB,2GAAA,cAAc,OAAA;AACd,oBAAoB;AACpB,mHAAA,sBAAsB,OAAA;AACtB,gHAAA,mBAAmB,OAAA;AACnB,4BAA4B;AAC5B,qHAAA,wBAAwB,OAAA;AACxB,oHAAA,uBAAuB,OAAA;AACvB,mHAAA,sBAAsB,OAAA;AACtB,qBAAqB;AACrB,qHAAA,wBAAwB,OAAA;AACxB,4GAAA,eAAe,OAAA;AACf,+GAAA,kBAAkB,OAAA;AAClB,+GAAA,kBAAkB,OAAA;AAClB,oHAAA,uBAAuB,OAAA;AACvB,aAAa;AACb,sHAAA,yBAAyB,OAAA;AACzB,kBAAkB;AAClB,2GAAA,cAAc,OAAA;AAsBhB,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E,qCASmB;AARjB,qGAAA,UAAU,OAAA;AACV,wGAAA,aAAa,OAAA;AACb,gHAAA,qBAAqB,OAAA;AACrB,0GAAA,eAAe,OAAA;AACf,wGAAA,aAAa,OAAA;AACb,2GAAA,gBAAgB,OAAA;AAChB,8GAAA,mBAAmB,OAAA;AACnB,oHAAA,yBAAyB,OAAA;AAG3B,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E,mCAKkB;AAJhB,wGAAA,cAAc,OAAA;AACd,4GAAA,kBAAkB,OAAA;AAClB,uGAAA,aAAa,OAAA;AACb,+GAAA,qBAAqB,OAAA;AAGvB,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,iCAYiB;AAXf,oGAAA,WAAW,OAAA;AACX,8GAAA,qBAAqB,OAAA;AACrB,qGAAA,YAAY,OAAA;AACZ,mGAAA,UAAU,OAAA;AACV,gHAAA,uBAAuB,OAAA;AACvB,sGAAA,aAAa,OAAA;AACb,qGAAA,YAAY,OAAA;AACZ,yGAAA,gBAAgB,OAAA;AAChB,8GAAA,qBAAqB,OAAA;AACrB,kHAAA,yBAAyB,OAAA;AACzB,wGAAA,eAAe,OAAA;AAGjB,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAE/E,uCAEoB;AADlB,qHAAA,yBAAyB,OAAA;AAI3B,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,6CAYuB;AAXrB,uHAAA,wBAAwB,OAAA;AACxB,kHAAA,mBAAmB,OAAA;AACnB,uHAAA,wBAAwB,OAAA;AACxB,qHAAA,sBAAsB,OAAA;AACtB,wHAAA,yBAAyB,OAAA;AACzB,mHAAA,oBAAoB,OAAA;AACpB,+GAAA,gBAAgB,OAAA;AAChB,uBAAuB;AACvB,iHAAA,kBAAkB,OAAA;AAClB,iHAAA,kBAAkB,OAAA;AAClB,qHAAA,sBAAsB,OAAA;AAGxB,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,iCAMiB;AALf,2GAAA,kBAAkB,OAAA;AAClB,sGAAA,aAAa,OAAA;AACb,uGAAA,cAAc,OAAA;AACd,kHAAA,yBAAyB,OAAA;AACzB,uGAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bot-config/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AASvB,qCAMmB;AALjB,qGAAA,UAAU,OAAA;AACV,wGAAA,aAAa,OAAA;AACb,gHAAA,qBAAqB,OAAA;AACrB,0GAAA,eAAe,OAAA;AACf,oHAAA,yBAAyB,OAAA;AAG3B,mCAOkB;AANhB,wGAAA,cAAc,OAAA;AACd,4GAAA,kBAAkB,OAAA;AAClB,+GAAA,qBAAqB,OAAA;AACrB,iHAAA,uBAAuB,OAAA;AACvB,iHAAA,uBAAuB,OAAA;AACvB,kHAAA,wBAAwB,OAAA;AAG1B,iCAEiB;AADf,sGAAA,aAAa,OAAA;AAGf,uCAEoB;AADlB,qHAAA,yBAAyB,OAAA;AAI3B,6CAGuB;AAFrB,iHAAA,kBAAkB,OAAA;AAClB,qHAAA,sBAAsB,OAAA"}
@@ -5,6 +5,7 @@
5
5
  * Creates BotContext instances for each workspace.
6
6
  */
7
7
  import { BotContext } from './context';
8
+ import type { BotConfig, BotConfigFile } from './types';
8
9
  /**
9
10
  * Invalidate the config cache.
10
11
  * Call this after saving a config file to ensure fresh reads.
@@ -18,11 +19,22 @@ export declare function invalidateConfigCache(): void;
18
19
  */
19
20
  export declare function loadBotConfigs(): BotContext[];
20
21
  /**
21
- * Get or load a specific workspace's bot config
22
+ * Load a workspace config file, or return an empty one.
23
+ * This is the ONLY place that reads .bot-config/{workspaceId}.json.
22
24
  */
23
- export declare function getOrLoadBotConfig(workspaceId: string): BotContext | null;
25
+ export declare function loadWorkspaceConfigFile(workspaceId: string): BotConfigFile;
24
26
  /**
25
- * Save bot config to file
27
+ * Save a workspace config file.
28
+ * This is the ONLY place that writes .bot-config/{workspaceId}.json.
26
29
  */
27
- export declare function saveBotConfig(ctx: BotContext): void;
30
+ export declare function saveWorkspaceConfigFile(config: BotConfigFile): void;
31
+ /**
32
+ * List all workspace config files.
33
+ */
34
+ export declare function listWorkspaceConfigFiles(): BotConfigFile[];
35
+ /**
36
+ * Load all bot configs as flat BotConfig[] for BotManager.
37
+ * Reads from .bot-config/*.json, falls back to env vars.
38
+ */
39
+ export declare function loadFlatBotConfigs(): BotConfig[];
28
40
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/bot-config/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,UAAU,EAA4B,MAAM,WAAW,CAAC;AASjE;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAgCD;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,UAAU,EAAE,CA6D7C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAyBzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAiDnD"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/bot-config/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAkB,MAAM,SAAS,CAAC;AA4CxE;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAK5C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,UAAU,EAAE,CA8C7C;AAMD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAiB1E;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAYnE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,aAAa,EAAE,CAE1D;AA2DD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,EAAE,CAgDhD"}
@@ -41,17 +41,49 @@ var __importStar = (this && this.__importStar) || (function () {
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.invalidateConfigCache = invalidateConfigCache;
43
43
  exports.loadBotConfigs = loadBotConfigs;
44
- exports.getOrLoadBotConfig = getOrLoadBotConfig;
45
- exports.saveBotConfig = saveBotConfig;
44
+ exports.loadWorkspaceConfigFile = loadWorkspaceConfigFile;
45
+ exports.saveWorkspaceConfigFile = saveWorkspaceConfigFile;
46
+ exports.listWorkspaceConfigFiles = listWorkspaceConfigFiles;
47
+ exports.loadFlatBotConfigs = loadFlatBotConfigs;
46
48
  const fs = __importStar(require("fs"));
47
49
  const path = __importStar(require("path"));
48
50
  const logger_1 = require("../lib/logger");
51
+ const config_1 = require("../config");
49
52
  const context_1 = require("./context");
50
53
  const logger = (0, logger_1.createLogger)({ component: 'BotConfigLoader' });
54
+ function getConfigDir() { return path.join(process.cwd(), '.bot-config'); }
55
+ function getApiHost() { return config_1.environment.BOT_API_BASE_URL; }
51
56
  /** Cache for loaded configs to avoid repeated file reads */
52
57
  let cachedContexts = null;
53
58
  let cacheTime = 0;
54
59
  const CACHE_TTL_MS = 5000; // 5 second cache to avoid repeated reads during startup
60
+ /** Cache for raw parsed config files to avoid duplicate directory scans */
61
+ let cachedRawFiles = null;
62
+ /**
63
+ * Read and parse all .bot-config/*.json files, with caching shared across callers.
64
+ */
65
+ function readConfigFiles() {
66
+ const now = Date.now();
67
+ if (cachedRawFiles && (now - cachedRawFiles.time) < CACHE_TTL_MS) {
68
+ return cachedRawFiles.configs;
69
+ }
70
+ const configDir = getConfigDir();
71
+ if (!fs.existsSync(configDir))
72
+ return [];
73
+ const files = fs.readdirSync(configDir).filter(f => f.endsWith('.json'));
74
+ const configs = [];
75
+ for (const file of files) {
76
+ try {
77
+ const content = fs.readFileSync(path.join(configDir, file), 'utf-8');
78
+ configs.push(JSON.parse(content));
79
+ }
80
+ catch (error) {
81
+ logger.warn('Failed to load bot config file', { file, error: error instanceof Error ? error.message : String(error) });
82
+ }
83
+ }
84
+ cachedRawFiles = { configs, time: now };
85
+ return configs;
86
+ }
55
87
  /**
56
88
  * Invalidate the config cache.
57
89
  * Call this after saving a config file to ensure fresh reads.
@@ -59,6 +91,7 @@ const CACHE_TTL_MS = 5000; // 5 second cache to avoid repeated reads during star
59
91
  function invalidateConfigCache() {
60
92
  cachedContexts = null;
61
93
  cacheTime = 0;
94
+ cachedRawFiles = null;
62
95
  logger.debug('Config cache invalidated');
63
96
  }
64
97
  /**
@@ -74,40 +107,26 @@ function loadBotConfigs() {
74
107
  logger.debug('Using cached bot configs', { count: cachedContexts.length, ageMs: now - cacheTime });
75
108
  return cachedContexts;
76
109
  }
77
- const configDir = path.join(process.cwd(), '.bot-config');
78
- if (!fs.existsSync(configDir)) {
79
- logger.warn('No .bot-config directory found');
110
+ const rawConfigs = readConfigFiles();
111
+ if (rawConfigs.length === 0) {
112
+ logger.warn('No .bot-config files found');
80
113
  return [];
81
114
  }
82
- const files = fs.readdirSync(configDir).filter(f => f.endsWith('.json'));
83
115
  const contexts = [];
84
- for (const file of files) {
85
- try {
86
- const filePath = path.join(configDir, file);
87
- const content = fs.readFileSync(filePath, 'utf-8');
88
- const config = JSON.parse(content);
89
- // Get or create BotContext for this workspace
90
- const ctx = (0, context_1.getBotContext)(config.workspaceId, config.workspaceName);
91
- // Initialize from config
92
- ctx.initializeFromConfig({
93
- orchestrator: config.orchestrator,
94
- specialists: config.specialists,
95
- schema: config.schema,
96
- });
97
- contexts.push(ctx);
98
- logger.debug('Loaded bot config', {
99
- workspaceId: config.workspaceId,
100
- workspaceName: config.workspaceName,
101
- hasOrchestrator: !!config.orchestrator,
102
- specialistCount: config.specialists.length,
103
- });
104
- }
105
- catch (error) {
106
- logger.warn('Failed to load bot config file', {
107
- file,
108
- error: error instanceof Error ? error.message : String(error),
109
- });
110
- }
116
+ for (const config of rawConfigs) {
117
+ // Get or create BotContext for this workspace
118
+ const ctx = (0, context_1.getBotContext)(config.workspaceId, config.workspaceName);
119
+ // Initialize from config
120
+ ctx.initializeFromConfig({
121
+ bots: config.bots,
122
+ schema: config.schema,
123
+ });
124
+ contexts.push(ctx);
125
+ logger.debug('Loaded bot config', {
126
+ workspaceId: config.workspaceId,
127
+ workspaceName: config.workspaceName,
128
+ botCount: config.bots.length,
129
+ });
111
130
  }
112
131
  logger.debug('Bot configs loaded', {
113
132
  total: contexts.length,
@@ -118,77 +137,149 @@ function loadBotConfigs() {
118
137
  cacheTime = Date.now();
119
138
  return contexts;
120
139
  }
140
+ // ============================================================================
141
+ // Workspace Config File I/O (single owner of .bot-config/*.json)
142
+ // ============================================================================
121
143
  /**
122
- * Get or load a specific workspace's bot config
144
+ * Load a workspace config file, or return an empty one.
145
+ * This is the ONLY place that reads .bot-config/{workspaceId}.json.
123
146
  */
124
- function getOrLoadBotConfig(workspaceId) {
125
- const configDir = path.join(process.cwd(), '.bot-config');
126
- const filePath = path.join(configDir, `${workspaceId}.json`);
127
- if (!fs.existsSync(filePath)) {
128
- logger.debug('No config file for workspace', { workspaceId });
129
- return null;
130
- }
131
- try {
132
- const content = fs.readFileSync(filePath, 'utf-8');
133
- const config = JSON.parse(content);
134
- const ctx = (0, context_1.getBotContext)(config.workspaceId, config.workspaceName);
135
- ctx.initializeFromConfig({
136
- orchestrator: config.orchestrator,
137
- specialists: config.specialists,
138
- schema: config.schema,
139
- });
140
- return ctx;
141
- }
142
- catch (error) {
143
- logger.error('Failed to load bot config', { workspaceId, error });
144
- return null;
147
+ function loadWorkspaceConfigFile(workspaceId) {
148
+ const configPath = path.join(getConfigDir(), `${workspaceId}.json`);
149
+ if (fs.existsSync(configPath)) {
150
+ try {
151
+ return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
152
+ }
153
+ catch (error) {
154
+ logger.warn('Failed to load workspace config', { workspaceId, error: String(error) });
155
+ }
145
156
  }
157
+ return {
158
+ workspaceId,
159
+ workspaceName: workspaceId,
160
+ bots: [],
161
+ lastSynced: new Date().toISOString(),
162
+ };
146
163
  }
147
164
  /**
148
- * Save bot config to file
165
+ * Save a workspace config file.
166
+ * This is the ONLY place that writes .bot-config/{workspaceId}.json.
149
167
  */
150
- function saveBotConfig(ctx) {
151
- const configDir = path.join(process.cwd(), '.bot-config');
152
- // Ensure directory exists
168
+ function saveWorkspaceConfigFile(config) {
169
+ const configDir = getConfigDir();
153
170
  if (!fs.existsSync(configDir)) {
154
171
  fs.mkdirSync(configDir, { recursive: true });
155
172
  }
156
- const filePath = path.join(configDir, `${ctx.workspaceId}.json`);
157
- // Build config from context
158
- const orchestrator = ctx.getOrchestratorCredentials();
159
- const specialists = ctx.getSpecialistCredentials();
160
- const config = {
161
- workspaceId: ctx.workspaceId,
162
- workspaceName: ctx.workspaceName,
163
- orchestrator: orchestrator ? {
164
- activityId: orchestrator.activityId || '',
165
- userId: orchestrator.userId,
166
- email: orchestrator.email,
167
- password: orchestrator.password,
168
- displayName: orchestrator.displayName,
169
- systemPrompt: orchestrator.systemPrompt,
170
- accessLevel: orchestrator.accessLevel,
171
- responseMode: orchestrator.responseMode,
172
- } : null,
173
- specialists: specialists.map(s => ({
174
- activityId: s.activityId || '',
175
- userId: s.userId,
176
- email: s.email,
177
- password: s.password,
178
- botType: s.botType,
179
- enabled: s.enabled,
180
- displayName: s.displayName,
181
- systemPrompt: s.systemPrompt,
182
- accessLevel: s.accessLevel,
183
- responseMode: s.responseMode,
184
- })),
185
- lastSynced: new Date().toISOString(),
186
- schema: ctx.getSchema() || undefined,
187
- };
188
- fs.writeFileSync(filePath, JSON.stringify(config, null, 2));
189
- logger.debug('Saved bot config', {
190
- workspaceId: ctx.workspaceId,
191
- filePath,
192
- });
173
+ const configPath = path.join(configDir, `${config.workspaceId}.json`);
174
+ config.lastSynced = new Date().toISOString();
175
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
176
+ logger.debug('Saved workspace config', { workspaceId: config.workspaceId, path: configPath });
177
+ }
178
+ /**
179
+ * List all workspace config files.
180
+ */
181
+ function listWorkspaceConfigFiles() {
182
+ return readConfigFiles();
183
+ }
184
+ // ============================================================================
185
+ // Flat Bot Config Loading (for BotManager)
186
+ // ============================================================================
187
+ /**
188
+ * Load bot configs from env vars (BOT_EMAIL/BOT_PASSWORD or BOT_ACCOUNTS).
189
+ * Returns empty array if no env vars are set.
190
+ */
191
+ function loadEnvBotConfigs() {
192
+ // Multi-bot: BOT_ACCOUNTS JSON array
193
+ const botAccountsStr = process.env.BOT_ACCOUNTS;
194
+ if (botAccountsStr) {
195
+ try {
196
+ const accounts = JSON.parse(botAccountsStr);
197
+ const configs = accounts
198
+ .filter(a => a.email && a.password)
199
+ .map(a => ({
200
+ activityId: '',
201
+ workspaceId: 'env',
202
+ workspaceName: 'env',
203
+ email: a.email,
204
+ password: a.password,
205
+ displayName: a.displayName || process.env.BOT_DISPLAY_NAME || 'Dev AI',
206
+ enabled: true,
207
+ apiHost: getApiHost(),
208
+ }));
209
+ if (configs.length > 0) {
210
+ logger.info('Loaded bot configs from BOT_ACCOUNTS env', { count: configs.length });
211
+ return configs;
212
+ }
213
+ }
214
+ catch (error) {
215
+ logger.warn('Failed to parse BOT_ACCOUNTS env var', {
216
+ error: error instanceof Error ? error.message : String(error),
217
+ });
218
+ }
219
+ }
220
+ // Single bot: BOT_EMAIL + BOT_PASSWORD
221
+ const email = process.env.BOT_EMAIL;
222
+ const password = process.env.BOT_PASSWORD;
223
+ if (email && password) {
224
+ logger.info('Loaded bot config from BOT_EMAIL/BOT_PASSWORD env');
225
+ return [{
226
+ activityId: '',
227
+ workspaceId: 'env',
228
+ workspaceName: 'env',
229
+ email,
230
+ password,
231
+ displayName: process.env.BOT_DISPLAY_NAME || 'Dev AI',
232
+ enabled: true,
233
+ apiHost: getApiHost(),
234
+ }];
235
+ }
236
+ return [];
237
+ }
238
+ /**
239
+ * Load all bot configs as flat BotConfig[] for BotManager.
240
+ * Reads from .bot-config/*.json, falls back to env vars.
241
+ */
242
+ function loadFlatBotConfigs() {
243
+ const rawConfigs = readConfigFiles();
244
+ if (rawConfigs.length === 0) {
245
+ logger.debug('No .bot-config files found, checking env vars');
246
+ return loadEnvBotConfigs();
247
+ }
248
+ const configs = [];
249
+ for (const raw of rawConfigs) {
250
+ // Load all bots
251
+ let fileCount = 0;
252
+ for (const bot of raw.bots) {
253
+ if (bot?.email && bot?.password && bot?.enabled !== false) {
254
+ configs.push({
255
+ activityId: bot.activityId || '',
256
+ workspaceId: raw.workspaceId,
257
+ workspaceName: raw.workspaceName,
258
+ email: bot.email,
259
+ password: bot.password,
260
+ displayName: bot.displayName,
261
+ systemPrompt: bot.systemPrompt,
262
+ enabled: true,
263
+ apiHost: getApiHost(),
264
+ accessLevel: bot.accessLevel,
265
+ allowedWorkflows: bot.allowedWorkflows,
266
+ responseMode: bot.responseMode,
267
+ });
268
+ fileCount++;
269
+ }
270
+ }
271
+ logger.debug('Loaded bot config', {
272
+ workspaceId: raw.workspaceId,
273
+ workspaceName: raw.workspaceName,
274
+ botCount: fileCount,
275
+ });
276
+ }
277
+ // If no configs from files, fall back to env vars
278
+ if (configs.length === 0) {
279
+ logger.debug('No bot configs from files, checking env vars');
280
+ return loadEnvBotConfigs();
281
+ }
282
+ logger.debug('Flat bot configs loaded', { total: configs.length });
283
+ return configs;
193
284
  }
194
285
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/bot-config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/bot-config/loader.ts"],"names":[],"mappings":"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"}
@@ -1,68 +1,17 @@
1
1
  /**
2
2
  * Bot Configuration Persistence
3
3
  *
4
- * Handles initialization and persistence of bot configuration.
4
+ * Workspace management and config reload from Hailer API.
5
5
  */
6
6
  import { HailerApiClient } from '../mcp/utils';
7
- /**
8
- * Initialize bot config persistence
9
- *
10
- * Sets up signal handler and loads bot configuration from files.
11
- */
12
- export declare function initBotConfigPersistence(client: HailerApiClient): Promise<void>;
13
- /**
14
- * Initialize workspace schema for a specific workspace
15
- *
16
- * Discovers the Agent Directory in the workspace and caches field IDs.
17
- */
18
- export declare function initWorkspaceSchema(client: HailerApiClient, workspaceId: string): Promise<boolean>;
19
- /**
20
- * Check if persistence is initialized
21
- */
22
- export declare function isPersistenceInitialized(): boolean;
23
7
  /**
24
8
  * Set the active workspace ID
25
9
  */
26
10
  export declare function setActiveWorkspace(workspaceId: string): void;
27
- /**
28
- * Get the active workspace ID
29
- */
30
- export declare function getActiveWorkspace(): string | null;
31
11
  /**
32
12
  * Reload bot configuration from Hailer
33
13
  *
34
14
  * Re-discovers the Agent Directory and reloads credentials.
35
- * If no client is provided, uses the stored hailerClient.
36
15
  */
37
16
  export declare function reloadConfigFromHailer(client?: HailerApiClient): Promise<void>;
38
- /**
39
- * Get local bot credentials for daemon creation
40
- *
41
- * Looks up credentials by user ID or bot ID.
42
- */
43
- export declare function getLocalBotCredentials(userIdOrBotId: string): {
44
- email: string;
45
- password: string;
46
- displayName?: string;
47
- } | null;
48
- /**
49
- * Get all local bot credentials
50
- */
51
- export declare function getAllLocalBotCredentials(): Record<string, {
52
- email: string;
53
- password: string;
54
- displayName?: string;
55
- }>;
56
- /**
57
- * Get persistence status (for debugging)
58
- */
59
- export declare function getPersistenceStatus(): {
60
- initialized: boolean;
61
- workspaceCount: number;
62
- hasClient: boolean;
63
- };
64
- /**
65
- * Cleanup bot config (alias for cleanupBotState)
66
- */
67
- export { cleanupBotState as cleanupBotConfig } from './state';
68
17
  //# sourceMappingURL=persistence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/bot-config/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAoB/C;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBrF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBxG;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAQD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAG5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBpF;AAuBD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqB9H;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBrH;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB,CAMA;AAMD;;GAEG;AACH,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/bot-config/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAW/C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAG5D;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBpF"}