@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.
Files changed (313) hide show
  1. package/.claude/CLAUDE.md +117 -320
  2. package/.claude/commands/app-squad.md +86 -90
  3. package/.claude/commands/audit-squad.md +19 -19
  4. package/.claude/commands/autoplan.md +3 -3
  5. package/.claude/commands/cleanup-squad.md +16 -16
  6. package/.claude/commands/config-squad.md +30 -30
  7. package/.claude/commands/crud-squad.md +23 -23
  8. package/.claude/commands/data-squad.md +21 -21
  9. package/.claude/commands/debug-squad.md +44 -44
  10. package/.claude/commands/doc-squad.md +16 -16
  11. package/.claude/commands/help:agents.md +130 -99
  12. package/.claude/commands/help:commands.md +15 -15
  13. package/.claude/commands/help:faq.md +17 -17
  14. package/.claude/commands/help:plugins.md +1 -1
  15. package/.claude/commands/help:skills.md +18 -24
  16. package/.claude/commands/hotfix-squad.md +22 -22
  17. package/.claude/commands/integration-squad.md +22 -22
  18. package/.claude/commands/janitor-squad.md +31 -31
  19. package/.claude/commands/learn-auto.md +5 -5
  20. package/.claude/commands/learn.md +12 -20
  21. package/.claude/commands/onboard-squad.md +39 -49
  22. package/.claude/commands/plan-workspace.md +2 -2
  23. package/.claude/commands/publish.md +32 -37
  24. package/.claude/commands/review-squad.md +27 -27
  25. package/.claude/commands/stats.md +26 -12
  26. package/.claude/commands/swarm.md +25 -25
  27. package/.claude/skills/chrome-mcp-reference/SKILL.md +5 -0
  28. package/.claude/skills/hailer-api-client/SKILL.md +55 -16
  29. package/.claude/skills/hailer-app-builder/SKILL.md +4 -270
  30. package/.claude/skills/hailer-apps-pictures/SKILL.md +3 -3
  31. package/.claude/skills/hailer-design-system/SKILL.md +96 -4
  32. package/.claude/skills/hailer-monolith-automations/SKILL.md +138 -116
  33. package/.claude/skills/hailer-permissions-system/SKILL.md +6 -9
  34. package/.claude/skills/hailer-project-protocol/SKILL.md +20 -110
  35. package/.claude/skills/integration-patterns/SKILL.md +6 -6
  36. package/.claude/skills/lsp-setup/SKILL.md +8 -9
  37. package/.claude/skills/sdk-activity-patterns/SKILL.md +238 -0
  38. package/.claude/skills/{SDK-document-templates → sdk-document-templates}/SKILL.md +13 -340
  39. package/.claude/skills/{SDK-function-fields → sdk-function-fields}/SKILL.md +8 -40
  40. package/.claude/skills/{SDK-insight-queries → sdk-insight-queries}/SKILL.md +114 -392
  41. package/.claude/skills/{SDK-ws-config-skill → sdk-ws-config-skill}/SKILL.md +79 -310
  42. package/.claude/skills/zapier-hailer-patterns/SKILL.md +84 -361
  43. package/.opencode/package-lock.json +117 -0
  44. package/CLAUDE.md +5 -358
  45. package/dist/app.d.ts.map +1 -1
  46. package/dist/app.js +10 -127
  47. package/dist/app.js.map +1 -1
  48. package/dist/bot/bot-manager.d.ts +3 -14
  49. package/dist/bot/bot-manager.d.ts.map +1 -1
  50. package/dist/bot/bot-manager.js +13 -4
  51. package/dist/bot/bot-manager.js.map +1 -1
  52. package/dist/bot/bot.d.ts +23 -102
  53. package/dist/bot/bot.d.ts.map +1 -1
  54. package/dist/bot/bot.js +356 -1212
  55. package/dist/bot/bot.js.map +1 -1
  56. package/dist/bot/services/bot-permissions.d.ts +50 -0
  57. package/dist/bot/services/bot-permissions.d.ts.map +1 -0
  58. package/dist/bot/services/bot-permissions.js +198 -0
  59. package/dist/bot/services/bot-permissions.js.map +1 -0
  60. package/dist/bot/services/index.d.ts +4 -2
  61. package/dist/bot/services/index.d.ts.map +1 -1
  62. package/dist/bot/services/index.js +10 -5
  63. package/dist/bot/services/index.js.map +1 -1
  64. package/dist/bot/services/message-classifier.d.ts +1 -1
  65. package/dist/bot/services/message-classifier.d.ts.map +1 -1
  66. package/dist/bot/services/message-classifier.js.map +1 -1
  67. package/dist/bot/services/signal-router.d.ts +32 -0
  68. package/dist/bot/services/signal-router.d.ts.map +1 -0
  69. package/dist/bot/services/signal-router.js +132 -0
  70. package/dist/bot/services/signal-router.js.map +1 -0
  71. package/dist/bot/services/system-prompt.d.ts +12 -0
  72. package/dist/bot/services/system-prompt.d.ts.map +1 -0
  73. package/dist/bot/services/system-prompt.js +93 -0
  74. package/dist/bot/services/system-prompt.js.map +1 -0
  75. package/dist/bot/services/types.d.ts +7 -34
  76. package/dist/bot/services/types.d.ts.map +1 -1
  77. package/dist/bot/services/types.js +0 -3
  78. package/dist/bot/services/types.js.map +1 -1
  79. package/dist/bot/services/workspace-refresh.d.ts +47 -0
  80. package/dist/bot/services/workspace-refresh.d.ts.map +1 -0
  81. package/dist/bot/services/workspace-refresh.js +154 -0
  82. package/dist/bot/services/workspace-refresh.js.map +1 -0
  83. package/dist/bot-config/constants.d.ts +0 -36
  84. package/dist/bot-config/constants.d.ts.map +1 -1
  85. package/dist/bot-config/constants.js +1 -76
  86. package/dist/bot-config/constants.js.map +1 -1
  87. package/dist/bot-config/context.d.ts +2 -42
  88. package/dist/bot-config/context.d.ts.map +1 -1
  89. package/dist/bot-config/context.js +13 -134
  90. package/dist/bot-config/context.js.map +1 -1
  91. package/dist/bot-config/index.d.ts +6 -15
  92. package/dist/bot-config/index.d.ts.map +1 -1
  93. package/dist/bot-config/index.js +5 -80
  94. package/dist/bot-config/index.js.map +1 -1
  95. package/dist/bot-config/loader.d.ts +16 -4
  96. package/dist/bot-config/loader.d.ts.map +1 -1
  97. package/dist/bot-config/loader.js +187 -96
  98. package/dist/bot-config/loader.js.map +1 -1
  99. package/dist/bot-config/persistence.d.ts +1 -52
  100. package/dist/bot-config/persistence.d.ts.map +1 -1
  101. package/dist/bot-config/persistence.js +3 -213
  102. package/dist/bot-config/persistence.js.map +1 -1
  103. package/dist/bot-config/state.d.ts +0 -41
  104. package/dist/bot-config/state.d.ts.map +1 -1
  105. package/dist/bot-config/state.js +0 -151
  106. package/dist/bot-config/state.js.map +1 -1
  107. package/dist/bot-config/tools.d.ts +1 -1
  108. package/dist/bot-config/tools.js +27 -27
  109. package/dist/bot-config/tools.js.map +1 -1
  110. package/dist/bot-config/types.d.ts +39 -32
  111. package/dist/bot-config/types.d.ts.map +1 -1
  112. package/dist/bot-config/types.js +0 -3
  113. package/dist/bot-config/types.js.map +1 -1
  114. package/dist/bot-config/webhooks.d.ts +0 -4
  115. package/dist/bot-config/webhooks.d.ts.map +1 -1
  116. package/dist/bot-config/webhooks.js +0 -13
  117. package/dist/bot-config/webhooks.js.map +1 -1
  118. package/dist/commands/seed-config.js +16 -31
  119. package/dist/commands/seed-config.js.map +1 -1
  120. package/dist/config.d.ts +0 -9
  121. package/dist/config.d.ts.map +1 -1
  122. package/dist/config.js +0 -15
  123. package/dist/config.js.map +1 -1
  124. package/dist/mcp/hailer-clients.js +2 -2
  125. package/dist/mcp/hailer-clients.js.map +1 -1
  126. package/dist/mcp/tool-registry.d.ts +10 -115
  127. package/dist/mcp/tool-registry.d.ts.map +1 -1
  128. package/dist/mcp/tool-registry.js +39 -363
  129. package/dist/mcp/tool-registry.js.map +1 -1
  130. package/dist/mcp/tools/activity.d.ts +3 -0
  131. package/dist/mcp/tools/activity.d.ts.map +1 -1
  132. package/dist/mcp/tools/activity.js +8 -1
  133. package/dist/mcp/tools/activity.js.map +1 -1
  134. package/dist/mcp/tools/app-core.d.ts +3 -0
  135. package/dist/mcp/tools/app-core.d.ts.map +1 -1
  136. package/dist/mcp/tools/app-core.js +9 -2
  137. package/dist/mcp/tools/app-core.js.map +1 -1
  138. package/dist/mcp/tools/app-marketplace.d.ts +3 -0
  139. package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
  140. package/dist/mcp/tools/app-marketplace.js +13 -1
  141. package/dist/mcp/tools/app-marketplace.js.map +1 -1
  142. package/dist/mcp/tools/app-member.d.ts +3 -0
  143. package/dist/mcp/tools/app-member.d.ts.map +1 -1
  144. package/dist/mcp/tools/app-member.js +6 -1
  145. package/dist/mcp/tools/app-member.js.map +1 -1
  146. package/dist/mcp/tools/app-scaffold.d.ts +3 -0
  147. package/dist/mcp/tools/app-scaffold.d.ts.map +1 -1
  148. package/dist/mcp/tools/app-scaffold.js +15 -11
  149. package/dist/mcp/tools/app-scaffold.js.map +1 -1
  150. package/dist/mcp/tools/company.d.ts +3 -0
  151. package/dist/mcp/tools/company.d.ts.map +1 -1
  152. package/dist/mcp/tools/company.js +5 -1
  153. package/dist/mcp/tools/company.js.map +1 -1
  154. package/dist/mcp/tools/discussion.d.ts +3 -0
  155. package/dist/mcp/tools/discussion.d.ts.map +1 -1
  156. package/dist/mcp/tools/discussion.js +13 -2
  157. package/dist/mcp/tools/discussion.js.map +1 -1
  158. package/dist/mcp/tools/file.d.ts +3 -0
  159. package/dist/mcp/tools/file.d.ts.map +1 -1
  160. package/dist/mcp/tools/file.js +6 -1
  161. package/dist/mcp/tools/file.js.map +1 -1
  162. package/dist/mcp/tools/index.d.ts +7 -0
  163. package/dist/mcp/tools/index.d.ts.map +1 -0
  164. package/dist/mcp/tools/index.js +34 -0
  165. package/dist/mcp/tools/index.js.map +1 -0
  166. package/dist/mcp/tools/insight.d.ts +3 -0
  167. package/dist/mcp/tools/insight.d.ts.map +1 -1
  168. package/dist/mcp/tools/insight.js +18 -8
  169. package/dist/mcp/tools/insight.js.map +1 -1
  170. package/dist/mcp/tools/user.d.ts +3 -0
  171. package/dist/mcp/tools/user.d.ts.map +1 -1
  172. package/dist/mcp/tools/user.js +6 -1
  173. package/dist/mcp/tools/user.js.map +1 -1
  174. package/dist/mcp/tools/workflow-permissions.d.ts +3 -0
  175. package/dist/mcp/tools/workflow-permissions.d.ts.map +1 -1
  176. package/dist/mcp/tools/workflow-permissions.js +8 -1
  177. package/dist/mcp/tools/workflow-permissions.js.map +1 -1
  178. package/dist/mcp/tools/workflow.d.ts +3 -0
  179. package/dist/mcp/tools/workflow.d.ts.map +1 -1
  180. package/dist/mcp/tools/workflow.js +29 -28
  181. package/dist/mcp/tools/workflow.js.map +1 -1
  182. package/dist/mcp/utils/index.d.ts +4 -11
  183. package/dist/mcp/utils/index.d.ts.map +1 -1
  184. package/dist/mcp/utils/index.js +5 -36
  185. package/dist/mcp/utils/index.js.map +1 -1
  186. package/dist/mcp/utils/role-utils.d.ts +0 -32
  187. package/dist/mcp/utils/role-utils.d.ts.map +1 -1
  188. package/dist/mcp/utils/role-utils.js +0 -73
  189. package/dist/mcp/utils/role-utils.js.map +1 -1
  190. package/dist/mcp/utils/tool-helpers.d.ts +0 -25
  191. package/dist/mcp/utils/tool-helpers.d.ts.map +1 -1
  192. package/dist/mcp/utils/tool-helpers.js +0 -34
  193. package/dist/mcp/utils/tool-helpers.js.map +1 -1
  194. package/dist/mcp/webhook-handler.d.ts +4 -34
  195. package/dist/mcp/webhook-handler.d.ts.map +1 -1
  196. package/dist/mcp/webhook-handler.js +57 -74
  197. package/dist/mcp/webhook-handler.js.map +1 -1
  198. package/dist/mcp-server.d.ts.map +1 -1
  199. package/dist/mcp-server.js +3 -78
  200. package/dist/mcp-server.js.map +1 -1
  201. package/package.json +1 -2
  202. package/.claude/agents/agent-ada-skill-builder.md +0 -94
  203. package/.claude/agents/agent-alejandro-function-fields.md +0 -342
  204. package/.claude/agents/agent-bjorn-config-audit.md +0 -103
  205. package/.claude/agents/agent-builder-agent-creator.md +0 -130
  206. package/.claude/agents/agent-code-simplifier.md +0 -53
  207. package/.claude/agents/agent-dmitri-activity-crud.md +0 -159
  208. package/.claude/agents/agent-giuseppe-app-builder.md +0 -208
  209. package/.claude/agents/agent-gunther-mcp-tools.md +0 -39
  210. package/.claude/agents/agent-helga-workflow-config.md +0 -204
  211. package/.claude/agents/agent-igor-activity-mover-automation.md +0 -125
  212. package/.claude/agents/agent-ingrid-doc-templates.md +0 -261
  213. package/.claude/agents/agent-ivan-monolith.md +0 -154
  214. package/.claude/agents/agent-kenji-data-reader.md +0 -86
  215. package/.claude/agents/agent-lars-code-inspector.md +0 -102
  216. package/.claude/agents/agent-marco-mockup-builder.md +0 -110
  217. package/.claude/agents/agent-marcus-api-documenter.md +0 -323
  218. package/.claude/agents/agent-marketplace-publisher.md +0 -280
  219. package/.claude/agents/agent-marketplace-reviewer.md +0 -309
  220. package/.claude/agents/agent-permissions-handler.md +0 -208
  221. package/.claude/agents/agent-simple-writer.md +0 -48
  222. package/.claude/agents/agent-svetlana-code-review.md +0 -171
  223. package/.claude/agents/agent-tanya-test-runner.md +0 -333
  224. package/.claude/agents/agent-ui-designer.md +0 -100
  225. package/.claude/agents/agent-viktor-sql-insights.md +0 -212
  226. package/.claude/agents/agent-web-search.md +0 -55
  227. package/.claude/agents/agent-yevgeni-discussions.md +0 -45
  228. package/.claude/agents/agent-zara-zapier.md +0 -159
  229. package/.claude/skills/SDK-activity-patterns/SKILL.md +0 -428
  230. package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
  231. package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
  232. package/.claude/skills/agent-structure/SKILL.md +0 -98
  233. package/.claude/skills/delegation-routing/SKILL.md +0 -202
  234. package/.claude/skills/frontend-design/SKILL.md +0 -254
  235. package/.claude/skills/hailer-activity-mover/SKILL.md +0 -213
  236. package/.claude/skills/hailer-rest-api/SKILL.md +0 -61
  237. package/.claude/skills/hailer-rest-api/hailer-activities.md +0 -184
  238. package/.claude/skills/hailer-rest-api/hailer-admin.md +0 -473
  239. package/.claude/skills/hailer-rest-api/hailer-calendar.md +0 -256
  240. package/.claude/skills/hailer-rest-api/hailer-feed.md +0 -249
  241. package/.claude/skills/hailer-rest-api/hailer-insights.md +0 -195
  242. package/.claude/skills/hailer-rest-api/hailer-messaging.md +0 -276
  243. package/.claude/skills/hailer-rest-api/hailer-workflows.md +0 -283
  244. package/.claude/skills/insight-join-patterns/SKILL.md +0 -174
  245. package/.claude/skills/json-only-output/SKILL.md +0 -72
  246. package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
  247. package/.claude/skills/optional-parameters/SKILL.md +0 -72
  248. package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
  249. package/.claude/skills/tool-response-verification/SKILL.md +0 -92
  250. package/.opencode/agent/agent-ada-skill-builder.md +0 -35
  251. package/.opencode/agent/agent-alejandro-function-fields.md +0 -39
  252. package/.opencode/agent/agent-bjorn-config-audit.md +0 -36
  253. package/.opencode/agent/agent-builder-agent-creator.md +0 -39
  254. package/.opencode/agent/agent-code-simplifier.md +0 -31
  255. package/.opencode/agent/agent-dmitri-activity-crud.md +0 -40
  256. package/.opencode/agent/agent-giuseppe-app-builder.md +0 -37
  257. package/.opencode/agent/agent-gunther-mcp-tools.md +0 -39
  258. package/.opencode/agent/agent-helga-workflow-config.md +0 -204
  259. package/.opencode/agent/agent-igor-activity-mover-automation.md +0 -46
  260. package/.opencode/agent/agent-ingrid-doc-templates.md +0 -39
  261. package/.opencode/agent/agent-ivan-monolith.md +0 -46
  262. package/.opencode/agent/agent-kenji-data-reader.md +0 -53
  263. package/.opencode/agent/agent-lars-code-inspector.md +0 -28
  264. package/.opencode/agent/agent-marco-mockup-builder.md +0 -42
  265. package/.opencode/agent/agent-marcus-api-documenter.md +0 -53
  266. package/.opencode/agent/agent-marketplace-publisher.md +0 -44
  267. package/.opencode/agent/agent-marketplace-reviewer.md +0 -42
  268. package/.opencode/agent/agent-permissions-handler.md +0 -50
  269. package/.opencode/agent/agent-simple-writer.md +0 -45
  270. package/.opencode/agent/agent-svetlana-code-review.md +0 -39
  271. package/.opencode/agent/agent-tanya-test-runner.md +0 -57
  272. package/.opencode/agent/agent-ui-designer.md +0 -56
  273. package/.opencode/agent/agent-viktor-sql-insights.md +0 -34
  274. package/.opencode/agent/agent-web-search.md +0 -42
  275. package/.opencode/agent/agent-yevgeni-discussions.md +0 -37
  276. package/.opencode/agent/agent-zara-zapier.md +0 -53
  277. package/.opencode/commands/app-squad.md +0 -135
  278. package/.opencode/commands/audit-squad.md +0 -158
  279. package/.opencode/commands/autoplan.md +0 -563
  280. package/.opencode/commands/cleanup-squad.md +0 -98
  281. package/.opencode/commands/config-squad.md +0 -106
  282. package/.opencode/commands/crud-squad.md +0 -87
  283. package/.opencode/commands/data-squad.md +0 -97
  284. package/.opencode/commands/debug-squad.md +0 -303
  285. package/.opencode/commands/doc-squad.md +0 -65
  286. package/.opencode/commands/handoff.md +0 -137
  287. package/.opencode/commands/health.md +0 -49
  288. package/.opencode/commands/help-agents.md +0 -151
  289. package/.opencode/commands/help-commands.md +0 -32
  290. package/.opencode/commands/help-faq.md +0 -29
  291. package/.opencode/commands/help-plugins.md +0 -28
  292. package/.opencode/commands/help-skills.md +0 -7
  293. package/.opencode/commands/help-tools.md +0 -40
  294. package/.opencode/commands/help.md +0 -28
  295. package/.opencode/commands/hotfix-squad.md +0 -112
  296. package/.opencode/commands/integration-squad.md +0 -82
  297. package/.opencode/commands/janitor-squad.md +0 -167
  298. package/.opencode/commands/learn-auto.md +0 -120
  299. package/.opencode/commands/learn.md +0 -120
  300. package/.opencode/commands/mcp-list.md +0 -27
  301. package/.opencode/commands/onboard-squad.md +0 -140
  302. package/.opencode/commands/plan-workspace.md +0 -732
  303. package/.opencode/commands/prd.md +0 -131
  304. package/.opencode/commands/project-status.md +0 -82
  305. package/.opencode/commands/publish.md +0 -138
  306. package/.opencode/commands/recap.md +0 -69
  307. package/.opencode/commands/restore.md +0 -64
  308. package/.opencode/commands/review-squad.md +0 -152
  309. package/.opencode/commands/save.md +0 -24
  310. package/.opencode/commands/stats.md +0 -19
  311. package/.opencode/commands/swarm.md +0 -210
  312. package/.opencode/commands/tool-builder.md +0 -39
  313. package/.opencode/commands/ws-pull.md +0 -44
