@hailer/mcp 1.0.29 → 1.1.3
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/.session-checked +1 -0
- package/.claude/agents/agent-ada-skill-builder.md +10 -2
- package/.claude/agents/agent-alejandro-function-fields.md +104 -37
- package/.claude/agents/agent-bjorn-config-audit.md +41 -21
- package/.claude/agents/agent-builder-agent-creator.md +13 -3
- package/.claude/agents/agent-code-simplifier.md +53 -0
- package/.claude/agents/agent-dmitri-activity-crud.md +126 -11
- package/.claude/agents/agent-giuseppe-app-builder.md +212 -22
- package/.claude/agents/agent-gunther-mcp-tools.md +7 -36
- package/.claude/agents/agent-helga-workflow-config.md +75 -10
- package/.claude/agents/agent-igor-activity-mover-automation.md +125 -0
- package/.claude/agents/agent-ingrid-doc-templates.md +164 -36
- package/.claude/agents/agent-ivan-monolith.md +154 -0
- package/.claude/agents/agent-kenji-data-reader.md +15 -8
- package/.claude/agents/agent-lars-code-inspector.md +56 -8
- package/.claude/agents/agent-marco-mockup-builder.md +110 -0
- package/.claude/agents/agent-marcus-api-documenter.md +323 -0
- package/.claude/agents/agent-marketplace-publisher.md +232 -72
- package/.claude/agents/agent-marketplace-reviewer.md +255 -79
- package/.claude/agents/agent-permissions-handler.md +208 -0
- package/.claude/agents/agent-simple-writer.md +48 -0
- package/.claude/agents/agent-svetlana-code-review.md +127 -14
- package/.claude/agents/agent-tanya-test-runner.md +333 -0
- package/.claude/agents/agent-ui-designer.md +100 -0
- package/.claude/agents/agent-viktor-sql-insights.md +19 -6
- package/.claude/agents/agent-web-search.md +55 -0
- package/.claude/agents/agent-yevgeni-discussions.md +7 -1
- package/.claude/agents/agent-zara-zapier.md +159 -0
- package/.claude/commands/app-squad.md +135 -0
- package/.claude/commands/audit-squad.md +158 -0
- package/.claude/commands/autoplan.md +563 -0
- package/.claude/commands/cleanup-squad.md +98 -0
- package/.claude/commands/config-squad.md +106 -0
- package/.claude/commands/crud-squad.md +87 -0
- package/.claude/commands/data-squad.md +97 -0
- package/.claude/commands/debug-squad.md +303 -0
- package/.claude/commands/doc-squad.md +65 -0
- package/.claude/commands/handoff.md +137 -0
- package/.claude/commands/health.md +49 -0
- package/.claude/commands/help.md +2 -1
- package/.claude/commands/help:agents.md +96 -16
- package/.claude/commands/help:commands.md +55 -11
- package/.claude/commands/help:faq.md +16 -1
- package/.claude/commands/help:skills.md +93 -0
- package/.claude/commands/hotfix-squad.md +112 -0
- package/.claude/commands/integration-squad.md +82 -0
- package/.claude/commands/janitor-squad.md +167 -0
- package/.claude/commands/learn-auto.md +120 -0
- package/.claude/commands/learn.md +120 -0
- package/.claude/commands/mcp-list.md +27 -0
- package/.claude/commands/onboard-squad.md +140 -0
- package/.claude/commands/plan-workspace.md +732 -0
- package/.claude/commands/prd.md +131 -0
- package/.claude/commands/project-status.md +82 -0
- package/.claude/commands/publish.md +138 -0
- package/.claude/commands/recap.md +69 -0
- package/.claude/commands/restore.md +64 -0
- package/.claude/commands/review-squad.md +152 -0
- package/.claude/commands/save.md +24 -0
- package/.claude/commands/stats.md +19 -0
- package/.claude/commands/swarm.md +210 -0
- package/.claude/commands/tool-builder.md +3 -1
- package/.claude/commands/ws-pull.md +1 -1
- package/.claude/commands/yolo-off.md +17 -0
- package/.claude/commands/yolo.md +82 -0
- package/.claude/hooks/_shared-memory.cjs +305 -0
- package/.claude/hooks/_utils.cjs +134 -0
- package/.claude/hooks/agent-failure-detector.cjs +164 -79
- package/.claude/hooks/agent-usage-logger.cjs +204 -0
- package/.claude/hooks/app-edit-guard.cjs +20 -4
- package/.claude/hooks/auto-learn.cjs +316 -0
- package/.claude/hooks/bash-guard.cjs +282 -0
- package/.claude/hooks/builder-mode-manager.cjs +183 -54
- package/.claude/hooks/bulk-activity-guard.cjs +283 -0
- package/.claude/hooks/context-watchdog.cjs +292 -0
- package/.claude/hooks/delegation-reminder.cjs +478 -0
- package/.claude/hooks/design-system-lint.cjs +283 -0
- package/.claude/hooks/post-scaffold-hook.cjs +16 -3
- package/.claude/hooks/prompt-guard.cjs +366 -0
- package/.claude/hooks/publish-template-guard.cjs +16 -0
- package/.claude/hooks/session-start.cjs +35 -0
- package/.claude/hooks/shared-memory-writer.cjs +147 -0
- package/.claude/hooks/skill-injector.cjs +140 -0
- package/.claude/hooks/skill-usage-logger.cjs +258 -0
- package/.claude/hooks/src-edit-guard.cjs +16 -1
- package/.claude/hooks/sync-marketplace-agents.cjs +53 -8
- package/.claude/scripts/yolo-toggle.cjs +142 -0
- package/.claude/settings.json +141 -14
- package/.claude/skills/SDK-activity-patterns/SKILL.md +428 -0
- package/.claude/skills/SDK-document-templates/SKILL.md +1033 -0
- package/.claude/skills/SDK-function-fields/SKILL.md +542 -0
- package/.claude/skills/SDK-generate-skill/SKILL.md +92 -0
- package/.claude/skills/SDK-init-skill/SKILL.md +127 -0
- package/.claude/skills/SDK-insight-queries/SKILL.md +787 -0
- package/.claude/skills/SDK-ws-config-skill/SKILL.md +1139 -0
- package/.claude/skills/agent-structure/SKILL.md +98 -0
- package/.claude/skills/api-documentation-patterns/SKILL.md +474 -0
- package/.claude/skills/chrome-mcp-reference/SKILL.md +370 -0
- package/.claude/skills/delegation-routing/SKILL.md +202 -0
- package/.claude/skills/frontend-design/SKILL.md +254 -0
- package/.claude/skills/hailer-activity-mover/SKILL.md +213 -0
- package/.claude/skills/hailer-api-client/SKILL.md +518 -0
- package/.claude/skills/hailer-app-builder/SKILL.md +939 -11
- package/.claude/skills/hailer-apps-pictures/SKILL.md +269 -0
- package/.claude/skills/hailer-design-system/SKILL.md +235 -0
- package/.claude/skills/hailer-monolith-automations/SKILL.md +686 -0
- package/.claude/skills/hailer-permissions-system/SKILL.md +121 -0
- package/.claude/skills/hailer-project-protocol/SKILL.md +488 -0
- package/.claude/skills/hailer-rest-api/SKILL.md +61 -0
- package/.claude/skills/hailer-rest-api/hailer-activities.md +184 -0
- package/.claude/skills/hailer-rest-api/hailer-admin.md +473 -0
- package/.claude/skills/hailer-rest-api/hailer-calendar.md +256 -0
- package/.claude/skills/hailer-rest-api/hailer-feed.md +249 -0
- package/.claude/skills/hailer-rest-api/hailer-insights.md +195 -0
- package/.claude/skills/hailer-rest-api/hailer-messaging.md +276 -0
- package/.claude/skills/hailer-rest-api/hailer-workflows.md +283 -0
- package/.claude/skills/insight-join-patterns/SKILL.md +3 -0
- package/.claude/skills/integration-patterns/SKILL.md +421 -0
- package/.claude/skills/json-only-output/SKILL.md +52 -12
- package/.claude/skills/lsp-setup/SKILL.md +160 -0
- package/.claude/skills/mcp-direct-tools/SKILL.md +153 -0
- package/.claude/skills/optional-parameters/SKILL.md +32 -23
- package/.claude/skills/publish-hailer-app/SKILL.md +76 -12
- package/.claude/skills/testing-patterns/SKILL.md +630 -0
- package/.claude/skills/tool-builder/SKILL.md +250 -0
- package/.claude/skills/tool-parameter-usage/SKILL.md +59 -45
- package/.claude/skills/tool-response-verification/SKILL.md +82 -48
- package/.claude/skills/zapier-hailer-patterns/SKILL.md +581 -0
- package/.env.example +26 -7
- package/CLAUDE.md +290 -224
- package/dist/CLAUDE.md +370 -0
- package/dist/app.d.ts +1 -1
- package/dist/app.js +101 -101
- package/dist/bot/bot-config.d.ts +26 -0
- package/dist/bot/bot-config.js +135 -0
- package/dist/bot/bot-manager.d.ts +40 -0
- package/dist/bot/bot-manager.js +137 -0
- package/dist/bot/bot.d.ts +127 -0
- package/dist/bot/bot.js +1328 -0
- package/dist/bot/operation-logger.d.ts +28 -0
- package/dist/bot/operation-logger.js +132 -0
- package/dist/bot/services/conversation-manager.d.ts +60 -0
- package/dist/bot/services/conversation-manager.js +246 -0
- package/dist/bot/services/index.d.ts +9 -0
- package/dist/bot/services/index.js +18 -0
- package/dist/bot/services/message-classifier.d.ts +42 -0
- package/dist/bot/services/message-classifier.js +228 -0
- package/dist/bot/services/message-formatter.d.ts +88 -0
- package/dist/bot/services/message-formatter.js +411 -0
- package/dist/bot/services/session-logger.d.ts +162 -0
- package/dist/bot/services/session-logger.js +724 -0
- package/dist/bot/services/token-billing.d.ts +78 -0
- package/dist/bot/services/token-billing.js +233 -0
- package/dist/bot/services/types.d.ts +169 -0
- package/dist/bot/services/types.js +12 -0
- package/dist/bot/services/typing-indicator.d.ts +23 -0
- package/dist/bot/services/typing-indicator.js +60 -0
- package/dist/bot/services/workspace-schema-cache.d.ts +122 -0
- package/dist/bot/services/workspace-schema-cache.js +506 -0
- package/dist/bot/tool-executor.d.ts +28 -0
- package/dist/bot/tool-executor.js +48 -0
- package/dist/bot/workspace-overview.d.ts +12 -0
- package/dist/bot/workspace-overview.js +94 -0
- package/dist/cli.d.ts +1 -8
- package/dist/cli.js +1 -253
- package/dist/config.d.ts +96 -3
- package/dist/config.js +148 -37
- package/dist/core.d.ts +5 -0
- package/dist/core.js +61 -8
- package/dist/lib/discussion-lock.d.ts +42 -0
- package/dist/lib/discussion-lock.js +110 -0
- package/dist/lib/logger.d.ts +0 -1
- package/dist/lib/logger.js +39 -23
- package/dist/lib/request-logger.d.ts +77 -0
- package/dist/lib/request-logger.js +147 -0
- package/dist/mcp/UserContextCache.js +16 -13
- package/dist/mcp/hailer-clients.js +18 -17
- package/dist/mcp/signal-handler.js +43 -13
- package/dist/mcp/tool-registry.d.ts +4 -15
- package/dist/mcp/tool-registry.js +94 -32
- package/dist/mcp/tools/activity.js +28 -69
- package/dist/mcp/tools/app-core.js +9 -4
- package/dist/mcp/tools/app-marketplace.js +22 -12
- package/dist/mcp/tools/app-member.js +5 -2
- package/dist/mcp/tools/app-scaffold.js +32 -18
- 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/discussion.js +107 -77
- package/dist/mcp/tools/document.d.ts +11 -0
- package/dist/mcp/tools/document.js +741 -0
- package/dist/mcp/tools/file.js +5 -2
- package/dist/mcp/tools/insight.js +36 -12
- package/dist/mcp/tools/investigate.d.ts +9 -0
- package/dist/mcp/tools/investigate.js +254 -0
- package/dist/mcp/tools/user.d.ts +2 -4
- package/dist/mcp/tools/user.js +9 -50
- package/dist/mcp/tools/workflow.d.ts +1 -0
- package/dist/mcp/tools/workflow.js +164 -52
- package/dist/mcp/utils/hailer-api-client.js +26 -17
- package/dist/mcp/webhook-handler.d.ts +64 -3
- package/dist/mcp/webhook-handler.js +227 -9
- package/dist/mcp-server.d.ts +4 -0
- package/dist/mcp-server.js +237 -25
- package/dist/plugins/bug-fixer/index.d.ts +2 -0
- package/dist/plugins/bug-fixer/index.js +18 -0
- package/dist/plugins/bug-fixer/tools.d.ts +45 -0
- package/dist/plugins/bug-fixer/tools.js +1096 -0
- package/package.json +10 -10
- package/scripts/test-hal-tools.ts +154 -0
- package/.claude/agents/agent-nora-name-functions.md +0 -123
- package/.claude/assistant-knowledge.md +0 -23
- package/.claude/commands/install-plugin.md +0 -261
- package/.claude/commands/list-plugins.md +0 -42
- package/.claude/commands/marketplace-setup.md +0 -33
- package/.claude/commands/publish-plugin.md +0 -55
- package/.claude/commands/uninstall-plugin.md +0 -87
- package/.claude/hooks/interactive-mode.cjs +0 -87
- package/.claude/hooks/mcp-server-guard.cjs +0 -108
- package/.claude/skills/marketplace-publishing.md +0 -155
- package/dist/bot/chat-bot.d.ts +0 -31
- package/dist/bot/chat-bot.js +0 -357
- package/dist/mcp/tools/metrics.d.ts +0 -13
- package/dist/mcp/tools/metrics.js +0 -546
- package/dist/stdio-server.d.ts +0 -14
- package/dist/stdio-server.js +0 -114
|
@@ -0,0 +1,153 @@
|
|
|
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,14 +1,37 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: optional-parameters
|
|
3
3
|
description: Omit optional parameters instead of passing empty values
|
|
4
|
+
version: 1.0.0
|
|
4
5
|
triggers: Tool error about empty array/string when parameter should be omitted
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
10
34
|
|
|
11
|
-
<correct>
|
|
12
35
|
```typescript
|
|
13
36
|
// Update insight - only changing public flag
|
|
14
37
|
// sources parameter exists in schema but NOT needed for this update
|
|
@@ -29,35 +52,21 @@ update_insight({
|
|
|
29
52
|
// Include sources when actually updating them
|
|
30
53
|
});
|
|
31
54
|
```
|
|
32
|
-
</correct>
|
|
33
55
|
|
|
34
|
-
|
|
56
|
+
## Example 2: Wrong - Passing Empty Values
|
|
57
|
+
|
|
35
58
|
```typescript
|
|
36
|
-
//
|
|
59
|
+
// WRONG - Passing empty array when parameter should be omitted
|
|
37
60
|
update_insight({
|
|
38
61
|
insightId: "abc123",
|
|
39
62
|
public: false,
|
|
40
63
|
sources: [] // Error: sources must contain at least 1 items
|
|
41
64
|
});
|
|
42
65
|
|
|
43
|
-
//
|
|
66
|
+
// WRONG - Passing empty string
|
|
44
67
|
update_activity({
|
|
45
68
|
activityId: "xyz",
|
|
46
69
|
name: "" // Error: name cannot be empty
|
|
47
70
|
});
|
|
48
71
|
```
|
|
49
|
-
</
|
|
50
|
-
|
|
51
|
-
<fix>
|
|
52
|
-
**Key distinction:**
|
|
53
|
-
- **OMIT parameter**: Don't include it in the function call at all
|
|
54
|
-
- **NOT same as empty value**: `[]`, `""`, `null`, `undefined` are NOT valid replacements for omission
|
|
55
|
-
|
|
56
|
-
**When to omit:**
|
|
57
|
-
- Updating insight public/name but NOT sources → omit sources
|
|
58
|
-
- Updating activity field but NOT name → omit name
|
|
59
|
-
- Any "required" schema parameter that's not relevant to current operation
|
|
60
|
-
|
|
61
|
-
**Rule of thumb:**
|
|
62
|
-
If you're not changing/using a value, OMIT the parameter entirely rather than passing empty/null.
|
|
63
|
-
</fix>
|
|
72
|
+
</examples>
|
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: publish-hailer-app
|
|
3
3
|
description: Guide for publishing Hailer apps to production
|
|
4
|
+
version: 1.2.0
|
|
5
|
+
triggers:
|
|
6
|
+
- publish app
|
|
7
|
+
- deploy app
|
|
8
|
+
- production app
|
|
4
9
|
---
|
|
5
10
|
|
|
6
11
|
# Publish Hailer App Skill
|
|
7
12
|
|
|
8
13
|
Guide for publishing Hailer apps to production using MCP tools.
|
|
9
14
|
|
|
15
|
+
<warning>
|
|
16
|
+
## ⚠️ Publishing Requires Explicit User Request
|
|
17
|
+
|
|
18
|
+
**Default is local development** — scaffold creates a dev app at `http://localhost:3000` automatically.
|
|
19
|
+
|
|
20
|
+
**Only use this skill when the user explicitly asks to publish or deploy to production.**
|
|
21
|
+
|
|
22
|
+
Before publishing: validate manifest.json (see below), then `publish_hailer_app`, then `update_app` to switch URL.
|
|
23
|
+
</warning>
|
|
24
|
+
|
|
10
25
|
<critical>
|
|
11
26
|
## MANDATORY: Validate Before Publishing
|
|
12
27
|
|
|
@@ -82,24 +97,23 @@ Required structure:
|
|
|
82
97
|
|
|
83
98
|
### Step 4: Publish
|
|
84
99
|
|
|
85
|
-
**Option 1: Production Only**
|
|
86
100
|
```javascript
|
|
87
101
|
publish_hailer_app({
|
|
88
102
|
projectDirectory: "/path/to/app"
|
|
89
103
|
})
|
|
90
104
|
```
|
|
91
105
|
|
|
92
|
-
|
|
106
|
+
### Step 5: Switch URL to Production
|
|
107
|
+
|
|
108
|
+
`publish_hailer_app` uploads files but does NOT change the app URL. Switch it:
|
|
93
109
|
```javascript
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
110
|
+
update_app({
|
|
111
|
+
appId: "695816e2ba1d8bef3af7e018",
|
|
112
|
+
url: "https://apps.hailer.com/{workspaceId}/{appId}/"
|
|
97
113
|
})
|
|
98
114
|
```
|
|
99
115
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
### Step 5: Verify
|
|
116
|
+
### Step 6: Verify
|
|
103
117
|
|
|
104
118
|
```javascript
|
|
105
119
|
list_apps()
|
|
@@ -126,11 +140,15 @@ If missing/empty, the tool returns "Success" but files are NOT uploaded.
|
|
|
126
140
|
|
|
127
141
|
| Type | URL | Created By | Can Publish To |
|
|
128
142
|
|------|-----|------------|----------------|
|
|
129
|
-
| Dev | `http://localhost:3000` | `scaffold_hailer_app` |
|
|
130
|
-
| Prod | `https://apps.hailer.com
|
|
143
|
+
| Dev | `http://localhost:3000` | `scaffold_hailer_app` or `create_app` | YES (after URL switch) |
|
|
144
|
+
| Prod | `https://apps.hailer.com/{workspaceId}/{appId}/` | `create_app` | YES |
|
|
145
|
+
|
|
146
|
+
**URL switching workflow:**
|
|
147
|
+
1. During development: app URL is `http://localhost:3000/`
|
|
148
|
+
2. When ready to publish: call `update_app` to set production URL: `https://apps.hailer.com/{workspaceId}/{appId}/`
|
|
149
|
+
3. After publishing: URL stays as production
|
|
131
150
|
|
|
132
|
-
**
|
|
133
|
-
To deploy to production, create a NEW app with `create_app`.
|
|
151
|
+
**Important:** `publish_hailer_app` uploads built files but does NOT automatically update the URL. You MUST also call `update_app` with the production URL format.
|
|
134
152
|
</dev-vs-prod>
|
|
135
153
|
|
|
136
154
|
<updating>
|
|
@@ -169,6 +187,49 @@ add_app_member({ appId: "...", member: "user_{userId}" })
|
|
|
169
187
|
```
|
|
170
188
|
</sharing>
|
|
171
189
|
|
|
190
|
+
<vite-config>
|
|
191
|
+
## CRITICAL: Vite Base Path
|
|
192
|
+
|
|
193
|
+
Vite apps MUST have `base: './'` in vite.config.ts for production deployment.
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
// vite.config.ts
|
|
197
|
+
export default defineConfig({
|
|
198
|
+
base: './', // REQUIRED for production
|
|
199
|
+
// ... other config
|
|
200
|
+
});
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Without this:**
|
|
204
|
+
- Asset paths resolve to root domain instead of app folder
|
|
205
|
+
- Production app returns 403/404 errors
|
|
206
|
+
- Works in localhost but fails in production
|
|
207
|
+
|
|
208
|
+
**Also verify:** The .tgz package must have files at `package/dist/` path structure.
|
|
209
|
+
</vite-config>
|
|
210
|
+
|
|
211
|
+
<cache-busting>
|
|
212
|
+
## CRITICAL: Browser Cache for Published Apps
|
|
213
|
+
|
|
214
|
+
Published Hailer apps serve stale versions from browser cache. Vite's hashed JS/CSS filenames handle asset cache-busting, but `index.html` itself needs no-cache headers.
|
|
215
|
+
|
|
216
|
+
**Add these meta tags to `index.html` `<head>` before publishing:**
|
|
217
|
+
|
|
218
|
+
```html
|
|
219
|
+
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
|
|
220
|
+
<meta http-equiv="Pragma" content="no-cache" />
|
|
221
|
+
<meta http-equiv="Expires" content="0" />
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Without these:**
|
|
225
|
+
- Users see old app version after publish
|
|
226
|
+
- Hard refresh (Ctrl+Shift+R) works but users won't know to do it
|
|
227
|
+
- Particularly bad for bug fix deploys where users expect changes immediately
|
|
228
|
+
|
|
229
|
+
**Why meta tags not server headers?**
|
|
230
|
+
Hailer apps are served from `apps.hailer.com` static hosting - we can't control server headers. Meta tags are the only client-side cache control available.
|
|
231
|
+
</cache-busting>
|
|
232
|
+
|
|
172
233
|
<checklist>
|
|
173
234
|
## Pre-Publish Checklist
|
|
174
235
|
|
|
@@ -176,5 +237,8 @@ add_app_member({ appId: "...", member: "user_{userId}" })
|
|
|
176
237
|
- [ ] manifest.json `appId` is 24 chars (not empty)
|
|
177
238
|
- [ ] manifest.json `version` is set (e.g., "1.0.0")
|
|
178
239
|
- [ ] manifest.json `versionDescription` is set (not empty)
|
|
240
|
+
- [ ] vite.config.ts has `base: './'`
|
|
241
|
+
- [ ] index.html has no-cache meta tags (see cache-busting section)
|
|
179
242
|
- [ ] node_modules exists (dependencies installed)
|
|
243
|
+
- [ ] After publish: `update_app` called to switch URL to production format
|
|
180
244
|
</checklist>
|