shennian 0.2.5 → 0.2.6
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/package.json +1 -1
- package/dist/bin/shennian.d.ts +0 -2
- package/dist/bin/shennian.js +0 -2
- package/dist/src/agents/adapter.d.ts +0 -35
- package/dist/src/agents/adapter.js +0 -19
- package/dist/src/agents/claude.d.ts +0 -25
- package/dist/src/agents/claude.js +0 -234
- package/dist/src/agents/codex.d.ts +0 -49
- package/dist/src/agents/codex.js +0 -794
- package/dist/src/agents/command-spec.d.ts +0 -36
- package/dist/src/agents/command-spec.js +0 -303
- package/dist/src/agents/cursor.d.ts +0 -22
- package/dist/src/agents/cursor.js +0 -248
- package/dist/src/agents/custom.d.ts +0 -30
- package/dist/src/agents/custom.js +0 -210
- package/dist/src/agents/detect.d.ts +0 -9
- package/dist/src/agents/detect.js +0 -46
- package/dist/src/agents/gemini.d.ts +0 -17
- package/dist/src/agents/gemini.js +0 -172
- package/dist/src/agents/model-registry/cache.d.ts +0 -4
- package/dist/src/agents/model-registry/cache.js +0 -37
- package/dist/src/agents/model-registry/discovery.d.ts +0 -4
- package/dist/src/agents/model-registry/discovery.js +0 -161
- package/dist/src/agents/model-registry/parsers.d.ts +0 -11
- package/dist/src/agents/model-registry/parsers.js +0 -349
- package/dist/src/agents/model-registry/runner.d.ts +0 -6
- package/dist/src/agents/model-registry/runner.js +0 -29
- package/dist/src/agents/model-registry/service.d.ts +0 -6
- package/dist/src/agents/model-registry/service.js +0 -71
- package/dist/src/agents/model-registry/types.d.ts +0 -30
- package/dist/src/agents/model-registry/types.js +0 -8
- package/dist/src/agents/model-registry.d.ts +0 -13
- package/dist/src/agents/model-registry.js +0 -15
- package/dist/src/agents/openclaw.d.ts +0 -20
- package/dist/src/agents/openclaw.js +0 -273
- package/dist/src/agents/pi.d.ts +0 -51
- package/dist/src/agents/pi.js +0 -793
- package/dist/src/commands/agent.d.ts +0 -2
- package/dist/src/commands/agent.js +0 -131
- package/dist/src/commands/daemon.d.ts +0 -35
- package/dist/src/commands/daemon.js +0 -612
- package/dist/src/commands/pair-qr.d.ts +0 -4
- package/dist/src/commands/pair-qr.js +0 -6
- package/dist/src/commands/pair.d.ts +0 -8
- package/dist/src/commands/pair.js +0 -162
- package/dist/src/commands/upgrade.d.ts +0 -5
- package/dist/src/commands/upgrade.js +0 -145
- package/dist/src/config/index.d.ts +0 -32
- package/dist/src/config/index.js +0 -31
- package/dist/src/fs/handler.d.ts +0 -26
- package/dist/src/fs/handler.js +0 -130
- package/dist/src/fs/security.d.ts +0 -2
- package/dist/src/fs/security.js +0 -32
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +0 -277
- package/dist/src/log-reporter.d.ts +0 -18
- package/dist/src/log-reporter.js +0 -16
- package/dist/src/native-fusion/parsers.d.ts +0 -12
- package/dist/src/native-fusion/parsers.js +0 -687
- package/dist/src/native-fusion/service.d.ts +0 -25
- package/dist/src/native-fusion/service.js +0 -176
- package/dist/src/native-fusion/state.d.ts +0 -3
- package/dist/src/native-fusion/state.js +0 -22
- package/dist/src/native-fusion/types.d.ts +0 -24
- package/dist/src/native-fusion/types.js +0 -1
- package/dist/src/region.d.ts +0 -15
- package/dist/src/region.js +0 -99
- package/dist/src/relay/client.d.ts +0 -62
- package/dist/src/relay/client.js +0 -311
- package/dist/src/session/handlers/agents.d.ts +0 -4
- package/dist/src/session/handlers/agents.js +0 -55
- package/dist/src/session/handlers/chat.d.ts +0 -4
- package/dist/src/session/handlers/chat.js +0 -326
- package/dist/src/session/handlers/control.d.ts +0 -5
- package/dist/src/session/handlers/control.js +0 -57
- package/dist/src/session/handlers/fs.d.ts +0 -10
- package/dist/src/session/handlers/fs.js +0 -256
- package/dist/src/session/manager.d.ts +0 -28
- package/dist/src/session/manager.js +0 -174
- package/dist/src/session/store.d.ts +0 -7
- package/dist/src/session/store.js +0 -46
- package/dist/src/session/types.d.ts +0 -35
- package/dist/src/session/types.js +0 -4
- package/dist/src/upgrade/engine.d.ts +0 -64
- package/dist/src/upgrade/engine.js +0 -238
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { loadConfig, saveConfig } from '../config/index.js';
|
|
3
|
-
import { spawnCommandString } from '../agents/command-spec.js';
|
|
4
|
-
function getCapsModels(caps) {
|
|
5
|
-
if (caps.models?.length)
|
|
6
|
-
return caps.models;
|
|
7
|
-
if (caps.model)
|
|
8
|
-
return [caps.model];
|
|
9
|
-
return [];
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Runs `<command> /caps` and returns the parsed caps JSON.
|
|
13
|
-
*/
|
|
14
|
-
async function probeCaps(command) {
|
|
15
|
-
return new Promise((resolve, reject) => {
|
|
16
|
-
const proc = spawnCommandString(command, ['/caps'], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
17
|
-
let stdout = '';
|
|
18
|
-
let stderr = '';
|
|
19
|
-
proc.stdout?.on('data', (d) => { stdout += d.toString(); });
|
|
20
|
-
proc.stderr?.on('data', (d) => { stderr += d.toString(); });
|
|
21
|
-
proc.on('error', (err) => reject(new Error(`Failed to run command: ${err.message}`)));
|
|
22
|
-
proc.on('close', (_code) => {
|
|
23
|
-
const line = stdout.trim().split('\n').find((l) => l.trim().startsWith('{'));
|
|
24
|
-
if (!line) {
|
|
25
|
-
reject(new Error(`Command did not output valid caps JSON.\nstdout: ${stdout.trim()}\nstderr: ${stderr.trim()}`));
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
const caps = JSON.parse(line);
|
|
30
|
-
if (!caps.name || !caps.mode) {
|
|
31
|
-
reject(new Error('Caps JSON must contain "name" and "mode" fields'));
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
if (getCapsModels(caps).length === 0) {
|
|
35
|
-
reject(new Error('Caps JSON must contain either "model" or a non-empty "models" array'));
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (caps.mode !== 'spawn' && caps.mode !== 'stdio') {
|
|
39
|
-
reject(new Error(`Caps "mode" must be "spawn" or "stdio", got: ${caps.mode}`));
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
resolve(caps);
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
reject(new Error(`Failed to parse caps JSON: ${line}`));
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
setTimeout(() => {
|
|
49
|
-
proc.kill('SIGTERM');
|
|
50
|
-
reject(new Error('Timed out waiting for caps response (5s)'));
|
|
51
|
-
}, 5000);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
export function registerAgentCommand(program) {
|
|
55
|
-
const agent = program
|
|
56
|
-
.command('agent')
|
|
57
|
-
.description('Manage custom agents');
|
|
58
|
-
// ── add ──────────────────────────────────────────────────────────────────
|
|
59
|
-
agent
|
|
60
|
-
.command('add <name>')
|
|
61
|
-
.description('Register a custom agent')
|
|
62
|
-
.requiredOption('--command <cmd>', 'Command to run the agent (e.g. "python /path/agent.py")')
|
|
63
|
-
.action(async (name, opts) => {
|
|
64
|
-
if (!/^[a-zA-Z0-9_-]+$/.test(name)) {
|
|
65
|
-
console.error(chalk.red('✗ Agent name must contain only letters, numbers, hyphens, and underscores'));
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
console.log(chalk.gray(`Probing caps: ${opts.command} /caps ...`));
|
|
69
|
-
let caps;
|
|
70
|
-
try {
|
|
71
|
-
caps = await probeCaps(opts.command);
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
console.error(chalk.red(`✗ ${err instanceof Error ? err.message : String(err)}`));
|
|
75
|
-
process.exit(1);
|
|
76
|
-
}
|
|
77
|
-
const config = loadConfig();
|
|
78
|
-
config.customAgents = config.customAgents ?? {};
|
|
79
|
-
config.customAgents[name] = { command: opts.command, caps };
|
|
80
|
-
saveConfig(config);
|
|
81
|
-
console.log(chalk.green(`✓ Agent "${name}" registered`));
|
|
82
|
-
console.log(chalk.gray(` Name: ${caps.name}`));
|
|
83
|
-
console.log(chalk.gray(` Models: ${getCapsModels(caps).join(', ')}`));
|
|
84
|
-
console.log(chalk.gray(` Mode: ${caps.mode}`));
|
|
85
|
-
if (caps.version)
|
|
86
|
-
console.log(chalk.gray(` Version: ${caps.version}`));
|
|
87
|
-
console.log();
|
|
88
|
-
console.log(chalk.yellow(` The agent will appear as "custom:${name}" in the Shennian app.`));
|
|
89
|
-
console.log(chalk.yellow(' Refresh Agents in the app to hot-reload this daemon, or restart the daemon as a fallback.'));
|
|
90
|
-
});
|
|
91
|
-
// ── list ─────────────────────────────────────────────────────────────────
|
|
92
|
-
agent
|
|
93
|
-
.command('list')
|
|
94
|
-
.description('List registered custom agents')
|
|
95
|
-
.action(() => {
|
|
96
|
-
const config = loadConfig();
|
|
97
|
-
const entries = Object.entries(config.customAgents ?? {});
|
|
98
|
-
if (entries.length === 0) {
|
|
99
|
-
console.log(chalk.gray('No custom agents registered.'));
|
|
100
|
-
console.log(chalk.gray('Add one with: shennian agent add <name> --command "<cmd>"'));
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
console.log(chalk.bold('\nCustom agents:\n'));
|
|
104
|
-
for (const [name, entry] of entries) {
|
|
105
|
-
const models = entry.caps.models?.length
|
|
106
|
-
? entry.caps.models.join(', ')
|
|
107
|
-
: entry.caps.model ?? '(none)';
|
|
108
|
-
console.log(` ${chalk.cyan(name)}`);
|
|
109
|
-
console.log(` ${chalk.gray('display:')} ${entry.caps.name}`);
|
|
110
|
-
console.log(` ${chalk.gray('models:')} ${models}`);
|
|
111
|
-
console.log(` ${chalk.gray('mode:')} ${entry.caps.mode}`);
|
|
112
|
-
console.log(` ${chalk.gray('command:')} ${entry.command}`);
|
|
113
|
-
console.log();
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
// ── remove ────────────────────────────────────────────────────────────────
|
|
117
|
-
agent
|
|
118
|
-
.command('remove <name>')
|
|
119
|
-
.description('Unregister a custom agent')
|
|
120
|
-
.action((name) => {
|
|
121
|
-
const config = loadConfig();
|
|
122
|
-
if (!config.customAgents?.[name]) {
|
|
123
|
-
console.error(chalk.red(`✗ No agent named "${name}"`));
|
|
124
|
-
process.exit(1);
|
|
125
|
-
}
|
|
126
|
-
delete config.customAgents[name];
|
|
127
|
-
saveConfig(config);
|
|
128
|
-
console.log(chalk.green(`✓ Agent "${name}" removed`));
|
|
129
|
-
console.log(chalk.yellow(' Refresh Agents in the app to hot-reload this daemon, or restart the daemon as a fallback.'));
|
|
130
|
-
});
|
|
131
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { Command } from 'commander';
|
|
2
|
-
type ServiceLaunchMode = 'direct' | 'global-shim' | 'npx';
|
|
3
|
-
export type ServiceLaunchSpec = {
|
|
4
|
-
command: string;
|
|
5
|
-
args: string[];
|
|
6
|
-
mode: ServiceLaunchMode;
|
|
7
|
-
};
|
|
8
|
-
export declare function isEphemeralCliPath(candidate: string): boolean;
|
|
9
|
-
export declare function resolveServiceLaunchSpec(input: {
|
|
10
|
-
nodeExec: string;
|
|
11
|
-
scriptPath: string;
|
|
12
|
-
shennianCommandPath?: string | null;
|
|
13
|
-
npxPath?: string | null;
|
|
14
|
-
}): ServiceLaunchSpec;
|
|
15
|
-
export declare function buildWindowsLauncherCommand(spec: ServiceLaunchSpec, logFile: string): string;
|
|
16
|
-
export declare function buildWindowsStartupVbs(cmdPath: string): string;
|
|
17
|
-
export declare function buildWindowsScheduledTaskXml(input: {
|
|
18
|
-
userId: string;
|
|
19
|
-
command: string;
|
|
20
|
-
arguments: string[];
|
|
21
|
-
}): string;
|
|
22
|
-
export declare function captureEnvForService(): Record<string, string>;
|
|
23
|
-
/**
|
|
24
|
-
* Save current env vars so the daemon can load them at startup.
|
|
25
|
-
* This is critical for launchd/systemd which start with minimal env.
|
|
26
|
-
*/
|
|
27
|
-
export declare function saveEnvSnapshot(): void;
|
|
28
|
-
export declare function startDaemonProcess(): void;
|
|
29
|
-
/**
|
|
30
|
-
* Install the platform-native auto-start service.
|
|
31
|
-
* Returns true if the service was immediately started (so caller can skip startDaemonProcess).
|
|
32
|
-
*/
|
|
33
|
-
export declare function installService(): boolean;
|
|
34
|
-
export declare function registerDaemonCommand(program: Command): void;
|
|
35
|
-
export {};
|