@soleri/cli 9.8.0 → 9.9.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.
@@ -1,4 +1,4 @@
1
- import { readFileSync, existsSync } from 'node:fs';
1
+ import { accessSync, constants as fsConstants, readFileSync, existsSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
3
  import * as p from '@clack/prompts';
4
4
  import { previewScaffold, scaffold, AgentConfigSchema, SETUP_TARGETS, scaffoldFileTree, } from '@soleri/forge/lib';
@@ -63,7 +63,15 @@ export function registerCreate(program) {
63
63
  p.log.error(`Config file not found: ${configPath}`);
64
64
  process.exit(1);
65
65
  }
66
- const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
66
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+ let raw;
68
+ try {
69
+ raw = JSON.parse(readFileSync(configPath, 'utf-8'));
70
+ }
71
+ catch {
72
+ p.log.error(`Failed to parse ${configPath}. The file may be corrupted. Delete it and try again.`);
73
+ process.exit(1);
74
+ }
67
75
  const parsed = AgentConfigSchema.safeParse(raw);
68
76
  if (!parsed.success) {
69
77
  p.log.error(`Invalid config: ${parsed.error.message}`);
@@ -131,6 +139,14 @@ export function registerCreate(program) {
131
139
  })),
132
140
  };
133
141
  const outputDir = opts?.dir ? resolve(opts.dir) : (config.outputDir ?? process.cwd());
142
+ // Preflight: check output directory is writable
143
+ try {
144
+ accessSync(outputDir, fsConstants.W_OK);
145
+ }
146
+ catch {
147
+ p.log.error(`Cannot write to ${outputDir} — check permissions`);
148
+ process.exit(1);
149
+ }
134
150
  const nonInteractive = !!(opts?.yes || opts?.config);
135
151
  if (!nonInteractive) {
136
152
  p.log.info(`Will create file-tree agent "${config.name}" in ${outputDir}/${config.id}`);
@@ -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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"}
@@ -30,7 +30,14 @@ function runFileTreeDev(agentPath, agentId) {
30
30
  p.log.info('Press Ctrl+C to stop.\n');
31
31
  regenerateClaudeMd(agentPath);
32
32
  // Start the engine server
33
- const engineBin = require.resolve('@soleri/core/dist/engine/bin/soleri-engine.js');
33
+ let engineBin;
34
+ try {
35
+ engineBin = require.resolve('@soleri/core/dist/engine/bin/soleri-engine.js');
36
+ }
37
+ catch {
38
+ p.log.error('Engine not found. Run: npm install @soleri/core');
39
+ process.exit(1);
40
+ }
34
41
  const engine = spawn('node', [engineBin, '--agent', join(agentPath, 'agent.yaml')], {
35
42
  stdio: ['pipe', 'inherit', 'inherit'],
36
43
  env: { ...process.env },
@@ -66,8 +73,11 @@ function runFileTreeDev(agentPath, agentId) {
66
73
  }, 200);
67
74
  });
68
75
  }
69
- catch {
70
- // Directory may not exist yet that's OK
76
+ catch (err) {
77
+ const msg = err instanceof Error ? err.message : String(err);
78
+ if (!msg.includes('ENOENT')) {
79
+ p.log.warn(`File watch stopped: ${msg}. Restart soleri dev if changes stop updating.`);
80
+ }
71
81
  }
72
82
  }
73
83
  // Graceful shutdown — kill engine too
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  import type { Command } from 'commander';
2
+ /** Normalize a file path to forward slashes (POSIX) for cross-platform config files. */
3
+ export declare const toPosix: (p: string) => string;
2
4
  export declare function installClaude(agentId: string, agentDir: string, isFileTree: boolean): void;
3
5
  export declare function registerInstall(program: Command): void;
@@ -1,11 +1,13 @@
1
1
  import { createRequire } from 'node:module';
2
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
3
- import { join, resolve } from 'node:path';
2
+ import { accessSync, constants as fsConstants, existsSync, readFileSync, writeFileSync, mkdirSync, } from 'node:fs';
3
+ import { dirname, join, resolve } from 'node:path';
4
4
  import { homedir } from 'node:os';
5
5
  import * as p from '@clack/prompts';
6
6
  import { detectAgent } from '../utils/agent-context.js';
7
7
  /** Default parent directory for agents: ~/.soleri/ */
8
8
  const SOLERI_HOME = process.env.SOLERI_HOME ?? join(homedir(), '.soleri');
9
+ /** Normalize a file path to forward slashes (POSIX) for cross-platform config files. */
10
+ export const toPosix = (p) => p.replace(/\\/g, '/');
9
11
  /**
10
12
  * Resolve the absolute path to the soleri-engine binary.
11
13
  * Falls back to `npx @soleri/engine` if resolution fails (e.g. not installed globally).
@@ -23,17 +25,18 @@ function resolveEngineBin() {
23
25
  /** MCP server entry for file-tree agents (resolved engine path, no npx) */
24
26
  function fileTreeMcpEntry(agentDir) {
25
27
  const engine = resolveEngineBin();
28
+ const agentYaml = toPosix(join(agentDir, 'agent.yaml'));
26
29
  if (engine.command === 'node') {
27
30
  return {
28
31
  type: 'stdio',
29
32
  command: 'node',
30
- args: [engine.bin, '--agent', join(agentDir, 'agent.yaml')],
33
+ args: [toPosix(engine.bin), '--agent', agentYaml],
31
34
  };
32
35
  }
33
36
  return {
34
37
  type: 'stdio',
35
38
  command: 'npx',
36
- args: ['@soleri/engine', '--agent', join(agentDir, 'agent.yaml')],
39
+ args: ['@soleri/engine', '--agent', agentYaml],
37
40
  };
38
41
  }
39
42
  /** MCP server entry for legacy TypeScript agents (uses node dist/index.js) */
@@ -41,12 +44,34 @@ function legacyMcpEntry(agentDir) {
41
44
  return {
42
45
  type: 'stdio',
43
46
  command: 'node',
44
- args: [join(agentDir, 'dist', 'index.js')],
47
+ args: [toPosix(join(agentDir, 'dist', 'index.js'))],
45
48
  env: {},
46
49
  };
47
50
  }
