@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cremini/skillpack",
3
- "version": "1.0.9-im.4",
3
+ "version": "1.0.9-im.5",
4
4
  "description": "Turn Skills into a Standalone App with UI",
5
5
  "type": "module",
6
6
  "repository": {
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 under the bundled PM2 runtime. After the server starts, your browser opens [http://127.0.0.1:26313](http://127.0.0.1:26313) automatically.
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
- ## Managed Restart with PM2
24
+ ## Process Management
25
25
 
26
- `start.sh` and `start.bat` already use PM2. If you want to launch it manually, use the local PM2 binary inside `server/node_modules`:
26
+ `start.sh` runs the server in a wrapper loop that monitors the exit code:
27
27
 
28
- ```bash
29
- ./server/node_modules/.bin/pm2 startOrRestart ecosystem.config.cjs --update-env
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
- - `/restart` or the web restart button exits with restart code `75`; PM2 brings the process back up
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
- const cmd = process.platform === "darwin"
106
- ? `open ${url}`
107
- : process.platform === "win32"
108
- ? `start ${url}`
109
- : `xdg-open ${url}`;
110
- exec(cmd, () => { });
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.SKILLPACK_PROCESS_MANAGER === "pm2" ? "pm2" : "none";
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 === "pm2",
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":"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"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -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":"AAAA;;;;;GAKG;AAiCH,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;AACrE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;AAEvE,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,OAAO,aAAa;IAChB,SAAS,CAAS;IAClB,WAAW,CAAS;IAC5B,wCAAwC;IAChC,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,MAAoB;QAC9B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,yEAAyE;IAEjE,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAc;QAEd,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM;gBACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,mBAAmB,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,qEAAqE;IAErE,gCAAgC;IAChC,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,uBAAuB,CAAC;YACrD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,GAAG,CAAC,iCAAiC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAC7B,MAAM,EACN,kBAAkB,EAClB,EAAE,CACH,CAAC;QACF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;YAC9D,IAAI,CAAC,yCAAyC,EAAE,SAAS,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACjD,GAAG,CAAC,uBAAuB,WAAW,iBAAiB,SAAS,EAAE,CAAC,CAAC;QACpE,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,qEAAqE;IAErE;;;OAGG;IACH,WAAW,CACT,SAAiB,EACjB,IAA0B,EAC1B,OAAe;QAEf,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO;QAE5C,kBAAkB;QAClB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,oBAAoB,WAAW,WAAW,EAAE;YAC/D,IAAI;YACJ,OAAO;SACR,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACf,IAAI,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IAErE;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAa;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAE7B,sCAAsC;QACtC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,wBAAwB,CAAC;YAClD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,yBAAyB,CAAC;SACpD,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,aAAa,CAAC,CAAC;QACxD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAExC,OAAO,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,KAAa,EACb,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAC7B,MAAM,EACN,qBAAqB,EACrB;gBACE,KAAK;gBACL,UAAU,EAAE,SAAS;gBACrB,KAAK,EAAE,IAAI,CAAC,WAAW;aACxB,CACF,CAAC;YACF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC;YAC7C,qCAAqC;YACrC,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,QAA0B;QACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAErC,MAAM,KAAK,GAAG;YACZ,iBAAiB;YACjB,EAAE;YACF,0BAA0B;YAC1B,EAAE;SACH,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,aAAa,CAAC,GAAW;QAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,MAAM,CAAC;QAC5C,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,MAAM,CAAC;QAChD,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,MAAM,CAAC;QAC7C,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,MAAM,CAAC;QAC3C,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,MAAM,CAAC;QAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,MAAM,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qEAAqE;IAErE;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,GAAG,CAAC,0BAA0B,WAAW,iBAAiB,SAAS,EAAE,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAC7B,MAAM,EACN,oBAAoB,WAAW,oBAAoB,EACnD,EAAE,CACH,CAAC;QACF,IAAI,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;YAC1B,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,2BAA2B,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF"}
@@ -11,7 +11,6 @@
11
11
  "@slack/bolt": "^4.6.0",
12
12
  "express": "^5.1.0",
13
13
  "node-telegram-bot-api": "^0.66.0",
14
- "pm2": "^6.0.14",
15
14
  "ws": "^8.19.0"
16
15
  },
17
16
  "devDependencies": {
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 Skills Pack...
14
+ echo Starting %PACK_NAME%...
6
15
  echo.
7
16
 
8
- if not exist "server\node_modules\.bin\pm2.cmd" (
17
+ rem Install dependencies
18
+ if not exist "server\node_modules" (
9
19
  echo Installing dependencies...
10
- cd server && npm ci --omit=dev && cd ..
20
+ cd server && npm install --omit=dev && cd ..
11
21
  echo.
12
22
  )
13
23
 
14
- set "PM2_BIN=server\node_modules\.bin\pm2.cmd"
24
+ rem First-run flag
25
+ set "FIRST_RUN=1"
15
26
 
16
- echo Launching under PM2...
17
- echo.
18
- "%PM2_BIN%" startOrRestart ecosystem.config.cjs --update-env
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 (including local PM2)
15
- if [ ! -x "server/node_modules/.bin/pm2" ]; then
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
- PM2_BIN="./server/node_modules/.bin/pm2"
21
+ # First-run flag (controls browser auto-open on first launch only)
22
+ FIRST_RUN=1
22
23
 
23
- echo " Launching under PM2..."
24
- echo ""
25
- "$PM2_BIN" startOrRestart ecosystem.config.cjs --update-env
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
- };