@rubytech/create-realagent 1.0.640 → 1.0.643

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 (148) hide show
  1. package/dist/index.js +7 -3
  2. package/package.json +1 -1
  3. package/payload/platform/plugins/memory/PLUGIN.md +8 -12
  4. package/payload/platform/plugins/memory/mcp/dist/index.js +19 -47
  5. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  6. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +20 -48
  7. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts.map +1 -1
  8. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +21 -287
  9. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js.map +1 -1
  10. package/payload/platform/plugins/memory/references/graph-primitives.md +24 -13
  11. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +46 -2
  12. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  13. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts.map +1 -1
  14. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +9 -0
  15. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -1
  16. package/payload/platform/plugins/workflows/mcp/dist/index.js +16 -0
  17. package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -1
  18. package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts +38 -0
  19. package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts.map +1 -0
  20. package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js +82 -0
  21. package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js.map +1 -0
  22. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts.map +1 -1
  23. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +35 -0
  24. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
  25. package/payload/server/public/assets/{admin-jpGCzN83.js → admin-BTfeGAIg.js} +41 -41
  26. package/payload/server/public/assets/{arc-DaD1u5gI.js → arc-DcrodP5U.js} +1 -1
  27. package/payload/server/public/assets/architecture-YZFGNWBL-C38eyeNF.js +1 -0
  28. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-OaixqJSY.js → architectureDiagram-Q4EWVU46-Cvo_8X6C.js} +1 -1
  29. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-ChbWwdfi.js → blockDiagram-DXYQGD6D-CEK06TEn.js} +1 -1
  30. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-6r7dvkBG.js → c4Diagram-AHTNJAMY-QjYUSwTU.js} +1 -1
  31. package/payload/server/public/assets/channel-D0dIwjlN.js +1 -0
  32. package/payload/server/public/assets/{chunk-2KRD3SAO-DNeXC6EU.js → chunk-2KRD3SAO-BBifNfFc.js} +1 -1
  33. package/payload/server/public/assets/{chunk-336JU56O-CZH22klX.js → chunk-336JU56O-B-N_zWuf.js} +2 -2
  34. package/payload/server/public/assets/chunk-426QAEUC-C8oXXITm.js +1 -0
  35. package/payload/server/public/assets/{chunk-4BX2VUAB-IcfD9Mfv.js → chunk-4BX2VUAB-CtDQKj9B.js} +1 -1
  36. package/payload/server/public/assets/{chunk-4TB4RGXK-CKA9rXZu.js → chunk-4TB4RGXK-Dnu9n3p1.js} +1 -1
  37. package/payload/server/public/assets/{chunk-55IACEB6-B65N4qpl.js → chunk-55IACEB6-DSLoJJSj.js} +1 -1
  38. package/payload/server/public/assets/{chunk-5FUZZQ4R-u7p0S5bJ.js → chunk-5FUZZQ4R-rx-IvMNE.js} +1 -1
  39. package/payload/server/public/assets/{chunk-5PVQY5BW-B1E88VcH.js → chunk-5PVQY5BW-B9w9AKCS.js} +1 -1
  40. package/payload/server/public/assets/{chunk-67CJDMHE-DIue23pI.js → chunk-67CJDMHE-C1yEjtiu.js} +1 -1
  41. package/payload/server/public/assets/{chunk-7N4EOEYR-BQ9OzsfS.js → chunk-7N4EOEYR-C2f3zeVH.js} +1 -1
  42. package/payload/server/public/assets/{chunk-AA7GKIK3-RpSCHdZM.js → chunk-AA7GKIK3-B_U-NsDK.js} +1 -1
  43. package/payload/server/public/assets/{chunk-BSJP7CBP-Dg2E_8Wn.js → chunk-BSJP7CBP-DM6_wafW.js} +1 -1
  44. package/payload/server/public/assets/{chunk-CIAEETIT-BKZA8eJP.js → chunk-CIAEETIT-DG7WkfNj.js} +1 -1
  45. package/payload/server/public/assets/{chunk-EDXVE4YY-jDBKFDJB.js → chunk-EDXVE4YY-aS3_rdwQ.js} +1 -1
  46. package/payload/server/public/assets/{chunk-ENJZ2VHE-CAHIipTH.js → chunk-ENJZ2VHE-r1I0uoCf.js} +1 -1
  47. package/payload/server/public/assets/{chunk-FMBD7UC4-FHlW2hpP.js → chunk-FMBD7UC4-CTm3YRE5.js} +1 -1
  48. package/payload/server/public/assets/{chunk-FOC6F5B3-CAIHldV7.js → chunk-FOC6F5B3-CAIttx3K.js} +1 -1
  49. package/payload/server/public/assets/{chunk-ICPOFSXX-C9ojfLDm.js → chunk-ICPOFSXX-DQFV4c1l.js} +2 -2
  50. package/payload/server/public/assets/{chunk-K5T4RW27-HA4lma0b.js → chunk-K5T4RW27-B2WCPQBa.js} +1 -1
  51. package/payload/server/public/assets/{chunk-KGLVRYIC-CimijL8o.js → chunk-KGLVRYIC-C6w2sUOF.js} +1 -1
  52. package/payload/server/public/assets/{chunk-LIHQZDEY-B5hk7dNX.js → chunk-LIHQZDEY-BT1hcDTK.js} +1 -1
  53. package/payload/server/public/assets/{chunk-ORNJ4GCN-BVm-YmZh.js → chunk-ORNJ4GCN-Brl32BSe.js} +1 -1
  54. package/payload/server/public/assets/{chunk-OYMX7WX6-Bc8ZyHQH.js → chunk-OYMX7WX6-BCO6n1CX.js} +1 -1
  55. package/payload/server/public/assets/chunk-QZHKN3VN-BE_lylks.js +1 -0
  56. package/payload/server/public/assets/{chunk-U2HBQHQK-CgwbVvji.js → chunk-U2HBQHQK-BvgC0fpb.js} +1 -1
  57. package/payload/server/public/assets/{chunk-X2U36JSP-D4PiRakQ.js → chunk-X2U36JSP-3yLdcqYf.js} +1 -1
  58. package/payload/server/public/assets/{chunk-XPW4576I-DgiaNQ32.js → chunk-XPW4576I-D876RWxK.js} +1 -1
  59. package/payload/server/public/assets/{chunk-YZCP3GAM-jgwS2uNT.js → chunk-YZCP3GAM-CiuA4hOC.js} +1 -1
  60. package/payload/server/public/assets/{chunk-ZZ45TVLE-UdCCrEj5.js → chunk-ZZ45TVLE-COjEBPzv.js} +1 -1
  61. package/payload/server/public/assets/classDiagram-6PBFFD2Q-DH37CWIF.js +1 -0
  62. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DNJ7bv8r.js +1 -0
  63. package/payload/server/public/assets/clone-rrGuX3ZR.js +1 -0
  64. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-D8laakap.js → cose-bilkent-S5V4N54A-Dap0yL0o.js} +1 -1
  65. package/payload/server/public/assets/{dagre-3T6_8Ajq.js → dagre-DBbjK-Cf.js} +1 -1
  66. package/payload/server/public/assets/{dagre-KV5264BT-CzjS08zx.js → dagre-KV5264BT-DEia9UJj.js} +1 -1
  67. package/payload/server/public/assets/data-DHhDRGaC.js +1 -0
  68. package/payload/server/public/assets/{diagram-5BDNPKRD-eG7XwxOn.js → diagram-5BDNPKRD-CWSP9MzJ.js} +1 -1
  69. package/payload/server/public/assets/{diagram-G4DWMVQ6-DmVrtCUt.js → diagram-G4DWMVQ6-DWRsfitL.js} +1 -1
  70. package/payload/server/public/assets/{diagram-MMDJMWI5-ER1KP2RD.js → diagram-MMDJMWI5-n-jyzS4D.js} +1 -1
  71. package/payload/server/public/assets/{diagram-TYMM5635-kH-bn3pm.js → diagram-TYMM5635-CLPTbfLq.js} +1 -1
  72. package/payload/server/public/assets/{dist-Dl3zB445.js → dist-Tkw8EOuG.js} +1 -1
  73. package/payload/server/public/assets/{erDiagram-SMLLAGMA-Clya83Yf.js → erDiagram-SMLLAGMA-CmPC9Cnc.js} +1 -1
  74. package/payload/server/public/assets/{flatten-DOi5FhnR.js → flatten-Db2kUB5j.js} +1 -1
  75. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BG1UIazn.js → flowDiagram-DWJPFMVM-DKMNmUbX.js} +1 -1
  76. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BF6t7cgR.js → ganttDiagram-T4ZO3ILL-C5-y3w-l.js} +1 -1
  77. package/payload/server/public/assets/gitGraph-7Q5UKJZL-CCjgA3FG.js +1 -0
  78. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-GeyVCma5.js → gitGraphDiagram-UUTBAWPF-D9hG5kTg.js} +1 -1
  79. package/payload/server/public/assets/{graphlib-CvvxOMJO.js → graphlib-StP6GUhM.js} +1 -1
  80. package/payload/server/public/assets/info-OMHHGYJF-B65K6dQJ.js +1 -0
  81. package/payload/server/public/assets/infoDiagram-42DDH7IO-DUJfTICr.js +2 -0
  82. package/payload/server/public/assets/{isEmpty-BlYSjjLF.js → isEmpty-CXH_nKTs.js} +1 -1
  83. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-CC_sxiqJ.js → ishikawaDiagram-UXIWVN3A--K4KOS61.js} +1 -1
  84. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-T5_FJJp9.js → journeyDiagram-VCZTEJTY-DE-28YrW.js} +1 -1
  85. package/payload/server/public/assets/jsx-runtime-SjVUZj3J.js +9 -0
  86. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-DmX2Qjbn.js → kanban-definition-6JOO6SKY-CxSHjau2.js} +1 -1
  87. package/payload/server/public/assets/{line-N5bPNRcv.js → line-DbcqYIG0.js} +1 -1
  88. package/payload/server/public/assets/{linear-2x7ZHX-K.js → linear-DXHoZSN3.js} +1 -1
  89. package/payload/server/public/assets/{mermaid-parser.core-C66sw0ru.js → mermaid-parser.core-CNGUA13J.js} +2 -2
  90. package/payload/server/public/assets/{mermaid.core-C_cBOsxO.js → mermaid.core-IQgx_upQ.js} +3 -3
  91. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-gBgI6iwA.js → mindmap-definition-QFDTVHPH-BT9Up6-C.js} +1 -1
  92. package/payload/server/public/assets/{ordinal-Crx1uav8.js → ordinal-CN3oz6oW.js} +1 -1
  93. package/payload/server/public/assets/packet-4T2RLAQJ-fp5ishAK.js +1 -0
  94. package/payload/server/public/assets/pie-ZZUOXDRM-Bc3VMuuU.js +1 -0
  95. package/payload/server/public/assets/{pieDiagram-DEJITSTG-DU2SKMGa.js → pieDiagram-DEJITSTG-BuewQTi6.js} +1 -1
  96. package/payload/server/public/assets/public-C-nsHZgC.js +5 -0
  97. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CfTfCdKE.js → quadrantDiagram-34T5L4WZ-Cu8y2zQL.js} +1 -1
  98. package/payload/server/public/assets/radar-PYXPWWZC-D9jy5QAa.js +1 -0
  99. package/payload/server/public/assets/{reduce-DhQ6Q49z.js → reduce-SDh8_UdG.js} +1 -1
  100. package/payload/server/public/assets/{requirementDiagram-MS252O5E-CdJ1ecPK.js → requirementDiagram-MS252O5E-DiT9bo27.js} +1 -1
  101. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-C6oTo_BW.js → sankeyDiagram-XADWPNL6-EkRnGTxM.js} +1 -1
  102. package/payload/server/public/assets/search-BzKUsdMm.js +1 -0
  103. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DZhUqa93.js → sequenceDiagram-FGHM5R23-BUiQA3SI.js} +1 -1
  104. package/payload/server/public/assets/{src-CE18leCm.js → src-DQQCRlaQ.js} +1 -1
  105. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BHHHyE3Q.js → stateDiagram-FHFEXIEX-Fij35Tic.js} +1 -1
  106. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DQzhSd8K.js +1 -0
  107. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CO7-xxpE.js → timeline-definition-GMOUNBTQ-BMsyr7wU.js} +1 -1
  108. package/payload/server/public/assets/treeView-SZITEDCU-CHyRL9e4.js +1 -0
  109. package/payload/server/public/assets/treemap-W4RFUUIX-DpQ_FOO6.js +1 -0
  110. package/payload/server/public/assets/useVoiceRecorder-t2l8eU6m.js +36 -0
  111. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-CLOInE0r.js → vennDiagram-DHZGUBPP-6fegYFB3.js} +1 -1
  112. package/payload/server/public/assets/wardley-RL74JXVD-CWBIAatW.js +1 -0
  113. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BjgSwG0b.js → wardleyDiagram-NUSXRM2D-BtJ_B35h.js} +1 -1
  114. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-B3z4BK4L.js → xychartDiagram-5P7HB3ND-DJ20B4NY.js} +1 -1
  115. package/payload/server/public/data.html +17 -0
  116. package/payload/server/public/index.html +7 -5
  117. package/payload/server/public/public.html +6 -5
  118. package/payload/server/server.js +133 -120
  119. package/payload/server/public/assets/architecture-YZFGNWBL-BUDIBJAP.js +0 -1
  120. package/payload/server/public/assets/channel-BrpIlIyG.js +0 -1
  121. package/payload/server/public/assets/chunk-426QAEUC-GSccNhhE.js +0 -1
  122. package/payload/server/public/assets/chunk-QZHKN3VN-tM7_0fxy.js +0 -1
  123. package/payload/server/public/assets/classDiagram-6PBFFD2Q-C4ZqhHGM.js +0 -1
  124. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DiXqUWgc.js +0 -1
  125. package/payload/server/public/assets/clone-BdpG6seo.js +0 -1
  126. package/payload/server/public/assets/gitGraph-7Q5UKJZL-DDaWNf-D.js +0 -1
  127. package/payload/server/public/assets/info-OMHHGYJF-CzeItRxz.js +0 -1
  128. package/payload/server/public/assets/infoDiagram-42DDH7IO-CI_73SMs.js +0 -2
  129. package/payload/server/public/assets/packet-4T2RLAQJ-B22Ofvhw.js +0 -1
  130. package/payload/server/public/assets/pie-ZZUOXDRM-Pt4vBFsr.js +0 -1
  131. package/payload/server/public/assets/public-DdVq1Jag.js +0 -5
  132. package/payload/server/public/assets/radar-PYXPWWZC-C6F-a-Hg.js +0 -1
  133. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-5wdzy-za.js +0 -1
  134. package/payload/server/public/assets/treeView-SZITEDCU-BHz6YkPq.js +0 -1
  135. package/payload/server/public/assets/treemap-W4RFUUIX-qbRo1jie.js +0 -1
  136. package/payload/server/public/assets/useVoiceRecorder-3Qblv7wH.js +0 -44
  137. package/payload/server/public/assets/wardley-RL74JXVD-BVKDrbVC.js +0 -1
  138. /package/payload/server/public/assets/{_baseFor-DxqHO4yN.js → _baseFor-D71p92tl.js} +0 -0
  139. /package/payload/server/public/assets/{array-B0pZ4ajb.js → array-Bs_owIvv.js} +0 -0
  140. /package/payload/server/public/assets/{chunk-Be6NvmcD.js → chunk-lgnzUk6H.js} +0 -0
  141. /package/payload/server/public/assets/{cytoscape.esm-yP0g-0RD.js → cytoscape.esm-DLG5qhup.js} +0 -0
  142. /package/payload/server/public/assets/{defaultLocale-DOAzocMZ.js → defaultLocale-Du_2bjyv.js} +0 -0
  143. /package/payload/server/public/assets/{init-JRXXbB84.js → init-BYLBkHX_.js} +0 -0
  144. /package/payload/server/public/assets/{useVoiceRecorder-BNLXzSN4.css → jsx-runtime-BNLXzSN4.css} +0 -0
  145. /package/payload/server/public/assets/{katex-zjckjCBG.js → katex-lkho_UhZ.js} +0 -0
  146. /package/payload/server/public/assets/{path-DX61D_oX.js → path-BO54iFkf.js} +0 -0
  147. /package/payload/server/public/assets/{preload-helper-rov5CBGT.js → preload-helper-DWTEM3RW.js} +0 -0
  148. /package/payload/server/public/assets/{rough.esm-Cs8YDIX4.js → rough.esm-BCiZEpQC.js} +0 -0