51
+ /**
52
+ * Check if a file path is writable. If the file exists, checks write permission on the file.
53
+ * If the file does not exist, checks write permission on the parent directory.
54
+ */
55
+ function checkWritable(filePath) {
56
+ try {
57
+ if (existsSync(filePath)) {
58
+ accessSync(filePath, fsConstants.W_OK);
59
+ }
60
+ else {
61
+ accessSync(dirname(filePath), fsConstants.W_OK);
62
+ }
63
+ return true;
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
48
69
  export function installClaude(agentId, agentDir, isFileTree) {
49
70
  const configPath = join(homedir(), '.claude.json');
71
+ if (!checkWritable(configPath)) {
72
+ p.log.error(`Cannot write to ${configPath} — check file permissions`);
73
+ process.exit(1);
74
+ }
50
75
  let config = {};
51
76
  if (existsSync(configPath)) {
52
77
  try {
@@ -63,14 +88,26 @@ export function installClaude(agentId, agentDir, isFileTree) {
63
88
  config.mcpServers[agentId] = isFileTree
64
89
  ? fileTreeMcpEntry(agentDir)
65
90
  : legacyMcpEntry(agentDir);
66
- writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
91
+ try {
92
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
93
+ }
94
+ catch {
95
+ p.log.error(`Cannot write to ${configPath}. Check file permissions.`);
96
+ process.exit(1);
97
+ }
67
98
  p.log.success(`Registered ${agentId} in ~/.claude.json`);
68
99
  }
69
100
  function installCodex(agentId, agentDir, isFileTree) {
70
101
  const codexDir = join(homedir(), '.codex');
71
102
  const configPath = join(codexDir, 'config.toml');
72
103
  if (!existsSync(codexDir)) {
73
- mkdirSync(codexDir, { recursive: true });
104
+ try {
105
+ mkdirSync(codexDir, { recursive: true });
106
+ }
107
+ catch {
108
+ p.log.error(`Cannot create directory ${codexDir}. Check permissions.`);
109
+ process.exit(1);
110
+ }
74
111
  }
75
112
  let content = '';
76
113
  if (existsSync(configPath)) {
@@ -82,21 +119,28 @@ function installCodex(agentId, agentDir, isFileTree) {
82
119
  content = content.replace(sectionRegex, '').trim();
83
120
  let section;
84
121
  if (isFileTree) {
85
- const agentYamlPath = join(agentDir, 'agent.yaml');
122
+ const agentYamlPath = toPosix(join(agentDir, 'agent.yaml'));
86
123
  const engine = resolveEngineBin();
87
124
  if (engine.command === 'node') {
88
- section = `\n\n${sectionHeader}\ncommand = "node"\nargs = ["${engine.bin}", "--agent", "${agentYamlPath}"]\n`;
125
+ const bin = toPosix(engine.bin);
126
+ section = `\n\n${sectionHeader}\ncommand = "node"\nargs = ["${bin}", "--agent", "${agentYamlPath}"]\n`;
89
127
  }
90
128
  else {
91
129
  section = `\n\n${sectionHeader}\ncommand = "npx"\nargs = ["@soleri/engine", "--agent", "${agentYamlPath}"]\n`;
92
130
  }
93
131
  }
94
132
  else {
95
- const entryPoint = join(agentDir, 'dist', 'index.js');
133
+ const entryPoint = toPosix(join(agentDir, 'dist', 'index.js'));
96
134
  section = `\n\n${sectionHeader}\ncommand = "node"\nargs = ["${entryPoint}"]\n`;
97
135
  }
98
136
  content = content + section;
99
- writeFileSync(configPath, content.trim() + '\n', 'utf-8');
137
+ try {
138
+ writeFileSync(configPath, content.trim() + '\n', 'utf-8');
139
+ }
140
+ catch {
141
+ p.log.error(`Cannot write to ${configPath}. Check file permissions.`);
142
+ process.exit(1);
143
+ }
100
144
  p.log.success(`Registered ${agentId} in ~/.codex/config.toml`);
101
145
  }
102
146
  function installOpencode(agentId, agentDir, isFileTree) {
@@ -105,7 +149,13 @@ function installOpencode(agentId, agentDir, isFileTree) {
105
149
  const configDir = join(homedir(), '.config', 'opencode');
106
150
  const configPath = join(configDir, 'opencode.json');
107
151
  if (!existsSync(configDir)) {
108
- mkdirSync(configDir, { recursive: true });
152
+ try {
153
+ mkdirSync(configDir, { recursive: true });
154
+ }
155
+ catch {
156
+ p.log.error(`Cannot create directory ${configDir}. Check permissions.`);
157
+ process.exit(1);
158
+ }
109
159
  }
110
160
  let config = {};
111
161
  if (existsSync(configPath)) {
@@ -115,7 +165,8 @@ function installOpencode(agentId, agentDir, isFileTree) {
115
165
  config = JSON.parse(stripped);
116
166
  }
117
167
  catch {
118
- config = {};
168
+ p.log.error(`Failed to parse ${configPath}. The file may be corrupted. Delete it and try again.`);
169
+ process.exit(1);
119
170
  }
120
171
  }
121
172
  if (!config.mcp || typeof config.mcp !== 'object') {
@@ -124,20 +175,27 @@ function installOpencode(agentId, agentDir, isFileTree) {
124
175
  const servers = config.mcp;
125
176
  if (isFileTree) {
126
177
  const engine = resolveEngineBin();
178
+ const agentYaml = toPosix(join(agentDir, 'agent.yaml'));
127
179
  servers[agentId] = {
128
180
  type: 'local',
129
181
  command: engine.command === 'node'
130
- ? ['node', engine.bin, '--agent', join(agentDir, 'agent.yaml')]
131
- : ['npx', '-y', '@soleri/engine', '--agent', join(agentDir, 'agent.yaml')],
182
+ ? ['node', toPosix(engine.bin), '--agent', agentYaml]
183
+ : ['npx', '-y', '@soleri/engine', '--agent', agentYaml],
132
184
  };
133
185
  }
134
186
  else {
135
187
  servers[agentId] = {
136
188
  type: 'local',
137
- command: ['node', join(agentDir, 'dist', 'index.js')],
189
+ command: ['node', toPosix(join(agentDir, 'dist', 'index.js'))],
138
190
  };
139
191
  }
140
- writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
192
+ try {
193
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
194
+ }
195
+ catch {
196
+ p.log.error(`Cannot write to ${configPath}. Check file permissions.`);
197
+ process.exit(1);
198
+ }
141
199
  p.log.success(`Registered ${agentId} in ~/.config/opencode/opencode.json`);
142
200
  }
143
201
  function escapeRegExp(s) {
@@ -150,7 +208,8 @@ function escapeRegExp(s) {
150
208
  function installLauncher(agentId, agentDir) {
151
209
  // Launcher scripts to /usr/local/bin are Unix-only
152
210
  if (process.platform === 'win32') {
153
- p.log.info('Launcher scripts are not supported on Windows — skipping');
211
+ p.log.info('Launcher scripts are not supported on Windows.');
212
+ p.log.info(`On Windows, run your agent with: npx @soleri/cli dev --agent "${toPosix(agentDir)}"`);
154
213
  return;
155
214
  }
156
215
  const binPath = join('/usr/local/bin', agentId);
@@ -158,7 +217,7 @@ function installLauncher(agentId, agentDir) {
158
217
  '#!/bin/bash',
159
218
  `# ${agentId} — Soleri second brain launcher`,
160
219
  `# Type "${agentId}" from any directory to open Claude Code with this agent`,
161
- `exec claude --mcp-config ${join(agentDir, '.mcp.json')}`,
220
+ `exec claude --mcp-config ${toPosix(join(agentDir, '.mcp.json'))}`,
162
221
  '',
163
222
  ].join('\n');
164
223
  try {
@@ -167,7 +226,7 @@ function installLauncher(agentId, agentDir) {
167
226
  }
168
227
  catch {
169
228
  p.log.warn(`Could not create launcher at ${binPath} (may need sudo)`);
170
- p.log.info(`To create manually: sudo bash -c 'cat > ${binPath} << "EOF"\\n#!/bin/bash\\nexec claude --mcp-config ${join(agentDir, '.mcp.json')}\\nEOF' && chmod +x ${binPath}`);
229
+ p.log.info(`To create manually: sudo bash -c 'cat > ${binPath} << "EOF"\\n#!/bin/bash\\nexec claude --mcp-config ${toPosix(join(agentDir, '.mcp.json'))}\\nEOF' && chmod +x ${binPath}`);
171
230
  }
172
231
  }
173
232
  export function registerInstall(program) {
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,sDAAsD;AACtD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAI1E;;;GAGG;AACH,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;IACnD,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;SAC5D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1C,GAAG,EAAE,EAAE;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,QAAgB,EAAE,UAAmB;IAClF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IACnD,IAAI,MAAM,GAA4B,EAAE,CAAC;IAEzC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,UAAU,gDAAgD,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;IACzB,CAAC;IAEA,MAAM,CAAC,UAAsC,CAAC,OAAO,CAAC,GAAG,UAAU;QAClE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAC5B,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE7B,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,OAAO,oBAAoB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,QAAgB,EAAE,UAAmB;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,oDAAoD;IACpD,MAAM,aAAa,GAAG,gBAAgB,OAAO,GAAG,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,oBAAoB,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC5F,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnD,IAAI,OAAe,CAAC;IACpB,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,GAAG,OAAO,aAAa,gCAAgC,MAAM,CAAC,GAAG,kBAAkB,aAAa,MAAM,CAAC;QAChH,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,OAAO,aAAa,4DAA4D,aAAa,MAAM,CAAC;QAChH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACtD,OAAO,GAAG,OAAO,aAAa,gCAAgC,UAAU,MAAM,CAAC;IACjF,CAAC;IAED,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAE5B,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,OAAO,0BAA0B,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,QAAgB,EAAE,UAAmB;IAC7E,wEAAwE;IACxE,qFAAqF;IACrF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAEpD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,MAAM,GAA4B,EAAE,CAAC;IACzC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAA8B,CAAC;IACtD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,OAAO,CAAC,OAAO,CAAC,GAAG;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EACL,MAAM,CAAC,OAAO,KAAK,MAAM;gBACvB,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;SAC/E,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,GAAG;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;SACtD,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,OAAO,sCAAsC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE,QAAgB;IACxD,mDAAmD;IACnD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG;QACb,aAAa;QACb,KAAK,OAAO,iCAAiC;QAC7C,WAAW,OAAO,0DAA0D;QAC5E,4BAA4B,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;QACzD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,CAAC;QACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,2BAA2B,OAAO,+BAA+B,CAAC,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,OAAO,kBAAkB,CAAC,CAAC;QACtE,CAAC,CAAC,GAAG,CAAC,IAAI,CACR,2CAA2C,OAAO,sDAAsD,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,uBAAuB,OAAO,EAAE,CACpK,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,OAAO,EAAE,yEAAyE,CAAC;SAC5F,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,EAAE,QAAQ,CAAC;SAC7F,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,GAAY,EAAE,IAA0B,EAAE,EAAE;QACzD,IAAI,WAA+B,CAAC;QAEpC,IAAI,GAAG,EAAE,CAAC;YACR,iFAAiF;YACjF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;oBAC/C,WAAW,GAAG,UAAU,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAErC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;YACtF,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oDAAoD,WAAW,GAAG,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,QAAQ,CAAW,CAAC;QACpD,MAAM,YAAY,GAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC;QAE7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,MAAM,WAAW,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBAC9B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,4DAA4D,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACvF,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,GAAG,CAAC,IAAI,CACR,+EAA+E,CAChF,CAAC;gBACF,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACjE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAChE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC9C,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;QAED,gCAAgC;QAChC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAE5C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,qCAAqC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Vault CLI — export vault entries as browsable markdown files.
3
+ *
4
+ * `soleri vault export` — export to ./knowledge/vault/
5
+ * `soleri vault export --path ~/obsidian` — export to custom directory
6
+ * `soleri vault export --domain arch` — filter by domain
7
+ */
8
+ import type { Command } from 'commander';
9
+ export declare function registerVault(program: Command): void;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Vault CLI — export vault entries as browsable markdown files.
3
+ *
4
+ * `soleri vault export` — export to ./knowledge/vault/
5
+ * `soleri vault export --path ~/obsidian` — export to custom directory
6
+ * `soleri vault export --domain arch` — filter by domain
7
+ */
8
+ import { resolve } from 'node:path';
9
+ import { existsSync } from 'node:fs';
10
+ import { join } from 'node:path';
11
+ import { detectAgent } from '../utils/agent-context.js';
12
+ import * as log from '../utils/logger.js';
13
+ import { SOLERI_HOME } from '@soleri/core';
14
+ export function registerVault(program) {
15
+ const vault = program.command('vault').description('Vault knowledge management');
16
+ vault
17
+ .command('export')
18
+ .description('Export vault entries as browsable markdown files')
19
+ .option('--path <dir>', 'Output directory (default: ./knowledge/)')
20
+ .option('--domain <name>', 'Filter by domain')
21
+ .action(async (opts) => {
22
+ const agent = detectAgent();
23
+ if (!agent) {
24
+ log.fail('Not in a Soleri agent project', 'Run from an agent directory');
25
+ process.exit(1);
26
+ }
27
+ const outputDir = opts.path ? resolve(opts.path) : resolve('knowledge');
28
+ // Find vault DB — check new path first, then legacy
29
+ const newDbPath = join(SOLERI_HOME, agent.agentId, 'vault.db');
30
+ const legacyDbPath = join(SOLERI_HOME, '..', `.${agent.agentId}`, 'vault.db');
31
+ const vaultDbPath = existsSync(newDbPath)
32
+ ? newDbPath
33
+ : existsSync(legacyDbPath)
34
+ ? legacyDbPath
35
+ : null;
36
+ if (!vaultDbPath) {
37
+ log.fail('Vault DB not found', 'Run the agent once to initialize its vault database.');
38
+ process.exit(1);
39
+ }
40
+ // Dynamic import to avoid loading better-sqlite3 unless needed
41
+ const { Vault } = await import('@soleri/core');
42
+ const vaultInstance = new Vault(vaultDbPath);
43
+ try {
44
+ log.heading('Vault Export');
45
+ if (opts.domain) {
46
+ const { syncEntryToMarkdown } = await import('@soleri/core');
47
+ const entries = vaultInstance.list({ limit: 10000, domain: opts.domain });
48
+ let synced = 0;
49
+ for (const entry of entries) {
50
+ await syncEntryToMarkdown(entry, outputDir);
51
+ synced++;
52
+ }
53
+ log.pass(`Exported ${synced} entries from domain "${opts.domain}"`, `${outputDir}/vault/`);
54
+ }
55
+ else {
56
+ const { syncAllToMarkdown } = await import('@soleri/core');
57
+ const result = await syncAllToMarkdown(vaultInstance, outputDir);
58
+ log.pass(`Exported ${result.synced} entries (${result.skipped} unchanged)`, `${outputDir}/vault/`);
59
+ }
60
+ }
61
+ finally {
62
+ vaultInstance.close();
63
+ }
64
+ });
65
+ }
66
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/commands/vault.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -1,4 +1,9 @@
1
1
  #!/usr/bin/env node
2
+ const [major] = process.versions.node.split('.').map(Number);
3
+ if (major < 18) {
4
+ console.error(`\n Soleri requires Node.js 18 or later.\n You have v${process.versions.node}.\n Upgrade at https://nodejs.org\n`);
5
+ process.exit(1);
6
+ }
2
7
  import { createRequire } from 'node:module';
3
8
  import { Command } from 'commander';
4
9
  import { registerCreate } from './commands/create.js';
@@ -20,6 +25,7 @@ import { registerSkills } from './commands/skills.js';
20
25
  import { registerAgent } from './commands/agent.js';
21
26
  import { registerTelegram } from './commands/telegram.js';
22
27
  import { registerStaging } from './commands/staging.js';
28
+ import { registerVault } from './commands/vault.js';
23
29
  import { registerYolo } from './commands/yolo.js';
24
30
  const require = createRequire(import.meta.url);
25
31
  const { version } = require('../package.json');
@@ -76,6 +82,7 @@ registerSkills(program);
76
82
  registerAgent(program);
77
83
  registerTelegram(program);
78
84
  registerStaging(program);
85
+ registerVault(program);
79
86
  registerYolo(program);
80
87
  program.parse();
81
88
  //# 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":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soleri/cli",
3
- "version": "9.8.0",
3
+ "version": "9.9.0",
4
4
  "description": "Developer CLI for creating and managing Soleri AI agents.",
5
5
  "keywords": [
6
6
  "agent",
@@ -0,0 +1,88 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { mkdirSync, rmSync, writeFileSync, readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { tmpdir } from 'node:os';
5
+ import { toPosix } from '../commands/install.js';
6
+
7
+ // Mock @clack/prompts to suppress console output during tests
8
+ vi.mock('@clack/prompts', () => ({
9
+ log: {
10
+ success: vi.fn(),
11
+ error: vi.fn(),
12
+ warn: vi.fn(),
13
+ info: vi.fn(),
14
+ },
15
+ }));
16
+
17
+ describe('toPosix', () => {
18
+ it('converts backslashes to forward slashes', () => {
19
+ expect(toPosix('C:\\Users\\foo\\agent.yaml')).toBe('C:/Users/foo/agent.yaml');
20
+ });
21
+
22
+ it('leaves forward slashes unchanged', () => {
23
+ expect(toPosix('/home/user/agent.yaml')).toBe('/home/user/agent.yaml');
24
+ });
25
+
26
+ it('handles mixed separators', () => {
27
+ expect(toPosix('C:\\Users/foo\\bar/agent.yaml')).toBe('C:/Users/foo/bar/agent.yaml');
28
+ });
29
+
30
+ it('handles empty string', () => {
31
+ expect(toPosix('')).toBe('');
32
+ });
33
+ });
34
+
35
+ describe('installClaude path normalization', () => {
36
+ let tempDir: string;
37
+ let originalHome: string;
38
+
39
+ beforeEach(() => {
40
+ tempDir = join(tmpdir(), `cli-install-test-${Date.now()}`);
41
+ mkdirSync(tempDir, { recursive: true });
42
+ originalHome = process.env.HOME ?? '';
43
+ // Point homedir() to our temp dir so ~/.claude.json lands there
44
+ process.env.HOME = tempDir;
45
+ // Windows uses USERPROFILE instead of HOME
46
+ process.env.USERPROFILE = tempDir;
47
+ });
48
+
49
+ afterEach(() => {
50
+ process.env.HOME = originalHome;
51
+ if (originalHome) process.env.USERPROFILE = originalHome;
52
+ rmSync(tempDir, { recursive: true, force: true });
53
+ });
54
+
55
+ it('should not contain backslashes in written config paths (file-tree agent)', async () => {
56
+ // Dynamic import to pick up the mocked homedir
57
+ const { installClaude } = await import('../commands/install.js');
58
+
59
+ // Simulate a Windows-style path
60
+ const fakeAgentDir = 'C:\\Users\\testuser\\my-agent';
61
+ installClaude('test-agent', fakeAgentDir, true);
62
+
63
+ const configPath = join(tempDir, '.claude.json');
64
+ const raw = readFileSync(configPath, 'utf-8');
65
+
66
+ // The raw JSON should not contain any backslash-based paths
67
+ // (backslashes in JSON would appear as \\ in the raw string)
68
+ const config = JSON.parse(raw);
69
+ const entry = config.mcpServers['test-agent'];
70
+ for (const arg of entry.args as string[]) {
71
+ expect(arg).not.toContain('\\');
72
+ }
73
+ });
74
+
75
+ it('should not contain backslashes in written config paths (legacy agent)', async () => {
76
+ const { installClaude } = await import('../commands/install.js');
77
+
78
+ const fakeAgentDir = 'C:\\Users\\testuser\\my-agent';
79
+ installClaude('test-agent', fakeAgentDir, false);
80
+
81
+ const configPath = join(tempDir, '.claude.json');
82
+ const config = JSON.parse(readFileSync(configPath, 'utf-8'));
83
+ const entry = config.mcpServers['test-agent'];
84
+ for (const arg of entry.args as string[]) {
85
+ expect(arg).not.toContain('\\');
86
+ }
87
+ });
88
+ });
@@ -53,6 +53,10 @@ describe('scaffold + git init (E2E)', () => {
53
53
  const initResult = await gitInit(agentDir);
54
54
  expect(initResult.ok).toBe(true);
55
55
 
56
+ // Ensure git config is set (CI runners may not have global user.name/user.email)
57
+ gitCommand(agentDir, 'config', 'user.name', 'Test');
58
+ gitCommand(agentDir, 'config', 'user.email', 'test@test.local');
59
+
56
60
  const commitResult = await gitInitialCommit(agentDir, 'feat: scaffold agent "test-agent"');
57
61
  expect(commitResult.ok).toBe(true);
58
62
 
@@ -80,6 +84,9 @@ describe('scaffold + git init (E2E)', () => {
80
84
  const agentDir = result.agentDir;
81
85
 
82
86
  await gitInit(agentDir);
87
+ // Ensure git config is set (CI runners may not have global user.name/user.email)
88
+ gitCommand(agentDir, 'config', 'user.name', 'Test');
89
+ gitCommand(agentDir, 'config', 'user.email', 'test@test.local');
83
90
  await gitInitialCommit(agentDir, 'feat: scaffold agent "test-agent"');
84
91
 
85
92
  const trackedFiles = gitCommand(agentDir, 'ls-files');
@@ -1,4 +1,4 @@
1
- import { readFileSync, existsSync } from 'node:fs';
1
+ import { accessSync, constants as fsConstants, readFileSync, existsSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
3
  import type { Command } from 'commander';
4
4
  import * as p from '@clack/prompts';
@@ -97,7 +97,16 @@ export function registerCreate(program: Command): void {
97
97
  p.log.error(`Config file not found: ${configPath}`);
98
98
  process.exit(1);
99
99
  }
100
- const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
100
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
101
+ let raw: any;
102
+ try {
103
+ raw = JSON.parse(readFileSync(configPath, 'utf-8'));
104
+ } catch {
105
+ p.log.error(
106
+ `Failed to parse ${configPath}. The file may be corrupted. Delete it and try again.`,
107
+ );
108
+ process.exit(1);
109
+ }
101
110
  const parsed = AgentConfigSchema.safeParse(raw);
102
111
  if (!parsed.success) {
103
112
  p.log.error(`Invalid config: ${parsed.error.message}`);
@@ -175,6 +184,15 @@ export function registerCreate(program: Command): void {
175
184
  };
176
185
 
177
186
  const outputDir = opts?.dir ? resolve(opts.dir) : (config.outputDir ?? process.cwd());
187
+
188
+ // Preflight: check output directory is writable
189
+ try {
190
+ accessSync(outputDir, fsConstants.W_OK);
191
+ } catch {
192
+ p.log.error(`Cannot write to ${outputDir} — check permissions`);
193
+ process.exit(1);
194
+ }
195
+
178
196
  const nonInteractive = !!(opts?.yes || opts?.config);
179
197
 
180
198
  if (!nonInteractive) {
@@ -35,7 +35,14 @@ function runFileTreeDev(agentPath: string, agentId: string): void {
35
35
  regenerateClaudeMd(agentPath);
36
36
 
37
37
  // Start the engine server
38
- const engineBin = require.resolve('@soleri/core/dist/engine/bin/soleri-engine.js');
38
+ let engineBin: string;
39
+ try {
40
+ engineBin = require.resolve('@soleri/core/dist/engine/bin/soleri-engine.js');
41
+ } catch {
42
+ p.log.error('Engine not found. Run: npm install @soleri/core');
43
+ process.exit(1);
44
+ }
45
+
39
46
  const engine = spawn('node', [engineBin, '--agent', join(agentPath, 'agent.yaml')], {
40
47
  stdio: ['pipe', 'inherit', 'inherit'],
41
48
  env: { ...process.env },
@@ -72,8 +79,11 @@ function runFileTreeDev(agentPath: string, agentId: string): void {
72
79
  regenerateClaudeMd(agentPath);
73
80
  }, 200);
74
81
  });
75
- } catch {
76
- // Directory may not exist yet that's OK
82
+ } catch (err: unknown) {
83
+ const msg = err instanceof Error ? err.message : String(err);
84
+ if (!msg.includes('ENOENT')) {
85
+ p.log.warn(`File watch stopped: ${msg}. Restart soleri dev if changes stop updating.`);
86
+ }
77
87
  }
78
88
  }
79
89
 
@@ -1,7 +1,14 @@
1
1
  import type { Command } from 'commander';
2
2
  import { createRequire } from 'node:module';
3
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
4
- import { join, resolve } from 'node:path';
3
+ import {
4
+ accessSync,
5
+ constants as fsConstants,
6
+ existsSync,
7
+ readFileSync,
8
+ writeFileSync,
9
+ mkdirSync,
10
+ } from 'node:fs';
11
+ import { dirname, join, resolve } from 'node:path';
5
12
  import { homedir } from 'node:os';
6
13
  import * as p from '@clack/prompts';
7
14
  import { detectAgent } from '../utils/agent-context.js';
@@ -11,6 +18,9 @@ const SOLERI_HOME = process.env.SOLERI_HOME ?? join(homedir(), '.soleri');
11
18
 
12
19
  type Target = 'claude' | 'codex' | 'opencode' | 'both' | 'all';
13
20
 
21
+ /** Normalize a file path to forward slashes (POSIX) for cross-platform config files. */
22
+ export const toPosix = (p: string): string => p.replace(/\\/g, '/');
23
+
14
24
  /**
15
25
  * Resolve the absolute path to the soleri-engine binary.
16
26
  * Falls back to `npx @soleri/engine` if resolution fails (e.g. not installed globally).
@@ -28,17 +38,18 @@ function resolveEngineBin(): { command: string; bin: string } {
28
38
  /** MCP server entry for file-tree agents (resolved engine path, no npx) */
29
39
  function fileTreeMcpEntry(agentDir: string): Record<string, unknown> {
30
40
  const engine = resolveEngineBin();
41
+ const agentYaml = toPosix(join(agentDir, 'agent.yaml'));
31
42
  if (engine.command === 'node') {
32
43
  return {
33
44
  type: 'stdio',
34
45
  command: 'node',
35
- args: [engine.bin, '--agent', join(agentDir, 'agent.yaml')],
46
+ args: [toPosix(engine.bin), '--agent', agentYaml],
36
47
  };
37
48
  }
38
49
  return {
39
50
  type: 'stdio',
40
51
  command: 'npx',
41
- args: ['@soleri/engine', '--agent', join(agentDir, 'agent.yaml')],
52
+ args: ['@soleri/engine', '--agent', agentYaml],
42
53
  };
43
54
  }
44
55
 
@@ -47,13 +58,36 @@ function legacyMcpEntry(agentDir: string): Record<string, unknown> {
47
58
  return {
48
59
  type: 'stdio',
49
60
  command: 'node',
50
- args: [join(agentDir, 'dist', 'index.js')],
61
+ args: [toPosix(join(agentDir, 'dist', 'index.js'))],
51
62
  env: {},
52
63
  };
53
64
  }
54
65
 
66
+ /**
67
+ * Check if a file path is writable. If the file exists, checks write permission on the file.
68
+ * If the file does not exist, checks write permission on the parent directory.
69
+ */
70
+ function checkWritable(filePath: string): boolean {
71
+ try {
72
+ if (existsSync(filePath)) {
73
+ accessSync(filePath, fsConstants.W_OK);
74
+ } else {
75
+ accessSync(dirname(filePath), fsConstants.W_OK);
76
+ }
77
+ return true;
78
+ } catch {
79
+ return false;
80
+ }
81
+ }
82
+
55
83
  export function installClaude(agentId: string, agentDir: string, isFileTree: boolean): void {
56
84
  const configPath = join(homedir(), '.claude.json');
85
+
86
+ if (!checkWritable(configPath)) {
87
+ p.log.error(`Cannot write to ${configPath} — check file permissions`);
88
+ process.exit(1);
89
+ }
90
+
57
91
  let config: Record<string, unknown> = {};
58
92
 
59
93
  if (existsSync(configPath)) {
@@ -73,7 +107,12 @@ export function installClaude(agentId: string, agentDir: string, isFileTree: boo
73
107
  ? fileTreeMcpEntry(agentDir)
74
108
  : legacyMcpEntry(agentDir);
75
109
 
76
- writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
110
+ try {
111
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
112
+ } catch {
113
+ p.log.error(`Cannot write to ${configPath}. Check file permissions.`);
114
+ process.exit(1);
115
+ }
77
116
  p.log.success(`Registered ${agentId} in ~/.claude.json`);
78
117
  }
79
118
 
@@ -82,7 +121,12 @@ function installCodex(agentId: string, agentDir: string, isFileTree: boolean): v
82
121
  const configPath = join(codexDir, 'config.toml');
83
122
 
84
123
  if (!existsSync(codexDir)) {
85
- mkdirSync(codexDir, { recursive: true });
124
+ try {
125
+ mkdirSync(codexDir, { recursive: true });
126
+ } catch {
127
+ p.log.error(`Cannot create directory ${codexDir}. Check permissions.`);
128
+ process.exit(1);
129
+ }
86
130
  }
87
131
 
88
132
  let content = '';
@@ -97,21 +141,27 @@ function installCodex(agentId: string, agentDir: string, isFileTree: boolean): v
97
141
 
98
142
  let section: string;
99
143
  if (isFileTree) {
100
- const agentYamlPath = join(agentDir, 'agent.yaml');
144
+ const agentYamlPath = toPosix(join(agentDir, 'agent.yaml'));
101
145
  const engine = resolveEngineBin();
102
146
  if (engine.command === 'node') {
103
- section = `\n\n${sectionHeader}\ncommand = "node"\nargs = ["${engine.bin}", "--agent", "${agentYamlPath}"]\n`;
147
+ const bin = toPosix(engine.bin);
148
+ section = `\n\n${sectionHeader}\ncommand = "node"\nargs = ["${bin}", "--agent", "${agentYamlPath}"]\n`;
104
149
  } else {
105
150
  section = `\n\n${sectionHeader}\ncommand = "npx"\nargs = ["@soleri/engine", "--agent", "${agentYamlPath}"]\n`;
106
151
  }
107
152
  } else {
108
- const entryPoint = join(agentDir, 'dist', 'index.js');
153
+ const entryPoint = toPosix(join(agentDir, 'dist', 'index.js'));
109
154
  section = `\n\n${sectionHeader}\ncommand = "node"\nargs = ["${entryPoint}"]\n`;
110
155
  }
111
156
 
112
157
  content = content + section;
113
158
 
114
- writeFileSync(configPath, content.trim() + '\n', 'utf-8');
159
+ try {
160
+ writeFileSync(configPath, content.trim() + '\n', 'utf-8');
161
+ } catch {
162
+ p.log.error(`Cannot write to ${configPath}. Check file permissions.`);
163
+ process.exit(1);
164
+ }
115
165
  p.log.success(`Registered ${agentId} in ~/.codex/config.toml`);
116
166
  }
117
167
 
@@ -122,7 +172,12 @@ function installOpencode(agentId: string, agentDir: string, isFileTree: boolean)
122
172
  const configPath = join(configDir, 'opencode.json');
123
173
 
124
174
  if (!existsSync(configDir)) {
125
- mkdirSync(configDir, { recursive: true });
175
+ try {
176
+ mkdirSync(configDir, { recursive: true });
177
+ } catch {
178
+ p.log.error(`Cannot create directory ${configDir}. Check permissions.`);
179
+ process.exit(1);
180
+ }
126
181
  }
127
182
 
128
183
  let config: Record<string, unknown> = {};
@@ -132,7 +187,10 @@ function installOpencode(agentId: string, agentDir: string, isFileTree: boolean)
132
187
  const stripped = raw.replace(/^\s*\/\/.*$/gm, '');
133
188
  config = JSON.parse(stripped);
134
189
  } catch {
135
- config = {};
190
+ p.log.error(
191
+ `Failed to parse ${configPath}. The file may be corrupted. Delete it and try again.`,
192
+ );
193
+ process.exit(1);
136
194
  }
137
195
  }
138
196
 
@@ -143,21 +201,27 @@ function installOpencode(agentId: string, agentDir: string, isFileTree: boolean)
143
201
  const servers = config.mcp as Record<string, unknown>;
144
202
  if (isFileTree) {
145
203
  const engine = resolveEngineBin();
204
+ const agentYaml = toPosix(join(agentDir, 'agent.yaml'));
146
205
  servers[agentId] = {
147
206
  type: 'local',
148
207
  command:
149
208
  engine.command === 'node'
150
- ? ['node', engine.bin, '--agent', join(agentDir, 'agent.yaml')]
151
- : ['npx', '-y', '@soleri/engine', '--agent', join(agentDir, 'agent.yaml')],
209
+ ? ['node', toPosix(engine.bin), '--agent', agentYaml]
210
+ : ['npx', '-y', '@soleri/engine', '--agent', agentYaml],
152
211
  };
153
212
  } else {
154
213
  servers[agentId] = {
155
214
  type: 'local',
156
- command: ['node', join(agentDir, 'dist', 'index.js')],
215
+ command: ['node', toPosix(join(agentDir, 'dist', 'index.js'))],
157
216
  };
158
217
  }
159
218
 
160
- writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
219
+ try {
220
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
221
+ } catch {
222
+ p.log.error(`Cannot write to ${configPath}. Check file permissions.`);
223
+ process.exit(1);
224
+ }
161
225
  p.log.success(`Registered ${agentId} in ~/.config/opencode/opencode.json`);
162
226
  }
163
227
 
@@ -172,7 +236,10 @@ function escapeRegExp(s: string): string {
172
236
  function installLauncher(agentId: string, agentDir: string): void {
173
237
  // Launcher scripts to /usr/local/bin are Unix-only
174
238
  if (process.platform === 'win32') {
175
- p.log.info('Launcher scripts are not supported on Windows — skipping');
239
+ p.log.info('Launcher scripts are not supported on Windows.');
240
+ p.log.info(
241
+ `On Windows, run your agent with: npx @soleri/cli dev --agent "${toPosix(agentDir)}"`,
242
+ );
176
243
  return;
177
244
  }
178
245
 
@@ -182,7 +249,7 @@ function installLauncher(agentId: string, agentDir: string): void {
182
249
  '#!/bin/bash',
183
250
  `# ${agentId} — Soleri second brain launcher`,
184
251
  `# Type "${agentId}" from any directory to open Claude Code with this agent`,
185
- `exec claude --mcp-config ${join(agentDir, '.mcp.json')}`,
252
+ `exec claude --mcp-config ${toPosix(join(agentDir, '.mcp.json'))}`,
186
253
  '',
187
254
  ].join('\n');
188
255
 
@@ -192,7 +259,7 @@ function installLauncher(agentId: string, agentDir: string): void {
192
259
  } catch {
193
260
  p.log.warn(`Could not create launcher at ${binPath} (may need sudo)`);
194
261
  p.log.info(
195
- `To create manually: sudo bash -c 'cat > ${binPath} << "EOF"\\n#!/bin/bash\\nexec claude --mcp-config ${join(agentDir, '.mcp.json')}\\nEOF' && chmod +x ${binPath}`,
262
+ `To create manually: sudo bash -c 'cat > ${binPath} << "EOF"\\n#!/bin/bash\\nexec claude --mcp-config ${toPosix(join(agentDir, '.mcp.json'))}\\nEOF' && chmod +x ${binPath}`,
196
263
  );
197
264
  }
198
265
  }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Vault CLI — export vault entries as browsable markdown files.
3
+ *
4
+ * `soleri vault export` — export to ./knowledge/vault/
5
+ * `soleri vault export --path ~/obsidian` — export to custom directory
6
+ * `soleri vault export --domain arch` — filter by domain
7
+ */
8
+
9
+ import { resolve } from 'node:path';
10
+ import { existsSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import type { Command } from 'commander';
13
+ import { detectAgent } from '../utils/agent-context.js';
14
+ import * as log from '../utils/logger.js';
15
+ import { SOLERI_HOME } from '@soleri/core';
16
+
17
+ export function registerVault(program: Command): void {
18
+ const vault = program.command('vault').description('Vault knowledge management');
19
+
20
+ vault
21
+ .command('export')
22
+ .description('Export vault entries as browsable markdown files')
23
+ .option('--path <dir>', 'Output directory (default: ./knowledge/)')
24
+ .option('--domain <name>', 'Filter by domain')
25
+ .action(async (opts: { path?: string; domain?: string }) => {
26
+ const agent = detectAgent();
27
+ if (!agent) {
28
+ log.fail('Not in a Soleri agent project', 'Run from an agent directory');
29
+ process.exit(1);
30
+ }
31
+
32
+ const outputDir = opts.path ? resolve(opts.path) : resolve('knowledge');
33
+
34
+ // Find vault DB — check new path first, then legacy
35
+ const newDbPath = join(SOLERI_HOME, agent.agentId, 'vault.db');
36
+ const legacyDbPath = join(SOLERI_HOME, '..', `.${agent.agentId}`, 'vault.db');
37
+ const vaultDbPath = existsSync(newDbPath)
38
+ ? newDbPath
39
+ : existsSync(legacyDbPath)
40
+ ? legacyDbPath
41
+ : null;
42
+
43
+ if (!vaultDbPath) {
44
+ log.fail('Vault DB not found', 'Run the agent once to initialize its vault database.');
45
+ process.exit(1);
46
+ }
47
+
48
+ // Dynamic import to avoid loading better-sqlite3 unless needed
49
+ const { Vault } = await import('@soleri/core');
50
+ const vaultInstance = new Vault(vaultDbPath);
51
+
52
+ try {
53
+ log.heading('Vault Export');
54
+
55
+ if (opts.domain) {
56
+ const { syncEntryToMarkdown } = await import('@soleri/core');
57
+ const entries = vaultInstance.list({ limit: 10000, domain: opts.domain });
58
+ let synced = 0;
59
+ for (const entry of entries) {
60
+ await syncEntryToMarkdown(entry, outputDir);
61
+ synced++;
62
+ }
63
+ log.pass(
64
+ `Exported ${synced} entries from domain "${opts.domain}"`,
65
+ `${outputDir}/vault/`,
66
+ );
67
+ } else {
68
+ const { syncAllToMarkdown } = await import('@soleri/core');
69
+ const result = await syncAllToMarkdown(vaultInstance, outputDir);
70
+ log.pass(
71
+ `Exported ${result.synced} entries (${result.skipped} unchanged)`,
72
+ `${outputDir}/vault/`,
73
+ );
74
+ }
75
+ } finally {
76
+ vaultInstance.close();
77
+ }
78
+ });
79
+ }
package/src/main.ts CHANGED
@@ -1,5 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ const [major] = process.versions.node.split('.').map(Number);
4
+ if (major < 18) {
5
+ console.error(
6
+ `\n Soleri requires Node.js 18 or later.\n You have v${process.versions.node}.\n Upgrade at https://nodejs.org\n`,
7
+ );
8
+ process.exit(1);
9
+ }
10
+
3
11
  import { createRequire } from 'node:module';
4
12
  import { Command } from 'commander';
5
13
  import { registerCreate } from './commands/create.js';
@@ -21,6 +29,7 @@ import { registerSkills } from './commands/skills.js';
21
29
  import { registerAgent } from './commands/agent.js';
22
30
  import { registerTelegram } from './commands/telegram.js';
23
31
  import { registerStaging } from './commands/staging.js';
32
+ import { registerVault } from './commands/vault.js';
24
33
  import { registerYolo } from './commands/yolo.js';
25
34
 
26
35
  const require = createRequire(import.meta.url);
@@ -83,5 +92,6 @@ registerSkills(program);
83
92
  registerAgent(program);
84
93
  registerTelegram(program);
85
94
  registerStaging(program);
95
+ registerVault(program);
86
96
  registerYolo(program);
87
97
  program.parse();
@@ -1,41 +0,0 @@
1
- /**
2
- * Format-aware path resolution for filetree vs typescript agents.
3
- */
4
- import { join } from 'node:path';
5
-
6
- export interface FormatPaths {
7
- knowledgeDir: string;
8
- extensionsDir: string;
9
- facadesDir: string;
10
- agentConfigFile: string;
11
- entryPoint: string;
12
- }
13
-
14
- export function getFormatPaths(ctx: {
15
- format: 'filetree' | 'typescript';
16
- agentPath: string;
17
- }): FormatPaths {
18
- const { format, agentPath } = ctx;
19
-
20
- if (format === 'filetree') {
21
- return {
22
- knowledgeDir: join(agentPath, 'knowledge'),
23
- extensionsDir: join(agentPath, 'extensions'),
24
- facadesDir: '',
25
- agentConfigFile: join(agentPath, 'agent.yaml'),
26
- entryPoint: join(agentPath, 'agent.yaml'),
27
- };
28
- }
29
-
30
- return {
31
- knowledgeDir: join(agentPath, 'src', 'intelligence', 'data'),
32
- extensionsDir: join(agentPath, 'src', 'extensions'),
33
- facadesDir: join(agentPath, 'src', 'facades'),
34
- agentConfigFile: join(agentPath, 'package.json'),
35
- entryPoint: join(agentPath, 'src', 'index.ts'),
36
- };
37
- }
38
-
39
- export function isFileTree(ctx: { format: string }): boolean {
40
- return ctx.format === 'filetree';
41
- }