@cremini/skillpack 1.0.9-im.4 → 1.0.9-im.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/runtime/README.md +7 -12
- package/runtime/server/dist/index.js +12 -7
- package/runtime/server/dist/index.js.map +1 -1
- package/runtime/server/dist/lifecycle.js +2 -2
- package/runtime/server/dist/lifecycle.js.map +1 -1
- package/runtime/server/dist/memory.js +195 -0
- package/runtime/server/dist/memory.js.map +1 -0
- package/runtime/server/package.json +0 -1
- package/runtime/start.bat +40 -7
- package/runtime/start.sh +31 -6
- package/runtime/ecosystem.config.cjs +0 -36
package/package.json
CHANGED
package/runtime/README.md
CHANGED
|
@@ -17,23 +17,19 @@ Double-click `start.bat` or run:
|
|
|
17
17
|
start.bat
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
Both launchers install server dependencies locally if needed, then start the app
|
|
20
|
+
Both launchers install server dependencies locally if needed, then start the app in the foreground. After the server starts, your browser opens [http://127.0.0.1:26313](http://127.0.0.1:26313) automatically.
|
|
21
21
|
|
|
22
22
|
By default, the server only listens on `127.0.0.1` so the API key you enter stays on the local machine and is not exposed to your LAN.
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## Process Management
|
|
25
25
|
|
|
26
|
-
`start.sh`
|
|
26
|
+
`start.sh` runs the server in a wrapper loop that monitors the exit code:
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Behavior:
|
|
28
|
+
- `/restart` or the web restart button exits with code `75`; the wrapper relaunches the process
|
|
29
|
+
- `/shutdown` exits with code `64`; the wrapper treats it as a clean stop and exits
|
|
30
|
+
- Any other exit code (e.g. crash) triggers an automatic restart after 2 seconds
|
|
33
31
|
|
|
34
|
-
|
|
35
|
-
- `/shutdown` exits with code `64`; PM2 treats it as a stop and does not auto-restart
|
|
36
|
-
- The PM2 app name is derived from `skillpack.json.name`, falling back to the folder name
|
|
32
|
+
All server output (logs and errors) appears directly in the terminal.
|
|
37
33
|
|
|
38
34
|
## First Use
|
|
39
35
|
|
|
@@ -53,4 +49,3 @@ Behavior:
|
|
|
53
49
|
| `ANTHROPIC_API_KEY` | Anthropic API key, optional if you set it in the web UI |
|
|
54
50
|
| `HOST` | Bind address, defaults to `127.0.0.1` |
|
|
55
51
|
| `PORT` | Server port, defaults to `26313` |
|
|
56
|
-
| `SKILLPACK_PROCESS_MANAGER` | Set to `pm2` when started under PM2 |
|
|
@@ -101,13 +101,18 @@ server.once("listening", () => {
|
|
|
101
101
|
const url = `http://${HOST}:${actualPort}`;
|
|
102
102
|
console.log(`\n Skills Pack Server`);
|
|
103
103
|
console.log(` Running at ${url}\n`);
|
|
104
|
-
// Open the browser automatically
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
104
|
+
// Open the browser automatically (only on first run)
|
|
105
|
+
if (process.env.SKILLPACK_FIRST_RUN === "1") {
|
|
106
|
+
const cmd = process.platform === "darwin"
|
|
107
|
+
? `open ${url}`
|
|
108
|
+
: process.platform === "win32"
|
|
109
|
+
? `start ${url}`
|
|
110
|
+
: `xdg-open ${url}`;
|
|
111
|
+
exec(cmd, (err) => {
|
|
112
|
+
if (err)
|
|
113
|
+
console.warn(` Could not open browser: ${err.message}`);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
111
116
|
});
|
|
112
117
|
function tryListen(port) {
|
|
113
118
|
server.listen(port, HOST);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ export const SHUTDOWN_EXIT_CODE = 64;
|
|
|
2
2
|
export const RESTART_EXIT_CODE = 75;
|
|
3
3
|
const STOP_TIMEOUT_MS = 3_000;
|
|
4
4
|
function detectProcessManager() {
|
|
5
|
-
return process.env.
|
|
5
|
+
return process.env.PACK_ROOT ? "wrapper" : "none";
|
|
6
6
|
}
|
|
7
7
|
export class Lifecycle {
|
|
8
8
|
server;
|
|
@@ -20,7 +20,7 @@ export class Lifecycle {
|
|
|
20
20
|
}
|
|
21
21
|
getRuntimeControl() {
|
|
22
22
|
return {
|
|
23
|
-
canManagedRestart: this.processManager === "
|
|
23
|
+
canManagedRestart: this.processManager === "wrapper",
|
|
24
24
|
processManager: this.processManager,
|
|
25
25
|
};
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,eAAe,GAAG,KAAK,CAAC;AAK9B,SAAS,oBAAoB;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,eAAe,GAAG,KAAK,CAAC;AAK9B,SAAS,oBAAoB;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAED,MAAM,OAAO,SAAS;IACH,MAAM,CAAS;IACf,MAAM,CAAS;IACf,cAAc,CAAiB;IACxC,QAAQ,GAAsB,EAAE,CAAC;IACjC,UAAU,GAAsB,IAAI,CAAC;IAE7C,YAAY,MAAc,EAAE,SAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,oBAAoB,EAAE,CAAC;IAC/C,CAAC;IAED,gBAAgB,CAAC,QAA2B;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,iBAAiB,EAAE,IAAI,CAAC,cAAc,KAAK,SAAS;YACpD,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAyB;QAC5C,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAyB;QAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,MAAkB,EAClB,OAAyB;QAEzB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,OAAO,GACX,IAAI,CAAC,UAAU,KAAK,SAAS;gBAC3B,CAAC,CAAC,8BAA8B;gBAChC,CAAC,CAAC,+BAA+B,CAAC;YACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,kBAAkB,OAAO,EAAE,CAAC,CAAC;QAE9D,UAAU,CAAC,GAAG,EAAE;YACd,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB;SACrE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,MAAkB;QAClD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC5B,UAAU,CAAC,GAAG,EAAE;wBACd,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;wBACnE,OAAO,EAAE,CAAC;oBACZ,CAAC,EAAE,eAAe,CAAC,CAAC;gBACtB,CAAC,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,QAAQ,GACZ,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MemoryManager – OpenViking HTTP 客户端封装
|
|
3
|
+
*
|
|
4
|
+
* 负责与 OpenViking Server 通信,管理记忆同步和检索。
|
|
5
|
+
* 所有操作均为尽力而为(best-effort),失败不影响主推理流程。
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Helpers
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
const log = (...args) => console.log("[Memory]", ...args);
|
|
11
|
+
const warn = (...args) => console.warn("[Memory]", ...args);
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// MemoryManager
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
export class MemoryManager {
|
|
16
|
+
serverUrl;
|
|
17
|
+
maxMemories;
|
|
18
|
+
/** channelId → OpenViking session ID */
|
|
19
|
+
channelSessions = new Map();
|
|
20
|
+
healthy = false;
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.serverUrl = config.serverUrl.replace(/\/+$/, "");
|
|
23
|
+
this.maxMemories = config.maxMemories ?? 5;
|
|
24
|
+
}
|
|
25
|
+
// ── HTTP helpers ──────────────────────────────────────────────────────
|
|
26
|
+
async request(method, path, body) {
|
|
27
|
+
const url = `${this.serverUrl}${path}`;
|
|
28
|
+
try {
|
|
29
|
+
const res = await fetch(url, {
|
|
30
|
+
method,
|
|
31
|
+
headers: { "Content-Type": "application/json" },
|
|
32
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
33
|
+
signal: AbortSignal.timeout(10_000),
|
|
34
|
+
});
|
|
35
|
+
return (await res.json());
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
warn(`Request failed: ${method} ${path}`, err);
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// ── 生命周期 ──────────────────────────────────────────────────────────
|
|
43
|
+
/** 检查 OpenViking Server 是否可达 */
|
|
44
|
+
async healthCheck() {
|
|
45
|
+
try {
|
|
46
|
+
const url = `${this.serverUrl}/api/v1/system/status`;
|
|
47
|
+
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
48
|
+
this.healthy = res.ok;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
this.healthy = false;
|
|
52
|
+
}
|
|
53
|
+
if (this.healthy) {
|
|
54
|
+
log("OpenViking server is healthy at", this.serverUrl);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
warn("OpenViking server is unreachable at", this.serverUrl);
|
|
58
|
+
}
|
|
59
|
+
return this.healthy;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 为指定 channel 创建 OpenViking Session。
|
|
63
|
+
* 如果已有 session 则返回已有的 ID。
|
|
64
|
+
*/
|
|
65
|
+
async createSession(channelId) {
|
|
66
|
+
const existing = this.channelSessions.get(channelId);
|
|
67
|
+
if (existing)
|
|
68
|
+
return existing;
|
|
69
|
+
const resp = await this.request("POST", "/api/v1/sessions", {});
|
|
70
|
+
if (!resp || resp.status !== "ok" || !resp.result?.session_id) {
|
|
71
|
+
warn("Failed to create OV session for channel", channelId);
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const ovSessionId = resp.result.session_id;
|
|
75
|
+
this.channelSessions.set(channelId, ovSessionId);
|
|
76
|
+
log(`Created OV session: ${ovSessionId} for channel: ${channelId}`);
|
|
77
|
+
return ovSessionId;
|
|
78
|
+
}
|
|
79
|
+
// ── 消息同步 ──────────────────────────────────────────────────────────
|
|
80
|
+
/**
|
|
81
|
+
* 添加消息到 OV Session(异步、fire-and-forget)。
|
|
82
|
+
* 不阻塞主推理流程。
|
|
83
|
+
*/
|
|
84
|
+
syncMessage(channelId, role, content) {
|
|
85
|
+
const ovSessionId = this.channelSessions.get(channelId);
|
|
86
|
+
if (!ovSessionId || !content.trim())
|
|
87
|
+
return;
|
|
88
|
+
// Fire-and-forget
|
|
89
|
+
this.request("POST", `/api/v1/sessions/${ovSessionId}/messages`, {
|
|
90
|
+
role,
|
|
91
|
+
content,
|
|
92
|
+
}).catch((err) => {
|
|
93
|
+
warn("Failed to sync message:", err);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// ── 记忆检索 ──────────────────────────────────────────────────────────
|
|
97
|
+
/**
|
|
98
|
+
* 根据用户消息检索相关记忆。
|
|
99
|
+
* 返回格式化好的 context 字符串,可直接注入 system prompt。
|
|
100
|
+
* 如果无可用记忆或出错则返回空字符串。
|
|
101
|
+
*/
|
|
102
|
+
async retrieveMemories(query) {
|
|
103
|
+
if (!this.healthy)
|
|
104
|
+
return "";
|
|
105
|
+
// 同时检索 user memories 和 agent memories
|
|
106
|
+
const [userMemories, agentMemories] = await Promise.all([
|
|
107
|
+
this.findMemories(query, "viking://user/memories"),
|
|
108
|
+
this.findMemories(query, "viking://agent/memories"),
|
|
109
|
+
]);
|
|
110
|
+
const allMemories = [...userMemories, ...agentMemories];
|
|
111
|
+
if (allMemories.length === 0)
|
|
112
|
+
return "";
|
|
113
|
+
return this.formatMemoryContext(allMemories);
|
|
114
|
+
}
|
|
115
|
+
async findMemories(query, targetUri) {
|
|
116
|
+
try {
|
|
117
|
+
const resp = await this.request("POST", "/api/v1/search/find", {
|
|
118
|
+
query,
|
|
119
|
+
target_uri: targetUri,
|
|
120
|
+
limit: this.maxMemories,
|
|
121
|
+
});
|
|
122
|
+
if (!resp || resp.status !== "ok")
|
|
123
|
+
return [];
|
|
124
|
+
// OpenViking find 返回 results 或 items
|
|
125
|
+
return resp.result?.results ?? resp.result?.items ?? [];
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
formatMemoryContext(memories) {
|
|
132
|
+
if (memories.length === 0)
|
|
133
|
+
return "";
|
|
134
|
+
const lines = [
|
|
135
|
+
"## 历史记忆(来自以往对话)",
|
|
136
|
+
"",
|
|
137
|
+
"以下是与当前用户相关的历史记忆,请在回答时参考:",
|
|
138
|
+
"",
|
|
139
|
+
];
|
|
140
|
+
for (const mem of memories) {
|
|
141
|
+
const label = this.categorizeUri(mem.uri);
|
|
142
|
+
const text = mem.abstract || mem.content || "";
|
|
143
|
+
if (text.trim()) {
|
|
144
|
+
lines.push(`### ${label}`);
|
|
145
|
+
lines.push(text.trim());
|
|
146
|
+
lines.push("");
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return lines.join("\n");
|
|
150
|
+
}
|
|
151
|
+
categorizeUri(uri) {
|
|
152
|
+
if (uri.includes("/profile"))
|
|
153
|
+
return "用户画像";
|
|
154
|
+
if (uri.includes("/preferences"))
|
|
155
|
+
return "用户偏好";
|
|
156
|
+
if (uri.includes("/entities"))
|
|
157
|
+
return "关联实体";
|
|
158
|
+
if (uri.includes("/events"))
|
|
159
|
+
return "历史事件";
|
|
160
|
+
if (uri.includes("/cases"))
|
|
161
|
+
return "相关案例";
|
|
162
|
+
if (uri.includes("/patterns"))
|
|
163
|
+
return "经验模式";
|
|
164
|
+
return "记忆片段";
|
|
165
|
+
}
|
|
166
|
+
// ── 会话提交 ──────────────────────────────────────────────────────────
|
|
167
|
+
/**
|
|
168
|
+
* 提交 OV Session,触发后台记忆提取。
|
|
169
|
+
* 使用 wait=false 让 OpenViking 异步处理。
|
|
170
|
+
*/
|
|
171
|
+
async commitSession(channelId) {
|
|
172
|
+
const ovSessionId = this.channelSessions.get(channelId);
|
|
173
|
+
if (!ovSessionId)
|
|
174
|
+
return;
|
|
175
|
+
log(`Committing OV session: ${ovSessionId} for channel: ${channelId}`);
|
|
176
|
+
const resp = await this.request("POST", `/api/v1/sessions/${ovSessionId}/commit?wait=false`, {});
|
|
177
|
+
if (resp?.status === "ok") {
|
|
178
|
+
log("OV session commit accepted (background processing)");
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
warn("OV session commit failed:", resp?.error?.message);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* 销毁 channel 的 OV Session 映射。
|
|
186
|
+
* 先尝试提交以提取记忆,然后移除映射。
|
|
187
|
+
*/
|
|
188
|
+
async disposeSession(channelId) {
|
|
189
|
+
if (this.channelSessions.has(channelId)) {
|
|
190
|
+
await this.commitSession(channelId);
|
|
191
|
+
this.channelSessions.delete(channelId);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
package/runtime/start.bat
CHANGED
|
@@ -1,18 +1,51 @@
|
|
|
1
1
|
@echo off
|
|
2
2
|
cd /d "%~dp0"
|
|
3
3
|
|
|
4
|
+
rem Read the pack name
|
|
5
|
+
set "PACK_NAME=Skills Pack"
|
|
6
|
+
where node >nul 2>nul
|
|
7
|
+
if %errorlevel% equ 0 (
|
|
8
|
+
if exist "skillpack.json" (
|
|
9
|
+
for /f "delims=" %%i in ('node -e "console.log(JSON.parse(require('fs').readFileSync('skillpack.json','utf-8')).name)" 2^>nul') do set "PACK_NAME=%%i"
|
|
10
|
+
)
|
|
11
|
+
)
|
|
12
|
+
|
|
4
13
|
echo.
|
|
5
|
-
echo Starting
|
|
14
|
+
echo Starting %PACK_NAME%...
|
|
6
15
|
echo.
|
|
7
16
|
|
|
8
|
-
|
|
17
|
+
rem Install dependencies
|
|
18
|
+
if not exist "server\node_modules" (
|
|
9
19
|
echo Installing dependencies...
|
|
10
|
-
cd server && npm
|
|
20
|
+
cd server && npm install --omit=dev && cd ..
|
|
11
21
|
echo.
|
|
12
22
|
)
|
|
13
23
|
|
|
14
|
-
|
|
24
|
+
rem First-run flag
|
|
25
|
+
set "FIRST_RUN=1"
|
|
15
26
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
27
|
+
:loop
|
|
28
|
+
set "SKILLPACK_FIRST_RUN=%FIRST_RUN%"
|
|
29
|
+
set "PACK_ROOT=%~dp0"
|
|
30
|
+
set "NODE_ENV=production"
|
|
31
|
+
node server\dist\index.js
|
|
32
|
+
set "EXIT_CODE=%errorlevel%"
|
|
33
|
+
|
|
34
|
+
set "FIRST_RUN=0"
|
|
35
|
+
|
|
36
|
+
rem Only restart on exit code 75 (/restart command)
|
|
37
|
+
if %EXIT_CODE% equ 75 (
|
|
38
|
+
echo.
|
|
39
|
+
echo Restarting...
|
|
40
|
+
timeout /t 1 /nobreak >nul
|
|
41
|
+
goto loop
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
rem All other exit codes → stop
|
|
45
|
+
if %EXIT_CODE% equ 64 (
|
|
46
|
+
echo.
|
|
47
|
+
echo Shutdown complete.
|
|
48
|
+
) else if %EXIT_CODE% neq 0 (
|
|
49
|
+
echo.
|
|
50
|
+
echo Process exited with code %EXIT_CODE%.
|
|
51
|
+
)
|
package/runtime/start.sh
CHANGED
|
@@ -11,15 +11,40 @@ echo ""
|
|
|
11
11
|
echo " Starting ${PACK_NAME}..."
|
|
12
12
|
echo ""
|
|
13
13
|
|
|
14
|
-
# Install dependencies
|
|
15
|
-
if [ ! -
|
|
14
|
+
# Install dependencies
|
|
15
|
+
if [ ! -d "server/node_modules" ]; then
|
|
16
16
|
echo " Installing dependencies..."
|
|
17
17
|
cd server && npm install --omit=dev && cd ..
|
|
18
18
|
echo ""
|
|
19
19
|
fi
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
# First-run flag (controls browser auto-open on first launch only)
|
|
22
|
+
FIRST_RUN=1
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"$
|
|
24
|
+
while true; do
|
|
25
|
+
SKILLPACK_FIRST_RUN="$FIRST_RUN" \
|
|
26
|
+
PACK_ROOT="$(pwd)" \
|
|
27
|
+
NODE_ENV="production" \
|
|
28
|
+
node server/dist/index.js
|
|
29
|
+
EXIT_CODE=$?
|
|
30
|
+
|
|
31
|
+
FIRST_RUN=0
|
|
32
|
+
|
|
33
|
+
# Only restart on exit code 75 (/restart command)
|
|
34
|
+
if [ "$EXIT_CODE" -eq 75 ]; then
|
|
35
|
+
echo ""
|
|
36
|
+
echo " Restarting..."
|
|
37
|
+
sleep 1
|
|
38
|
+
continue
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
# All other exit codes (0, 64, crash, Ctrl+C, kill, etc.) → stop
|
|
42
|
+
if [ "$EXIT_CODE" -eq 64 ]; then
|
|
43
|
+
echo ""
|
|
44
|
+
echo " Shutdown complete."
|
|
45
|
+
elif [ "$EXIT_CODE" -ne 0 ]; then
|
|
46
|
+
echo ""
|
|
47
|
+
echo " Process exited with code $EXIT_CODE."
|
|
48
|
+
fi
|
|
49
|
+
break
|
|
50
|
+
done
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
const path = require("node:path");
|
|
2
|
-
const fs = require("node:fs");
|
|
3
|
-
|
|
4
|
-
const fallbackName = path.basename(__dirname) || "skillpack";
|
|
5
|
-
let appName = fallbackName;
|
|
6
|
-
|
|
7
|
-
try {
|
|
8
|
-
const skillpackPath = path.join(__dirname, "skillpack.json");
|
|
9
|
-
if (fs.existsSync(skillpackPath)) {
|
|
10
|
-
const parsed = JSON.parse(fs.readFileSync(skillpackPath, "utf-8"));
|
|
11
|
-
if (typeof parsed.name === "string" && parsed.name.trim()) {
|
|
12
|
-
appName = parsed.name.trim();
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
} catch (err) {
|
|
16
|
-
console.warn("[PM2] Failed to read skillpack.json for app name:", err);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
module.exports = {
|
|
20
|
-
apps: [
|
|
21
|
-
{
|
|
22
|
-
name: appName,
|
|
23
|
-
cwd: path.join(__dirname, "server"),
|
|
24
|
-
script: "dist/index.js",
|
|
25
|
-
autorestart: true,
|
|
26
|
-
stop_exit_codes: [64],
|
|
27
|
-
restart_delay: 1000,
|
|
28
|
-
kill_timeout: 3000,
|
|
29
|
-
env: {
|
|
30
|
-
NODE_ENV: "production",
|
|
31
|
-
PACK_ROOT: __dirname,
|
|
32
|
-
SKILLPACK_PROCESS_MANAGER: "pm2",
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
};
|