@yan162/changewayguard 6.8.25

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 (285) hide show
  1. package/LICENSE +21 -0
  2. package/OpenClaw-linux_Mac-Guide-zh.md +89 -0
  3. package/dashboard-dist/api/122.index.js +95 -0
  4. package/dashboard-dist/api/122.index.js.map +1 -0
  5. package/dashboard-dist/api/143.index.js +2734 -0
  6. package/dashboard-dist/api/143.index.js.map +1 -0
  7. package/dashboard-dist/api/154.index.js +4151 -0
  8. package/dashboard-dist/api/154.index.js.map +1 -0
  9. package/dashboard-dist/api/173.index.js +24112 -0
  10. package/dashboard-dist/api/173.index.js.map +1 -0
  11. package/dashboard-dist/api/217.index.js +44 -0
  12. package/dashboard-dist/api/217.index.js.map +1 -0
  13. package/dashboard-dist/api/222.index.js +90 -0
  14. package/dashboard-dist/api/222.index.js.map +1 -0
  15. package/dashboard-dist/api/280.index.js +213 -0
  16. package/dashboard-dist/api/280.index.js.map +1 -0
  17. package/dashboard-dist/api/369.index.js +115 -0
  18. package/dashboard-dist/api/369.index.js.map +1 -0
  19. package/dashboard-dist/api/374.index.js +1896 -0
  20. package/dashboard-dist/api/374.index.js.map +1 -0
  21. package/dashboard-dist/api/424.index.js +135 -0
  22. package/dashboard-dist/api/424.index.js.map +1 -0
  23. package/dashboard-dist/api/445.index.js +3562 -0
  24. package/dashboard-dist/api/445.index.js.map +1 -0
  25. package/dashboard-dist/api/555.index.js +496 -0
  26. package/dashboard-dist/api/555.index.js.map +1 -0
  27. package/dashboard-dist/api/573.index.js +806 -0
  28. package/dashboard-dist/api/573.index.js.map +1 -0
  29. package/dashboard-dist/api/580.index.js +1420 -0
  30. package/dashboard-dist/api/580.index.js.map +1 -0
  31. package/dashboard-dist/api/581.index.js +67 -0
  32. package/dashboard-dist/api/581.index.js.map +1 -0
  33. package/dashboard-dist/api/598.index.js +328 -0
  34. package/dashboard-dist/api/598.index.js.map +1 -0
  35. package/dashboard-dist/api/720.index.js +105 -0
  36. package/dashboard-dist/api/720.index.js.map +1 -0
  37. package/dashboard-dist/api/744.index.js +333 -0
  38. package/dashboard-dist/api/744.index.js.map +1 -0
  39. package/dashboard-dist/api/818.index.js +374 -0
  40. package/dashboard-dist/api/818.index.js.map +1 -0
  41. package/dashboard-dist/api/831.index.js +99 -0
  42. package/dashboard-dist/api/831.index.js.map +1 -0
  43. package/dashboard-dist/api/84.index.js +64 -0
  44. package/dashboard-dist/api/84.index.js.map +1 -0
  45. package/dashboard-dist/api/900.index.js +81 -0
  46. package/dashboard-dist/api/900.index.js.map +1 -0
  47. package/dashboard-dist/api/917.index.js +88 -0
  48. package/dashboard-dist/api/917.index.js.map +1 -0
  49. package/dashboard-dist/api/927.index.js +4250 -0
  50. package/dashboard-dist/api/927.index.js.map +1 -0
  51. package/dashboard-dist/api/948.index.js +64 -0
  52. package/dashboard-dist/api/948.index.js.map +1 -0
  53. package/dashboard-dist/api/982.index.js +67 -0
  54. package/dashboard-dist/api/982.index.js.map +1 -0
  55. package/dashboard-dist/api/99.index.js +1176 -0
  56. package/dashboard-dist/api/99.index.js.map +1 -0
  57. package/dashboard-dist/api/drizzle/sqlite/0000_short_captain_stacy.sql +70 -0
  58. package/dashboard-dist/api/drizzle/sqlite/0001_closed_magus.sql +10 -0
  59. package/dashboard-dist/api/drizzle/sqlite/0002_agent_capability_observation.sql +38 -0
  60. package/dashboard-dist/api/drizzle/sqlite/0003_auth_magic_link.sql +28 -0
  61. package/dashboard-dist/api/drizzle/sqlite/0004_static_scan_fields.sql +8 -0
  62. package/dashboard-dist/api/drizzle/sqlite/0005_gateway_activity.sql +24 -0
  63. package/dashboard-dist/api/drizzle/sqlite/0006_sour_marauders.sql +41 -0
  64. package/dashboard-dist/api/drizzle/sqlite/meta/0000_snapshot.json +460 -0
  65. package/dashboard-dist/api/drizzle/sqlite/meta/0001_snapshot.json +536 -0
  66. package/dashboard-dist/api/drizzle/sqlite/meta/0006_snapshot.json +1249 -0
  67. package/dashboard-dist/api/drizzle/sqlite/meta/_journal.json +55 -0
  68. package/dashboard-dist/api/index.js +28482 -0
  69. package/dashboard-dist/api/index.js.map +1 -0
  70. package/dashboard-dist/api/package.json +16 -0
  71. package/dashboard-dist/api/sourcemap-register.cjs +1 -0
  72. package/dashboard-dist/web/assets/index-BKUfzbIg.js +148 -0
  73. package/dashboard-dist/web/assets/index-rHRH99IQ.css +1 -0
  74. package/dashboard-dist/web/changeway-logo.png +0 -0
  75. package/dashboard-dist/web/favicon.svg +29 -0
  76. package/dashboard-dist/web/index.html +15 -0
  77. package/dashboard-dist/web/logo.svg +16 -0
  78. package/dist/agent/activation.d.ts +21 -0
  79. package/dist/agent/activation.d.ts.map +1 -0
  80. package/dist/agent/activation.js +94 -0
  81. package/dist/agent/activation.js.map +1 -0
  82. package/dist/agent/auth.d.ts +73 -0
  83. package/dist/agent/auth.d.ts.map +1 -0
  84. package/dist/agent/auth.js +363 -0
  85. package/dist/agent/auth.js.map +1 -0
  86. package/dist/agent/behavior-detector.d.ts +150 -0
  87. package/dist/agent/behavior-detector.d.ts.map +1 -0
  88. package/dist/agent/behavior-detector.js +559 -0
  89. package/dist/agent/behavior-detector.js.map +1 -0
  90. package/dist/agent/business-reporter.d.ts +114 -0
  91. package/dist/agent/business-reporter.d.ts.map +1 -0
  92. package/dist/agent/business-reporter.js +359 -0
  93. package/dist/agent/business-reporter.js.map +1 -0
  94. package/dist/agent/config-sync.d.ts +70 -0
  95. package/dist/agent/config-sync.d.ts.map +1 -0
  96. package/dist/agent/config-sync.js +133 -0
  97. package/dist/agent/config-sync.js.map +1 -0
  98. package/dist/agent/config.d.ts +98 -0
  99. package/dist/agent/config.d.ts.map +1 -0
  100. package/dist/agent/config.js +348 -0
  101. package/dist/agent/config.js.map +1 -0
  102. package/dist/agent/content-injection-scanner.d.ts +35 -0
  103. package/dist/agent/content-injection-scanner.d.ts.map +1 -0
  104. package/dist/agent/content-injection-scanner.js +270 -0
  105. package/dist/agent/content-injection-scanner.js.map +1 -0
  106. package/dist/agent/engine-log-writer.d.ts +6 -0
  107. package/dist/agent/engine-log-writer.d.ts.map +1 -0
  108. package/dist/agent/engine-log-writer.js +18 -0
  109. package/dist/agent/engine-log-writer.js.map +1 -0
  110. package/dist/agent/env.d.ts +19 -0
  111. package/dist/agent/env.d.ts.map +1 -0
  112. package/dist/agent/env.js +44 -0
  113. package/dist/agent/env.js.map +1 -0
  114. package/dist/agent/event-reporter.d.ts +87 -0
  115. package/dist/agent/event-reporter.d.ts.map +1 -0
  116. package/dist/agent/event-reporter.js +306 -0
  117. package/dist/agent/event-reporter.js.map +1 -0
  118. package/dist/agent/file-watcher.d.ts +50 -0
  119. package/dist/agent/file-watcher.d.ts.map +1 -0
  120. package/dist/agent/file-watcher.js +135 -0
  121. package/dist/agent/file-watcher.js.map +1 -0
  122. package/dist/agent/fs-utils.d.ts +22 -0
  123. package/dist/agent/fs-utils.d.ts.map +1 -0
  124. package/dist/agent/fs-utils.js +41 -0
  125. package/dist/agent/fs-utils.js.map +1 -0
  126. package/dist/agent/gateway-manager.d.ts +59 -0
  127. package/dist/agent/gateway-manager.d.ts.map +1 -0
  128. package/dist/agent/gateway-manager.js +583 -0
  129. package/dist/agent/gateway-manager.js.map +1 -0
  130. package/dist/agent/hook-types.d.ts +276 -0
  131. package/dist/agent/hook-types.d.ts.map +1 -0
  132. package/dist/agent/hook-types.js +51 -0
  133. package/dist/agent/hook-types.js.map +1 -0
  134. package/dist/agent/http-client.d.ts +19 -0
  135. package/dist/agent/http-client.d.ts.map +1 -0
  136. package/dist/agent/http-client.js +37 -0
  137. package/dist/agent/http-client.js.map +1 -0
  138. package/dist/agent/index.d.ts +8 -0
  139. package/dist/agent/index.d.ts.map +1 -0
  140. package/dist/agent/index.js +8 -0
  141. package/dist/agent/index.js.map +1 -0
  142. package/dist/agent/openclaw-hybrid-audit-changeway.js +1447 -0
  143. package/dist/agent/prompt-gate.d.ts +16 -0
  144. package/dist/agent/prompt-gate.d.ts.map +1 -0
  145. package/dist/agent/prompt-gate.js +58 -0
  146. package/dist/agent/prompt-gate.js.map +1 -0
  147. package/dist/agent/prompt-input.d.ts +9 -0
  148. package/dist/agent/prompt-input.d.ts.map +1 -0
  149. package/dist/agent/prompt-input.js +173 -0
  150. package/dist/agent/prompt-input.js.map +1 -0
  151. package/dist/agent/prompt-output.d.ts +4 -0
  152. package/dist/agent/prompt-output.d.ts.map +1 -0
  153. package/dist/agent/prompt-output.js +19 -0
  154. package/dist/agent/prompt-output.js.map +1 -0
  155. package/dist/agent/runner.d.ts +23 -0
  156. package/dist/agent/runner.d.ts.map +1 -0
  157. package/dist/agent/runner.js +165 -0
  158. package/dist/agent/runner.js.map +1 -0
  159. package/dist/agent/runtime-mode.d.ts +10 -0
  160. package/dist/agent/runtime-mode.d.ts.map +1 -0
  161. package/dist/agent/runtime-mode.js +19 -0
  162. package/dist/agent/runtime-mode.js.map +1 -0
  163. package/dist/agent/sanitizer.d.ts +10 -0
  164. package/dist/agent/sanitizer.d.ts.map +1 -0
  165. package/dist/agent/sanitizer.js +175 -0
  166. package/dist/agent/sanitizer.js.map +1 -0
  167. package/dist/agent/scan-activity.d.ts +19 -0
  168. package/dist/agent/scan-activity.d.ts.map +1 -0
  169. package/dist/agent/scan-activity.js +34 -0
  170. package/dist/agent/scan-activity.js.map +1 -0
  171. package/dist/agent/types.d.ts +177 -0
  172. package/dist/agent/types.d.ts.map +1 -0
  173. package/dist/agent/types.js +5 -0
  174. package/dist/agent/types.js.map +1 -0
  175. package/dist/agent/workspace-scanner.d.ts +35 -0
  176. package/dist/agent/workspace-scanner.d.ts.map +1 -0
  177. package/dist/agent/workspace-scanner.js +137 -0
  178. package/dist/agent/workspace-scanner.js.map +1 -0
  179. package/dist/dashboard-launcher.d.ts +52 -0
  180. package/dist/dashboard-launcher.d.ts.map +1 -0
  181. package/dist/dashboard-launcher.js +363 -0
  182. package/dist/dashboard-launcher.js.map +1 -0
  183. package/dist/gateway/activity.d.ts +52 -0
  184. package/dist/gateway/activity.d.ts.map +1 -0
  185. package/dist/gateway/activity.js +111 -0
  186. package/dist/gateway/activity.js.map +1 -0
  187. package/dist/gateway/config.d.ts +50 -0
  188. package/dist/gateway/config.d.ts.map +1 -0
  189. package/dist/gateway/config.js +200 -0
  190. package/dist/gateway/config.js.map +1 -0
  191. package/dist/gateway/handlers/anthropic.d.ts +12 -0
  192. package/dist/gateway/handlers/anthropic.d.ts.map +1 -0
  193. package/dist/gateway/handlers/anthropic.js +254 -0
  194. package/dist/gateway/handlers/anthropic.js.map +1 -0
  195. package/dist/gateway/handlers/gemini.d.ts +12 -0
  196. package/dist/gateway/handlers/gemini.d.ts.map +1 -0
  197. package/dist/gateway/handlers/gemini.js +101 -0
  198. package/dist/gateway/handlers/gemini.js.map +1 -0
  199. package/dist/gateway/handlers/models.d.ts +4 -0
  200. package/dist/gateway/handlers/models.d.ts.map +1 -0
  201. package/dist/gateway/handlers/models.js +36 -0
  202. package/dist/gateway/handlers/models.js.map +1 -0
  203. package/dist/gateway/handlers/openai.d.ts +16 -0
  204. package/dist/gateway/handlers/openai.d.ts.map +1 -0
  205. package/dist/gateway/handlers/openai.js +254 -0
  206. package/dist/gateway/handlers/openai.js.map +1 -0
  207. package/dist/gateway/index.d.ts +27 -0
  208. package/dist/gateway/index.d.ts.map +1 -0
  209. package/dist/gateway/index.js +290 -0
  210. package/dist/gateway/index.js.map +1 -0
  211. package/dist/gateway/mapping-store.d.ts +38 -0
  212. package/dist/gateway/mapping-store.d.ts.map +1 -0
  213. package/dist/gateway/mapping-store.js +74 -0
  214. package/dist/gateway/mapping-store.js.map +1 -0
  215. package/dist/gateway/restorer.d.ts +63 -0
  216. package/dist/gateway/restorer.d.ts.map +1 -0
  217. package/dist/gateway/restorer.js +284 -0
  218. package/dist/gateway/restorer.js.map +1 -0
  219. package/dist/gateway/sanitizer.d.ts +17 -0
  220. package/dist/gateway/sanitizer.d.ts.map +1 -0
  221. package/dist/gateway/sanitizer.js +228 -0
  222. package/dist/gateway/sanitizer.js.map +1 -0
  223. package/dist/gateway/types.d.ts +53 -0
  224. package/dist/gateway/types.d.ts.map +1 -0
  225. package/dist/gateway/types.js +5 -0
  226. package/dist/gateway/types.js.map +1 -0
  227. package/dist/index.d.ts +19 -0
  228. package/dist/index.d.ts.map +1 -0
  229. package/dist/index.js +2990 -0
  230. package/dist/index.js.map +1 -0
  231. package/dist/memory/index.d.ts +5 -0
  232. package/dist/memory/index.d.ts.map +1 -0
  233. package/dist/memory/index.js +5 -0
  234. package/dist/memory/index.js.map +1 -0
  235. package/dist/memory/store.d.ts +82 -0
  236. package/dist/memory/store.d.ts.map +1 -0
  237. package/dist/memory/store.js +194 -0
  238. package/dist/memory/store.js.map +1 -0
  239. package/dist/platform-client/index.d.ts +63 -0
  240. package/dist/platform-client/index.d.ts.map +1 -0
  241. package/dist/platform-client/index.js +294 -0
  242. package/dist/platform-client/index.js.map +1 -0
  243. package/dist/platform-client/types.d.ts +109 -0
  244. package/dist/platform-client/types.d.ts.map +1 -0
  245. package/dist/platform-client/types.js +3 -0
  246. package/dist/platform-client/types.js.map +1 -0
  247. package/dist/workspace-agents-guide.d.ts +22 -0
  248. package/dist/workspace-agents-guide.d.ts.map +1 -0
  249. package/dist/workspace-agents-guide.js +92 -0
  250. package/dist/workspace-agents-guide.js.map +1 -0
  251. package/dist/workspace-agents-sync.d.ts +24 -0
  252. package/dist/workspace-agents-sync.d.ts.map +1 -0
  253. package/dist/workspace-agents-sync.js +41 -0
  254. package/dist/workspace-agents-sync.js.map +1 -0
  255. package/dist/workspace-agents-watcher.d.ts +23 -0
  256. package/dist/workspace-agents-watcher.d.ts.map +1 -0
  257. package/dist/workspace-agents-watcher.js +152 -0
  258. package/dist/workspace-agents-watcher.js.map +1 -0
  259. package/dist/workspace-discovery.d.ts +11 -0
  260. package/dist/workspace-discovery.d.ts.map +1 -0
  261. package/dist/workspace-discovery.js +116 -0
  262. package/dist/workspace-discovery.js.map +1 -0
  263. package/gateway/package-lock.json +597 -0
  264. package/gateway/package.json +57 -0
  265. package/gateway/pnpm-lock.yaml +342 -0
  266. package/gateway/src/activity.ts +142 -0
  267. package/gateway/src/config.ts +246 -0
  268. package/gateway/src/handlers/anthropic.ts +328 -0
  269. package/gateway/src/handlers/gemini.ts +122 -0
  270. package/gateway/src/handlers/models.ts +45 -0
  271. package/gateway/src/handlers/openai.ts +333 -0
  272. package/gateway/src/index.ts +344 -0
  273. package/gateway/src/mapping-store.ts +88 -0
  274. package/gateway/src/restorer.ts +322 -0
  275. package/gateway/src/sanitizer.ts +298 -0
  276. package/gateway/src/types.ts +73 -0
  277. package/gateway/tsconfig.json +20 -0
  278. package/openclaw.plugin.json +86 -0
  279. package/package.json +74 -0
  280. package/samples/Untitled +1 -0
  281. package/samples/clean-email.txt +20 -0
  282. package/samples/test-document.md +53 -0
  283. package/samples/test-email-popup.txt +44 -0
  284. package/samples/test-email.txt +32 -0
  285. package/samples/test-webpage.html +51 -0
