shennian 0.2.4 → 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 +3 -2
- package/dist/bin/shennian.d.ts +0 -3
- package/dist/bin/shennian.d.ts.map +0 -1
- package/dist/bin/shennian.js +0 -3
- package/dist/bin/shennian.js.map +0 -1
- package/dist/src/__experiments__/probe-debug.d.ts +0 -2
- package/dist/src/__experiments__/probe-debug.d.ts.map +0 -1
- package/dist/src/__experiments__/probe-debug.js +0 -66
- package/dist/src/__experiments__/probe-debug.js.map +0 -1
- package/dist/src/__experiments__/probe-final-benchmark.d.ts +0 -3
- package/dist/src/__experiments__/probe-final-benchmark.d.ts.map +0 -1
- package/dist/src/__experiments__/probe-final-benchmark.js +0 -234
- package/dist/src/__experiments__/probe-final-benchmark.js.map +0 -1
- package/dist/src/__experiments__/probe-models-final.d.ts +0 -19
- package/dist/src/__experiments__/probe-models-final.d.ts.map +0 -1
- package/dist/src/__experiments__/probe-models-final.js +0 -250
- package/dist/src/__experiments__/probe-models-final.js.map +0 -1
- package/dist/src/__experiments__/probe-models.d.ts +0 -7
- package/dist/src/__experiments__/probe-models.d.ts.map +0 -1
- package/dist/src/__experiments__/probe-models.js +0 -251
- package/dist/src/__experiments__/probe-models.js.map +0 -1
- package/dist/src/__tests__/agents-e2e.d.ts +0 -21
- package/dist/src/__tests__/agents-e2e.d.ts.map +0 -1
- package/dist/src/__tests__/agents-e2e.js +0 -155
- package/dist/src/__tests__/agents-e2e.js.map +0 -1
- package/dist/src/__tests__/claude-adapter.test.d.ts +0 -2
- package/dist/src/__tests__/claude-adapter.test.d.ts.map +0 -1
- package/dist/src/__tests__/claude-adapter.test.js +0 -75
- package/dist/src/__tests__/claude-adapter.test.js.map +0 -1
- package/dist/src/__tests__/codex-adapter.test.d.ts +0 -2
- package/dist/src/__tests__/codex-adapter.test.d.ts.map +0 -1
- package/dist/src/__tests__/codex-adapter.test.js +0 -281
- package/dist/src/__tests__/codex-adapter.test.js.map +0 -1
- package/dist/src/__tests__/config.test.d.ts +0 -2
- package/dist/src/__tests__/config.test.d.ts.map +0 -1
- package/dist/src/__tests__/config.test.js +0 -60
- package/dist/src/__tests__/config.test.js.map +0 -1
- package/dist/src/__tests__/cursor-adapter.test.d.ts +0 -2
- package/dist/src/__tests__/cursor-adapter.test.d.ts.map +0 -1
- package/dist/src/__tests__/cursor-adapter.test.js +0 -69
- package/dist/src/__tests__/cursor-adapter.test.js.map +0 -1
- package/dist/src/__tests__/custom-agent-flow.test.d.ts +0 -2
- package/dist/src/__tests__/custom-agent-flow.test.d.ts.map +0 -1
- package/dist/src/__tests__/custom-agent-flow.test.js +0 -244
- package/dist/src/__tests__/custom-agent-flow.test.js.map +0 -1
- package/dist/src/__tests__/daemon-autostart.test.d.ts +0 -2
- package/dist/src/__tests__/daemon-autostart.test.d.ts.map +0 -1
- package/dist/src/__tests__/daemon-autostart.test.js +0 -60
- package/dist/src/__tests__/daemon-autostart.test.js.map +0 -1
- package/dist/src/__tests__/e2e-relay.d.ts +0 -19
- package/dist/src/__tests__/e2e-relay.d.ts.map +0 -1
- package/dist/src/__tests__/e2e-relay.js +0 -400
- package/dist/src/__tests__/e2e-relay.js.map +0 -1
- package/dist/src/__tests__/fs-handler.test.d.ts +0 -2
- package/dist/src/__tests__/fs-handler.test.d.ts.map +0 -1
- package/dist/src/__tests__/fs-handler.test.js +0 -19
- package/dist/src/__tests__/fs-handler.test.js.map +0 -1
- package/dist/src/__tests__/model-discovery.test.d.ts +0 -2
- package/dist/src/__tests__/model-discovery.test.d.ts.map +0 -1
- package/dist/src/__tests__/model-discovery.test.js +0 -47
- package/dist/src/__tests__/model-discovery.test.js.map +0 -1
- package/dist/src/__tests__/model-switching.test.d.ts +0 -2
- package/dist/src/__tests__/model-switching.test.d.ts.map +0 -1
- package/dist/src/__tests__/model-switching.test.js +0 -292
- package/dist/src/__tests__/model-switching.test.js.map +0 -1
- package/dist/src/__tests__/native-fusion-parsers.test.d.ts +0 -2
- package/dist/src/__tests__/native-fusion-parsers.test.d.ts.map +0 -1
- package/dist/src/__tests__/native-fusion-parsers.test.js +0 -253
- package/dist/src/__tests__/native-fusion-parsers.test.js.map +0 -1
- package/dist/src/__tests__/native-fusion-service.test.d.ts +0 -2
- package/dist/src/__tests__/native-fusion-service.test.d.ts.map +0 -1
- package/dist/src/__tests__/native-fusion-service.test.js +0 -157
- package/dist/src/__tests__/native-fusion-service.test.js.map +0 -1
- package/dist/src/__tests__/native-session-sync.test.d.ts +0 -2
- package/dist/src/__tests__/native-session-sync.test.d.ts.map +0 -1
- package/dist/src/__tests__/native-session-sync.test.js +0 -198
- package/dist/src/__tests__/native-session-sync.test.js.map +0 -1
- package/dist/src/__tests__/pair-qr.test.d.ts +0 -2
- package/dist/src/__tests__/pair-qr.test.d.ts.map +0 -1
- package/dist/src/__tests__/pair-qr.test.js +0 -13
- package/dist/src/__tests__/pair-qr.test.js.map +0 -1
- package/dist/src/__tests__/pi-context.test.d.ts +0 -2
- package/dist/src/__tests__/pi-context.test.d.ts.map +0 -1
- package/dist/src/__tests__/pi-context.test.js +0 -261
- package/dist/src/__tests__/pi-context.test.js.map +0 -1
- package/dist/src/__tests__/session-manager.test.d.ts +0 -2
- package/dist/src/__tests__/session-manager.test.d.ts.map +0 -1
- package/dist/src/__tests__/session-manager.test.js +0 -685
- package/dist/src/__tests__/session-manager.test.js.map +0 -1
- package/dist/src/__tests__/session-store.test.d.ts +0 -2
- package/dist/src/__tests__/session-store.test.d.ts.map +0 -1
- package/dist/src/__tests__/session-store.test.js +0 -106
- package/dist/src/__tests__/session-store.test.js.map +0 -1
- package/dist/src/agents/adapter.d.ts +0 -36
- package/dist/src/agents/adapter.d.ts.map +0 -1
- package/dist/src/agents/adapter.js +0 -20
- package/dist/src/agents/adapter.js.map +0 -1
- package/dist/src/agents/claude.d.ts +0 -25
- package/dist/src/agents/claude.d.ts.map +0 -1
- package/dist/src/agents/claude.js +0 -228
- package/dist/src/agents/claude.js.map +0 -1
- package/dist/src/agents/codex.d.ts +0 -50
- package/dist/src/agents/codex.d.ts.map +0 -1
- package/dist/src/agents/codex.js +0 -785
- package/dist/src/agents/codex.js.map +0 -1
- package/dist/src/agents/command-spec.d.ts +0 -11
- package/dist/src/agents/command-spec.d.ts.map +0 -1
- package/dist/src/agents/command-spec.js +0 -62
- package/dist/src/agents/command-spec.js.map +0 -1
- package/dist/src/agents/cursor.d.ts +0 -23
- package/dist/src/agents/cursor.d.ts.map +0 -1
- package/dist/src/agents/cursor.js +0 -250
- package/dist/src/agents/cursor.js.map +0 -1
- package/dist/src/agents/custom.d.ts +0 -36
- package/dist/src/agents/custom.d.ts.map +0 -1
- package/dist/src/agents/custom.js +0 -246
- package/dist/src/agents/custom.js.map +0 -1
- package/dist/src/agents/detect.d.ts +0 -10
- package/dist/src/agents/detect.d.ts.map +0 -1
- package/dist/src/agents/detect.js +0 -47
- package/dist/src/agents/detect.js.map +0 -1
- package/dist/src/agents/gemini.d.ts +0 -18
- package/dist/src/agents/gemini.d.ts.map +0 -1
- package/dist/src/agents/gemini.js +0 -168
- package/dist/src/agents/gemini.js.map +0 -1
- package/dist/src/agents/model-registry/cache.d.ts +0 -5
- package/dist/src/agents/model-registry/cache.d.ts.map +0 -1
- package/dist/src/agents/model-registry/cache.js +0 -38
- package/dist/src/agents/model-registry/cache.js.map +0 -1
- package/dist/src/agents/model-registry/discovery.d.ts +0 -5
- package/dist/src/agents/model-registry/discovery.d.ts.map +0 -1
- package/dist/src/agents/model-registry/discovery.js +0 -202
- package/dist/src/agents/model-registry/discovery.js.map +0 -1
- package/dist/src/agents/model-registry/parsers.d.ts +0 -9
- package/dist/src/agents/model-registry/parsers.d.ts.map +0 -1
- package/dist/src/agents/model-registry/parsers.js +0 -259
- package/dist/src/agents/model-registry/parsers.js.map +0 -1
- package/dist/src/agents/model-registry/runner.d.ts +0 -11
- package/dist/src/agents/model-registry/runner.d.ts.map +0 -1
- package/dist/src/agents/model-registry/runner.js +0 -160
- package/dist/src/agents/model-registry/runner.js.map +0 -1
- package/dist/src/agents/model-registry/service.d.ts +0 -7
- package/dist/src/agents/model-registry/service.d.ts.map +0 -1
- package/dist/src/agents/model-registry/service.js +0 -69
- package/dist/src/agents/model-registry/service.js.map +0 -1
- package/dist/src/agents/model-registry/types.d.ts +0 -31
- package/dist/src/agents/model-registry/types.d.ts.map +0 -1
- package/dist/src/agents/model-registry/types.js +0 -9
- package/dist/src/agents/model-registry/types.js.map +0 -1
- package/dist/src/agents/model-registry.d.ts +0 -13
- package/dist/src/agents/model-registry.d.ts.map +0 -1
- package/dist/src/agents/model-registry.js +0 -15
- package/dist/src/agents/model-registry.js.map +0 -1
- package/dist/src/agents/openclaw.d.ts +0 -21
- package/dist/src/agents/openclaw.d.ts.map +0 -1
- package/dist/src/agents/openclaw.js +0 -264
- package/dist/src/agents/openclaw.js.map +0 -1
- package/dist/src/agents/pi.d.ts +0 -52
- package/dist/src/agents/pi.d.ts.map +0 -1
- package/dist/src/agents/pi.js +0 -794
- package/dist/src/agents/pi.js.map +0 -1
- package/dist/src/commands/agent.d.ts +0 -3
- package/dist/src/commands/agent.d.ts.map +0 -1
- package/dist/src/commands/agent.js +0 -162
- package/dist/src/commands/agent.js.map +0 -1
- package/dist/src/commands/daemon.d.ts +0 -30
- package/dist/src/commands/daemon.d.ts.map +0 -1
- package/dist/src/commands/daemon.js +0 -477
- package/dist/src/commands/daemon.js.map +0 -1
- package/dist/src/commands/pair-qr.d.ts +0 -5
- package/dist/src/commands/pair-qr.d.ts.map +0 -1
- package/dist/src/commands/pair-qr.js +0 -7
- package/dist/src/commands/pair-qr.js.map +0 -1
- package/dist/src/commands/pair.d.ts +0 -9
- package/dist/src/commands/pair.d.ts.map +0 -1
- package/dist/src/commands/pair.js +0 -163
- package/dist/src/commands/pair.js.map +0 -1
- package/dist/src/commands/upgrade.d.ts +0 -6
- package/dist/src/commands/upgrade.d.ts.map +0 -1
- package/dist/src/commands/upgrade.js +0 -146
- package/dist/src/commands/upgrade.js.map +0 -1
- package/dist/src/config/index.d.ts +0 -33
- package/dist/src/config/index.d.ts.map +0 -1
- package/dist/src/config/index.js +0 -32
- package/dist/src/config/index.js.map +0 -1
- package/dist/src/fs/handler.d.ts +0 -27
- package/dist/src/fs/handler.d.ts.map +0 -1
- package/dist/src/fs/handler.js +0 -131
- package/dist/src/fs/handler.js.map +0 -1
- package/dist/src/fs/multimodal.d.ts +0 -5
- package/dist/src/fs/multimodal.d.ts.map +0 -1
- package/dist/src/fs/multimodal.js +0 -39
- package/dist/src/fs/multimodal.js.map +0 -1
- package/dist/src/fs/security.d.ts +0 -3
- package/dist/src/fs/security.d.ts.map +0 -1
- package/dist/src/fs/security.js +0 -28
- package/dist/src/fs/security.js.map +0 -1
- package/dist/src/index.d.ts +0 -2
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -251
- package/dist/src/index.js.map +0 -1
- package/dist/src/log-reporter.d.ts +0 -19
- package/dist/src/log-reporter.d.ts.map +0 -1
- package/dist/src/log-reporter.js +0 -34
- package/dist/src/log-reporter.js.map +0 -1
- package/dist/src/native-fusion/parsers.d.ts +0 -13
- package/dist/src/native-fusion/parsers.d.ts.map +0 -1
- package/dist/src/native-fusion/parsers.js +0 -371
- package/dist/src/native-fusion/parsers.js.map +0 -1
- package/dist/src/native-fusion/service.d.ts +0 -26
- package/dist/src/native-fusion/service.d.ts.map +0 -1
- package/dist/src/native-fusion/service.js +0 -167
- package/dist/src/native-fusion/service.js.map +0 -1
- package/dist/src/native-fusion/state.d.ts +0 -4
- package/dist/src/native-fusion/state.d.ts.map +0 -1
- package/dist/src/native-fusion/state.js +0 -23
- package/dist/src/native-fusion/state.js.map +0 -1
- package/dist/src/native-fusion/types.d.ts +0 -25
- package/dist/src/native-fusion/types.d.ts.map +0 -1
- package/dist/src/native-fusion/types.js +0 -2
- package/dist/src/native-fusion/types.js.map +0 -1
- package/dist/src/native-sync/discover.d.ts +0 -6
- package/dist/src/native-sync/discover.d.ts.map +0 -1
- package/dist/src/native-sync/discover.js +0 -69
- package/dist/src/native-sync/discover.js.map +0 -1
- package/dist/src/native-sync/parsers.d.ts +0 -3
- package/dist/src/native-sync/parsers.d.ts.map +0 -1
- package/dist/src/native-sync/parsers.js +0 -373
- package/dist/src/native-sync/parsers.js.map +0 -1
- package/dist/src/native-sync/service.d.ts +0 -16
- package/dist/src/native-sync/service.d.ts.map +0 -1
- package/dist/src/native-sync/service.js +0 -95
- package/dist/src/native-sync/service.js.map +0 -1
- package/dist/src/native-sync/state.d.ts +0 -6
- package/dist/src/native-sync/state.d.ts.map +0 -1
- package/dist/src/native-sync/state.js +0 -34
- package/dist/src/native-sync/state.js.map +0 -1
- package/dist/src/native-sync/types.d.ts +0 -23
- package/dist/src/native-sync/types.d.ts.map +0 -1
- package/dist/src/native-sync/types.js +0 -4
- package/dist/src/native-sync/types.js.map +0 -1
- package/dist/src/region.d.ts +0 -16
- package/dist/src/region.d.ts.map +0 -1
- package/dist/src/region.js +0 -100
- package/dist/src/region.js.map +0 -1
- package/dist/src/relay/client.d.ts +0 -53
- package/dist/src/relay/client.d.ts.map +0 -1
- package/dist/src/relay/client.js +0 -293
- package/dist/src/relay/client.js.map +0 -1
- package/dist/src/session/handlers/agents.d.ts +0 -5
- package/dist/src/session/handlers/agents.d.ts.map +0 -1
- package/dist/src/session/handlers/agents.js +0 -56
- package/dist/src/session/handlers/agents.js.map +0 -1
- package/dist/src/session/handlers/chat.d.ts +0 -5
- package/dist/src/session/handlers/chat.d.ts.map +0 -1
- package/dist/src/session/handlers/chat.js +0 -327
- package/dist/src/session/handlers/chat.js.map +0 -1
- package/dist/src/session/handlers/control.d.ts +0 -6
- package/dist/src/session/handlers/control.d.ts.map +0 -1
- package/dist/src/session/handlers/control.js +0 -58
- package/dist/src/session/handlers/control.js.map +0 -1
- package/dist/src/session/handlers/fs.d.ts +0 -11
- package/dist/src/session/handlers/fs.d.ts.map +0 -1
- package/dist/src/session/handlers/fs.js +0 -253
- package/dist/src/session/handlers/fs.js.map +0 -1
- package/dist/src/session/handlers/queue.d.ts +0 -4
- package/dist/src/session/handlers/queue.d.ts.map +0 -1
- package/dist/src/session/handlers/queue.js +0 -66
- package/dist/src/session/handlers/queue.js.map +0 -1
- package/dist/src/session/manager.d.ts +0 -28
- package/dist/src/session/manager.d.ts.map +0 -1
- package/dist/src/session/manager.js +0 -155
- package/dist/src/session/manager.js.map +0 -1
- package/dist/src/session/store.d.ts +0 -8
- package/dist/src/session/store.d.ts.map +0 -1
- package/dist/src/session/store.js +0 -47
- package/dist/src/session/store.js.map +0 -1
- package/dist/src/session/types.d.ts +0 -36
- package/dist/src/session/types.d.ts.map +0 -1
- package/dist/src/session/types.js +0 -5
- package/dist/src/session/types.js.map +0 -1
- package/dist/src/upgrade/engine.d.ts +0 -65
- package/dist/src/upgrade/engine.d.ts.map +0 -1
- package/dist/src/upgrade/engine.js +0 -239
- package/dist/src/upgrade/engine.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import os from 'node:os';
|
|
3
|
-
import readline from 'node:readline';
|
|
4
|
-
import { loadConfig, saveConfig } from '../config/index.js';
|
|
5
|
-
import { detectAgents } from '../agents/detect.js';
|
|
6
|
-
import { startDaemonProcess, installService, saveEnvSnapshot } from './daemon.js';
|
|
7
|
-
import { detectAndChooseServer } from '../region.js';
|
|
8
|
-
import { buildPairQrPayload, PAIR_QR_RENDER_OPTIONS } from './pair-qr.js';
|
|
9
|
-
const POLL_INTERVAL_MS = 3000;
|
|
10
|
-
const POLL_TIMEOUT_MS = 10 * 60 * 1000;
|
|
11
|
-
function renderTokenBox(token) {
|
|
12
|
-
const line = '─'.repeat(token.length + 4);
|
|
13
|
-
console.log(chalk.cyan(`┌${line}┐`));
|
|
14
|
-
console.log(chalk.cyan('│ ') + chalk.bold.yellow(token) + chalk.cyan(' │'));
|
|
15
|
-
console.log(chalk.cyan(`└${line}┘`));
|
|
16
|
-
}
|
|
17
|
-
async function renderQR(url) {
|
|
18
|
-
const qrcode = (await import('qrcode-terminal')).default;
|
|
19
|
-
return new Promise((resolve) => {
|
|
20
|
-
qrcode.generate(url, PAIR_QR_RENDER_OPTIONS, (qr) => {
|
|
21
|
-
console.log(qr);
|
|
22
|
-
resolve();
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
async function pollStatus(serverUrl, pairToken) {
|
|
27
|
-
const deadline = Date.now() + POLL_TIMEOUT_MS;
|
|
28
|
-
while (Date.now() < deadline) {
|
|
29
|
-
await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
|
|
30
|
-
let res;
|
|
31
|
-
try {
|
|
32
|
-
res = await fetch(`${serverUrl}/api/machines/pair/status?token=${encodeURIComponent(pairToken)}`);
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
if (res.status === 410) {
|
|
38
|
-
console.error(chalk.red('\n✗ Pairing code expired. Please re-run: shennian pair'));
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
41
|
-
if (!res.ok)
|
|
42
|
-
continue;
|
|
43
|
-
const data = (await res.json());
|
|
44
|
-
if (data.status === 'claimed' && data.machineToken && data.machineId) {
|
|
45
|
-
return {
|
|
46
|
-
machineToken: data.machineToken,
|
|
47
|
-
machineId: data.machineId,
|
|
48
|
-
machineName: data.machineName ?? '',
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
function askConfirm(question) {
|
|
55
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
56
|
-
return new Promise((resolve) => {
|
|
57
|
-
rl.question(question, (ans) => {
|
|
58
|
-
rl.close();
|
|
59
|
-
resolve(ans.trim().toLowerCase() === 'y');
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
export async function runPairFlow(opts) {
|
|
64
|
-
const { serverUrl, machineName, force } = opts;
|
|
65
|
-
const config = loadConfig();
|
|
66
|
-
if (config.machineToken && config.machineId && !force) {
|
|
67
|
-
console.log(chalk.green(`✓ Already paired (machine ID: ${config.machineId})`));
|
|
68
|
-
console.log(chalk.gray(' Run "shennian pair" to re-pair to another account'));
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
if (config.machineToken && !force)
|
|
72
|
-
return;
|
|
73
|
-
const detectedAgents = detectAgents();
|
|
74
|
-
const agentList = detectedAgents.map((a) => a.type);
|
|
75
|
-
const platform = os.platform();
|
|
76
|
-
const osName = platform === 'win32' ? 'windows' : platform === 'darwin' ? 'macos' : 'linux';
|
|
77
|
-
console.log(chalk.bold('\nShennian CLI — Pairing\n'));
|
|
78
|
-
console.log(chalk.gray(` Machine: ${machineName} | OS: ${osName} | Agents: ${agentList.join(', ') || 'none'}`));
|
|
79
|
-
console.log();
|
|
80
|
-
let res;
|
|
81
|
-
try {
|
|
82
|
-
res = await fetch(`${serverUrl}/api/machines/pair/create`, {
|
|
83
|
-
method: 'POST',
|
|
84
|
-
headers: { 'Content-Type': 'application/json' },
|
|
85
|
-
body: JSON.stringify({ name: machineName, os: osName, agentList }),
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
console.error(chalk.red(`✗ Network error: cannot connect to ${serverUrl}`));
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
if (!res.ok) {
|
|
93
|
-
const body = await res.json().catch(() => ({}));
|
|
94
|
-
console.error(chalk.red(`✗ Failed to create machine: ${body.error ?? res.statusText}`));
|
|
95
|
-
process.exit(1);
|
|
96
|
-
}
|
|
97
|
-
const data = (await res.json());
|
|
98
|
-
config.machineId = data.machineId;
|
|
99
|
-
config.serverUrl = serverUrl;
|
|
100
|
-
saveConfig(config);
|
|
101
|
-
const pairUrl = buildPairQrPayload(data.pairToken);
|
|
102
|
-
console.log(chalk.white('Scan QR code or enter the pairing code in the Shennian app:'));
|
|
103
|
-
console.log();
|
|
104
|
-
await renderQR(pairUrl);
|
|
105
|
-
renderTokenBox(data.pairToken);
|
|
106
|
-
console.log();
|
|
107
|
-
console.log(chalk.gray('Waiting for pairing... (Ctrl+C to cancel)'));
|
|
108
|
-
const result = await pollStatus(serverUrl, data.pairToken);
|
|
109
|
-
if (!result) {
|
|
110
|
-
console.error(chalk.red('\n✗ Timed out. Pairing code expired, please try again.'));
|
|
111
|
-
process.exit(1);
|
|
112
|
-
}
|
|
113
|
-
config.machineToken = result.machineToken;
|
|
114
|
-
config.machineId = result.machineId;
|
|
115
|
-
saveConfig(config);
|
|
116
|
-
console.log(chalk.green(`\n✓ Paired successfully! Machine "${result.machineName}" is now linked.`));
|
|
117
|
-
}
|
|
118
|
-
export async function runSmartStart(serverUrl, machineName) {
|
|
119
|
-
const config = loadConfig();
|
|
120
|
-
if (!config.machineToken) {
|
|
121
|
-
const resolvedUrl = serverUrl ?? (await detectAndChooseServer());
|
|
122
|
-
await runPairFlow({ serverUrl: resolvedUrl, machineName, force: false });
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
console.log(chalk.green(`✓ Already paired (machine ID: ${config.machineId})`));
|
|
126
|
-
}
|
|
127
|
-
saveEnvSnapshot();
|
|
128
|
-
console.log(chalk.gray('\nStarting background service...'));
|
|
129
|
-
const startedByService = installService();
|
|
130
|
-
if (!startedByService) {
|
|
131
|
-
startDaemonProcess();
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
export function registerPairCommand(program) {
|
|
135
|
-
program
|
|
136
|
-
.command('pair')
|
|
137
|
-
.description('Pair this machine to a Shennian account (re-pair if already paired)')
|
|
138
|
-
.option('--api <url>', 'Server URL override')
|
|
139
|
-
.option('--name <name>', 'Machine name', os.hostname())
|
|
140
|
-
.action(async (opts) => {
|
|
141
|
-
const config = loadConfig();
|
|
142
|
-
if (config.machineToken) {
|
|
143
|
-
console.log(chalk.yellow(`Currently paired (machine ID: ${config.machineId})`));
|
|
144
|
-
const yes = await askConfirm('Re-pairing will unlink the current account. Continue? (y/N) ');
|
|
145
|
-
if (!yes) {
|
|
146
|
-
console.log(chalk.gray('Cancelled'));
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
delete config.machineToken;
|
|
150
|
-
delete config.machineId;
|
|
151
|
-
saveConfig(config);
|
|
152
|
-
}
|
|
153
|
-
const serverUrl = opts.api ?? (await detectAndChooseServer());
|
|
154
|
-
await runPairFlow({ serverUrl, machineName: opts.name, force: true });
|
|
155
|
-
saveEnvSnapshot();
|
|
156
|
-
console.log(chalk.gray('\nStarting background service...'));
|
|
157
|
-
const startedByService = installService();
|
|
158
|
-
if (!startedByService) {
|
|
159
|
-
startDaemonProcess();
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
//# sourceMappingURL=pair.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pair.js","sourceRoot":"","sources":["../../../src/commands/pair.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Command } from 'commander';
|
|
2
|
-
import type { CliRelayClient } from '../relay/client.js';
|
|
3
|
-
export declare function registerUpgradeCommand(program: Command): void;
|
|
4
|
-
export declare function handleUpgradeStart(client: CliRelayClient, reqId: string, targetVersion?: string): Promise<void>;
|
|
5
|
-
export declare function handleUpgradeStatus(client: CliRelayClient, reqId: string): Promise<void>;
|
|
6
|
-
//# sourceMappingURL=upgrade.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/commands/upgrade.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAMxD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE7D;AAID,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
// @arch docs/architecture/cli/upgrade.md
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { getCurrentVersion, fetchLatestVersion, compareVersions, performUpgrade, checkForUpdate, } from '../upgrade/engine.js';
|
|
4
|
-
const SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
5
|
-
// ─── Interactive CLI upgrade command ─────────────────────────────────────────
|
|
6
|
-
export function registerUpgradeCommand(program) {
|
|
7
|
-
program
|
|
8
|
-
.command('upgrade')
|
|
9
|
-
.description('Upgrade shennian CLI to the latest version')
|
|
10
|
-
.option('--check', 'Only check for updates, do not install')
|
|
11
|
-
.option('--to <version>', 'Upgrade to a specific version')
|
|
12
|
-
.action(async (opts) => {
|
|
13
|
-
const current = getCurrentVersion();
|
|
14
|
-
console.log(chalk.gray(`Current version: ${current}`));
|
|
15
|
-
console.log();
|
|
16
|
-
let spinIdx = 0;
|
|
17
|
-
const spinTimer = setInterval(() => {
|
|
18
|
-
process.stdout.write(`\r ${SPINNER[spinIdx % SPINNER.length]} Checking for updates...`);
|
|
19
|
-
spinIdx++;
|
|
20
|
-
}, 80);
|
|
21
|
-
let latest;
|
|
22
|
-
try {
|
|
23
|
-
latest = opts.to ?? await fetchLatestVersion();
|
|
24
|
-
clearInterval(spinTimer);
|
|
25
|
-
process.stdout.write('\r' + ' '.repeat(40) + '\r');
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
clearInterval(spinTimer);
|
|
29
|
-
process.stdout.write('\r' + ' '.repeat(40) + '\r');
|
|
30
|
-
console.error(chalk.red(`✗ Failed to check for updates: ${err instanceof Error ? err.message : String(err)}`));
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
const changeType = compareVersions(current, latest);
|
|
34
|
-
if (changeType === 'none' && !opts.to) {
|
|
35
|
-
console.log(chalk.green(`✓ Already up to date (${current})`));
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
console.log(` Available: ${chalk.green(latest)} ${changeType === 'major' ? chalk.red('(major)') : changeType === 'minor' ? chalk.yellow('(minor)') : chalk.green('(patch)')}`);
|
|
39
|
-
console.log();
|
|
40
|
-
if (opts.check)
|
|
41
|
-
return;
|
|
42
|
-
if (changeType === 'major') {
|
|
43
|
-
console.log(chalk.yellow(' ⚠ This is a major version update and may contain breaking changes.'));
|
|
44
|
-
console.log(chalk.gray(' Please review the changelog before upgrading.'));
|
|
45
|
-
console.log();
|
|
46
|
-
}
|
|
47
|
-
const result = await performUpgrade(latest, (progress) => {
|
|
48
|
-
switch (progress.step) {
|
|
49
|
-
case 'checking':
|
|
50
|
-
console.log(chalk.gray(' → Checking npm...'));
|
|
51
|
-
break;
|
|
52
|
-
case 'backing-up':
|
|
53
|
-
console.log(chalk.gray(' → Backing up current version...'));
|
|
54
|
-
break;
|
|
55
|
-
case 'installing':
|
|
56
|
-
console.log(chalk.gray(` → Installing ${progress.version}...`));
|
|
57
|
-
break;
|
|
58
|
-
case 'verifying':
|
|
59
|
-
console.log(chalk.gray(` → Verifying ${progress.version}...`));
|
|
60
|
-
break;
|
|
61
|
-
case 'restarting':
|
|
62
|
-
console.log(chalk.gray(` → Restarting daemon...`));
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
if (result.ok) {
|
|
67
|
-
console.log();
|
|
68
|
-
console.log(chalk.green(`✓ Upgraded ${result.from} → ${result.to}`));
|
|
69
|
-
console.log(chalk.gray(' Daemon is restarting...'));
|
|
70
|
-
// Kill self — systemd/launchd will restart with new version
|
|
71
|
-
process.kill(process.pid, 'SIGTERM');
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
console.log();
|
|
75
|
-
if (result.rolledBack) {
|
|
76
|
-
console.error(chalk.red(`✗ Upgrade failed (rolled back to ${current})`));
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
console.error(chalk.red(`✗ Upgrade failed: ${result.error}`));
|
|
80
|
-
}
|
|
81
|
-
process.exit(1);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
// ─── Relay-triggered upgrade (called from session manager) ───────────────────
|
|
86
|
-
export async function handleUpgradeStart(client, reqId, targetVersion) {
|
|
87
|
-
const sendEvent = (payload) => {
|
|
88
|
-
client.sendEvent({ type: 'event', event: 'upgrade', payload });
|
|
89
|
-
};
|
|
90
|
-
const current = getCurrentVersion();
|
|
91
|
-
// Resolve target version
|
|
92
|
-
let latest;
|
|
93
|
-
try {
|
|
94
|
-
sendEvent({ state: 'checking', machineId: 'self' });
|
|
95
|
-
latest = targetVersion ?? await fetchLatestVersion();
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
client.sendRes({ type: 'res', id: reqId, ok: false, error: `Version check failed: ${err instanceof Error ? err.message : String(err)}` });
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const changeType = compareVersions(current, latest);
|
|
102
|
-
if (changeType === 'none') {
|
|
103
|
-
client.sendRes({ type: 'res', id: reqId, ok: true, payload: { alreadyLatest: true, version: current } });
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
// ACK immediately — upgrade is async
|
|
107
|
-
client.sendRes({ type: 'res', id: reqId, ok: true, payload: { from: current, to: latest } });
|
|
108
|
-
const result = await performUpgrade(latest, (progress) => {
|
|
109
|
-
switch (progress.step) {
|
|
110
|
-
case 'backing-up':
|
|
111
|
-
sendEvent({ state: 'downloading', machineId: 'self', version: latest });
|
|
112
|
-
break;
|
|
113
|
-
case 'installing':
|
|
114
|
-
sendEvent({ state: 'installing', machineId: 'self', version: latest });
|
|
115
|
-
break;
|
|
116
|
-
case 'restarting':
|
|
117
|
-
sendEvent({ state: 'restarting', machineId: 'self', from: current, to: latest });
|
|
118
|
-
break;
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
if (result.ok) {
|
|
122
|
-
sendEvent({ state: 'restarting', machineId: 'self', from: result.from, to: result.to });
|
|
123
|
-
// Brief delay so the event is flushed before we exit
|
|
124
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
125
|
-
process.kill(process.pid, 'SIGTERM');
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
sendEvent({
|
|
129
|
-
state: result.rolledBack ? 'rolledback' : 'failed',
|
|
130
|
-
machineId: 'self',
|
|
131
|
-
...(result.rolledBack ? { to: current, reason: result.error } : { error: result.error }),
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
export async function handleUpgradeStatus(client, reqId) {
|
|
136
|
-
const result = await checkForUpdate();
|
|
137
|
-
client.sendRes({
|
|
138
|
-
type: 'res',
|
|
139
|
-
id: reqId,
|
|
140
|
-
ok: true,
|
|
141
|
-
payload: result.hasUpdate
|
|
142
|
-
? { hasUpdate: true, current: result.current, latest: result.latest, changeType: result.changeType }
|
|
143
|
-
: { hasUpdate: false, current: getCurrentVersion() },
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
//# sourceMappingURL=upgrade.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export declare function getShennianDir(): string;
|
|
2
|
-
export declare function resolveShennianPath(...parts: string[]): string;
|
|
3
|
-
export declare const configPath: string;
|
|
4
|
-
export type CustomAgentEntry = {
|
|
5
|
-
command: string;
|
|
6
|
-
caps: {
|
|
7
|
-
name: string;
|
|
8
|
-
model?: string;
|
|
9
|
-
models?: string[];
|
|
10
|
-
defaultModel?: string;
|
|
11
|
-
mode: 'spawn' | 'stdio';
|
|
12
|
-
proactive?: boolean;
|
|
13
|
-
resume?: boolean;
|
|
14
|
-
version?: string;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
export type ShennianConfig = {
|
|
18
|
-
defaultProvider?: string;
|
|
19
|
-
defaultModel?: string;
|
|
20
|
-
apiKeys?: Record<string, string>;
|
|
21
|
-
machineId?: string;
|
|
22
|
-
machineToken?: string;
|
|
23
|
-
accessToken?: string;
|
|
24
|
-
refreshToken?: string;
|
|
25
|
-
serverUrl?: string;
|
|
26
|
-
customAgents?: Record<string, CustomAgentEntry>;
|
|
27
|
-
/** Auto-upgrade policy: 'none' | 'patch' | 'minor' (default: 'patch') */
|
|
28
|
-
autoUpgrade?: 'none' | 'patch' | 'minor';
|
|
29
|
-
};
|
|
30
|
-
export declare function loadConfig(): ShennianConfig;
|
|
31
|
-
export declare function saveConfig(config: ShennianConfig): void;
|
|
32
|
-
export declare function ensureDir(): void;
|
|
33
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAE9D;AAED,eAAO,MAAM,UAAU,QAAqC,CAAA;AAE5D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;QACjB,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;QACvB,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC/C,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;CACzC,CAAA;AAED,wBAAgB,UAAU,IAAI,cAAc,CAO3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAGvD;AAED,wBAAgB,SAAS,IAAI,IAAI,CAGhC"}
|
package/dist/src/config/index.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import os from 'node:os';
|
|
4
|
-
export function getShennianDir() {
|
|
5
|
-
const customHome = process.env.SHENNIAN_HOME?.trim();
|
|
6
|
-
if (customHome)
|
|
7
|
-
return path.resolve(customHome);
|
|
8
|
-
return path.join(os.homedir(), '.shennian');
|
|
9
|
-
}
|
|
10
|
-
export function resolveShennianPath(...parts) {
|
|
11
|
-
return path.join(getShennianDir(), ...parts);
|
|
12
|
-
}
|
|
13
|
-
export const configPath = resolveShennianPath('config.json');
|
|
14
|
-
export function loadConfig() {
|
|
15
|
-
try {
|
|
16
|
-
if (!fs.existsSync(configPath))
|
|
17
|
-
return {};
|
|
18
|
-
return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return {};
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
export function saveConfig(config) {
|
|
25
|
-
fs.mkdirSync(getShennianDir(), { recursive: true });
|
|
26
|
-
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
27
|
-
}
|
|
28
|
-
export function ensureDir() {
|
|
29
|
-
fs.mkdirSync(getShennianDir(), { recursive: true });
|
|
30
|
-
fs.mkdirSync(resolveShennianPath('sessions'), { recursive: true });
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,MAAM,UAAU,cAAc;IAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAA;IACpD,IAAI,UAAU;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAG,KAAe;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,KAAK,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;AA8B5D,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,CAAA;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAsB;IAC/C,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACpE,CAAC"}
|
package/dist/src/fs/handler.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { FsEntry, FsTransferRequest, FsChunk } from '@shennian/wire';
|
|
2
|
-
export type TransferProgress = {
|
|
3
|
-
transferId: string;
|
|
4
|
-
seq: number;
|
|
5
|
-
total: number;
|
|
6
|
-
bytesSent: number;
|
|
7
|
-
bytesTotal: number;
|
|
8
|
-
};
|
|
9
|
-
export declare function handleFsLs(reqPath: string): {
|
|
10
|
-
entries: FsEntry[];
|
|
11
|
-
} | {
|
|
12
|
-
error: string;
|
|
13
|
-
};
|
|
14
|
-
export declare function handleFsRead(reqPath: string): {
|
|
15
|
-
path: string;
|
|
16
|
-
content: string;
|
|
17
|
-
} | {
|
|
18
|
-
error: string;
|
|
19
|
-
};
|
|
20
|
-
export declare function handleFsDownload(req: FsTransferRequest, onProgress?: (progress: TransferProgress) => void): AsyncGenerator<FsChunk>;
|
|
21
|
-
export declare function handleFsUploadInit(req: FsTransferRequest): {
|
|
22
|
-
targetPath: string;
|
|
23
|
-
} | {
|
|
24
|
-
error: string;
|
|
25
|
-
};
|
|
26
|
-
export declare function handleFsUploadChunk(targetPath: string, chunk: FsChunk): void;
|
|
27
|
-
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/fs/handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AASzE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAsBD,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CA6B5C;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAmBvD;AAED,wBAAuB,gBAAgB,CACrC,GAAG,EAAE,iBAAiB,EACtB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAChD,cAAc,CAAC,OAAO,CAAC,CA0CzB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,iBAAiB,GACrB;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAmB5C;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GACb,IAAI,CAIN"}
|
package/dist/src/fs/handler.js
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import os from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { normalizePath, isPathSafe } from './security.js';
|
|
5
|
-
const FILE_SYSTEM_ROOTS_PATH = '__roots__';
|
|
6
|
-
const MAX_READ_SIZE = 100 * 1024;
|
|
7
|
-
const MAX_TRANSFER_SIZE = 20 * 1024 * 1024;
|
|
8
|
-
const CHUNK_SIZE = 64 * 1024;
|
|
9
|
-
const RATE_LIMIT_BYTES_PER_SEC = 5 * 1024 * 1024;
|
|
10
|
-
function sleep(ms) {
|
|
11
|
-
return new Promise((r) => setTimeout(r, ms));
|
|
12
|
-
}
|
|
13
|
-
function listFileSystemRoots() {
|
|
14
|
-
if (os.platform() === 'win32') {
|
|
15
|
-
const entries = [];
|
|
16
|
-
for (let code = 65; code <= 90; code += 1) {
|
|
17
|
-
const drive = `${String.fromCharCode(code)}:\\`;
|
|
18
|
-
if (!fs.existsSync(drive))
|
|
19
|
-
continue;
|
|
20
|
-
entries.push({ name: drive, path: drive, isDir: true });
|
|
21
|
-
}
|
|
22
|
-
return { entries };
|
|
23
|
-
}
|
|
24
|
-
return { entries: [{ name: '/', path: '/', isDir: true }] };
|
|
25
|
-
}
|
|
26
|
-
export function handleFsLs(reqPath) {
|
|
27
|
-
if (reqPath === FILE_SYSTEM_ROOTS_PATH) {
|
|
28
|
-
return listFileSystemRoots();
|
|
29
|
-
}
|
|
30
|
-
const normalized = normalizePath(reqPath);
|
|
31
|
-
if (!isPathSafe(normalized)) {
|
|
32
|
-
return { error: `Access denied: ${reqPath}` };
|
|
33
|
-
}
|
|
34
|
-
try {
|
|
35
|
-
const dirents = fs.readdirSync(normalized, { withFileTypes: true });
|
|
36
|
-
const entries = dirents.map((d) => {
|
|
37
|
-
const fullPath = path.join(normalized, d.name);
|
|
38
|
-
const isDir = d.isDirectory();
|
|
39
|
-
const entry = { name: d.name, path: fullPath, isDir };
|
|
40
|
-
try {
|
|
41
|
-
const stat = fs.statSync(fullPath);
|
|
42
|
-
entry.size = isDir ? undefined : stat.size;
|
|
43
|
-
entry.modifiedAt = stat.mtimeMs;
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
// stat failure is non-fatal
|
|
47
|
-
}
|
|
48
|
-
return entry;
|
|
49
|
-
});
|
|
50
|
-
return { entries };
|
|
51
|
-
}
|
|
52
|
-
catch (err) {
|
|
53
|
-
return { error: `Failed to list ${reqPath}: ${err.message}` };
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
export function handleFsRead(reqPath) {
|
|
57
|
-
const normalized = normalizePath(reqPath);
|
|
58
|
-
if (!isPathSafe(normalized)) {
|
|
59
|
-
return { error: `Access denied: ${reqPath}` };
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
const stat = fs.statSync(normalized);
|
|
63
|
-
if (stat.isDirectory()) {
|
|
64
|
-
return { error: `Not a file: ${reqPath}` };
|
|
65
|
-
}
|
|
66
|
-
if (stat.size > MAX_READ_SIZE) {
|
|
67
|
-
return { error: `File too large (${stat.size} bytes, max ${MAX_READ_SIZE})` };
|
|
68
|
-
}
|
|
69
|
-
const content = fs.readFileSync(normalized, 'utf-8');
|
|
70
|
-
return { path: normalized, content };
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
73
|
-
return { error: `Failed to read ${reqPath}: ${err.message}` };
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
export async function* handleFsDownload(req, onProgress) {
|
|
77
|
-
const filePath = req.path;
|
|
78
|
-
if (!filePath) {
|
|
79
|
-
throw new Error('Missing path for download');
|
|
80
|
-
}
|
|
81
|
-
const normalized = normalizePath(filePath);
|
|
82
|
-
if (!isPathSafe(normalized)) {
|
|
83
|
-
throw new Error(`Access denied: ${filePath}`);
|
|
84
|
-
}
|
|
85
|
-
const stat = fs.statSync(normalized);
|
|
86
|
-
if (stat.size > MAX_TRANSFER_SIZE) {
|
|
87
|
-
throw new Error(`File too large (${stat.size} bytes, max ${MAX_TRANSFER_SIZE})`);
|
|
88
|
-
}
|
|
89
|
-
const buf = fs.readFileSync(normalized);
|
|
90
|
-
const total = Math.ceil(buf.length / CHUNK_SIZE);
|
|
91
|
-
const chunksPerSec = Math.floor(RATE_LIMIT_BYTES_PER_SEC / CHUNK_SIZE);
|
|
92
|
-
const delayMs = chunksPerSec > 0 ? Math.ceil(1000 / chunksPerSec) : 0;
|
|
93
|
-
for (let seq = 0; seq < total; seq++) {
|
|
94
|
-
const start = seq * CHUNK_SIZE;
|
|
95
|
-
const end = Math.min(start + CHUNK_SIZE, buf.length);
|
|
96
|
-
const data = buf.subarray(start, end).toString('base64');
|
|
97
|
-
yield { transferId: req.transferId, seq, total, data };
|
|
98
|
-
onProgress?.({
|
|
99
|
-
transferId: req.transferId,
|
|
100
|
-
seq,
|
|
101
|
-
total,
|
|
102
|
-
bytesSent: end,
|
|
103
|
-
bytesTotal: buf.length,
|
|
104
|
-
});
|
|
105
|
-
if (delayMs > 0 && seq < total - 1) {
|
|
106
|
-
await sleep(delayMs);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
export function handleFsUploadInit(req) {
|
|
111
|
-
const targetPath = req.targetPath ?? req.path;
|
|
112
|
-
if (!targetPath) {
|
|
113
|
-
return { error: 'Missing targetPath for upload' };
|
|
114
|
-
}
|
|
115
|
-
const normalized = normalizePath(targetPath);
|
|
116
|
-
if (!isPathSafe(normalized)) {
|
|
117
|
-
return { error: `Access denied: ${targetPath}` };
|
|
118
|
-
}
|
|
119
|
-
if (req.size != null && req.size > MAX_TRANSFER_SIZE) {
|
|
120
|
-
return { error: `File too large (${req.size} bytes, max ${MAX_TRANSFER_SIZE})` };
|
|
121
|
-
}
|
|
122
|
-
const dir = path.dirname(normalized);
|
|
123
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
124
|
-
return { targetPath: normalized };
|
|
125
|
-
}
|
|
126
|
-
export function handleFsUploadChunk(targetPath, chunk) {
|
|
127
|
-
const buf = Buffer.from(chunk.data, 'base64');
|
|
128
|
-
const flag = chunk.seq === 0 ? 'w' : 'a';
|
|
129
|
-
fs.writeFileSync(targetPath, buf, { flag });
|
|
130
|
-
}
|
|
131
|
-
//# sourceMappingURL=handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/fs/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAEzD,MAAM,sBAAsB,GAAG,WAAW,CAAA;AAC1C,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAA;AAChC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAC1C,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAA;AAC5B,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAUhD,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAC9C,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAc,EAAE,CAAA;QAE7B,KAAK,IAAI,IAAI,GAAG,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAA;YAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,SAAQ;YACnC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAA;IACpB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,OAAe;IAEf,IAAI,OAAO,KAAK,sBAAsB,EAAE,CAAC;QACvC,OAAO,mBAAmB,EAAE,CAAA;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,kBAAkB,OAAO,EAAE,EAAE,CAAA;IAC/C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QACnE,MAAM,OAAO,GAAc,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;YAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;YAC7B,MAAM,KAAK,GAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;YAC9D,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBAClC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;gBAC1C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,OAAO,EAAE,CAAA;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,kBAAkB,OAAO,KAAM,GAAa,CAAC,OAAO,EAAE,EAAE,CAAA;IAC1E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAe;IAEf,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,kBAAkB,OAAO,EAAE,EAAE,CAAA;IAC/C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,EAAE,KAAK,EAAE,eAAe,OAAO,EAAE,EAAE,CAAA;QAC5C,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,mBAAmB,IAAI,CAAC,IAAI,eAAe,aAAa,GAAG,EAAE,CAAA;QAC/E,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACpD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,kBAAkB,OAAO,KAAM,GAAa,CAAC,OAAO,EAAE,EAAE,CAAA;IAC1E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,gBAAgB,CACrC,GAAsB,EACtB,UAAiD;IAEjD,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAA;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAC9C,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC1C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,CAAC,IAAI,eAAe,iBAAiB,GAAG,CAChE,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,CAAA;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,UAAU,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAErE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,GAAG,GAAG,UAAU,CAAA;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAExD,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QAEtD,UAAU,EAAE,CAAC;YACX,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,GAAG;YACH,KAAK;YACL,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,GAAG,CAAC,MAAM;SACvB,CAAC,CAAA;QAEF,IAAI,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAsB;IAEtB,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,CAAA;IAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;IACnD,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,kBAAkB,UAAU,EAAE,EAAE,CAAA;IAClD,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,mBAAmB,GAAG,CAAC,IAAI,eAAe,iBAAiB,GAAG,EAAE,CAAA;IAClF,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEtC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,KAAc;IAEd,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IACxC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;AAC7C,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { AgentType } from '@shennian/wire';
|
|
2
|
-
export declare function saveTempFile(name: string, data: Buffer): string;
|
|
3
|
-
export declare function buildAgentFileArgs(agentType: AgentType, filePaths: string[]): string[];
|
|
4
|
-
export declare function cleanupTempFiles(): void;
|
|
5
|
-
//# sourceMappingURL=multimodal.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"multimodal.d.ts","sourceRoot":"","sources":["../../../src/fs/multimodal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAU/C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,EAAE,GAClB,MAAM,EAAE,CAoBV;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import os from 'node:os';
|
|
4
|
-
const TEMP_DIR = path.join(os.tmpdir(), 'shennian');
|
|
5
|
-
const IMAGE_EXTS = new Set(['.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg']);
|
|
6
|
-
function isImage(filePath) {
|
|
7
|
-
return IMAGE_EXTS.has(path.extname(filePath).toLowerCase());
|
|
8
|
-
}
|
|
9
|
-
export function saveTempFile(name, data) {
|
|
10
|
-
fs.mkdirSync(TEMP_DIR, { recursive: true });
|
|
11
|
-
const dest = path.join(TEMP_DIR, name);
|
|
12
|
-
fs.writeFileSync(dest, data);
|
|
13
|
-
return dest;
|
|
14
|
-
}
|
|
15
|
-
export function buildAgentFileArgs(agentType, filePaths) {
|
|
16
|
-
if (filePaths.length === 0)
|
|
17
|
-
return [];
|
|
18
|
-
switch (agentType) {
|
|
19
|
-
case 'claude':
|
|
20
|
-
return filePaths.flatMap((p) => ['--file', p]);
|
|
21
|
-
case 'cursor':
|
|
22
|
-
return filePaths.flatMap((p) => isImage(p) ? ['--image', p] : ['--file', p]);
|
|
23
|
-
case 'gemini':
|
|
24
|
-
case 'codex':
|
|
25
|
-
case 'openclaw':
|
|
26
|
-
return [];
|
|
27
|
-
default:
|
|
28
|
-
return [];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
export function cleanupTempFiles() {
|
|
32
|
-
try {
|
|
33
|
-
fs.rmSync(TEMP_DIR, { recursive: true, force: true });
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
// best-effort cleanup
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=multimodal.js.map
|