@hailer/mcp 1.1.11 → 1.1.13

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 (252) hide show
  1. package/dist/app.js +18 -5
  2. package/dist/bot/bot-config.d.ts +12 -1
  3. package/dist/bot/bot-config.js +98 -14
  4. package/dist/bot/bot-manager.d.ts +13 -3
  5. package/dist/bot/bot-manager.js +80 -25
  6. package/dist/bot/bot.d.ts +46 -0
  7. package/dist/bot/bot.js +542 -166
  8. package/dist/bot/services/message-classifier.js +17 -0
  9. package/dist/bot/services/permission-guard.d.ts +52 -0
  10. package/dist/bot/services/permission-guard.js +149 -0
  11. package/dist/bot/services/types.d.ts +5 -0
  12. package/dist/bot/services/typing-indicator.d.ts +6 -1
  13. package/dist/bot/services/typing-indicator.js +19 -3
  14. package/dist/config.d.ts +6 -1
  15. package/dist/config.js +43 -0
  16. package/dist/core.js +3 -6
  17. package/dist/mcp/UserContextCache.d.ts +5 -0
  18. package/dist/mcp/UserContextCache.js +51 -19
  19. package/dist/mcp/hailer-clients.d.ts +19 -1
  20. package/dist/mcp/hailer-clients.js +157 -20
  21. package/dist/mcp/session-store.d.ts +68 -0
  22. package/dist/mcp/session-store.js +169 -0
  23. package/dist/mcp/signal-handler.js +12 -12
  24. package/dist/mcp/tool-registry.d.ts +17 -4
  25. package/dist/mcp/tool-registry.js +37 -7
  26. package/dist/mcp/tools/activity.js +99 -7
  27. package/dist/mcp/tools/app-scaffold.js +304 -336
  28. package/dist/mcp/tools/company.d.ts +9 -0
  29. package/dist/mcp/tools/company.js +88 -0
  30. package/dist/mcp/tools/discussion.js +68 -0
  31. package/dist/mcp/tools/workflow-permissions.d.ts +15 -0
  32. package/dist/mcp/tools/workflow-permissions.js +204 -0
  33. package/dist/mcp/tools/workflow.js +57 -18
  34. package/dist/mcp/utils/index.d.ts +2 -0
  35. package/dist/mcp/utils/index.js +12 -1
  36. package/dist/mcp/utils/role-utils.d.ts +74 -0
  37. package/dist/mcp/utils/role-utils.js +151 -0
  38. package/dist/mcp/utils/types.d.ts +43 -1
  39. package/dist/mcp/utils/types.js +14 -0
  40. package/dist/mcp/webhook-handler.d.ts +6 -0
  41. package/dist/mcp/webhook-handler.js +11 -0
  42. package/dist/mcp-server.d.ts +23 -2
  43. package/dist/mcp-server.js +639 -111
  44. package/dist/plugins/vipunen/client.d.ts +150 -0
  45. package/dist/plugins/vipunen/client.js +535 -0
  46. package/dist/plugins/vipunen/config/schema-config.json +19 -0
  47. package/dist/plugins/vipunen/config/schema-doc.json +22 -0
  48. package/dist/plugins/vipunen/index.d.ts +41 -0
  49. package/dist/plugins/vipunen/index.js +88 -0
  50. package/dist/plugins/vipunen/tools.d.ts +26 -0
  51. package/dist/plugins/vipunen/tools.js +501 -0
  52. package/package.json +2 -1
  53. package/.claude/.context-watchdog.json +0 -1
  54. package/.claude/.session-checked +0 -1
  55. package/.claude/CLAUDE.md +0 -370
  56. package/.claude/agents/agent-ada-skill-builder.md +0 -94
  57. package/.claude/agents/agent-alejandro-function-fields.md +0 -342
  58. package/.claude/agents/agent-bjorn-config-audit.md +0 -103
  59. package/.claude/agents/agent-builder-agent-creator.md +0 -130
  60. package/.claude/agents/agent-code-simplifier.md +0 -53
  61. package/.claude/agents/agent-dmitri-activity-crud.md +0 -159
  62. package/.claude/agents/agent-giuseppe-app-builder.md +0 -247
  63. package/.claude/agents/agent-gunther-mcp-tools.md +0 -39
  64. package/.claude/agents/agent-helga-workflow-config.md +0 -204
  65. package/.claude/agents/agent-igor-activity-mover-automation.md +0 -125
  66. package/.claude/agents/agent-ingrid-doc-templates.md +0 -261
  67. package/.claude/agents/agent-ivan-monolith.md +0 -154
  68. package/.claude/agents/agent-kenji-data-reader.md +0 -86
  69. package/.claude/agents/agent-lars-code-inspector.md +0 -102
  70. package/.claude/agents/agent-marco-mockup-builder.md +0 -110
  71. package/.claude/agents/agent-marcus-api-documenter.md +0 -323
  72. package/.claude/agents/agent-marketplace-publisher.md +0 -280
  73. package/.claude/agents/agent-marketplace-reviewer.md +0 -309
  74. package/.claude/agents/agent-permissions-handler.md +0 -208
  75. package/.claude/agents/agent-simple-writer.md +0 -48
  76. package/.claude/agents/agent-svetlana-code-review.md +0 -171
  77. package/.claude/agents/agent-tanya-test-runner.md +0 -333
  78. package/.claude/agents/agent-ui-designer.md +0 -100
  79. package/.claude/agents/agent-viktor-sql-insights.md +0 -212
  80. package/.claude/agents/agent-web-search.md +0 -55
  81. package/.claude/agents/agent-yevgeni-discussions.md +0 -45
  82. package/.claude/agents/agent-zara-zapier.md +0 -159
  83. package/.claude/commands/app-squad.md +0 -135
  84. package/.claude/commands/audit-squad.md +0 -158
  85. package/.claude/commands/autoplan.md +0 -563
  86. package/.claude/commands/cleanup-squad.md +0 -98
  87. package/.claude/commands/config-squad.md +0 -106
  88. package/.claude/commands/crud-squad.md +0 -87
  89. package/.claude/commands/data-squad.md +0 -97
  90. package/.claude/commands/debug-squad.md +0 -303
  91. package/.claude/commands/doc-squad.md +0 -65
  92. package/.claude/commands/handoff.md +0 -137
  93. package/.claude/commands/health.md +0 -49
  94. package/.claude/commands/help.md +0 -29
  95. package/.claude/commands/help:agents.md +0 -151
  96. package/.claude/commands/help:commands.md +0 -78
  97. package/.claude/commands/help:faq.md +0 -79
  98. package/.claude/commands/help:plugins.md +0 -50
  99. package/.claude/commands/help:skills.md +0 -93
  100. package/.claude/commands/help:tools.md +0 -75
  101. package/.claude/commands/hotfix-squad.md +0 -112
  102. package/.claude/commands/integration-squad.md +0 -82
  103. package/.claude/commands/janitor-squad.md +0 -167
  104. package/.claude/commands/learn-auto.md +0 -120
  105. package/.claude/commands/learn.md +0 -120
  106. package/.claude/commands/mcp-list.md +0 -27
  107. package/.claude/commands/onboard-squad.md +0 -140
  108. package/.claude/commands/plan-workspace.md +0 -732
  109. package/.claude/commands/prd.md +0 -130
  110. package/.claude/commands/project-status.md +0 -82
  111. package/.claude/commands/publish.md +0 -138
  112. package/.claude/commands/recap.md +0 -69
  113. package/.claude/commands/restore.md +0 -64
  114. package/.claude/commands/review-squad.md +0 -152
  115. package/.claude/commands/save.md +0 -24
  116. package/.claude/commands/stats.md +0 -19
  117. package/.claude/commands/swarm.md +0 -210
  118. package/.claude/commands/tool-builder.md +0 -39
  119. package/.claude/commands/ws-pull.md +0 -44
  120. package/.claude/hooks/_shared-memory.cjs +0 -305
  121. package/.claude/hooks/_utils.cjs +0 -108
  122. package/.claude/hooks/agent-failure-detector.cjs +0 -383
  123. package/.claude/hooks/agent-usage-logger.cjs +0 -204
  124. package/.claude/hooks/app-edit-guard.cjs +0 -494
  125. package/.claude/hooks/auto-learn.cjs +0 -304
  126. package/.claude/hooks/bash-guard.cjs +0 -272
  127. package/.claude/hooks/builder-mode-manager.cjs +0 -354
  128. package/.claude/hooks/bulk-activity-guard.cjs +0 -271
  129. package/.claude/hooks/context-watchdog.cjs +0 -230
  130. package/.claude/hooks/delegation-reminder.cjs +0 -465
  131. package/.claude/hooks/design-system-lint.cjs +0 -271
  132. package/.claude/hooks/post-scaffold-hook.cjs +0 -181
  133. package/.claude/hooks/prompt-guard.cjs +0 -354
  134. package/.claude/hooks/publish-template-guard.cjs +0 -147
  135. package/.claude/hooks/session-start.cjs +0 -35
  136. package/.claude/hooks/shared-memory-writer.cjs +0 -147
  137. package/.claude/hooks/skill-injector.cjs +0 -140
  138. package/.claude/hooks/skill-usage-logger.cjs +0 -258
  139. package/.claude/hooks/src-edit-guard.cjs +0 -240
  140. package/.claude/hooks/sync-marketplace-agents.cjs +0 -346
  141. package/.claude/settings.json +0 -257
  142. package/.claude/skills/SDK-activity-patterns/SKILL.md +0 -428
  143. package/.claude/skills/SDK-document-templates/SKILL.md +0 -1033
  144. package/.claude/skills/SDK-function-fields/SKILL.md +0 -542
  145. package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
  146. package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
  147. package/.claude/skills/SDK-insight-queries/SKILL.md +0 -787
  148. package/.claude/skills/SDK-ws-config-skill/SKILL.md +0 -1139
  149. package/.claude/skills/agent-structure/SKILL.md +0 -98
  150. package/.claude/skills/api-documentation-patterns/SKILL.md +0 -474
  151. package/.claude/skills/chrome-mcp-reference/SKILL.md +0 -370
  152. package/.claude/skills/delegation-routing/SKILL.md +0 -202
  153. package/.claude/skills/frontend-design/SKILL.md +0 -254
  154. package/.claude/skills/hailer-activity-mover/SKILL.md +0 -213
  155. package/.claude/skills/hailer-api-client/SKILL.md +0 -518
  156. package/.claude/skills/hailer-app-builder/SKILL.md +0 -1434
  157. package/.claude/skills/hailer-apps-pictures/SKILL.md +0 -269
  158. package/.claude/skills/hailer-design-system/SKILL.md +0 -235
  159. package/.claude/skills/hailer-monolith-automations/SKILL.md +0 -686
  160. package/.claude/skills/hailer-permissions-system/SKILL.md +0 -121
  161. package/.claude/skills/hailer-project-protocol/SKILL.md +0 -488
  162. package/.claude/skills/hailer-rest-api/SKILL.md +0 -61
  163. package/.claude/skills/hailer-rest-api/hailer-activities.md +0 -184
  164. package/.claude/skills/hailer-rest-api/hailer-admin.md +0 -473
  165. package/.claude/skills/hailer-rest-api/hailer-calendar.md +0 -256
  166. package/.claude/skills/hailer-rest-api/hailer-feed.md +0 -249
  167. package/.claude/skills/hailer-rest-api/hailer-insights.md +0 -195
  168. package/.claude/skills/hailer-rest-api/hailer-messaging.md +0 -276
  169. package/.claude/skills/hailer-rest-api/hailer-workflows.md +0 -283
  170. package/.claude/skills/insight-join-patterns/SKILL.md +0 -174
  171. package/.claude/skills/integration-patterns/SKILL.md +0 -421
  172. package/.claude/skills/json-only-output/SKILL.md +0 -72
  173. package/.claude/skills/lsp-setup/SKILL.md +0 -160
  174. package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
  175. package/.claude/skills/optional-parameters/SKILL.md +0 -72
  176. package/.claude/skills/publish-hailer-app/SKILL.md +0 -244
  177. package/.claude/skills/testing-patterns/SKILL.md +0 -630
  178. package/.claude/skills/tool-builder/SKILL.md +0 -250
  179. package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
  180. package/.claude/skills/tool-response-verification/SKILL.md +0 -92
  181. package/.claude/skills/zapier-hailer-patterns/SKILL.md +0 -581
  182. package/.hailer-mcp-port +0 -1
  183. package/.mcp.json +0 -13
  184. package/.opencode/agent/agent-ada-skill-builder.md +0 -35
  185. package/.opencode/agent/agent-alejandro-function-fields.md +0 -39
  186. package/.opencode/agent/agent-bjorn-config-audit.md +0 -36
  187. package/.opencode/agent/agent-builder-agent-creator.md +0 -39
  188. package/.opencode/agent/agent-code-simplifier.md +0 -31
  189. package/.opencode/agent/agent-dmitri-activity-crud.md +0 -40
  190. package/.opencode/agent/agent-giuseppe-app-builder.md +0 -37
  191. package/.opencode/agent/agent-gunther-mcp-tools.md +0 -39
  192. package/.opencode/agent/agent-helga-workflow-config.md +0 -204
  193. package/.opencode/agent/agent-igor-activity-mover-automation.md +0 -46
  194. package/.opencode/agent/agent-ingrid-doc-templates.md +0 -39
  195. package/.opencode/agent/agent-ivan-monolith.md +0 -46
  196. package/.opencode/agent/agent-kenji-data-reader.md +0 -53
  197. package/.opencode/agent/agent-lars-code-inspector.md +0 -28
  198. package/.opencode/agent/agent-marco-mockup-builder.md +0 -42
  199. package/.opencode/agent/agent-marcus-api-documenter.md +0 -53
  200. package/.opencode/agent/agent-marketplace-publisher.md +0 -44
  201. package/.opencode/agent/agent-marketplace-reviewer.md +0 -42
  202. package/.opencode/agent/agent-permissions-handler.md +0 -50
  203. package/.opencode/agent/agent-simple-writer.md +0 -45
  204. package/.opencode/agent/agent-svetlana-code-review.md +0 -39
  205. package/.opencode/agent/agent-tanya-test-runner.md +0 -57
  206. package/.opencode/agent/agent-ui-designer.md +0 -56
  207. package/.opencode/agent/agent-viktor-sql-insights.md +0 -34
  208. package/.opencode/agent/agent-web-search.md +0 -42
  209. package/.opencode/agent/agent-yevgeni-discussions.md +0 -37
  210. package/.opencode/agent/agent-zara-zapier.md +0 -53
  211. package/.opencode/commands/app-squad.md +0 -135
  212. package/.opencode/commands/audit-squad.md +0 -158
  213. package/.opencode/commands/autoplan.md +0 -563
  214. package/.opencode/commands/cleanup-squad.md +0 -98
  215. package/.opencode/commands/config-squad.md +0 -106
  216. package/.opencode/commands/crud-squad.md +0 -87
  217. package/.opencode/commands/data-squad.md +0 -97
  218. package/.opencode/commands/debug-squad.md +0 -303
  219. package/.opencode/commands/doc-squad.md +0 -65
  220. package/.opencode/commands/handoff.md +0 -137
  221. package/.opencode/commands/health.md +0 -49
  222. package/.opencode/commands/help-agents.md +0 -151
  223. package/.opencode/commands/help-commands.md +0 -32
  224. package/.opencode/commands/help-faq.md +0 -29
  225. package/.opencode/commands/help-plugins.md +0 -28
  226. package/.opencode/commands/help-skills.md +0 -7
  227. package/.opencode/commands/help-tools.md +0 -40
  228. package/.opencode/commands/help.md +0 -28
  229. package/.opencode/commands/hotfix-squad.md +0 -112
  230. package/.opencode/commands/integration-squad.md +0 -82
  231. package/.opencode/commands/janitor-squad.md +0 -167
  232. package/.opencode/commands/learn-auto.md +0 -120
  233. package/.opencode/commands/learn.md +0 -120
  234. package/.opencode/commands/mcp-list.md +0 -27
  235. package/.opencode/commands/onboard-squad.md +0 -140
  236. package/.opencode/commands/plan-workspace.md +0 -732
  237. package/.opencode/commands/prd.md +0 -131
  238. package/.opencode/commands/project-status.md +0 -82
  239. package/.opencode/commands/publish.md +0 -138
  240. package/.opencode/commands/recap.md +0 -69
  241. package/.opencode/commands/restore.md +0 -64
  242. package/.opencode/commands/review-squad.md +0 -152
  243. package/.opencode/commands/save.md +0 -24
  244. package/.opencode/commands/stats.md +0 -19
  245. package/.opencode/commands/swarm.md +0 -210
  246. package/.opencode/commands/tool-builder.md +0 -39
  247. package/.opencode/commands/ws-pull.md +0 -44
  248. package/.opencode/opencode.json +0 -21
  249. package/inbox/failures.log +0 -1
  250. package/inbox/usage.jsonl +0 -4
  251. package/scripts/postinstall.cjs +0 -64
  252. package/scripts/test-hal-tools.ts +0 -154
