autodev-cli 1.4.126 → 1.4.128

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.
package/out/cli.js CHANGED
@@ -47,6 +47,7 @@ const tailOutput_1 = require("./commands/tailOutput");
47
47
  const export_1 = require("./commands/export");
48
48
  const import_1 = require("./commands/import");
49
49
  const mcpOperate_1 = require("./commands/mcpOperate");
50
+ const office_1 = require("./commands/office");
50
51
  const connect_2 = require("./connect");
51
52
  const logger_1 = require("./logger");
52
53
  // eslint-disable-next-line @typescript-eslint/no-var-requires
@@ -122,6 +123,7 @@ const program = new commander_1.Command()
122
123
  (0, export_1.exportCommand)(program);
123
124
  (0, import_1.importCommand)(program);
124
125
  (0, mcpOperate_1.mcpOperateCommand)(program);
126
+ (0, office_1.officeCommand)(program);
125
127
  program.parseAsync(process.argv).catch((err) => {
126
128
  console.error(err.message);
127
129
  process.exit(1);
package/out/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function officeCommand(program: Command): void;
@@ -0,0 +1,399 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.officeCommand = officeCommand;
37
+ const os = __importStar(require("os"));
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const http = __importStar(require("http"));
41
+ const https = __importStar(require("https"));
42
+ const url_1 = require("url");
43
+ const child_process_1 = require("child_process");
44
+ const logger_1 = require("../logger");
45
+ const connect_1 = require("../connect");
46
+ // ---------------------------------------------------------------------------
47
+ // `autodev office <slug>` — run a WHOLE office with one command.
48
+ //
49
+ // A non-technical user creates an office (with N characters) in the pixel-office
50
+ // web UI, then runs `autodev office <slug>` here. This THIN orchestration layer:
51
+ // 1. lists the office's characters via the pixel-office HTTP API,
52
+ // 2. for each character, fetches its per-agent credentials and binds a
53
+ // dedicated workspace with the EXISTING single-agent machinery
54
+ // (`applyWsUrl`, the same code path `autodev connect --url` uses), then
55
+ // 3. spawns the EXISTING `autodev start` loop as a child process per
56
+ // character (the loop is a blocking singleton — one loop = one process).
57
+ //
58
+ // A lightweight watcher re-lists the office every N seconds and auto-starts any
59
+ // NEW character that appears later in the web — so agents created after launch
60
+ // just come online with no extra command. Ctrl-C stops every spawned loop.
61
+ //
62
+ // No new binding/loop logic is invented here; this is pure orchestration over
63
+ // existing pieces.
64
+ // ---------------------------------------------------------------------------
65
+ // Office rows store a provider FAMILY name ('grok'/'claude') OR a full variant.
66
+ // `autodev start -p` needs a VALID id — the bare family is rejected ("Unknown
67
+ // provider"), so normalise it. Mirrors toAutodevProvider in the desktop app
68
+ // (autodev-app/src/main/pixelOffice.ts).
69
+ const VALID_PROVIDERS = new Set([
70
+ 'claude-cli', 'claude-tui', 'copilot-cli', 'copilot-sdk',
71
+ 'opencode-cli', 'opencode-sdk', 'grok-cli', 'grok-tui',
72
+ ]);
73
+ function toAutodevProvider(provider) {
74
+ const p = String(provider ?? '').trim();
75
+ if (VALID_PROVIDERS.has(p)) {
76
+ return p;
77
+ }
78
+ const l = p.toLowerCase();
79
+ if (l.startsWith('grok')) {
80
+ return 'grok-tui';
81
+ }
82
+ if (l.startsWith('claude')) {
83
+ return 'claude-cli';
84
+ }
85
+ if (l.startsWith('opencode')) {
86
+ return 'opencode-cli';
87
+ }
88
+ if (l.startsWith('copilot')) {
89
+ return 'copilot-cli';
90
+ }
91
+ return 'claude-cli';
92
+ }
93
+ /** GET JSON with a `pat_` Bearer token (built-in http/https, no deps). */
94
+ function fetchJsonAuth(url, token, timeoutMs = 15_000) {
95
+ return new Promise((resolve, reject) => {
96
+ let parsed;
97
+ try {
98
+ parsed = new url_1.URL(url);
99
+ }
100
+ catch {
101
+ reject(new Error(`Invalid URL: ${url}`));
102
+ return;
103
+ }
104
+ const lib = parsed.protocol === 'http:' ? http : https;
105
+ const req = lib.request(url, {
106
+ method: 'GET',
107
+ headers: {
108
+ 'Accept': 'application/json',
109
+ 'Authorization': `Bearer ${token}`,
110
+ 'User-Agent': 'autodev-cli',
111
+ },
112
+ }, (res) => {
113
+ const chunks = [];
114
+ res.on('data', (c) => chunks.push(c));
115
+ res.on('end', () => {
116
+ const body = Buffer.concat(chunks).toString('utf8');
117
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
118
+ try {
119
+ resolve(JSON.parse(body));
120
+ }
121
+ catch (e) {
122
+ reject(new Error(`Invalid JSON from ${url}: ${e.message}`));
123
+ }
124
+ }
125
+ else if (res.statusCode === 401 || res.statusCode === 403) {
126
+ reject(new Error(`Auth failed (HTTP ${res.statusCode}) — check --token. ${body.slice(0, 200)}`));
127
+ }
128
+ else {
129
+ reject(new Error(`HTTP ${res.statusCode} from ${url}: ${body.slice(0, 300)}`));
130
+ }
131
+ });
132
+ });
133
+ req.setTimeout(timeoutMs, () => { req.destroy(new Error(`Timed out after ${timeoutMs}ms fetching ${url}`)); });
134
+ req.on('error', reject);
135
+ req.end();
136
+ });
137
+ }
138
+ /** Normalise the /agents roster response (data[] | data.agents[] | agents[] | bare array). */
139
+ function normalizeRoster(json) {
140
+ const raw = json;
141
+ let list = [];
142
+ if (Array.isArray(raw?.data)) {
143
+ list = raw.data;
144
+ }
145
+ else if (Array.isArray(raw?.data?.agents)) {
146
+ list = raw.data.agents;
147
+ }
148
+ else if (Array.isArray(raw?.agents)) {
149
+ list = raw.agents;
150
+ }
151
+ else if (Array.isArray(json)) {
152
+ list = json;
153
+ }
154
+ return list.map((a) => ({
155
+ id: String(a.id),
156
+ slug: String(a.slug ?? a.id),
157
+ name: String(a.name ?? a.slug ?? a.id),
158
+ isConnected: Boolean(a.isConnected ?? a.online),
159
+ provider: a.provider != null ? String(a.provider) : undefined,
160
+ }));
161
+ }
162
+ /** Filesystem-safe path segment (no separators / traversal). */
163
+ function safeSeg(s) {
164
+ return String(s).replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^[-.]+|[-.]+$/g, '') || 'agent';
165
+ }
166
+ /** Prefix every line of a child's output with the character name. */
167
+ function pipePrefixed(stream, name, sink) {
168
+ if (!stream) {
169
+ return;
170
+ }
171
+ let buf = '';
172
+ stream.on('data', (chunk) => {
173
+ buf += chunk.toString('utf8');
174
+ let nl;
175
+ while ((nl = buf.indexOf('\n')) >= 0) {
176
+ sink(`[${name}] ${buf.slice(0, nl)}`);
177
+ buf = buf.slice(nl + 1);
178
+ }
179
+ });
180
+ stream.on('end', () => { if (buf.trim()) {
181
+ sink(`[${name}] ${buf}`);
182
+ } });
183
+ }
184
+ function officeCommand(program) {
185
+ program
186
+ .command('office <slug>')
187
+ .description('Run a WHOLE pixel-office: bind + start every character, and auto-start new ones as they appear')
188
+ .option('--url <baseUrl>', 'Pixel-office base URL (e.g. https://app.pixeloffice.org)', process.env.AUTODEV_SERVER_URL)
189
+ .option('--token <token>', 'Personal-access token (pat_…) minted by the office owner', process.env.AUTODEV_OFFICE_TOKEN ?? process.env.AUTODEV_PAT)
190
+ .option('--base-dir <dir>', 'Root folder for per-character workspaces (default: ~/.autodev/offices/<slug>)')
191
+ .option('-p, --provider <provider>', 'Force this provider for every character (default: each agent\'s configured provider)')
192
+ .option('--interval <seconds>', 'Watcher poll interval for new characters (default 15; 0 disables the watcher)', '15')
193
+ .option('--no-watch', 'Do not keep watching for new characters after the initial launch')
194
+ .action(async (slug, opts) => {
195
+ const base = String(opts.url ?? '').replace(/\/+$/, '');
196
+ const token = String(opts.token ?? '');
197
+ if (!base) {
198
+ logger_1.log.error('Missing office URL. Pass --url=<baseUrl> or set AUTODEV_SERVER_URL.');
199
+ process.exit(1);
200
+ }
201
+ if (!token) {
202
+ logger_1.log.error('Missing token. Pass --token=<pat_…> or set AUTODEV_OFFICE_TOKEN. Mint one via the pixel-office UI (POST /api/auth/tokens).');
203
+ process.exit(1);
204
+ }
205
+ const officeSlug = safeSeg(slug);
206
+ const root = opts.baseDir
207
+ ? path.resolve(opts.baseDir)
208
+ : path.join(os.homedir(), '.autodev', 'offices', officeSlug);
209
+ fs.mkdirSync(root, { recursive: true, mode: 0o700 });
210
+ // Only an explicit 0 disables the watcher; a malformed value warns and falls
211
+ // back to the default cadence rather than silently turning polling off.
212
+ let intervalSec = 15;
213
+ if (opts.interval !== undefined) {
214
+ const n = parseInt(opts.interval, 10);
215
+ if (Number.isNaN(n)) {
216
+ logger_1.log.warn(`Invalid --interval '${opts.interval}' — using ${intervalSec}s.`);
217
+ }
218
+ else {
219
+ intervalSec = Math.max(0, n);
220
+ }
221
+ }
222
+ const watch = opts.watch && intervalSec > 0;
223
+ // Locate the compiled CLI entry so children reliably run THIS build's
224
+ // `autodev start` even when `autodev` is not on PATH (dev/source runs).
225
+ // This file compiles to out/commands/office.js → cli.js is one level up.
226
+ const cliJs = path.join(__dirname, '..', 'cli.js');
227
+ logger_1.log.section('🏢 AutoAIDev — Run the whole office');
228
+ logger_1.log.info(`Office : ${slug}`);
229
+ logger_1.log.info(`Server : ${base}`);
230
+ logger_1.log.info(`Workspaces: ${root}`);
231
+ logger_1.log.info(watch ? `Watcher : every ${intervalSec}s (auto-starts new characters)` : 'Watcher : off');
232
+ logger_1.log.plain('');
233
+ // agentId → running child loop. Presence in this map means "we started it";
234
+ // it gates both duplicate spawns and the block-if-already-running check.
235
+ const children = new Map();
236
+ // Reserved WHILE a character's async bind is in flight (before it lands in
237
+ // `children`). The watcher's setInterval does not await the prior poll, so a
238
+ // slow creds fetch could let the next poll see children.has()===false and
239
+ // spawn a SECOND loop in the same workspace. `starting` is the synchronous
240
+ // reservation that closes that TOCTOU window.
241
+ const starting = new Set();
242
+ const notedOnline = new Set();
243
+ let stopping = false;
244
+ // Never send the agent token to a host the user didn't point us at. Mirrors
245
+ // the app's safeWsUrl: force the ws host to the trusted --url base, require
246
+ // wss for any non-local host (no plaintext token off-box). A malicious office
247
+ // response therefore can't redirect the token-bearing presence socket.
248
+ const safeWsUrl = (rawWs) => {
249
+ let ws, b;
250
+ try {
251
+ ws = new url_1.URL(rawWs);
252
+ b = new url_1.URL(base);
253
+ }
254
+ catch {
255
+ return null;
256
+ }
257
+ if (ws.protocol !== 'ws:' && ws.protocol !== 'wss:')
258
+ return null;
259
+ if (ws.host !== b.host)
260
+ ws.host = b.host; // pin to the trusted base host
261
+ const isLocal = ws.hostname === 'localhost' || ws.hostname === '127.0.0.1' || ws.hostname === '::1';
262
+ if (ws.protocol === 'ws:' && (!isLocal || b.protocol === 'https:'))
263
+ ws.protocol = 'wss:';
264
+ return ws.toString();
265
+ };
266
+ const startAgent = async (a) => {
267
+ if (children.has(a.id) || starting.has(a.id))
268
+ return; // already running / in flight
269
+ starting.add(a.id);
270
+ try {
271
+ const dir = path.join(root, safeSeg(a.slug));
272
+ // Sandbox-escape guard: the workspace must stay under root.
273
+ const resolved = path.resolve(dir);
274
+ if (resolved !== root && !resolved.startsWith(root + path.sep)) {
275
+ logger_1.log.error(` ${a.name}: refused workspace path outside base dir (${resolved})`);
276
+ return;
277
+ }
278
+ const provider = opts.provider ? toAutodevProvider(opts.provider) : toAutodevProvider(a.provider);
279
+ try {
280
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
281
+ // Fetch this character's credentials → ready-made wsUrl (token+endpoint).
282
+ const credsRes = await fetchJsonAuth(`${base}/api/offices/${encodeURIComponent(slug)}/agents/${encodeURIComponent(a.id)}/credentials`, token);
283
+ const rawWs = credsRes?.data?.wsUrl;
284
+ if (!credsRes?.success || !rawWs) {
285
+ logger_1.log.error(` ${a.name}: no credentials (${credsRes?.error ?? 'missing wsUrl'})`);
286
+ return;
287
+ }
288
+ const wsUrl = safeWsUrl(rawWs);
289
+ if (!wsUrl) {
290
+ logger_1.log.error(` ${a.name}: refused unsafe wsUrl (not ws/wss)`);
291
+ return;
292
+ }
293
+ // Bind the workspace with the EXISTING single-agent machinery: writes
294
+ // .autodev/settings.json, installs hooks, wires the office MCP server,
295
+ // grants MCP permissions AND marks the workspace Claude-trusted.
296
+ (0, connect_1.applyWsUrl)(dir, wsUrl);
297
+ }
298
+ catch (err) {
299
+ logger_1.log.error(` ${a.name}: bind failed — ${err.message}`);
300
+ return;
301
+ }
302
+ // Spawn the EXISTING start loop as its own process (blocking singleton).
303
+ // AUTODEV_EXIT_WITH_PARENT=1 ⇒ the child reaps itself if we die.
304
+ const child = (0, child_process_1.spawn)(process.execPath, [cliJs, 'start', dir, '-p', provider], {
305
+ env: { ...process.env, AUTODEV_EXIT_WITH_PARENT: '1' },
306
+ stdio: ['ignore', 'pipe', 'pipe'],
307
+ });
308
+ children.set(a.id, { child, name: a.name });
309
+ logger_1.log.success(` ▶ ${a.name} (${provider}) → ${dir}`);
310
+ pipePrefixed(child.stdout, a.name, (line) => logger_1.log.plain(line));
311
+ pipePrefixed(child.stderr, a.name, (line) => logger_1.log.gray(line));
312
+ child.on('exit', (code, sig) => {
313
+ children.delete(a.id);
314
+ if (!stopping) {
315
+ logger_1.log.warn(` ⏹ ${a.name} loop exited (${sig ?? code}). It will be re-started on the next poll if still offline.`);
316
+ }
317
+ });
318
+ child.on('error', (e) => {
319
+ children.delete(a.id);
320
+ logger_1.log.error(` ${a.name}: failed to spawn loop — ${e.message}`);
321
+ });
322
+ }
323
+ finally {
324
+ // Release the reservation: from here `children` (or its absence on failure)
325
+ // is the source of truth again.
326
+ starting.delete(a.id);
327
+ }
328
+ };
329
+ const poll = async (initial = false) => {
330
+ if (stopping) {
331
+ return;
332
+ }
333
+ let roster;
334
+ try {
335
+ const json = await fetchJsonAuth(`${base}/api/offices/${encodeURIComponent(slug)}/agents`, token);
336
+ roster = normalizeRoster(json);
337
+ }
338
+ catch (err) {
339
+ const msg = err.message;
340
+ // A bad/expired token is permanent — fail loudly on the FIRST fetch rather
341
+ // than reporting a clean exit (no-watch) or retrying a dead credential forever.
342
+ if (initial && /HTTP 40[13]|Auth failed|Unauthor|Forbidden/i.test(msg)) {
343
+ logger_1.log.error(`${msg}\nCheck --token (or AUTODEV_OFFICE_TOKEN) and --url.`);
344
+ process.exit(1);
345
+ }
346
+ logger_1.log.warn(`Roster fetch failed (will retry): ${msg}`);
347
+ return;
348
+ }
349
+ for (const a of roster) {
350
+ if (children.has(a.id) || starting.has(a.id)) {
351
+ continue;
352
+ } // running / in flight
353
+ if (a.isConnected) { // online elsewhere — don't flap its WS
354
+ if (!notedOnline.has(a.id)) {
355
+ logger_1.log.gray(` • ${a.name} already online elsewhere — skipping.`);
356
+ notedOnline.add(a.id);
357
+ }
358
+ continue;
359
+ }
360
+ notedOnline.delete(a.id);
361
+ await startAgent(a);
362
+ }
363
+ };
364
+ // Graceful shutdown: SIGINT stops every spawned loop, then exits.
365
+ const shutdown = () => {
366
+ if (stopping) {
367
+ process.exit(130);
368
+ }
369
+ stopping = true;
370
+ logger_1.log.warn(`\n⏹ Stopping ${children.size} office loop(s)…`);
371
+ for (const { child } of children.values()) {
372
+ try {
373
+ child.kill('SIGINT');
374
+ }
375
+ catch { /* ignore */ }
376
+ }
377
+ setTimeout(() => process.exit(0), 2000).unref();
378
+ };
379
+ process.on('SIGINT', shutdown);
380
+ process.on('SIGTERM', shutdown);
381
+ await poll(true);
382
+ if (children.size === 0 && !watch) {
383
+ logger_1.log.warn('No characters started. Nothing to run.');
384
+ process.exit(0);
385
+ }
386
+ logger_1.log.gray(watch ? 'Press Ctrl+C to stop all loops. Watching for new characters…\n' : 'Press Ctrl+C to stop all loops.\n');
387
+ if (watch) {
388
+ const timer = setInterval(() => { void poll(); }, intervalSec * 1000);
389
+ timer.unref?.();
390
+ // Keep the process alive even if every child temporarily exits.
391
+ await new Promise(() => { });
392
+ }
393
+ else {
394
+ // No watcher: stay alive while children run so SIGINT can reap them.
395
+ await new Promise(() => { });
396
+ }
397
+ });
398
+ }
399
+ //# sourceMappingURL=office.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"office.js","sourceRoot":"","sources":["../../src/commands/office.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyIA,sCAsMC;AA/UD,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,2CAA6B;AAC7B,6CAA+B;AAC/B,6BAA0B;AAC1B,iDAAoD;AAEpD,sCAAgC;AAChC,wCAAwC;AAExC,8EAA8E;AAC9E,iEAAiE;AACjE,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AACjF,oEAAoE;AACpE,yEAAyE;AACzE,oEAAoE;AACpE,6EAA6E;AAC7E,uEAAuE;AACvE,8EAA8E;AAC9E,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,EAAE;AACF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,gFAAgF;AAChF,8EAA8E;AAC9E,4EAA4E;AAC5E,yCAAyC;AACzC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa;IACxD,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU;CACvD,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAM,CAAC;QAAC,OAAO,UAAU,CAAC;IAAC,CAAC;IACpD,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAI,CAAC;QAAC,OAAO,YAAY,CAAC;IAAC,CAAC;IACtD,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAAC,OAAO,cAAc,CAAC;IAAC,CAAC;IACxD,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAG,CAAC;QAAC,OAAO,aAAa,CAAC;IAAC,CAAC;IACvD,OAAO,YAAY,CAAC;AACtB,CAAC;AAgBD,0EAA0E;AAC1E,SAAS,aAAa,CAAI,GAAW,EAAE,KAAa,EAAE,SAAS,GAAG,MAAM;IACtE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAW,CAAC;QAChB,IAAI,CAAC;YAAC,MAAM,GAAG,IAAI,SAAG,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAC9B,MAAM,CAAC;YAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,QAAQ,EAAE,kBAAkB;gBAC5B,eAAe,EAAE,UAAU,KAAK,EAAE;gBAClC,YAAY,EAAE,aAAa;aAC5B;SACF,EAAE,CAAC,GAAG,EAAE,EAAE;YACT,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACpD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;oBACpE,IAAI,CAAC;wBAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAC;oBAAC,CAAC;oBACvC,OAAO,CAAC,EAAE,CAAC;wBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,GAAG,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAAC,CAAC;gBACvF,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBAC5D,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,UAAU,sBAAsB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnG,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,UAAU,SAAS,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,mBAAmB,SAAS,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/G,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8FAA8F;AAC9F,SAAS,eAAe,CAAC,IAAa;IACpC,MAAM,GAAG,GAAG,IAA4C,CAAC;IACzD,IAAI,IAAI,GAAY,EAAE,CAAC;IACvB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAAC,CAAC;SAC7C,IAAI,KAAK,CAAC,OAAO,CAAE,GAAG,EAAE,IAA6B,EAAE,MAAM,CAAC,EAAE,CAAC;QAAC,IAAI,GAAI,GAAG,CAAC,IAA8B,CAAC,MAAM,CAAC;IAAC,CAAC;SACtH,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;IAAC,CAAC;SACtD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,IAAI,GAAG,IAAI,CAAC;IAAC,CAAC;IAC9C,OAAQ,IAAkC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;QACtC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,IAAK,CAA0B,CAAC,MAAM,CAAC;QACzE,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9D,CAAC,CAAC,CAAC;AACN,CAAC;AAED,gEAAgE;AAChE,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC;AAC9F,CAAC;AAED,qEAAqE;AACrE,SAAS,YAAY,CAAC,MAAoC,EAAE,IAAY,EAAE,IAA4B;IACpG,IAAI,CAAC,MAAM,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IACxB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QAClC,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACtC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAAC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAgB,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,gGAAgG,CAAC;SAC7G,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;SACrH,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;SAClJ,MAAM,CAAC,kBAAkB,EAAE,+EAA+E,CAAC;SAC3G,MAAM,CAAC,2BAA2B,EAAE,sFAAsF,CAAC;SAC3H,MAAM,CAAC,sBAAsB,EAAE,+EAA+E,EAAE,IAAI,CAAC;SACrH,MAAM,CAAC,YAAY,EAAE,kEAAkE,CAAC;SACxF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAE5B,EAAE,EAAE;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,YAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QACjH,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,YAAG,CAAC,KAAK,CAAC,4HAA4H,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAEzK,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;YACvB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC/D,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAErD,6EAA6E;QAC7E,wEAAwE;QACxE,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,YAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,QAAQ,aAAa,WAAW,IAAI,CAAC,CAAC;YAAC,CAAC;iBAC/F,CAAC;gBAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC;QACxC,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,WAAW,GAAG,CAAC,CAAC;QAE5C,sEAAsE;QACtE,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEnD,YAAG,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACnD,YAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAChC,YAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAChC,YAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAChC,YAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,WAAW,gCAAgC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACvG,YAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEd,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiD,CAAC;QAC1E,2EAA2E;QAC3E,6EAA6E;QAC7E,0EAA0E;QAC1E,2EAA2E;QAC3E,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,4EAA4E;QAC5E,4EAA4E;QAC5E,8EAA8E;QAC9E,uEAAuE;QACvE,MAAM,SAAS,GAAG,CAAC,KAAa,EAAiB,EAAE;YACjD,IAAI,EAAO,EAAE,CAAM,CAAC;YACpB,IAAI,CAAC;gBAAC,EAAE,GAAG,IAAI,SAAG,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC,GAAG,IAAI,SAAG,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;YACtE,IAAI,EAAE,CAAC,QAAQ,KAAK,KAAK,IAAI,EAAE,CAAC,QAAQ,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YACjE,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;gBAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAG,+BAA+B;YAC3E,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,KAAK,WAAW,IAAI,EAAE,CAAC,QAAQ,KAAK,WAAW,IAAI,EAAE,CAAC,QAAQ,KAAK,KAAK,CAAC;YACpG,IAAI,EAAE,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;gBAAE,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC;YACzF,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,KAAK,EAAE,CAAc,EAAiB,EAAE;YACzD,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAE,OAAO,CAAC,8BAA8B;YACpF,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7C,4DAA4D;gBAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/D,YAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,8CAA8C,QAAQ,GAAG,CAAC,CAAC;oBAChF,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAClG,IAAI,CAAC;oBACH,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;oBACpD,0EAA0E;oBAC1E,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,GAAG,IAAI,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,WAAW,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,EAChG,KAAK,CACN,CAAC;oBACF,MAAM,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;oBACpC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;wBACjC,YAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,qBAAqB,QAAQ,EAAE,KAAK,IAAI,eAAe,GAAG,CAAC,CAAC;wBACjF,OAAO;oBACT,CAAC;oBACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,YAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,qCAAqC,CAAC,CAAC;wBAC5D,OAAO;oBACT,CAAC;oBACD,sEAAsE;oBACtE,uEAAuE;oBACvE,iEAAiE;oBACjE,IAAA,oBAAU,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACzB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,YAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;oBAClE,OAAO;gBACT,CAAC;gBAED,yEAAyE;gBACzE,iEAAiE;gBACjE,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;oBAC3E,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAE;oBACtD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;iBAClC,CAAC,CAAC;gBACH,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,YAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,OAAO,GAAG,EAAE,CAAC,CAAC;gBACpD,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9D,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;oBAC7B,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,YAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,iBAAiB,GAAG,IAAI,IAAI,6DAA6D,CAAC,CAAC;oBACnH,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACtB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACtB,YAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,4BAA4B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChE,CAAC,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,4EAA4E;gBAC5E,gCAAgC;gBAChC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAiB,EAAE;YACpD,IAAI,QAAQ,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YACzB,IAAI,MAAqB,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,aAAa,CAAU,GAAG,IAAI,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC3G,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,CAAC;gBACnC,2EAA2E;gBAC3E,gFAAgF;gBAChF,IAAI,OAAO,IAAI,6CAA6C,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvE,YAAG,CAAC,KAAK,CAAC,GAAG,GAAG,sDAAsD,CAAC,CAAC;oBACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,YAAG,CAAC,IAAI,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBAAC,SAAS;gBAAC,CAAC,CAAC,sBAAsB;gBAClF,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAA2B,uCAAuC;oBACpF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC3B,YAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,uCAAuC,CAAC,CAAC;wBAC/D,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACxB,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEF,kEAAkE;QAClE,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YACpC,QAAQ,GAAG,IAAI,CAAC;YAChB,YAAG,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,IAAI,kBAAkB,CAAC,CAAC;YAC3D,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC;oBAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;YACD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAClD,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,YAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,YAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAEzH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC;YACtE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,gEAAgE;YAChE,MAAM,IAAI,OAAO,CAAQ,GAAG,EAAE,GAA2B,CAAC,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,qEAAqE;YACrE,MAAM,IAAI,OAAO,CAAQ,GAAG,EAAE,GAA2B,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autodev-cli",
3
- "version": "1.4.126",
3
+ "version": "1.4.128",
4
4
  "description": "AutoAIDev CLI — autonomous AI task loop with VS Code / Cursor launcher",
5
5
  "license": "MIT",
6
6
  "bin": {