@congzhen/changewayguard 6.8.12

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 (329) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +270 -0
  3. package/dashboard-dist/api/104.index.js +1420 -0
  4. package/dashboard-dist/api/104.index.js.map +1 -0
  5. package/dashboard-dist/api/113.index.js +496 -0
  6. package/dashboard-dist/api/113.index.js.map +1 -0
  7. package/dashboard-dist/api/18.index.js +67 -0
  8. package/dashboard-dist/api/18.index.js.map +1 -0
  9. package/dashboard-dist/api/217.index.js +44 -0
  10. package/dashboard-dist/api/217.index.js.map +1 -0
  11. package/dashboard-dist/api/222.index.js +90 -0
  12. package/dashboard-dist/api/222.index.js.map +1 -0
  13. package/dashboard-dist/api/25.index.js +3562 -0
  14. package/dashboard-dist/api/25.index.js.map +1 -0
  15. package/dashboard-dist/api/280.index.js +206 -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/377.index.js +1176 -0
  20. package/dashboard-dist/api/377.index.js.map +1 -0
  21. package/dashboard-dist/api/411.index.js +4250 -0
  22. package/dashboard-dist/api/411.index.js.map +1 -0
  23. package/dashboard-dist/api/424.index.js +135 -0
  24. package/dashboard-dist/api/424.index.js.map +1 -0
  25. package/dashboard-dist/api/573.index.js +806 -0
  26. package/dashboard-dist/api/573.index.js.map +1 -0
  27. package/dashboard-dist/api/598.index.js +328 -0
  28. package/dashboard-dist/api/598.index.js.map +1 -0
  29. package/dashboard-dist/api/62.index.js +4151 -0
  30. package/dashboard-dist/api/62.index.js.map +1 -0
  31. package/dashboard-dist/api/67.index.js +23383 -0
  32. package/dashboard-dist/api/67.index.js.map +1 -0
  33. package/dashboard-dist/api/678.index.js +2734 -0
  34. package/dashboard-dist/api/678.index.js.map +1 -0
  35. package/dashboard-dist/api/698.index.js +1896 -0
  36. package/dashboard-dist/api/698.index.js.map +1 -0
  37. package/dashboard-dist/api/720.index.js +98 -0
  38. package/dashboard-dist/api/720.index.js.map +1 -0
  39. package/dashboard-dist/api/830.index.js +95 -0
  40. package/dashboard-dist/api/830.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 +65 -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/948.index.js +64 -0
  50. package/dashboard-dist/api/948.index.js.map +1 -0
  51. package/dashboard-dist/api/953.index.js +67 -0
  52. package/dashboard-dist/api/953.index.js.map +1 -0
  53. package/dashboard-dist/api/975.index.js +374 -0
  54. package/dashboard-dist/api/975.index.js.map +1 -0
  55. package/dashboard-dist/api/drizzle/sqlite/0000_short_captain_stacy.sql +70 -0
  56. package/dashboard-dist/api/drizzle/sqlite/0001_closed_magus.sql +10 -0
  57. package/dashboard-dist/api/drizzle/sqlite/0002_agent_capability_observation.sql +38 -0
  58. package/dashboard-dist/api/drizzle/sqlite/0003_auth_magic_link.sql +28 -0
  59. package/dashboard-dist/api/drizzle/sqlite/0004_static_scan_fields.sql +8 -0
  60. package/dashboard-dist/api/drizzle/sqlite/0005_gateway_activity.sql +24 -0
  61. package/dashboard-dist/api/drizzle/sqlite/0006_sour_marauders.sql +41 -0
  62. package/dashboard-dist/api/drizzle/sqlite/meta/0000_snapshot.json +460 -0
  63. package/dashboard-dist/api/drizzle/sqlite/meta/0001_snapshot.json +536 -0
  64. package/dashboard-dist/api/drizzle/sqlite/meta/0006_snapshot.json +1249 -0
  65. package/dashboard-dist/api/drizzle/sqlite/meta/_journal.json +55 -0
  66. package/dashboard-dist/api/index.js +27340 -0
  67. package/dashboard-dist/api/index.js.map +1 -0
  68. package/dashboard-dist/api/package.json +16 -0
  69. package/dashboard-dist/api/sourcemap-register.cjs +1 -0
  70. package/dashboard-dist/web/assets/index-CqWIeBTD.js +158 -0
  71. package/dashboard-dist/web/assets/index-Dw7--9q4.css +1 -0
  72. package/dashboard-dist/web/changeway-logo.png +0 -0
  73. package/dashboard-dist/web/favicon.svg +29 -0
  74. package/dashboard-dist/web/index.html +14 -0
  75. package/dashboard-dist/web/logo.svg +16 -0
  76. package/dist/agent/auth.d.ts +37 -0
  77. package/dist/agent/auth.d.ts.map +1 -0
  78. package/dist/agent/auth.js +151 -0
  79. package/dist/agent/auth.js.map +1 -0
  80. package/dist/agent/behavior-detector.d.ts +150 -0
  81. package/dist/agent/behavior-detector.d.ts.map +1 -0
  82. package/dist/agent/behavior-detector.js +573 -0
  83. package/dist/agent/behavior-detector.js.map +1 -0
  84. package/dist/agent/business-reporter.d.ts +114 -0
  85. package/dist/agent/business-reporter.d.ts.map +1 -0
  86. package/dist/agent/business-reporter.js +359 -0
  87. package/dist/agent/business-reporter.js.map +1 -0
  88. package/dist/agent/config-sync.d.ts +70 -0
  89. package/dist/agent/config-sync.d.ts.map +1 -0
  90. package/dist/agent/config-sync.js +133 -0
  91. package/dist/agent/config-sync.js.map +1 -0
  92. package/dist/agent/config.d.ts +97 -0
  93. package/dist/agent/config.d.ts.map +1 -0
  94. package/dist/agent/config.js +359 -0
  95. package/dist/agent/config.js.map +1 -0
  96. package/dist/agent/content-injection-scanner.d.ts +35 -0
  97. package/dist/agent/content-injection-scanner.d.ts.map +1 -0
  98. package/dist/agent/content-injection-scanner.js +270 -0
  99. package/dist/agent/content-injection-scanner.js.map +1 -0
  100. package/dist/agent/engine-log-writer.d.ts +6 -0
  101. package/dist/agent/engine-log-writer.d.ts.map +1 -0
  102. package/dist/agent/engine-log-writer.js +18 -0
  103. package/dist/agent/engine-log-writer.js.map +1 -0
  104. package/dist/agent/env.d.ts +19 -0
  105. package/dist/agent/env.d.ts.map +1 -0
  106. package/dist/agent/env.js +43 -0
  107. package/dist/agent/env.js.map +1 -0
  108. package/dist/agent/event-reporter.d.ts +87 -0
  109. package/dist/agent/event-reporter.d.ts.map +1 -0
  110. package/dist/agent/event-reporter.js +315 -0
  111. package/dist/agent/event-reporter.js.map +1 -0
  112. package/dist/agent/file-watcher.d.ts +50 -0
  113. package/dist/agent/file-watcher.d.ts.map +1 -0
  114. package/dist/agent/file-watcher.js +135 -0
  115. package/dist/agent/file-watcher.js.map +1 -0
  116. package/dist/agent/fs-utils.d.ts +22 -0
  117. package/dist/agent/fs-utils.d.ts.map +1 -0
  118. package/dist/agent/fs-utils.js +41 -0
  119. package/dist/agent/fs-utils.js.map +1 -0
  120. package/dist/agent/gateway-manager.d.ts +59 -0
  121. package/dist/agent/gateway-manager.d.ts.map +1 -0
  122. package/dist/agent/gateway-manager.js +583 -0
  123. package/dist/agent/gateway-manager.js.map +1 -0
  124. package/dist/agent/hook-types.d.ts +276 -0
  125. package/dist/agent/hook-types.d.ts.map +1 -0
  126. package/dist/agent/hook-types.js +51 -0
  127. package/dist/agent/hook-types.js.map +1 -0
  128. package/dist/agent/index.d.ts +8 -0
  129. package/dist/agent/index.d.ts.map +1 -0
  130. package/dist/agent/index.js +8 -0
  131. package/dist/agent/index.js.map +1 -0
  132. package/dist/agent/prompt-gate.d.ts +13 -0
  133. package/dist/agent/prompt-gate.d.ts.map +1 -0
  134. package/dist/agent/prompt-gate.js +28 -0
  135. package/dist/agent/prompt-gate.js.map +1 -0
  136. package/dist/agent/prompt-input.d.ts +9 -0
  137. package/dist/agent/prompt-input.d.ts.map +1 -0
  138. package/dist/agent/prompt-input.js +158 -0
  139. package/dist/agent/prompt-input.js.map +1 -0
  140. package/dist/agent/prompt-output.d.ts +4 -0
  141. package/dist/agent/prompt-output.d.ts.map +1 -0
  142. package/dist/agent/prompt-output.js +19 -0
  143. package/dist/agent/prompt-output.js.map +1 -0
  144. package/dist/agent/runner.d.ts +23 -0
  145. package/dist/agent/runner.d.ts.map +1 -0
  146. package/dist/agent/runner.js +154 -0
  147. package/dist/agent/runner.js.map +1 -0
  148. package/dist/agent/sanitizer.d.ts +10 -0
  149. package/dist/agent/sanitizer.d.ts.map +1 -0
  150. package/dist/agent/sanitizer.js +175 -0
  151. package/dist/agent/sanitizer.js.map +1 -0
  152. package/dist/agent/scan-activity.d.ts +18 -0
  153. package/dist/agent/scan-activity.d.ts.map +1 -0
  154. package/dist/agent/scan-activity.js +32 -0
  155. package/dist/agent/scan-activity.js.map +1 -0
  156. package/dist/agent/types.d.ts +177 -0
  157. package/dist/agent/types.d.ts.map +1 -0
  158. package/dist/agent/types.js +5 -0
  159. package/dist/agent/types.js.map +1 -0
  160. package/dist/agent/workspace-scanner.d.ts +35 -0
  161. package/dist/agent/workspace-scanner.d.ts.map +1 -0
  162. package/dist/agent/workspace-scanner.js +137 -0
  163. package/dist/agent/workspace-scanner.js.map +1 -0
  164. package/dist/dashboard-launcher.d.ts +52 -0
  165. package/dist/dashboard-launcher.d.ts.map +1 -0
  166. package/dist/dashboard-launcher.js +363 -0
  167. package/dist/dashboard-launcher.js.map +1 -0
  168. package/dist/gateway/activity.d.ts +52 -0
  169. package/dist/gateway/activity.d.ts.map +1 -0
  170. package/dist/gateway/activity.js +111 -0
  171. package/dist/gateway/activity.js.map +1 -0
  172. package/dist/gateway/config.d.ts +50 -0
  173. package/dist/gateway/config.d.ts.map +1 -0
  174. package/dist/gateway/config.js +200 -0
  175. package/dist/gateway/config.js.map +1 -0
  176. package/dist/gateway/gateway/activity.d.ts +52 -0
  177. package/dist/gateway/gateway/activity.d.ts.map +1 -0
  178. package/dist/gateway/gateway/activity.js +111 -0
  179. package/dist/gateway/gateway/activity.js.map +1 -0
  180. package/dist/gateway/gateway/config.d.ts +50 -0
  181. package/dist/gateway/gateway/config.d.ts.map +1 -0
  182. package/dist/gateway/gateway/config.js +200 -0
  183. package/dist/gateway/gateway/config.js.map +1 -0
  184. package/dist/gateway/gateway/handlers/anthropic.d.ts +12 -0
  185. package/dist/gateway/gateway/handlers/anthropic.d.ts.map +1 -0
  186. package/dist/gateway/gateway/handlers/anthropic.js +254 -0
  187. package/dist/gateway/gateway/handlers/anthropic.js.map +1 -0
  188. package/dist/gateway/gateway/handlers/gemini.d.ts +12 -0
  189. package/dist/gateway/gateway/handlers/gemini.d.ts.map +1 -0
  190. package/dist/gateway/gateway/handlers/gemini.js +101 -0
  191. package/dist/gateway/gateway/handlers/gemini.js.map +1 -0
  192. package/dist/gateway/gateway/handlers/models.d.ts +4 -0
  193. package/dist/gateway/gateway/handlers/models.d.ts.map +1 -0
  194. package/dist/gateway/gateway/handlers/models.js +36 -0
  195. package/dist/gateway/gateway/handlers/models.js.map +1 -0
  196. package/dist/gateway/gateway/handlers/openai.d.ts +16 -0
  197. package/dist/gateway/gateway/handlers/openai.d.ts.map +1 -0
  198. package/dist/gateway/gateway/handlers/openai.js +254 -0
  199. package/dist/gateway/gateway/handlers/openai.js.map +1 -0
  200. package/dist/gateway/gateway/index.d.ts +27 -0
  201. package/dist/gateway/gateway/index.d.ts.map +1 -0
  202. package/dist/gateway/gateway/index.js +293 -0
  203. package/dist/gateway/gateway/index.js.map +1 -0
  204. package/dist/gateway/gateway/mapping-store.d.ts +38 -0
  205. package/dist/gateway/gateway/mapping-store.d.ts.map +1 -0
  206. package/dist/gateway/gateway/mapping-store.js +74 -0
  207. package/dist/gateway/gateway/mapping-store.js.map +1 -0
  208. package/dist/gateway/gateway/restorer.d.ts +63 -0
  209. package/dist/gateway/gateway/restorer.d.ts.map +1 -0
  210. package/dist/gateway/gateway/restorer.js +284 -0
  211. package/dist/gateway/gateway/restorer.js.map +1 -0
  212. package/dist/gateway/gateway/sanitizer.d.ts +17 -0
  213. package/dist/gateway/gateway/sanitizer.d.ts.map +1 -0
  214. package/dist/gateway/gateway/sanitizer.js +228 -0
  215. package/dist/gateway/gateway/sanitizer.js.map +1 -0
  216. package/dist/gateway/gateway/types.d.ts +53 -0
  217. package/dist/gateway/gateway/types.d.ts.map +1 -0
  218. package/dist/gateway/gateway/types.js +5 -0
  219. package/dist/gateway/gateway/types.js.map +1 -0
  220. package/dist/gateway/handlers/anthropic.d.ts +12 -0
  221. package/dist/gateway/handlers/anthropic.d.ts.map +1 -0
  222. package/dist/gateway/handlers/anthropic.js +254 -0
  223. package/dist/gateway/handlers/anthropic.js.map +1 -0
  224. package/dist/gateway/handlers/gemini.d.ts +12 -0
  225. package/dist/gateway/handlers/gemini.d.ts.map +1 -0
  226. package/dist/gateway/handlers/gemini.js +101 -0
  227. package/dist/gateway/handlers/gemini.js.map +1 -0
  228. package/dist/gateway/handlers/models.d.ts +4 -0
  229. package/dist/gateway/handlers/models.d.ts.map +1 -0
  230. package/dist/gateway/handlers/models.js +36 -0
  231. package/dist/gateway/handlers/models.js.map +1 -0
  232. package/dist/gateway/handlers/openai.d.ts +16 -0
  233. package/dist/gateway/handlers/openai.d.ts.map +1 -0
  234. package/dist/gateway/handlers/openai.js +254 -0
  235. package/dist/gateway/handlers/openai.js.map +1 -0
  236. package/dist/gateway/index.d.ts +27 -0
  237. package/dist/gateway/index.d.ts.map +1 -0
  238. package/dist/gateway/index.js +293 -0
  239. package/dist/gateway/index.js.map +1 -0
  240. package/dist/gateway/mapping-store.d.ts +38 -0
  241. package/dist/gateway/mapping-store.d.ts.map +1 -0
  242. package/dist/gateway/mapping-store.js +74 -0
  243. package/dist/gateway/mapping-store.js.map +1 -0
  244. package/dist/gateway/restorer.d.ts +63 -0
  245. package/dist/gateway/restorer.d.ts.map +1 -0
  246. package/dist/gateway/restorer.js +284 -0
  247. package/dist/gateway/restorer.js.map +1 -0
  248. package/dist/gateway/sanitizer.d.ts +17 -0
  249. package/dist/gateway/sanitizer.d.ts.map +1 -0
  250. package/dist/gateway/sanitizer.js +228 -0
  251. package/dist/gateway/sanitizer.js.map +1 -0
  252. package/dist/gateway/types.d.ts +53 -0
  253. package/dist/gateway/types.d.ts.map +1 -0
  254. package/dist/gateway/types.js +5 -0
  255. package/dist/gateway/types.js.map +1 -0
  256. package/dist/index.d.ts +19 -0
  257. package/dist/index.d.ts.map +1 -0
  258. package/dist/index.js +2084 -0
  259. package/dist/index.js.map +1 -0
  260. package/dist/memory/index.d.ts +5 -0
  261. package/dist/memory/index.d.ts.map +1 -0
  262. package/dist/memory/index.js +5 -0
  263. package/dist/memory/index.js.map +1 -0
  264. package/dist/memory/store.d.ts +82 -0
  265. package/dist/memory/store.d.ts.map +1 -0
  266. package/dist/memory/store.js +194 -0
  267. package/dist/memory/store.js.map +1 -0
  268. package/dist/platform-client/index.d.ts +63 -0
  269. package/dist/platform-client/index.d.ts.map +1 -0
  270. package/dist/platform-client/index.js +294 -0
  271. package/dist/platform-client/index.js.map +1 -0
  272. package/dist/platform-client/types.d.ts +109 -0
  273. package/dist/platform-client/types.d.ts.map +1 -0
  274. package/dist/platform-client/types.js +3 -0
  275. package/dist/platform-client/types.js.map +1 -0
  276. package/gateway/activity.d.ts +52 -0
  277. package/gateway/activity.d.ts.map +1 -0
  278. package/gateway/activity.js +111 -0
  279. package/gateway/activity.js.map +1 -0
  280. package/gateway/config.d.ts +50 -0
  281. package/gateway/config.d.ts.map +1 -0
  282. package/gateway/config.js +200 -0
  283. package/gateway/config.js.map +1 -0
  284. package/gateway/handlers/anthropic.d.ts +12 -0
  285. package/gateway/handlers/anthropic.d.ts.map +1 -0
  286. package/gateway/handlers/anthropic.js +254 -0
  287. package/gateway/handlers/anthropic.js.map +1 -0
  288. package/gateway/handlers/gemini.d.ts +12 -0
  289. package/gateway/handlers/gemini.d.ts.map +1 -0
  290. package/gateway/handlers/gemini.js +101 -0
  291. package/gateway/handlers/gemini.js.map +1 -0
  292. package/gateway/handlers/models.d.ts +4 -0
  293. package/gateway/handlers/models.d.ts.map +1 -0
  294. package/gateway/handlers/models.js +36 -0
  295. package/gateway/handlers/models.js.map +1 -0
  296. package/gateway/handlers/openai.d.ts +16 -0
  297. package/gateway/handlers/openai.d.ts.map +1 -0
  298. package/gateway/handlers/openai.js +254 -0
  299. package/gateway/handlers/openai.js.map +1 -0
  300. package/gateway/index.d.ts +27 -0
  301. package/gateway/index.d.ts.map +1 -0
  302. package/gateway/index.js +293 -0
  303. package/gateway/index.js.map +1 -0
  304. package/gateway/mapping-store.d.ts +38 -0
  305. package/gateway/mapping-store.d.ts.map +1 -0
  306. package/gateway/mapping-store.js +74 -0
  307. package/gateway/mapping-store.js.map +1 -0
  308. package/gateway/restorer.d.ts +63 -0
  309. package/gateway/restorer.d.ts.map +1 -0
  310. package/gateway/restorer.js +284 -0
  311. package/gateway/restorer.js.map +1 -0
  312. package/gateway/sanitizer.d.ts +17 -0
  313. package/gateway/sanitizer.d.ts.map +1 -0
  314. package/gateway/sanitizer.js +228 -0
  315. package/gateway/sanitizer.js.map +1 -0
  316. package/gateway/types.d.ts +53 -0
  317. package/gateway/types.d.ts.map +1 -0
  318. package/gateway/types.js +5 -0
  319. package/gateway/types.js.map +1 -0
  320. package/openclaw.plugin.json +86 -0
  321. package/package.json +74 -0
  322. package/samples/Untitled +1 -0
  323. package/samples/clean-email.txt +20 -0
  324. package/samples/test-document.md +53 -0
  325. package/samples/test-email-popup.txt +44 -0
  326. package/samples/test-email.txt +32 -0
  327. package/samples/test-webpage.html +51 -0
  328. package/scripts/enterprise-enroll.sh +89 -0
  329. package/scripts/enterprise-unenroll.sh +75 -0
