@rubytech/create-realagent-code 0.1.30 → 0.1.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 (161) hide show
  1. package/dist/index.js +37 -39
  2. package/package.json +1 -1
  3. package/payload/platform/lib/graph-trash/dist/index.d.ts +1 -1
  4. package/payload/platform/lib/graph-trash/dist/index.d.ts.map +1 -1
  5. package/payload/platform/lib/graph-trash/dist/index.js +1 -2
  6. package/payload/platform/lib/graph-trash/dist/index.js.map +1 -1
  7. package/payload/platform/lib/graph-trash/src/index.ts +1 -2
  8. package/payload/platform/lib/persistent-components/dist/index.d.ts +11 -12
  9. package/payload/platform/lib/persistent-components/dist/index.d.ts.map +1 -1
  10. package/payload/platform/lib/persistent-components/dist/index.js +11 -12
  11. package/payload/platform/lib/persistent-components/dist/index.js.map +1 -1
  12. package/payload/platform/lib/persistent-components/src/index.ts +11 -12
  13. package/payload/platform/neo4j/schema.cypher +10 -19
  14. package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
  15. package/payload/platform/plugins/admin/PLUGIN.md +1 -7
  16. package/payload/platform/plugins/admin/mcp/dist/index.js +15 -582
  17. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  18. package/payload/platform/plugins/admin/skills/access-manager/references/operations.md +7 -7
  19. package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +1 -1
  20. package/payload/platform/plugins/admin/skills/stream-log-review/references/analysis-patterns.md +2 -2
  21. package/payload/platform/plugins/anthropic/skills/get-api-key/SKILL.md +2 -4
  22. package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +0 -47
  23. package/payload/platform/plugins/docs/references/cloudflare.md +0 -1
  24. package/payload/platform/plugins/docs/references/deployment.md +9 -18
  25. package/payload/platform/plugins/docs/references/internals.md +4 -4
  26. package/payload/platform/plugins/docs/references/platform.md +5 -1
  27. package/payload/platform/plugins/docs/references/troubleshooting.md +11 -7
  28. package/payload/platform/plugins/email/references/email-reference.md +3 -7
  29. package/payload/platform/plugins/memory/PLUGIN.md +1 -1
  30. package/payload/platform/plugins/memory/mcp/dist/index.js +1 -1
  31. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  32. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +2 -3
  33. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts.map +1 -1
  34. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +2 -3
  35. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js.map +1 -1
  36. package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.d.ts +1 -1
  37. package/payload/platform/plugins/memory/references/graph-primitives.md +5 -5
  38. package/payload/platform/plugins/teaching/PLUGIN.md +2 -1
  39. package/payload/platform/plugins/whatsapp/mcp/dist/index.js +1 -1
  40. package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
  41. package/payload/platform/plugins/whatsapp/skills/connect-whatsapp/SKILL.md +1 -1
  42. package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +2 -8
  43. package/payload/platform/plugins/writer-craft/PLUGIN.md +2 -1
  44. package/payload/platform/scripts/component-knowledgedoc-backfill.ts +1 -1
  45. package/payload/platform/scripts/seed-neo4j.sh +9 -38
  46. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +1 -1
  47. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  48. package/payload/platform/services/claude-session-manager/dist/http-server.js +45 -44
  49. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  50. package/payload/platform/services/claude-session-manager/dist/index.js +11 -0
  51. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  52. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.d.ts +30 -0
  53. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.d.ts.map +1 -0
  54. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js +175 -0
  55. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js.map +1 -0
  56. package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts +4 -2
  57. package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts.map +1 -1
  58. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +15 -22
  59. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
  60. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +13 -14
  61. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  62. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +28 -13
  63. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  64. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +9 -0
  65. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
  66. package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
  67. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +1 -25
  68. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  69. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +3 -54
  70. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  71. package/payload/platform/templates/agents/admin/IDENTITY.md +2 -0
  72. package/payload/platform/templates/agents/public/IDENTITY.md +1 -1
  73. package/payload/platform/templates/specialists/agents/content-producer.md +3 -3
  74. package/payload/platform/templates/specialists/agents/personal-assistant.md +2 -2
  75. package/payload/premium-plugins/teaching/PLUGIN.md +2 -1
  76. package/payload/premium-plugins/writer-craft/PLUGIN.md +2 -1
  77. package/payload/server/{chunk-NL7QLVAD.js → chunk-KVGTWNKQ.js} +1 -70
  78. package/payload/server/{chunk-2MRZBQMH.js → chunk-RZQMYJVY.js} +1 -1
  79. package/payload/server/{chunk-YPZFYTYP.js → chunk-ZGJ6CUU2.js} +1 -1
  80. package/payload/server/{cloudflare-task-tracker-QVOGHKWV.js → cloudflare-task-tracker-4PKOLE4H.js} +2 -2
  81. package/payload/server/maxy-edge.js +2 -2
  82. package/payload/server/public/assets/{Checkbox-YIF0payo.js → Checkbox-C6zXApx_.js} +1 -1
  83. package/payload/server/public/assets/admin-Cuu1QdAA.js +216 -0
  84. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-Bz8mlxZZ.js → architectureDiagram-Q4EWVU46-BYXgFii5.js} +1 -1
  85. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DwV8Z8-i.js → blockDiagram-DXYQGD6D-GIQ0eO13.js} +1 -1
  86. package/payload/server/public/assets/{brand-Bm671owU.js → brand-B-bNrpwc.js} +1 -1
  87. package/payload/server/public/assets/{brand-DqiRNMlu.css → brand-DdhkC994.css} +1 -1
  88. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-DiUTejMp.js → c4Diagram-AHTNJAMY-BmyWfG-l.js} +1 -1
  89. package/payload/server/public/assets/channel-C76knBRO.js +1 -0
  90. package/payload/server/public/assets/{chunk-336JU56O-4mHZpBXe.js → chunk-336JU56O-DcWl0MQo.js} +2 -2
  91. package/payload/server/public/assets/{chunk-426QAEUC-Cbv0vrN9.js → chunk-426QAEUC-BIW6kq6y.js} +1 -1
  92. package/payload/server/public/assets/{chunk-4TB4RGXK-BvLhId_2.js → chunk-4TB4RGXK-CdoHpV4X.js} +1 -1
  93. package/payload/server/public/assets/{chunk-5FUZZQ4R-bBafOTkw.js → chunk-5FUZZQ4R-bn_a4sfU.js} +1 -1
  94. package/payload/server/public/assets/{chunk-5PVQY5BW-B0NqBKVy.js → chunk-5PVQY5BW-C_Rq8j_M.js} +1 -1
  95. package/payload/server/public/assets/{chunk-EDXVE4YY-CFd4SqI6.js → chunk-EDXVE4YY-CWQvoVKV.js} +1 -1
  96. package/payload/server/public/assets/{chunk-ENJZ2VHE-ajf2sb6c.js → chunk-ENJZ2VHE-DBHn1kSk.js} +1 -1
  97. package/payload/server/public/assets/{chunk-ICPOFSXX-pWg6bug7.js → chunk-ICPOFSXX-SW2Qx11O.js} +1 -1
  98. package/payload/server/public/assets/{chunk-OYMX7WX6-OjEd-17c.js → chunk-OYMX7WX6-BvIG7tVW.js} +1 -1
  99. package/payload/server/public/assets/{chunk-U2HBQHQK-DbEFSPoh.js → chunk-U2HBQHQK-BiBUb0cF.js} +1 -1
  100. package/payload/server/public/assets/{chunk-X2U36JSP-COdNwrBb.js → chunk-X2U36JSP-Y0MKZCCh.js} +1 -1
  101. package/payload/server/public/assets/{chunk-YZCP3GAM-CHMWuY9B.js → chunk-YZCP3GAM-DKPh06GH.js} +1 -1
  102. package/payload/server/public/assets/{chunk-ZZ45TVLE-B-uDLQOB.js → chunk-ZZ45TVLE-C2WNo-fK.js} +1 -1
  103. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bohexn7P.js +1 -0
  104. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DVsmsAu7.js +1 -0
  105. package/payload/server/public/assets/clone-DUrXF4sO.js +1 -0
  106. package/payload/server/public/assets/{dagre-bhIG_KnW.js → dagre-CrK8E9ee.js} +1 -1
  107. package/payload/server/public/assets/{dagre-KV5264BT-CMEzmhIL.js → dagre-KV5264BT-_o6uXcH8.js} +1 -1
  108. package/payload/server/public/assets/data-j1WNhF8t.js +1 -0
  109. package/payload/server/public/assets/{device-url-actions-AcOyLSeF.js → device-url-actions-BcHerWqJ.js} +1 -1
  110. package/payload/server/public/assets/{diagram-5BDNPKRD-6RIoQhIL.js → diagram-5BDNPKRD-FFP9DKhc.js} +1 -1
  111. package/payload/server/public/assets/{diagram-G4DWMVQ6-BSp36TVv.js → diagram-G4DWMVQ6-DpwD1jBP.js} +1 -1
  112. package/payload/server/public/assets/{diagram-MMDJMWI5-D54fo52D.js → diagram-MMDJMWI5-C3K5agdK.js} +1 -1
  113. package/payload/server/public/assets/{diagram-TYMM5635-CWL8z-Pq.js → diagram-TYMM5635-CbeDipbC.js} +1 -1
  114. package/payload/server/public/assets/{erDiagram-SMLLAGMA-AnnHBo3z.js → erDiagram-SMLLAGMA-XBIFndNy.js} +1 -1
  115. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-laWmBl5o.js → flowDiagram-DWJPFMVM-BvEgySyn.js} +1 -1
  116. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-B94ko8ie.js → ganttDiagram-T4ZO3ILL-D7gIRKJf.js} +1 -1
  117. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DxzL1fxZ.js → gitGraphDiagram-UUTBAWPF-vJu_hcri.js} +1 -1
  118. package/payload/server/public/assets/graph-C_f_9L_7.js +1 -0
  119. package/payload/server/public/assets/graph-labels-BSQJHlgf.js +1 -0
  120. package/payload/server/public/assets/{graphlib-CY-zIElM.js → graphlib-Dp0mN6JW.js} +1 -1
  121. package/payload/server/public/assets/{infoDiagram-42DDH7IO-BMTajIIr.js → infoDiagram-42DDH7IO-g4Dlc5Cr.js} +1 -1
  122. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-B_QauE5O.js → ishikawaDiagram-UXIWVN3A-D_45LXOe.js} +1 -1
  123. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DmlqSIih.js → journeyDiagram-VCZTEJTY-CggbHl6N.js} +1 -1
  124. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-ZGDQT7xB.js → kanban-definition-6JOO6SKY-CysAe-Ab.js} +1 -1
  125. package/payload/server/public/assets/{line-D13opgep.js → line-BAxq_DSY.js} +1 -1
  126. package/payload/server/public/assets/{mermaid-parser.core-C650Sual.js → mermaid-parser.core-DbFuvkjL.js} +1 -1
  127. package/payload/server/public/assets/{mermaid.core-BqnQoXTp.js → mermaid.core-CehvJn5b.js} +3 -3
  128. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BS_8y-tY.js → mindmap-definition-QFDTVHPH-DbPbBJ9h.js} +1 -1
  129. package/payload/server/public/assets/page-B0BPrSE3.js +1 -0
  130. package/payload/server/public/assets/{page-qSH972X0.js → page-Co7KCRV8.js} +2 -2
  131. package/payload/server/public/assets/{pieDiagram-DEJITSTG-B5OmNvBO.js → pieDiagram-DEJITSTG-cagLL9ng.js} +1 -1
  132. package/payload/server/public/assets/{public-DDsYgotk.js → public-B6TEcDLx.js} +5 -5
  133. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DTYITdNo.js → quadrantDiagram-34T5L4WZ-Keaa1jDh.js} +1 -1
  134. package/payload/server/public/assets/{requirementDiagram-MS252O5E-CRZWxH06.js → requirementDiagram-MS252O5E-BcYRyn5z.js} +1 -1
  135. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-DazRENhe.js → sankeyDiagram-XADWPNL6--fKoG9NR.js} +1 -1
  136. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BcHTxmPy.js → sequenceDiagram-FGHM5R23-lKG36-Di.js} +1 -1
  137. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DYU7nbqg.js → stateDiagram-FHFEXIEX-BuVsrlig.js} +1 -1
  138. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DSt88_xL.js +1 -0
  139. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BKGmqkST.js → timeline-definition-GMOUNBTQ-D6X6uq17.js} +1 -1
  140. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BXvLPmX7.js → vennDiagram-DHZGUBPP-BgvcfRVf.js} +1 -1
  141. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BCclUa3Z.js → wardleyDiagram-NUSXRM2D-Cpd1xsrt.js} +1 -1
  142. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-C-Xp-Eoc.js → xychartDiagram-5P7HB3ND-CDF5ZVFv.js} +1 -1
  143. package/payload/server/public/data.html +5 -5
  144. package/payload/server/public/graph.html +6 -6
  145. package/payload/server/public/index.html +8 -8
  146. package/payload/server/public/public.html +5 -5
  147. package/payload/server/server.js +142 -278
  148. package/payload/platform/plugins/admin/hooks/onboarding-skill-drift.sh +0 -102
  149. package/payload/platform/plugins/admin/references/contextual-ui.md +0 -109
  150. package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +0 -240
  151. package/payload/platform/scripts/__tests__/admin-persist-audit.test.ts +0 -182
  152. package/payload/server/public/assets/admin-CDvF5de6.js +0 -216
  153. package/payload/server/public/assets/channel-PtVtoBEL.js +0 -1
  154. package/payload/server/public/assets/classDiagram-6PBFFD2Q-RVH_SEhY.js +0 -1
  155. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cm3rAb93.js +0 -1
  156. package/payload/server/public/assets/clone-BjY0Wzht.js +0 -1
  157. package/payload/server/public/assets/data-K_kS__sL.js +0 -1
  158. package/payload/server/public/assets/graph-DeEigyO_.js +0 -1
  159. package/payload/server/public/assets/graph-labels-C7I5QvNv.js +0 -1
  160. package/payload/server/public/assets/page-B_rpjIRr.js +0 -1
  161. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BgljVtlp.js +0 -1
