@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,35 @@
1
+ /**
2
+ * Workspace MD File Scanner
3
+ *
4
+ * Scans OpenClaw workspace for all .md files and categorizes them:
5
+ * - soul.md (agent personality)
6
+ * - agent.md (agent configuration)
7
+ * - memories/*.md (conversation memories)
8
+ * - heartbeat.md (task scheduler)
9
+ * - Other md files in workspace root
10
+ */
11
+ export type FileType = "soul" | "agent" | "memory" | "task" | "skill" | "plugin" | "other";
12
+ export interface WorkspaceFile {
13
+ path: string;
14
+ absolutePath: string;
15
+ content: string;
16
+ type: FileType;
17
+ sizeBytes: number;
18
+ }
19
+ /**
20
+ * Scan workspace for all .md files
21
+ */
22
+ export declare function scanWorkspaceMdFiles(): Promise<WorkspaceFile[]>;
23
+ /**
24
+ * Scan specific file types
25
+ */
26
+ export declare function scanFilesByType(types: FileType[]): Promise<WorkspaceFile[]>;
27
+ /**
28
+ * Get summary of workspace files
29
+ */
30
+ export declare function getWorkspaceSummary(): Promise<{
31
+ totalFiles: number;
32
+ byType: Record<FileType, number>;
33
+ totalSizeBytes: number;
34
+ }>;
35
+ //# sourceMappingURL=workspace-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-scanner.d.ts","sourceRoot":"","sources":["../../agent/workspace-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAqED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CA2BrE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAGjF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CAyBD"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Workspace MD File Scanner
3
+ *
4
+ * Scans OpenClaw workspace for all .md files and categorizes them:
5
+ * - soul.md (agent personality)
6
+ * - agent.md (agent configuration)
7
+ * - memories/*.md (conversation memories)
8
+ * - heartbeat.md (task scheduler)
9
+ * - Other md files in workspace root
10
+ */
11
+ import fs from "node:fs";
12
+ import path from "node:path";
13
+ import { openclawHome } from "./env.js";
14
+ /**
15
+ * Get OpenClaw workspace directory
16
+ */
17
+ function getWorkspaceDir() {
18
+ return openclawHome;
19
+ }
20
+ /**
21
+ * Categorize file by path
22
+ */
23
+ function categorizeFile(relativePath) {
24
+ const lower = relativePath.toLowerCase();
25
+ if (lower === "soul.md")
26
+ return "soul";
27
+ if (lower === "agent.md")
28
+ return "agent";
29
+ if (lower === "heartbeat.md")
30
+ return "task";
31
+ if (lower.startsWith("memories/") || lower.startsWith("memories\\"))
32
+ return "memory";
33
+ if (lower.startsWith("skills/") || lower.startsWith("skills\\"))
34
+ return "skill";
35
+ if (lower.startsWith("plugins/") || lower.startsWith("plugins\\"))
36
+ return "plugin";
37
+ return "other";
38
+ }
39
+ /**
40
+ * Recursively find all .md files in a directory
41
+ */
42
+ async function findMdFiles(dir, baseDir) {
43
+ const files = [];
44
+ try {
45
+ const entries = await fs.promises.readdir(dir, { withFileTypes: true });
46
+ for (const entry of entries) {
47
+ const fullPath = path.join(dir, entry.name);
48
+ if (entry.isDirectory()) {
49
+ // Skip node_modules, .git, dist, build directories
50
+ if (["node_modules", ".git", "dist", "build", ".cache"].includes(entry.name)) {
51
+ continue;
52
+ }
53
+ // Recursively scan subdirectories
54
+ const subFiles = await findMdFiles(fullPath, baseDir);
55
+ files.push(...subFiles);
56
+ }
57
+ else if (entry.isFile() && entry.name.endsWith(".md")) {
58
+ const relativePath = path.relative(baseDir, fullPath);
59
+ files.push(relativePath);
60
+ }
61
+ }
62
+ }
63
+ catch {
64
+ // Ignore permission errors, etc.
65
+ }
66
+ return files;
67
+ }
68
+ /**
69
+ * Read file content safely
70
+ */
71
+ async function readFileSafe(filePath) {
72
+ try {
73
+ return await fs.promises.readFile(filePath, "utf-8");
74
+ }
75
+ catch {
76
+ return null;
77
+ }
78
+ }
79
+ /**
80
+ * Scan workspace for all .md files
81
+ */
82
+ export async function scanWorkspaceMdFiles() {
83
+ const workspaceDir = getWorkspaceDir();
84
+ const files = [];
85
+ // Find all .md files
86
+ const mdFiles = await findMdFiles(workspaceDir, workspaceDir);
87
+ // Read each file
88
+ for (const relativePath of mdFiles) {
89
+ const absolutePath = path.join(workspaceDir, relativePath);
90
+ const content = await readFileSafe(absolutePath);
91
+ if (content === null)
92
+ continue; // Skip unreadable files
93
+ const type = categorizeFile(relativePath);
94
+ const sizeBytes = Buffer.byteLength(content, "utf-8");
95
+ files.push({
96
+ path: relativePath,
97
+ absolutePath,
98
+ content,
99
+ type,
100
+ sizeBytes,
101
+ });
102
+ }
103
+ return files;
104
+ }
105
+ /**
106
+ * Scan specific file types
107
+ */
108
+ export async function scanFilesByType(types) {
109
+ const allFiles = await scanWorkspaceMdFiles();
110
+ return allFiles.filter(f => types.includes(f.type));
111
+ }
112
+ /**
113
+ * Get summary of workspace files
114
+ */
115
+ export async function getWorkspaceSummary() {
116
+ const files = await scanWorkspaceMdFiles();
117
+ const byType = {
118
+ soul: 0,
119
+ agent: 0,
120
+ memory: 0,
121
+ task: 0,
122
+ skill: 0,
123
+ plugin: 0,
124
+ other: 0,
125
+ };
126
+ let totalSizeBytes = 0;
127
+ for (const file of files) {
128
+ byType[file.type]++;
129
+ totalSizeBytes += file.sizeBytes;
130
+ }
131
+ return {
132
+ totalFiles: files.length,
133
+ byType,
134
+ totalSizeBytes,
135
+ };
136
+ }
137
+ //# sourceMappingURL=workspace-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-scanner.js","sourceRoot":"","sources":["../../agent/workspace-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Dashboard Launcher for MoltGuard
3
+ *
4
+ * Starts the local Dashboard in-process for monitoring agent activity.
5
+ * All components (MoltGuard, Gateway, Dashboard) run in the same process.
6
+ */
7
+ export declare const DASHBOARD_PORT = 53667;
8
+ /**
9
+ * Get the plugin's data directory
10
+ */
11
+ export declare function getPluginDataDir(): string;
12
+ interface LaunchOptions {
13
+ apiKey: string;
14
+ agentId: string;
15
+ coreUrl: string;
16
+ dataDir?: string;
17
+ autoStart?: boolean;
18
+ }
19
+ interface LaunchResult {
20
+ localUrl: string;
21
+ token: string;
22
+ }
23
+ /**
24
+ * Start the local Dashboard (in-process)
25
+ */
26
+ export declare function startLocalDashboard(options: LaunchOptions): Promise<LaunchResult>;
27
+ /**
28
+ * Check if Dashboard is running
29
+ */
30
+ export declare function isDashboardRunning(): boolean;
31
+ /**
32
+ * Get current Dashboard URL
33
+ */
34
+ export declare function getDashboardUrl(): string | null;
35
+ /**
36
+ * Get current token
37
+ */
38
+ export declare function getDashboardToken(): string | null;
39
+ /**
40
+ * Error for development mode (when build is required)
41
+ */
42
+ export declare class DevModeError extends Error {
43
+ dashboardDir: string;
44
+ constructor(dashboardDir: string);
45
+ getInstructions(): string;
46
+ }
47
+ /**
48
+ * Stop Dashboard server
49
+ */
50
+ export declare function stopLocalDashboard(): Promise<void>;
51
+ export {};
52
+ //# sourceMappingURL=dashboard-launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-launcher.d.ts","sourceRoot":"","sources":["../dashboard-launcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,eAAO,MAAM,cAAc,QAAQ,CAAC;AAqBpC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AA+GD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA4JvF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAClB,YAAY,EAAE,MAAM;gBAApB,YAAY,EAAE,MAAM;IAKvC,eAAe,IAAI,MAAM;CAc1B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBxD"}
@@ -0,0 +1,363 @@
1
+ /**
2
+ * Dashboard Launcher for MoltGuard
3
+ *
4
+ * Starts the local Dashboard in-process for monitoring agent activity.
5
+ * All components (MoltGuard, Gateway, Dashboard) run in the same process.
6
+ */
7
+ import crypto from "node:crypto";
8
+ import path from "node:path";
9
+ import fs from "node:fs";
10
+ import os from "node:os";
11
+ import { fileURLToPath } from "node:url";
12
+ import { setDashboardPort } from "./agent/gateway-manager.js";
13
+ import { withChangewayOpenPrefix } from "./agent/auth.js";
14
+ import { openclawHome } from "./agent/env.js";
15
+ import { loadJsonSync } from "./agent/fs-utils.js";
16
+ // Dashboard state
17
+ let dashboardRunning = false;
18
+ let currentToken = null;
19
+ let currentLocalUrl = null;
20
+ let dashboardCloseFn = null;
21
+ let startupInProgress = false;
22
+ let startupPromise = null;
23
+ export const DASHBOARD_PORT = 53667;
24
+ const TOKEN_FILE = path.join(os.homedir(), ".openclaw", "credentials", "changewayguard", "dashboard-session-token");
25
+ /**
26
+ * Get the package root directory
27
+ */
28
+ function getPackageRoot() {
29
+ if (typeof import.meta !== 'undefined' && import.meta.url) {
30
+ const currentFile = fileURLToPath(import.meta.url);
31
+ const currentDir = path.dirname(currentFile);
32
+ if (currentDir.endsWith('dist')) {
33
+ return path.dirname(currentDir);
34
+ }
35
+ return currentDir;
36
+ }
37
+ if (__dirname.endsWith('dist')) {
38
+ return path.dirname(__dirname);
39
+ }
40
+ return __dirname;
41
+ }
42
+ /**
43
+ * Get the plugin's data directory
44
+ */
45
+ export function getPluginDataDir() {
46
+ return path.join(openclawHome, "extensions", "changewayguard", "data");
47
+ }
48
+ /**
49
+ * Check if a port is responding to HTTP health check
50
+ */
51
+ async function isPortResponding(port) {
52
+ try {
53
+ const healthUrl = withChangewayOpenPrefix(`http://localhost:${port}/health`);
54
+ const res = await fetch(healthUrl, {
55
+ signal: AbortSignal.timeout(1000),
56
+ });
57
+ return res.ok;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
63
+ /**
64
+ * Check if a port is in use (TCP level check)
65
+ */
66
+ async function isPortInUse(port) {
67
+ const net = await import("node:net");
68
+ return new Promise((resolve) => {
69
+ const server = net.createServer();
70
+ server.once("error", (err) => {
71
+ if (err.code === "EADDRINUSE") {
72
+ resolve(true);
73
+ }
74
+ else {
75
+ resolve(false);
76
+ }
77
+ });
78
+ server.once("listening", () => {
79
+ server.close();
80
+ resolve(false);
81
+ });
82
+ server.listen(port, "127.0.0.1");
83
+ });
84
+ }
85
+ /**
86
+ * Wait for a port to become available
87
+ */
88
+ async function waitForPortAvailable(port, timeoutMs = 10000) {
89
+ const startTime = Date.now();
90
+ while (Date.now() - startTime < timeoutMs) {
91
+ const inUse = await isPortInUse(port);
92
+ if (!inUse) {
93
+ return true;
94
+ }
95
+ // Wait 500ms before checking again
96
+ await new Promise(r => setTimeout(r, 500));
97
+ }
98
+ return false;
99
+ }
100
+ /**
101
+ * Read saved token from file
102
+ */
103
+ function readSavedToken() {
104
+ if (fs.existsSync(TOKEN_FILE)) {
105
+ try {
106
+ const data = loadJsonSync(TOKEN_FILE);
107
+ if (data.token && typeof data.token === "string") {
108
+ return data.token;
109
+ }
110
+ }
111
+ catch {
112
+ // Ignore
113
+ }
114
+ }
115
+ return null;
116
+ }
117
+ /**
118
+ * Save token to file
119
+ */
120
+ function saveToken(token, port) {
121
+ try {
122
+ const tokenDir = path.dirname(TOKEN_FILE);
123
+ fs.mkdirSync(tokenDir, { recursive: true });
124
+ fs.writeFileSync(TOKEN_FILE, JSON.stringify({ token, port }));
125
+ }
126
+ catch {
127
+ // Ignore
128
+ }
129
+ }
130
+ /**
131
+ * Find the Dashboard directory
132
+ */
133
+ function findDashboardDir() {
134
+ const packageRoot = getPackageRoot();
135
+ const candidates = [
136
+ // 1. Bundled in moltguard package (production)
137
+ { dir: path.join(packageRoot, "dashboard-dist"), bundled: true },
138
+ // 2. Relative to moltguard (monorepo development)
139
+ { dir: path.join(packageRoot, "..", "dashboard"), bundled: false },
140
+ ];
141
+ for (const candidate of candidates) {
142
+ const checkFile = candidate.bundled
143
+ ? path.join(candidate.dir, "api", "package.json")
144
+ : path.join(candidate.dir, "package.json");
145
+ if (fs.existsSync(checkFile)) {
146
+ return candidate;
147
+ }
148
+ }
149
+ return null;
150
+ }
151
+ /**
152
+ * Start the local Dashboard (in-process)
153
+ */
154
+ export async function startLocalDashboard(options) {
155
+ // If already running, return existing URL
156
+ if (dashboardRunning && currentToken && currentLocalUrl) {
157
+ return {
158
+ localUrl: currentLocalUrl,
159
+ token: currentToken,
160
+ };
161
+ }
162
+ // If startup is already in progress, wait for it
163
+ if (startupInProgress && startupPromise) {
164
+ return startupPromise;
165
+ }
166
+ // Check if Dashboard is already running (e.g., dev mode with pnpm dev, or previous instance)
167
+ const isAlreadyRunning = await isPortResponding(DASHBOARD_PORT);
168
+ if (isAlreadyRunning) {
169
+ const existingToken = readSavedToken();
170
+ if (existingToken) {
171
+ currentToken = existingToken;
172
+ currentLocalUrl = `http://localhost:${DASHBOARD_PORT}/dashboard/?token=${existingToken}`;
173
+ dashboardRunning = true;
174
+ return {
175
+ localUrl: currentLocalUrl,
176
+ token: existingToken,
177
+ };
178
+ }
179
+ // Port is responding but no token - another process is using it
180
+ // Don't try to start, just throw
181
+ throw new Error(`Port ${DASHBOARD_PORT} is already in use by another process`);
182
+ }
183
+ // Check if port is in use but not responding (e.g., server shutting down)
184
+ // Wait for it to become available
185
+ const portInUse = await isPortInUse(DASHBOARD_PORT);
186
+ if (portInUse) {
187
+ // Port is held but not responding - likely shutting down, wait for it
188
+ const portAvailable = await waitForPortAvailable(DASHBOARD_PORT, 15000);
189
+ if (!portAvailable) {
190
+ throw new Error(`Port ${DASHBOARD_PORT} is still in use after waiting. Please try again.`);
191
+ }
192
+ }
193
+ // Mark startup in progress and create promise
194
+ startupInProgress = true;
195
+ const doStartup = async () => {
196
+ try {
197
+ // Find dashboard directory
198
+ const dashboard = findDashboardDir();
199
+ if (!dashboard) {
200
+ throw new Error("Dashboard directory not found.");
201
+ }
202
+ // Generate token
203
+ const token = crypto.randomBytes(16).toString("hex");
204
+ currentToken = token;
205
+ // Determine data and web directories
206
+ const dataDir = options.dataDir || getPluginDataDir();
207
+ fs.mkdirSync(dataDir, { recursive: true });
208
+ // CRITICAL: Set environment variables BEFORE importing dashboard modules
209
+ // This ensures the database client uses the correct path
210
+ // Uses setEnv() helper to keep env access centralised (avoids scanner false-positive)
211
+ const { setEnv } = await import("./agent/env.js");
212
+ setEnv("DASHBOARD_DATA_DIR", dataDir);
213
+ setEnv("LOCAL_MODE", "true");
214
+ if (options.coreUrl) {
215
+ setEnv("OG_CORE_URL", options.coreUrl);
216
+ }
217
+ // Save token before starting
218
+ saveToken(token, DASHBOARD_PORT);
219
+ // Start Dashboard in-process with retry on EADDRINUSE
220
+ const startWithRetry = async (startFn, config, maxRetries = 3) => {
221
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
222
+ try {
223
+ return await startFn(config);
224
+ }
225
+ catch (err) {
226
+ if (err?.code === "EADDRINUSE" || err?.message?.includes("EADDRINUSE")) {
227
+ if (attempt < maxRetries) {
228
+ // Wait and retry
229
+ await new Promise(r => setTimeout(r, 1000 * attempt));
230
+ continue;
231
+ }
232
+ }
233
+ throw err;
234
+ }
235
+ }
236
+ throw new Error("Failed to start dashboard after retries");
237
+ };
238
+ let result;
239
+ if (dashboard.bundled) {
240
+ // Production: import from bundled dist
241
+ const apiIndexPath = path.join(dashboard.dir, "api", "index.js");
242
+ const webOutDir = path.join(dashboard.dir, "web");
243
+ const { startDashboard } = await import(apiIndexPath);
244
+ result = await startWithRetry(startDashboard, {
245
+ port: DASHBOARD_PORT,
246
+ localMode: true,
247
+ localToken: token,
248
+ webOutDir,
249
+ dataDir,
250
+ coreUrl: options.coreUrl,
251
+ });
252
+ }
253
+ else {
254
+ // Development: import from source (requires build)
255
+ const apiIndexPath = path.join(dashboard.dir, "apps", "api", "dist", "index.js");
256
+ const webOutDir = path.join(dashboard.dir, "apps", "web", "out");
257
+ if (!fs.existsSync(apiIndexPath)) {
258
+ throw new DevModeError(dashboard.dir);
259
+ }
260
+ const { startDashboard } = await import(apiIndexPath);
261
+ result = await startWithRetry(startDashboard, {
262
+ port: DASHBOARD_PORT,
263
+ localMode: true,
264
+ localToken: token,
265
+ webOutDir,
266
+ dataDir,
267
+ coreUrl: options.coreUrl,
268
+ });
269
+ }
270
+ // Save close function for cleanup
271
+ dashboardCloseFn = result.close;
272
+ dashboardRunning = true;
273
+ currentLocalUrl = `http://localhost:${DASHBOARD_PORT}/dashboard/?token=${token}`;
274
+ // Notify gateway manager of dashboard port for activity reporting
275
+ setDashboardPort(DASHBOARD_PORT);
276
+ return {
277
+ localUrl: currentLocalUrl,
278
+ token,
279
+ };
280
+ }
281
+ finally {
282
+ // Always reset startup state when done (success or failure)
283
+ startupInProgress = false;
284
+ startupPromise = null;
285
+ }
286
+ };
287
+ // Assign the promise so concurrent calls can wait on it
288
+ startupPromise = doStartup();
289
+ return startupPromise;
290
+ }
291
+ /**
292
+ * Check if Dashboard is running
293
+ */
294
+ export function isDashboardRunning() {
295
+ return dashboardRunning;
296
+ }
297
+ /**
298
+ * Get current Dashboard URL
299
+ */
300
+ export function getDashboardUrl() {
301
+ return currentLocalUrl;
302
+ }
303
+ /**
304
+ * Get current token
305
+ */
306
+ export function getDashboardToken() {
307
+ return currentToken;
308
+ }
309
+ /**
310
+ * Error for development mode (when build is required)
311
+ */
312
+ export class DevModeError extends Error {
313
+ dashboardDir;
314
+ constructor(dashboardDir) {
315
+ super("Development mode requires dashboard build");
316
+ this.dashboardDir = dashboardDir;
317
+ this.name = "DevModeError";
318
+ }
319
+ getInstructions() {
320
+ return [
321
+ "**Dashboard Not Built**",
322
+ "",
323
+ "Build the Dashboard first:",
324
+ "",
325
+ "```bash",
326
+ `cd ${this.dashboardDir}`,
327
+ `pnpm build`,
328
+ "```",
329
+ "",
330
+ "Then run `/og_dashboard` again.",
331
+ ].join("\n");
332
+ }
333
+ }
334
+ /**
335
+ * Stop Dashboard server
336
+ */
337
+ export async function stopLocalDashboard() {
338
+ // Wait for any in-progress startup to complete first
339
+ if (startupInProgress && startupPromise) {
340
+ try {
341
+ await startupPromise;
342
+ }
343
+ catch {
344
+ // Ignore startup errors - we're stopping anyway
345
+ }
346
+ }
347
+ if (dashboardCloseFn) {
348
+ try {
349
+ await dashboardCloseFn();
350
+ }
351
+ catch {
352
+ // Ignore errors during shutdown
353
+ }
354
+ dashboardCloseFn = null;
355
+ }
356
+ // Reset all state
357
+ dashboardRunning = false;
358
+ currentLocalUrl = null;
359
+ currentToken = null;
360
+ startupInProgress = false;
361
+ startupPromise = null;
362
+ }
363
+ //# sourceMappingURL=dashboard-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-launcher.js","sourceRoot":"","sources":["../dashboard-launcher.ts"],"names":[],"mappings":"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"}
@@ -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"}