@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.
- package/.claude/CLAUDE.md +117 -320
- package/.claude/commands/app-squad.md +86 -90
- package/.claude/commands/audit-squad.md +19 -19
- package/.claude/commands/autoplan.md +3 -3
- package/.claude/commands/cleanup-squad.md +16 -16
- package/.claude/commands/config-squad.md +30 -30
- package/.claude/commands/crud-squad.md +23 -23
- package/.claude/commands/data-squad.md +21 -21
- package/.claude/commands/debug-squad.md +44 -44
- package/.claude/commands/doc-squad.md +16 -16
- package/.claude/commands/help:agents.md +130 -99
- package/.claude/commands/help:commands.md +15 -15
- package/.claude/commands/help:faq.md +17 -17
- package/.claude/commands/help:plugins.md +1 -1
- package/.claude/commands/help:skills.md +18 -24
- package/.claude/commands/hotfix-squad.md +22 -22
- package/.claude/commands/integration-squad.md +22 -22
- package/.claude/commands/janitor-squad.md +31 -31
- package/.claude/commands/learn-auto.md +5 -5
- package/.claude/commands/learn.md +12 -20
- package/.claude/commands/onboard-squad.md +39 -49
- package/.claude/commands/plan-workspace.md +2 -2
- package/.claude/commands/publish.md +32 -37
- package/.claude/commands/review-squad.md +27 -27
- package/.claude/commands/stats.md +26 -12
- package/.claude/commands/swarm.md +25 -25
- package/.claude/skills/chrome-mcp-reference/SKILL.md +5 -0
- package/.claude/skills/hailer-api-client/SKILL.md +55 -16
- package/.claude/skills/hailer-app-builder/SKILL.md +4 -270
- package/.claude/skills/hailer-apps-pictures/SKILL.md +3 -3
- package/.claude/skills/hailer-design-system/SKILL.md +96 -4
- package/.claude/skills/hailer-monolith-automations/SKILL.md +138 -116
- package/.claude/skills/hailer-permissions-system/SKILL.md +6 -9
- package/.claude/skills/hailer-project-protocol/SKILL.md +20 -110
- package/.claude/skills/integration-patterns/SKILL.md +6 -6
- package/.claude/skills/lsp-setup/SKILL.md +8 -9
- package/.claude/skills/sdk-activity-patterns/SKILL.md +238 -0
- package/.claude/skills/{SDK-document-templates → sdk-document-templates}/SKILL.md +13 -340
- package/.claude/skills/{SDK-function-fields → sdk-function-fields}/SKILL.md +8 -40
- package/.claude/skills/{SDK-insight-queries → sdk-insight-queries}/SKILL.md +114 -392
- package/.claude/skills/{SDK-ws-config-skill → sdk-ws-config-skill}/SKILL.md +79 -310
- package/.claude/skills/zapier-hailer-patterns/SKILL.md +84 -361
- package/.opencode/package-lock.json +117 -0
- package/CLAUDE.md +5 -358
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +10 -127
- package/dist/app.js.map +1 -1
- package/dist/bot/bot-manager.d.ts +3 -14
- package/dist/bot/bot-manager.d.ts.map +1 -1
- package/dist/bot/bot-manager.js +13 -4
- package/dist/bot/bot-manager.js.map +1 -1
- package/dist/bot/bot.d.ts +23 -102
- package/dist/bot/bot.d.ts.map +1 -1
- package/dist/bot/bot.js +356 -1212
- package/dist/bot/bot.js.map +1 -1
- package/dist/bot/services/bot-permissions.d.ts +50 -0
- package/dist/bot/services/bot-permissions.d.ts.map +1 -0
- package/dist/bot/services/bot-permissions.js +198 -0
- package/dist/bot/services/bot-permissions.js.map +1 -0
- package/dist/bot/services/index.d.ts +4 -2
- package/dist/bot/services/index.d.ts.map +1 -1
- package/dist/bot/services/index.js +10 -5
- package/dist/bot/services/index.js.map +1 -1
- package/dist/bot/services/message-classifier.d.ts +1 -1
- package/dist/bot/services/message-classifier.d.ts.map +1 -1
- package/dist/bot/services/message-classifier.js.map +1 -1
- package/dist/bot/services/signal-router.d.ts +32 -0
- package/dist/bot/services/signal-router.d.ts.map +1 -0
- package/dist/bot/services/signal-router.js +132 -0
- package/dist/bot/services/signal-router.js.map +1 -0
- package/dist/bot/services/system-prompt.d.ts +12 -0
- package/dist/bot/services/system-prompt.d.ts.map +1 -0
- package/dist/bot/services/system-prompt.js +93 -0
- package/dist/bot/services/system-prompt.js.map +1 -0
- package/dist/bot/services/types.d.ts +7 -34
- package/dist/bot/services/types.d.ts.map +1 -1
- package/dist/bot/services/types.js +0 -3
- package/dist/bot/services/types.js.map +1 -1
- package/dist/bot/services/workspace-refresh.d.ts +47 -0
- package/dist/bot/services/workspace-refresh.d.ts.map +1 -0
- package/dist/bot/services/workspace-refresh.js +154 -0
- package/dist/bot/services/workspace-refresh.js.map +1 -0
- package/dist/bot-config/constants.d.ts +0 -36
- package/dist/bot-config/constants.d.ts.map +1 -1
- package/dist/bot-config/constants.js +1 -76
- package/dist/bot-config/constants.js.map +1 -1
- package/dist/bot-config/context.d.ts +2 -42
- package/dist/bot-config/context.d.ts.map +1 -1
- package/dist/bot-config/context.js +13 -134
- package/dist/bot-config/context.js.map +1 -1
- package/dist/bot-config/index.d.ts +6 -15
- package/dist/bot-config/index.d.ts.map +1 -1
- package/dist/bot-config/index.js +5 -80
- package/dist/bot-config/index.js.map +1 -1
- package/dist/bot-config/loader.d.ts +16 -4
- package/dist/bot-config/loader.d.ts.map +1 -1
- package/dist/bot-config/loader.js +187 -96
- package/dist/bot-config/loader.js.map +1 -1
- package/dist/bot-config/persistence.d.ts +1 -52
- package/dist/bot-config/persistence.d.ts.map +1 -1
- package/dist/bot-config/persistence.js +3 -213
- package/dist/bot-config/persistence.js.map +1 -1
- package/dist/bot-config/state.d.ts +0 -41
- package/dist/bot-config/state.d.ts.map +1 -1
- package/dist/bot-config/state.js +0 -151
- package/dist/bot-config/state.js.map +1 -1
- package/dist/bot-config/tools.d.ts +1 -1
- package/dist/bot-config/tools.js +27 -27
- package/dist/bot-config/tools.js.map +1 -1
- package/dist/bot-config/types.d.ts +39 -32
- package/dist/bot-config/types.d.ts.map +1 -1
- package/dist/bot-config/types.js +0 -3
- package/dist/bot-config/types.js.map +1 -1
- package/dist/bot-config/webhooks.d.ts +0 -4
- package/dist/bot-config/webhooks.d.ts.map +1 -1
- package/dist/bot-config/webhooks.js +0 -13
- package/dist/bot-config/webhooks.js.map +1 -1
- package/dist/commands/seed-config.js +16 -31
- package/dist/commands/seed-config.js.map +1 -1
- package/dist/config.d.ts +0 -9
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -15
- package/dist/config.js.map +1 -1
- package/dist/mcp/hailer-clients.js +2 -2
- package/dist/mcp/hailer-clients.js.map +1 -1
- package/dist/mcp/tool-registry.d.ts +10 -115
- package/dist/mcp/tool-registry.d.ts.map +1 -1
- package/dist/mcp/tool-registry.js +39 -363
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/mcp/tools/activity.d.ts +3 -0
- package/dist/mcp/tools/activity.d.ts.map +1 -1
- package/dist/mcp/tools/activity.js +8 -1
- package/dist/mcp/tools/activity.js.map +1 -1
- package/dist/mcp/tools/app-core.d.ts +3 -0
- package/dist/mcp/tools/app-core.d.ts.map +1 -1
- package/dist/mcp/tools/app-core.js +9 -2
- package/dist/mcp/tools/app-core.js.map +1 -1
- package/dist/mcp/tools/app-marketplace.d.ts +3 -0
- package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
- package/dist/mcp/tools/app-marketplace.js +13 -1
- package/dist/mcp/tools/app-marketplace.js.map +1 -1
- package/dist/mcp/tools/app-member.d.ts +3 -0
- package/dist/mcp/tools/app-member.d.ts.map +1 -1
- package/dist/mcp/tools/app-member.js +6 -1
- package/dist/mcp/tools/app-member.js.map +1 -1
- package/dist/mcp/tools/app-scaffold.d.ts +3 -0
- package/dist/mcp/tools/app-scaffold.d.ts.map +1 -1
- package/dist/mcp/tools/app-scaffold.js +15 -11
- package/dist/mcp/tools/app-scaffold.js.map +1 -1
- package/dist/mcp/tools/company.d.ts +3 -0
- package/dist/mcp/tools/company.d.ts.map +1 -1
- package/dist/mcp/tools/company.js +5 -1
- package/dist/mcp/tools/company.js.map +1 -1
- package/dist/mcp/tools/discussion.d.ts +3 -0
- package/dist/mcp/tools/discussion.d.ts.map +1 -1
- package/dist/mcp/tools/discussion.js +13 -2
- package/dist/mcp/tools/discussion.js.map +1 -1
- package/dist/mcp/tools/file.d.ts +3 -0
- package/dist/mcp/tools/file.d.ts.map +1 -1
- package/dist/mcp/tools/file.js +6 -1
- package/dist/mcp/tools/file.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +7 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +34 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/insight.d.ts +3 -0
- package/dist/mcp/tools/insight.d.ts.map +1 -1
- package/dist/mcp/tools/insight.js +18 -8
- package/dist/mcp/tools/insight.js.map +1 -1
- package/dist/mcp/tools/user.d.ts +3 -0
- package/dist/mcp/tools/user.d.ts.map +1 -1
- package/dist/mcp/tools/user.js +6 -1
- package/dist/mcp/tools/user.js.map +1 -1
- package/dist/mcp/tools/workflow-permissions.d.ts +3 -0
- package/dist/mcp/tools/workflow-permissions.d.ts.map +1 -1
- package/dist/mcp/tools/workflow-permissions.js +8 -1
- package/dist/mcp/tools/workflow-permissions.js.map +1 -1
- package/dist/mcp/tools/workflow.d.ts +3 -0
- package/dist/mcp/tools/workflow.d.ts.map +1 -1
- package/dist/mcp/tools/workflow.js +29 -28
- package/dist/mcp/tools/workflow.js.map +1 -1
- package/dist/mcp/utils/index.d.ts +4 -11
- package/dist/mcp/utils/index.d.ts.map +1 -1
- package/dist/mcp/utils/index.js +5 -36
- package/dist/mcp/utils/index.js.map +1 -1
- package/dist/mcp/utils/role-utils.d.ts +0 -32
- package/dist/mcp/utils/role-utils.d.ts.map +1 -1
- package/dist/mcp/utils/role-utils.js +0 -73
- package/dist/mcp/utils/role-utils.js.map +1 -1
- package/dist/mcp/utils/tool-helpers.d.ts +0 -25
- package/dist/mcp/utils/tool-helpers.d.ts.map +1 -1
- package/dist/mcp/utils/tool-helpers.js +0 -34
- package/dist/mcp/utils/tool-helpers.js.map +1 -1
- package/dist/mcp/webhook-handler.d.ts +4 -34
- package/dist/mcp/webhook-handler.d.ts.map +1 -1
- package/dist/mcp/webhook-handler.js +57 -74
- package/dist/mcp/webhook-handler.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +3 -78
- package/dist/mcp-server.js.map +1 -1
- package/package.json +1 -2
- 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 -208
- 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/skills/SDK-activity-patterns/SKILL.md +0 -428
- package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
- package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
- package/.claude/skills/agent-structure/SKILL.md +0 -98
- 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-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/json-only-output/SKILL.md +0 -72
- package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
- package/.claude/skills/optional-parameters/SKILL.md +0 -72
- package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
- package/.claude/skills/tool-response-verification/SKILL.md +0 -92
- 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 -204
- 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
|
@@ -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>
|