@hailer/mcp 1.3.21 → 1.3.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/.claude/skills/create-and-publish-app/SKILL.md +44 -56
  2. package/.claude/skills/hailer-app-builder/SKILL.md +414 -970
  3. package/.claude/skills/hailer-app-primitives/SKILL.md +742 -0
  4. package/.claude/skills/hailer-apps-pictures/SKILL.md +191 -87
  5. package/.claude/skills/hailer-design-patterns/SKILL.md +317 -0
  6. package/.claude/skills/hailer-design-system/SKILL.md +202 -149
  7. package/.claude/skills/hailer-docs-search/SKILL.md +75 -0
  8. package/.claude/skills/hailer-workflow-archetypes/SKILL.md +301 -0
  9. package/.claude/skills/insight-join-patterns/SKILL.md +313 -0
  10. package/.claude/skills/publish-hailer-app/SKILL.md +211 -0
  11. package/.claude/skills/sdk-activity-patterns/SKILL.md +257 -105
  12. package/.claude/skills/sdk-function-fields/SKILL.md +253 -492
  13. package/.claude/skills/sdk-insight-calculations/SKILL.md +364 -0
  14. package/.claude/skills/sdk-insight-queries/SKILL.md +192 -397
  15. package/.claude/skills/sdk-ws-config-skill/SKILL.md +265 -720
  16. package/.claude/skills/tool-response-verification/SKILL.md +143 -0
  17. package/CLAUDE.md +45 -19
  18. package/dist/bot/bot.d.ts.map +1 -1
  19. package/dist/bot/bot.js +21 -1
  20. package/dist/bot/bot.js.map +1 -1
  21. package/dist/bot/services/helper-prompt.d.ts +1 -1
  22. package/dist/bot/services/helper-prompt.d.ts.map +1 -1
  23. package/dist/bot/services/helper-prompt.js +4 -6
  24. package/dist/bot/services/helper-prompt.js.map +1 -1
  25. package/dist/bot/services/message-formatter.d.ts.map +1 -1
  26. package/dist/bot/services/message-formatter.js +2 -1
  27. package/dist/bot/services/message-formatter.js.map +1 -1
  28. package/dist/bot/services/system-prompt.d.ts.map +1 -1
  29. package/dist/bot/services/system-prompt.js +21 -34
  30. package/dist/bot/services/system-prompt.js.map +1 -1
  31. package/dist/cli.d.ts.map +1 -1
  32. package/dist/cli.js +6 -0
  33. package/dist/cli.js.map +1 -1
  34. package/dist/config.d.ts +1 -0
  35. package/dist/config.d.ts.map +1 -1
  36. package/dist/config.js +5 -0
  37. package/dist/config.js.map +1 -1
  38. package/dist/lib/object-id.d.ts +9 -0
  39. package/dist/lib/object-id.d.ts.map +1 -0
  40. package/dist/lib/object-id.js +15 -0
  41. package/dist/lib/object-id.js.map +1 -0
  42. package/dist/mcp/hailer-rpc.d.ts +3 -0
  43. package/dist/mcp/hailer-rpc.d.ts.map +1 -1
  44. package/dist/mcp/hailer-rpc.js +7 -0
  45. package/dist/mcp/hailer-rpc.js.map +1 -1
  46. package/dist/mcp/tool-profiles.d.ts +1 -0
  47. package/dist/mcp/tool-profiles.d.ts.map +1 -1
  48. package/dist/mcp/tool-profiles.js +21 -4
  49. package/dist/mcp/tool-profiles.js.map +1 -1
  50. package/dist/mcp/tools/aliases.d.ts.map +1 -1
  51. package/dist/mcp/tools/aliases.js +14 -6
  52. package/dist/mcp/tools/aliases.js.map +1 -1
  53. package/dist/mcp/tools/app-core.d.ts.map +1 -1
  54. package/dist/mcp/tools/app-core.js +6 -3
  55. package/dist/mcp/tools/app-core.js.map +1 -1
  56. package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
  57. package/dist/mcp/tools/app-marketplace.js +7 -2
  58. package/dist/mcp/tools/app-marketplace.js.map +1 -1
  59. package/dist/mcp/tools/docs.d.ts +20 -0
  60. package/dist/mcp/tools/docs.d.ts.map +1 -0
  61. package/dist/mcp/tools/docs.js +87 -0
  62. package/dist/mcp/tools/docs.js.map +1 -0
  63. package/dist/mcp/tools/function-fields.d.ts +17 -0
  64. package/dist/mcp/tools/function-fields.d.ts.map +1 -0
  65. package/dist/mcp/tools/function-fields.js +717 -0
  66. package/dist/mcp/tools/function-fields.js.map +1 -0
  67. package/dist/mcp/tools/index.d.ts.map +1 -1
  68. package/dist/mcp/tools/index.js +4 -0
  69. package/dist/mcp/tools/index.js.map +1 -1
  70. package/dist/mcp/tools/workflow.d.ts +0 -1
  71. package/dist/mcp/tools/workflow.d.ts.map +1 -1
  72. package/dist/mcp/tools/workflow.js +1 -190
  73. package/dist/mcp/tools/workflow.js.map +1 -1
  74. package/dist/public-chat/graduate.d.ts +5 -4
  75. package/dist/public-chat/graduate.d.ts.map +1 -1
  76. package/dist/public-chat/graduate.js +226 -76
  77. package/dist/public-chat/graduate.js.map +1 -1
  78. package/dist/public-chat/handler.d.ts.map +1 -1
  79. package/dist/public-chat/handler.js +10 -2
  80. package/dist/public-chat/handler.js.map +1 -1
  81. package/dist/public-chat/index.d.ts.map +1 -1
  82. package/dist/public-chat/index.js +12 -1
  83. package/dist/public-chat/index.js.map +1 -1
  84. package/dist/public-chat/session-store.d.ts +22 -1
  85. package/dist/public-chat/session-store.d.ts.map +1 -1
  86. package/dist/public-chat/session-store.js +56 -2
  87. package/dist/public-chat/session-store.js.map +1 -1
  88. package/dist/public-chat/studio-prewarm.js +1 -1
  89. package/dist/public-chat/studio-prewarm.js.map +1 -1
  90. package/dist/public-chat/system-prompt.d.ts +1 -1
  91. package/dist/public-chat/system-prompt.d.ts.map +1 -1
  92. package/dist/public-chat/system-prompt.js +161 -83
  93. package/dist/public-chat/system-prompt.js.map +1 -1
  94. package/package.json +1 -1
  95. package/.claude/skills/hailer-project-protocol/SKILL.md +0 -398
