@soleri/cli 9.14.2 → 9.15.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.
- package/dist/commands/agent.js +51 -20
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/brain.d.ts +8 -0
- package/dist/commands/brain.js +83 -0
- package/dist/commands/brain.js.map +1 -0
- package/dist/commands/dream.js +1 -12
- package/dist/commands/dream.js.map +1 -1
- package/dist/commands/install.js +3 -9
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/validate-skills.d.ts +10 -0
- package/dist/commands/validate-skills.js +47 -0
- package/dist/commands/validate-skills.js.map +1 -0
- package/dist/commands/vault.js +2 -11
- package/dist/commands/vault.js.map +1 -1
- package/dist/main.js +4 -0
- package/dist/main.js.map +1 -1
- package/dist/prompts/create-wizard.js +4 -1
- package/dist/prompts/create-wizard.js.map +1 -1
- package/dist/utils/checks.js +17 -32
- package/dist/utils/checks.js.map +1 -1
- package/dist/utils/core-resolver.d.ts +3 -0
- package/dist/utils/core-resolver.js +38 -0
- package/dist/utils/core-resolver.js.map +1 -0
- package/dist/utils/vault-db.d.ts +5 -0
- package/dist/utils/vault-db.js +17 -0
- package/dist/utils/vault-db.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/create-wizard.test.ts +86 -0
- package/src/__tests__/doctor.test.ts +46 -1
- package/src/__tests__/install-verify.test.ts +1 -1
- package/src/__tests__/install.test.ts +7 -10
- package/src/commands/agent.ts +53 -17
- package/src/commands/brain.ts +93 -0
- package/src/commands/dream.ts +1 -11
- package/src/commands/install.ts +3 -8
- package/src/commands/validate-skills.ts +58 -0
- package/src/commands/vault.ts +2 -11
- package/src/main.ts +4 -0
- package/src/prompts/create-wizard.ts +5 -1
- package/src/utils/checks.ts +18 -30
- package/src/utils/core-resolver.ts +39 -0
- package/src/utils/vault-db.ts +15 -0
- package/dist/hook-packs/converter/template.test.ts +0 -133
- package/dist/hook-packs/yolo-safety/scripts/anti-deletion.sh +0 -274
- package/dist/prompts/archetypes.d.ts +0 -22
- package/dist/prompts/archetypes.js +0 -298
- package/dist/prompts/archetypes.js.map +0 -1
- package/dist/prompts/playbook.d.ts +0 -64
- package/dist/prompts/playbook.js +0 -436
- package/dist/prompts/playbook.js.map +0 -1
- package/dist/utils/format-paths.d.ts +0 -14
- package/dist/utils/format-paths.js +0 -27
- package/dist/utils/format-paths.js.map +0 -1
package/dist/main.js
CHANGED
|
@@ -29,6 +29,8 @@ import { registerVault } from './commands/vault.js';
|
|
|
29
29
|
import { registerYolo } from './commands/yolo.js';
|
|
30
30
|
import { registerDream } from './commands/dream.js';
|
|
31
31
|
import { registerUpdate } from './commands/update.js';
|
|
32
|
+
import { registerBrain } from './commands/brain.js';
|
|
33
|
+
import { registerValidateSkills } from './commands/validate-skills.js';
|
|
32
34
|
const require = createRequire(import.meta.url);
|
|
33
35
|
const { version } = require('../package.json');
|
|
34
36
|
const RESET = '\x1b[0m';
|
|
@@ -88,5 +90,7 @@ registerVault(program);
|
|
|
88
90
|
registerYolo(program);
|
|
89
91
|
registerDream(program);
|
|
90
92
|
registerUpdate(program);
|
|
93
|
+
registerBrain(program);
|
|
94
|
+
registerValidateSkills(program);
|
|
91
95
|
program.parse();
|
|
92
96
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC7D,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CACX,yDAAyD,OAAO,CAAC,QAAQ,CAAC,IAAI,sCAAsC,CACrH,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.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/dist/utils/checks.js
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
5
5
|
import { join } from 'node:path';
|
|
6
6
|
import { execFileSync } from 'node:child_process';
|
|
7
|
-
import { homedir } from 'node:os';
|
|
8
7
|
import { detectAgent } from './agent-context.js';
|
|
8
|
+
import { detectArtifacts } from './agent-artifacts.js';
|
|
9
|
+
import { resolveCorePackageJsonPath } from './core-resolver.js';
|
|
9
10
|
import { getInstalledPacks } from '../hook-packs/registry.js';
|
|
10
11
|
export function checkNodeVersion() {
|
|
11
12
|
const [major] = process.versions.node.split('.').map(Number);
|
|
@@ -150,49 +151,33 @@ export function checkInstructionsDir(agentPath) {
|
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
153
|
export function checkEngineReachable() {
|
|
153
|
-
|
|
154
|
-
require.resolve('@soleri/core/package.json');
|
|
154
|
+
if (resolveCorePackageJsonPath() !== null) {
|
|
155
155
|
return { status: 'pass', label: 'Engine', detail: '@soleri/core reachable' };
|
|
156
156
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
};
|
|
163
|
-
}
|
|
157
|
+
return {
|
|
158
|
+
status: 'fail',
|
|
159
|
+
label: 'Engine',
|
|
160
|
+
detail: '@soleri/core not found — engine is required for file-tree agents',
|
|
161
|
+
};
|
|
164
162
|
}
|
|
165
163
|
function checkMcpRegistration(dir) {
|
|
166
164
|
const ctx = detectAgent(dir);
|
|
167
165
|
if (!ctx)
|
|
168
166
|
return { status: 'warn', label: 'MCP registration', detail: 'no agent detected' };
|
|
169
|
-
const
|
|
170
|
-
if (
|
|
171
|
-
return {
|
|
172
|
-
status: 'warn',
|
|
173
|
-
label: 'MCP registration',
|
|
174
|
-
detail: '~/.claude.json not found',
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
try {
|
|
178
|
-
const config = JSON.parse(readFileSync(claudeJsonPath, 'utf-8'));
|
|
179
|
-
const servers = config.mcpServers ?? {};
|
|
180
|
-
if (ctx.agentId in servers) {
|
|
181
|
-
return {
|
|
182
|
-
status: 'pass',
|
|
183
|
-
label: 'MCP registration',
|
|
184
|
-
detail: `registered as "${ctx.agentId}"`,
|
|
185
|
-
};
|
|
186
|
-
}
|
|
167
|
+
const artifacts = detectArtifacts(ctx.agentId, ctx.agentPath);
|
|
168
|
+
if (artifacts.mcpServerEntries.length === 0) {
|
|
187
169
|
return {
|
|
188
170
|
status: 'warn',
|
|
189
171
|
label: 'MCP registration',
|
|
190
|
-
detail: `
|
|
172
|
+
detail: `not found in ~/.claude.json, ~/.codex/config.toml, or ~/.config/opencode/opencode.json`,
|
|
191
173
|
};
|
|
192
174
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
175
|
+
const targets = [...new Set(artifacts.mcpServerEntries.map((entry) => entry.target))];
|
|
176
|
+
return {
|
|
177
|
+
status: 'pass',
|
|
178
|
+
label: 'MCP registration',
|
|
179
|
+
detail: `registered in ${targets.join(', ')}`,
|
|
180
|
+
};
|
|
196
181
|
}
|
|
197
182
|
function checkCognee() {
|
|
198
183
|
const url = process.env.COGNEE_URL ?? 'http://localhost:8000/';
|
package/dist/utils/checks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/utils/checks.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/utils/checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
function resolveCoreEntryPath() {
|
|
5
|
+
try {
|
|
6
|
+
return fileURLToPath(import.meta.resolve('@soleri/core'));
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function resolveCorePackageJsonPath() {
|
|
13
|
+
const entryPath = resolveCoreEntryPath();
|
|
14
|
+
if (!entryPath)
|
|
15
|
+
return null;
|
|
16
|
+
const packageJsonPath = join(dirname(entryPath), '..', 'package.json');
|
|
17
|
+
return existsSync(packageJsonPath) ? packageJsonPath : null;
|
|
18
|
+
}
|
|
19
|
+
export function readInstalledCoreVersion() {
|
|
20
|
+
const packageJsonPath = resolveCorePackageJsonPath();
|
|
21
|
+
if (!packageJsonPath)
|
|
22
|
+
return null;
|
|
23
|
+
try {
|
|
24
|
+
const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
25
|
+
return typeof pkg.version === 'string' ? pkg.version : null;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function resolveInstalledEngineBin() {
|
|
32
|
+
const entryPath = resolveCoreEntryPath();
|
|
33
|
+
if (!entryPath)
|
|
34
|
+
return null;
|
|
35
|
+
const engineBinPath = join(dirname(entryPath), 'engine', 'bin', 'soleri-engine.js');
|
|
36
|
+
return existsSync(engineBinPath) ? engineBinPath : null;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=core-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-resolver.js","sourceRoot":"","sources":["../../src/utils/core-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACvE,OAAO,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,MAAM,eAAe,GAAG,0BAA0B,EAAE,CAAC;IACrD,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAA0B,CAAC;QACxF,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;IACpF,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { SOLERI_HOME } from '@soleri/core';
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the vault DB path for a given agent.
|
|
6
|
+
* Checks the current path first, then falls back to the legacy dot-prefixed path.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveVaultDbPath(agentId) {
|
|
9
|
+
const newDbPath = join(SOLERI_HOME, agentId, 'vault.db');
|
|
10
|
+
const legacyDbPath = join(SOLERI_HOME, '..', `.${agentId}`, 'vault.db');
|
|
11
|
+
if (existsSync(newDbPath))
|
|
12
|
+
return newDbPath;
|
|
13
|
+
if (existsSync(legacyDbPath))
|
|
14
|
+
return legacyDbPath;
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=vault-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-db.js","sourceRoot":"","sources":["../../src/utils/vault-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;IACxE,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IAClD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
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
|
+
});
|
|
@@ -104,7 +104,7 @@ describe('doctor command', () => {
|
|
|
104
104
|
describe('runAllChecks', () => {
|
|
105
105
|
it('should return array of check results', { timeout: 20_000 }, () => {
|
|
106
106
|
const results = runAllChecks(tempDir);
|
|
107
|
-
expect(results.length).
|
|
107
|
+
expect(results.length).toBe(9); // 4 common + 2 non-filetree (nodeModules + agentBuild) + 3 shared (mcpReg + hookPacks + cognee)
|
|
108
108
|
for (const r of results) {
|
|
109
109
|
expect(['pass', 'fail', 'warn']).toContain(r.status);
|
|
110
110
|
expect(r.label).toBeTruthy();
|
|
@@ -117,5 +117,50 @@ describe('doctor command', () => {
|
|
|
117
117
|
expect(labels).toContain('Node.js');
|
|
118
118
|
expect(labels).toContain('npm');
|
|
119
119
|
});
|
|
120
|
+
|
|
121
|
+
it('should detect Codex MCP registration for file-tree agents', { timeout: 20_000 }, () => {
|
|
122
|
+
const originalHome = process.env.HOME ?? '';
|
|
123
|
+
const originalUserProfile = process.env.USERPROFILE ?? '';
|
|
124
|
+
process.env.HOME = tempDir;
|
|
125
|
+
process.env.USERPROFILE = tempDir;
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
const agentDir = join(tempDir, 'agent');
|
|
129
|
+
mkdirSync(join(agentDir, 'instructions'), { recursive: true });
|
|
130
|
+
mkdirSync(join(tempDir, '.codex'), { recursive: true });
|
|
131
|
+
|
|
132
|
+
writeFileSync(
|
|
133
|
+
join(agentDir, 'agent.yaml'),
|
|
134
|
+
[
|
|
135
|
+
'id: test-agent',
|
|
136
|
+
'name: Test Agent',
|
|
137
|
+
'role: A test agent',
|
|
138
|
+
'description: A minimal file-tree agent for doctor testing',
|
|
139
|
+
'domains: []',
|
|
140
|
+
'principles: []',
|
|
141
|
+
'',
|
|
142
|
+
].join('\n'),
|
|
143
|
+
);
|
|
144
|
+
writeFileSync(join(agentDir, 'instructions', 'usage.md'), '# Usage');
|
|
145
|
+
writeFileSync(
|
|
146
|
+
join(tempDir, '.codex', 'config.toml'),
|
|
147
|
+
[
|
|
148
|
+
'[mcp_servers.test-agent]',
|
|
149
|
+
'command = "node"',
|
|
150
|
+
'args = ["engine.js", "--agent", "agent.yaml"]',
|
|
151
|
+
'',
|
|
152
|
+
].join('\n'),
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
const results = runAllChecks(agentDir);
|
|
156
|
+
const registration = results.find((r) => r.label === 'MCP registration');
|
|
157
|
+
expect(registration).toBeDefined();
|
|
158
|
+
expect(registration!.status).toBe('pass');
|
|
159
|
+
expect(registration!.detail).toContain('codex');
|
|
160
|
+
} finally {
|
|
161
|
+
process.env.HOME = originalHome;
|
|
162
|
+
process.env.USERPROFILE = originalUserProfile;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
120
165
|
});
|
|
121
166
|
});
|
|
@@ -98,7 +98,7 @@ describe('verifyInstall', () => {
|
|
|
98
98
|
const checks = verifyInstall('test-agent', agentDir, 'claude');
|
|
99
99
|
|
|
100
100
|
expect(Array.isArray(checks)).toBe(true);
|
|
101
|
-
expect(checks.length).
|
|
101
|
+
expect(checks.length).toBe(3); // claude config entry + engine binary + agent.yaml
|
|
102
102
|
for (const check of checks) {
|
|
103
103
|
expect(check).toHaveProperty('label');
|
|
104
104
|
expect(check).toHaveProperty('passed');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import { mkdirSync, rmSync,
|
|
2
|
+
import { mkdirSync, rmSync, readFileSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { tmpdir } from 'node:os';
|
|
5
5
|
import { toPosix, getNextStepMessage, resolveEngineBin } from '../commands/install.js';
|
|
@@ -82,20 +82,17 @@ describe('resolveEngineBin', () => {
|
|
|
82
82
|
describe('npx fallback warning', () => {
|
|
83
83
|
afterEach(() => {
|
|
84
84
|
vi.resetModules();
|
|
85
|
-
vi.doUnmock('
|
|
85
|
+
vi.doUnmock('../utils/core-resolver.js');
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
it('returns npx fallback when core resolution fails', async () => {
|
|
89
|
-
vi.doMock('
|
|
90
|
-
const actual = await vi.importActual<typeof import('
|
|
89
|
+
vi.doMock('../utils/core-resolver.js', async () => {
|
|
90
|
+
const actual = await vi.importActual<typeof import('../utils/core-resolver.js')>(
|
|
91
|
+
'../utils/core-resolver.js',
|
|
92
|
+
);
|
|
91
93
|
return {
|
|
92
94
|
...actual,
|
|
93
|
-
|
|
94
|
-
({
|
|
95
|
-
resolve: () => {
|
|
96
|
-
throw new Error('MODULE_NOT_FOUND');
|
|
97
|
-
},
|
|
98
|
-
}) as ReturnType<typeof import('node:module').createRequire>,
|
|
95
|
+
resolveInstalledEngineBin: () => null,
|
|
99
96
|
};
|
|
100
97
|
});
|
|
101
98
|
|
package/src/commands/agent.ts
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { join, dirname } from 'node:path';
|
|
9
|
-
import { createRequire } from 'node:module';
|
|
10
9
|
import {
|
|
11
10
|
existsSync,
|
|
12
11
|
readFileSync,
|
|
@@ -26,6 +25,7 @@ import { PackLockfile, checkNpmVersion, checkVersionCompat, SOLERI_HOME } from '
|
|
|
26
25
|
import {
|
|
27
26
|
generateClaudeMdTemplate,
|
|
28
27
|
generateInjectClaudeMd,
|
|
28
|
+
generateAgentsMd,
|
|
29
29
|
generateSkills,
|
|
30
30
|
} from '@soleri/forge/lib';
|
|
31
31
|
import { composeClaudeMd, getModularEngineRules, AgentYamlSchema } from '@soleri/forge/lib';
|
|
@@ -48,6 +48,42 @@ function readEngineFeatures(agentPath: string): EngineFeature[] | undefined {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
function readFileTreeAgentConfig(agentPath: string): AgentConfig | null {
|
|
52
|
+
try {
|
|
53
|
+
const yamlPath = join(agentPath, 'agent.yaml');
|
|
54
|
+
if (!existsSync(yamlPath)) return null;
|
|
55
|
+
|
|
56
|
+
const parsed = AgentYamlSchema.parse(parseYaml(readFileSync(yamlPath, 'utf-8')));
|
|
57
|
+
return {
|
|
58
|
+
id: parsed.id,
|
|
59
|
+
name: parsed.name,
|
|
60
|
+
role: parsed.role,
|
|
61
|
+
description: parsed.description,
|
|
62
|
+
domains: parsed.domains,
|
|
63
|
+
principles: parsed.principles,
|
|
64
|
+
tone: parsed.tone,
|
|
65
|
+
greeting: parsed.greeting,
|
|
66
|
+
persona: parsed.persona,
|
|
67
|
+
vaults: parsed.vaults,
|
|
68
|
+
setupTarget: parsed.setup?.target ?? 'claude',
|
|
69
|
+
} as AgentConfig;
|
|
70
|
+
} catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function readAgentCoreVersion(agentPath: string): string | null {
|
|
76
|
+
const corePkgPath = join(agentPath, 'node_modules', '@soleri', 'core', 'package.json');
|
|
77
|
+
if (!existsSync(corePkgPath)) return null;
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
const pkg = JSON.parse(readFileSync(corePkgPath, 'utf-8')) as { version?: unknown };
|
|
81
|
+
return typeof pkg.version === 'string' ? pkg.version : null;
|
|
82
|
+
} catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
51
87
|
export function registerAgent(program: Command): void {
|
|
52
88
|
const agent = program.command('agent').description('Agent lifecycle management');
|
|
53
89
|
|
|
@@ -83,14 +119,7 @@ export function registerAgent(program: Command): void {
|
|
|
83
119
|
}
|
|
84
120
|
|
|
85
121
|
// Resolve engine version via require.resolve
|
|
86
|
-
|
|
87
|
-
try {
|
|
88
|
-
const req = createRequire(join(ctx.agentPath, 'package.json'));
|
|
89
|
-
const corePkgPath = req.resolve('@soleri/core/package.json');
|
|
90
|
-
engineVersion = JSON.parse(readFileSync(corePkgPath, 'utf-8')).version || 'unknown';
|
|
91
|
-
} catch {
|
|
92
|
-
engineVersion = 'not installed';
|
|
93
|
-
}
|
|
122
|
+
const engineVersion = readAgentCoreVersion(ctx.agentPath) ?? 'not installed';
|
|
94
123
|
|
|
95
124
|
// Check for core update
|
|
96
125
|
const latestCore = checkNpmVersion('@soleri/core');
|
|
@@ -219,14 +248,7 @@ export function registerAgent(program: Command): void {
|
|
|
219
248
|
// ─── File-tree agent (v7+) ────────────────────────────────
|
|
220
249
|
if (ctx.format === 'filetree') {
|
|
221
250
|
// Resolve installed @soleri/core version
|
|
222
|
-
|
|
223
|
-
try {
|
|
224
|
-
const req = createRequire(import.meta.url);
|
|
225
|
-
const corePkgPath = req.resolve('@soleri/core/package.json');
|
|
226
|
-
installedVersion = JSON.parse(readFileSync(corePkgPath, 'utf-8')).version ?? null;
|
|
227
|
-
} catch {
|
|
228
|
-
// @soleri/core not resolvable — will show as unknown
|
|
229
|
-
}
|
|
251
|
+
const installedVersion = readAgentCoreVersion(ctx.agentPath);
|
|
230
252
|
|
|
231
253
|
// Check latest version on npm
|
|
232
254
|
const latestCore = checkNpmVersion('@soleri/core');
|
|
@@ -382,6 +404,14 @@ export function registerAgent(program: Command): void {
|
|
|
382
404
|
if (ctx.format === 'filetree') {
|
|
383
405
|
const enginePath = join(ctx.agentPath, 'instructions', '_engine.md');
|
|
384
406
|
const claudeMdPath = join(ctx.agentPath, 'CLAUDE.md');
|
|
407
|
+
const agentsMdPath = join(ctx.agentPath, 'AGENTS.md');
|
|
408
|
+
const config = readFileTreeAgentConfig(ctx.agentPath);
|
|
409
|
+
|
|
410
|
+
if (!config) {
|
|
411
|
+
p.log.error('Could not parse agent.yaml for AGENTS.md regeneration.');
|
|
412
|
+
process.exit(1);
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
385
415
|
|
|
386
416
|
// Generate skills from latest forge templates
|
|
387
417
|
const skillFiles = opts.skipSkills
|
|
@@ -391,6 +421,7 @@ export function registerAgent(program: Command): void {
|
|
|
391
421
|
if (opts.dryRun) {
|
|
392
422
|
p.log.info(`Would regenerate: ${enginePath}`);
|
|
393
423
|
p.log.info(`Would regenerate: ${claudeMdPath}`);
|
|
424
|
+
p.log.info(`Would regenerate: ${agentsMdPath}`);
|
|
394
425
|
if (skillFiles.length > 0) {
|
|
395
426
|
const newSkills = skillFiles.filter(
|
|
396
427
|
([relPath]) => !existsSync(join(ctx.agentPath, relPath)),
|
|
@@ -442,6 +473,11 @@ export function registerAgent(program: Command): void {
|
|
|
442
473
|
p.log.success(
|
|
443
474
|
`Regenerated ${claudeMdPath} (${result.sources.length} sources, ${result.content.length} bytes)`,
|
|
444
475
|
);
|
|
476
|
+
|
|
477
|
+
// 4. Regenerate AGENTS.md for Codex/OpenCode
|
|
478
|
+
const agentsMd = generateAgentsMd(config);
|
|
479
|
+
writeFileSync(agentsMdPath, agentsMd, 'utf-8');
|
|
480
|
+
p.log.success(`Regenerated ${agentsMdPath} (${agentsMd.length} bytes)`);
|
|
445
481
|
return;
|
|
446
482
|
}
|
|
447
483
|
|