@soleri/cli 1.12.5 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/add-pack.d.ts +2 -0
- package/dist/commands/add-pack.js +154 -0
- package/dist/commands/add-pack.js.map +1 -0
- package/dist/commands/agent.js +151 -2
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/cognee.d.ts +10 -0
- package/dist/commands/cognee.js +364 -0
- package/dist/commands/cognee.js.map +1 -0
- package/dist/commands/create.js +63 -5
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/dev.js +104 -17
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/install.js +70 -18
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/telegram.d.ts +10 -0
- package/dist/commands/telegram.js +423 -0
- package/dist/commands/telegram.js.map +1 -0
- package/dist/commands/uninstall.js +35 -6
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/main.js +6 -0
- package/dist/main.js.map +1 -1
- package/dist/prompts/create-wizard.js +87 -6
- package/dist/prompts/create-wizard.js.map +1 -1
- package/dist/utils/agent-context.d.ts +9 -2
- package/dist/utils/agent-context.js +32 -0
- package/dist/utils/agent-context.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/add-pack.ts +170 -0
- package/src/commands/agent.ts +174 -3
- package/src/commands/cognee.ts +416 -0
- package/src/commands/create.ts +90 -6
- package/src/commands/dev.ts +114 -18
- package/src/commands/install.ts +78 -19
- package/src/commands/telegram.ts +488 -0
- package/src/commands/uninstall.ts +41 -7
- package/src/main.ts +6 -0
- package/src/prompts/create-wizard.ts +93 -7
- package/src/utils/agent-context.ts +39 -2
package/dist/commands/dev.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
+
import { watch, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
2
4
|
import * as p from '@clack/prompts';
|
|
3
5
|
import { detectAgent } from '../utils/agent-context.js';
|
|
4
6
|
export function registerDev(program) {
|
|
@@ -11,24 +13,109 @@ export function registerDev(program) {
|
|
|
11
13
|
p.log.error('No agent project detected in current directory. Run this from an agent root.');
|
|
12
14
|
process.exit(1);
|
|
13
15
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
if (ctx.format === 'filetree') {
|
|
17
|
+
// v7: File-tree agent — watch files and regenerate CLAUDE.md
|
|
18
|
+
runFileTreeDev(ctx.agentPath, ctx.agentId);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
// Legacy: TypeScript agent — run via tsx
|
|
22
|
+
runLegacyDev(ctx.agentPath, ctx.agentId);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function runFileTreeDev(agentPath, agentId) {
|
|
27
|
+
p.log.info(`Starting ${agentId} in file-tree dev mode...`);
|
|
28
|
+
p.log.info('Starting Knowledge Engine + watching for file changes.');
|
|
29
|
+
p.log.info('CLAUDE.md will be regenerated automatically on changes.');
|
|
30
|
+
p.log.info('Press Ctrl+C to stop.\n');
|
|
31
|
+
regenerateClaudeMd(agentPath);
|
|
32
|
+
// Start the engine server
|
|
33
|
+
const engineBin = require.resolve('@soleri/core/dist/engine/bin/soleri-engine.js');
|
|
34
|
+
const engine = spawn('node', [engineBin, '--agent', join(agentPath, 'agent.yaml')], {
|
|
35
|
+
stdio: ['pipe', 'inherit', 'inherit'],
|
|
36
|
+
env: { ...process.env },
|
|
37
|
+
});
|
|
38
|
+
engine.on('error', (err) => {
|
|
39
|
+
p.log.error(`Engine failed to start: ${err.message}`);
|
|
40
|
+
p.log.info('Make sure @soleri/core is built: cd packages/core && npm run build');
|
|
41
|
+
});
|
|
42
|
+
// Watch directories for changes
|
|
43
|
+
const watchPaths = [
|
|
44
|
+
join(agentPath, 'agent.yaml'),
|
|
45
|
+
join(agentPath, 'instructions'),
|
|
46
|
+
join(agentPath, 'workflows'),
|
|
47
|
+
join(agentPath, 'skills'),
|
|
48
|
+
];
|
|
49
|
+
let debounceTimer = null;
|
|
50
|
+
for (const watchPath of watchPaths) {
|
|
51
|
+
try {
|
|
52
|
+
watch(watchPath, { recursive: true }, (_event, filename) => {
|
|
53
|
+
// Ignore CLAUDE.md changes (we generate it)
|
|
54
|
+
if (filename === 'CLAUDE.md' || filename === 'AGENTS.md')
|
|
55
|
+
return;
|
|
56
|
+
// Ignore _engine.md changes (we generate it)
|
|
57
|
+
if (filename === '_engine.md')
|
|
58
|
+
return;
|
|
59
|
+
// Debounce — regenerate at most once per 200ms
|
|
60
|
+
if (debounceTimer)
|
|
61
|
+
clearTimeout(debounceTimer);
|
|
62
|
+
debounceTimer = setTimeout(() => {
|
|
63
|
+
const changedFile = filename ? ` (${filename})` : '';
|
|
64
|
+
p.log.info(`Change detected${changedFile} — regenerating CLAUDE.md`);
|
|
65
|
+
regenerateClaudeMd(agentPath);
|
|
66
|
+
}, 200);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Directory may not exist yet — that's OK
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Graceful shutdown — kill engine too
|
|
74
|
+
const shutdown = () => {
|
|
75
|
+
p.log.info('\nStopping dev mode...');
|
|
76
|
+
engine.kill();
|
|
77
|
+
process.exit(0);
|
|
78
|
+
};
|
|
79
|
+
process.on('SIGINT', shutdown);
|
|
80
|
+
process.on('SIGTERM', shutdown);
|
|
81
|
+
engine.on('exit', (code) => {
|
|
82
|
+
if (code !== 0 && code !== null) {
|
|
83
|
+
p.log.error(`Engine exited with code ${code}`);
|
|
23
84
|
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
});
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function regenerateClaudeMd(agentPath) {
|
|
89
|
+
try {
|
|
90
|
+
// Dynamic import to avoid loading forge at CLI startup
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
92
|
+
const { composeClaudeMd } = require('@soleri/forge/lib');
|
|
93
|
+
const { content } = composeClaudeMd(agentPath);
|
|
94
|
+
writeFileSync(join(agentPath, 'CLAUDE.md'), content, 'utf-8');
|
|
95
|
+
p.log.success('CLAUDE.md regenerated');
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
p.log.error(`Failed to regenerate CLAUDE.md: ${err instanceof Error ? err.message : String(err)}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function runLegacyDev(agentPath, agentId) {
|
|
102
|
+
p.log.info(`Starting ${agentId} in dev mode...`);
|
|
103
|
+
const child = spawn('npx', ['tsx', 'src/index.ts'], {
|
|
104
|
+
cwd: agentPath,
|
|
105
|
+
stdio: 'inherit',
|
|
106
|
+
env: { ...process.env },
|
|
107
|
+
});
|
|
108
|
+
child.on('error', (err) => {
|
|
109
|
+
p.log.error(`Failed to start: ${err.message}`);
|
|
110
|
+
p.log.info('Make sure tsx is available: npm install -g tsx');
|
|
111
|
+
process.exit(1);
|
|
112
|
+
});
|
|
113
|
+
child.on('exit', (code, signal) => {
|
|
114
|
+
if (signal) {
|
|
115
|
+
p.log.warn(`Process terminated by signal ${signal}`);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
process.exit(code ?? 0);
|
|
32
119
|
});
|
|
33
120
|
}
|
|
34
121
|
//# sourceMappingURL=dev.js.map
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC9B,6DAA6D;YAC7D,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB,EAAE,OAAe;IACxD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,2BAA2B,CAAC,CAAC;IAC3D,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACrE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAEtC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE9B,0BAA0B;IAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE;QAClF,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;QACrC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;KACxB,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;QAC7B,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;QAC/B,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QAC5B,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;KAC1B,CAAC;IAEF,IAAI,aAAa,GAAyC,IAAI,CAAC;IAE/D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;gBACzD,4CAA4C;gBAC5C,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW;oBAAE,OAAO;gBACjE,6CAA6C;gBAC7C,IAAI,QAAQ,KAAK,YAAY;oBAAE,OAAO;gBAEtC,+CAA+C;gBAC/C,IAAI,aAAa;oBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC/C,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,WAAW,2BAA2B,CAAC,CAAC;oBACrE,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC,EAAE,GAAG,CAAC,CAAC;YACV,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,IAAI,CAAC;QACH,uDAAuD;QACvD,iEAAiE;QACjE,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACzD,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAC/C,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,CAAC,CAAC,GAAG,CAAC,KAAK,CACT,mCAAmC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,OAAe;IACtD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,iBAAiB,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;QAClD,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;KACxB,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAChC,IAAI,MAAM,EAAE,CAAC;YACX,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/commands/install.js
CHANGED
|
@@ -3,7 +3,24 @@ import { join, resolve } from 'node:path';
|
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import * as p from '@clack/prompts';
|
|
5
5
|
import { detectAgent } from '../utils/agent-context.js';
|
|
6
|
-
|
|
6
|
+
/** MCP server entry for file-tree agents (uses npx @soleri/engine) */
|
|
7
|
+
function fileTreeMcpEntry(agentDir) {
|
|
8
|
+
return {
|
|
9
|
+
type: 'stdio',
|
|
10
|
+
command: 'npx',
|
|
11
|
+
args: ['@soleri/engine', '--agent', join(agentDir, 'agent.yaml')],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** MCP server entry for legacy TypeScript agents (uses node dist/index.js) */
|
|
15
|
+
function legacyMcpEntry(agentDir) {
|
|
16
|
+
return {
|
|
17
|
+
type: 'stdio',
|
|
18
|
+
command: 'node',
|
|
19
|
+
args: [join(agentDir, 'dist', 'index.js')],
|
|
20
|
+
env: {},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function installClaude(agentId, agentDir, isFileTree) {
|
|
7
24
|
const configPath = join(homedir(), '.claude.json');
|
|
8
25
|
let config = {};
|
|
9
26
|
if (existsSync(configPath)) {
|
|
@@ -18,16 +35,13 @@ function installClaude(agentId, agentDir) {
|
|
|
18
35
|
if (!config.mcpServers || typeof config.mcpServers !== 'object') {
|
|
19
36
|
config.mcpServers = {};
|
|
20
37
|
}
|
|
21
|
-
config.mcpServers[agentId] =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
args: [join(agentDir, 'dist', 'index.js')],
|
|
25
|
-
env: {},
|
|
26
|
-
};
|
|
38
|
+
config.mcpServers[agentId] = isFileTree
|
|
39
|
+
? fileTreeMcpEntry(agentDir)
|
|
40
|
+
: legacyMcpEntry(agentDir);
|
|
27
41
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
28
42
|
p.log.success(`Registered ${agentId} in ~/.claude.json`);
|
|
29
43
|
}
|
|
30
|
-
function installCodex(agentId, agentDir) {
|
|
44
|
+
function installCodex(agentId, agentDir, isFileTree) {
|
|
31
45
|
const codexDir = join(homedir(), '.codex');
|
|
32
46
|
const configPath = join(codexDir, 'config.toml');
|
|
33
47
|
if (!existsSync(codexDir)) {
|
|
@@ -41,12 +55,42 @@ function installCodex(agentId, agentDir) {
|
|
|
41
55
|
const sectionHeader = `[mcp_servers.${agentId}]`;
|
|
42
56
|
const sectionRegex = new RegExp(`\\[mcp_servers\\.${escapeRegExp(agentId)}\\][^\\[]*`, 's');
|
|
43
57
|
content = content.replace(sectionRegex, '').trim();
|
|
44
|
-
|
|
45
|
-
|
|
58
|
+
let section;
|
|
59
|
+
if (isFileTree) {
|
|
60
|
+
const agentYamlPath = join(agentDir, 'agent.yaml');
|
|
61
|
+
section = `\n\n${sectionHeader}\ncommand = "npx"\nargs = ["@soleri/engine", "--agent", "${agentYamlPath}"]\n`;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const entryPoint = join(agentDir, 'dist', 'index.js');
|
|
65
|
+
section = `\n\n${sectionHeader}\ncommand = "node"\nargs = ["${entryPoint}"]\n`;
|
|
66
|
+
}
|
|
46
67
|
content = content + section;
|
|
47
68
|
writeFileSync(configPath, content.trim() + '\n', 'utf-8');
|
|
48
69
|
p.log.success(`Registered ${agentId} in ~/.codex/config.toml`);
|
|
49
70
|
}
|
|
71
|
+
function installOpencode(agentId, agentDir, isFileTree) {
|
|
72
|
+
const configPath = join(homedir(), '.opencode.json');
|
|
73
|
+
let config = {};
|
|
74
|
+
if (existsSync(configPath)) {
|
|
75
|
+
try {
|
|
76
|
+
const raw = readFileSync(configPath, 'utf-8');
|
|
77
|
+
const stripped = raw.replace(/^\s*\/\/.*$/gm, '');
|
|
78
|
+
config = JSON.parse(stripped);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
config = {};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (!config.mcpServers || typeof config.mcpServers !== 'object') {
|
|
85
|
+
config.mcpServers = {};
|
|
86
|
+
}
|
|
87
|
+
const servers = config.mcpServers;
|
|
88
|
+
servers[agentId] = isFileTree
|
|
89
|
+
? fileTreeMcpEntry(agentDir)
|
|
90
|
+
: { type: 'stdio', command: 'node', args: [join(agentDir, 'dist', 'index.js')] };
|
|
91
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
92
|
+
p.log.success(`Registered ${agentId} in ~/.opencode.json`);
|
|
93
|
+
}
|
|
50
94
|
function escapeRegExp(s) {
|
|
51
95
|
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
52
96
|
}
|
|
@@ -54,7 +98,7 @@ export function registerInstall(program) {
|
|
|
54
98
|
program
|
|
55
99
|
.command('install')
|
|
56
100
|
.argument('[dir]', 'Agent directory (defaults to cwd)')
|
|
57
|
-
.option('--target <target>', 'Registration target: claude, codex, or
|
|
101
|
+
.option('--target <target>', 'Registration target: opencode, claude, codex, or all', 'opencode')
|
|
58
102
|
.description('Register agent as MCP server in editor config')
|
|
59
103
|
.action(async (dir, opts) => {
|
|
60
104
|
const resolvedDir = dir ? resolve(dir) : undefined;
|
|
@@ -63,16 +107,24 @@ export function registerInstall(program) {
|
|
|
63
107
|
p.log.error('Not in an agent project. Run from an agent directory or pass its path.');
|
|
64
108
|
process.exit(1);
|
|
65
109
|
}
|
|
66
|
-
const target = (opts?.target ?? '
|
|
67
|
-
|
|
68
|
-
|
|
110
|
+
const target = (opts?.target ?? 'opencode');
|
|
111
|
+
const validTargets = ['claude', 'codex', 'opencode', 'both', 'all'];
|
|
112
|
+
const isFileTree = ctx.format === 'filetree';
|
|
113
|
+
if (!validTargets.includes(target)) {
|
|
114
|
+
p.log.error(`Invalid target "${target}". Use: ${validTargets.join(', ')}`);
|
|
69
115
|
process.exit(1);
|
|
70
116
|
}
|
|
71
|
-
if (
|
|
72
|
-
|
|
117
|
+
if (isFileTree) {
|
|
118
|
+
p.log.info(`Detected file-tree agent (v7) — registering via @soleri/engine`);
|
|
119
|
+
}
|
|
120
|
+
if (target === 'claude' || target === 'both' || target === 'all') {
|
|
121
|
+
installClaude(ctx.agentId, ctx.agentPath, isFileTree);
|
|
122
|
+
}
|
|
123
|
+
if (target === 'codex' || target === 'both' || target === 'all') {
|
|
124
|
+
installCodex(ctx.agentId, ctx.agentPath, isFileTree);
|
|
73
125
|
}
|
|
74
|
-
if (target === '
|
|
75
|
-
|
|
126
|
+
if (target === 'opencode' || target === 'all') {
|
|
127
|
+
installOpencode(ctx.agentId, ctx.agentPath, isFileTree);
|
|
76
128
|
}
|
|
77
129
|
p.log.info(`Agent ${ctx.agentId} is now available as an MCP server.`);
|
|
78
130
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AACA,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;AAIxD,SAAS,aAAa,CAAC,OAAe,EAAE,QAAgB;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telegram transport management — enable, disable, setup, status.
|
|
3
|
+
*
|
|
4
|
+
* `soleri telegram enable` — Add Telegram files to the current agent
|
|
5
|
+
* `soleri telegram disable` — Remove Telegram files from the current agent
|
|
6
|
+
* `soleri telegram setup` — Interactive config wizard (bot token, API key, model)
|
|
7
|
+
* `soleri telegram status` — Check Telegram configuration status
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from 'commander';
|
|
10
|
+
export declare function registerTelegram(program: Command): void;
|