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,103 +0,0 @@
1
- import { createChildLogger } from '../logging/logger.js';
2
- import { getDatabase } from '../store/db.js';
3
- const logger = () => createChildLogger('token-tracker');
4
- /**
5
- * Record token usage from an LLM call.
6
- */
7
- export async function recordTokenUsage(record) {
8
- const db = getDatabase();
9
- // Estimate cost if pricing is available
10
- let cost = record.estimatedCostUsd;
11
- if (cost === undefined) {
12
- cost = await estimateCost(record.model, record.inputTokens, record.outputTokens);
13
- }
14
- await db.execute({
15
- sql: `INSERT INTO token_usage (squad_id, instance_id, agent_role, model, input_tokens, output_tokens, estimated_cost_usd)
16
- VALUES (?, ?, ?, ?, ?, ?, ?)`,
17
- args: [
18
- record.squadId ?? null,
19
- record.instanceId ?? null,
20
- record.agentRole ?? null,
21
- record.model,
22
- record.inputTokens,
23
- record.outputTokens,
24
- cost ?? null,
25
- ],
26
- });
27
- }
28
- /**
29
- * Estimate cost for a call based on stored pricing.
30
- */
31
- async function estimateCost(model, inputTokens, outputTokens) {
32
- const db = getDatabase();
33
- const result = await db.execute({
34
- sql: 'SELECT input_cost_per_1m, output_cost_per_1m FROM model_pricing WHERE model = ?',
35
- args: [model],
36
- });
37
- if (result.rows.length === 0)
38
- return undefined;
39
- const row = result.rows[0];
40
- const inputCost = (row.input_cost_per_1m / 1_000_000) * inputTokens;
41
- const outputCost = (row.output_cost_per_1m / 1_000_000) * outputTokens;
42
- return inputCost + outputCost;
43
- }
44
- /**
45
- * Query token usage with filters.
46
- */
47
- export async function queryUsage(filters) {
48
- const db = getDatabase();
49
- const conditions = [];
50
- const args = [];
51
- if (filters?.squadId) {
52
- conditions.push('t.squad_id = ?');
53
- args.push(filters.squadId);
54
- }
55
- if (filters?.agentRole) {
56
- conditions.push('t.agent_role = ?');
57
- args.push(filters.agentRole);
58
- }
59
- if (filters?.model) {
60
- conditions.push('t.model = ?');
61
- args.push(filters.model);
62
- }
63
- if (filters?.since) {
64
- conditions.push('t.timestamp >= ?');
65
- args.push(filters.since);
66
- }
67
- if (filters?.until) {
68
- conditions.push('t.timestamp <= ?');
69
- args.push(filters.until);
70
- }
71
- const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
72
- const result = await db.execute({
73
- sql: `SELECT t.model, t.input_tokens, t.output_tokens, t.estimated_cost_usd, t.timestamp, t.squad_id, t.agent_role, s.name as squad_name
74
- FROM token_usage t LEFT JOIN squads s ON t.squad_id = s.id ${where} ORDER BY t.timestamp DESC LIMIT 500`,
75
- args,
76
- });
77
- const records = result.rows.map((row) => ({
78
- model: row.model,
79
- inputTokens: row.input_tokens,
80
- outputTokens: row.output_tokens,
81
- estimatedCostUsd: row.estimated_cost_usd,
82
- timestamp: row.timestamp,
83
- squadId: row.squad_id,
84
- squadName: row.squad_name ?? null,
85
- agentRole: row.agent_role,
86
- }));
87
- // Totals
88
- const totalsResult = await db.execute({
89
- sql: `SELECT COUNT(*) as cnt, COALESCE(SUM(t.input_tokens), 0) as total_in,
90
- COALESCE(SUM(t.output_tokens), 0) as total_out, COALESCE(SUM(t.estimated_cost_usd), 0) as total_cost
91
- FROM token_usage t ${where}`,
92
- args,
93
- });
94
- const totalsRow = totalsResult.rows[0];
95
- const totals = {
96
- callCount: totalsRow?.cnt ?? 0,
97
- totalInputTokens: totalsRow?.total_in ?? 0,
98
- totalOutputTokens: totalsRow?.total_out ?? 0,
99
- totalCostUsd: totalsRow?.total_cost ?? 0,
100
- };
101
- return { records, totals };
102
- }
103
- //# sourceMappingURL=token-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-tracker.js","sourceRoot":"","sources":["../../src/models/token-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;AAYxD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAwB;IAC9D,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,wCAAwC;IACxC,IAAI,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,EAAE,CAAC,OAAO,CAAC;QAChB,GAAG,EAAE;qCAC8B;QACnC,IAAI,EAAE;YACL,MAAM,CAAC,OAAO,IAAI,IAAI;YACtB,MAAM,CAAC,UAAU,IAAI,IAAI;YACzB,MAAM,CAAC,SAAS,IAAI,IAAI;YACxB,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,WAAW;YAClB,MAAM,CAAC,YAAY;YACnB,IAAI,IAAI,IAAI;SACZ;KACD,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAC1B,KAAa,EACb,WAAmB,EACnB,YAAoB;IAEpB,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;QAC/B,GAAG,EAAE,iFAAiF;QACtF,IAAI,EAAE,CAAC,KAAK,CAAC;KACb,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE/C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,SAAS,GAAG,CAAE,GAAG,CAAC,iBAA4B,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC;IAChF,MAAM,UAAU,GAAG,CAAE,GAAG,CAAC,kBAA6B,GAAG,SAAS,CAAC,GAAG,YAAY,CAAC;IACnF,OAAO,SAAS,GAAG,UAAU,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAMhC;IAkBA,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAAsB,EAAE,CAAC;IAEnC,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;QAC/B,GAAG,EAAE;qEAC8D,KAAK,sCAAsC;QAC9G,IAAI;KACJ,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,EAAE,GAAG,CAAC,KAAe;QAC1B,WAAW,EAAE,GAAG,CAAC,YAAsB;QACvC,YAAY,EAAE,GAAG,CAAC,aAAuB;QACzC,gBAAgB,EAAE,GAAG,CAAC,kBAAmC;QACzD,SAAS,EAAE,GAAG,CAAC,SAAmB;QAClC,OAAO,EAAE,GAAG,CAAC,QAAyB;QACtC,SAAS,EAAG,GAAG,CAAC,UAA4B,IAAI,IAAI;QACpD,SAAS,EAAE,GAAG,CAAC,UAA2B;KAC1C,CAAC,CAAC,CAAC;IAEJ,SAAS;IACT,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;QACrC,GAAG,EAAE;;6BAEsB,KAAK,EAAE;QAClC,IAAI;KACJ,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG;QACd,SAAS,EAAG,SAAS,EAAE,GAAc,IAAI,CAAC;QAC1C,gBAAgB,EAAG,SAAS,EAAE,QAAmB,IAAI,CAAC;QACtD,iBAAiB,EAAG,SAAS,EAAE,SAAoB,IAAI,CAAC;QACxD,YAAY,EAAG,SAAS,EAAE,UAAqB,IAAI,CAAC;KACpD,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -1,12 +0,0 @@
1
- import { type Schedule } from '../store/schedules.js';
2
- /**
3
- * Start the schedule engine. Evaluates due schedules every 60 seconds.
4
- */
5
- export declare function startScheduler(): void;
6
- /**
7
- * Stop the schedule engine.
8
- */
9
- export declare function stopScheduler(): void;
10
- /** Manually trigger a schedule to run immediately. */
11
- export declare function fireSchedule(schedule: Schedule): Promise<void>;
12
- //# sourceMappingURL=engine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/scheduler/engine.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,QAAQ,EAAsC,MAAM,uBAAuB,CAAC;AAS1F;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAUrC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AA0BD,sDAAsD;AACtD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAiFpE"}
@@ -1,128 +0,0 @@
1
- import { sendMessage } from '../copilot/orchestrator.js';
2
- import { createChildLogger } from '../logging/logger.js';
3
- import { getEventBus } from '../squad/event-bus.js';
4
- import { runInstance } from '../squad/execution/runner.js';
5
- import { getSquadByName, listSquads } from '../squad/manager.js';
6
- import { addInboxEntry } from '../store/inbox.js';
7
- import { getDueSchedules, markScheduleFired } from '../store/schedules.js';
8
- const logger = () => createChildLogger('scheduler');
9
- let intervalHandle = null;
10
- let running = false;
11
- const TICK_INTERVAL_MS = 60_000; // Check every minute
12
- /**
13
- * Start the schedule engine. Evaluates due schedules every 60 seconds.
14
- */
15
- export function startScheduler() {
16
- const log = logger();
17
- log.info('Scheduler started');
18
- // Initial tick
19
- tick();
20
- intervalHandle = setInterval(() => {
21
- tick();
22
- }, TICK_INTERVAL_MS);
23
- }
24
- /**
25
- * Stop the schedule engine.
26
- */
27
- export function stopScheduler() {
28
- if (intervalHandle) {
29
- clearInterval(intervalHandle);
30
- intervalHandle = null;
31
- }
32
- }
33
- async function tick() {
34
- if (running)
35
- return; // Prevent overlapping ticks
36
- running = true;
37
- try {
38
- const due = await getDueSchedules();
39
- if (due.length === 0) {
40
- running = false;
41
- return;
42
- }
43
- const log = logger();
44
- log.info({ count: due.length }, 'Firing due schedules');
45
- for (const schedule of due) {
46
- await fireSchedule(schedule);
47
- }
48
- }
49
- catch (err) {
50
- logger().error({ err }, 'Scheduler tick error');
51
- }
52
- finally {
53
- running = false;
54
- }
55
- }
56
- /** Manually trigger a schedule to run immediately. */
57
- export async function fireSchedule(schedule) {
58
- const log = logger();
59
- const bus = getEventBus();
60
- // Emit fired event
61
- bus.emit({
62
- type: 'schedule:fired',
63
- id: crypto.randomUUID(),
64
- timestamp: new Date(),
65
- data: { scheduleId: schedule.id, name: schedule.name },
66
- });
67
- log.info({ scheduleId: schedule.id, name: schedule.name }, 'Firing schedule');
68
- // Mark as fired immediately (update next_run)
69
- await markScheduleFired(schedule.id, schedule.cron);
70
- try {
71
- let result;
72
- if (schedule.targetType === 'orchestrator') {
73
- // Send as if user typed it
74
- result = await sendMessage(schedule.prompt, 'web', () => { });
75
- }
76
- else {
77
- // Squad target — run instance
78
- const squads = await listSquads();
79
- const squad = squads.find((s) => s.id === schedule.targetId || s.name === schedule.targetId);
80
- if (!squad) {
81
- throw new Error(`Target squad not found: ${schedule.targetId}`);
82
- }
83
- const runResult = await runInstance({
84
- squad,
85
- objective: schedule.prompt,
86
- });
87
- if (runResult.success) {
88
- result = runResult.pr
89
- ? `Completed successfully. PR: ${runResult.pr.url}`
90
- : 'Completed successfully (no PR created).';
91
- }
92
- else {
93
- result = `Failed: ${runResult.error ?? 'unknown error'}`;
94
- }
95
- }
96
- // Post result to inbox as deliverable
97
- const squadId = schedule.targetType === 'squad' && schedule.targetId ? schedule.targetId : 'orchestrator';
98
- // Only post to inbox if we have a real squad target
99
- if (schedule.targetType === 'squad' && schedule.targetId) {
100
- await addInboxEntry({
101
- squadId: schedule.targetId,
102
- kind: 'deliverable',
103
- title: `Schedule: ${schedule.name}`,
104
- content: result,
105
- });
106
- }
107
- // Emit completed event
108
- bus.emit({
109
- type: 'schedule:completed',
110
- id: crypto.randomUUID(),
111
- timestamp: new Date(),
112
- data: { scheduleId: schedule.id, name: schedule.name, result: result.slice(0, 200) },
113
- });
114
- log.info({ scheduleId: schedule.id }, 'Schedule completed');
115
- }
116
- catch (err) {
117
- const errorMsg = err instanceof Error ? err.message : String(err);
118
- log.error({ err, scheduleId: schedule.id }, 'Schedule execution failed');
119
- // Emit failed event
120
- bus.emit({
121
- type: 'schedule:failed',
122
- id: crypto.randomUUID(),
123
- timestamp: new Date(),
124
- data: { scheduleId: schedule.id, name: schedule.name, error: errorMsg },
125
- });
126
- }
127
- }
128
- //# sourceMappingURL=engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/scheduler/engine.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { type Skill } from './store.js';
2
- export type SkillDiscoverySource = 'awesome-copilot' | 'skillssh';
3
- export interface DiscoveredSkill {
4
- name: string;
5
- title: string;
6
- description: string;
7
- url: string;
8
- source: SkillDiscoverySource;
9
- installed: boolean;
10
- registrySource?: string;
11
- skillId?: string;
12
- installs?: number;
13
- }
14
- export declare function discoverSkills(source: SkillDiscoverySource, query: string): Promise<DiscoveredSkill[]>;
15
- export declare function installDiscoveredSkill(input: {
16
- name: string;
17
- source: SkillDiscoverySource;
18
- url?: string;
19
- registrySource?: string;
20
- skillId?: string;
21
- }): Promise<Skill>;
22
- //# sourceMappingURL=discover.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/skills/discover.ts"],"names":[],"mappings":"AACA,OAAO,EAA0D,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAOhG,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAElE,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAqOD,wBAAsB,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA4B5G;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,oBAAoB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,KAAK,CAAC,CAejB"}
@@ -1,228 +0,0 @@
1
- import { createChildLogger } from '../logging/logger.js';
2
- import { installSkill, installSkillFromUrl, listInstalledSkills } from './store.js';
3
- const logger = () => createChildLogger('skills-discovery');
4
- const AWESOME_COPILOT_LLM_URL = 'https://awesome-copilot.github.com/llms.txt';
5
- const SKILLS_SH_SEARCH_URL = 'https://skills.sh/api/search';
6
- const CACHE_TTL_MS = 5 * 60 * 1000;
7
- const textCache = new Map();
8
- function normalize(value) {
9
- return value.trim().toLowerCase();
10
- }
11
- function matchesQuery(parts, query) {
12
- const needle = normalize(query);
13
- if (!needle)
14
- return true;
15
- return parts.some((part) => part?.toLowerCase().includes(needle));
16
- }
17
- function formatInstalls(installs) {
18
- if (!installs)
19
- return 'New';
20
- if (installs >= 1_000_000)
21
- return `${(installs / 1_000_000).toFixed(1).replace(/\.0$/, '')}M installs`;
22
- if (installs >= 1_000)
23
- return `${(installs / 1_000).toFixed(1).replace(/\.0$/, '')}K installs`;
24
- return `${installs} installs`;
25
- }
26
- async function fetchText(url) {
27
- const cached = textCache.get(url);
28
- if (cached && cached.expiresAt > Date.now()) {
29
- return cached.value;
30
- }
31
- const res = await fetch(url, {
32
- headers: {
33
- 'User-Agent': 'io-skills-discovery',
34
- },
35
- });
36
- if (!res.ok) {
37
- throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`);
38
- }
39
- const value = await res.text();
40
- textCache.set(url, { value, expiresAt: Date.now() + CACHE_TTL_MS });
41
- return value;
42
- }
43
- async function fetchJson(url) {
44
- const res = await fetch(url, {
45
- headers: {
46
- Accept: 'application/json',
47
- 'User-Agent': 'io-skills-discovery',
48
- },
49
- });
50
- if (!res.ok) {
51
- throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`);
52
- }
53
- return (await res.json());
54
- }
55
- function buildAwesomeCopilotUrl(skillId) {
56
- return `https://raw.githubusercontent.com/github/awesome-copilot/main/skills/${skillId}/SKILL.md`;
57
- }
58
- function buildSkillsShUrl(registrySource, skillId) {
59
- return `https://github.com/${registrySource}/tree/main/skills/${encodeURIComponent(skillId)}`;
60
- }
61
- function parseAwesomeCopilotSkills(content, query, installedSkills) {
62
- const skills = [];
63
- const lines = content.split(/\r?\n/);
64
- let inSkillsSection = false;
65
- for (const line of lines) {
66
- if (line.startsWith('## Skills')) {
67
- inSkillsSection = true;
68
- continue;
69
- }
70
- if (inSkillsSection && line.startsWith('## ')) {
71
- break;
72
- }
73
- if (!inSkillsSection)
74
- continue;
75
- const match = line.match(/^- \[(.+?)\]\((https:\/\/raw\.githubusercontent\.com\/[^)]+\/skills\/([^/]+)\/SKILL\.md)\):\s*(.+)$/);
76
- if (!match)
77
- continue;
78
- const [, title, url, skillId, description] = match;
79
- if (!matchesQuery([skillId, title, description], query))
80
- continue;
81
- skills.push({
82
- name: skillId,
83
- title,
84
- description,
85
- url,
86
- source: 'awesome-copilot',
87
- installed: installedSkills.has(normalize(skillId)),
88
- registrySource: 'github/awesome-copilot',
89
- skillId,
90
- });
91
- }
92
- return skills.slice(0, 50);
93
- }
94
- async function discoverAwesomeCopilotSkills(query, installedSkills) {
95
- const content = await fetchText(AWESOME_COPILOT_LLM_URL);
96
- return parseAwesomeCopilotSkills(content, query, installedSkills);
97
- }
98
- async function discoverSkillsShSkills(query, installedSkills) {
99
- const trimmedQuery = query.trim();
100
- if (!trimmedQuery)
101
- return [];
102
- const data = await fetchJson(`${SKILLS_SH_SEARCH_URL}?q=${encodeURIComponent(trimmedQuery)}&limit=30`);
103
- return (data.skills ?? []).flatMap((skill) => {
104
- const registrySource = skill.source?.trim();
105
- const skillId = skill.skillId?.trim();
106
- if (!registrySource || !skillId)
107
- return [];
108
- const title = skill.name?.trim() || skillId;
109
- const description = [
110
- title !== skillId ? title : undefined,
111
- `Published by ${registrySource}`,
112
- formatInstalls(skill.installs),
113
- ]
114
- .filter(Boolean)
115
- .join(' • ');
116
- return [
117
- {
118
- name: skillId,
119
- title,
120
- description,
121
- url: buildSkillsShUrl(registrySource, skillId),
122
- source: 'skillssh',
123
- installed: installedSkills.has(normalize(skillId)),
124
- registrySource,
125
- skillId,
126
- installs: skill.installs,
127
- },
128
- ];
129
- });
130
- }
131
- async function fetchGitHubSkillContent(registrySource, skillId) {
132
- const [owner, repo] = registrySource.split('/');
133
- if (!owner || !repo) {
134
- throw new Error(`Unsupported registry source: ${registrySource}`);
135
- }
136
- // Try common flat paths first (fast path)
137
- const candidates = [`skills/${skillId}/SKILL.md`, `${skillId}/SKILL.md`];
138
- for (const path of candidates) {
139
- const res = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/${path}`, {
140
- headers: {
141
- Accept: 'application/vnd.github.raw+json',
142
- 'User-Agent': 'io-skills-discovery',
143
- },
144
- });
145
- if (!res.ok)
146
- continue;
147
- const content = await res.text();
148
- if (content.trim()) {
149
- return content;
150
- }
151
- }
152
- // Fallback: search the repo tree recursively for {skillId}/SKILL.md
153
- // This handles repos where skills are nested under category subdirectories
154
- // (e.g., skills/productivity/grill-me/SKILL.md)
155
- const suffix = `${skillId}/SKILL.md`;
156
- try {
157
- const treeRes = await fetch(`https://api.github.com/repos/${owner}/${repo}/git/trees/main?recursive=1`, {
158
- headers: {
159
- Accept: 'application/json',
160
- 'User-Agent': 'io-skills-discovery',
161
- },
162
- });
163
- if (treeRes.ok) {
164
- const tree = (await treeRes.json());
165
- const match = tree.tree?.find((entry) => entry.type === 'blob' && entry.path?.endsWith(suffix));
166
- if (match?.path) {
167
- const contentRes = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/${match.path}`, {
168
- headers: {
169
- Accept: 'application/vnd.github.raw+json',
170
- 'User-Agent': 'io-skills-discovery',
171
- },
172
- });
173
- if (contentRes.ok) {
174
- const content = await contentRes.text();
175
- if (content.trim()) {
176
- return content;
177
- }
178
- }
179
- }
180
- }
181
- }
182
- catch {
183
- logger().debug({ registrySource, skillId }, 'Tree search fallback failed');
184
- }
185
- throw new Error(`Could not resolve SKILL.md for ${registrySource}/${skillId}`);
186
- }
187
- export async function discoverSkills(source, query) {
188
- const installedSkills = new Set();
189
- for (const skill of listInstalledSkills()) {
190
- installedSkills.add(normalize(skill.name));
191
- }
192
- try {
193
- if (source === 'awesome-copilot') {
194
- return await discoverAwesomeCopilotSkills(query, installedSkills);
195
- }
196
- return await discoverSkillsShSkills(query, installedSkills);
197
- }
198
- catch (error) {
199
- logger().warn({ error, source, query }, 'Skill discovery failed');
200
- if (source === 'skillssh' && query.trim()) {
201
- return [
202
- {
203
- name: query.trim().toLowerCase().replace(/\s+/g, '-'),
204
- title: query.trim(),
205
- description: 'Registry lookup is unavailable right now. This is placeholder data until the upstream API is reachable.',
206
- url: '',
207
- source: 'skillssh',
208
- installed: false,
209
- },
210
- ];
211
- }
212
- throw error;
213
- }
214
- }
215
- export async function installDiscoveredSkill(input) {
216
- if (input.source === 'skillssh' && input.registrySource && input.skillId) {
217
- const content = await fetchGitHubSkillContent(input.registrySource, input.skillId);
218
- return installSkill(input.name, content);
219
- }
220
- if (input.url) {
221
- return installSkillFromUrl(input.name, input.url || buildAwesomeCopilotUrl(input.skillId ?? input.name));
222
- }
223
- if (input.source === 'awesome-copilot') {
224
- return installSkillFromUrl(input.name, buildAwesomeCopilotUrl(input.skillId ?? input.name));
225
- }
226
- throw new Error('No install source was provided for the selected skill');
227
- }
228
- //# sourceMappingURL=discover.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/skills/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAc,MAAM,YAAY,CAAC;AAEhG,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;AAC3D,MAAM,uBAAuB,GAAG,6CAA6C,CAAC;AAC9E,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAC5D,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AA0BnC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgD,CAAC;AAE1E,SAAS,SAAS,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,KAAgC,EAAE,KAAa;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,cAAc,CAAC,QAAiB;IACxC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,QAAQ,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC;IACvG,IAAI,QAAQ,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC;IAC/F,OAAO,GAAG,QAAQ,WAAW,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,OAAO,EAAE;YACR,YAAY,EAAE,qBAAqB;SACnC;KACD,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC/B,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC;AACd,CAAC;AAED,KAAK,UAAU,SAAS,CAAI,GAAW;IACtC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,OAAO,EAAE;YACR,MAAM,EAAE,kBAAkB;YAC1B,YAAY,EAAE,qBAAqB;SACnC;KACD,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AAChC,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe;IAC9C,OAAO,wEAAwE,OAAO,WAAW,CAAC;AACnG,CAAC;AAED,SAAS,gBAAgB,CAAC,cAAsB,EAAE,OAAe;IAChE,OAAO,sBAAsB,cAAc,qBAAqB,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAe,EAAE,KAAa,EAAE,eAA4B;IAC9F,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,eAAe,GAAG,IAAI,CAAC;YACvB,SAAS;QACV,CAAC;QAED,IAAI,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM;QACP,CAAC;QAED,IAAI,CAAC,eAAe;YAAE,SAAS;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACvB,qGAAqG,CACrG,CAAC;QACF,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;QACnD,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC;YAAE,SAAS;QAElE,MAAM,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,OAAO;YACb,KAAK;YACL,WAAW;YACX,GAAG;YACH,MAAM,EAAE,iBAAiB;YACzB,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClD,cAAc,EAAE,wBAAwB;YACxC,OAAO;SACP,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,4BAA4B,CAAC,KAAa,EAAE,eAA4B;IACtF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACzD,OAAO,yBAAyB,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,KAAa,EAAE,eAA4B;IAChF,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,YAAY;QAAE,OAAO,EAAuB,CAAC;IAElD,MAAM,IAAI,GAAG,MAAM,SAAS,CAC3B,GAAG,oBAAoB,MAAM,kBAAkB,CAAC,YAAY,CAAC,WAAW,CACxE,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAE3C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC;QAC5C,MAAM,WAAW,GAAG;YACnB,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACrC,gBAAgB,cAAc,EAAE;YAChC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;SAC9B;aACC,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,KAAK,CAAC,CAAC;QAEd,OAAO;YACN;gBACC,IAAI,EAAE,OAAO;gBACb,KAAK;gBACL,WAAW;gBACX,GAAG,EAAE,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC;gBAC9C,MAAM,EAAE,UAAmB;gBAC3B,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAClD,cAAc;gBACd,OAAO;gBACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACxB;SACD,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,cAAsB,EAAE,OAAe;IAC7E,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gCAAgC,cAAc,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,0CAA0C;IAC1C,MAAM,UAAU,GAAG,CAAC,UAAU,OAAO,WAAW,EAAE,GAAG,OAAO,WAAW,CAAC,CAAC;IACzE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,gCAAgC,KAAK,IAAI,IAAI,aAAa,IAAI,EAAE,EAAE;YACzF,OAAO,EAAE;gBACR,MAAM,EAAE,iCAAiC;gBACzC,YAAY,EAAE,qBAAqB;aACnC;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,SAAS;QAEtB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACpB,OAAO,OAAO,CAAC;QAChB,CAAC;IACF,CAAC;IAED,oEAAoE;IACpE,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,MAAM,GAAG,GAAG,OAAO,WAAW,CAAC;IACrC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,KAAK,CAC1B,gCAAgC,KAAK,IAAI,IAAI,6BAA6B,EAC1E;YACC,OAAO,EAAE;gBACR,MAAM,EAAE,kBAAkB;gBAC1B,YAAY,EAAE,qBAAqB;aACnC;SACD,CACD,CAAC;QAEF,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAuD,CAAC;YAC1F,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAC5B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAChE,CAAC;YAEF,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;gBACjB,MAAM,UAAU,GAAG,MAAM,KAAK,CAC7B,gCAAgC,KAAK,IAAI,IAAI,aAAa,KAAK,CAAC,IAAI,EAAE,EACtE;oBACC,OAAO,EAAE;wBACR,MAAM,EAAE,iCAAiC;wBACzC,YAAY,EAAE,qBAAqB;qBACnC;iBACD,CACD,CAAC;gBAEF,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;oBACnB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxC,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;wBACpB,OAAO,OAAO,CAAC;oBAChB,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,6BAA6B,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,cAAc,IAAI,OAAO,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4B,EAAE,KAAa;IAC/E,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC3C,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACJ,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;YAClC,OAAO,MAAM,4BAA4B,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,MAAM,sBAAsB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;QAClE,IAAI,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,OAAO;gBACN;oBACC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;oBACrD,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;oBACnB,WAAW,EAAE,yGAAyG;oBACtH,GAAG,EAAE,EAAE;oBACP,MAAM,EAAE,UAAU;oBAClB,SAAS,EAAE,KAAK;iBAChB;aACD,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAM5C;IACA,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnF,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,sBAAsB,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACxC,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,sBAAsB,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;AAC1E,CAAC"}
@@ -1,5 +0,0 @@
1
- export { initSkills, listInstalledSkills, getSkill, installSkill, installSkillFromUrl, updateSkill, removeSkill, activateSkill, deactivateSkill, getActiveSkills, getActiveSkillsContent, } from './store.js';
2
- export { discoverSkills, installDiscoveredSkill } from './discover.js';
3
- export type { Skill, SkillActivation } from './store.js';
4
- export type { DiscoveredSkill, SkillDiscoverySource } from './discover.js';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,sBAAsB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,3 +0,0 @@
1
- export { initSkills, listInstalledSkills, getSkill, installSkill, installSkillFromUrl, updateSkill, removeSkill, activateSkill, deactivateSkill, getActiveSkills, getActiveSkillsContent, } from './store.js';
2
- export { discoverSkills, installDiscoveredSkill } from './discover.js';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,sBAAsB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,56 +0,0 @@
1
- export interface Skill {
2
- name: string;
3
- content: string;
4
- filePath: string;
5
- }
6
- export interface SkillActivation {
7
- skillName: string;
8
- targetType: 'orchestrator' | 'squad';
9
- targetId: string | null;
10
- activatedAt: string;
11
- }
12
- /**
13
- * Initialize the skills directory.
14
- */
15
- export declare function initSkills(dataDir: string): void;
16
- /**
17
- * List all installed skills.
18
- */
19
- export declare function listInstalledSkills(): Skill[];
20
- /**
21
- * Read a specific skill by name.
22
- */
23
- export declare function getSkill(name: string): Skill | null;
24
- /**
25
- * Install a skill from content (e.g., fetched from URL or provided directly).
26
- */
27
- export declare function installSkill(name: string, content: string): Skill;
28
- /**
29
- * Update an installed skill.
30
- */
31
- export declare function updateSkill(name: string, content: string): Skill;
32
- /**
33
- * Install a skill from a URL (fetches raw content).
34
- */
35
- export declare function installSkillFromUrl(name: string, url: string): Promise<Skill>;
36
- /**
37
- * Remove an installed skill.
38
- */
39
- export declare function removeSkill(name: string): void;
40
- /**
41
- * Activate a skill for a target (orchestrator or a specific squad).
42
- */
43
- export declare function activateSkill(skillName: string, targetType: 'orchestrator' | 'squad', targetId?: string): Promise<void>;
44
- /**
45
- * Deactivate a skill for a target.
46
- */
47
- export declare function deactivateSkill(skillName: string, targetType: 'orchestrator' | 'squad', targetId?: string): Promise<void>;
48
- /**
49
- * Get all activations for a target.
50
- */
51
- export declare function getActiveSkills(targetType: 'orchestrator' | 'squad', targetId?: string): Promise<SkillActivation[]>;
52
- /**
53
- * Get the combined content of all active skills for a target (for system prompt injection).
54
- */
55
- export declare function getActiveSkillsContent(targetType: 'orchestrator' | 'squad', targetId?: string): Promise<string>;
56
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/skills/store.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACpB;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,KAAK,EAAE,CAiB7C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAQnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAOjE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAEhE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAOnF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQ9C;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,cAAc,GAAG,OAAO,EACpC,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,cAAc,GAAG,OAAO,EACpC,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAaD;;GAEG;AACH,wBAAsB,eAAe,CACpC,UAAU,EAAE,cAAc,GAAG,OAAO,EACpC,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAa5B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC3C,UAAU,EAAE,cAAc,GAAG,OAAO,EACpC,QAAQ,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAajB"}