@@ -14,6 +14,7 @@ exports.PUBLIC_CHAT_AUTHORIZE_ROUTE = exports.PUBLIC_CHAT_HISTORY_ROUTE = export
14
14
  exports.registerPublicChatRoutes = registerPublicChatRoutes;
15
15
  const express_1 = __importDefault(require("express"));
16
16
  const logger_1 = require("../lib/logger");
17
+ const config_1 = require("../config");
17
18
  const handler_1 = require("./handler");
18
19
  const system_prompt_1 = require("./system-prompt");
19
20
  const session_store_1 = require("./session-store");
@@ -27,7 +28,17 @@ exports.PUBLIC_CHAT_HISTORY_ROUTE = '/api/public-chat/history';
27
28
  const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
28
29
  function registerPublicChatRoutes(app, opts) {
29
30
  if (!opts.anthropicApiKey) {
30
- logger.warn(`${exports.PUBLIC_CHAT_ROUTE} disabled ANTHROPIC_API_KEY not set in environment`);
31
+ // A hosted deployment missing the key is a config problem worth a
32
+ // warning; on CLI-run servers (npm run mcp-start) public chat is not
33
+ // a supported feature and the missing key is the norm — keep it out
34
+ // of local dev logs.
35
+ const message = `${exports.PUBLIC_CHAT_ROUTE} disabled — ANTHROPIC_API_KEY not set in environment`;
36
+ if (config_1.environment.HAILER_MCP_CLI) {
37
+ logger.debug(message);
38
+ }
39
+ else {
40
+ logger.warn(message);
41
+ }
31
42
  return false;
32
43
  }
33
44
  app.post(exports.PUBLIC_CHAT_ROUTE, (0, handler_1.createPublicChatHandler)(opts.anthropicApiKey));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/public-chat/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AAmBH,4DA0DC;AA3ED,sDAA8B;AAC9B,0CAA6C;AAC7C,uCAAoD;AACpD,mDAAkD;AAClD,mDAAyD;AACzD,6CAAyC;AACzC,yCAA2F;AAMlF,4GANkC,sCAA2B,OAMlC;AAJpC,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;AAE7C,QAAA,iBAAiB,GAAG,kBAAkB,CAAC;AACvC,QAAA,yBAAyB,GAAG,0BAA0B,CAAC;AAGpE,qEAAqE;AACrE,MAAM,UAAU,GAAG,4EAA4E,CAAC;AAEhG,SAAgB,wBAAwB,CACpC,GAAoB,EACpB,IAA6C;IAE7C,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CACP,GAAG,yBAAiB,sDAAsD,CAC7E,CAAC;QACF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,yBAAiB,EAAE,IAAA,iCAAuB,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAE3E,0EAA0E;IAC1E,wEAAwE;IACxE,8DAA8D;IAC9D,EAAE;IACF,0EAA0E;IAC1E,0EAA0E;IAC1E,oEAAoE;IACpE,0EAA0E;IAC1E,GAAG,CAAC,GAAG,CAAC,iCAAyB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,sEAAsE;QACtE,MAAM,IAAI,GAAG,IAAA,sBAAS,EAAC,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACX,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;YAChD,OAAO;QACX,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACtD,OAAO;QACX,CAAC;QACD,MAAM,KAAK,GAAG,sCAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACrD,OAAO;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,uEAAuE;IACvE,uEAAuE;IACvE,GAAG,CAAC,IAAI,CACJ,sCAA2B,EAC3B,iBAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EACtC,IAAA,2CAAgC,GAAE,CACrC,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;QACzC,IAAI,EAAE,yBAAiB;QACvB,OAAO,EAAE,iCAAyB;QAClC,SAAS,EAAE,sCAA2B;QACtC,cAAc,EAAE,+BAAe;KAClC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/public-chat/index.ts"],"names":[],"mappings":"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"}
@@ -23,12 +23,33 @@ export interface StoredTurn {
23
23
  content: string;
24
24
  at: number;
25
25
  }
26
+ export interface DiscoveryBrief {
27
+ industry?: string;
28
+ job?: string;
29
+ today?: string;
30
+ door?: 'never_built' | 'tried_building' | 'wont_build';
31
+ must_haves?: string;
32
+ }
26
33
  export declare class PublicChatSessionStore {
27
34
  private sessions;
28
35
  /** Append a user/assistant exchange to the session. Creates the session if needed. */
29
36
  append(sessionId: string, userText: string, assistantText: string): void;
30
- /** Returns stored turns for a session, or null if unknown / expired. */
37
+ /**
38
+ * Returns a snapshot of the stored turns for a session, or null if
39
+ * unknown / expired. A copy, not the live array — callers hold the result
40
+ * across async gaps (e.g. the graduation flow), and a concurrent append()
41
+ * must not mutate their view (nor can the >cap reslice in append() leave
42
+ * them pointing at a detached array).
43
+ */
31
44
  get(sessionId: string): StoredTurn[] | null;
45
+ /** Set guide mode for a session. */
46
+ setGuideMode(sessionId: string, guideMode: boolean): void;
47
+ /** Check if a session is in guide mode. */
48
+ isGuideMode(sessionId: string): boolean;
49
+ /** Get the discovery brief for a session. */
50
+ getDiscoveryBrief(sessionId: string): DiscoveryBrief | null;
51
+ /** Parse [brief:field=value] tags from assistant text. */
52
+ private parseBriefTags;
32
53
  /** Removes a session entirely (e.g., visitor clicked Reset). */
33
54
  clear(sessionId: string): void;
34
55
  /** Test/debug helper. */
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/public-chat/session-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAaD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAoC;IAEpD,sFAAsF;IACtF,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAyBxE,wEAAwE;IACxE,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI;IAO3C,gEAAgE;IAChE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI9B,yBAAyB;IACzB,IAAI,IAAI,MAAM;IAId,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,WAAW;CAapB;AAED,+CAA+C;AAC/C,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/public-chat/session-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAoC;IAEpD,sFAAsF;IACtF,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IA8BxE;;;;;;OAMG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI;IAO3C,oCAAoC;IACpC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAOzD,2CAA2C;IAC3C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIvC,6CAA6C;IAC7C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAM3D,0DAA0D;IAC1D,OAAO,CAAC,cAAc;IAgBtB,gEAAgE;IAChE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI9B,yBAAyB;IACzB,IAAI,IAAI,MAAM;IAId,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,WAAW;CAapB;AAED,+CAA+C;AAC/C,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}
@@ -38,6 +38,8 @@ class PublicChatSessionStore {
38
38
  session = {
39
39
  sessionId,
40
40
  turns: [],
41
+ guideMode: false,
42
+ discoveryBrief: {},
41
43
  createdAt: now,
42
44
  updatedAt: now,
43
45
  };
@@ -46,18 +48,70 @@ class PublicChatSessionStore {
46
48
  const now = Date.now();
47
49
  session.turns.push({ role: 'user', content: userText, at: now });
48
50
  session.turns.push({ role: 'assistant', content: assistantText, at: now });
51
+ // Parse <brief> tags from assistant message and update discovery brief
52
+ this.parseBriefTags(session, assistantText);
49
53
  if (session.turns.length > PUBLIC_CHAT_SESSION_MAX_TURNS) {
50
54
  session.turns = session.turns.slice(-PUBLIC_CHAT_SESSION_MAX_TURNS);
51
55
  }
52
56
  session.updatedAt = now;
53
57
  }
54
- /** Returns stored turns for a session, or null if unknown / expired. */
58
+ /**
59
+ * Returns a snapshot of the stored turns for a session, or null if
60
+ * unknown / expired. A copy, not the live array — callers hold the result
61
+ * across async gaps (e.g. the graduation flow), and a concurrent append()
62
+ * must not mutate their view (nor can the >cap reslice in append() leave
63
+ * them pointing at a detached array).
64
+ */
55
65
  get(sessionId) {
56
66
  this.evictExpired();
57
67
  const session = this.sessions.get(sessionId);
58
68
  if (!session)
59
69
  return null;
60
- return session.turns;
70
+ return session.turns.slice();
71
+ }
72
+ /** Set guide mode for a session. */
73
+ setGuideMode(sessionId, guideMode) {
74
+ const session = this.sessions.get(sessionId);
75
+ if (session) {
76
+ session.guideMode = guideMode;
77
+ }
78
+ }
79
+ /** Check if a session is in guide mode. */
80
+ isGuideMode(sessionId) {
81
+ return this.sessions.get(sessionId)?.guideMode ?? false;
82
+ }
83
+ /** Get the discovery brief for a session. */
84
+ getDiscoveryBrief(sessionId) {
85
+ const session = this.sessions.get(sessionId);
86
+ if (!session || Object.keys(session.discoveryBrief).length === 0)
87
+ return null;
88
+ return { ...session.discoveryBrief };
89
+ }
90
+ /** Parse [brief:field=value] tags from assistant text. */
91
+ parseBriefTags(session, text) {
92
+ const regex = /\[brief:(\w+)=([^\]]+)\]/gi;
93
+ let match;
94
+ while ((match = regex.exec(text)) !== null) {
95
+ const field = match[1];
96
+ const value = match[2].trim();
97
+ switch (field) {
98
+ case 'industry':
99
+ session.discoveryBrief.industry = value;
100
+ break;
101
+ case 'job':
102
+ session.discoveryBrief.job = value;
103
+ break;
104
+ case 'today':
105
+ session.discoveryBrief.today = value;
106
+ break;
107
+ case 'door':
108
+ session.discoveryBrief.door = value;
109
+ break;
110
+ case 'must_haves':
111
+ session.discoveryBrief.must_haves = value;
112
+ break;
113
+ }
114
+ }
61
115
  }
62
116
  /** Removes a session entirely (e.g., visitor clicked Reset). */
63
117
  clear(sessionId) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/public-chat/session-store.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAeH,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AACnE,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAC9C,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEzC,MAAa,sBAAsB;IACzB,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEpD,sFAAsF;IACtF,MAAM,CAAC,SAAiB,EAAE,QAAgB,EAAE,aAAqB;QAC/D,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,gCAAgC,EAAE,CAAC;gBAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,OAAO,GAAG;gBACR,SAAS;gBACT,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;aACf,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3E,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,6BAA6B,EAAE,CAAC;YACzD,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,6BAA6B,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;IAC1B,CAAC;IAED,wEAAwE;IACxE,GAAG,CAAC,SAAiB;QACnB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,OAAO,CAAC,KAAK,CAAC;IACvB,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,SAAiB;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,yBAAyB;IACzB,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAEO,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,0BAA0B,EAAE,CAAC;gBACnD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,IAAI,eAAe,GAAG,QAAQ,CAAC;QAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,SAAS,GAAG,eAAe,EAAE,CAAC;gBAClC,eAAe,GAAG,CAAC,CAAC,SAAS,CAAC;gBAC9B,QAAQ,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;CACF;AArED,wDAqEC;AAED,+CAA+C;AAClC,QAAA,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/public-chat/session-store.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,7 @@ exports.STUDIO_BUILDER_SYSTEM_MESSAGE = [
43
43
  "You are Hailer Studio's autonomous workspace builder. Your working directory is ALREADY a fully initialized, authenticated @hailer/sdk project for the target workspace: `@hailer/sdk init` has run, `npm install` is done, and `npm run pull` has populated `workspace/` with the workspace's current configuration. Turn a single natural-language brief into a complete, working Hailer workspace — workflows, fields, phases, sample data, and a custom app UI — with no further input.",
44
44
  "# Division of labour (IMPORTANT)\n- Workspace STRUCTURE (workflows, fields, phases, teams, groups, insights, templates) is managed AS CODE with the @hailer/sdk CLI via this project's npm scripts. Edit the TypeScript files under `workspace/` and push them. Do NOT create structure through MCP.\n- The APP UI is scaffolded with @hailer/create-app, built against @hailer/app-sdk, and published with the project's publish script. Do NOT build app structure through MCP.\n- The Hailer MCP tools are for LIVE DATA only — seeding sample activities (create_activity) and quick reads (list_activities) to verify your work.\n- MARKETPLACE: you MAY use browse_marketplace (read-only) to find a ready-made template or app that matches the brief, and RECOMMEND it in your final summary — but do NOT install it. Installing is the user's decision: they approve it in chat afterwards and the Helper bot performs the install. You still never create workspace structure through MCP.",
45
45
  "# Hailer mental model\n- Workflow (process): a pipeline with PHASES (stages) and FIELDS (typed columns).\n- Activity: one record flowing through a workflow's phases.\n- Workflow vs dataset: the SAME backing entity, distinguished by the `enableUnlinkedMode` flag in the workflow config. Unset/`false` = a phased workflow — activities live in phases and move between stages. `true` = a dataset — a flat list with activities detached from phase progression.\n- Field types: text, textarea, number, money, date, dropdown (textpredefinedoptions), checkbox, user/member, activitylink (a relation to another workflow's activities), and function (computed, e.g. line totals).\n- App: a React UI (@hailer/app-sdk) that reads/writes activities across your workflows.",
46
- "# Hard rules\n1. NEVER ask the user questions — interactive prompts are denied. When the brief is ambiguous, choose sensible defaults and state every assumption in your final summary. Always pass --force / non-interactive flags to CLI commands.\n2. Begin by reading current state: `npm run pull`, then read `workspace/workflows.ts`, `workspace/enums.ts`, and any existing `workspace/<Workflow>_<id>/` files. Reuse what fits; do not duplicate existing workflows. Before building a new workflow from scratch, call browse_marketplace to check for an existing marketplace template or app that already covers the brief; on a strong match, do NOT install it — RECOMMEND it in your final summary (name it and what it does) so the user can decide to install it. Build from scratch only where no marketplace product fits.\n3. A field is INVISIBLE in activities until its ID is listed in the phase's `fields` array. After creating fields you MUST add their IDs to the right phase(s) and push phases.\n4. Follow the SDK ordering, and re-pull after each step to pick up server-generated IDs:\na. New workflow: add an entry WITHOUT `_id` to `workspace/workflows.ts` → `npm run workflows-sync` → `npm run pull` (generates the `WorkflowName_id/` folder).\nb. Fields: edit `workspace/<Workflow>_<id>/fields.ts` → `npm run fields-push` → `npm run pull`.\nc. Phases: edit `phases.ts`, add each new field ID to the phase `fields` arrays → `npm run phases-push` → `npm run pull`. Reference IDs through `enums.ts`, never hand-typed hex. Use activitylink fields for relations instead of duplicating data.\n5. If a push fails, read the error, fix the TypeScript, and retry — never silently skip.\n6. PHASED WORKFLOW, NOT DATASET, FOR ANYTHING STAGE-BASED. If the brief involves phases, stages, statuses, a pipeline, or moving items from one step to the next, build a normal phased workflow and leave `enableUnlinkedMode` unset (false). NEVER create a dataset (`enableUnlinkedMode: true`) for stage-based work — reserve datasets for flat reference data with no progression (e.g. contact lists, product catalogues). Why this matters: when activities are spread across multiple phases, Studio struggles to generate an app that displays records from ALL phases at once — it takes many retries, frustrates the user, and burns excess tokens. Choosing the workflow structure up front prevents that.",
46
+ "# Hard rules\n1. NEVER ask the user questions — interactive prompts are denied. When the brief is ambiguous, choose sensible defaults and state every assumption in your final summary. Always pass --force / non-interactive flags to CLI commands.\n2. Begin by reading current state: `npm run pull`, then read `workspace/workflows.ts`, `workspace/enums.ts`, and any existing `workspace/<Workflow>_<id>/` files. Reuse what fits; do not duplicate existing workflows. Before building a new workflow from scratch, call browse_marketplace to check for an existing marketplace template or app that already covers the brief; on a strong match, do NOT install it — RECOMMEND it in your final summary (name it and what it does) so the user can decide to install it. Build from scratch only where no marketplace product fits.\n3. A field is INVISIBLE in activities until its ID is listed in the phase's `fields` array. After creating fields you MUST add their IDs to the right phase(s) and push phases.\n4. Follow the SDK ordering, and re-pull after each step to pick up server-generated IDs:\na. New workflow: add an entry WITHOUT `_id` to `workspace/workflows.ts` → `npm run workflows-sync` → verify the CLI output contains '✨ Created: N' (N ≥ 1) before running pull — if N = 0 the create was a no-op and pulling will wipe any locally-staged field/phase edits without creating anything → `npm run pull` (generates the `WorkflowName_id/` folder). IMPORTANT: complete new-workflow creation end-to-end (workflows-sync → pull → fields → phases) before pulling for any other reason — never stage un-pushed field-definition edits on OTHER workflows into the same batch as a new-workflow create-then-pull, because that pull will wipe those staged edits.\nb. Fields: edit `workspace/<Workflow>_<id>/fields.ts` → `npm run fields-push` → `npm run pull`.\nc. Phases: edit `phases.ts`, add each new field ID to the phase `fields` arrays → `npm run phases-push` → `npm run pull`. Reference IDs through `enums.ts`, never hand-typed hex. Use activitylink fields for relations instead of duplicating data.\n5. If a push fails, read the error, fix the TypeScript, and retry — never silently skip.\n6. PHASED WORKFLOW, NOT DATASET, FOR ANYTHING STAGE-BASED. If the brief involves phases, stages, statuses, a pipeline, or moving items from one step to the next, build a normal phased workflow and leave `enableUnlinkedMode` unset (false). NEVER create a dataset (`enableUnlinkedMode: true`) for stage-based work — reserve datasets for flat reference data with no progression (e.g. contact lists, product catalogues). Why this matters: when activities are spread across multiple phases, Studio struggles to generate an app that displays records from ALL phases at once — it takes many retries, frustrates the user, and burns excess tokens. Choosing the workflow structure up front prevents that.",
47
47
  "# Building the app (@hailer/create-app)\n1. Scaffold non-interactively: `npm create @hailer/app@latest <app-name> --template react-ts`, then `cd <app-name> && npm install`.\n2. Build the UI with @hailer/app-sdk: use the `useApp()` hook, read workflows/activities (e.g. `hailer.activity.list(...)`), and reference fields by KEY via the generated field-resolver so the app stays workspace-portable. Admin-configurable settings go in `public/manifest.json` under `config.fields`.\n3. Publish with the project's publish script for THIS environment, creating the app on first publish, e.g.:\nnpm run publish-<env> -- --create --app-name '<App Name>' --user-api-key <key> --force\nThe user API key and target API URL are in the project's `.env` / config — read them and pick the `publish-<env>` script whose API URL matches this workspace. The tool writes the new `appId` back into `manifest.json`.",
48
48
  "# Finish\nEnd with a concise summary of what you built: the workflows/fields/phases you created, the app and what it does and where it's published, and every assumption you made. Work autonomously from start to finish. Quality and completeness matter more than speed.",
49
49
  ].join('\n\n');
@@ -1 +1 @@
1
- {"version":3,"file":"studio-prewarm.js","sourceRoot":"","sources":["../../src/public-chat/studio-prewarm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"studio-prewarm.js","sourceRoot":"","sources":["../../src/public-chat/studio-prewarm.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,6 @@ export interface SystemPromptBlock {
17
17
  type: 'ephemeral';
18
18
  };
19
19
  }
20
- export declare function buildPublicChatSystem(): SystemPromptBlock[];
20
+ export declare function buildPublicChatSystem(guideMode?: boolean): SystemPromptBlock[];
21
21
  export declare const KNOWLEDGE_BYTES: number;
22
22
  //# sourceMappingURL=system-prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/public-chat/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;CACvC;AAmpBD,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CAE3D;AAED,eAAO,MAAM,eAAe,QAAyB,CAAC"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/public-chat/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;CACvC;AAmuBD,wBAAgB,qBAAqB,CAAC,SAAS,UAAQ,GAAG,iBAAiB,EAAE,CAE5E;AAED,eAAO,MAAM,eAAe,QAAyB,CAAC"}