@hailer/mcp 1.1.12 → 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 (271) hide show
  1. package/CHANGELOG.md +0 -7
  2. package/{.claude → dist}/CLAUDE.md +2 -2
  3. package/dist/app.js +18 -5
  4. package/dist/bot/bot-config.d.ts +10 -1
  5. package/dist/bot/bot-config.js +64 -3
  6. package/dist/bot/bot-manager.d.ts +2 -0
  7. package/dist/bot/bot-manager.js +9 -2
  8. package/dist/bot/bot.d.ts +33 -0
  9. package/dist/bot/bot.js +461 -160
  10. package/dist/bot/services/message-classifier.js +17 -0
  11. package/dist/bot/services/permission-guard.d.ts +52 -0
  12. package/dist/bot/services/permission-guard.js +149 -0
  13. package/dist/bot/services/types.d.ts +5 -0
  14. package/dist/bot/services/typing-indicator.d.ts +6 -1
  15. package/dist/bot/services/typing-indicator.js +19 -3
  16. package/dist/cli.js +0 -0
  17. package/dist/config.d.ts +6 -1
  18. package/dist/config.js +43 -0
  19. package/dist/core.js +3 -6
  20. package/dist/lib/discussion-lock.d.ts +42 -0
  21. package/dist/lib/discussion-lock.js +110 -0
  22. package/dist/mcp/UserContextCache.d.ts +5 -0
  23. package/dist/mcp/UserContextCache.js +51 -19
  24. package/dist/mcp/hailer-clients.d.ts +19 -1
  25. package/dist/mcp/hailer-clients.js +158 -24
  26. package/dist/mcp/session-store.d.ts +68 -0
  27. package/dist/mcp/session-store.js +169 -0
  28. package/dist/mcp/signal-handler.js +2 -0
  29. package/dist/mcp/tool-registry.d.ts +17 -4
  30. package/dist/mcp/tool-registry.js +37 -7
  31. package/dist/mcp/tools/activity.js +99 -7
  32. package/dist/mcp/tools/app-scaffold.js +304 -336
  33. package/dist/mcp/tools/bot-config/constants.d.ts +23 -0
  34. package/dist/mcp/tools/bot-config/constants.js +94 -0
  35. package/dist/mcp/tools/bot-config/core.d.ts +253 -0
  36. package/dist/mcp/tools/bot-config/core.js +2456 -0
  37. package/dist/mcp/tools/bot-config/index.d.ts +10 -0
  38. package/dist/mcp/tools/bot-config/index.js +59 -0
  39. package/dist/mcp/tools/bot-config/tools.d.ts +7 -0
  40. package/dist/mcp/tools/bot-config/tools.js +15 -0
  41. package/dist/mcp/tools/bot-config/types.d.ts +50 -0
  42. package/dist/mcp/tools/bot-config/types.js +6 -0
  43. package/dist/mcp/tools/bug-fixer-tools.d.ts +45 -0
  44. package/dist/mcp/tools/bug-fixer-tools.js +1096 -0
  45. package/dist/mcp/tools/company.d.ts +9 -0
  46. package/dist/mcp/tools/company.js +88 -0
  47. package/dist/mcp/tools/discussion.js +68 -0
  48. package/dist/mcp/tools/document.d.ts +11 -0
  49. package/dist/mcp/tools/document.js +741 -0
  50. package/dist/mcp/tools/investigate.d.ts +9 -0
  51. package/dist/mcp/tools/investigate.js +254 -0
  52. package/dist/mcp/tools/workflow-permissions.d.ts +15 -0
  53. package/dist/mcp/tools/workflow-permissions.js +204 -0
  54. package/dist/mcp/tools/workflow.js +57 -18
  55. package/dist/mcp/utils/index.d.ts +2 -0
  56. package/dist/mcp/utils/index.js +12 -1
  57. package/dist/mcp/utils/role-utils.d.ts +74 -0
  58. package/dist/mcp/utils/role-utils.js +151 -0
  59. package/dist/mcp/utils/types.d.ts +43 -1
  60. package/dist/mcp/utils/types.js +14 -0
  61. package/dist/mcp/webhook-handler.d.ts +4 -0
  62. package/dist/mcp/webhook-handler.js +8 -0
  63. package/dist/mcp-server.d.ts +23 -2
  64. package/dist/mcp-server.js +639 -127
  65. package/dist/plugins/vipunen/client.d.ts +150 -0
  66. package/dist/plugins/vipunen/client.js +535 -0
  67. package/dist/plugins/vipunen/config/schema-config.json +19 -0
  68. package/dist/plugins/vipunen/config/schema-doc.json +22 -0
  69. package/dist/plugins/vipunen/index.d.ts +41 -0
  70. package/dist/plugins/vipunen/index.js +88 -0
  71. package/dist/plugins/vipunen/tools.d.ts +26 -0
  72. package/dist/plugins/vipunen/tools.js +501 -0
  73. package/dist/stdio-server.d.ts +14 -0
  74. package/dist/stdio-server.js +101 -0
  75. package/package.json +2 -1
  76. package/.claude/agents/agent-ada-skill-builder.md +0 -94
  77. package/.claude/agents/agent-alejandro-function-fields.md +0 -342
  78. package/.claude/agents/agent-bjorn-config-audit.md +0 -103
  79. package/.claude/agents/agent-builder-agent-creator.md +0 -130
  80. package/.claude/agents/agent-code-simplifier.md +0 -53
  81. package/.claude/agents/agent-dmitri-activity-crud.md +0 -159
  82. package/.claude/agents/agent-giuseppe-app-builder.md +0 -247
  83. package/.claude/agents/agent-gunther-mcp-tools.md +0 -39
  84. package/.claude/agents/agent-helga-workflow-config.md +0 -204
  85. package/.claude/agents/agent-igor-activity-mover-automation.md +0 -125
  86. package/.claude/agents/agent-ingrid-doc-templates.md +0 -261
  87. package/.claude/agents/agent-ivan-monolith.md +0 -154
  88. package/.claude/agents/agent-kenji-data-reader.md +0 -86
  89. package/.claude/agents/agent-lars-code-inspector.md +0 -102
  90. package/.claude/agents/agent-marco-mockup-builder.md +0 -110
  91. package/.claude/agents/agent-marcus-api-documenter.md +0 -323
  92. package/.claude/agents/agent-marketplace-publisher.md +0 -280
  93. package/.claude/agents/agent-marketplace-reviewer.md +0 -309
  94. package/.claude/agents/agent-permissions-handler.md +0 -208
  95. package/.claude/agents/agent-simple-writer.md +0 -48
  96. package/.claude/agents/agent-svetlana-code-review.md +0 -171
  97. package/.claude/agents/agent-tanya-test-runner.md +0 -333
  98. package/.claude/agents/agent-ui-designer.md +0 -100
  99. package/.claude/agents/agent-viktor-sql-insights.md +0 -212
  100. package/.claude/agents/agent-web-search.md +0 -55
  101. package/.claude/agents/agent-yevgeni-discussions.md +0 -45
  102. package/.claude/agents/agent-zara-zapier.md +0 -159
  103. package/.claude/commands/app-squad.md +0 -135
  104. package/.claude/commands/audit-squad.md +0 -158
  105. package/.claude/commands/autoplan.md +0 -563
  106. package/.claude/commands/cleanup-squad.md +0 -98
  107. package/.claude/commands/config-squad.md +0 -106
  108. package/.claude/commands/crud-squad.md +0 -87
  109. package/.claude/commands/data-squad.md +0 -97
  110. package/.claude/commands/debug-squad.md +0 -303
  111. package/.claude/commands/doc-squad.md +0 -65
  112. package/.claude/commands/handoff.md +0 -137
  113. package/.claude/commands/health.md +0 -49
  114. package/.claude/commands/help.md +0 -29
  115. package/.claude/commands/help:agents.md +0 -151
  116. package/.claude/commands/help:commands.md +0 -78
  117. package/.claude/commands/help:faq.md +0 -79
  118. package/.claude/commands/help:plugins.md +0 -50
  119. package/.claude/commands/help:skills.md +0 -93
  120. package/.claude/commands/help:tools.md +0 -75
  121. package/.claude/commands/hotfix-squad.md +0 -112
  122. package/.claude/commands/integration-squad.md +0 -82
  123. package/.claude/commands/janitor-squad.md +0 -167
  124. package/.claude/commands/learn-auto.md +0 -120
  125. package/.claude/commands/learn.md +0 -120
  126. package/.claude/commands/mcp-list.md +0 -27
  127. package/.claude/commands/onboard-squad.md +0 -140
  128. package/.claude/commands/plan-workspace.md +0 -732
  129. package/.claude/commands/prd.md +0 -130
  130. package/.claude/commands/project-status.md +0 -82
  131. package/.claude/commands/publish.md +0 -138
  132. package/.claude/commands/recap.md +0 -69
  133. package/.claude/commands/restore.md +0 -64
  134. package/.claude/commands/review-squad.md +0 -152
  135. package/.claude/commands/save.md +0 -24
  136. package/.claude/commands/stats.md +0 -19
  137. package/.claude/commands/swarm.md +0 -210
  138. package/.claude/commands/tool-builder.md +0 -39
  139. package/.claude/commands/ws-pull.md +0 -44
  140. package/.claude/hooks/_shared-memory.cjs +0 -305
  141. package/.claude/hooks/_utils.cjs +0 -108
  142. package/.claude/hooks/agent-failure-detector.cjs +0 -383
  143. package/.claude/hooks/agent-usage-logger.cjs +0 -204
  144. package/.claude/hooks/app-edit-guard.cjs +0 -494
  145. package/.claude/hooks/auto-learn.cjs +0 -304
  146. package/.claude/hooks/bash-guard.cjs +0 -272
  147. package/.claude/hooks/builder-mode-manager.cjs +0 -354
  148. package/.claude/hooks/bulk-activity-guard.cjs +0 -271
  149. package/.claude/hooks/context-watchdog.cjs +0 -230
  150. package/.claude/hooks/delegation-reminder.cjs +0 -465
  151. package/.claude/hooks/design-system-lint.cjs +0 -271
  152. package/.claude/hooks/post-scaffold-hook.cjs +0 -181
  153. package/.claude/hooks/prompt-guard.cjs +0 -354
  154. package/.claude/hooks/publish-template-guard.cjs +0 -147
  155. package/.claude/hooks/session-start.cjs +0 -35
  156. package/.claude/hooks/shared-memory-writer.cjs +0 -147
  157. package/.claude/hooks/skill-injector.cjs +0 -140
  158. package/.claude/hooks/skill-usage-logger.cjs +0 -258
  159. package/.claude/hooks/src-edit-guard.cjs +0 -240
  160. package/.claude/hooks/sync-marketplace-agents.cjs +0 -346
  161. package/.claude/settings.json +0 -257
  162. package/.claude/skills/SDK-activity-patterns/SKILL.md +0 -428
  163. package/.claude/skills/SDK-document-templates/SKILL.md +0 -1033
  164. package/.claude/skills/SDK-function-fields/SKILL.md +0 -542
  165. package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
  166. package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
  167. package/.claude/skills/SDK-insight-queries/SKILL.md +0 -787
  168. package/.claude/skills/SDK-ws-config-skill/SKILL.md +0 -1139
  169. package/.claude/skills/agent-structure/SKILL.md +0 -98
  170. package/.claude/skills/api-documentation-patterns/SKILL.md +0 -474
  171. package/.claude/skills/chrome-mcp-reference/SKILL.md +0 -370
  172. package/.claude/skills/delegation-routing/SKILL.md +0 -202
  173. package/.claude/skills/frontend-design/SKILL.md +0 -254
  174. package/.claude/skills/hailer-activity-mover/SKILL.md +0 -213
  175. package/.claude/skills/hailer-api-client/SKILL.md +0 -518
  176. package/.claude/skills/hailer-app-builder/SKILL.md +0 -1434
  177. package/.claude/skills/hailer-apps-pictures/SKILL.md +0 -269
  178. package/.claude/skills/hailer-design-system/SKILL.md +0 -235
  179. package/.claude/skills/hailer-monolith-automations/SKILL.md +0 -686
  180. package/.claude/skills/hailer-permissions-system/SKILL.md +0 -121
  181. package/.claude/skills/hailer-project-protocol/SKILL.md +0 -488
  182. package/.claude/skills/hailer-rest-api/SKILL.md +0 -61
  183. package/.claude/skills/hailer-rest-api/hailer-activities.md +0 -184
  184. package/.claude/skills/hailer-rest-api/hailer-admin.md +0 -473
  185. package/.claude/skills/hailer-rest-api/hailer-calendar.md +0 -256
  186. package/.claude/skills/hailer-rest-api/hailer-feed.md +0 -249
  187. package/.claude/skills/hailer-rest-api/hailer-insights.md +0 -195
  188. package/.claude/skills/hailer-rest-api/hailer-messaging.md +0 -276
  189. package/.claude/skills/hailer-rest-api/hailer-workflows.md +0 -283
  190. package/.claude/skills/insight-join-patterns/SKILL.md +0 -174
  191. package/.claude/skills/integration-patterns/SKILL.md +0 -421
  192. package/.claude/skills/json-only-output/SKILL.md +0 -72
  193. package/.claude/skills/lsp-setup/SKILL.md +0 -160
  194. package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
  195. package/.claude/skills/optional-parameters/SKILL.md +0 -72
  196. package/.claude/skills/publish-hailer-app/SKILL.md +0 -244
  197. package/.claude/skills/testing-patterns/SKILL.md +0 -630
  198. package/.claude/skills/tool-builder/SKILL.md +0 -250
  199. package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
  200. package/.claude/skills/tool-response-verification/SKILL.md +0 -92
  201. package/.claude/skills/zapier-hailer-patterns/SKILL.md +0 -581
  202. package/.mcp.json +0 -13
  203. package/.opencode/agent/agent-ada-skill-builder.md +0 -35
  204. package/.opencode/agent/agent-alejandro-function-fields.md +0 -39
  205. package/.opencode/agent/agent-bjorn-config-audit.md +0 -36
  206. package/.opencode/agent/agent-builder-agent-creator.md +0 -39
  207. package/.opencode/agent/agent-code-simplifier.md +0 -31
  208. package/.opencode/agent/agent-dmitri-activity-crud.md +0 -40
  209. package/.opencode/agent/agent-giuseppe-app-builder.md +0 -37
  210. package/.opencode/agent/agent-gunther-mcp-tools.md +0 -39
  211. package/.opencode/agent/agent-helga-workflow-config.md +0 -203
  212. package/.opencode/agent/agent-igor-activity-mover-automation.md +0 -46
  213. package/.opencode/agent/agent-ingrid-doc-templates.md +0 -39
  214. package/.opencode/agent/agent-ivan-monolith.md +0 -46
  215. package/.opencode/agent/agent-kenji-data-reader.md +0 -53
  216. package/.opencode/agent/agent-lars-code-inspector.md +0 -28
  217. package/.opencode/agent/agent-marco-mockup-builder.md +0 -42
  218. package/.opencode/agent/agent-marcus-api-documenter.md +0 -53
  219. package/.opencode/agent/agent-marketplace-publisher.md +0 -44
  220. package/.opencode/agent/agent-marketplace-reviewer.md +0 -42
  221. package/.opencode/agent/agent-permissions-handler.md +0 -50
  222. package/.opencode/agent/agent-simple-writer.md +0 -45
  223. package/.opencode/agent/agent-svetlana-code-review.md +0 -39
  224. package/.opencode/agent/agent-tanya-test-runner.md +0 -57
  225. package/.opencode/agent/agent-ui-designer.md +0 -56
  226. package/.opencode/agent/agent-viktor-sql-insights.md +0 -34
  227. package/.opencode/agent/agent-web-search.md +0 -42
  228. package/.opencode/agent/agent-yevgeni-discussions.md +0 -37
  229. package/.opencode/agent/agent-zara-zapier.md +0 -53
  230. package/.opencode/commands/app-squad.md +0 -135
  231. package/.opencode/commands/audit-squad.md +0 -158
  232. package/.opencode/commands/autoplan.md +0 -563
  233. package/.opencode/commands/cleanup-squad.md +0 -98
  234. package/.opencode/commands/config-squad.md +0 -106
  235. package/.opencode/commands/crud-squad.md +0 -87
  236. package/.opencode/commands/data-squad.md +0 -97
  237. package/.opencode/commands/debug-squad.md +0 -303
  238. package/.opencode/commands/doc-squad.md +0 -65
  239. package/.opencode/commands/handoff.md +0 -137
  240. package/.opencode/commands/health.md +0 -49
  241. package/.opencode/commands/help-agents.md +0 -151
  242. package/.opencode/commands/help-commands.md +0 -32
  243. package/.opencode/commands/help-faq.md +0 -29
  244. package/.opencode/commands/help-plugins.md +0 -28
  245. package/.opencode/commands/help-skills.md +0 -7
  246. package/.opencode/commands/help-tools.md +0 -40
  247. package/.opencode/commands/help.md +0 -28
  248. package/.opencode/commands/hotfix-squad.md +0 -112
  249. package/.opencode/commands/integration-squad.md +0 -82
  250. package/.opencode/commands/janitor-squad.md +0 -167
  251. package/.opencode/commands/learn-auto.md +0 -120
  252. package/.opencode/commands/learn.md +0 -120
  253. package/.opencode/commands/mcp-list.md +0 -27
  254. package/.opencode/commands/onboard-squad.md +0 -140
  255. package/.opencode/commands/plan-workspace.md +0 -732
  256. package/.opencode/commands/prd.md +0 -131
  257. package/.opencode/commands/project-status.md +0 -82
  258. package/.opencode/commands/publish.md +0 -138
  259. package/.opencode/commands/recap.md +0 -69
  260. package/.opencode/commands/restore.md +0 -64
  261. package/.opencode/commands/review-squad.md +0 -152
  262. package/.opencode/commands/save.md +0 -24
  263. package/.opencode/commands/stats.md +0 -19
  264. package/.opencode/commands/swarm.md +0 -210
  265. package/.opencode/commands/tool-builder.md +0 -39
  266. package/.opencode/commands/ws-pull.md +0 -44
  267. package/.opencode/opencode.json +0 -28
  268. package/SESSION-HANDOFF.md +0 -68
  269. package/inbox/2026-03-04-bot-config-patterns.md +0 -24
  270. package/scripts/postinstall.cjs +0 -64
  271. 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