lim 0.20.1 → 0.21.1

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 (46) hide show
  1. package/README.md +33 -25
  2. package/dist/base-command.d.ts +2 -0
  3. package/dist/base-command.d.ts.map +1 -1
  4. package/dist/base-command.js +23 -4
  5. package/dist/base-command.js.map +1 -1
  6. package/dist/commands/gradle/build.d.ts +2 -0
  7. package/dist/commands/gradle/build.d.ts.map +1 -1
  8. package/dist/commands/gradle/build.js +8 -0
  9. package/dist/commands/gradle/build.js.map +1 -1
  10. package/dist/commands/run.d.ts +1 -0
  11. package/dist/commands/run.d.ts.map +1 -1
  12. package/dist/commands/run.js +31 -10
  13. package/dist/commands/run.js.map +1 -1
  14. package/dist/commands/skills/install.d.ts +2 -3
  15. package/dist/commands/skills/install.d.ts.map +1 -1
  16. package/dist/commands/skills/install.js +90 -311
  17. package/dist/commands/skills/install.js.map +1 -1
  18. package/dist/commands/xcode/build.d.ts +4 -0
  19. package/dist/commands/xcode/build.d.ts.map +1 -1
  20. package/dist/commands/xcode/build.js +39 -2
  21. package/dist/commands/xcode/build.js.map +1 -1
  22. package/dist/lib/gradle-build-options.d.ts +2 -1
  23. package/dist/lib/gradle-build-options.d.ts.map +1 -1
  24. package/dist/lib/gradle-build-options.js +5 -0
  25. package/dist/lib/gradle-build-options.js.map +1 -1
  26. package/dist/lib/onboarding.d.ts +12 -4
  27. package/dist/lib/onboarding.d.ts.map +1 -1
  28. package/dist/lib/onboarding.js +34 -16
  29. package/dist/lib/onboarding.js.map +1 -1
  30. package/dist/lib/project-detection.d.ts +6 -0
  31. package/dist/lib/project-detection.d.ts.map +1 -1
  32. package/dist/lib/project-detection.js +55 -4
  33. package/dist/lib/project-detection.js.map +1 -1
  34. package/dist/lib/skills.d.ts +30 -2
  35. package/dist/lib/skills.d.ts.map +1 -1
  36. package/dist/lib/skills.js +61 -17
  37. package/dist/lib/skills.js.map +1 -1
  38. package/dist/lib/webhook-options.d.ts +18 -0
  39. package/dist/lib/webhook-options.d.ts.map +1 -0
  40. package/dist/lib/webhook-options.js +43 -0
  41. package/dist/lib/webhook-options.js.map +1 -0
  42. package/dist/lib/webhook-options.test.d.ts +2 -0
  43. package/dist/lib/webhook-options.test.d.ts.map +1 -0
  44. package/dist/lib/webhook-options.test.js +51 -0
  45. package/dist/lib/webhook-options.test.js.map +1 -0
  46. package/package.json +2 -2
@@ -4,6 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.AGENTS = exports.AGENT_IDS = void 0;
7
+ exports.resolveSkillsDir = resolveSkillsDir;
8
+ exports.detectAdoptedAgents = detectAdoptedAgents;
9
+ exports.selectDefaultSkills = selectDefaultSkills;
7
10
  exports.targetSkillDir = targetSkillDir;
8
11
  exports.planSkillDirectoryCopy = planSkillDirectoryCopy;
9
12
  exports.applySkillDirectoryCopy = applySkillDirectoryCopy;
