@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.
- package/CHANGELOG.md +0 -7
- package/{.claude → dist}/CLAUDE.md +2 -2
- package/dist/app.js +18 -5
- package/dist/bot/bot-config.d.ts +10 -1
- package/dist/bot/bot-config.js +64 -3
- package/dist/bot/bot-manager.d.ts +2 -0
- package/dist/bot/bot-manager.js +9 -2
- package/dist/bot/bot.d.ts +33 -0
- package/dist/bot/bot.js +461 -160
- package/dist/bot/services/message-classifier.js +17 -0
- package/dist/bot/services/permission-guard.d.ts +52 -0
- package/dist/bot/services/permission-guard.js +149 -0
- package/dist/bot/services/types.d.ts +5 -0
- package/dist/bot/services/typing-indicator.d.ts +6 -1
- package/dist/bot/services/typing-indicator.js +19 -3
- package/dist/cli.js +0 -0
- package/dist/config.d.ts +6 -1
- package/dist/config.js +43 -0
- package/dist/core.js +3 -6
- package/dist/lib/discussion-lock.d.ts +42 -0
- package/dist/lib/discussion-lock.js +110 -0
- package/dist/mcp/UserContextCache.d.ts +5 -0
- package/dist/mcp/UserContextCache.js +51 -19
- package/dist/mcp/hailer-clients.d.ts +19 -1
- package/dist/mcp/hailer-clients.js +158 -24
- package/dist/mcp/session-store.d.ts +68 -0
- package/dist/mcp/session-store.js +169 -0
- package/dist/mcp/signal-handler.js +2 -0
- package/dist/mcp/tool-registry.d.ts +17 -4
- package/dist/mcp/tool-registry.js +37 -7
- package/dist/mcp/tools/activity.js +99 -7
- package/dist/mcp/tools/app-scaffold.js +304 -336
- package/dist/mcp/tools/bot-config/constants.d.ts +23 -0
- package/dist/mcp/tools/bot-config/constants.js +94 -0
- package/dist/mcp/tools/bot-config/core.d.ts +253 -0
- package/dist/mcp/tools/bot-config/core.js +2456 -0
- package/dist/mcp/tools/bot-config/index.d.ts +10 -0
- package/dist/mcp/tools/bot-config/index.js +59 -0
- package/dist/mcp/tools/bot-config/tools.d.ts +7 -0
- package/dist/mcp/tools/bot-config/tools.js +15 -0
- package/dist/mcp/tools/bot-config/types.d.ts +50 -0
- package/dist/mcp/tools/bot-config/types.js +6 -0
- package/dist/mcp/tools/bug-fixer-tools.d.ts +45 -0
- package/dist/mcp/tools/bug-fixer-tools.js +1096 -0
- package/dist/mcp/tools/company.d.ts +9 -0
- package/dist/mcp/tools/company.js +88 -0
- package/dist/mcp/tools/discussion.js +68 -0
- package/dist/mcp/tools/document.d.ts +11 -0
- package/dist/mcp/tools/document.js +741 -0
- package/dist/mcp/tools/investigate.d.ts +9 -0
- package/dist/mcp/tools/investigate.js +254 -0
- package/dist/mcp/tools/workflow-permissions.d.ts +15 -0
- package/dist/mcp/tools/workflow-permissions.js +204 -0
- package/dist/mcp/tools/workflow.js +57 -18
- package/dist/mcp/utils/index.d.ts +2 -0
- package/dist/mcp/utils/index.js +12 -1
- package/dist/mcp/utils/role-utils.d.ts +74 -0
- package/dist/mcp/utils/role-utils.js +151 -0
- package/dist/mcp/utils/types.d.ts +43 -1
- package/dist/mcp/utils/types.js +14 -0
- package/dist/mcp/webhook-handler.d.ts +4 -0
- package/dist/mcp/webhook-handler.js +8 -0
- package/dist/mcp-server.d.ts +23 -2
- package/dist/mcp-server.js +639 -127
- package/dist/plugins/vipunen/client.d.ts +150 -0
- package/dist/plugins/vipunen/client.js +535 -0
- package/dist/plugins/vipunen/config/schema-config.json +19 -0
- package/dist/plugins/vipunen/config/schema-doc.json +22 -0
- package/dist/plugins/vipunen/index.d.ts +41 -0
- package/dist/plugins/vipunen/index.js +88 -0
- package/dist/plugins/vipunen/tools.d.ts +26 -0
- package/dist/plugins/vipunen/tools.js +501 -0
- package/dist/stdio-server.d.ts +14 -0
- package/dist/stdio-server.js +101 -0
- package/package.json +2 -1
- package/.claude/agents/agent-ada-skill-builder.md +0 -94
- package/.claude/agents/agent-alejandro-function-fields.md +0 -342
- package/.claude/agents/agent-bjorn-config-audit.md +0 -103
- package/.claude/agents/agent-builder-agent-creator.md +0 -130
- package/.claude/agents/agent-code-simplifier.md +0 -53
- package/.claude/agents/agent-dmitri-activity-crud.md +0 -159
- package/.claude/agents/agent-giuseppe-app-builder.md +0 -247
- package/.claude/agents/agent-gunther-mcp-tools.md +0 -39
- package/.claude/agents/agent-helga-workflow-config.md +0 -204
- package/.claude/agents/agent-igor-activity-mover-automation.md +0 -125
- package/.claude/agents/agent-ingrid-doc-templates.md +0 -261
- package/.claude/agents/agent-ivan-monolith.md +0 -154
- package/.claude/agents/agent-kenji-data-reader.md +0 -86
- package/.claude/agents/agent-lars-code-inspector.md +0 -102
- package/.claude/agents/agent-marco-mockup-builder.md +0 -110
- package/.claude/agents/agent-marcus-api-documenter.md +0 -323
- package/.claude/agents/agent-marketplace-publisher.md +0 -280
- package/.claude/agents/agent-marketplace-reviewer.md +0 -309
- package/.claude/agents/agent-permissions-handler.md +0 -208
- package/.claude/agents/agent-simple-writer.md +0 -48
- package/.claude/agents/agent-svetlana-code-review.md +0 -171
- package/.claude/agents/agent-tanya-test-runner.md +0 -333
- package/.claude/agents/agent-ui-designer.md +0 -100
- package/.claude/agents/agent-viktor-sql-insights.md +0 -212
- package/.claude/agents/agent-web-search.md +0 -55
- package/.claude/agents/agent-yevgeni-discussions.md +0 -45
- package/.claude/agents/agent-zara-zapier.md +0 -159
- package/.claude/commands/app-squad.md +0 -135
- package/.claude/commands/audit-squad.md +0 -158
- package/.claude/commands/autoplan.md +0 -563
- package/.claude/commands/cleanup-squad.md +0 -98
- package/.claude/commands/config-squad.md +0 -106
- package/.claude/commands/crud-squad.md +0 -87
- package/.claude/commands/data-squad.md +0 -97
- package/.claude/commands/debug-squad.md +0 -303
- package/.claude/commands/doc-squad.md +0 -65
- package/.claude/commands/handoff.md +0 -137
- package/.claude/commands/health.md +0 -49
- package/.claude/commands/help.md +0 -29
- package/.claude/commands/help:agents.md +0 -151
- package/.claude/commands/help:commands.md +0 -78
- package/.claude/commands/help:faq.md +0 -79
- package/.claude/commands/help:plugins.md +0 -50
- package/.claude/commands/help:skills.md +0 -93
- package/.claude/commands/help:tools.md +0 -75
- package/.claude/commands/hotfix-squad.md +0 -112
- package/.claude/commands/integration-squad.md +0 -82
- package/.claude/commands/janitor-squad.md +0 -167
- package/.claude/commands/learn-auto.md +0 -120
- package/.claude/commands/learn.md +0 -120
- package/.claude/commands/mcp-list.md +0 -27
- package/.claude/commands/onboard-squad.md +0 -140
- package/.claude/commands/plan-workspace.md +0 -732
- package/.claude/commands/prd.md +0 -130
- package/.claude/commands/project-status.md +0 -82
- package/.claude/commands/publish.md +0 -138
- package/.claude/commands/recap.md +0 -69
- package/.claude/commands/restore.md +0 -64
- package/.claude/commands/review-squad.md +0 -152
- package/.claude/commands/save.md +0 -24
- package/.claude/commands/stats.md +0 -19
- package/.claude/commands/swarm.md +0 -210
- package/.claude/commands/tool-builder.md +0 -39
- package/.claude/commands/ws-pull.md +0 -44
- package/.claude/hooks/_shared-memory.cjs +0 -305
- package/.claude/hooks/_utils.cjs +0 -108
- package/.claude/hooks/agent-failure-detector.cjs +0 -383
- package/.claude/hooks/agent-usage-logger.cjs +0 -204
- package/.claude/hooks/app-edit-guard.cjs +0 -494
- package/.claude/hooks/auto-learn.cjs +0 -304
- package/.claude/hooks/bash-guard.cjs +0 -272
- package/.claude/hooks/builder-mode-manager.cjs +0 -354
- package/.claude/hooks/bulk-activity-guard.cjs +0 -271
- package/.claude/hooks/context-watchdog.cjs +0 -230
- package/.claude/hooks/delegation-reminder.cjs +0 -465
- package/.claude/hooks/design-system-lint.cjs +0 -271
- package/.claude/hooks/post-scaffold-hook.cjs +0 -181
- package/.claude/hooks/prompt-guard.cjs +0 -354
- package/.claude/hooks/publish-template-guard.cjs +0 -147
- package/.claude/hooks/session-start.cjs +0 -35
- package/.claude/hooks/shared-memory-writer.cjs +0 -147
- package/.claude/hooks/skill-injector.cjs +0 -140
- package/.claude/hooks/skill-usage-logger.cjs +0 -258
- package/.claude/hooks/src-edit-guard.cjs +0 -240
- package/.claude/hooks/sync-marketplace-agents.cjs +0 -346
- package/.claude/settings.json +0 -257
- package/.claude/skills/SDK-activity-patterns/SKILL.md +0 -428
- package/.claude/skills/SDK-document-templates/SKILL.md +0 -1033
- package/.claude/skills/SDK-function-fields/SKILL.md +0 -542
- package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
- package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
- package/.claude/skills/SDK-insight-queries/SKILL.md +0 -787
- package/.claude/skills/SDK-ws-config-skill/SKILL.md +0 -1139
- package/.claude/skills/agent-structure/SKILL.md +0 -98
- package/.claude/skills/api-documentation-patterns/SKILL.md +0 -474
- package/.claude/skills/chrome-mcp-reference/SKILL.md +0 -370
- package/.claude/skills/delegation-routing/SKILL.md +0 -202
- package/.claude/skills/frontend-design/SKILL.md +0 -254
- package/.claude/skills/hailer-activity-mover/SKILL.md +0 -213
- package/.claude/skills/hailer-api-client/SKILL.md +0 -518
- package/.claude/skills/hailer-app-builder/SKILL.md +0 -1434
- package/.claude/skills/hailer-apps-pictures/SKILL.md +0 -269
- package/.claude/skills/hailer-design-system/SKILL.md +0 -235
- package/.claude/skills/hailer-monolith-automations/SKILL.md +0 -686
- package/.claude/skills/hailer-permissions-system/SKILL.md +0 -121
- package/.claude/skills/hailer-project-protocol/SKILL.md +0 -488
- package/.claude/skills/hailer-rest-api/SKILL.md +0 -61
- package/.claude/skills/hailer-rest-api/hailer-activities.md +0 -184
- package/.claude/skills/hailer-rest-api/hailer-admin.md +0 -473
- package/.claude/skills/hailer-rest-api/hailer-calendar.md +0 -256
- package/.claude/skills/hailer-rest-api/hailer-feed.md +0 -249
- package/.claude/skills/hailer-rest-api/hailer-insights.md +0 -195
- package/.claude/skills/hailer-rest-api/hailer-messaging.md +0 -276
- package/.claude/skills/hailer-rest-api/hailer-workflows.md +0 -283
- package/.claude/skills/insight-join-patterns/SKILL.md +0 -174
- package/.claude/skills/integration-patterns/SKILL.md +0 -421
- package/.claude/skills/json-only-output/SKILL.md +0 -72
- package/.claude/skills/lsp-setup/SKILL.md +0 -160
- package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
- package/.claude/skills/optional-parameters/SKILL.md +0 -72
- package/.claude/skills/publish-hailer-app/SKILL.md +0 -244
- package/.claude/skills/testing-patterns/SKILL.md +0 -630
- package/.claude/skills/tool-builder/SKILL.md +0 -250
- package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
- package/.claude/skills/tool-response-verification/SKILL.md +0 -92
- package/.claude/skills/zapier-hailer-patterns/SKILL.md +0 -581
- package/.mcp.json +0 -13
- package/.opencode/agent/agent-ada-skill-builder.md +0 -35
- package/.opencode/agent/agent-alejandro-function-fields.md +0 -39
- package/.opencode/agent/agent-bjorn-config-audit.md +0 -36
- package/.opencode/agent/agent-builder-agent-creator.md +0 -39
- package/.opencode/agent/agent-code-simplifier.md +0 -31
- package/.opencode/agent/agent-dmitri-activity-crud.md +0 -40
- package/.opencode/agent/agent-giuseppe-app-builder.md +0 -37
- package/.opencode/agent/agent-gunther-mcp-tools.md +0 -39
- package/.opencode/agent/agent-helga-workflow-config.md +0 -203
- package/.opencode/agent/agent-igor-activity-mover-automation.md +0 -46
- package/.opencode/agent/agent-ingrid-doc-templates.md +0 -39
- package/.opencode/agent/agent-ivan-monolith.md +0 -46
- package/.opencode/agent/agent-kenji-data-reader.md +0 -53
- package/.opencode/agent/agent-lars-code-inspector.md +0 -28
- package/.opencode/agent/agent-marco-mockup-builder.md +0 -42
- package/.opencode/agent/agent-marcus-api-documenter.md +0 -53
- package/.opencode/agent/agent-marketplace-publisher.md +0 -44
- package/.opencode/agent/agent-marketplace-reviewer.md +0 -42
- package/.opencode/agent/agent-permissions-handler.md +0 -50
- package/.opencode/agent/agent-simple-writer.md +0 -45
- package/.opencode/agent/agent-svetlana-code-review.md +0 -39
- package/.opencode/agent/agent-tanya-test-runner.md +0 -57
- package/.opencode/agent/agent-ui-designer.md +0 -56
- package/.opencode/agent/agent-viktor-sql-insights.md +0 -34
- package/.opencode/agent/agent-web-search.md +0 -42
- package/.opencode/agent/agent-yevgeni-discussions.md +0 -37
- package/.opencode/agent/agent-zara-zapier.md +0 -53
- package/.opencode/commands/app-squad.md +0 -135
- package/.opencode/commands/audit-squad.md +0 -158
- package/.opencode/commands/autoplan.md +0 -563
- package/.opencode/commands/cleanup-squad.md +0 -98
- package/.opencode/commands/config-squad.md +0 -106
- package/.opencode/commands/crud-squad.md +0 -87
- package/.opencode/commands/data-squad.md +0 -97
- package/.opencode/commands/debug-squad.md +0 -303
- package/.opencode/commands/doc-squad.md +0 -65
- package/.opencode/commands/handoff.md +0 -137
- package/.opencode/commands/health.md +0 -49
- package/.opencode/commands/help-agents.md +0 -151
- package/.opencode/commands/help-commands.md +0 -32
- package/.opencode/commands/help-faq.md +0 -29
- package/.opencode/commands/help-plugins.md +0 -28
- package/.opencode/commands/help-skills.md +0 -7
- package/.opencode/commands/help-tools.md +0 -40
- package/.opencode/commands/help.md +0 -28
- package/.opencode/commands/hotfix-squad.md +0 -112
- package/.opencode/commands/integration-squad.md +0 -82
- package/.opencode/commands/janitor-squad.md +0 -167
- package/.opencode/commands/learn-auto.md +0 -120
- package/.opencode/commands/learn.md +0 -120
- package/.opencode/commands/mcp-list.md +0 -27
- package/.opencode/commands/onboard-squad.md +0 -140
- package/.opencode/commands/plan-workspace.md +0 -732
- package/.opencode/commands/prd.md +0 -131
- package/.opencode/commands/project-status.md +0 -82
- package/.opencode/commands/publish.md +0 -138
- package/.opencode/commands/recap.md +0 -69
- package/.opencode/commands/restore.md +0 -64
- package/.opencode/commands/review-squad.md +0 -152
- package/.opencode/commands/save.md +0 -24
- package/.opencode/commands/stats.md +0 -19
- package/.opencode/commands/swarm.md +0 -210
- package/.opencode/commands/tool-builder.md +0 -39
- package/.opencode/commands/ws-pull.md +0 -44
- package/.opencode/opencode.json +0 -28
- package/SESSION-HANDOFF.md +0 -68
- package/inbox/2026-03-04-bot-config-patterns.md +0 -24
- package/scripts/postinstall.cjs +0 -64
- 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
|