@@ -15,41 +15,7 @@ Patterns and templates for building Hailer apps with @hailer/app-sdk.
15
15
  <critical-rules>
16
16
  ## CRITICAL: Scaffolding and Data Sources
17
17
 
18
- **ALWAYS use scaffold_hailer_app MCP tool** to create new apps. Never manually create the project structure.
19
-
20
- ### scaffold_hailer_app - One-Shot Full Setup
21
-
22
- This tool does EVERYTHING in one call:
23
- - Scaffolds project from `@hailer/create-app@beta` template (Vite + React + TypeScript)
24
- - Runs `npm install`
25
- - Configures CORS in `vite.config.ts`
26
- - **Reuses existing localhost dev app** if one exists, otherwise creates a new one (with auto-generated icon)
27
- - Shares app with entire workspace
28
- - Adds appId to `manifest.json`
29
- - Starts dev server on port 3000
30
-
31
- **NEVER call `create_app` separately during scaffolding — it creates duplicates.** The scaffold tool handles dev app creation/reuse internally.
32
-
33
- **Publishing (when ready):** Call `publish_hailer_app` — it builds, packages with correct tar structure (`package/dist/manifest.json`), uploads to S3, and auto-updates app URL to production.
34
-
35
- **You're customizing a working starter app**, not building from scratch.
36
-
37
- ### create_app - Entry Only (No Local Files)
38
-
39
- Use `mcp__hailer__create_app` when you:
40
- - Need a production app entry pointing to a deployed URL
41
- - Want to register an external/existing app in Hailer
42
- - Already have app code and just need the Hailer entry
43
-
44
- ```
45
- mcp__hailer__create_app({
46
- name: "Production App",
47
- url: "https://app.example.com"
48
- })
49
- ```
50
-
51
- **scaffold = full development setup**
52
- **create_app = just the Hailer entry/frame**
18
+ **ALWAYS use scaffold_hailer_app MCP tool** to create new apps. Never manually create the project structure. Never call `create_app` separately during scaffolding — it creates duplicates.
53
19
 
