heyio 3.3.5 → 4.0.0

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 (289) hide show
  1. package/CODE_OF_CONDUCT.md +83 -0
  2. package/LICENSE +21 -0
  3. package/README.md +203 -151
  4. package/dist/daemon/cli.js +7153 -0
  5. package/dist/daemon/index.js +6421 -0
  6. package/dist/web/assets/index-CbptHIYU.js +520 -0
  7. package/{public → dist/web}/index.html +1 -1
  8. package/package.json +45 -48
  9. package/dist/api/middleware/auth.d.ts +0 -14
  10. package/dist/api/middleware/auth.d.ts.map +0 -1
  11. package/dist/api/middleware/auth.js +0 -130
  12. package/dist/api/middleware/auth.js.map +0 -1
  13. package/dist/api/notifications.d.ts +0 -14
  14. package/dist/api/notifications.d.ts.map +0 -1
  15. package/dist/api/notifications.js +0 -114
  16. package/dist/api/notifications.js.map +0 -1
  17. package/dist/api/routes/activity.d.ts +0 -3
  18. package/dist/api/routes/activity.d.ts.map +0 -1
  19. package/dist/api/routes/activity.js +0 -28
  20. package/dist/api/routes/activity.js.map +0 -1
  21. package/dist/api/routes/attachments.d.ts +0 -3
  22. package/dist/api/routes/attachments.d.ts.map +0 -1
  23. package/dist/api/routes/attachments.js +0 -83
  24. package/dist/api/routes/attachments.js.map +0 -1
  25. package/dist/api/routes/config.d.ts +0 -3
  26. package/dist/api/routes/config.d.ts.map +0 -1
  27. package/dist/api/routes/config.js +0 -107
  28. package/dist/api/routes/config.js.map +0 -1
  29. package/dist/api/routes/conversations.d.ts +0 -3
  30. package/dist/api/routes/conversations.d.ts.map +0 -1
  31. package/dist/api/routes/conversations.js +0 -25
  32. package/dist/api/routes/conversations.js.map +0 -1
  33. package/dist/api/routes/health.d.ts +0 -3
  34. package/dist/api/routes/health.d.ts.map +0 -1
  35. package/dist/api/routes/health.js +0 -39
  36. package/dist/api/routes/health.js.map +0 -1
  37. package/dist/api/routes/inbox.d.ts +0 -3
  38. package/dist/api/routes/inbox.d.ts.map +0 -1
  39. package/dist/api/routes/inbox.js +0 -139
  40. package/dist/api/routes/inbox.js.map +0 -1
  41. package/dist/api/routes/schedules.d.ts +0 -3
  42. package/dist/api/routes/schedules.d.ts.map +0 -1
  43. package/dist/api/routes/schedules.js +0 -116
  44. package/dist/api/routes/schedules.js.map +0 -1
  45. package/dist/api/routes/skills.d.ts +0 -2
  46. package/dist/api/routes/skills.d.ts.map +0 -1
  47. package/dist/api/routes/skills.js +0 -127
  48. package/dist/api/routes/skills.js.map +0 -1
  49. package/dist/api/routes/squads.d.ts +0 -3
  50. package/dist/api/routes/squads.d.ts.map +0 -1
  51. package/dist/api/routes/squads.js +0 -578
  52. package/dist/api/routes/squads.js.map +0 -1
  53. package/dist/api/routes/usage.d.ts +0 -3
  54. package/dist/api/routes/usage.d.ts.map +0 -1
  55. package/dist/api/routes/usage.js +0 -55
  56. package/dist/api/routes/usage.js.map +0 -1
  57. package/dist/api/routes/wiki.d.ts +0 -2
  58. package/dist/api/routes/wiki.d.ts.map +0 -1
  59. package/dist/api/routes/wiki.js +0 -75
  60. package/dist/api/routes/wiki.js.map +0 -1
  61. package/dist/api/server.d.ts +0 -7
  62. package/dist/api/server.d.ts.map +0 -1
  63. package/dist/api/server.js +0 -183
  64. package/dist/api/server.js.map +0 -1
  65. package/dist/config.d.ts +0 -3
  66. package/dist/config.d.ts.map +0 -1
  67. package/dist/config.js +0 -3
  68. package/dist/config.js.map +0 -1
  69. package/dist/copilot/client.d.ts +0 -5
  70. package/dist/copilot/client.d.ts.map +0 -1
  71. package/dist/copilot/client.js +0 -38
  72. package/dist/copilot/client.js.map +0 -1
  73. package/dist/copilot/health-monitor.d.ts +0 -14
  74. package/dist/copilot/health-monitor.d.ts.map +0 -1
  75. package/dist/copilot/health-monitor.js +0 -70
  76. package/dist/copilot/health-monitor.js.map +0 -1
  77. package/dist/copilot/orchestrator.d.ts +0 -5
  78. package/dist/copilot/orchestrator.d.ts.map +0 -1
  79. package/dist/copilot/orchestrator.js +0 -227
  80. package/dist/copilot/orchestrator.js.map +0 -1
  81. package/dist/copilot/tools.d.ts +0 -80
  82. package/dist/copilot/tools.d.ts.map +0 -1
  83. package/dist/copilot/tools.js +0 -1067
  84. package/dist/copilot/tools.js.map +0 -1
  85. package/dist/index.d.ts +0 -3
  86. package/dist/index.d.ts.map +0 -1
  87. package/dist/index.js +0 -94
  88. package/dist/index.js.map +0 -1
  89. package/dist/logging/logger.d.ts +0 -6
  90. package/dist/logging/logger.d.ts.map +0 -1
  91. package/dist/logging/logger.js +0 -33
  92. package/dist/logging/logger.js.map +0 -1
  93. package/dist/models/index.d.ts +0 -6
  94. package/dist/models/index.d.ts.map +0 -1
  95. package/dist/models/index.js +0 -4
  96. package/dist/models/index.js.map +0 -1
  97. package/dist/models/pricing.d.ts +0 -25
  98. package/dist/models/pricing.d.ts.map +0 -1
  99. package/dist/models/pricing.js +0 -96
  100. package/dist/models/pricing.js.map +0 -1
  101. package/dist/models/registry.d.ts +0 -34
  102. package/dist/models/registry.d.ts.map +0 -1
  103. package/dist/models/registry.js +0 -109
  104. package/dist/models/registry.js.map +0 -1
  105. package/dist/models/token-tracker.d.ts +0 -41
  106. package/dist/models/token-tracker.d.ts.map +0 -1
  107. package/dist/models/token-tracker.js +0 -103
  108. package/dist/models/token-tracker.js.map +0 -1
  109. package/dist/scheduler/engine.d.ts +0 -12
  110. package/dist/scheduler/engine.d.ts.map +0 -1
  111. package/dist/scheduler/engine.js +0 -128
  112. package/dist/scheduler/engine.js.map +0 -1
  113. package/dist/skills/discover.d.ts +0 -22
  114. package/dist/skills/discover.d.ts.map +0 -1
  115. package/dist/skills/discover.js +0 -228
  116. package/dist/skills/discover.js.map +0 -1
  117. package/dist/skills/index.d.ts +0 -5
  118. package/dist/skills/index.d.ts.map +0 -1
  119. package/dist/skills/index.js +0 -3
  120. package/dist/skills/index.js.map +0 -1
  121. package/dist/skills/store.d.ts +0 -56
  122. package/dist/skills/store.d.ts.map +0 -1
  123. package/dist/skills/store.js +0 -154
  124. package/dist/skills/store.js.map +0 -1
  125. package/dist/squad/agent.d.ts +0 -65
  126. package/dist/squad/agent.d.ts.map +0 -1
  127. package/dist/squad/agent.js +0 -544
  128. package/dist/squad/agent.js.map +0 -1
  129. package/dist/squad/autonomy.d.ts +0 -16
  130. package/dist/squad/autonomy.d.ts.map +0 -1
  131. package/dist/squad/autonomy.js +0 -63
  132. package/dist/squad/autonomy.js.map +0 -1
  133. package/dist/squad/event-bus.d.ts +0 -22
  134. package/dist/squad/event-bus.d.ts.map +0 -1
  135. package/dist/squad/event-bus.js +0 -56
  136. package/dist/squad/event-bus.js.map +0 -1
  137. package/dist/squad/execution/index.d.ts +0 -14
  138. package/dist/squad/execution/index.d.ts.map +0 -1
  139. package/dist/squad/execution/index.js +0 -8
  140. package/dist/squad/execution/index.js.map +0 -1
  141. package/dist/squad/execution/instance.d.ts +0 -45
  142. package/dist/squad/execution/instance.d.ts.map +0 -1
  143. package/dist/squad/execution/instance.js +0 -171
  144. package/dist/squad/execution/instance.js.map +0 -1
  145. package/dist/squad/execution/planning.d.ts +0 -20
  146. package/dist/squad/execution/planning.d.ts.map +0 -1
  147. package/dist/squad/execution/planning.js +0 -62
  148. package/dist/squad/execution/planning.js.map +0 -1
  149. package/dist/squad/execution/pr.d.ts +0 -15
  150. package/dist/squad/execution/pr.d.ts.map +0 -1
  151. package/dist/squad/execution/pr.js +0 -109
  152. package/dist/squad/execution/pr.js.map +0 -1
  153. package/dist/squad/execution/review.d.ts +0 -21
  154. package/dist/squad/execution/review.d.ts.map +0 -1
  155. package/dist/squad/execution/review.js +0 -151
  156. package/dist/squad/execution/review.js.map +0 -1
  157. package/dist/squad/execution/runner.d.ts +0 -52
  158. package/dist/squad/execution/runner.d.ts.map +0 -1
  159. package/dist/squad/execution/runner.js +0 -93
  160. package/dist/squad/execution/runner.js.map +0 -1
  161. package/dist/squad/execution/tasks.d.ts +0 -22
  162. package/dist/squad/execution/tasks.d.ts.map +0 -1
  163. package/dist/squad/execution/tasks.js +0 -108
  164. package/dist/squad/execution/tasks.js.map +0 -1
  165. package/dist/squad/execution/worktree.d.ts +0 -27
  166. package/dist/squad/execution/worktree.d.ts.map +0 -1
  167. package/dist/squad/execution/worktree.js +0 -141
  168. package/dist/squad/execution/worktree.js.map +0 -1
  169. package/dist/squad/hiring.d.ts +0 -57
  170. package/dist/squad/hiring.d.ts.map +0 -1
  171. package/dist/squad/hiring.js +0 -588
  172. package/dist/squad/hiring.js.map +0 -1
  173. package/dist/squad/index.d.ts +0 -8
  174. package/dist/squad/index.d.ts.map +0 -1
  175. package/dist/squad/index.js +0 -6
  176. package/dist/squad/index.js.map +0 -1
  177. package/dist/squad/manager.d.ts +0 -58
  178. package/dist/squad/manager.d.ts.map +0 -1
  179. package/dist/squad/manager.js +0 -351
  180. package/dist/squad/manager.js.map +0 -1
  181. package/dist/squad/model-selector.d.ts +0 -29
  182. package/dist/squad/model-selector.d.ts.map +0 -1
  183. package/dist/squad/model-selector.js +0 -64
  184. package/dist/squad/model-selector.js.map +0 -1
  185. package/dist/squad/name-generator.d.ts +0 -16
  186. package/dist/squad/name-generator.d.ts.map +0 -1
  187. package/dist/squad/name-generator.js +0 -111
  188. package/dist/squad/name-generator.js.map +0 -1
  189. package/dist/squad/roles/templates.d.ts +0 -7
  190. package/dist/squad/roles/templates.d.ts.map +0 -1
  191. package/dist/squad/roles/templates.js +0 -104
  192. package/dist/squad/roles/templates.js.map +0 -1
  193. package/dist/squad/skill-parser.d.ts +0 -36
  194. package/dist/squad/skill-parser.d.ts.map +0 -1
  195. package/dist/squad/skill-parser.js +0 -90
  196. package/dist/squad/skill-parser.js.map +0 -1
  197. package/dist/squad/source-resolver.d.ts +0 -20
  198. package/dist/squad/source-resolver.d.ts.map +0 -1
  199. package/dist/squad/source-resolver.js +0 -51
  200. package/dist/squad/source-resolver.js.map +0 -1
  201. package/dist/store/activity.d.ts +0 -51
  202. package/dist/store/activity.d.ts.map +0 -1
  203. package/dist/store/activity.js +0 -197
  204. package/dist/store/activity.js.map +0 -1
  205. package/dist/store/conversations.d.ts +0 -25
  206. package/dist/store/conversations.d.ts.map +0 -1
  207. package/dist/store/conversations.js +0 -76
  208. package/dist/store/conversations.js.map +0 -1
  209. package/dist/store/db.d.ts +0 -5
  210. package/dist/store/db.d.ts.map +0 -1
  211. package/dist/store/db.js +0 -290
  212. package/dist/store/db.js.map +0 -1
  213. package/dist/store/inbox.d.ts +0 -67
  214. package/dist/store/inbox.d.ts.map +0 -1
  215. package/dist/store/inbox.js +0 -192
  216. package/dist/store/inbox.js.map +0 -1
  217. package/dist/store/schedules.d.ts +0 -53
  218. package/dist/store/schedules.d.ts.map +0 -1
  219. package/dist/store/schedules.js +0 -160
  220. package/dist/store/schedules.js.map +0 -1
  221. package/dist/wiki/index.d.ts +0 -3
  222. package/dist/wiki/index.d.ts.map +0 -1
  223. package/dist/wiki/index.js +0 -2
  224. package/dist/wiki/index.js.map +0 -1
  225. package/dist/wiki/store.d.ts +0 -81
  226. package/dist/wiki/store.d.ts.map +0 -1
  227. package/dist/wiki/store.js +0 -270
  228. package/dist/wiki/store.js.map +0 -1
  229. package/node_modules/@io/shared/dist/config.d.ts +0 -26
  230. package/node_modules/@io/shared/dist/config.d.ts.map +0 -1
  231. package/node_modules/@io/shared/dist/config.js +0 -53
  232. package/node_modules/@io/shared/dist/config.js.map +0 -1
  233. package/node_modules/@io/shared/dist/constants.d.ts +0 -19
  234. package/node_modules/@io/shared/dist/constants.d.ts.map +0 -1
  235. package/node_modules/@io/shared/dist/constants.js +0 -51
  236. package/node_modules/@io/shared/dist/constants.js.map +0 -1
  237. package/node_modules/@io/shared/dist/index.d.ts +0 -12
  238. package/node_modules/@io/shared/dist/index.d.ts.map +0 -1
  239. package/node_modules/@io/shared/dist/index.js +0 -3
  240. package/node_modules/@io/shared/dist/index.js.map +0 -1
  241. package/node_modules/@io/shared/dist/types/agents.d.ts +0 -3
  242. package/node_modules/@io/shared/dist/types/agents.d.ts.map +0 -1
  243. package/node_modules/@io/shared/dist/types/agents.js +0 -2
  244. package/node_modules/@io/shared/dist/types/agents.js.map +0 -1
  245. package/node_modules/@io/shared/dist/types/api.d.ts +0 -33
  246. package/node_modules/@io/shared/dist/types/api.d.ts.map +0 -1
  247. package/node_modules/@io/shared/dist/types/api.js +0 -2
  248. package/node_modules/@io/shared/dist/types/api.js.map +0 -1
  249. package/node_modules/@io/shared/dist/types/attachments.d.ts +0 -10
  250. package/node_modules/@io/shared/dist/types/attachments.d.ts.map +0 -1
  251. package/node_modules/@io/shared/dist/types/attachments.js +0 -2
  252. package/node_modules/@io/shared/dist/types/attachments.js.map +0 -1
  253. package/node_modules/@io/shared/dist/types/events.d.ts +0 -44
  254. package/node_modules/@io/shared/dist/types/events.d.ts.map +0 -1
  255. package/node_modules/@io/shared/dist/types/events.js +0 -2
  256. package/node_modules/@io/shared/dist/types/events.js.map +0 -1
  257. package/node_modules/@io/shared/dist/types/history.d.ts +0 -33
  258. package/node_modules/@io/shared/dist/types/history.d.ts.map +0 -1
  259. package/node_modules/@io/shared/dist/types/history.js +0 -2
  260. package/node_modules/@io/shared/dist/types/history.js.map +0 -1
  261. package/node_modules/@io/shared/dist/types/messages.d.ts +0 -15
  262. package/node_modules/@io/shared/dist/types/messages.d.ts.map +0 -1
  263. package/node_modules/@io/shared/dist/types/messages.js +0 -2
  264. package/node_modules/@io/shared/dist/types/messages.js.map +0 -1
  265. package/node_modules/@io/shared/dist/types/squads.d.ts +0 -46
  266. package/node_modules/@io/shared/dist/types/squads.d.ts.map +0 -1
  267. package/node_modules/@io/shared/dist/types/squads.js +0 -2
  268. package/node_modules/@io/shared/dist/types/squads.js.map +0 -1
  269. package/node_modules/@io/shared/dist/types/tokens.d.ts +0 -19
  270. package/node_modules/@io/shared/dist/types/tokens.d.ts.map +0 -1
  271. package/node_modules/@io/shared/dist/types/tokens.js +0 -2
  272. package/node_modules/@io/shared/dist/types/tokens.js.map +0 -1
  273. package/node_modules/@io/shared/package.json +0 -18
  274. package/node_modules/@io/shared/src/config.ts +0 -85
  275. package/node_modules/@io/shared/src/constants.ts +0 -54
  276. package/node_modules/@io/shared/src/index.ts +0 -46
  277. package/node_modules/@io/shared/src/types/agents.ts +0 -3
  278. package/node_modules/@io/shared/src/types/api.ts +0 -35
  279. package/node_modules/@io/shared/src/types/attachments.ts +0 -9
  280. package/node_modules/@io/shared/src/types/events.ts +0 -86
  281. package/node_modules/@io/shared/src/types/history.ts +0 -37
  282. package/node_modules/@io/shared/src/types/messages.ts +0 -15
  283. package/node_modules/@io/shared/src/types/squads.ts +0 -56
  284. package/node_modules/@io/shared/src/types/tokens.ts +0 -19
  285. package/node_modules/@io/shared/tsconfig.json +0 -9
  286. package/node_modules/@io/shared/tsconfig.tsbuildinfo +0 -1
  287. package/public/assets/index-BywBQCtu.js +0 -510
  288. package/public/assets/index-BywBQCtu.js.map +0 -1
  289. /package/{public → dist/web}/assets/index-B6F0UZkW.css +0 -0
