@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.
- package/dist/index.js +7 -3
- package/package.json +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +8 -12
- package/payload/platform/plugins/memory/mcp/dist/index.js +19 -47
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +20 -48
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +21 -287
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js.map +1 -1
- package/payload/platform/plugins/memory/references/graph-primitives.md +24 -13
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +46 -2
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +9 -0
- package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/index.js +16 -0
- package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts +38 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js +82 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +35 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
- package/payload/server/public/assets/{admin-jpGCzN83.js → admin-BTfeGAIg.js} +41 -41
- package/payload/server/public/assets/{arc-DaD1u5gI.js → arc-DcrodP5U.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-C38eyeNF.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-OaixqJSY.js → architectureDiagram-Q4EWVU46-Cvo_8X6C.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-ChbWwdfi.js → blockDiagram-DXYQGD6D-CEK06TEn.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-6r7dvkBG.js → c4Diagram-AHTNJAMY-QjYUSwTU.js} +1 -1
- package/payload/server/public/assets/channel-D0dIwjlN.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-DNeXC6EU.js → chunk-2KRD3SAO-BBifNfFc.js} +1 -1
- package/payload/server/public/assets/{chunk-336JU56O-CZH22klX.js → chunk-336JU56O-B-N_zWuf.js} +2 -2
- package/payload/server/public/assets/chunk-426QAEUC-C8oXXITm.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-IcfD9Mfv.js → chunk-4BX2VUAB-CtDQKj9B.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-CKA9rXZu.js → chunk-4TB4RGXK-Dnu9n3p1.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-B65N4qpl.js → chunk-55IACEB6-DSLoJJSj.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-u7p0S5bJ.js → chunk-5FUZZQ4R-rx-IvMNE.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-B1E88VcH.js → chunk-5PVQY5BW-B9w9AKCS.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-DIue23pI.js → chunk-67CJDMHE-C1yEjtiu.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-BQ9OzsfS.js → chunk-7N4EOEYR-C2f3zeVH.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-RpSCHdZM.js → chunk-AA7GKIK3-B_U-NsDK.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-Dg2E_8Wn.js → chunk-BSJP7CBP-DM6_wafW.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-BKZA8eJP.js → chunk-CIAEETIT-DG7WkfNj.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-jDBKFDJB.js → chunk-EDXVE4YY-aS3_rdwQ.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-CAHIipTH.js → chunk-ENJZ2VHE-r1I0uoCf.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-FHlW2hpP.js → chunk-FMBD7UC4-CTm3YRE5.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-CAIHldV7.js → chunk-FOC6F5B3-CAIttx3K.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-C9ojfLDm.js → chunk-ICPOFSXX-DQFV4c1l.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-HA4lma0b.js → chunk-K5T4RW27-B2WCPQBa.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-CimijL8o.js → chunk-KGLVRYIC-C6w2sUOF.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-B5hk7dNX.js → chunk-LIHQZDEY-BT1hcDTK.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-BVm-YmZh.js → chunk-ORNJ4GCN-Brl32BSe.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-Bc8ZyHQH.js → chunk-OYMX7WX6-BCO6n1CX.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-BE_lylks.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-CgwbVvji.js → chunk-U2HBQHQK-BvgC0fpb.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-D4PiRakQ.js → chunk-X2U36JSP-3yLdcqYf.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-DgiaNQ32.js → chunk-XPW4576I-D876RWxK.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-jgwS2uNT.js → chunk-YZCP3GAM-CiuA4hOC.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-UdCCrEj5.js → chunk-ZZ45TVLE-COjEBPzv.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DH37CWIF.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DNJ7bv8r.js +1 -0
- package/payload/server/public/assets/clone-rrGuX3ZR.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-D8laakap.js → cose-bilkent-S5V4N54A-Dap0yL0o.js} +1 -1
- package/payload/server/public/assets/{dagre-3T6_8Ajq.js → dagre-DBbjK-Cf.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-CzjS08zx.js → dagre-KV5264BT-DEia9UJj.js} +1 -1
- package/payload/server/public/assets/data-DHhDRGaC.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-eG7XwxOn.js → diagram-5BDNPKRD-CWSP9MzJ.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-DmVrtCUt.js → diagram-G4DWMVQ6-DWRsfitL.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-ER1KP2RD.js → diagram-MMDJMWI5-n-jyzS4D.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-kH-bn3pm.js → diagram-TYMM5635-CLPTbfLq.js} +1 -1
- package/payload/server/public/assets/{dist-Dl3zB445.js → dist-Tkw8EOuG.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-Clya83Yf.js → erDiagram-SMLLAGMA-CmPC9Cnc.js} +1 -1
- package/payload/server/public/assets/{flatten-DOi5FhnR.js → flatten-Db2kUB5j.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BG1UIazn.js → flowDiagram-DWJPFMVM-DKMNmUbX.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BF6t7cgR.js → ganttDiagram-T4ZO3ILL-C5-y3w-l.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-CCjgA3FG.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-GeyVCma5.js → gitGraphDiagram-UUTBAWPF-D9hG5kTg.js} +1 -1
- package/payload/server/public/assets/{graphlib-CvvxOMJO.js → graphlib-StP6GUhM.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-B65K6dQJ.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-DUJfTICr.js +2 -0
- package/payload/server/public/assets/{isEmpty-BlYSjjLF.js → isEmpty-CXH_nKTs.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-CC_sxiqJ.js → ishikawaDiagram-UXIWVN3A--K4KOS61.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-T5_FJJp9.js → journeyDiagram-VCZTEJTY-DE-28YrW.js} +1 -1
- package/payload/server/public/assets/jsx-runtime-SjVUZj3J.js +9 -0
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-DmX2Qjbn.js → kanban-definition-6JOO6SKY-CxSHjau2.js} +1 -1
- package/payload/server/public/assets/{line-N5bPNRcv.js → line-DbcqYIG0.js} +1 -1
- package/payload/server/public/assets/{linear-2x7ZHX-K.js → linear-DXHoZSN3.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-C66sw0ru.js → mermaid-parser.core-CNGUA13J.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-C_cBOsxO.js → mermaid.core-IQgx_upQ.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-gBgI6iwA.js → mindmap-definition-QFDTVHPH-BT9Up6-C.js} +1 -1
- package/payload/server/public/assets/{ordinal-Crx1uav8.js → ordinal-CN3oz6oW.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-fp5ishAK.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-Bc3VMuuU.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-DU2SKMGa.js → pieDiagram-DEJITSTG-BuewQTi6.js} +1 -1
- package/payload/server/public/assets/public-C-nsHZgC.js +5 -0
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CfTfCdKE.js → quadrantDiagram-34T5L4WZ-Cu8y2zQL.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-D9jy5QAa.js +1 -0
- package/payload/server/public/assets/{reduce-DhQ6Q49z.js → reduce-SDh8_UdG.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-CdJ1ecPK.js → requirementDiagram-MS252O5E-DiT9bo27.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-C6oTo_BW.js → sankeyDiagram-XADWPNL6-EkRnGTxM.js} +1 -1
- package/payload/server/public/assets/search-BzKUsdMm.js +1 -0
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DZhUqa93.js → sequenceDiagram-FGHM5R23-BUiQA3SI.js} +1 -1
- package/payload/server/public/assets/{src-CE18leCm.js → src-DQQCRlaQ.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BHHHyE3Q.js → stateDiagram-FHFEXIEX-Fij35Tic.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DQzhSd8K.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CO7-xxpE.js → timeline-definition-GMOUNBTQ-BMsyr7wU.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-CHyRL9e4.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-DpQ_FOO6.js +1 -0
- package/payload/server/public/assets/useVoiceRecorder-t2l8eU6m.js +36 -0
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-CLOInE0r.js → vennDiagram-DHZGUBPP-6fegYFB3.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-CWBIAatW.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BjgSwG0b.js → wardleyDiagram-NUSXRM2D-BtJ_B35h.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-B3z4BK4L.js → xychartDiagram-5P7HB3ND-DJ20B4NY.js} +1 -1
- package/payload/server/public/data.html +17 -0
- package/payload/server/public/index.html +7 -5
- package/payload/server/public/public.html +6 -5
- package/payload/server/server.js +133 -120
- package/payload/server/public/assets/architecture-YZFGNWBL-BUDIBJAP.js +0 -1
- package/payload/server/public/assets/channel-BrpIlIyG.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-GSccNhhE.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-tM7_0fxy.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-C4ZqhHGM.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DiXqUWgc.js +0 -1
- package/payload/server/public/assets/clone-BdpG6seo.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DDaWNf-D.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-CzeItRxz.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CI_73SMs.js +0 -2
- package/payload/server/public/assets/packet-4T2RLAQJ-B22Ofvhw.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-Pt4vBFsr.js +0 -1
- package/payload/server/public/assets/public-DdVq1Jag.js +0 -5
- package/payload/server/public/assets/radar-PYXPWWZC-C6F-a-Hg.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-5wdzy-za.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-BHz6YkPq.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-qbRo1jie.js +0 -1
- package/payload/server/public/assets/useVoiceRecorder-3Qblv7wH.js +0 -44
- package/payload/server/public/assets/wardley-RL74JXVD-BVKDrbVC.js +0 -1
- /package/payload/server/public/assets/{_baseFor-DxqHO4yN.js → _baseFor-D71p92tl.js} +0 -0
- /package/payload/server/public/assets/{array-B0pZ4ajb.js → array-Bs_owIvv.js} +0 -0
- /package/payload/server/public/assets/{chunk-Be6NvmcD.js → chunk-lgnzUk6H.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-yP0g-0RD.js → cytoscape.esm-DLG5qhup.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-DOAzocMZ.js → defaultLocale-Du_2bjyv.js} +0 -0
- /package/payload/server/public/assets/{init-JRXXbB84.js → init-BYLBkHX_.js} +0 -0
- /package/payload/server/public/assets/{useVoiceRecorder-BNLXzSN4.css → jsx-runtime-BNLXzSN4.css} +0 -0
- /package/payload/server/public/assets/{katex-zjckjCBG.js → katex-lkho_UhZ.js} +0 -0
- /package/payload/server/public/assets/{path-DX61D_oX.js → path-BO54iFkf.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-rov5CBGT.js → preload-helper-DWTEM3RW.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-Cs8YDIX4.js → rough.esm-BCiZEpQC.js} +0 -0
package/payload/server/server.js
CHANGED
|
@@ -1,8 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
|
2640
|
-
const server =
|
|
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
|
|
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 {
|
|
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
|
-
|
|
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
|
|
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 (
|
|
19059
|
+
if (existsSync27(brandPath2)) {
|
|
19069
19060
|
try {
|
|
19070
|
-
const brand = JSON.parse(
|
|
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
|
|
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
|
|
19542
|
-
import { dirname as
|
|
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 (!
|
|
19537
|
+
if (!existsSync28(ALIAS_DOMAINS_PATH)) return /* @__PURE__ */ new Set();
|
|
19547
19538
|
try {
|
|
19548
|
-
const parsed = JSON.parse(
|
|
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(
|
|
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(
|
|
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 && !
|
|
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 &&
|
|
20048
|
+
if (BRAND_JSON_PATH && existsSync29(BRAND_JSON_PATH)) {
|
|
20055
20049
|
try {
|
|
20056
|
-
const parsed = JSON.parse(
|
|
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 (!
|
|
20079
|
-
const parsed = JSON.parse(
|
|
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 (!
|
|
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 =
|
|
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 (!
|
|
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 =
|
|
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 &&
|
|
20551
|
+
if (BRAND_JSON_PATH && existsSync29(BRAND_JSON_PATH)) {
|
|
20559
20552
|
try {
|
|
20560
|
-
const fullBrand = JSON.parse(
|
|
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 (!
|
|
20579
|
-
const content =
|
|
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 =
|
|
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 (!
|
|
20639
|
-
const account = JSON.parse(
|
|
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 (!
|
|
20644
|
-
return JSON.parse(
|
|
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 (!
|
|
20654
|
-
const account = JSON.parse(
|
|
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 =
|
|
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 (
|
|
20786
|
-
const users = JSON.parse(
|
|
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};
|