@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,174 +0,0 @@
1
- ---
2
- name: insight-join-patterns
3
- description: Correct JOIN syntax for Hailer insights with ActivityLink fields
4
- version: 1.0.0
5
- triggers: JOIN query errors, missing columns, NULL results in insight queries
6
- ---
7
-
8
- **Prerequisite:** Before using JOINs, review `SDK-insight-queries` skill for basic insight syntax and single-workflow queries.
9
-
10
- <problem>
11
- When joining workflows with ActivityLink fields in Hailer insights, you must:
12
- 1. Include `_id` meta field in BOTH source definitions
13
- 2. Join ON the activitylink field value equals target _id
14
- 3. Use the activitylink fieldId (NOT the key) for the JOIN condition
15
- </problem>
16
-
17
- <rules>
18
- - Both workflows need `{ name: 'id', meta: '_id' }` in their fields array
19
- - JOIN condition: `source1.activityLinkFieldName = source2.id`
20
- - Use LEFT JOIN for optional relationships (activitylink can be null)
21
- - Use INNER JOIN only when relationship must exist
22
- </rules>
23
-
24
- <correct>
25
- ```javascript
26
- // Players workflow has "club" field (activitylink to Clubs workflow)
27
- {
28
- sources: [
29
- {
30
- name: 'p',
31
- workflowId: '68446dc05b30685f67c6fcd4',
32
- fields: [
33
- { name: 'player_name', meta: 'name' },
34
- { name: 'id', meta: '_id' }, // Required!
35
- { name: 'club', fieldId: '684d5e45...' } // ActivityLink field
36
- ]
37
- },
38
- {
39
- name: 'c',
40
- workflowId: '691ea936ccb6bdeebc0cbf77',
41
- fields: [
42
- { name: 'club_name', meta: 'name' },
43
- { name: 'id', meta: '_id' } // Required!
44
- ]
45
- }
46
- ],
47
- query: 'SELECT p.player_name, c.club_name FROM p LEFT JOIN c ON p.club = c.id'
48
- }
49
- ```
50
- </correct>
51
-
52
- <wrong>
53
- ```javascript
54
- // ❌ WRONG - Missing _id in clubs source
55
- {
56
- sources: [
57
- {
58
- name: 'p',
59
- workflowId: 'players-id',
60
- fields: [
61
- { name: 'player_name', meta: 'name' },
62
- { name: 'id', meta: '_id' },
63
- { name: 'club', fieldId: 'club-field-id' }
64
- ]
65
- },
66
- {
67
- name: 'c',
68
- workflowId: 'clubs-id',
69
- fields: [
70
- { name: 'club_name', meta: 'name' }
71
- // Missing: { name: 'id', meta: '_id' }
72
- ]
73
- }
74
- ],
75
- query: 'SELECT p.player_name, c.club_name FROM p LEFT JOIN c ON p.club = c.id'
76
- }
77
- // Error: "no such column: c.id"
78
- ```
79
- </wrong>
80
-
81
- <examples>
82
- ### Three-Way JOIN (Tasks -> Topics -> Projects)
83
- ```javascript
84
- {
85
- sources: [
86
- {
87
- name: 't',
88
- workflowId: 'tasks-workflow-id',
89
- fields: [
90
- { name: 'task_name', meta: 'name' },
91
- { name: 'id', meta: '_id' },
92
- { name: 'topic', fieldId: 'topic-field-id' }
93
- ]
94
- },
95
- {
96
- name: 'top',
97
- workflowId: 'topics-workflow-id',
98
- fields: [
99
- { name: 'topic_name', meta: 'name' },
100
- { name: 'id', meta: '_id' },
101
- { name: 'project', fieldId: 'project-field-id' }
102
- ]
103
- },
104
- {
105
- name: 'p',
106
- workflowId: 'projects-workflow-id',
107
- fields: [
108
- { name: 'project_name', meta: 'name' },
109
- { name: 'id', meta: '_id' }
110
- ]
111
- }
112
- ],
113
- query: `
114
- SELECT t.task_name, top.topic_name, p.project_name
115
- FROM t
116
- LEFT JOIN top ON t.topic = top.id
117
- LEFT JOIN p ON top.project = p.id
118
- `
119
- }
120
- ```
121
-
122
- ### Aggregation with JOIN
123
- ```javascript
124
- {
125
- sources: [
126
- {
127
- name: 'matches',
128
- workflowId: 'matches-workflow-id',
129
- fields: [
130
- { name: 'match_date', fieldId: 'date-field-id' },
131
- { name: 'id', meta: '_id' },
132
- { name: 'home_team', fieldId: 'home-team-field-id' }
133
- ]
134
- },
135
- {
136
- name: 'teams',
137
- workflowId: 'teams-workflow-id',
138
- fields: [
139
- { name: 'team_name', meta: 'name' },
140
- { name: 'id', meta: '_id' }
141
- ]
142
- }
143
- ],
144
- query: `
145
- SELECT teams.team_name, COUNT(*) as match_count
146
- FROM matches
147
- LEFT JOIN teams ON matches.home_team = teams.id
148
- GROUP BY teams.team_name
149
- `
150
- }
151
- ```
152
- </examples>
153
-
154
- <troubleshooting>
155
- **Error: "no such column: c.id"**
156
- - Missing `{ name: 'id', meta: '_id' }` in target workflow source
157
-
158
- **Error: "no such column: p.club"**
159
- - ActivityLink field not included in source fields array
160
- - Check you used correct fieldId from `get_workflow_schema`
161
-
162
- **NULL results for joined data**
163
- - ActivityLink field is empty/null for some activities (expected with LEFT JOIN)
164
- - Use INNER JOIN if you only want activities with relationships
165
- </troubleshooting>
166
-
167
- <checklist>
168
- Before creating an insight with JOINs:
169
- - [ ] Both workflow sources include `{ name: 'id', meta: '_id' }`
170
- - [ ] ActivityLink field uses `fieldId` (NOT `key`)
171
- - [ ] JOIN condition uses column names from sources (e.g., `p.club = c.id`)
172
- - [ ] Using LEFT JOIN (unless relationship required)
173
- - [ ] Tested with `preview_insight` first
174
- </checklist>
@@ -1,72 +0,0 @@
1
- ---
2
- name: json-only-output
3
- description: Fix agents adding prose after JSON responses
4
- version: 1.0.1
5
- triggers: Agent outputs explanation text after valid JSON
6
- ---
7
-
8
- # JSON Only Output
9
-
10
- <purpose>
11
- Ensure agents output ONLY valid JSON with no prose, explanations, or commentary after the closing brace.
12
- </purpose>
13
-
14
- <why-this-happens>
15
- ## Why Agents Add Prose
16
-
17
- LLMs have a natural tendency to be helpful and explanatory. After completing a task, they want to:
18
- - Explain what they did
19
- - Suggest next steps
20
- - Provide context
21
- - Confirm their understanding
22
-
23
- This is normally good behavior, but for **subagents** returning structured data to an orchestrator, it breaks JSON parsing.
24
-
25
- **The `<protocol>` section isn't enough** because:
26
- - LLMs treat protocol as "guidelines" not hard rules
27
- - The helpful instinct overrides weak instructions
28
- - Protocol is at the end of the prompt, less salient
29
-
30
- **Why identity/rules work:**
31
- - `<identity>` shapes the agent's core persona ("I output JSON. Full stop.")
32
- - `<rules>` are processed as constraints, not suggestions
33
- - Positioned early in prompt, higher salience
34
- - Explicit prohibition is stronger than implicit expectation
35
- </why-this-happens>
36
-
37
- <patterns>
38
- ## Pattern 1: Stop at the Closing Brace
39
-
40
- Output JSON. Full stop. Nothing after the closing brace.
41
-
42
- ## Pattern 2: Agent Configuration Fix
43
-
44
- 1. Add to `<identity>`: "Output JSON. Full stop."
45
- 2. Add to `<rules>`: **JSON ONLY** - Output closing brace, then STOP. Zero prose after JSON.
46
- 3. Protocol section is NOT enough - agents ignore it without identity/rules reinforcement.
47
-
48
- ## Pattern 3: Include Summary Inside JSON
49
-
50
- If context is helpful, include it IN the JSON `summary` field, not after the JSON.
51
- </patterns>
52
-
53
- <examples>
54
- ## Example 1: Correct - Pure JSON Output
55
-
56
- ```json
57
- {"status":"success","result":{"fields":["taskName","priority"]},"summary":"Read 2 fields"}
58
- ```
59
- **STOP HERE. Nothing after closing brace.**
60
-
61
- ## Example 2: Wrong - Prose After JSON
62
-
63
- ```json
64
- {"status":"success","result":{"fields":["taskName","priority"]},"summary":"Read 2 fields"}
65
- ```
66
-
67
- The workflow has 2 fields defined in workspace/Tasks_123/fields.ts. You can now use these field IDs with dmitri for activity creation.
68
-
69
- **Action Required**: Run `npm run pull` to refresh.
70
-
71
- This violates JSON-only protocol by adding explanation text AFTER the valid JSON response.
72
- </examples>
@@ -1,153 +0,0 @@
1
- ---
2
- name: mcp-direct-tools
3
- description: Reference for MCP tools not assigned to agents
4
- version: 1.0.0
5
- ---
6
-
7
- # MCP Direct Tools
8
-
9
- <purpose>
10
- Reference for MCP tools not assigned to agents. Load this skill when user requests direct tool usage or needs capabilities not covered by standard agents.
11
- </purpose>
12
-
13
- ---
14
-
15
- ## When to Load This Skill
16
-
17
- - User asks "can you use the bug fixer tools?"
18
- - User needs capabilities not covered by agents
19
- - Direct MCP tool access requested
20
- - Debugging/testing MCP tools
21
-
22
- ---
23
-
24
- ## Bug Fixer Tools (16 tools)
25
-
26
- Automated bug fixing suite for Hailer apps. Use these for automated debugging workflows.
27
-
28
- ### Discovery & Analysis
29
-
30
- | Tool | Description | Parameters |
31
- |------|-------------|------------|
32
- | `bug_fixer_find_app` | Locate app by name | `{ appName }` |
33
- | `bug_fixer_analyze_bug` | Classify bug report | `{ bugReport, appId }` |
34
-
35
- ### File Operations
36
-
37
- | Tool | Description | Parameters |
38
- |------|-------------|------------|
39
- | `bug_fixer_list_files` | List project files | `{ appId, path? }` |
40
- | `bug_fixer_read_file` | Read file content | `{ appId, filePath }` |
41
- | `bug_fixer_write_file` | Modify file content | `{ appId, filePath, content }` |
42
- | `bug_fixer_apply_fix` | Apply code patch | `{ appId, filePath, patch }` |
43
-
44
- ### Build & Test
45
-
46
- | Tool | Description | Parameters |
47
- |------|-------------|------------|
48
- | `bug_fixer_run_build` | Execute build command | `{ appId }` |
49
-
50
- ### Git Operations
51
-
52
- | Tool | Description | Parameters |
53
- |------|-------------|------------|
54
- | `bug_fixer_git_status` | Check git status | `{ appId }` |
55
- | `bug_fixer_git_pull` | Fetch latest code | `{ appId }` |
56
- | `bug_fixer_git_commit` | Commit changes | `{ appId, message }` |
57
- | `bug_fixer_git_push` | Push to remote | `{ appId }` |
58
- | `bug_fixer_git_revert` | Undo changes | `{ appId }` |
59
-
60
- ### Workflow Management
61
-
62
- | Tool | Description | Parameters |
63
- |------|-------------|------------|
64
- | `bug_fixer_start_fix` | Begin fix workflow | `{ bugId, appId }` |
65
- | `bug_fixer_mark_declined` | Close as not-a-bug | `{ bugId, reason }` |
66
- | `bug_fixer_publish_fix` | Deploy to production | `{ appId, version }` |
67
- | `bug_fixer_retry_fix` | Attempt with new context | `{ bugId, newContext }` |
68
-
69
- ### Bug Fixer Workflow
70
-
71
- ```
72
- 1. bug_fixer_find_app → Get app ID
73
- 2. bug_fixer_analyze_bug → Classify issue
74
- 3. bug_fixer_start_fix → Begin workflow
75
- 4. bug_fixer_list_files → Find relevant files
76
- 5. bug_fixer_read_file → Understand current code
77
- 6. bug_fixer_write_file / bug_fixer_apply_fix → Make changes
78
- 7. bug_fixer_run_build → Verify fix
79
- 8. bug_fixer_git_commit → Save changes
80
- 9. bug_fixer_publish_fix → Deploy
81
- ```
82
-
83
- ---
84
-
85
- ## Insight Tools (Not in Viktor)
86
-
87
- Viktor uses `preview_insight` and `get_insight_data`. These additional tools are available:
88
-
89
- | Tool | Description | When to Use |
90
- |------|-------------|-------------|
91
- | `list_insights` | List all insights in workspace | Discovery, cleanup |
92
- | `update_insight` | Modify existing insight | Query changes |
93
- | `remove_insight` | Delete insight (NUCLEAR) | Cleanup |
94
-
95
- **Note:** SDK has equivalents via insights.ts push. Use SDK for version-controlled changes, MCP for quick fixes.
96
-
97
- ---
98
-
99
- ## Workflow Tools (PLAYGROUND/NUCLEAR)
100
-
101
- Direct workflow manipulation. Normally use Helga + SDK, but these exist for quick operations:
102
-
103
- | Tool | Description | Group |
104
- |------|-------------|-------|
105
- | `install_workflow` | Create workflow via MCP | PLAYGROUND |
106
- | `remove_workflow` | Delete workflow | NUCLEAR |
107
- | `update_workflow_field` | Modify field config | PLAYGROUND |
108
- | `update_workflow_phase` | Modify phase config | PLAYGROUND |
109
- | `test_function_field` | Test JS function | PLAYGROUND |
110
-
111
- **Warning:** NUCLEAR tools require `ENABLE_NUCLEAR_TOOLS=true` in MCP config.
112
-
113
- ---
114
-
115
- ## Tool Groups Reference
116
-
117
- | Group | Risk Level | Examples |
118
- |-------|------------|----------|
119
- | READ | Safe | list_activities, get_workflow_schema |
120
- | WRITE | Updates data | create_activity, add_discussion_message |
121
- | PLAYGROUND | Admin ops | install_workflow, update_workflow_field |
122
- | NUCLEAR | Destructive | remove_workflow, remove_app |
123
- | BOT_INTERNAL | Bots only | Not exposed to MCP clients |
124
-
125
- ---
126
-
127
- ## Usage Pattern
128
-
129
- When user requests direct tool usage:
130
-
131
- ```
132
- User: "Use the bug fixer to fix this app"
133
-
134
- Orchestrator:
135
- 1. Load this skill
136
- 2. Call tools directly via mcp__hailer__<tool_name>
137
- 3. Follow workflow patterns above
138
- 4. Report results
139
- ```
140
-
141
- ---
142
-
143
- ## Tools NOT Covered Here
144
-
145
- These are assigned to agents - use the agent instead:
146
-
147
- | Tool | Agent |
148
- |------|-------|
149
- | Activity CRUD | Dmitri |
150
- | Discussions | Yevgeni |
151
- | App scaffold/create | Giuseppe |
152
- | Insights preview/data | Viktor |
153
- | User search | Permissions Handler |
@@ -1,72 +0,0 @@
1
- ---
2
- name: optional-parameters
3
- description: Omit optional parameters instead of passing empty values
4
- version: 1.0.0
5
- triggers: Tool error about empty array/string when parameter should be omitted
6
- ---
7
-
8
- # Optional Parameters
9
-
10
- <purpose>
11
- Teach correct handling of optional tool parameters - OMIT them entirely when not needed, rather than passing empty arrays, strings, or null values.
12
- </purpose>
13
-
14
- <patterns>
15
- ## Pattern 1: Omit vs Empty Value
16
-
17
- **Key distinction:**
18
- - **OMIT parameter**: Don't include it in the function call at all
19
- - **NOT same as empty value**: `[]`, `""`, `null`, `undefined` are NOT valid replacements for omission
20
-
21
- ## Pattern 2: When to Omit
22
-
23
- - Updating insight public/name but NOT sources → omit sources
24
- - Updating activity field but NOT name → omit name
25
- - Any "required" schema parameter that's not relevant to current operation
26
-
27
- ## Pattern 3: Rule of Thumb
28
-
29
- If you're not changing/using a value, OMIT the parameter entirely rather than passing empty/null.
30
- </patterns>
31
-
32
- <examples>
33
- ## Example 1: Correct - Omitting Unused Parameters
34
-
35
- ```typescript
36
- // Update insight - only changing public flag
37
- // sources parameter exists in schema but NOT needed for this update
38
- update_insight({
39
- insightId: "abc123",
40
- public: false
41
- // sources: NOT included - omit entirely
42
- });
43
-
44
- // Update insight - changing sources
45
- update_insight({
46
- insightId: "abc123",
47
- sources: [{
48
- name: 'tasks',
49
- workflowId: 'wf123',
50
- fields: [{ name: 'title', meta: 'name' }]
51
- }]
52
- // Include sources when actually updating them
53
- });
54
- ```
55
-
56
- ## Example 2: Wrong - Passing Empty Values
57
-
58
- ```typescript
59
- // WRONG - Passing empty array when parameter should be omitted
60
- update_insight({
61
- insightId: "abc123",
62
- public: false,
63
- sources: [] // Error: sources must contain at least 1 items
64
- });
65
-
66
- // WRONG - Passing empty string
67
- update_activity({
68
- activityId: "xyz",
69
- name: "" // Error: name cannot be empty
70
- });
71
- ```
72
- </examples>
@@ -1,126 +0,0 @@
1
- ---
2
- name: tool-parameter-usage
3
- description: Extract IDs from context and use correct parameter formats for Hailer tools
4
- version: 1.1.0
5
- triggers: Tool validation failed with "Required" error, empty receivedArgs, or field format errors
6
- ---
7
-
8
- # Tool Parameter Usage
9
-
10
- <purpose>
11
- Teach correct extraction of IDs from message context and proper parameter formats for Hailer tool calls, preventing empty parameter errors and format mismatches.
12
- </purpose>
13
-
14
- <patterns>
15
- ## Pattern 1: Context Extraction
16
-
17
- The `<incoming>` tag in messages contains critical IDs. ALWAYS extract and use them:
18
-
19
- ```xml
20
- <incoming activityId="69384669b7826c5d9ec4e07c" discussionId="69384669b7826c5d9ec4e07d">
21
- User message here
22
- </incoming>
23
- ```
24
-
25
- **Extract before calling tools:**
26
- - `activityId` → use for `show_activity_by_id`, `update_activity`
27
- - `discussionId` → use for `get_activity_from_discussion`, `add_discussion_message`
28
-
29
- ## Pattern 2: Single vs Bulk Mode Parameters
30
-
31
- | Tool | Single mode | Bulk mode |
32
- |------|-------------|-----------|
33
- | `create_activity` | Top-level `name`, `phaseId`, `teamId`, `fields` | Inside each `activities[]` item |
34
- | `update_activity` | `activityId` | `activities[]._id` |
35
- | `show_activity_by_id` | `activityId` | N/A |
36
- | `get_activity_from_discussion` | `discussionId` | N/A |
37
-
38
- **CRITICAL for `create_activity` bulk mode:** `teamId`, `phaseId`, and `fields` must be **inside each activity object** in the `activities[]` array. Top-level values (except `workflowId`) are IGNORED in bulk mode. This causes "Missing team(s)" (code 127) if teamId is only at the top level.
39
-
40
- ## Pattern 3: Field Value Formats
41
-
42
- | Field type | Value format |
43
- |------------|--------------|
44
- | `numericunit` | Plain number: `78` |
45
- | `text` | Plain string: `"hello"` |
46
- | `activitylink` | Activity ID string: `"abc123..."` |
47
- | `select` | Option key: `"option_key"` |
48
-
49
- **Never pass objects with `type` metadata** - Hailer API expects plain values.
50
- </patterns>
51
-
52
- <examples>
53
- ## Example 1: Correct - Extracting IDs from Context
54
-
55
- ```typescript
56
- // Context: <incoming activityId="69384669b7826c5d9ec4e07c" discussionId="69384669b7826c5d9ec4e07d">
57
-
58
- // CORRECT - Extract activityId from context
59
- show_activity_by_id({
60
- activityId: "69384669b7826c5d9ec4e07c"
61
- });
62
-
63
- // CORRECT - Get activity from discussion
64
- get_activity_from_discussion({
65
- discussionId: "69384669b7826c5d9ec4e07d"
66
- });
67
- ```
68
-
69
- ## Example 2: Correct - Single vs Bulk Update Mode
70
-
71
- ```typescript
72
- // CORRECT - Single update mode uses activityId
73
- update_activity({
74
- activityId: "69384669b7826c5d9ec4e07c",
75
- fields: { "fieldId123": 78 }
76
- });
77
-
78
- // CORRECT - Bulk update mode uses _id (NOT activityId)
79
- update_activity({
80
- activities: [{
81
- _id: "69384669b7826c5d9ec4e07c",
82
- fields: { "fieldId123": 78 }
83
- }]
84
- });
85
- ```
86
-
87
- ## Example 3: Correct - Field Value Formats
88
-
89
- ```typescript
90
- // CORRECT - numericunit field = plain number
91
- update_activity({
92
- activityId: "69384669b7826c5d9ec4e07c",
93
- fields: { "weightFieldId": 78 }
94
- });
95
- ```
96
-
97
- ## Example 4: Wrong - Common Errors
98
-
99
- ```typescript
100
- // WRONG - Empty parameters (ignoring context)
101
- show_activity_by_id({});
102
- // Error: activityId: Required, receivedArgs={}
103
-
104
- // WRONG - Using activityId in bulk mode (should be _id)
105
- update_activity({
106
- activities: [{
107
- activityId: "69384669b7826c5d9ec4e07c", // WRONG KEY
108
- fields: { "fieldId123": 78 }
109
- }]
110
- });
111
- // Error: activities.0._id: Required
112
-
113
- // WRONG - Passing object for numericunit field
114
- update_activity({
115
- activityId: "69384669b7826c5d9ec4e07c",
116
- fields: {
117
- "weightFieldId": { "type": "numericunit", "value": 78 } // WRONG FORMAT
118
- }
119
- });
120
- // Error: "Weight" must be a number
121
-
122
- // WRONG - Empty list_activities call
123
- list_activities({});
124
- // Error: workflowId: Required, phaseId: Required
125
- ```
126
- </examples>
@@ -1,92 +0,0 @@
1
- ---
2
- name: tool-response-verification
3
- description: Verify MCP tool execution results before reporting success
4
- version: 1.0.0
5
- triggers:
6
- - MCP tool failure
7
- - fabricated response
8
- - tool result verification
9
- - silent failure
10
- - disconnected server
11
- ---
12
-
13
- # Tool Response Verification
14
-
15
- <purpose>
16
- Ensure agents verify actual tool execution results before reporting success, preventing fabricated responses when MCP servers are disconnected or tools fail silently.
17
- </purpose>
18
-
19
- <patterns>
20
- ## Pattern 1: Always Check Tool Results
21
-
22
- Every MCP tool call returns a result. Read it before proceeding.
23
-
24
- ## Pattern 2: Never Assume Success
25
-
26
- If you didn't see confirmation in the result, it didn't happen.
27
-
28
- ## Pattern 3: Report Actual Errors
29
-
30
- If tool returned error, report error status - don't fabricate success.
31
-
32
- ## Pattern 4: No Fabrication
33
-
34
- Never claim "created 5 activities" if you didn't see 5 activity IDs returned.
35
-
36
- ## Pattern 5: Verification Checklist
37
-
38
- Before returning success:
39
- - Did the tool return a result (not an error)?
40
- - Does the result contain expected data (IDs, counts, etc.)?
41
- - Am I reporting data FROM the result, not data I expected?
42
-
43
- ## Pattern 6: Detect MCP Connection Errors
44
-
45
- When an MCP server is offline, tools return empty results, undefined data, or error messages instead of clear failures. This looks like "success" but is actually a connection problem.
46
-
47
- **Red flags:**
48
- - Empty array when data is expected (e.g., `workflows: []` for a non-empty workspace)
49
- - Missing schema fields that should always be present
50
- - Undefined/null responses from tools that normally return structured data
51
- - Error messages containing: "connection", "ECONNREFUSED", "timeout", "unavailable", "ENOTFOUND"
52
-
53
- **What to do:**
54
- Instead of reporting empty data as success, report: "MCP server appears offline - tool returned empty/error result. Check that the MCP server is running."
55
-
56
- Return error status, not success:
57
- ```json
58
- {
59
- "status": "error",
60
- "result": { "tool": "tool_name", "error": "MCP server appears offline" },
61
- "summary": "Cannot proceed: MCP server not responding"
62
- }
63
- ```
64
- </patterns>
65
-
66
- <examples>
67
- ## Example 1: Correct - Verify Before Reporting
68
-
69
- ```
70
- GOOD: Call create_activity → read result → if result.activityId exists → return success
71
- GOOD: "Created customer with ID abc123" (ID from actual result)
72
- ```
73
-
74
- ## Example 2: Wrong - Fabricating Success
75
-
76
- ```
77
- BAD: Call create_activity → immediately return {"status": "success", "created": 1}
78
- BAD: "I created the customer" (without checking result)
79
- ```
80
-
81
- ## Example 3: Correct - Error Reporting
82
-
83
- When tools fail, report the actual error:
84
-
85
- ```json
86
- {
87
- "status": "error",
88
- "result": { "tool": "tool_name", "error": "actual error message" },
89
- "summary": "Tool failed: brief reason"
90
- }
91
- ```
92
- </examples>