@soleri/cli 1.9.0 → 1.10.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/README.md +4 -0
- package/dist/commands/agent.d.ts +8 -0
- package/dist/commands/agent.js +150 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/create.js +30 -4
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/install-knowledge.js +65 -3
- package/dist/commands/install-knowledge.js.map +1 -1
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.js +80 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/pack.d.ts +10 -0
- package/dist/commands/pack.js +512 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/skills.d.ts +8 -0
- package/dist/commands/skills.js +167 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.js +74 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/hook-packs/installer.d.ts +0 -7
- package/dist/hook-packs/installer.js +1 -14
- package/dist/hook-packs/installer.js.map +1 -1
- package/dist/hook-packs/installer.ts +1 -18
- package/dist/hook-packs/registry.d.ts +2 -1
- package/dist/hook-packs/registry.ts +1 -1
- package/dist/main.js +40 -1
- package/dist/main.js.map +1 -1
- package/dist/prompts/archetypes.d.ts +1 -0
- package/dist/prompts/archetypes.js +177 -62
- package/dist/prompts/archetypes.js.map +1 -1
- package/dist/prompts/create-wizard.js +98 -49
- package/dist/prompts/create-wizard.js.map +1 -1
- package/dist/prompts/playbook.d.ts +8 -7
- package/dist/prompts/playbook.js +201 -15
- package/dist/prompts/playbook.js.map +1 -1
- package/dist/utils/checks.d.ts +0 -1
- package/dist/utils/checks.js +1 -1
- package/dist/utils/checks.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/archetypes.test.ts +84 -0
- package/src/__tests__/doctor.test.ts +2 -2
- package/src/__tests__/wizard-e2e.mjs +508 -0
- package/src/commands/agent.ts +181 -0
- package/src/commands/create.ts +146 -104
- package/src/commands/install-knowledge.ts +75 -4
- package/src/commands/install.ts +101 -0
- package/src/commands/pack.ts +585 -0
- package/src/commands/skills.ts +191 -0
- package/src/commands/uninstall.ts +93 -0
- package/src/hook-packs/installer.ts +1 -18
- package/src/hook-packs/registry.ts +1 -1
- package/src/main.ts +42 -1
- package/src/prompts/archetypes.ts +193 -62
- package/src/prompts/create-wizard.ts +114 -58
- package/src/prompts/playbook.ts +207 -21
- package/src/utils/checks.ts +1 -1
- package/code-reviewer/.claude/hookify.focus-ring-required.local.md +0 -21
- package/code-reviewer/.claude/hookify.no-ai-attribution.local.md +0 -18
- package/code-reviewer/.claude/hookify.no-any-types.local.md +0 -18
- package/code-reviewer/.claude/hookify.no-console-log.local.md +0 -21
- package/code-reviewer/.claude/hookify.no-important.local.md +0 -18
- package/code-reviewer/.claude/hookify.no-inline-styles.local.md +0 -21
- package/code-reviewer/.claude/hookify.semantic-html.local.md +0 -18
- package/code-reviewer/.claude/hookify.ux-touch-targets.local.md +0 -18
- package/code-reviewer/.mcp.json +0 -11
- package/code-reviewer/README.md +0 -346
- package/code-reviewer/package-lock.json +0 -4484
- package/code-reviewer/package.json +0 -45
- package/code-reviewer/scripts/copy-assets.js +0 -15
- package/code-reviewer/scripts/setup.sh +0 -130
- package/code-reviewer/skills/brainstorming/SKILL.md +0 -170
- package/code-reviewer/skills/code-patrol/SKILL.md +0 -176
- package/code-reviewer/skills/context-resume/SKILL.md +0 -143
- package/code-reviewer/skills/executing-plans/SKILL.md +0 -201
- package/code-reviewer/skills/fix-and-learn/SKILL.md +0 -164
- package/code-reviewer/skills/health-check/SKILL.md +0 -225
- package/code-reviewer/skills/second-opinion/SKILL.md +0 -142
- package/code-reviewer/skills/systematic-debugging/SKILL.md +0 -230
- package/code-reviewer/skills/verification-before-completion/SKILL.md +0 -170
- package/code-reviewer/skills/writing-plans/SKILL.md +0 -207
- package/code-reviewer/src/__tests__/facades.test.ts +0 -598
- package/code-reviewer/src/activation/activate.ts +0 -125
- package/code-reviewer/src/activation/claude-md-content.ts +0 -217
- package/code-reviewer/src/activation/inject-claude-md.ts +0 -113
- package/code-reviewer/src/extensions/index.ts +0 -47
- package/code-reviewer/src/extensions/ops/example.ts +0 -28
- package/code-reviewer/src/identity/persona.ts +0 -62
- package/code-reviewer/src/index.ts +0 -278
- package/code-reviewer/src/intelligence/data/architecture.json +0 -5
- package/code-reviewer/src/intelligence/data/code-review.json +0 -5
- package/code-reviewer/tsconfig.json +0 -30
- package/code-reviewer/vitest.config.ts +0 -23
package/README.md
CHANGED
|
@@ -36,6 +36,9 @@ The interactive wizard walks you through agent configuration: name, role, domain
|
|
|
36
36
|
# Interactive wizard
|
|
37
37
|
soleri create my-agent
|
|
38
38
|
|
|
39
|
+
# Force host setup target
|
|
40
|
+
soleri create my-agent --setup-target codex
|
|
41
|
+
|
|
39
42
|
# Non-interactive with config file
|
|
40
43
|
soleri create --config agent.json
|
|
41
44
|
```
|
|
@@ -52,6 +55,7 @@ The config file follows the same schema as the wizard output:
|
|
|
52
55
|
"principles": ["Security is not optional"],
|
|
53
56
|
"greeting": "Ready to review.",
|
|
54
57
|
"outputDir": ".",
|
|
58
|
+
"setupTarget": "both",
|
|
55
59
|
"hookPacks": ["typescript-safety", "clean-commits"]
|
|
56
60
|
}
|
|
57
61
|
```
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent lifecycle CLI — status, update, diff.
|
|
3
|
+
*
|
|
4
|
+
* `soleri agent status` — health report with version, packs, vault stats.
|
|
5
|
+
* `soleri agent update` — OTA engine upgrade with migration support.
|
|
6
|
+
*/
|
|
7
|
+
import type { Command } from 'commander';
|
|
8
|
+
export declare function registerAgent(program: Command): void;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent lifecycle CLI — status, update, diff.
|
|
3
|
+
*
|
|
4
|
+
* `soleri agent status` — health report with version, packs, vault stats.
|
|
5
|
+
* `soleri agent update` — OTA engine upgrade with migration support.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
9
|
+
import { execFileSync } from 'node:child_process';
|
|
10
|
+
import * as p from '@clack/prompts';
|
|
11
|
+
import { PackLockfile, checkNpmVersion, checkVersionCompat } from '@soleri/core';
|
|
12
|
+
import { detectAgent } from '../utils/agent-context.js';
|
|
13
|
+
export function registerAgent(program) {
|
|
14
|
+
const agent = program.command('agent').description('Agent lifecycle management');
|
|
15
|
+
// ─── status ─────────────────────────────────────────────────
|
|
16
|
+
agent
|
|
17
|
+
.command('status')
|
|
18
|
+
.option('--json', 'Output as JSON')
|
|
19
|
+
.description('Show agent health: version, packs, vault, and update availability')
|
|
20
|
+
.action((opts) => {
|
|
21
|
+
const ctx = detectAgent();
|
|
22
|
+
if (!ctx) {
|
|
23
|
+
p.log.error('No agent project detected in current directory.');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// Read agent package.json
|
|
28
|
+
const pkgPath = join(ctx.agentPath, 'package.json');
|
|
29
|
+
const pkg = existsSync(pkgPath) ? JSON.parse(readFileSync(pkgPath, 'utf-8')) : {};
|
|
30
|
+
const agentName = pkg.name || 'unknown';
|
|
31
|
+
const agentVersion = pkg.version || '0.0.0';
|
|
32
|
+
// Read @soleri/core version
|
|
33
|
+
const corePkgPath = join(ctx.agentPath, 'node_modules', '@soleri', 'core', 'package.json');
|
|
34
|
+
const coreVersion = existsSync(corePkgPath)
|
|
35
|
+
? JSON.parse(readFileSync(corePkgPath, 'utf-8')).version || 'unknown'
|
|
36
|
+
: pkg.dependencies?.['@soleri/core'] || 'not installed';
|
|
37
|
+
// Check for core update
|
|
38
|
+
const latestCore = checkNpmVersion('@soleri/core');
|
|
39
|
+
// Read lockfile
|
|
40
|
+
const lockfilePath = join(ctx.agentPath, 'soleri.lock');
|
|
41
|
+
const lockfile = new PackLockfile(lockfilePath);
|
|
42
|
+
const packs = lockfile.list();
|
|
43
|
+
// Count vault entries if db exists
|
|
44
|
+
const dbPath = join(ctx.agentPath, 'data', 'vault.db');
|
|
45
|
+
const hasVault = existsSync(dbPath);
|
|
46
|
+
if (opts.json) {
|
|
47
|
+
console.log(JSON.stringify({
|
|
48
|
+
agent: agentName,
|
|
49
|
+
version: agentVersion,
|
|
50
|
+
engine: coreVersion,
|
|
51
|
+
engineLatest: latestCore,
|
|
52
|
+
packs: packs.map((p) => ({
|
|
53
|
+
id: p.id,
|
|
54
|
+
version: p.version,
|
|
55
|
+
type: p.type,
|
|
56
|
+
source: p.source,
|
|
57
|
+
})),
|
|
58
|
+
vault: { exists: hasVault },
|
|
59
|
+
}, null, 2));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
console.log(`\n Agent: ${agentName} v${agentVersion}`);
|
|
63
|
+
console.log(` Engine: @soleri/core ${coreVersion}${latestCore && latestCore !== coreVersion ? ` (update available: ${latestCore})` : ''}`);
|
|
64
|
+
if (packs.length > 0) {
|
|
65
|
+
console.log(`\n Packs (${packs.length} installed):`);
|
|
66
|
+
for (const pack of packs) {
|
|
67
|
+
const badge = pack.source === 'npm' ? ' [npm]' : pack.source === 'built-in' ? ' [built-in]' : '';
|
|
68
|
+
console.log(` ${pack.id}@${pack.version} ${pack.type}${badge}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.log('\n Packs: none installed');
|
|
73
|
+
}
|
|
74
|
+
console.log(`\n Vault: ${hasVault ? 'initialized' : 'not initialized'}`);
|
|
75
|
+
console.log('');
|
|
76
|
+
});
|
|
77
|
+
// ─── update ─────────────────────────────────────────────────
|
|
78
|
+
agent
|
|
79
|
+
.command('update')
|
|
80
|
+
.option('--check', 'Show what would change without updating')
|
|
81
|
+
.option('--dry-run', 'Preview migration steps')
|
|
82
|
+
.description('Update agent engine to latest compatible version')
|
|
83
|
+
.action((opts) => {
|
|
84
|
+
const ctx = detectAgent();
|
|
85
|
+
if (!ctx) {
|
|
86
|
+
p.log.error('No agent project detected in current directory.');
|
|
87
|
+
process.exit(1);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const pkgPath = join(ctx.agentPath, 'package.json');
|
|
91
|
+
if (!existsSync(pkgPath)) {
|
|
92
|
+
p.log.error('No package.json found in agent directory.');
|
|
93
|
+
process.exit(1);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
97
|
+
const currentRange = pkg.dependencies?.['@soleri/core'] || '';
|
|
98
|
+
const latestCore = checkNpmVersion('@soleri/core');
|
|
99
|
+
if (!latestCore) {
|
|
100
|
+
p.log.error('Could not check npm for latest @soleri/core version.');
|
|
101
|
+
process.exit(1);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Check compatibility
|
|
105
|
+
const compatible = checkVersionCompat(latestCore, currentRange);
|
|
106
|
+
if (opts.check) {
|
|
107
|
+
console.log(`\n Current: @soleri/core ${currentRange}`);
|
|
108
|
+
console.log(` Latest: @soleri/core ${latestCore}`);
|
|
109
|
+
console.log(` Compatible: ${compatible ? 'yes' : 'no (range: ' + currentRange + ')'}`);
|
|
110
|
+
console.log('');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (opts.dryRun) {
|
|
114
|
+
p.log.info(`Would update @soleri/core to ${latestCore}`);
|
|
115
|
+
p.log.info('Would run: npm install @soleri/core@' + latestCore);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const s = p.spinner();
|
|
119
|
+
s.start(`Updating @soleri/core to ${latestCore}...`);
|
|
120
|
+
try {
|
|
121
|
+
execFileSync('npm', ['install', `@soleri/core@${latestCore}`], {
|
|
122
|
+
cwd: ctx.agentPath,
|
|
123
|
+
stdio: 'pipe',
|
|
124
|
+
timeout: 120_000,
|
|
125
|
+
});
|
|
126
|
+
s.stop(`Updated to @soleri/core@${latestCore}`);
|
|
127
|
+
p.log.info('Run `soleri test` to verify the update.');
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
s.stop('Update failed');
|
|
131
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
// ─── diff ───────────────────────────────────────────────────
|
|
136
|
+
agent
|
|
137
|
+
.command('diff')
|
|
138
|
+
.description('Show drift between agent templates and latest engine templates')
|
|
139
|
+
.action(() => {
|
|
140
|
+
const ctx = detectAgent();
|
|
141
|
+
if (!ctx) {
|
|
142
|
+
p.log.error('No agent project detected in current directory.');
|
|
143
|
+
process.exit(1);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
p.log.info('Template diff is available after `soleri agent update --check`.');
|
|
147
|
+
p.log.info('Full template comparison will be added in a future release.');
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/create.js
CHANGED
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from 'node:fs';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
3
|
import * as p from '@clack/prompts';
|
|
4
|
-
import { previewScaffold, scaffold, AgentConfigSchema } from '@soleri/forge/lib';
|
|
4
|
+
import { previewScaffold, scaffold, AgentConfigSchema, SETUP_TARGETS, } from '@soleri/forge/lib';
|
|
5
5
|
import { runCreateWizard } from '../prompts/create-wizard.js';
|
|
6
6
|
import { listPacks } from '../hook-packs/registry.js';
|
|
7
7
|
import { installPack } from '../hook-packs/installer.js';
|
|
8
|
+
function parseSetupTarget(value) {
|
|
9
|
+
if (!value)
|
|
10
|
+
return undefined;
|
|
11
|
+
if (SETUP_TARGETS.includes(value)) {
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
function includesClaudeSetup(target) {
|
|
17
|
+
const resolved = target ?? 'claude';
|
|
18
|
+
return resolved === 'claude' || resolved === 'both';
|
|
19
|
+
}
|
|
8
20
|
export function registerCreate(program) {
|
|
9
21
|
program
|
|
10
22
|
.command('create')
|
|
11
23
|
.argument('[name]', 'Agent ID (kebab-case)')
|
|
12
24
|
.option('-c, --config <path>', 'Path to JSON config file (skip interactive prompts)')
|
|
25
|
+
.option('--setup-target <target>', `Setup target: ${SETUP_TARGETS.join(', ')} (default: claude)`)
|
|
13
26
|
.option('-y, --yes', 'Skip confirmation prompts (use with --config for fully non-interactive)')
|
|
14
27
|
.description('Create a new Soleri agent')
|
|
15
28
|
.action(async (name, opts) => {
|
|
@@ -38,10 +51,22 @@ export function registerCreate(program) {
|
|
|
38
51
|
return;
|
|
39
52
|
}
|
|
40
53
|
}
|
|
54
|
+
const setupTarget = parseSetupTarget(opts?.setupTarget);
|
|
55
|
+
if (opts?.setupTarget && !setupTarget) {
|
|
56
|
+
p.log.error(`Invalid --setup-target "${opts.setupTarget}". Expected one of: ${SETUP_TARGETS.join(', ')}`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
if (setupTarget) {
|
|
60
|
+
config = { ...config, setupTarget };
|
|
61
|
+
}
|
|
62
|
+
const claudeSetup = includesClaudeSetup(config.setupTarget);
|
|
41
63
|
const nonInteractive = !!(opts?.yes || opts?.config);
|
|
42
64
|
// Hook packs — from config file or interactive prompt
|
|
43
65
|
let selectedPacks = [];
|
|
44
|
-
if (config.hookPacks && config.hookPacks.length > 0) {
|
|
66
|
+
if (!claudeSetup && config.hookPacks && config.hookPacks.length > 0) {
|
|
67
|
+
p.log.warn('Hook packs are Claude-only. Skipping because setup target excludes Claude.');
|
|
68
|
+
}
|
|
69
|
+
else if (config.hookPacks && config.hookPacks.length > 0) {
|
|
45
70
|
selectedPacks = config.hookPacks;
|
|
46
71
|
// Validate pack names against registry — warn and skip unknown
|
|
47
72
|
const available = listPacks().map((pk) => pk.name);
|
|
@@ -53,7 +78,7 @@ export function registerCreate(program) {
|
|
|
53
78
|
selectedPacks = selectedPacks.filter((pk) => available.includes(pk));
|
|
54
79
|
}
|
|
55
80
|
}
|
|
56
|
-
else if (!nonInteractive) {
|
|
81
|
+
else if (!nonInteractive && claudeSetup) {
|
|
57
82
|
const packs = listPacks();
|
|
58
83
|
const packChoices = packs.map((pk) => ({
|
|
59
84
|
value: pk.name,
|
|
@@ -61,7 +86,7 @@ export function registerCreate(program) {
|
|
|
61
86
|
hint: `${pk.description} (${pk.hooks.length} hooks)`,
|
|
62
87
|
}));
|
|
63
88
|
const chosen = await p.multiselect({
|
|
64
|
-
message: 'Install hook packs? (quality gates for ~/.claude/)',
|
|
89
|
+
message: 'Install hook packs? (Claude quality gates for ~/.claude/)',
|
|
65
90
|
options: packChoices,
|
|
66
91
|
required: false,
|
|
67
92
|
});
|
|
@@ -74,6 +99,7 @@ export function registerCreate(program) {
|
|
|
74
99
|
p.log.info(`Will create ${preview.files.length} files in ${preview.agentDir}`);
|
|
75
100
|
p.log.info(`Facades: ${preview.facades.map((f) => f.name).join(', ')}`);
|
|
76
101
|
p.log.info(`Domains: ${preview.domains.join(', ')}`);
|
|
102
|
+
p.log.info(`Setup target: ${config.setupTarget ?? 'claude'}`);
|
|
77
103
|
if (config.tone) {
|
|
78
104
|
p.log.info(`Tone: ${config.tone}`);
|
|
79
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,63 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { execFileSync } from 'node:child_process';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
2
6
|
import * as p from '@clack/prompts';
|
|
3
7
|
import { installKnowledge } from '@soleri/forge/lib';
|
|
4
8
|
import { detectAgent } from '../utils/agent-context.js';
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a pack identifier to a local path.
|
|
11
|
+
* If `pack` is a local path, return it directly.
|
|
12
|
+
* If it looks like a package name, download from npm.
|
|
13
|
+
*/
|
|
14
|
+
async function resolvePackPath(pack) {
|
|
15
|
+
// Local path — use directly
|
|
16
|
+
if (pack.startsWith('.') || pack.startsWith('/') || existsSync(pack)) {
|
|
17
|
+
return resolve(pack);
|
|
18
|
+
}
|
|
19
|
+
// npm package name — resolve to @soleri/knowledge-{name} or use as-is if scoped
|
|
20
|
+
const npmName = pack.startsWith('@') ? pack : `@soleri/knowledge-${pack.replace(/@.*$/, '')}`;
|
|
21
|
+
const version = pack.includes('@') && !pack.startsWith('@') ? pack.split('@').pop() : undefined;
|
|
22
|
+
const spec = version ? `${npmName}@${version}` : npmName;
|
|
23
|
+
const tmpDir = join(tmpdir(), `soleri-pack-${Date.now()}`);
|
|
24
|
+
p.log.info(`Resolving ${spec} from npm...`);
|
|
25
|
+
try {
|
|
26
|
+
execFileSync('npm', ['pack', spec, '--pack-destination', tmpDir], {
|
|
27
|
+
stdio: 'pipe',
|
|
28
|
+
timeout: 30_000,
|
|
29
|
+
});
|
|
30
|
+
// Find the tarball
|
|
31
|
+
const { readdirSync } = await import('node:fs');
|
|
32
|
+
const { mkdirSync } = await import('node:fs');
|
|
33
|
+
mkdirSync(tmpDir, { recursive: true });
|
|
34
|
+
// npm pack creates a .tgz file — extract it
|
|
35
|
+
const files = readdirSync(tmpDir).filter((f) => f.endsWith('.tgz'));
|
|
36
|
+
if (files.length === 0) {
|
|
37
|
+
throw new Error(`No tarball found after npm pack ${spec}`);
|
|
38
|
+
}
|
|
39
|
+
const extractDir = join(tmpDir, 'extracted');
|
|
40
|
+
mkdirSync(extractDir, { recursive: true });
|
|
41
|
+
execFileSync('tar', ['xzf', join(tmpDir, files[0]), '-C', extractDir], {
|
|
42
|
+
stdio: 'pipe',
|
|
43
|
+
timeout: 15_000,
|
|
44
|
+
});
|
|
45
|
+
// npm pack extracts to a 'package/' subdirectory
|
|
46
|
+
const packageDir = join(extractDir, 'package');
|
|
47
|
+
if (!existsSync(packageDir)) {
|
|
48
|
+
throw new Error(`Extracted package directory not found at ${packageDir}`);
|
|
49
|
+
}
|
|
50
|
+
return packageDir;
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
54
|
+
throw new Error(`Failed to resolve ${spec} from npm: ${msg}`, { cause: e });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
5
57
|
export function registerInstallKnowledge(program) {
|
|
6
58
|
program
|
|
7
59
|
.command('install-knowledge')
|
|
8
|
-
.argument('<pack>', 'Path to knowledge bundle
|
|
60
|
+
.argument('<pack>', 'Path to knowledge bundle, directory, or npm package name')
|
|
9
61
|
.option('--no-facades', 'Skip facade generation for new domains')
|
|
10
62
|
.description('Install knowledge packs into the agent in the current directory')
|
|
11
63
|
.action(async (pack, opts) => {
|
|
@@ -14,9 +66,19 @@ export function registerInstallKnowledge(program) {
|
|
|
14
66
|
p.log.error('No agent project detected in current directory. Run this from an agent root.');
|
|
15
67
|
process.exit(1);
|
|
16
68
|
}
|
|
17
|
-
const bundlePath = resolve(pack);
|
|
18
69
|
const s = p.spinner();
|
|
19
|
-
s.start(`
|
|
70
|
+
s.start(`Resolving knowledge pack: ${pack}...`);
|
|
71
|
+
let bundlePath;
|
|
72
|
+
try {
|
|
73
|
+
bundlePath = await resolvePackPath(pack);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
s.stop('Resolution failed');
|
|
77
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
78
|
+
process.exit(1);
|
|
79
|
+
return; // unreachable, for TS
|
|
80
|
+
}
|
|
81
|
+
s.message(`Installing knowledge from ${bundlePath}...`);
|
|
20
82
|
try {
|
|
21
83
|
const result = await installKnowledge({
|
|
22
84
|
agentPath: ctx.agentPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-knowledge.js","sourceRoot":"","sources":["../../src/commands/install-knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"install-knowledge.js","sourceRoot":"","sources":["../../src/commands/install-knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import * as p from '@clack/prompts';
|
|
5
|
+
import { detectAgent } from '../utils/agent-context.js';
|
|
6
|
+
function installClaude(agentId, agentDir) {
|
|
7
|
+
const configPath = join(homedir(), '.claude.json');
|
|
8
|
+
let config = {};
|
|
9
|
+
if (existsSync(configPath)) {
|
|
10
|
+
try {
|
|
11
|
+
config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
p.log.error(`Failed to parse ${configPath}. Fix it manually or delete it to start fresh.`);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (!config.mcpServers || typeof config.mcpServers !== 'object') {
|
|
19
|
+
config.mcpServers = {};
|
|
20
|
+
}
|
|
21
|
+
config.mcpServers[agentId] = {
|
|
22
|
+
type: 'stdio',
|
|
23
|
+
command: 'node',
|
|
24
|
+
args: [join(agentDir, 'dist', 'index.js')],
|
|
25
|
+
env: {},
|
|
26
|
+
};
|
|
27
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
28
|
+
p.log.success(`Registered ${agentId} in ~/.claude.json`);
|
|
29
|
+
}
|
|
30
|
+
function installCodex(agentId, agentDir) {
|
|
31
|
+
const codexDir = join(homedir(), '.codex');
|
|
32
|
+
const configPath = join(codexDir, 'config.toml');
|
|
33
|
+
if (!existsSync(codexDir)) {
|
|
34
|
+
mkdirSync(codexDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
let content = '';
|
|
37
|
+
if (existsSync(configPath)) {
|
|
38
|
+
content = readFileSync(configPath, 'utf-8');
|
|
39
|
+
}
|
|
40
|
+
// Remove existing section for this agent if present
|
|
41
|
+
const sectionHeader = `[mcp_servers.${agentId}]`;
|
|
42
|
+
const sectionRegex = new RegExp(`\\[mcp_servers\\.${escapeRegExp(agentId)}\\][^\\[]*`, 's');
|
|
43
|
+
content = content.replace(sectionRegex, '').trim();
|
|
44
|
+
const entryPoint = join(agentDir, 'dist', 'index.js');
|
|
45
|
+
const section = `\n\n${sectionHeader}\ncommand = "node"\nargs = ["${entryPoint}"]\n`;
|
|
46
|
+
content = content + section;
|
|
47
|
+
writeFileSync(configPath, content.trim() + '\n', 'utf-8');
|
|
48
|
+
p.log.success(`Registered ${agentId} in ~/.codex/config.toml`);
|
|
49
|
+
}
|
|
50
|
+
function escapeRegExp(s) {
|
|
51
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
52
|
+
}
|
|
53
|
+
export function registerInstall(program) {
|
|
54
|
+
program
|
|
55
|
+
.command('install')
|
|
56
|
+
.argument('[dir]', 'Agent directory (defaults to cwd)')
|
|
57
|
+
.option('--target <target>', 'Registration target: claude, codex, or both', 'claude')
|
|
58
|
+
.description('Register agent as MCP server in editor config')
|
|
59
|
+
.action(async (dir, opts) => {
|
|
60
|
+
const resolvedDir = dir ? resolve(dir) : undefined;
|
|
61
|
+
const ctx = detectAgent(resolvedDir);
|
|
62
|
+
if (!ctx) {
|
|
63
|
+
p.log.error('Not in an agent project. Run from an agent directory or pass its path.');
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const target = (opts?.target ?? 'claude');
|
|
67
|
+
if (target !== 'claude' && target !== 'codex' && target !== 'both') {
|
|
68
|
+
p.log.error(`Invalid target "${target}". Use: claude, codex, or both`);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
if (target === 'claude' || target === 'both') {
|
|
72
|
+
installClaude(ctx.agentId, ctx.agentPath);
|
|
73
|
+
}
|
|
74
|
+
if (target === 'codex' || target === 'both') {
|
|
75
|
+
installCodex(ctx.agentId, ctx.agentPath);
|
|
76
|
+
}
|
|
77
|
+
p.log.info(`Agent ${ctx.agentId} is now available as an MCP server.`);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified pack CLI — install, list, remove, info, outdated for all pack types.
|
|
3
|
+
*
|
|
4
|
+
* Replaces separate `hooks add-pack`, `install-knowledge`, `skills install`
|
|
5
|
+
* with a single `soleri pack` command family.
|
|
6
|
+
*
|
|
7
|
+
* Resolution order: local path → built-in → npm registry.
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from 'commander';
|
|
10
|
+
export declare function registerPack(program: Command): void;
|