@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.
- package/package.json +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +13 -1
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +9 -0
- package/payload/platform/plugins/docs/references/telegram-guide.md +12 -0
- package/payload/platform/plugins/telegram/PLUGIN.md +4 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.js +75 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js +13 -4
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js +34 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.js +93 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.js +76 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js +19 -1
- package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts +4 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.d.ts +15 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.js +78 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts +21 -2
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js +24 -3
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.d.ts +44 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.js +88 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.js +7 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.d.ts +23 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.js +43 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.js.map +1 -0
- package/payload/platform/plugins/telegram/skills/build/SKILL.md +10 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.js +15 -1
- package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/{adminuser-self-heal-Y4U3UNKF.js → adminuser-self-heal-ZHFNDKJK.js} +2 -10
- package/payload/server/{chunk-637C2FGE.js → chunk-BFRB2U75.js} +3278 -3381
- package/payload/server/{chunk-6DQCFP2E.js → chunk-BTXRBXMU.js} +3785 -4090
- package/payload/server/{chunk-KVR2FT6O.js → chunk-HYQNUVGO.js} +1 -12
- package/payload/server/{chunk-PGGGWUBM.js → chunk-SKYZG6OT.js} +224 -372
- package/payload/server/{manager-R3XH3BNM.js → manager-CTVTF4YB.js} +3 -3
- package/payload/server/maxy-edge.js +4 -27
- package/payload/server/public/assets/{AdminLoginScreens-Dxv5t1YY.js → AdminLoginScreens-B1lu4-_F.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-B1lu4-_F.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-B1lu4-_F.js.gz +0 -0
- package/payload/server/public/assets/{admin-DapcMKCG.js → admin-CkASgYA7.js} +1 -1
- package/payload/server/public/assets/admin-CkASgYA7.js.br +0 -0
- package/payload/server/public/assets/admin-CkASgYA7.js.gz +0 -0
- package/payload/server/public/assets/chat-CKyMT5Ai.js +1 -0
- package/payload/server/public/assets/chat-CKyMT5Ai.js.br +1 -0
- package/payload/server/public/assets/chat-CKyMT5Ai.js.gz +0 -0
- package/payload/server/public/assets/data-1c33cAHp.js +1 -0
- package/payload/server/public/assets/data-1c33cAHp.js.br +2 -0
- package/payload/server/public/assets/data-1c33cAHp.js.gz +0 -0
- package/payload/server/public/assets/{operator-BOiL8sxx.js → operator-DRn9LITC.js} +1 -1
- package/payload/server/public/assets/operator-DRn9LITC.js.br +0 -0
- package/payload/server/public/assets/operator-DRn9LITC.js.gz +0 -0
- package/payload/server/public/assets/{page-CZ6tyH8t.js → page-BwqQsoU8.js} +1 -1
- package/payload/server/public/assets/page-BwqQsoU8.js.br +0 -0
- package/payload/server/public/assets/page-BwqQsoU8.js.gz +0 -0
- package/payload/server/public/assets/{page-Cd36Y0h6.js → page-D_9mPS6W.js} +1 -1
- package/payload/server/public/assets/page-D_9mPS6W.js.br +0 -0
- package/payload/server/public/assets/page-D_9mPS6W.js.gz +0 -0
- package/payload/server/public/assets/{public-CVBav4FQ.js → public-CrjZYpdW.js} +1 -1
- package/payload/server/public/assets/public-CrjZYpdW.js.br +0 -0
- package/payload/server/public/assets/public-CrjZYpdW.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js +2 -0
- package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js.gz +0 -0
- package/payload/server/public/chat.html +3 -3
- package/payload/server/public/data.html +3 -3
- package/payload/server/public/index.html +4 -4
- package/payload/server/public/operator.html +4 -4
- package/payload/server/public/public.html +3 -3
- package/payload/server/server.js +9945 -10153
- package/payload/server/{src-IJCLNFYU.js → src-MM64CYYZ.js} +1 -1
- package/payload/server/{userprofile-reconcile-PUA657YX.js → userprofile-reconcile-TL4JKBPG.js} +1 -8
- package/payload/server/public/assets/AdminLoginScreens-Dxv5t1YY.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-Dxv5t1YY.js.gz +0 -0
- package/payload/server/public/assets/admin-DapcMKCG.js.br +0 -0
- package/payload/server/public/assets/admin-DapcMKCG.js.gz +0 -0
- package/payload/server/public/assets/chat-DLmikhie.js +0 -1
- package/payload/server/public/assets/chat-DLmikhie.js.br +0 -1
- package/payload/server/public/assets/chat-DLmikhie.js.gz +0 -0
- package/payload/server/public/assets/data-C1_m9Xyf.js +0 -1
- package/payload/server/public/assets/data-C1_m9Xyf.js.br +0 -0
- package/payload/server/public/assets/data-C1_m9Xyf.js.gz +0 -0
- package/payload/server/public/assets/operator-BOiL8sxx.js.br +0 -0
- package/payload/server/public/assets/operator-BOiL8sxx.js.gz +0 -0
- package/payload/server/public/assets/page-CZ6tyH8t.js.br +0 -0
- package/payload/server/public/assets/page-CZ6tyH8t.js.gz +0 -0
- package/payload/server/public/assets/page-Cd36Y0h6.js.br +0 -0
- package/payload/server/public/assets/page-Cd36Y0h6.js.gz +0 -0
- package/payload/server/public/assets/public-CVBav4FQ.js.br +0 -0
- package/payload/server/public/assets/public-CVBav4FQ.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js +0 -2
- package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js.br +0 -0
- 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
|
|
40
|
-
var
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
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-
|
|
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-
|
|
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
|
};
|