shipmyagent 1.0.73 → 1.0.75
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/cli.js +34 -5
- package/bin/cli.js.map +1 -1
- package/bin/commands/init.d.ts.map +1 -1
- package/bin/commands/init.js +123 -103
- package/bin/commands/init.js.map +1 -1
- package/bin/commands/restart.d.ts.map +1 -0
- package/bin/commands/restart.js +41 -0
- package/bin/commands/restart.js.map +1 -0
- package/bin/commands/run.d.ts.map +1 -0
- package/bin/commands/run.js +290 -0
- package/bin/commands/run.js.map +1 -0
- package/bin/commands/start.d.ts.map +1 -1
- package/bin/commands/start.js +28 -252
- package/bin/commands/start.js.map +1 -1
- package/bin/commands/stop.d.ts.map +1 -0
- package/bin/commands/stop.js +26 -0
- package/bin/commands/stop.js.map +1 -0
- package/bin/daemon/cli-args.d.ts.map +1 -0
- package/bin/daemon/cli-args.js +19 -0
- package/bin/daemon/cli-args.js.map +1 -0
- package/bin/daemon/manager.d.ts.map +1 -0
- package/bin/daemon/manager.js +124 -0
- package/bin/daemon/manager.js.map +1 -0
- package/bin/types/daemon.d.ts.map +1 -0
- package/bin/types/daemon.js +16 -0
- package/bin/types/daemon.js.map +1 -0
- package/bin/types/init.d.ts.map +1 -0
- package/bin/types/init.js +5 -0
- package/bin/types/init.js.map +1 -0
- package/bin/types/start.d.ts.map +1 -0
- package/bin/types/start.js +8 -0
- package/bin/types/start.js.map +1 -0
- package/package.json +1 -1
package/bin/cli.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import { initCommand } from "./commands/init.js";
|
|
4
|
+
import { runCommand } from "./commands/run.js";
|
|
4
5
|
import { startCommand } from "./commands/start.js";
|
|
6
|
+
import { stopCommand } from "./commands/stop.js";
|
|
7
|
+
import { restartCommand } from "./commands/restart.js";
|
|
5
8
|
import { aliasCommand } from "./commands/alias.js";
|
|
6
9
|
import { readFileSync } from "fs";
|
|
7
10
|
import { join, dirname, basename } from "path";
|
|
@@ -41,16 +44,42 @@ const init = program
|
|
|
41
44
|
.description("初始化 ShipMyAgent 项目")
|
|
42
45
|
.helpOption("--help", "display help for command")
|
|
43
46
|
.action(initCommand);
|
|
44
|
-
//
|
|
47
|
+
// Run command (foreground)
|
|
48
|
+
const run = program
|
|
49
|
+
.command("run [path]")
|
|
50
|
+
.description("前台启动 Agent Runtime(当前终端运行)")
|
|
51
|
+
.option("-p, --port <port>", "服务端口(可在 ship.json 的 start.port 配置)", parsePort)
|
|
52
|
+
.option("-h, --host <host>", "服务主机(可在 ship.json 的 start.host 配置)")
|
|
53
|
+
.option("--interactive-web [enabled]", "启动交互式 Web 界面(可在 ship.json 的 start.interactiveWeb 配置)", parseBoolean)
|
|
54
|
+
.option("--interactive-port <port>", "交互式 Web 界面端口(可在 ship.json 的 start.interactivePort 配置)", parsePort)
|
|
55
|
+
.helpOption("--help", "display help for command")
|
|
56
|
+
.action(runCommand);
|
|
57
|
+
// Start command (daemon)
|
|
45
58
|
const start = program
|
|
46
59
|
.command("start [path]")
|
|
47
|
-
.description("
|
|
60
|
+
.description("后台启动 Agent Runtime(终端退出也保持运行)")
|
|
48
61
|
.option("-p, --port <port>", "服务端口(可在 ship.json 的 start.port 配置)", parsePort)
|
|
49
62
|
.option("-h, --host <host>", "服务主机(可在 ship.json 的 start.host 配置)")
|
|
50
63
|
.option("--interactive-web [enabled]", "启动交互式 Web 界面(可在 ship.json 的 start.interactiveWeb 配置)", parseBoolean)
|
|
51
64
|
.option("--interactive-port <port>", "交互式 Web 界面端口(可在 ship.json 的 start.interactivePort 配置)", parsePort)
|
|
52
65
|
.helpOption("--help", "display help for command")
|
|
53
66
|
.action(startCommand);
|
|
67
|
+
// Stop command (daemon)
|
|
68
|
+
const stop = program
|
|
69
|
+
.command("stop [path]")
|
|
70
|
+
.description("停止后台 Agent 服务器(daemon)")
|
|
71
|
+
.helpOption("--help", "display help for command")
|
|
72
|
+
.action(stopCommand);
|
|
73
|
+
// Restart command (daemon)
|
|
74
|
+
const restart = program
|
|
75
|
+
.command("restart [path]")
|
|
76
|
+
.description("重启后台 Agent 服务器(daemon)")
|
|
77
|
+
.option("-p, --port <port>", "服务端口(可在 ship.json 的 start.port 配置)", parsePort)
|
|
78
|
+
.option("-h, --host <host>", "服务主机(可在 ship.json 的 start.host 配置)")
|
|
79
|
+
.option("--interactive-web [enabled]", "启动交互式 Web 界面(可在 ship.json 的 start.interactiveWeb 配置)", parseBoolean)
|
|
80
|
+
.option("--interactive-port <port>", "交互式 Web 界面端口(可在 ship.json 的 start.interactivePort 配置)", parsePort)
|
|
81
|
+
.helpOption("--help", "display help for command")
|
|
82
|
+
.action(restartCommand);
|
|
54
83
|
const alias = program
|
|
55
84
|
.command("alias")
|
|
56
85
|
.description("在 .zshrc / .bashrc 中写入 `alias sma=\"shipmyagent\"`")
|
|
@@ -59,12 +88,12 @@ const alias = program
|
|
|
59
88
|
.option("--print", "仅打印 alias 内容(用于 eval)", false)
|
|
60
89
|
.helpOption("--help", "display help for command")
|
|
61
90
|
.action(aliasCommand);
|
|
62
|
-
// Default: `shipmyagent` / `shipmyagent .` / `shipmyagent [
|
|
91
|
+
// Default: `shipmyagent` / `shipmyagent .` / `shipmyagent [run-options]` => `shipmyagent run [path]`
|
|
63
92
|
const firstArg = process.argv[2];
|
|
64
93
|
if (!firstArg ||
|
|
65
|
-
(![init.name(), start.name(), alias.name(), "help"].includes(firstArg) &&
|
|
94
|
+
(![init.name(), run.name(), start.name(), stop.name(), restart.name(), alias.name(), "help"].includes(firstArg) &&
|
|
66
95
|
!["--help", "-v", "--version"].includes(firstArg))) {
|
|
67
|
-
process.argv.splice(2, 0, "
|
|
96
|
+
process.argv.splice(2, 0, "run");
|
|
68
97
|
}
|
|
69
98
|
program.parse();
|
|
70
99
|
//# sourceMappingURL=cli.js.map
|
package/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,uBAAuB;AACvB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,UAAU;AACV,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QACpG,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAyB,EAAW,EAAE;IAC1D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/D,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;KAChD,WAAW,CACV,iCAAiC,CAClC;KACA,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAEjD,iDAAiD;AACjD,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;AAEzD,eAAe;AACf,MAAM,IAAI,GAAG,OAAO;KACjB,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,oBAAoB,CAAC;KACjC,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,uBAAuB;AACvB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,UAAU;AACV,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QACpG,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAyB,EAAW,EAAE;IAC1D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/D,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;KAChD,WAAW,CACV,iCAAiC,CAClC;KACA,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAEjD,iDAAiD;AACjD,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;AAEzD,eAAe;AACf,MAAM,IAAI,GAAG,OAAO;KACjB,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,oBAAoB,CAAC;KACjC,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,2BAA2B;AAC3B,MAAM,GAAG,GAAG,OAAO;KAChB,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,SAAS,CAAC;KAC5E,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;KACjE,MAAM,CACL,6BAA6B,EAC7B,sDAAsD,EACtD,YAAY,CACb;KACA,MAAM,CACL,2BAA2B,EAC3B,uDAAuD,EACvD,SAAS,CACV;KACA,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,yBAAyB;AACzB,MAAM,KAAK,GAAG,OAAO;KAClB,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,SAAS,CAAC;KAC5E,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;KACjE,MAAM,CACL,6BAA6B,EAC7B,sDAAsD,EACtD,YAAY,CACb;KACA,MAAM,CACL,2BAA2B,EAC3B,uDAAuD,EACvD,SAAS,CACV;KACA,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,wBAAwB;AACxB,MAAM,IAAI,GAAG,OAAO;KACjB,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,wBAAwB,CAAC;KACrC,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,2BAA2B;AAC3B,MAAM,OAAO,GAAG,OAAO;KACpB,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,SAAS,CAAC;KAC5E,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;KACjE,MAAM,CACL,6BAA6B,EAC7B,sDAAsD,EACtD,YAAY,CACb;KACA,MAAM,CACL,2BAA2B,EAC3B,uDAAuD,EACvD,SAAS,CACV;KACA,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,MAAM,KAAK,GAAG,OAAO;KAClB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,CAAC;KACnE,MAAM,CAAC,WAAW,EAAE,kBAAkB,EAAE,KAAK,CAAC;KAC9C,MAAM,CAAC,SAAS,EAAE,uBAAuB,EAAE,KAAK,CAAC;KACjD,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,qGAAqG;AACrG,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,IACE,CAAC,QAAQ;IACT,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7G,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EACpD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA+BH,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhE,wBAAsB,WAAW,CAC/B,GAAG,GAAE,MAAY,EACjB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA+Pf"}
|
package/bin/commands/init.js
CHANGED
|
@@ -1,19 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `shipmyagent init`:在目标目录生成最小可用的 ShipMyAgent 工程骨架与配置文件。
|
|
3
|
+
*
|
|
4
|
+
* 目标
|
|
5
|
+
* - 生成 `Agent.md` / `ship.json` / `.ship/` 目录结构与 schema 文件
|
|
6
|
+
* - 通过交互式问题收集必要配置(模型、Adapters 等)
|
|
7
|
+
*
|
|
8
|
+
* 设计要点
|
|
9
|
+
* - Adapters 支持多选:仅写入用户选择的 adapters(未选择的不出现在 `ship.json`)
|
|
10
|
+
* - 避免写入无意义的默认值:能省则省,保持配置简洁
|
|
11
|
+
*/
|
|
12
|
+
import path from "path";
|
|
13
|
+
import prompts from "prompts";
|
|
14
|
+
import fs from "fs-extra";
|
|
15
|
+
import { getAgentMdPath, getShipJsonPath, getShipDirPath, getLogsDirPath, getCacheDirPath, getShipSchemaPath, getShipChatRootDirPath, getShipConfigDirPath, getShipDataDirPath, getShipMcpConfigPath, getShipMcpSchemaPath, getShipProfileDirPath, getShipProfileOtherPath, getShipProfilePrimaryPath, getShipDebugDirPath, getShipPublicDirPath, getShipTasksDirPath, ensureDir, saveJson, DEFAULT_SHIP_JSON, MODEL_CONFIGS, } from "../utils.js";
|
|
16
|
+
import { SHIP_JSON_SCHEMA } from "../schemas/ship.schema.js";
|
|
17
|
+
import { MCP_JSON_SCHEMA } from "../schemas/mcp.schema.js";
|
|
18
|
+
export async function initCommand(cwd = ".", options = {}) {
|
|
8
19
|
const projectRoot = path.resolve(cwd);
|
|
9
|
-
const LLM_API_KEY =
|
|
10
|
-
const LLM_BASE_URL =
|
|
11
|
-
const LLM_MODEL =
|
|
12
|
-
const TELEGRAM_BOT_TOKEN =
|
|
13
|
-
const FEISHU_APP_ID =
|
|
14
|
-
const FEISHU_APP_SECRET =
|
|
15
|
-
const QQ_APP_ID =
|
|
16
|
-
const QQ_APP_SECRET =
|
|
20
|
+
const LLM_API_KEY = "${LLM_API_KEY}";
|
|
21
|
+
const LLM_BASE_URL = "${LLM_BASE_URL}";
|
|
22
|
+
const LLM_MODEL = "${LLM_MODEL}";
|
|
23
|
+
const TELEGRAM_BOT_TOKEN = "${TELEGRAM_BOT_TOKEN}";
|
|
24
|
+
const FEISHU_APP_ID = "${FEISHU_APP_ID}";
|
|
25
|
+
const FEISHU_APP_SECRET = "${FEISHU_APP_SECRET}";
|
|
26
|
+
const QQ_APP_ID = "${QQ_APP_ID}";
|
|
27
|
+
const QQ_APP_SECRET = "${QQ_APP_SECRET}";
|
|
17
28
|
console.log(`🚀 Initializing ShipMyAgent project: ${projectRoot}`);
|
|
18
29
|
// Check if Agent.md and ship.json already exist
|
|
19
30
|
const existingAgentMd = fs.existsSync(getAgentMdPath(projectRoot));
|
|
@@ -21,13 +32,13 @@ export async function initCommand(cwd = '.', options = {}) {
|
|
|
21
32
|
if (existingAgentMd || existingShipJson) {
|
|
22
33
|
if (!options.force) {
|
|
23
34
|
const response = await prompts({
|
|
24
|
-
type:
|
|
25
|
-
name:
|
|
26
|
-
message:
|
|
35
|
+
type: "confirm",
|
|
36
|
+
name: "overwrite",
|
|
37
|
+
message: "Project already initialized. Overwrite existing configuration?",
|
|
27
38
|
initial: false,
|
|
28
39
|
});
|
|
29
40
|
if (!response.overwrite) {
|
|
30
|
-
console.log(
|
|
41
|
+
console.log("❌ Initialization cancelled");
|
|
31
42
|
return;
|
|
32
43
|
}
|
|
33
44
|
}
|
|
@@ -35,45 +46,46 @@ export async function initCommand(cwd = '.', options = {}) {
|
|
|
35
46
|
// Collect configuration information
|
|
36
47
|
const response = await prompts([
|
|
37
48
|
{
|
|
38
|
-
type:
|
|
39
|
-
name:
|
|
40
|
-
message:
|
|
49
|
+
type: "text",
|
|
50
|
+
name: "name",
|
|
51
|
+
message: "Agent name",
|
|
41
52
|
initial: path.basename(projectRoot),
|
|
42
53
|
},
|
|
43
54
|
{
|
|
44
|
-
type:
|
|
45
|
-
name:
|
|
46
|
-
message:
|
|
55
|
+
type: "select",
|
|
56
|
+
name: "model",
|
|
57
|
+
message: "Select LLM model",
|
|
47
58
|
choices: [
|
|
48
|
-
{ title:
|
|
49
|
-
{ title:
|
|
50
|
-
{ title:
|
|
51
|
-
{ title:
|
|
52
|
-
{ title:
|
|
53
|
-
{ title:
|
|
54
|
-
{ title:
|
|
55
|
-
{ title:
|
|
56
|
-
{ title:
|
|
57
|
-
{ title:
|
|
59
|
+
{ title: "Claude Sonnet 4", value: "claude-sonnet-4-5" },
|
|
60
|
+
{ title: "Claude Haiku", value: "claude-haiku" },
|
|
61
|
+
{ title: "Claude 3.5 Sonnet", value: "claude-3-5-sonnet-20241022" },
|
|
62
|
+
{ title: "Claude 3 Opus", value: "claude-3-opus-20240229" },
|
|
63
|
+
{ title: "GPT-4", value: "gpt-4" },
|
|
64
|
+
{ title: "GPT-4 Turbo", value: "gpt-4-turbo" },
|
|
65
|
+
{ title: "GPT-4o", value: "gpt-4o" },
|
|
66
|
+
{ title: "GPT-3.5 Turbo", value: "gpt-3.5-turbo" },
|
|
67
|
+
{ title: "DeepSeek Chat", value: "deepseek-chat" },
|
|
68
|
+
{ title: "Custom model", value: "custom" },
|
|
58
69
|
],
|
|
59
70
|
initial: 0,
|
|
60
71
|
},
|
|
61
72
|
{
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
73
|
+
// 关键交互:Adapters 允许多选,未选择的就不写入 ship.json
|
|
74
|
+
type: "multiselect",
|
|
75
|
+
name: "adapters",
|
|
76
|
+
message: "Select adapters (multi-select)",
|
|
65
77
|
choices: [
|
|
66
|
-
{ title:
|
|
67
|
-
{ title:
|
|
68
|
-
{ title:
|
|
69
|
-
{ title: 'QQ', value: 'qq' },
|
|
78
|
+
{ title: "Telegram", value: "telegram" },
|
|
79
|
+
{ title: "Feishu", value: "feishu" },
|
|
80
|
+
{ title: "QQ", value: "qq" },
|
|
70
81
|
],
|
|
71
|
-
initial: 0,
|
|
72
82
|
},
|
|
73
83
|
{
|
|
74
|
-
type: (prev, values) => (values.
|
|
75
|
-
|
|
76
|
-
|
|
84
|
+
type: (prev, values) => Array.isArray(values.adapters) && values.adapters.includes("qq")
|
|
85
|
+
? "confirm"
|
|
86
|
+
: null,
|
|
87
|
+
name: "qqSandbox",
|
|
88
|
+
message: "Use QQ sandbox environment?",
|
|
77
89
|
initial: false,
|
|
78
90
|
},
|
|
79
91
|
]);
|
|
@@ -100,45 +112,52 @@ Help users understand and work with their codebase by exploring, analyzing, and
|
|
|
100
112
|
console.log(`✅ Created Agent.md`);
|
|
101
113
|
// Save ship.json
|
|
102
114
|
// Build LLM configuration
|
|
103
|
-
const selectedModel = response.model ||
|
|
115
|
+
const selectedModel = response.model || "claude-sonnet-4-5";
|
|
104
116
|
const modelTemplate = MODEL_CONFIGS[selectedModel] || MODEL_CONFIGS.custom;
|
|
105
117
|
const llmConfig = {
|
|
106
118
|
provider: modelTemplate.provider,
|
|
107
|
-
model: selectedModel ===
|
|
108
|
-
baseUrl: selectedModel ===
|
|
119
|
+
model: selectedModel === "custom" ? LLM_MODEL : selectedModel, // custom needs env
|
|
120
|
+
baseUrl: selectedModel === "custom" ? LLM_BASE_URL : modelTemplate.baseUrl,
|
|
109
121
|
apiKey: LLM_API_KEY,
|
|
110
122
|
temperature: 0.7,
|
|
111
123
|
};
|
|
124
|
+
const selectedAdapters = new Set(Array.isArray(response.adapters) ? response.adapters : []);
|
|
125
|
+
const adaptersConfig = {};
|
|
126
|
+
if (selectedAdapters.has("telegram")) {
|
|
127
|
+
adaptersConfig.telegram = {
|
|
128
|
+
enabled: true,
|
|
129
|
+
botToken: TELEGRAM_BOT_TOKEN,
|
|
130
|
+
chatId: undefined,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
if (selectedAdapters.has("feishu")) {
|
|
134
|
+
adaptersConfig.feishu = {
|
|
135
|
+
enabled: true,
|
|
136
|
+
appId: FEISHU_APP_ID,
|
|
137
|
+
appSecret: FEISHU_APP_SECRET,
|
|
138
|
+
domain: "https://open.feishu.cn",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (selectedAdapters.has("qq")) {
|
|
142
|
+
adaptersConfig.qq = {
|
|
143
|
+
enabled: true,
|
|
144
|
+
appId: QQ_APP_ID,
|
|
145
|
+
appSecret: QQ_APP_SECRET,
|
|
146
|
+
sandbox: Boolean(response.qqSandbox),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
112
149
|
const shipConfig = {
|
|
113
150
|
$schema: DEFAULT_SHIP_JSON.$schema,
|
|
114
151
|
name: response.name || path.basename(projectRoot),
|
|
115
|
-
version:
|
|
152
|
+
version: "1.0.0",
|
|
116
153
|
start: {
|
|
117
154
|
port: 3000,
|
|
118
|
-
host:
|
|
155
|
+
host: "0.0.0.0",
|
|
119
156
|
interactiveWeb: false,
|
|
120
157
|
interactivePort: 3001,
|
|
121
158
|
},
|
|
122
159
|
llm: llmConfig,
|
|
123
|
-
adapters: {
|
|
124
|
-
telegram: {
|
|
125
|
-
enabled: response.integration === 'telegram',
|
|
126
|
-
botToken: response.integration === 'telegram' ? TELEGRAM_BOT_TOKEN : undefined,
|
|
127
|
-
chatId: undefined,
|
|
128
|
-
},
|
|
129
|
-
feishu: {
|
|
130
|
-
enabled: response.integration === 'feishu',
|
|
131
|
-
appId: response.integration === 'feishu' ? FEISHU_APP_ID : undefined,
|
|
132
|
-
appSecret: response.integration === 'feishu' ? FEISHU_APP_SECRET : undefined,
|
|
133
|
-
domain: 'https://open.feishu.cn',
|
|
134
|
-
},
|
|
135
|
-
qq: {
|
|
136
|
-
enabled: response.integration === 'qq',
|
|
137
|
-
appId: response.integration === 'qq' ? QQ_APP_ID : undefined,
|
|
138
|
-
appSecret: response.integration === 'qq' ? QQ_APP_SECRET : undefined,
|
|
139
|
-
sandbox: response.integration === 'qq' ? Boolean(response.qqSandbox) : false,
|
|
140
|
-
},
|
|
141
|
-
},
|
|
160
|
+
...(Object.keys(adaptersConfig).length > 0 ? { adapters: adaptersConfig } : {}),
|
|
142
161
|
};
|
|
143
162
|
await saveJson(shipJsonPath, shipConfig);
|
|
144
163
|
console.log(`✅ Created ship.json`);
|
|
@@ -153,7 +172,7 @@ Help users understand and work with their codebase by exploring, analyzing, and
|
|
|
153
172
|
getShipChatRootDirPath(projectRoot),
|
|
154
173
|
getShipPublicDirPath(projectRoot),
|
|
155
174
|
getShipConfigDirPath(projectRoot),
|
|
156
|
-
path.join(getShipDirPath(projectRoot),
|
|
175
|
+
path.join(getShipDirPath(projectRoot), "schema"),
|
|
157
176
|
getShipDebugDirPath(projectRoot),
|
|
158
177
|
];
|
|
159
178
|
for (const dir of dirs) {
|
|
@@ -180,49 +199,50 @@ Help users understand and work with their codebase by exploring, analyzing, and
|
|
|
180
199
|
await ensureDir(path.dirname(mcpSchemaPath));
|
|
181
200
|
await ensureDir(path.dirname(mcpJsonPath));
|
|
182
201
|
await saveJson(mcpSchemaPath, MCP_JSON_SCHEMA);
|
|
183
|
-
await saveJson(mcpJsonPath, { $schema:
|
|
202
|
+
await saveJson(mcpJsonPath, { $schema: "../schema/mcp.schema.json", servers: {} });
|
|
184
203
|
console.log(`✅ Created .ship/config/mcp.json (MCP configuration)`);
|
|
185
204
|
console.log('\n🎉 Initialization complete!\n');
|
|
186
205
|
console.log(`📦 Current model: ${llmConfig.provider} / ${llmConfig.model}`);
|
|
187
206
|
console.log(`🌐 API URL: ${llmConfig.baseUrl}\n`);
|
|
188
|
-
if (
|
|
189
|
-
console.log(
|
|
190
|
-
console.log(
|
|
191
|
-
console.log(
|
|
207
|
+
if (selectedAdapters.has("feishu")) {
|
|
208
|
+
console.log("📱 Feishu adapter enabled");
|
|
209
|
+
console.log(" Please configure FEISHU_APP_ID and FEISHU_APP_SECRET in ship.json");
|
|
210
|
+
console.log(" or set environment variables: FEISHU_APP_ID and FEISHU_APP_SECRET\n");
|
|
192
211
|
}
|
|
193
|
-
|
|
194
|
-
console.log(
|
|
195
|
-
console.log(
|
|
196
|
-
console.log(
|
|
212
|
+
if (selectedAdapters.has("telegram")) {
|
|
213
|
+
console.log("📱 Telegram adapter enabled");
|
|
214
|
+
console.log(" Please configure TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID (optional) in ship.json");
|
|
215
|
+
console.log(" or set environment variables: TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID\n");
|
|
197
216
|
}
|
|
198
|
-
|
|
199
|
-
console.log(
|
|
200
|
-
console.log(
|
|
201
|
-
console.log(
|
|
202
|
-
console.log(
|
|
217
|
+
if (selectedAdapters.has("qq")) {
|
|
218
|
+
console.log("📱 QQ adapter enabled");
|
|
219
|
+
console.log(" Please configure QQ_APP_ID and QQ_APP_SECRET in ship.json");
|
|
220
|
+
console.log(" or set environment variables: QQ_APP_ID and QQ_APP_SECRET\n");
|
|
221
|
+
console.log(" Optional: set QQ_SANDBOX=true to use sandbox environment\n");
|
|
203
222
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
223
|
+
const nextSteps = [
|
|
224
|
+
"Edit Agent.md to customize agent behavior",
|
|
225
|
+
"Edit ship.json to modify LLM configuration (baseUrl, apiKey, temperature, etc.)",
|
|
226
|
+
"(Optional) Edit .ship/config/mcp.json to configure MCP servers for extended capabilities",
|
|
227
|
+
];
|
|
228
|
+
if (selectedAdapters.has("telegram")) {
|
|
229
|
+
nextSteps.push("Configure Telegram Bot Token and Chat ID (optional)");
|
|
211
230
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
console.log(' 5. Run "shipmyagent start" to start the agent\n');
|
|
231
|
+
if (selectedAdapters.has("feishu")) {
|
|
232
|
+
nextSteps.push("Configure Feishu App ID and App Secret");
|
|
215
233
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
console.log(' 5. Run "shipmyagent start" to start the agent\n');
|
|
234
|
+
if (selectedAdapters.has("qq")) {
|
|
235
|
+
nextSteps.push("Configure QQ App ID and App Secret");
|
|
219
236
|
}
|
|
220
|
-
|
|
221
|
-
|
|
237
|
+
nextSteps.push('Run "shipmyagent start" to start the agent');
|
|
238
|
+
console.log("Next steps:");
|
|
239
|
+
for (const [idx, line] of nextSteps.entries()) {
|
|
240
|
+
console.log(` ${idx + 1}. ${line}`);
|
|
222
241
|
}
|
|
242
|
+
console.log("");
|
|
223
243
|
console.log('💡 Tip: API Key is recommended to use environment variables (e.g. ${ANTHROPIC_API_KEY} or ${OPENAI_API_KEY})\n');
|
|
224
|
-
console.log(
|
|
225
|
-
console.log(
|
|
226
|
-
console.log(
|
|
244
|
+
console.log("🔌 MCP Support: Configure MCP servers in .ship/config/mcp.json to connect to databases, APIs, and more");
|
|
245
|
+
console.log(" Learn more: https://modelcontextprotocol.io\n");
|
|
246
|
+
console.log("To switch models or modify configuration, edit the llm field in ship.json directly.\n");
|
|
227
247
|
}
|
|
228
248
|
//# sourceMappingURL=init.js.map
|
package/bin/commands/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,YAAM,EACjB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAiCf"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `shipmyagent restart`:重启后台常驻的 Agent Runtime(daemon)。
|
|
3
|
+
*/
|
|
4
|
+
import path from "path";
|
|
5
|
+
import fs from "fs-extra";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
import { getAgentMdPath, getShipJsonPath } from "../utils.js";
|
|
8
|
+
import { buildRunArgsFromOptions } from "../daemon/cli-args.js";
|
|
9
|
+
import { startDaemonProcess, stopDaemonProcess } from "../daemon/manager.js";
|
|
10
|
+
export async function restartCommand(cwd = ".", options) {
|
|
11
|
+
const projectRoot = path.resolve(cwd);
|
|
12
|
+
if (!fs.existsSync(getAgentMdPath(projectRoot))) {
|
|
13
|
+
console.error('❌ Project not initialized. Please run "shipmyagent init" first');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
if (!fs.existsSync(getShipJsonPath(projectRoot))) {
|
|
17
|
+
console.error('❌ ship.json does not exist. Please run "shipmyagent init" first');
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
// 计算当前 CLI 的入口路径(编译后是 `bin/cli.js`)。
|
|
21
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
22
|
+
const __dirname = path.dirname(__filename);
|
|
23
|
+
const cliPath = path.resolve(__dirname, "../cli.js");
|
|
24
|
+
try {
|
|
25
|
+
await stopDaemonProcess({ projectRoot });
|
|
26
|
+
const args = buildRunArgsFromOptions(projectRoot, options || {});
|
|
27
|
+
const { pid, logPath } = await startDaemonProcess({
|
|
28
|
+
projectRoot,
|
|
29
|
+
cliPath,
|
|
30
|
+
args,
|
|
31
|
+
});
|
|
32
|
+
console.log("✅ ShipMyAgent daemon restarted");
|
|
33
|
+
console.log(` pid: ${pid}`);
|
|
34
|
+
console.log(` log: ${logPath}`);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error("❌ Failed to restart daemon:", error);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=restart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG7E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,GAAG,EACjB,OAAqB;IAErB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qCAAqC;IACrC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,uBAAuB,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC;YAChD,WAAW;YACX,OAAO;YACP,IAAI;SACL,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqCH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,YAAM,EACjB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CA6Sf"}
|