@rubytech/create-maxy 1.0.643 → 1.0.644

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 (59) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/graph-mcp/dist/index.js +7 -1
  3. package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -1
  4. package/payload/platform/lib/graph-mcp/src/index.ts +9 -1
  5. package/payload/platform/plugins/admin/mcp/dist/index.js +12 -1
  6. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  7. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.d.ts.map +1 -1
  8. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js +7 -1
  9. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js.map +1 -1
  10. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts.map +1 -1
  11. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +7 -1
  12. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -1
  13. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.d.ts.map +1 -1
  14. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js +7 -1
  15. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js.map +1 -1
  16. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +8 -1
  17. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -1
  18. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts.map +1 -1
  19. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +7 -1
  20. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -1
  21. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts.map +1 -1
  22. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js +7 -1
  23. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js.map +1 -1
  24. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +8 -1
  25. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  26. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.d.ts.map +1 -1
  27. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js +7 -1
  28. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js.map +1 -1
  29. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts.map +1 -1
  30. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +7 -1
  31. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -1
  32. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.d.ts.map +1 -1
  33. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +7 -1
  34. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +1 -1
  35. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.d.ts.map +1 -1
  36. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +4 -7
  37. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -1
  38. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.d.ts.map +1 -1
  39. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js +7 -1
  40. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js.map +1 -1
  41. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +1 -1
  42. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js +7 -1
  43. package/payload/premium-plugins/real-agency/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
  44. package/payload/premium-plugins/real-agency/plugins/loop/mcp/src/lib/neo4j.ts +9 -1
  45. package/payload/server/public/assets/admin-k3A7-7ra.js +352 -0
  46. package/payload/server/public/assets/data-CrTM-LA6.js +1 -0
  47. package/payload/server/public/assets/{jsx-runtime-SjVUZj3J.js → jsx-runtime-57sjl-2n.js} +3 -3
  48. package/payload/server/public/assets/public-BjWvJQTw.js +5 -0
  49. package/payload/server/public/assets/share-2-CQp5pId4.js +1 -0
  50. package/payload/server/public/assets/useVoiceRecorder-BMxkndFD.js +36 -0
  51. package/payload/server/public/data.html +3 -3
  52. package/payload/server/public/index.html +4 -4
  53. package/payload/server/public/public.html +3 -3
  54. package/payload/server/server.js +114 -13
  55. package/payload/server/public/assets/admin-BTfeGAIg.js +0 -352
  56. package/payload/server/public/assets/data-DHhDRGaC.js +0 -1
  57. package/payload/server/public/assets/public-C-nsHZgC.js +0 -5
  58. package/payload/server/public/assets/search-BzKUsdMm.js +0 -1
  59. package/payload/server/public/assets/useVoiceRecorder-t2l8eU6m.js +0 -36
@@ -5,12 +5,12 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/admin-BTfeGAIg.js"></script>
8
+ <script type="module" crossorigin src="/assets/admin-k3A7-7ra.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-lgnzUk6H.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-SjVUZj3J.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-57sjl-2n.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-DWTEM3RW.js">
12
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-t2l8eU6m.js">
13
- <link rel="modulepreload" crossorigin href="/assets/search-BzKUsdMm.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BMxkndFD.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/share-2-CQp5pId4.js">
14
14
  <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-BNLXzSN4.css">
15
15
  <link rel="stylesheet" href="/brand-defaults.css">
16
16
  </head>
@@ -5,11 +5,11 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/public-C-nsHZgC.js"></script>
8
+ <script type="module" crossorigin src="/assets/public-BjWvJQTw.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-lgnzUk6H.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-SjVUZj3J.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-57sjl-2n.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-DWTEM3RW.js">
12
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-t2l8eU6m.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BMxkndFD.js">
13
13
  <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-BNLXzSN4.css">
14
14
  <link rel="stylesheet" href="/brand-defaults.css">
15
15
  </head>
@@ -3840,23 +3840,32 @@ var HOP_BY_HOP2 = /* @__PURE__ */ new Set([
3840
3840
  "transfer-encoding",
3841
3841
  "upgrade"
3842
3842
  ]);
