lim 0.20.0 → 0.21.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 (42) hide show
  1. package/README.md +28 -25
  2. package/dist/commands/gradle/build.d.ts +2 -0
  3. package/dist/commands/gradle/build.d.ts.map +1 -1
  4. package/dist/commands/gradle/build.js +8 -0
  5. package/dist/commands/gradle/build.js.map +1 -1
  6. package/dist/commands/run.d.ts +1 -0
  7. package/dist/commands/run.d.ts.map +1 -1
  8. package/dist/commands/run.js +31 -10
  9. package/dist/commands/run.js.map +1 -1
  10. package/dist/commands/skills/install.d.ts +2 -3
  11. package/dist/commands/skills/install.d.ts.map +1 -1
  12. package/dist/commands/skills/install.js +90 -311
  13. package/dist/commands/skills/install.js.map +1 -1
  14. package/dist/commands/xcode/build.d.ts +3 -0
  15. package/dist/commands/xcode/build.d.ts.map +1 -1
  16. package/dist/commands/xcode/build.js +26 -2
  17. package/dist/commands/xcode/build.js.map +1 -1
  18. package/dist/lib/gradle-build-options.d.ts +2 -1
  19. package/dist/lib/gradle-build-options.d.ts.map +1 -1
  20. package/dist/lib/gradle-build-options.js +5 -0
  21. package/dist/lib/gradle-build-options.js.map +1 -1
  22. package/dist/lib/onboarding.d.ts +12 -4
  23. package/dist/lib/onboarding.d.ts.map +1 -1
  24. package/dist/lib/onboarding.js +34 -16
  25. package/dist/lib/onboarding.js.map +1 -1
  26. package/dist/lib/project-detection.d.ts +6 -0
  27. package/dist/lib/project-detection.d.ts.map +1 -1
  28. package/dist/lib/project-detection.js +55 -4
  29. package/dist/lib/project-detection.js.map +1 -1
  30. package/dist/lib/skills.d.ts +30 -2
  31. package/dist/lib/skills.d.ts.map +1 -1
  32. package/dist/lib/skills.js +61 -17
  33. package/dist/lib/skills.js.map +1 -1
  34. package/dist/lib/webhook-options.d.ts +18 -0
  35. package/dist/lib/webhook-options.d.ts.map +1 -0
  36. package/dist/lib/webhook-options.js +43 -0
  37. package/dist/lib/webhook-options.js.map +1 -0
  38. package/dist/lib/webhook-options.test.d.ts +2 -0
  39. package/dist/lib/webhook-options.test.d.ts.map +1 -0
  40. package/dist/lib/webhook-options.test.js +51 -0
  41. package/dist/lib/webhook-options.test.js.map +1 -0
  42. package/package.json +2 -2
@@ -5,13 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const fs_1 = __importDefault(require("fs"));
7
7
  const path_1 = __importDefault(require("path"));
8
- const prompts_1 = __importDefault(require("prompts"));
9
8
  const core_1 = require("@oclif/core");
10
9
  const skills_1 = require("../../lib/skills");
10
+ const project_detection_1 = require("../../lib/project-detection");
11
11
  const remote_skills_1 = require("../../lib/remote-skills");
12
- const SKIPPED_REASON_CONFLICT = 'existing skill directory differs; re-run with --force to overwrite';
13
- const SKIPPED_REASON_BLOCKED = 'blocked: another target requires --force to proceed';
14
- const SKIPPED_REASON_DECLINED = 'user declined overwrite confirmation';
12
+ const SKIPPED_REASON_KEPT = 'existing skill directory differs; kept because --keep-existing was passed';
15
13
  function uniqueSkillNames(values, availableSkills) {
16
14
  const validNames = availableSkills.map((skill) => skill.name);
17
15
  const skills = [];
@@ -25,199 +23,6 @@ function uniqueSkillNames(values, availableSkills) {
25
23
  }
26
24
  return skills;
27
25
  }
