@rubytech/create-maxy-code 0.1.580 → 0.1.581

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 (117) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +13 -1
  3. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +9 -0
  4. package/payload/platform/plugins/docs/references/telegram-guide.md +12 -0
  5. package/payload/platform/plugins/telegram/PLUGIN.md +4 -0
  6. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.d.ts +2 -0
  7. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.d.ts.map +1 -0
  8. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.js +75 -0
  9. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.js.map +1 -0
  10. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js +13 -4
  11. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js.map +1 -1
  12. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js +34 -0
  13. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js.map +1 -1
  14. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.d.ts +2 -0
  15. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.d.ts.map +1 -0
  16. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.js +93 -0
  17. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.js.map +1 -0
  18. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.d.ts +2 -0
  19. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.d.ts.map +1 -0
  20. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.js +76 -0
  21. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.js.map +1 -0
  22. package/payload/platform/plugins/telegram/mcp/dist/index.js +19 -1
  23. package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
  24. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts +4 -0
  25. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts.map +1 -1
  26. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js +1 -1
  27. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js.map +1 -1
  28. package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.d.ts +15 -0
  29. package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.d.ts.map +1 -0
  30. package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.js +78 -0
  31. package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.js.map +1 -0
  32. package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts +21 -2
  33. package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts.map +1 -1
  34. package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js +24 -3
  35. package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js.map +1 -1
  36. package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.d.ts +44 -0
  37. package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.d.ts.map +1 -0
  38. package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.js +88 -0
  39. package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.js.map +1 -0
  40. package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts.map +1 -1
  41. package/payload/platform/plugins/telegram/mcp/dist/tools/card.js +7 -1
  42. package/payload/platform/plugins/telegram/mcp/dist/tools/card.js.map +1 -1
  43. package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.d.ts +23 -0
  44. package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.d.ts.map +1 -0
  45. package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.js +43 -0
  46. package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.js.map +1 -0
  47. package/payload/platform/plugins/telegram/skills/build/SKILL.md +10 -0
  48. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  49. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
  50. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  51. package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
  52. package/payload/platform/services/telegram-channel/dist/instructions.js +15 -1
  53. package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
  54. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  55. package/payload/server/{adminuser-self-heal-Y4U3UNKF.js → adminuser-self-heal-ZHFNDKJK.js} +2 -10
  56. package/payload/server/{chunk-637C2FGE.js → chunk-BFRB2U75.js} +3278 -3381
  57. package/payload/server/{chunk-6DQCFP2E.js → chunk-BTXRBXMU.js} +3785 -4090
  58. package/payload/server/{chunk-KVR2FT6O.js → chunk-HYQNUVGO.js} +1 -12
  59. package/payload/server/{chunk-PGGGWUBM.js → chunk-SKYZG6OT.js} +224 -372
  60. package/payload/server/{manager-R3XH3BNM.js → manager-CTVTF4YB.js} +3 -3
  61. package/payload/server/maxy-edge.js +4 -27
  62. package/payload/server/public/assets/{AdminLoginScreens-Dxv5t1YY.js → AdminLoginScreens-B1lu4-_F.js} +1 -1
  63. package/payload/server/public/assets/AdminLoginScreens-B1lu4-_F.js.br +0 -0
  64. package/payload/server/public/assets/AdminLoginScreens-B1lu4-_F.js.gz +0 -0
  65. package/payload/server/public/assets/{admin-DapcMKCG.js → admin-CkASgYA7.js} +1 -1
  66. package/payload/server/public/assets/admin-CkASgYA7.js.br +0 -0
  67. package/payload/server/public/assets/admin-CkASgYA7.js.gz +0 -0
  68. package/payload/server/public/assets/chat-CKyMT5Ai.js +1 -0
  69. package/payload/server/public/assets/chat-CKyMT5Ai.js.br +1 -0
  70. package/payload/server/public/assets/chat-CKyMT5Ai.js.gz +0 -0
  71. package/payload/server/public/assets/data-1c33cAHp.js +1 -0
  72. package/payload/server/public/assets/data-1c33cAHp.js.br +2 -0
  73. package/payload/server/public/assets/data-1c33cAHp.js.gz +0 -0
  74. package/payload/server/public/assets/{operator-BOiL8sxx.js → operator-DRn9LITC.js} +1 -1
  75. package/payload/server/public/assets/operator-DRn9LITC.js.br +0 -0
  76. package/payload/server/public/assets/operator-DRn9LITC.js.gz +0 -0
  77. package/payload/server/public/assets/{page-CZ6tyH8t.js → page-BwqQsoU8.js} +1 -1
  78. package/payload/server/public/assets/page-BwqQsoU8.js.br +0 -0
  79. package/payload/server/public/assets/page-BwqQsoU8.js.gz +0 -0
  80. package/payload/server/public/assets/{page-Cd36Y0h6.js → page-D_9mPS6W.js} +1 -1
  81. package/payload/server/public/assets/page-D_9mPS6W.js.br +0 -0
  82. package/payload/server/public/assets/page-D_9mPS6W.js.gz +0 -0
  83. package/payload/server/public/assets/{public-CVBav4FQ.js → public-CrjZYpdW.js} +1 -1
  84. package/payload/server/public/assets/public-CrjZYpdW.js.br +0 -0
  85. package/payload/server/public/assets/public-CrjZYpdW.js.gz +0 -0
  86. package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js +2 -0
  87. package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js.br +0 -0
  88. package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js.gz +0 -0
  89. package/payload/server/public/chat.html +3 -3
  90. package/payload/server/public/data.html +3 -3
  91. package/payload/server/public/index.html +4 -4
  92. package/payload/server/public/operator.html +4 -4
  93. package/payload/server/public/public.html +3 -3
  94. package/payload/server/server.js +9945 -10153
  95. package/payload/server/{src-IJCLNFYU.js → src-MM64CYYZ.js} +1 -1
  96. package/payload/server/{userprofile-reconcile-PUA657YX.js → userprofile-reconcile-TL4JKBPG.js} +1 -8
  97. package/payload/server/public/assets/AdminLoginScreens-Dxv5t1YY.js.br +0 -0
  98. package/payload/server/public/assets/AdminLoginScreens-Dxv5t1YY.js.gz +0 -0
  99. package/payload/server/public/assets/admin-DapcMKCG.js.br +0 -0
  100. package/payload/server/public/assets/admin-DapcMKCG.js.gz +0 -0
  101. package/payload/server/public/assets/chat-DLmikhie.js +0 -1
  102. package/payload/server/public/assets/chat-DLmikhie.js.br +0 -1
  103. package/payload/server/public/assets/chat-DLmikhie.js.gz +0 -0
  104. package/payload/server/public/assets/data-C1_m9Xyf.js +0 -1
  105. package/payload/server/public/assets/data-C1_m9Xyf.js.br +0 -0
  106. package/payload/server/public/assets/data-C1_m9Xyf.js.gz +0 -0
  107. package/payload/server/public/assets/operator-BOiL8sxx.js.br +0 -0
  108. package/payload/server/public/assets/operator-BOiL8sxx.js.gz +0 -0
  109. package/payload/server/public/assets/page-CZ6tyH8t.js.br +0 -0
  110. package/payload/server/public/assets/page-CZ6tyH8t.js.gz +0 -0
  111. package/payload/server/public/assets/page-Cd36Y0h6.js.br +0 -0
  112. package/payload/server/public/assets/page-Cd36Y0h6.js.gz +0 -0
  113. package/payload/server/public/assets/public-CVBav4FQ.js.br +0 -0
  114. package/payload/server/public/assets/public-CVBav4FQ.js.gz +0 -0
  115. package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js +0 -2
  116. package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js.br +0 -0
  117. package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js.gz +0 -0