3843
+ var cachedUpstreamPort = null;
3843
3844
  function resolveUpstreamPort() {
3844
- const uri = process.env.NEO4J_URI ?? "bolt://localhost:7687";
3845
+ if (cachedUpstreamPort !== null) return cachedUpstreamPort;
3846
+ const uri = process.env.NEO4J_URI;
3847
+ if (!uri) {
3848
+ throw new Error(
3849
+ "[ui/graph-proxy] NEO4J_URI unset \u2014 refusing to default to bolt://localhost:7687 (Task 580)"
3850
+ );
3851
+ }
3845
3852
  const m = uri.match(/:(\d+)$/);
3846
3853
  const boltPort = m ? parseInt(m[1], 10) : 7687;
3847
- return boltPort - 213;
3854
+ cachedUpstreamPort = boltPort - 213;
3855
+ console.error(`[ui/graph-proxy] resolved neo4j_uri=${uri} http_port=${cachedUpstreamPort}`);
3856
+ return cachedUpstreamPort;
3848
3857
  }
3849
3858
  var UPSTREAM_HOST = "127.0.0.1";
3850
- var UPSTREAM_PORT = resolveUpstreamPort();
3851
3859
  function attachGraphHttpRoutes(app2) {
3852
3860
  const handler = async (c) => {
3853
3861
  const raw2 = c.req.raw;
3854
3862
  const url = new URL(raw2.url);
3863
+ const upstreamPort = resolveUpstreamPort();
3855
3864
  const pathAfterPrefix = url.pathname.slice(GRAPH_PREFIX.length) || "/";
3856
- const upstreamUrl = `http://${UPSTREAM_HOST}:${UPSTREAM_PORT}${pathAfterPrefix}${url.search}`;
3865
+ const upstreamUrl = `http://${UPSTREAM_HOST}:${upstreamPort}${pathAfterPrefix}${url.search}`;
3857
3866
  const upstreamHeaders = new Headers(raw2.headers);
3858
3867
  for (const h of HOP_BY_HOP2) upstreamHeaders.delete(h);
3859
- upstreamHeaders.set("host", `${UPSTREAM_HOST}:${UPSTREAM_PORT}`);
3868
+ upstreamHeaders.set("host", `${UPSTREAM_HOST}:${upstreamPort}`);
3860
3869
  try {
3861
3870
  const upstream = await fetch(upstreamUrl, {
3862
3871
  method: raw2.method,
@@ -3869,6 +3878,11 @@ function attachGraphHttpRoutes(app2) {
3869
3878
  });
3870
3879
  const resHeaders = new Headers(upstream.headers);
3871
3880
  for (const h of HOP_BY_HOP2) resHeaders.delete(h);
3881
+ const loc = resHeaders.get("location");
3882
+ if (loc) {
3883
+ const rewritten = rewriteLocation(loc);
3884
+ if (rewritten !== loc) resHeaders.set("location", rewritten);
3885
+ }
3872
3886
  return new Response(upstream.body, {
3873
3887
  status: upstream.status,
3874
3888
  statusText: upstream.statusText,
@@ -3920,13 +3934,14 @@ function attachGraphWsProxy(server, opts) {
3920
3934
  }
3921
3935
  const rewrittenPath = pathname === GRAPH_PREFIX ? "/" : pathname.slice(GRAPH_PREFIX.length);
3922
3936
  const rewrittenUrl = qsIndex === -1 ? rewrittenPath : rewrittenPath + url.slice(qsIndex);
3923
- const upstream = createConnection2({ host: UPSTREAM_HOST, port: UPSTREAM_PORT });
3937
+ const upstreamPort = resolveUpstreamPort();
3938
+ const upstream = createConnection2({ host: UPSTREAM_HOST, port: upstreamPort });
3924
3939
  upstream.setTimeout(UPSTREAM_TIMEOUT_MS2);
3925
3940
  upstream.once("connect", () => {
3926
3941
  upstream.setTimeout(0);
3927
3942
  const lines = [];
3928
3943
  lines.push(`${req.method ?? "GET"} ${rewrittenUrl} HTTP/${req.httpVersion}`);
3929
- lines.push(`host: ${UPSTREAM_HOST}:${UPSTREAM_PORT}`);
3944
+ lines.push(`host: ${UPSTREAM_HOST}:${upstreamPort}`);
3930
3945
  for (const [name, value] of Object.entries(req.headers)) {
3931
3946
  if (name === "host") continue;
3932
3947
  if (HOP_BY_HOP2.has(name)) continue;
@@ -3998,6 +4013,21 @@ function headerString2(value) {
3998
4013
  if (value == null) return void 0;
3999
4014
  return Array.isArray(value) ? value[0] : value;
4000
4015
  }
4016
+ function rewriteLocation(location) {
4017
+ try {
4018
+ const parsed = new URL(location);
4019
+ if (parsed.hostname === UPSTREAM_HOST && parsed.port === String(resolveUpstreamPort())) {
4020
+ const pathWithQuery = parsed.pathname + parsed.search + parsed.hash;
4021
+ return pathWithQuery.startsWith(GRAPH_PREFIX) ? pathWithQuery : `${GRAPH_PREFIX}${pathWithQuery}`;
4022
+ }
4023
+ return location;
4024
+ } catch {
4025
+ if (location.startsWith("/") && !location.startsWith(`${GRAPH_PREFIX}/`) && location !== GRAPH_PREFIX) {
4026
+ return `${GRAPH_PREFIX}${location}`;
4027
+ }
4028
+ return location;
4029
+ }
4030
+ }
4001
4031
  function parseOriginHost2(origin) {
4002
4032
  if (!origin) return null;
4003
4033
  try {
@@ -4679,9 +4709,15 @@ function readPassword() {
4679
4709
  }
4680
4710
  function getDriver() {
4681
4711
  if (!driver) {
4682
- const uri = process.env.NEO4J_URI ?? "bolt://localhost:7687";
4712
+ const uri = process.env.NEO4J_URI;
4713
+ if (!uri) {
4714
+ throw new Error(
4715
+ "[ui/neo4j-store] NEO4J_URI unset \u2014 refusing to default to bolt://localhost:7687 (Task 580)"
4716
+ );
4717
+ }
4683
4718
  const user = process.env.NEO4J_USER ?? "neo4j";
4684
4719
  const password = readPassword();
4720
+ console.error(`[ui/neo4j-store] resolved neo4j_uri=${uri}`);
4685
4721
  driver = neo4j.driver(uri, neo4j.auth.basic(user, password), {
4686
4722
  maxConnectionPoolSize: 5
4687
4723
  });
@@ -7862,12 +7898,33 @@ function readBrandHostname() {
7862
7898
  }
7863
7899
  return cachedBrandHostname;
7864
7900
  }
7901
+ function requireNeo4jUri() {
7902
+ const uri = process.env.NEO4J_URI;
7903
+ if (!uri) {
7904
+ throw new Error(
7905
+ "NEO4J_URI unset \u2014 refusing to default to bolt://localhost:7687. Set NEO4J_URI in the gateway's env (systemd EnvironmentFile or shell .env). (Task 580)"
7906
+ );
7907
+ }
7908
+ const brand = readBrandHostname();
7909
+ if (brand === "realagent" && /:7687([/?]|$)/.test(uri)) {
7910
+ throw new Error(
7911
+ `NEO4J_URI=${uri} points at :7687 on a realagent install \u2014 realagent owns :7688. This would silently write into Maxy's DB (Task 577 vector). (Task 580)`
7912
+ );
7913
+ }
7914
+ return uri;
7915
+ }
7865
7916
  function getMcpServers(accountId, conversationId, userId, enabledPlugins) {
7866
7917
  if (!conversationId) {
7867
7918
  throw new Error(`getMcpServers: conversationId is required (accountId=${accountId.slice(0, 8)})`);
7868
7919
  }
7869
7920
  const { logDir: LOG_DIR2, streamLogPath: STREAM_LOG_PATH } = streamLogPathFor(accountId, conversationId);
7870
- const baseEnv = { ACCOUNT_ID: accountId, PLATFORM_ROOT: PLATFORM_ROOT4, LOG_DIR: LOG_DIR2, STREAM_LOG_PATH };
7921
+ const baseEnv = {
7922
+ ACCOUNT_ID: accountId,
7923
+ PLATFORM_ROOT: PLATFORM_ROOT4,
7924
+ LOG_DIR: LOG_DIR2,
7925
+ STREAM_LOG_PATH,
7926
+ NEO4J_URI: requireNeo4jUri()
7927
+ };
7871
7928
  const servers = {
7872
7929
  "memory": {
7873
7930
  command: "node",
@@ -7938,7 +7995,6 @@ function getMcpServers(accountId, conversationId, userId, enabledPlugins) {
7938
7995
  env: {
7939
7996
  ...baseEnv,
7940
7997
  BRAND: readBrandHostname(),
7941
- NEO4J_URI: process.env.NEO4J_URI ?? "bolt://localhost:7687",
7942
7998
  NEO4J_USERNAME: process.env.NEO4J_USERNAME ?? process.env.NEO4J_USER ?? "neo4j",
7943
7999
  NEO4J_NAMESPACE: "maxy-graph",
7944
8000
  NEO4J_READ_ONLY: "true",
@@ -15766,9 +15822,15 @@ function readPassword2() {
15766
15822
  }
15767
15823
  function getDriver2() {
15768
15824
  if (!driver2) {
15769
- const uri = process.env.NEO4J_URI ?? "bolt://localhost:7687";
15825
+ const uri = process.env.NEO4J_URI;
15826
+ if (!uri) {
15827
+ throw new Error(
15828
+ "[ui/access-gate] NEO4J_URI unset \u2014 refusing to default to bolt://localhost:7687 (Task 580)"
15829
+ );
15830
+ }
15770
15831
  const user = process.env.NEO4J_USER ?? "neo4j";
15771
15832
  const password = readPassword2();
15833
+ console.error(`[ui/access-gate] resolved neo4j_uri=${uri}`);
15772
15834
  driver2 = neo4j2.driver(uri, neo4j2.auth.basic(user, password), {
15773
15835
  maxConnectionPoolSize: 5
15774
15836
  });
@@ -19750,7 +19812,7 @@ async function POST33(req) {
19750
19812
  }
19751
19813
 
19752
19814
  // app/api/admin/files/route.ts
19753
- import { readdir as readdir2, stat as stat4 } from "fs/promises";
19815
+ import { readdir as readdir2, readFile as readFile4, stat as stat4 } from "fs/promises";
19754
19816
  import { join as join14 } from "path";
19755
19817
 
19756
19818
  // app/lib/data-path.ts
@@ -19796,6 +19858,39 @@ function resolveDataPath(raw2) {
19796
19858
  }
19797
19859
 
19798
19860
  // app/api/admin/files/route.ts
19861
+ var UUID_RE2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
19862
+ async function readMeta(absDir, baseName) {
19863
+ try {
19864
+ const raw2 = await readFile4(join14(absDir, `${baseName}.meta.json`), "utf8");
19865
+ const parsed = JSON.parse(raw2);
19866
+ if (typeof parsed?.filename === "string") {
19867
+ return { filename: parsed.filename, mimeType: typeof parsed.mimeType === "string" ? parsed.mimeType : void 0 };
19868
+ }
19869
+ } catch {
19870
+ }
19871
+ return null;
19872
+ }
19873
+ async function enrich(absolute, entry) {
19874
+ if (entry.kind === "directory" && UUID_RE2.test(entry.name)) {
19875
+ const meta = await readMeta(join14(absolute, entry.name), entry.name);
19876
+ if (meta?.filename) {
19877
+ entry.displayName = meta.filename;
19878
+ entry.mimeType = meta.mimeType;
19879
+ }
19880
+ return;
19881
+ }
19882
+ if (entry.kind === "file") {
19883
+ const dot = entry.name.lastIndexOf(".");
19884
+ const base = dot === -1 ? entry.name : entry.name.slice(0, dot);
19885
+ if (UUID_RE2.test(base)) {
19886
+ const meta = await readMeta(absolute, base);
19887
+ if (meta?.filename) {
19888
+ entry.displayName = meta.filename;
19889
+ entry.mimeType = meta.mimeType;
19890
+ }
19891
+ }
19892
+ }
19893
+ }
19799
19894
  async function GET17(req) {
19800
19895
  const url = new URL(req.url);
19801
19896
  const sessionKey = url.searchParams.get("session_key");
@@ -19828,6 +19923,9 @@ async function GET17(req) {
19828
19923
  const names = await readdir2(absolute);
19829
19924
  const entries = [];
19830
19925
  for (const name of names) {
19926
+ if (UUID_RE2.test(name.replace(/\.meta\.json$/, "")) && name.endsWith(".meta.json")) {
19927
+ continue;
19928
+ }
19831
19929
  try {
19832
19930
  const entryPath = join14(absolute, name);
19833
19931
  const s = await stat4(entryPath);
@@ -19841,9 +19939,12 @@ async function GET17(req) {
19841
19939
  entries.push({ name, kind: "other", sizeBytes: null, modifiedAt: (/* @__PURE__ */ new Date(0)).toISOString() });
19842
19940
  }
19843
19941
  }
19942
+ await Promise.all(entries.map((e) => enrich(absolute, e)));
19844
19943
  entries.sort((a, b) => {
19845
19944
  if (a.kind !== b.kind) return a.kind === "directory" ? -1 : 1;
19846
- return a.name.localeCompare(b.name);
19945
+ const aKey = a.displayName ?? a.name;
19946
+ const bKey = b.displayName ?? b.name;
19947
+ return aKey.localeCompare(bKey);
19847
19948
  });
19848
19949
  console.error(`[data] file-list path="${relPath}" entries=${entries.length}`);
19849
19950
  return Response.json({ path: relPath, entries });