shipmyagent 1.0.243 → 1.0.246
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/bin/main/server/commands/Index.js +366 -12
- package/bin/main/server/commands/Index.js.map +1 -1
- package/bin/main/server/commands/Init.d.ts.map +1 -1
- package/bin/main/server/commands/Init.js +14 -15
- package/bin/main/server/commands/Init.js.map +1 -1
- package/bin/main/server/commands/Status.d.ts.map +1 -0
- package/bin/main/server/commands/Status.js +77 -0
- package/bin/main/server/commands/Status.js.map +1 -0
- package/bin/main/server/daemon/Manager.d.ts.map +1 -1
- package/bin/main/server/daemon/Manager.js +25 -0
- package/bin/main/server/daemon/Manager.js.map +1 -1
- package/bin/main/server/manager/AgentRegistry.d.ts.map +1 -0
- package/bin/main/server/manager/AgentRegistry.js +162 -0
- package/bin/main/server/manager/AgentRegistry.js.map +1 -0
- package/bin/main/types/Manager.d.ts.map +1 -0
- package/bin/main/types/Manager.js +9 -0
- package/bin/main/types/Manager.js.map +1 -0
- package/bin/main/types/Start.d.ts.map +1 -1
- package/bin/main/types/Start.js +2 -0
- package/bin/main/types/Start.js.map +1 -1
- package/bin/services/skills/Command.js +6 -6
- package/bin/services/skills/Command.js.map +1 -1
- package/bin/services/skills/runtime/Discovery.js +1 -1
- package/bin/services/skills/runtime/Paths.js +3 -3
- package/bin/services/skills/runtime/Paths.js.map +1 -1
- package/bin/utils/logger/Format.d.ts.map +1 -1
- package/bin/utils/logger/Format.js +9 -4
- package/bin/utils/logger/Format.js.map +1 -1
- package/package.json +1 -1
- package/test/logger/format.test.mjs +31 -12
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
* CLI 程序入口模块。
|
|
4
4
|
*
|
|
5
5
|
* 职责说明:
|
|
6
|
-
* 1. 组装所有一级命令(init/agent/config/service/extension)。
|
|
6
|
+
* 1. 组装所有一级命令(init/agent/config/service/extension/manager)。
|
|
7
7
|
* 2. 统一处理命令行参数解析规则(端口、布尔值)。
|
|
8
8
|
* 3. 处理默认命令回退:未指定已知一级命令时自动转发到 `agent on`。
|
|
9
9
|
*/
|
|
10
|
-
import { readFileSync } from "fs";
|
|
11
|
-
import { basename, dirname, join } from "path";
|
|
10
|
+
import { readFileSync, existsSync } from "fs";
|
|
11
|
+
import { basename, dirname, join, resolve } from "path";
|
|
12
|
+
import os from "os";
|
|
13
|
+
import fs from "fs-extra";
|
|
14
|
+
import { spawn } from "child_process";
|
|
12
15
|
import { fileURLToPath } from "url";
|
|
13
16
|
import { Command } from "commander";
|
|
14
17
|
import { registerConfigCommand } from "./Config.js";
|
|
@@ -18,11 +21,17 @@ import { runCommand } from "./Run.js";
|
|
|
18
21
|
import { registerServicesCommand } from "./Services.js";
|
|
19
22
|
import { registerExtensionsCommand } from "./Extensions.js";
|
|
20
23
|
import { startCommand } from "./Start.js";
|
|
24
|
+
import { statusCommand } from "./Status.js";
|
|
21
25
|
import { stopCommand } from "./Stop.js";
|
|
22
26
|
import { registerAllServicesForCli } from "../../service/ServiceCommand.js";
|
|
23
27
|
import { registerAllExtensionsForCli } from "../../extension/ExtensionCommand.js";
|
|
24
28
|
import { getServiceRootCommandNames, } from "../../service/Manager.js";
|
|
25
29
|
import { getExtensionRootCommandNames } from "../../extension/Manager.js";
|
|
30
|
+
import { cleanupStaleDaemonFiles, getDaemonLogPath, isProcessAlive as isDaemonProcessAlive, readDaemonPid, stopDaemonProcess, } from "../../../main/server/daemon/Manager.js";
|
|
31
|
+
import { getManagerAgentRegistryPath, listManagedAgents, removeManagedAgentEntry, } from "../../../main/server/manager/AgentRegistry.js";
|
|
32
|
+
const MANAGER_DIR = join(os.homedir(), ".ship", "manager");
|
|
33
|
+
const MANAGER_PID_PATH = join(MANAGER_DIR, "manager.pid");
|
|
34
|
+
const MANAGER_LOG_PATH = join(MANAGER_DIR, "manager.log");
|
|
26
35
|
// 在 ES 模块中获取 __dirname
|
|
27
36
|
const __filename = fileURLToPath(import.meta.url);
|
|
28
37
|
const __dirname = dirname(__filename);
|
|
@@ -33,7 +42,7 @@ const program = new Command();
|
|
|
33
42
|
* 在关键运行命令执行前打印当前 sma 版本。
|
|
34
43
|
*
|
|
35
44
|
* 说明(中文)
|
|
36
|
-
* - 仅用于
|
|
45
|
+
* - 仅用于 runtime 相关命令,避免影响 `config --json` 等结构化输出。
|
|
37
46
|
*/
|
|
38
47
|
function withVersionBanner(action) {
|
|
39
48
|
return async (...args) => {
|
|
@@ -62,6 +71,181 @@ function parseBoolean(value) {
|
|
|
62
71
|
return false;
|
|
63
72
|
throw new Error(`Invalid boolean: ${value}`);
|
|
64
73
|
}
|
|
74
|
+
function resolveAgentName(projectRoot) {
|
|
75
|
+
const fallback = basename(projectRoot);
|
|
76
|
+
const shipJsonPath = join(projectRoot, "ship.json");
|
|
77
|
+
if (!existsSync(shipJsonPath))
|
|
78
|
+
return fallback;
|
|
79
|
+
try {
|
|
80
|
+
const raw = readFileSync(shipJsonPath, "utf-8");
|
|
81
|
+
const parsed = JSON.parse(raw);
|
|
82
|
+
if (typeof parsed.name === "string" && parsed.name.trim()) {
|
|
83
|
+
return parsed.name.trim();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// ignore parse errors and fallback to dirname
|
|
88
|
+
}
|
|
89
|
+
return fallback;
|
|
90
|
+
}
|
|
91
|
+
function injectAgentContext(pathInput = ".") {
|
|
92
|
+
const projectRoot = resolve(String(pathInput || "."));
|
|
93
|
+
const agentName = resolveAgentName(projectRoot);
|
|
94
|
+
process.env.SMA_AGENT_PATH = projectRoot;
|
|
95
|
+
process.env.SMA_AGENT_NAME = agentName;
|
|
96
|
+
return { projectRoot, agentName };
|
|
97
|
+
}
|
|
98
|
+
function isManagerProcessAlive(pid) {
|
|
99
|
+
try {
|
|
100
|
+
process.kill(pid, 0);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async function readManagerPid() {
|
|
108
|
+
try {
|
|
109
|
+
const raw = await fs.readFile(MANAGER_PID_PATH, "utf-8");
|
|
110
|
+
const pid = Number.parseInt(String(raw).trim(), 10);
|
|
111
|
+
return Number.isFinite(pid) && pid > 0 ? pid : null;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function startManagerCommand() {
|
|
118
|
+
await fs.ensureDir(MANAGER_DIR);
|
|
119
|
+
const existingPid = await readManagerPid();
|
|
120
|
+
if (existingPid && isManagerProcessAlive(existingPid)) {
|
|
121
|
+
console.log("ℹ️ SMA manager is already running");
|
|
122
|
+
console.log(` pid: ${existingPid}`);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (existingPid) {
|
|
126
|
+
await fs.remove(MANAGER_PID_PATH);
|
|
127
|
+
}
|
|
128
|
+
const cliPath = resolve(__dirname, "./Index.js");
|
|
129
|
+
const logFd = fs.openSync(MANAGER_LOG_PATH, "a");
|
|
130
|
+
const child = spawn(process.execPath, [cliPath, "manager", "run"], {
|
|
131
|
+
cwd: process.cwd(),
|
|
132
|
+
detached: true,
|
|
133
|
+
stdio: ["ignore", logFd, logFd],
|
|
134
|
+
env: {
|
|
135
|
+
...process.env,
|
|
136
|
+
SHIPMYAGENT_MANAGER: "1",
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
child.unref();
|
|
140
|
+
if (!child.pid) {
|
|
141
|
+
throw new Error("Failed to start manager process (missing pid)");
|
|
142
|
+
}
|
|
143
|
+
await fs.writeFile(MANAGER_PID_PATH, String(child.pid), "utf-8");
|
|
144
|
+
console.log("✅ SMA manager started");
|
|
145
|
+
console.log(` pid: ${child.pid}`);
|
|
146
|
+
console.log(` log: ${MANAGER_LOG_PATH}`);
|
|
147
|
+
}
|
|
148
|
+
async function runManagerRuntimeCommand() {
|
|
149
|
+
await fs.ensureDir(MANAGER_DIR);
|
|
150
|
+
await fs.writeFile(MANAGER_PID_PATH, String(process.pid), "utf-8");
|
|
151
|
+
const shutdown = async () => {
|
|
152
|
+
await fs.remove(MANAGER_PID_PATH);
|
|
153
|
+
process.exit(0);
|
|
154
|
+
};
|
|
155
|
+
process.on("SIGINT", () => {
|
|
156
|
+
void shutdown();
|
|
157
|
+
});
|
|
158
|
+
process.on("SIGTERM", () => {
|
|
159
|
+
void shutdown();
|
|
160
|
+
});
|
|
161
|
+
// 极简 manager runtime:仅保持进程存活,提供统一管理入口。
|
|
162
|
+
setInterval(() => {
|
|
163
|
+
// keep alive
|
|
164
|
+
}, 60_000);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* 解析 manager 维护的“正在运行” agent 列表。
|
|
168
|
+
*
|
|
169
|
+
* 关键点(中文)
|
|
170
|
+
* - 先做每个项目的 stale pid 清理,再判活。
|
|
171
|
+
* - 不在运行的记录会从 registry 移除,保持列表语义稳定(仅显示活跃 agent)。
|
|
172
|
+
*/
|
|
173
|
+
async function resolveRunningManagedAgents() {
|
|
174
|
+
const entries = await listManagedAgents();
|
|
175
|
+
const views = [];
|
|
176
|
+
for (const entry of entries) {
|
|
177
|
+
const projectRoot = resolve(String(entry.projectRoot || "").trim() || ".");
|
|
178
|
+
try {
|
|
179
|
+
await cleanupStaleDaemonFiles(projectRoot);
|
|
180
|
+
const daemonPid = await readDaemonPid(projectRoot);
|
|
181
|
+
if (!daemonPid || !isDaemonProcessAlive(daemonPid)) {
|
|
182
|
+
await removeManagedAgentEntry(projectRoot);
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
views.push({
|
|
186
|
+
projectRoot,
|
|
187
|
+
registeredPid: entry.pid,
|
|
188
|
+
daemonPid,
|
|
189
|
+
running: true,
|
|
190
|
+
startedAt: entry.startedAt,
|
|
191
|
+
updatedAt: entry.updatedAt,
|
|
192
|
+
logPath: getDaemonLogPath(projectRoot),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// 关键点(中文):读取异常时移除脏记录,避免后续 list/status 持续噪音。
|
|
197
|
+
try {
|
|
198
|
+
await removeManagedAgentEntry(projectRoot);
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// ignore
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return views.sort((a, b) => a.projectRoot.localeCompare(b.projectRoot));
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* 打印 manager 下活跃 agent 列表。
|
|
209
|
+
*/
|
|
210
|
+
function printRunningManagedAgents(views) {
|
|
211
|
+
if (views.length === 0) {
|
|
212
|
+
console.log("ℹ️ No running agent daemon managed by manager");
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
console.log(`✅ Running agents: ${views.length}`);
|
|
216
|
+
for (const item of views) {
|
|
217
|
+
console.log(`- project: ${item.projectRoot}`);
|
|
218
|
+
console.log(` pid: ${item.daemonPid}`);
|
|
219
|
+
console.log(` startedAt: ${item.startedAt}`);
|
|
220
|
+
console.log(` updatedAt: ${item.updatedAt}`);
|
|
221
|
+
console.log(` log: ${item.logPath}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* `sma manager status`。
|
|
226
|
+
*
|
|
227
|
+
* 关键点(中文)
|
|
228
|
+
* - 同时输出 manager 进程状态 + manager 维护的活跃 agent 列表摘要。
|
|
229
|
+
*/
|
|
230
|
+
async function managerStatusCommand() {
|
|
231
|
+
const managerPid = await readManagerPid();
|
|
232
|
+
const managerRunning = Boolean(managerPid && isManagerProcessAlive(managerPid));
|
|
233
|
+
if (managerPid && !managerRunning) {
|
|
234
|
+
await fs.remove(MANAGER_PID_PATH);
|
|
235
|
+
}
|
|
236
|
+
if (managerRunning) {
|
|
237
|
+
console.log("✅ SMA manager is running");
|
|
238
|
+
console.log(` pid: ${managerPid}`);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
console.log("ℹ️ SMA manager is not running");
|
|
242
|
+
}
|
|
243
|
+
console.log(` pidFile: ${MANAGER_PID_PATH}`);
|
|
244
|
+
console.log(` log: ${MANAGER_LOG_PATH}`);
|
|
245
|
+
console.log(` registry: ${getManagerAgentRegistryPath()}`);
|
|
246
|
+
const runningAgents = await resolveRunningManagedAgents();
|
|
247
|
+
printRunningManagedAgents(runningAgents);
|
|
248
|
+
}
|
|
65
249
|
program
|
|
66
250
|
.name(basename(process.argv[1] || "shipmyagent"))
|
|
67
251
|
.description("把一个代码仓库,启动为一个拥有自主意识和执行能力的 Agent")
|
|
@@ -73,31 +257,176 @@ const init = program
|
|
|
73
257
|
.description("初始化 ShipMyAgent 项目")
|
|
74
258
|
.helpOption("--help", "display help for command")
|
|
75
259
|
.action(initCommand);
|
|
260
|
+
const manager = program
|
|
261
|
+
.command("manager")
|
|
262
|
+
.description("SMA manager internals");
|
|
263
|
+
manager
|
|
264
|
+
.command("run")
|
|
265
|
+
.description("internal manager runtime")
|
|
266
|
+
.action(runManagerRuntimeCommand);
|
|
267
|
+
manager
|
|
268
|
+
.command("status")
|
|
269
|
+
.description("查看 manager 与已托管 agent 运行状态")
|
|
270
|
+
.helpOption("--help", "display help for command")
|
|
271
|
+
.action(withVersionBanner(async () => {
|
|
272
|
+
await managerStatusCommand();
|
|
273
|
+
}));
|
|
274
|
+
const managerAgents = manager
|
|
275
|
+
.command("agents")
|
|
276
|
+
.description("通过 manager 统一管理 agent daemon");
|
|
277
|
+
managerAgents
|
|
278
|
+
.command("list")
|
|
279
|
+
.description("列出 manager 当前托管的活跃 agent daemon")
|
|
280
|
+
.helpOption("--help", "display help for command")
|
|
281
|
+
.option("--json [enabled]", "以 JSON 输出", parseBoolean)
|
|
282
|
+
.action(withVersionBanner(async (options) => {
|
|
283
|
+
const views = await resolveRunningManagedAgents();
|
|
284
|
+
if (options?.json) {
|
|
285
|
+
console.log(JSON.stringify({
|
|
286
|
+
success: true,
|
|
287
|
+
count: views.length,
|
|
288
|
+
agents: views,
|
|
289
|
+
}, null, 2));
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
printRunningManagedAgents(views);
|
|
293
|
+
}));
|
|
294
|
+
managerAgents
|
|
295
|
+
.command("start <path>")
|
|
296
|
+
.description("启动指定项目的 agent daemon(等价于 `sma agent on <path>`)")
|
|
297
|
+
.option("-p, --port <port>", "服务端口(可在 ship.json 的 start.port 配置)", parsePort)
|
|
298
|
+
.option("-h, --host <host>", "服务主机(可在 ship.json 的 start.host 配置)")
|
|
299
|
+
.option("--webui [enabled]", "启动交互式 Web 界面(可在 ship.json 的 start.webui 配置)", parseBoolean)
|
|
300
|
+
.option("--webport <port>", "交互式 Web 界面端口(可在 ship.json 的 start.webport 配置)", parsePort)
|
|
301
|
+
.helpOption("--help", "display help for command")
|
|
302
|
+
.action(withVersionBanner(async (cwd, options) => {
|
|
303
|
+
injectAgentContext(cwd);
|
|
304
|
+
await startCommand(cwd, options);
|
|
305
|
+
}));
|
|
306
|
+
managerAgents
|
|
307
|
+
.command("open <path>")
|
|
308
|
+
.description("启动指定项目的 agent daemon(`start` 别名)")
|
|
309
|
+
.option("-p, --port <port>", "服务端口(可在 ship.json 的 start.port 配置)", parsePort)
|
|
310
|
+
.option("-h, --host <host>", "服务主机(可在 ship.json 的 start.host 配置)")
|
|
311
|
+
.option("--webui [enabled]", "启动交互式 Web 界面(可在 ship.json 的 start.webui 配置)", parseBoolean)
|
|
312
|
+
.option("--webport <port>", "交互式 Web 界面端口(可在 ship.json 的 start.webport 配置)", parsePort)
|
|
313
|
+
.helpOption("--help", "display help for command")
|
|
314
|
+
.action(withVersionBanner(async (cwd, options) => {
|
|
315
|
+
injectAgentContext(cwd);
|
|
316
|
+
await startCommand(cwd, options);
|
|
317
|
+
}));
|
|
318
|
+
managerAgents
|
|
319
|
+
.command("stop <pathOrAll>")
|
|
320
|
+
.description("停止指定项目 agent daemon;传 `all` 可停止全部活跃 agent")
|
|
321
|
+
.helpOption("--help", "display help for command")
|
|
322
|
+
.action(withVersionBanner(async (pathOrAll) => {
|
|
323
|
+
const target = String(pathOrAll || "").trim();
|
|
324
|
+
if (!target) {
|
|
325
|
+
throw new Error("pathOrAll is required");
|
|
326
|
+
}
|
|
327
|
+
if (target.toLowerCase() !== "all") {
|
|
328
|
+
injectAgentContext(target);
|
|
329
|
+
await stopCommand(target);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
const views = await resolveRunningManagedAgents();
|
|
333
|
+
if (views.length === 0) {
|
|
334
|
+
console.log("ℹ️ No running agent daemon to stop");
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
console.log(`Stopping ${views.length} managed agents...`);
|
|
338
|
+
for (const item of views) {
|
|
339
|
+
try {
|
|
340
|
+
const result = await stopDaemonProcess({
|
|
341
|
+
projectRoot: item.projectRoot,
|
|
342
|
+
});
|
|
343
|
+
if (result.stopped) {
|
|
344
|
+
console.log(`✅ stopped: ${item.projectRoot} (pid=${item.daemonPid})`);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
console.log(`ℹ️ already stopped: ${item.projectRoot}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
console.log(`❌ stop failed: ${item.projectRoot}`);
|
|
352
|
+
console.log(` error: ${String(error)}`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}));
|
|
356
|
+
managerAgents
|
|
357
|
+
.command("status <path>")
|
|
358
|
+
.description("查看指定项目的 agent daemon 状态(等价于 `sma agent status <path>`)")
|
|
359
|
+
.helpOption("--help", "display help for command")
|
|
360
|
+
.action(withVersionBanner(async (cwd) => {
|
|
361
|
+
injectAgentContext(cwd);
|
|
362
|
+
await statusCommand(cwd);
|
|
363
|
+
}));
|
|
364
|
+
managerAgents
|
|
365
|
+
.command("restart <path>")
|
|
366
|
+
.description("重启指定项目的 agent daemon(等价于 `sma agent restart <path>`)")
|
|
367
|
+
.option("-p, --port <port>", "服务端口(可在 ship.json 的 start.port 配置)", parsePort)
|
|
368
|
+
.option("-h, --host <host>", "服务主机(可在 ship.json 的 start.host 配置)")
|
|
369
|
+
.option("--webui [enabled]", "启动交互式 Web 界面(可在 ship.json 的 start.webui 配置)", parseBoolean)
|
|
370
|
+
.option("--webport <port>", "交互式 Web 界面端口(可在 ship.json 的 start.webport 配置)", parsePort)
|
|
371
|
+
.helpOption("--help", "display help for command")
|
|
372
|
+
.action(withVersionBanner(async (cwd, options) => {
|
|
373
|
+
injectAgentContext(cwd);
|
|
374
|
+
await restartCommand(cwd, options);
|
|
375
|
+
}));
|
|
376
|
+
program
|
|
377
|
+
.command("start")
|
|
378
|
+
.description("启动 SMA Manager(后台)")
|
|
379
|
+
.helpOption("--help", "display help for command")
|
|
380
|
+
.action(withVersionBanner(async () => {
|
|
381
|
+
await startManagerCommand();
|
|
382
|
+
}));
|
|
383
|
+
program
|
|
384
|
+
.command("status [path]")
|
|
385
|
+
.description("查看当前目录或指定目录 Agent Runtime 状态")
|
|
386
|
+
.helpOption("--help", "display help for command")
|
|
387
|
+
.action(withVersionBanner(async (cwd = ".") => {
|
|
388
|
+
injectAgentContext(cwd);
|
|
389
|
+
await statusCommand(cwd);
|
|
390
|
+
}));
|
|
76
391
|
const agent = program
|
|
77
392
|
.command("agent")
|
|
78
393
|
.description("管理 Agent Runtime 启停与重启")
|
|
79
394
|
.helpOption("--help", "display help for command");
|
|
80
395
|
agent
|
|
81
396
|
.command("on [path]")
|
|
82
|
-
.description("启动 Agent Runtime
|
|
397
|
+
.description("启动 Agent Runtime(默认后台;--foreground 为前台)")
|
|
83
398
|
.option("-p, --port <port>", "服务端口(可在 ship.json 的 start.port 配置)", parsePort)
|
|
84
399
|
.option("-h, --host <host>", "服务主机(可在 ship.json 的 start.host 配置)")
|
|
85
400
|
.option("--webui [enabled]", "启动交互式 Web 界面(可在 ship.json 的 start.webui 配置)", parseBoolean)
|
|
86
401
|
.option("--webport <port>", "交互式 Web 界面端口(可在 ship.json 的 start.webport 配置)", parsePort)
|
|
87
|
-
.option("--
|
|
402
|
+
.option("--foreground [enabled]", "前台启动(仅当前终端)", parseBoolean)
|
|
403
|
+
.option("--daemon [enabled]", "后台启动(兼容参数)", parseBoolean)
|
|
88
404
|
.helpOption("--help", "display help for command")
|
|
89
405
|
.action(withVersionBanner(async (cwd = ".", options) => {
|
|
90
|
-
|
|
91
|
-
|
|
406
|
+
injectAgentContext(cwd);
|
|
407
|
+
const shouldForeground = options.foreground === true || options.daemon === false;
|
|
408
|
+
if (shouldForeground) {
|
|
409
|
+
await runCommand(cwd, options);
|
|
92
410
|
return;
|
|
93
411
|
}
|
|
94
|
-
await
|
|
412
|
+
await startCommand(cwd, options);
|
|
95
413
|
}));
|
|
96
414
|
agent
|
|
97
415
|
.command("off [path]")
|
|
98
416
|
.description("停止后台 Agent Runtime(daemon)")
|
|
99
417
|
.helpOption("--help", "display help for command")
|
|
100
|
-
.action(withVersionBanner(
|
|
418
|
+
.action(withVersionBanner(async (cwd = ".") => {
|
|
419
|
+
injectAgentContext(cwd);
|
|
420
|
+
await stopCommand(cwd);
|
|
421
|
+
}));
|
|
422
|
+
agent
|
|
423
|
+
.command("status [path]")
|
|
424
|
+
.description("查看后台 Agent Runtime(daemon)状态")
|
|
425
|
+
.helpOption("--help", "display help for command")
|
|
426
|
+
.action(withVersionBanner(async (cwd = ".") => {
|
|
427
|
+
injectAgentContext(cwd);
|
|
428
|
+
await statusCommand(cwd);
|
|
429
|
+
}));
|
|
101
430
|
agent
|
|
102
431
|
.command("restart [path]")
|
|
103
432
|
.description("重启后台 Agent Runtime(daemon)")
|
|
@@ -106,7 +435,10 @@ agent
|
|
|
106
435
|
.option("--webui [enabled]", "启动交互式 Web 界面(可在 ship.json 的 start.webui 配置)", parseBoolean)
|
|
107
436
|
.option("--webport <port>", "交互式 Web 界面端口(可在 ship.json 的 start.webport 配置)", parsePort)
|
|
108
437
|
.helpOption("--help", "display help for command")
|
|
109
|
-
.action(withVersionBanner(
|
|
438
|
+
.action(withVersionBanner(async (cwd = ".", options) => {
|
|
439
|
+
injectAgentContext(cwd);
|
|
440
|
+
await restartCommand(cwd, options);
|
|
441
|
+
}));
|
|
110
442
|
registerConfigCommand(program);
|
|
111
443
|
registerServicesCommand(program);
|
|
112
444
|
registerExtensionsCommand(program);
|
|
@@ -114,17 +446,39 @@ registerExtensionsCommand(program);
|
|
|
114
446
|
registerAllServicesForCli(program);
|
|
115
447
|
// 扩展命令统一注册(voice / future extensions)
|
|
116
448
|
registerAllExtensionsForCli(program);
|
|
449
|
+
// 每次执行 sma 默认注入当前目录 agent 上下文环境变量。
|
|
450
|
+
injectAgentContext(".");
|
|
451
|
+
// `sma agent .` => `sma agent on .`
|
|
452
|
+
if (process.argv[2] === "agent") {
|
|
453
|
+
const secondArg = process.argv[3];
|
|
454
|
+
const knownAgentSubCommands = new Set([
|
|
455
|
+
"on",
|
|
456
|
+
"off",
|
|
457
|
+
"status",
|
|
458
|
+
"restart",
|
|
459
|
+
"help",
|
|
460
|
+
"--help",
|
|
461
|
+
"-h",
|
|
462
|
+
]);
|
|
463
|
+
if (secondArg &&
|
|
464
|
+
!knownAgentSubCommands.has(secondArg) &&
|
|
465
|
+
!String(secondArg).startsWith("-")) {
|
|
466
|
+
process.argv.splice(3, 0, "on");
|
|
467
|
+
}
|
|
468
|
+
}
|
|
117
469
|
// 默认行为:`shipmyagent` / `shipmyagent .` / `shipmyagent [on-options]` -> `shipmyagent agent on [path]`
|
|
118
470
|
const firstArg = process.argv[2];
|
|
119
471
|
const staticRootCommands = [
|
|
120
472
|
init.name(),
|
|
121
473
|
agent.name(),
|
|
122
474
|
"config",
|
|
475
|
+
"start",
|
|
476
|
+
"status",
|
|
477
|
+
"manager",
|
|
123
478
|
// 关键点(中文):以下命令已移除;仍保留在识别列表里,避免误回退为 `agent on`。
|
|
124
479
|
"restart",
|
|
125
480
|
"alias",
|
|
126
481
|
"run",
|
|
127
|
-
"start",
|
|
128
482
|
"stop",
|
|
129
483
|
// 关键点(中文):`services` 已移除,仍保留在识别列表里,避免误回退为 `agent on`。
|
|
130
484
|
"services",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../../src/main/server/commands/Index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../../src/main/server/commands/Index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Init.d.ts","sourceRoot":"","sources":["../../../../src/main/server/commands/Init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmSH;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,GAAG,GAAE,MAAY,EACjB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"Init.d.ts","sourceRoot":"","sources":["../../../../src/main/server/commands/Init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmSH;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,GAAG,GAAE,MAAY,EACjB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAAC,IAAI,CAAC,CAokBf"}
|
|
@@ -165,10 +165,10 @@ async function appendMissingEnvEntries(params) {
|
|
|
165
165
|
};
|
|
166
166
|
}
|
|
167
167
|
/**
|
|
168
|
-
* 获取用户级 `.
|
|
168
|
+
* 获取用户级 `.agents/skills` 目录。
|
|
169
169
|
*/
|
|
170
|
-
function
|
|
171
|
-
return path.join(os.homedir(), ".
|
|
170
|
+
function getUserAgentsSkillsDir() {
|
|
171
|
+
return path.join(os.homedir(), ".agents", "skills");
|
|
172
172
|
}
|
|
173
173
|
/**
|
|
174
174
|
* 推断发布包内置 skills 目录。
|
|
@@ -190,7 +190,7 @@ function getBuiltInSkillsDirFromBin() {
|
|
|
190
190
|
*/
|
|
191
191
|
async function installBuiltInSkillsToUserDir() {
|
|
192
192
|
const src = getBuiltInSkillsDirFromBin();
|
|
193
|
-
const dst =
|
|
193
|
+
const dst = getUserAgentsSkillsDir();
|
|
194
194
|
try {
|
|
195
195
|
if (!(await fs.pathExists(src)))
|
|
196
196
|
return;
|
|
@@ -213,14 +213,14 @@ async function installBuiltInSkillsToUserDir() {
|
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
/**
|
|
216
|
-
* 同步 `~/.claude/skills` 到 `~/.
|
|
216
|
+
* 同步 `~/.claude/skills` 到 `~/.agents/skills`。
|
|
217
217
|
*
|
|
218
218
|
* 关键点(中文)
|
|
219
219
|
* - 这是兼容开发者本地习惯的“软同步”,失败不阻断 init。
|
|
220
220
|
*/
|
|
221
|
-
async function
|
|
221
|
+
async function syncClaudeSkillsToUserAgentsSkills() {
|
|
222
222
|
const src = path.join(os.homedir(), ".claude", "skills");
|
|
223
|
-
const dst =
|
|
223
|
+
const dst = getUserAgentsSkillsDir();
|
|
224
224
|
try {
|
|
225
225
|
if (!(await fs.pathExists(src)))
|
|
226
226
|
return;
|
|
@@ -525,8 +525,8 @@ export async function initCommand(cwd = ".", options = {}) {
|
|
|
525
525
|
llm: llmConfig,
|
|
526
526
|
// 关键点(中文):所有服务相关配置统一放入 `services`。
|
|
527
527
|
services: {
|
|
528
|
-
//
|
|
529
|
-
skills: { paths: [".
|
|
528
|
+
// skills 扫描目录统一使用 `.agents/skills`(project/home 默认 roots)
|
|
529
|
+
skills: { paths: [".agents/skills"] },
|
|
530
530
|
...(Object.keys(channelsConfig).length > 0
|
|
531
531
|
? {
|
|
532
532
|
chat: {
|
|
@@ -610,8 +610,7 @@ export async function initCommand(cwd = ".", options = {}) {
|
|
|
610
610
|
getShipContextRootDirPath(projectRoot),
|
|
611
611
|
getShipPublicDirPath(projectRoot),
|
|
612
612
|
getShipConfigDirPath(projectRoot),
|
|
613
|
-
path.join(
|
|
614
|
-
path.join(projectRoot, ".claude", "skills"),
|
|
613
|
+
path.join(projectRoot, ".agents", "skills"),
|
|
615
614
|
path.join(getShipDirPath(projectRoot), "schema"),
|
|
616
615
|
getShipDebugDirPath(projectRoot),
|
|
617
616
|
];
|
|
@@ -633,7 +632,7 @@ export async function initCommand(cwd = ".", options = {}) {
|
|
|
633
632
|
catch {
|
|
634
633
|
// ignore
|
|
635
634
|
}
|
|
636
|
-
// Install built-in skills to user directory (~/.
|
|
635
|
+
// Install built-in skills to user directory (~/.agents/skills)
|
|
637
636
|
await installBuiltInSkillsToUserDir();
|
|
638
637
|
// Skills installation (optional)
|
|
639
638
|
const skillsToInstall = Array.isArray(response.skillsToInstall)
|
|
@@ -645,7 +644,7 @@ export async function initCommand(cwd = ".", options = {}) {
|
|
|
645
644
|
try {
|
|
646
645
|
// 关键点(中文)
|
|
647
646
|
// - `-y`(npx):跳过安装确认
|
|
648
|
-
// - `-g`:`npx skills` 默认全局安装到 ~/.claude/skills
|
|
647
|
+
// - `-g`:`npx skills` 默认全局安装到 ~/.claude/skills(随后同步到 ~/.agents/skills)
|
|
649
648
|
// - `--agent claude-code`:对齐 Claude Code-compatible 目录结构(SKILL.md)
|
|
650
649
|
await execa("npx", ["-y", "skills", "add", spec, "--agent", "claude-code", "-g", "-y"], { stdio: "inherit" });
|
|
651
650
|
}
|
|
@@ -654,8 +653,8 @@ export async function initCommand(cwd = ".", options = {}) {
|
|
|
654
653
|
console.log(` Error: ${String(err)}`);
|
|
655
654
|
}
|
|
656
655
|
}
|
|
657
|
-
// 同步到 `~/.
|
|
658
|
-
await
|
|
656
|
+
// 同步到 `~/.agents/skills`,保证 ShipMyAgent 可发现
|
|
657
|
+
await syncClaudeSkillsToUserAgentsSkills();
|
|
659
658
|
}
|
|
660
659
|
console.log("\n🎉 Initialization complete!\n");
|
|
661
660
|
console.log(`📦 Current model: ${providerType} / ${resolvedModelName}`);
|