28
- function createPromptCursorTracker(itemCount) {
29
- let cursor = 0;
30
- return {
31
- current: () => cursor,
32
- onKeypress: (_str, key) => {
33
- if (!key || !key.name || itemCount === 0)
34
- return;
35
- if (key.meta && key.name !== 'escape')
36
- return;
37
- const last = itemCount - 1;
38
- if (key.ctrl) {
39
- if (key.name === 'a')
40
- cursor = 0;
41
- else if (key.name === 'e')
42
- cursor = last;
43
- return;
44
- }
45
- if (key.name === 'up' || key.name === 'k') {
46
- cursor = cursor === 0 ? last : cursor - 1;
47
- }
48
- else if (key.name === 'down' || key.name === 'j' || key.name === 'tab') {
49
- cursor = cursor === last ? 0 : cursor + 1;
50
- }
51
- },
52
- };
53
- }
54
- function wrapDescription(value, width, indentSize = 2) {
55
- const indent = ' '.repeat(indentSize);
56
- const words = value.replace(/\s+/g, ' ').trim().split(' ').filter(Boolean);
57
- const lines = [];
58
- let line = indent;
59
- for (const word of words) {
60
- if (line === indent) {
61
- line += word;
62
- }
63
- else if (line.length + 1 + word.length <= width) {
64
- line += ` ${word}`;
65
- }
66
- else {
67
- lines.push(line);
68
- line = `${indent}${word}`;
69
- }
70
- }
71
- if (line !== indent) {
72
- lines.push(line);
73
- }
74
- return lines.join('\n');
75
- }
76
- function installCompactMultiselectDescriptionRenderer() {
77
- // prompts only exposes description text through its default renderer, whose
78
- // wrap indent is too deep for long skill descriptions. Patch just this prompt
79
- // and restore immediately after it completes.
80
- const MultiselectPrompt = require('prompts/lib/elements/multiselect');
81
- const color = require('kleur');
82
- const { figures } = require('prompts/lib/util');
83
- const originalRenderOption = MultiselectPrompt.prototype.renderOption;
84
- MultiselectPrompt.prototype.renderOption = function renderOption(cursor, choice, index, arrowIndicator) {
85
- const prefix = (choice.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';
86
- let title;
87
- if (choice.disabled) {
88
- title =
89
- cursor === index ? color.gray().underline(choice.title) : color.strikethrough().gray(choice.title);
90
- }
91
- else {
92
- title = cursor === index ? color.cyan().underline(choice.title) : choice.title;
93
- }
94
- const description = !choice.disabled && cursor === index && choice.description ?
95
- `\n${wrapDescription(choice.description, this.out.columns ?? 100, 4)}`
96
- : '';
97
- return prefix + title + color.gray(description);
98
- };
99
- return () => {
100
- MultiselectPrompt.prototype.renderOption = originalRenderOption;
101
- };
102
- }
103
- class PromptCancelled extends Error {
104
- constructor() {
105
- super('cancelled');
106
- this.name = 'PromptCancelled';
107
- }
108
- }
109
- function detectAgentsForScope(scope) {
110
- const detected = new Set();
111
- for (const id of skills_1.AGENT_IDS) {
112
- const agent = skills_1.AGENTS[id];
113
- for (const p of agent.detectionPaths(scope)) {
114
- if (fs_1.default.existsSync(p)) {
115
- detected.add(id);
116
- break;
117
- }
118
- }
119
- }
120
- return detected;
121
- }
122
- async function promptAgents(preselected) {
123
- const cursor = createPromptCursorTracker(skills_1.AGENT_IDS.length);
124
- process.stdin.on('keypress', cursor.onKeypress);
125
- let response;
126
- try {
127
- response = await (0, prompts_1.default)({
128
- type: 'multiselect',
129
- name: 'agents',
130
- message: 'Which agents do you want to set up?',
131
- instructions: false,
132
- choices: skills_1.AGENT_IDS.map((id) => ({
133
- title: skills_1.AGENTS[id].displayName,
134
- value: id,
135
- selected: preselected.has(id),
136
- })),
137
- hint: 'Space to toggle, Enter to confirm (Enter alone picks the highlighted agent)',
138
- }, {
139
- onCancel: () => {
140
- throw new PromptCancelled();
141
- },
142
- });
143
- }
144
- finally {
145
- process.stdin.off('keypress', cursor.onKeypress);
146
- }
147
- let picked = (response.agents ?? []);
148
- const highlightedAgent = skills_1.AGENT_IDS[cursor.current()];
149
- if (picked.length === 0 && highlightedAgent) {
150
- picked = [highlightedAgent];
151
- }
152
- process.stderr.write(` Selected: ${picked.map((id) => skills_1.AGENTS[id].displayName).join(', ')}\n`);
153
- return picked;
154
- }
155
- async function promptSkills(availableSkills) {
156
- const cursor = createPromptCursorTracker(availableSkills.length);
157
- let response;
158
- const restoreMultiselectRenderer = installCompactMultiselectDescriptionRenderer();
159
- process.stdin.on('keypress', cursor.onKeypress);
160
- try {
161
- response = await (0, prompts_1.default)({
162
- type: 'multiselect',
163
- name: 'skills',
164
- message: 'Which Limrun skills do you want to install?',
165
- instructions: false,
166
- choices: availableSkills.map((skill) => ({
167
- title: skill.name,
168
- description: skill.description.replace(/\s+/g, ' ').trim(),
169
- value: skill.name,
170
- selected: skill.defaultSelected,
171
- })),
172
- hint: 'Catalog defaults selected. Space toggles, Enter confirms.',
173
- }, {
174
- onCancel: () => {
175
- throw new PromptCancelled();
176
- },
177
- });
178
- }
179
- finally {
180
- restoreMultiselectRenderer();
181
- process.stdin.off('keypress', cursor.onKeypress);
182
- }
183
- let picked = uniqueSkillNames((response.skills ?? []), availableSkills);
184
- const highlightedSkill = availableSkills[cursor.current()];
185
- if (picked.length === 0 && highlightedSkill) {
186
- picked = [highlightedSkill.name];
187
- }
188
- process.stderr.write(` Selected skills: ${picked.join(', ')}\n`);
189
- return picked;
190
- }
191
- async function promptScope() {
192
- const response = await (0, prompts_1.default)({
193
- type: 'select',
194
- name: 'scope',
195
- message: 'Install location?',
196
- choices: [
197
- { title: 'Project', value: 'project', description: 'Install into the current directory' },
198
- { title: 'Global', value: 'global', description: 'Install into your home directory' },
199
- ],
200
- initial: 0,
201
- }, {
202
- onCancel: () => {
203
- throw new PromptCancelled();
204
- },
205
- });
206
- return response.scope;
207
- }
208
- async function promptOverwrite(targetPath) {
209
- const response = await (0, prompts_1.default)({
210
- type: 'confirm',
211
- name: 'ok',
212
- message: `Overwrite existing ${targetPath}?`,
213
- initial: false,
214
- }, {
215
- onCancel: () => {
216
- throw new PromptCancelled();
217
- },
218
- });
219
- return Boolean(response.ok);
220
- }
221
26
  function humanPath(absolutePath, scope) {
222
27
  if (scope !== 'project') {
223
28
  return absolutePath;
@@ -242,33 +47,13 @@ function statusLabel(status) {
242
47
  }
243
48
  class SkillsInstall extends core_1.Command {
244
49
  async run() {
245
- try {
246
- await this.runInner();
247
- }
248
- catch (err) {
249
- if (err instanceof PromptCancelled) {
250
- this.exit(130);
251
- }
252
- throw err;
253
- }
254
- }
255
- async runInner() {
256
50
  const { flags } = await this.parse(SkillsInstall);
257
- const interactive = process.stdin.isTTY === true && !flags.json && !flags.quiet;
258
- let agents;
51
+ const verbose = !flags.json && !flags.quiet;
52
+ const scope = flags.scope;
259
53
  let skills = [];
260
- let scope;
261
54
  let source;
262
55
  try {
263
- if (!interactive) {
264
- if (!flags.agents || flags.agents.length === 0) {
265
- this.error(`--agents requires at least one of: ${skills_1.AGENT_IDS.join(', ')}.`, { exit: 2 });
266
- }
267
- if (!flags.scope) {
268
- this.error('Specify --agents and --scope in non-interactive mode.', { exit: 2 });
269
- }
270
- }
271
- if (interactive) {
56
+ if (verbose) {
272
57
  process.stderr.write('Fetching latest Limrun skills...\n');
273
58
  }
274
59
  source = await (0, remote_skills_1.loadRemoteSkills)();
@@ -281,37 +66,43 @@ class SkillsInstall extends core_1.Command {
281
66
  if (flags.skills && flags.skills.length > 0) {
282
67
  skills = uniqueSkillNames(flags.skills, availableSkills);
283
68
  }
284
- else if (interactive) {
285
- skills = await promptSkills(availableSkills);
69
+ else if (scope === 'global') {
70
+ // Global installs are not tied to a project folder, so the folder
71
+ // scan does not apply: install every skill.
72
+ skills = availableSkills.map((skill) => skill.name);
286
73
  }
287
74
  else {
288
- skills = availableSkills.filter((skill) => skill.defaultSelected).map((skill) => skill.name);
75
+ const hints = (0, project_detection_1.scanSkillHints)(process.cwd());
76
+ const selection = (0, skills_1.selectDefaultSkills)(availableSkills.map((skill) => skill.name), hints);
77
+ skills = selection.selected;
78
+ if (verbose) {
79
+ for (const excluded of selection.excluded) {
80
+ process.stderr.write(`Skipping ${excluded.name}: ${excluded.reason}.\n`);
81
+ }
82
+ }
289
83
  }
290
84
  if (skills.length === 0) {
291
- this.error(`No default Limrun skills found in ${source.owner}/${source.repo}@${source.commit}.`, {
85
+ this.error(`No Limrun skills found in ${source.owner}/${source.repo}@${source.commit}.`, {
292
86
  exit: 1,
293
87
  });
294
88
  }
89
+ let agents;
295
90
  if (flags.agents && flags.agents.length > 0) {
296
91
  agents = Array.from(new Set(flags.agents));
297
92
  }
298
- else if (interactive) {
299
- // Pre-check based on project-local presence only. Global installs of
300
- // agents (e.g. ~/.claude on a dev machine) are too weak a signal to
301
- // auto-select them for this specific project's install.
302
- agents = await promptAgents(detectAgentsForScope('project'));
303
- }
304
93
  else {
305
- this.error(`--agents requires at least one of: ${skills_1.AGENT_IDS.join(', ')}.`, { exit: 2 });
306
- }
307
- if (flags.scope) {
308
- scope = flags.scope;
309
- }
310
- else if (interactive) {
311
- scope = await promptScope();
312
- }
313
- else {
314
- this.error('Specify --agents and --scope in non-interactive mode.', { exit: 2 });
94
+ const adopted = (0, skills_1.detectAdoptedAgents)(scope);
95
+ if (adopted.length > 0) {
96
+ agents = adopted;
97
+ if (verbose) {
98
+ process.stderr.write(`Found existing skills structure for ${adopted
99
+ .map((id) => skills_1.AGENTS[id].displayName)
100
+ .join(', ')}; installing only there.\n`);
101
+ }
102
+ }
103
+ else {
104
+ agents = [...skills_1.AGENT_IDS];
105
+ }
315
106
  }
316
107
  const sources = new Map();
317
108
  for (const skill of skills) {
@@ -332,70 +123,39 @@ class SkillsInstall extends core_1.Command {
332
123
  planned.push({ skill, agent, scope, source: sourceDir, target, kind });
333
124
  }
334
125
  }
335
- // Phase 2: Confirm.
126
+ // Phase 2: Apply. Differing targets are updated in place by default so
127
+ // installs always converge on the latest fetched skills; the previous
128
+ // content stays reviewable in the user's VCS diff. --keep-existing opts
129
+ // out and leaves differing directories untouched.
336
130
  const results = [];
337
- const anyConflict = planned.some((t) => t.kind === 'conflict');
338
- if (anyConflict && !flags.force && !interactive) {
339
- // Non-interactive + conflict + no force: all-or-nothing. Skip all targets.
340
- for (const t of planned) {
341
- results.push({
342
- skill: t.skill,
343
- agent: t.agent.id,
344
- scope: t.scope,
345
- path: t.target,
346
- status: 'skipped',
347
- reason: t.kind === 'conflict' ? SKIPPED_REASON_CONFLICT : SKIPPED_REASON_BLOCKED,
348
- });
349
- }
350
- if (!flags.json) {
351
- // --quiet still suppresses the human summary, but a hard refusal needs to be visible.
352
- process.stderr.write('Existing skill directories would be overwritten. Re-run with --force, or run interactively to confirm per target.\n');
353
- }
354
- this.emitOutput(results, flags, skills, source);
355
- this.exit(1);
356
- }
357
- // Decide final status per target (no writes yet).
358
- const finalDecisions = [];
131
+ let anyUpdated = false;
359
132
  for (const t of planned) {
360
- if (t.kind === 'install') {
361
- finalDecisions.push({ target: t, status: 'installed' });
362
- }
363
- else if (t.kind === 'unchanged') {
364
- finalDecisions.push({ target: t, status: 'unchanged' });
133
+ let status;
134
+ let reason;
135
+ if (t.kind === 'unchanged') {
136
+ status = 'unchanged';
365
137
  }
366
- else if (flags.force) {
367
- finalDecisions.push({ target: t, status: 'updated' });
138
+ else if (t.kind === 'conflict' && flags['keep-existing']) {
139
+ status = 'skipped';
140
+ reason = SKIPPED_REASON_KEPT;
368
141
  }
369
142
  else {
370
- // Interactive conflict without --force: prompt per target.
371
- const displayPath = humanPath(t.target, t.scope);
372
- const ok = await promptOverwrite(displayPath);
373
- if (ok) {
374
- finalDecisions.push({ target: t, status: 'updated' });
375
- }
376
- else {
377
- finalDecisions.push({
378
- target: t,
379
- status: 'skipped',
380
- reason: SKIPPED_REASON_DECLINED,
381
- });
382
- }
383
- }
384
- }
385
- // Phase 3: Apply.
386
- for (const decision of finalDecisions) {
387
- if (decision.status === 'installed' || decision.status === 'updated') {
388
- (0, skills_1.applySkillDirectoryCopy)(decision.target.source, decision.target.target);
143
+ (0, skills_1.applySkillDirectoryCopy)(t.source, t.target);
144
+ status = t.kind === 'conflict' ? 'updated' : 'installed';
145
+ anyUpdated = anyUpdated || status === 'updated';
389
146
  }
390
147
  results.push({
391
- skill: decision.target.skill,
392
- agent: decision.target.agent.id,
393
- scope: decision.target.scope,
394
- path: decision.target.target,
395
- status: decision.status,
396
- ...(decision.reason ? { reason: decision.reason } : {}),
148
+ skill: t.skill,
149
+ agent: t.agent.id,
150
+ scope: t.scope,
151
+ path: t.target,
152
+ status,
153
+ ...(reason ? { reason } : {}),
397
154
  });
398
155
  }
156
+ if (verbose && anyUpdated) {
157
+ process.stderr.write('Updated skill directories that had local changes. Review the diff in version control and ask your agent to reconcile if needed, or re-run with --keep-existing to leave them untouched.\n');
158
+ }
399
159
  this.emitOutput(results, flags, skills, source);
400
160
  }
401
161
  finally {
@@ -419,45 +179,64 @@ class SkillsInstall extends core_1.Command {
419
179
  if (flags.quiet) {
420
180
  return;
421
181
  }
422
- // Human summary.
182
+ // Human summary: one line per skill, with all target folders combined.
423
183
  this.log('');
424
184
  this.log(' Limrun skills');
425
- const skillColWidth = Math.max(...results.map((r) => r.skill.length), 'Skill'.length);
426
- const agentColWidth = Math.max(...results.map((r) => skills_1.AGENTS[r.agent].displayName.length), 'Claude Code'.length);
185
+ const bySkill = new Map();
427
186
  for (const r of results) {
428
- const skillLabel = r.skill.padEnd(skillColWidth);
429
- const agentLabel = skills_1.AGENTS[r.agent].displayName.padEnd(agentColWidth);
430
- const displayPath = humanPath(r.path, r.scope);
431
- const reason = r.reason ? ` (${r.reason})` : '';
432
- this.log(` ${skillLabel} ${agentLabel} -> ${displayPath} ${statusLabel(r.status)}${reason}`);
187
+ const rows = bySkill.get(r.skill);
188
+ if (rows) {
189
+ rows.push(r);
190
+ }
191
+ else {
192
+ bySkill.set(r.skill, [r]);
193
+ }
194
+ }
195
+ const skillColWidth = Math.max(...results.map((r) => r.skill.length), 'Skill'.length);
196
+ for (const [skill, rows] of bySkill) {
197
+ const skillLabel = skill.padEnd(skillColWidth);
198
+ // The skill name already leads the line, so list the parent skills
199
+ // directories instead of repeating <dir>/<skill> for every folder.
200
+ const folders = rows.map((r) => humanPath(path_1.default.dirname(r.path), r.scope));
201
+ const uniformStatus = rows.every((r) => r.status === rows[0].status) ? rows[0].status : undefined;
202
+ if (uniformStatus) {
203
+ const reason = rows[0].reason ? ` (${rows[0].reason})` : '';
204
+ this.log(` ${skillLabel} -> ${folders.join(', ')} ${statusLabel(uniformStatus)}${reason}`);
205
+ }
206
+ else {
207
+ const annotated = rows.map((r, i) => `${folders[i]} (${statusLabel(r.status).toLowerCase()})`);
208
+ this.log(` ${skillLabel} -> ${annotated.join(', ')}`);
209
+ }
433
210
  }
434
211
  this.log('');
435
212
  }
436
213
  }
437
214
  SkillsInstall.summary = 'Install Limrun skills for AI coding agents';
438
- SkillsInstall.description = 'Fetch the latest Limrun skills from limrun-inc/skills and install them into the native skills directory for each selected agent (Claude Code, Cursor, Codex). Pre-checks detected agents and lets you pick project or global scope.';
215
+ SkillsInstall.description = 'Fetch the latest Limrun skills from limrun-inc/skills and install them into the native skills directory for each agent (Claude Code, Cursor, Codex). By default all skills are installed for all agents; in project scope, Bazel and Detox skills are only included when the folder scan finds matching clues, while global installs include every skill. An existing skills structure (e.g. .claude/skills/) is adopted instead of creating directories for every agent. Existing skill directories with different content are updated in place; review the change in your VCS diff, or pass --keep-existing to leave them untouched.';
439
216
  SkillsInstall.examples = [
440
217
  '<%= config.bin %> skills install',
441
- '<%= config.bin %> skills install --agents claude --agents cursor --scope project',
442
- '<%= config.bin %> skills install --agents cursor --scope project --skills limrun-xcode --skills limrun-ios-simulator',
443
- '<%= config.bin %> skills install --agents codex --scope global --force',
218
+ '<%= config.bin %> skills install --agents claude --agents cursor',
219
+ '<%= config.bin %> skills install --agents cursor --skills limrun-xcode --skills limrun-ios-simulator',
220
+ '<%= config.bin %> skills install --keep-existing',
221
+ '<%= config.bin %> skills install --agents codex --scope global',
444
222
  ];
445
223
  SkillsInstall.flags = {
446
224
  agents: core_1.Flags.string({
447
- description: 'Target agent. Repeat to pick multiple.',
225
+ description: 'Target agent. Repeat to pick multiple. Defaults to agents with an existing skills directory, or all agents when none exists.',
448
226
  multiple: true,
449
227
  options: skills_1.AGENT_IDS,
450
228
  }),
451
229
  skills: core_1.Flags.string({
452
- description: 'Limrun skill to install. Repeat to pick multiple. Defaults to the remote catalog default.',
230
+ description: 'Limrun skill to install. Repeat to pick multiple. Defaults to all skills; in project scope, Bazel/Detox skills are included only when the folder scan finds matching clues.',
453
231
  multiple: true,
454
232
  }),
455
233
  scope: core_1.Flags.string({
456
234
  description: 'Install scope.',
457
235
  options: ['project', 'global'],
236
+ default: 'project',
458
237
  }),
459
- force: core_1.Flags.boolean({
460
- description: 'Overwrite existing skill directories without confirmation.',
238
+ 'keep-existing': core_1.Flags.boolean({
239
+ description: 'Keep existing skill directories that differ from the fetched version instead of updating them.',
461
240
  default: false,
462
241
  }),
463
242
  json: core_1.Flags.boolean({
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/skills/install.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,sDAA8B;AAC9B,sCAA6C;AAC7C,6CAS0B;AAC1B,2DAAsG;AAGtG,MAAM,uBAAuB,GAAG,oEAAoE,CAAC;AACrG,MAAM,sBAAsB,GAAG,qDAAqD,CAAC;AACrF,MAAM,uBAAuB,GAAG,sCAAsC,CAAC;AAsBvE,SAAS,gBAAgB,CAAC,MAAgB,EAAE,eAA8B;IACxE,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,oBAAoB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,yBAAyB,CAAC,SAAiB;IAIlD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM;QACrB,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACxB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO;YACjD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO;YAC9C,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC;YAC3B,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;oBAAE,MAAM,GAAG,CAAC,CAAC;qBAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;oBAAE,MAAM,GAAG,IAAI,CAAC;gBACzC,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC1C,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACzE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,KAAa,EAAE,UAAU,GAAG,CAAC;IACnE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;YAClD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,GAAG,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,4CAA4C;IACnD,4EAA4E;IAC5E,8EAA8E;IAC9E,8CAA8C;IAC9C,MAAM,iBAAiB,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChD,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,SAAS,CAAC,YAAY,CAAC;IAEtE,iBAAiB,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAE9D,MAAc,EACd,MAAuF,EACvF,KAAa,EACb,cAAsB;QAEtB,MAAM,MAAM,GACV,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,CAAC;QACnG,IAAI,KAAa,CAAC;QAElB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,KAAK;gBACH,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvG,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACjF,CAAC;QAED,MAAM,WAAW,GACf,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1D,KAAK,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE;YACxE,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,OAAO,GAAG,EAAE;QACV,iBAAiB,CAAC,SAAS,CAAC,YAAY,GAAG,oBAAoB,CAAC;IAClE,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,eAAgB,SAAQ,KAAK;IACjC;QACE,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,KAAY;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAW,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,kBAAS,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,eAAM,CAAC,EAAE,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,IAAI,YAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,WAAyB;IACnD,MAAM,MAAM,GAAG,yBAAyB,CAAC,kBAAS,CAAC,MAAM,CAAC,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAA,iBAAO,EACtB;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,qCAAqC;YAC9C,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE,kBAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC9B,KAAK,EAAE,eAAM,CAAC,EAAE,CAAC,CAAC,WAAW;gBAC7B,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;aAC9B,CAAC,CAAC;YACH,IAAI,EAAE,6EAA6E;SACpF,EACD;YACE,QAAQ,EAAE,GAAG,EAAE;gBACb,MAAM,IAAI,eAAe,EAAE,CAAC;YAC9B,CAAC;SACF,CACF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAc,CAAC;IAClD,MAAM,gBAAgB,GAAG,kBAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC5C,MAAM,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAM,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,eAA8B;IACxD,MAAM,MAAM,GAAG,yBAAyB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,QAAQ,CAAC;IACb,MAAM,0BAA0B,GAAG,4CAA4C,EAAE,CAAC;IAClF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAA,iBAAO,EACtB;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,6CAA6C;YACtD,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACvC,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;gBAC1D,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,QAAQ,EAAE,KAAK,CAAC,eAAe;aAChC,CAAC,CAAC;YACH,IAAI,EAAE,2DAA2D;SAClE,EACD;YACE,QAAQ,EAAE,GAAG,EAAE;gBACb,MAAM,IAAI,eAAe,EAAE,CAAC;YAC9B,CAAC;SACF,CACF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,0BAA0B,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,GAAG,gBAAgB,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAa,EAAE,eAAe,CAAC,CAAC;IACpF,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC5C,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAC5B;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,mBAAmB;QAC5B,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,oCAAoC,EAAE;YACzF,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;SACtF;QACD,OAAO,EAAE,CAAC;KACX,EACD;QACE,QAAQ,EAAE,GAAG,EAAE;YACb,MAAM,IAAI,eAAe,EAAE,CAAC;QAC9B,CAAC;KACF,CACF,CAAC;IACF,OAAO,QAAQ,CAAC,KAAc,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,UAAkB;IAC/C,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAC5B;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,sBAAsB,UAAU,GAAG;QAC5C,OAAO,EAAE,KAAK;KACf,EACD;QACE,QAAQ,EAAE,GAAG,EAAE;YACb,MAAM,IAAI,eAAe,EAAE,CAAC;QAC9B,CAAC;KACF,CACF,CAAC;IACF,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,SAAS,CAAC,YAAoB,EAAE,KAAY;IACnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,QAAQ,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,cAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAqB,aAAc,SAAQ,cAAO;IAuChD,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAElD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAEhF,IAAI,MAAiB,CAAC;QACtB,IAAI,MAAM,GAAgB,EAAE,CAAC;QAC7B,IAAI,KAAY,CAAC;QACjB,IAAI,MAAsC,CAAC;QAE3C,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/C,IAAI,CAAC,KAAK,CAAC,sCAAsC,kBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBACzF,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAI,CAAC,KAAK,CAAC,uDAAuD,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,GAAG,MAAM,IAAA,gCAAgB,GAAE,CAAC;YAClC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;YACtC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;oBACvF,IAAI,EAAE,CAAC;iBACR,CAAC,CAAC;YACL,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YAC3D,CAAC;iBAAM,IAAI,WAAW,EAAE,CAAC;gBACvB,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/F,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,KAAK,CAAC,qCAAqC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;oBAC/F,IAAI,EAAE,CAAC;iBACR,CAAC,CAAC;YACL,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAc,CAAC;YAC1D,CAAC;iBAAM,IAAI,WAAW,EAAE,CAAC;gBACvB,qEAAqE;gBACrE,oEAAoE;gBACpE,wDAAwD;gBACxD,MAAM,GAAG,MAAM,YAAY,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,sCAAsC,kBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACzF,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC,KAAc,CAAC;YAC/B,CAAC;iBAAM,IAAI,WAAW,EAAE,CAAC;gBACvB,KAAK,GAAG,MAAM,WAAW,EAAE,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,uDAAuD,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACnF,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;YAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;gBAC5F,IAAI,CAAC,WAAW,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1D,IAAI,CAAC,KAAK,CAAC,qCAAqC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAC5C,CAAC;YAED,iBAAiB;YACjB,MAAM,OAAO,GAAoB,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;gBACtC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;oBACxB,MAAM,KAAK,GAAG,eAAM,CAAC,EAAE,CAAC,CAAC;oBACzB,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBACnD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,+BAAsB,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,MAAM,OAAO,GAAgB,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAE/D,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBAChD,2EAA2E;gBAC3E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC;wBACX,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;wBACjB,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,IAAI,EAAE,CAAC,CAAC,MAAM;wBACd,MAAM,EAAE,SAAS;wBACjB,MAAM,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,sBAAsB;qBACjF,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAChB,sFAAsF;oBACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qHAAqH,CACtH,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YAED,kDAAkD;YAClD,MAAM,cAAc,GAAsE,EAAE,CAAC;YAC7F,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACzB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAClC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBACvB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBACxD,CAAC;qBAAM,CAAC;oBACN,2DAA2D;oBAC3D,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACjD,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;oBAC9C,IAAI,EAAE,EAAE,CAAC;wBACP,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;oBACxD,CAAC;yBAAM,CAAC;wBACN,cAAc,CAAC,IAAI,CAAC;4BAClB,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,SAAS;4BACjB,MAAM,EAAE,uBAAuB;yBAChC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,kBAAkB;YAClB,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;gBACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACrE,IAAA,gCAAuB,EAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1E,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK;oBAC5B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBAC/B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK;oBAC5B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;oBAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,UAAU,CAChB,OAAoB,EACpB,KAAwC,EACxC,MAAmB,EACnB,MAA0B;QAE1B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,SAAS,CACZ;gBACE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM;gBACN,MAAM,EAAE;oBACN,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE;oBAC5C,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB;gBACD,OAAO;aACR,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EACzD,aAAa,CAAC,MAAM,CACrB,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,eAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,OAAO,UAAU,KAAK,UAAU,SAAS,WAAW,OAAO,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;;AA3PM,qBAAO,GAAG,4CAA4C,CAAC;AACvD,yBAAW,GAChB,qOAAqO,CAAC;AACjO,sBAAQ,GAAG;IAChB,kCAAkC;IAClC,kFAAkF;IAClF,sHAAsH;IACtH,wEAAwE;CACzE,CAAC;AACK,mBAAK,GAAG;IACb,MAAM,EAAE,YAAK,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,wCAAwC;QACrD,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,kBAAS;KACnB,CAAC;IACF,MAAM,EAAE,YAAK,CAAC,MAAM,CAAC;QACnB,WAAW,EACT,2FAA2F;QAC7F,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,KAAK,EAAE,YAAK,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,gBAAgB;QAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;KAC/B,CAAC;IACF,KAAK,EAAE,YAAK,CAAC,OAAO,CAAC;QACnB,WAAW,EAAE,4DAA4D;QACzE,OAAO,EAAE,KAAK;KACf,CAAC;IACF,IAAI,EAAE,YAAK,CAAC,OAAO,CAAC;QAClB,WAAW,EAAE,8BAA8B;QAC3C,OAAO,EAAE,KAAK;KACf,CAAC;IACF,KAAK,EAAE,YAAK,CAAC,OAAO,CAAC;QACnB,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,KAAK;KACf,CAAC;CACH,CAAC;kBArCiB,aAAa"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/skills/install.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,9 @@ export default class XcodeBuild extends BaseCommand {
31
31
  'asc-issuer-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
32
32
  'asc-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
33
33
  'asc-wait-timeout': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
34
+ 'auto-build-number': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
35
+ 'webhook-url': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
36
+ 'webhook-header': import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
34
37
  'basis-cache-dir': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
35
38
  ignore: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
36
39
  include: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA4BjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAAwC;IACtD,MAAM,CAAC,WAAW,SAC8L;IAEhN,MAAM,CAAC,QAAQ,WAoBb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2GV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAqLZ,mBAAmB;YA8BnB,cAAc;YAQd,sBAAsB;YAYtB,yBAAyB;YAazB,yBAAyB;CAwBxC"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA8BjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAAwC;IACtD,MAAM,CAAC,WAAW,SAC8L;IAEhN,MAAM,CAAC,QAAQ,WAqBb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyHV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA6LZ,mBAAmB;YA8BnB,cAAc;YAQd,sBAAsB;YAetB,yBAAyB;YAazB,yBAAyB;CAwBxC"}
@@ -8,6 +8,7 @@ const duration_1 = require("../../lib/duration");
8
8
  const bytes_1 = require("../../lib/bytes");
9
9
  const additional_files_1 = require("../../lib/additional-files");
10
10
  const config_1 = require("../../lib/config");
11
+ const webhook_options_1 = require("../../lib/webhook-options");
11
12
  const api_1 = require("@limrun/api");
12
13
  const DEVICE_SDKS = new Set(['iphoneos', 'watchos']);
13
14
  const SIMULATOR_SDKS = new Set(['iphonesimulator', 'watchsimulator']);
@@ -88,7 +89,7 @@ class XcodeBuild extends base_command_1.BaseCommand {
88
89
  if (!flags['upload-to-testflight'] && hasTestflightFlags(flags)) {
89
90
  // Reserved: a bare ASC credential may gain other meanings later
90
91
  // (managed signing, entitlement preflight), so it never implies one.
91
- this.error('The asc flags require --upload-to-testflight.');
92
+ this.error('The asc flags and --auto-build-number require --upload-to-testflight.');
92
93
  }
93
94
  if (flags['upload-to-testflight']) {
94
95
  if (!signing) {
@@ -110,6 +111,15 @@ class XcodeBuild extends base_command_1.BaseCommand {
110
111
  signedUploadUrl: flags['signed-upload-url'],
111
112
  };
112
113
  }
114
+ try {
115
+ const webhook = (0, webhook_options_1.webhookConfigFromFlags)(flags);
116
+ if (webhook) {
117
+ options.webhook = webhook;
118
+ }
119
+ }
120
+ catch (err) {
121
+ this.error(err instanceof Error ? err.message : String(err));
122
+ }
113
123
  this.info(`Syncing ${syncPath} to instance ${id}...`);
114
124
  const syncStart = Date.now();
115
125
  const syncOptions = {
@@ -199,6 +209,7 @@ class XcodeBuild extends base_command_1.BaseCommand {
199
209
  ...(flags['asc-issuer-id'] && { apiIssuerId: flags['asc-issuer-id'] }),
200
210
  apiPrivateKeyBase64: await this.readFileBase64(flags['asc-key'], '--asc-key'),
201
211
  ...(flags['asc-wait-timeout'] !== undefined && { waitTimeoutSeconds: flags['asc-wait-timeout'] }),
212
+ ...(flags['auto-build-number'] && { autoIncrementBuildNumber: true }),
202
213
  };
203
214
  }
204
215
  async resolveIosSignedStreamUrl(target) {
@@ -257,6 +268,7 @@ XcodeBuild.examples = [
257
268
  '<%= config.bin %> xcode build --id <ios-instance-ID> --project MyApp.xcodeproj --upload ios-build.zip',
258
269
  '<%= config.bin %> xcode build --signed-upload-url <url>',
259
270
  `<%= config.bin %> xcode build ./MyProject --build-setting 'SWIFT_ACTIVE_COMPILATION_CONDITIONS=$(inherited) LIMRUN' --build-setting APP_CONFIG_DEV_LOGIN_SECRET="$DEV_LOGIN_SECRET"`,
271
+ '<%= config.bin %> xcode build ./MyProject --webhook-url https://ci.example.com/hooks/limrun --webhook-header Authorization="Bearer $HOOK_SECRET"',
260
272
  '<%= config.bin %> xcode build ./MyProject --basis-cache-dir ./.limsync-cache',
261
273
  '<%= config.bin %> xcode build ./MyProject --ignore "\\\\.xcuserdata/"',
262
274
  '<%= config.bin %> xcode build ./MyProject --additional-file ~/.netrc=~/.netrc',
@@ -343,6 +355,17 @@ XcodeBuild.flags = {
343
355
  min: 0,
344
356
  max: 1800,
345
357
  }),
358
+ 'auto-build-number': core_1.Flags.boolean({
359
+ description: 'Set the build number to one more than the highest already in App Store Connect (1 for a new app), so repeat uploads never collide on CFBundleVersion. Resolved server-side with the ASC key. Requires --upload-to-testflight and a project using Xcode-standard versioning (CFBundleVersion = $(CURRENT_PROJECT_VERSION)).',
360
+ default: false,
361
+ }),
362
+ 'webhook-url': core_1.Flags.string({
363
+ description: 'HTTPS URL that limbuild POSTs a JSON payload to once the build reaches a terminal state, carrying the result, a console debug link, and a presigned build-log URL. Must be a public DNS host; IP-literal and private targets are rejected. Delivery is best-effort and never fails the build.',
364
+ }),
365
+ 'webhook-header': core_1.Flags.string({
366
+ description: 'Header to set verbatim on the webhook request as NAME=VALUE, for example Authorization="Bearer $SECRET". Requires --webhook-url. Repeat for multiple headers (at most 16).',
367
+ multiple: true,
368
+ }),
346
369
  'basis-cache-dir': core_1.Flags.string({
347
370
  description: 'Directory to use for the client-side delta sync cache during the pre-build sync step.',
348
371
  }),
@@ -369,6 +392,7 @@ function hasTestflightFlags(flags) {
369
392
  return (flags['asc-key-id'] !== undefined ||
370
393
  flags['asc-issuer-id'] !== undefined ||
371
394
  flags['asc-key'] !== undefined ||
372
- flags['asc-wait-timeout'] !== undefined);
395
+ flags['asc-wait-timeout'] !== undefined ||
396
+ flags['auto-build-number']);
373
397
  }
374
398
  //# sourceMappingURL=build.js.map