@@ -1,162 +1,122 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import {
3
- __esm,
4
- __export
5
- } from "./chunk-KVR2FT6O.js";
6
2
 
7
3
  // app/lib/paths.ts
8
- var paths_exports = {};
9
- __export(paths_exports, {
10
- ADMIN_SESSION_SECRET_FILE: () => ADMIN_SESSION_SECRET_FILE,
11
- BIN_DIR: () => BIN_DIR,
12
- BRAND_NAME: () => BRAND_NAME,
13
- BUNDLE_ALLOWLIST: () => BUNDLE_ALLOWLIST,
14
- BUNDLE_MODE: () => BUNDLE_MODE,
15
- CDP_PORT: () => CDP_PORT,
16
- CHROMIUM_PROFILE_DIR: () => CHROMIUM_PROFILE_DIR,
17
- CLAUDE_CREDENTIALS_FILE: () => CLAUDE_CREDENTIALS_FILE,
18
- COMMERCIAL_MODE: () => COMMERCIAL_MODE,
19
- INSTALL_OWNER_FILE: () => INSTALL_OWNER_FILE,
20
- LID_MAP_FILE: () => LID_MAP_FILE,
21
- LOG_DIR: () => LOG_DIR,
22
- MAXY_DIR: () => MAXY_DIR,
23
- REMOTE_PASSWORD_FILE: () => REMOTE_PASSWORD_FILE,
24
- REMOTE_SESSION_SECRET_FILE: () => REMOTE_SESSION_SECRET_FILE,
25
- RFB_PORT: () => RFB_PORT,
26
- SHIPS_PREMIUM_BUNDLES: () => SHIPS_PREMIUM_BUNDLES,
27
- TELEGRAM_ADMIN_WEBHOOK_SECRET_FILE: () => TELEGRAM_ADMIN_WEBHOOK_SECRET_FILE,
28
- TELEGRAM_WEBHOOK_SECRET_FILE: () => TELEGRAM_WEBHOOK_SECRET_FILE,
29
- USERS_AUDIT_LOG: () => USERS_AUDIT_LOG,
30
- USERS_FILE: () => USERS_FILE,
31
- VISITOR_TOKEN_SECRET_FILE: () => VISITOR_TOKEN_SECRET_FILE,
32
- VNC_DISPLAY: () => VNC_DISPLAY,
33
- VNC_DISPLAY_NUM: () => VNC_DISPLAY_NUM,
34
- WEBSOCKIFY_PORT: () => WEBSOCKIFY_PORT
35
- });
36
4
  import { homedir } from "os";
37
5
  import { resolve, join } from "path";
38
6
  import { existsSync, readFileSync } from "fs";
