@soleri/cli 9.14.1 → 9.14.3
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/dist/commands/update.js +1 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/prompts/create-wizard.js +4 -1
- package/dist/prompts/create-wizard.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/create-wizard.test.ts +86 -0
- package/src/__tests__/update.test.ts +6 -3
- package/src/commands/update.ts +1 -1
- package/src/prompts/create-wizard.ts +5 -1
package/dist/commands/update.js
CHANGED
|
@@ -5,7 +5,7 @@ const require = createRequire(import.meta.url);
|
|
|
5
5
|
function getCurrentVersion() {
|
|
6
6
|
try {
|
|
7
7
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
8
|
-
return require('
|
|
8
|
+
return require('../../package.json').version;
|
|
9
9
|
}
|
|
10
10
|
catch {
|
|
11
11
|
return 'unknown';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,sEAAsE;QACtE,OAAQ,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,13 +22,16 @@ function slugify(name) {
|
|
|
22
22
|
export async function runCreateWizard(initialName) {
|
|
23
23
|
p.intro('Create a new Soleri agent');
|
|
24
24
|
// ─── Step 1: Name ───────────────────────────────────────────
|
|
25
|
+
const NAME_PLACEHOLDER = 'aria';
|
|
25
26
|
const name = (await p.text({
|
|
26
27
|
message: 'What should your agent be called?',
|
|
27
|
-
placeholder:
|
|
28
|
+
placeholder: NAME_PLACEHOLDER,
|
|
28
29
|
initialValue: initialName,
|
|
29
30
|
validate: (v) => {
|
|
30
31
|
if (!v || v.trim().length === 0)
|
|
31
32
|
return 'Name is required';
|
|
33
|
+
if (v.trim().toLowerCase() === NAME_PLACEHOLDER)
|
|
34
|
+
return `"${NAME_PLACEHOLDER}" is just an example — type your own agent name`;
|
|
32
35
|
if (v.length > 50)
|
|
33
36
|
return 'Max 50 characters';
|
|
34
37
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-wizard.js","sourceRoot":"","sources":["../../src/prompts/create-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAkBhD,mDAAmD;AACnD,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAoB;IACxD,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAErC,+DAA+D;IAC/D,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,mCAAmC;QAC5C,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"create-wizard.js","sourceRoot":"","sources":["../../src/prompts/create-wizard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Unit tests for the create wizard name validation logic.
|
|
5
|
+
*
|
|
6
|
+
* We extract and test the validate function directly rather than running
|
|
7
|
+
* the full interactive wizard (which requires a TTY).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// ─── Inline the validate logic from create-wizard.ts ──────────────────────────
|
|
11
|
+
// This mirrors exactly what runCreateWizard passes to p.text({ validate }).
|
|
12
|
+
// If the wizard changes, update here too.
|
|
13
|
+
const NAME_PLACEHOLDER = 'aria';
|
|
14
|
+
|
|
15
|
+
function validateName(v: string | undefined): string | undefined {
|
|
16
|
+
if (!v || v.trim().length === 0) return 'Name is required';
|
|
17
|
+
if (v.trim().toLowerCase() === NAME_PLACEHOLDER)
|
|
18
|
+
return `"${NAME_PLACEHOLDER}" is just an example — type your own agent name`;
|
|
19
|
+
if (v.length > 50) return 'Max 50 characters';
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// ─── slugify — mirrors create-wizard.ts ───────────────────────────────────────
|
|
24
|
+
function slugify(name: string): string {
|
|
25
|
+
return name
|
|
26
|
+
.toLowerCase()
|
|
27
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
28
|
+
.replace(/^-|-$/g, '');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
describe('wizard name validation', () => {
|
|
32
|
+
it('rejects empty string', () => {
|
|
33
|
+
expect(validateName('')).toBe('Name is required');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('rejects whitespace-only string', () => {
|
|
37
|
+
expect(validateName(' ')).toBe('Name is required');
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('rejects the placeholder value "aria" (exact match)', () => {
|
|
41
|
+
expect(validateName('aria')).toMatch(/just an example/);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('rejects the placeholder value case-insensitively', () => {
|
|
45
|
+
expect(validateName('Aria')).toMatch(/just an example/);
|
|
46
|
+
expect(validateName('ARIA')).toMatch(/just an example/);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('rejects names longer than 50 characters', () => {
|
|
50
|
+
expect(validateName('a'.repeat(51))).toBe('Max 50 characters');
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('accepts a valid name like "bobby"', () => {
|
|
54
|
+
expect(validateName('bobby')).toBeUndefined();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('accepts a valid name like "My Agent"', () => {
|
|
58
|
+
expect(validateName('My Agent')).toBeUndefined();
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe('slugify', () => {
|
|
63
|
+
it('converts "Bobby" to "bobby"', () => {
|
|
64
|
+
expect(slugify('Bobby')).toBe('bobby');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('converts "My Agent" to "my-agent"', () => {
|
|
68
|
+
expect(slugify('My Agent')).toBe('my-agent');
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('strips leading/trailing hyphens', () => {
|
|
72
|
+
expect(slugify(' hello ')).toBe('hello');
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
describe('wizard name → agent id regression', () => {
|
|
77
|
+
it('user typing "bobby" produces id="bobby" and name="Bobby"', () => {
|
|
78
|
+
const input = 'bobby';
|
|
79
|
+
expect(validateName(input)).toBeUndefined();
|
|
80
|
+
expect(slugify(input)).toBe('bobby');
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('placeholder "aria" cannot produce a valid agent id', () => {
|
|
84
|
+
expect(validateName('aria')).toBeDefined();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
@@ -65,9 +65,12 @@ describe('update command', () => {
|
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
it('prints already-on-latest when current version matches latest', async () => {
|
|
68
|
-
// getCurrentVersion()
|
|
69
|
-
// Return
|
|
70
|
-
|
|
68
|
+
// getCurrentVersion() reads ../../package.json → packages/cli/package.json.
|
|
69
|
+
// Return the same version from npm view to trigger the "already on latest" branch.
|
|
70
|
+
const { createRequire } = await import('node:module');
|
|
71
|
+
const req = createRequire(import.meta.url);
|
|
72
|
+
const { version } = req('../../package.json') as { version: string };
|
|
73
|
+
vi.mocked(execSync).mockReturnValue(Buffer.from(`${version}\n`));
|
|
71
74
|
|
|
72
75
|
const action = captureAction();
|
|
73
76
|
await action();
|
package/src/commands/update.ts
CHANGED
|
@@ -8,7 +8,7 @@ const require = createRequire(import.meta.url);
|
|
|
8
8
|
function getCurrentVersion(): string {
|
|
9
9
|
try {
|
|
10
10
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
11
|
-
return (require('
|
|
11
|
+
return (require('../../package.json') as { version: string }).version;
|
|
12
12
|
} catch {
|
|
13
13
|
return 'unknown';
|
|
14
14
|
}
|
|
@@ -42,12 +42,16 @@ export async function runCreateWizard(initialName?: string): Promise<CreateWizar
|
|
|
42
42
|
p.intro('Create a new Soleri agent');
|
|
43
43
|
|
|
44
44
|
// ─── Step 1: Name ───────────────────────────────────────────
|
|
45
|
+
const NAME_PLACEHOLDER = 'aria';
|
|
46
|
+
|
|
45
47
|
const name = (await p.text({
|
|
46
48
|
message: 'What should your agent be called?',
|
|
47
|
-
placeholder:
|
|
49
|
+
placeholder: NAME_PLACEHOLDER,
|
|
48
50
|
initialValue: initialName,
|
|
49
51
|
validate: (v) => {
|
|
50
52
|
if (!v || v.trim().length === 0) return 'Name is required';
|
|
53
|
+
if (v.trim().toLowerCase() === NAME_PLACEHOLDER)
|
|
54
|
+
return `"${NAME_PLACEHOLDER}" is just an example — type your own agent name`;
|
|
51
55
|
if (v.length > 50) return 'Max 50 characters';
|
|
52
56
|
},
|
|
53
57
|
})) as string;
|