copilot-flow 0.3.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 (95) hide show
  1. package/README.md +300 -0
  2. package/bin/copilot-flow.js +13 -0
  3. package/dist/agents/executor.d.ts +24 -0
  4. package/dist/agents/executor.d.ts.map +1 -0
  5. package/dist/agents/executor.js +85 -0
  6. package/dist/agents/executor.js.map +1 -0
  7. package/dist/agents/pool.d.ts +22 -0
  8. package/dist/agents/pool.d.ts.map +1 -0
  9. package/dist/agents/pool.js +84 -0
  10. package/dist/agents/pool.js.map +1 -0
  11. package/dist/agents/registry.d.ts +16 -0
  12. package/dist/agents/registry.d.ts.map +1 -0
  13. package/dist/agents/registry.js +140 -0
  14. package/dist/agents/registry.js.map +1 -0
  15. package/dist/commands/agent.d.ts +3 -0
  16. package/dist/commands/agent.d.ts.map +1 -0
  17. package/dist/commands/agent.js +105 -0
  18. package/dist/commands/agent.js.map +1 -0
  19. package/dist/commands/doctor.d.ts +3 -0
  20. package/dist/commands/doctor.d.ts.map +1 -0
  21. package/dist/commands/doctor.js +119 -0
  22. package/dist/commands/doctor.js.map +1 -0
  23. package/dist/commands/hooks.d.ts +3 -0
  24. package/dist/commands/hooks.d.ts.map +1 -0
  25. package/dist/commands/hooks.js +75 -0
  26. package/dist/commands/hooks.js.map +1 -0
  27. package/dist/commands/index.d.ts +5 -0
  28. package/dist/commands/index.d.ts.map +1 -0
  29. package/dist/commands/index.js +31 -0
  30. package/dist/commands/index.js.map +1 -0
  31. package/dist/commands/init.d.ts +3 -0
  32. package/dist/commands/init.d.ts.map +1 -0
  33. package/dist/commands/init.js +37 -0
  34. package/dist/commands/init.js.map +1 -0
  35. package/dist/commands/memory.d.ts +3 -0
  36. package/dist/commands/memory.d.ts.map +1 -0
  37. package/dist/commands/memory.js +109 -0
  38. package/dist/commands/memory.js.map +1 -0
  39. package/dist/commands/route.d.ts +3 -0
  40. package/dist/commands/route.d.ts.map +1 -0
  41. package/dist/commands/route.js +36 -0
  42. package/dist/commands/route.js.map +1 -0
  43. package/dist/commands/status.d.ts +3 -0
  44. package/dist/commands/status.d.ts.map +1 -0
  45. package/dist/commands/status.js +58 -0
  46. package/dist/commands/status.js.map +1 -0
  47. package/dist/commands/swarm.d.ts +3 -0
  48. package/dist/commands/swarm.d.ts.map +1 -0
  49. package/dist/commands/swarm.js +106 -0
  50. package/dist/commands/swarm.js.map +1 -0
  51. package/dist/config.d.ts +16 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/config.js +95 -0
  54. package/dist/config.js.map +1 -0
  55. package/dist/core/client-manager.d.ts +19 -0
  56. package/dist/core/client-manager.d.ts.map +1 -0
  57. package/dist/core/client-manager.js +69 -0
  58. package/dist/core/client-manager.js.map +1 -0
  59. package/dist/core/error-handler.d.ts +25 -0
  60. package/dist/core/error-handler.d.ts.map +1 -0
  61. package/dist/core/error-handler.js +135 -0
  62. package/dist/core/error-handler.js.map +1 -0
  63. package/dist/core/retry.d.ts +56 -0
  64. package/dist/core/retry.d.ts.map +1 -0
  65. package/dist/core/retry.js +107 -0
  66. package/dist/core/retry.js.map +1 -0
  67. package/dist/hooks/executor.d.ts +25 -0
  68. package/dist/hooks/executor.d.ts.map +1 -0
  69. package/dist/hooks/executor.js +57 -0
  70. package/dist/hooks/executor.js.map +1 -0
  71. package/dist/hooks/registry.d.ts +22 -0
  72. package/dist/hooks/registry.d.ts.map +1 -0
  73. package/dist/hooks/registry.js +36 -0
  74. package/dist/hooks/registry.js.map +1 -0
  75. package/dist/index.d.ts +20 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +52 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/memory/store.d.ts +32 -0
  80. package/dist/memory/store.d.ts.map +1 -0
  81. package/dist/memory/store.js +149 -0
  82. package/dist/memory/store.js.map +1 -0
  83. package/dist/output.d.ts +26 -0
  84. package/dist/output.d.ts.map +1 -0
  85. package/dist/output.js +157 -0
  86. package/dist/output.js.map +1 -0
  87. package/dist/swarm/coordinator.d.ts +20 -0
  88. package/dist/swarm/coordinator.d.ts.map +1 -0
  89. package/dist/swarm/coordinator.js +129 -0
  90. package/dist/swarm/coordinator.js.map +1 -0
  91. package/dist/types.d.ts +99 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +22 -0
  94. package/dist/types.js.map +1 -0
  95. package/package.json +50 -0
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerMemory = registerMemory;
4
+ const store_js_1 = require("../memory/store.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerMemory(program) {
7
+ const memory = program.command('memory').description('Manage the namespaced memory store');
8
+ // ── memory store ───────────────────────────────────────────────────────────
9
+ memory
10
+ .command('store')
11
+ .description('Store a value in memory')
12
+ .requiredOption('--namespace <ns>', 'Memory namespace')
13
+ .requiredOption('--key <key>', 'Entry key')
14
+ .requiredOption('--value <value>', 'Value to store')
15
+ .option('--ttl <ms>', 'Time-to-live in milliseconds (optional)')
16
+ .option('--tags <tags>', 'Comma-separated tags')
17
+ .action((opts) => {
18
+ const store = (0, store_js_1.getMemoryStore)();
19
+ store.store(opts.namespace, opts.key, opts.value, {
20
+ ttlMs: opts.ttl != null ? parseInt(opts.ttl, 10) : undefined,
21
+ tags: opts.tags?.split(',').map(t => t.trim()),
22
+ });
23
+ output_js_1.output.success(`Stored: ${opts.namespace}/${opts.key}`);
24
+ });
25
+ // ── memory retrieve ────────────────────────────────────────────────────────
26
+ memory
27
+ .command('retrieve')
28
+ .description('Retrieve a value from memory')
29
+ .requiredOption('--namespace <ns>', 'Memory namespace')
30
+ .requiredOption('--key <key>', 'Entry key')
31
+ .action((opts) => {
32
+ const store = (0, store_js_1.getMemoryStore)();
33
+ const value = store.retrieve(opts.namespace, opts.key);
34
+ if (value == null) {
35
+ output_js_1.output.warn(`Not found: ${opts.namespace}/${opts.key}`);
36
+ process.exit(1);
37
+ }
38
+ output_js_1.output.print(value);
39
+ });
40
+ // ── memory search ──────────────────────────────────────────────────────────
41
+ memory
42
+ .command('search')
43
+ .description('Search entries in a namespace')
44
+ .requiredOption('--namespace <ns>', 'Memory namespace')
45
+ .requiredOption('--query <query>', 'Search query (substring match on key and value)')
46
+ .option('--limit <n>', 'Max results', '20')
47
+ .action((opts) => {
48
+ const store = (0, store_js_1.getMemoryStore)();
49
+ const results = store.search(opts.namespace, opts.query, parseInt(opts.limit, 10));
50
+ if (results.length === 0) {
51
+ output_js_1.output.dim('No results found.');
52
+ return;
53
+ }
54
+ output_js_1.output.header(`Search results (${results.length})`);
55
+ for (const entry of results) {
56
+ (0, output_js_1.printTable)([
57
+ ['Key', entry.key],
58
+ ['Value', entry.value.slice(0, 100) + (entry.value.length > 100 ? '…' : '')],
59
+ ['Tags', entry.tags.join(', ') || '—'],
60
+ ['Created', new Date(entry.createdAt).toISOString()],
61
+ ]);
62
+ output_js_1.output.blank();
63
+ }
64
+ });
65
+ // ── memory list ────────────────────────────────────────────────────────────
66
+ memory
67
+ .command('list')
68
+ .description('List all entries in a namespace')
69
+ .requiredOption('--namespace <ns>', 'Memory namespace')
70
+ .action((opts) => {
71
+ const store = (0, store_js_1.getMemoryStore)();
72
+ const entries = store.list(opts.namespace);
73
+ if (entries.length === 0) {
74
+ output_js_1.output.dim(`No entries in namespace: ${opts.namespace}`);
75
+ return;
76
+ }
77
+ output_js_1.output.header(`Memory: ${opts.namespace} (${entries.length} entries)`);
78
+ for (const entry of entries) {
79
+ output_js_1.output.print(` ${entry.key}: ${entry.value.slice(0, 60)}${entry.value.length > 60 ? '…' : ''}`);
80
+ }
81
+ });
82
+ // ── memory delete ──────────────────────────────────────────────────────────
83
+ memory
84
+ .command('delete')
85
+ .description('Delete an entry from memory')
86
+ .requiredOption('--namespace <ns>', 'Memory namespace')
87
+ .requiredOption('--key <key>', 'Entry key')
88
+ .action((opts) => {
89
+ const store = (0, store_js_1.getMemoryStore)();
90
+ const deleted = store.delete(opts.namespace, opts.key);
91
+ if (deleted) {
92
+ output_js_1.output.success(`Deleted: ${opts.namespace}/${opts.key}`);
93
+ }
94
+ else {
95
+ output_js_1.output.warn(`Not found: ${opts.namespace}/${opts.key}`);
96
+ }
97
+ });
98
+ // ── memory clear ───────────────────────────────────────────────────────────
99
+ memory
100
+ .command('clear')
101
+ .description('Delete all entries in a namespace')
102
+ .requiredOption('--namespace <ns>', 'Memory namespace')
103
+ .action((opts) => {
104
+ const store = (0, store_js_1.getMemoryStore)();
105
+ const count = store.clear(opts.namespace);
106
+ output_js_1.output.success(`Cleared ${count} entries from: ${opts.namespace}`);
107
+ });
108
+ }
109
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerRoute(program: Command): void;
3
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/commands/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+BpD"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerRoute = registerRoute;
4
+ const registry_js_1 = require("../agents/registry.js");
5
+ const output_js_1 = require("../output.js");
6
+ function registerRoute(program) {
7
+ const route = program.command('route').description('Route tasks to the best agent type');
8
+ // ── route task ─────────────────────────────────────────────────────────────
9
+ route
10
+ .command('task')
11
+ .description('Suggest the best agent type for a task')
12
+ .requiredOption('--task <task>', 'Task description')
13
+ .action((opts) => {
14
+ const type = (0, registry_js_1.routeTask)(opts.task);
15
+ const def = registry_js_1.AGENT_REGISTRY[type];
16
+ output_js_1.output.header('Routing Result');
17
+ (0, output_js_1.printTable)([
18
+ ['Task', opts.task.slice(0, 80)],
19
+ ['Agent', (0, output_js_1.agentBadge)(type)],
20
+ ['Description', def.description],
21
+ ['Capabilities', def.capabilities.join(', ')],
22
+ ]);
23
+ });
24
+ // ── route list-agents ──────────────────────────────────────────────────────
25
+ route
26
+ .command('list-agents')
27
+ .description('List all agent types with their capabilities')
28
+ .action(() => {
29
+ output_js_1.output.header('Available Agent Types');
30
+ for (const type of (0, registry_js_1.listAgentTypes)()) {
31
+ const def = registry_js_1.AGENT_REGISTRY[type];
32
+ output_js_1.output.print(` ${(0, output_js_1.agentBadge)(type).padEnd(32)} ${def.description}`);
33
+ }
34
+ });
35
+ }
36
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/commands/route.ts"],"names":[],"mappings":";;AAIA,sCA+BC;AAlCD,uDAAkF;AAClF,4CAA8D;AAE9D,SAAgB,aAAa,CAAC,OAAgB;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAEzF,8EAA8E;IAC9E,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,cAAc,CAAC,eAAe,EAAE,kBAAkB,CAAC;SACnD,MAAM,CAAC,CAAC,IAAsB,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,IAAA,uBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,4BAAc,CAAC,IAAI,CAAC,CAAC;QACjC,kBAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAChC,IAAA,sBAAU,EAAC;YACT,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC,OAAO,EAAE,IAAA,sBAAU,EAAC,IAAI,CAAC,CAAC;YAC3B,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC;YAChC,CAAC,cAAc,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,8EAA8E;IAC9E,KAAK;SACF,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,GAAG,EAAE;QACX,kBAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,IAAA,4BAAc,GAAE,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,4BAAc,CAAC,IAAI,CAAC,CAAC;YACjC,kBAAM,CAAC,KAAK,CAAC,KAAK,IAAA,sBAAU,EAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerStatus(program: Command): void;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoDrD"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerStatus = registerStatus;
4
+ const pool_js_1 = require("../agents/pool.js");
5
+ const store_js_1 = require("../memory/store.js");
6
+ const output_js_1 = require("../output.js");
7
+ const config_js_1 = require("../config.js");
8
+ function registerStatus(program) {
9
+ program
10
+ .command('status')
11
+ .description('Show system status overview')
12
+ .action(() => {
13
+ const initialised = (0, config_js_1.isInitialised)();
14
+ output_js_1.output.header('copilot-flow status');
15
+ (0, output_js_1.printTable)([
16
+ ['Initialised', initialised ? '✓ Yes' : '✗ No — run: copilot-flow init'],
17
+ ]);
18
+ if (!initialised)
19
+ return;
20
+ const config = (0, config_js_1.loadConfig)();
21
+ output_js_1.output.blank();
22
+ output_js_1.output.print('Configuration');
23
+ (0, output_js_1.printTable)([
24
+ ['Default model', config.defaultModel],
25
+ ['Topology', config.swarm.topology],
26
+ ['Max agents', String(config.swarm.maxAgents)],
27
+ ['Max retries', String(config.retry.maxAttempts)],
28
+ ['Backoff', config.retry.backoffStrategy],
29
+ ['Jitter', config.retry.jitter ? 'on' : 'off'],
30
+ ]);
31
+ output_js_1.output.blank();
32
+ output_js_1.output.print('Agents');
33
+ const agents = pool_js_1.agentPool.list();
34
+ if (agents.length === 0) {
35
+ output_js_1.output.dim(' No agent records found.');
36
+ }
37
+ else {
38
+ const byStatus = agents.reduce((acc, a) => {
39
+ acc[a.status] = (acc[a.status] ?? 0) + 1;
40
+ return acc;
41
+ }, {});
42
+ for (const [status, count] of Object.entries(byStatus)) {
43
+ output_js_1.output.print(` ${status}: ${count}`);
44
+ }
45
+ }
46
+ output_js_1.output.blank();
47
+ output_js_1.output.print('Memory');
48
+ try {
49
+ const store = (0, store_js_1.getMemoryStore)(config.memory.path);
50
+ const swarmEntries = store.list('swarm').length;
51
+ output_js_1.output.print(` swarm namespace: ${swarmEntries} entries`);
52
+ }
53
+ catch {
54
+ output_js_1.output.dim(' Memory store not available.');
55
+ }
56
+ });
57
+ }
58
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;AAMA,wCAoDC;AAzDD,+CAA8C;AAC9C,iDAAoD;AACpD,4CAAkD;AAClD,4CAAyD;AAEzD,SAAgB,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,WAAW,GAAG,IAAA,yBAAa,GAAE,CAAC;QACpC,kBAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAErC,IAAA,sBAAU,EAAC;YACT,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC;SACzE,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;QAE5B,kBAAM,CAAC,KAAK,EAAE,CAAC;QACf,kBAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9B,IAAA,sBAAU,EAAC;YACT,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC;YACtC,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;YACnC,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9C,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACjD,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;YACzC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;SAC/C,CAAC,CAAC;QAEH,kBAAM,CAAC,KAAK,EAAE,CAAC;QACf,kBAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,mBAAS,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,kBAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAyB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBAChE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACzC,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvD,kBAAM,CAAC,KAAK,CAAC,KAAK,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,kBAAM,CAAC,KAAK,EAAE,CAAC;QACf,kBAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAA,yBAAc,EAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YAChD,kBAAM,CAAC,KAAK,CAAC,sBAAsB,YAAY,UAAU,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,kBAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerSwarm(program: Command): void;
3
+ //# sourceMappingURL=swarm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../src/commands/swarm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyFpD"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSwarm = registerSwarm;
4
+ const coordinator_js_1 = require("../swarm/coordinator.js");
5
+ const registry_js_1 = require("../agents/registry.js");
6
+ const output_js_1 = require("../output.js");
7
+ const config_js_1 = require("../config.js");
8
+ function registerSwarm(program) {
9
+ const swarm = program.command('swarm').description('Manage multi-agent swarms');
10
+ // ── swarm init ─────────────────────────────────────────────────────────────
11
+ swarm
12
+ .command('init')
13
+ .description('Configure swarm defaults')
14
+ .option('--topology <type>', 'Topology (hierarchical|mesh|sequential)', 'hierarchical')
15
+ .option('--max-agents <n>', 'Maximum concurrent agents', '8')
16
+ .action((opts) => {
17
+ const config = (0, config_js_1.loadConfig)();
18
+ config.swarm.topology = opts.topology;
19
+ config.swarm.maxAgents = parseInt(opts.maxAgents, 10);
20
+ (0, config_js_1.saveConfig)(config);
21
+ output_js_1.output.success(`Swarm configured: topology=${config.swarm.topology}, maxAgents=${config.swarm.maxAgents}`);
22
+ });
23
+ // ── swarm start ────────────────────────────────────────────────────────────
24
+ swarm
25
+ .command('start')
26
+ .description('Run a multi-agent swarm for a task')
27
+ .requiredOption('--task <task>', 'High-level task to decompose across agents')
28
+ .option('--topology <type>', 'Override topology for this run')
29
+ .option('--agents <list>', 'Comma-separated agent types (e.g. researcher,coder,reviewer)')
30
+ .option('--stream', 'Stream agent outputs as they arrive')
31
+ .option('--max-retries <n>', 'Retry attempts per agent', '3')
32
+ .option('--retry-delay <ms>', 'Initial retry delay in ms', '1000')
33
+ .option('--retry-strategy <strategy>', 'Backoff strategy (exponential|linear|constant|fibonacci)', 'exponential')
34
+ .action(async (opts) => {
35
+ const config = (0, config_js_1.loadConfig)();
36
+ const topology = (opts.topology ?? config.swarm.topology);
37
+ const tasks = buildTaskList(opts.task, opts.agents, {
38
+ maxAttempts: parseInt(opts.maxRetries, 10),
39
+ initialDelayMs: parseInt(opts.retryDelay, 10),
40
+ backoffStrategy: opts.retryStrategy,
41
+ });
42
+ output_js_1.output.header(`Swarm: ${topology}`);
43
+ output_js_1.output.dim(`Pipeline: ${tasks.map(t => t.agentType).join(' → ')}`);
44
+ output_js_1.output.blank();
45
+ const results = await (0, coordinator_js_1.runSwarm)(tasks, topology, {
46
+ onProgress: opts.stream
47
+ ? (_taskId, agentType, chunk) => {
48
+ process.stdout.write(`${(0, output_js_1.agentBadge)(agentType)} ${chunk}`);
49
+ }
50
+ : undefined,
51
+ });
52
+ if (opts.stream)
53
+ output_js_1.output.blank();
54
+ output_js_1.output.header('Results');
55
+ for (const [taskId, result] of results) {
56
+ const icon = result.success ? '✓' : '✗';
57
+ output_js_1.output.print(`${icon} [${taskId}] ${(0, output_js_1.agentBadge)(result.agentType)} — ${result.durationMs}ms` +
58
+ (result.attempts > 1 ? ` (${result.attempts} attempts)` : ''));
59
+ if (!opts.stream && result.success) {
60
+ output_js_1.output.dim(result.output.slice(0, 200) + (result.output.length > 200 ? '…' : ''));
61
+ }
62
+ else if (!result.success) {
63
+ output_js_1.output.error(result.error ?? 'Unknown error');
64
+ }
65
+ output_js_1.output.blank();
66
+ }
67
+ });
68
+ // ── swarm status ───────────────────────────────────────────────────────────
69
+ swarm
70
+ .command('status')
71
+ .description('Show current swarm configuration')
72
+ .action(() => {
73
+ const config = (0, config_js_1.loadConfig)();
74
+ output_js_1.output.header('Swarm Configuration');
75
+ output_js_1.output.print(` Topology : ${config.swarm.topology}`);
76
+ output_js_1.output.print(` Max agents : ${config.swarm.maxAgents}`);
77
+ output_js_1.output.print(` Model : ${config.defaultModel}`);
78
+ output_js_1.output.print(` Max retries: ${config.retry.maxAttempts}`);
79
+ output_js_1.output.print(` Backoff : ${config.retry.backoffStrategy}`);
80
+ });
81
+ }
82
+ function buildTaskList(task, agentsFlag, retryConfig) {
83
+ if (agentsFlag) {
84
+ const types = agentsFlag.split(',').map(s => s.trim());
85
+ return types.map((type, i) => ({
86
+ id: `task-${i + 1}`,
87
+ agentType: type,
88
+ prompt: task,
89
+ dependsOn: i > 0 ? [`task-${i}`] : undefined,
90
+ retryConfig,
91
+ }));
92
+ }
93
+ // Default pipeline based on task type
94
+ const suggested = (0, registry_js_1.routeTask)(task);
95
+ const pipeline = suggested === 'coder'
96
+ ? ['researcher', 'coder', 'reviewer']
97
+ : [suggested, 'reviewer'];
98
+ return pipeline.map((type, i) => ({
99
+ id: `task-${i + 1}`,
100
+ agentType: type,
101
+ prompt: task,
102
+ dependsOn: i > 0 ? [`task-${i}`] : undefined,
103
+ retryConfig,
104
+ }));
105
+ }
106
+ //# sourceMappingURL=swarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/commands/swarm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Configuration loading, defaults, and persistence for copilot-flow.
3
+ */
4
+ import type { CopilotFlowConfig } from './types.js';
5
+ export declare const DEFAULT_CONFIG: CopilotFlowConfig;
6
+ /** Resolve the config file path relative to cwd. */
7
+ export declare function getConfigPath(cwd?: string): string;
8
+ /** Load config from disk, merging with defaults. Returns defaults if file missing. */
9
+ export declare function loadConfig(cwd?: string): CopilotFlowConfig;
10
+ /** Write config to disk. Creates the directory if it doesn't exist. */
11
+ export declare function saveConfig(config: CopilotFlowConfig, cwd?: string): void;
12
+ /** Check whether the config directory has been initialised. */
13
+ export declare function isInitialised(cwd?: string): boolean;
14
+ /** Ensure the .copilot-flow/ runtime directories exist. */
15
+ export declare function ensureRuntimeDirs(cwd?: string): void;
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAOpD,eAAO,MAAM,cAAc,EAAE,iBAoB5B,CAAC;AAEF,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,GAAG,SAAgB,GAAG,MAAM,CAEzD;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,GAAG,SAAgB,GAAG,iBAAiB,CAcjE;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAgB,GAAG,IAAI,CAS/E;AAiBD,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,GAAG,SAAgB,GAAG,OAAO,CAE1D;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,GAAG,SAAgB,GAAG,IAAI,CAQ3D"}
package/dist/config.js ADDED
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration loading, defaults, and persistence for copilot-flow.
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DEFAULT_CONFIG = void 0;
10
+ exports.getConfigPath = getConfigPath;
11
+ exports.loadConfig = loadConfig;
12
+ exports.saveConfig = saveConfig;
13
+ exports.isInitialised = isInitialised;
14
+ exports.ensureRuntimeDirs = ensureRuntimeDirs;
15
+ const fs_1 = __importDefault(require("fs"));
16
+ const path_1 = __importDefault(require("path"));
17
+ const retry_js_1 = require("./core/retry.js");
18
+ const CONFIG_DIR = '.copilot-flow';
19
+ const CONFIG_FILE = 'config.json';
20
+ const CONFIG_VERSION = '1.0.0';
21
+ exports.DEFAULT_CONFIG = {
22
+ version: CONFIG_VERSION,
23
+ defaultModel: process.env.COPILOT_FLOW_DEFAULT_MODEL ?? 'gpt-4o',
24
+ swarm: {
25
+ topology: 'hierarchical',
26
+ maxAgents: 8,
27
+ },
28
+ memory: {
29
+ backend: 'sqlite',
30
+ path: path_1.default.join(CONFIG_DIR, 'memory.db'),
31
+ },
32
+ retry: {
33
+ ...retry_js_1.DEFAULT_RETRY_CONFIG,
34
+ maxAttempts: parseInt(process.env.COPILOT_FLOW_MAX_RETRIES ?? '3', 10),
35
+ initialDelayMs: parseInt(process.env.COPILOT_FLOW_RETRY_DELAY_MS ?? '1000', 10),
36
+ },
37
+ hooks: {
38
+ enabled: true,
39
+ timeoutMs: 5_000,
40
+ },
41
+ };
42
+ /** Resolve the config file path relative to cwd. */
43
+ function getConfigPath(cwd = process.cwd()) {
44
+ return path_1.default.join(cwd, CONFIG_DIR, CONFIG_FILE);
45
+ }
46
+ /** Load config from disk, merging with defaults. Returns defaults if file missing. */
47
+ function loadConfig(cwd = process.cwd()) {
48
+ const configPath = getConfigPath(cwd);
49
+ if (!fs_1.default.existsSync(configPath)) {
50
+ return exports.DEFAULT_CONFIG;
51
+ }
52
+ try {
53
+ const raw = fs_1.default.readFileSync(configPath, 'utf-8');
54
+ const parsed = JSON.parse(raw);
55
+ return mergeConfig(exports.DEFAULT_CONFIG, parsed);
56
+ }
57
+ catch {
58
+ return exports.DEFAULT_CONFIG;
59
+ }
60
+ }
61
+ /** Write config to disk. Creates the directory if it doesn't exist. */
62
+ function saveConfig(config, cwd = process.cwd()) {
63
+ const configDir = path_1.default.join(cwd, CONFIG_DIR);
64
+ const configPath = path_1.default.join(configDir, CONFIG_FILE);
65
+ if (!fs_1.default.existsSync(configDir)) {
66
+ fs_1.default.mkdirSync(configDir, { recursive: true });
67
+ }
68
+ fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
69
+ }
70
+ /** Deep merge partial config over base config. */
71
+ function mergeConfig(base, override) {
72
+ return {
73
+ ...base,
74
+ ...override,
75
+ swarm: { ...base.swarm, ...(override.swarm ?? {}) },
76
+ memory: { ...base.memory, ...(override.memory ?? {}) },
77
+ retry: { ...base.retry, ...(override.retry ?? {}) },
78
+ hooks: { ...base.hooks, ...(override.hooks ?? {}) },
79
+ };
80
+ }
81
+ /** Check whether the config directory has been initialised. */
82
+ function isInitialised(cwd = process.cwd()) {
83
+ return fs_1.default.existsSync(getConfigPath(cwd));
84
+ }
85
+ /** Ensure the .copilot-flow/ runtime directories exist. */
86
+ function ensureRuntimeDirs(cwd = process.cwd()) {
87
+ const base = path_1.default.join(cwd, CONFIG_DIR);
88
+ for (const sub of ['', 'agents', 'swarm']) {
89
+ const dir = path_1.default.join(base, sub);
90
+ if (!fs_1.default.existsSync(dir)) {
91
+ fs_1.default.mkdirSync(dir, { recursive: true });
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Singleton manager for the CopilotClient lifecycle.
3
+ * Ensures the client is started once and stopped on process exit.
4
+ */
5
+ import { CopilotClient } from '@github/copilot-sdk';
6
+ export declare class ClientManager {
7
+ private client;
8
+ private started;
9
+ /** Return the running CopilotClient, starting it lazily if needed. */
10
+ getClient(): Promise<CopilotClient>;
11
+ /** Ping the client to verify connectivity. */
12
+ ping(): Promise<boolean>;
13
+ /** Gracefully stop all sessions and the client. */
14
+ shutdown(): Promise<void>;
15
+ get isRunning(): boolean;
16
+ }
17
+ /** Process-wide singleton. Import this everywhere you need a client. */
18
+ export declare const clientManager: ClientManager;
19
+ //# sourceMappingURL=client-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-manager.d.ts","sourceRoot":"","sources":["../../src/core/client-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,OAAO,CAAS;IAExB,sEAAsE;IAChE,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IA0BzC,8CAA8C;IACxC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAU9B,mDAAmD;IAC7C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAe/B,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED,wEAAwE;AACxE,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * Singleton manager for the CopilotClient lifecycle.
4
+ * Ensures the client is started once and stopped on process exit.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.clientManager = exports.ClientManager = void 0;
8
+ const copilot_sdk_1 = require("@github/copilot-sdk");
9
+ const output_js_1 = require("../output.js");
10
+ class ClientManager {
11
+ client = null;
12
+ started = false;
13
+ /** Return the running CopilotClient, starting it lazily if needed. */
14
+ async getClient() {
15
+ if (this.client && this.started) {
16
+ return this.client;
17
+ }
18
+ const token = process.env.GITHUB_TOKEN;
19
+ this.client = new copilot_sdk_1.CopilotClient(token
20
+ ? { githubToken: token }
21
+ : { useLoggedInUser: true });
22
+ output_js_1.output.debug('Starting CopilotClient...');
23
+ await this.client.start();
24
+ this.started = true;
25
+ output_js_1.output.debug('CopilotClient started.');
26
+ // Register cleanup on exit
27
+ process.once('exit', () => void this.shutdown());
28
+ process.once('SIGINT', async () => { await this.shutdown(); process.exit(0); });
29
+ process.once('SIGTERM', async () => { await this.shutdown(); process.exit(0); });
30
+ return this.client;
31
+ }
32
+ /** Ping the client to verify connectivity. */
33
+ async ping() {
34
+ try {
35
+ const client = await this.getClient();
36
+ await client.ping();
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ /** Gracefully stop all sessions and the client. */
44
+ async shutdown() {
45
+ if (!this.client || !this.started)
46
+ return;
47
+ output_js_1.output.debug('Shutting down CopilotClient...');
48
+ try {
49
+ await this.client.stop();
50
+ }
51
+ catch {
52
+ // Force stop if graceful fails
53
+ try {
54
+ await this.client.forceStop();
55
+ }
56
+ catch { /* ignore */ }
57
+ }
58
+ this.started = false;
59
+ this.client = null;
60
+ output_js_1.output.debug('CopilotClient stopped.');
61
+ }
62
+ get isRunning() {
63
+ return this.started && this.client !== null;
64
+ }
65
+ }
66
+ exports.ClientManager = ClientManager;
67
+ /** Process-wide singleton. Import this everywhere you need a client. */
68
+ exports.clientManager = new ClientManager();
69
+ //# sourceMappingURL=client-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-manager.js","sourceRoot":"","sources":["../../src/core/client-manager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qDAAoD;AACpD,4CAAsC;AAEtC,MAAa,aAAa;IAChB,MAAM,GAAyB,IAAI,CAAC;IACpC,OAAO,GAAG,KAAK,CAAC;IAExB,sEAAsE;IACtE,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAEvC,IAAI,CAAC,MAAM,GAAG,IAAI,2BAAa,CAC7B,KAAK;YACH,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE;YACxB,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAC9B,CAAC;QAEF,kBAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,kBAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAEvC,2BAA2B;QAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjF,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1C,kBAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;YAC/B,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,kBAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC9C,CAAC;CACF;AA7DD,sCA6DC;AAED,wEAAwE;AAC3D,QAAA,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Error classification for GitHub Copilot SDK errors.
3
+ * Maps raw errors into structured CopilotFlowError with category and retryability.
4
+ */
5
+ export type CopilotFlowErrorCategory = 'copilot_not_installed' | 'authentication' | 'authorization' | 'not_found' | 'rate_limit' | 'timeout' | 'session_error' | 'network' | 'validation' | 'unknown';
6
+ export interface CopilotFlowError {
7
+ category: CopilotFlowErrorCategory;
8
+ message: string;
9
+ /** Whether this error type is safe to retry. */
10
+ retryable: boolean;
11
+ /** Suggested delay before retry (ms). Present for rate_limit and session_error. */
12
+ retryAfterMs?: number;
13
+ originalError?: unknown;
14
+ }
15
+ /** Classify an unknown thrown value into a structured CopilotFlowError. */
16
+ export declare function classifyError(error: unknown): CopilotFlowError;
17
+ /** Format a CopilotFlowError for display in the terminal. */
18
+ export declare function formatError(error: CopilotFlowError): string;
19
+ /**
20
+ * Wraps an unknown error as a CopilotFlowError and re-throws it.
21
+ * Useful for catch blocks that need structured error info.
22
+ */
23
+ export declare function asCopilotFlowError(error: unknown): CopilotFlowError;
24
+ export declare function isCopilotFlowError(value: unknown): value is CopilotFlowError;
25
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,wBAAwB,GAChC,uBAAuB,GACvB,gBAAgB,GAChB,eAAe,GACf,WAAW,GACX,YAAY,GACZ,SAAS,GACT,eAAe,GACf,SAAS,GACT,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,wBAAwB,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA+FD,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAsB9D;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAW3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAGnE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAQ5E"}