@@ -0,0 +1,363 @@
1
+ import { createHash, createHmac, randomBytes, randomUUID } from "node:crypto";
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { hostname, networkInterfaces } from "node:os";
4
+ import path from "node:path";
5
+ import { machineIdSync } from "node-machine-id";
6
+ import { openclawHome } from "./env.js";
7
+ const FALLBACK_MAC = "00:00:00:00:00:00";
8
+ export const CHANGEWAY_OPEN_PREFIX = "/changeway-open";
9
+ const ACTIVATE_PATH = `${CHANGEWAY_OPEN_PREFIX}/device/activate`;
10
+ const IDENTITY_DIR = path.join(openclawHome, "credentials", "changewayguard");
11
+ const ACTIVATION_KEYS_FILE = path.join(IDENTITY_DIR, "activation-keys.json");
12
+ const DEVICE_IDENTITY_FILE = path.join(IDENTITY_DIR, "device-identity.json");
13
+ let cachedMacAddress = null;
14
+ let cachedHostname = null;
15
+ let cachedDeviceId = null;
16
+ let macNoticeLogged = false;
17
+ function normalizeMacAddress(mac) {
18
+ return mac.toLowerCase();
19
+ }
20
+ export function pickPrimaryMacAddress(interfaces = networkInterfaces()) {
21
+ for (const infos of Object.values(interfaces)) {
22
+ if (!infos)
23
+ continue;
24
+ for (const info of infos) {
25
+ if (info.internal)
26
+ continue;
27
+ if (!info.mac || info.mac === "00:00:00:00:00:00")
28
+ continue;
29
+ return normalizeMacAddress(info.mac);
30
+ }
31
+ }
32
+ return null;
33
+ }
34
+ export function getLocalMacAddress() {
35
+ if (cachedMacAddress)
36
+ return cachedMacAddress;
37
+ cachedMacAddress = pickPrimaryMacAddress() ?? FALLBACK_MAC;
38
+ return cachedMacAddress;
39
+ }
40
+ export function getLocalHostname() {
41
+ if (cachedHostname)
42
+ return cachedHostname;
43
+ cachedHostname = hostname();
44
+ return cachedHostname;
45
+ }
46
+ export function clearCachedMacAddressForTests() {
47
+ cachedMacAddress = null;
48
+ cachedHostname = null;
49
+ cachedDeviceId = null;
50
+ macNoticeLogged = false;
51
+ }
52
+ export function setCachedMacAddressForTests(mac) {
53
+ cachedMacAddress = normalizeMacAddress(mac);
54
+ }
55
+ export function getAuthorizationHeaderValue() {
56
+ return `Bearer ${getLocalMacAddress()}`;
57
+ }
58
+ export function getLocalAgentId() {
59
+ return `mac-${getLocalMacAddress().replace(/:/g, "")}`;
60
+ }
61
+ function getMachineIdSafe() {
62
+ try {
63
+ const id = machineIdSync().trim();
64
+ return id || null;
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ function getCurrentDeviceFingerprint() {
71
+ const mac = getLocalMacAddress();
72
+ return {
73
+ machineId: getMachineIdSafe(),
74
+ mac: mac === FALLBACK_MAC ? null : mac,
75
+ hostname: getLocalHostname() || null,
76
+ };
77
+ }
78
+ function hasActivationKeysOnDisk() {
79
+ return existsSync(ACTIVATION_KEYS_FILE);
80
+ }
81
+ function getLegacyDeviceIdForMigration() {
82
+ return getMachineIdSafe() ?? getLocalAgentId();
83
+ }
84
+ function normalizeStoredDeviceIdentity(raw) {
85
+ if (!raw || typeof raw !== "object")
86
+ return null;
87
+ const record = raw;
88
+ if (typeof record.deviceId !== "string" || !record.deviceId.trim())
89
+ return null;
90
+ if (typeof record.createdAt !== "string" || !record.createdAt.trim())
91
+ return null;
92
+ return {
93
+ version: 1,
94
+ deviceId: record.deviceId.trim(),
95
+ createdAt: record.createdAt,
96
+ machineId: typeof record.machineId === "string" ? record.machineId : null,
97
+ mac: typeof record.mac === "string" ? record.mac.toLowerCase() : null,
98
+ hostname: typeof record.hostname === "string" ? record.hostname : null,
99
+ source: record.source === "legacy" ? "legacy" : "uuid",
100
+ previousDeviceId: typeof record.previousDeviceId === "string" ? record.previousDeviceId : undefined,
101
+ rotationReason: record.rotationReason === "fingerprint_mismatch" ? "fingerprint_mismatch" : undefined,
102
+ rotatedAt: typeof record.rotatedAt === "string" ? record.rotatedAt : undefined,
103
+ };
104
+ }
105
+ function loadStoredDeviceIdentity() {
106
+ try {
107
+ if (!existsSync(DEVICE_IDENTITY_FILE))
108
+ return null;
109
+ const parsed = JSON.parse(readFileSync(DEVICE_IDENTITY_FILE, "utf-8"));
110
+ return normalizeStoredDeviceIdentity(parsed);
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ }
116
+ function persistDeviceIdentity(record) {
117
+ try {
118
+ mkdirSync(IDENTITY_DIR, { recursive: true });
119
+ writeFileSync(DEVICE_IDENTITY_FILE, JSON.stringify(record, null, 2), "utf-8");
120
+ }
121
+ catch {
122
+ // best-effort persistence
123
+ }
124
+ }
125
+ function hasFingerprintMismatch(stored, current) {
126
+ const machineMismatch = !!(stored.machineId &&
127
+ current.machineId &&
128
+ stored.machineId !== current.machineId);
129
+ const macMismatch = !!(stored.mac &&
130
+ current.mac &&
131
+ stored.mac.toLowerCase() !== current.mac.toLowerCase());
132
+ return machineMismatch || macMismatch;
133
+ }
134
+ export function resolveDeviceIdentityState(input) {
135
+ const nowIso = input.nowIso ?? new Date().toISOString();
136
+ const generatedId = input.newDeviceId ?? randomUUID();
137
+ const legacyId = input.legacyDeviceId.trim();
138
+ if (input.stored?.deviceId) {
139
+ if (hasFingerprintMismatch(input.stored, input.current)) {
140
+ return {
141
+ deviceId: generatedId,
142
+ rotated: true,
143
+ record: {
144
+ version: 1,
145
+ deviceId: generatedId,
146
+ createdAt: input.stored.createdAt || nowIso,
147
+ machineId: input.current.machineId,
148
+ mac: input.current.mac,
149
+ hostname: input.current.hostname,
150
+ source: "uuid",
151
+ previousDeviceId: input.stored.deviceId,
152
+ rotationReason: "fingerprint_mismatch",
153
+ rotatedAt: nowIso,
154
+ },
155
+ };
156
+ }
157
+ return {
158
+ deviceId: input.stored.deviceId,
159
+ rotated: false,
160
+ record: {
161
+ ...input.stored,
162
+ version: 1,
163
+ machineId: input.current.machineId,
164
+ mac: input.current.mac,
165
+ hostname: input.current.hostname,
166
+ source: input.stored.source ?? "uuid",
167
+ },
168
+ };
169
+ }
170
+ const shouldUseLegacy = input.hasActivationKeys && !!legacyId;
171
+ const deviceId = shouldUseLegacy ? legacyId : generatedId;
172
+ return {
173
+ deviceId,
174
+ rotated: false,
175
+ record: {
176
+ version: 1,
177
+ deviceId,
178
+ createdAt: nowIso,
179
+ machineId: input.current.machineId,
180
+ mac: input.current.mac,
181
+ hostname: input.current.hostname,
182
+ source: shouldUseLegacy ? "legacy" : "uuid",
183
+ },
184
+ };
185
+ }
186
+ export function getOrCreateDeviceId() {
187
+ if (cachedDeviceId)
188
+ return cachedDeviceId;
189
+ const stored = loadStoredDeviceIdentity();
190
+ const resolved = resolveDeviceIdentityState({
191
+ stored,
192
+ current: getCurrentDeviceFingerprint(),
193
+ hasActivationKeys: hasActivationKeysOnDisk(),
194
+ legacyDeviceId: getLegacyDeviceIdForMigration(),
195
+ });
196
+ persistDeviceIdentity(resolved.record);
197
+ cachedDeviceId = resolved.deviceId;
198
+ return cachedDeviceId;
199
+ }
200
+ export function generateRequestSign(options) {
201
+ const mac = (options.mac ?? getLocalMacAddress()).toLowerCase();
202
+ const host = options.hostname ?? getLocalHostname();
203
+ const signContent = [
204
+ mac,
205
+ host,
206
+ String(options.timestamp),
207
+ options.nonce,
208
+ ].join("\n");
209
+ return createHash("sha256").update(signContent).digest("hex");
210
+ }
211
+ function createNonce(length = 8) {
212
+ let nonce = "";
213
+ while (nonce.length < length) {
214
+ nonce += Math.random().toString(36).slice(2);
215
+ }
216
+ return nonce.slice(0, length);
217
+ }
218
+ function createTraceId() {
219
+ const randomNum = randomBytes(6).readUIntBE(0, 6);
220
+ return `${Date.now()}${String(randomNum).padStart(14, "0")}`;
221
+ }
222
+ function normalizePath(pathValue) {
223
+ return pathValue.startsWith("/") ? pathValue : `/${pathValue}`;
224
+ }
225
+ function isChangewayOpenPath(pathValue) {
226
+ const normalized = normalizePath(pathValue);
227
+ return normalized === CHANGEWAY_OPEN_PREFIX || normalized.startsWith(`${CHANGEWAY_OPEN_PREFIX}/`);
228
+ }
229
+ function isDeviceActivatePath(pathValue) {
230
+ const normalized = normalizePath(pathValue);
231
+ return normalized === ACTIVATE_PATH;
232
+ }
233
+ function getRuntimeDeviceId() {
234
+ return getOrCreateDeviceId();
235
+ }
236
+ function loadActivationKeysFromDisk() {
237
+ try {
238
+ if (!existsSync(ACTIVATION_KEYS_FILE))
239
+ return null;
240
+ const raw = JSON.parse(readFileSync(ACTIVATION_KEYS_FILE, "utf-8"));
241
+ const apiKey = raw.apiKey?.trim() ?? "";
242
+ const apiSecret = raw.apiSecret?.trim() ?? "";
243
+ if (!apiKey || !apiSecret)
244
+ return null;
245
+ return { apiKey, apiSecret };
246
+ }
247
+ catch {
248
+ return null;
249
+ }
250
+ }
251
+ function isAlreadyPrefixed(pathname) {
252
+ return pathname === CHANGEWAY_OPEN_PREFIX || pathname.startsWith(`${CHANGEWAY_OPEN_PREFIX}/`);
253
+ }
254
+ function ensurePrefixedPath(pathname) {
255
+ const normalizedPath = pathname.startsWith("/") ? pathname : `/${pathname}`;
256
+ if (isAlreadyPrefixed(normalizedPath))
257
+ return normalizedPath;
258
+ return `${CHANGEWAY_OPEN_PREFIX}${normalizedPath}`;
259
+ }
260
+ function isLoopbackHost(hostnameValue) {
261
+ const normalized = hostnameValue.toLowerCase();
262
+ return normalized === "localhost" || normalized === "127.0.0.1" || normalized === "::1";
263
+ }
264
+ export function withChangewayOpenPrefix(urlOrPath) {
265
+ try {
266
+ const parsed = new URL(urlOrPath);
267
+ if (isLoopbackHost(parsed.hostname)) {
268
+ return parsed.toString();
269
+ }
270
+ parsed.pathname = ensurePrefixedPath(parsed.pathname);
271
+ return parsed.toString();
272
+ }
273
+ catch {
274
+ try {
275
+ const parsed = new URL(urlOrPath, "http://localhost");
276
+ return `${ensurePrefixedPath(parsed.pathname)}${parsed.search}${parsed.hash}`;
277
+ }
278
+ catch {
279
+ return ensurePrefixedPath(urlOrPath);
280
+ }
281
+ }
282
+ }
283
+ export function extractPathFromUrl(urlOrPath) {
284
+ try {
285
+ return new URL(urlOrPath).pathname;
286
+ }
287
+ catch {
288
+ try {
289
+ return new URL(urlOrPath, "http://localhost").pathname;
290
+ }
291
+ catch {
292
+ return urlOrPath.startsWith("/") ? urlOrPath : `/${urlOrPath}`;
293
+ }
294
+ }
295
+ }
296
+ export function buildSignedAuthHeaders(options) {
297
+ if (isChangewayOpenPath(options.path) && !isDeviceActivatePath(options.path)) {
298
+ const keys = loadActivationKeysFromDisk();
299
+ if (!keys) {
300
+ throw new Error("changewayGuard 鉴权失败:未找到激活密钥,请先执行 /plugin_regist 完成激活。");
301
+ }
302
+ const deviceId = getRuntimeDeviceId();
303
+ const requestDateMs = options.requestDateMs ?? Date.now();
304
+ const traceId = options.traceId?.trim() || createTraceId();
305
+ const message = `${deviceId}|${keys.apiKey}|${requestDateMs}|${traceId}`;
306
+ const signature = createHmac("sha256", keys.apiSecret).update(message, "utf-8").digest("base64");
307
+ const headers = {
308
+ "X-DEVICE-ID": deviceId,
309
+ "X-REQUEST-DATE": String(requestDateMs),
310
+ traceId,
311
+ "X-SIGN": signature,
312
+ };
313
+ if (options.authorization !== null && options.authorization !== undefined) {
314
+ headers.Authorization = options.authorization;
315
+ }
316
+ return headers;
317
+ }
318
+ if (isDeviceActivatePath(options.path)) {
319
+ const headers = {};
320
+ if (options.traceId?.trim()) {
321
+ headers.traceId = options.traceId.trim();
322
+ }
323
+ if (options.authorization !== null && options.authorization !== undefined) {
324
+ headers.Authorization = options.authorization;
325
+ }
326
+ return headers;
327
+ }
328
+ const mac = (options.mac ?? getLocalMacAddress()).toLowerCase();
329
+ const host = options.hostname ?? getLocalHostname();
330
+ const timestamp = options.timestamp ?? Math.floor(Date.now() / 1000);
331
+ const nonce = options.nonce ?? createNonce();
332
+ const sign = generateRequestSign({
333
+ mac,
334
+ hostname: host,
335
+ timestamp,
336
+ nonce,
337
+ method: options.method,
338
+ path: options.path,
339
+ body: options.body,
340
+ });
341
+ const headers = {
342
+ "X-MAC": mac,
343
+ "X-HOSTNAME": host,
344
+ "X-TIMESTAMP": String(timestamp),
345
+ "X-NONCE": nonce,
346
+ "X-SIGN": sign,
347
+ };
348
+ if (options.authorization !== null) {
349
+ headers.Authorization = options.authorization ?? getAuthorizationHeaderValue();
350
+ }
351
+ if (!macNoticeLogged) {
352
+ console.info(`[moltguard] 您的 MAC 地址为${mac},请注意保存。`);
353
+ macNoticeLogged = true;
354
+ }
355
+ return headers;
356
+ }
357
+ export function buildSignedAuthHeadersForUrl(options) {
358
+ return buildSignedAuthHeaders({
359
+ ...options,
360
+ path: extractPathFromUrl(options.url),
361
+ });
362
+ }
363
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../agent/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Behavioral anomaly detector — runs at before_tool_call.
3
+ *
4
+ * Responsibilities:
5
+ * 1. Collect high-risk tool calls (file read, shell, web fetch) and send to Core
6
+ * 2. Record completed tool calls in the chain history
7
+ * 3. Core does all classification, signal computation, and risk decisions
8
+ * 4. Fail-open: if Core is unavailable, allow execution
9
+ */
10
+ import type { CoreCredentials } from "./config.js";
11
+ import type { PromptScanResponse, Logger, DetectionFinding } from "./types.js";
12
+ export declare const FILE_READ_TOOLS: Set<string>;
13
+ export declare const SHELL_TOOLS: Set<string>;
14
+ export declare const WEB_FETCH_TOOLS: Set<string>;
15
+ export type BlockDecision = {
16
+ block: true;
17
+ blockReason: string;
18
+ findings?: DetectionFinding[];
19
+ };
20
+ export type DetectionConfig = {
21
+ coreUrl: string;
22
+ /** Timeout for Core assess call (ms). Capped at ~3s to avoid holding up agent. */
23
+ assessTimeoutMs: number;
24
+ blockOnRisk: boolean;
25
+ pluginVersion: string;
26
+ };
27
+ /** Response from Core content scan API */
28
+ export type ContentScanResult = {
29
+ detected: boolean;
30
+ action?: "allow" | "alert" | "block";
31
+ riskLevel?: "no_risk" | "low" | "medium" | "high" | "critical";
32
+ confidence?: number;
33
+ explanation?: string;
34
+ categories: string[];
35
+ findings: Array<{
36
+ scanner: string;
37
+ name: string;
38
+ matchedText: string;
39
+ confidence: "high" | "medium" | "low";
40
+ }>;
41
+ summary: string;
42
+ latency_ms: number;
43
+ };
44
+ /** Response when quota is exceeded - still a success but no verdict */
45
+ export type QuotaExceededInfo = {
46
+ quotaExceeded: true;
47
+ quotaUsed: number;
48
+ quotaTotal: number;
49
+ /** true = autonomous mode (no email), false = human managed mode (email verified) */
50
+ isAutonomous: boolean;
51
+ resetAt: string | null;
52
+ upgradeUrl: string;
53
+ message: string;
54
+ /** Persuasive message for the agent to convince the user to purchase */
55
+ recommendation: string;
56
+ };
57
+ /** Callback for quota exceeded notification */
58
+ export type OnQuotaExceededCallback = (info: QuotaExceededInfo) => void;
59
+ export declare class BehaviorDetector {
60
+ private sessions;
61
+ private coreCredentials;
62
+ private config;
63
+ private log;
64
+ /** HTTP status codes we've already warned about — avoid log spam */
65
+ private warnedStatuses;
66
+ /** Track if we've already notified about quota exceeded (avoid spam) */
67
+ private quotaExceededNotified;
68
+ /** Callback for quota exceeded notification */
69
+ private onQuotaExceeded;
70
+ /** Pending quota exceeded message to append to next tool result */
71
+ private pendingQuotaMessage;
72
+ /** Callback for secret detection (business reporting) */
73
+ private onSecretDetected;
74
+ private formatEngineLogPayload;
75
+ private logEngineRequest;
76
+ private logEngineResponse;
77
+ private logEngineError;
78
+ constructor(config: DetectionConfig, log: Logger);
79
+ setCredentials(creds: CoreCredentials | null): void;
80
+ /** Set callback for when quota is exceeded */
81
+ setOnQuotaExceeded(callback: OnQuotaExceededCallback | null): void;
82
+ /** Set callback for when secrets are detected in params (business reporting) */
83
+ setOnSecretDetected(callback: ((typeCounts: Record<string, number>) => void) | null): void;
84
+ /** Reset quota exceeded notification flag (e.g., on new day) */
85
+ resetQuotaExceededNotification(): void;
86
+ /** Get and clear pending quota message (for appending to tool results) */
87
+ consumePendingQuotaMessage(): QuotaExceededInfo | null;
88
+ setUserIntent(sessionKey: string, message: string): void;
89
+ clearSession(sessionKey: string): void;
90
+ /**
91
+ * Read-and-clear latest prompt block decision for a session.
92
+ * Used by message_sending to terminate output immediately when user input
93
+ * was classified as block.
94
+ */
95
+ consumePromptBlockDecision(sessionKey: string): PromptScanResponse | null;
96
+ /**
97
+ * Read current prompt block decision without consuming it.
98
+ * Useful when upstream hooks need to render a risk message while preserving
99
+ * the block decision for downstream enforcement.
100
+ */
101
+ getPendingPromptBlockDecision(sessionKey: string): PromptScanResponse | null;
102
+ /**
103
+ * Read current prompt alert decision without consuming it.
104
+ * Alert remains pending until user explicitly confirms.
105
+ */
106
+ getPendingPromptAlertDecision(sessionKey: string): PromptScanResponse | null;
107
+ /**
108
+ * Confirm and clear pending prompt alert for a session.
109
+ */
110
+ confirmPendingPromptAlert(sessionKey: string): PromptScanResponse | null;
111
+ consumeConfirmedPromptReplay(sessionKey: string): string | null;
112
+ /**
113
+ * Called at before_tool_call. Returns a block decision or undefined (allow).
114
+ *
115
+ * All tool calls are sent to Core to build a complete tool chain.
116
+ * If Core is unavailable, fail-open (allow).
117
+ */
118
+ onBeforeToolCall(ctx: {
119
+ sessionKey: string;
120
+ agentId?: string;
121
+ }, event: {
122
+ toolName: string;
123
+ params: Record<string, unknown>;
124
+ }): Promise<BlockDecision | undefined>;
125
+ /**
126
+ * Called at after_tool_call. Records the completed tool in the chain.
127
+ */
128
+ onAfterToolCall(ctx: {
129
+ sessionKey: string;
130
+ }, event: {
131
+ toolName: string;
132
+ params: Record<string, unknown>;
133
+ result?: unknown;
134
+ error?: string;
135
+ durationMs?: number;
136
+ }): void;
137
+ /**
138
+ * Scan tool result content for injection patterns via Core API.
139
+ * Returns scan result or null if scan failed/unavailable.
140
+ */
141
+ scanContent(sessionKey: string, toolName: string, content: string): Promise<ContentScanResult | null>;
142
+ /**
143
+ * Scan raw user prompt content at message_received(user).
144
+ * Stores latest decision in session state for optional enforcement during before_tool_call.
145
+ */
146
+ scanPrompt(sessionKey: string, prompt: string): Promise<PromptScanResponse | null>;
147
+ private getOrCreate;
148
+ private callAssessApi;
149
+ }
150
+ //# sourceMappingURL=behavior-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior-detector.d.ts","sourceRoot":"","sources":["../../agent/behavior-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAKV,kBAAkB,EAGlB,MAAM,EACN,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAUpB,eAAO,MAAM,eAAe,aAG1B,CAAC;AAEH,eAAO,MAAM,WAAW,aAGtB,CAAC;AAEH,eAAO,MAAM,eAAe,aAG1B,CAAC;AAqDH,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAC;AAChG,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACrC,SAAS,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KACvC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,uEAAuE;AACvE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,+CAA+C;AAC/C,MAAM,MAAM,uBAAuB,GAAG,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAOxE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,GAAG,CAAS;IACpB,oEAAoE;IACpE,OAAO,CAAC,cAAc,CAAqB;IAC3C,wEAAwE;IACxE,OAAO,CAAC,qBAAqB,CAAS;IACtC,+CAA+C;IAC/C,OAAO,CAAC,eAAe,CAAwC;IAC/D,mEAAmE;IACnE,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,yDAAyD;IACzD,OAAO,CAAC,gBAAgB,CAA+D;IAEvF,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,cAAc;gBAMV,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM;IAKhD,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAInD,8CAA8C;IAC9C,kBAAkB,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,GAAG,IAAI;IAIlE,gFAAgF;IAChF,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAK1F,gEAAgE;IAChE,8BAA8B,IAAI,IAAI;IAKtC,0EAA0E;IAC1E,0BAA0B,IAAI,iBAAiB,GAAG,IAAI;IAMtD,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAWxD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAItC;;;;OAIG;IACH,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IASzE;;;;OAIG;IACH,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAO5E;;;OAGG;IACH,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAI5E;;OAEG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAaxE,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ/D;;;;;OAKG;IACG,gBAAgB,CACpB,GAAG,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAC7C,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAC3D,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IA+ErC;;OAEG;IACH,eAAe,CACb,GAAG,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,EAC3B,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GACA,IAAI;IA6BP;;;OAGG;IACG,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IA2DpC;;;OAGG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAyGxF,OAAO,CAAC,WAAW;YA+BL,aAAa;CAuF5B"}