spidersan 0.20.1 → 0.20.2

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 (310) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/bin/command-registry.d.ts +25 -0
  3. package/dist/bin/command-registry.d.ts.map +1 -0
  4. package/dist/bin/command-registry.js +29 -0
  5. package/dist/bin/command-registry.js.map +1 -0
  6. package/dist/bin/spidersan.d.ts +16 -0
  7. package/dist/bin/spidersan.d.ts.map +1 -0
  8. package/dist/bin/spidersan.js +98 -0
  9. package/dist/bin/spidersan.js.map +1 -0
  10. package/dist/commands/abandon.d.ts +8 -0
  11. package/dist/commands/abandon.d.ts.map +1 -0
  12. package/dist/commands/abandon.js +43 -0
  13. package/dist/commands/abandon.js.map +1 -0
  14. package/dist/commands/cleanup.d.ts +8 -0
  15. package/dist/commands/cleanup.d.ts.map +1 -0
  16. package/dist/commands/cleanup.js +50 -0
  17. package/dist/commands/cleanup.js.map +1 -0
  18. package/dist/commands/config.d.ts +15 -0
  19. package/dist/commands/config.d.ts.map +1 -0
  20. package/dist/commands/config.js +309 -0
  21. package/dist/commands/config.js.map +1 -0
  22. package/dist/commands/conflicts.d.ts +34 -0
  23. package/dist/commands/conflicts.d.ts.map +1 -0
  24. package/dist/commands/conflicts.js +773 -0
  25. package/dist/commands/conflicts.js.map +1 -0
  26. package/dist/commands/context.d.ts +8 -0
  27. package/dist/commands/context.d.ts.map +1 -0
  28. package/dist/commands/context.js +104 -0
  29. package/dist/commands/context.js.map +1 -0
  30. package/dist/commands/cross-conflicts.d.ts +17 -0
  31. package/dist/commands/cross-conflicts.d.ts.map +1 -0
  32. package/dist/commands/cross-conflicts.js +273 -0
  33. package/dist/commands/cross-conflicts.js.map +1 -0
  34. package/dist/commands/depends.d.ts +11 -0
  35. package/dist/commands/depends.d.ts.map +1 -0
  36. package/dist/commands/depends.js +63 -0
  37. package/dist/commands/depends.js.map +1 -0
  38. package/dist/commands/doctor.d.ts +30 -0
  39. package/dist/commands/doctor.d.ts.map +1 -0
  40. package/dist/commands/doctor.js +558 -0
  41. package/dist/commands/doctor.js.map +1 -0
  42. package/dist/commands/git-watch.d.ts +24 -0
  43. package/dist/commands/git-watch.d.ts.map +1 -0
  44. package/dist/commands/git-watch.js +84 -0
  45. package/dist/commands/git-watch.js.map +1 -0
  46. package/dist/commands/github-sync.d.ts +42 -0
  47. package/dist/commands/github-sync.d.ts.map +1 -0
  48. package/dist/commands/github-sync.js +191 -0
  49. package/dist/commands/github-sync.js.map +1 -0
  50. package/dist/commands/index.d.ts +25 -0
  51. package/dist/commands/index.d.ts.map +1 -0
  52. package/dist/commands/index.js +29 -0
  53. package/dist/commands/index.js.map +1 -0
  54. package/dist/commands/init.d.ts +8 -0
  55. package/dist/commands/init.d.ts.map +1 -0
  56. package/dist/commands/init.js +23 -0
  57. package/dist/commands/init.js.map +1 -0
  58. package/dist/commands/list.d.ts +3 -0
  59. package/dist/commands/list.d.ts.map +1 -0
  60. package/dist/commands/list.js +45 -0
  61. package/dist/commands/list.js.map +1 -0
  62. package/dist/commands/log.d.ts +7 -0
  63. package/dist/commands/log.d.ts.map +1 -0
  64. package/dist/commands/log.js +110 -0
  65. package/dist/commands/log.js.map +1 -0
  66. package/dist/commands/merge-order.d.ts +9 -0
  67. package/dist/commands/merge-order.d.ts.map +1 -0
  68. package/dist/commands/merge-order.js +100 -0
  69. package/dist/commands/merge-order.js.map +1 -0
  70. package/dist/commands/merged.d.ts +8 -0
  71. package/dist/commands/merged.d.ts.map +1 -0
  72. package/dist/commands/merged.js +37 -0
  73. package/dist/commands/merged.js.map +1 -0
  74. package/dist/commands/pr-check.d.ts +24 -0
  75. package/dist/commands/pr-check.d.ts.map +1 -0
  76. package/dist/commands/pr-check.js +85 -0
  77. package/dist/commands/pr-check.js.map +1 -0
  78. package/dist/commands/ready-check.d.ts +11 -0
  79. package/dist/commands/ready-check.d.ts.map +1 -0
  80. package/dist/commands/ready-check.js +150 -0
  81. package/dist/commands/ready-check.js.map +1 -0
  82. package/dist/commands/rebase-helper.d.ts +3 -0
  83. package/dist/commands/rebase-helper.d.ts.map +1 -0
  84. package/dist/commands/rebase-helper.js +52 -0
  85. package/dist/commands/rebase-helper.js.map +1 -0
  86. package/dist/commands/register.d.ts +10 -0
  87. package/dist/commands/register.d.ts.map +1 -0
  88. package/dist/commands/register.js +176 -0
  89. package/dist/commands/register.js.map +1 -0
  90. package/dist/commands/registry-sync.d.ts +9 -0
  91. package/dist/commands/registry-sync.d.ts.map +1 -0
  92. package/dist/commands/registry-sync.js +129 -0
  93. package/dist/commands/registry-sync.js.map +1 -0
  94. package/dist/commands/stale.d.ts +17 -0
  95. package/dist/commands/stale.d.ts.map +1 -0
  96. package/dist/commands/stale.js +136 -0
  97. package/dist/commands/stale.js.map +1 -0
  98. package/dist/commands/sync.d.ts +21 -0
  99. package/dist/commands/sync.d.ts.map +1 -0
  100. package/dist/commands/sync.js +78 -0
  101. package/dist/commands/sync.js.map +1 -0
  102. package/dist/commands/verify-trunk.d.ts +18 -0
  103. package/dist/commands/verify-trunk.d.ts.map +1 -0
  104. package/dist/commands/verify-trunk.js +77 -0
  105. package/dist/commands/verify-trunk.js.map +1 -0
  106. package/dist/commands/watch.d.ts +8 -0
  107. package/dist/commands/watch.d.ts.map +1 -0
  108. package/dist/commands/watch.js +509 -0
  109. package/dist/commands/watch.js.map +1 -0
  110. package/dist/index.d.ts +8 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +8 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/lib/activity.d.ts +53 -0
  115. package/dist/lib/activity.d.ts.map +1 -0
  116. package/dist/lib/activity.js +271 -0
  117. package/dist/lib/activity.js.map +1 -0
  118. package/dist/lib/agent-errors.d.ts +41 -0
  119. package/dist/lib/agent-errors.d.ts.map +1 -0
  120. package/dist/lib/agent-errors.js +145 -0
  121. package/dist/lib/agent-errors.js.map +1 -0
  122. package/dist/lib/ai/context-builder.d.ts +16 -0
  123. package/dist/lib/ai/context-builder.d.ts.map +1 -0
  124. package/dist/lib/ai/context-builder.js +229 -0
  125. package/dist/lib/ai/context-builder.js.map +1 -0
  126. package/dist/lib/ai/event-handler.d.ts +21 -0
  127. package/dist/lib/ai/event-handler.d.ts.map +1 -0
  128. package/dist/lib/ai/event-handler.js +111 -0
  129. package/dist/lib/ai/event-handler.js.map +1 -0
  130. package/dist/lib/ai/index.d.ts +13 -0
  131. package/dist/lib/ai/index.d.ts.map +1 -0
  132. package/dist/lib/ai/index.js +11 -0
  133. package/dist/lib/ai/index.js.map +1 -0
  134. package/dist/lib/ai/llm-client.d.ts +37 -0
  135. package/dist/lib/ai/llm-client.d.ts.map +1 -0
  136. package/dist/lib/ai/llm-client.js +225 -0
  137. package/dist/lib/ai/llm-client.js.map +1 -0
  138. package/dist/lib/ai/reasoner.d.ts +11 -0
  139. package/dist/lib/ai/reasoner.d.ts.map +1 -0
  140. package/dist/lib/ai/reasoner.js +227 -0
  141. package/dist/lib/ai/reasoner.js.map +1 -0
  142. package/dist/lib/ai/setup.d.ts +40 -0
  143. package/dist/lib/ai/setup.d.ts.map +1 -0
  144. package/dist/lib/ai/setup.js +154 -0
  145. package/dist/lib/ai/setup.js.map +1 -0
  146. package/dist/lib/ai/types.d.ts +135 -0
  147. package/dist/lib/ai/types.d.ts.map +1 -0
  148. package/dist/lib/ai/types.js +42 -0
  149. package/dist/lib/ai/types.js.map +1 -0
  150. package/dist/lib/ast.d.ts +44 -0
  151. package/dist/lib/ast.d.ts.map +1 -0
  152. package/dist/lib/ast.js +160 -0
  153. package/dist/lib/ast.js.map +1 -0
  154. package/dist/lib/carries.d.ts +22 -0
  155. package/dist/lib/carries.d.ts.map +1 -0
  156. package/dist/lib/carries.js +56 -0
  157. package/dist/lib/carries.js.map +1 -0
  158. package/dist/lib/colony-subscriber.d.ts +56 -0
  159. package/dist/lib/colony-subscriber.d.ts.map +1 -0
  160. package/dist/lib/colony-subscriber.js +265 -0
  161. package/dist/lib/colony-subscriber.js.map +1 -0
  162. package/dist/lib/config.d.ts +62 -0
  163. package/dist/lib/config.d.ts.map +1 -0
  164. package/dist/lib/config.js +235 -0
  165. package/dist/lib/config.js.map +1 -0
  166. package/dist/lib/conflict-analyzer.d.ts +33 -0
  167. package/dist/lib/conflict-analyzer.d.ts.map +1 -0
  168. package/dist/lib/conflict-analyzer.js +114 -0
  169. package/dist/lib/conflict-analyzer.js.map +1 -0
  170. package/dist/lib/conflict-renderer.d.ts +7 -0
  171. package/dist/lib/conflict-renderer.d.ts.map +1 -0
  172. package/dist/lib/conflict-renderer.js +145 -0
  173. package/dist/lib/conflict-renderer.js.map +1 -0
  174. package/dist/lib/conflict-tier.d.ts +20 -0
  175. package/dist/lib/conflict-tier.d.ts.map +1 -0
  176. package/dist/lib/conflict-tier.js +49 -0
  177. package/dist/lib/conflict-tier.js.map +1 -0
  178. package/dist/lib/crypto.d.ts +71 -0
  179. package/dist/lib/crypto.d.ts.map +1 -0
  180. package/dist/lib/crypto.js +176 -0
  181. package/dist/lib/crypto.js.map +1 -0
  182. package/dist/lib/ecosystem-env.d.ts +33 -0
  183. package/dist/lib/ecosystem-env.d.ts.map +1 -0
  184. package/dist/lib/ecosystem-env.js +62 -0
  185. package/dist/lib/ecosystem-env.js.map +1 -0
  186. package/dist/lib/errors.d.ts +35 -0
  187. package/dist/lib/errors.d.ts.map +1 -0
  188. package/dist/lib/errors.js +71 -0
  189. package/dist/lib/errors.js.map +1 -0
  190. package/dist/lib/git-events-subscriber.d.ts +86 -0
  191. package/dist/lib/git-events-subscriber.d.ts.map +1 -0
  192. package/dist/lib/git-events-subscriber.js +870 -0
  193. package/dist/lib/git-events-subscriber.js.map +1 -0
  194. package/dist/lib/git-merge-analyzer.d.ts +38 -0
  195. package/dist/lib/git-merge-analyzer.d.ts.map +1 -0
  196. package/dist/lib/git-merge-analyzer.js +23 -0
  197. package/dist/lib/git-merge-analyzer.js.map +1 -0
  198. package/dist/lib/git.d.ts +103 -0
  199. package/dist/lib/git.d.ts.map +1 -0
  200. package/dist/lib/git.js +670 -0
  201. package/dist/lib/git.js.map +1 -0
  202. package/dist/lib/github.d.ts +151 -0
  203. package/dist/lib/github.d.ts.map +1 -0
  204. package/dist/lib/github.js +425 -0
  205. package/dist/lib/github.js.map +1 -0
  206. package/dist/lib/graph.d.ts +38 -0
  207. package/dist/lib/graph.d.ts.map +1 -0
  208. package/dist/lib/graph.js +165 -0
  209. package/dist/lib/graph.js.map +1 -0
  210. package/dist/lib/machine.d.ts +14 -0
  211. package/dist/lib/machine.d.ts.map +1 -0
  212. package/dist/lib/machine.js +38 -0
  213. package/dist/lib/machine.js.map +1 -0
  214. package/dist/lib/notify.d.ts +68 -0
  215. package/dist/lib/notify.d.ts.map +1 -0
  216. package/dist/lib/notify.js +111 -0
  217. package/dist/lib/notify.js.map +1 -0
  218. package/dist/lib/outline.d.ts +6 -0
  219. package/dist/lib/outline.d.ts.map +1 -0
  220. package/dist/lib/outline.js +60 -0
  221. package/dist/lib/outline.js.map +1 -0
  222. package/dist/lib/push-registry.d.ts +22 -0
  223. package/dist/lib/push-registry.d.ts.map +1 -0
  224. package/dist/lib/push-registry.js +21 -0
  225. package/dist/lib/push-registry.js.map +1 -0
  226. package/dist/lib/reconcile.d.ts +100 -0
  227. package/dist/lib/reconcile.d.ts.map +1 -0
  228. package/dist/lib/reconcile.js +121 -0
  229. package/dist/lib/reconcile.js.map +1 -0
  230. package/dist/lib/regex-utils.d.ts +6 -0
  231. package/dist/lib/regex-utils.d.ts.map +1 -0
  232. package/dist/lib/regex-utils.js +24 -0
  233. package/dist/lib/regex-utils.js.map +1 -0
  234. package/dist/lib/register-renderer.d.ts +10 -0
  235. package/dist/lib/register-renderer.d.ts.map +1 -0
  236. package/dist/lib/register-renderer.js +19 -0
  237. package/dist/lib/register-renderer.js.map +1 -0
  238. package/dist/lib/remote-drift.d.ts +61 -0
  239. package/dist/lib/remote-drift.d.ts.map +1 -0
  240. package/dist/lib/remote-drift.js +227 -0
  241. package/dist/lib/remote-drift.js.map +1 -0
  242. package/dist/lib/security.d.ts +72 -0
  243. package/dist/lib/security.d.ts.map +1 -0
  244. package/dist/lib/security.js +180 -0
  245. package/dist/lib/security.js.map +1 -0
  246. package/dist/lib/semantic-analysis.d.ts +31 -0
  247. package/dist/lib/semantic-analysis.d.ts.map +1 -0
  248. package/dist/lib/semantic-analysis.js +120 -0
  249. package/dist/lib/semantic-analysis.js.map +1 -0
  250. package/dist/lib/supabase-credentials.d.ts +36 -0
  251. package/dist/lib/supabase-credentials.d.ts.map +1 -0
  252. package/dist/lib/supabase-credentials.js +43 -0
  253. package/dist/lib/supabase-credentials.js.map +1 -0
  254. package/dist/lib/trunk.d.ts +39 -0
  255. package/dist/lib/trunk.d.ts.map +1 -0
  256. package/dist/lib/trunk.js +116 -0
  257. package/dist/lib/trunk.js.map +1 -0
  258. package/dist/lib/update-check.d.ts +11 -0
  259. package/dist/lib/update-check.d.ts.map +1 -0
  260. package/dist/lib/update-check.js +113 -0
  261. package/dist/lib/update-check.js.map +1 -0
  262. package/dist/lib/watch-renderer.d.ts +13 -0
  263. package/dist/lib/watch-renderer.d.ts.map +1 -0
  264. package/dist/lib/watch-renderer.js +35 -0
  265. package/dist/lib/watch-renderer.js.map +1 -0
  266. package/dist/storage/adapter.d.ts +81 -0
  267. package/dist/storage/adapter.d.ts.map +1 -0
  268. package/dist/storage/adapter.js +8 -0
  269. package/dist/storage/adapter.js.map +1 -0
  270. package/dist/storage/branch-registry-store.d.ts +13 -0
  271. package/dist/storage/branch-registry-store.d.ts.map +1 -0
  272. package/dist/storage/branch-registry-store.js +2 -0
  273. package/dist/storage/branch-registry-store.js.map +1 -0
  274. package/dist/storage/factory.d.ts +6 -0
  275. package/dist/storage/factory.d.ts.map +1 -0
  276. package/dist/storage/factory.js +14 -0
  277. package/dist/storage/factory.js.map +1 -0
  278. package/dist/storage/index.d.ts +10 -0
  279. package/dist/storage/index.d.ts.map +1 -0
  280. package/dist/storage/index.js +11 -0
  281. package/dist/storage/index.js.map +1 -0
  282. package/dist/storage/json-branch-registry-store.d.ts +19 -0
  283. package/dist/storage/json-branch-registry-store.d.ts.map +1 -0
  284. package/dist/storage/json-branch-registry-store.js +138 -0
  285. package/dist/storage/json-branch-registry-store.js.map +1 -0
  286. package/dist/storage/local.d.ts +20 -0
  287. package/dist/storage/local.d.ts.map +1 -0
  288. package/dist/storage/local.js +40 -0
  289. package/dist/storage/local.js.map +1 -0
  290. package/dist/storage/memory-branch-registry-store.d.ts +16 -0
  291. package/dist/storage/memory-branch-registry-store.d.ts.map +1 -0
  292. package/dist/storage/memory-branch-registry-store.js +68 -0
  293. package/dist/storage/memory-branch-registry-store.js.map +1 -0
  294. package/dist/storage/supabase-registry-sync-client-impl.d.ts +40 -0
  295. package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -0
  296. package/dist/storage/supabase-registry-sync-client-impl.js +278 -0
  297. package/dist/storage/supabase-registry-sync-client-impl.js.map +1 -0
  298. package/dist/storage/supabase-registry-sync-client.d.ts +9 -0
  299. package/dist/storage/supabase-registry-sync-client.d.ts.map +1 -0
  300. package/dist/storage/supabase-registry-sync-client.js +2 -0
  301. package/dist/storage/supabase-registry-sync-client.js.map +1 -0
  302. package/dist/storage/supabase.d.ts +28 -0
  303. package/dist/storage/supabase.d.ts.map +1 -0
  304. package/dist/storage/supabase.js +56 -0
  305. package/dist/storage/supabase.js.map +1 -0
  306. package/dist/types/cloud.d.ts +102 -0
  307. package/dist/types/cloud.d.ts.map +1 -0
  308. package/dist/types/cloud.js +13 -0
  309. package/dist/types/cloud.js.map +1 -0
  310. package/package.json +1 -1
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Spidersan - Branch coordination for AI coding agents
3
+ */
4
+ export * from './storage/index.js';
5
+ export * from './commands/index.js';
6
+ export * from './lib/ast.js';
7
+ export * from './lib/security.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,53 @@
1
+ export type ActivityEvent = 'register' | 'merge' | 'abandon' | 'conflict_detected' | 'sync' | 'cleanup' | 'ready_check_pass' | 'ready_check_fail' | 'session_start' | 'session_end';
2
+ export interface ActivityRecord {
3
+ id: string;
4
+ repo: string;
5
+ branch: string | null;
6
+ agent: string | null;
7
+ machine: string | null;
8
+ event: ActivityEvent;
9
+ details: Record<string, unknown>;
10
+ created_at: string;
11
+ }
12
+ export interface LogActivityInput {
13
+ repo?: string;
14
+ branch?: string;
15
+ agent?: string;
16
+ machine?: string;
17
+ event: ActivityEvent;
18
+ details?: Record<string, unknown>;
19
+ createdAt?: Date;
20
+ }
21
+ export interface ActivityQuery {
22
+ branch?: string;
23
+ agent?: string;
24
+ repo?: string;
25
+ since?: Date;
26
+ limit?: number;
27
+ }
28
+ export interface ActivityQueryResult {
29
+ source: 'supabase' | 'local';
30
+ records: ActivityRecord[];
31
+ }
32
+ export interface ActivityFlushResult {
33
+ pending: number;
34
+ flushed: number;
35
+ remaining: number;
36
+ source: 'supabase' | 'local';
37
+ }
38
+ interface ActivityRuntime {
39
+ activityFilePath?: string;
40
+ flushStatePath?: string;
41
+ supabaseUrl?: string;
42
+ supabaseKey?: string;
43
+ fetchImpl?: typeof fetch;
44
+ now?: () => Date;
45
+ uuid?: () => string;
46
+ cwd?: string;
47
+ }
48
+ export declare function parseSince(input?: string, now?: Date): Date;
49
+ export declare function logActivity(input: LogActivityInput, runtime?: ActivityRuntime): ActivityRecord;
50
+ export declare function flushActivityLog(runtime?: ActivityRuntime): Promise<ActivityFlushResult>;
51
+ export declare function queryActivityLog(query: ActivityQuery, runtime?: ActivityRuntime): Promise<ActivityQueryResult>;
52
+ export {};
53
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/lib/activity.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,aAAa,GACnB,UAAU,GACV,OAAO,GACP,SAAS,GACT,mBAAmB,GACnB,MAAM,GACN,SAAS,GACT,kBAAkB,GAClB,kBAAkB,GAClB,eAAe,GACf,aAAa,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAC7B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;CAChC;AAMD,UAAU,eAAe;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAgJD,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI,CAwBvE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,GAAE,eAAoB,GAAG,cAAc,CAYlG;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2ClG;AAwDD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAQxH"}
@@ -0,0 +1,271 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
3
+ import { basename, dirname, join } from 'path';
4
+ import { homedir, hostname } from 'os';
5
+ import { resolveSupabaseEnv } from './supabase-credentials.js';
6
+ const DEFAULT_ACTIVITY_DIR = join(homedir(), '.spidersan');
7
+ const DEFAULT_ACTIVITY_FILE = join(DEFAULT_ACTIVITY_DIR, 'activity.jsonl');
8
+ const DEFAULT_FLUSH_STATE_FILE = join(DEFAULT_ACTIVITY_DIR, 'activity.flush.json');
9
+ const DEFAULT_LIMIT = 200;
10
+ const SUPABASE_BATCH_SIZE = 100;
11
+ function resolveActivityFilePath(runtime = {}) {
12
+ return runtime.activityFilePath || DEFAULT_ACTIVITY_FILE;
13
+ }
14
+ function resolveFlushStatePath(runtime = {}) {
15
+ return runtime.flushStatePath || DEFAULT_FLUSH_STATE_FILE;
16
+ }
17
+ function ensureParentDir(filePath) {
18
+ const dir = dirname(filePath);
19
+ if (!existsSync(dir)) {
20
+ mkdirSync(dir, { recursive: true });
21
+ }
22
+ }
23
+ function safeParseJson(raw) {
24
+ try {
25
+ return JSON.parse(raw);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ function resolveRepoName(cwd) {
32
+ return basename(cwd);
33
+ }
34
+ function resolveSupabaseConfig(runtime = {}) {
35
+ // Injected runtime config still wins; env resolution is shared so the
36
+ // scoped SPIDERSAN_SUPABASE_* names are honoured here too (tb-ly0b).
37
+ const env = resolveSupabaseEnv();
38
+ const url = runtime.supabaseUrl || env.url;
39
+ const key = runtime.supabaseKey || env.key;
40
+ if (!url || !key)
41
+ return null;
42
+ return { url, key };
43
+ }
44
+ function normalizeRecord(raw) {
45
+ if (!raw.id || !raw.repo || !raw.event || !raw.created_at) {
46
+ return null;
47
+ }
48
+ const details = typeof raw.details === 'object' && raw.details !== null
49
+ ? raw.details
50
+ : {};
51
+ return {
52
+ id: String(raw.id),
53
+ repo: String(raw.repo),
54
+ branch: raw.branch ? String(raw.branch) : null,
55
+ agent: raw.agent ? String(raw.agent) : null,
56
+ machine: raw.machine ? String(raw.machine) : null,
57
+ event: raw.event,
58
+ details,
59
+ created_at: String(raw.created_at),
60
+ };
61
+ }
62
+ function readLocalRecords(runtime = {}) {
63
+ const activityFilePath = resolveActivityFilePath(runtime);
64
+ if (!existsSync(activityFilePath))
65
+ return [];
66
+ const content = readFileSync(activityFilePath, 'utf-8');
67
+ const records = [];
68
+ for (const line of content.split('\n')) {
69
+ if (!line.trim())
70
+ continue;
71
+ const parsed = safeParseJson(line);
72
+ if (!parsed)
73
+ continue;
74
+ const normalized = normalizeRecord(parsed);
75
+ if (normalized) {
76
+ records.push(normalized);
77
+ }
78
+ }
79
+ return records;
80
+ }
81
+ function readFlushState(runtime = {}) {
82
+ const flushStatePath = resolveFlushStatePath(runtime);
83
+ if (!existsSync(flushStatePath)) {
84
+ return { lastFlushedLine: 0 };
85
+ }
86
+ const parsed = safeParseJson(readFileSync(flushStatePath, 'utf-8'));
87
+ if (!parsed || typeof parsed.lastFlushedLine !== 'number' || parsed.lastFlushedLine < 0) {
88
+ return { lastFlushedLine: 0 };
89
+ }
90
+ return { lastFlushedLine: parsed.lastFlushedLine };
91
+ }
92
+ function writeFlushState(state, runtime = {}) {
93
+ const flushStatePath = resolveFlushStatePath(runtime);
94
+ ensureParentDir(flushStatePath);
95
+ writeFileSync(flushStatePath, JSON.stringify(state, null, 2) + '\n', 'utf-8');
96
+ }
97
+ function buildRecord(input, runtime = {}) {
98
+ const now = (runtime.now || (() => new Date()))();
99
+ const cwd = runtime.cwd || process.cwd();
100
+ return {
101
+ id: (runtime.uuid || randomUUID)(),
102
+ repo: input.repo || resolveRepoName(cwd),
103
+ branch: input.branch || null,
104
+ agent: input.agent || null,
105
+ machine: input.machine || process.env.SPIDERSAN_MACHINE_ID || process.env.HOSTNAME || hostname(),
106
+ event: input.event,
107
+ details: input.details || {},
108
+ created_at: (input.createdAt || now).toISOString(),
109
+ };
110
+ }
111
+ async function pushToSupabase(records, runtime = {}) {
112
+ if (records.length === 0)
113
+ return;
114
+ const supabase = resolveSupabaseConfig(runtime);
115
+ if (!supabase) {
116
+ throw new Error('Supabase credentials are not configured');
117
+ }
118
+ const fetchImpl = runtime.fetchImpl || fetch;
119
+ const endpoint = `${supabase.url}/rest/v1/spider_activity_log?on_conflict=id`;
120
+ const response = await fetchImpl(endpoint, {
121
+ method: 'POST',
122
+ headers: {
123
+ 'apikey': supabase.key,
124
+ 'Authorization': `Bearer ${supabase.key}`,
125
+ 'Content-Type': 'application/json',
126
+ 'Prefer': 'resolution=ignore-duplicates,return=minimal',
127
+ },
128
+ body: JSON.stringify(records),
129
+ });
130
+ if (!response.ok) {
131
+ throw new Error(`Supabase activity write failed (${response.status})`);
132
+ }
133
+ }
134
+ export function parseSince(input, now = new Date()) {
135
+ if (!input) {
136
+ return new Date(now.getTime() - 24 * 60 * 60 * 1000);
137
+ }
138
+ const relative = input.trim().match(/^(\d+)\s*([mhdw])$/i);
139
+ if (relative) {
140
+ const value = parseInt(relative[1], 10);
141
+ const unit = relative[2].toLowerCase();
142
+ const multipliers = {
143
+ m: 60 * 1000,
144
+ h: 60 * 60 * 1000,
145
+ d: 24 * 60 * 60 * 1000,
146
+ w: 7 * 24 * 60 * 60 * 1000,
147
+ };
148
+ return new Date(now.getTime() - value * multipliers[unit]);
149
+ }
150
+ const parsed = new Date(input);
151
+ if (!Number.isNaN(parsed.getTime())) {
152
+ return parsed;
153
+ }
154
+ throw new Error(`Invalid --since value "${input}". Use 7d, 24h, 30m, or an ISO date.`);
155
+ }
156
+ export function logActivity(input, runtime = {}) {
157
+ const record = buildRecord(input, runtime);
158
+ const activityFilePath = resolveActivityFilePath(runtime);
159
+ ensureParentDir(activityFilePath);
160
+ appendFileSync(activityFilePath, JSON.stringify(record) + '\n', 'utf-8');
161
+ void pushToSupabase([record], runtime).catch(() => {
162
+ // Best-effort network write. Local JSONL remains canonical fallback queue.
163
+ });
164
+ return record;
165
+ }
166
+ export async function flushActivityLog(runtime = {}) {
167
+ const allRecords = readLocalRecords(runtime);
168
+ if (allRecords.length === 0) {
169
+ return { pending: 0, flushed: 0, remaining: 0, source: 'local' };
170
+ }
171
+ const state = readFlushState(runtime);
172
+ const start = Math.min(Math.max(state.lastFlushedLine, 0), allRecords.length);
173
+ const pending = allRecords.slice(start);
174
+ if (pending.length === 0) {
175
+ return { pending: 0, flushed: 0, remaining: 0, source: 'supabase' };
176
+ }
177
+ if (!resolveSupabaseConfig(runtime)) {
178
+ return {
179
+ pending: pending.length,
180
+ flushed: 0,
181
+ remaining: pending.length,
182
+ source: 'local',
183
+ };
184
+ }
185
+ let flushed = 0;
186
+ for (let i = 0; i < pending.length; i += SUPABASE_BATCH_SIZE) {
187
+ const batch = pending.slice(i, i + SUPABASE_BATCH_SIZE);
188
+ try {
189
+ await pushToSupabase(batch, runtime);
190
+ flushed += batch.length;
191
+ }
192
+ catch {
193
+ break;
194
+ }
195
+ }
196
+ if (flushed > 0) {
197
+ writeFlushState({ lastFlushedLine: start + flushed }, runtime);
198
+ }
199
+ return {
200
+ pending: pending.length,
201
+ flushed,
202
+ remaining: pending.length - flushed,
203
+ source: flushed > 0 ? 'supabase' : 'local',
204
+ };
205
+ }
206
+ function applyLocalFilters(records, query) {
207
+ return records
208
+ .filter((record) => {
209
+ if (query.repo && record.repo !== query.repo)
210
+ return false;
211
+ if (query.branch && record.branch !== query.branch)
212
+ return false;
213
+ if (query.agent && record.agent !== query.agent)
214
+ return false;
215
+ if (query.since && new Date(record.created_at).getTime() < query.since.getTime())
216
+ return false;
217
+ return true;
218
+ })
219
+ .sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime())
220
+ .slice(0, query.limit || DEFAULT_LIMIT);
221
+ }
222
+ async function querySupabase(query, runtime = {}) {
223
+ const supabase = resolveSupabaseConfig(runtime);
224
+ if (!supabase) {
225
+ throw new Error('Supabase credentials are not configured');
226
+ }
227
+ const params = new URLSearchParams();
228
+ params.set('select', 'id,repo,branch,agent,machine,event,details,created_at');
229
+ params.set('order', 'created_at.desc');
230
+ params.set('limit', String(query.limit || DEFAULT_LIMIT));
231
+ if (query.repo)
232
+ params.set('repo', `eq.${query.repo}`);
233
+ if (query.branch)
234
+ params.set('branch', `eq.${query.branch}`);
235
+ if (query.agent)
236
+ params.set('agent', `eq.${query.agent}`);
237
+ if (query.since)
238
+ params.set('created_at', `gte.${query.since.toISOString()}`);
239
+ const fetchImpl = runtime.fetchImpl || fetch;
240
+ const endpoint = `${supabase.url}/rest/v1/spider_activity_log?${params.toString()}`;
241
+ const response = await fetchImpl(endpoint, {
242
+ headers: {
243
+ 'apikey': supabase.key,
244
+ 'Authorization': `Bearer ${supabase.key}`,
245
+ 'Content-Type': 'application/json',
246
+ },
247
+ });
248
+ if (!response.ok) {
249
+ throw new Error(`Supabase query failed (${response.status})`);
250
+ }
251
+ const rows = await response.json();
252
+ const records = [];
253
+ for (const row of rows) {
254
+ const normalized = normalizeRecord(row);
255
+ if (normalized) {
256
+ records.push(normalized);
257
+ }
258
+ }
259
+ return records;
260
+ }
261
+ export async function queryActivityLog(query, runtime = {}) {
262
+ try {
263
+ const supabaseRecords = await querySupabase(query, runtime);
264
+ return { source: 'supabase', records: supabaseRecords };
265
+ }
266
+ catch {
267
+ const localRecords = applyLocalFilters(readLocalRecords(runtime), query);
268
+ return { source: 'local', records: localRecords };
269
+ }
270
+ }
271
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/lib/activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Shared Agent Error Logging Utility
3
+ *
4
+ * Logs errors to ~/.agent-errors/ with rotation.
5
+ * Used by all Treebird agents for centralized error tracking.
6
+ *
7
+ * @module agent-errors
8
+ */
9
+ export interface AgentError {
10
+ timestamp: string;
11
+ agent: string;
12
+ context: string;
13
+ error: string;
14
+ stack?: string;
15
+ metadata?: Record<string, unknown>;
16
+ }
17
+ /**
18
+ * Log an error to the agent errors directory
19
+ */
20
+ export declare function logAgentError(agent: string, context: string, error: Error | string, metadata?: Record<string, unknown>): void;
21
+ /**
22
+ * Read recent errors for an agent
23
+ */
24
+ export declare function readAgentErrors(agent: string, limit?: number): AgentError[];
25
+ /**
26
+ * Read all agent errors (summary)
27
+ */
28
+ export declare function getAllAgentErrors(limit?: number): Record<string, AgentError[]>;
29
+ /**
30
+ * Wrapper for MCP calls with error logging
31
+ */
32
+ export declare function withErrorLogging<T>(agent: string, context: string, fn: () => Promise<T>, metadata?: Record<string, unknown>): Promise<T>;
33
+ /**
34
+ * Get error log file path for an agent
35
+ */
36
+ export declare function getErrorLogPath(agent: string): string;
37
+ /**
38
+ * Clear all errors for an agent
39
+ */
40
+ export declare function clearAgentErrors(agent: string): boolean;
41
+ //# sourceMappingURL=agent-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-errors.d.ts","sourceRoot":"","sources":["../../src/lib/agent-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,WAAW,UAAU;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAqCD;;GAEG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GAAG,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,IAAI,CAsBN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,UAAU,EAAE,CAevE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,SAAI,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAkBzE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACpC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAUvD"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Shared Agent Error Logging Utility
3
+ *
4
+ * Logs errors to ~/.agent-errors/ with rotation.
5
+ * Used by all Treebird agents for centralized error tracking.
6
+ *
7
+ * @module agent-errors
8
+ */
9
+ import * as fs from 'fs';
10
+ import * as path from 'path';
11
+ import * as os from 'os';
12
+ import { validateAgentId } from './security.js';
13
+ const AGENT_ERRORS_DIR = path.join(os.homedir(), '.agent-errors');
14
+ const MAX_LOG_SIZE = 1024 * 1024; // 1MB per log file
15
+ const MAX_LOG_FILES = 10; // Keep 10 rotated files
16
+ /**
17
+ * Ensure the agent errors directory exists
18
+ */
19
+ function ensureErrorsDir() {
20
+ if (!fs.existsSync(AGENT_ERRORS_DIR)) {
21
+ fs.mkdirSync(AGENT_ERRORS_DIR, { recursive: true });
22
+ }
23
+ }
24
+ /**
25
+ * Rotate log file if it exceeds MAX_LOG_SIZE
26
+ */
27
+ function rotateLogIfNeeded(logPath) {
28
+ if (!fs.existsSync(logPath))
29
+ return;
30
+ const stats = fs.statSync(logPath);
31
+ if (stats.size < MAX_LOG_SIZE)
32
+ return;
33
+ // Rotate existing files
34
+ for (let i = MAX_LOG_FILES - 1; i >= 1; i--) {
35
+ const oldPath = `${logPath}.${i}`;
36
+ const newPath = `${logPath}.${i + 1}`;
37
+ if (fs.existsSync(oldPath)) {
38
+ if (i === MAX_LOG_FILES - 1) {
39
+ fs.unlinkSync(oldPath); // Delete oldest
40
+ }
41
+ else {
42
+ fs.renameSync(oldPath, newPath);
43
+ }
44
+ }
45
+ }
46
+ // Rotate current log
47
+ fs.renameSync(logPath, `${logPath}.1`);
48
+ }
49
+ /**
50
+ * Log an error to the agent errors directory
51
+ */
52
+ export function logAgentError(agent, context, error, metadata) {
53
+ try {
54
+ ensureErrorsDir();
55
+ const logPath = getErrorLogPath(agent);
56
+ rotateLogIfNeeded(logPath);
57
+ const entry = {
58
+ timestamp: new Date().toISOString(),
59
+ agent,
60
+ context,
61
+ error: error instanceof Error ? error.message : error,
62
+ stack: error instanceof Error ? error.stack : undefined,
63
+ metadata
64
+ };
65
+ const line = JSON.stringify(entry) + '\n';
66
+ fs.appendFileSync(logPath, line);
67
+ }
68
+ catch {
69
+ // Silently fail - don't let error logging cause more errors
70
+ console.error(`[agent-errors] Failed to log error for ${agent}`);
71
+ }
72
+ }
73
+ /**
74
+ * Read recent errors for an agent
75
+ */
76
+ export function readAgentErrors(agent, limit = 10) {
77
+ try {
78
+ const logPath = getErrorLogPath(agent);
79
+ if (!fs.existsSync(logPath))
80
+ return [];
81
+ const content = fs.readFileSync(logPath, 'utf-8');
82
+ const lines = content.trim().split('\n').filter(l => l);
83
+ return lines
84
+ .slice(-limit)
85
+ .map(line => JSON.parse(line))
86
+ .reverse();
87
+ }
88
+ catch {
89
+ return [];
90
+ }
91
+ }
92
+ /**
93
+ * Read all agent errors (summary)
94
+ */
95
+ export function getAllAgentErrors(limit = 5) {
96
+ try {
97
+ ensureErrorsDir();
98
+ const files = fs.readdirSync(AGENT_ERRORS_DIR)
99
+ .filter(f => f.endsWith('.log') && !f.includes('.log.'));
100
+ const result = {};
101
+ for (const file of files) {
102
+ const agent = file.replace('.log', '');
103
+ result[agent] = readAgentErrors(agent, limit);
104
+ }
105
+ return result;
106
+ }
107
+ catch {
108
+ return {};
109
+ }
110
+ }
111
+ /**
112
+ * Wrapper for MCP calls with error logging
113
+ */
114
+ export async function withErrorLogging(agent, context, fn, metadata) {
115
+ try {
116
+ return await fn();
117
+ }
118
+ catch (error) {
119
+ logAgentError(agent, context, error, metadata);
120
+ throw error;
121
+ }
122
+ }
123
+ /**
124
+ * Get error log file path for an agent
125
+ */
126
+ export function getErrorLogPath(agent) {
127
+ const safeAgent = validateAgentId(agent);
128
+ return path.join(AGENT_ERRORS_DIR, `${safeAgent}.log`);
129
+ }
130
+ /**
131
+ * Clear all errors for an agent
132
+ */
133
+ export function clearAgentErrors(agent) {
134
+ try {
135
+ const logPath = getErrorLogPath(agent);
136
+ if (fs.existsSync(logPath)) {
137
+ fs.unlinkSync(logPath);
138
+ }
139
+ return true;
140
+ }
141
+ catch {
142
+ return false;
143
+ }
144
+ }
145
+ //# sourceMappingURL=agent-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-errors.js","sourceRoot":"","sources":["../../src/lib/agent-errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Spidersan AI Core — Context Builder
3
+ *
4
+ * Aggregates context from all sources into structured SpiderContext.
5
+ * Uses storage adapter (not raw file reads) and pure functions (no CLI shelling).
6
+ * Each source is best-effort — failures are reported, not fatal.
7
+ */
8
+ import type { SpiderContext } from './types.js';
9
+ export interface BuildContextOptions {
10
+ repoRoot?: string;
11
+ includeActivity?: boolean;
12
+ includeDaily?: boolean;
13
+ verbose?: boolean;
14
+ }
15
+ export declare function buildContext(options?: BuildContextOptions): Promise<SpiderContext>;
16
+ //# sourceMappingURL=context-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../../src/lib/ai/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAGV,aAAa,EAGd,MAAM,YAAY,CAAC;AAUpB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA2ND,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmD5F"}