@soleri/cli 1.6.0 → 1.8.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.
@@ -10,6 +10,7 @@ export function registerCreate(program) {
10
10
  .command('create')
11
11
  .argument('[name]', 'Agent ID (kebab-case)')
12
12
  .option('-c, --config <path>', 'Path to JSON config file (skip interactive prompts)')
13
+ .option('-y, --yes', 'Skip confirmation prompts (use with --config for fully non-interactive)')
13
14
  .description('Create a new Soleri agent')
14
15
  .action(async (name, opts) => {
15
16
  try {
@@ -37,6 +38,7 @@ export function registerCreate(program) {
37
38
  return;
38
39
  }
39
40
  }
41
+ const nonInteractive = !!(opts?.yes || opts?.config);
40
42
  // Hook packs — from config file or interactive prompt
41
43
  let selectedPacks = [];
42
44
  if (config.hookPacks && config.hookPacks.length > 0) {
@@ -51,7 +53,7 @@ export function registerCreate(program) {
51
53
  selectedPacks = selectedPacks.filter((pk) => available.includes(pk));
52
54
  }
53
55
  }
54
- else if (!opts?.config) {
56
+ else if (!nonInteractive) {
55
57
  const packs = listPacks();
56
58
  const packChoices = packs.map((pk) => ({
57
59
  value: pk.name,
@@ -72,13 +74,21 @@ export function registerCreate(program) {
72
74
  p.log.info(`Will create ${preview.files.length} files in ${preview.agentDir}`);
73
75
  p.log.info(`Facades: ${preview.facades.map((f) => f.name).join(', ')}`);
74
76
  p.log.info(`Domains: ${preview.domains.join(', ')}`);
77
+ if (config.tone) {
78
+ p.log.info(`Tone: ${config.tone}`);
79
+ }
80
+ if (config.skills?.length) {
81
+ p.log.info(`Skills: ${config.skills.length} selected`);
82
+ }
75
83
  if (selectedPacks.length > 0) {
76
84
  p.log.info(`Hook packs: ${selectedPacks.join(', ')}`);
77
85
  }
78
- const confirmed = await p.confirm({ message: 'Create agent?' });
79
- if (p.isCancel(confirmed) || !confirmed) {
80
- p.outro('Cancelled.');
81
- return;
86
+ if (!nonInteractive) {
87
+ const confirmed = await p.confirm({ message: 'Create agent?' });
88
+ if (p.isCancel(confirmed) || !confirmed) {
89
+ p.outro('Cancelled.');
90
+ return;
91
+ }
82
92
  }
83
93
  // Scaffold + auto-build
84
94
  const s = p.spinner();
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,14 @@ export function registerDoctor(program) {
8
8
  log.heading('Soleri Doctor');
9
9
  const results = runAllChecks();
10
10
  let hasFailures = false;
11
+ let hasWarnings = false;
11
12
  for (const r of results) {
12
13
  if (r.status === 'pass')
13
14
  log.pass(r.label, r.detail);
14
- else if (r.status === 'warn')
15
+ else if (r.status === 'warn') {
15
16
  log.warn(r.label, r.detail);
17
+ hasWarnings = true;
18
+ }
16
19
  else {
17
20
  log.fail(r.label, r.detail);
18
21
  hasFailures = true;
@@ -23,6 +26,9 @@ export function registerDoctor(program) {
23
26
  log.info('Some checks failed. Fix the issues above and run soleri doctor again.');
24
27
  process.exit(1);
25
28
  }
29
+ else if (hasWarnings) {
30
+ log.info('All checks passed with warnings. Run from an agent directory to check agent-specific health.');
31
+ }
26
32
  else {
27
33
  log.info('All checks passed!');
28
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,GAAG,EAAE;QACX,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;iBAChD,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;iBACrD,CAAC;gBACJ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5B,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,GAAG,EAAE;QACX,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;iBAChD,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5B,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5B,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,WAAW,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CACN,8FAA8F,CAC/F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerExtend(program: Command): void;
@@ -0,0 +1,167 @@
1
+ import * as p from '@clack/prompts';
2
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { detectAgent } from '../utils/agent-context.js';
5
+ export function registerExtend(program) {
6
+ const extend = program
7
+ .command('extend')
8
+ .description('Manage agent extensions — custom ops, facades, middleware');
9
+ extend
10
+ .command('init')
11
+ .description('Initialize the extensions directory (if not already present)')
12
+ .action(async () => {
13
+ const ctx = detectAgent();
14
+ if (!ctx) {
15
+ p.log.error('No agent project detected. Run this from an agent root.');
16
+ process.exit(1);
17
+ }
18
+ const extDir = join(ctx.agentPath, 'src', 'extensions');
19
+ if (existsSync(join(extDir, 'index.ts'))) {
20
+ p.log.info('Extensions directory already exists.');
21
+ return;
22
+ }
23
+ const dirs = ['', 'ops', 'facades', 'middleware'];
24
+ for (const d of dirs) {
25
+ mkdirSync(join(extDir, d), { recursive: true });
26
+ }
27
+ const { generateExtensionsIndex, generateExampleOp } = await import('@soleri/forge/lib');
28
+ const config = { id: ctx.agentId, name: ctx.agentId };
29
+ writeFileSync(join(extDir, 'index.ts'), generateExtensionsIndex(config), 'utf-8');
30
+ writeFileSync(join(extDir, 'ops', 'example.ts'), generateExampleOp(config), 'utf-8');
31
+ p.log.success('Extensions directory created at src/extensions/');
32
+ p.log.info('Edit src/extensions/index.ts to register your custom ops, facades, and middleware.');
33
+ });
34
+ extend
35
+ .command('add-op')
36
+ .argument('<name>', 'Operation name in snake_case (e.g., "summarize_pr")')
37
+ .description('Scaffold a new custom op')
38
+ .action(async (name) => {
39
+ const ctx = detectAgent();
40
+ if (!ctx) {
41
+ p.log.error('No agent project detected. Run this from an agent root.');
42
+ process.exit(1);
43
+ }
44
+ const opsDir = join(ctx.agentPath, 'src', 'extensions', 'ops');
45
+ mkdirSync(opsDir, { recursive: true });
46
+ const fileName = name.replace(/_/g, '-');
47
+ const filePath = join(opsDir, `${fileName}.ts`);
48
+ if (existsSync(filePath)) {
49
+ p.log.error(`File already exists: src/extensions/ops/${fileName}.ts`);
50
+ process.exit(1);
51
+ }
52
+ const fnName = 'create' +
53
+ name
54
+ .split('_')
55
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
56
+ .join('') +
57
+ 'Op';
58
+ const content = `import { z } from 'zod';
59
+ import type { OpDefinition, AgentRuntime } from '@soleri/core';
60
+
61
+ export function ${fnName}(runtime: AgentRuntime): OpDefinition {
62
+ return {
63
+ name: '${name}',
64
+ description: 'TODO: describe what this op does',
65
+ auth: 'read',
66
+ schema: z.object({
67
+ // TODO: define your parameters
68
+ }),
69
+ handler: async (params) => {
70
+ // TODO: implement your logic
71
+ // You have access to runtime.vault, runtime.brain, runtime.planner, etc.
72
+ return { status: 'ok' };
73
+ },
74
+ };
75
+ }
76
+ `;
77
+ writeFileSync(filePath, content, 'utf-8');
78
+ p.log.success(`Created src/extensions/ops/${fileName}.ts`);
79
+ p.log.info(`Import ${fnName} in src/extensions/index.ts and add it to the ops array.`);
80
+ });
81
+ extend
82
+ .command('add-facade')
83
+ .argument('<name>', 'Facade name in kebab-case (e.g., "github")')
84
+ .description('Scaffold a new custom facade')
85
+ .action(async (name) => {
86
+ const ctx = detectAgent();
87
+ if (!ctx) {
88
+ p.log.error('No agent project detected. Run this from an agent root.');
89
+ process.exit(1);
90
+ }
91
+ const facadesDir = join(ctx.agentPath, 'src', 'extensions', 'facades');
92
+ mkdirSync(facadesDir, { recursive: true });
93
+ const filePath = join(facadesDir, `${name}.ts`);
94
+ if (existsSync(filePath)) {
95
+ p.log.error(`File already exists: src/extensions/facades/${name}.ts`);
96
+ process.exit(1);
97
+ }
98
+ const facadeName = `${ctx.agentId}_${name.replace(/-/g, '_')}`;
99
+ const className = name
100
+ .split('-')
101
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
102
+ .join('');
103
+ const content = `import { z } from 'zod';
104
+ import type { FacadeConfig, AgentRuntime } from '@soleri/core';
105
+
106
+ export function create${className}Facade(runtime: AgentRuntime): FacadeConfig {
107
+ return {
108
+ name: '${facadeName}',
109
+ description: 'TODO: describe this facade',
110
+ ops: [
111
+ {
112
+ name: 'status',
113
+ description: 'TODO: describe this op',
114
+ auth: 'read',
115
+ schema: z.object({}),
116
+ handler: async () => {
117
+ return { status: 'ok' };
118
+ },
119
+ },
120
+ ],
121
+ };
122
+ }
123
+ `;
124
+ writeFileSync(filePath, content, 'utf-8');
125
+ p.log.success(`Created src/extensions/facades/${name}.ts`);
126
+ p.log.info(`Import and add the facade to src/extensions/index.ts facades array.`);
127
+ p.log.info(`This will register as MCP tool: ${facadeName}`);
128
+ });
129
+ extend
130
+ .command('add-middleware')
131
+ .argument('<name>', 'Middleware name in kebab-case (e.g., "audit-logger")')
132
+ .description('Scaffold a new middleware')
133
+ .action(async (name) => {
134
+ const ctx = detectAgent();
135
+ if (!ctx) {
136
+ p.log.error('No agent project detected. Run this from an agent root.');
137
+ process.exit(1);
138
+ }
139
+ const mwDir = join(ctx.agentPath, 'src', 'extensions', 'middleware');
140
+ mkdirSync(mwDir, { recursive: true });
141
+ const filePath = join(mwDir, `${name}.ts`);
142
+ if (existsSync(filePath)) {
143
+ p.log.error(`File already exists: src/extensions/middleware/${name}.ts`);
144
+ process.exit(1);
145
+ }
146
+ const varName = name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
147
+ const content = `import type { OpMiddleware } from '@soleri/core';
148
+
149
+ export const ${varName}: OpMiddleware = {
150
+ name: '${name}',
151
+ before: async (ctx) => {
152
+ // Runs before every op. Return modified params or throw to reject.
153
+ // console.error(\`[\${ctx.facade}.\${ctx.op}] called\`);
154
+ return ctx.params;
155
+ },
156
+ after: async (ctx) => {
157
+ // Runs after every op. Return modified result or throw.
158
+ return ctx.result;
159
+ },
160
+ };
161
+ `;
162
+ writeFileSync(filePath, content, 'utf-8');
163
+ p.log.success(`Created src/extensions/middleware/${name}.ts`);
164
+ p.log.info('Import and add to src/extensions/index.ts middleware array.');
165
+ });
166
+ }
167
+ //# sourceMappingURL=extend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extend.js","sourceRoot":"","sources":["../../src/commands/extend.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,68 @@
1
1
  import { resolve } from 'node:path';
2
+ import { homedir } from 'node:os';
3
+ import { existsSync } from 'node:fs';
2
4
  import { listAgents } from '@soleri/forge/lib';
3
5
  import * as log from '../utils/logger.js';
4
6
  function pad(s, len) {
5
7
  return s.length >= len ? s.slice(0, len) : s + ' '.repeat(len - s.length);
6
8
  }
9
+ function printAgentTable(agents) {
10
+ console.log(` ${pad('ID', 16)}${pad('Domains', 26)}${pad('Built', 8)}${pad('Deps', 8)}Path`);
11
+ console.log(' ' + '-'.repeat(80));
12
+ for (const agent of agents) {
13
+ const built = agent.hasDistDir ? '✓' : '✗';
14
+ const deps = agent.hasNodeModules ? '✓' : '✗';
15
+ const domains = agent.domains.join(', ') || '(none)';
16
+ const truncDomains = domains.length > 25 ? domains.slice(0, 22) + '...' : domains;
17
+ console.log(` ${pad(agent.id, 16)}${pad(truncDomains, 26)}${pad(built, 8)}${pad(deps, 8)}${agent.path}`);
18
+ }
19
+ }
7
20
  export function registerList(program) {
8
21
  program
9
22
  .command('list')
10
- .argument('[dir]', 'Directory to scan for agents', process.cwd())
11
- .description('List all Soleri agents in a directory')
23
+ .argument('[dir]', 'Directory to scan for agents')
24
+ .description('List all Soleri agents in a directory (scans common locations if none given)')
12
25
  .action((dir) => {
13
- const targetDir = resolve(dir);
14
- const agents = listAgents(targetDir);
15
- if (agents.length === 0) {
16
- log.info(`No agents found in ${targetDir}`);
26
+ if (dir) {
27
+ // Explicit directory — scan only that
28
+ const targetDir = resolve(dir);
29
+ const agents = listAgents(targetDir);
30
+ if (agents.length === 0) {
31
+ log.info(`No agents found in ${targetDir}`);
32
+ return;
33
+ }
34
+ log.heading(`Agents in ${targetDir}`);
35
+ printAgentTable(agents);
36
+ console.log(`\n ${agents.length} agent(s) found`);
17
37
  return;
18
38
  }
19
- log.heading(`Agents in ${targetDir}`);
20
- // Table header
21
- console.log(` ${pad('ID', 16)}${pad('Domains', 26)}${pad('Built', 8)}${pad('Deps', 8)}Path`);
22
- console.log(' ' + '-'.repeat(80));
23
- for (const agent of agents) {
24
- const built = agent.hasDistDir ? '' : '✗';
25
- const deps = agent.hasNodeModules ? '' : '✗';
26
- const domains = agent.domains.join(', ') || '(none)';
27
- const truncDomains = domains.length > 25 ? domains.slice(0, 22) + '...' : domains;
28
- console.log(` ${pad(agent.id, 16)}${pad(truncDomains, 26)}${pad(built, 8)}${pad(deps, 8)}${agent.path}`);
39
+ // No directory given — scan common locations
40
+ const home = homedir();
41
+ const scanDirs = [
42
+ process.cwd(),
43
+ home,
44
+ resolve(home, 'agents'),
45
+ resolve(home, 'projects'),
46
+ ].filter((d, i, arr) => existsSync(d) && arr.indexOf(d) === i);
47
+ const allAgents = [];
48
+ for (const d of scanDirs) {
49
+ allAgents.push(...listAgents(d));
50
+ }
51
+ // Deduplicate by path
52
+ const seen = new Set();
53
+ const unique = allAgents.filter((a) => {
54
+ if (seen.has(a.path))
55
+ return false;
56
+ seen.add(a.path);
57
+ return true;
58
+ });
59
+ if (unique.length === 0) {
60
+ log.info('No agents found. Create one with: soleri create');
61
+ return;
29
62
  }
30
- console.log(`\n ${agents.length} agent(s) found`);
63
+ log.heading('Soleri Agents');
64
+ printAgentTable(unique);
65
+ console.log(`\n ${unique.length} agent(s) found`);
31
66
  });
32
67
  }
33
68
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,SAAS,GAAG,CAAC,CAAS,EAAE,GAAW;IACjC,OAAO,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,OAAO,EAAE,8BAA8B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAChE,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE;QACtB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;QAEtC,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;YACrD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YAClF,OAAO,CAAC,GAAG,CACT,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAC7F,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
2
3
  import { Command } from 'commander';
3
4
  import { registerCreate } from './commands/create.js';
4
5
  import { registerList } from './commands/list.js';
@@ -10,11 +11,14 @@ import { registerHooks } from './commands/hooks.js';
10
11
  import { registerGovernance } from './commands/governance.js';
11
12
  import { registerTest } from './commands/test.js';
12
13
  import { registerUpgrade } from './commands/upgrade.js';
14
+ import { registerExtend } from './commands/extend.js';
15
+ const require = createRequire(import.meta.url);
16
+ const { version } = require('../package.json');
13
17
  const program = new Command();
14
18
  program
15
19
  .name('soleri')
16
20
  .description('Developer CLI for creating and managing Soleri AI agents')
17
- .version('1.5.0');
21
+ .version(version);
18
22
  registerCreate(program);
19
23
  registerList(program);
20
24
  registerAddDomain(program);
@@ -25,5 +29,6 @@ registerHooks(program);
25
29
  registerGovernance(program);
26
30
  registerTest(program);
27
31
  registerUpgrade(program);
32
+ registerExtend(program);
28
33
  program.parse();
29
34
  //# 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,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,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;AAExD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,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,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;AAEtD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Pre-built agent archetypes that pre-fill the wizard.
3
+ * Each archetype provides sensible defaults for role, description,
4
+ * domains, principles, skills, and greeting — so the user can
5
+ * scaffold a full agent with minimal typing.
6
+ */
7
+ export interface Archetype {
8
+ value: string;
9
+ label: string;
10
+ hint: string;
11
+ defaults: {
12
+ role: string;
13
+ description: string;
14
+ domains: string[];
15
+ principles: string[];
16
+ skills: string[];
17
+ tone: 'precise' | 'mentor' | 'pragmatic';
18
+ greetingTemplate: (name: string) => string;
19
+ };
20
+ }
21
+ export declare const ARCHETYPES: Archetype[];
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Pre-built agent archetypes that pre-fill the wizard.
3
+ * Each archetype provides sensible defaults for role, description,
4
+ * domains, principles, skills, and greeting — so the user can
5
+ * scaffold a full agent with minimal typing.
6
+ */
7
+ export const ARCHETYPES = [
8
+ {
9
+ value: 'code-reviewer',
10
+ label: 'Code Reviewer',
11
+ hint: 'Catches bugs, enforces patterns, reviews PRs before merge',
12
+ defaults: {
13
+ role: 'Catches bugs, enforces code patterns, and reviews pull requests before merge',
14
+ description: 'This agent reviews code for quality issues, anti-patterns, naming conventions, test coverage gaps, and architectural violations. It provides actionable feedback with concrete fix suggestions.',
15
+ domains: ['code-review', 'architecture'],
16
+ principles: [
17
+ 'Actionable feedback only',
18
+ 'Respect existing patterns',
19
+ 'Simplicity over cleverness',
20
+ ],
21
+ skills: ['writing-plans', 'executing-plans', 'code-patrol', 'fix-and-learn', 'second-opinion'],
22
+ tone: 'pragmatic',
23
+ greetingTemplate: (name) => `Hello! I'm ${name}. Drop a PR link or paste code — I'll review it for bugs, patterns, and quality.`,
24
+ },
25
+ },
26
+ {
27
+ value: 'security-auditor',
28
+ label: 'Security Auditor',
29
+ hint: 'OWASP Top 10, dependency scanning, secrets detection',
30
+ defaults: {
31
+ role: 'Identifies vulnerabilities and enforces secure coding practices',
32
+ description: 'This agent scans code for security issues including OWASP Top 10, dependency vulnerabilities, secrets exposure, injection risks, and insecure configurations. It provides remediation guidance with severity ratings.',
33
+ domains: ['security', 'code-review'],
34
+ principles: [
35
+ 'Security first',
36
+ 'Fail closed, not open',
37
+ 'Zero trust by default',
38
+ 'Least privilege always',
39
+ ],
40
+ skills: ['writing-plans', 'executing-plans', 'code-patrol', 'fix-and-learn', 'vault-navigator'],
41
+ tone: 'precise',
42
+ greetingTemplate: (name) => `Hello! I'm ${name}. I help identify vulnerabilities and enforce secure coding practices across your codebase.`,
43
+ },
44
+ },
45
+ {
46
+ value: 'api-architect',
47
+ label: 'API Architect',
48
+ hint: 'REST/GraphQL design, contract validation, versioning',
49
+ defaults: {
50
+ role: 'Designs and validates APIs for consistency, usability, and correctness',
51
+ description: 'This agent reviews API designs for RESTful conventions, GraphQL best practices, versioning strategy, error handling, pagination patterns, and contract consistency. It catches breaking changes before they ship.',
52
+ domains: ['api-design', 'architecture'],
53
+ principles: [
54
+ 'Convention over configuration',
55
+ 'Design for the consumer, not the implementer',
56
+ 'Respect existing patterns',
57
+ 'Every migration must be reversible',
58
+ ],
59
+ skills: ['writing-plans', 'executing-plans', 'vault-navigator', 'vault-capture', 'second-opinion'],
60
+ tone: 'mentor',
61
+ greetingTemplate: (name) => `Hello! I'm ${name}. Share your API design or schema — I'll review it for consistency, usability, and best practices.`,
62
+ },
63
+ },
64
+ {
65
+ value: 'test-engineer',
66
+ label: 'Test Engineer',
67
+ hint: 'Test generation, coverage analysis, TDD workflow',
68
+ defaults: {
69
+ role: 'Generates tests, analyzes coverage, and enforces test-driven development',
70
+ description: 'This agent helps write comprehensive test suites, identifies coverage gaps, suggests edge cases, and guides TDD workflows. It supports unit, integration, and end-to-end testing strategies.',
71
+ domains: ['testing', 'code-review'],
72
+ principles: [
73
+ 'Test everything that can break',
74
+ 'Simplicity over cleverness',
75
+ 'Actionable feedback only',
76
+ 'Respect existing patterns',
77
+ ],
78
+ skills: [
79
+ 'writing-plans',
80
+ 'executing-plans',
81
+ 'test-driven-development',
82
+ 'fix-and-learn',
83
+ 'code-patrol',
84
+ ],
85
+ tone: 'pragmatic',
86
+ greetingTemplate: (name) => `Hello! I'm ${name}. Point me at code that needs tests — I'll generate comprehensive suites and identify coverage gaps.`,
87
+ },
88
+ },
89
+ {
90
+ value: 'devops-pilot',
91
+ label: 'DevOps Pilot',
92
+ hint: 'CI/CD pipelines, infrastructure, deployment automation',
93
+ defaults: {
94
+ role: 'Manages CI/CD pipelines, infrastructure, and deployment automation',
95
+ description: 'This agent helps design and maintain CI/CD pipelines, Docker configurations, infrastructure as code, monitoring setup, and deployment strategies. It follows reliability engineering best practices.',
96
+ domains: ['devops', 'architecture'],
97
+ principles: [
98
+ 'Automate everything repeatable',
99
+ 'Graceful degradation over hard failures',
100
+ 'Observability built in from day one',
101
+ 'Convention over configuration',
102
+ ],
103
+ skills: ['writing-plans', 'executing-plans', 'vault-navigator', 'fix-and-learn', 'knowledge-harvest'],
104
+ tone: 'pragmatic',
105
+ greetingTemplate: (name) => `Hello! I'm ${name}. I help with CI/CD, infrastructure, and deployment — describe your setup or issue.`,
106
+ },
107
+ },
108
+ {
109
+ value: 'database-architect',
110
+ label: 'Database Architect',
111
+ hint: 'Schema design, migrations, query optimization',
112
+ defaults: {
113
+ role: 'Designs database schemas, manages migrations, and optimizes queries',
114
+ description: 'This agent reviews database designs for normalization, indexing strategy, migration safety, query performance, and data integrity. It supports SQL and NoSQL patterns.',
115
+ domains: ['database', 'performance'],
116
+ principles: [
117
+ 'Every migration must be reversible',
118
+ 'Convention over configuration',
119
+ 'Test everything that can break',
120
+ 'Simplicity over cleverness',
121
+ ],
122
+ skills: ['writing-plans', 'executing-plans', 'vault-navigator', 'vault-capture', 'knowledge-harvest'],
123
+ tone: 'precise',
124
+ greetingTemplate: (name) => `Hello! I'm ${name}. Share your schema, migration, or query — I'll review it for correctness and performance.`,
125
+ },
126
+ },
127
+ {
128
+ value: 'full-stack',
129
+ label: 'Full-Stack Assistant',
130
+ hint: 'General-purpose dev helper across the entire stack',
131
+ defaults: {
132
+ role: 'A general-purpose development assistant across the full stack',
133
+ description: 'This agent helps with frontend, backend, database, testing, and deployment tasks. It provides balanced guidance across the entire stack without deep specialization in any single area.',
134
+ domains: ['code-review', 'testing', 'architecture'],
135
+ principles: [
136
+ 'Simplicity over cleverness',
137
+ 'Test everything that can break',
138
+ 'Respect existing patterns',
139
+ ],
140
+ skills: [
141
+ 'writing-plans',
142
+ 'executing-plans',
143
+ 'test-driven-development',
144
+ 'code-patrol',
145
+ 'fix-and-learn',
146
+ 'vault-navigator',
147
+ ],
148
+ tone: 'mentor',
149
+ greetingTemplate: (name) => `Hello! I'm ${name}. I help across the full stack — frontend, backend, testing, deployment. What are you working on?`,
150
+ },
151
+ },
152
+ ];
153
+ //# sourceMappingURL=archetypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../src/prompts/archetypes.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { AgentConfig } from '@soleri/forge/lib';
2
2
  /**
3
3
  * Run the interactive create wizard and return an AgentConfig.
4
- * Returns null if the user cancels.
4
+ * Returns null if the user cancels at any point.
5
5
  */
6
6
  export declare function runCreateWizard(initialName?: string): Promise<AgentConfig | null>;