@@ -1,67 +0,0 @@
1
- export type InboxKind = 'deliverable' | 'question' | 'note';
2
- export type InboxStatus = 'unread' | 'read' | 'resolved';
3
- export interface InboxEntry {
4
- id: string;
5
- squadId: string | null;
6
- instanceId: string | null;
7
- kind: InboxKind;
8
- title: string;
9
- content: string;
10
- status: InboxStatus;
11
- response: string | null;
12
- createdAt: string;
13
- resolvedAt: string | null;
14
- }
15
- /**
16
- * Add a new inbox entry. For questions, returns a promise that resolves when the user responds.
17
- */
18
- export declare function addInboxEntry(params: {
19
- squadId?: string;
20
- instanceId?: string;
21
- kind: InboxKind;
22
- title: string;
23
- content: string;
24
- }): Promise<{
25
- entry: InboxEntry;
26
- waitForResponse?: Promise<string>;
27
- }>;
28
- /**
29
- * List inbox entries with optional filters.
30
- */
31
- export declare function listInboxEntries(filters?: {
32
- status?: InboxStatus;
33
- squadId?: string;
34
- kind?: InboxKind;
35
- limit?: number;
36
- }): Promise<(InboxEntry & {
37
- squadName?: string;
38
- })[]>;
39
- /**
40
- * Get a single inbox entry by ID.
41
- */
42
- export declare function getInboxEntry(id: string): Promise<InboxEntry | null>;
43
- /**
44
- * Mark an entry as read.
45
- */
46
- export declare function markInboxRead(id: string): Promise<void>;
47
- /**
48
- * Respond to an inbox question. Resolves the blocking promise if the squad is waiting.
49
- */
50
- export declare function resolveInboxEntry(id: string, response: string): Promise<boolean>;
51
- /**
52
- * Get count of unread entries.
53
- */
54
- export declare function getUnreadCount(): Promise<number>;
55
- /**
56
- * Delete an inbox entry by ID.
57
- */
58
- export declare function deleteInboxEntry(id: string): Promise<void>;
59
- /**
60
- * Delete multiple inbox entries by ID.
61
- */
62
- export declare function deleteInboxEntries(ids: string[]): Promise<void>;
63
- /**
64
- * Mark multiple inbox entries as read.
65
- */
66
- export declare function markInboxReadBulk(ids: string[]): Promise<void>;
67
- //# sourceMappingURL=inbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/store/inbox.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AAC5D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzD,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAKD;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAoDpE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAChD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAC,CAmCnD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAQ1E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBtF;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAMtD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQrE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpE"}
@@ -1,192 +0,0 @@
1
- import { createChildLogger } from '../logging/logger.js';
2
- import { getEventBus } from '../squad/event-bus.js';
3
- import { getDatabase } from './db.js';
4
- const logger = () => createChildLogger('inbox');
5
- // Pending question resolvers — keyed by entry ID
6
- const pendingQuestions = new Map();
7
- /**
8
- * Add a new inbox entry. For questions, returns a promise that resolves when the user responds.
9
- */
10
- export async function addInboxEntry(params) {
11
- const db = getDatabase();
12
- const id = crypto.randomUUID();
13
- await db.execute({
14
- sql: `INSERT INTO inbox_entries (id, squad_id, instance_id, kind, title, content)
15
- VALUES (?, ?, ?, ?, ?, ?)`,
16
- args: [
17
- id,
18
- params.squadId ?? null,
19
- params.instanceId ?? null,
20
- params.kind,
21
- params.title,
22
- params.content,
23
- ],
24
- });
25
- const entry = {
26
- id,
27
- squadId: params.squadId ?? null,
28
- instanceId: params.instanceId ?? null,
29
- kind: params.kind,
30
- title: params.title,
31
- content: params.content,
32
- status: 'unread',
33
- response: null,
34
- createdAt: new Date().toISOString(),
35
- resolvedAt: null,
36
- };
37
- let waitForResponse;
38
- if (params.kind === 'question') {
39
- waitForResponse = new Promise((resolve) => {
40
- pendingQuestions.set(id, resolve);
41
- });
42
- }
43
- // Emit event for WebSocket broadcast
44
- getEventBus().emit({
45
- type: 'inbox:new',
46
- id: crypto.randomUUID(),
47
- timestamp: new Date(),
48
- squadId: params.squadId,
49
- instanceId: params.instanceId,
50
- kind: params.kind,
51
- title: params.title,
52
- entryId: id,
53
- });
54
- logger().info({ id, kind: params.kind, title: params.title }, 'Inbox entry created');
55
- return { entry, waitForResponse };
56
- }
57
- /**
58
- * List inbox entries with optional filters.
59
- */
60
- export async function listInboxEntries(filters) {
61
- const db = getDatabase();
62
- const conditions = [];
63
- const args = [];
64
- if (filters?.status) {
65
- conditions.push('i.status = ?');
66
- args.push(filters.status);
67
- }
68
- if (filters?.squadId) {
69
- conditions.push('i.squad_id = ?');
70
- args.push(filters.squadId);
71
- }
72
- if (filters?.kind) {
73
- conditions.push('i.kind = ?');
74
- args.push(filters.kind);
75
- }
76
- const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
77
- const limit = filters?.limit ?? 50;
78
- const result = await db.execute({
79
- sql: `SELECT i.id, i.squad_id, i.instance_id, i.kind, i.title, i.content, i.status, i.response, i.created_at, i.resolved_at, s.name as squad_name, s.color as squad_color
80
- FROM inbox_entries i LEFT JOIN squads s ON i.squad_id = s.id
81
- ${where}
82
- ORDER BY i.created_at DESC
83
- LIMIT ?`,
84
- args: [...args, limit],
85
- });
86
- return result.rows.map((row) => ({
87
- ...rowToEntry(row),
88
- squadName: row.squad_name ?? undefined,
89
- squadColor: row.squad_color ?? undefined,
90
- }));
91
- }
92
- /**
93
- * Get a single inbox entry by ID.
94
- */
95
- export async function getInboxEntry(id) {
96
- const db = getDatabase();
97
- const result = await db.execute({
98
- sql: 'SELECT id, squad_id, instance_id, kind, title, content, status, response, created_at, resolved_at FROM inbox_entries WHERE id = ?',
99
- args: [id],
100
- });
101
- if (result.rows.length === 0)
102
- return null;
103
- return rowToEntry(result.rows[0]);
104
- }
105
- /**
106
- * Mark an entry as read.
107
- */
108
- export async function markInboxRead(id) {
109
- const db = getDatabase();
110
- await db.execute({
111
- sql: "UPDATE inbox_entries SET status = 'read' WHERE id = ? AND status = 'unread'",
112
- args: [id],
113
- });
114
- }
115
- /**
116
- * Respond to an inbox question. Resolves the blocking promise if the squad is waiting.
117
- */
118
- export async function resolveInboxEntry(id, response) {
119
- const db = getDatabase();
120
- await db.execute({
121
- sql: "UPDATE inbox_entries SET status = 'resolved', response = ?, resolved_at = CURRENT_TIMESTAMP WHERE id = ?",
122
- args: [response, id],
123
- });
124
- // Resolve the pending promise if squad is waiting
125
- const resolver = pendingQuestions.get(id);
126
- if (resolver) {
127
- resolver(response);
128
- pendingQuestions.delete(id);
129
- logger().info({ id }, 'Inbox question resolved — squad unblocked');
130
- return true;
131
- }
132
- return false;
133
- }
134
- /**
135
- * Get count of unread entries.
136
- */
137
- export async function getUnreadCount() {
138
- const db = getDatabase();
139
- const result = await db.execute("SELECT COUNT(*) as count FROM inbox_entries WHERE status = 'unread'");
140
- return result.rows[0]?.count ?? 0;
141
- }
142
- /**
143
- * Delete an inbox entry by ID.
144
- */
145
- export async function deleteInboxEntry(id) {
146
- const db = getDatabase();
147
- await db.execute({
148
- sql: 'DELETE FROM inbox_entries WHERE id = ?',
149
- args: [id],
150
- });
151
- }
152
- /**
153
- * Delete multiple inbox entries by ID.
154
- */
155
- export async function deleteInboxEntries(ids) {
156
- if (ids.length === 0)
157
- return;
158
- const db = getDatabase();
159
- const placeholders = ids.map(() => '?').join(',');
160
- await db.execute({
161
- sql: `DELETE FROM inbox_entries WHERE id IN (${placeholders})`,
162
- args: ids,
163
- });
164
- }
165
- /**
166
- * Mark multiple inbox entries as read.
167
- */
168
- export async function markInboxReadBulk(ids) {
169
- if (ids.length === 0)
170
- return;
171
- const db = getDatabase();
172
- const placeholders = ids.map(() => '?').join(',');
173
- await db.execute({
174
- sql: `UPDATE inbox_entries SET status = 'read' WHERE id IN (${placeholders}) AND status = 'unread'`,
175
- args: ids,
176
- });
177
- }
178
- function rowToEntry(row) {
179
- return {
180
- id: row.id,
181
- squadId: row.squad_id,
182
- instanceId: row.instance_id,
183
- kind: row.kind,
184
- title: row.title,
185
- content: row.content,
186
- status: row.status,
187
- response: row.response,
188
- createdAt: row.created_at,
189
- resolvedAt: row.resolved_at,
190
- };
191
- }
192
- //# sourceMappingURL=inbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/store/inbox.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- export type ScheduleTargetType = 'squad' | 'orchestrator';
2
- export interface Schedule {
3
- id: string;
4
- name: string;
5
- targetType: ScheduleTargetType;
6
- targetId: string | null;
7
- cron: string;
8
- prompt: string;
9
- enabled: boolean;
10
- lastRun: string | null;
11
- nextRun: string | null;
12
- createdAt: string;
13
- }
14
- /**
15
- * Calculate the next run time from a cron expression.
16
- */
17
- export declare function calculateNextRun(cron: string, from?: Date): Date;
18
- /**
19
- * Create a new schedule.
20
- */
21
- export declare function createSchedule(params: {
22
- name: string;
23
- targetType: ScheduleTargetType;
24
- targetId?: string;
25
- cron: string;
26
- prompt: string;
27
- enabled?: boolean;
28
- }): Promise<Schedule>;
29
- /**
30
- * List all schedules with optional enabled filter.
31
- */
32
- export declare function listSchedules(enabledOnly?: boolean): Promise<Schedule[]>;
33
- /**
34
- * Get a single schedule by ID.
35
- */
36
- export declare function getSchedule(id: string): Promise<Schedule | null>;
37
- /**
38
- * Update a schedule (partial update).
39
- */
40
- export declare function updateSchedule(id: string, updates: Partial<Pick<Schedule, 'name' | 'cron' | 'prompt' | 'enabled'>>): Promise<void>;
41
- /**
42
- * Delete a schedule.
43
- */
44
- export declare function deleteSchedule(id: string): Promise<void>;
45
- /**
46
- * Mark a schedule as fired (update last_run and next_run).
47
- */
48
- export declare function markScheduleFired(id: string, cron: string): Promise<void>;
49
- /**
50
- * Get all schedules that are due to fire (next_run <= now and enabled).
51
- */
52
- export declare function getDueSchedules(): Promise<Schedule[]>;
53
- //# sourceMappingURL=schedules.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../src/store/schedules.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,cAAc,CAAC;AAE1D,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAGhE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmCpB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAO9E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAKtE;AAED;;GAEG;AACH,wBAAsB,cAAc,CACnC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,GACtE,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/E;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAQ3D"}
@@ -1,160 +0,0 @@
1
- import { CronExpressionParser } from 'cron-parser';
2
- import { createChildLogger } from '../logging/logger.js';
3
- import { getDatabase } from './db.js';
4
- const logger = () => createChildLogger('schedules-store');
5
- /**
6
- * Calculate the next run time from a cron expression.
7
- */
8
- export function calculateNextRun(cron, from) {
9
- const interval = CronExpressionParser.parse(cron, { currentDate: from ?? new Date() });
10
- return interval.next().toDate();
11
- }
12
- /**
13
- * Create a new schedule.
14
- */
15
- export async function createSchedule(params) {
16
- const db = getDatabase();
17
- const id = crypto.randomUUID();
18
- const enabled = params.enabled ?? true;
19
- const nextRun = enabled ? calculateNextRun(params.cron).toISOString() : null;
20
- await db.execute({
21
- sql: `INSERT INTO schedules (id, name, target_type, target_id, cron, prompt, enabled, next_run)
22
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
23
- args: [
24
- id,
25
- params.name,
26
- params.targetType,
27
- params.targetId ?? null,
28
- params.cron,
29
- params.prompt,
30
- enabled ? 1 : 0,
31
- nextRun,
32
- ],
33
- });
34
- logger().info({ id, name: params.name, cron: params.cron }, 'Schedule created');
35
- return {
36
- id,
37
- name: params.name,
38
- targetType: params.targetType,
39
- targetId: params.targetId ?? null,
40
- cron: params.cron,
41
- prompt: params.prompt,
42
- enabled,
43
- lastRun: null,
44
- nextRun,
45
- createdAt: new Date().toISOString(),
46
- };
47
- }
48
- /**
49
- * List all schedules with optional enabled filter.
50
- */
51
- export async function listSchedules(enabledOnly) {
52
- const db = getDatabase();
53
- const sql = enabledOnly
54
- ? 'SELECT * FROM schedules WHERE enabled = 1 ORDER BY next_run ASC'
55
- : 'SELECT * FROM schedules ORDER BY created_at DESC';
56
- const result = await db.execute(sql);
57
- return result.rows.map(rowToSchedule);
58
- }
59
- /**
60
- * Get a single schedule by ID.
61
- */
62
- export async function getSchedule(id) {
63
- const db = getDatabase();
64
- const result = await db.execute({ sql: 'SELECT * FROM schedules WHERE id = ?', args: [id] });
65
- if (result.rows.length === 0)
66
- return null;
67
- return rowToSchedule(result.rows[0]);
68
- }
69
- /**
70
- * Update a schedule (partial update).
71
- */
72
- export async function updateSchedule(id, updates) {
73
- const db = getDatabase();
74
- const sets = [];
75
- const args = [];
76
- if (updates.name !== undefined) {
77
- sets.push('name = ?');
78
- args.push(updates.name);
79
- }
80
- if (updates.cron !== undefined) {
81
- sets.push('cron = ?');
82
- args.push(updates.cron);
83
- // Recalculate next_run
84
- sets.push('next_run = ?');
85
- args.push(calculateNextRun(updates.cron).toISOString());
86
- }
87
- if (updates.prompt !== undefined) {
88
- sets.push('prompt = ?');
89
- args.push(updates.prompt);
90
- }
91
- if (updates.enabled !== undefined) {
92
- sets.push('enabled = ?');
93
- args.push(updates.enabled ? 1 : 0);
94
- if (updates.enabled && !updates.cron) {
95
- // Need to recalculate next_run from existing cron
96
- const existing = await getSchedule(id);
97
- if (existing) {
98
- sets.push('next_run = ?');
99
- args.push(calculateNextRun(existing.cron).toISOString());
100
- }
101
- }
102
- if (!updates.enabled) {
103
- sets.push('next_run = ?');
104
- args.push(null);
105
- }
106
- }
107
- if (sets.length === 0)
108
- return;
109
- args.push(id);
110
- await db.execute({
111
- sql: `UPDATE schedules SET ${sets.join(', ')} WHERE id = ?`,
112
- args,
113
- });
114
- }
115
- /**
116
- * Delete a schedule.
117
- */
118
- export async function deleteSchedule(id) {
119
- const db = getDatabase();
120
- await db.execute({ sql: 'DELETE FROM schedules WHERE id = ?', args: [id] });
121
- }
122
- /**
123
- * Mark a schedule as fired (update last_run and next_run).
124
- */
125
- export async function markScheduleFired(id, cron) {
126
- const db = getDatabase();
127
- const now = new Date().toISOString();
128
- const nextRun = calculateNextRun(cron).toISOString();
129
- await db.execute({
130
- sql: 'UPDATE schedules SET last_run = ?, next_run = ? WHERE id = ?',
131
- args: [now, nextRun, id],
132
- });
133
- }
134
- /**
135
- * Get all schedules that are due to fire (next_run <= now and enabled).
136
- */
137
- export async function getDueSchedules() {
138
- const db = getDatabase();
139
- const now = new Date().toISOString();
140
- const result = await db.execute({
141
- sql: 'SELECT * FROM schedules WHERE enabled = 1 AND next_run IS NOT NULL AND next_run <= ?',
142
- args: [now],
143
- });
144
- return result.rows.map(rowToSchedule);
145
- }
146
- function rowToSchedule(row) {
147
- return {
148
- id: row.id,
149
- name: row.name,
150
- targetType: row.target_type,
151
- targetId: row.target_id,
152
- cron: row.cron,
153
- prompt: row.prompt,
154
- enabled: row.enabled === 1,
155
- lastRun: row.last_run,
156
- nextRun: row.next_run,
157
- createdAt: row.created_at,
158
- };
159
- }
160
- //# sourceMappingURL=schedules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schedules.js","sourceRoot":"","sources":["../../src/store/schedules.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export { initWiki, ensureSquadWiki, listWikiPages, listAllWikiPages, listWikiScopes, readWikiPage, writeWikiPage, deleteWikiPage, deleteWikiDirectory, searchWiki, getSquadScopes, getOrchestratorScopes, getPageListing, readSquadRules, } from './store.js';
2
- export type { WikiScope, WikiPage, WikiPageSummary, WikiSearchResult } from './store.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wiki/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EACR,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
@@ -1,2 +0,0 @@
1
- export { initWiki, ensureSquadWiki, listWikiPages, listAllWikiPages, listWikiScopes, readWikiPage, writeWikiPage, deleteWikiPage, deleteWikiDirectory, searchWiki, getSquadScopes, getOrchestratorScopes, getPageListing, readSquadRules, } from './store.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wiki/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EACR,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,GACd,MAAM,YAAY,CAAC"}
@@ -1,81 +0,0 @@
1
- export type WikiScope = 'io' | 'shared' | string;
2
- export interface WikiPage {
3
- scope: string;
4
- name: string;
5
- content: string;
6
- }
7
- export interface WikiPageSummary {
8
- name: string;
9
- path: string;
10
- }
11
- export interface WikiSearchResult {
12
- scope: string;
13
- name: string;
14
- matches: string[];
15
- }
16
- /**
17
- * Initialize the wiki directory structure.
18
- */
19
- export declare function initWiki(dataDir: string): void;
20
- /**
21
- * Ensure a squad wiki folder exists. Seeds from templates/ on first creation.
22
- */
23
- export declare function ensureSquadWiki(squadName: string): void;
24
- /**
25
- * List all available wiki scopes (io, shared, + all squads with wiki folders).
26
- */
27
- export declare function listWikiScopes(): string[];
28
- /**
29
- * List all pages across all scopes, with scope prefix in the path.
30
- * Simply walks the wiki directory recursively — directories and .md files.
31
- */
32
- export declare function listAllWikiPages(): Array<{
33
- name: string;
34
- path: string;
35
- isDir?: boolean;
36
- }>;
37
- /**
38
- * List all pages in a scope, including nested directories.
39
- */
40
- export declare function listWikiPages(scope: WikiScope): WikiPageSummary[];
41
- /**
42
- * Read a wiki page. Returns null if it doesn't exist.
43
- */
44
- export declare function readWikiPage(scope: WikiScope, pageName: string): WikiPage | null;
45
- /**
46
- * Write (create or overwrite) a wiki page.
47
- */
48
- export declare function writeWikiPage(scope: WikiScope, pageName: string, content: string): WikiPage;
49
- /**
50
- * Delete a wiki page.
51
- */
52
- export declare function deleteWikiPage(scope: WikiScope, pageName: string): boolean;
53
- /**
54
- * Delete a wiki directory and all its contents.
55
- * Protected directories (io, shared, squads) cannot be deleted.
56
- * Path is relative to wiki root (e.g. "squads/myproject").
57
- */
58
- export declare function deleteWikiDirectory(relativePath: string): boolean;
59
- /**
60
- * Search wiki pages by keyword across one or more scopes.
61
- * Returns matching pages with context lines.
62
- */
63
- export declare function searchWiki(keyword: string, scopes: WikiScope[]): WikiSearchResult[];
64
- /**
65
- * Get accessible scopes for a squad agent.
66
- */
67
- export declare function getSquadScopes(squadName: string): WikiScope[];
68
- /**
69
- * Get accessible scopes for the orchestrator.
70
- */
71
- export declare function getOrchestratorScopes(): WikiScope[];
72
- /**
73
- * Get a summary of available pages for injection into system prompts.
74
- * Excludes _rules.md since it's injected separately.
75
- */
76
- export declare function getPageListing(scopes: WikiScope[]): string;
77
- /**
78
- * Read the _rules.md content for a squad. Returns null if not found.
79
- */
80
- export declare function readSquadRules(squadName: string): string | null;
81
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/wiki/store.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB;AAwBD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAc9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAYvD;AAoBD;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAWzC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAmBzF;AASD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,EAAE,CAMjE;AA4BD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAKhF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAO3F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAM1E;AAKD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAgBjE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,EAAE,CAyBnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAE7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,SAAS,EAAE,CAEnD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAU1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/D"}