@@ -1,8 +1,28 @@
1
- import {
2
- __commonJS,
3
- __toESM,
4
- readProgressLog
5
- } from "./chunk-B54KBAK4.js";
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __commonJS = (cb, mod) => function __require() {
8
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
19
+ // If the importer is in node compatibility mode or this is not an ESM
20
+ // file that has been converted to a CommonJS file using a Babel-
21
+ // compatible transform (i.e. "__esModule" has not been set), then set
22
+ // "default" to the CommonJS "module.exports" for node compatibility.
23
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
24
+ mod
25
+ ));
6
26
 
7
27
  // ../lib/models/dist/index.js
8
28
  var require_dist = __commonJS({
@@ -2636,8 +2656,8 @@ var createAdaptorServer = (options) => {
2636
2656
  overrideGlobalObjects: options.overrideGlobalObjects,
2637
2657
  autoCleanupIncoming: options.autoCleanupIncoming
2638
2658
  });
2639
- const createServer2 = options.createServer || createServerHTTP;
2640
- const server = createServer2(options.serverOptions || {}, requestListener);
2659
+ const createServer = options.createServer || createServerHTTP;
2660
+ const server = createServer(options.serverOptions || {}, requestListener);
2641
2661
  return server;
2642
2662
  };
2643
2663
  var serve = (options, listeningListener) => {
@@ -2872,7 +2892,7 @@ var serveStatic = (options = { root: "" }) => {
2872
2892
  };
2873
2893
 
2874
2894
  // server/index.ts
2875
- import { readFileSync as readFileSync28, existsSync as existsSync28, watchFile } from "fs";
2895
+ import { readFileSync as readFileSync29, existsSync as existsSync29, watchFile } from "fs";
2876
2896
  import { resolve as resolve32, join as join15, basename as basename8 } from "path";
2877
2897
  import { homedir as homedir5 } from "os";
2878
2898
 
@@ -18893,9 +18913,7 @@ async function GET13() {
18893
18913
  // app/api/admin/version/upgrade/route.ts
18894
18914
  import { spawn as spawn4 } from "child_process";
18895
18915
  import { existsSync as existsSync25, statSync as statSync10, writeFileSync as writeFileSync16, readFileSync as readFileSync24, openSync as openSync5, closeSync as closeSync5 } from "fs";
18896
- import { createServer } from "net";
18897
- import { resolve as resolve26, join as join12, dirname as dirname8 } from "path";
18898
- import { fileURLToPath } from "url";
18916
+ import { resolve as resolve26, join as join12 } from "path";
18899
18917
  var PLATFORM_ROOT10 = process.env.MAXY_PLATFORM_ROOT ?? resolve26(process.cwd(), "..");
18900
18918
  var upgradePkg = "@rubytech/create-maxy";
18901
18919
  var upgradeHostname = "maxy";
@@ -18928,27 +18946,6 @@ function isLockFresh() {
18928
18946
  return false;
18929
18947
  }
18930
18948
  }
18931
- function probePortFree(port2) {
18932
- return new Promise((resolve33) => {
18933
- const probe = createServer();
18934
- probe.once("error", (err2) => {
18935
- resolve33({ error: `${err2.code ?? "EADDRINUSE"} on port ${port2}` });
18936
- });
18937
- probe.once("listening", () => {
18938
- probe.close(() => resolve33(true));
18939
- });
18940
- probe.listen(port2, "0.0.0.0");
18941
- });
18942
- }
18943
- function resolveSidecarPath() {
18944
- try {
18945
- const here = dirname8(fileURLToPath(import.meta.url));
18946
- const candidate = join12(here, "upgrade-progress-server.js");
18947
- return existsSync25(candidate) ? candidate : null;
18948
- } catch {
18949
- return null;
18950
- }
18951
- }
18952
18949
  async function POST25(req) {
18953
18950
  let body;
18954
18951
  try {
@@ -18966,31 +18963,12 @@ async function POST25(req) {
18966
18963
  if (isLockFresh()) {
18967
18964
  return Response.json({ ok: false, error: "upgrade already in progress" }, { status: 409 });
18968
18965
  }
18969
- const mainPort = parseInt(process.env.PORT ?? "19200", 10);
18970
- const sidecarPort = mainPort + 99;
18971
- const portProbe = await probePortFree(sidecarPort);
18972
- if (portProbe !== true) {
18973
- console.error(`[admin/version/upgrade] sidecar port probe failed: ${portProbe.error}`);
18974
- return Response.json(
18975
- { ok: false, error: `upgrade progress port ${sidecarPort} is already in use (${portProbe.error})` },
18976
- { status: 500 }
18977
- );
18978
- }
18979
- const sidecarPath = resolveSidecarPath();
18980
18966
  const installerScope = `upgrade-${upgradeHostname}`;
18981
- const sidecarScope = `upgrade-progress-${upgradeHostname}`;
18982
18967
  try {
18983
18968
  writeFileSync16(LOCK_FILE, String(Date.now()));
18984
18969
  } catch (err2) {
18985
18970
  console.error("[admin/version/upgrade] failed to write lock file:", err2);
18986
18971
  }
18987
- if (!sidecarPath) {
18988
- console.error("[admin/version/upgrade] progress sidecar binary not found in dist/");
18989
- return Response.json(
18990
- { ok: false, error: "progress sidecar binary missing \u2014 rebuild required" },
18991
- { status: 500 }
18992
- );
18993
- }
18994
18972
  try {
18995
18973
  writeFileSync16(LOG_FILE, "");
18996
18974
  } catch (err2) {
@@ -19000,34 +18978,6 @@ async function POST25(req) {
19000
18978
  { status: 500 }
19001
18979
  );
19002
18980
  }
19003
- let sidecarPid;
19004
- try {
19005
- const sidecarLogFd = openSync5(LOG_FILE, "a");
19006
- const sidecar = spawn4("systemd-run", [
19007
- "--user",
19008
- "--scope",
19009
- `--unit=${sidecarScope}`,
19010
- "--",
19011
- "node",
19012
- sidecarPath,
19013
- `--port=${sidecarPort}`,
19014
- `--log=${LOG_FILE}`,
19015
- `--scope=${installerScope}`
19016
- ], {
19017
- detached: true,
19018
- stdio: ["ignore", sidecarLogFd, sidecarLogFd]
19019
- });
19020
- sidecar.unref();
19021
- closeSync5(sidecarLogFd);
19022
- sidecarPid = sidecar.pid;
19023
- console.log(`[admin/version/upgrade] spawned progress sidecar (pid ${sidecarPid} port ${sidecarPort})`);
19024
- } catch (err2) {
19025
- console.error("[admin/version/upgrade] failed to spawn progress sidecar:", err2);
19026
- return Response.json(
19027
- { ok: false, error: err2 instanceof Error ? err2.message : "failed to spawn progress sidecar" },
19028
- { status: 500 }
19029
- );
19030
- }
19031
18981
  try {
19032
18982
  const logFd = openSync5(LOG_FILE, "a");
19033
18983
  const child = spawn4("systemd-run", [
@@ -19046,10 +18996,8 @@ async function POST25(req) {
19046
18996
  });
19047
18997
  child.unref();
19048
18998
  closeSync5(logFd);
19049
- console.log(`[admin/version/upgrade] spawned upgrade process (pid ${child.pid})`);
19050
- const host = new URL(req.url).hostname;
19051
- const progressUrl = `http://${host}:${sidecarPort}/progress`;
19052
- return Response.json({ ok: true, started: true, progressUrl });
18999
+ console.log(`[admin/version/upgrade] spawned upgrade process (pid ${child.pid} scope ${installerScope})`);
19000
+ return Response.json({ ok: true, started: true });
19053
19001
  } catch (err2) {
19054
19002
  console.error("[admin/version/upgrade] failed to spawn upgrade process:", err2);
19055
19003
  return Response.json(
@@ -19060,14 +19008,57 @@ async function POST25(req) {
19060
19008
  }
19061
19009
 
19062
19010
  // app/api/admin/version/upgrade/progress/route.ts
19063
- import { existsSync as existsSync26, readFileSync as readFileSync25 } from "fs";
19011
+ import { existsSync as existsSync27, readFileSync as readFileSync26 } from "fs";
19064
19012
  import { resolve as resolve27, join as join13 } from "path";
19013
+
19014
+ // app/lib/upgrade-progress-parser.ts
19015
+ import { existsSync as existsSync26, readFileSync as readFileSync25 } from "fs";
19016
+ var STEP_RE = /\[(\d+)\/(\d+)\]\s+(.+)/;
19017
+ var ANSI_RE = /\x1b\[[0-9;?]*[a-zA-Z]/g;
19018
+ var stripAnsi = (s) => s.replace(ANSI_RE, "").replace(/\r/g, "").trimEnd();
19019
+ var MAX_SUBSTEPS = 20;
19020
+ function parseUpgradeProgress(content) {
19021
+ const rawLines = content.split("\n");
19022
+ let step = 0;
19023
+ let total = 0;
19024
+ let label = "";
19025
+ let markerIdx = -1;
19026
+ for (let i = rawLines.length - 1; i >= 0; i--) {
19027
+ const match2 = rawLines[i].match(STEP_RE);
19028
+ if (match2) {
19029
+ step = parseInt(match2[1], 10);
19030
+ total = parseInt(match2[2], 10);
19031
+ label = match2[3].replace(/\.{3}$/, "").trim();
19032
+ markerIdx = i;
19033
+ break;
19034
+ }
19035
+ }
19036
+ const subSteps = markerIdx >= 0 ? rawLines.slice(markerIdx + 1).map(stripAnsi).filter((l) => l.length > 0).slice(-MAX_SUBSTEPS) : [];
19037
+ const tail = rawLines.slice(-20).join("\n");
19038
+ const finished = tail.includes("Open in your browser:");
19039
+ const failed = tail.includes("Setup failed:");
19040
+ return { step, total, label, started: true, finished, failed, subSteps };
19041
+ }
19042
+ function readProgressLog(path2) {
19043
+ if (!existsSync26(path2)) {
19044
+ return { step: 0, total: 0, label: "", started: false, subSteps: [] };
19045
+ }
19046
+ let content;
19047
+ try {
19048
+ content = readFileSync25(path2, "utf-8");
19049
+ } catch {
19050
+ return { step: 0, total: 0, label: "", started: false, subSteps: [] };
19051
+ }
19052
+ return parseUpgradeProgress(content);
19053
+ }
19054
+
19055
+ // app/api/admin/version/upgrade/progress/route.ts
19065
19056
  var PLATFORM_ROOT11 = process.env.MAXY_PLATFORM_ROOT ?? resolve27(process.cwd(), "..");
19066
19057
  var upgradeHostname2 = "maxy";
19067
19058
  var brandPath2 = join13(PLATFORM_ROOT11, "config", "brand.json");
19068
- if (existsSync26(brandPath2)) {
19059
+ if (existsSync27(brandPath2)) {
19069
19060
  try {
19070
- const brand = JSON.parse(readFileSync25(brandPath2, "utf-8"));
19061
+ const brand = JSON.parse(readFileSync26(brandPath2, "utf-8"));
19071
19062
  if (brand.hostname) upgradeHostname2 = brand.hostname;
19072
19063
  } catch {
19073
19064
  }
@@ -19522,7 +19513,7 @@ async function POST31(req) {
19522
19513
  import * as childProcess from "child_process";
19523
19514
  import { homedir as homedir4 } from "os";
19524
19515
  import { resolve as resolve29 } from "path";
19525
- import { readFileSync as readFileSync27 } from "fs";
19516
+ import { readFileSync as readFileSync28 } from "fs";
19526
19517
 
19527
19518
  // app/lib/dns-label.ts
19528
19519
  var VALID_LABEL = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/;
@@ -19538,14 +19529,14 @@ function isValidDomain(value) {
19538
19529
  }
19539
19530
 
19540
19531
  // app/lib/alias-domains.ts
19541
- import { existsSync as existsSync27, mkdirSync as mkdirSync12, readFileSync as readFileSync26, writeFileSync as writeFileSync17 } from "fs";
19542
- import { dirname as dirname9 } from "path";
19532
+ import { existsSync as existsSync28, mkdirSync as mkdirSync12, readFileSync as readFileSync27, writeFileSync as writeFileSync17 } from "fs";
19533
+ import { dirname as dirname8 } from "path";
19543
19534
  import { resolve as resolve28 } from "path";
19544
19535
  var ALIAS_DOMAINS_PATH = resolve28(MAXY_DIR, "alias-domains.json");
19545
19536
  function readExisting() {
19546
- if (!existsSync27(ALIAS_DOMAINS_PATH)) return /* @__PURE__ */ new Set();
19537
+ if (!existsSync28(ALIAS_DOMAINS_PATH)) return /* @__PURE__ */ new Set();
19547
19538
  try {
19548
- const parsed = JSON.parse(readFileSync26(ALIAS_DOMAINS_PATH, "utf-8"));
19539
+ const parsed = JSON.parse(readFileSync27(ALIAS_DOMAINS_PATH, "utf-8"));
19549
19540
  if (!Array.isArray(parsed)) return /* @__PURE__ */ new Set();
19550
19541
  return new Set(parsed.filter((h) => typeof h === "string"));
19551
19542
  } catch {
@@ -19556,7 +19547,7 @@ function addAliasDomain(hostname2) {
19556
19547
  const existing = readExisting();
19557
19548
  if (existing.has(hostname2)) return;
19558
19549
  existing.add(hostname2);
19559
- mkdirSync12(dirname9(ALIAS_DOMAINS_PATH), { recursive: true });
19550
+ mkdirSync12(dirname8(ALIAS_DOMAINS_PATH), { recursive: true });
19560
19551
  writeFileSync17(ALIAS_DOMAINS_PATH, JSON.stringify([...existing], null, 2) + "\n", "utf-8");
19561
19552
  }
19562
19553
 
@@ -19580,7 +19571,7 @@ function loadBrandInfo() {
19580
19571
  const platformRoot3 = process.env.MAXY_PLATFORM_ROOT ?? resolve29(process.cwd(), "..");
19581
19572
  const brandPath3 = resolve29(platformRoot3, "config", "brand.json");
19582
19573
  try {
19583
- const parsed = JSON.parse(readFileSync27(brandPath3, "utf-8"));
19574
+ const parsed = JSON.parse(readFileSync28(brandPath3, "utf-8"));
19584
19575
  const hostname2 = typeof parsed.hostname === "string" && parsed.hostname ? parsed.hostname : "maxy";
19585
19576
  const configDir2 = typeof parsed.configDir === "string" && parsed.configDir ? parsed.configDir : ".maxy";
19586
19577
  return { hostname: hostname2, configDir: configDir2 };
@@ -20044,16 +20035,19 @@ async function GET19(req) {
20044
20035
  }
20045
20036
  }
20046
20037
 
20038
+ // app/lib/agent-slug-pattern.ts
20039
+ var AGENT_SLUG_PATTERN = /^\/([a-z][a-z0-9-]{2,49})$/;
20040
+
20047
20041
  // server/index.ts
20048
20042
  var PLATFORM_ROOT13 = process.env.MAXY_PLATFORM_ROOT || "";
20049
20043
  var BRAND_JSON_PATH = PLATFORM_ROOT13 ? join15(PLATFORM_ROOT13, "config", "brand.json") : "";
20050
20044
  var BRAND = { productName: "Maxy", hostname: "maxy", configDir: ".maxy", domain: "getmaxy.com" };
20051
- if (BRAND_JSON_PATH && !existsSync28(BRAND_JSON_PATH)) {
20045
+ if (BRAND_JSON_PATH && !existsSync29(BRAND_JSON_PATH)) {
20052
20046
  console.error(`[brand] WARNING: brand.json not found at ${BRAND_JSON_PATH} \u2014 using Maxy defaults`);
20053
20047
  }
20054
- if (BRAND_JSON_PATH && existsSync28(BRAND_JSON_PATH)) {
20048
+ if (BRAND_JSON_PATH && existsSync29(BRAND_JSON_PATH)) {
20055
20049
  try {
20056
- const parsed = JSON.parse(readFileSync28(BRAND_JSON_PATH, "utf-8"));
20050
+ const parsed = JSON.parse(readFileSync29(BRAND_JSON_PATH, "utf-8"));
20057
20051
  BRAND = { ...BRAND, ...parsed };
20058
20052
  } catch (err2) {
20059
20053
  console.error(`[brand] Failed to parse brand.json: ${err2.message}`);
@@ -20075,8 +20069,8 @@ var brandLoginOpts = {
20075
20069
  var ALIAS_DOMAINS_PATH2 = join15(homedir5(), BRAND.configDir, "alias-domains.json");
20076
20070
  function loadAliasDomains() {
20077
20071
  try {
20078
- if (!existsSync28(ALIAS_DOMAINS_PATH2)) return null;
20079
- const parsed = JSON.parse(readFileSync28(ALIAS_DOMAINS_PATH2, "utf-8"));
20072
+ if (!existsSync29(ALIAS_DOMAINS_PATH2)) return null;
20073
+ const parsed = JSON.parse(readFileSync29(ALIAS_DOMAINS_PATH2, "utf-8"));
20080
20074
  if (!Array.isArray(parsed)) {
20081
20075
  console.error("[alias-domains] malformed alias-domains.json \u2014 expected array");
20082
20076
  return null;
@@ -20124,7 +20118,6 @@ var PUBLIC_ALLOWED_PREFIXES = [
20124
20118
  "/g/"
20125
20119
  ];
20126
20120
  var PUBLIC_ALLOWED_EXACT = ["/favicon.ico"];
20127
- var AGENT_SLUG_PATTERN = /^\/([a-z][a-z0-9-]{2,49})$/;
20128
20121
  app.use("*", async (c, next) => {
20129
20122
  const host = (c.req.header("host") ?? "").split(":")[0];
20130
20123
  if (!isPublicHost(host)) {
@@ -20509,14 +20502,14 @@ app.get("/agent-assets/:slug/:filename", (c) => {
20509
20502
  console.error(`[agent-assets] path-traversal-rejected slug=${slug} file=${filename}`);
20510
20503
  return c.text("Forbidden", 403);
20511
20504
  }
20512
- if (!existsSync28(filePath)) {
20505
+ if (!existsSync29(filePath)) {
20513
20506
  console.error(`[agent-assets] serve slug=${slug} file=${filename} status=404`);
20514
20507
  return c.text("Not found", 404);
20515
20508
  }
20516
20509
  const ext = "." + filename.split(".").pop()?.toLowerCase();
20517
20510
  const contentType = IMAGE_MIME[ext] || "application/octet-stream";
20518
20511
  console.log(`[agent-assets] serve slug=${slug} file=${filename} status=200`);
20519
- const body = readFileSync28(filePath);
20512
+ const body = readFileSync29(filePath);
20520
20513
  return c.body(body, 200, {
20521
20514
  "Content-Type": contentType,
20522
20515
  "Cache-Control": "public, max-age=3600"
@@ -20539,14 +20532,14 @@ app.get("/generated/:filename", (c) => {
20539
20532
  console.error(`[generated] serve file=${filename} status=403`);
20540
20533
  return c.text("Forbidden", 403);
20541
20534
  }
20542
- if (!existsSync28(filePath)) {
20535
+ if (!existsSync29(filePath)) {
20543
20536
  console.error(`[generated] serve file=${filename} status=404`);
20544
20537
  return c.text("Not found", 404);
20545
20538
  }
20546
20539
  const ext = "." + filename.split(".").pop()?.toLowerCase();
20547
20540
  const contentType = IMAGE_MIME[ext] || "application/octet-stream";
20548
20541
  console.log(`[generated] serve file=${filename} status=200`);
20549
- const body = readFileSync28(filePath);
20542
+ const body = readFileSync29(filePath);
20550
20543
  return c.body(body, 200, {
20551
20544
  "Content-Type": contentType,
20552
20545
  "Cache-Control": "public, max-age=86400"
@@ -20555,9 +20548,9 @@ app.get("/generated/:filename", (c) => {
20555
20548
  var htmlCache = /* @__PURE__ */ new Map();
20556
20549
  var brandLogoPath = "/brand/maxy-monochrome.png";
20557
20550
  var brandIconPath = "/brand/maxy-monochrome.png";
20558
- if (BRAND_JSON_PATH && existsSync28(BRAND_JSON_PATH)) {
20551
+ if (BRAND_JSON_PATH && existsSync29(BRAND_JSON_PATH)) {
20559
20552
  try {
20560
- const fullBrand = JSON.parse(readFileSync28(BRAND_JSON_PATH, "utf-8"));
20553
+ const fullBrand = JSON.parse(readFileSync29(BRAND_JSON_PATH, "utf-8"));
20561
20554
  if (fullBrand.assets?.logo) brandLogoPath = `/brand/${fullBrand.assets.logo}`;
20562
20555
  brandIconPath = fullBrand.assets?.icon ? `/brand/${fullBrand.assets.icon}` : brandLogoPath;
20563
20556
  } catch {
@@ -20575,8 +20568,8 @@ function readInstalledVersion() {
20575
20568
  try {
20576
20569
  if (!PLATFORM_ROOT13) return "unknown";
20577
20570
  const versionFile = join15(PLATFORM_ROOT13, "config", `.${BRAND.hostname}-version`);
20578
- if (!existsSync28(versionFile)) return "unknown";
20579
- const content = readFileSync28(versionFile, "utf-8").trim();
20571
+ if (!existsSync29(versionFile)) return "unknown";
20572
+ const content = readFileSync29(versionFile, "utf-8").trim();
20580
20573
  return content || "unknown";
20581
20574
  } catch {
20582
20575
  return "unknown";
@@ -20617,7 +20610,7 @@ var clientErrorReporterScript = `<script>
20617
20610
  function cachedHtml(file) {
20618
20611
  let html = htmlCache.get(file);
20619
20612
  if (!html) {
20620
- html = readFileSync28(resolve32(process.cwd(), "public", file), "utf-8");
20613
+ html = readFileSync29(resolve32(process.cwd(), "public", file), "utf-8");
20621
20614
  html = html.replace("<title>Maxy</title>", `<title>${escapeHtml2(BRAND.productName)}</title>`);
20622
20615
  html = html.replace('href="/favicon.ico"', `href="${escapeHtml2(brandFaviconPath)}"`);
20623
20616
  const headInjection = file === "index.html" ? `${brandScript}
@@ -20635,13 +20628,13 @@ function loadBrandingCache(agentSlug) {
20635
20628
  const configDir2 = join15(homedir5(), BRAND.configDir);
20636
20629
  try {
20637
20630
  const accountJsonPath = join15(configDir2, "account.json");
20638
- if (!existsSync28(accountJsonPath)) return null;
20639
- const account = JSON.parse(readFileSync28(accountJsonPath, "utf-8"));
20631
+ if (!existsSync29(accountJsonPath)) return null;
20632
+ const account = JSON.parse(readFileSync29(accountJsonPath, "utf-8"));
20640
20633
  const accountId = account.accountId;
20641
20634
  if (!accountId) return null;
20642
20635
  const cachePath = join15(configDir2, "branding-cache", accountId, `${agentSlug}.json`);
20643
- if (!existsSync28(cachePath)) return null;
20644
- return JSON.parse(readFileSync28(cachePath, "utf-8"));
20636
+ if (!existsSync29(cachePath)) return null;
20637
+ return JSON.parse(readFileSync29(cachePath, "utf-8"));
20645
20638
  } catch {
20646
20639
  return null;
20647
20640
  }
@@ -20650,8 +20643,8 @@ function resolveDefaultSlug() {
20650
20643
  try {
20651
20644
  const configDir2 = join15(homedir5(), BRAND.configDir);
20652
20645
  const accountJsonPath = join15(configDir2, "account.json");
20653
- if (!existsSync28(accountJsonPath)) return null;
20654
- const account = JSON.parse(readFileSync28(accountJsonPath, "utf-8"));
20646
+ if (!existsSync29(accountJsonPath)) return null;
20647
+ const account = JSON.parse(readFileSync29(accountJsonPath, "utf-8"));
20655
20648
  return account.defaultAgent || null;
20656
20649
  } catch {
20657
20650
  return null;
@@ -20724,7 +20717,7 @@ app.use("/vnc-popout.html", logViewerFetch);
20724
20717
  app.get("/vnc-popout.html", (c) => {
20725
20718
  let html = htmlCache.get("vnc-popout.html");
20726
20719
  if (!html) {
20727
- html = readFileSync28(resolve32(process.cwd(), "public", "vnc-popout.html"), "utf-8");
20720
+ html = readFileSync29(resolve32(process.cwd(), "public", "vnc-popout.html"), "utf-8");
20728
20721
  const name = escapeHtml2(BRAND.productName);
20729
20722
  html = html.replace("<title>Browser \u2014 Maxy</title>", `<title>${name}</title>`);
20730
20723
  html = html.replace("</head>", ` ${brandScript}
@@ -20758,16 +20751,23 @@ app.post("/api/vnc/client-event", async (c) => {
20758
20751
  app.get("/g/:slug", (c) => {
20759
20752
  return c.html(brandedPublicHtml());
20760
20753
  });
20754
+ app.use("/graph/*", graphAuthMiddleware({ isPublicHost, canAccessAdmin }));
20755
+ app.use("/graph", graphAuthMiddleware({ isPublicHost, canAccessAdmin }));
20756
+ attachGraphHttpRoutes(app);
20757
+ app.get("/data", (c) => {
20758
+ const host = (c.req.header("host") ?? "").split(":")[0];
20759
+ if (isPublicHost(host)) return c.text("Not found", 404);
20760
+ return c.html(cachedHtml("data.html"));
20761
+ });
20761
20762
  app.get("/:slug", async (c, next) => {
20762
20763
  const slug = c.req.param("slug");
20763
20764
  if (AGENT_SLUG_PATTERN.test(`/${slug}`)) {
20765
+ const branding = loadBrandingCache(slug);
20766
+ console.error(`[public-catchall] served path=/${slug} slug=${slug} branding=${branding ? "hit" : "miss"}`);
20764
20767
  return c.html(brandedPublicHtml(slug));
20765
20768
  }
20766
20769
  await next();
20767
20770
  });
20768
- app.use("/graph/*", graphAuthMiddleware({ isPublicHost, canAccessAdmin }));
20769
- app.use("/graph", graphAuthMiddleware({ isPublicHost, canAccessAdmin }));
20770
- attachGraphHttpRoutes(app);
20771
20771
  app.use("/*", serveStatic({ root: "./public" }));
20772
20772
  var port = parseInt(process.env.PORT ?? "19200", 10);
20773
20773
  var hostname = process.env.HOSTNAME ?? "0.0.0.0";
@@ -20779,11 +20779,24 @@ attachVncWsProxy(httpServer, {
20779
20779
  });
20780
20780
  attachGraphWsProxy(httpServer, { isPublicHost, canAccessAdmin });
20781
20781
  console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
20782
+ try {
20783
+ const registered = [];
20784
+ for (const r of app.routes ?? []) {
20785
+ if (typeof r.path !== "string" || r.path.includes(":") || r.path.includes("*")) continue;
20786
+ if (AGENT_SLUG_PATTERN.test(r.path)) {
20787
+ registered.push({ method: (r.method ?? "ALL").toUpperCase(), path: r.path });
20788
+ }
20789
+ }
20790
+ const summary = registered.map((r) => `${r.method} ${r.path}`).join(", ") || "(none)";
20791
+ console.log(`[route-shadow] static-paths-matching-slug-pattern count=${registered.length} routes=${summary}`);
20792
+ } catch (err2) {
20793
+ console.error(`[route-shadow] introspection unavailable: ${err2 instanceof Error ? err2.message : String(err2)}`);
20794
+ }
20782
20795
  (async () => {
20783
20796
  try {
20784
20797
  let userId = "";
20785
- if (existsSync28(USERS_FILE)) {
20786
- const users = JSON.parse(readFileSync28(USERS_FILE, "utf-8").trim() || "[]");
20798
+ if (existsSync29(USERS_FILE)) {
20799
+ const users = JSON.parse(readFileSync29(USERS_FILE, "utf-8").trim() || "[]");
20787
20800
  userId = users[0]?.userId ?? "";
20788
20801
  }
20789
20802
  await backfillNullUserIdConversations(userId);
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-HA4lma0b.js";import{n as e}from"./chunk-7N4EOEYR-BQ9OzsfS.js";export{e as createArchitectureServices};
@@ -1 +0,0 @@
1
- import{it as e,rt as t}from"./chunk-ICPOFSXX-C9ojfLDm.js";var n=(n,r)=>e.lang.round(t.parse(n)[r]);export{n as t};
@@ -1 +0,0 @@
1
- import{h as e,p as t}from"./src-CE18leCm.js";import{b as n}from"./chunk-ICPOFSXX-C9ojfLDm.js";var r=e(e=>{let{securityLevel:r}=n(),i=t(`body`);return r===`sandbox`&&(i=t((t(`#i${e}`).node()?.contentDocument??document).body)),i.select(`#${e}`)},`selectSvgElement`);export{r as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CE18leCm.js";var t=class{constructor(e){this.init=e,this.records=this.init()}static{e(this,`ImperativeState`)}reset(){this.records=this.init()}};export{t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CE18leCm.js";import"./chunk-ICPOFSXX-C9ojfLDm.js";import"./dist-Dl3zB445.js";import"./chunk-5PVQY5BW-B1E88VcH.js";import"./chunk-U2HBQHQK-CgwbVvji.js";import"./chunk-FMBD7UC4-FHlW2hpP.js";import"./chunk-BSJP7CBP-Dg2E_8Wn.js";import"./chunk-ZZ45TVLE-UdCCrEj5.js";import"./chunk-YZCP3GAM-jgwS2uNT.js";import"./chunk-55IACEB6-B65N4qpl.js";import"./chunk-EDXVE4YY-jDBKFDJB.js";import"./chunk-X2U36JSP-D4PiRakQ.js";import"./chunk-5FUZZQ4R-u7p0S5bJ.js";import"./chunk-ENJZ2VHE-CAHIipTH.js";import"./chunk-336JU56O-CZH22klX.js";import{i as t,n,r,t as i}from"./chunk-4TB4RGXK-CKA9rXZu.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CE18leCm.js";import"./chunk-ICPOFSXX-C9ojfLDm.js";import"./dist-Dl3zB445.js";import"./chunk-5PVQY5BW-B1E88VcH.js";import"./chunk-U2HBQHQK-CgwbVvji.js";import"./chunk-FMBD7UC4-FHlW2hpP.js";import"./chunk-BSJP7CBP-Dg2E_8Wn.js";import"./chunk-ZZ45TVLE-UdCCrEj5.js";import"./chunk-YZCP3GAM-jgwS2uNT.js";import"./chunk-55IACEB6-B65N4qpl.js";import"./chunk-EDXVE4YY-jDBKFDJB.js";import"./chunk-X2U36JSP-D4PiRakQ.js";import"./chunk-5FUZZQ4R-u7p0S5bJ.js";import"./chunk-ENJZ2VHE-CAHIipTH.js";import"./chunk-336JU56O-CZH22klX.js";import{i as t,n,r,t as i}from"./chunk-4TB4RGXK-CKA9rXZu.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{i as e}from"./graphlib-CvvxOMJO.js";var t=4;function n(n){return e(n,t)}export{n as t};
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-HA4lma0b.js";import{n as e}from"./chunk-67CJDMHE-DIue23pI.js";export{e as createGitGraphServices};
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-HA4lma0b.js";import{n as e}from"./chunk-KGLVRYIC-CimijL8o.js";export{e as createInfoServices};
@@ -1,2 +0,0 @@
1
- import"./chunk-K5T4RW27-HA4lma0b.js";import"./chunk-7N4EOEYR-BQ9OzsfS.js";import"./chunk-67CJDMHE-DIue23pI.js";import"./chunk-KGLVRYIC-CimijL8o.js";import"./chunk-FOC6F5B3-CAIHldV7.js";import"./chunk-AA7GKIK3-RpSCHdZM.js";import"./chunk-2KRD3SAO-DNeXC6EU.js";import"./chunk-ORNJ4GCN-BVm-YmZh.js";import"./chunk-LIHQZDEY-B5hk7dNX.js";import"./chunk-CIAEETIT-BKZA8eJP.js";import{g as e,h as t}from"./src-CE18leCm.js";import{c as n}from"./chunk-ICPOFSXX-C9ojfLDm.js";import{t as r}from"./chunk-426QAEUC-GSccNhhE.js";import{t as i}from"./mermaid-parser.core-C66sw0ru.js";var a={parse:t(async t=>{let n=await i(`info`,t);e.debug(n)},`parse`)},o={version:`11.14.0`},s={parser:a,db:{getVersion:t(()=>o.version,`getVersion`)},renderer:{draw:t((t,i,a)=>{e.debug(`rendering info diagram
2
- `+t);let o=r(i);n(o,100,400,!0),o.append(`g`).append(`text`).attr(`x`,100).attr(`y`,40).attr(`class`,`version`).attr(`font-size`,32).style(`text-anchor`,`middle`).text(`v${a}`)},`draw`)}};export{s as diagram};
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-HA4lma0b.js";import{n as e}from"./chunk-FOC6F5B3-CAIHldV7.js";export{e as createPacketServices};
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-HA4lma0b.js";import{n as e}from"./chunk-AA7GKIK3-RpSCHdZM.js";export{e as createPieServices};
@@ -1,5 +0,0 @@
1
- import{o as e}from"./chunk-Be6NvmcD.js";import{A as t,C as n,D as r,F as i,I as a,N as o,P as s,R as c,S as l,V as u,_ as d,a as f,b as p,c as m,g as h,h as g,i as _,j as v,n as y,o as b,r as x,s as S,t as C,u as w,v as T,w as E,y as D,z as O}from"./useVoiceRecorder-3Qblv7wH.js";var k=c(`square-plus`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M8 12h8`,key:`1wcyev`}],[`path`,{d:`M12 8v8`,key:`napkw2`}]]),A=O(),j=e(u(),1),M=`image/jpeg,image/png,image/gif,image/webp,application/pdf,text/plain,text/markdown,text/csv,text/html,text/calendar`,N=new Set(M.split(`,`)),P=20*1024*1024,F=typeof window<`u`&&/^(localhost|127\.0\.0\.1|[a-z0-9-]+\.local)(:|$)/.test(window.location.hostname);function I(){let e=crypto.getRandomValues(new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=[...e].map(e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}function L(){let e=window.location.pathname;if(e.startsWith(`/g/`))return;let t=e.match(/^\/([a-z][a-z0-9-]{2,49})$/);return t?t[1]:void 0}function R(){let e=window.location.pathname.match(/^\/g\/([a-z0-9][a-z0-9-]{0,49})$/);return e?e[1]:void 0}function z(e){return[{key:`length`,label:`At least 8 characters`,met:e.length>=8},{key:`number`,label:`Contains a number`,met:/\d/.test(e)},{key:`special`,label:`Contains a special character`,met:/[^A-Za-z0-9]/.test(e)},{key:`whitespace`,label:`No spaces`,met:e.length>0&&!/\s/.test(e)}]}function B(e,t){if(t===`phone`)return e.length>4?e.slice(0,e.length-4).replace(/\d/g,`•`)+` `+e.slice(-4):e;let n=e.indexOf(`@`);return n<=2?e:e.slice(0,2)+`•••`+e.slice(n)}function V(e){let[t,n]=(0,j.useState)(null),[r,i]=(0,j.useState)(null),[a,o]=(0,j.useState)(`loading`),[s,c]=(0,j.useState)(``),[l,u]=(0,j.useState)(null),[d,f]=(0,j.useState)(null),[p,m]=(0,j.useState)(!1),[h,g]=(0,j.useState)(null),_=(0,j.useMemo)(()=>L(),[]),v=(0,j.useMemo)(()=>R(),[]),[y,b]=(0,j.useState)(null),x=(0,j.useRef)(_||``),S=(0,j.useRef)(null),C=(0,j.useRef)(null),w=(0,j.useRef)(!1),T=(0,j.useRef)(null),[E,D]=(0,j.useState)(`sign-in`),[O,k]=(0,j.useState)(null),A=(0,j.useRef)(null),M=(0,j.useRef)(null);(0,j.useEffect)(()=>{try{let e=sessionStorage.getItem(`maxy_session`);e&&(M.current=e)}catch{}},[]);let N=(0,j.useCallback)(t=>{S.current=t,n(t);try{sessionStorage.setItem(`maxy_session`,t)}catch{}o(`chat`),e(t)},[e]),P=(0,j.useCallback)(()=>{S.current=null;try{sessionStorage.removeItem(`maxy_session`)}catch{}n(null),o(`auth-required`),D(`sign-in`)},[]),z=(0,j.useCallback)(async e=>{try{let t=x.current,n=await fetch(`/api/access/verify-token`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:e,agentSlug:t})}),r=await n.json();n.ok?(A.current=r.session_key,k(r.grant),D(`set-password`),window.history.replaceState({},``,window.location.pathname)):D(`link-expired`)}catch{D(`sign-in`)}},[]),B=(0,j.useCallback)(async()=>{if(S.current)return S.current;if(C.current)return C.current;let e=(async()=>{try{let e=M.current,t=await fetch(`/api/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({session_id:I(),..._?{agent:_}:{},...v?{group_slug:v}:{},...e?{session_key:e}:{}})});if(!t.ok){let e=await t.json().catch(()=>({error:``}));return F&&console.error(`[session] POST /api/session failed: ${t.status} ${t.statusText}`,e),t.status===404?i(e.error||`Agent not found`):t.status===503&&i(e.error||`Service unavailable`),null}let r=await t.json();if(r.auth_required){r.agent_id&&(x.current=r.agent_id),c(r.displayName||``),r.agentImage&&u(r.agentImage),r.agentImageShape&&f(r.agentImageShape),r.showAgentName&&m(r.showAgentName),r.branding&&g(r.branding),o(`auth-required`);let e=new URLSearchParams(window.location.search).get(`token`);return e?z(e):D(`sign-in`),null}S.current=r.session_key,n(r.session_key),r.displayName&&c(r.displayName),r.agentImage&&u(r.agentImage),r.agentImageShape&&f(r.agentImageShape),r.showAgentName&&m(r.showAgentName),r.branding&&g(r.branding),o(`chat`),r.resumed&&r.messages&&(w.current=!0,T.current=r.messages),r.group&&b({groupSlug:r.groupSlug,groupName:r.groupName,participants:r.participants??[]});try{sessionStorage.setItem(`maxy_session`,r.session_key)}catch{}return r.session_key}catch(e){return F&&console.error(`[session] fetch /api/session threw:`,e),i(`Unable to connect. Please check your connection and try again.`),null}finally{C.current=null}})();return C.current=e,e},[_,v,z]);return{sessionId:t,sessionKeyRef:S,sessionError:r,pageState:a,setPageState:o,agentDisplayName:s,agentImage:l,agentImageShape:d,showAgentName:p,agentSlug:_,branding:h,resolvedSlugRef:x,ensureSession:B,startNewSession:(0,j.useCallback)(async()=>{S.current=null,C.current=null,M.current=null,w.current=!1,T.current=null,n(null),i(null);try{sessionStorage.removeItem(`maxy_session`)}catch{}let t=await B();t&&e(t)},[B,e]),enterChat:N,enterGate:P,resumedRef:w,resumeMessagesRef:T,gateState:E,setGateState:D,grantInfo:O,setGrantInfo:k,gateSessionKeyRef:A,groupContext:y,groupSlug:v}}function ee({sessionKeyRef:e,ensureSession:t,sessionError:n,pageState:r,inputRef:i}){let[a,o]=(0,j.useState)([]),[s,c]=(0,j.useState)(!1),u=(0,j.useRef)(!1),d=e=>{u.current=e,c(e)},f=(0,j.useCallback)(async a=>{if(!u.current){d(!0),o([{role:`maxy`,content:``,timestamp:Date.now()}]);try{let n=await fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({greeting:!0,session_key:a})});if(n.status===401){e.current=null;try{sessionStorage.removeItem(`maxy_session`)}catch{}F&&console.warn(`[greeting] stale session, retrying with fresh session`);let r=await t();if(!r)return;n=await fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({greeting:!0,session_key:r})})}if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error||`Something went wrong`)}let r=``,i=``,s=()=>{i&&(r+=i,i=``,o(e=>{let t=[...e];return t[0]={...t[0],content:r},t}))},c=setInterval(s,60);try{for await(let e of l(n)){if(e.error)throw Object.assign(Error(e.error),{fromSSE:!0});e.text&&(i+=e.text),e.type===`component`&&(s(),o(t=>{let n=[...t],r={...n[0]},i=[...r.components||[]];return i.push({name:e.name,data:e.data,submitted:!1}),n[0]={...r,components:i},n}))}}finally{clearInterval(c),s()}}catch(e){if(F&&console.error(`[chat] greeting failed:`,e),r===`auth-required`)return;let t=e instanceof Error?e.message:String(e);o([{role:`maxy`,content:e instanceof Error&&e.fromSSE?t:n??`I'm having trouble connecting right now. Try refreshing the page.`,timestamp:Date.now()}])}finally{d(!1),r===`chat`&&i.current?.focus()}}},[e,t,n,r,i]),p=(0,j.useCallback)(async(a,s)=>{let c=s?.hidden??!1,f=s?.files??[];if(!a&&f.length===0||u.current)return;d(!0);let p=f.map(e=>({filename:e.name,mimeType:e.type})),m={role:`visitor`,content:a,attachments:p.length>0?p:void 0,timestamp:Date.now(),hidden:c},h;o(e=>{let t=[...e,m,{role:`maxy`,content:``,timestamp:Date.now()}];return h=t.length-1,t});try{let n=await t();if(!n)throw Error(`session`);let r=e=>{if(f.length>0){let t=new FormData;t.append(`message`,a),t.append(`session_key`,e);for(let e of f)t.append(`attachments`,e);return{body:t,headers:{}}}return{body:JSON.stringify({message:a,session_key:e}),headers:{"Content-Type":`application/json`}}},{body:i,headers:s}=r(n),c=await fetch(`/api/chat`,{method:`POST`,headers:s,body:i});if(c.status===401){e.current=null;try{sessionStorage.removeItem(`maxy_session`)}catch{}F&&console.warn(`[session-expired] stale key cleared, retrying with fresh session`);let n=await t();if(!n)throw Error(`session`);({body:i,headers:s}=r(n)),c=await fetch(`/api/chat`,{method:`POST`,headers:s,body:i})}if(!c.ok){let e=await c.json().catch(()=>({}));throw Error(e.error||`Something went wrong`)}let u=``,d=``,p=()=>{d&&(u+=d,d=``,o(e=>{let t=[...e];return t[h]={...t[h],content:u},t}))},m=setInterval(p,60);try{for await(let e of l(c)){if(e.error)throw Object.assign(Error(e.error),{fromSSE:!0});e.text&&(d+=e.text),e.type===`component`&&(p(),o(t=>{let n=[...t],r={...n[h]},i=[...r.components||[]];return i.push({name:e.name,data:e.data,submitted:!1}),n[h]={...r,components:i},n}))}}finally{clearInterval(m),p()}}catch(e){if(F&&console.error(`[chat] sendMessage failed:`,e),r===`auth-required`)return;let t=e instanceof Error?e.message:String(e),i=e instanceof Error&&e.fromSSE;o(e=>{let r=[...e];return r[h]={...r[h],content:i?t:t===`session`?n??`I'm having trouble connecting right now. Try refreshing the page.`:`Sorry, I hit a snag. Try again in a moment.`},r})}finally{d(!1),r===`chat`&&i.current?.focus()}},[e,t,n,r,i]);return{messages:a,setMessages:o,isStreaming:s,sendMessage:p,sendGreeting:f,handleComponentSubmit:(0,j.useCallback)((e,t,n)=>{o(n=>{let r=[...n],i={...r[e]},a=[...i.components||[]];return a[t]={...a[t],submitted:!0},r[e]={...i,components:a},r}),p(n,{hidden:!0})},[p])}}function te({sessionKeyRef:e,groupSlug:t,isStreaming:n,setMessages:r}){let i=(0,j.useRef)(new Date().toISOString()),a=(0,j.useRef)(!0);(0,j.useEffect)(()=>{let e=()=>{a.current=document.visibilityState===`visible`};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]);let o=(0,j.useCallback)(async()=>{let n=e.current;if(!(!n||!t))try{let e=await fetch(`/api/group/messages?session_key=${encodeURIComponent(n)}&since=${encodeURIComponent(i.current)}`);if(!e.ok)return;let t=await e.json();if(!t.messages||t.messages.length===0)return;let a=t.messages[t.messages.length-1];a.timestamp&&(i.current=new Date(a.timestamp).toISOString()),r(e=>{let n=new Set(e.filter(e=>e.messageId).map(e=>e.messageId)),r=t.messages.filter(e=>!n.has(e.messageId)).map(e=>({role:e.role,content:e.content,timestamp:e.timestamp,senderName:e.senderName??void 0,senderVisitorId:e.senderVisitorId??void 0,messageId:e.messageId}));return r.length===0?e:[...e,...r]})}catch{}},[e,t,r]);(0,j.useEffect)(()=>{if(!t)return;let e,r=!1;function i(){if(r)return;let t=a.current?3e3:3e4;e=setTimeout(async()=>{n||await o(),i()},t)}return i(),()=>{r=!0,clearTimeout(e)}},[t,n,o])}var H=d();function U({value:e,onChange:t,onComplete:n,disabled:r}){let i=(0,j.useRef)([]);function a(n,r){r.key===`Backspace`?(r.preventDefault(),e[n]?t(e.slice(0,n)+e.slice(n+1)):n>0&&(t(e.slice(0,n-1)+e.slice(n)),i.current[n-1]?.focus())):r.key===`ArrowLeft`&&n>0?i.current[n-1]?.focus():r.key===`ArrowRight`&&n<5&&i.current[n+1]?.focus()}function o(r,a){let o=a.nativeEvent.data;if(!o||!/^\d$/.test(o))return;let s=e.split(``);for(s[r]=o;s.length<r;)s.push(``);let c=s.join(``).replace(/\D/g,``).slice(0,6);t(c),c.length===6?n(c):r<5&&i.current[r+1]?.focus()}function s(e){e.preventDefault();let r=e.clipboardData.getData(`text`).replace(/\D/g,``).slice(0,6);r&&(t(r),r.length===6?n(r):i.current[r.length]?.focus())}return(0,H.jsx)(`div`,{className:`gate-otp-field`,children:Array.from({length:6}).map((t,n)=>(0,H.jsx)(`input`,{ref:e=>{i.current[n]=e},type:`text`,inputMode:`numeric`,className:`pin-box${e[n]?` pin-box-filled`:``}`,value:e[n]||``,onKeyDown:e=>a(n,e),onInput:e=>o(n,e),onPaste:s,onFocus:e=>e.target.select(),autoFocus:n===0,autoComplete:`off`,maxLength:1,disabled:r,"aria-label":`Code digit ${n+1}`},n))})}function ne({gateState:e,setGateState:t,grantInfo:n,setGrantInfo:r,gateSessionKeyRef:i,resolvedSlugRef:a,onAuthenticated:o}){let[s,c]=(0,j.useState)(``),[l,u]=(0,j.useState)(``),[d,f]=(0,j.useState)(``),[p,m]=(0,j.useState)(!1),[_,v]=(0,j.useState)(``),[y,b]=(0,j.useState)(``),[x,S]=(0,j.useState)(!1),[C,w]=(0,j.useState)(null),[T,E]=(0,j.useState)(null),[D,O]=(0,j.useState)(!1);async function k(e){if(e.preventDefault(),!D){w(null),O(!0);try{let e=a.current,n=await fetch(`/api/access/login`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({contact:s,password:l,agentSlug:e})}),i=await n.json();n.ok?o(i.session_key):n.status===401?i.error?.includes(`setup not complete`)||i.error?.includes(`invitation link`)?(t(`private-agent`),w(null)):w(i.error||`Invalid credentials`):n.status===403?(t(`access-expired`),i.expiresAt&&r(e=>e?{...e,expiresAt:i.expiresAt}:{displayName:null,contactValue:s,contactMethod:`email`,expiresAt:i.expiresAt,status:`expired`})):n.status===429?w(i.error||`Too many attempts. Please try again later.`):w(i.error||`Something went wrong`)}catch{w(`Unable to connect. Please try again.`)}finally{O(!1)}}}async function A(e){if(!D){w(null),O(!0);try{let n=a.current,o=await fetch(`/api/access/verify-otp`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({phone:y,code:e,agentSlug:n})}),s=await o.json();o.ok?(i.current=s.session_key,r(s.grant),t(`set-password`)):o.status===429?t(`otp-failed`):(w(s.error||`Invalid code`),v(``))}catch{w(`Unable to connect. Please try again.`)}finally{O(!1)}}}async function M(e){if(e.preventDefault(),!D){if(w(null),l!==d){w(`Passwords do not match`);return}if(!z(l).every(e=>e.met)){w(`Password does not meet requirements`);return}O(!0);try{let e=i.current;if(!e){w(`Session expired. Please use your invitation link again.`);return}let t=await fetch(`/api/access/create-credentials`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({session_key:e,password:l})}),n=await t.json();t.ok?o(n.session_key):t.status===400&&n.requirements?w(n.requirements.filter(e=>!e.met).map(e=>e.label).join(`, `)):w(n.error||`Something went wrong`)}catch{w(`Unable to connect. Please try again.`)}finally{O(!1)}}}async function N(e){if(e.preventDefault(),!(D||!s)){w(null),O(!0);try{let e=a.current,t=await fetch(`/api/access/forgot-password`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({contact:s,agentSlug:e})});t.status===429?w((await t.json()).error||`Too many attempts. Please try again later.`):(E(`If an account exists, a reset link has been sent.`),setTimeout(()=>{S(!1),E(null)},4e3))}catch{w(`Unable to connect. Please try again.`)}finally{O(!1)}}}switch(e){case`set-password`:{let e=z(l),t=e.every(e=>e.met),r=l===d,i=t&&r&&d.length>0;return(0,H.jsx)(`div`,{className:`gate-wrap`,children:(0,H.jsxs)(`div`,{className:`gate-card`,children:[n?.expiresAt&&(0,H.jsxs)(`div`,{className:`gate-expiry-badge`,children:[`Access until `,new Date(n.expiresAt).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`})]}),(0,H.jsxs)(`h2`,{className:`gate-title`,children:[`Welcome, `,n?.displayName||`there`]}),(0,H.jsx)(`p`,{className:`gate-subtitle`,children:`Create a password to access this agent in the future.`}),(0,H.jsxs)(`form`,{className:`gate-form`,onSubmit:M,children:[(0,H.jsxs)(`div`,{className:`gate-field`,children:[(0,H.jsx)(`label`,{htmlFor:`gate-display-name`,children:`Display name`}),(0,H.jsx)(`input`,{id:`gate-display-name`,type:`text`,value:n?.displayName||``,disabled:!0})]}),(0,H.jsxs)(`div`,{className:`gate-field gate-pw-row`,children:[(0,H.jsx)(`label`,{htmlFor:`gate-pw`,children:`Password`}),(0,H.jsx)(`div`,{className:`gate-pw-toggle`,children:(0,H.jsx)(h,{checked:p,onChange:m,label:`Show`})}),(0,H.jsx)(`input`,{id:`gate-pw`,type:p?`text`:`password`,value:l,onChange:e=>u(e.target.value),placeholder:`Your password`,autoFocus:!0,autoComplete:`new-password`}),l.length>0&&(0,H.jsx)(`div`,{className:`gate-strength`,children:e.map(e=>(0,H.jsxs)(`span`,{className:`gate-strength-item${e.met?` met`:``}`,children:[e.met?`✓`:`○`,` `,e.label]},e.key))})]}),(0,H.jsxs)(`div`,{className:`gate-field`,children:[(0,H.jsx)(`label`,{htmlFor:`gate-pw-confirm`,children:`Confirm password`}),(0,H.jsx)(`input`,{id:`gate-pw-confirm`,type:p?`text`:`password`,value:d,onChange:e=>f(e.target.value),placeholder:`Confirm your password`,autoComplete:`new-password`}),d.length>0&&!r&&(0,H.jsx)(`div`,{className:`gate-error`,children:`Passwords do not match`})]}),C&&(0,H.jsx)(`div`,{className:`gate-error`,children:C}),(0,H.jsx)(`div`,{className:`gate-submit`,children:(0,H.jsx)(g,{variant:`primary`,type:`submit`,fullWidth:!0,disabled:!i||D,loading:D,children:`Create account & enter chat`})})]})]})})}case`enter-otp`:return(0,H.jsx)(`div`,{className:`gate-wrap`,children:(0,H.jsxs)(`div`,{className:`gate-card`,children:[(0,H.jsx)(`h2`,{className:`gate-title`,children:`Enter your code`}),(0,H.jsxs)(`p`,{className:`gate-subtitle`,children:[`Enter the 6-digit code sent to `,B(y,`phone`)]}),(0,H.jsx)(U,{value:_,onChange:v,onComplete:A,disabled:D}),C&&(0,H.jsx)(`div`,{className:`gate-error`,children:C}),D&&(0,H.jsxs)(`div`,{className:`gate-loading`,children:[(0,H.jsx)(`span`,{className:`spinner`}),`Verifying...`]}),(0,H.jsx)(`div`,{className:`gate-resend`,children:(0,H.jsx)(`button`,{type:`button`,className:`gate-link`,onClick:()=>{t(`sign-in`),v(``),w(null)},children:`Use a different number`})})]})});case`sign-in`:case`private-agent`:return(0,H.jsx)(`div`,{className:`gate-wrap`,children:(0,H.jsxs)(`div`,{className:`gate-card`,children:[(0,H.jsx)(`h2`,{className:`gate-title`,children:e===`private-agent`?`Private Agent`:`Welcome back`}),(0,H.jsx)(`p`,{className:`gate-subtitle`,children:e===`private-agent`?`This agent is invitation-only. If you have an account, sign in below.`:`Sign in to continue your conversation.`}),x?(0,H.jsxs)(`form`,{className:`gate-form`,onSubmit:N,children:[(0,H.jsxs)(`div`,{className:`gate-field`,children:[(0,H.jsx)(`label`,{htmlFor:`gate-forgot-contact`,children:`Email or phone`}),(0,H.jsx)(`input`,{id:`gate-forgot-contact`,type:`text`,value:s,onChange:e=>c(e.target.value),placeholder:`you@example.com`,autoFocus:!0,autoComplete:`email`})]}),C&&(0,H.jsx)(`div`,{className:`gate-error`,children:C}),T&&(0,H.jsx)(`div`,{className:`gate-success`,children:T}),(0,H.jsx)(`div`,{className:`gate-submit`,children:(0,H.jsx)(g,{variant:`primary`,type:`submit`,fullWidth:!0,disabled:!s.trim()||D,loading:D,children:`Send reset link`})}),(0,H.jsx)(`div`,{className:`gate-actions`,children:(0,H.jsx)(`button`,{type:`button`,className:`gate-link`,onClick:()=>{S(!1),w(null),E(null)},children:`Back to sign in`})})]}):(0,H.jsxs)(`form`,{className:`gate-form`,onSubmit:k,children:[(0,H.jsxs)(`div`,{className:`gate-field`,children:[(0,H.jsx)(`label`,{htmlFor:`gate-contact`,children:`Email or phone`}),(0,H.jsx)(`input`,{id:`gate-contact`,type:`text`,value:s,onChange:e=>c(e.target.value),placeholder:`you@example.com`,autoFocus:!0,autoComplete:`email`})]}),(0,H.jsxs)(`div`,{className:`gate-field gate-pw-row`,children:[(0,H.jsx)(`label`,{htmlFor:`gate-login-pw`,children:`Password`}),(0,H.jsx)(`div`,{className:`gate-pw-toggle`,children:(0,H.jsx)(h,{checked:p,onChange:m,label:`Show`})}),(0,H.jsx)(`input`,{id:`gate-login-pw`,type:p?`text`:`password`,value:l,onChange:e=>u(e.target.value),placeholder:`Your password`,autoComplete:`current-password`})]}),C&&(0,H.jsx)(`div`,{className:`gate-error`,children:C}),(0,H.jsx)(`div`,{className:`gate-submit`,children:(0,H.jsx)(g,{variant:`primary`,type:`submit`,fullWidth:!0,disabled:!s.trim()||!l||D,loading:D,children:`Sign in`})}),(0,H.jsx)(`div`,{className:`gate-actions`,children:(0,H.jsx)(`button`,{type:`button`,className:`gate-link`,onClick:()=>{S(!0),w(null)},children:`Forgot password?`})})]}),e===`private-agent`&&(0,H.jsx)(`p`,{className:`gate-hint`,children:`No account? You need an invitation from the agent owner.`})]})});case`access-expired`:return(0,H.jsx)(`div`,{className:`gate-wrap`,children:(0,H.jsxs)(`div`,{className:`gate-card`,children:[(0,H.jsx)(`div`,{className:`gate-icon`,children:`⏰`}),(0,H.jsx)(`h2`,{className:`gate-title`,children:`Access expired`}),(0,H.jsxs)(`p`,{className:`gate-subtitle`,children:[n?.expiresAt?`Your access expired on ${new Date(n.expiresAt).toLocaleDateString(`en-GB`,{day:`numeric`,month:`long`,year:`numeric`})}.`:`Your access to this agent has expired.`,` `,`Contact the agent owner to renew.`]}),(0,H.jsx)(`div`,{className:`gate-actions`,children:(0,H.jsx)(g,{variant:`secondary`,onClick:()=>{t(`sign-in`),w(null),u(``)},children:`Sign in with a different account`})})]})});case`link-expired`:return(0,H.jsx)(`div`,{className:`gate-wrap`,children:(0,H.jsxs)(`div`,{className:`gate-card`,children:[(0,H.jsx)(`div`,{className:`gate-icon`,children:`⚠️`}),(0,H.jsx)(`h2`,{className:`gate-title`,children:`Link expired`}),(0,H.jsx)(`p`,{className:`gate-subtitle`,children:`This invitation link has expired or has already been used. If you already set your password, sign in below. Otherwise, ask the agent owner to send a new invitation.`}),(0,H.jsx)(`div`,{className:`gate-actions`,children:(0,H.jsx)(g,{variant:`primary`,onClick:()=>{t(`sign-in`),w(null)},children:`Go to sign in`})})]})});case`otp-failed`:return(0,H.jsx)(`div`,{className:`gate-wrap`,children:(0,H.jsxs)(`div`,{className:`gate-card`,children:[(0,H.jsx)(`div`,{className:`gate-icon`,children:`⛔`}),(0,H.jsx)(`h2`,{className:`gate-title`,children:`Too many attempts`}),(0,H.jsx)(`p`,{className:`gate-subtitle`,children:`You've entered the wrong code too many times. Ask the agent owner to send a new code.`}),(0,H.jsx)(`div`,{className:`gate-actions`,children:(0,H.jsx)(g,{variant:`secondary`,onClick:()=>{t(`sign-in`),w(null),v(``)},children:`Back to sign in`})})]})})}}var W={"single-select":m,"multi-select":S,"action-buttons":b};function G({name:e,data:t,onSubmit:n,submitted:r}){let i=W[e];return i?(0,H.jsx)(i,{data:t,onSubmit:n,submitted:r}):(console.warn(`[PublicComponentRenderer] Unknown component: "${e}". Registered: ${Object.keys(W).join(`, `)}`),(0,H.jsx)(`div`,{className:`component-card component-card--error`,children:(0,H.jsxs)(`p`,{style:{fontFamily:`var(--font-body)`,fontSize:12,color:`var(--text-secondary)`},children:[`Component “`,e,`” is not available. This may require a platform update.`]})}))}function re({messages:e,isStreaming:t,sessionError:n,selectionMode:r,selectedItems:i,toggleSelectItem:c,onComponentSubmit:l,remainingSuggestions:u,onSuggestionClick:d,isAtBottom:p,setIsAtBottom:m,isGroup:_}){let[v,y]=(0,j.useState)(new Set),[b,x]=(0,j.useState)(new Set),S=(0,j.useRef)(null),C=(0,j.useRef)(null),T=(0,j.useRef)(null),E=(0,j.useRef)(!1),D=(0,j.useRef)(!1),O=(0,j.useRef)(!1),k=(0,j.useRef)(0),A=(0,j.useRef)(!1),M=(0,j.useRef)(new Map);A.current=t,(0,j.useEffect)(()=>{t&&!E.current&&p&&(D.current=!0)},[t,p]),(0,j.useEffect)(()=>{if(!D.current&&!p){E.current=t,O.current=!1;return}if(E.current&&!t&&T.current&&C.current){let e=T.current;if(e.offsetHeight>C.current.clientHeight){D.current=!1,O.current=!0,e.scrollIntoView({behavior:`smooth`,block:`start`}),E.current=t;return}}(p||D.current)&&!O.current&&S.current?.scrollIntoView({behavior:`smooth`}),E.current&&!t&&(D.current=!1),E.current=t},[e,p,t]),(0,j.useEffect)(()=>{let e=C.current;if(!e)return;let t=()=>{let t=e.scrollTop;A.current&&t<k.current&&(D.current=!1),k.current=t,m(e.scrollHeight-e.scrollTop-e.clientHeight<80)};return e.addEventListener(`scroll`,t,{passive:!0}),t(),()=>e.removeEventListener(`scroll`,t)},[m]),(0,j.useEffect)(()=>{function e(){x(e=>{let t=new Set;return M.current.forEach((n,r)=>{n.isConnected&&(v.has(r)?e.has(r)&&t.add(r):n.scrollHeight>n.clientHeight+2&&t.add(r))}),e.size===t.size&&[...e].every(e=>t.has(e))?e:t})}e();let t=new ResizeObserver(e);return M.current.forEach(e=>t.observe(e)),()=>t.disconnect()},[e.length,v]);let N=e.reduce((e,t,n)=>t.role===`maxy`&&!t.hidden?n:e,-1);return(0,H.jsxs)(`div`,{className:`chat-messages-wrap`,children:[r&&(0,H.jsx)(`div`,{className:`selection-overlay-band`}),(0,H.jsxs)(`div`,{className:`chat-messages`,ref:C,children:[n&&e.length===0&&(0,H.jsx)(`div`,{className:`session-error`,children:(0,H.jsx)(`p`,{children:n})}),e.map((n,u)=>{if(n.hidden)return null;let d=t&&u===e.length-1,p=`${n.timestamp}_${n.role}`,m=i.has(p);return(0,H.jsxs)(`div`,{ref:u===N?T:void 0,className:`message ${n.role}${m?` selected`:``}`,children:[r&&!d&&(0,H.jsx)(`div`,{className:`message-select-check`,children:(0,H.jsx)(h,{checked:m,onChange:()=>c(p)})}),(0,H.jsxs)(`div`,{className:`bubble`,children:[_&&n.role===`visitor`&&n.senderName&&(0,H.jsx)(`span`,{className:`bubble-sender`,children:n.senderName}),n.role===`visitor`&&n.content?(()=>{let e=v.has(u),t=b.has(u);return(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`div`,{ref:e=>{e?M.current.set(u,e):M.current.delete(u)},className:e?`bubble-content`:`bubble-content clamped${t?` overflowing`:``}`,children:n.content}),t&&(0,H.jsx)(`div`,{className:`bubble-expand`,children:(0,H.jsx)(g,{variant:`icon`,className:e?`expanded`:``,onClick:()=>y(e=>{let t=new Set(e);return t.has(u)?t.delete(u):t.add(u),t}),"aria-label":e?`Collapse message`:`Expand message`,children:(0,H.jsx)(a,{size:14})})})]})})():n.content?(0,H.jsx)(w,{content:n.content,timestamp:f(n.timestamp)}):(0,H.jsxs)(`span`,{className:`typing-indicator`,children:[(0,H.jsx)(`span`,{className:`typing-dot`}),(0,H.jsx)(`span`,{className:`typing-dot`}),(0,H.jsx)(`span`,{className:`typing-dot`})]}),n.attachments&&n.attachments.length>0&&(0,H.jsx)(`div`,{className:`message-attachments`,children:n.attachments.map((e,t)=>(0,H.jsxs)(`span`,{className:`message-attachment-chip no-action`,children:[e.mimeType===`application/pdf`?(0,H.jsx)(o,{size:12}):e.mimeType.startsWith(`text/`)?(0,H.jsx)(s,{size:12}):null,(0,H.jsx)(`span`,{children:e.filename})]},t))}),n.role===`visitor`&&(0,H.jsx)(`span`,{className:`message-timestamp`,children:f(n.timestamp)})]}),n.role===`maxy`&&n.components&&n.components.length>0&&(0,H.jsx)(`div`,{className:`public-components`,children:n.components.map((e,t)=>(0,H.jsx)(`div`,{className:`public-component-enter`,children:(0,H.jsx)(G,{name:e.name,data:e.data,onSubmit:e=>l(u,t,e),submitted:e.submitted})},t))})]},u)}),!t&&u.length>0&&(0,H.jsx)(`div`,{className:`chat-suggestions`,children:u.map(e=>(0,H.jsx)(g,{variant:`suggestion`,onClick:()=>d(e),children:e},e))}),(0,H.jsx)(`div`,{ref:S})]}),!p&&(0,H.jsx)(`button`,{className:`scroll-to-bottom`,onClick:()=>S.current?.scrollIntoView({behavior:`smooth`}),"aria-label":`Scroll to bottom`,children:(0,H.jsx)(a,{size:18})})]})}function ie({selectedItems:e,messages:t,copySelected:r,exitSelection:a,showCopyToast:o}){let[s,c]=(0,j.useState)(!1),l=(0,j.useRef)(null),u=(0,j.useRef)(!1);function d(e){let n=e.lastIndexOf(`_`),r=e.slice(0,n),i=e.slice(n+1),a=parseInt(r,10);return t.find(e=>e.timestamp===a&&e.role===i)?.content??``}function f(e,t){return parseInt(e.slice(0,e.lastIndexOf(`_`)),10)-parseInt(t.slice(0,t.lastIndexOf(`_`)),10)}function p(){let e=[...t].sort((e,t)=>e.timestamp-t.timestamp),n=[];for(let t of e){if(t.hidden||!t.content)continue;let e=t.role===`visitor`?`Visitor`:`Maxy`;n.push(`${e}:\n${t.content}`)}return n.join(`
2
-
3
- ---
4
-
5
- `)}j.useEffect(()=>{if(!s)return;let e=e=>{e.target.closest(`.selection-copy-wrap`)||c(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[s]);function m(){l.current!==null&&(clearTimeout(l.current),l.current=null)}return(0,H.jsx)(`div`,{className:`chat-input-area`,children:(0,H.jsxs)(`div`,{className:`selection-bar`,children:[(0,H.jsxs)(`span`,{className:`selection-count`,children:[e.size,` Selected`]}),(0,H.jsxs)(`div`,{className:`selection-copy-wrap`,children:[(0,H.jsxs)(`button`,{type:`button`,className:`selection-copy`,onPointerDown:()=>{if(s){c(!1);return}u.current=!1,l.current=setTimeout(()=>{u.current=!0,c(!0),l.current=null},500)},onPointerUp:m,onPointerLeave:m,onPointerCancel:m,onClick:async()=>{u.current||await r(d,f)},children:[(0,H.jsx)(i,{size:18}),(0,H.jsx)(`span`,{children:`Copy`})]}),s&&(0,H.jsx)(`div`,{className:`copy-menu`,children:(0,H.jsx)(`button`,{type:`button`,className:`copy-menu-item`,onClick:async()=>{let e=p();e&&o(await n(e)),a()},children:`Copy all`})})]}),(0,H.jsx)(`button`,{type:`button`,className:`selection-cancel`,onClick:a,children:`Cancel`})]})})}function ae({input:e,setInput:n,isStreaming:r,pendingFiles:i,setPendingFiles:a,attachError:c,setAttachError:l,isDragOver:u,setIsDragOver:d,inputRef:f,onSubmit:p,onSendVoiceNote:m}){let h=(0,j.useRef)(null),b=C(),S=b.state===`recording`||b.state===`paused`||b.state===`sending`,w=!S&&!r&&!e.trim()&&i.length===0;async function T(){let e=await b.send();if(!e)return;let t=e.type===`audio/ogg`?`.ogg`:e.type===`audio/mp4`?`.m4a`:`.webm`;m(new File([e],`voice-note${t}`,{type:e.type}))}function E(e){l(null);let t=e.find(e=>!N.has(e.type));if(t){l(`Unsupported file type: "${t.type}". Supported: images, PDF, plain text, markdown, CSV, calendar.`);return}let n=e.find(e=>e.size>P);if(n){l(`"${n.name}" exceeds the 20 MB limit.`);return}a(t=>[...t,...e].slice(0,5))}function D(e){e.preventDefault(),d(!0)}function O(){d(!1)}function k(e){e.preventDefault(),d(!1),E([...e.dataTransfer.files])}return(0,H.jsxs)(`div`,{className:`chat-input-area`,children:[(0,H.jsx)(`input`,{ref:h,type:`file`,multiple:!0,accept:M,style:{display:`none`},onChange:e=>{e.target.files&&E([...e.target.files]),e.target.value=``}}),i.length>0&&(0,H.jsx)(`div`,{className:`attachment-strip`,children:i.map((e,t)=>(0,H.jsxs)(`div`,{className:`attachment-chip`,children:[e.type.startsWith(`image/`)?(0,H.jsx)(`img`,{src:URL.createObjectURL(e),alt:e.name,className:`attachment-chip-thumb`}):e.type===`application/pdf`?(0,H.jsx)(o,{size:14}):(0,H.jsx)(s,{size:14}),(0,H.jsx)(`span`,{className:`attachment-chip-name`,children:e.name}),(0,H.jsx)(`button`,{type:`button`,className:`attachment-chip-remove`,onClick:()=>a(e=>e.filter((e,n)=>n!==t)),"aria-label":`Remove ${e.name}`,children:`×`})]},t))}),c&&(0,H.jsx)(`p`,{className:`attach-error`,children:c}),b.state===`error`&&b.errorMessage&&(0,H.jsxs)(`p`,{className:`voice-error`,role:`alert`,children:[(0,H.jsx)(v,{size:14}),b.errorMessage]}),(0,H.jsx)(_,{inputRef:f}),S?(0,H.jsx)(`div`,{className:`chat-form voice-active`,children:(0,H.jsx)(y,{state:b.state,elapsedSeconds:b.elapsedSeconds,waveform:b.waveform,onTogglePause:b.togglePause,onDiscard:b.discard,onSend:T})}):(0,H.jsxs)(`form`,{className:`chat-form${u?` drag-over`:``}`,onSubmit:p,onDragOver:D,onDragLeave:O,onDrop:k,onPaste:e=>{let t=e.clipboardData?.items;if(!t)return;let n=[];for(let e of t){if(e.kind!==`file`)continue;let t=e.getAsFile();if(!t)continue;let r=t.type.split(`/`)[1]?.replace(`jpeg`,`jpg`)||`png`;n.push(new File([t],`pasted-image-${Date.now()}.${r}`,{type:t.type}))}n.length>0&&E(n)},children:[(0,H.jsx)(g,{variant:`icon`,type:`button`,onClick:()=>h.current?.click(),disabled:r,"aria-label":`Attach file`,children:(0,H.jsx)(t,{size:14})}),(0,H.jsx)(x,{ref:f,value:e,onChange:n}),w?(0,H.jsx)(g,{variant:`send`,type:`button`,onClick:b.start,disabled:r,"aria-label":`Record voice note`,children:(0,H.jsx)(v,{size:14})}):(0,H.jsx)(g,{variant:`send`,type:`submit`,disabled:r||!e.trim()&&i.length===0,"aria-label":`Send message`,children:(0,H.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,H.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,H.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]})]})}var K=[];function q(){let[e,t]=(0,j.useState)(``),[n,i]=(0,j.useState)([]),[a,o]=(0,j.useState)(!1),[s,c]=(0,j.useState)(null),[l,u]=(0,j.useState)(K),[d,f]=(0,j.useState)(!0),m=(0,j.useRef)(null),{selectionMode:h,selectedItems:g,copyToast:_,exitSelection:v,enterSelection:y,toggleSelectItem:b,copySelected:x,showCopyToast:S}=E(),C=(0,j.useRef)(()=>{}),w=V((0,j.useCallback)(e=>{C.current(e)},[])),{sessionId:O,sessionKeyRef:A,sessionError:M,pageState:N,agentDisplayName:P,agentImage:F,agentImageShape:I,showAgentName:L,branding:R,ensureSession:z,startNewSession:B,resumedRef:U,resumeMessagesRef:W,groupContext:G,groupSlug:q}=w,{messages:J,setMessages:Y,isStreaming:X,sendMessage:Z,sendGreeting:Q,handleComponentSubmit:oe}=ee({sessionKeyRef:A,ensureSession:z,sessionError:M,pageState:N,inputRef:m});(0,j.useEffect)(()=>{C.current=Q},[Q]),te({sessionKeyRef:A,groupSlug:q,isStreaming:X,setMessages:Y}),(0,j.useEffect)(()=>{let e=!1;return(async()=>{let t=await z();if(!e&&t){if(U.current&&W.current&&W.current.length>0){Y(W.current.map(e=>({role:e.role,content:e.content,timestamp:e.timestamp}))),W.current=null;return}Q(t)}})(),()=>{e=!0}},[]),(0,j.useEffect)(()=>{N===`chat`&&m.current?.focus()},[N]),(0,j.useEffect)(()=>{if(N!==`chat`)return;history.pushState({maxyChat:!0},``);function e(){history.pushState({maxyChat:!0},``)}return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[N]),(0,j.useEffect)(()=>{if(!R)return;let e=document.documentElement;if(R.primaryColor&&(e.style.setProperty(`--sage`,R.primaryColor),e.style.setProperty(`--sage-hover`,R.primaryColor),e.style.setProperty(`--sage-subtle`,R.primaryColor+`14`),e.style.setProperty(`--sage-glow`,R.primaryColor+`26`)),R.accentColor&&e.style.setProperty(`--visitor-bubble`,R.accentColor),R.backgroundColor&&e.style.setProperty(`--bg`,R.backgroundColor),document.title=R.name,R.primaryColor){let e=document.querySelector(`meta[name="theme-color"]`);e||(e=document.createElement(`meta`),e.name=`theme-color`,document.head.appendChild(e)),e.content=R.primaryColor}if(R.faviconUrl){let e=document.querySelector(`link[rel="icon"]`);e||(e=document.createElement(`link`),e.rel=`icon`,document.head.appendChild(e)),e.href=R.faviconUrl}},[R]),(0,j.useEffect)(()=>{function e(e){e.key===`Escape`&&h&&v()}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[h,v]);function se(){X||(Y([]),u(K),B())}function $(e){if(!e&&n.length===0||X)return;Y(e=>e.map(e=>e.components?.some(e=>!e.submitted)?{...e,components:e.components.map(e=>e.submitted?e:{...e,submitted:!0})}:e)),u(t=>t.filter(t=>t!==e)),f(!0);let r=[...n];t(``),i([]),c(null),Z(e,{files:r})}function ce(t){t.preventDefault(),$(e.trim()),m.current?.resetHeight()}return(0,H.jsxs)(`div`,{className:`chat-page`,children:[(0,H.jsxs)(`header`,{className:`chat-header`,children:[(0,H.jsx)(`img`,{src:F||R?.logoUrl||p,alt:R?.name||T.productName,className:`chat-logo${F&&I===`circle`?` chat-logo--circle`:``}${F&&I===`rounded`?` chat-logo--rounded`:``}`,onError:e=>{e.target.src=R?.logoUrl||p}}),(0,H.jsxs)(`div`,{className:`chat-header-text`,children:[L!==`none`&&(0,H.jsx)(`h1`,{className:`chat-tagline`,children:G?.groupName||L&&P||R?.name||T.productName}),(0,H.jsx)(`p`,{className:`chat-intro`,children:G?`${G.participants.length} participants`:R?.tagline||``}),(0,H.jsx)(`p`,{className:`chat-ai-indicator`,children:`AI assistant`})]}),N===`chat`&&!h&&(0,H.jsxs)(`div`,{className:`chat-header-actions`,children:[(0,H.jsx)(`button`,{className:`chat-header-action`,onClick:se,disabled:X,title:`New conversation`,"aria-label":`New conversation`,children:(0,H.jsx)(k,{size:16})}),(0,H.jsx)(`button`,{className:`chat-header-action`,onClick:y,title:`Select messages`,"aria-label":`Select messages`,children:(0,H.jsx)(r,{size:16})})]})]}),N===`loading`&&(0,H.jsx)(`div`,{className:`gate-wrap`,children:(0,H.jsx)(`div`,{className:`gate-loading`,children:(0,H.jsx)(`span`,{className:`spinner`})})}),N===`auth-required`&&(0,H.jsx)(ne,{gateState:w.gateState,setGateState:w.setGateState,grantInfo:w.grantInfo,setGrantInfo:w.setGrantInfo,gateSessionKeyRef:w.gateSessionKeyRef,resolvedSlugRef:w.resolvedSlugRef,onAuthenticated:w.enterChat}),N===`chat`&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(re,{messages:J,isStreaming:X,sessionError:M,selectionMode:h,selectedItems:g,toggleSelectItem:b,onComponentSubmit:oe,remainingSuggestions:l,onSuggestionClick:$,isAtBottom:d,setIsAtBottom:f,isGroup:!!G}),h?(0,H.jsx)(ie,{selectedItems:g,messages:J,copySelected:x,exitSelection:v,showCopyToast:S}):(0,H.jsx)(ae,{input:e,setInput:t,isStreaming:X,pendingFiles:n,setPendingFiles:i,attachError:s,setAttachError:c,isDragOver:a,setIsDragOver:o,inputRef:m,onSubmit:ce,onSendVoiceNote:e=>{t(``),i([]),c(null),Z(`[Voice note]`,{files:[e]})}})]}),_&&(0,H.jsx)(`span`,{className:`copy-toast${_===`failed`?` copy-toast-failed`:``}`,children:_===`copied`?`Copied`:`Copy failed`}),(0,H.jsxs)(`footer`,{className:`chat-footer`,children:[(0,H.jsxs)(`a`,{href:D,children:[T.domain,` `,`↗`]}),O&&(0,H.jsxs)(`span`,{style:{opacity:.35,fontSize:`10px`,fontFamily:`monospace`,marginLeft:`1rem`},children:[`Conversation · `,O.slice(0,8)]})]})]})}(0,A.createRoot)(document.getElementById(`root`)).render((0,H.jsx)(q,{}));
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-HA4lma0b.js";import{n as e}from"./chunk-2KRD3SAO-DNeXC6EU.js";export{e as createRadarServices};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CE18leCm.js";import"./chunk-ICPOFSXX-C9ojfLDm.js";import"./dist-Dl3zB445.js";import"./chunk-5PVQY5BW-B1E88VcH.js";import"./chunk-U2HBQHQK-CgwbVvji.js";import"./chunk-BSJP7CBP-Dg2E_8Wn.js";import"./chunk-ZZ45TVLE-UdCCrEj5.js";import"./chunk-55IACEB6-B65N4qpl.js";import"./chunk-EDXVE4YY-jDBKFDJB.js";import"./chunk-X2U36JSP-D4PiRakQ.js";import"./chunk-5FUZZQ4R-u7p0S5bJ.js";import"./chunk-ENJZ2VHE-CAHIipTH.js";import"./chunk-336JU56O-CZH22klX.js";import{i as t,n,r,t as i}from"./chunk-OYMX7WX6-Bc8ZyHQH.js";var a={parser:n,get db(){return new i(2)},renderer:r,styles:t,init:e(e=>{e.state||={},e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-HA4lma0b.js";import{n as e}from"./chunk-ORNJ4GCN-BVm-YmZh.js";export{e as createTreeViewServices};
@@ -1 +0,0 @@
1
- import"./chunk-K5T4RW27-HA4lma0b.js";import{n as e}from"./chunk-LIHQZDEY-B5hk7dNX.js";export{e as createTreemapServices};