@@ -0,0 +1,294 @@
1
+ /**
2
+ * DashboardClient - SDK for communicating with OpenGuardrails Dashboard
3
+ *
4
+ * Handles:
5
+ * - Agent registration & heartbeat
6
+ * - Detection requests (routed through dashboard → core)
7
+ * - Usage & results queries
8
+ *
9
+ * Works with both local embedded dashboard and remote standalone dashboard.
10
+ */
11
+ import fs from "node:fs";
12
+ import path from "node:path";
13
+ import { openclawHome } from "../agent/env.js";
14
+ import { buildSignedAuthHeadersForUrl, withChangewayOpenPrefix } from "../agent/auth.js";
15
+ export class DashboardClient {
16
+ config;
17
+ debugFileLog(msg) {
18
+ try {
19
+ const logPath = path.join(openclawHome, "logs", "moltguard-debug.log");
20
+ fs.appendFileSync(logPath, `[${new Date().toISOString()}] [DashboardClient] ${msg}\n`);
21
+ }
22
+ catch { /* ignore */ }
23
+ }
24
+ constructor(config) {
25
+ this.config = {
26
+ dashboardUrl: config.dashboardUrl.replace(/\/$/, ""),
27
+ sessionToken: config.sessionToken,
28
+ agentId: config.agentId ?? "",
29
+ timeoutMs: config.timeoutMs ?? 30000,
30
+ };
31
+ }
32
+ get agentId() {
33
+ return this.config.agentId;
34
+ }
35
+ async request(path, options = {}) {
36
+ const controller = new AbortController();
37
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeoutMs);
38
+ const url = withChangewayOpenPrefix(`${this.config.dashboardUrl}${path}`);
39
+ const method = options.method ?? "GET";
40
+ try {
41
+ const headers = {
42
+ "Content-Type": "application/json",
43
+ ...buildSignedAuthHeadersForUrl({
44
+ method,
45
+ url,
46
+ body: options.body,
47
+ authorization: this.config.sessionToken ? `Bearer ${this.config.sessionToken}` : null,
48
+ }),
49
+ ...(options.headers || {}),
50
+ };
51
+ const res = await fetch(url, {
52
+ ...options,
53
+ headers,
54
+ signal: controller.signal,
55
+ });
56
+ if (!res.ok) {
57
+ const text = await res.text();
58
+ throw new Error(`Dashboard API ${res.status}: ${text}`);
59
+ }
60
+ return (await res.json());
61
+ }
62
+ finally {
63
+ clearTimeout(timeoutId);
64
+ }
65
+ }
66
+ // ─── Detection ──────────────────────────────────────────────────
67
+ /**
68
+ * Send messages for detection through the dashboard.
69
+ * Dashboard handles scanner config, policy evaluation, and routes to core.
70
+ */
71
+ async detect(req) {
72
+ return this.request("/api/detect", {
73
+ method: "POST",
74
+ body: JSON.stringify({
75
+ ...req,
76
+ agentId: req.agentId || this.config.agentId || undefined,
77
+ }),
78
+ });
79
+ }
80
+ // ─── Agent Management ───────────────────────────────────────────
81
+ /** Register this agent with the dashboard (upserts by name) */
82
+ async registerAgent(req) {
83
+ // Check if agent with same name already exists
84
+ try {
85
+ const list = await this.request("/api/agents");
86
+ if (list.success && list.data) {
87
+ const existing = list.data.find((a) => a.name === req.name);
88
+ if (existing) {
89
+ this.config.agentId = existing.id;
90
+ // Update status and metadata
91
+ await this.request(`/api/agents/${existing.id}`, {
92
+ method: "PUT",
93
+ body: JSON.stringify({
94
+ status: "active",
95
+ ...(req.provider && { provider: req.provider }),
96
+ ...(req.metadata && { metadata: req.metadata }),
97
+ }),
98
+ }).catch(() => { });
99
+ return { success: true, data: { id: existing.id } };
100
+ }
101
+ }
102
+ }
103
+ catch {
104
+ // Fall through to create
105
+ }
106
+ const result = await this.request("/api/agents", {
107
+ method: "POST",
108
+ body: JSON.stringify(req),
109
+ });
110
+ if (result.success && result.data?.id) {
111
+ this.config.agentId = result.data.id;
112
+ }
113
+ return result;
114
+ }
115
+ /** Send heartbeat to indicate this agent is alive */
116
+ async heartbeat() {
117
+ if (!this.config.agentId)
118
+ return;
119
+ await this.request(`/api/agents/${this.config.agentId}/heartbeat`, {
120
+ method: "POST",
121
+ });
122
+ }
123
+ /** Upload full agent profile (workspace files, skills, cron jobs, etc.) */
124
+ async updateProfile(profile) {
125
+ if (!this.config.agentId)
126
+ return;
127
+ await this.request(`/api/agents/${this.config.agentId}`, {
128
+ method: "PUT",
129
+ body: JSON.stringify({ metadata: profile }),
130
+ });
131
+ }
132
+ /** Start periodic heartbeat */
133
+ startHeartbeat(intervalMs = 60_000) {
134
+ const timer = setInterval(() => {
135
+ this.heartbeat().catch(() => { });
136
+ }, intervalMs);
137
+ timer.unref();
138
+ return timer;
139
+ }
140
+ // ─── Tool Call Observations ─────────────────────────────────────
141
+ /** Report a tool call observation to the dashboard */
142
+ async reportToolCall(data) {
143
+ await this.request("/api/observations", {
144
+ method: "POST",
145
+ body: JSON.stringify(data),
146
+ });
147
+ }
148
+ /** Report a detection result to the dashboard */
149
+ async reportDetection(data) {
150
+ await this.request("/api/detections", {
151
+ method: "POST",
152
+ body: JSON.stringify(data),
153
+ });
154
+ }
155
+ /** Get observed permissions for an agent */
156
+ async getPermissions(agentId) {
157
+ const id = agentId || this.config.agentId;
158
+ if (!id)
159
+ return [];
160
+ const result = await this.request(`/api/observations/agents/${id}/permissions`);
161
+ return result.data ?? [];
162
+ }
163
+ // ─── Agentic Hours ──────────────────────────────────────────────
164
+ /** Report agentic hours data to the dashboard */
165
+ async reportAgenticHours(data) {
166
+ await this.request("/api/agentic-hours", {
167
+ method: "POST",
168
+ body: JSON.stringify(data),
169
+ });
170
+ }
171
+ // ─── Agentic Hours Accumulator ────────────────────────────────
172
+ hoursAccum = {
173
+ toolCallDurationMs: 0,
174
+ llmDurationMs: 0,
175
+ totalDurationMs: 0,
176
+ toolCallCount: 0,
177
+ llmCallCount: 0,
178
+ sessionCount: 0,
179
+ blockCount: 0,
180
+ riskEventCount: 0,
181
+ };
182
+ hoursFlushTimer = null;
183
+ /** Record a tool call duration for agentic hours */
184
+ recordToolCallDuration(durationMs, blocked = false) {
185
+ this.hoursAccum.toolCallDurationMs += durationMs;
186
+ this.hoursAccum.totalDurationMs += durationMs;
187
+ this.hoursAccum.toolCallCount += 1;
188
+ if (blocked)
189
+ this.hoursAccum.blockCount += 1;
190
+ this.ensureHoursFlush();
191
+ }
192
+ /** Record an LLM call duration for agentic hours */
193
+ recordLlmDuration(durationMs) {
194
+ this.hoursAccum.llmDurationMs += durationMs;
195
+ this.hoursAccum.totalDurationMs += durationMs;
196
+ this.hoursAccum.llmCallCount += 1;
197
+ this.ensureHoursFlush();
198
+ }
199
+ /** Record a session start */
200
+ recordSessionStart() {
201
+ this.hoursAccum.sessionCount += 1;
202
+ this.ensureHoursFlush();
203
+ }
204
+ /** Record a risk event */
205
+ recordRiskEvent() {
206
+ this.hoursAccum.riskEventCount += 1;
207
+ this.ensureHoursFlush();
208
+ }
209
+ ensureHoursFlush() {
210
+ if (this.hoursFlushTimer)
211
+ return;
212
+ this.hoursFlushTimer = setTimeout(() => {
213
+ this.flushAgenticHours();
214
+ this.hoursFlushTimer = null;
215
+ }, 60_000);
216
+ this.hoursFlushTimer.unref();
217
+ }
218
+ async flushAgenticHours() {
219
+ this.debugFileLog(`flushAgenticHours: agentId=${this.config.agentId} accum=${JSON.stringify(this.hoursAccum)}`);
220
+ if (!this.config.agentId) {
221
+ this.debugFileLog("flushAgenticHours: no agentId, skipping");
222
+ return;
223
+ }
224
+ const accum = { ...this.hoursAccum };
225
+ // Reset
226
+ this.hoursAccum = {
227
+ toolCallDurationMs: 0,
228
+ llmDurationMs: 0,
229
+ totalDurationMs: 0,
230
+ toolCallCount: 0,
231
+ llmCallCount: 0,
232
+ sessionCount: 0,
233
+ blockCount: 0,
234
+ riskEventCount: 0,
235
+ };
236
+ // Only flush if there's data
237
+ const hasData = accum.totalDurationMs > 0 ||
238
+ accum.toolCallCount > 0 ||
239
+ accum.llmCallCount > 0 ||
240
+ accum.sessionCount > 0;
241
+ if (!hasData)
242
+ return;
243
+ try {
244
+ this.debugFileLog(`flushAgenticHours: POSTing to dashboard: ${JSON.stringify(accum)}`);
245
+ await this.reportAgenticHours({
246
+ agentId: this.config.agentId,
247
+ ...accum,
248
+ });
249
+ this.debugFileLog(`flushAgenticHours: POST success`);
250
+ }
251
+ catch (err) {
252
+ this.debugFileLog(`flushAgenticHours: POST FAILED: ${err}`);
253
+ // Re-add on failure
254
+ this.hoursAccum.toolCallDurationMs += accum.toolCallDurationMs;
255
+ this.hoursAccum.llmDurationMs += accum.llmDurationMs;
256
+ this.hoursAccum.totalDurationMs += accum.totalDurationMs;
257
+ this.hoursAccum.toolCallCount += accum.toolCallCount;
258
+ this.hoursAccum.llmCallCount += accum.llmCallCount;
259
+ this.hoursAccum.sessionCount += accum.sessionCount;
260
+ this.hoursAccum.blockCount += accum.blockCount;
261
+ this.hoursAccum.riskEventCount += accum.riskEventCount;
262
+ }
263
+ }
264
+ /** Flush pending agentic hours and clean up timers */
265
+ async stop() {
266
+ if (this.hoursFlushTimer) {
267
+ clearTimeout(this.hoursFlushTimer);
268
+ this.hoursFlushTimer = null;
269
+ }
270
+ await this.flushAgenticHours();
271
+ }
272
+ // ─── Health ───────────────────────────────────────────────────────
273
+ /** Check if dashboard is reachable */
274
+ async checkHealth() {
275
+ try {
276
+ const url = withChangewayOpenPrefix(`${this.config.dashboardUrl}/health`);
277
+ const res = await fetch(url, {
278
+ headers: buildSignedAuthHeadersForUrl({
279
+ method: "GET",
280
+ url,
281
+ authorization: this.config.sessionToken ? `Bearer ${this.config.sessionToken}` : null,
282
+ }),
283
+ });
284
+ const json = (await res.json());
285
+ return json.status === "ok";
286
+ }
287
+ catch {
288
+ return false;
289
+ }
290
+ }
291
+ }
292
+ // Keep PlatformClient as alias
293
+ export { DashboardClient as PlatformClient };
294
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../platform-client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /** Types for Dashboard API communication */
2
+ export type DashboardDetectRequest = {
3
+ messages: unknown[];
4
+ format?: "openai" | "anthropic" | "gemini" | "raw";
5
+ role?: "system" | "user" | "assistant" | "tool";
6
+ agentId?: string;
7
+ };
8
+ export type DashboardDetectResponse = {
9
+ success: boolean;
10
+ data?: {
11
+ safe: boolean;
12
+ verdict: "safe" | "unsafe";
13
+ categories: string[];
14
+ sensitivity_score: number;
15
+ findings: Array<{
16
+ scanner: string;
17
+ name: string;
18
+ description: string;
19
+ }>;
20
+ latency_ms: number;
21
+ request_id: string;
22
+ policy_action?: "block" | "alert" | "log";
23
+ };
24
+ blocked?: boolean;
25
+ error?: string;
26
+ };
27
+ export type AgentRegisterRequest = {
28
+ name: string;
29
+ description?: string;
30
+ provider?: string;
31
+ metadata?: Record<string, unknown>;
32
+ };
33
+ export type DashboardClientConfig = {
34
+ /** Dashboard URL (local or remote) */
35
+ dashboardUrl: string;
36
+ /** Session token for dashboard auth */
37
+ sessionToken: string;
38
+ /** Agent ID (set after registration) */
39
+ agentId?: string;
40
+ /** Request timeout in ms */
41
+ timeoutMs?: number;
42
+ };
43
+ export type ToolCallObservationRequest = {
44
+ agentId: string;
45
+ sessionKey?: string;
46
+ toolName: string;
47
+ params?: Record<string, unknown>;
48
+ phase: "before" | "after";
49
+ result?: unknown;
50
+ error?: string;
51
+ durationMs?: number;
52
+ blocked?: boolean;
53
+ blockReason?: string;
54
+ };
55
+ export type AgentPermission = {
56
+ id: string;
57
+ agentId: string;
58
+ toolName: string;
59
+ category: string | null;
60
+ accessPattern: string | null;
61
+ targetsJson: string[];
62
+ callCount: number;
63
+ errorCount: number;
64
+ firstSeen: string;
65
+ lastSeen: string;
66
+ };
67
+ export type DetectionResultRequest = {
68
+ agentId: string;
69
+ sessionKey?: string;
70
+ toolName?: string;
71
+ safe: boolean;
72
+ categories: string[];
73
+ findings: Array<{
74
+ scanner: string;
75
+ name: string;
76
+ description?: string;
77
+ matchedText?: string;
78
+ confidence?: "high" | "medium" | "low";
79
+ }>;
80
+ sensitivityScore?: number;
81
+ latencyMs?: number;
82
+ /** Whether quota was exceeded (detection skipped) */
83
+ quotaExceeded?: boolean;
84
+ /** Quota info when exceeded */
85
+ quotaInfo?: {
86
+ used: number;
87
+ total: number;
88
+ resetAt?: string;
89
+ };
90
+ scanType?: "static" | "dynamic";
91
+ filePath?: string;
92
+ fileType?: "soul" | "agent" | "memory" | "task" | "skill" | "plugin" | "other";
93
+ };
94
+ export type AgenticHoursRequest = {
95
+ agentId: string;
96
+ date?: string;
97
+ toolCallDurationMs?: number;
98
+ llmDurationMs?: number;
99
+ totalDurationMs?: number;
100
+ toolCallCount?: number;
101
+ llmCallCount?: number;
102
+ sessionCount?: number;
103
+ blockCount?: number;
104
+ riskEventCount?: number;
105
+ };
106
+ export type PlatformDetectRequest = DashboardDetectRequest;
107
+ export type PlatformDetectResponse = DashboardDetectResponse;
108
+ export type PlatformClientConfig = DashboardClientConfig;
109
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../platform-client/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Types for Dashboard API communication */
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../platform-client/types.ts"],"names":[],"mappings":"AAAA,4CAA4C"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Gateway Activity Logger
3
+ *
4
+ * Tracks sanitization and restoration events for monitoring.
5
+ */
6
+ import type { ActivityListener, MappingTable } from "./types.js";
7
+ /**
8
+ * Generate a unique request ID
9
+ */
10
+ export declare function generateRequestId(): string;
11
+ /**
12
+ * Register an activity listener
13
+ */
14
+ export declare function addActivityListener(listener: ActivityListener): void;
15
+ /**
16
+ * Remove an activity listener
17
+ */
18
+ export declare function removeActivityListener(listener: ActivityListener): void;
19
+ /**
20
+ * Clear all activity listeners
21
+ */
22
+ export declare function clearActivityListeners(): void;
23
+ /**
24
+ * Count categories from mapping table
25
+ * Handles both old format (__email_1__) and new format (__PII_EMAIL_ADDRESS_00000001__)
26
+ */
27
+ export declare function countCategories(mappingTable: MappingTable): Record<string, number>;
28
+ /**
29
+ * Log a sanitization event (request going out)
30
+ */
31
+ export declare function logSanitizeEvent(params: {
32
+ requestId: string;
33
+ backend: string;
34
+ endpoint: string;
35
+ model?: string;
36
+ mappingTable: MappingTable;
37
+ redactionCount: number;
38
+ durationMs?: number;
39
+ }): void;
40
+ /**
41
+ * Log a restoration event (response coming back)
42
+ */
43
+ export declare function logRestoreEvent(params: {
44
+ requestId: string;
45
+ backend: string;
46
+ endpoint: string;
47
+ model?: string;
48
+ mappingTable: MappingTable;
49
+ restorationCount: number;
50
+ durationMs?: number;
51
+ }): void;
52
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAwB,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQvF;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAKvE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAeD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAgBP;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAgBP"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Gateway Activity Logger
3
+ *
4
+ * Tracks sanitization and restoration events for monitoring.
5
+ */
6
+ // Activity listeners
7
+ const listeners = [];
8
+ // Request counter for generating IDs
9
+ let requestCounter = 0;
10
+ /**
11
+ * Generate a unique request ID
12
+ */
13
+ export function generateRequestId() {
14
+ return `gw-${Date.now()}-${++requestCounter}`;
15
+ }
16
+ /**
17
+ * Register an activity listener
18
+ */
19
+ export function addActivityListener(listener) {
20
+ listeners.push(listener);
21
+ }
22
+ /**
23
+ * Remove an activity listener
24
+ */
25
+ export function removeActivityListener(listener) {
26
+ const index = listeners.indexOf(listener);
27
+ if (index !== -1) {
28
+ listeners.splice(index, 1);
29
+ }
30
+ }
31
+ /**
32
+ * Clear all activity listeners
33
+ */
34
+ export function clearActivityListeners() {
35
+ listeners.length = 0;
36
+ }
37
+ /**
38
+ * Emit an activity event to all listeners
39
+ */
40
+ function emitActivity(event) {
41
+ for (const listener of listeners) {
42
+ try {
43
+ listener(event);
44
+ }
45
+ catch (err) {
46
+ console.error("[gateway-activity] Listener error:", err);
47
+ }
48
+ }
49
+ }
50
+ /**
51
+ * Count categories from mapping table
52
+ * Handles both old format (__email_1__) and new format (__PII_EMAIL_ADDRESS_00000001__)
53
+ */
54
+ export function countCategories(mappingTable) {
55
+ const categories = {};
56
+ for (const placeholder of mappingTable.keys()) {
57
+ // Try new format first: __PII_EMAIL_ADDRESS_00000001__
58
+ const newMatch = placeholder.match(/^__PII_([A-Z_]+)_\d+__$/);
59
+ if (newMatch) {
60
+ const category = newMatch[1].toLowerCase();
61
+ categories[category] = (categories[category] || 0) + 1;
62
+ continue;
63
+ }
64
+ // Fallback to old format: __email_1__
65
+ const oldMatch = placeholder.match(/^__([a-z_]+)_\d+__$/);
66
+ if (oldMatch) {
67
+ const category = oldMatch[1];
68
+ categories[category] = (categories[category] || 0) + 1;
69
+ }
70
+ }
71
+ return categories;
72
+ }
73
+ /**
74
+ * Log a sanitization event (request going out)
75
+ */
76
+ export function logSanitizeEvent(params) {
77
+ const event = {
78
+ id: `${params.requestId}-sanitize`,
79
+ timestamp: new Date().toISOString(),
80
+ requestId: params.requestId,
81
+ type: "sanitize",
82
+ direction: "request",
83
+ backend: params.backend,
84
+ endpoint: params.endpoint,
85
+ model: params.model,
86
+ redactionCount: params.redactionCount,
87
+ categories: countCategories(params.mappingTable),
88
+ durationMs: params.durationMs,
89
+ };
90
+ emitActivity(event);
91
+ }
92
+ /**
93
+ * Log a restoration event (response coming back)
94
+ */
95
+ export function logRestoreEvent(params) {
96
+ const event = {
97
+ id: `${params.requestId}-restore`,
98
+ timestamp: new Date().toISOString(),
99
+ requestId: params.requestId,
100
+ type: "restore",
101
+ direction: "response",
102
+ backend: params.backend,
103
+ endpoint: params.endpoint,
104
+ model: params.model,
105
+ redactionCount: params.restorationCount,
106
+ categories: countCategories(params.mappingTable),
107
+ durationMs: params.durationMs,
108
+ };
109
+ emitActivity(event);
110
+ }
111
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,qBAAqB;AACrB,MAAM,SAAS,GAAuB,EAAE,CAAC;AAEzC,qCAAqC;AACrC,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA0B;IAC5D,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAA0B;IAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,KAA2B;IAC/C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,YAA0B;IACxD,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,uDAAuD;QACvD,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC9D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3C,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC7B,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAQhC;IACC,MAAM,KAAK,GAAyB;QAClC,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,WAAW;QAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC;QAChD,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IAEF,YAAY,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAQ/B;IACC,MAAM,KAAK,GAAyB;QAClC,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,UAAU;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,gBAAgB;QACvC,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC;QAChD,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IAEF,YAAY,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Gateway configuration management
3
+ */
4
+ import type { GatewayConfig, ApiType } from "./types.js";
5
+ /**
6
+ * Load gateway configuration from file or environment
7
+ */
8
+ export declare function loadConfig(configPath?: string): GatewayConfig;
9
+ /**
10
+ * Validate configuration
11
+ */
12
+ export declare function validateConfig(config: GatewayConfig): void;
13
+ /**
14
+ * Infer API type from backend name
15
+ */
16
+ export declare function inferApiType(name: string): ApiType;
17
+ /**
18
+ * Get API type for a backend
19
+ */
20
+ export declare function getBackendApiType(name: string, config: GatewayConfig): ApiType;
21
+ /**
22
+ * Find backend by API key
23
+ */
24
+ export declare function findBackendByApiKey(apiKey: string, config: GatewayConfig): {
25
+ name: string;
26
+ backend: typeof config.backends[string];
27
+ } | null;
28
+ /**
29
+ * Find default backend for an API type
30
+ */
31
+ export declare function findDefaultBackend(apiType: ApiType, config: GatewayConfig): {
32
+ name: string;
33
+ backend: typeof config.backends[string];
34
+ } | null;
35
+ /**
36
+ * Find backend by request path prefix
37
+ * Matches the longest pathPrefix that is a prefix of the request path
38
+ */
39
+ export declare function findBackendByPathPrefix(requestPath: string, config: GatewayConfig): {
40
+ name: string;
41
+ backend: typeof config.backends[string];
42
+ } | null;
43
+ /**
44
+ * Find backend by model name
45
+ */
46
+ export declare function findBackendByModel(modelName: string, config: GatewayConfig): {
47
+ name: string;
48
+ backend: typeof config.backends[string];
49
+ } | null;
50
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIzD;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAyB7D;AAmFD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAkB1D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAM9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAOlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAelE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAclE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAOlE"}