@hailer/mcp 1.2.1 → 2.0.0-beta.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/agents/agent-hailer-helper.md +118 -0
- package/.claude/commands/app-squad.md +16 -110
- package/.claude/commands/debug-squad.md +13 -290
- package/.claude/commands/publish.md +2 -2
- package/.claude/commands/review-squad.md +17 -139
- package/.claude/skills/create-and-publish-app/SKILL.md +105 -151
- package/.claude/skills/hailer-app-builder/SKILL.md +2 -2
- package/.claude/skills/hailer-ui-guide/SKILL.md +265 -0
- package/.env.example +50 -1
- package/CLAUDE.md +138 -10
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +3 -0
- package/dist/app.js.map +1 -1
- package/dist/bot/bot-manager.d.ts +9 -6
- package/dist/bot/bot-manager.d.ts.map +1 -1
- package/dist/bot/bot-manager.js +142 -31
- package/dist/bot/bot-manager.js.map +1 -1
- package/dist/bot/bot.d.ts +59 -16
- package/dist/bot/bot.d.ts.map +1 -1
- package/dist/bot/bot.js +889 -142
- package/dist/bot/bot.js.map +1 -1
- package/dist/bot/operation-logger.d.ts.map +1 -1
- package/dist/bot/operation-logger.js +24 -12
- package/dist/bot/operation-logger.js.map +1 -1
- package/dist/bot/services/bot-permissions.d.ts +2 -2
- package/dist/bot/services/bot-permissions.d.ts.map +1 -1
- package/dist/bot/services/bot-permissions.js +28 -9
- package/dist/bot/services/bot-permissions.js.map +1 -1
- package/dist/bot/services/conversation-manager.d.ts +23 -23
- package/dist/bot/services/conversation-manager.d.ts.map +1 -1
- package/dist/bot/services/conversation-manager.js +52 -49
- package/dist/bot/services/conversation-manager.js.map +1 -1
- package/dist/bot/services/helper-prompt.d.ts +8 -0
- package/dist/bot/services/helper-prompt.d.ts.map +1 -0
- package/dist/bot/services/helper-prompt.js +177 -0
- package/dist/bot/services/helper-prompt.js.map +1 -0
- package/dist/bot/services/message-classifier.d.ts +16 -16
- package/dist/bot/services/message-classifier.d.ts.map +1 -1
- package/dist/bot/services/message-classifier.js +55 -49
- package/dist/bot/services/message-classifier.js.map +1 -1
- package/dist/bot/services/message-formatter.d.ts +38 -38
- package/dist/bot/services/message-formatter.d.ts.map +1 -1
- package/dist/bot/services/message-formatter.js +81 -74
- package/dist/bot/services/message-formatter.js.map +1 -1
- package/dist/bot/services/permission-guard.d.ts.map +1 -1
- package/dist/bot/services/permission-guard.js +20 -10
- package/dist/bot/services/permission-guard.js.map +1 -1
- package/dist/bot/services/signal-router.d.ts.map +1 -1
- package/dist/bot/services/signal-router.js +11 -6
- package/dist/bot/services/signal-router.js.map +1 -1
- package/dist/bot/services/system-prompt.d.ts +14 -0
- package/dist/bot/services/system-prompt.d.ts.map +1 -1
- package/dist/bot/services/system-prompt.js +179 -4
- package/dist/bot/services/system-prompt.js.map +1 -1
- package/dist/bot/services/token-billing.d.ts +23 -23
- package/dist/bot/services/token-billing.d.ts.map +1 -1
- package/dist/bot/services/token-billing.js +51 -36
- package/dist/bot/services/token-billing.js.map +1 -1
- package/dist/bot/services/types.d.ts +3 -1
- package/dist/bot/services/types.d.ts.map +1 -1
- package/dist/bot/services/typing-indicator.d.ts +8 -8
- package/dist/bot/services/typing-indicator.d.ts.map +1 -1
- package/dist/bot/services/typing-indicator.js +12 -10
- package/dist/bot/services/typing-indicator.js.map +1 -1
- package/dist/bot/services/workspace-refresh.d.ts +3 -3
- package/dist/bot/services/workspace-refresh.d.ts.map +1 -1
- package/dist/bot/services/workspace-refresh.js +23 -13
- package/dist/bot/services/workspace-refresh.js.map +1 -1
- package/dist/bot/tool-executor.d.ts +10 -6
- package/dist/bot/tool-executor.d.ts.map +1 -1
- package/dist/bot/tool-executor.js +12 -6
- package/dist/bot/tool-executor.js.map +1 -1
- package/dist/bot/workspace-overview.d.ts.map +1 -1
- package/dist/bot/workspace-overview.js +6 -3
- package/dist/bot/workspace-overview.js.map +1 -1
- package/dist/bot-config/activity-error.d.ts +47 -0
- package/dist/bot-config/activity-error.d.ts.map +1 -0
- package/dist/bot-config/activity-error.js +67 -0
- package/dist/bot-config/activity-error.js.map +1 -0
- package/dist/bot-config/context.d.ts +4 -4
- package/dist/bot-config/context.d.ts.map +1 -1
- package/dist/bot-config/context.js +18 -14
- package/dist/bot-config/context.js.map +1 -1
- package/dist/bot-config/events.d.ts +45 -0
- package/dist/bot-config/events.d.ts.map +1 -0
- package/dist/bot-config/events.js +51 -0
- package/dist/bot-config/events.js.map +1 -0
- package/dist/bot-config/index.d.ts +3 -0
- package/dist/bot-config/index.d.ts.map +1 -1
- package/dist/bot-config/index.js +8 -1
- package/dist/bot-config/index.js.map +1 -1
- package/dist/bot-config/loader.d.ts +3 -0
- package/dist/bot-config/loader.d.ts.map +1 -1
- package/dist/bot-config/loader.js +45 -20
- package/dist/bot-config/loader.js.map +1 -1
- package/dist/bot-config/persistence.js.map +1 -1
- package/dist/bot-config/reconciler.d.ts +11 -0
- package/dist/bot-config/reconciler.d.ts.map +1 -0
- package/dist/bot-config/reconciler.js +121 -0
- package/dist/bot-config/reconciler.js.map +1 -0
- package/dist/bot-config/state.d.ts.map +1 -1
- package/dist/bot-config/state.js.map +1 -1
- package/dist/bot-config/types.d.ts +32 -0
- package/dist/bot-config/types.d.ts.map +1 -1
- package/dist/bot-config/webhooks.d.ts.map +1 -1
- package/dist/bot-config/webhooks.js.map +1 -1
- package/dist/bot-config/workflow-installer.d.ts +37 -0
- package/dist/bot-config/workflow-installer.d.ts.map +1 -0
- package/dist/bot-config/workflow-installer.js +346 -0
- package/dist/bot-config/workflow-installer.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +54 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +23 -19
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +65 -27
- package/dist/config.js.map +1 -1
- package/dist/core.d.ts +6 -4
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +11 -16
- package/dist/core.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +7 -4
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/request-logger.d.ts +19 -19
- package/dist/lib/request-logger.d.ts.map +1 -1
- package/dist/lib/request-logger.js +19 -19
- package/dist/lib/request-logger.js.map +1 -1
- package/dist/mcp/UserContextCache.d.ts +28 -22
- package/dist/mcp/UserContextCache.d.ts.map +1 -1
- package/dist/mcp/UserContextCache.js +23 -23
- package/dist/mcp/UserContextCache.js.map +1 -1
- package/dist/mcp/auth.js.map +1 -1
- package/dist/mcp/hailer-clients.d.ts +5 -4
- package/dist/mcp/hailer-clients.d.ts.map +1 -1
- package/dist/mcp/hailer-clients.js +61 -27
- package/dist/mcp/hailer-clients.js.map +1 -1
- package/dist/mcp/hailer-rpc.d.ts +40 -0
- package/dist/mcp/hailer-rpc.d.ts.map +1 -0
- package/dist/mcp/hailer-rpc.js +43 -0
- package/dist/mcp/hailer-rpc.js.map +1 -0
- package/dist/mcp/publish-auth-injector.d.ts +22 -0
- package/dist/mcp/publish-auth-injector.d.ts.map +1 -0
- package/dist/mcp/publish-auth-injector.js +100 -0
- package/dist/mcp/publish-auth-injector.js.map +1 -0
- package/dist/mcp/session-store.d.ts +16 -16
- package/dist/mcp/session-store.d.ts.map +1 -1
- package/dist/mcp/session-store.js +16 -16
- package/dist/mcp/session-store.js.map +1 -1
- package/dist/mcp/tool-profiles.d.ts +69 -0
- package/dist/mcp/tool-profiles.d.ts.map +1 -0
- package/dist/mcp/tool-profiles.js +176 -0
- package/dist/mcp/tool-profiles.js.map +1 -0
- package/dist/mcp/tool-registry.d.ts +16 -0
- package/dist/mcp/tool-registry.d.ts.map +1 -1
- package/dist/mcp/tool-registry.js +91 -39
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/mcp/tools/activity.d.ts.map +1 -1
- package/dist/mcp/tools/activity.js +398 -198
- package/dist/mcp/tools/activity.js.map +1 -1
- package/dist/mcp/tools/aliases.d.ts +11 -0
- package/dist/mcp/tools/aliases.d.ts.map +1 -0
- package/dist/mcp/tools/aliases.js +176 -0
- package/dist/mcp/tools/aliases.js.map +1 -0
- package/dist/mcp/tools/app-core.d.ts +6 -8
- package/dist/mcp/tools/app-core.d.ts.map +1 -1
- package/dist/mcp/tools/app-core.js +355 -254
- package/dist/mcp/tools/app-core.js.map +1 -1
- package/dist/mcp/tools/app-marketplace.d.ts +8 -16
- package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
- package/dist/mcp/tools/app-marketplace.js +604 -930
- package/dist/mcp/tools/app-marketplace.js.map +1 -1
- package/dist/mcp/tools/app.d.ts +4 -7
- package/dist/mcp/tools/app.d.ts.map +1 -1
- package/dist/mcp/tools/app.js +4 -7
- package/dist/mcp/tools/app.js.map +1 -1
- package/dist/mcp/tools/bot-self.d.ts +21 -0
- package/dist/mcp/tools/bot-self.d.ts.map +1 -0
- package/dist/mcp/tools/bot-self.js +174 -0
- package/dist/mcp/tools/bot-self.js.map +1 -0
- package/dist/mcp/tools/calendar.d.ts +21 -0
- package/dist/mcp/tools/calendar.d.ts.map +1 -0
- package/dist/mcp/tools/calendar.js +741 -0
- package/dist/mcp/tools/calendar.js.map +1 -0
- package/dist/mcp/tools/company.d.ts.map +1 -1
- package/dist/mcp/tools/company.js +2 -1
- package/dist/mcp/tools/company.js.map +1 -1
- package/dist/mcp/tools/date.js.map +1 -1
- package/dist/mcp/tools/discussion.d.ts +23 -3
- package/dist/mcp/tools/discussion.d.ts.map +1 -1
- package/dist/mcp/tools/discussion.js +417 -534
- package/dist/mcp/tools/discussion.js.map +1 -1
- package/dist/mcp/tools/file.d.ts.map +1 -1
- package/dist/mcp/tools/file.js +18 -16
- package/dist/mcp/tools/file.js.map +1 -1
- package/dist/mcp/tools/index.js +4 -4
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/insight.d.ts +7 -5
- package/dist/mcp/tools/insight.d.ts.map +1 -1
- package/dist/mcp/tools/insight.js +419 -477
- package/dist/mcp/tools/insight.js.map +1 -1
- package/dist/mcp/tools/user.d.ts.map +1 -1
- package/dist/mcp/tools/user.js +15 -13
- package/dist/mcp/tools/user.js.map +1 -1
- package/dist/mcp/tools/workflow-permissions.d.ts +2 -4
- package/dist/mcp/tools/workflow-permissions.d.ts.map +1 -1
- package/dist/mcp/tools/workflow-permissions.js +88 -97
- package/dist/mcp/tools/workflow-permissions.js.map +1 -1
- package/dist/mcp/tools/workflow.d.ts +2 -7
- package/dist/mcp/tools/workflow.d.ts.map +1 -1
- package/dist/mcp/tools/workflow.js +817 -850
- package/dist/mcp/tools/workflow.js.map +1 -1
- package/dist/mcp/utils/api-errors.d.ts.map +1 -1
- package/dist/mcp/utils/api-errors.js +2 -2
- package/dist/mcp/utils/api-errors.js.map +1 -1
- package/dist/mcp/utils/data-transformers.d.ts.map +1 -1
- package/dist/mcp/utils/data-transformers.js +8 -4
- package/dist/mcp/utils/data-transformers.js.map +1 -1
- package/dist/mcp/utils/file-upload.d.ts.map +1 -1
- package/dist/mcp/utils/file-upload.js +1 -1
- package/dist/mcp/utils/file-upload.js.map +1 -1
- package/dist/mcp/utils/hailer-api-client.d.ts +81 -81
- package/dist/mcp/utils/hailer-api-client.d.ts.map +1 -1
- package/dist/mcp/utils/hailer-api-client.js +103 -101
- package/dist/mcp/utils/hailer-api-client.js.map +1 -1
- package/dist/mcp/utils/index.d.ts.map +1 -1
- package/dist/mcp/utils/index.js.map +1 -1
- package/dist/mcp/utils/logger.d.ts.map +1 -1
- package/dist/mcp/utils/logger.js.map +1 -1
- package/dist/mcp/utils/response-builder.d.ts.map +1 -1
- package/dist/mcp/utils/response-builder.js +8 -4
- package/dist/mcp/utils/response-builder.js.map +1 -1
- package/dist/mcp/utils/role-utils.d.ts.map +1 -1
- package/dist/mcp/utils/role-utils.js +6 -3
- package/dist/mcp/utils/role-utils.js.map +1 -1
- package/dist/mcp/utils/tool-helpers.d.ts.map +1 -1
- package/dist/mcp/utils/tool-helpers.js +2 -2
- package/dist/mcp/utils/tool-helpers.js.map +1 -1
- package/dist/mcp/utils/types.d.ts +1 -1
- package/dist/mcp/utils/types.d.ts.map +1 -1
- package/dist/mcp/utils/types.js.map +1 -1
- package/dist/mcp/webhook-handler.d.ts +43 -8
- package/dist/mcp/webhook-handler.d.ts.map +1 -1
- package/dist/mcp/webhook-handler.js +861 -116
- package/dist/mcp/webhook-handler.js.map +1 -1
- package/dist/mcp/workspace-admin-store.d.ts +49 -0
- package/dist/mcp/workspace-admin-store.d.ts.map +1 -0
- package/dist/mcp/workspace-admin-store.js +168 -0
- package/dist/mcp/workspace-admin-store.js.map +1 -0
- package/dist/mcp/workspace-cache.d.ts +2 -2
- package/dist/mcp/workspace-cache.d.ts.map +1 -1
- package/dist/mcp/workspace-cache.js +9 -5
- package/dist/mcp/workspace-cache.js.map +1 -1
- package/dist/mcp-server.d.ts +26 -11
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +360 -36
- package/dist/mcp-server.js.map +1 -1
- package/dist/plugins/vipunen/client.d.ts +41 -41
- package/dist/plugins/vipunen/client.d.ts.map +1 -1
- package/dist/plugins/vipunen/client.js +53 -48
- package/dist/plugins/vipunen/client.js.map +1 -1
- package/dist/plugins/vipunen/index.js.map +1 -1
- package/dist/plugins/vipunen/tools.d.ts.map +1 -1
- package/dist/plugins/vipunen/tools.js +6 -3
- package/dist/plugins/vipunen/tools.js.map +1 -1
- package/dist/public-chat/graduate.d.ts +29 -0
- package/dist/public-chat/graduate.d.ts.map +1 -0
- package/dist/public-chat/graduate.js +593 -0
- package/dist/public-chat/graduate.js.map +1 -0
- package/dist/public-chat/handler.d.ts +12 -0
- package/dist/public-chat/handler.d.ts.map +1 -0
- package/dist/public-chat/handler.js +179 -0
- package/dist/public-chat/handler.js.map +1 -0
- package/dist/public-chat/index.d.ts +16 -0
- package/dist/public-chat/index.d.ts.map +1 -0
- package/dist/public-chat/index.js +74 -0
- package/dist/public-chat/index.js.map +1 -0
- package/dist/public-chat/knowledge.d.ts +3 -0
- package/dist/public-chat/knowledge.d.ts.map +1 -0
- package/dist/public-chat/knowledge.js +1339 -0
- package/dist/public-chat/knowledge.js.map +1 -0
- package/dist/public-chat/rate-limit.d.ts +16 -0
- package/dist/public-chat/rate-limit.d.ts.map +1 -0
- package/dist/public-chat/rate-limit.js +51 -0
- package/dist/public-chat/rate-limit.js.map +1 -0
- package/dist/public-chat/session-store.d.ts +41 -0
- package/dist/public-chat/session-store.d.ts.map +1 -0
- package/dist/public-chat/session-store.js +95 -0
- package/dist/public-chat/session-store.js.map +1 -0
- package/dist/public-chat/studio-prewarm.d.ts +61 -0
- package/dist/public-chat/studio-prewarm.d.ts.map +1 -0
- package/dist/public-chat/studio-prewarm.js +162 -0
- package/dist/public-chat/studio-prewarm.js.map +1 -0
- package/dist/public-chat/system-prompt.d.ts +22 -0
- package/dist/public-chat/system-prompt.d.ts.map +1 -0
- package/dist/public-chat/system-prompt.js +428 -0
- package/dist/public-chat/system-prompt.js.map +1 -0
- package/package.json +14 -7
- package/scripts/build-public-chat-knowledge.py +101 -0
- package/scripts/probe-mcp-pricing.ts +52 -0
- package/scripts/smoke-public-chat-live.ts +148 -0
- package/scripts/smoke-public-chat.ts +110 -0
- package/.claude/CLAUDE.md +0 -126
- package/.claude/commands/audit-squad.md +0 -158
- package/.claude/commands/cleanup-squad.md +0 -98
- package/.claude/commands/config-squad.md +0 -106
- package/.claude/commands/crud-squad.md +0 -87
- package/.claude/commands/data-squad.md +0 -97
- package/.claude/commands/doc-squad.md +0 -65
- package/.claude/commands/help.md +0 -29
- package/.claude/commands/help:agents.md +0 -182
- package/.claude/commands/help:commands.md +0 -78
- package/.claude/commands/help:faq.md +0 -79
- package/.claude/commands/help:plugins.md +0 -50
- package/.claude/commands/help:skills.md +0 -87
- package/.claude/commands/help:tools.md +0 -75
- package/.claude/commands/hotfix-squad.md +0 -112
- package/.claude/commands/integration-squad.md +0 -82
- package/.claude/commands/janitor-squad.md +0 -167
- package/.claude/commands/onboard-squad.md +0 -130
- package/.claude/commands/swarm.md +0 -210
- package/.claude/commands/tool-builder.md +0 -39
- package/.claude/skills/publish-hailer-app/SKILL.md +0 -280
- package/dist/CLAUDE.md +0 -370
- package/dist/agents/bot-manager.d.ts +0 -48
- package/dist/agents/bot-manager.d.ts.map +0 -1
- package/dist/agents/bot-manager.js +0 -254
- package/dist/agents/bot-manager.js.map +0 -1
- package/dist/agents/bug-fixer/ai.d.ts +0 -80
- package/dist/agents/bug-fixer/ai.d.ts.map +0 -1
- package/dist/agents/bug-fixer/ai.js +0 -466
- package/dist/agents/bug-fixer/ai.js.map +0 -1
- package/dist/agents/bug-fixer/bot.d.ts +0 -92
- package/dist/agents/bug-fixer/bot.d.ts.map +0 -1
- package/dist/agents/bug-fixer/bot.js +0 -687
- package/dist/agents/bug-fixer/bot.js.map +0 -1
- package/dist/agents/bug-fixer/config.d.ts +0 -21
- package/dist/agents/bug-fixer/config.d.ts.map +0 -1
- package/dist/agents/bug-fixer/config.js +0 -218
- package/dist/agents/bug-fixer/config.js.map +0 -1
- package/dist/agents/bug-fixer/files.d.ts +0 -67
- package/dist/agents/bug-fixer/files.d.ts.map +0 -1
- package/dist/agents/bug-fixer/files.js +0 -386
- package/dist/agents/bug-fixer/files.js.map +0 -1
- package/dist/agents/bug-fixer/git.d.ts +0 -48
- package/dist/agents/bug-fixer/git.d.ts.map +0 -1
- package/dist/agents/bug-fixer/git.js +0 -298
- package/dist/agents/bug-fixer/git.js.map +0 -1
- package/dist/agents/bug-fixer/index.d.ts +0 -103
- package/dist/agents/bug-fixer/index.d.ts.map +0 -1
- package/dist/agents/bug-fixer/index.js +0 -262
- package/dist/agents/bug-fixer/index.js.map +0 -1
- package/dist/agents/bug-fixer/lsp.d.ts +0 -113
- package/dist/agents/bug-fixer/lsp.d.ts.map +0 -1
- package/dist/agents/bug-fixer/lsp.js +0 -485
- package/dist/agents/bug-fixer/lsp.js.map +0 -1
- package/dist/agents/bug-fixer/monitor.d.ts +0 -123
- package/dist/agents/bug-fixer/monitor.d.ts.map +0 -1
- package/dist/agents/bug-fixer/monitor.js +0 -629
- package/dist/agents/bug-fixer/monitor.js.map +0 -1
- package/dist/agents/bug-fixer/prompt.d.ts +0 -5
- package/dist/agents/bug-fixer/prompt.d.ts.map +0 -1
- package/dist/agents/bug-fixer/prompt.js +0 -94
- package/dist/agents/bug-fixer/prompt.js.map +0 -1
- package/dist/agents/bug-fixer/registries/pending-classification.d.ts +0 -28
- package/dist/agents/bug-fixer/registries/pending-classification.d.ts.map +0 -1
- package/dist/agents/bug-fixer/registries/pending-classification.js +0 -50
- package/dist/agents/bug-fixer/registries/pending-classification.js.map +0 -1
- package/dist/agents/bug-fixer/registries/pending-fix.d.ts +0 -33
- package/dist/agents/bug-fixer/registries/pending-fix.d.ts.map +0 -1
- package/dist/agents/bug-fixer/registries/pending-fix.js +0 -64
- package/dist/agents/bug-fixer/registries/pending-fix.js.map +0 -1
- package/dist/agents/bug-fixer/registries/pending.d.ts +0 -27
- package/dist/agents/bug-fixer/registries/pending.d.ts.map +0 -1
- package/dist/agents/bug-fixer/registries/pending.js +0 -49
- package/dist/agents/bug-fixer/registries/pending.js.map +0 -1
- package/dist/agents/bug-fixer/specialist-daemon.d.ts +0 -88
- package/dist/agents/bug-fixer/specialist-daemon.d.ts.map +0 -1
- package/dist/agents/bug-fixer/specialist-daemon.js +0 -431
- package/dist/agents/bug-fixer/specialist-daemon.js.map +0 -1
- package/dist/agents/bug-fixer/specialist.d.ts +0 -47
- package/dist/agents/bug-fixer/specialist.d.ts.map +0 -1
- package/dist/agents/bug-fixer/specialist.js +0 -327
- package/dist/agents/bug-fixer/specialist.js.map +0 -1
- package/dist/agents/bug-fixer/types.d.ts +0 -123
- package/dist/agents/bug-fixer/types.d.ts.map +0 -1
- package/dist/agents/bug-fixer/types.js +0 -9
- package/dist/agents/bug-fixer/types.js.map +0 -1
- package/dist/agents/factory.d.ts +0 -172
- package/dist/agents/factory.d.ts.map +0 -1
- package/dist/agents/factory.js +0 -706
- package/dist/agents/factory.js.map +0 -1
- package/dist/agents/hailer-expert/index.d.ts +0 -8
- package/dist/agents/hailer-expert/index.d.ts.map +0 -1
- package/dist/agents/hailer-expert/index.js +0 -14
- package/dist/agents/hailer-expert/index.js.map +0 -1
- package/dist/agents/hal/daemon.d.ts +0 -174
- package/dist/agents/hal/daemon.d.ts.map +0 -1
- package/dist/agents/hal/daemon.js +0 -1385
- package/dist/agents/hal/daemon.js.map +0 -1
- package/dist/agents/hal/definitions.d.ts +0 -42
- package/dist/agents/hal/definitions.d.ts.map +0 -1
- package/dist/agents/hal/definitions.js +0 -300
- package/dist/agents/hal/definitions.js.map +0 -1
- package/dist/agents/hal/index.d.ts +0 -3
- package/dist/agents/hal/index.d.ts.map +0 -1
- package/dist/agents/hal/index.js +0 -8
- package/dist/agents/hal/index.js.map +0 -1
- package/dist/agents/index.d.ts +0 -18
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js +0 -48
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/shared/base.d.ts +0 -253
- package/dist/agents/shared/base.d.ts.map +0 -1
- package/dist/agents/shared/base.js +0 -1122
- package/dist/agents/shared/base.js.map +0 -1
- package/dist/agents/shared/schemas/action-schema.d.ts +0 -62
- package/dist/agents/shared/schemas/action-schema.d.ts.map +0 -1
- package/dist/agents/shared/schemas/action-schema.js +0 -483
- package/dist/agents/shared/schemas/action-schema.js.map +0 -1
- package/dist/agents/shared/services/agent-registry.d.ts +0 -108
- package/dist/agents/shared/services/agent-registry.d.ts.map +0 -1
- package/dist/agents/shared/services/agent-registry.js +0 -469
- package/dist/agents/shared/services/agent-registry.js.map +0 -1
- package/dist/agents/shared/services/conversation-manager.d.ts +0 -57
- package/dist/agents/shared/services/conversation-manager.d.ts.map +0 -1
- package/dist/agents/shared/services/conversation-manager.js +0 -168
- package/dist/agents/shared/services/conversation-manager.js.map +0 -1
- package/dist/agents/shared/services/mcp-client.d.ts +0 -56
- package/dist/agents/shared/services/mcp-client.d.ts.map +0 -1
- package/dist/agents/shared/services/mcp-client.js +0 -124
- package/dist/agents/shared/services/mcp-client.js.map +0 -1
- package/dist/agents/shared/services/message-classifier.d.ts +0 -37
- package/dist/agents/shared/services/message-classifier.d.ts.map +0 -1
- package/dist/agents/shared/services/message-classifier.js +0 -203
- package/dist/agents/shared/services/message-classifier.js.map +0 -1
- package/dist/agents/shared/services/message-formatter.d.ts +0 -89
- package/dist/agents/shared/services/message-formatter.d.ts.map +0 -1
- package/dist/agents/shared/services/message-formatter.js +0 -390
- package/dist/agents/shared/services/message-formatter.js.map +0 -1
- package/dist/agents/shared/services/session-logger.d.ts +0 -162
- package/dist/agents/shared/services/session-logger.d.ts.map +0 -1
- package/dist/agents/shared/services/session-logger.js +0 -724
- package/dist/agents/shared/services/session-logger.js.map +0 -1
- package/dist/agents/shared/services/structured-output-executor.d.ts +0 -88
- package/dist/agents/shared/services/structured-output-executor.d.ts.map +0 -1
- package/dist/agents/shared/services/structured-output-executor.js +0 -296
- package/dist/agents/shared/services/structured-output-executor.js.map +0 -1
- package/dist/agents/shared/services/token-billing.d.ts +0 -72
- package/dist/agents/shared/services/token-billing.d.ts.map +0 -1
- package/dist/agents/shared/services/token-billing.js +0 -198
- package/dist/agents/shared/services/token-billing.js.map +0 -1
- package/dist/agents/shared/services/tool-executor.d.ts +0 -43
- package/dist/agents/shared/services/tool-executor.d.ts.map +0 -1
- package/dist/agents/shared/services/tool-executor.js +0 -175
- package/dist/agents/shared/services/tool-executor.js.map +0 -1
- package/dist/agents/shared/services/typing-indicator.d.ts +0 -24
- package/dist/agents/shared/services/typing-indicator.d.ts.map +0 -1
- package/dist/agents/shared/services/typing-indicator.js +0 -54
- package/dist/agents/shared/services/typing-indicator.js.map +0 -1
- package/dist/agents/shared/services/workspace-schema-cache.d.ts +0 -122
- package/dist/agents/shared/services/workspace-schema-cache.d.ts.map +0 -1
- package/dist/agents/shared/services/workspace-schema-cache.js +0 -507
- package/dist/agents/shared/services/workspace-schema-cache.js.map +0 -1
- package/dist/agents/shared/specialist.d.ts +0 -91
- package/dist/agents/shared/specialist.d.ts.map +0 -1
- package/dist/agents/shared/specialist.js +0 -399
- package/dist/agents/shared/specialist.js.map +0 -1
- package/dist/agents/shared/tool-schema-loader.d.ts +0 -65
- package/dist/agents/shared/tool-schema-loader.d.ts.map +0 -1
- package/dist/agents/shared/tool-schema-loader.js +0 -238
- package/dist/agents/shared/tool-schema-loader.js.map +0 -1
- package/dist/agents/shared/types.d.ts +0 -190
- package/dist/agents/shared/types.d.ts.map +0 -1
- package/dist/agents/shared/types.js +0 -13
- package/dist/agents/shared/types.js.map +0 -1
- package/dist/bot/bot-config.d.ts +0 -37
- package/dist/bot/bot-config.d.ts.map +0 -1
- package/dist/bot/bot-config.js +0 -219
- package/dist/bot/bot-config.js.map +0 -1
- package/dist/bot/services/__tests__/permission-guard.test.d.ts +0 -2
- package/dist/bot/services/__tests__/permission-guard.test.d.ts.map +0 -1
- package/dist/bot/services/__tests__/permission-guard.test.js +0 -357
- package/dist/bot/services/__tests__/permission-guard.test.js.map +0 -1
- package/dist/bot/services/session-logger.d.ts +0 -162
- package/dist/bot/services/session-logger.d.ts.map +0 -1
- package/dist/bot/services/session-logger.js +0 -724
- package/dist/bot/services/session-logger.js.map +0 -1
- package/dist/bot/services/workspace-schema-cache.d.ts +0 -122
- package/dist/bot/services/workspace-schema-cache.d.ts.map +0 -1
- package/dist/bot/services/workspace-schema-cache.js +0 -506
- package/dist/bot/services/workspace-schema-cache.js.map +0 -1
- package/dist/bot-config/tools.d.ts +0 -28
- package/dist/bot-config/tools.d.ts.map +0 -1
- package/dist/bot-config/tools.js +0 -279
- package/dist/bot-config/tools.js.map +0 -1
- package/dist/client/agents/base.d.ts +0 -207
- package/dist/client/agents/base.d.ts.map +0 -1
- package/dist/client/agents/base.js +0 -744
- package/dist/client/agents/base.js.map +0 -1
- package/dist/client/agents/definitions.d.ts +0 -53
- package/dist/client/agents/definitions.d.ts.map +0 -1
- package/dist/client/agents/definitions.js +0 -263
- package/dist/client/agents/definitions.js.map +0 -1
- package/dist/client/agents/orchestrator.d.ts +0 -141
- package/dist/client/agents/orchestrator.d.ts.map +0 -1
- package/dist/client/agents/orchestrator.js +0 -1062
- package/dist/client/agents/orchestrator.js.map +0 -1
- package/dist/client/agents/specialist.d.ts +0 -86
- package/dist/client/agents/specialist.d.ts.map +0 -1
- package/dist/client/agents/specialist.js +0 -340
- package/dist/client/agents/specialist.js.map +0 -1
- package/dist/client/bot-entrypoint.d.ts +0 -7
- package/dist/client/bot-entrypoint.d.ts.map +0 -1
- package/dist/client/bot-entrypoint.js +0 -103
- package/dist/client/bot-entrypoint.js.map +0 -1
- package/dist/client/bot-manager.d.ts +0 -44
- package/dist/client/bot-manager.d.ts.map +0 -1
- package/dist/client/bot-manager.js +0 -173
- package/dist/client/bot-manager.js.map +0 -1
- package/dist/client/bot-runner.d.ts +0 -35
- package/dist/client/bot-runner.d.ts.map +0 -1
- package/dist/client/bot-runner.js +0 -188
- package/dist/client/bot-runner.js.map +0 -1
- package/dist/client/chat-agent-daemon.d.ts +0 -464
- package/dist/client/chat-agent-daemon.d.ts.map +0 -1
- package/dist/client/chat-agent-daemon.js +0 -1774
- package/dist/client/chat-agent-daemon.js.map +0 -1
- package/dist/client/daemon-factory.d.ts +0 -106
- package/dist/client/daemon-factory.d.ts.map +0 -1
- package/dist/client/daemon-factory.js +0 -301
- package/dist/client/daemon-factory.js.map +0 -1
- package/dist/client/factory.d.ts +0 -111
- package/dist/client/factory.d.ts.map +0 -1
- package/dist/client/factory.js +0 -314
- package/dist/client/factory.js.map +0 -1
- package/dist/client/index.d.ts +0 -17
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -38
- package/dist/client/index.js.map +0 -1
- package/dist/client/multi-bot-manager.d.ts +0 -42
- package/dist/client/multi-bot-manager.d.ts.map +0 -1
- package/dist/client/multi-bot-manager.js +0 -161
- package/dist/client/multi-bot-manager.js.map +0 -1
- package/dist/client/orchestrator-daemon.d.ts +0 -87
- package/dist/client/orchestrator-daemon.d.ts.map +0 -1
- package/dist/client/orchestrator-daemon.js +0 -444
- package/dist/client/orchestrator-daemon.js.map +0 -1
- package/dist/client/server.d.ts +0 -8
- package/dist/client/server.d.ts.map +0 -1
- package/dist/client/server.js +0 -251
- package/dist/client/server.js.map +0 -1
- package/dist/client/services/agent-registry.d.ts +0 -108
- package/dist/client/services/agent-registry.d.ts.map +0 -1
- package/dist/client/services/agent-registry.js +0 -630
- package/dist/client/services/agent-registry.js.map +0 -1
- package/dist/client/services/conversation-manager.d.ts +0 -50
- package/dist/client/services/conversation-manager.d.ts.map +0 -1
- package/dist/client/services/conversation-manager.js +0 -136
- package/dist/client/services/conversation-manager.js.map +0 -1
- package/dist/client/services/mcp-client.d.ts +0 -48
- package/dist/client/services/mcp-client.d.ts.map +0 -1
- package/dist/client/services/mcp-client.js +0 -105
- package/dist/client/services/mcp-client.js.map +0 -1
- package/dist/client/services/message-classifier.d.ts +0 -37
- package/dist/client/services/message-classifier.d.ts.map +0 -1
- package/dist/client/services/message-classifier.js +0 -187
- package/dist/client/services/message-classifier.js.map +0 -1
- package/dist/client/services/message-formatter.d.ts +0 -84
- package/dist/client/services/message-formatter.d.ts.map +0 -1
- package/dist/client/services/message-formatter.js +0 -353
- package/dist/client/services/message-formatter.js.map +0 -1
- package/dist/client/services/session-logger.d.ts +0 -106
- package/dist/client/services/session-logger.d.ts.map +0 -1
- package/dist/client/services/session-logger.js +0 -446
- package/dist/client/services/session-logger.js.map +0 -1
- package/dist/client/services/tool-executor.d.ts +0 -41
- package/dist/client/services/tool-executor.d.ts.map +0 -1
- package/dist/client/services/tool-executor.js +0 -169
- package/dist/client/services/tool-executor.js.map +0 -1
- package/dist/client/services/workspace-schema-cache.d.ts +0 -149
- package/dist/client/services/workspace-schema-cache.d.ts.map +0 -1
- package/dist/client/services/workspace-schema-cache.js +0 -732
- package/dist/client/services/workspace-schema-cache.js.map +0 -1
- package/dist/client/specialist-daemon.d.ts +0 -77
- package/dist/client/specialist-daemon.d.ts.map +0 -1
- package/dist/client/specialist-daemon.js +0 -197
- package/dist/client/specialist-daemon.js.map +0 -1
- package/dist/client/specialists.d.ts +0 -53
- package/dist/client/specialists.d.ts.map +0 -1
- package/dist/client/specialists.js +0 -178
- package/dist/client/specialists.js.map +0 -1
- package/dist/client/tool-schema-loader.d.ts +0 -62
- package/dist/client/tool-schema-loader.d.ts.map +0 -1
- package/dist/client/tool-schema-loader.js +0 -232
- package/dist/client/tool-schema-loader.js.map +0 -1
- package/dist/client/types.d.ts +0 -327
- package/dist/client/types.d.ts.map +0 -1
- package/dist/client/types.js +0 -121
- package/dist/client/types.js.map +0 -1
- package/dist/commands/seed-config.d.ts +0 -9
- package/dist/commands/seed-config.d.ts.map +0 -1
- package/dist/commands/seed-config.js +0 -377
- package/dist/commands/seed-config.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -11
- package/dist/commands/setup.d.ts.map +0 -1
- package/dist/commands/setup.js +0 -320
- package/dist/commands/setup.js.map +0 -1
- package/dist/lib/discussion-lock.d.ts +0 -42
- package/dist/lib/discussion-lock.d.ts.map +0 -1
- package/dist/lib/discussion-lock.js +0 -110
- package/dist/lib/discussion-lock.js.map +0 -1
- package/dist/mcp/signal-handler.d.ts +0 -82
- package/dist/mcp/signal-handler.d.ts.map +0 -1
- package/dist/mcp/signal-handler.js +0 -406
- package/dist/mcp/signal-handler.js.map +0 -1
- package/dist/mcp/tools/__tests__/discussion-forward.test.d.ts +0 -2
- package/dist/mcp/tools/__tests__/discussion-forward.test.d.ts.map +0 -1
- package/dist/mcp/tools/__tests__/discussion-forward.test.js +0 -218
- package/dist/mcp/tools/__tests__/discussion-forward.test.js.map +0 -1
- package/dist/mcp/tools/app-member.d.ts +0 -14
- package/dist/mcp/tools/app-member.d.ts.map +0 -1
- package/dist/mcp/tools/app-member.js +0 -195
- package/dist/mcp/tools/app-member.js.map +0 -1
- package/dist/mcp/tools/app-scaffold.d.ts +0 -14
- package/dist/mcp/tools/app-scaffold.d.ts.map +0 -1
- package/dist/mcp/tools/app-scaffold.js +0 -581
- package/dist/mcp/tools/app-scaffold.js.map +0 -1
- package/dist/mcp/tools/bot-config/constants.d.ts +0 -23
- package/dist/mcp/tools/bot-config/constants.d.ts.map +0 -1
- package/dist/mcp/tools/bot-config/constants.js +0 -94
- package/dist/mcp/tools/bot-config/constants.js.map +0 -1
- package/dist/mcp/tools/bot-config/core.d.ts +0 -253
- package/dist/mcp/tools/bot-config/core.d.ts.map +0 -1
- package/dist/mcp/tools/bot-config/core.js +0 -2456
- package/dist/mcp/tools/bot-config/core.js.map +0 -1
- package/dist/mcp/tools/bot-config/index.d.ts +0 -10
- package/dist/mcp/tools/bot-config/index.d.ts.map +0 -1
- package/dist/mcp/tools/bot-config/index.js +0 -59
- package/dist/mcp/tools/bot-config/index.js.map +0 -1
- package/dist/mcp/tools/bot-config/tools.d.ts +0 -7
- package/dist/mcp/tools/bot-config/tools.d.ts.map +0 -1
- package/dist/mcp/tools/bot-config/tools.js +0 -15
- package/dist/mcp/tools/bot-config/tools.js.map +0 -1
- package/dist/mcp/tools/bot-config/types.d.ts +0 -50
- package/dist/mcp/tools/bot-config/types.d.ts.map +0 -1
- package/dist/mcp/tools/bot-config/types.js +0 -6
- package/dist/mcp/tools/bot-config/types.js.map +0 -1
- package/dist/mcp/tools/bug-fixer-tools.d.ts +0 -45
- package/dist/mcp/tools/bug-fixer-tools.d.ts.map +0 -1
- package/dist/mcp/tools/bug-fixer-tools.js +0 -1096
- package/dist/mcp/tools/bug-fixer-tools.js.map +0 -1
- package/dist/mcp/tools/document.d.ts +0 -11
- package/dist/mcp/tools/document.d.ts.map +0 -1
- package/dist/mcp/tools/document.js +0 -741
- package/dist/mcp/tools/document.js.map +0 -1
- package/dist/mcp/tools/investigate.d.ts +0 -9
- package/dist/mcp/tools/investigate.d.ts.map +0 -1
- package/dist/mcp/tools/investigate.js +0 -254
- package/dist/mcp/tools/investigate.js.map +0 -1
- package/dist/mcp/utils/pagination.d.ts +0 -40
- package/dist/mcp/utils/pagination.d.ts.map +0 -1
- package/dist/mcp/utils/pagination.js +0 -55
- package/dist/mcp/utils/pagination.js.map +0 -1
- package/dist/modules/bug-reports/bug-config.d.ts +0 -25
- package/dist/modules/bug-reports/bug-config.d.ts.map +0 -1
- package/dist/modules/bug-reports/bug-config.js +0 -187
- package/dist/modules/bug-reports/bug-config.js.map +0 -1
- package/dist/modules/bug-reports/bug-monitor.d.ts +0 -108
- package/dist/modules/bug-reports/bug-monitor.d.ts.map +0 -1
- package/dist/modules/bug-reports/bug-monitor.js +0 -510
- package/dist/modules/bug-reports/bug-monitor.js.map +0 -1
- package/dist/modules/bug-reports/giuseppe-agent.d.ts +0 -58
- package/dist/modules/bug-reports/giuseppe-agent.d.ts.map +0 -1
- package/dist/modules/bug-reports/giuseppe-agent.js +0 -467
- package/dist/modules/bug-reports/giuseppe-agent.js.map +0 -1
- package/dist/modules/bug-reports/giuseppe-ai.d.ts +0 -83
- package/dist/modules/bug-reports/giuseppe-ai.d.ts.map +0 -1
- package/dist/modules/bug-reports/giuseppe-ai.js +0 -466
- package/dist/modules/bug-reports/giuseppe-ai.js.map +0 -1
- package/dist/modules/bug-reports/giuseppe-bot.d.ts +0 -110
- package/dist/modules/bug-reports/giuseppe-bot.d.ts.map +0 -1
- package/dist/modules/bug-reports/giuseppe-bot.js +0 -804
- package/dist/modules/bug-reports/giuseppe-bot.js.map +0 -1
- package/dist/modules/bug-reports/giuseppe-daemon.d.ts +0 -80
- package/dist/modules/bug-reports/giuseppe-daemon.d.ts.map +0 -1
- package/dist/modules/bug-reports/giuseppe-daemon.js +0 -617
- package/dist/modules/bug-reports/giuseppe-daemon.js.map +0 -1
- package/dist/modules/bug-reports/giuseppe-files.d.ts +0 -64
- package/dist/modules/bug-reports/giuseppe-files.d.ts.map +0 -1
- package/dist/modules/bug-reports/giuseppe-files.js +0 -375
- package/dist/modules/bug-reports/giuseppe-files.js.map +0 -1
- package/dist/modules/bug-reports/giuseppe-git.d.ts +0 -48
- package/dist/modules/bug-reports/giuseppe-git.d.ts.map +0 -1
- package/dist/modules/bug-reports/giuseppe-git.js +0 -298
- package/dist/modules/bug-reports/giuseppe-git.js.map +0 -1
- package/dist/modules/bug-reports/giuseppe-lsp.d.ts +0 -113
- package/dist/modules/bug-reports/giuseppe-lsp.d.ts.map +0 -1
- package/dist/modules/bug-reports/giuseppe-lsp.js +0 -485
- package/dist/modules/bug-reports/giuseppe-lsp.js.map +0 -1
- package/dist/modules/bug-reports/giuseppe-prompt.d.ts +0 -5
- package/dist/modules/bug-reports/giuseppe-prompt.d.ts.map +0 -1
- package/dist/modules/bug-reports/giuseppe-prompt.js +0 -94
- package/dist/modules/bug-reports/giuseppe-prompt.js.map +0 -1
- package/dist/modules/bug-reports/index.d.ts +0 -77
- package/dist/modules/bug-reports/index.d.ts.map +0 -1
- package/dist/modules/bug-reports/index.js +0 -215
- package/dist/modules/bug-reports/index.js.map +0 -1
- package/dist/modules/bug-reports/pending-classification-registry.d.ts +0 -28
- package/dist/modules/bug-reports/pending-classification-registry.d.ts.map +0 -1
- package/dist/modules/bug-reports/pending-classification-registry.js +0 -50
- package/dist/modules/bug-reports/pending-classification-registry.js.map +0 -1
- package/dist/modules/bug-reports/pending-fix-registry.d.ts +0 -30
- package/dist/modules/bug-reports/pending-fix-registry.d.ts.map +0 -1
- package/dist/modules/bug-reports/pending-fix-registry.js +0 -42
- package/dist/modules/bug-reports/pending-fix-registry.js.map +0 -1
- package/dist/modules/bug-reports/pending-registry.d.ts +0 -27
- package/dist/modules/bug-reports/pending-registry.d.ts.map +0 -1
- package/dist/modules/bug-reports/pending-registry.js +0 -49
- package/dist/modules/bug-reports/pending-registry.js.map +0 -1
- package/dist/modules/bug-reports/types.d.ts +0 -123
- package/dist/modules/bug-reports/types.d.ts.map +0 -1
- package/dist/modules/bug-reports/types.js +0 -9
- package/dist/modules/bug-reports/types.js.map +0 -1
- package/dist/plugins/bug-fixer/index.d.ts +0 -2
- package/dist/plugins/bug-fixer/index.d.ts.map +0 -1
- package/dist/plugins/bug-fixer/index.js +0 -18
- package/dist/plugins/bug-fixer/index.js.map +0 -1
- package/dist/plugins/bug-fixer/tools.d.ts +0 -45
- package/dist/plugins/bug-fixer/tools.d.ts.map +0 -1
- package/dist/plugins/bug-fixer/tools.js +0 -1096
- package/dist/plugins/bug-fixer/tools.js.map +0 -1
- package/dist/plugins/vipunen/__tests__/tools.test.d.ts +0 -10
- package/dist/plugins/vipunen/__tests__/tools.test.d.ts.map +0 -1
- package/dist/plugins/vipunen/__tests__/tools.test.js +0 -646
- package/dist/plugins/vipunen/__tests__/tools.test.js.map +0 -1
- package/dist/routes/agents.d.ts +0 -44
- package/dist/routes/agents.d.ts.map +0 -1
- package/dist/routes/agents.js +0 -311
- package/dist/routes/agents.js.map +0 -1
- package/dist/services/agent-credential-store.d.ts +0 -73
- package/dist/services/agent-credential-store.d.ts.map +0 -1
- package/dist/services/agent-credential-store.js +0 -212
- package/dist/services/agent-credential-store.js.map +0 -1
- package/dist/stdio-server.d.ts +0 -14
- package/dist/stdio-server.d.ts.map +0 -1
- package/dist/stdio-server.js +0 -101
- package/dist/stdio-server.js.map +0 -1
- package/dist/workspace/context.d.ts +0 -148
- package/dist/workspace/context.d.ts.map +0 -1
- package/dist/workspace/context.js +0 -339
- package/dist/workspace/context.js.map +0 -1
- package/dist/workspace/credentials.d.ts +0 -55
- package/dist/workspace/credentials.d.ts.map +0 -1
- package/dist/workspace/credentials.js +0 -239
- package/dist/workspace/credentials.js.map +0 -1
- package/dist/workspace/index.d.ts +0 -21
- package/dist/workspace/index.d.ts.map +0 -1
- package/dist/workspace/index.js +0 -45
- package/dist/workspace/index.js.map +0 -1
- package/dist/workspace/loader.d.ts +0 -27
- package/dist/workspace/loader.d.ts.map +0 -1
- package/dist/workspace/loader.js +0 -222
- package/dist/workspace/loader.js.map +0 -1
- package/dist/workspace/schema.d.ts +0 -37
- package/dist/workspace/schema.d.ts.map +0 -1
- package/dist/workspace/schema.js +0 -192
- package/dist/workspace/schema.js.map +0 -1
|
@@ -0,0 +1,1339 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// AUTO-GENERATED from prepared-docs/HailerPublic/ — do not edit by hand.
|
|
3
|
+
// Regenerate via: python3 scripts/build-public-chat-knowledge.py
|
|
4
|
+
//
|
|
5
|
+
// Source chunks: 62
|
|
6
|
+
// Scopes: developer, legal, product
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.HAILER_KNOWLEDGE_BYTES = exports.HAILER_KNOWLEDGE_CORPUS = void 0;
|
|
9
|
+
exports.HAILER_KNOWLEDGE_CORPUS = `# Hailer Knowledge Base
|
|
10
|
+
|
|
11
|
+
This is the curated, public-safe knowledge corpus that the public chatbot uses to answer questions about Hailer. It covers product concepts, the user interface, the MCP server, app development, and getting started.
|
|
12
|
+
|
|
13
|
+
## Developer & MCP
|
|
14
|
+
|
|
15
|
+
### Apps & Marketplace
|
|
16
|
+
|
|
17
|
+
#### What Hailer apps are and how they relate to the MCP server
|
|
18
|
+
|
|
19
|
+
Hailer apps are custom web applications that run inside Hailer workspaces. They are full frontend applications — React, Svelte, vanilla JS — that use Hailer's API for data and are embedded inside the Hailer UI.
|
|
20
|
+
|
|
21
|
+
The Hailer MCP server itself does not contain apps. It provides the tools to create, manage, and publish them. Each app lives in its own project directory.
|
|
22
|
+
|
|
23
|
+
The lifecycle is: Scaffold (about a minute) → Develop (locally) → Publish (to CDN) → Share (control access).
|
|
24
|
+
|
|
25
|
+
This lifecycle is script-driven everywhere: scaffold with npx @hailer/create-app, develop with cd app && npm run dev, publish with cd app && npm run publish-production (add -- --market for marketplace versions). In an SDK project, register/share by editing workspace/apps.ts then running npx hailer-sdk ws-config apps push --force; otherwise share via the manage_app MCP tool. There are no MCP tools for scaffolding or publishing — the scripts are the only path.
|
|
26
|
+
|
|
27
|
+
#### Scaffolding a new Hailer app with npx @hailer/create-app
|
|
28
|
+
|
|
29
|
+
Scaffold a new app in one step with npx @hailer/create-app. Ask Claude Code something like 'Create a task dashboard app' and the CLI will:
|
|
30
|
+
|
|
31
|
+
1. Create a Vite + React-TS project (or another template).
|
|
32
|
+
2. Install @hailer/app-sdk and Chakra UI.
|
|
33
|
+
3. Generate an app icon (gradient SVG).
|
|
34
|
+
4. Create a dev app entry in Hailer pointing to localhost:3000.
|
|
35
|
+
5. Configure CORS in vite.config.ts.
|
|
36
|
+
6. Share the app with the workspace.
|
|
37
|
+
7. Create a manifest.json with the assigned appId.
|
|
38
|
+
8. Start the dev server.
|
|
39
|
+
|
|
40
|
+
The scaffolded structure:
|
|
41
|
+
\`\`\`
|
|
42
|
+
my-app/
|
|
43
|
+
├── public/manifest.json # App metadata (appId, name, version)
|
|
44
|
+
├── src/
|
|
45
|
+
│ ├── main.tsx # React entry point
|
|
46
|
+
│ ├── App.tsx # Main component
|
|
47
|
+
│ └── ...
|
|
48
|
+
├── package.json
|
|
49
|
+
├── vite.config.ts # Build config with CORS
|
|
50
|
+
└── tsconfig.json
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
The key rule: always scaffold fresh with npx @hailer/create-app to create new apps. Never copy an existing app — the scaffold tool handles app registration, icon generation, CORS config, manifest creation, and sharing in one step.
|
|
54
|
+
|
|
55
|
+
#### Available app templates
|
|
56
|
+
|
|
57
|
+
The scaffold (npx @hailer/create-app) supports multiple frontend stacks. Pick the one that matches the team's preferences:
|
|
58
|
+
|
|
59
|
+
- react-ts (default) — React + TypeScript + Chakra UI.
|
|
60
|
+
- react — React + JavaScript.
|
|
61
|
+
- preact-ts — Preact + TypeScript.
|
|
62
|
+
- preact — Preact + JavaScript.
|
|
63
|
+
- svelte-ts — Svelte + TypeScript.
|
|
64
|
+
- svelte — Svelte + JavaScript.
|
|
65
|
+
- vanilla-ts — Vanilla + TypeScript.
|
|
66
|
+
- vanilla — Vanilla JavaScript.
|
|
67
|
+
|
|
68
|
+
React-TS is the most heavily documented and is what the design-system skill targets. Other templates work but get less first-party support around components, hooks, and example code.
|
|
69
|
+
|
|
70
|
+
#### Developing a Hailer app locally and connecting to Hailer data
|
|
71
|
+
|
|
72
|
+
After scaffolding, run the app locally:
|
|
73
|
+
|
|
74
|
+
\`\`\`bash
|
|
75
|
+
cd my-app
|
|
76
|
+
npm run dev # starts Vite on port 3000
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
The dev app entry inside Hailer points at http://localhost:3000, so changes appear live in the workspace.
|
|
80
|
+
|
|
81
|
+
Apps use the Hailer API client to fetch and modify data through the @hailer/app-sdk hook:
|
|
82
|
+
|
|
83
|
+
\`\`\`typescript
|
|
84
|
+
import { useHailer } from '@hailer/app-sdk';
|
|
85
|
+
|
|
86
|
+
function TaskList() {
|
|
87
|
+
const hailer = useHailer();
|
|
88
|
+
const [tasks, setTasks] = useState([]);
|
|
89
|
+
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
const fetch = async () => {
|
|
92
|
+
const result = await hailer.request('v3.activity.list', [
|
|
93
|
+
workflowId,
|
|
94
|
+
{ phase: activePhaseId, limit: 50 },
|
|
95
|
+
]);
|
|
96
|
+
setTasks(result.activities);
|
|
97
|
+
};
|
|
98
|
+
fetch();
|
|
99
|
+
}, []);
|
|
100
|
+
|
|
101
|
+
return <TaskTable data={tasks} />;
|
|
102
|
+
}
|
|
103
|
+
\`\`\`
|
|
104
|
+
|
|
105
|
+
The default React-TS template also includes Hailer's Chakra UI v2 theme: brand colors, a custom icon set, pre-configured components, responsive grid patterns, and consistent typography. See the hailer-design-system skill for the full reference.
|
|
106
|
+
|
|
107
|
+
#### Publishing a Hailer app with npm run publish-production
|
|
108
|
+
|
|
109
|
+
When an app is ready for production, run cd app && npm run publish-production — the only publishing path. It handles:
|
|
110
|
+
|
|
111
|
+
1. Runs npm run build (Vite production build).
|
|
112
|
+
2. Packages dist/ together with manifest.json as a tar archive.
|
|
113
|
+
3. Uploads the tar to the Hailer CDN.
|
|
114
|
+
4. Creates a published app entry with an auto-generated URL.
|
|
115
|
+
5. Updates the app's URL from localhost to the production CDN URL.
|
|
116
|
+
|
|
117
|
+
App entries inside Hailer come in two shapes:
|
|
118
|
+
|
|
119
|
+
Development app:
|
|
120
|
+
\`\`\`json
|
|
121
|
+
{ "name": "Task Dashboard", "description": "View and manage tasks", "url": "http://localhost:3000", "image": "<fileId>", "config": {} }
|
|
122
|
+
\`\`\`
|
|
123
|
+
|
|
124
|
+
Published app:
|
|
125
|
+
\`\`\`json
|
|
126
|
+
{ "name": "Task Dashboard", "description": "View and manage tasks", "url": "", "image": "<fileId>" }
|
|
127
|
+
\`\`\`
|
|
128
|
+
A published app uses an empty url, which causes Hailer to serve from the auto-generated CDN URL.
|
|
129
|
+
|
|
130
|
+
#### Sharing apps with workspace members, teams, users, and groups
|
|
131
|
+
|
|
132
|
+
Once an app is scaffolded or published, control who can use it with the add_app_member MCP tool. Recipients are addressed by typed identifier:
|
|
133
|
+
|
|
134
|
+
- Workspace-wide: pass network_<workspaceId>.
|
|
135
|
+
- Team: pass team_<teamId>.
|
|
136
|
+
- User: pass user_<userId>.
|
|
137
|
+
- Group: pass group_<groupId>.
|
|
138
|
+
|
|
139
|
+
This matches Hailer's broader sharing model — the same id-prefix convention is used wherever you grant access. By scaffold time, the tool has already shared the dev app with the current workspace, so no manual sharing is needed for the developer's own use.
|
|
140
|
+
|
|
141
|
+
#### Marketplace: templates and apps you can distribute across workspaces
|
|
142
|
+
|
|
143
|
+
The marketplace lets you distribute apps and templates across workspaces.
|
|
144
|
+
|
|
145
|
+
Templates are reusable workspace configurations — workflow definitions, field setups, and optionally apps. Marketplace apps are the same idea for apps. Three tools cover both:
|
|
146
|
+
- browse_marketplace — list products, or get one product's details (includeManifest: true adds versions + workflows).
|
|
147
|
+
- install_marketplace — deploy a template or app product to a workspace.
|
|
148
|
+
- publish_marketplace — publish a template (type: 'template') or app (type: 'app') to the marketplace.
|
|
149
|
+
|
|
150
|
+
Marketplace submissions must include a complete metadata bundle (title, description, version, version description, publisher, icon file ID); a publish-template guard hook enforces this before anything is sent.
|
|
151
|
+
|
|
152
|
+
#### Marketplace publishing requirements and recommended skills
|
|
153
|
+
|
|
154
|
+
Marketplace submissions must include the following metadata. The publish-template guard hook validates each field before submission:
|
|
155
|
+
|
|
156
|
+
- title — required, max 64 characters.
|
|
157
|
+
- description — required, max 4096 characters.
|
|
158
|
+
- version — semantic version (for example, '1.0.0').
|
|
159
|
+
- versionDescription — release notes.
|
|
160
|
+
- publisher — company or person name.
|
|
161
|
+
- iconFileId — 24-character file ID for the app icon.
|
|
162
|
+
|
|
163
|
+
When building apps, sub-agents should load the relevant skills for context:
|
|
164
|
+
|
|
165
|
+
- hailer-app-builder — React patterns, @hailer/app-sdk hooks, component patterns.
|
|
166
|
+
- hailer-design-system — Chakra UI theme, colors, icons, layout, responsive design.
|
|
167
|
+
- hailer-apps-pictures — fetching and displaying images stored in Hailer.
|
|
168
|
+
- publish-hailer-app — full publishing workflow and manifest validation.
|
|
169
|
+
- create-and-publish-app — CLI-based scaffold and publish via the @hailer/create-app npm package.
|
|
170
|
+
|
|
171
|
+
### Getting Started
|
|
172
|
+
|
|
173
|
+
#### Installing and running @hailer/mcp
|
|
174
|
+
|
|
175
|
+
Hailer MCP is published on the public npm registry as @hailer/mcp. There are two common ways to use it:
|
|
176
|
+
|
|
177
|
+
Install and run as a global CLI:
|
|
178
|
+
\`\`\`bash
|
|
179
|
+
npm install @hailer/mcp
|
|
180
|
+
npx @hailer/mcp
|
|
181
|
+
\`\`\`
|
|
182
|
+
|
|
183
|
+
Or run directly with npx without a global install:
|
|
184
|
+
\`\`\`bash
|
|
185
|
+
npx @hailer/mcp --port 3030
|
|
186
|
+
\`\`\`
|
|
187
|
+
|
|
188
|
+
By default the server starts on http://localhost:3030. The default port can be overridden with the PORT environment variable or the --port flag.
|
|
189
|
+
|
|
190
|
+
Before the server can talk to Hailer it needs at least one configured account. Provide a CLIENT_CONFIGS environment variable that maps an API key (used by your MCP client) to a Hailer account (used to call Hailer). One CLIENT_CONFIGS entry covers a single account; you can list more than one to support multiple accounts on the same server.
|
|
191
|
+
|
|
192
|
+
#### Connecting Hailer MCP to Claude Code
|
|
193
|
+
|
|
194
|
+
Once the server is running locally on http://localhost:3030 you can attach it to Claude Code with the claude CLI:
|
|
195
|
+
|
|
196
|
+
\`\`\`bash
|
|
197
|
+
claude mcp add hailer npx mcp-remote "http://localhost:3030/api/mcp?apiKey=your-api-key"
|
|
198
|
+
\`\`\`
|
|
199
|
+
|
|
200
|
+
The apiKey query parameter must match a key you defined in CLIENT_CONFIGS — the server uses it to look up which Hailer account to authenticate as.
|
|
201
|
+
|
|
202
|
+
After this, Claude Code will see the Hailer MCP tools (activity, workflow, discussion, insight, app management) the next time it lists tools. Common tools include list_activities, create_activity, describe_workflows, add_discussion_message, and the SQL-style insight tools (run_insight, save_insight).
|
|
203
|
+
|
|
204
|
+
If you use Claude Desktop instead of Claude Code, prefer the OAuth flow at /api/cowork/oauth/* — it logs you into your real Hailer account rather than reusing a service-account key.
|
|
205
|
+
|
|
206
|
+
#### Tools you get out of the box
|
|
207
|
+
|
|
208
|
+
After connecting Hailer MCP to your AI client, the available tools are grouped by domain:
|
|
209
|
+
|
|
210
|
+
- Activity tools — create, read, update, list activities. Bulk operations are supported. Phase transitions go through update with the new phase ID.
|
|
211
|
+
- Workflow tools — manage workflows, fields, phases, and inspect workflow schemas. These are how you discover what fields exist on a workflow before you start writing data.
|
|
212
|
+
- Discussion tools — chat and messaging within activities. Read messages, send messages, join or leave discussions, invite users.
|
|
213
|
+
- Insight tools — SQL-like reporting over workflow data. You can preview a query, save it as an insight, and read the results.
|
|
214
|
+
- App tools — Hailer app scaffolding, publishing, sharing, and marketplace operations.
|
|
215
|
+
- Workspace tools — initialize workspace data once per session, search users, manage teams and groups.
|
|
216
|
+
|
|
217
|
+
Not every tool is available to every account — the tool registry filters tools by the access groups granted to the API key in use.
|
|
218
|
+
|
|
219
|
+
### hailer-studio
|
|
220
|
+
|
|
221
|
+
#### What Hailer Studio is — the SDK workspace experience in the cloud
|
|
222
|
+
|
|
223
|
+
Hailer Studio is the cloud-hosted version of the Hailer SDK workspace-configuration experience. To understand it, start with the SDK.
|
|
224
|
+
|
|
225
|
+
The Hailer SDK (@hailer/sdk on npm) lets you initialise a Hailer workspace as a code project. Instead of clicking through the website UI to create workflows, fields, and phases, you define the workspace configuration in code, then push changes with CLI commands. The workspace is shaped from code rather than from the UI — 'workspace as code', which you can version, diff, and review.
|
|
226
|
+
|
|
227
|
+
Hailer Studio takes that exact experience and puts it in the cloud, so there is no local setup. When a user starts a Studio session, they get:
|
|
228
|
+
- An initialised Hailer SDK project, already set up in the cloud — no npm install, no local toolchain.
|
|
229
|
+
- An AI agent, already initialised, that the user talks to through Hailer's chat. The agent comes pre-loaded with instructions on how to manipulate the configuration code and run the CLI commands that push changes to the workspace.
|
|
230
|
+
|
|
231
|
+
Two ways to edit your workspace configuration in Studio:
|
|
232
|
+
1. The built-in code editor in the Studio frontend — edit the SDK project's configuration files directly, like an IDE in the browser.
|
|
233
|
+
2. The AI agent — describe the change in chat ('add a priority dropdown to the support workflow', 'split the Done phase into Resolved and Archived'), and the agent edits the code and runs the CLI command to apply it.
|
|
234
|
+
|
|
235
|
+
How Studio relates to the other surfaces:
|
|
236
|
+
- vs the in-workspace Hailer Helper bot: the Helper makes runtime changes through the MCP tools (create a workflow, add a field, create activities) against a live workspace. Studio is the config-as-code path — you edit the SDK project and push, closer to how a developer evolves a system. The Helper operates inside a workspace; Studio shapes the workspace's structure as code.
|
|
237
|
+
- vs the local SDK flow: Studio is the same SDK project model, just hosted in the cloud with a browser code editor and a chat-driven AI agent instead of a local terminal. A developer who prefers their own machine can still use @hailer/sdk locally; Studio is for people who want the code-based workflow without local setup.
|
|
238
|
+
- vs Hailer Apps: Apps are custom React / Svelte / vanilla applications that run inside Hailer. Studio is about workspace configuration (workflows, fields, phases), not about building front-end applications. Do NOT describe Studio as an 'app builder' — that conflates it with the Apps SDK, which is a different surface.
|
|
239
|
+
|
|
240
|
+
Who it is for: workspace admins and developers who want code-based, reviewable, AI-assisted control over their workspace structure — without installing the SDK toolchain locally. It suits technical users and teams who treat their workspace as something to version and evolve deliberately, rather than click together ad hoc.
|
|
241
|
+
|
|
242
|
+
One-liner pitch: Hailer Studio is the Hailer SDK experience in the cloud — a code-configured workspace plus an AI agent that edits the config and runs the CLI for you, no local setup required.
|
|
243
|
+
|
|
244
|
+
Graduation-flow note: the 'Continue in Hailer' pathway pre-warms a Studio session for the new user, so they can land in a ready-to-go cloud SDK project with the AI agent already initialised. This is why a visitor who graduates may encounter Studio as well as the in-workspace Helper.
|
|
245
|
+
|
|
246
|
+
### MCP Server
|
|
247
|
+
|
|
248
|
+
#### What the Model Context Protocol (MCP) is
|
|
249
|
+
|
|
250
|
+
The Model Context Protocol (MCP) is an open standard that lets AI assistants call tools on external systems. Instead of the AI guessing or asking the user to copy-paste data, it can directly query databases, create records, and perform actions through a structured tool interface.
|
|
251
|
+
|
|
252
|
+
The Hailer MCP server implements MCP over HTTP using JSON-RPC 2.0, making Hailer's full API accessible to any MCP-compatible client (Claude Code, Claude Desktop, and others). The server is an Express.js application; the main entry point is the MCPServerService class.
|
|
253
|
+
|
|
254
|
+
#### MCP server endpoints and what each is for
|
|
255
|
+
|
|
256
|
+
The Hailer MCP server exposes these HTTP endpoints:
|
|
257
|
+
|
|
258
|
+
- /api/mcp — main MCP endpoint for direct API key access.
|
|
259
|
+
- /api/cowork/mcp — MCP endpoint for OAuth-authenticated sessions (used by Claude Desktop's native connector).
|
|
260
|
+
- /api/vipunen — Vipunen RAG tools (no Hailer auth required).
|
|
261
|
+
- /health — health check.
|
|
262
|
+
- /.well-known/oauth-authorization-server — OAuth 2.0 metadata (RFC 8414).
|
|
263
|
+
- /.well-known/oauth-protected-resource — OAuth Protected Resource Metadata.
|
|
264
|
+
- POST /api/cowork/oauth/register — Dynamic Client Registration (RFC 7591).
|
|
265
|
+
- /api/cowork/oauth/* — OAuth flow (authorize, token, callback).
|
|
266
|
+
- POST /api/cowork/auth/register — register a Hailer API key session, called by the frontend after login.
|
|
267
|
+
- POST /:apiKey — alternative API key as path parameter.
|
|
268
|
+
|
|
269
|
+
Most integrations only need /api/mcp (direct API key) or the OAuth endpoints under /api/cowork.
|
|
270
|
+
|
|
271
|
+
#### JSON-RPC 2.0 protocol used for tool discovery and execution
|
|
272
|
+
|
|
273
|
+
All MCP tool communication uses JSON-RPC 2.0. There are two main calls:
|
|
274
|
+
|
|
275
|
+
Tool discovery (tools/list):
|
|
276
|
+
\`\`\`json
|
|
277
|
+
{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }
|
|
278
|
+
\`\`\`
|
|
279
|
+
The response returns an array of tools, each with a name, description, and JSON Schema for its arguments.
|
|
280
|
+
|
|
281
|
+
Tool execution (tools/call):
|
|
282
|
+
\`\`\`json
|
|
283
|
+
{
|
|
284
|
+
"jsonrpc": "2.0", "id": 2, "method": "tools/call",
|
|
285
|
+
"params": {
|
|
286
|
+
"name": "list_activities",
|
|
287
|
+
"arguments": { "workflowId": "<id>", "limit": 10 }
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
\`\`\`
|
|
291
|
+
|
|
292
|
+
Responses follow MCP's content-array format:
|
|
293
|
+
\`\`\`json
|
|
294
|
+
{ "jsonrpc": "2.0", "id": 2, "result": { "content": [{ "type": "text", "text": "..." }] } }
|
|
295
|
+
\`\`\`
|
|
296
|
+
This is what every Hailer MCP tool returns.
|
|
297
|
+
|
|
298
|
+
#### Authentication: direct API key, OAuth 2.0 with PKCE, pre-configured accounts
|
|
299
|
+
|
|
300
|
+
The Hailer MCP server supports three authentication methods:
|
|
301
|
+
|
|
302
|
+
1. Direct API key (simplest) — pass the Hailer API key as a query parameter, e.g. POST /api/mcp?apiKey=your-hailer-api-key. Used by Claude Code via the mcp-remote bridge.
|
|
303
|
+
|
|
304
|
+
2. OAuth 2.0 with PKCE — for Claude Desktop and other MCP clients that support OAuth. The flow:
|
|
305
|
+
- Client discovers OAuth metadata at /.well-known/oauth-authorization-server.
|
|
306
|
+
- Client redirects the user to /api/cowork/oauth/authorize.
|
|
307
|
+
- User logs into Hailer and selects a workspace.
|
|
308
|
+
- Hailer redirects back with an authorization code.
|
|
309
|
+
- Client exchanges the code for an access_token at /api/cowork/oauth/token.
|
|
310
|
+
- Client sends the access_token in an Authorization: Bearer header.
|
|
311
|
+
The real Hailer API key stays server-side in the session store; the client only ever sees a key_id.
|
|
312
|
+
|
|
313
|
+
3. Pre-configured accounts (CLIENT_CONFIGS) — service accounts defined in the environment as a JSON map of API key → account credentials. This is the most common setup for development and production deployments.
|
|
314
|
+
|
|
315
|
+
#### Session management: max TTL, inactivity TTL, cleanup
|
|
316
|
+
|
|
317
|
+
OAuth sessions in the MCP server have two expiry rules running in parallel:
|
|
318
|
+
|
|
319
|
+
- Max TTL: 24 hours absolute lifetime. After this the session is gone regardless of activity.
|
|
320
|
+
- Inactivity TTL: 30 minutes; resets on each use.
|
|
321
|
+
|
|
322
|
+
A session record stores: { apiKey, workspaceId, createdAt, lastAccessedAt }. A cleanup job runs every 5 minutes to remove expired sessions.
|
|
323
|
+
|
|
324
|
+
This dual-TTL design means active users stay logged in for the full 24 hours but abandoned tabs lose their session quickly — which is the right trade-off for a tool with backend write access. The implementation lives in src/mcp/session-store.ts.
|
|
325
|
+
|
|
326
|
+
#### User context: what every authenticated request gets
|
|
327
|
+
|
|
328
|
+
Every authenticated MCP request gets a UserContext object containing the data tools need:
|
|
329
|
+
|
|
330
|
+
- client: HailerClient — socket/REST connection.
|
|
331
|
+
- init: full workspace data (workflows with fields and phases, all workspace users, team and group definitions, workspace metadata).
|
|
332
|
+
- workspaceCache: structured lookups for fast access.
|
|
333
|
+
- hailer: API call wrapper.
|
|
334
|
+
- apiKey: identifier.
|
|
335
|
+
- createdAt: session creation timestamp.
|
|
336
|
+
- email, password: credentials for session renewal.
|
|
337
|
+
- workspaceRoles: a per-workspace role map.
|
|
338
|
+
- currentWorkspaceId: the active workspace.
|
|
339
|
+
- allowedGroups: tool access groups for this session.
|
|
340
|
+
|
|
341
|
+
The init data is fetched once via v2.core.init and cached for 15 minutes per API key, so subsequent tool calls are fast — they read from cache instead of calling Hailer again. This is implemented in src/mcp/UserContextCache.ts.
|
|
342
|
+
|
|
343
|
+
#### Tool registry, tool definition pattern, and tool lifecycle
|
|
344
|
+
|
|
345
|
+
The tool registry manages MCP tool lifecycle in three stages:
|
|
346
|
+
|
|
347
|
+
- Registration (startup): app.ts imports allTools and registers each with Core, which passes them to the ToolRegistry.
|
|
348
|
+
- Discovery (tools/list): the registry returns tool names, descriptions, and JSON schemas. Nuclear (destructive) tools are excluded unless ENABLE_NUCLEAR_TOOLS=true.
|
|
349
|
+
- Execution (tools/call): the registry looks up the tool by name, validates arguments with the Zod schema, pre-transforms common LLM mistakes (e.g., converting an array into the expected object), then calls tool.execute(validatedArgs, userContext) and returns the MCP response.
|
|
350
|
+
|
|
351
|
+
Every tool follows this pattern:
|
|
352
|
+
\`\`\`typescript
|
|
353
|
+
export const myTool: Tool = {
|
|
354
|
+
name: 'my_tool_name',
|
|
355
|
+
group: ToolGroup.READ,
|
|
356
|
+
contextType: 'hailer',
|
|
357
|
+
description: 'What this tool does',
|
|
358
|
+
schema: z.object({
|
|
359
|
+
requiredParam: z.string().describe('What this param is'),
|
|
360
|
+
}),
|
|
361
|
+
async execute(args, context: UserContext) {
|
|
362
|
+
const result = await context.hailer.request('v3.some.method', [args.requiredParam]);
|
|
363
|
+
return { content: [{ type: 'text', text: \`Result: \${JSON.stringify(result)}\` }] };
|
|
364
|
+
},
|
|
365
|
+
};
|
|
366
|
+
\`\`\`
|
|
367
|
+
|
|
368
|
+
#### MCP server error handling and configuration
|
|
369
|
+
|
|
370
|
+
The server handles errors at multiple levels: schema validation (Zod catches invalid inputs before execution), pre-transformation (fixes common LLM formatting mistakes), tool-level try/catch, response builder (standardized error formatting with isError: true), and request-logger HTTP-level error tracking.
|
|
371
|
+
|
|
372
|
+
Error responses include helpful context so the AI can self-correct, for example:
|
|
373
|
+
\`\`\`json
|
|
374
|
+
{ "content": [{ "type": "text", "text": "Error: workflowId is required. Available workflows: ..." }], "isError": true }
|
|
375
|
+
\`\`\`
|
|
376
|
+
|
|
377
|
+
All server configuration flows through a single Zod-validated config: environment variables → Zod validation → ApplicationConfig instance. Key settings:
|
|
378
|
+
|
|
379
|
+
- PORT — server port (default 3030).
|
|
380
|
+
- NODE_ENV — environment mode (default development).
|
|
381
|
+
- CLIENT_CONFIGS — required JSON map of API key → account credentials.
|
|
382
|
+
- CORS_ORIGINS — allowed origins; an empty array means allow all.
|
|
383
|
+
- ENABLE_NUCLEAR_TOOLS — show destructive tools (default false).
|
|
384
|
+
- DISABLE_MCP_SERVER — skip server startup (default false).
|
|
385
|
+
- WORKSPACE_CONFIG_PATH — path to local workspace files (optional).
|
|
386
|
+
- DEV_APPS_PATH — path for scaffolded apps (optional).
|
|
387
|
+
|
|
388
|
+
### rest-api-and-webhooks
|
|
389
|
+
|
|
390
|
+
#### REST API surface: auth, field types, webhooks, iCal feed, and Excel import
|
|
391
|
+
|
|
392
|
+
Hailer exposes a REST API for programmatic access. This chunk is the developer-archetype reference. The MCP server (covered in its own chunks) is a higher-level surface that wraps these REST calls for AI agents; this chunk is for engineers who want to call Hailer directly.
|
|
393
|
+
|
|
394
|
+
API entry point:
|
|
395
|
+
- Base URL: \`https://api.hailer.com/api/\` (substitute the right host for self-hosted or staging deployments).
|
|
396
|
+
- Operator pattern: every endpoint is \`/api/<operator>\` where the operator is a versioned dotted name, e.g. \`v3.activity.list\`, \`v3.activity.create\`, \`v2.forms.process.get\`. The operator name lives in the URL path, not as a JSON-RPC method body.
|
|
397
|
+
- Methods: GET for reads (args URL-decoded from the query string), POST for writes (JSON body). Max request body size is 20 MB.
|
|
398
|
+
- API versioning: most modern endpoints are v3; some legacy endpoints are still v2. There is no v1 surface to worry about.
|
|
399
|
+
|
|
400
|
+
Authentication:
|
|
401
|
+
- User API keys are the primary auth for programmatic access. A workspace admin generates a key in account settings; the key is bcrypt-hashed server-side.
|
|
402
|
+
- Send keys either as \`Authorization: Bearer <key>\` or as the \`hlrkey\` header — both are accepted.
|
|
403
|
+
- Per-key IP whitelisting is supported: when a key has an IP whitelist set, requests from any other IP are rejected. Useful for hardening server-to-server integrations.
|
|
404
|
+
- Session cookies are also accepted (the regular login session) for browser callers.
|
|
405
|
+
|
|
406
|
+
Webhooks (outbound):
|
|
407
|
+
- Webhooks are configured per workflow phase, not per workspace. On the workflow's phase settings, an admin sets \`webhooksEnabled: true\` and a \`webhookUrl\` (multiple URLs by regex match are supported in one phase).
|
|
408
|
+
- They fire when an activity is created in that phase or moves into that phase. Hailer POSTs an activity-state payload to the configured URL(s). Failed sends are queued and retried.
|
|
409
|
+
- This is the integration path most Hailer customers use today for outbound notifications and downstream automations.
|
|
410
|
+
|
|
411
|
+
Field type catalog (what kinds of fields workflows can have):
|
|
412
|
+
- Text: \`text\`, \`textarea\`, \`textunit\` (text with a unit suffix), \`textpredefinedoptions\` (dropdown).
|
|
413
|
+
- Numbers: \`numeric\`, \`numericunit\`.
|
|
414
|
+
- Time: \`date\`, \`datetime\`, \`time\`, \`daterange\`, \`timerange\`, \`datetimerange\`.
|
|
415
|
+
- People: \`users\`, \`teams\`.
|
|
416
|
+
- Geographic: \`country\`.
|
|
417
|
+
- Cross-workflow: \`activitylink\` (reference activities in another workflow), \`linkedfrom\` (backlink — automatically populated from activitylinks pointing at this activity; valid only in the process schema, not as a user-set value).
|
|
418
|
+
- Structural: \`subheader\` (groups fields visually; not user-data; valid only in the process schema).
|
|
419
|
+
- Calculated: any field type above can be turned into a calculated/function field by setting \`function\` (JavaScript code) and \`functionEnabled: true\`. The function runs server-side in an isolated VM.
|
|
420
|
+
|
|
421
|
+
Excel/CSV import:
|
|
422
|
+
- Activity bulk-import endpoint: \`v3.activity.import\`. Hailer expects an XLSX file with workflow ID, phase ID, and column headers in specific cells (documented in Hailer's help center). The endpoint returns the count of created activities and any per-row errors. A separate bulk-user-invite Excel flow lives in workspace settings.
|
|
423
|
+
|
|
424
|
+
iCal calendar feed:
|
|
425
|
+
- Personal iCal subscription URL: \`https://api.hailer.com/ical/{subscribe_code}\` (subscribe code is a per-user token generated in calendar settings). Output is RFC 5545 compliant — paste the URL into Gmail/Outlook/Apple Calendar and Hailer events show up.
|
|
426
|
+
|
|
427
|
+
What Hailer does NOT have (be honest):
|
|
428
|
+
- No first-party GraphQL or OData. REST + webhooks is the surface.
|
|
429
|
+
- No public rate-limit table; if a visitor needs a hard SLO commitment, recommend they talk to the Hailer team.
|
|
430
|
+
- No Postman collection shipped publicly; describe operators by name and point at the help center.
|
|
431
|
+
- Zapier integration exists, but it's a Zapier-side app that calls this REST API — not a separate backend feature inside hailer-api.
|
|
432
|
+
|
|
433
|
+
## Legal & Privacy
|
|
434
|
+
|
|
435
|
+
### demo-chat-privacy
|
|
436
|
+
|
|
437
|
+
#### What happens to your demo conversation
|
|
438
|
+
|
|
439
|
+
If a visitor asks 'where does this chat go?', 'is this conversation kept?', 'do you train on this?', or anything in that family — the answer is in this section. This is a plain-English summary of the demo-chat handling, in addition to (not instead of) Hailer's formal Privacy Policy.
|
|
440
|
+
|
|
441
|
+
The demo chat on the Hailer login page:
|
|
442
|
+
- Is anonymous. We do not collect the visitor's name, email, or contact info during the chat. There is no signup gate to begin chatting.
|
|
443
|
+
- Is stored server-side under an anonymous session ID generated in the browser. This session ID is the only identifier tied to the conversation; the visitor can clear it by clearing their browser's localStorage.
|
|
444
|
+
- Is used in one of two ways: (a) to let the bot answer follow-up questions in the same conversation, and (b) if the visitor clicks 'Continue in Hailer' and creates a Hailer workspace, to give the new Hailer Helper bot in that workspace context about what was discussed (the 'seed context'). Without 'Continue in Hailer', the chat is never linked to a Hailer account.
|
|
445
|
+
- Is sent to Anthropic's Claude API in order to generate the bot's replies. Anthropic processes the conversation under their published data-use terms; Anthropic does not train on API content by default.
|
|
446
|
+
- Is not used to train Hailer's own models. We do not have first-party AI models — the chat is processed by Anthropic for replies and stored locally for handoff. We do not sell or share the conversation contents with third parties.
|
|
447
|
+
- Has a server-side retention limit. The in-memory store the demo uses is cleared when the server restarts; a longer-lived store, if introduced later, will retain conversations for a short window (3 days planned) before purging.
|
|
448
|
+
|
|
449
|
+
If the visitor wants their demo chat deleted before retention expires, or wants a copy of the data, they can contact privacy@hailer.com with the session ID (visible in the browser's localStorage as \`hailerPublicChatSessionId\`).
|
|
450
|
+
|
|
451
|
+
### Privacy Policy
|
|
452
|
+
|
|
453
|
+
#### Privacy Policy overview, data controller, and structure
|
|
454
|
+
|
|
455
|
+
Hailer's Privacy Policy covers what information Hailer collects when you use the products or services or otherwise interact with the company (for example by attending events or communicating with Hailer staff), unless a different policy is displayed.
|
|
456
|
+
|
|
457
|
+
Data controller: Hailer Oy, business ID 2772571-4, Rihkamatori 2, Porvoo, Finland. All inquiries regarding the Privacy Policy should be directed to privacy@hailer.com.
|
|
458
|
+
|
|
459
|
+
If you do not agree with the policy, you should not access or use Hailer services or interact with any other aspect of the business.
|
|
460
|
+
|
|
461
|
+
The policy is split into two sections: (1) how the Hailer Application collects and processes your data, and (2) how the Hailer website and social-media channels collect and process your data. The full policy is published at https://app.hailer.com/#/privacy-policy.
|
|
462
|
+
|
|
463
|
+
#### Hailer Application — what data is collected
|
|
464
|
+
|
|
465
|
+
Section 1 of the Privacy Policy covers the Hailer Application, which means any of: (1) the web client at app.hailer.com, (2) the Hailer Android app, (3) the Hailer iOS app, and (4) Hailer API users.
|
|
466
|
+
|
|
467
|
+
What data is collected:
|
|
468
|
+
|
|
469
|
+
- To use the service and identify the user, certain data has to be collected for the service to be functional. This data includes (but is not limited to) email address, full name, and any other data inserted into the application.
|
|
470
|
+
- Payment and billing information is collected when you register for certain paid services — for example, payment card details, which are collected via secure payment processing services.
|
|
471
|
+
- Some information is collected automatically, including (but not limited to) the type of mobile device you use, your mobile device's unique device ID, the IP address of your mobile device, your mobile operating system, the type of mobile internet browser you use, and information about how you use the Application.
|
|
472
|
+
|
|
473
|
+
#### Hailer Application — how the data is used; end-user note
|
|
474
|
+
|
|
475
|
+
How Hailer uses the data it collects (Application section):
|
|
476
|
+
|
|
477
|
+
Hailer uses data and collective learnings (including feedback) about how people use the application to troubleshoot, identify trends, usage and activity patterns, find areas for integration and product improvement, and develop new products, features, and technologies that benefit users.
|
|
478
|
+
|
|
479
|
+
Important note for end users of organization workspaces:
|
|
480
|
+
|
|
481
|
+
Many Hailer products are intended for use by organizations. When the services are made available to you through an organization (for example, your employer), that organization is the administrator of the workspace and is responsible for it. In these cases, direct your data-privacy questions to your administrator — your use of the services is subject to that organization's policies. Hailer is not responsible for the privacy or security practices of an administrator's organization, which may differ from Hailer's policy.
|
|
482
|
+
|
|
483
|
+
#### Hailer subprocessors — infrastructure and third-party services
|
|
484
|
+
|
|
485
|
+
Hailer uses Amazon Web Services (AWS) infrastructure for providing the Hailer cloud service. The server infrastructure is located in the EU and AWS is committed to handle all data traffic compliant with EU data protection legislation (see the AWS GDPR DPA at https://d1.awsstatic.com/legal/aws-gdpr/AWS_GDPR_DPA.pdf).
|
|
486
|
+
|
|
487
|
+
Data residency specifics: all Hailer infrastructure runs in the AWS eu-west-1 region, located in Ireland. The MongoDB database is hosted in the same region. Every workspace's data resides there — there is currently no option to choose a different region or to pin a workspace to another location. So data residency is EU (Ireland) for all customers by default, but customer-selectable region / data residency is not offered today.
|
|
488
|
+
|
|
489
|
+
Full list of Hailer subprocessors:
|
|
490
|
+
|
|
491
|
+
- Amazon Web Services (AWS) — server infrastructure; all Hailer data.
|
|
492
|
+
- MongoDB Atlas (MongoDB Inc.) — databases; all Hailer data.
|
|
493
|
+
- Mailgun (Mailgun Technologies, Inc.) — sending email from Hailer; email address, name, password reset and invitation links.
|
|
494
|
+
- Splunk (Splunk Inc.) — server log management; infrastructure logs.
|
|
495
|
+
- Apple Push Notification Service / APN (Apple) — sending push notifications; push notification content and metadata to Apple devices.
|
|
496
|
+
- Firebase Cloud Messaging / FCM (Alphabet Inc.) — sending web push notifications; push notification metadata and content to web clients.
|
|
497
|
+
- Stripe — online payments; client payment information.
|
|
498
|
+
- Creamailer (Creamailer Oy) — newsletters; email address and name.
|
|
499
|
+
|
|
500
|
+
#### Hailer website and social media — data collection and use
|
|
501
|
+
|
|
502
|
+
Section 2 of the Privacy Policy covers Hailer's website and social-media channels.
|
|
503
|
+
|
|
504
|
+
What data is collected:
|
|
505
|
+
|
|
506
|
+
Hailer collects information you input into the website, social-media accounts, or provide directly through other communications. Website visitors are the primary source of personal, company, and technical information — including registration data, contact information, and anything else provided through Hailer's digital assets. Some information also comes from third-party platforms (advertising platforms, content on third-party sites, social networks).
|
|
507
|
+
|
|
508
|
+
How the data is used:
|
|
509
|
+
|
|
510
|
+
Processing is based on Hailer's legitimate interest to ensure the functionality and security of the website and to provide information and services to data subjects visiting Hailer's digital assets. Personal data is also processed to develop and customize the website content for people interested in Hailer's products and services.
|
|
511
|
+
|
|
512
|
+
Contact details collected through web forms include: name, email address, telephone number, interest in the system, and the company you work for.
|
|
513
|
+
|
|
514
|
+
#### Your rights, data disclosure cases, and policy changes
|
|
515
|
+
|
|
516
|
+
Disclosure of user information may happen in these specific cases:
|
|
517
|
+
|
|
518
|
+
- As required by law (for example, to comply with a subpoena or similar legal process).
|
|
519
|
+
- When Hailer believes in good faith that disclosure is necessary to protect its rights, protect your safety or the safety of others, investigate fraud, or respond to a government request.
|
|
520
|
+
- With trusted service providers acting on Hailer's behalf. These providers don't have independent use of the information and have agreed to follow the rules in the privacy statement.
|
|
521
|
+
- If Hailer is involved in a merger, acquisition, or sale of all or part of its assets, users will be notified by email and/or a prominent notice on the website about ownership changes or new uses of the information, and any choices users have.
|
|
522
|
+
|
|
523
|
+
Your rights:
|
|
524
|
+
|
|
525
|
+
You have the right to request a copy of your information, object to its use (including for marketing), request deletion or restriction of your data, or request your information in a structured electronic format. Submit requests to privacy@hailer.com.
|
|
526
|
+
|
|
527
|
+
Hailer may decline requests that are unreasonably repetitive, systematic, technically disproportionate, conflict with others' privacy, are extremely impractical, or where access is not legally required. Some data may be retained as needed to comply with legal obligations, resolve disputes, or in backups. For website-form data you can opt out manually at any time.
|
|
528
|
+
|
|
529
|
+
Policy changes:
|
|
530
|
+
|
|
531
|
+
Hailer can update the privacy policy when the methods or purposes of processing change. New versions are posted on the privacy-policy page and users are informed by email.
|
|
532
|
+
|
|
533
|
+
## Product & UI
|
|
534
|
+
|
|
535
|
+
### customer-stories
|
|
536
|
+
|
|
537
|
+
#### Customer story — Viestintä Ruuti (communications agency, Lahti, Finland)
|
|
538
|
+
|
|
539
|
+
Viestintä Ruuti Oy is a content-marketing and communications agency in Lahti, Finland. The story below is summarised from the published customer reference at hailerreferences.com/tarinat/viestinta-ruuti.html (Finnish-language original; quotes translated). Use it when a visitor's situation resembles theirs.
|
|
540
|
+
|
|
541
|
+
The company:
|
|
542
|
+
- Founded by CEO Riina Kruut.
|
|
543
|
+
- Grew from a one-person operation to a five-person core team plus a freelancer network over roughly five years.
|
|
544
|
+
- Services include social-media management, expert branding, training, and strategic communications planning.
|
|
545
|
+
- Multi-client agency model — each client comes with its own scope, billing structure, and stakeholders.
|
|
546
|
+
|
|
547
|
+
The pain before Hailer:
|
|
548
|
+
- Client information was scattered across Excel spreadsheets, PowerPoint slides, Word documents, and sticky notes.
|
|
549
|
+
- Hour tracking was difficult because each client had its own billing structure — different rates, different recurring/one-off arrangements, different reporting expectations.
|
|
550
|
+
- As the team grew from one person to five, the founder could no longer hold all the client context in her head, and the existing tools didn't give her a clean way to verify what work had been done before invoicing.
|
|
551
|
+
- Quote (translated): 'Various client relationships and billing structures caused challenges in keeping up with hour tracking.'
|
|
552
|
+
|
|
553
|
+
How they use Hailer today:
|
|
554
|
+
- One central place for all client data — contact details, billing arrangements, account credentials, project notes.
|
|
555
|
+
- Hour and project tracking — team members log hours per client and project monthly; the founder can verify exactly what work was done before sending invoices.
|
|
556
|
+
- Internal communication tied to the work — conversation threads attach to the relevant client or project record, alongside notes, billing changes, and responsibility assignments.
|
|
557
|
+
- Project documentation lives on the record, so the founder no longer has to chase teammates for status updates.
|
|
558
|
+
|
|
559
|
+
Concrete outcomes:
|
|
560
|
+
- Visibility she trusts: 'If I didn't have clarity on who worked where and how much, I couldn't manage billing responsibly.' Hailer gave her that clarity.
|
|
561
|
+
- Less management overhead — instead of asking team members what they did, the founder can see the logs and confirm work was done.
|
|
562
|
+
- Cleaner billing — the agency and its clients both benefit from documented deliverables and hours, reducing back-and-forth at invoicing time.
|
|
563
|
+
- Scalability foundation — growing from one person to five with multiple complex billing structures only worked because client info, hours, and conversations all lived in one place.
|
|
564
|
+
- Quote (translated): 'All client-related matters are always found in one place.'
|
|
565
|
+
|
|
566
|
+
When this story is the right one to reach for:
|
|
567
|
+
- Visitor is running an agency, consultancy, or any client-services business with multiple clients and per-client billing variation.
|
|
568
|
+
- Visitor mentions time tracking, hour logs, billing accuracy, or invoicing as a pain.
|
|
569
|
+
- Visitor describes information scattered across spreadsheets, slide decks, docs, sticky notes, or email threads.
|
|
570
|
+
- Visitor is at the 'I can't hold it all in my head anymore' moment — typically 3–10 people, growing.
|
|
571
|
+
- Visitor mentions freelancers or contractors alongside core team — the agency context resonates.
|
|
572
|
+
|
|
573
|
+
How to use it in the chat:
|
|
574
|
+
- Don't read the case study back as a brochure. Pull the one or two threads that match what the visitor just told you and connect those to their situation.
|
|
575
|
+
- Lead with the pain the visitor named ('scattered info', 'never sure what was actually done before billing'), then mention that a Finnish agency hit the same wall growing from one person to five, and tell them what Hailer changed for that agency.
|
|
576
|
+
- Reference is publicly published, so naming Viestintä Ruuti and Riina Kruut is fine. Don't fabricate detail beyond what's in this chunk — the original story is short, and embellishment is the fastest way to lose credibility.
|
|
577
|
+
- If a visitor asks for more customer stories from other industries, be honest: this is the one with a published reference today; more are coming.
|
|
578
|
+
|
|
579
|
+
### demo-apps-page
|
|
580
|
+
|
|
581
|
+
#### What the demo's Apps page shows — and what's real vs. illustrative
|
|
582
|
+
|
|
583
|
+
The interactive Hailer demo at /demo has an Apps page (reached via the left nav 'Apps' button). It mocks the Hailer apps surface — two sections, 'Installed' and 'Marketplace' — with six tiles. The tiles are visually rich and clickable, but the demo is read-only and the page is a mock-up, NOT a real apps catalogue. Some tiles correspond to real Hailer surfaces; others are illustrative examples invented to make the marketplace concept tangible.
|
|
584
|
+
|
|
585
|
+
When a visitor asks 'what does X do?' for one of these tiles, answer honestly using the table below. Do NOT promise that the illustrative ones ship today.
|
|
586
|
+
|
|
587
|
+
Installed tiles:
|
|
588
|
+
- AI Hub — REAL. Hailer ships an AI Hub surface in every workspace for managing AI agents (bots), their system prompts, the people they can talk to, and token usage. The in-workspace Hailer Helper bot is one such agent. After 'Continue in Hailer' the visitor can find AI Hub in their real workspace.
|
|
589
|
+
- Document Templates — REAL feature, packaged as an app for demo clarity. Hailer's PDF/document generator turns activity data into offers, invoices, certificates, and other structured documents using the same function-field engine that powers calculated fields. The 'Document Templates' name is the demo's framing; in production this lives inside the workspace's template configuration rather than as a standalone marketplace app.
|
|
590
|
+
|
|
591
|
+
Marketplace tiles (all ILLUSTRATIVE — none of these ship as named apps today, but each represents a pattern Hailer supports):
|
|
592
|
+
- Customer Portal — ILLUSTRATIVE. Hailer does support public web forms that create activities in a workflow (the publicForm feature). Branding it as a 'Customer Portal' app is the demo's shorthand for that capability.
|
|
593
|
+
- Equipment Inventory — ILLUSTRATIVE. Represents the dataset pattern (a single-phase or Active/Archived workflow used as a reference list). A user could build this themselves; it's not a one-click install.
|
|
594
|
+
- Slack Bridge — ILLUSTRATIVE. Hailer's first-party Slack story is the Zapier integration (Zapier triggers Slack messages from Hailer events). There is no purpose-built 'Slack Bridge' app today.
|
|
595
|
+
- Stripe Receipts — ILLUSTRATIVE. Combines automation (phase-change triggers) and document generation patterns Hailer does support, but there's no shipping Stripe-specific app.
|
|
596
|
+
|
|
597
|
+
How to answer typical questions:
|
|
598
|
+
- 'Can I install Slack Bridge?' — 'That tile is illustrative. Hailer's Slack story today is the Zapier integration, which can post Slack messages from Hailer events.'
|
|
599
|
+
- 'What's AI Hub?' — 'AI Hub is the real surface where you manage your workspace's AI agents — including the Hailer Helper bot that gets provisioned when you Continue in Hailer.'
|
|
600
|
+
- 'Can I build my own apps like these?' — 'Yes. Apps are built with the Hailer Apps SDK (React, Svelte, vanilla, etc.) or scaffolded by an AI agent via the @hailer/mcp tools. The marketplace lets you publish them to other workspaces.'
|
|
601
|
+
- 'How do I get an app for my [specific use case]?' — Recommend the route honestly: 'For something custom, scaffold a Hailer App with the SDK or ask the in-workspace Helper to scaffold one. For a configuration-only solution (workflow + fields + a function field generating documents), describe it to the in-workspace Helper after you Continue in Hailer.'
|
|
602
|
+
|
|
603
|
+
Key rule: if the visitor seems to assume these are all shippable apps they can install today, gently correct that — Hailer apps are mostly something teams build (or commission), not a fully populated marketplace. The deck's Apps & Studio slide ('apps-studio' slide id) explains this in the broader story.
|
|
604
|
+
|
|
605
|
+
### Frequently Asked Questions
|
|
606
|
+
|
|
607
|
+
#### Trial, integrations, and data import/export
|
|
608
|
+
|
|
609
|
+
Frequently asked questions from the Hailer help site:
|
|
610
|
+
|
|
611
|
+
Can I test Hailer for free?
|
|
612
|
+
Yes. Every new Hailer workspace starts with full Hailer functionality and a starter AI token grant for trying the AI features. Token consumption applies only to AI-driven operations — chats with the in-workspace Hailer Helper, AI Hub bots, and MCP-driven AI sessions. Creating activities, using kanban, the calendar, discussions, and everything else in the regular Hailer UI does not consume from this budget. When the AI token balance runs low, the workspace owner can top up via the billing area. For the current grant size and rough estimates of what it covers, see the 'How Hailer's free AI token grant works' chunk — that chunk is the single source of truth for the grant figure; do not quote a number from this FAQ.
|
|
613
|
+
|
|
614
|
+
What integrations does Hailer have?
|
|
615
|
+
Hailer currently offers a Zapier integration and a REST API. Through a Zapier workflow you can create a new Hailer activity or update an existing one, create a new calendar event, upload files, or create a new wall post on the feed.
|
|
616
|
+
|
|
617
|
+
Can I import data from old systems to Hailer? What about export?
|
|
618
|
+
Yes. You can do an Excel import in a few minutes, or export your data out the same way.
|
|
619
|
+
|
|
620
|
+
#### Calendar sync, custom workflows, and public forms
|
|
621
|
+
|
|
622
|
+
More frequently asked questions from the Hailer help site:
|
|
623
|
+
|
|
624
|
+
Can I sync Hailer events to Gmail or another calendar?
|
|
625
|
+
Yes. You can sync Hailer events to your Gmail or Office account using an iCal link.
|
|
626
|
+
|
|
627
|
+
Can I create a custom workflow for my business?
|
|
628
|
+
Yes. You can create any type of workflow or process in Hailer. A few ready-made templates are available, and if none fit your needs you can easily build a custom workflow from scratch.
|
|
629
|
+
|
|
630
|
+
I want to collect data from external persons — is that possible?
|
|
631
|
+
Yes. Workspace admins can enable a public form on any workflow or dataset. This produces a web form whose link you can embed in a webpage or share wherever you need to gather data from people outside the workspace.
|
|
632
|
+
|
|
633
|
+
### free-tier-tokens
|
|
634
|
+
|
|
635
|
+
#### How Hailer's free AI token grant works
|
|
636
|
+
|
|
637
|
+
MAINTAINER NOTE — this chunk is the single source of truth for the AI token grant figure. The faq.json and graduation.json chunks deliberately do NOT quote the number; they cross-reference here. When the backend changes the grant, update ONLY this chunk and the corpus stays coherent.
|
|
638
|
+
|
|
639
|
+
Every new Hailer workspace gets an AI token grant at signup. The current grant is 1500 tokens — this number is set on Hailer's backend and may change in the future, so always describe it as 'the current signup grant' rather than a permanent figure.
|
|
640
|
+
|
|
641
|
+
What tokens are spent on:
|
|
642
|
+
- Conversations with the in-workspace Hailer Helper bot.
|
|
643
|
+
- AI Hub bots running on behalf of the workspace.
|
|
644
|
+
- MCP-driven AI sessions (e.g. Claude Code connected to the workspace).
|
|
645
|
+
- Function-field execution — calculated fields run sandboxed JavaScript, and each execution draws from the same token bucket. Function fields evaluated at scale (long lists, frequent re-calculation, heavy data) can therefore consume meaningful tokens on their own.
|
|
646
|
+
|
|
647
|
+
What does NOT spend tokens:
|
|
648
|
+
- Creating, updating, or moving activities through the regular Hailer UI.
|
|
649
|
+
- Sending discussion messages to other humans.
|
|
650
|
+
- Calendar entries, feed posts, file uploads.
|
|
651
|
+
- Reading existing activity data that doesn't trigger a function-field recompute.
|
|
652
|
+
|
|
653
|
+
How the meter works:
|
|
654
|
+
- Tokens are 'output-normalized' — Hailer converts every kind of AI usage to an equivalent number of model-output tokens before deducting. The default underlying model is Claude Haiku 4.5.
|
|
655
|
+
- A typical single bot turn (the user asks something, the bot reads context and replies) costs roughly 500 to 1000 normalized tokens depending on how long the user's question and the bot's reply are. A modest reply costs around 700 tokens.
|
|
656
|
+
- Turns that involve tool use (the bot creating a workflow, adding fields, creating activities, fetching data) can cost more per turn because the bot does more work inside one response.
|
|
657
|
+
|
|
658
|
+
What 1500 tokens covers, roughly, at the current rate:
|
|
659
|
+
- About two substantive back-and-forth chats with the Hailer Helper. Enough for a 'set up my workspace' conversation or a couple of follow-up questions.
|
|
660
|
+
- Or one moderately complex workflow-creation request that involves multiple tool calls in a single turn.
|
|
661
|
+
- Or a handful of short prompts like 'add an activity for Acme Deal' if the bot's replies stay brief.
|
|
662
|
+
|
|
663
|
+
These estimates are approximate and depend heavily on prompt length, model choice, and how much tool use the bot does. A workspace running heavier AI features (Sonnet instead of Haiku, very long prompts, deep multi-turn tool chains) will burn through 1500 tokens faster.
|
|
664
|
+
|
|
665
|
+
When the balance runs low:
|
|
666
|
+
- Below 100 tokens, the system flags the workspace as 'LOW'. The bot continues to respond and function fields continue to run.
|
|
667
|
+
- At zero or negative, two things pause: (a) AI features stop generating responses (Helper bot, AI Hub bots, MCP-driven AI sessions) and (b) function-field execution halts — calculated fields stop recomputing until the workspace tops up.
|
|
668
|
+
- The rest of manual Hailer use keeps working — creating and moving activities through the UI, posting discussion messages to other humans, calendar entries, feed posts, file uploads. Only AI features and function-field execution are gated by the token balance.
|
|
669
|
+
|
|
670
|
+
To top up, the workspace owner uses the billing area of Hailer. Top-ups work on an on-use / pay-as-you-go basis — purchase additional tokens as needed rather than committing to a fixed monthly bucket. The 1500-token grant is a starter allotment, not a permanent free quota.
|
|
671
|
+
|
|
672
|
+
### graduation
|
|
673
|
+
|
|
674
|
+
#### What the 'Continue in Hailer' button does
|
|
675
|
+
|
|
676
|
+
On the Hailer login page, the 'Continue in Hailer' button (also shown as 'I've verified — finish setup' after a fresh signup confirms their email) signs the visitor up for a free Hailer workspace and provisions a Hailer Helper bot inside it before the user even lands in Hailer.
|
|
677
|
+
|
|
678
|
+
The flow:
|
|
679
|
+
1. The visitor clicks 'Continue in Hailer'.
|
|
680
|
+
2. They sign up (or sign in if returning) and confirm their email.
|
|
681
|
+
3. A free workspace is created for them — full Hailer functionality, plus the standard signup AI token grant for trying out the AI features. See the 'How Hailer's free AI token grant works' chunk for the current grant figure; that chunk is the single source of truth — do not quote a number from here.
|
|
682
|
+
4. An 'Agent Directory' workflow is installed in that workspace if it isn't already.
|
|
683
|
+
5. A bot activity is created in the Deployed phase — this becomes the workspace's Hailer Helper.
|
|
684
|
+
6. The bot's Hailer account is auto-provisioned with admin permissions in the workspace.
|
|
685
|
+
7. The conversation the visitor had with the demo bot on the login page is carried forward as context — the new Helper's first message references what they discussed.
|
|
686
|
+
8. The visitor lands directly inside the Helper's discussion in Hailer, with the welcome message already posted.
|
|
687
|
+
|
|
688
|
+
The whole flow typically completes in a few seconds. The visitor never has to paste an API key or configure anything — the authorize step is one click. The Helper's first replies will use a small portion of the workspace's AI token grant; see 'How Hailer's free AI token grant works' for the math.
|
|
689
|
+
|
|
690
|
+
#### What the post-signup Hailer Helper bot does in a workspace
|
|
691
|
+
|
|
692
|
+
The Hailer Helper bot that gets provisioned by the 'Continue in Hailer' flow is the user's starter assistant in their brand-new workspace. It has admin-level permissions and inherits the demo conversation as context.
|
|
693
|
+
|
|
694
|
+
What it can do today:
|
|
695
|
+
- Read and understand the workspace's structure (workflows, phases, fields, teams, users) using the standard Hailer MCP toolset.
|
|
696
|
+
- Create workflows tailored to what the user described in the demo chat — sales pipelines, project trackers, support queues, recruiting funnels, anything the conversation pointed at.
|
|
697
|
+
- Add and modify fields and phases on existing workflows.
|
|
698
|
+
- Invite team members to the workspace (admin permission allows this).
|
|
699
|
+
- Create activities, follow discussions, and post messages.
|
|
700
|
+
- Answer follow-up questions about Hailer using the same knowledge base the demo bot used, but now grounded in the user's real workspace state.
|
|
701
|
+
- Build dashboards (insights) using Hailer's SQL-based query layer.
|
|
702
|
+
|
|
703
|
+
What it does NOT do (don't promise these):
|
|
704
|
+
- Write production code outside Hailer.
|
|
705
|
+
- Integrate third-party services (Salesforce, HubSpot, etc.) on its own — those are separate Hailer integrations the user sets up via Zapier or the REST API.
|
|
706
|
+
- Replace a human developer building custom Hailer Apps with the SDK.
|
|
707
|
+
- Operate independently in the background — it responds to messages in its own discussion, not autonomously.
|
|
708
|
+
|
|
709
|
+
The bot is a separate Hailer user account in the workspace; the visitor can chat with it, rename it, or disable it from AI Hub at any time.
|
|
710
|
+
|
|
711
|
+
#### Continuity between the demo chat and the post-signup workspace
|
|
712
|
+
|
|
713
|
+
When a visitor clicks 'Continue in Hailer', the conversation they had on the login page does not disappear — it carries forward as seed context for the bot that greets them in their new workspace.
|
|
714
|
+
|
|
715
|
+
How continuity works:
|
|
716
|
+
- The demo chat stores each user message and bot reply server-side under a session ID that the demo page generates and keeps in the browser.
|
|
717
|
+
- That session ID is included in the authorize popup URL when the visitor clicks 'Continue in Hailer'.
|
|
718
|
+
- When the workspace is provisioned, the demo turns are passed to the new Hailer Helper bot as \`seedContext\` — a structured record of the conversation.
|
|
719
|
+
- The new bot's first message in its own discussion references what the visitor talked about ('I see you were thinking about a sales pipeline for your team — here's what I'd suggest').
|
|
720
|
+
- Without seed context (e.g., a visitor signs up without chatting first, or the server restarted and lost the in-memory store), the new bot falls back to a generic introduction. The workspace and Hailer Helper still work; only the personalised opener differs.
|
|
721
|
+
|
|
722
|
+
What the visitor sees:
|
|
723
|
+
- The same conversation thread does NOT continue verbatim in the new workspace — it's a fresh discussion with a separate bot, but that bot already knows the context. Think of it as the demo bot briefing the workspace bot before handing the visitor over.
|
|
724
|
+
- More demo turns before clicking 'Continue in Hailer' = a more specific, personalised welcome in the workspace. Four to eight back-and-forth turns is the sweet spot.
|
|
725
|
+
|
|
726
|
+
### helper-capabilities
|
|
727
|
+
|
|
728
|
+
#### Hailer Helper bot capabilities — the in-workspace toolset
|
|
729
|
+
|
|
730
|
+
After a visitor clicks 'Continue in Hailer' and lands in their new workspace, the in-workspace Hailer Helper bot has access to a rich set of tools backed by the Hailer MCP server. The bot is a workspace admin, so its permissions cover everything in this list inside the visitor's workspace. This is what the bot can actually do once the visitor is in Hailer.
|
|
731
|
+
|
|
732
|
+
Workflow and dataset setup:
|
|
733
|
+
- List existing workflows and datasets in the workspace and read their schemas (fields, phases, permissions).
|
|
734
|
+
- Install new workflows from templates or scratch — sales pipelines, project trackers, support queues, recruiting funnels, anything with a lifecycle of stages.
|
|
735
|
+
- Install datasets for reference data — customer lists, product catalogs, equipment registers, vendor lists. Datasets are modelled as workflows with a single phase (or two, like Active/Archived) so items live in categories rather than moving through stages.
|
|
736
|
+
- The Helper should pick the right shape (workflow vs dataset) based on the use case: lifecycle → workflow, reference list → dataset. When the user's intent is ambiguous, the Helper should ask once before building rather than default to a multi-phase workflow.
|
|
737
|
+
- Create and update fields on a workflow or dataset (text, dropdown, date, calculated/function fields, file fields, user fields, etc.).
|
|
738
|
+
- Create and update phases on a workflow, including transitions between them.
|
|
739
|
+
- Grant or revoke per-workflow permissions for users and teams.
|
|
740
|
+
- Remove workflows or datasets when they're no longer needed.
|
|
741
|
+
|
|
742
|
+
Activities (the work records inside workflows):
|
|
743
|
+
- Create activities in any workflow, with field values populated from a description.
|
|
744
|
+
- List, search, count, and show activity details.
|
|
745
|
+
- Update activity fields and move activities between phases.
|
|
746
|
+
- Read an activity's linked discussion to follow the conversation context.
|
|
747
|
+
|
|
748
|
+
Discussions and messaging:
|
|
749
|
+
- List the bot's own discussions.
|
|
750
|
+
- Fetch messages from a discussion (recent and historical).
|
|
751
|
+
- Post messages into a discussion.
|
|
752
|
+
- Invite users into a discussion or join/leave existing ones.
|
|
753
|
+
- Look up which activity is linked to a given discussion.
|
|
754
|
+
|
|
755
|
+
Calendar and events:
|
|
756
|
+
- List the workspace's calendars and their upcoming events.
|
|
757
|
+
- Create new calendar events.
|
|
758
|
+
|
|
759
|
+
Files:
|
|
760
|
+
- Upload files to the workspace.
|
|
761
|
+
- Download existing files.
|
|
762
|
+
|
|
763
|
+
Reporting and insights:
|
|
764
|
+
- List existing insights (saved SQL queries) and run them to fetch data.
|
|
765
|
+
- Create new SQL-based insights to summarise and aggregate workflow data.
|
|
766
|
+
- Update or remove existing insights.
|
|
767
|
+
- Preview an insight before saving it.
|
|
768
|
+
|
|
769
|
+
Users, teams, and permissions:
|
|
770
|
+
- Search the workspace's users.
|
|
771
|
+
- Set a user's role (admin, user) in the workspace.
|
|
772
|
+
- Check a specific user's permissions on a workflow.
|
|
773
|
+
|
|
774
|
+
Hailer Apps (custom React applications inside Hailer):
|
|
775
|
+
- Scaffold a brand-new Hailer app project (React + Vite) and configure it.
|
|
776
|
+
- Publish an existing app so other users can install it.
|
|
777
|
+
- List installed apps and read their manifests.
|
|
778
|
+
- Add or remove members from an app's allowlist.
|
|
779
|
+
- Install marketplace apps and templates published by others.
|
|
780
|
+
|
|
781
|
+
Templates and the marketplace:
|
|
782
|
+
- List, get, install, create, and publish workflow templates so configurations can be reused or shared across workspaces.
|
|
783
|
+
|
|
784
|
+
Self-management:
|
|
785
|
+
- Read and update its own system prompt (so the visitor can personalise how the Helper behaves).
|
|
786
|
+
- Set its own profile picture.
|
|
787
|
+
- Check the workspace's AI token balance.
|
|
788
|
+
|
|
789
|
+
Utilities:
|
|
790
|
+
- Resolve relative dates ('next Friday', 'end of quarter') into concrete timestamps.
|
|
791
|
+
|
|
792
|
+
What the Helper cannot do:
|
|
793
|
+
- Run code in the visitor's local environment, terminal, or developer tools — that's the Hailer Studio surface, not the workspace Helper.
|
|
794
|
+
- Talk to third-party services (Salesforce, HubSpot, Slack, etc.) on its own. The user can wire those up via Zapier or the REST API, but the Helper doesn't have those credentials.
|
|
795
|
+
- Send email or SMS from the workspace's domain.
|
|
796
|
+
- Modify another workspace it isn't a member of.
|
|
797
|
+
- Replace a human developer building a fully custom Hailer App with the SDK — it can scaffold and publish apps, but production-quality app code typically needs a developer.
|
|
798
|
+
|
|
799
|
+
The overall pattern: anything that lives inside a Hailer workspace's data model — workflows, activities, fields, phases, discussions, files, calendars, insights, apps, templates, user roles — the Helper can read, create, and modify on the visitor's behalf. Anything that crosses the boundary into the outside world (third-party APIs, the visitor's own machine, email systems) is outside its toolset.
|
|
800
|
+
|
|
801
|
+
Proactive setup offer on first contact:
|
|
802
|
+
- The Helper's very first message in its discussion scans the demo conversation for concrete workspace-setup intent (a process the user described, records they want to manage, fields they need, stages an item moves through).
|
|
803
|
+
- If the demo gave enough detail to start building, the Helper offers to set it up immediately — naming the phases or dataset shape, naming the key fields — and asks 'want me to go ahead?' rather than building unilaterally.
|
|
804
|
+
- If the demo is too vague to act on, the Helper asks one or two specific clarifying questions instead of generic 'what do you want to track?' prompts.
|
|
805
|
+
- This proactive offer only fires on the first message, when the seed context is fresh. Subsequent turns behave normally.
|
|
806
|
+
|
|
807
|
+
### mobile-and-localization
|
|
808
|
+
|
|
809
|
+
#### Mobile apps, push notifications, video calls, and supported languages
|
|
810
|
+
|
|
811
|
+
Hailer ships native iOS and Android apps (built on Capacitor, packaging the same Hailer web UI) alongside the web app. Anything below is shipping; don't promise features that aren't listed.
|
|
812
|
+
|
|
813
|
+
Mobile apps:
|
|
814
|
+
- iOS and Android both have native apps. They share the web UI under the hood, so feature parity is high — workflows, kanban, activities, discussions, calendar, feed, settings all work.
|
|
815
|
+
- Native push notifications: the apps receive push for incoming discussion messages, mentions, and ball-passing events (when an activity moves to a user). Notification taps deep-link into the relevant discussion or activity.
|
|
816
|
+
- Video calls: the apps handle incoming Hailer video calls natively with accept/decline actions on the lock screen and from notifications. The video call surface is wired into the discussion thread it belongs to.
|
|
817
|
+
- Workspace admins can require biometric unlock on every launch (Force local auth — see the SSO and admin controls chunk).
|
|
818
|
+
|
|
819
|
+
Offline support:
|
|
820
|
+
- The apps work online primarily; substantial offline editing isn't a documented feature. If a visitor explicitly asks about offline-first usage, say honestly that Hailer is online-first and recommend they reach out to Hailer if offline support is critical.
|
|
821
|
+
|
|
822
|
+
Languages:
|
|
823
|
+
- The Hailer UI ships in English, Finnish, and Swedish. Visitors will see their browser's language by default if it's one of the three; otherwise English. There's no per-workspace language pin — each user sees their own preference, set in their account.
|
|
824
|
+
- Activity content (the things users create — workflow names, field labels, discussion messages) is whatever the user typed; Hailer doesn't translate user content.
|
|
825
|
+
- If a visitor asks about other languages (German, French, Spanish), be honest: only en/fi/sv are supported today.
|
|
826
|
+
|
|
827
|
+
Notifications model overview (not exhaustive):
|
|
828
|
+
- Native push (iOS/Android apps) — the primary channel for time-sensitive events.
|
|
829
|
+
- In-app notifications — visible inside the Hailer UI on web and mobile.
|
|
830
|
+
- Email — used for invites, password resets, and certain admin-configured workflow events; granular per-user email controls aren't a documented public feature beyond standard unsubscribe.
|
|
831
|
+
- If a visitor asks 'will this spam me?', the honest answer is: push and in-app notifications follow the events that involve them (mentions, balls passed, etc.); email is used sparingly for transactional things.
|
|
832
|
+
|
|
833
|
+
Tone guidance: don't oversell offline. Don't promise translations beyond en/fi/sv. Don't claim email-frequency settings exist unless the visitor mentions them — if they do, recommend they ask the Hailer team directly.
|
|
834
|
+
|
|
835
|
+
### Overview
|
|
836
|
+
|
|
837
|
+
#### What Hailer MCP is and what it does
|
|
838
|
+
|
|
839
|
+
Hailer MCP Server (@hailer/mcp) is a Node.js application that bridges AI assistants with Hailer — a workspace and CRM platform for managing workflows, activities, teams, and apps. It implements the Model Context Protocol (MCP), an open standard that lets AI models (Claude, ChatGPT) call tools on external systems. Think of it as a universal adapter: an AI assistant asks 'list all activities in the Sales pipeline', and the server translates that into the right Hailer API calls and returns structured results.
|
|
840
|
+
|
|
841
|
+
The server exposes 71 tools to any MCP-compatible AI client. Tools cover everything you can do in Hailer: create activities, manage workflows, query data, build apps, and control permissions. The flow is: AI client → HTTP → MCP Server → Socket/REST → Hailer API.
|
|
842
|
+
|
|
843
|
+
#### MCP Server, Bot Client, and Plugin System capabilities
|
|
844
|
+
|
|
845
|
+
Hailer MCP provides three things:
|
|
846
|
+
|
|
847
|
+
1. MCP Server (Primary) — An HTTP server that exposes 71 tools to any MCP-compatible AI client. Tools cover the full surface of Hailer: creating activities, managing workflows, querying data, building apps, and controlling permissions.
|
|
848
|
+
|
|
849
|
+
2. Bot Client (Optional) — Automated AI agents that live inside Hailer discussions. When someone @mentions the bot, it reads the conversation, uses the same 71 tools to gather context, and responds with AI-generated answers.
|
|
850
|
+
|
|
851
|
+
3. Plugin System — Extensible architecture for additional capabilities. Currently includes Vipunen, a Weaviate-based RAG (Retrieval-Augmented Generation) plugin for semantic search over documentation.
|
|
852
|
+
|
|
853
|
+
#### Hailer ecosystem core concepts: workflows, activities, phases, fields
|
|
854
|
+
|
|
855
|
+
To understand Hailer you need to know its key concepts. A Workspace contains everything else:
|
|
856
|
+
|
|
857
|
+
- Workflows — like database tables: 'Projects', 'Tasks', 'Invoices'.
|
|
858
|
+
- Fields — columns on a workflow: 'Title', 'Due Date', 'Assignee'.
|
|
859
|
+
- Phases — stages an activity moves through: 'New' → 'In Progress' → 'Done'.
|
|
860
|
+
- Activities — rows in the workflow: individual records or items.
|
|
861
|
+
- Discussions — chat threads, can be attached to activities.
|
|
862
|
+
- Teams & Groups — organizational units used for permissions.
|
|
863
|
+
- Apps — custom web applications embedded in Hailer.
|
|
864
|
+
- Insights — SQL-like queries for reporting.
|
|
865
|
+
- Users — workspace members with roles.
|
|
866
|
+
|
|
867
|
+
Definitions:
|
|
868
|
+
- Workflow = a structured process (like a Kanban board or database table).
|
|
869
|
+
- Activity = a single item in a workflow (like a task, project, or invoice).
|
|
870
|
+
- Phase = a stage in the workflow lifecycle (like 'Draft' → 'Review' → 'Published').
|
|
871
|
+
- Field = a data point on an activity (like 'Title', 'Due Date', 'Assigned To').
|
|
872
|
+
|
|
873
|
+
#### Hailer MCP technology stack and package
|
|
874
|
+
|
|
875
|
+
Hailer MCP is built with these technologies:
|
|
876
|
+
|
|
877
|
+
- Language: TypeScript 5 (strict mode) for type-safe server code
|
|
878
|
+
- Runtime: Node.js 20
|
|
879
|
+
- HTTP: Express.js
|
|
880
|
+
- Protocol: JSON-RPC 2.0 over Server-Sent Events (SSE) for MCP communication
|
|
881
|
+
- Validation: Zod for input schema validation
|
|
882
|
+
- Hailer API: @hailer/cli (socket.io) for backend communication
|
|
883
|
+
- AI: Anthropic Claude SDK and OpenAI SDK for the bot client
|
|
884
|
+
- RAG: Weaviate for vector search via the Vipunen plugin
|
|
885
|
+
- Build: TypeScript compiler (tsc)
|
|
886
|
+
- Deploy: Docker (multi-platform images)
|
|
887
|
+
|
|
888
|
+
The package is published to the public npm registry as @hailer/mcp. Install or run it with:
|
|
889
|
+
|
|
890
|
+
npx @hailer/mcp --port 3030
|
|
891
|
+
|
|
892
|
+
It also installs as a global CLI command 'hailer-mcp'.
|
|
893
|
+
|
|
894
|
+
### overview-presentation
|
|
895
|
+
|
|
896
|
+
#### The Hailer overview presentation — what the in-demo slide deck covers
|
|
897
|
+
|
|
898
|
+
The Hailer demo page (the interactive mock workspace at /demo) ships with a spatial slide presentation that introduces Hailer's story. It opens as a fullscreen overlay above the mock UI — launched by clicking the 'Tour' button in the top-right of the demo topbar, or by the bot emitting a <bot-action type="presentation" target="open" /> tag. ESC closes it; arrow keys / Space / PgUp / PgDn step through slides; mouse wheel zooms; click-drag pans; 0–9 jumps to a percentage of the deck.
|
|
899
|
+
|
|
900
|
+
The deck has 15 slides arranged in three rows on a Prezi-style canvas — the camera flies between them. It is NOT the interactive demo (clickable kanban, table, discussions, etc.). The presentation is a narrative; the demo is a sandbox. Offer the presentation when the visitor wants the conceptual map; offer the demo tour (navigate + point chain) when they want to see the product in use.
|
|
901
|
+
|
|
902
|
+
Slides — each line is \`slide-id — title — what it covers\`. Bot can reference any slide inline via <bot-action type="slide" target="{slide-id}" />, which renders a clickable chip in the chat that opens the deck on that exact slide:
|
|
903
|
+
- \`title\` — 'Hailer / Where work flows' — the opening cover.
|
|
904
|
+
- \`what\` — Hailer is a workspace platform for structured work + team chat in one.
|
|
905
|
+
- \`problem\` — Trackers and chat live apart; context dies in translation.
|
|
906
|
+
- \`core-label\` — section divider: Core concepts.
|
|
907
|
+
- \`workspaces\` — Multi-tenant homes; SSO; per-workspace AI agents.
|
|
908
|
+
- \`workflows\` — Phases, fields, automations, permissions — the configurable process.
|
|
909
|
+
- \`activities\` — Work items moving through phases; ball tracking; audit history.
|
|
910
|
+
- \`discussions\` — Built-in chat per activity; real-time; bots and AI participants.
|
|
911
|
+
- \`build-label\` — section divider: Build & extend.
|
|
912
|
+
- \`apps-studio\` — Hailer Studio (cloud SDK editor for workspace config, with an AI agent) + apps marketplace. (Studio shapes workspace configuration as code; it is NOT an app builder — the Apps SDK and marketplace cover app-building. See the hailer-studio chunk.)
|
|
913
|
+
- \`sdk\` — Workspace config as code; @hailer/sdk on npm.
|
|
914
|
+
- \`sdk-code\` — TypeScript workflow definition example (fields + phases + automation).
|
|
915
|
+
- \`mcp\` — Model Context Protocol surface; @hailer/mcp on npm.
|
|
916
|
+
- \`insights\` — Saved chart/table queries + phase-change automations.
|
|
917
|
+
- \`closer\` — One platform: system of record + team chat under one roof.
|
|
918
|
+
|
|
919
|
+
When to recommend the presentation: visitor asks 'what is Hailer?', 'show me the overview', 'the elevator pitch', 'give me the slides', 'I want to understand the whole thing'. Don't open it on detail questions ('how do permissions work?', 'is there a free trial?') — those get a direct prose answer.
|
|
920
|
+
|
|
921
|
+
When to embed a slide chip inline: the visitor's question maps cleanly to one slide's topic. Answer in prose, drop the chip mid-paragraph where it makes sense, move on. One or two chips per reply max. Don't substitute chips for prose — they're a side door, not the answer.
|
|
922
|
+
|
|
923
|
+
When NOT to use either: as a substitute for the live demo tour. The two surfaces are complementary. The demo tour shows HOW Hailer feels in daily use. The presentation tells the STORY of what Hailer is and how the pieces fit together.
|
|
924
|
+
|
|
925
|
+
### Product Description
|
|
926
|
+
|
|
927
|
+
#### What Hailer is — the cloud platform overview
|
|
928
|
+
|
|
929
|
+
Hailer is a cloud platform designed for process-driven business management and communication. The largest organizational unit in Hailer is the workspace, and there is typically one workspace per customer.
|
|
930
|
+
|
|
931
|
+
A workspace contains the structures the team works in: workflows and datasets that organize activities, discussions for messaging, a feed for company-wide updates, calendars for events, files, users, and teams. Hailer is built around the idea that day-to-day work — sales cases, tasks, projects, support tickets — moves through a structured process the team can configure rather than a fixed product taxonomy.
|
|
932
|
+
|
|
933
|
+
#### Activities, workflows, and datasets
|
|
934
|
+
|
|
935
|
+
Activities form the core of Hailer. They model the structured organizational work — sales cases, tasks, projects — that progresses through a defined process.
|
|
936
|
+
|
|
937
|
+
Activities live inside two related structures:
|
|
938
|
+
|
|
939
|
+
- Workflows are configurable processes. The process owner defines which steps (phases) the workflow consists of, plus what data is collected within the workflow. Activities move from phase to phase as the work progresses.
|
|
940
|
+
|
|
941
|
+
- Datasets share most properties with workflows but disable phase transitions between categories — they're more like a labeled list than a stage-by-stage process. Datasets are useful for reference data (customers, products, equipment) where items don't move between stages.
|
|
942
|
+
|
|
943
|
+
A single workspace can have many workflows and datasets side by side.
|
|
944
|
+
|
|
945
|
+
#### Available field types and advanced field features
|
|
946
|
+
|
|
947
|
+
Each workflow defines what data is captured on its activities. Hailer supports a wide range of field types:
|
|
948
|
+
|
|
949
|
+
- Text, Predefined Options, Text Area
|
|
950
|
+
- Numeric, Numeric with Unit
|
|
951
|
+
- Date, Date Range, Time, Time Range, Date & Time, Date & Time Range
|
|
952
|
+
- Country
|
|
953
|
+
- Activity links, User links, Team links, Linked activities
|
|
954
|
+
- Subheader fields (visual grouping)
|
|
955
|
+
|
|
956
|
+
Activities can also carry location data with coordinates and file attachments.
|
|
957
|
+
|
|
958
|
+
Advanced field capabilities:
|
|
959
|
+
|
|
960
|
+
- All field types can be turned into function fields — calculated fields whose values come from JavaScript-based rules running in sandboxed virtual environments.
|
|
961
|
+
- Fields can be marked mandatory.
|
|
962
|
+
- Phase-specific visibility lets a field show only in certain phases.
|
|
963
|
+
- User- and team-level access restrictions hide fields from users without permission.
|
|
964
|
+
- A PDF document generator produces offers, invoices, packing lists, confirmations, certificates, and reports from activity data.
|
|
965
|
+
|
|
966
|
+
#### Discussions, feed, and calendar
|
|
967
|
+
|
|
968
|
+
Hailer has three communication surfaces:
|
|
969
|
+
|
|
970
|
+
Discussions come in four flavors:
|
|
971
|
+
- Private discussions — direct messages between users who share a workspace.
|
|
972
|
+
- Group discussions — multi-participant chats.
|
|
973
|
+
- Activity discussions — chats linked to a specific activity (task/project/case).
|
|
974
|
+
- Event discussions — chats linked to a calendar event.
|
|
975
|
+
|
|
976
|
+
Feed: every Hailer workspace comes with a feed available to all workspace members, used for organization-wide updates. Hailer also automatically posts to the feed when notable workflow events happen, so the team sees milestones without anyone having to broadcast them manually.
|
|
977
|
+
|
|
978
|
+
Calendar: workspaces support multiple calendars with restricted visibility (per user or team). Each event can have its own discussion thread, so conversation around an event lives next to the event itself.
|
|
979
|
+
|
|
980
|
+
#### Hailer Apps (Beta) and Insights
|
|
981
|
+
|
|
982
|
+
Hailer Apps (Beta) are customized applications that use Hailer as their infrastructure. Apps are built on top of the platform's data model and authentication. New apps are currently available through development inquiry — Hailer's team works with customers to scope and build them.
|
|
983
|
+
|
|
984
|
+
Insights is built on top of Apps. It provides:
|
|
985
|
+
- A SQL query builder for assembling reports from workflow data
|
|
986
|
+
- Pivot tables
|
|
987
|
+
- Visual charts
|
|
988
|
+
- Plain data tables, with the ability to drill into the underlying activities
|
|
989
|
+
|
|
990
|
+
Insights is how teams turn the structured data inside their workflows into dashboards, KPIs, and management reporting.
|
|
991
|
+
|
|
992
|
+
#### Users, teams, and files
|
|
993
|
+
|
|
994
|
+
Users: Hailer accounts are global — once a user has a profile they can participate in multiple workspaces with the same identity. Each workspace has its own attributes for the user (role, team membership, etc.) so a person can be an admin in one workspace and a regular member in another.
|
|
995
|
+
|
|
996
|
+
Teams: workspaces use teams to group users. Team membership drives content visibility — fields, phases, and activities can be restricted to specific teams so members only see what's relevant to their role.
|
|
997
|
+
|
|
998
|
+
Files: Hailer has an inbuilt file management system to make it easy to store, track, find, and share files. Files can be attached to activities, posted in discussions, or uploaded to the feed, and they're searchable across the workspace.
|
|
999
|
+
|
|
1000
|
+
#### API, platform support, and technology stack
|
|
1001
|
+
|
|
1002
|
+
API: Hailer exposes an HTTP REST API. Requests use JSON, and authentication is via username/password credentials.
|
|
1003
|
+
|
|
1004
|
+
Platform support: the fully responsive Hailer web application is supported on Chrome, Firefox, Safari, and Edge. Native iOS (13+) and Android applications are also available. The iOS app includes additional field-operations capabilities for users working off-site.
|
|
1005
|
+
|
|
1006
|
+
Technology stack:
|
|
1007
|
+
- Frontend: Angular
|
|
1008
|
+
- iOS: Swift (native)
|
|
1009
|
+
- Android: web-based wrapper
|
|
1010
|
+
- Backend: Node.js
|
|
1011
|
+
- Database: MongoDB
|
|
1012
|
+
- Language: TypeScript across the stack
|
|
1013
|
+
- Infrastructure: AWS
|
|
1014
|
+
|
|
1015
|
+
### sso-and-admin-controls
|
|
1016
|
+
|
|
1017
|
+
#### SSO, login methods, and workspace-admin controls (audit, biometric, bulk invite)
|
|
1018
|
+
|
|
1019
|
+
Hailer supports the following login methods and admin controls. Anything below is shipping today; describe them honestly, don't add features that aren't here.
|
|
1020
|
+
|
|
1021
|
+
Single sign-on:
|
|
1022
|
+
- Microsoft Entra ID (Azure AD) login is supported via a dedicated route: \`/#/entralogin/{clientId}/{tenantId}\`. The workspace's IT admin provides the Entra app's client and tenant IDs; users authenticate against Microsoft and are then signed into Hailer. This is the SSO answer for organisations on the Microsoft stack.
|
|
1023
|
+
- Username + password is the default login.
|
|
1024
|
+
- There is NO first-party SAML or generic OIDC provider beyond Entra at this time. If a visitor asks about Okta, OneLogin, Auth0, or 'plain SAML', be honest: the supported enterprise SSO today is Microsoft Entra. The Hailer team can be contacted for other identity provider questions.
|
|
1025
|
+
|
|
1026
|
+
Biometric / local-auth lock:
|
|
1027
|
+
- Workspace admins can enable a 'Force local auth' setting that requires users on iOS/Android to unlock the app with their device biometrics (Face ID, Touch ID, fingerprint) or PIN on every launch. Useful for shared devices or high-security workflows.
|
|
1028
|
+
|
|
1029
|
+
Audit log:
|
|
1030
|
+
- Workspace admins have access to an audit log in workspace settings that records operations with the user, timestamp, IP address, request/response details, and success/failure status. Use it for compliance reviews or to investigate unexpected changes.
|
|
1031
|
+
|
|
1032
|
+
Bulk user invitation via Excel:
|
|
1033
|
+
- Admins can invite many users at once by uploading an Excel file from workspace settings. The template supports user details, team assignment, role, and a notes column. This is separate from the per-activity Excel import (\`v3.activity.import\`); both surfaces exist but they import different things.
|
|
1034
|
+
|
|
1035
|
+
Data residency / hosting location:
|
|
1036
|
+
- All Hailer infrastructure runs in AWS region eu-west-1, located in Ireland. The MongoDB database is in the same region. Every workspace's data resides in the EU (Ireland) by default.
|
|
1037
|
+
- There is currently NO option to choose a different region or pin a workspace to another location — it's eu-west-1 for all customers. If a visitor needs US, APAC, or in-country hosting, be honest: that isn't offered today, and they should contact the Hailer team to discuss requirements.
|
|
1038
|
+
- This is good news for EU/GDPR data-residency questions: 'your data stays in the EU — specifically AWS in Ireland.' It's a limitation for anyone who requires data to live outside the EU.
|
|
1039
|
+
|
|
1040
|
+
What to tell different visitors:
|
|
1041
|
+
- IT / admin asking about SSO: 'Microsoft Entra ID is the supported SSO today. The login URL pattern is \`/#/entralogin/{clientId}/{tenantId}\`. SAML / Okta / other IdPs aren't first-party today — reach out to Hailer if that's a requirement.'
|
|
1042
|
+
- IT asking about audit + access reviews: 'Yes, workspace admins have an audit log under settings; it records user actions with IP and timestamp.'
|
|
1043
|
+
- IT / admin asking about data residency or 'where is our data hosted?': 'Everything runs on AWS in the EU — region eu-west-1, in Ireland — including the database. There's no region-selection option today; all workspaces are hosted there. If you need hosting outside the EU, that's a conversation with the Hailer team.'
|
|
1044
|
+
- Operations / decision-maker asking about onboarding many users: 'You can invite users one at a time or upload an Excel of users in settings.'
|
|
1045
|
+
- End user asking about device security: 'On mobile, your workspace admin may require Face ID/Touch ID to open the app — that's the Force-local-auth setting.'
|
|
1046
|
+
|
|
1047
|
+
### UI Guide
|
|
1048
|
+
|
|
1049
|
+
#### Hailer main layout: three-column structure with left nav, content, and sidenav
|
|
1050
|
+
|
|
1051
|
+
Hailer uses a three-column layout. On desktop screens (wider than 600px) the layout is:
|
|
1052
|
+
|
|
1053
|
+
- Left sidebar: a 56-pixel vertical icon menu, always visible.
|
|
1054
|
+
- Main content: fills the remaining horizontal space; this is where workflow boards, lists, and pages render via the Angular router-outlet.
|
|
1055
|
+
- Right sidenav: a 400-pixel panel that opens when you click an activity or discussion to show its details.
|
|
1056
|
+
|
|
1057
|
+
On mobile (600px and below) the layout collapses:
|
|
1058
|
+
- A top toolbar appears.
|
|
1059
|
+
- The sidenav becomes full screen (100vw) when opened.
|
|
1060
|
+
- A bottom navigation bar replaces the left sidebar.
|
|
1061
|
+
|
|
1062
|
+
This structure stays consistent across the entire application — once a user understands it, they can navigate any section.
|
|
1063
|
+
|
|
1064
|
+
#### Left navigation menu — icons and what each section does
|
|
1065
|
+
|
|
1066
|
+
The left navigation is a vertical icon menu always visible on desktop. From top to bottom:
|
|
1067
|
+
|
|
1068
|
+
1. Discussions — chat and team discussions.
|
|
1069
|
+
2. Feed — activity feed and updates.
|
|
1070
|
+
3. Calendar — events and schedules.
|
|
1071
|
+
4. Activities — workflows and kanban boards.
|
|
1072
|
+
5. Apps — custom applications.
|
|
1073
|
+
6. People — user directory.
|
|
1074
|
+
|
|
1075
|
+
At the bottom:
|
|
1076
|
+
- Settings — workspace settings (admins only; regular users do not see this).
|
|
1077
|
+
- User profile — opens a menu with profile settings, language selection, dark/light mode toggle, and logout.
|
|
1078
|
+
|
|
1079
|
+
When guiding someone, refer to icons by position. Example phrasing: 'Click the Activities icon in the left menu — it's the 4th icon from the top, and looks like a kanban board.'
|
|
1080
|
+
|
|
1081
|
+
#### Activities section: workflow list, kanban view, view modes, and actions
|
|
1082
|
+
|
|
1083
|
+
When the user navigates to /activities they see the workflow list view: every workflow they have access to appears as a card with a name and an icon. Clicking a card opens that workflow.
|
|
1084
|
+
|
|
1085
|
+
The default workflow view is Kanban (URL pattern: /activities/{workflowId}). Phases are columns, activities are cards inside columns. View modes can be toggled in the top-right:
|
|
1086
|
+
- Kanban — cards in columns by phase (default).
|
|
1087
|
+
- Table — list view with sortable columns.
|
|
1088
|
+
- Calendar — timeline/calendar view.
|
|
1089
|
+
- Map — location-based view (only when enabled for the workflow).
|
|
1090
|
+
|
|
1091
|
+
Primary actions in the workflow view:
|
|
1092
|
+
- Create activity: click the [+ Add] button in the top-right, or click empty space inside any phase column.
|
|
1093
|
+
- Open activity: click any card — it opens the activity detail in the right sidenav.
|
|
1094
|
+
- Move activity: drag a card to another phase column, OR open the card and use the phase selector in the header.
|
|
1095
|
+
- Filter: use the search bar or filter controls at the top.
|
|
1096
|
+
|
|
1097
|
+
#### Activity sidenav: tabs, modes, and control buttons in the right panel
|
|
1098
|
+
|
|
1099
|
+
The activity sidenav opens when you click an activity card. It is 400 pixels wide on desktop and full-screen on mobile.
|
|
1100
|
+
|
|
1101
|
+
Header section shows: activity name (large text), workspace badge (colored tag), workflow badge (clickable — navigates to the workflow), a copy-tag button (mentions the activity in discussions), and a call button when video calls are enabled.
|
|
1102
|
+
|
|
1103
|
+
A tab bar of icons sits below the header:
|
|
1104
|
+
1. Detail — main fields and info.
|
|
1105
|
+
2. Participants — followers, with a badge count.
|
|
1106
|
+
3. Discussion — activity chat with an unread count badge.
|
|
1107
|
+
4. Files — attachments with a count badge.
|
|
1108
|
+
5. Location — map view (when enabled).
|
|
1109
|
+
6. Linked — related activities with a count.
|
|
1110
|
+
7. Options — activity settings (when permitted).
|
|
1111
|
+
|
|
1112
|
+
Three modes determine what the user sees:
|
|
1113
|
+
- View mode: read-only display.
|
|
1114
|
+
- Edit mode: fields become editable; Cancel and Save buttons appear at the bottom.
|
|
1115
|
+
- Create mode: empty form for a new activity.
|
|
1116
|
+
|
|
1117
|
+
The control buttons at the bottom (visible in edit and create modes) are Cancel (discard changes) and Save (with checkmark icon).
|
|
1118
|
+
|
|
1119
|
+
#### How to move activities between phases
|
|
1120
|
+
|
|
1121
|
+
Activities can move between phases two ways:
|
|
1122
|
+
|
|
1123
|
+
Method 1 — Drag and Drop in Kanban view:
|
|
1124
|
+
Drag the card from its current phase column and drop it in the target phase column. Best for quick rearrangements when you can see both columns.
|
|
1125
|
+
|
|
1126
|
+
Method 2 — Phase selector in the activity sidenav:
|
|
1127
|
+
Open the activity to expose the phase dropdown near the top of the sidenav, then select the target phase. Best when phases are off-screen, you're already inside the activity, or many fields need to change at once.
|
|
1128
|
+
|
|
1129
|
+
Phases are displayed left-to-right in the order defined by the workflow. The first phase is the leftmost column (typically 'New' or 'Draft'). The last phase is the rightmost column (typically 'Done' or 'Archived').
|
|
1130
|
+
|
|
1131
|
+
#### Discussions section: list, threads, and activity-linked chats
|
|
1132
|
+
|
|
1133
|
+
The Discussions section is at /discussions.
|
|
1134
|
+
|
|
1135
|
+
Discussion list view shows every discussion the user is part of. Unread message counts appear as badges on each item. A search bar at the top lets users filter by name or content.
|
|
1136
|
+
|
|
1137
|
+
Discussion view layout:
|
|
1138
|
+
- Message list shown chronologically.
|
|
1139
|
+
- Input field at the bottom for typing messages.
|
|
1140
|
+
- File attachment button (paperclip icon).
|
|
1141
|
+
- Emoji picker.
|
|
1142
|
+
- @mention support — typing @ surfaces a user picker.
|
|
1143
|
+
|
|
1144
|
+
Activity discussions are a special case: an activity can have its own attached discussion. To access it, open the activity sidenav and click the Discussion tab (3rd tab, speech-bubble icon). Users must Join the discussion before they can see and post messages — this is by design so people don't auto-subscribe to every activity's chat.
|
|
1145
|
+
|
|
1146
|
+
#### Common Hailer UI patterns: buttons, cards, badges, tooltips, colors
|
|
1147
|
+
|
|
1148
|
+
Common patterns repeat across Hailer's interface:
|
|
1149
|
+
|
|
1150
|
+
Buttons:
|
|
1151
|
+
- Primary action: blue filled button (e.g., Save, Create).
|
|
1152
|
+
- Secondary action: outlined button (e.g., Cancel).
|
|
1153
|
+
- Icon buttons: small circular buttons with icons.
|
|
1154
|
+
|
|
1155
|
+
Cards:
|
|
1156
|
+
- White background in light mode, dark gray in dark mode.
|
|
1157
|
+
- Rounded corners with a subtle shadow.
|
|
1158
|
+
- Click to select or open.
|
|
1159
|
+
|
|
1160
|
+
Badges:
|
|
1161
|
+
- Small colored pills showing counts or status.
|
|
1162
|
+
- Red badge: requires attention.
|
|
1163
|
+
- Gray badge: informational.
|
|
1164
|
+
|
|
1165
|
+
Tooltips:
|
|
1166
|
+
- Hover over an icon button to see its label. This is the fastest way to understand an unclear icon.
|
|
1167
|
+
|
|
1168
|
+
Color coding:
|
|
1169
|
+
- Phases have assigned colors (visible as the column accent in kanban).
|
|
1170
|
+
- Workflow badges use the workflow's own color.
|
|
1171
|
+
- Workspace badges use the workspace's color.
|
|
1172
|
+
|
|
1173
|
+
#### Common Hailer user issues and how to resolve them
|
|
1174
|
+
|
|
1175
|
+
Common issues and what they usually mean:
|
|
1176
|
+
|
|
1177
|
+
'I can't see the workflow' — the user probably lacks permission to that workflow. An admin needs to grant access in the workflow's permissions settings.
|
|
1178
|
+
|
|
1179
|
+
'I can't edit this activity' — the user does not have edit permission for this phase. Some phases are read-only for certain roles.
|
|
1180
|
+
|
|
1181
|
+
'I can't move the card' — phase transitions may be restricted by the workflow's configuration. Check the workflow settings to see which transitions are allowed.
|
|
1182
|
+
|
|
1183
|
+
'Where are my discussions?' — the user must be a member of a discussion to see it. Check the Discussions section in the left menu. For activity-linked discussions, the user must Join the discussion first via the activity's Discussion tab.
|
|
1184
|
+
|
|
1185
|
+
'I can't see Settings' — Settings is admin-only. Regular (non-admin) users do not see this menu item; this is by design.
|
|
1186
|
+
|
|
1187
|
+
### use-case-contract-management
|
|
1188
|
+
|
|
1189
|
+
#### Use case — contract management on Hailer with e-signature integration
|
|
1190
|
+
|
|
1191
|
+
Contract management is a common use case Hailer is well-shaped for. A legal team handles many contracts every week — NDAs, supplier agreements, employment contracts, letters of representation, partnership agreements. Without a system, these tend to live across Word documents, email threads, shared folders, and tracking spreadsheets. Versions get lost, the wrong draft gets signed, and nobody knows what's pending or about to expire. The Hailer pattern below addresses that.
|
|
1192
|
+
|
|
1193
|
+
The pattern — a 'Contracts' workflow with four phases:
|
|
1194
|
+
- Draft — the lawyer is writing the contract or revising it after counterparty feedback.
|
|
1195
|
+
- Negotiation — the draft has been shared with the counterparty and they're proposing changes (back and forth as needed).
|
|
1196
|
+
- Ready to sign — both sides have agreed on the final version; awaiting signatures.
|
|
1197
|
+
- Signed — fully executed; the signed PDF and metadata are stored on the activity.
|
|
1198
|
+
|
|
1199
|
+
Fields commonly added to the contract activity:
|
|
1200
|
+
- Contract type (NDA, supplier agreement, employment, etc.) as a dropdown.
|
|
1201
|
+
- Counterparty name and country (a link to a 'Companies' dataset if the team tracks counterparties).
|
|
1202
|
+
- Effective date and expiry date — drives the calendar view and the 'expiring soon' alerts.
|
|
1203
|
+
- Owner — the responsible lawyer.
|
|
1204
|
+
- Version number — incremented each time the draft is revised.
|
|
1205
|
+
- The current draft (file attachment) and, once executed, the signed PDF.
|
|
1206
|
+
- Notes / risk flags as a text-area field.
|
|
1207
|
+
|
|
1208
|
+
E-signature integration — the editing/signing separation:
|
|
1209
|
+
- Editing and signing are two separate stages. Hailer hosts the editing and negotiation; an external e-signature service handles the final signing.
|
|
1210
|
+
- All draft revisions happen inside Hailer in the Draft or Negotiation phase. The counterparty's comments come in by email or via a shared Hailer discussion; the lawyer brings the changes into the next version. Each version is saved on the activity, so the negotiation has a full audit trail.
|
|
1211
|
+
- Only the final, agreed PDF is sent for signature. The activity moves to 'Ready to sign' when the lawyer clicks the equivalent of 'send for signing'.
|
|
1212
|
+
- When signatures complete, the signed PDF is returned to Hailer automatically and the activity advances to 'Signed'.
|
|
1213
|
+
- Hailer can integrate with e-signature services through its REST API, webhooks, and Zapier integration. The supported services depend on what's available in the customer's region — in particular, e-signature providers vary by country because of differing legal-validity rules (e.g. providers that work with national bank IDs). For specific integrations the in-workspace Helper or the Hailer team can confirm the current options.
|
|
1214
|
+
- Counterparties do not need a Hailer account to participate. They receive a signing link by email, click 'Sign' in their browser, and the signature flows back into Hailer. No account creation, no software install on their side.
|
|
1215
|
+
|
|
1216
|
+
The old way vs the new way:
|
|
1217
|
+
- OLD: Lawyer writes the contract in Word → emails it to the other party → the other party prints, signs, scans, emails back → someone saves it in a folder → someone updates a spreadsheet → next month nobody remembers where it is or when it expires.
|
|
1218
|
+
- NEW (Hailer + e-signature integration): Lawyer drafts the contract inside Hailer → revises through the Draft/Negotiation phases as needed → clicks 'Send for signing' when both sides agree → signing happens online, signed PDF returns to Hailer automatically → status is always visible (Draft, Negotiation, Ready to sign, Signed, Expiring soon) → calendar and feed surface upcoming expiries automatically.
|
|
1219
|
+
|
|
1220
|
+
What the customer gets:
|
|
1221
|
+
- Time saved per contract — no printing, no scanning, no chasing people for wet signatures.
|
|
1222
|
+
- One place for every contract — nothing gets lost in email threads or shared folders.
|
|
1223
|
+
- Always-visible status — who has signed, who hasn't, what's overdue, what expires soon.
|
|
1224
|
+
- Cross-border signing — counterparties without a national e-ID can still sign through e-signature providers that support international flows.
|
|
1225
|
+
- Legal proof — every signature is timestamped, and the negotiation history lives on the contract activity for audit purposes.
|
|
1226
|
+
- Automatic reminders — Hailer can trigger feed posts or calendar alerts when a contract is about to expire or has been waiting for a signature too long.
|
|
1227
|
+
|
|
1228
|
+
Who this pattern fits:
|
|
1229
|
+
- Companies handling many legal contracts (10+ per month is a useful threshold).
|
|
1230
|
+
- Small legal teams spending disproportionate time on administrative tracking.
|
|
1231
|
+
- Organisations working with international partners where signatures cross borders.
|
|
1232
|
+
- Industries with heavy contract volume — law firms, construction and real estate, HR-heavy organisations (employment contracts, NDAs), consulting firms, property management, manufacturers with supplier networks, any business with a mix of domestic and foreign partners.
|
|
1233
|
+
- Teams that need a clear audit trail for compliance reviews.
|
|
1234
|
+
|
|
1235
|
+
When a visitor describes contract chaos — 'we lose versions', 'I never know what's pending', 'half my week is chasing signatures' — translate this pattern back into their words. Lead with the pain ('versions getting lost', 'signatures across countries', 'no audit trail') and describe how the Hailer + e-signature flow addresses it before naming Hailer terms like phase, activity, dataset.
|
|
1236
|
+
|
|
1237
|
+
If a visitor wants advanced collaborative editing inside Hailer (track-changes, real-time co-editing of the contract document itself), be honest: today the pattern relies on revising the draft activity-by-activity in the Draft phase, with the document attached as a file. For organisations that do very heavy in-document negotiation, that's a future-roadmap conversation rather than a shipped feature today.
|
|
1238
|
+
|
|
1239
|
+
### value-propositions
|
|
1240
|
+
|
|
1241
|
+
#### Why Hailer — the seven benefits to translate from
|
|
1242
|
+
|
|
1243
|
+
When a visitor describes their current setup and the pain points in it, these are the seven angles Hailer's value tends to land on. Use them as the translation targets when answering 'how would this work for us?' — pick the one or two that match their pain, never all seven.
|
|
1244
|
+
|
|
1245
|
+
Modular — building blocks, not a fixed product.
|
|
1246
|
+
- Workflows, datasets, fields, phases, discussions, calendars, and apps are independent pieces a team assembles.
|
|
1247
|
+
- A 'CRM' is just a sales-pipeline workflow plus a customer dataset. A 'project tracker' is a project workflow plus a task workflow. A 'helpdesk' is a ticket workflow plus a customer dataset plus public forms.
|
|
1248
|
+
- You don't buy a CRM module and a PM module separately and bolt them together. You compose the pieces that fit, and you add more pieces as the team grows.
|
|
1249
|
+
- Translation example: someone running a small consultancy hears 'modular' as 'I'd have a deals pipeline, a project tracker, and a client list as three pieces that already know about each other — not three apps I have to reconcile'.
|
|
1250
|
+
|
|
1251
|
+
Cost saving — one platform replaces the stack of single-purpose tools.
|
|
1252
|
+
- The teams who get the most from Hailer were running 3–5 tools before: a CRM, a project tracker, a ticketing system, a chat app, maybe a doc generator on top.
|
|
1253
|
+
- Hailer is one subscription with one auth, one permission model, one data model, doing all of it. Total cost ends up lower than the per-seat sum of the individual tools, especially as headcount grows.
|
|
1254
|
+
- Translation example: 'instead of paying for HubSpot + Asana + Intercom + Slack + a PDF tool, your team works in one place and the bill is one line item.' (When talking to a visitor, name their pain — 'the stack you're paying for today' — instead of naming the competitors.)
|
|
1255
|
+
|
|
1256
|
+
Time saving — no re-keying, no swivel-chair, context-with-the-work.
|
|
1257
|
+
- Customer info lives once, as structured fields, and every related deal, project, ticket, or invoice references it.
|
|
1258
|
+
- Conversations attach to the record they're about, so handoffs don't lose context — sales-to-delivery, support-to-engineering, ops-to-finance.
|
|
1259
|
+
- Phase changes show up in the feed automatically; status updates write themselves.
|
|
1260
|
+
- The time savings come from removing seams, not from being faster at any one thing.
|
|
1261
|
+
- Translation example: 'when a deal moves to "won", everyone watching it sees the move and the conversation history is right there on the deal — nobody has to re-summarize the deal in the project channel.'
|
|
1262
|
+
|
|
1263
|
+
Customizable apps — every workspace can extend itself.
|
|
1264
|
+
- The Apps SDK (React, Svelte, vanilla JS) lets teams build their own surfaces on top of their data — dashboards, kiosks, customer portals, public forms, anything. (Hailer Studio is a separate surface — a cloud SDK editor for workspace configuration, not an app builder; don't conflate the two.)
|
|
1265
|
+
- The in-workspace Helper bot can scaffold an app on request, so non-engineers can describe what they need and get a starting point.
|
|
1266
|
+
- If the off-the-shelf workflow shape doesn't quite fit the team's process, the workspace grows new surfaces to match. The platform bends to the team, not the other way around.
|
|
1267
|
+
- Translation example: 'if your field techs need a phone-friendly intake form their customers can fill in, that's a public form on your job workflow — you don't go shop for a SaaS form builder.'
|
|
1268
|
+
|
|
1269
|
+
Still just a chat — discussions are the spine.
|
|
1270
|
+
- Everything in Hailer ties back to a conversation. Activities have discussions. Calendar events have discussions. The AI Helper bot lives in a discussion.
|
|
1271
|
+
- Teams trying Hailer find the learning curve gentle because the dominant interaction is still 'send a message' — the structured-work side is where the chat output gets organized, not a separate paradigm.
|
|
1272
|
+
- This matters for adoption: the people on the team who only ever want to chat can stay in chat; the people who want to track structure see the structure; everyone is in the same workspace.
|
|
1273
|
+
- Translation example: 'for the half of your team that just wants to talk things through, Hailer feels like a chat app — the kanban board is for the other half, but they're both looking at the same deals.'
|
|
1274
|
+
|
|
1275
|
+
Works across the team and beyond it — not just one business function, and not strictly business at all.
|
|
1276
|
+
- Hailer's data model is flexible enough to hold a sales pipeline and a household maintenance log; a hobby club's event list and a freelancer's invoicing; a charity's volunteer roster and a school's parent-communications log.
|
|
1277
|
+
- Personal / hobby / non-commercial use of the free workspace is explicitly permitted by Hailer's TOS. A real example: a board-game club uses Hailer to maintain their internal documentation and a list of currently-active members. Other communities have used Hailer the same way for training programs, conference logistics, family-business operations, equipment registers, asset tracking.
|
|
1278
|
+
- The platform doesn't prescribe a business shape — it gives you the building blocks, and the same workspace can hold multiple unrelated workflows for the same team.
|
|
1279
|
+
- Translation example (mixed team): 'the same workspace your sales team lives in can also hold the engineering team's release calendar and HR's onboarding tracker — you're not buying separate tools for each function.'
|
|
1280
|
+
- Translation example (personal / community): 'if you're running a club or volunteer group, the same building blocks work — your member list is a dataset, your events are a workflow with phases like planned, confirmed, ran, retrospective. The free tier covers it for small groups; pay-as-you-go tokens only enter the picture if you start using AI features or heavy calculated fields.'
|
|
1281
|
+
|
|
1282
|
+
Your system = your code — workspace as code via the SDK.
|
|
1283
|
+
- With @hailer/sdk on npm, a workspace's full configuration (workflows, fields, phases, teams, groups, insights, function fields) is just TypeScript files in a git repo.
|
|
1284
|
+
- Version it, diff it, code-review it, branch it, automate it. For engineering-led teams this turns workspace evolution from 'someone clicks around in settings' into a normal development loop with PRs and history.
|
|
1285
|
+
- Combined with @hailer/mcp it means AI assistants like Claude Code can read and modify workspace structure directly — describe a change in chat, the AI proposes the SDK edit, you review and push.
|
|
1286
|
+
- Translation example (developer-leaning visitor): 'when your ops manager asks for a new field on the deal workflow, that's a one-line edit in the workspace repo, code-reviewed and pushed like any other change. The workspace is configuration as code.'
|
|
1287
|
+
|
|
1288
|
+
How to use these in the chat:
|
|
1289
|
+
- After the visitor has described their current setup and pain points, pick ONE or TWO of these benefits that match what they said. Never list all seven; that's a brochure, not a conversation.
|
|
1290
|
+
- Translate the benefit into the visitor's words and concrete examples. If they named tools, name the seams between those tools; if they named a workflow ('our intake process'), name the Hailer shape ('a workflow with intake → review → action → done phases') in that language.
|
|
1291
|
+
- Lead with the benefit's effect ('you stop re-keying client info') before naming the underlying capability ('referenced fields between a deal workflow and a client dataset').
|
|
1292
|
+
- Don't oversell. If a visitor has a small simple need, 'modular building blocks' is overkill — just say 'you'd model it as one workflow with three phases' and move on. The benefits are a vocabulary for fit, not a checklist to recite.
|
|
1293
|
+
|
|
1294
|
+
### workflow-vs-dataset
|
|
1295
|
+
|
|
1296
|
+
#### Workflow vs Dataset — which one to use
|
|
1297
|
+
|
|
1298
|
+
Hailer has two related structures that both hold activities: workflows and datasets. They share most properties (fields, permissions, views, public forms, calendar entries) but differ in how phases work. Picking the right one is one of the first questions when modelling a use case.
|
|
1299
|
+
|
|
1300
|
+
Use a WORKFLOW when:
|
|
1301
|
+
- The records have a lifecycle with stages — leads become qualified, qualified become proposals, proposals become won/lost.
|
|
1302
|
+
- The activity moves through ordered phases as the work progresses.
|
|
1303
|
+
- Phase changes are meaningful events (you want them in the feed, want to trigger automations, want reports of how long activities spent in each stage).
|
|
1304
|
+
- Examples: sales pipelines, recruitment funnels, project trackers, support tickets, onboarding processes, deal management, incident response, change-management approvals.
|
|
1305
|
+
|
|
1306
|
+
Use a DATASET when:
|
|
1307
|
+
- The records are reference data or a catalog — they have categories but don't 'flow' through them.
|
|
1308
|
+
- An item doesn't progress from one state to another; it either stays in its category permanently or moves only as an admin correction.
|
|
1309
|
+
- Phase changes are not meaningful events on their own — categories function more like tags than stages.
|
|
1310
|
+
- Examples: customer lists, product catalogs, equipment registers, vendor lists, location lists, employee directories, contact lists, asset inventories, price lists, knowledge-base entries, FAQ items.
|
|
1311
|
+
|
|
1312
|
+
Decision questions to ask when a user describes a use case:
|
|
1313
|
+
1. Does this thing have a beginning, middle, and end? (workflow if yes; dataset if no)
|
|
1314
|
+
2. Would the team expect to see a kanban view of these moving through stages? (workflow)
|
|
1315
|
+
3. Or do they mostly want a sortable, filterable list to look things up in? (dataset)
|
|
1316
|
+
4. Is the same item likely to stay in one state for months or years? (dataset)
|
|
1317
|
+
5. Is the same item likely to move between states within days or weeks? (workflow)
|
|
1318
|
+
|
|
1319
|
+
Mixed cases — when a user says 'customer list':
|
|
1320
|
+
- A pure customer list (names, contact info, segment) is a DATASET.
|
|
1321
|
+
- A list of customers with sales activity that progresses (active prospects, current customers, churned, won-back) is closer to a workflow with phases for those stages. Ask what they actually need before committing.
|
|
1322
|
+
|
|
1323
|
+
Mixed cases — when a user says 'projects':
|
|
1324
|
+
- Active projects that move from planning → execution → review → done are a WORKFLOW.
|
|
1325
|
+
- A reference list of completed projects for portfolio display is a DATASET.
|
|
1326
|
+
|
|
1327
|
+
When unclear, default to a workflow with a small number of phases — it's the more general structure. Datasets can be thought of as 'workflows whose phases are categories, not stages'. You can later split a dataset off from a workflow if the use case clarifies.
|
|
1328
|
+
|
|
1329
|
+
The Helper bot inside a Hailer workspace should make this distinction explicitly when a user asks for something modelled. If the user says 'make a customer list', the Helper should reply 'I'll set this up as a dataset — a labelled list rather than a stage-by-stage process — does that match what you have in mind?' rather than silently building a phase-rich workflow.
|
|
1330
|
+
|
|
1331
|
+
Technical detail (developer-archetype question): in Hailer's data model, a dataset is a workflow with the boolean flag \`enableUnlinkedMode\` set to \`true\`. The same backing entity backs both — datasets are workflows in unlinked mode. Effects of setting the flag:
|
|
1332
|
+
- The item is listed under 'Datasets' in the UI instead of under 'Workflows'.
|
|
1333
|
+
- Phases on the workflow are not linked together — i.e. the ordered phase transitions that workflows support are disabled, and phases function as labels/categories rather than ordered stages.
|
|
1334
|
+
- Field, permission, public-form, and calendar capabilities work the same as on workflows.
|
|
1335
|
+
|
|
1336
|
+
For developers building against Hailer's API: see the hailer-api workflow schema for the full set of options that flip with the flag. When creating a workflow via @hailer/sdk or the REST API, set \`enableUnlinkedMode: true\` to make it a dataset from the start; flipping the flag on an existing workflow is also supported but changes how its phases behave.
|
|
1337
|
+
`;
|
|
1338
|
+
exports.HAILER_KNOWLEDGE_BYTES = exports.HAILER_KNOWLEDGE_CORPUS.length;
|
|
1339
|
+
//# sourceMappingURL=knowledge.js.map
|