54
20
  **For project data structure (workflows, fields, phases):**
55
21
  - READ workspace/ TypeScript files directly (fields.ts, phases.ts, enums.ts)
@@ -64,38 +30,6 @@ mcp__hailer__create_app({
64
30
  ```
65
31
  </critical-rules>
66
32
 
67
- <local-dev-flow>
68
- ## Development Flow
69
-
70
- **Default: Local development.** `scaffold_hailer_app` handles everything automatically:
71
- 1. Creates local project files
72
- 2. Reuses existing localhost dev app (or creates one if none exists) at `http://localhost:3000`
73
- 3. Shares the app with the workspace
74
- 4. Starts the dev server
75
-
76
- **Do NOT call `create_app` during scaffolding.** The scaffold tool handles it.
77
-
78
- After scaffolding, run `npm run dev` and test inside Hailer iframe.
79
-
80
- **Publishing: Only when user explicitly asks.** Load the `publish-hailer-app` skill, which covers manifest validation, file upload via `publish_hailer_app`, and URL switch from localhost to production via `update_app`.
81
-
82
- ### Manual Local Dev App (Rare Cases)
83
-
84
- Only needed if:
85
- - You have existing code without a dev app entry
86
- - The scaffold's dev app was deleted
87
-
88
- ```
89
- mcp__hailer__create_app({
90
- name: "Local Dev",
91
- url: "http://localhost:3000",
92
- description: "Local development testing"
93
- })
94
- ```
95
-
96
- Or manually in Hailer UI: Apps → Create App → URL: http://localhost:3000
97
- </local-dev-flow>
98
-
99
33
  <sdk-setup>
100
34
  ## Hook Import (CRITICAL)
101
35
 
@@ -364,42 +298,9 @@ const phaseResults = await Promise.all(
364
298
  const allActivities = phaseResults.flat();
365
299
  ```
366
300
 
367
- ### Phase Selection: Which Phases to Fetch
368
-
369
- **Don't blindly fetch all phases.** Consider what the user needs to see:
370
-
371
- | App Type | Phases to Fetch | Rationale |
372
- |----------|-----------------|-----------|
373
- | Sales dashboard | Active only | Don't show internal drafts |
374
- | Product manager view | Draft + Active | Need to see work-in-progress |
375
- | Archive browser | Archived only | Historical data |
376
- | Kanban board | All except Archived | Full workflow visibility |
377
-
378
- **Example: Role-based phase selection**
379
- ```typescript
380
- // Define phases per user role
381
- const PHASE_CONFIG = {
382
- sales: ['activePhaseId'],
383
- manager: ['draftPhaseId', 'activePhaseId'],
384
- admin: ['draftPhaseId', 'activePhaseId', 'archivedPhaseId'],
385
- };
301
+ ### Phase Selection
386
302
 
387
- // Fetch based on role
388
- const userRole = 'sales'; // from app config or user check
389
- const phases = PHASE_CONFIG[userRole] || PHASE_CONFIG.sales;
390
-
391
- const results = await Promise.all(
392
- phases.map(phaseId => hailer.activity.list(workflowId, phaseId))
393
- );
394
- ```
395
-
396
- **Document phase selection in PRD:**
397
- ```markdown
398
- ## Data Access
399
- - **Product Browser**: Shows Draft + Active phases (managers need WIP visibility)
400
- - **Public Dashboard**: Active only (no internal data exposed)
401
- - **Insights**: Active only (accurate counts, no duplicates from drafts)
402
- ```
303
+ Don't blindly fetch all phases — fetch only what the user needs to see (e.g., active only for dashboards, all except archived for kanban). For field value formats and phase selection patterns, see the **sdk-activity-patterns** skill.
403
304
 
404
305
  ## Kanban API
405
306
 
@@ -802,125 +703,6 @@ function StatsCard({ label, value, helpText }: Props) {
802
703
  ```
803
704
  </component-templates>
804
705
 
805
- <app-template>
806
- ## Full App Template
807
-
808
- ```typescript
809
- import { useEffect, useState } from 'react';
810
- import {
811
- Box,
812
- Heading,
813
- Text,
814
- Spinner,
815
- Table,
816
- Thead,
817
- Tbody,
818
- Tr,
819
- Th,
820
- Td,
821
- VStack,
822
- useColorModeValue,
823
- } from '@chakra-ui/react';
824
- import useHailer from './hailer/use-hailer';
825
-
826
- // Field IDs from workflow schema (provided by orchestrator)
827
- const FIELDS = {
828
- NAME_FIELD: 'fieldId123',
829
- STATUS_FIELD: 'fieldId456',
830
- } as const;
831
-
832
- interface Activity {
833
- _id: string;
834
- name: string;
835
- fields?: Record<string, { value: unknown }>;
836
- }
837
-
838
- function App() {
839
- const { inside, hailer } = useHailer();
840
- const [activities, setActivities] = useState<Activity[]>([]);
841
- const [loading, setLoading] = useState(true);
842
- const [error, setError] = useState<string | null>(null);
843
-
844
- const bg = useColorModeValue('gray.50', 'gray.800');
845
-
846
- // Fetch data when inside Hailer
847
- useEffect(() => {
848
- if (!inside) return;
849
-
850
- async function fetchData() {
851
- try {
852
- setLoading(true);
853
- const data = await hailer.activity.list(
854
- 'workflowId', // Replace with actual workflow ID
855
- 'phaseId', // Replace with actual phase ID
856
- { limit: 100 }
857
- );
858
- setActivities(data);
859
- } catch (err) {
860
- setError(err instanceof Error ? err.message : 'Failed to load data');
861
- } finally {
862
- setLoading(false);
863
- }
864
- }
865
-
866
- fetchData();
867
- }, [inside]); // IMPORTANT: [inside] not [hailer]
868
-
869
- // Early return AFTER hooks
870
- if (!inside) {
871
- return (
872
- <Box p={8} textAlign="center">
873
- <Text>Please open this app inside Hailer</Text>
874
- </Box>
875
- );
876
- }
877
-
878
- if (loading) {
879
- return (
880
- <Box p={8} textAlign="center">
881
- <Spinner size="xl" />
882
- </Box>
883
- );
884
- }
885
-
886
- if (error) {
887
- return (
888
- <Box p={8} textAlign="center">
889
- <Text color="red.500">{error}</Text>
890
- </Box>
891
- );
892
- }
893
-
894
- return (
895
- <Box p={4} bg={bg} minH="100vh">
896
- <VStack spacing={4} align="stretch">
897
- <Heading size="lg">Dashboard</Heading>
898
-
899
- <Table variant="simple" size="sm">
900
- <Thead>
901
- <Tr>
902
- <Th>Name</Th>
903
- <Th>Status</Th>
904
- </Tr>
905
- </Thead>
906
- <Tbody>
907
- {activities.map(activity => (
908
- <Tr key={activity._id}>
909
- <Td>{activity.name}</Td>
910
- <Td>{String(activity.fields?.[FIELDS.STATUS_FIELD]?.value ?? '-')}</Td>
911
- </Tr>
912
- ))}
913
- </Tbody>
914
- </Table>
915
- </VStack>
916
- </Box>
917
- );
918
- }
919
-
920
- export default App;
921
- ```
922
- </app-template>
923
-
924
706
  <theme-patterns>
925
707
  ## Hailer Theme Colors
926
708
 
@@ -1052,18 +834,6 @@ const PHASE_COLOR_MAP: Record<string, string> = {
1052
834
  };
1053
835
  ```
1054
836
 
1055
- ## Common UI Patterns
1056
-
1057
- ```typescript
1058
- // Page container
1059
- <Box p={4} bg={useColorModeValue('gray.50', 'gray.800')} minH="100vh">
1060
-
1061
- // Card
1062
- <Box p={4} bg={useColorModeValue('white', 'gray.700')} borderRadius="md" shadow="sm">
1063
-
1064
- // Section with border
1065
- <Box p={4} border="1px" borderColor={useColorModeValue('gray.200', 'gray.600')} borderRadius="md">
1066
- ```
1067
837
  </theme-patterns>
1068
838
 
1069
839
  <troubleshooting>
@@ -1072,7 +842,6 @@ const PHASE_COLOR_MAP: Record<string, string> = {
1072
842
  When SDK calls fail with permission/not-allowed errors, check **workflow configuration in Hailer** first.
1073
843
 
1074
844
  **Common symptoms:**
1075
- - `hailer.activity.move()` fails with permission error
1076
845
  - Phase transitions not working
1077
846
  - "Not allowed" errors on operations that should work
1078
847
 
@@ -1152,20 +921,8 @@ const hoverBg = useColorModeValue('gray.50', 'gray.600');
1152
921
  ```
1153
922
 
1154
923
  ### hailer.activity.move is not a function
1155
- ```typescript
1156
- // ❌ WRONG - activity.move() DOES NOT EXIST (common mistake)
1157
- // await hailer.activity.move(activityId, newPhaseId); // This will fail!
1158
924
 
1159
- // CORRECT - use activity.update() with phaseId
1160
- await hailer.activity.update([
1161
- {
1162
- _id: activityId,
1163
- phaseId: newPhaseId,
1164
- },
1165
- ], {});
1166
- ```
1167
-
1168
- **Explanation:** Phase transitions in Hailer are done via the `update()` method by setting the `phaseId` field. There is no separate `move()` method in the SDK.
925
+ `activity.move()` does not exist. Use `activity.update([{ _id, phaseId }], {})` see Phase Transitions in sdk-api.
1169
926
 
1170
927
  ### Routing: HashRouter vs BrowserRouter
1171
928
 
@@ -1276,29 +1033,6 @@ export const FIELDS = {
1276
1033
  } as const;
1277
1034
  ```
1278
1035
 
1279
- ## Types File Pattern
1280
-
1281
- ```typescript
1282
- // src/types/index.ts
1283
- export interface Activity {
1284
- _id: string;
1285
- name: string;
1286
- fields?: Record<string, { value: unknown }>;
1287
- created?: number;
1288
- updated?: number;
1289
- }
1290
-
1291
- export interface ActivityLinkValue {
1292
- _id: string;
1293
- name: string;
1294
- }
1295
-
1296
- export interface UserValue {
1297
- _id: string;
1298
- firstname: string;
1299
- lastname: string;
1300
- }
1301
- ```
1302
1036
  </file-structure>
1303
1037
 
1304
1038
  <app-manifest>
@@ -76,7 +76,7 @@ Create a wrapper component for CORS handling and error states:
76
76
  import { Image, ImageProps, Icon } from '@chakra-ui/react';
77
77
  import { FaImage } from 'react-icons/fa6';
78
78
  import { useState, useEffect } from 'react';
79
- import { useHailer } from '../hailer/use-hailer';
79
+ import useHailer from '../hailer/use-hailer';
80
80
 
81
81
  interface HailerImageProps extends Omit<ImageProps, 'src'> {
82
82
  hailerImageUrl?: string;
@@ -102,7 +102,7 @@ export const HailerImage = ({
102
102
  return;
103
103
  }
104
104
 
105
- if (!hailer?.ready) {
105
+ if (!hailer?.ready) { // NOTE: verify .ready exists on SDK type — may need .activity or similar
106
106
  setIsLoading(true);
107
107
  return;
108
108
  }
@@ -237,7 +237,7 @@ const ProductImageCarousel = ({ allPictures, mainImageUrl }: Props) => {
237
237
  ```typescript
238
238
  // In App.tsx or data fetching hook
239
239
  const fetchProducts = async () => {
240
- const data = await hailer.api.public.insight.dataAsObject(PRODUCT_INSIGHT_KEY);
240
+ const data = await hailer.public.insight.dataAsObject(PRODUCT_INSIGHT_KEY);
241
241
 
242
242
  return data.map(item => ({
243
243
  // ... other fields
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: hailer-design-system
3
- description: Chakra UI v2 theme, colors, icons, and component patterns for Hailer apps
4
- version: 1.0.0
5
- triggers: Build app, UI components, styling, theme, colors, icons, buttons, forms
3
+ description: Chakra UI v2 theme, colors, icons, and component patterns for Hailer apps. Includes layout, spacing, visual hierarchy, responsive design, empty/loading states.
4
+ version: 2.0.0
5
+ triggers: Build app, UI components, styling, theme, colors, icons, buttons, forms, layout, spacing, hierarchy, responsive, empty state, loading state, design, UI, UX, mockup, dashboard, grid
6
6
  ---
7
7
 
8
8
  # Hailer Design System
@@ -11,6 +11,83 @@ Chakra UI v2 with custom Hailer theme.
11
11
 
12
12
  **Full reference:** Read `docs/design-system/HAILER_DESIGN_SYSTEM.md` for comprehensive documentation (all icons, all components, full examples).
13
13
 
14
+ ---
15
+
16
+ ## Design Principles
17
+
18
+ ### Layout
19
+
20
+ Common layout patterns (use Chakra Flex/Grid to implement):
21
+
22
+ ```
23
+ Dashboard: [Sidebar 240px] [Main Content flex-1]
24
+ List View: [Filters 280px] [Table/Cards flex-1]
25
+ Detail View: [Main 2/3] [Sidebar 1/3]
26
+ Form: [Labels 1/3] [Inputs 2/3] or stacked on mobile
27
+ ```
28
+
29
+ Grid: 12-column, 1200–1400px max-width, centered. Gutters 16–24px.
30
+
31
+ ### Spacing Scale
32
+
33
+ | Token | px | Use |
34
+ |-------|----|-----|
35
+ | 1 | 4px | Icon padding |
36
+ | 2 | 8px | Compact (button padding) |
37
+ | 4 | 16px | Default (card padding, list gaps) |
38
+ | 6 | 24px | Section gaps |
39
+ | 8 | 32px | Page sections |
40
+ | 12 | 48px | Major sections |
41
+
42
+ ### Visual Hierarchy
43
+
44
+ **Size scale:**
45
+
46
+ | Level | Size | Weight |
47
+ |-------|------|--------|
48
+ | Page title | 32–48px (`2xl`) | Bold |
49
+ | Section header | 24–28px (`xl`) | Semibold |
50
+ | Card title | 18–20px (`lg`/`md`) | Medium |
51
+ | Body | 14–16px | Regular |
52
+ | Caption/label | 12–13px (`sm`) | Regular/Medium |
53
+
54
+ **Emphasis:** size > weight > color > whitespace > position (F-pattern: top-left reads first).
55
+
56
+ **Density:** Bold labels + regular values for scannability. Group related info in cards. Show summary first, details on demand.
57
+
58
+ ### Responsive Breakpoints
59
+
60
+ | Breakpoint | Width | Layout |
61
+ |------------|-------|--------|
62
+ | Mobile | < 640px | 1 column, stacked |
63
+ | Tablet | 640–1024px | 2 columns, sidebar hidden |
64
+ | Desktop | > 1024px | Full layout |
65
+ | Wide | > 1440px | max-width container |
66
+
67
+ Mobile adaptations: stack layouts vertically, hamburger menu, 44px min touch targets, bottom sheets over modals.
68
+
69
+ ### Empty States
70
+
71
+ Always design for empty — never leave a blank panel:
72
+
73
+ ```
74
+ [Illustration / Icon]
75
+ No items yet
76
+ Add your first item
77
+ [+ Add Item]
78
+ ```
79
+
80
+ Use `VStack` centered in the container with muted icon, `Text` heading, helper text, and a primary action button.
81
+
82
+ ### Loading States
83
+
84
+ - **Skeleton** — gray boxes mimicking content shape (initial page loads)
85
+ - **Spinner** — for triggered actions, not initial loads
86
+ - **Progress** — multi-step or long operations
87
+ - **Optimistic** — show expected result immediately, revert on error
88
+
89
+ ---
90
+
14
91
  ## Setup
15
92
 
16
93
  The `react-ts` scaffold template already includes the design system at `src/hailer/theme/`. **Do NOT copy from other projects.**
@@ -43,6 +120,15 @@ import { theme } from './hailer/theme/theme';
43
120
  - `bodyText` - Main text
44
121
  - `chakra-body-bg` - Page background
45
122
 
123
+ **Background hierarchy:**
124
+ - Page: `gray.50` or white
125
+ - Card: white (with subtle shadow)
126
+ - Hover: `gray.100`
127
+ - Selected: `brand.50` or `blue.50`
128
+ - Disabled: `gray.100` with `gray.400` text
129
+
130
+ **Contrast:** 4.5:1 minimum for text (WCAG AA), 3:1 for large text and UI components.
131
+
46
132
  ---
47
133
 
48
134
  ## Buttons
@@ -110,6 +196,8 @@ import { HailerPlus, HailerSettings } from './hailer/theme/icons';
110
196
  <Text fontSize="sm" color="subtleText">Caption</Text>
111
197
  ```
112
198
 
199
+ Text alignment: left-align body, center short headings/CTAs, right-align numbers in tables. Never justify body text.
200
+
113
201
  ---
114
202
 
115
203
  ## Spacing
@@ -137,6 +225,8 @@ import { HailerPlus, HailerSettings } from './hailer/theme/icons';
137
225
 
138
226
  **Selection controls:** Only green colorScheme for Checkbox, Radio, Switch.
139
227
 
228
+ Labels above inputs (mobile-friendly). Group related fields in sections.
229
+
140
230
  ---
141
231
 
142
232
  ## Tables
@@ -153,7 +243,7 @@ import { HailerPlus, HailerSettings } from './hailer/theme/icons';
153
243
  </Tr>
154
244
  </Thead>
155
245
  <Tbody>
156
- <Tr>
246
+ <Tr _hover={{ bg: 'gray.50' }}>
157
247
  <Td>Item</Td>
158
248
  <Td isNumeric>42</Td>
159
249
  </Tr>
@@ -162,6 +252,8 @@ import { HailerPlus, HailerSettings } from './hailer/theme/icons';
162
252
  </TableContainer>
163
253
  ```
164
254
 
255
+ Responsive: hide secondary columns on mobile with `display={{ base: 'none', md: 'table-cell' }}`.
256
+
165
257
  ---
166
258
 
167
259
  ## Modals