@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.
Files changed (233) hide show
  1. package/.claude/.session-checked +1 -0
  2. package/.claude/agents/agent-ada-skill-builder.md +10 -2
  3. package/.claude/agents/agent-alejandro-function-fields.md +104 -37
  4. package/.claude/agents/agent-bjorn-config-audit.md +41 -21
  5. package/.claude/agents/agent-builder-agent-creator.md +13 -3
  6. package/.claude/agents/agent-code-simplifier.md +53 -0
  7. package/.claude/agents/agent-dmitri-activity-crud.md +126 -11
  8. package/.claude/agents/agent-giuseppe-app-builder.md +212 -22
  9. package/.claude/agents/agent-gunther-mcp-tools.md +7 -36
  10. package/.claude/agents/agent-helga-workflow-config.md +75 -10
  11. package/.claude/agents/agent-igor-activity-mover-automation.md +125 -0
  12. package/.claude/agents/agent-ingrid-doc-templates.md +164 -36
  13. package/.claude/agents/agent-ivan-monolith.md +154 -0
  14. package/.claude/agents/agent-kenji-data-reader.md +15 -8
  15. package/.claude/agents/agent-lars-code-inspector.md +56 -8
  16. package/.claude/agents/agent-marco-mockup-builder.md +110 -0
  17. package/.claude/agents/agent-marcus-api-documenter.md +323 -0
  18. package/.claude/agents/agent-marketplace-publisher.md +232 -72
  19. package/.claude/agents/agent-marketplace-reviewer.md +255 -79
  20. package/.claude/agents/agent-permissions-handler.md +208 -0
  21. package/.claude/agents/agent-simple-writer.md +48 -0
  22. package/.claude/agents/agent-svetlana-code-review.md +127 -14
  23. package/.claude/agents/agent-tanya-test-runner.md +333 -0
  24. package/.claude/agents/agent-ui-designer.md +100 -0
  25. package/.claude/agents/agent-viktor-sql-insights.md +19 -6
  26. package/.claude/agents/agent-web-search.md +55 -0
  27. package/.claude/agents/agent-yevgeni-discussions.md +7 -1
  28. package/.claude/agents/agent-zara-zapier.md +159 -0
  29. package/.claude/commands/app-squad.md +135 -0
  30. package/.claude/commands/audit-squad.md +158 -0
  31. package/.claude/commands/autoplan.md +563 -0
  32. package/.claude/commands/cleanup-squad.md +98 -0
  33. package/.claude/commands/config-squad.md +106 -0
  34. package/.claude/commands/crud-squad.md +87 -0
  35. package/.claude/commands/data-squad.md +97 -0
  36. package/.claude/commands/debug-squad.md +303 -0
  37. package/.claude/commands/doc-squad.md +65 -0
  38. package/.claude/commands/handoff.md +137 -0
  39. package/.claude/commands/health.md +49 -0
  40. package/.claude/commands/help.md +2 -1
  41. package/.claude/commands/help:agents.md +96 -16
  42. package/.claude/commands/help:commands.md +55 -11
  43. package/.claude/commands/help:faq.md +16 -1
  44. package/.claude/commands/help:skills.md +93 -0
  45. package/.claude/commands/hotfix-squad.md +112 -0
  46. package/.claude/commands/integration-squad.md +82 -0
  47. package/.claude/commands/janitor-squad.md +167 -0
  48. package/.claude/commands/learn-auto.md +120 -0
  49. package/.claude/commands/learn.md +120 -0
  50. package/.claude/commands/mcp-list.md +27 -0
  51. package/.claude/commands/onboard-squad.md +140 -0
  52. package/.claude/commands/plan-workspace.md +732 -0
  53. package/.claude/commands/prd.md +131 -0
  54. package/.claude/commands/project-status.md +82 -0
  55. package/.claude/commands/publish.md +138 -0
  56. package/.claude/commands/recap.md +69 -0
  57. package/.claude/commands/restore.md +64 -0
  58. package/.claude/commands/review-squad.md +152 -0
  59. package/.claude/commands/save.md +24 -0
  60. package/.claude/commands/stats.md +19 -0
  61. package/.claude/commands/swarm.md +210 -0
  62. package/.claude/commands/tool-builder.md +3 -1
  63. package/.claude/commands/ws-pull.md +1 -1
  64. package/.claude/commands/yolo-off.md +17 -0
  65. package/.claude/commands/yolo.md +82 -0
  66. package/.claude/hooks/_shared-memory.cjs +305 -0
  67. package/.claude/hooks/_utils.cjs +134 -0
  68. package/.claude/hooks/agent-failure-detector.cjs +164 -79
  69. package/.claude/hooks/agent-usage-logger.cjs +204 -0
  70. package/.claude/hooks/app-edit-guard.cjs +20 -4
  71. package/.claude/hooks/auto-learn.cjs +316 -0
  72. package/.claude/hooks/bash-guard.cjs +282 -0
  73. package/.claude/hooks/builder-mode-manager.cjs +183 -54
  74. package/.claude/hooks/bulk-activity-guard.cjs +283 -0
  75. package/.claude/hooks/context-watchdog.cjs +292 -0
  76. package/.claude/hooks/delegation-reminder.cjs +478 -0
  77. package/.claude/hooks/design-system-lint.cjs +283 -0
  78. package/.claude/hooks/post-scaffold-hook.cjs +16 -3
  79. package/.claude/hooks/prompt-guard.cjs +366 -0
  80. package/.claude/hooks/publish-template-guard.cjs +16 -0
  81. package/.claude/hooks/session-start.cjs +35 -0
  82. package/.claude/hooks/shared-memory-writer.cjs +147 -0
  83. package/.claude/hooks/skill-injector.cjs +140 -0
  84. package/.claude/hooks/skill-usage-logger.cjs +258 -0
  85. package/.claude/hooks/src-edit-guard.cjs +16 -1
  86. package/.claude/hooks/sync-marketplace-agents.cjs +53 -8
  87. package/.claude/scripts/yolo-toggle.cjs +142 -0
  88. package/.claude/settings.json +141 -14
  89. package/.claude/skills/SDK-activity-patterns/SKILL.md +428 -0
  90. package/.claude/skills/SDK-document-templates/SKILL.md +1033 -0
  91. package/.claude/skills/SDK-function-fields/SKILL.md +542 -0
  92. package/.claude/skills/SDK-generate-skill/SKILL.md +92 -0
  93. package/.claude/skills/SDK-init-skill/SKILL.md +127 -0
  94. package/.claude/skills/SDK-insight-queries/SKILL.md +787 -0
  95. package/.claude/skills/SDK-ws-config-skill/SKILL.md +1139 -0
  96. package/.claude/skills/agent-structure/SKILL.md +98 -0
  97. package/.claude/skills/api-documentation-patterns/SKILL.md +474 -0
  98. package/.claude/skills/chrome-mcp-reference/SKILL.md +370 -0
  99. package/.claude/skills/delegation-routing/SKILL.md +202 -0
  100. package/.claude/skills/frontend-design/SKILL.md +254 -0
  101. package/.claude/skills/hailer-activity-mover/SKILL.md +213 -0
  102. package/.claude/skills/hailer-api-client/SKILL.md +518 -0
  103. package/.claude/skills/hailer-app-builder/SKILL.md +939 -11
  104. package/.claude/skills/hailer-apps-pictures/SKILL.md +269 -0
  105. package/.claude/skills/hailer-design-system/SKILL.md +235 -0
  106. package/.claude/skills/hailer-monolith-automations/SKILL.md +686 -0
  107. package/.claude/skills/hailer-permissions-system/SKILL.md +121 -0
  108. package/.claude/skills/hailer-project-protocol/SKILL.md +488 -0
  109. package/.claude/skills/hailer-rest-api/SKILL.md +61 -0
  110. package/.claude/skills/hailer-rest-api/hailer-activities.md +184 -0
  111. package/.claude/skills/hailer-rest-api/hailer-admin.md +473 -0
  112. package/.claude/skills/hailer-rest-api/hailer-calendar.md +256 -0
  113. package/.claude/skills/hailer-rest-api/hailer-feed.md +249 -0
  114. package/.claude/skills/hailer-rest-api/hailer-insights.md +195 -0
  115. package/.claude/skills/hailer-rest-api/hailer-messaging.md +276 -0
  116. package/.claude/skills/hailer-rest-api/hailer-workflows.md +283 -0
  117. package/.claude/skills/insight-join-patterns/SKILL.md +3 -0
  118. package/.claude/skills/integration-patterns/SKILL.md +421 -0
  119. package/.claude/skills/json-only-output/SKILL.md +52 -12
  120. package/.claude/skills/lsp-setup/SKILL.md +160 -0
  121. package/.claude/skills/mcp-direct-tools/SKILL.md +153 -0
  122. package/.claude/skills/optional-parameters/SKILL.md +32 -23
  123. package/.claude/skills/publish-hailer-app/SKILL.md +76 -12
  124. package/.claude/skills/testing-patterns/SKILL.md +630 -0
  125. package/.claude/skills/tool-builder/SKILL.md +250 -0
  126. package/.claude/skills/tool-parameter-usage/SKILL.md +59 -45
  127. package/.claude/skills/tool-response-verification/SKILL.md +82 -48
  128. package/.claude/skills/zapier-hailer-patterns/SKILL.md +581 -0
  129. package/.env.example +26 -7
  130. package/CLAUDE.md +290 -224
  131. package/dist/CLAUDE.md +370 -0
  132. package/dist/app.d.ts +1 -1
  133. package/dist/app.js +101 -101
  134. package/dist/bot/bot-config.d.ts +26 -0
  135. package/dist/bot/bot-config.js +135 -0
  136. package/dist/bot/bot-manager.d.ts +40 -0
  137. package/dist/bot/bot-manager.js +137 -0
  138. package/dist/bot/bot.d.ts +127 -0
  139. package/dist/bot/bot.js +1328 -0
  140. package/dist/bot/operation-logger.d.ts +28 -0
  141. package/dist/bot/operation-logger.js +132 -0
  142. package/dist/bot/services/conversation-manager.d.ts +60 -0
  143. package/dist/bot/services/conversation-manager.js +246 -0
  144. package/dist/bot/services/index.d.ts +9 -0
  145. package/dist/bot/services/index.js +18 -0
  146. package/dist/bot/services/message-classifier.d.ts +42 -0
  147. package/dist/bot/services/message-classifier.js +228 -0
  148. package/dist/bot/services/message-formatter.d.ts +88 -0
  149. package/dist/bot/services/message-formatter.js +411 -0
  150. package/dist/bot/services/session-logger.d.ts +162 -0
  151. package/dist/bot/services/session-logger.js +724 -0
  152. package/dist/bot/services/token-billing.d.ts +78 -0
  153. package/dist/bot/services/token-billing.js +233 -0
  154. package/dist/bot/services/types.d.ts +169 -0
  155. package/dist/bot/services/types.js +12 -0
  156. package/dist/bot/services/typing-indicator.d.ts +23 -0
  157. package/dist/bot/services/typing-indicator.js +60 -0
  158. package/dist/bot/services/workspace-schema-cache.d.ts +122 -0
  159. package/dist/bot/services/workspace-schema-cache.js +506 -0
  160. package/dist/bot/tool-executor.d.ts +28 -0
  161. package/dist/bot/tool-executor.js +48 -0
  162. package/dist/bot/workspace-overview.d.ts +12 -0
  163. package/dist/bot/workspace-overview.js +94 -0
  164. package/dist/cli.d.ts +1 -8
  165. package/dist/cli.js +1 -253
  166. package/dist/config.d.ts +96 -3
  167. package/dist/config.js +148 -37
  168. package/dist/core.d.ts +5 -0
  169. package/dist/core.js +61 -8
  170. package/dist/lib/discussion-lock.d.ts +42 -0
  171. package/dist/lib/discussion-lock.js +110 -0
  172. package/dist/lib/logger.d.ts +0 -1
  173. package/dist/lib/logger.js +39 -23
  174. package/dist/lib/request-logger.d.ts +77 -0
  175. package/dist/lib/request-logger.js +147 -0
  176. package/dist/mcp/UserContextCache.js +16 -13
  177. package/dist/mcp/hailer-clients.js +18 -17
  178. package/dist/mcp/signal-handler.js +43 -13
  179. package/dist/mcp/tool-registry.d.ts +4 -15
  180. package/dist/mcp/tool-registry.js +94 -32
  181. package/dist/mcp/tools/activity.js +28 -69
  182. package/dist/mcp/tools/app-core.js +9 -4
  183. package/dist/mcp/tools/app-marketplace.js +22 -12
  184. package/dist/mcp/tools/app-member.js +5 -2
  185. package/dist/mcp/tools/app-scaffold.js +32 -18
  186. package/dist/mcp/tools/bot-config/constants.d.ts +23 -0
  187. package/dist/mcp/tools/bot-config/constants.js +94 -0
  188. package/dist/mcp/tools/bot-config/core.d.ts +253 -0
  189. package/dist/mcp/tools/bot-config/core.js +2456 -0
  190. package/dist/mcp/tools/bot-config/index.d.ts +10 -0
  191. package/dist/mcp/tools/bot-config/index.js +59 -0
  192. package/dist/mcp/tools/bot-config/tools.d.ts +7 -0
  193. package/dist/mcp/tools/bot-config/tools.js +15 -0
  194. package/dist/mcp/tools/bot-config/types.d.ts +50 -0
  195. package/dist/mcp/tools/bot-config/types.js +6 -0
  196. package/dist/mcp/tools/discussion.js +107 -77
  197. package/dist/mcp/tools/document.d.ts +11 -0
  198. package/dist/mcp/tools/document.js +741 -0
  199. package/dist/mcp/tools/file.js +5 -2
  200. package/dist/mcp/tools/insight.js +36 -12
  201. package/dist/mcp/tools/investigate.d.ts +9 -0
  202. package/dist/mcp/tools/investigate.js +254 -0
  203. package/dist/mcp/tools/user.d.ts +2 -4
  204. package/dist/mcp/tools/user.js +9 -50
  205. package/dist/mcp/tools/workflow.d.ts +1 -0
  206. package/dist/mcp/tools/workflow.js +164 -52
  207. package/dist/mcp/utils/hailer-api-client.js +26 -17
  208. package/dist/mcp/webhook-handler.d.ts +64 -3
  209. package/dist/mcp/webhook-handler.js +227 -9
  210. package/dist/mcp-server.d.ts +4 -0
  211. package/dist/mcp-server.js +237 -25
  212. package/dist/plugins/bug-fixer/index.d.ts +2 -0
  213. package/dist/plugins/bug-fixer/index.js +18 -0
  214. package/dist/plugins/bug-fixer/tools.d.ts +45 -0
  215. package/dist/plugins/bug-fixer/tools.js +1096 -0
  216. package/package.json +10 -10
  217. package/scripts/test-hal-tools.ts +154 -0
  218. package/.claude/agents/agent-nora-name-functions.md +0 -123
  219. package/.claude/assistant-knowledge.md +0 -23
  220. package/.claude/commands/install-plugin.md +0 -261
  221. package/.claude/commands/list-plugins.md +0 -42
  222. package/.claude/commands/marketplace-setup.md +0 -33
  223. package/.claude/commands/publish-plugin.md +0 -55
  224. package/.claude/commands/uninstall-plugin.md +0 -87
  225. package/.claude/hooks/interactive-mode.cjs +0 -87
  226. package/.claude/hooks/mcp-server-guard.cjs +0 -108
  227. package/.claude/skills/marketplace-publishing.md +0 -155
  228. package/dist/bot/chat-bot.d.ts +0 -31
  229. package/dist/bot/chat-bot.js +0 -357
  230. package/dist/mcp/tools/metrics.d.ts +0 -13
  231. package/dist/mcp/tools/metrics.js +0 -546
  232. package/dist/stdio-server.d.ts +0 -14
  233. 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
- <problem>
8
- Tool parameter is required in schema but should be OMITTED (not passed at all) when not needed, rather than passed as empty array/string.
9
- </problem>
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
- <wrong>
56
+ ## Example 2: Wrong - Passing Empty Values
57
+
35
58
  ```typescript
36
- // WRONG - Passing empty array when parameter should be omitted
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
- // WRONG - Passing empty string
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
- </wrong>
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
- **Option 2: Production + Marketplace**
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
- publish_hailer_app({
95
- projectDirectory: "/path/to/app",
96
- publishToMarket: true
110
+ update_app({
111
+ appId: "695816e2ba1d8bef3af7e018",
112
+ url: "https://apps.hailer.com/{workspaceId}/{appId}/"
97
113
  })
98
114
  ```
99
115
 
100
- **IMPORTANT:** The `publishToMarket: true` parameter is REQUIRED to publish the app to the Hailer Marketplace. Without it, the app is published only to your production environment.
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` | NO - stays localhost |
130
- | Prod | `https://apps.hailer.com/...` | `create_app` | YES |
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
- **Key insight:** Dev apps (scaffolded) will ALWAYS use localhost.
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>