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.
Files changed (286) hide show
  1. package/package.json +3 -2
  2. package/dist/bin/shennian.d.ts +0 -3
  3. package/dist/bin/shennian.d.ts.map +0 -1
  4. package/dist/bin/shennian.js +0 -3
  5. package/dist/bin/shennian.js.map +0 -1
  6. package/dist/src/__experiments__/probe-debug.d.ts +0 -2
  7. package/dist/src/__experiments__/probe-debug.d.ts.map +0 -1
  8. package/dist/src/__experiments__/probe-debug.js +0 -66
  9. package/dist/src/__experiments__/probe-debug.js.map +0 -1
  10. package/dist/src/__experiments__/probe-final-benchmark.d.ts +0 -3
  11. package/dist/src/__experiments__/probe-final-benchmark.d.ts.map +0 -1
  12. package/dist/src/__experiments__/probe-final-benchmark.js +0 -234
  13. package/dist/src/__experiments__/probe-final-benchmark.js.map +0 -1
  14. package/dist/src/__experiments__/probe-models-final.d.ts +0 -19
  15. package/dist/src/__experiments__/probe-models-final.d.ts.map +0 -1
  16. package/dist/src/__experiments__/probe-models-final.js +0 -250
  17. package/dist/src/__experiments__/probe-models-final.js.map +0 -1
  18. package/dist/src/__experiments__/probe-models.d.ts +0 -7
  19. package/dist/src/__experiments__/probe-models.d.ts.map +0 -1
  20. package/dist/src/__experiments__/probe-models.js +0 -251
  21. package/dist/src/__experiments__/probe-models.js.map +0 -1
  22. package/dist/src/__tests__/agents-e2e.d.ts +0 -21
  23. package/dist/src/__tests__/agents-e2e.d.ts.map +0 -1
  24. package/dist/src/__tests__/agents-e2e.js +0 -155
  25. package/dist/src/__tests__/agents-e2e.js.map +0 -1
  26. package/dist/src/__tests__/claude-adapter.test.d.ts +0 -2
  27. package/dist/src/__tests__/claude-adapter.test.d.ts.map +0 -1
  28. package/dist/src/__tests__/claude-adapter.test.js +0 -75
  29. package/dist/src/__tests__/claude-adapter.test.js.map +0 -1
  30. package/dist/src/__tests__/codex-adapter.test.d.ts +0 -2
  31. package/dist/src/__tests__/codex-adapter.test.d.ts.map +0 -1
  32. package/dist/src/__tests__/codex-adapter.test.js +0 -281
  33. package/dist/src/__tests__/codex-adapter.test.js.map +0 -1
  34. package/dist/src/__tests__/config.test.d.ts +0 -2
  35. package/dist/src/__tests__/config.test.d.ts.map +0 -1
  36. package/dist/src/__tests__/config.test.js +0 -60
  37. package/dist/src/__tests__/config.test.js.map +0 -1
  38. package/dist/src/__tests__/cursor-adapter.test.d.ts +0 -2
  39. package/dist/src/__tests__/cursor-adapter.test.d.ts.map +0 -1
  40. package/dist/src/__tests__/cursor-adapter.test.js +0 -69
  41. package/dist/src/__tests__/cursor-adapter.test.js.map +0 -1
  42. package/dist/src/__tests__/custom-agent-flow.test.d.ts +0 -2
  43. package/dist/src/__tests__/custom-agent-flow.test.d.ts.map +0 -1
  44. package/dist/src/__tests__/custom-agent-flow.test.js +0 -244
  45. package/dist/src/__tests__/custom-agent-flow.test.js.map +0 -1
  46. package/dist/src/__tests__/daemon-autostart.test.d.ts +0 -2
  47. package/dist/src/__tests__/daemon-autostart.test.d.ts.map +0 -1
  48. package/dist/src/__tests__/daemon-autostart.test.js +0 -60
  49. package/dist/src/__tests__/daemon-autostart.test.js.map +0 -1
  50. package/dist/src/__tests__/e2e-relay.d.ts +0 -19
  51. package/dist/src/__tests__/e2e-relay.d.ts.map +0 -1
  52. package/dist/src/__tests__/e2e-relay.js +0 -400
  53. package/dist/src/__tests__/e2e-relay.js.map +0 -1
  54. package/dist/src/__tests__/fs-handler.test.d.ts +0 -2
  55. package/dist/src/__tests__/fs-handler.test.d.ts.map +0 -1
  56. package/dist/src/__tests__/fs-handler.test.js +0 -19
  57. package/dist/src/__tests__/fs-handler.test.js.map +0 -1
  58. package/dist/src/__tests__/model-discovery.test.d.ts +0 -2
  59. package/dist/src/__tests__/model-discovery.test.d.ts.map +0 -1
  60. package/dist/src/__tests__/model-discovery.test.js +0 -47
  61. package/dist/src/__tests__/model-discovery.test.js.map +0 -1
  62. package/dist/src/__tests__/model-switching.test.d.ts +0 -2
  63. package/dist/src/__tests__/model-switching.test.d.ts.map +0 -1
  64. package/dist/src/__tests__/model-switching.test.js +0 -292
  65. package/dist/src/__tests__/model-switching.test.js.map +0 -1
  66. package/dist/src/__tests__/native-fusion-parsers.test.d.ts +0 -2
  67. package/dist/src/__tests__/native-fusion-parsers.test.d.ts.map +0 -1
  68. package/dist/src/__tests__/native-fusion-parsers.test.js +0 -253
  69. package/dist/src/__tests__/native-fusion-parsers.test.js.map +0 -1
  70. package/dist/src/__tests__/native-fusion-service.test.d.ts +0 -2
  71. package/dist/src/__tests__/native-fusion-service.test.d.ts.map +0 -1
  72. package/dist/src/__tests__/native-fusion-service.test.js +0 -157
  73. package/dist/src/__tests__/native-fusion-service.test.js.map +0 -1
  74. package/dist/src/__tests__/native-session-sync.test.d.ts +0 -2
  75. package/dist/src/__tests__/native-session-sync.test.d.ts.map +0 -1
  76. package/dist/src/__tests__/native-session-sync.test.js +0 -198
  77. package/dist/src/__tests__/native-session-sync.test.js.map +0 -1
  78. package/dist/src/__tests__/pair-qr.test.d.ts +0 -2
  79. package/dist/src/__tests__/pair-qr.test.d.ts.map +0 -1
  80. package/dist/src/__tests__/pair-qr.test.js +0 -13
  81. package/dist/src/__tests__/pair-qr.test.js.map +0 -1
  82. package/dist/src/__tests__/pi-context.test.d.ts +0 -2
  83. package/dist/src/__tests__/pi-context.test.d.ts.map +0 -1
  84. package/dist/src/__tests__/pi-context.test.js +0 -261
  85. package/dist/src/__tests__/pi-context.test.js.map +0 -1
  86. package/dist/src/__tests__/session-manager.test.d.ts +0 -2
  87. package/dist/src/__tests__/session-manager.test.d.ts.map +0 -1
  88. package/dist/src/__tests__/session-manager.test.js +0 -685
  89. package/dist/src/__tests__/session-manager.test.js.map +0 -1
  90. package/dist/src/__tests__/session-store.test.d.ts +0 -2
  91. package/dist/src/__tests__/session-store.test.d.ts.map +0 -1
  92. package/dist/src/__tests__/session-store.test.js +0 -106
  93. package/dist/src/__tests__/session-store.test.js.map +0 -1
  94. package/dist/src/agents/adapter.d.ts +0 -36
  95. package/dist/src/agents/adapter.d.ts.map +0 -1
  96. package/dist/src/agents/adapter.js +0 -20
  97. package/dist/src/agents/adapter.js.map +0 -1
  98. package/dist/src/agents/claude.d.ts +0 -25
  99. package/dist/src/agents/claude.d.ts.map +0 -1
  100. package/dist/src/agents/claude.js +0 -228
  101. package/dist/src/agents/claude.js.map +0 -1
  102. package/dist/src/agents/codex.d.ts +0 -50
  103. package/dist/src/agents/codex.d.ts.map +0 -1
  104. package/dist/src/agents/codex.js +0 -785
  105. package/dist/src/agents/codex.js.map +0 -1
  106. package/dist/src/agents/command-spec.d.ts +0 -11
  107. package/dist/src/agents/command-spec.d.ts.map +0 -1
  108. package/dist/src/agents/command-spec.js +0 -62
  109. package/dist/src/agents/command-spec.js.map +0 -1
  110. package/dist/src/agents/cursor.d.ts +0 -23
  111. package/dist/src/agents/cursor.d.ts.map +0 -1
  112. package/dist/src/agents/cursor.js +0 -250
  113. package/dist/src/agents/cursor.js.map +0 -1
  114. package/dist/src/agents/custom.d.ts +0 -36
  115. package/dist/src/agents/custom.d.ts.map +0 -1
  116. package/dist/src/agents/custom.js +0 -246
  117. package/dist/src/agents/custom.js.map +0 -1
  118. package/dist/src/agents/detect.d.ts +0 -10
  119. package/dist/src/agents/detect.d.ts.map +0 -1
  120. package/dist/src/agents/detect.js +0 -47
  121. package/dist/src/agents/detect.js.map +0 -1
  122. package/dist/src/agents/gemini.d.ts +0 -18
  123. package/dist/src/agents/gemini.d.ts.map +0 -1
  124. package/dist/src/agents/gemini.js +0 -168
  125. package/dist/src/agents/gemini.js.map +0 -1
  126. package/dist/src/agents/model-registry/cache.d.ts +0 -5
  127. package/dist/src/agents/model-registry/cache.d.ts.map +0 -1
  128. package/dist/src/agents/model-registry/cache.js +0 -38
  129. package/dist/src/agents/model-registry/cache.js.map +0 -1
  130. package/dist/src/agents/model-registry/discovery.d.ts +0 -5
  131. package/dist/src/agents/model-registry/discovery.d.ts.map +0 -1
  132. package/dist/src/agents/model-registry/discovery.js +0 -202
  133. package/dist/src/agents/model-registry/discovery.js.map +0 -1
  134. package/dist/src/agents/model-registry/parsers.d.ts +0 -9
  135. package/dist/src/agents/model-registry/parsers.d.ts.map +0 -1
  136. package/dist/src/agents/model-registry/parsers.js +0 -259
  137. package/dist/src/agents/model-registry/parsers.js.map +0 -1
  138. package/dist/src/agents/model-registry/runner.d.ts +0 -11
  139. package/dist/src/agents/model-registry/runner.d.ts.map +0 -1
  140. package/dist/src/agents/model-registry/runner.js +0 -160
  141. package/dist/src/agents/model-registry/runner.js.map +0 -1
  142. package/dist/src/agents/model-registry/service.d.ts +0 -7
  143. package/dist/src/agents/model-registry/service.d.ts.map +0 -1
  144. package/dist/src/agents/model-registry/service.js +0 -69
  145. package/dist/src/agents/model-registry/service.js.map +0 -1
  146. package/dist/src/agents/model-registry/types.d.ts +0 -31
  147. package/dist/src/agents/model-registry/types.d.ts.map +0 -1
  148. package/dist/src/agents/model-registry/types.js +0 -9
  149. package/dist/src/agents/model-registry/types.js.map +0 -1
  150. package/dist/src/agents/model-registry.d.ts +0 -13
  151. package/dist/src/agents/model-registry.d.ts.map +0 -1
  152. package/dist/src/agents/model-registry.js +0 -15
  153. package/dist/src/agents/model-registry.js.map +0 -1
  154. package/dist/src/agents/openclaw.d.ts +0 -21
  155. package/dist/src/agents/openclaw.d.ts.map +0 -1
  156. package/dist/src/agents/openclaw.js +0 -264
  157. package/dist/src/agents/openclaw.js.map +0 -1
  158. package/dist/src/agents/pi.d.ts +0 -52
  159. package/dist/src/agents/pi.d.ts.map +0 -1
  160. package/dist/src/agents/pi.js +0 -794
  161. package/dist/src/agents/pi.js.map +0 -1
  162. package/dist/src/commands/agent.d.ts +0 -3
  163. package/dist/src/commands/agent.d.ts.map +0 -1
  164. package/dist/src/commands/agent.js +0 -162
  165. package/dist/src/commands/agent.js.map +0 -1
  166. package/dist/src/commands/daemon.d.ts +0 -30
  167. package/dist/src/commands/daemon.d.ts.map +0 -1
  168. package/dist/src/commands/daemon.js +0 -477
  169. package/dist/src/commands/daemon.js.map +0 -1
  170. package/dist/src/commands/pair-qr.d.ts +0 -5
  171. package/dist/src/commands/pair-qr.d.ts.map +0 -1
  172. package/dist/src/commands/pair-qr.js +0 -7
  173. package/dist/src/commands/pair-qr.js.map +0 -1
  174. package/dist/src/commands/pair.d.ts +0 -9
  175. package/dist/src/commands/pair.d.ts.map +0 -1
  176. package/dist/src/commands/pair.js +0 -163
  177. package/dist/src/commands/pair.js.map +0 -1
  178. package/dist/src/commands/upgrade.d.ts +0 -6
  179. package/dist/src/commands/upgrade.d.ts.map +0 -1
  180. package/dist/src/commands/upgrade.js +0 -146
  181. package/dist/src/commands/upgrade.js.map +0 -1
  182. package/dist/src/config/index.d.ts +0 -33
  183. package/dist/src/config/index.d.ts.map +0 -1
  184. package/dist/src/config/index.js +0 -32
  185. package/dist/src/config/index.js.map +0 -1
  186. package/dist/src/fs/handler.d.ts +0 -27
  187. package/dist/src/fs/handler.d.ts.map +0 -1
  188. package/dist/src/fs/handler.js +0 -131
  189. package/dist/src/fs/handler.js.map +0 -1
  190. package/dist/src/fs/multimodal.d.ts +0 -5
  191. package/dist/src/fs/multimodal.d.ts.map +0 -1
  192. package/dist/src/fs/multimodal.js +0 -39
  193. package/dist/src/fs/multimodal.js.map +0 -1
  194. package/dist/src/fs/security.d.ts +0 -3
  195. package/dist/src/fs/security.d.ts.map +0 -1
  196. package/dist/src/fs/security.js +0 -28
  197. package/dist/src/fs/security.js.map +0 -1
  198. package/dist/src/index.d.ts +0 -2
  199. package/dist/src/index.d.ts.map +0 -1
  200. package/dist/src/index.js +0 -251
  201. package/dist/src/index.js.map +0 -1
  202. package/dist/src/log-reporter.d.ts +0 -19
  203. package/dist/src/log-reporter.d.ts.map +0 -1
  204. package/dist/src/log-reporter.js +0 -34
  205. package/dist/src/log-reporter.js.map +0 -1
  206. package/dist/src/native-fusion/parsers.d.ts +0 -13
  207. package/dist/src/native-fusion/parsers.d.ts.map +0 -1
  208. package/dist/src/native-fusion/parsers.js +0 -371
  209. package/dist/src/native-fusion/parsers.js.map +0 -1
  210. package/dist/src/native-fusion/service.d.ts +0 -26
  211. package/dist/src/native-fusion/service.d.ts.map +0 -1
  212. package/dist/src/native-fusion/service.js +0 -167
  213. package/dist/src/native-fusion/service.js.map +0 -1
  214. package/dist/src/native-fusion/state.d.ts +0 -4
  215. package/dist/src/native-fusion/state.d.ts.map +0 -1
  216. package/dist/src/native-fusion/state.js +0 -23
  217. package/dist/src/native-fusion/state.js.map +0 -1
  218. package/dist/src/native-fusion/types.d.ts +0 -25
  219. package/dist/src/native-fusion/types.d.ts.map +0 -1
  220. package/dist/src/native-fusion/types.js +0 -2
  221. package/dist/src/native-fusion/types.js.map +0 -1
  222. package/dist/src/native-sync/discover.d.ts +0 -6
  223. package/dist/src/native-sync/discover.d.ts.map +0 -1
  224. package/dist/src/native-sync/discover.js +0 -69
  225. package/dist/src/native-sync/discover.js.map +0 -1
  226. package/dist/src/native-sync/parsers.d.ts +0 -3
  227. package/dist/src/native-sync/parsers.d.ts.map +0 -1
  228. package/dist/src/native-sync/parsers.js +0 -373
  229. package/dist/src/native-sync/parsers.js.map +0 -1
  230. package/dist/src/native-sync/service.d.ts +0 -16
  231. package/dist/src/native-sync/service.d.ts.map +0 -1
  232. package/dist/src/native-sync/service.js +0 -95
  233. package/dist/src/native-sync/service.js.map +0 -1
  234. package/dist/src/native-sync/state.d.ts +0 -6
  235. package/dist/src/native-sync/state.d.ts.map +0 -1
  236. package/dist/src/native-sync/state.js +0 -34
  237. package/dist/src/native-sync/state.js.map +0 -1
  238. package/dist/src/native-sync/types.d.ts +0 -23
  239. package/dist/src/native-sync/types.d.ts.map +0 -1
  240. package/dist/src/native-sync/types.js +0 -4
  241. package/dist/src/native-sync/types.js.map +0 -1
  242. package/dist/src/region.d.ts +0 -16
  243. package/dist/src/region.d.ts.map +0 -1
  244. package/dist/src/region.js +0 -100
  245. package/dist/src/region.js.map +0 -1
  246. package/dist/src/relay/client.d.ts +0 -53
  247. package/dist/src/relay/client.d.ts.map +0 -1
  248. package/dist/src/relay/client.js +0 -293
  249. package/dist/src/relay/client.js.map +0 -1
  250. package/dist/src/session/handlers/agents.d.ts +0 -5
  251. package/dist/src/session/handlers/agents.d.ts.map +0 -1
  252. package/dist/src/session/handlers/agents.js +0 -56
  253. package/dist/src/session/handlers/agents.js.map +0 -1
  254. package/dist/src/session/handlers/chat.d.ts +0 -5
  255. package/dist/src/session/handlers/chat.d.ts.map +0 -1
  256. package/dist/src/session/handlers/chat.js +0 -327
  257. package/dist/src/session/handlers/chat.js.map +0 -1
  258. package/dist/src/session/handlers/control.d.ts +0 -6
  259. package/dist/src/session/handlers/control.d.ts.map +0 -1
  260. package/dist/src/session/handlers/control.js +0 -58
  261. package/dist/src/session/handlers/control.js.map +0 -1
  262. package/dist/src/session/handlers/fs.d.ts +0 -11
  263. package/dist/src/session/handlers/fs.d.ts.map +0 -1
  264. package/dist/src/session/handlers/fs.js +0 -253
  265. package/dist/src/session/handlers/fs.js.map +0 -1
  266. package/dist/src/session/handlers/queue.d.ts +0 -4
  267. package/dist/src/session/handlers/queue.d.ts.map +0 -1
  268. package/dist/src/session/handlers/queue.js +0 -66
  269. package/dist/src/session/handlers/queue.js.map +0 -1
  270. package/dist/src/session/manager.d.ts +0 -28
  271. package/dist/src/session/manager.d.ts.map +0 -1
  272. package/dist/src/session/manager.js +0 -155
  273. package/dist/src/session/manager.js.map +0 -1
  274. package/dist/src/session/store.d.ts +0 -8
  275. package/dist/src/session/store.d.ts.map +0 -1
  276. package/dist/src/session/store.js +0 -47
  277. package/dist/src/session/store.js.map +0 -1
  278. package/dist/src/session/types.d.ts +0 -36
  279. package/dist/src/session/types.d.ts.map +0 -1
  280. package/dist/src/session/types.js +0 -5
  281. package/dist/src/session/types.js.map +0 -1
  282. package/dist/src/upgrade/engine.d.ts +0 -65
  283. package/dist/src/upgrade/engine.d.ts.map +0 -1
  284. package/dist/src/upgrade/engine.js +0 -239
  285. package/dist/src/upgrade/engine.js.map +0 -1
  286. 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"}
@@ -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"}
@@ -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"}
@@ -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":"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"}
@@ -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