@@ -1,428 +0,0 @@
1
- ---
2
- name: SDK-activity-patterns
3
- description: Activity CRUD patterns - field value formats, dates, users, links, dropdowns
4
- version: 1.4.0
5
- triggers: Create activity, update activity, field values, date format, activitylink value
6
- ---
7
-
8
- # Activity CRUD Patterns
9
-
10
- ## MCP Tools
11
-
12
- | Tool | Purpose |
13
- |------|---------|
14
- | `mcp__hailer__create_activity` | Create new activity |
15
- | `mcp__hailer__update_activity` | Update existing activity |
16
-
17
- ---
18
-
19
- ## Create Activity
20
-
21
- ```javascript
22
- mcp__hailer__create_activity({
23
- workflowId: "682ac815fba468d857d498f7",
24
- phaseId: "682ac815fba468d857d49904",
25
- name: "New Task", // Optional - activity name
26
- fields: {
27
- "fieldId1": "value1",
28
- "fieldId2": "value2"
29
- }
30
- })
31
- ```
32
-
33
- ## Update Activity
34
-
35
- ```javascript
36
- mcp__hailer__update_activity({
37
- activityId: "692abc123def456",
38
- fields: {
39
- "fieldId1": "new value"
40
- },
41
- // Optional: move to different phase
42
- phaseId: "682ac815fba468d857d49906"
43
- })
44
- ```
45
-
46
- ---
47
-
48
- ## Field Value Formats
49
-
50
- All valid field types from `hailer.d.ts`. **No multi-select types exist.**
51
-
52
- ### Text Fields
53
-
54
- | Type | Format | Example |
55
- |------|--------|---------|
56
- | `text` | String | `"Hello world"` |
57
- | `textarea` | String | `"Multi\nline\ntext"` |
58
- | `textunit` | String | `"100"` (unit in display) |
59
-
60
- ### Number Fields
61
-
62
- | Type | Format | Example |
63
- |------|--------|---------|
64
- | `numeric` | Number | `42` or `42.5` |
65
- | `numericunit` | Number | `99.99` (unit defined in field config) |
66
-
67
- ### Date/Time Fields
68
-
69
- | Type | Format | Example |
70
- |------|--------|---------|
71
- | `date` | Unix timestamp (ms) | `1730937600000` |
72
- | `datetime` | Unix timestamp (ms) | `1730937600000` |
73
- | `daterange` | Object | `{ start: 1730937600000, end: 1731024000000 }` |
74
- | `datetimerange` | Object | `{ start: 1730937600000, end: 1731024000000 }` |
75
- | `time` | Unix timestamp (ms, includes date!) | `1765863000000` |
76
- | `timerange` | Object | `{ start: 1765863000000, end: 1765915200000 }` (ms timestamps, includes date!) |
77
-
78
- **Date Conversion:**
79
- ```javascript
80
- // JavaScript Date to Hailer timestamp
81
- const timestamp = new Date('2024-11-07').getTime(); // 1730937600000
82
-
83
- // Hailer timestamp to Date
84
- const date = new Date(1730937600000);
85
-
86
- // Time field: also Unix timestamp (includes date)
87
- const today = new Date();
88
- today.setUTCHours(9, 30, 0, 0);
89
- const timeValue = today.getTime(); // e.g., 1765863000000
90
- ```
91
-
92
- ### Selection Fields
93
-
94
- | Type | Format | Example |
95
- |------|--------|---------|
96
- | `textpredefinedoptions` | **STRING** | `"High"` |
97
-
98
- **CRITICAL:** Value is STRING, not array! No multi-select type exists.
99
- ```javascript
100
- // ✅ Correct
101
- fields: { priority: "High" }
102
-
103
- // ❌ Wrong
104
- fields: { priority: ["High"] }
105
- ```
106
-
107
- ### User & Team Fields
108
-
109
- | Type | Format | Example |
110
- |------|--------|---------|
111
- | `users` | **STRING** (user ID) | `"5f8a1b2c3d4e5f6a7b8c9d0e"` |
112
- | `teams` | **STRING** (team ID) | `"teamId123"` |
113
-
114
- **CRITICAL:** Value is STRING, not array! No multi-select types exist.
115
- ```javascript
116
- // ✅ Correct
117
- fields: { assignee: "5f8a1b2c3d4e5f6a7b8c9d0e" }
118
-
119
- // ❌ Wrong
120
- fields: { assignee: ["5f8a1b2c3d4e5f6a7b8c9d0e"] }
121
- ```
122
-
123
- ### Link Fields
124
-
125
- | Type | Format | Example |
126
- |------|--------|---------|
127
- | `activitylink` | **STRING** (activity ID) | `"692abc123def456"` |
128
-
129
- **CRITICAL:** Activity link is plain STRING ID, not array or object!
130
- ```javascript
131
- // ✅ Correct - plain string ID
132
- fields: { customer: "692abc123def456" }
133
-
134
- // ❌ Wrong - array
135
- fields: { customer: ["692abc123def456"] }
136
-
137
- // ❌ Wrong - object (this is READ format, not WRITE format!)
138
- fields: { customer: { _id: "692abc123def456", name: "Acme" } }
139
- ```
140
-
141
- **READ vs WRITE formats differ:**
142
- - **READ** (from API): `{ _id: string, name: string }` object
143
- - **WRITE** (to API): plain string ID only
144
-
145
- ### Modified Fields (Checkbox & File)
146
-
147
- These use base types with a `modifier` in the field config:
148
-
149
- | Config | Value Format | Example |
150
- |--------|--------------|---------|
151
- | `numeric` + `modifier.checkbox: true` | Number | `1` (true) or `0` (false) |
152
- | `text` + `modifier.file: true` | Object | File reference (UI handles) |
153
-
154
- ### Other Fields
155
-
156
- | Type | Format | Example |
157
- |------|--------|---------|
158
- | `country` | ISO code | `"FI"`, `"SE"`, `"US"` |
159
-
160
- ---
161
-
162
- ## Complete Create Example
163
-
164
- ```javascript
165
- mcp__hailer__create_activity({
166
- workflowId: "682ac815fba468d857d498f7",
167
- phaseId: "682ac815fba468d857d49904",
168
- name: "Fix login bug",
169
- fields: {
170
- // Text
171
- "description_abc": "Users cannot log in after password reset",
172
-
173
- // Dropdown select (STRING!)
174
- "priority_def": "High",
175
-
176
- // User (STRING!)
177
- "assignee_jkl": "5f8a1b2c3d4e5f6a7b8c9d0e",
178
-
179
- // Activity link (STRING!)
180
- "project_mno": "692abc123def456",
181
-
182
- // Date (timestamp ms)
183
- "due_date_pqr": 1730937600000,
184
-
185
- // Number
186
- "estimated_hours_stu": 4
187
- }
188
- })
189
- ```
190
-
191
- ---
192
-
193
- ## Bulk Creation
194
-
195
- Use the `activities[]` array for bulk creation. **Each activity must include its own teamId and phaseId.**
196
-
197
- ```javascript
198
- mcp__hailer__create_activity({
199
- workflowId: "682ac815fba468d857d498f7",
200
- activities: [
201
- {
202
- name: "Task 1",
203
- phaseId: "682ac815fba468d857d49904",
204
- teamId: "690d2b2e2b3a4c5d6e7f8a9b", // REQUIRED per activity!
205
- fields: { "priority_abc": "High" }
206
- },
207
- {
208
- name: "Task 2",
209
- phaseId: "682ac815fba468d857d49904",
210
- teamId: "690d2b2e2b3a4c5d6e7f8a9b",
211
- fields: { "priority_abc": "Medium" }
212
- }
213
- ]
214
- })
215
- ```
216
-
217
- **API:** Calls `v3.activity.createMany` via socket.
218
-
219
- ### Single vs Bulk: Parameter Placement
220
-
221
- | Parameter | Single mode | Bulk mode |
222
- |-----------|-------------|-----------|
223
- | `name` | Top-level | Inside each `activities[]` item |
224
- | `phaseId` | Top-level | Inside each `activities[]` item |
225
- | `teamId` | Top-level | **Inside each `activities[]` item** |
226
- | `fields` | Top-level | Inside each `activities[]` item |
227
- | `workflowId` | Top-level | Top-level (shared) |
228
-
229
- **CRITICAL:** In bulk mode, `teamId` at the top level is **IGNORED**. Each activity in the array must have its own `teamId`. Omitting it causes "Missing team(s)" (code 127) unless the workflow has a default team.
230
-
231
- ### Team ID Fallback Chain
232
-
233
- The MCP tool auto-fills `teamId` if omitted:
234
- 1. Per-activity `teamId` (if provided) — **always provide this**
235
- 2. Workflow's default team (`workflow.team`)
236
- 3. First workspace team (last resort, may be wrong team)
237
-
238
- **Best practice:** Always pass `teamId` explicitly. Don't rely on fallbacks.
239
-
240
- ---
241
-
242
- ## Phase Transitions
243
-
244
- Move activity to different phase:
245
-
246
- ```javascript
247
- mcp__hailer__update_activity({
248
- activityId: "692abc123def456",
249
- phaseId: "682ac815fba468d857d49906" // Target phase
250
- })
251
- ```
252
-
253
- Update fields AND move phase:
254
-
255
- ```javascript
256
- mcp__hailer__update_activity({
257
- activityId: "692abc123def456",
258
- phaseId: "682ac815fba468d857d49906",
259
- fields: {
260
- "completed_date_abc": Date.now()
261
- }
262
- })
263
- ```
264
-
265
- ---
266
-
267
- ## Getting IDs
268
-
269
- Before creating/updating, you need:
270
- - **Workflow ID** - from `list_workflows` (real MongoDB ObjectId)
271
- - **Phase ID** - from `list_workflow_phases` (real MongoDB ObjectId)
272
- - **Field IDs** - from `get_workflow_schema` (real MongoDB ObjectId)
273
- - **User IDs** - from `search_workspace_users`
274
- - **Activity IDs** - from `list_activities` or previous create results
275
-
276
- **CRITICAL: MCP Tools Need Real ObjectIds**
277
-
278
- MCP tools require actual MongoDB ObjectIds (24-char hex strings), not enum key names.
279
-
280
- ```javascript
281
- // ❌ WRONG - Passing enum KEY NAMES as strings
282
- mcp__hailer__create_activity({
283
- workflowId: "Asiakkaat", // ❌ This is the enum key, not the ID
284
- fields: { "projekti_f84": "value" } // ❌ This is the enum key, not the ID
285
- })
286
-
287
- // ✅ CORRECT - Use real MongoDB ObjectIds
288
- mcp__hailer__create_activity({
289
- workflowId: "682ac815fba468d857d498f7", // ✅ Real ObjectId
290
- fields: { "68cbfec59b3869137fe2af84": "value" } // ✅ Real ObjectId
291
- })
292
- ```
293
-
294
- **TypeScript code vs MCP calls:**
295
- - **TypeScript:** Use enums for type safety → `WorkflowIds.Asiakkaat` (resolves to the ObjectId)
296
- - **MCP tools:** Pass the actual ObjectId string → `"682ac815fba468d857d498f7"`
297
-
298
- **Where to get real IDs:**
299
- - `enums.ts` → enum values ARE the real ObjectIds
300
- - `list_workflows` → workflow `_id` field
301
- - `get_workflow_schema` → field `_id` property
302
- - Kenji agent → extracts IDs from workspace files
303
-
304
- **Agent pattern:** Orchestrator gets real IDs from Kenji (or enums.ts), passes to Dmitri.
305
-
306
- ---
307
-
308
- ## Date Helpers
309
-
310
- ### Current Date
311
- ```javascript
312
- const now = Date.now(); // Current timestamp ms
313
- ```
314
-
315
- ### Specific Date
316
- ```javascript
317
- // From string
318
- const date = new Date('2024-11-07T09:00:00').getTime();
319
-
320
- // From components
321
- const date = new Date(2024, 10, 7, 9, 0, 0).getTime(); // Month is 0-indexed!
322
- ```
323
-
324
- ### Add Days
325
- ```javascript
326
- const inOneWeek = Date.now() + (7 * 24 * 60 * 60 * 1000);
327
- ```
328
-
329
- ### Start of Day
330
- ```javascript
331
- const today = new Date();
332
- today.setHours(0, 0, 0, 0);
333
- const startOfDay = today.getTime();
334
- ```
335
-
336
- ---
337
-
338
- ## Time Field Values
339
-
340
- Time fields (`time` and `timerange`) store **Unix timestamps in milliseconds** that include the date.
341
-
342
- ```javascript
343
- // Time field stores a full timestamp
344
- const timeField = 1765863000000; // e.g., 2025-12-16 09:30:00 UTC
345
-
346
- // To extract just the time portion:
347
- const date = new Date(timeField);
348
- const hours = date.getUTCHours(); // 9
349
- const minutes = date.getUTCMinutes(); // 30
350
-
351
- // To create a time value for a specific time today:
352
- const today = new Date();
353
- today.setUTCHours(9, 30, 0, 0);
354
- const timeValue = today.getTime();
355
- ```
356
-
357
- **Note:** When copying values between time/timerange fields, no conversion needed.
358
-
359
- ---
360
-
361
- ## Clearing Field Values
362
-
363
- To clear a field, set to empty string or null:
364
-
365
- ```javascript
366
- mcp__hailer__update_activity({
367
- activityId: "692abc123def456",
368
- fields: {
369
- "assignee_abc": "", // Clear user
370
- "due_date_def": null, // Clear date
371
- "notes_ghi": "" // Clear text
372
- }
373
- })
374
- ```
375
-
376
- ---
377
-
378
- ## Common Mistakes
379
-
380
- | Wrong | Right |
381
- |-------|-------|
382
- | `{ priority: ["High"] }` | `{ priority: "High" }` (string for single select) |
383
- | `{ assignee: ["userId"] }` | `{ assignee: "userId" }` (string for single user) |
384
- | `{ customer: ["actId"] }` | `{ customer: "actId" }` (string for activitylink) |
385
- | `{ date: "2024-11-07" }` | `{ date: 1730937600000 }` (timestamp ms) |
386
- | `{ time: "09:00" }` | `{ time: 1765863000000 }` (ms timestamp) |
387
- | `{ datetimerange: 1730937600000 }` | `{ datetimerange: { start: 1730937600000, end: 1731024000000 } }` (OBJECT!) |
388
- | `{ daterange: 1730937600000 }` | `{ daterange: { start: 1730937600000, end: 1731024000000 } }` (OBJECT!) |
389
- | `{ textField: 300 }` | `{ textField: "300" }` (text fields must be STRINGS, even for numbers) |
390
- | Guessing field IDs | Get from enums or `get_workflow_schema` |
391
- | Bulk create with top-level teamId | Put teamId INSIDE each activity object |
392
- | Creating without loading this skill | Always load SDK-activity-patterns before CRUD calls |
393
-
394
- ---
395
-
396
- ## Team Handling
397
-
398
- ### Option 1: Pass teamId explicitly (recommended)
399
- Always include `teamId` in your create calls. For bulk mode, include it in **each activity object**.
400
-
401
- ### Option 2: Workflow default team
402
- If the workflow has a default team set, the MCP tool auto-fills `teamId` when omitted.
403
-
404
- **Set default team:** Hailer UI → Workflow Settings → Default Team → Select team.
405
-
406
- ### Common Error: "Missing team(s)" (Code 127)
407
-
408
- **Cause:** No teamId provided AND workflow has no default team AND no workspace teams found.
409
-
410
- **Fix options:**
411
- 1. Pass `teamId` explicitly in every create call (best)
412
- 2. Set default team on the workflow in Hailer UI
413
- 3. Ask orchestrator/Kenji for available team IDs before creating
414
-
415
- ---
416
-
417
- ## Checklist
418
-
419
- Before creating/updating activities:
420
-
421
- - [ ] Have workflow ID (from enum or API)
422
- - [ ] Have phase ID (from enum or API)
423
- - [ ] Have field IDs (from enum or API)
424
- - [ ] Have **team ID** (from teams.ts or API) — don't rely on fallbacks
425
- - [ ] All values are **STRINGS** for select/user/link fields (no multi-select types exist)
426
- - [ ] Dates are **Unix timestamps in milliseconds**
427
- - [ ] Times are **Unix timestamps in milliseconds** (like dates)
428
- - [ ] **Bulk mode:** teamId, phaseId, fields are **inside each activity object**, not top-level