@@ -27,10 +30,9 @@ exports.AGENTS = {
27
30
  claude: {
28
31
  id: 'claude',
29
32
  displayName: 'Claude Code',
30
- skillsDir: (scope, projectRoot = process.cwd()) => scope === 'project' ?
31
- path_1.default.join(projectRoot, '.claude', 'skills')
32
- : path_1.default.join(claudeGlobalRoot(), 'skills'),
33
- detectionPaths: (scope) => scope === 'project' ? [path_1.default.join(process.cwd(), '.claude')] : [claudeGlobalRoot()],
33
+ skillsDirCandidates: (scope, projectRoot = process.cwd()) => scope === 'project' ?
34
+ [path_1.default.join(projectRoot, '.claude', 'skills')]
35
+ : [path_1.default.join(claudeGlobalRoot(), 'skills')],
34
36
  },
35
37
  cursor: {
36
38
  id: 'cursor',
@@ -38,26 +40,68 @@ exports.AGENTS = {
38
40
  // Cursor auto-discovers .agents/skills/ natively, same as .cursor/skills/.
39
41
  // Installing into .agents/skills/ also reaches OpenCode and any other
40
42
  // AGENTS.md-aware tool with a single copy, so prefer the broader path.
41
- skillsDir: (scope, projectRoot = process.cwd()) => scope === 'project' ?
42
- path_1.default.join(projectRoot, '.agents', 'skills')
43
- : path_1.default.join(os_1.default.homedir(), '.agents', 'skills'),
44
- // Detect either .cursor/ or .agents/: both are reliable signs the user
45
- // is on a tool that auto-loads .agents/skills/.
46
- detectionPaths: (scope) => scope === 'project' ?
47
- [path_1.default.join(process.cwd(), '.cursor'), path_1.default.join(process.cwd(), '.agents')]
48
- : [path_1.default.join(os_1.default.homedir(), '.cursor'), path_1.default.join(os_1.default.homedir(), '.agents')],
43
+ // When only .cursor/skills/ already exists we adopt it instead of
44
+ // creating a second structure.
45
+ skillsDirCandidates: (scope, projectRoot = process.cwd()) => scope === 'project' ?
46
+ [path_1.default.join(projectRoot, '.agents', 'skills'), path_1.default.join(projectRoot, '.cursor', 'skills')]
47
+ : [path_1.default.join(os_1.default.homedir(), '.agents', 'skills'), path_1.default.join(os_1.default.homedir(), '.cursor', 'skills')],
49
48
  },
50
49
  codex: {
51
50
  id: 'codex',
52
51
  displayName: 'Codex',
53
- skillsDir: (scope, projectRoot = process.cwd()) => scope === 'project' ?
54
- path_1.default.join(projectRoot, '.codex', 'skills')
55
- : path_1.default.join(codexGlobalRoot(), 'skills'),
56
- detectionPaths: (scope) => scope === 'project' ? [path_1.default.join(process.cwd(), '.codex')] : [codexGlobalRoot()],
52
+ skillsDirCandidates: (scope, projectRoot = process.cwd()) => scope === 'project' ?
53
+ [path_1.default.join(projectRoot, '.codex', 'skills')]
54
+ : [path_1.default.join(codexGlobalRoot(), 'skills')],
57
55
  },
58
56
  };
57
+ function isExistingDirectory(candidatePath) {
58
+ try {
59
+ // statSync follows symlinks: a skills dir that is a symlink to a real
60
+ // directory is a valid existing structure and must be adopted rather
61
+ // than duplicated at the preferred path. Broken symlinks throw and
62
+ // count as missing.
63
+ return fs_1.default.statSync(candidatePath).isDirectory();
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ function resolveSkillsDir(agent, scope, projectRoot) {
70
+ const candidates = agent.skillsDirCandidates(scope, projectRoot);
71
+ return candidates.find(isExistingDirectory) ?? candidates[0];
72
+ }
73
+ /**
74
+ * Agents that already have a skills directory on disk for the given scope.
75
+ * When any exist, installs adopt that structure instead of creating skill
76
+ * directories for every supported agent.
77
+ */
78
+ function detectAdoptedAgents(scope, projectRoot) {
79
+ return exports.AGENT_IDS.filter((id) => exports.AGENTS[id].skillsDirCandidates(scope, projectRoot).some(isExistingDirectory));
80
+ }
81
+ /**
82
+ * Default selection installs every catalog skill, except that Bazel- and
83
+ * Detox-specific skills are only included when the project scan found
84
+ * matching clues.
85
+ */
86
+ function selectDefaultSkills(skillNames, hints) {
87
+ const selected = [];
88
+ const excluded = [];
89
+ for (const name of skillNames) {
90
+ const tokens = name.split('-');
91
+ if (tokens.includes('bazel') && !hints.bazel) {
92
+ excluded.push({ name, reason: 'no Bazel workspace detected in this folder' });
93
+ }
94
+ else if (tokens.includes('detox') && !hints.detox) {
95
+ excluded.push({ name, reason: 'no Detox setup detected in this folder' });
96
+ }
97
+ else {
98
+ selected.push(name);
99
+ }
100
+ }
101
+ return { selected, excluded };
102
+ }
59
103
  function targetSkillDir(agent, scope, skillName, projectRoot) {
60
- return path_1.default.join(agent.skillsDir(scope, projectRoot), skillName);
104
+ return path_1.default.join(resolveSkillsDir(agent, scope, projectRoot), skillName);
61
105
  }
62
106
  function listRelativeFiles(root) {
63
107
  const files = [];
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { WebhookConfig } from '@limrun/api';
2
+ export interface WebhookFlagValues {
3
+ 'webhook-url'?: string;
4
+ 'webhook-header'?: string[];
5
+ }
6
+ /**
7
+ * Maps the shared --webhook-url / --webhook-header flags onto the exec
8
+ * request's webhook config, throwing on invalid combinations. Pure and
9
+ * oclif-free so both `xcode build` and `gradle build` share it and it is
10
+ * unit-testable.
11
+ *
12
+ * Duplicate header names are rejected (case-insensitively: header names are
13
+ * case-insensitive on the wire, and the daemon canonicalizes them) instead
14
+ * of last-one-wins, so a misconfigured CI auth header fails at the command
15
+ * line rather than silently at callback time.
16
+ */
17
+ export declare function webhookConfigFromFlags(flags: WebhookFlagValues): WebhookConfig | undefined;
18
+ //# sourceMappingURL=webhook-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-options.d.ts","sourceRoot":"","sources":["../../src/lib/webhook-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,GAAG,aAAa,GAAG,SAAS,CA2B1F"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.webhookConfigFromFlags = webhookConfigFromFlags;
4
+ /**
5
+ * Maps the shared --webhook-url / --webhook-header flags onto the exec
6
+ * request's webhook config, throwing on invalid combinations. Pure and
7
+ * oclif-free so both `xcode build` and `gradle build` share it and it is
8
+ * unit-testable.
9
+ *
10
+ * Duplicate header names are rejected (case-insensitively: header names are
11
+ * case-insensitive on the wire, and the daemon canonicalizes them) instead
12
+ * of last-one-wins, so a misconfigured CI auth header fails at the command
13
+ * line rather than silently at callback time.
14
+ */
15
+ function webhookConfigFromFlags(flags) {
16
+ const headerEntries = flags['webhook-header'] ?? [];
17
+ if (!flags['webhook-url']) {
18
+ if (headerEntries.length > 0) {
19
+ throw new Error('--webhook-header requires --webhook-url.');
20
+ }
21
+ return undefined;
22
+ }
23
+ const headers = {};
24
+ const seen = new Set();
25
+ for (const entry of headerEntries) {
26
+ const separator = entry.indexOf('=');
27
+ if (separator <= 0) {
28
+ throw new Error(`Invalid --webhook-header ${JSON.stringify(entry)}: expected NAME=VALUE.`);
29
+ }
30
+ const name = entry.slice(0, separator);
31
+ const key = name.toLowerCase();
32
+ if (seen.has(key)) {
33
+ throw new Error(`Duplicate --webhook-header name ${JSON.stringify(name)}.`);
34
+ }
35
+ seen.add(key);
36
+ headers[name] = entry.slice(separator + 1);
37
+ }
38
+ return {
39
+ url: flags['webhook-url'],
40
+ ...(Object.keys(headers).length > 0 && { headers }),
41
+ };
42
+ }
43
+ //# sourceMappingURL=webhook-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-options.js","sourceRoot":"","sources":["../../src/lib/webhook-options.ts"],"names":[],"mappings":";;AAkBA,wDA2BC;AAtCD;;;;;;;;;;GAUG;AACH,SAAgB,sBAAsB,CAAC,KAAwB;IAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC;QACzB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=webhook-options.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-options.test.d.ts","sourceRoot":"","sources":["../../src/lib/webhook-options.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const webhook_options_1 = require("./webhook-options");
4
+ describe('webhookConfigFromFlags', () => {
5
+ test('returns undefined without flags', () => {
6
+ expect((0, webhook_options_1.webhookConfigFromFlags)({})).toBeUndefined();
7
+ });
8
+ test('maps url and headers', () => {
9
+ expect((0, webhook_options_1.webhookConfigFromFlags)({
10
+ 'webhook-url': 'https://ci.example.com/hooks/limrun',
11
+ 'webhook-header': ['Authorization=Bearer secret', 'X-Build=release'],
12
+ })).toEqual({
13
+ url: 'https://ci.example.com/hooks/limrun',
14
+ headers: { Authorization: 'Bearer secret', 'X-Build': 'release' },
15
+ });
16
+ });
17
+ test('omits headers key when none are given', () => {
18
+ expect((0, webhook_options_1.webhookConfigFromFlags)({ 'webhook-url': 'https://ci.example.com/h' })).toEqual({
19
+ url: 'https://ci.example.com/h',
20
+ });
21
+ });
22
+ test('preserves = in header values', () => {
23
+ expect((0, webhook_options_1.webhookConfigFromFlags)({
24
+ 'webhook-url': 'https://ci.example.com/h',
25
+ 'webhook-header': ['X-Sig=a=b=c'],
26
+ })).toEqual({ url: 'https://ci.example.com/h', headers: { 'X-Sig': 'a=b=c' } });
27
+ });
28
+ test('rejects headers without a url', () => {
29
+ expect(() => (0, webhook_options_1.webhookConfigFromFlags)({ 'webhook-header': ['A=b'] })).toThrow('--webhook-header requires --webhook-url.');
30
+ });
31
+ test('rejects entries without NAME=VALUE shape', () => {
32
+ for (const entry of ['NoSeparator', '=value-only']) {
33
+ expect(() => (0, webhook_options_1.webhookConfigFromFlags)({ 'webhook-url': 'https://ci.example.com/h', 'webhook-header': [entry] })).toThrow('expected NAME=VALUE');
34
+ }
35
+ });
36
+ test('rejects duplicate header names', () => {
37
+ expect(() => (0, webhook_options_1.webhookConfigFromFlags)({
38
+ 'webhook-url': 'https://ci.example.com/h',
39
+ 'webhook-header': ['Authorization=Bearer one', 'Authorization=Bearer two'],
40
+ })).toThrow('Duplicate --webhook-header name "Authorization".');
41
+ });
42
+ test('rejects duplicate header names case-insensitively', () => {
43
+ // Header names are case-insensitive on the wire and the daemon
44
+ // canonicalizes them, so a different casing would still overwrite.
45
+ expect(() => (0, webhook_options_1.webhookConfigFromFlags)({
46
+ 'webhook-url': 'https://ci.example.com/h',
47
+ 'webhook-header': ['Authorization=Bearer one', 'authorization=Bearer two'],
48
+ })).toThrow('Duplicate --webhook-header name "authorization".');
49
+ });
50
+ });
51
+ //# sourceMappingURL=webhook-options.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-options.test.js","sourceRoot":"","sources":["../../src/lib/webhook-options.test.ts"],"names":[],"mappings":";;AAAA,uDAA2D;AAE3D,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,IAAA,wCAAsB,EAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChC,MAAM,CACJ,IAAA,wCAAsB,EAAC;YACrB,aAAa,EAAE,qCAAqC;YACpD,gBAAgB,EAAE,CAAC,6BAA6B,EAAE,iBAAiB,CAAC;SACrE,CAAC,CACH,CAAC,OAAO,CAAC;YACR,GAAG,EAAE,qCAAqC;YAC1C,OAAO,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE;SAClE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,IAAA,wCAAsB,EAAC,EAAE,aAAa,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACpF,GAAG,EAAE,0BAA0B;SAChC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,MAAM,CACJ,IAAA,wCAAsB,EAAC;YACrB,aAAa,EAAE,0BAA0B;YACzC,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC,CAAC,CACH,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,0BAA0B,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,wCAAsB,EAAC,EAAE,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CACzE,0CAA0C,CAC3C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACpD,KAAK,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,GAAG,EAAE,CACV,IAAA,wCAAsB,EAAC,EAAE,aAAa,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CACjG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,EAAE,CACV,IAAA,wCAAsB,EAAC;YACrB,aAAa,EAAE,0BAA0B;YACzC,gBAAgB,EAAE,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;SAC3E,CAAC,CACH,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC7D,+DAA+D;QAC/D,mEAAmE;QACnE,MAAM,CAAC,GAAG,EAAE,CACV,IAAA,wCAAsB,EAAC;YACrB,aAAa,EAAE,0BAA0B;YACzC,gBAAgB,EAAE,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;SAC3E,CAAC,CACH,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lim",
3
- "version": "0.20.1",
3
+ "version": "0.21.1",
4
4
  "description": "Use remote XCode, Gradle, iOS Simulator, Android Emulator and more to build and test apps from Linux, Windows or macOS.",
5
5
  "bin": {
6
6
  "lim": "./bin/run.js"
@@ -25,7 +25,7 @@
25
25
  "test": "jest"
26
26
  },
27
27
  "dependencies": {
28
- "@limrun/api": "0.43.1",
28
+ "@limrun/api": "0.45.1",
29
29
  "@oclif/core": "^4",
30
30
  "cli-progress": "^3.12.0",
31
31
  "cli-table3": "^0.6.5",