39
- var configDirName, commercialMode, bundleMode, bundleAllowlist, vncDisplayNum, rfbPortNum, websockifyPortNum, cdpPortNum, portSource, platformRoot, MAXY_DIR, BRAND_NAME, COMMERCIAL_MODE, BUNDLE_MODE, BUNDLE_ALLOWLIST, SHIPS_PREMIUM_BUNDLES, VNC_DISPLAY_NUM, VNC_DISPLAY, RFB_PORT, WEBSOCKIFY_PORT, CDP_PORT, CHROMIUM_PROFILE_DIR, PLATFORM_ROOT, USERS_FILE, LID_MAP_FILE, LOG_DIR, USERS_AUDIT_LOG, BIN_DIR, REMOTE_PASSWORD_FILE, REMOTE_SESSION_SECRET_FILE, ADMIN_SESSION_SECRET_FILE, INSTALL_OWNER_FILE, TELEGRAM_WEBHOOK_SECRET_FILE, TELEGRAM_ADMIN_WEBHOOK_SECRET_FILE, VISITOR_TOKEN_SECRET_FILE, CLAUDE_CREDENTIALS_FILE;
40
- var init_paths = __esm({
41
- "app/lib/paths.ts"() {
42
- "use strict";
43
- configDirName = ".maxy";
44
- commercialMode = false;
45
- bundleMode = "none";
46
- bundleAllowlist = [];
47
- vncDisplayNum = 99;
48
- rfbPortNum = 5900;
49
- websockifyPortNum = 6080;
50
- cdpPortNum = 9222;
51
- portSource = "dev-default";
52
- platformRoot = process.env.MAXY_PLATFORM_ROOT;
53
- if (platformRoot) {
54
- const brandPath = join(platformRoot, "config", "brand.json");
55
- if (existsSync(brandPath)) {
56
- let brand;
57
- try {
58
- brand = JSON.parse(readFileSync(brandPath, "utf-8"));
59
- } catch (err) {
60
- const detail = (err instanceof Error ? err.message : String(err)).slice(0, 160);
61
- console.error(`[paths] error reason=brand-config-missing path=${brandPath} detail="parse failed: ${detail.replace(/"/g, "'")}"`);
62
- throw err;
63
- }
64
- if (typeof brand.configDir === "string") configDirName = brand.configDir;
65
- if (brand.commercialMode === true) commercialMode = true;
66
- if (brand.shipsPremiumBundles === true) {
67
- bundleMode = "all";
68
- } else if (Array.isArray(brand.shipsPremiumBundles)) {
69
- const arr = brand.shipsPremiumBundles;
70
- for (const entry of arr) {
71
- if (typeof entry !== "string" || entry.length === 0) {
72
- throw new Error(
73
- `brand.json at ${brandPath} shipsPremiumBundles array contains invalid entry: ${JSON.stringify(entry)}`
74
- );
75
- }
76
- }
77
- bundleMode = "allowlist";
78
- bundleAllowlist = arr;
79
- }
80
- if (typeof brand.vncDisplay === "number") vncDisplayNum = brand.vncDisplay;
81
- const brandLabel = configDirName.replace(/^\./, "");
82
- const required = [
83
- ["rfbPort", brand.rfbPort],
84
- ["websockifyPort", brand.websockifyPort],
85
- ["cdpPort", brand.cdpPort]
86
- ];
87
- for (const [field, value] of required) {
88
- if (typeof value !== "number") {
89
- const keys = Object.keys(brand).join(",");
90
- console.error(`[paths] error reason=cdp-port-unresolved brand=${brandLabel} path=${brandPath} field=${field} json_keys=${keys}`);
91
- throw new Error(`brand.json at ${brandPath} missing required field: ${field}`);
92
- }
7
+ var configDirName = ".maxy";
8
+ var commercialMode = false;
9
+ var bundleMode = "none";
10
+ var bundleAllowlist = [];
11
+ var vncDisplayNum = 99;
12
+ var rfbPortNum = 5900;
13
+ var websockifyPortNum = 6080;
14
+ var cdpPortNum = 9222;
15
+ var portSource = "dev-default";
16
+ var platformRoot = process.env.MAXY_PLATFORM_ROOT;
17
+ if (platformRoot) {
18
+ const brandPath = join(platformRoot, "config", "brand.json");
19
+ if (existsSync(brandPath)) {
20
+ let brand;
21
+ try {
22
+ brand = JSON.parse(readFileSync(brandPath, "utf-8"));
23
+ } catch (err) {
24
+ const detail = (err instanceof Error ? err.message : String(err)).slice(0, 160);
25
+ console.error(`[paths] error reason=brand-config-missing path=${brandPath} detail="parse failed: ${detail.replace(/"/g, "'")}"`);
26
+ throw err;
27
+ }
28
+ if (typeof brand.configDir === "string") configDirName = brand.configDir;
29
+ if (brand.commercialMode === true) commercialMode = true;
30
+ if (brand.shipsPremiumBundles === true) {
31
+ bundleMode = "all";
32
+ } else if (Array.isArray(brand.shipsPremiumBundles)) {
33
+ const arr = brand.shipsPremiumBundles;
34
+ for (const entry of arr) {
35
+ if (typeof entry !== "string" || entry.length === 0) {
36
+ throw new Error(
37
+ `brand.json at ${brandPath} shipsPremiumBundles array contains invalid entry: ${JSON.stringify(entry)}`
38
+ );
93
39
  }
94
- rfbPortNum = brand.rfbPort;
95
- websockifyPortNum = brand.websockifyPort;
96
- cdpPortNum = brand.cdpPort;
97
- portSource = "brand.json";
98
40
  }
41
+ bundleMode = "allowlist";
42
+ bundleAllowlist = arr;
99
43
  }
100
- MAXY_DIR = resolve(homedir(), configDirName);
101
- BRAND_NAME = configDirName.replace(/^\./, "");
102
- COMMERCIAL_MODE = commercialMode;
103
- BUNDLE_MODE = bundleMode;
104
- BUNDLE_ALLOWLIST = bundleAllowlist;
105
- SHIPS_PREMIUM_BUNDLES = bundleMode !== "none";
106
- VNC_DISPLAY_NUM = vncDisplayNum;
107
- VNC_DISPLAY = `:${vncDisplayNum}`;
108
- RFB_PORT = rfbPortNum;
109
- WEBSOCKIFY_PORT = websockifyPortNum;
110
- CDP_PORT = cdpPortNum;
111
- console.log(
112
- `[paths] brand=${configDirName.replace(/^\./, "")} vncDisplay=${vncDisplayNum} rfbPort=${RFB_PORT} websockifyPort=${WEBSOCKIFY_PORT} cdpPort=${CDP_PORT} source=${portSource}`
113
- );
114
- CHROMIUM_PROFILE_DIR = resolve(homedir(), configDirName, "chromium-profile");
115
- PLATFORM_ROOT = process.env.MAXY_PLATFORM_ROOT ?? resolve(process.cwd(), "..");
116
- USERS_FILE = resolve(MAXY_DIR, "users.json");
117
- LID_MAP_FILE = resolve(MAXY_DIR, "whatsapp-lid-map.json");
118
- LOG_DIR = resolve(MAXY_DIR, "logs");
119
- USERS_AUDIT_LOG = resolve(LOG_DIR, "users-audit.log");
120
- BIN_DIR = resolve(MAXY_DIR, "bin");
121
- REMOTE_PASSWORD_FILE = resolve(MAXY_DIR, ".remote-password");
122
- REMOTE_SESSION_SECRET_FILE = resolve(MAXY_DIR, "credentials", "remote-session-secret");
123
- ADMIN_SESSION_SECRET_FILE = resolve(MAXY_DIR, "credentials", "admin-session-secret");
124
- INSTALL_OWNER_FILE = resolve(MAXY_DIR, ".install-owner");
125
- TELEGRAM_WEBHOOK_SECRET_FILE = resolve(MAXY_DIR, ".telegram-webhook-secret");
126
- TELEGRAM_ADMIN_WEBHOOK_SECRET_FILE = resolve(MAXY_DIR, ".telegram-admin-webhook-secret");
127
- VISITOR_TOKEN_SECRET_FILE = resolve(MAXY_DIR, "credentials", "visitor-token-secret");
128
- CLAUDE_CREDENTIALS_FILE = resolve(MAXY_DIR, ".claude", ".credentials.json");
129
- }
130
- });
44
+ if (typeof brand.vncDisplay === "number") vncDisplayNum = brand.vncDisplay;
45
+ const brandLabel = configDirName.replace(/^\./, "");
46
+ const required = [
47
+ ["rfbPort", brand.rfbPort],
48
+ ["websockifyPort", brand.websockifyPort],
49
+ ["cdpPort", brand.cdpPort]
50
+ ];
51
+ for (const [field, value] of required) {
52
+ if (typeof value !== "number") {
53
+ const keys = Object.keys(brand).join(",");
54
+ console.error(`[paths] error reason=cdp-port-unresolved brand=${brandLabel} path=${brandPath} field=${field} json_keys=${keys}`);
55
+ throw new Error(`brand.json at ${brandPath} missing required field: ${field}`);
56
+ }
57
+ }
58
+ rfbPortNum = brand.rfbPort;
59
+ websockifyPortNum = brand.websockifyPort;
60
+ cdpPortNum = brand.cdpPort;
61
+ portSource = "brand.json";
62
+ }
63
+ }
64
+ var MAXY_DIR = resolve(homedir(), configDirName);
65
+ var BRAND_NAME = configDirName.replace(/^\./, "");
66
+ var COMMERCIAL_MODE = commercialMode;
67
+ var BUNDLE_MODE = bundleMode;
68
+ var BUNDLE_ALLOWLIST = bundleAllowlist;
69
+ var VNC_DISPLAY = `:${vncDisplayNum}`;
70
+ var RFB_PORT = rfbPortNum;
71
+ var WEBSOCKIFY_PORT = websockifyPortNum;
72
+ var CDP_PORT = cdpPortNum;
73
+ console.log(
74
+ `[paths] brand=${configDirName.replace(/^\./, "")} vncDisplay=${vncDisplayNum} rfbPort=${RFB_PORT} websockifyPort=${WEBSOCKIFY_PORT} cdpPort=${CDP_PORT} source=${portSource}`
75
+ );
76
+ var CHROMIUM_PROFILE_DIR = resolve(homedir(), configDirName, "chromium-profile");
77
+ var PLATFORM_ROOT = process.env.MAXY_PLATFORM_ROOT ?? resolve(process.cwd(), "..");
78
+ var USERS_FILE = resolve(MAXY_DIR, "users.json");
79
+ var LID_MAP_FILE = resolve(MAXY_DIR, "whatsapp-lid-map.json");
80
+ var LOG_DIR = resolve(MAXY_DIR, "logs");
81
+ var USERS_AUDIT_LOG = resolve(LOG_DIR, "users-audit.log");
82
+ var BIN_DIR = resolve(MAXY_DIR, "bin");
83
+ var REMOTE_PASSWORD_FILE = resolve(MAXY_DIR, ".remote-password");
84
+ var REMOTE_SESSION_SECRET_FILE = resolve(MAXY_DIR, "credentials", "remote-session-secret");
85
+ var ADMIN_SESSION_SECRET_FILE = resolve(MAXY_DIR, "credentials", "admin-session-secret");
86
+ var INSTALL_OWNER_FILE = resolve(MAXY_DIR, ".install-owner");
87
+ var TELEGRAM_WEBHOOK_SECRET_FILE = resolve(MAXY_DIR, ".telegram-webhook-secret");
88
+ var TELEGRAM_ADMIN_WEBHOOK_SECRET_FILE = resolve(MAXY_DIR, ".telegram-admin-webhook-secret");
89
+ var VISITOR_TOKEN_SECRET_FILE = resolve(MAXY_DIR, "credentials", "visitor-token-secret");
90
+ var CLAUDE_CREDENTIALS_FILE = resolve(MAXY_DIR, ".claude", ".credentials.json");
131
91
 
132
92
  // ../lib/agent-slug/src/index.ts
93
+ var SYSTEM_PATH_SLUGS = ["public", "public-chat", "chat", "graph", "data", "browser"];
94
+ var RESERVED_AGENT_SLUGS = [
95
+ "admin",
96
+ "api",
97
+ "assets",
98
+ "agent-assets",
99
+ "brand",
100
+ "bot",
101
+ "privacy"
102
+ ];
103
+ var AGENT_SLUG_PATTERN = /^[a-z][a-z0-9-]{2,49}$/;
133
104
  function checkAgentSlug(slug) {
134
105
  if (!AGENT_SLUG_PATTERN.test(slug)) return { ok: false, reason: "shape" };
135
106
  if (RESERVED_AGENT_SLUGS.includes(slug)) return { ok: false, reason: "reserved" };
136
107
  if (SYSTEM_PATH_SLUGS.includes(slug)) return { ok: false, reason: "shadowed" };
137
108
  return { ok: true };
138
109
  }
139
- var SYSTEM_PATH_SLUGS, RESERVED_AGENT_SLUGS, AGENT_SLUG_PATTERN;
140
- var init_src = __esm({
141
- "../lib/agent-slug/src/index.ts"() {
142
- "use strict";
143
- SYSTEM_PATH_SLUGS = ["public", "public-chat", "chat", "graph", "data", "browser"];
144
- RESERVED_AGENT_SLUGS = [
145
- "admin",
146
- "api",
147
- "assets",
148
- "agent-assets",
149
- "brand",
150
- "bot",
151
- "privacy"
152
- ];
153
- AGENT_SLUG_PATTERN = /^[a-z][a-z0-9-]{2,49}$/;
154
- }
155
- });
110
+
111
+ // app/lib/claude-agent/account.ts
112
+ import { resolve as resolve2 } from "path";
113
+ import { readFileSync as readFileSync3, readdirSync, existsSync as existsSync3, statSync } from "fs";
156
114
 
157
115
  // ../lib/brand-templating/src/index.ts
158
116
  import { join as join2 } from "path";
159
117
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
118
+ var PLACEHOLDER = "{{productName}}";
119
+ var cachedProductName = null;
160
120
  function brandJsonPath() {
161
121
  const platformRoot2 = process.env.MAXY_PLATFORM_ROOT;
162
122
  if (!platformRoot2) {
@@ -207,61 +167,17 @@ function substituteBrandPlaceholders(content, sourcePath) {
207
167
  );
208
168
  return substituted;
209
169
  }
210
- var PLACEHOLDER, cachedProductName;
211
- var init_src2 = __esm({
212
- "../lib/brand-templating/src/index.ts"() {
213
- "use strict";
214
- PLACEHOLDER = "{{productName}}";
215
- cachedProductName = null;
216
- }
217
- });
218
-
219
- // ../lib/account-scope/src/index.ts
220
- function resolveEffectiveAccountCore(input, isValidAccountId2, notProvisionedReason = "cross-account-invalid-target") {
221
- const { ownAccountId, houseScope, targetAccountId } = input;
222
- if (!targetAccountId) return { accountId: ownAccountId };
223
- if (!houseScope) return { reject: "cross-account-denied" };
224
- if (!isValidAccountId2(targetAccountId)) return { reject: notProvisionedReason };
225
- return { accountId: targetAccountId };
226
- }
227
- function readHouseAdminScope(env = process.env) {
228
- return env.HOUSE_ADMIN_SCOPE ? env.HOUSE_ADMIN_SCOPE : null;
229
- }
230
- var init_src3 = __esm({
231
- "../lib/account-scope/src/index.ts"() {
232
- "use strict";
233
- }
234
- });
235
170
 
236
171
  // app/lib/claude-agent/account.ts
237
- var account_exports = {};
238
- __export(account_exports, {
239
- ACCOUNTS_DIR: () => ACCOUNTS_DIR,
240
- DEFAULT_REQUIRE_REVIEW: () => DEFAULT_REQUIRE_REVIEW,
241
- PLATFORM_ROOT: () => PLATFORM_ROOT2,
242
- getDefaultAccountId: () => getDefaultAccountId,
243
- hasStubAccountDir: () => hasStubAccountDir,
244
- isActiveAgentSlug: () => isActiveAgentSlug,
245
- isValidAccountId: () => isValidAccountId,
246
- listValidAccounts: () => listValidAccounts,
247
- readAgentFile: () => readAgentFile,
248
- readHouseAdminScope: () => readHouseAdminScope,
249
- readIdentity: () => readIdentity,
250
- resolveAccount: () => resolveAccount,
251
- resolveAgentConfig: () => resolveAgentConfig,
252
- resolveApprovalPolicy: () => resolveApprovalPolicy,
253
- resolveDefaultAgentSlug: () => resolveDefaultAgentSlug,
254
- resolveEffectiveAccount: () => resolveEffectiveAccount,
255
- validateAgentSlug: () => validateAgentSlug
256
- });
257
- import { resolve as resolve2 } from "path";
258
- import { readFileSync as readFileSync3, readdirSync, existsSync as existsSync3, statSync } from "fs";
259
- function resolveApprovalPolicy(toolName, accountConfig) {
260
- if (accountConfig.approvalPolicy?.[toolName]) {
261
- return accountConfig.approvalPolicy[toolName];
262
- }
263
- return DEFAULT_REQUIRE_REVIEW.includes(toolName) ? "require-review" : "auto-execute";
172
+ var PLATFORM_ROOT2 = process.env.MAXY_PLATFORM_ROOT ?? resolve2(process.cwd(), "..");
173
+ var ACCOUNTS_DIR = resolve2(PLATFORM_ROOT2, "..", "data/accounts");
174
+ if (!existsSync3(PLATFORM_ROOT2)) {
175
+ throw new Error(
176
+ `PLATFORM_ROOT does not exist: ${PLATFORM_ROOT2}
177
+ Set the MAXY_PLATFORM_ROOT environment variable to the absolute path of the platform directory.`
178
+ );
264
179
  }
180
+ var _stubDirsLoggedThisBoot = /* @__PURE__ */ new Set();
265
181
  function listValidAccounts() {
266
182
  if (!existsSync3(ACCOUNTS_DIR)) return [];
267
183
  const out = [];
@@ -296,21 +212,6 @@ function listValidAccounts() {
296
212
  function isValidAccountId(id) {
297
213
  return listValidAccounts().some((a) => a.accountId === id);
298
214
  }
299
- function resolveEffectiveAccount(input, deps = {}) {
300
- return resolveEffectiveAccountCore(input, deps.isValidAccountId ?? isValidAccountId);
301
- }
302
- function hasStubAccountDir() {
303
- if (!existsSync3(ACCOUNTS_DIR)) return { stub: false, dirs: [] };
304
- const stubs = [];
305
- const entries2 = readdirSync(ACCOUNTS_DIR, { withFileTypes: true });
306
- for (const entry of entries2) {
307
- if (!entry.isDirectory()) continue;
308
- if (entry.name.startsWith(".")) continue;
309
- const configPath = resolve2(ACCOUNTS_DIR, entry.name, "account.json");
310
- if (!existsSync3(configPath)) stubs.push(entry.name);
311
- }
312
- return { stub: stubs.length > 0, dirs: stubs };
313
- }
314
215
  function resolveAccount() {
315
216
  if (!existsSync3(ACCOUNTS_DIR)) return null;
316
217
  let usersJsonUserId = null;
@@ -377,9 +278,6 @@ function readAgentFile(accountDir, agentName, filename) {
377
278
  }
378
279
  return raw;
379
280
  }
380
- function readIdentity(accountDir, agentName) {
381
- return readAgentFile(accountDir, agentName, "IDENTITY.md");
382
- }
383
281
  function validateAgentSlug(slug) {
384
282
  const verdict = checkAgentSlug(slug);
385
283
  if (verdict.ok) return true;
@@ -504,36 +402,20 @@ function isActiveAgentSlug(accountDir, slug) {
504
402
  function getDefaultAccountId() {
505
403
  return resolveAccount()?.accountId ?? null;
506
404
  }
507
- var PLATFORM_ROOT2, ACCOUNTS_DIR, DEFAULT_REQUIRE_REVIEW, _stubDirsLoggedThisBoot;
508
- var init_account = __esm({
509
- "app/lib/claude-agent/account.ts"() {
510
- "use strict";
511
- init_src2();
512
- init_src3();
513
- init_paths();
514
- init_src();
515
- PLATFORM_ROOT2 = process.env.MAXY_PLATFORM_ROOT ?? resolve2(process.cwd(), "..");
516
- ACCOUNTS_DIR = resolve2(PLATFORM_ROOT2, "..", "data/accounts");
517
- if (!existsSync3(PLATFORM_ROOT2)) {
518
- throw new Error(
519
- `PLATFORM_ROOT does not exist: ${PLATFORM_ROOT2}
520
- Set the MAXY_PLATFORM_ROOT environment variable to the absolute path of the platform directory.`
521
- );
522
- }
523
- DEFAULT_REQUIRE_REVIEW = [
524
- "email-send",
525
- "email-reply",
526
- "message",
527
- // telegram
528
- "contact-erase"
529
- // GDPR — only gates confirm:true calls (hook handles this)
530
- ];
531
- _stubDirsLoggedThisBoot = /* @__PURE__ */ new Set();
532
- }
533
- });
534
405
 
535
406
  // server/loop-registry.ts
536
407
  import { readFileSync as readFileSync4 } from "fs";
408
+ var TAG = "[loop-registry]";
409
+ var STALL_INTERVALS = 3;
410
+ var entries = /* @__PURE__ */ new Map();
411
+ var defaultCpuIo = {
412
+ ownCpuUs: () => {
413
+ const u = process.cpuUsage();
414
+ return u.user + u.system;
415
+ },
416
+ childCpuUs: (pid) => readPidCpuUs(pid)
417
+ };
418
+ var cpuIo = defaultCpuIo;
537
419
  function parsePidStatCpuUs(raw) {
538
420
  const close = raw.lastIndexOf(")");
539
421
  if (close === -1) return null;
@@ -578,6 +460,7 @@ function sampleCpu(nowMs = Date.now()) {
578
460
  e.prior = { cpuUs: totalUs, atMs: nowMs };
579
461
  }
580
462
  }
463
+ var processPrior = null;
581
464
  function sampleProcessCpu(nowMs = Date.now()) {
582
465
  const cpuUs = cpuIo.ownCpuUs();
583
466
  let processPct = null;
@@ -743,30 +626,14 @@ function listLoops(nowMs = Date.now()) {
743
626
  function armedCount() {
744
627
  return entries.size;
745
628
  }
746
- var TAG, STALL_INTERVALS, entries, defaultCpuIo, cpuIo, processPrior;
747
- var init_loop_registry = __esm({
748
- "server/loop-registry.ts"() {
749
- "use strict";
750
- TAG = "[loop-registry]";
751
- STALL_INTERVALS = 3;
752
- entries = /* @__PURE__ */ new Map();
753
- defaultCpuIo = {
754
- ownCpuUs: () => {
755
- const u = process.cpuUsage();
756
- return u.user + u.system;
757
- },
758
- childCpuUs: (pid) => readPidCpuUs(pid)
759
- };
760
- cpuIo = defaultCpuIo;
761
- processPrior = null;
762
- }
763
- });
764
629
 
765
630
  // app/lib/neo4j-store.ts
766
631
  import neo4j from "neo4j-driver";
767
632
  import { randomUUID } from "crypto";
768
633
  import { readFileSync as readFileSync5, readdirSync as readdirSync2, existsSync as existsSync4, openSync, readSync, closeSync, statSync as statSync2 } from "fs";
769
634
  import { resolve as resolve3 } from "path";
635
+ var PLATFORM_ROOT3 = process.env.MAXY_PLATFORM_ROOT ?? resolve3(process.cwd(), "..");
636
+ var driver = null;
770
637
  function readPassword() {
771
638
  if (process.env.NEO4J_PASSWORD) return process.env.NEO4J_PASSWORD;
772
639
  const passwordFile = resolve3(PLATFORM_ROOT3, "config/.neo4j-password");
@@ -799,19 +666,43 @@ function getSession() {
799
666
  return getDriver().session();
800
667
  }
801
668
  async function runAdminUserSelfHeal(args) {
802
- const { selfHealAdminUser } = await import("./adminuser-self-heal-Y4U3UNKF.js");
669
+ const { selfHealAdminUser } = await import("./adminuser-self-heal-ZHFNDKJK.js");
803
670
  return selfHealAdminUser({ driver: getDriver(), ...args });
804
671
  }
805
672
  async function runUserProfileReconcile() {
806
- const { reconcileUserProfiles } = await import("./userprofile-reconcile-PUA657YX.js");
673
+ const { reconcileUserProfiles } = await import("./userprofile-reconcile-TL4JKBPG.js");
807
674
  return reconcileUserProfiles({ driver: getDriver() });
808
675
  }
676
+ process.on("SIGINT", async () => {
677
+ if (driver) {
678
+ await driver.close();
679
+ driver = null;
680
+ }
681
+ });
682
+ var OLLAMA_URL = process.env.OLLAMA_URL ?? "http://localhost:11434";
683
+ var EMBED_MODEL = process.env.EMBED_MODEL ?? "nomic-embed-text";
809
684
  function envInt(name, def) {
810
685
  const raw = process.env[name];
811
686
  if (raw === void 0 || raw === "") return def;
812
687
  const n = Number(raw);
813
688
  return Number.isFinite(n) ? n : def;
814
689
  }
690
+ var EMBED_MODEL_CONTEXT_TOKENS = Math.max(1, Math.floor(envInt("EMBED_MODEL_CONTEXT_TOKENS", 2048)));
691
+ var EMBED_CONTEXT_MARGIN_TOKENS = 48;
692
+ var EMBED_WORST_CASE_CHARS_PER_TOKEN = 2;
693
+ var EMBED_INPUT_MAX_CHARS = Math.max(
694
+ 1,
695
+ Math.floor(
696
+ envInt(
697
+ "EMBED_INPUT_MAX_CHARS",
698
+ (EMBED_MODEL_CONTEXT_TOKENS - EMBED_CONTEXT_MARGIN_TOKENS) * EMBED_WORST_CASE_CHARS_PER_TOKEN
699
+ )
700
+ )
701
+ );
702
+ var EMBED_KEEP_ALIVE_RAW = process.env.EMBED_KEEP_ALIVE === void 0 || process.env.EMBED_KEEP_ALIVE === "" ? "-1" : process.env.EMBED_KEEP_ALIVE;
703
+ var EMBED_KEEP_ALIVE = /^-?\d+$/.test(EMBED_KEEP_ALIVE_RAW) ? Number(EMBED_KEEP_ALIVE_RAW) : EMBED_KEEP_ALIVE_RAW;
704
+ var EMBED_INTERACTIVE_TIMEOUT_MS = 5e3;
705
+ var EMBED_PRELOAD_TIMEOUT_MS = 6e4;
815
706
  async function embed(text, timeoutMs = EMBED_INTERACTIVE_TIMEOUT_MS) {
816
707
  const input = text.length > EMBED_INPUT_MAX_CHARS ? text.slice(0, EMBED_INPUT_MAX_CHARS) : text;
817
708
  const startedAt = Date.now();
@@ -871,6 +762,7 @@ async function embedForWrite(text) {
871
762
  return [];
872
763
  }
873
764
  }
765
+ var sessionStoreRef = null;
874
766
  function getCachedSessionId(cacheKey) {
875
767
  return sessionStoreRef?.get(cacheKey)?.sessionId;
876
768
  }
@@ -880,6 +772,7 @@ function cacheSessionId(cacheKey, sessionId) {
880
772
  session.sessionId = sessionId;
881
773
  }
882
774
  }
775
+ var GREETING_DIRECTIVE = "[New session. Greet the visitor.]";
883
776
  async function ensureConversation(accountId, agentType, cacheKey, visitorId, agentSlug, userId, channelOverride, channelAddressOverride) {
884
777
  const cached = getCachedSessionId(cacheKey);
885
778
  if (cached) return { sessionId: cached, created: false };
@@ -1058,6 +951,7 @@ async function createNewAdminConversation(userId, accountId, cacheKey, preMinted
1058
951
  await session.close();
1059
952
  }
1060
953
  }
954
+ var HEX_COLOR_RE = /^#[0-9a-fA-F]{3,8}$/;
1061
955
  async function fetchBranding(accountId) {
1062
956
  const session = getSession();
1063
957
  try {
@@ -1124,6 +1018,8 @@ async function fetchAccountName(accountId) {
1124
1018
  await session.close();
1125
1019
  }
1126
1020
  }
1021
+ var SUMMARY_MAX_LEN = 200;
1022
+ var persistMessageLocks = /* @__PURE__ */ new Map();
1127
1023
  async function persistMessage(sessionId, role, content, accountId, tokens, createdAt, sender, components, attachments) {
1128
1024
  if (!content) return null;
1129
1025
  const messageId = randomUUID();
@@ -1591,6 +1487,10 @@ async function renameConversation(sessionId, label) {
1591
1487
  await session.close();
1592
1488
  }
1593
1489
  }
1490
+ var DECAY_THRESHOLD_DAYS = 14;
1491
+ var DECAY_RATE_PER_DAY = 0.05;
1492
+ var INJECTION_THRESHOLD = 0.4;
1493
+ var MAX_SUMMARY_PREFERENCES = 30;
1594
1494
  async function getUserTimezone(accountId, userId) {
1595
1495
  const session = getSession();
1596
1496
  try {
@@ -1766,6 +1666,60 @@ async function writeAdminUserAndPerson(params) {
1766
1666
  await session.close();
1767
1667
  }
1768
1668
  }
1669
+ var PROFILE_CATEGORIES = [
1670
+ "communication",
1671
+ "scheduling",
1672
+ "decision",
1673
+ "workflow",
1674
+ "content",
1675
+ "interaction"
1676
+ ];
1677
+ var PROFILE_FIELD_TEMPLATES = {
1678
+ communication: [
1679
+ "preferredChannel",
1680
+ "quietHours",
1681
+ "responseLatencyExpectation",
1682
+ "formalityLevel",
1683
+ "escalationPath"
1684
+ ],
1685
+ scheduling: [
1686
+ "workdayStartTime",
1687
+ "workdayEndTime",
1688
+ "weekendAvailability",
1689
+ "meetingBlockPreference",
1690
+ "focusBlockTiming"
1691
+ ],
1692
+ decision: [
1693
+ "riskTolerance",
1694
+ "autonomyBoundary",
1695
+ "evidenceThreshold",
1696
+ "reversibilityPreference",
1697
+ "stakeholderConsultation"
1698
+ ],
1699
+ workflow: [
1700
+ "batchingPreference",
1701
+ "taskGranularity",
1702
+ "deepWorkBlocks",
1703
+ "statusUpdateCadence",
1704
+ "toolingChoices"
1705
+ ],
1706
+ content: [
1707
+ "outputFormat",
1708
+ "lengthPreference",
1709
+ "citationStyle",
1710
+ "tonality"
1711
+ ],
1712
+ interaction: [
1713
+ "addressForm",
1714
+ "humourTolerance",
1715
+ "directnessLevel",
1716
+ "emotionalRegisterPreference"
1717
+ ]
1718
+ };
1719
+ var TOTAL_PROFILE_FIELDS = Object.values(PROFILE_FIELD_TEMPLATES).reduce(
1720
+ (n, fs) => n + fs.length,
1721
+ 0
1722
+ );
1769
1723
  function computeAbsentFields(preferences, extraTemplates = {}) {
1770
1724
  const covered = /* @__PURE__ */ new Set();
1771
1725
  for (const pref of preferences) {
@@ -1846,6 +1800,7 @@ function loadEnabledPluginProfileKeys(accountId) {
1846
1800
  for (const [cat, set] of Object.entries(merged)) out[cat] = [...set];
1847
1801
  return out;
1848
1802
  }
1803
+ var sparseStateLogged = /* @__PURE__ */ new Set();
1849
1804
  async function loadUserProfile(accountId, userId, sessionId) {
1850
1805
  console.error(
1851
1806
  `[profile] loadUserProfile entry accountId=${accountId.slice(0, 8)}\u2026 userId=${userId} sessionId=${sessionId ? `${sessionId.slice(0, 8)}\u2026` : "<none>"}`
@@ -2039,6 +1994,19 @@ function composeOperatorSummary(profile, preferences) {
2039
1994
  }
2040
1995
  return facts.length > 0 ? facts.join("; ") : "NOTHING";
2041
1996
  }
1997
+ var RECENT_FAILURES_TAIL_BYTES = 10 * 1024;
1998
+ var AGENT_FILE_ROLES = [
1999
+ { filename: "IDENTITY.md", role: "identity" },
2000
+ { filename: "SOUL.md", role: "soul" },
2001
+ { filename: "KNOWLEDGE.md", role: "knowledge" },
2002
+ { filename: "KNOWLEDGE-SUMMARY.md", role: "knowledge-summary" }
2003
+ ];
2004
+ var ROLE_TO_EDGE = {
2005
+ identity: "HAS_IDENTITY",
2006
+ soul: "HAS_SOUL",
2007
+ knowledge: "HAS_KNOWLEDGE",
2008
+ "knowledge-summary": "HAS_KNOWLEDGE"
2009
+ };
2042
2010
  function assertSafeAgentSlug(slug) {
2043
2011
  if (!slug || slug.includes("/") || slug.includes("\\") || slug.includes("..")) {
2044
2012
  throw new Error(`[agent-graph] refusing unsafe slug=${JSON.stringify(slug)}`);
@@ -2194,115 +2162,6 @@ async function deleteAgentProjection(accountId, slug) {
2194
2162
  await session.close();
2195
2163
  }
2196
2164
  }
2197
- var PLATFORM_ROOT3, driver, OLLAMA_URL, EMBED_MODEL, EMBED_MODEL_CONTEXT_TOKENS, EMBED_CONTEXT_MARGIN_TOKENS, EMBED_WORST_CASE_CHARS_PER_TOKEN, EMBED_INPUT_MAX_CHARS, EMBED_KEEP_ALIVE_RAW, EMBED_KEEP_ALIVE, EMBED_INTERACTIVE_TIMEOUT_MS, EMBED_PRELOAD_TIMEOUT_MS, sessionStoreRef, GREETING_DIRECTIVE, HEX_COLOR_RE, SUMMARY_MAX_LEN, persistMessageLocks, DECAY_THRESHOLD_DAYS, DECAY_RATE_PER_DAY, INJECTION_THRESHOLD, MAX_SUMMARY_PREFERENCES, PROFILE_CATEGORIES, PROFILE_FIELD_TEMPLATES, TOTAL_PROFILE_FIELDS, sparseStateLogged, RECENT_FAILURES_TAIL_BYTES, AGENT_FILE_ROLES, ROLE_TO_EDGE;
2198
- var init_neo4j_store = __esm({
2199
- "app/lib/neo4j-store.ts"() {
2200
- "use strict";
2201
- PLATFORM_ROOT3 = process.env.MAXY_PLATFORM_ROOT ?? resolve3(process.cwd(), "..");
2202
- driver = null;
2203
- process.on("SIGINT", async () => {
2204
- if (driver) {
2205
- await driver.close();
2206
- driver = null;
2207
- }
2208
- });
2209
- OLLAMA_URL = process.env.OLLAMA_URL ?? "http://localhost:11434";
2210
- EMBED_MODEL = process.env.EMBED_MODEL ?? "nomic-embed-text";
2211
- EMBED_MODEL_CONTEXT_TOKENS = Math.max(1, Math.floor(envInt("EMBED_MODEL_CONTEXT_TOKENS", 2048)));
2212
- EMBED_CONTEXT_MARGIN_TOKENS = 48;
2213
- EMBED_WORST_CASE_CHARS_PER_TOKEN = 2;
2214
- EMBED_INPUT_MAX_CHARS = Math.max(
2215
- 1,
2216
- Math.floor(
2217
- envInt(
2218
- "EMBED_INPUT_MAX_CHARS",
2219
- (EMBED_MODEL_CONTEXT_TOKENS - EMBED_CONTEXT_MARGIN_TOKENS) * EMBED_WORST_CASE_CHARS_PER_TOKEN
2220
- )
2221
- )
2222
- );
2223
- EMBED_KEEP_ALIVE_RAW = process.env.EMBED_KEEP_ALIVE === void 0 || process.env.EMBED_KEEP_ALIVE === "" ? "-1" : process.env.EMBED_KEEP_ALIVE;
2224
- EMBED_KEEP_ALIVE = /^-?\d+$/.test(EMBED_KEEP_ALIVE_RAW) ? Number(EMBED_KEEP_ALIVE_RAW) : EMBED_KEEP_ALIVE_RAW;
2225
- EMBED_INTERACTIVE_TIMEOUT_MS = 5e3;
2226
- EMBED_PRELOAD_TIMEOUT_MS = 6e4;
2227
- sessionStoreRef = null;
2228
- GREETING_DIRECTIVE = "[New session. Greet the visitor.]";
2229
- HEX_COLOR_RE = /^#[0-9a-fA-F]{3,8}$/;
2230
- SUMMARY_MAX_LEN = 200;
2231
- persistMessageLocks = /* @__PURE__ */ new Map();
2232
- DECAY_THRESHOLD_DAYS = 14;
2233
- DECAY_RATE_PER_DAY = 0.05;
2234
- INJECTION_THRESHOLD = 0.4;
2235
- MAX_SUMMARY_PREFERENCES = 30;
2236
- PROFILE_CATEGORIES = [
2237
- "communication",
2238
- "scheduling",
2239
- "decision",
2240
- "workflow",
2241
- "content",
2242
- "interaction"
2243
- ];
2244
- PROFILE_FIELD_TEMPLATES = {
2245
- communication: [
2246
- "preferredChannel",
2247
- "quietHours",
2248
- "responseLatencyExpectation",
2249
- "formalityLevel",
2250
- "escalationPath"
2251
- ],
2252
- scheduling: [
2253
- "workdayStartTime",
2254
- "workdayEndTime",
2255
- "weekendAvailability",
2256
- "meetingBlockPreference",
2257
- "focusBlockTiming"
2258
- ],
2259
- decision: [
2260
- "riskTolerance",
2261
- "autonomyBoundary",
2262
- "evidenceThreshold",
2263
- "reversibilityPreference",
2264
- "stakeholderConsultation"
2265
- ],
2266
- workflow: [
2267
- "batchingPreference",
2268
- "taskGranularity",
2269
- "deepWorkBlocks",
2270
- "statusUpdateCadence",
2271
- "toolingChoices"
2272
- ],
2273
- content: [
2274
- "outputFormat",
2275
- "lengthPreference",
2276
- "citationStyle",
2277
- "tonality"
2278
- ],
2279
- interaction: [
2280
- "addressForm",
2281
- "humourTolerance",
2282
- "directnessLevel",
2283
- "emotionalRegisterPreference"
2284
- ]
2285
- };
2286
- TOTAL_PROFILE_FIELDS = Object.values(PROFILE_FIELD_TEMPLATES).reduce(
2287
- (n, fs) => n + fs.length,
2288
- 0
2289
- );
2290
- sparseStateLogged = /* @__PURE__ */ new Set();
2291
- RECENT_FAILURES_TAIL_BYTES = 10 * 1024;
2292
- AGENT_FILE_ROLES = [
2293
- { filename: "IDENTITY.md", role: "identity" },
2294
- { filename: "SOUL.md", role: "soul" },
2295
- { filename: "KNOWLEDGE.md", role: "knowledge" },
2296
- { filename: "KNOWLEDGE-SUMMARY.md", role: "knowledge-summary" }
2297
- ];
2298
- ROLE_TO_EDGE = {
2299
- identity: "HAS_IDENTITY",
2300
- soul: "HAS_SOUL",
2301
- knowledge: "HAS_KNOWLEDGE",
2302
- "knowledge-summary": "HAS_KNOWLEDGE"
2303
- };
2304
- }
2305
- });
2306
2165
 
2307
2166
  export {
2308
2167
  MAXY_DIR,
@@ -2324,11 +2183,8 @@ export {
2324
2183
  INSTALL_OWNER_FILE,
2325
2184
  VISITOR_TOKEN_SECRET_FILE,
2326
2185
  CLAUDE_CREDENTIALS_FILE,
2327
- paths_exports,
2328
- init_paths,
2329
2186
  SYSTEM_PATH_SLUGS,
2330
2187
  AGENT_SLUG_PATTERN,
2331
- init_src,
2332
2188
  PLATFORM_ROOT2 as PLATFORM_ROOT,
2333
2189
  ACCOUNTS_DIR,
2334
2190
  listValidAccounts,
@@ -2340,14 +2196,11 @@ export {
2340
2196
  resolveAgentConfig,
2341
2197
  isActiveAgentSlug,
2342
2198
  getDefaultAccountId,
2343
- account_exports,
2344
- init_account,
2345
2199
  sampleCpu,
2346
2200
  sampleProcessCpu,
2347
2201
  registerLoop,
2348
2202
  listLoops,
2349
2203
  armedCount,
2350
- init_loop_registry,
2351
2204
  getSession,
2352
2205
  runAdminUserSelfHeal,
2353
2206
  runUserProfileReconcile,
@@ -2378,6 +2231,5 @@ export {
2378
2231
  writeAdminUserAndPerson,
2379
2232
  loadUserProfile,
2380
2233
  projectAgent,
2381
- deleteAgentProjection,
2382
- init_neo4j_store
2234
+ deleteAgentProjection
2383
2235
  };