@@ -60,7 +60,7 @@ import {
60
60
  vncLog,
61
61
  waitForExit,
62
62
  walkPremiumBundles
63
- } from "./chunk-YPZFYTYP.js";
63
+ } from "./chunk-ZGJ6CUU2.js";
64
64
  import {
65
65
  CLOUDFLARE_TASK_DIAGNOSTICS,
66
66
  appendCloudflareSteps,
@@ -69,7 +69,7 @@ import {
69
69
  openCloudflareTask,
70
70
  readTunnelState,
71
71
  resolveUnitGoneVerdict
72
- } from "./chunk-2MRZBQMH.js";
72
+ } from "./chunk-RZQMYJVY.js";
73
73
  import {
74
74
  GREETING_DIRECTIVE,
75
75
  HAIKU_MODEL,
@@ -85,7 +85,6 @@ import {
85
85
  getUserTimezone,
86
86
  listAdminSessions,
87
87
  loadAdminUserName,
88
- loadOnboardingStep,
89
88
  persistMessage,
90
89
  projectAgent,
91
90
  renameConversation,
@@ -93,7 +92,7 @@ import {
93
92
  verifyAndGetConversationUpdatedAt,
94
93
  verifyConversationOwnership,
95
94
  writeAdminUserAndPerson
96
- } from "./chunk-NL7QLVAD.js";
95
+ } from "./chunk-KVGTWNKQ.js";
97
96
  import {
98
97
  __commonJS,
99
98
  __toESM
@@ -141,7 +140,6 @@ var require_dist2 = __commonJS({
141
140
  DigitalDocument: ["attachmentId"],
142
141
  Conversation: ["conversationId"],
143
142
  Message: ["messageId"],
144
- OnboardingState: ["accountId"],
145
143
  Workflow: ["workflowId"],
146
144
  WorkflowStep: ["stepId"],
147
145
  WorkflowRun: ["runId"],
@@ -618,7 +616,7 @@ var serveStatic = (options = { root: "" }) => {
618
616
 
619
617
  // server/index.ts
620
618
  import { readFileSync as readFileSync19, existsSync as existsSync22, watchFile } from "fs";
621
- import { resolve as resolve23, join as join13, basename as basename5 } from "path";
619
+ import { resolve as resolve22, join as join13, basename as basename5 } from "path";
622
620
  import { homedir as homedir5 } from "os";
623
621
 
624
622
  // app/lib/agent-slug-pattern.ts
@@ -1600,7 +1598,7 @@ var credsSaveQueue = Promise.resolve();
1600
1598
  async function drainCredsSaveQueue(timeoutMs = 5e3) {
1601
1599
  console.error(`${TAG3} draining credential save queue\u2026`);
1602
1600
  const timer2 = new Promise(
1603
- (resolve24) => setTimeout(() => resolve24("timeout"), timeoutMs)
1601
+ (resolve23) => setTimeout(() => resolve23("timeout"), timeoutMs)
1604
1602
  );
1605
1603
  const result = await Promise.race([
1606
1604
  credsSaveQueue.then(() => "drained"),
@@ -1728,11 +1726,11 @@ async function createWaSocket(opts) {
1728
1726
  return sock;
1729
1727
  }
1730
1728
  async function waitForConnection(sock) {
1731
- return new Promise((resolve24, reject) => {
1729
+ return new Promise((resolve23, reject) => {
1732
1730
  const handler = (update) => {
1733
1731
  if (update.connection === "open") {
1734
1732
  sock.ev.off("connection.update", handler);
1735
- resolve24();
1733
+ resolve23();
1736
1734
  }
1737
1735
  if (update.connection === "close") {
1738
1736
  sock.ev.off("connection.update", handler);
@@ -1846,14 +1844,14 @@ ${inspected}`;
1846
1844
  return inspect2(err, INSPECT_OPTS2);
1847
1845
  }
1848
1846
  function withTimeout(label, promise, timeoutMs) {
1849
- return new Promise((resolve24, reject) => {
1847
+ return new Promise((resolve23, reject) => {
1850
1848
  const timer2 = setTimeout(() => {
1851
1849
  reject(new Error(`${label} timed out after ${timeoutMs}ms`));
1852
1850
  }, timeoutMs);
1853
1851
  promise.then(
1854
1852
  (value) => {
1855
1853
  clearTimeout(timer2);
1856
- resolve24(value);
1854
+ resolve23(value);
1857
1855
  },
1858
1856
  (err) => {
1859
1857
  clearTimeout(timer2);
@@ -2388,8 +2386,8 @@ async function persistWhatsAppMessage(input) {
2388
2386
  const { givenName, familyName } = splitName(input.pushName);
2389
2387
  const prev = sessionWriteLocks.get(input.cacheKey);
2390
2388
  let release;
2391
- const mine = new Promise((resolve24) => {
2392
- release = resolve24;
2389
+ const mine = new Promise((resolve23) => {
2390
+ release = resolve23;
2393
2391
  });
2394
2392
  const chained = (prev ?? Promise.resolve()).then(() => mine);
2395
2393
  sessionWriteLocks.set(input.cacheKey, chained);
@@ -3426,11 +3424,11 @@ async function connectWithReconnect(conn) {
3426
3424
  console.error(
3427
3425
  `${TAG13} reconnecting account=${conn.accountId} in ${delay}ms (attempt ${decision.nextAttempts}/${maxAttempts})`
3428
3426
  );
3429
- await new Promise((resolve24) => {
3430
- const timer2 = setTimeout(resolve24, delay);
3427
+ await new Promise((resolve23) => {
3428
+ const timer2 = setTimeout(resolve23, delay);
3431
3429
  conn.abortController.signal.addEventListener("abort", () => {
3432
3430
  clearTimeout(timer2);
3433
- resolve24();
3431
+ resolve23();
3434
3432
  }, { once: true });
3435
3433
  });
3436
3434
  }
@@ -3438,16 +3436,16 @@ async function connectWithReconnect(conn) {
3438
3436
  }
3439
3437
  }
3440
3438
  function waitForDisconnectEvent(conn) {
3441
- return new Promise((resolve24) => {
3439
+ return new Promise((resolve23) => {
3442
3440
  if (!conn.sock) {
3443
- resolve24();
3441
+ resolve23();
3444
3442
  return;
3445
3443
  }
3446
3444
  const sock = conn.sock;
3447
3445
  const handler = (update) => {
3448
3446
  if (update.connection === "close") {
3449
3447
  sock.ev.off("connection.update", handler);
3450
- resolve24();
3448
+ resolve23();
3451
3449
  }
3452
3450
  };
3453
3451
  sock.ev.on("connection.update", handler);
@@ -3709,8 +3707,8 @@ async function handleInboundMessage(conn, msg) {
3709
3707
  const conversationKey = isGroup ? remoteJid : senderPhone;
3710
3708
  const debounceKey = `${conn.accountId}:${conversationKey}:${senderPhone}`;
3711
3709
  let resolvePending;
3712
- const sttPending = new Promise((resolve24) => {
3713
- resolvePending = resolve24;
3710
+ const sttPending = new Promise((resolve23) => {
3711
+ resolvePending = resolve23;
3714
3712
  });
3715
3713
  if (conn.debouncer) conn.debouncer.registerPending(debounceKey, sttPending);
3716
3714
  try {
@@ -4127,20 +4125,20 @@ async function probeApiKey() {
4127
4125
  return result.status;
4128
4126
  }
4129
4127
  function checkPort(port2, timeoutMs = 500) {
4130
- return new Promise((resolve24) => {
4128
+ return new Promise((resolve23) => {
4131
4129
  const socket = createConnection2(port2, "127.0.0.1");
4132
4130
  socket.setTimeout(timeoutMs);
4133
4131
  socket.once("connect", () => {
4134
4132
  socket.destroy();
4135
- resolve24(true);
4133
+ resolve23(true);
4136
4134
  });
4137
4135
  socket.once("error", () => {
4138
4136
  socket.destroy();
4139
- resolve24(false);
4137
+ resolve23(false);
4140
4138
  });
4141
4139
  socket.once("timeout", () => {
4142
4140
  socket.destroy();
4143
- resolve24(false);
4141
+ resolve23(false);
4144
4142
  });
4145
4143
  });
4146
4144
  }
@@ -4196,17 +4194,11 @@ app.get("/", async (c) => {
4196
4194
  }
4197
4195
  const whatsappAnyConnected = whatsappAccounts.some((a) => a.connected);
4198
4196
  const whatsappAnyStuck = whatsappAccounts.some((a) => Boolean(a.sessionStuckReason));
4199
- let onboardingComplete;
4200
4197
  const account = resolveAccount();
4201
- if (account) {
4202
- const step = await loadOnboardingStep(account.accountId);
4203
- if (step !== null) onboardingComplete = step >= 6;
4204
- }
4205
4198
  const missingPlugins = findMissingPlugins(account?.config.enabledPlugins);
4206
4199
  return c.json({
4207
4200
  pin_configured: pinConfigured,
4208
4201
  claude_authenticated: claudeAuthenticated,
4209
- ...onboardingComplete !== void 0 && { onboarding_complete: onboardingComplete },
4210
4202
  vnc_running: vncRunning,
4211
4203
  browser_transport: browserTransport,
4212
4204
  auth_status: authHealth.status,
@@ -5235,12 +5227,12 @@ async function dispatchOnce(input) {
5235
5227
  });
5236
5228
  if (!entry) return { error: "spawn-failed" };
5237
5229
  entry.lastInboundAt = Date.now();
5238
- let resolve24;
5230
+ let resolve23;
5239
5231
  const turnPromise = new Promise((r) => {
5240
- resolve24 = r;
5232
+ resolve23 = r;
5241
5233
  });
5242
5234
  const listener = (text) => {
5243
- resolve24(text);
5235
+ resolve23(text);
5244
5236
  };
5245
5237
  entry.subscribers.add(listener);
5246
5238
  const writeOk = await writeInput(entry, input.text);
@@ -5603,8 +5595,8 @@ async function startLogin(opts) {
5603
5595
  resetActiveLogin(accountId);
5604
5596
  let resolveQr = null;
5605
5597
  let rejectQr = null;
5606
- const qrPromise = new Promise((resolve24, reject) => {
5607
- resolveQr = resolve24;
5598
+ const qrPromise = new Promise((resolve23, reject) => {
5599
+ resolveQr = resolve23;
5608
5600
  rejectQr = reject;
5609
5601
  });
5610
5602
  const qrTimer = setTimeout(
@@ -6314,8 +6306,7 @@ var whatsapp_default = app3;
6314
6306
 
6315
6307
  // server/routes/onboarding.ts
6316
6308
  import { spawn, spawnSync as spawnSync2, execFileSync as execFileSync2 } from "child_process";
6317
- import { openSync, closeSync, writeFileSync as writeFileSync7, writeSync, existsSync as existsSync7, mkdirSync as mkdirSync4, readFileSync as readFileSync10, unlinkSync as unlinkSync2 } from "fs";
6318
- import { resolve as resolve9, dirname as dirname3 } from "path";
6309
+ import { openSync, closeSync, writeFileSync as writeFileSync7, writeSync, existsSync as existsSync7, readFileSync as readFileSync10, unlinkSync as unlinkSync2 } from "fs";
6319
6310
  import { createHash, randomUUID as randomUUID5 } from "crypto";
6320
6311
 
6321
6312
  // ../lib/admins-write/src/index.ts
@@ -6465,7 +6456,6 @@ function checkAdminAuthInvariant(input) {
6465
6456
  }
6466
6457
 
6467
6458
  // server/routes/onboarding.ts
6468
- var PLATFORM_ROOT5 = process.env.MAXY_PLATFORM_ROOT || "";
6469
6459
  function hashPin(pin) {
6470
6460
  return createHash("sha256").update(pin).digest("hex");
6471
6461
  }
@@ -6677,76 +6667,6 @@ app4.delete("/set-pin", async (c) => {
6677
6667
  }
6678
6668
  return c.json({ ok: true });
6679
6669
  });
6680
- app4.post("/skip", async (c) => {
6681
- let body = {};
6682
- try {
6683
- body = await c.req.json();
6684
- } catch {
6685
- }
6686
- if (Object.prototype.hasOwnProperty.call(body, "minimal")) {
6687
- return c.json({ error: "The minimal skip mode has been removed; POST with no body to apply defaults." }, 400);
6688
- }
6689
- const targetStep = 6;
6690
- const account = resolveAccount();
6691
- if (!account) {
6692
- console.error("[onboarding-skip] no account found");
6693
- return c.json({ error: "No account configured." }, 500);
6694
- }
6695
- const { accountId, accountDir } = account;
6696
- let agentName = "Maxy";
6697
- const brandPath = PLATFORM_ROOT5 ? resolve9(PLATFORM_ROOT5, "config", "brand.json") : "";
6698
- if (brandPath && existsSync7(brandPath)) {
6699
- try {
6700
- const brand = JSON.parse(readFileSync10(brandPath, "utf-8"));
6701
- if (brand.productName) agentName = brand.productName;
6702
- } catch (err) {
6703
- console.error(`[onboarding-skip] brand.json read failed: ${err instanceof Error ? err.message : String(err)}`);
6704
- }
6705
- }
6706
- const soulPath = resolve9(accountDir, "agents", "admin", "SOUL.md");
6707
- try {
6708
- mkdirSync4(dirname3(soulPath), { recursive: true });
6709
- writeFileSync7(soulPath, `You are ${agentName}, an AI operations manager.
6710
- `);
6711
- console.log(`[onboarding-skip] wrote SOUL.md: ${soulPath}`);
6712
- } catch (err) {
6713
- console.error(`[onboarding-skip] SOUL.md write failed: ${err instanceof Error ? err.message : String(err)}`);
6714
- return c.json({ error: "Failed to write default personality." }, 500);
6715
- }
6716
- const session = getSession();
6717
- try {
6718
- const now = (/* @__PURE__ */ new Date()).toISOString();
6719
- await session.run(
6720
- `MERGE (o:OnboardingState {accountId: $accountId})
6721
- ON CREATE SET o.currentStep = $targetStep, o.createdAt = $now, o.updatedAt = $now,
6722
- o.step1CompletedAt = $now, o.step2CompletedAt = $now,
6723
- o.step3CompletedAt = $now, o.step4CompletedAt = $now,
6724
- o.step5CompletedAt = $now, o.step6CompletedAt = $now,
6725
- o.step7CompletedAt = CASE WHEN $targetStep >= 7 THEN $now ELSE null END,
6726
- o.step8CompletedAt = CASE WHEN $targetStep >= 8 THEN $now ELSE null END,
6727
- o.step9CompletedAt = CASE WHEN $targetStep >= 9 THEN $now ELSE null END
6728
- ON MATCH SET o.currentStep = CASE WHEN $targetStep > o.currentStep THEN $targetStep ELSE o.currentStep END,
6729
- o.updatedAt = $now,
6730
- o.step1CompletedAt = CASE WHEN o.step1CompletedAt IS NULL THEN $now ELSE o.step1CompletedAt END,
6731
- o.step2CompletedAt = CASE WHEN o.step2CompletedAt IS NULL THEN $now ELSE o.step2CompletedAt END,
6732
- o.step3CompletedAt = CASE WHEN o.step3CompletedAt IS NULL THEN $now ELSE o.step3CompletedAt END,
6733
- o.step4CompletedAt = CASE WHEN o.step4CompletedAt IS NULL THEN $now ELSE o.step4CompletedAt END,
6734
- o.step5CompletedAt = CASE WHEN o.step5CompletedAt IS NULL THEN $now ELSE o.step5CompletedAt END,
6735
- o.step6CompletedAt = CASE WHEN o.step6CompletedAt IS NULL THEN $now ELSE o.step6CompletedAt END,
6736
- o.step7CompletedAt = CASE WHEN $targetStep >= 7 AND o.step7CompletedAt IS NULL THEN $now ELSE o.step7CompletedAt END,
6737
- o.step8CompletedAt = CASE WHEN $targetStep >= 8 AND o.step8CompletedAt IS NULL THEN $now ELSE o.step8CompletedAt END,
6738
- o.step9CompletedAt = CASE WHEN $targetStep >= 9 AND o.step9CompletedAt IS NULL THEN $now ELSE o.step9CompletedAt END`,
6739
- { accountId, now, targetStep }
6740
- );
6741
- console.log(`[onboarding-skip] accountId=${accountId.slice(0, 8)}\u2026 currentStep=${targetStep} mode=default`);
6742
- } catch (err) {
6743
- console.error(`[onboarding-skip] Neo4j update failed: ${err instanceof Error ? err.message : String(err)}`);
6744
- return c.json({ error: "Failed to update onboarding state." }, 500);
6745
- } finally {
6746
- await session.close();
6747
- }
6748
- return c.json({ ok: true });
6749
- });
6750
6670
  var onboarding_default = app4;
6751
6671
 
6752
6672
  // server/routes/client-error.ts
@@ -6917,9 +6837,6 @@ var deprecationLogged = /* @__PURE__ */ new Set();
6917
6837
  function hashPin2(pin) {
6918
6838
  return createHash2("sha256").update(pin).digest("hex");
6919
6839
  }
6920
- function isOnboardingComplete(step) {
6921
- return step !== null && step >= 9;
6922
- }
6923
6840
  function readUsersFile2() {
6924
6841
  if (!existsSync9(USERS_FILE)) return null;
6925
6842
  const raw = readFileSync11(USERS_FILE, "utf-8").trim();
@@ -6995,17 +6912,6 @@ async function createAdminSession(accountId, thinkingView, userId, userName, rol
6995
6912
  const cacheKey = fingerprintSessionKey(signedSessionToken);
6996
6913
  registerSession(cacheKey, "admin", accountId, void 0, userId, userName, role);
6997
6914
  if (userId) setWantsPriorConversation(cacheKey);
6998
- let onboardingComplete = false;
6999
- let onboardingStepLog = "unread";
7000
- try {
7001
- const step = await loadOnboardingStep(accountId);
7002
- onboardingComplete = isOnboardingComplete(step);
7003
- onboardingStepLog = step === null ? "null" : step;
7004
- } catch (err) {
7005
- console.error(`[session] onboarding query failed: ${err instanceof Error ? err.message : String(err)}`);
7006
- onboardingStepLog = "error";
7007
- }
7008
- console.log(`[onboarding-gate] session=${cacheKey.slice(0, 8)} accountId=${accountId.slice(0, 8)} step=${onboardingStepLog} complete=${onboardingComplete} phase=create`);
7009
6915
  let businessName;
7010
6916
  try {
7011
6917
  const branding = await fetchBranding(accountId);
@@ -7039,7 +6945,6 @@ async function createAdminSession(accountId, thinkingView, userId, userName, rol
7039
6945
  avatar: avatar ?? null,
7040
6946
  role: role ?? null,
7041
6947
  thinkingView: effectiveThinkingView,
7042
- onboardingComplete,
7043
6948
  businessName,
7044
6949
  conversationId: initialConversationId
7045
6950
  };
@@ -7060,17 +6965,6 @@ app6.get("/", async (c) => {
7060
6965
  }
7061
6966
  const account = resolveAccount();
7062
6967
  const thinkingView = account?.config.thinkingView ?? "default";
7063
- let onboardingComplete = false;
7064
- let onboardingStepLog = "unread";
7065
- try {
7066
- const step = await loadOnboardingStep(accountId);
7067
- onboardingComplete = isOnboardingComplete(step);
7068
- onboardingStepLog = step === null ? "null" : step;
7069
- } catch (err) {
7070
- console.error(`[session] restore onboarding query failed: ${err instanceof Error ? err.message : String(err)}`);
7071
- onboardingStepLog = "error";
7072
- }
7073
- console.log(`[onboarding-gate] session=${cacheKey.slice(0, 8)} accountId=${accountId.slice(0, 8)} step=${onboardingStepLog} complete=${onboardingComplete} phase=restore`);
7074
6968
  let businessName;
7075
6969
  try {
7076
6970
  const branding = await fetchBranding(accountId);
@@ -7098,7 +6992,6 @@ app6.get("/", async (c) => {
7098
6992
  avatar: restoredAvatar,
7099
6993
  role: role ?? null,
7100
6994
  thinkingView,
7101
- onboardingComplete,
7102
6995
  businessName,
7103
6996
  conversationId: getConversationIdForSession(cacheKey) ?? null
7104
6997
  });
@@ -7293,7 +7186,7 @@ var failure_report_default = app9;
7293
7186
 
7294
7187
  // server/routes/admin/logs.ts
7295
7188
  import { existsSync as existsSync11, readdirSync as readdirSync5, readFileSync as readFileSync12, statSync as statSync5 } from "fs";
7296
- import { resolve as resolve10, basename as basename3 } from "path";
7189
+ import { resolve as resolve9, basename as basename3 } from "path";
7297
7190
 
7298
7191
  // app/lib/logs-read-resolve.ts
7299
7192
  import { existsSync as existsSync10 } from "fs";
@@ -7320,7 +7213,7 @@ app10.get("/", async (c) => {
7320
7213
  const cacheKeyParam = c.req.query("cacheKey");
7321
7214
  const download = c.req.query("download") === "1";
7322
7215
  const account = resolveAccount();
7323
- const accountLogDir = account ? resolve10(account.accountDir, "logs") : null;
7216
+ const accountLogDir = account ? resolve9(account.accountDir, "logs") : null;
7324
7217
  const logDirs = [];
7325
7218
  if (accountLogDir) logDirs.push(accountLogDir);
7326
7219
  logDirs.push(LOG_DIR);
@@ -7328,7 +7221,7 @@ app10.get("/", async (c) => {
7328
7221
  const safe = basename3(fileParam);
7329
7222
  const searched = [];
7330
7223
  for (const dir of logDirs) {
7331
- const filePath = resolve10(dir, safe);
7224
+ const filePath = resolve9(dir, safe);
7332
7225
  searched.push(filePath);
7333
7226
  try {
7334
7227
  const buffer = readFileSync12(filePath);
@@ -7440,10 +7333,10 @@ app10.get("/", async (c) => {
7440
7333
  console.warn(`[admin/logs] readdir-fail dir=${dir} reason=${reason}`);
7441
7334
  continue;
7442
7335
  }
7443
- files.filter((f) => !seen.has(f)).map((f) => ({ name: f, mtime: statSync5(resolve10(dir, f)).mtimeMs })).sort((a, b) => b.mtime - a.mtime).forEach(({ name }) => {
7336
+ files.filter((f) => !seen.has(f)).map((f) => ({ name: f, mtime: statSync5(resolve9(dir, f)).mtimeMs })).sort((a, b) => b.mtime - a.mtime).forEach(({ name }) => {
7444
7337
  seen.add(name);
7445
7338
  try {
7446
- const content = readFileSync12(resolve10(dir, name));
7339
+ const content = readFileSync12(resolve9(dir, name));
7447
7340
  const tail = content.length > TAIL_BYTES ? content.subarray(content.length - TAIL_BYTES).toString("utf-8") : content.toString("utf-8");
7448
7341
  logs[name] = tail.trim() || "(empty)";
7449
7342
  } catch (err) {
@@ -7483,7 +7376,7 @@ var claude_info_default = app11;
7483
7376
  // server/routes/admin/attachment.ts
7484
7377
  import { readFile as readFile3, readdir } from "fs/promises";
7485
7378
  import { existsSync as existsSync12 } from "fs";
7486
- import { resolve as resolve11 } from "path";
7379
+ import { resolve as resolve10 } from "path";
7487
7380
  var app12 = new Hono();
7488
7381
  app12.get("/:attachmentId", requireAdminSession, async (c) => {
7489
7382
  const attachmentId = c.req.param("attachmentId");
@@ -7495,11 +7388,11 @@ app12.get("/:attachmentId", requireAdminSession, async (c) => {
7495
7388
  if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(attachmentId)) {
7496
7389
  return new Response("Not found", { status: 404 });
7497
7390
  }
7498
- const dir = resolve11(ATTACHMENTS_ROOT, accountId, attachmentId);
7391
+ const dir = resolve10(ATTACHMENTS_ROOT, accountId, attachmentId);
7499
7392
  if (!existsSync12(dir)) {
7500
7393
  return new Response("Not found", { status: 404 });
7501
7394
  }
7502
- const metaPath = resolve11(dir, `${attachmentId}.meta.json`);
7395
+ const metaPath = resolve10(dir, `${attachmentId}.meta.json`);
7503
7396
  if (!existsSync12(metaPath)) {
7504
7397
  return new Response("Not found", { status: 404 });
7505
7398
  }
@@ -7514,7 +7407,7 @@ app12.get("/:attachmentId", requireAdminSession, async (c) => {
7514
7407
  if (!dataFile) {
7515
7408
  return new Response("Not found", { status: 404 });
7516
7409
  }
7517
- const filePath = resolve11(dir, dataFile);
7410
+ const filePath = resolve10(dir, dataFile);
7518
7411
  const buffer = await readFile3(filePath);
7519
7412
  return new Response(new Uint8Array(buffer), {
7520
7413
  headers: {
@@ -7527,13 +7420,13 @@ app12.get("/:attachmentId", requireAdminSession, async (c) => {
7527
7420
  var attachment_default = app12;
7528
7421
 
7529
7422
  // server/routes/admin/agents.ts
7530
- import { resolve as resolve12 } from "path";
7423
+ import { resolve as resolve11 } from "path";
7531
7424
  import { readdirSync as readdirSync6, readFileSync as readFileSync13, existsSync as existsSync13, rmSync } from "fs";
7532
7425
  var app13 = new Hono();
7533
7426
  app13.get("/", (c) => {
7534
7427
  const account = resolveAccount();
7535
7428
  if (!account) return c.json({ agents: [] });
7536
- const agentsDir = resolve12(account.accountDir, "agents");
7429
+ const agentsDir = resolve11(account.accountDir, "agents");
7537
7430
  if (!existsSync13(agentsDir)) return c.json({ agents: [] });
7538
7431
  const agents = [];
7539
7432
  try {
@@ -7541,7 +7434,7 @@ app13.get("/", (c) => {
7541
7434
  for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
7542
7435
  if (!entry.isDirectory()) continue;
7543
7436
  if (entry.name === "admin") continue;
7544
- const configPath2 = resolve12(agentsDir, entry.name, "config.json");
7437
+ const configPath2 = resolve11(agentsDir, entry.name, "config.json");
7545
7438
  if (!existsSync13(configPath2)) continue;
7546
7439
  try {
7547
7440
  const config = JSON.parse(readFileSync13(configPath2, "utf-8"));
@@ -7570,7 +7463,7 @@ app13.delete("/:slug", async (c) => {
7570
7463
  if (slug.includes("/") || slug.includes("..") || slug.includes("\\")) {
7571
7464
  return c.json({ error: "Invalid agent slug" }, 400);
7572
7465
  }
7573
- const agentDir = resolve12(account.accountDir, "agents", slug);
7466
+ const agentDir = resolve11(account.accountDir, "agents", slug);
7574
7467
  if (!existsSync13(agentDir)) {
7575
7468
  return c.json({ error: "Agent not found" }, 404);
7576
7469
  }
@@ -7600,7 +7493,7 @@ app13.post("/:slug/project", async (c) => {
7600
7493
  if (slug.includes("/") || slug.includes("..") || slug.includes("\\")) {
7601
7494
  return c.json({ error: "Invalid agent slug" }, 400);
7602
7495
  }
7603
- const agentDir = resolve12(account.accountDir, "agents", slug);
7496
+ const agentDir = resolve11(account.accountDir, "agents", slug);
7604
7497
  if (!existsSync13(agentDir)) {
7605
7498
  return c.json({ error: "Agent not found on disk" }, 404);
7606
7499
  }
@@ -7617,7 +7510,7 @@ var agents_default = app13;
7617
7510
  // server/routes/admin/sessions.ts
7618
7511
  import crypto from "crypto";
7619
7512
  import { resolve as resolvePath } from "path";
7620
- import { existsSync as existsSync14, mkdirSync as mkdirSync5, createWriteStream } from "fs";
7513
+ import { existsSync as existsSync14, mkdirSync as mkdirSync4, createWriteStream } from "fs";
7621
7514
 
7622
7515
  // app/lib/synthetic-marker.ts
7623
7516
  var CLOUDFLARE_MARKER_PREFIX = "Cloudflare setup completed (actionId: ";
@@ -7643,7 +7536,7 @@ var pickComponentBytes = (..._args) => null;
7643
7536
  function openResumeStreamLog(accountId, conversationId) {
7644
7537
  const dir = resolvePath(ACCOUNTS_DIR, accountId, "resume-logs");
7645
7538
  try {
7646
- mkdirSync5(dir, { recursive: true });
7539
+ mkdirSync4(dir, { recursive: true });
7647
7540
  } catch {
7648
7541
  }
7649
7542
  return createWriteStream(resolvePath(dir, `${conversationId}.log`), { flags: "a" });
@@ -8024,7 +7917,7 @@ app14.post("/:id/resume", async (c) => {
8024
7917
  await storeComponentArtefact(accountId, c2.artefactAttachmentId, bytesPick.mimeType, bytesPick.content, filename);
8025
7918
  clearHealPending(accountId, c2.artefactAttachmentId);
8026
7919
  streamLogPath.write(
8027
- `[${(/* @__PURE__ */ new Date()).toISOString()}] [render-component-persist] heal componentName=${c2.name} attachmentId=${c2.artefactAttachmentId.slice(0, 8)} mimeType=${bytesPick.mimeType} bytes=${bytesPick.content.length} outcome=ok
7920
+ `[${(/* @__PURE__ */ new Date()).toISOString()}] [component-persist] heal componentName=${c2.name} attachmentId=${c2.artefactAttachmentId.slice(0, 8)} mimeType=${bytesPick.mimeType} bytes=${bytesPick.content.length} outcome=ok
8028
7921
  `
8029
7922
  );
8030
7923
  return {
@@ -8037,7 +7930,7 @@ app14.post("/:id/resume", async (c) => {
8037
7930
  clearHealPending(accountId, c2.artefactAttachmentId);
8038
7931
  const reason2 = writeErr instanceof Error ? writeErr.message : String(writeErr);
8039
7932
  streamLogPath.write(
8040
- `[${(/* @__PURE__ */ new Date()).toISOString()}] [render-component-persist] heal componentName=${c2.name} attachmentId=${c2.artefactAttachmentId.slice(0, 8)} outcome=disk-fail reason=${JSON.stringify(reason2.slice(0, 200))}
7933
+ `[${(/* @__PURE__ */ new Date()).toISOString()}] [component-persist] heal componentName=${c2.name} attachmentId=${c2.artefactAttachmentId.slice(0, 8)} outcome=disk-fail reason=${JSON.stringify(reason2.slice(0, 200))}
8041
7934
  `
8042
7935
  );
8043
7936
  return base;
@@ -8200,25 +8093,8 @@ app14.put("/:id/label", requireAdminSession, async (c) => {
8200
8093
  });
8201
8094
  var sessions_default = app14;
8202
8095
 
8203
- // app/lib/claude-agent/onboarding-prompt.ts
8204
- var TAG18 = "[onboarding-prompt]";
8205
- async function buildOnboardingPromptBlock(accountId) {
8206
- const step = await loadOnboardingStep(accountId);
8207
- const accountIdShort = accountId.slice(0, 8);
8208
- if (step === null) {
8209
- console.log(`${TAG18} graph-unreachable accountId=${accountIdShort}`);
8210
- } else if (step === 9) {
8211
- console.log(`${TAG18} agent=admin accountId=${accountIdShort} step=9 complete`);
8212
- } else if (step === -1) {
8213
- console.log(`${TAG18} agent=admin accountId=${accountIdShort} step=missing`);
8214
- } else {
8215
- console.log(`${TAG18} agent=admin accountId=${accountIdShort} step=${step}`);
8216
- }
8217
- return { step };
8218
- }
8219
-
8220
8096
  // server/routes/admin/claude-sessions.ts
8221
- var TAG19 = "[claude-session-manager:wrapper]";
8097
+ var TAG18 = "[claude-session-manager:wrapper]";
8222
8098
  function managerBase2() {
8223
8099
  const port2 = Number(process.env.CLAUDE_SESSION_MANAGER_PORT ?? "19400");
8224
8100
  return `http://127.0.0.1:${port2}`;
@@ -8229,7 +8105,7 @@ app15.post("/", async (c) => {
8229
8105
  const cacheKey = c.get("cacheKey") ?? "";
8230
8106
  const senderId = getAccountIdForSession(cacheKey) ?? "";
8231
8107
  if (!senderId) {
8232
- console.error(`${TAG19} reject reason=no-account-id`);
8108
+ console.error(`${TAG18} reject reason=no-account-id`);
8233
8109
  return c.json({ error: "admin-account-not-resolved" }, 500);
8234
8110
  }
8235
8111
  let body = {};
@@ -8240,19 +8116,12 @@ app15.post("/", async (c) => {
8240
8116
  const channel = typeof body.channel === "string" ? body.channel : "browser";
8241
8117
  const initialMessage = typeof body.initialMessage === "string" && body.initialMessage.trim() ? body.initialMessage : null;
8242
8118
  const permissionMode = typeof body.permissionMode === "string" ? body.permissionMode : void 0;
8243
- let onboarding;
8244
- try {
8245
- const outcome = await buildOnboardingPromptBlock(senderId);
8246
- onboarding = { step: outcome.step };
8247
- } catch (err) {
8248
- console.error(`${TAG19} onboarding-resolve failed: ${err instanceof Error ? err.message : String(err)}`);
8249
- }
8250
8119
  const upstream = await fetch(`${managerBase2()}/spawn`, {
8251
8120
  method: "POST",
8252
8121
  headers: { "content-type": "application/json" },
8253
- body: JSON.stringify({ senderId, role: "admin", channel, accountId: senderId, onboarding, permissionMode })
8122
+ body: JSON.stringify({ senderId, role: "admin", channel, permissionMode })
8254
8123
  }).catch((err) => {
8255
- console.error(`${TAG19} fetch-failed op=spawn message=${err instanceof Error ? err.message : String(err)}`);
8124
+ console.error(`${TAG18} fetch-failed op=spawn message=${err instanceof Error ? err.message : String(err)}`);
8256
8125
  return null;
8257
8126
  });
8258
8127
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -8269,7 +8138,7 @@ app15.post("/", async (c) => {
8269
8138
  headers: { "content-type": "application/json" },
8270
8139
  body: JSON.stringify({ text: initialMessage })
8271
8140
  }).catch((err) => {
8272
- console.error(`${TAG19} fetch-failed op=initial-input message=${err instanceof Error ? err.message : String(err)}`);
8141
+ console.error(`${TAG18} fetch-failed op=initial-input message=${err instanceof Error ? err.message : String(err)}`);
8273
8142
  });
8274
8143
  }
8275
8144
  return new Response(upstream.body, { status: upstream.status, headers: upstream.headers });
@@ -8281,7 +8150,7 @@ app15.get("/", async (c) => {
8281
8150
  const upstream = await fetch(
8282
8151
  `${managerBase2()}/list?senderId=${encodeURIComponent(senderId)}`
8283
8152
  ).catch((err) => {
8284
- console.error(`${TAG19} fetch-failed op=list message=${err instanceof Error ? err.message : String(err)}`);
8153
+ console.error(`${TAG18} fetch-failed op=list message=${err instanceof Error ? err.message : String(err)}`);
8285
8154
  return null;
8286
8155
  });
8287
8156
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -8311,7 +8180,7 @@ app15.post("/resume", async (c) => {
8311
8180
  claudeSessionId: body.claudeSessionId
8312
8181
  })
8313
8182
  }).catch((err) => {
8314
- console.error(`${TAG19} fetch-failed op=resume message=${err instanceof Error ? err.message : String(err)}`);
8183
+ console.error(`${TAG18} fetch-failed op=resume message=${err instanceof Error ? err.message : String(err)}`);
8315
8184
  return null;
8316
8185
  });
8317
8186
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -8324,7 +8193,7 @@ app15.delete("/:sessionId", async (c) => {
8324
8193
  `${managerBase2()}/${encodeURIComponent(sessionId)}${purge}`,
8325
8194
  { method: "DELETE" }
8326
8195
  ).catch((err) => {
8327
- console.error(`${TAG19} fetch-failed op=delete message=${err instanceof Error ? err.message : String(err)}`);
8196
+ console.error(`${TAG18} fetch-failed op=delete message=${err instanceof Error ? err.message : String(err)}`);
8328
8197
  return null;
8329
8198
  });
8330
8199
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -8341,7 +8210,7 @@ app15.post("/:sessionId/archive", async (c) => {
8341
8210
  body
8342
8211
  }
8343
8212
  ).catch((err) => {
8344
- console.error(`${TAG19} fetch-failed op=archive message=${err instanceof Error ? err.message : String(err)}`);
8213
+ console.error(`${TAG18} fetch-failed op=archive message=${err instanceof Error ? err.message : String(err)}`);
8345
8214
  return null;
8346
8215
  });
8347
8216
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -8352,7 +8221,7 @@ app15.get("/:sessionId/meta", async (c) => {
8352
8221
  const upstream = await fetch(
8353
8222
  `${managerBase2()}/${encodeURIComponent(sessionId)}/meta`
8354
8223
  ).catch((err) => {
8355
- console.error(`${TAG19} fetch-failed op=meta message=${err instanceof Error ? err.message : String(err)}`);
8224
+ console.error(`${TAG18} fetch-failed op=meta message=${err instanceof Error ? err.message : String(err)}`);
8356
8225
  return null;
8357
8226
  });
8358
8227
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -8369,7 +8238,7 @@ app15.patch("/:sessionId", async (c) => {
8369
8238
  body
8370
8239
  }
8371
8240
  ).catch((err) => {
8372
- console.error(`${TAG19} fetch-failed op=patch message=${err instanceof Error ? err.message : String(err)}`);
8241
+ console.error(`${TAG18} fetch-failed op=patch message=${err instanceof Error ? err.message : String(err)}`);
8373
8242
  return null;
8374
8243
  });
8375
8244
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -8386,7 +8255,7 @@ app15.post("/:sessionId/input", async (c) => {
8386
8255
  body: rawBody
8387
8256
  }
8388
8257
  ).catch((err) => {
8389
- console.error(`${TAG19} fetch-failed op=input message=${err instanceof Error ? err.message : String(err)}`);
8258
+ console.error(`${TAG18} fetch-failed op=input message=${err instanceof Error ? err.message : String(err)}`);
8390
8259
  return null;
8391
8260
  });
8392
8261
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -8398,7 +8267,7 @@ app15.get("/:sessionId/log", async (c) => {
8398
8267
  const upstream = await fetch(
8399
8268
  `${managerBase2()}/${encodeURIComponent(sessionId)}/log${follow}`
8400
8269
  ).catch((err) => {
8401
- console.error(`${TAG19} fetch-failed op=log message=${err instanceof Error ? err.message : String(err)}`);
8270
+ console.error(`${TAG18} fetch-failed op=log message=${err instanceof Error ? err.message : String(err)}`);
8402
8271
  return null;
8403
8272
  });
8404
8273
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -8514,13 +8383,13 @@ async function cdpNavigateNewTab(url, opts = {}) {
8514
8383
  // server/routes/admin/device-browser.ts
8515
8384
  var app18 = new Hono();
8516
8385
  app18.post("/navigate", async (c) => {
8517
- const TAG21 = "[device-url:click]";
8386
+ const TAG20 = "[device-url:click]";
8518
8387
  let body;
8519
8388
  try {
8520
8389
  body = await c.req.json();
8521
8390
  } catch (err) {
8522
8391
  const detail = err instanceof Error ? err.message : String(err);
8523
- console.error(`${TAG21} reject reason=body-not-json detail=${detail} browser=fallback navigateResult=error`);
8392
+ console.error(`${TAG20} reject reason=body-not-json detail=${detail} browser=fallback navigateResult=error`);
8524
8393
  return c.json(
8525
8394
  { ok: false, navigateResult: "error", browser: "fallback", detail: "Request body was not valid JSON" },
8526
8395
  400
@@ -8530,7 +8399,7 @@ app18.post("/navigate", async (c) => {
8530
8399
  const intent = typeof body.intent === "string" ? body.intent : "";
8531
8400
  const hostname2 = typeof body.hostname === "string" ? body.hostname : "";
8532
8401
  if (!url) {
8533
- console.error(`${TAG21} reject reason=missing-url intent=${JSON.stringify(intent)} browser=fallback navigateResult=error`);
8402
+ console.error(`${TAG20} reject reason=missing-url intent=${JSON.stringify(intent)} browser=fallback navigateResult=error`);
8534
8403
  return c.json(
8535
8404
  { ok: false, navigateResult: "error", browser: "fallback", detail: "url field is required" },
8536
8405
  400
@@ -8540,7 +8409,7 @@ app18.post("/navigate", async (c) => {
8540
8409
  try {
8541
8410
  parsed = new URL(url);
8542
8411
  } catch {
8543
- console.error(`${TAG21} reject reason=url-malformed intent=${JSON.stringify(intent)} url=${url} browser=fallback navigateResult=error`);
8412
+ console.error(`${TAG20} reject reason=url-malformed intent=${JSON.stringify(intent)} url=${url} browser=fallback navigateResult=error`);
8544
8413
  return c.json(
8545
8414
  { ok: false, navigateResult: "error", browser: "fallback", detail: "url is not a valid URL" },
8546
8415
  400
@@ -8548,7 +8417,7 @@ app18.post("/navigate", async (c) => {
8548
8417
  }
8549
8418
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
8550
8419
  console.error(
8551
- `${TAG21} reject reason=scheme-not-allowed scheme=${parsed.protocol} intent=${JSON.stringify(intent)} browser=fallback navigateResult=error`
8420
+ `${TAG20} reject reason=scheme-not-allowed scheme=${parsed.protocol} intent=${JSON.stringify(intent)} browser=fallback navigateResult=error`
8552
8421
  );
8553
8422
  return c.json(
8554
8423
  {
@@ -8564,7 +8433,7 @@ app18.post("/navigate", async (c) => {
8564
8433
  const cdpOk = await ensureCdp(transport);
8565
8434
  if (!cdpOk) {
8566
8435
  console.error(
8567
- `${TAG21} intent=${JSON.stringify(intent)} browser=fallback navigateResult=cdp-unreachable hostname=${JSON.stringify(hostname2)}`
8436
+ `${TAG20} intent=${JSON.stringify(intent)} browser=fallback navigateResult=cdp-unreachable hostname=${JSON.stringify(hostname2)}`
8568
8437
  );
8569
8438
  return c.json(
8570
8439
  {
@@ -8580,7 +8449,7 @@ app18.post("/navigate", async (c) => {
8580
8449
  const browser = outcome.result === "ok" ? "vnc" : "fallback";
8581
8450
  const detailStr = outcome.detail ? ` detail=${JSON.stringify(outcome.detail.length > 230 ? outcome.detail.slice(0, 227) + "..." : outcome.detail)}` : "";
8582
8451
  console.error(
8583
- `${TAG21} intent=${JSON.stringify(intent)} browser=${browser} navigateResult=${outcome.result} hostname=${JSON.stringify(hostname2)} targetId=${outcome.targetId ?? "none"}${detailStr}`
8452
+ `${TAG20} intent=${JSON.stringify(intent)} browser=${browser} navigateResult=${outcome.result} hostname=${JSON.stringify(hostname2)} targetId=${outcome.targetId ?? "none"}${detailStr}`
8584
8453
  );
8585
8454
  if (outcome.result !== "ok") {
8586
8455
  return c.json(
@@ -8611,18 +8480,18 @@ var ALLOWED_EVENTS2 = /* @__PURE__ */ new Set([
8611
8480
  ]);
8612
8481
  var app19 = new Hono();
8613
8482
  app19.post("/", async (c) => {
8614
- const TAG21 = "[admin:events]";
8483
+ const TAG20 = "[admin:events]";
8615
8484
  let body;
8616
8485
  try {
8617
8486
  body = await c.req.json();
8618
8487
  } catch (err) {
8619
8488
  const detail = err instanceof Error ? err.message : String(err);
8620
- console.error(`${TAG21} reject reason=body-not-json detail=${detail}`);
8489
+ console.error(`${TAG20} reject reason=body-not-json detail=${detail}`);
8621
8490
  return c.json({ ok: false, detail: "Request body was not valid JSON" }, 400);
8622
8491
  }
8623
8492
  const event = typeof body.event === "string" ? body.event : "";
8624
8493
  if (!ALLOWED_EVENTS2.has(event)) {
8625
- console.error(`${TAG21} reject reason=event-not-allowed event=${JSON.stringify(event)}`);
8494
+ console.error(`${TAG20} reject reason=event-not-allowed event=${JSON.stringify(event)}`);
8626
8495
  return c.json({ ok: false, detail: `Event "${event}" is not allowed` }, 400);
8627
8496
  }
8628
8497
  const rawFields = body.fields && typeof body.fields === "object" ? body.fields : {};
@@ -8645,7 +8514,7 @@ var events_default = app19;
8645
8514
 
8646
8515
  // server/routes/admin/cloudflare.ts
8647
8516
  import { homedir as homedir4 } from "os";
8648
- import { resolve as resolve14 } from "path";
8517
+ import { resolve as resolve13 } from "path";
8649
8518
  import { readFileSync as readFileSync15 } from "fs";
8650
8519
 
8651
8520
  // app/lib/dns-label.ts
@@ -8662,10 +8531,10 @@ function isValidDomain(value) {
8662
8531
  }
8663
8532
 
8664
8533
  // app/lib/alias-domains.ts
8665
- import { existsSync as existsSync15, mkdirSync as mkdirSync6, readFileSync as readFileSync14, writeFileSync as writeFileSync9 } from "fs";
8666
- import { dirname as dirname4 } from "path";
8667
- import { resolve as resolve13 } from "path";
8668
- var ALIAS_DOMAINS_PATH = resolve13(MAXY_DIR, "alias-domains.json");
8534
+ import { existsSync as existsSync15, mkdirSync as mkdirSync5, readFileSync as readFileSync14, writeFileSync as writeFileSync9 } from "fs";
8535
+ import { dirname as dirname3 } from "path";
8536
+ import { resolve as resolve12 } from "path";
8537
+ var ALIAS_DOMAINS_PATH = resolve12(MAXY_DIR, "alias-domains.json");
8669
8538
  function readExisting() {
8670
8539
  if (!existsSync15(ALIAS_DOMAINS_PATH)) return /* @__PURE__ */ new Set();
8671
8540
  try {
@@ -8680,14 +8549,14 @@ function addAliasDomain(hostname2) {
8680
8549
  const existing = readExisting();
8681
8550
  if (existing.has(hostname2)) return;
8682
8551
  existing.add(hostname2);
8683
- mkdirSync6(dirname4(ALIAS_DOMAINS_PATH), { recursive: true });
8552
+ mkdirSync5(dirname3(ALIAS_DOMAINS_PATH), { recursive: true });
8684
8553
  writeFileSync9(ALIAS_DOMAINS_PATH, JSON.stringify([...existing], null, 2) + "\n", "utf-8");
8685
8554
  }
8686
8555
 
8687
8556
  // app/lib/script-stream-tailer.ts
8688
8557
  import * as childProcess from "child_process";
8689
- import { appendFileSync as appendFileSync2, createReadStream as createReadStream2, mkdirSync as mkdirSync7, statSync as statSync6 } from "fs";
8690
- import { dirname as dirname5 } from "path";
8558
+ import { appendFileSync as appendFileSync2, createReadStream as createReadStream2, mkdirSync as mkdirSync6, statSync as statSync6 } from "fs";
8559
+ import { dirname as dirname4 } from "path";
8691
8560
  import { StringDecoder } from "string_decoder";
8692
8561
  var SCRIPT_STREAM_RE = /^\[([^\]]+)\] \[script:([a-z][a-z0-9-]*)((?::[a-z0-9:_-]+)?)\] (.*)$/;
8693
8562
  function parseLine(line) {
@@ -8796,7 +8665,7 @@ function writeRouteMilestone(streamLogPath, scope, line) {
8796
8665
  }
8797
8666
  const ts = (/* @__PURE__ */ new Date()).toISOString();
8798
8667
  try {
8799
- mkdirSync7(dirname5(streamLogPath), { recursive: true });
8668
+ mkdirSync6(dirname4(streamLogPath), { recursive: true });
8800
8669
  appendFileSync2(streamLogPath, `[${ts}] [script:${scope}] ${line}
8801
8670
  `);
8802
8671
  } catch (err) {
@@ -8936,7 +8805,7 @@ var CLOUDFLARE_SETUP_FORM_SCHEMA = {
8936
8805
 
8937
8806
  // server/routes/admin/cloudflare.ts
8938
8807
  function cloudflareStreamLogPath(accountId, correlationId) {
8939
- return resolve14(ACCOUNTS_DIR, accountId, "cloudflare-stream-logs", `${correlationId}.log`);
8808
+ return resolve13(ACCOUNTS_DIR, accountId, "cloudflare-stream-logs", `${correlationId}.log`);
8940
8809
  }
8941
8810
  var SETUP_TIMEOUT_MS = 10 * 60 * 1e3;
8942
8811
  var DOMAINS_TIMEOUT_MS = 40 * 1e3;
@@ -8966,8 +8835,8 @@ function readDiscoveryResults(accountId) {
8966
8835
  return { tunnels: entry.tunnels, domains: entry.domains };
8967
8836
  }
8968
8837
  function loadBrandInfo() {
8969
- const platformRoot = process.env.MAXY_PLATFORM_ROOT ?? resolve14(process.cwd(), "..");
8970
- const brandPath = resolve14(platformRoot, "config", "brand.json");
8838
+ const platformRoot = process.env.MAXY_PLATFORM_ROOT ?? resolve13(process.cwd(), "..");
8839
+ const brandPath = resolve13(platformRoot, "config", "brand.json");
8971
8840
  try {
8972
8841
  const parsed = JSON.parse(readFileSync15(brandPath, "utf-8"));
8973
8842
  const hostname2 = typeof parsed.hostname === "string" && parsed.hostname ? parsed.hostname : "maxy";
@@ -9097,7 +8966,7 @@ app20.get("/domains", requireAdminSession, async (c) => {
9097
8966
  streamLogPath = cloudflareStreamLogPath(accountId, correlationId);
9098
8967
  log(`phase=stream-log-resolved path=${streamLogPath}`);
9099
8968
  const brand = loadBrandInfo();
9100
- const scriptPath = resolve14(homedir4(), "list-cf-domains.sh");
8969
+ const scriptPath = resolve13(homedir4(), "list-cf-domains.sh");
9101
8970
  const result = await runFormSpawn({
9102
8971
  scriptPath,
9103
8972
  args: [brand.hostname],
@@ -9188,7 +9057,7 @@ app20.get("/tunnels", requireAdminSession, async (c) => {
9188
9057
  if (!accountId) return err("session", "No account bound to session \u2014 refresh chat.");
9189
9058
  if (!correlationId) return err("session", "No active conversation for session \u2014 refresh chat.");
9190
9059
  streamLogPath = cloudflareStreamLogPath(accountId, correlationId);
9191
- const certPath = resolve14(homedir4(), brand.configDir, "cloudflared", "cert.pem");
9060
+ const certPath = resolve13(homedir4(), brand.configDir, "cloudflared", "cert.pem");
9192
9061
  const { existsSync: existsSync23 } = await import("fs");
9193
9062
  if (!existsSync23(certPath)) {
9194
9063
  return err("cert", `Cloudflare origin certificate is not on disk yet (${certPath}). Complete the Cloudflare login first by submitting the form once \u2014 the OAuth flow writes cert.pem.`);
@@ -9514,17 +9383,17 @@ var cloudflare_default = app20;
9514
9383
  import { createReadStream as createReadStream3 } from "fs";
9515
9384
  import { readdir as readdir2, readFile as readFile4, stat as stat4, mkdir as mkdir3, writeFile as writeFile4, unlink as unlink2 } from "fs/promises";
9516
9385
  import { realpathSync as realpathSync4 } from "fs";
9517
- import { basename as basename4, dirname as dirname6, join as join11, resolve as resolve16, sep as sep3 } from "path";
9386
+ import { basename as basename4, dirname as dirname5, join as join11, resolve as resolve15, sep as sep3 } from "path";
9518
9387
  import { Readable as Readable2 } from "stream";
9519
9388
 
9520
9389
  // app/lib/data-path.ts
9521
9390
  import { realpathSync as realpathSync3 } from "fs";
9522
- import { resolve as resolve15, normalize, sep as sep2, relative } from "path";
9523
- var PLATFORM_ROOT6 = process.env.MAXY_PLATFORM_ROOT ?? resolve15(process.cwd(), "../platform");
9524
- var DATA_ROOT = resolve15(PLATFORM_ROOT6, "..", "data");
9391
+ import { resolve as resolve14, normalize, sep as sep2, relative } from "path";
9392
+ var PLATFORM_ROOT5 = process.env.MAXY_PLATFORM_ROOT ?? resolve14(process.cwd(), "../platform");
9393
+ var DATA_ROOT = resolve14(PLATFORM_ROOT5, "..", "data");
9525
9394
  function resolveDataPath(raw) {
9526
9395
  const cleaned = normalize("/" + (raw ?? "").replace(/\\/g, "/")).replace(/^\/+/, "");
9527
- const absolute = resolve15(DATA_ROOT, cleaned);
9396
+ const absolute = resolve14(DATA_ROOT, cleaned);
9528
9397
  let dataRootReal;
9529
9398
  try {
9530
9399
  dataRootReal = realpathSync3(DATA_ROOT);
@@ -9570,7 +9439,6 @@ var UNIQUE_KEYS_BY_LABEL = {
9570
9439
  DigitalDocument: ["attachmentId"],
9571
9440
  Conversation: ["conversationId"],
9572
9441
  Message: ["messageId"],
9573
- OnboardingState: ["accountId"],
9574
9442
  Workflow: ["workflowId"],
9575
9443
  WorkflowStep: ["stepId"],
9576
9444
  WorkflowRun: ["runId"],
@@ -9883,7 +9751,7 @@ async function readMeta(absDir, baseName) {
9883
9751
  }
9884
9752
  async function readAccountNames() {
9885
9753
  const map = /* @__PURE__ */ new Map();
9886
- const accountsDir = resolve16(DATA_ROOT, "accounts");
9754
+ const accountsDir = resolve15(DATA_ROOT, "accounts");
9887
9755
  let names;
9888
9756
  try {
9889
9757
  names = await readdir2(accountsDir);
@@ -9892,7 +9760,7 @@ async function readAccountNames() {
9892
9760
  }
9893
9761
  for (const name of names) {
9894
9762
  if (!UUID_RE4.test(name)) continue;
9895
- const configPath2 = resolve16(accountsDir, name, "account.json");
9763
+ const configPath2 = resolve15(accountsDir, name, "account.json");
9896
9764
  try {
9897
9765
  const raw = await readFile4(configPath2, "utf8");
9898
9766
  const parsed = JSON.parse(raw);
@@ -10083,8 +9951,8 @@ app21.post("/upload", requireAdminSession, async (c) => {
10083
9951
  }
10084
9952
  const safeName = basename4(file.name).replace(/[\0/\\]/g, "_");
10085
9953
  const finalName = `${Date.now()}-${safeName}`;
10086
- const destDir = resolve16(DATA_ROOT, "uploads", accountId);
10087
- const destPath = resolve16(destDir, finalName);
9954
+ const destDir = resolve15(DATA_ROOT, "uploads", accountId);
9955
+ const destPath = resolve15(destDir, finalName);
10088
9956
  try {
10089
9957
  await mkdir3(destDir, { recursive: true });
10090
9958
  const dataRootReal = realpathSync4(DATA_ROOT);
@@ -10142,7 +10010,7 @@ app21.delete("/", requireAdminSession, async (c) => {
10142
10010
  }
10143
10011
  const dot = base.lastIndexOf(".");
10144
10012
  const stem = dot === -1 ? base : base.slice(0, dot);
10145
- const sidecarPath = UUID_RE4.test(stem) && base !== `${stem}.meta.json` ? join11(dirname6(absolute), `${stem}.meta.json`) : null;
10013
+ const sidecarPath = UUID_RE4.test(stem) && base !== `${stem}.meta.json` ? join11(dirname5(absolute), `${stem}.meta.json`) : null;
10146
10014
  await unlink2(absolute);
10147
10015
  if (sidecarPath) {
10148
10016
  try {
@@ -10759,9 +10627,6 @@ var GRAPH_LABEL_COLOURS = {
10759
10627
  WorkflowStep: "#5A8E96",
10760
10628
  WorkflowRun: "#7AAAB2",
10761
10629
  StepResult: "#9CC4CB",
10762
- // Onboarding — muted violet (sits between conversation plum and
10763
- // workflow teal but shares neither hue)
10764
- OnboardingState: "#7A5A8A",
10765
10630
  // Email — muted moss (hue-adjacent to Knowledge but lower-saturation
10766
10631
  // and warmer; never co-rendered with KnowledgeDocument so visual
10767
10632
  // confusion doesn't apply, but kept distinguishable for the legend)
@@ -10808,7 +10673,6 @@ var FILTER_TOP_LEVEL_LABELS = Object.freeze(
10808
10673
  "Project",
10809
10674
  "Event",
10810
10675
  "Workflow",
10811
- "OnboardingState",
10812
10676
  "Email",
10813
10677
  "EmailAccount",
10814
10678
  "Agent"
@@ -11807,7 +11671,7 @@ var file_attach_default = app28;
11807
11671
  // server/routes/admin/sidebar-artefacts.ts
11808
11672
  import neo4j2 from "neo4j-driver";
11809
11673
  import { readFile as readFile5, readdir as readdir3, stat as stat5 } from "fs/promises";
11810
- import { resolve as resolve17, relative as relative2, isAbsolute } from "path";
11674
+ import { resolve as resolve16, relative as relative2, isAbsolute } from "path";
11811
11675
  import { existsSync as existsSync16 } from "fs";
11812
11676
  var LIMIT = 50;
11813
11677
  var TEXT_MIME_PREFIXES = ["text/", "application/json", "application/markdown"];
@@ -11824,7 +11688,7 @@ app29.get("/", requireAdminSession, async (c) => {
11824
11688
  if (docs === null) {
11825
11689
  return c.json({ error: "Failed to load artefacts" }, 500);
11826
11690
  }
11827
- const accountDir = resolve17(ACCOUNTS_DIR, accountId);
11691
+ const accountDir = resolve16(ACCOUNTS_DIR, accountId);
11828
11692
  const agents = await fetchAgentTemplateRows(accountDir);
11829
11693
  const artefacts = [...docs, ...agents].sort(
11830
11694
  (a, b) => (b.updatedAt ?? "").localeCompare(a.updatedAt ?? "")
@@ -11887,8 +11751,8 @@ async function readArtefactContent(accountId, attachmentId, mimeType, displayNam
11887
11751
  logSkip(displayName, "non-text-mime", mimeType);
11888
11752
  return { content: "", skipReason: "non-text-mime" };
11889
11753
  }
11890
- const accountDir = resolve17(ATTACHMENTS_ROOT, accountId);
11891
- const dir = resolve17(accountDir, attachmentId);
11754
+ const accountDir = resolve16(ATTACHMENTS_ROOT, accountId);
11755
+ const dir = resolve16(accountDir, attachmentId);
11892
11756
  try {
11893
11757
  validateFilePathInAccount(dir, accountDir);
11894
11758
  } catch {
@@ -11902,7 +11766,7 @@ async function readArtefactContent(accountId, attachmentId, mimeType, displayNam
11902
11766
  logSkip(displayName, "missing-on-disk", mimeType);
11903
11767
  return { content: "", skipReason: "missing-on-disk" };
11904
11768
  }
11905
- return { content: await readFile5(resolve17(dir, dataFile), "utf-8"), skipReason: null };
11769
+ return { content: await readFile5(resolve16(dir, dataFile), "utf-8"), skipReason: null };
11906
11770
  } catch (err) {
11907
11771
  const message = err instanceof Error ? err.message : String(err);
11908
11772
  console.error(`[admin/sidebar-artefacts] read-failed attachmentId=${attachmentId.slice(0, 8)} error="${message}"`);
@@ -11918,8 +11782,8 @@ function logSkip(name, reason, mimeType) {
11918
11782
  async function fetchAgentTemplateRows(accountDir) {
11919
11783
  const rows = [];
11920
11784
  for (const filename of ADMIN_AGENT_FILES) {
11921
- const overridePath = resolve17(accountDir, "agents", "admin", filename);
11922
- const bundledPath = resolve17(PLATFORM_ROOT, "templates", "agents", "admin", filename);
11785
+ const overridePath = resolve16(accountDir, "agents", "admin", filename);
11786
+ const bundledPath = resolve16(PLATFORM_ROOT, "templates", "agents", "admin", filename);
11923
11787
  const labelStem = filename.replace(/\.md$/, "");
11924
11788
  const row = await readAgentTemplateRow({
11925
11789
  id: `agent-template:admin:${filename}`,
@@ -11933,12 +11797,12 @@ async function fetchAgentTemplateRows(accountDir) {
11933
11797
  });
11934
11798
  if (row) rows.push(row);
11935
11799
  }
11936
- const overrideDir = resolve17(accountDir, "specialists", "agents");
11937
- const bundledDir = resolve17(PLATFORM_ROOT, "templates", "specialists", "agents");
11800
+ const overrideDir = resolve16(accountDir, "specialists", "agents");
11801
+ const bundledDir = resolve16(PLATFORM_ROOT, "templates", "specialists", "agents");
11938
11802
  const specialistNames = await unionSpecialistFilenames(overrideDir, bundledDir);
11939
11803
  for (const filename of specialistNames) {
11940
- const overridePath = resolve17(overrideDir, filename);
11941
- const bundledPath = resolve17(bundledDir, filename);
11804
+ const overridePath = resolve16(overrideDir, filename);
11805
+ const bundledPath = resolve16(bundledDir, filename);
11942
11806
  const row = await readAgentTemplateRow({
11943
11807
  id: `agent-template:specialist:${filename}`,
11944
11808
  displayName: filename.replace(/\.md$/, ""),
@@ -12023,7 +11887,7 @@ var sidebar_artefacts_default = app29;
12023
11887
 
12024
11888
  // server/routes/admin/sidebar-artefact-save.ts
12025
11889
  import { mkdir as mkdir4, readdir as readdir4, stat as stat6, writeFile as writeFile5 } from "fs/promises";
12026
- import { resolve as resolve18 } from "path";
11890
+ import { resolve as resolve17 } from "path";
12027
11891
  import { existsSync as existsSync17 } from "fs";
12028
11892
  var ADMIN_AGENT_FILES2 = /* @__PURE__ */ new Set(["IDENTITY.md", "SOUL.md", "KNOWLEDGE.md"]);
12029
11893
  var UUID_RE5 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
@@ -12036,7 +11900,7 @@ app30.post("/", requireAdminSession, async (c) => {
12036
11900
  if (!body || typeof body.id !== "string" || typeof body.content !== "string") {
12037
11901
  return c.json({ error: "id and content required" }, 400);
12038
11902
  }
12039
- const accountDir = resolve18(ACCOUNTS_DIR, accountId);
11903
+ const accountDir = resolve17(ACCOUNTS_DIR, accountId);
12040
11904
  const resolved = await resolveSavePath(body.id, accountId, accountDir);
12041
11905
  if (resolved.kind === "heal-race") {
12042
11906
  c.header("Retry-After", "2");
@@ -12081,17 +11945,17 @@ async function resolveSavePath(id, accountId, accountDir) {
12081
11945
  if (role !== "admin" || !ADMIN_AGENT_FILES2.has(filename)) {
12082
11946
  return { kind: "reject", status: 400, reason: "invalid-id" };
12083
11947
  }
12084
- const parent = resolve18(accountDir, "agents", "admin");
11948
+ const parent = resolve17(accountDir, "agents", "admin");
12085
11949
  await mkdir4(parent, { recursive: true });
12086
11950
  try {
12087
11951
  validateFilePathInAccount(parent, accountDir);
12088
11952
  } catch {
12089
11953
  return { kind: "reject", status: 400, reason: "containment-rejected" };
12090
11954
  }
12091
- return { kind: "admin-template", path: resolve18(parent, filename) };
11955
+ return { kind: "admin-template", path: resolve17(parent, filename) };
12092
11956
  }
12093
11957
  if (UUID_RE5.test(id)) {
12094
- const dir = resolve18(ATTACHMENTS_ROOT, accountId, id);
11958
+ const dir = resolve17(ATTACHMENTS_ROOT, accountId, id);
12095
11959
  if (!existsSync17(dir)) {
12096
11960
  const attShort = id.slice(0, 8);
12097
11961
  if (isHealPending(accountId, id)) {
@@ -12124,7 +11988,7 @@ async function resolveSavePath(id, accountId, accountDir) {
12124
11988
  }
12125
11989
  }
12126
11990
  try {
12127
- validateFilePathInAccount(dir, resolve18(ATTACHMENTS_ROOT, accountId));
11991
+ validateFilePathInAccount(dir, resolve17(ATTACHMENTS_ROOT, accountId));
12128
11992
  } catch {
12129
11993
  return { kind: "reject", status: 400, reason: "containment-rejected" };
12130
11994
  }
@@ -12133,7 +11997,7 @@ async function resolveSavePath(id, accountId, accountDir) {
12133
11997
  if (!dataFile) {
12134
11998
  return { kind: "reject", status: 400, reason: "not-found" };
12135
11999
  }
12136
- return { kind: "knowledge-doc", path: resolve18(dir, dataFile) };
12000
+ return { kind: "knowledge-doc", path: resolve17(dir, dataFile) };
12137
12001
  }
12138
12002
  return { kind: "reject", status: 400, reason: "invalid-id" };
12139
12003
  }
@@ -12145,7 +12009,7 @@ var sidebar_artefact_save_default = app30;
12145
12009
  // server/routes/admin/sidebar-artefact-content.ts
12146
12010
  import { readFile as readFile6, readdir as readdir5 } from "fs/promises";
12147
12011
  import { existsSync as existsSync18 } from "fs";
12148
- import { resolve as resolve19 } from "path";
12012
+ import { resolve as resolve18 } from "path";
12149
12013
  var UUID_RE6 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
12150
12014
  var app31 = new Hono();
12151
12015
  app31.get("/", requireAdminSession, async (c) => {
@@ -12157,14 +12021,14 @@ app31.get("/", requireAdminSession, async (c) => {
12157
12021
  console.error(`[admin/sidebar-artefact-content] not-found id=${id.slice(0, 8)}`);
12158
12022
  return new Response("Not found", { status: 404 });
12159
12023
  }
12160
- const dir = resolve19(ATTACHMENTS_ROOT, accountId, id);
12024
+ const dir = resolve18(ATTACHMENTS_ROOT, accountId, id);
12161
12025
  if (!existsSync18(dir)) {
12162
12026
  console.error(`[admin/sidebar-artefact-content] not-found id=${id.slice(0, 8)}`);
12163
12027
  return new Response("Not found", { status: 404 });
12164
12028
  }
12165
12029
  let meta;
12166
12030
  try {
12167
- meta = JSON.parse(await readFile6(resolve19(dir, `${id}.meta.json`), "utf-8"));
12031
+ meta = JSON.parse(await readFile6(resolve18(dir, `${id}.meta.json`), "utf-8"));
12168
12032
  } catch {
12169
12033
  console.error(`[admin/sidebar-artefact-content] not-found id=${id.slice(0, 8)}`);
12170
12034
  return new Response("Not found", { status: 404 });
@@ -12176,7 +12040,7 @@ app31.get("/", requireAdminSession, async (c) => {
12176
12040
  return new Response("Not found", { status: 404 });
12177
12041
  }
12178
12042
  const start = Date.now();
12179
- const buffer = await readFile6(resolve19(dir, dataFile));
12043
+ const buffer = await readFile6(resolve18(dir, dataFile));
12180
12044
  const ms = Date.now() - start;
12181
12045
  console.log(
12182
12046
  `[admin/sidebar-artefact-content] account=${accountId} id=${id.slice(0, 8)} mime=${meta.mimeType} bytes=${buffer.length} ms=${ms}`
@@ -12193,10 +12057,10 @@ var sidebar_artefact_content_default = app31;
12193
12057
 
12194
12058
  // server/routes/admin/health.ts
12195
12059
  import { existsSync as existsSync19, readFileSync as readFileSync16 } from "fs";
12196
- import { resolve as resolve20, join as join12 } from "path";
12197
- var PLATFORM_ROOT7 = process.env.MAXY_PLATFORM_ROOT ?? resolve20(process.cwd(), "..");
12060
+ import { resolve as resolve19, join as join12 } from "path";
12061
+ var PLATFORM_ROOT6 = process.env.MAXY_PLATFORM_ROOT ?? resolve19(process.cwd(), "..");
12198
12062
  var brandHostname = "maxy";
12199
- var brandJsonPath = join12(PLATFORM_ROOT7, "config", "brand.json");
12063
+ var brandJsonPath = join12(PLATFORM_ROOT6, "config", "brand.json");
12200
12064
  if (existsSync19(brandJsonPath)) {
12201
12065
  try {
12202
12066
  const brand = JSON.parse(readFileSync16(brandJsonPath, "utf-8"));
@@ -12204,7 +12068,7 @@ if (existsSync19(brandJsonPath)) {
12204
12068
  } catch {
12205
12069
  }
12206
12070
  }
12207
- var VERSION_FILE = resolve20(PLATFORM_ROOT7, `config/.${brandHostname}-version`);
12071
+ var VERSION_FILE = resolve19(PLATFORM_ROOT6, `config/.${brandHostname}-version`);
12208
12072
  var PROCESS_STARTED_AT = (/* @__PURE__ */ new Date()).toISOString();
12209
12073
  var PROBE_TIMEOUT_MS = 1e3;
12210
12074
  function readVersion() {
@@ -12292,7 +12156,7 @@ var admin_default = app33;
12292
12156
 
12293
12157
  // server/routes/sites.ts
12294
12158
  import { existsSync as existsSync20, readFileSync as readFileSync17, realpathSync as realpathSync5, statSync as statSync7 } from "fs";
12295
- import { resolve as resolve21 } from "path";
12159
+ import { resolve as resolve20 } from "path";
12296
12160
  var SAFE_SEG_RE = /^[a-z0-9_][a-z0-9_.-]{0,99}$/i;
12297
12161
  var MIME = {
12298
12162
  ".html": "text/html; charset=utf-8",
@@ -12349,8 +12213,8 @@ app34.get("/:rel{.*}", (c) => {
12349
12213
  }
12350
12214
  segments.push(seg);
12351
12215
  }
12352
- const rootDir = resolve21(account.accountDir, "sites");
12353
- let filePath = segments.length === 0 ? rootDir : resolve21(rootDir, ...segments);
12216
+ const rootDir = resolve20(account.accountDir, "sites");
12217
+ let filePath = segments.length === 0 ? rootDir : resolve20(rootDir, ...segments);
12354
12218
  if (filePath !== rootDir && !filePath.startsWith(rootDir + "/")) {
12355
12219
  console.error(`[sites] path-traversal-rejected path=${reqPath} reason=escape status=403`);
12356
12220
  return c.text("Forbidden", 403);
@@ -12370,7 +12234,7 @@ app34.get("/:rel{.*}", (c) => {
12370
12234
  return c.redirect(target, 301);
12371
12235
  }
12372
12236
  if (stat7?.isDirectory()) {
12373
- filePath = resolve21(filePath, "index.html");
12237
+ filePath = resolve20(filePath, "index.html");
12374
12238
  }
12375
12239
  if (!filePath.startsWith(rootDir + "/")) {
12376
12240
  console.error(`[sites] path-traversal-rejected path=${reqPath} reason=escape status=403`);
@@ -12511,7 +12375,7 @@ function startGraphHealthTimer() {
12511
12375
  }
12512
12376
 
12513
12377
  // app/lib/whatsapp/inbound/claude-bridge.ts
12514
- var TAG20 = "[whatsapp-adaptor]";
12378
+ var TAG19 = "[whatsapp-adaptor]";
12515
12379
  function whatsappTurnTimeoutMs() {
12516
12380
  return Number(process.env.WHATSAPP_PTY_TURN_TIMEOUT_MS ?? String(5 * 6e4));
12517
12381
  }
@@ -12532,7 +12396,7 @@ async function dispatchToClaude(input) {
12532
12396
  await input.reply(result.turnText);
12533
12397
  } catch (err) {
12534
12398
  const m = err instanceof Error ? err.message : String(err);
12535
- console.error(`${TAG20} reject reason=reply-failed senderId=${input.senderId} message=${m}`);
12399
+ console.error(`${TAG19} reject reason=reply-failed senderId=${input.senderId} message=${m}`);
12536
12400
  }
12537
12401
  }
12538
12402
  function startReaper2() {
@@ -12542,7 +12406,7 @@ function startReaper2() {
12542
12406
  // ../lib/entitlement/src/index.ts
12543
12407
  import { createPublicKey, createHash as createHash3, verify as cryptoVerify } from "crypto";
12544
12408
  import { existsSync as existsSync21, readFileSync as readFileSync18, statSync as statSync8 } from "fs";
12545
- import { resolve as resolve22 } from "path";
12409
+ import { resolve as resolve21 } from "path";
12546
12410
 
12547
12411
  // ../lib/entitlement/src/canonicalize.ts
12548
12412
  function canonicalize(value) {
@@ -12577,7 +12441,7 @@ var PUBKEY_SHA256 = "8eee6bcb33545fd13b16d3199a5735ca5db5062834c7b49dfe4f23801d9
12577
12441
  var GRACE_DAYS = 7;
12578
12442
  var GRACE_MS = GRACE_DAYS * 24 * 60 * 60 * 1e3;
12579
12443
  function pubkeyPath(brand) {
12580
- return resolve22(brand.platformRoot, "lib", "entitlement", "rubytech-pubkey.pem");
12444
+ return resolve21(brand.platformRoot, "lib", "entitlement", "rubytech-pubkey.pem");
12581
12445
  }
12582
12446
  var memo = null;
12583
12447
  function memoKey(mtimeMs, account) {
@@ -12589,7 +12453,7 @@ function resolveEntitlement(brand, account) {
12589
12453
  if (brand.commercialMode !== true) {
12590
12454
  return logResolved(implicitTrust(account), null);
12591
12455
  }
12592
- const entitlementPath = resolve22(brand.configDir, "entitlement.json");
12456
+ const entitlementPath = resolve21(brand.configDir, "entitlement.json");
12593
12457
  if (!existsSync21(entitlementPath)) {
12594
12458
  return logResolved(anonymousFallback("missing"), { reason: "missing" });
12595
12459
  }
@@ -12779,8 +12643,8 @@ function clientFrom(c) {
12779
12643
  c.req.header("x-forwarded-for")
12780
12644
  );
12781
12645
  }
12782
- var PLATFORM_ROOT8 = process.env.MAXY_PLATFORM_ROOT || "";
12783
- var BRAND_JSON_PATH = PLATFORM_ROOT8 ? join13(PLATFORM_ROOT8, "config", "brand.json") : "";
12646
+ var PLATFORM_ROOT7 = process.env.MAXY_PLATFORM_ROOT || "";
12647
+ var BRAND_JSON_PATH = PLATFORM_ROOT7 ? join13(PLATFORM_ROOT7, "config", "brand.json") : "";
12784
12648
  var BRAND = { productName: "Maxy", hostname: "maxy", configDir: ".maxy", domain: "getmaxy.com" };
12785
12649
  if (BRAND_JSON_PATH && !existsSync22(BRAND_JSON_PATH)) {
12786
12650
  console.error(`[brand] WARNING: brand.json not found at ${BRAND_JSON_PATH} \u2014 using Maxy defaults`);
@@ -13180,8 +13044,8 @@ app35.get("/agent-assets/:slug/:filename", (c) => {
13180
13044
  console.error(`[agent-assets] no-account slug=${slug} file=${filename}`);
13181
13045
  return c.text("Not found", 404);
13182
13046
  }
13183
- const filePath = resolve23(account.accountDir, "agents", slug, "assets", filename);
13184
- const expectedDir = resolve23(account.accountDir, "agents", slug, "assets");
13047
+ const filePath = resolve22(account.accountDir, "agents", slug, "assets", filename);
13048
+ const expectedDir = resolve22(account.accountDir, "agents", slug, "assets");
13185
13049
  if (!filePath.startsWith(expectedDir + "/")) {
13186
13050
  console.error(`[agent-assets] path-traversal-rejected slug=${slug} file=${filename}`);
13187
13051
  return c.text("Forbidden", 403);
@@ -13210,8 +13074,8 @@ app35.get("/generated/:filename", (c) => {
13210
13074
  console.error(`[generated] serve file=${filename} status=404`);
13211
13075
  return c.text("Not found", 404);
13212
13076
  }
13213
- const filePath = resolve23(account.accountDir, "generated", filename);
13214
- const expectedDir = resolve23(account.accountDir, "generated");
13077
+ const filePath = resolve22(account.accountDir, "generated", filename);
13078
+ const expectedDir = resolve22(account.accountDir, "generated");
13215
13079
  if (!filePath.startsWith(expectedDir + "/")) {
13216
13080
  console.error(`[generated] serve file=${filename} status=403`);
13217
13081
  return c.text("Forbidden", 403);
@@ -13251,8 +13115,8 @@ var brandScript = `<script>window.__BRAND__=${JSON.stringify({
13251
13115
  })}</script>`;
13252
13116
  function readInstalledVersion() {
13253
13117
  try {
13254
- if (!PLATFORM_ROOT8) return "unknown";
13255
- const versionFile = join13(PLATFORM_ROOT8, "config", `.${BRAND.hostname}-version`);
13118
+ if (!PLATFORM_ROOT7) return "unknown";
13119
+ const versionFile = join13(PLATFORM_ROOT7, "config", `.${BRAND.hostname}-version`);
13256
13120
  if (!existsSync22(versionFile)) return "unknown";
13257
13121
  const content = readFileSync19(versionFile, "utf-8").trim();
13258
13122
  return content || "unknown";
@@ -13295,7 +13159,7 @@ var clientErrorReporterScript = `<script>
13295
13159
  function cachedHtml(file) {
13296
13160
  let html = htmlCache.get(file);
13297
13161
  if (!html) {
13298
- html = readFileSync19(resolve23(process.cwd(), "public", file), "utf-8");
13162
+ html = readFileSync19(resolve22(process.cwd(), "public", file), "utf-8");
13299
13163
  const productNameEsc = escapeHtml(BRAND.productName);
13300
13164
  html = html.replace(/<title>([^<]*)<\/title>/, (_match, inner) => `<title>${escapeHtml(inner).replace(/Maxy/g, productNameEsc)}</title>`);
13301
13165
  html = html.replace('href="/favicon.ico"', `href="${escapeHtml(brandFaviconPath)}"`);
@@ -13403,7 +13267,7 @@ app35.use("/vnc-popout.html", logViewerFetch);
13403
13267
  app35.get("/vnc-popout.html", (c) => {
13404
13268
  let html = htmlCache.get("vnc-popout.html");
13405
13269
  if (!html) {
13406
- html = readFileSync19(resolve23(process.cwd(), "public", "vnc-popout.html"), "utf-8");
13270
+ html = readFileSync19(resolve22(process.cwd(), "public", "vnc-popout.html"), "utf-8");
13407
13271
  const name = escapeHtml(BRAND.productName);
13408
13272
  html = html.replace("<title>Browser \u2014 Maxy</title>", `<title>${name}</title>`);
13409
13273
  html = html.replace("</head>", ` ${brandScript}
@@ -13455,7 +13319,7 @@ app35.get("/data", (c) => {
13455
13319
  app35.get("/docs/desktop-code-controls", (c) => {
13456
13320
  const host = (c.req.header("host") ?? "").split(":")[0];
13457
13321
  if (isPublicHost(host)) return c.text("Not found", 404);
13458
- const docsPath = PLATFORM_ROOT8 ? resolve23(PLATFORM_ROOT8, "..", "docs", "desktop-code-controls.md") : resolve23(process.cwd(), "docs", "desktop-code-controls.md");
13322
+ const docsPath = PLATFORM_ROOT7 ? resolve22(PLATFORM_ROOT7, "..", "docs", "desktop-code-controls.md") : resolve22(process.cwd(), "docs", "desktop-code-controls.md");
13459
13323
  if (!existsSync22(docsPath)) {
13460
13324
  console.error(`[docs] desktop-code-controls.md missing at ${docsPath}`);
13461
13325
  return c.text(`docs/desktop-code-controls.md not found at ${docsPath}`, 404);
@@ -13590,7 +13454,7 @@ reconcileEnabledPlugins(bootAccount?.accountDir, bootAccount?.config);
13590
13454
  (async () => {
13591
13455
  if (!bootAccount) return;
13592
13456
  try {
13593
- const { recoverRunningCloudflareTasks } = await import("./cloudflare-task-tracker-QVOGHKWV.js");
13457
+ const { recoverRunningCloudflareTasks } = await import("./cloudflare-task-tracker-4PKOLE4H.js");
13594
13458
  const result = await recoverRunningCloudflareTasks(
13595
13459
  bootAccount.accountId,
13596
13460
  configDirForWhatsApp,
@@ -13650,7 +13514,7 @@ if (bootAccountConfig?.whatsapp) {
13650
13514
  }
13651
13515
  init({
13652
13516
  configDir: configDirForWhatsApp,
13653
- platformRoot: resolve23(process.env.MAXY_PLATFORM_ROOT ?? join13(__dirname, "..")),
13517
+ platformRoot: resolve22(process.env.MAXY_PLATFORM_ROOT ?? join13(__dirname, "..")),
13654
13518
  accountConfig: bootAccountConfig,
13655
13519
  onMessage: async (msg) => {
13656
13520
  if (process.env.WHATSAPP_PTY_BRIDGE_ENABLED === "true" && msg.text && !msg.isOwnerMirror) {