@cremini/skillpack 1.0.9-im.0 → 1.0.9-im.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/package.json +1 -1
  2. package/runtime/README.md +16 -0
  3. package/runtime/ecosystem.config.cjs +20 -0
  4. package/runtime/server/dist/adapters/markdown.js +74 -0
  5. package/runtime/server/dist/adapters/markdown.js.map +1 -0
  6. package/runtime/server/dist/adapters/slack.js +369 -0
  7. package/runtime/server/dist/adapters/slack.js.map +1 -0
  8. package/runtime/server/dist/adapters/telegram.js +25 -26
  9. package/runtime/server/dist/adapters/telegram.js.map +1 -0
  10. package/runtime/server/dist/adapters/types.js +1 -0
  11. package/runtime/server/dist/adapters/types.js.map +1 -0
  12. package/runtime/server/dist/adapters/web.js +60 -36
  13. package/runtime/server/dist/adapters/web.js.map +1 -0
  14. package/runtime/server/dist/agent.js +10 -5
  15. package/runtime/server/dist/agent.js.map +1 -0
  16. package/runtime/server/dist/config.js +73 -0
  17. package/runtime/server/dist/config.js.map +1 -0
  18. package/runtime/server/dist/index.js +50 -25
  19. package/runtime/server/dist/index.js.map +1 -0
  20. package/runtime/server/dist/lifecycle.js +85 -0
  21. package/runtime/server/dist/lifecycle.js.map +1 -0
  22. package/runtime/server/package-lock.json +387 -10
  23. package/runtime/server/package.json +6 -5
  24. package/runtime/web/index.html +60 -16
  25. package/runtime/web/js/api.js +25 -0
  26. package/runtime/web/{app.js → js/chat.js} +112 -193
  27. package/runtime/web/js/config.js +16 -0
  28. package/runtime/web/js/main.js +47 -0
  29. package/runtime/web/js/settings.js +190 -0
  30. package/runtime/web/styles.css +196 -0
  31. package/runtime/server/chat-proxy.js +0 -229
  32. package/runtime/server/index.js +0 -63
  33. package/runtime/server/routes.js +0 -104
@@ -1,6 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { WebSocketServer } from "ws";
4
+ import { configManager } from "../config.js";
4
5
  // ---------------------------------------------------------------------------
5
6
  // Helpers
6
7
  // ---------------------------------------------------------------------------
@@ -17,6 +18,15 @@ function parseCommand(text) {
17
18
  const trimmed = text.trim().toLowerCase();
18
19
  return COMMANDS[trimmed] ?? null;
19
20
  }
21
+ function getRuntimeConfigSignature(config) {
22
+ return JSON.stringify({
23
+ apiKey: config.apiKey || "",
24
+ provider: config.provider || "openai",
25
+ telegramToken: config.adapters?.telegram?.token || "",
26
+ slackBotToken: config.adapters?.slack?.botToken || "",
27
+ slackAppToken: config.adapters?.slack?.appToken || "",
28
+ });
29
+ }
20
30
  // ---------------------------------------------------------------------------
21
31
  // WebAdapter
22
32
  // ---------------------------------------------------------------------------
@@ -25,60 +35,73 @@ export class WebAdapter {
25
35
  wss = null;
26
36
  agent = null;
27
37
  async start(ctx) {
28
- const { agent, server, app, rootDir } = ctx;
38
+ const { agent, server, app, rootDir, lifecycle } = ctx;
29
39
  this.agent = agent;
30
40
  // -- API key & provider (in-memory, can be overridden by frontend) ------
31
- // Read from data/config.json first
32
- let apiKey = "";
33
- let currentProvider = "openai";
34
- const configPath = path.join(rootDir, "data", "config.json");
35
- if (fs.existsSync(configPath)) {
36
- try {
37
- const dataConfig = JSON.parse(fs.readFileSync(configPath, "utf-8"));
38
- if (dataConfig.apiKey)
39
- apiKey = dataConfig.apiKey;
40
- if (dataConfig.provider)
41
- currentProvider = dataConfig.provider;
42
- }
43
- catch {
44
- // ignore malformed config
45
- }
46
- }
47
- // Environment variables override config file
48
- if (process.env.OPENAI_API_KEY) {
49
- apiKey = process.env.OPENAI_API_KEY;
50
- currentProvider = "openai";
51
- }
52
- else if (process.env.ANTHROPIC_API_KEY) {
53
- apiKey = process.env.ANTHROPIC_API_KEY;
54
- currentProvider = "anthropic";
55
- }
41
+ const currentConf = configManager.getConfig();
42
+ let apiKey = currentConf.apiKey || "";
43
+ let currentProvider = currentConf.provider || "openai";
56
44
  // -- HTTP API routes ----------------------------------------------------
57
45
  app.get("/api/config", (_req, res) => {
58
46
  const config = getPackConfig(rootDir);
47
+ const conf = configManager.getConfig();
59
48
  res.json({
60
49
  name: config.name,
61
50
  description: config.description,
62
51
  prompts: config.prompts || [],
63
52
  skills: config.skills || [],
64
- hasApiKey: !!apiKey,
65
- provider: currentProvider,
53
+ hasApiKey: !!conf.apiKey,
54
+ provider: conf.provider || "openai",
55
+ adapters: conf.adapters || {},
56
+ runtimeControl: lifecycle.getRuntimeControl(),
66
57
  });
67
58
  });
68
59
  app.get("/api/skills", (_req, res) => {
69
60
  const config = getPackConfig(rootDir);
70
61
  res.json(config.skills || []);
71
62
  });
72
- app.post("/api/config/key", (req, res) => {
73
- const { key, provider } = req.body;
74
- if (!key) {
75
- res.status(400).json({ error: "API key is required" });
76
- return;
63
+ app.post("/api/config/update", (req, res) => {
64
+ const { key, provider, adapters } = req.body;
65
+ const updates = {};
66
+ const beforeConfig = JSON.parse(JSON.stringify(configManager.getConfig()));
67
+ if (key !== undefined) {
68
+ updates.apiKey = key;
69
+ apiKey = key;
77
70
  }
78
- apiKey = key;
79
- if (provider)
71
+ if (provider !== undefined) {
72
+ updates.provider = provider;
80
73
  currentProvider = provider;
81
- res.json({ success: true, provider: currentProvider });
74
+ }
75
+ if (adapters !== undefined) {
76
+ updates.adapters = adapters;
77
+ }
78
+ configManager.save(rootDir, updates);
79
+ // Note: PackAgent instances need to be recreated or have their keys updated dynamically,
80
+ // but if the design is to restart to take effect or if we only need it persisted, this covers the save.
81
+ // Depending on agent implementation, we might need agent.updateConfig({ apiKey: key, provider: currentProvider })
82
+ const newConf = configManager.getConfig();
83
+ const requiresRestart = getRuntimeConfigSignature(beforeConfig) !==
84
+ getRuntimeConfigSignature(newConf);
85
+ res.json({
86
+ success: true,
87
+ provider: newConf.provider,
88
+ adapters: newConf.adapters,
89
+ requiresRestart,
90
+ runtimeControl: lifecycle.getRuntimeControl(),
91
+ });
92
+ });
93
+ app.post("/api/runtime/restart", async (_req, res) => {
94
+ const runtimeControl = lifecycle.getRuntimeControl();
95
+ if (!runtimeControl.canManagedRestart) {
96
+ res.status(409).json({
97
+ success: false,
98
+ message: "Managed restart is unavailable for this process.",
99
+ runtimeControl,
100
+ });
101
+ return;
102
+ }
103
+ const result = await lifecycle.requestRestart("web");
104
+ res.status(202).json({ ...result, runtimeControl });
82
105
  });
83
106
  app.delete("/api/chat", (_req, res) => {
84
107
  res.json({ success: true });
@@ -174,3 +197,4 @@ export class WebAdapter {
174
197
  });
175
198
  }
176
199
  }
200
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/adapters/web.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,13 @@ function getAssistantDiagnostics(message) {
21
21
  const toolCalls = content.filter((item) => item?.type === "toolCall").length;
22
22
  return { stopReason, errorMessage, hasText: text.length > 0, toolCalls };
23
23
  }
24
+ function getLifecycleTrigger(channelId) {
25
+ if (channelId.startsWith("telegram-"))
26
+ return "telegram";
27
+ if (channelId.startsWith("slack-"))
28
+ return "slack";
29
+ return "web";
30
+ }
24
31
  // ---------------------------------------------------------------------------
25
32
  // PackAgent
26
33
  // ---------------------------------------------------------------------------
@@ -179,13 +186,10 @@ export class PackAgent {
179
186
  }
180
187
  case "restart":
181
188
  log("[PackAgent] Restart requested");
182
- // Give a brief delay so the response can be sent
183
- setTimeout(() => process.exit(0), 500);
184
- return { success: true, message: "Restarting..." };
189
+ return this.options.lifecycleHandler.requestRestart(getLifecycleTrigger(channelId));
185
190
  case "shutdown":
186
191
  log("[PackAgent] Shutdown requested");
187
- setTimeout(() => process.exit(0), 500);
188
- return { success: true, message: "Shutting down..." };
192
+ return this.options.lifecycleHandler.requestShutdown(getLifecycleTrigger(channelId));
189
193
  default:
190
194
  return { success: false, message: `Unknown command: ${command}` };
191
195
  }
@@ -216,3 +220,4 @@ export class PackAgent {
216
220
  // TODO: Implement session restoration
217
221
  }
218
222
  }
223
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAavC,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAClE,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAapE,SAAS,uBAAuB,CAAC,OAAY;IAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC;IACnD,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY;QACpB,CAAC,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,SAAS;YACjD,CAAC,CAAC,WAAW,UAAU,EAAE;YACzB,CAAC,CAAC,EAAE,CAAC,CAAC;IAEV,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,IAAI,GAAG,OAAO;SACjB,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;SAC5C,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,EAAE,CAAC;SACR,IAAI,EAAE,CAAC;IACV,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAC9B,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,UAAU,CACzC,CAAC,MAAM,CAAC;IAET,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,IAAI,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAC;IACzD,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IACnD,OAAO,KAAK,CAAC;AACf,CAAC;AAWD,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,OAAO,SAAS;IACZ,OAAO,CAAmB;IAC1B,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAErD,YAAY,OAAyB;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,SAAiB;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5D,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC;YACvC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE;SAC7C,CAAC,CAAC;QACF,WAAmB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAExD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEpD,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;QAEjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,GAAG,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAG,IAAI,qBAAqB,CAAC;YAC/C,GAAG,EAAE,OAAO;YACZ,oBAAoB,EAAE,CAAC,UAAU,CAAC;SACnC,CAAC,CAAC;QACH,MAAM,cAAc,CAAC,MAAM,EAAE,CAAC;QAE9B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC;YAC3C,GAAG,EAAE,OAAO;YACZ,WAAW;YACX,aAAa;YACb,cAAc;YACd,cAAc;YACd,KAAK;SACN,CAAC,CAAC;QAEH,MAAM,cAAc,GAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAC7C,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,SAAiB,EACjB,IAAY,EACZ,OAAoC;QAEpC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACpD,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;QAElB,IAAI,oBAAoB,GAAG,KAAK,CAAC;QAEjC,mDAAmD;QACnD,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAU,EAAE,EAAE;YACtD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,aAAa;oBAChB,GAAG,CAAC,iCAAiC,CAAC,CAAC;oBACvC,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBACjD,GAAG,CAAC,gCAAgC,CAAC,CAAC;oBACtC,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;oBACjC,MAAM;gBAER,KAAK,eAAe;oBAClB,GAAG,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC;oBACzD,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;wBACnC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBACtD,CAAC;oBACD,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;oBACpE,MAAM;gBAER,KAAK,gBAAgB;oBACnB,IAAI,KAAK,CAAC,qBAAqB,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;wBACvD,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;wBACzC,OAAO,CAAC;4BACN,IAAI,EAAE,YAAY;4BAClB,KAAK,EAAE,KAAK,CAAC,qBAAqB,CAAC,KAAK;yBACzC,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,IAAI,KAAK,gBAAgB,EAAE,CAAC;wBAClE,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,OAAO,CAAC;4BACN,IAAI,EAAE,gBAAgB;4BACtB,KAAK,EAAE,KAAK,CAAC,qBAAqB,CAAC,KAAK;yBACzC,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM;gBAER,KAAK,aAAa;oBAChB,GAAG,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC;oBACvD,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;wBACxC,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC3D,IAAI,WAAW,EAAE,CAAC;4BAChB,GAAG,CACD,sCAAsC,WAAW,CAAC,UAAU,SAAS,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,cAAc,WAAW,CAAC,SAAS,EAAE,CAC7I,CAAC;4BACF,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;gCAC7B,GAAG,CAAC,qBAAqB,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;4BACvD,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;oBAClE,MAAM;gBAER,KAAK,sBAAsB;oBACzB,oBAAoB,GAAG,IAAI,CAAC;oBAC5B,GAAG,CAAC,sBAAsB,KAAK,CAAC,QAAQ,OAAO,CAAC,CAAC;oBACjD,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClD,OAAO,CAAC;wBACN,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,SAAS,EAAE,KAAK,CAAC,IAAI;qBACtB,CAAC,CAAC;oBACH,MAAM;gBAER,KAAK,oBAAoB;oBACvB,oBAAoB,GAAG,IAAI,CAAC;oBAC5B,GAAG,CAAC,kBAAkB,KAAK,CAAC,QAAQ,OAAO,CAAC,CAAC;oBAC7C,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC9C,OAAO,CAAC;wBACN,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;qBACrB,CAAC,CAAC;oBACH,MAAM;gBAER,KAAK,WAAW;oBACd,GAAG,CAAC,iCAAiC,CAAC,CAAC;oBACvC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;oBAC/B,MAAM;YACV,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE9B,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAEzD,IAAI,WAAW,EAAE,YAAY,EAAE,CAAC;gBAC9B,OAAO;oBACL,UAAU,EAAE,WAAW,CAAC,UAAU;oBAClC,YAAY,EAAE,WAAW,CAAC,YAAY;iBACvC,CAAC;YACJ,CAAC;YAED,IACE,WAAW;gBACX,CAAC,WAAW,CAAC,OAAO;gBACpB,WAAW,CAAC,SAAS,KAAK,CAAC;gBAC3B,CAAC,oBAAoB,EACrB,CAAC;gBACD,OAAO;oBACL,UAAU,EAAE,WAAW,CAAC,UAAU;oBAClC,YAAY,EACV,0EAA0E;iBAC7E,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,IAAI,SAAS,EAAE,CAAC;QAC9D,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC;YACnB,WAAW,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,OAAmB,EACnB,SAAiB;QAEjB,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACxC,IAAI,EAAE,EAAE,CAAC;oBACP,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;YACxD,CAAC;YAED,KAAK,SAAS;gBACZ,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBACrC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CACjD,mBAAmB,CAAC,SAAS,CAAC,CAC/B,CAAC;YAEJ,KAAK,UAAU;gBACb,GAAG,CAAC,gCAAgC,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAClD,mBAAmB,CAAC,SAAS,CAAC,CAC/B,CAAC;YAEJ;gBACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,OAAO,EAAE,EAAE,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;YAChB,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,IAAI,KAAK,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,EAAE,EAAE,CAAC;YACP,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,YAAY;QACV,kDAAkD;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,cAAc,CAAC,UAAkB;QACrC,sCAAsC;IACxC,CAAC;CACF"}
@@ -0,0 +1,73 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ export class ConfigManager {
4
+ static instance;
5
+ configData = {};
6
+ configPath = "";
7
+ constructor() { }
8
+ static getInstance() {
9
+ if (!ConfigManager.instance) {
10
+ ConfigManager.instance = new ConfigManager();
11
+ }
12
+ return ConfigManager.instance;
13
+ }
14
+ load(rootDir) {
15
+ this.configPath = path.join(rootDir, "data", "config.json");
16
+ if (fs.existsSync(this.configPath)) {
17
+ try {
18
+ this.configData = JSON.parse(fs.readFileSync(this.configPath, "utf-8"));
19
+ console.log(" Loaded config from data/config.json");
20
+ }
21
+ catch (err) {
22
+ console.warn(" Warning: Failed to parse data/config.json:", err);
23
+ }
24
+ }
25
+ // Environment variables as fallback if not set in config file
26
+ let { apiKey = "", provider = "openai" } = this.configData;
27
+ if (!apiKey) {
28
+ if (process.env.OPENAI_API_KEY) {
29
+ apiKey = process.env.OPENAI_API_KEY;
30
+ provider = "openai";
31
+ }
32
+ else if (process.env.ANTHROPIC_API_KEY) {
33
+ apiKey = process.env.ANTHROPIC_API_KEY;
34
+ provider = "anthropic";
35
+ }
36
+ }
37
+ this.configData.apiKey = apiKey;
38
+ this.configData.provider = provider;
39
+ return this.configData;
40
+ }
41
+ getConfig() {
42
+ return this.configData;
43
+ }
44
+ save(rootDir, updates) {
45
+ const configDir = path.join(rootDir, "data");
46
+ if (!this.configPath) {
47
+ this.configPath = path.join(rootDir, "data", "config.json");
48
+ }
49
+ if (!fs.existsSync(configDir)) {
50
+ fs.mkdirSync(configDir, { recursive: true });
51
+ }
52
+ // Merge configuration
53
+ if (updates.apiKey !== undefined)
54
+ this.configData.apiKey = updates.apiKey;
55
+ if (updates.provider !== undefined)
56
+ this.configData.provider = updates.provider;
57
+ // Deep merge for adapters to avoid losing other objects not provided in this update
58
+ if (updates.adapters !== undefined) {
59
+ this.configData.adapters = {
60
+ ...(this.configData.adapters || {}),
61
+ ...updates.adapters
62
+ };
63
+ }
64
+ try {
65
+ fs.writeFileSync(this.configPath, JSON.stringify(this.configData, null, 2), "utf-8");
66
+ }
67
+ catch (err) {
68
+ console.error("Failed to save config:", err);
69
+ }
70
+ }
71
+ }
72
+ export const configManager = ConfigManager.getInstance();
73
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ import { createServer } from "node:http";
6
6
  import { exec } from "node:child_process";
7
7
  import { PackAgent } from "./agent.js";
8
8
  import { WebAdapter } from "./adapters/web.js";
9
+ import { configManager } from "./config.js";
10
+ import { Lifecycle } from "./lifecycle.js";
9
11
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
12
  // ---------------------------------------------------------------------------
11
13
  // Resolve root directory
@@ -14,28 +16,12 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
14
16
  // In production (copied to target), go up one level: dist/ → server/ → pack root
15
17
  const serverDir = path.resolve(__dirname, "..");
16
18
  const rootDir = process.env.PACK_ROOT || path.resolve(serverDir, "..");
17
- let dataConfig = {};
18
- const configPath = path.join(rootDir, "data", "config.json");
19
- if (fs.existsSync(configPath)) {
20
- try {
21
- dataConfig = JSON.parse(fs.readFileSync(configPath, "utf-8"));
22
- console.log(" Loaded config from data/config.json");
23
- }
24
- catch (err) {
25
- console.warn(" Warning: Failed to parse data/config.json:", err);
26
- }
27
- }
28
- let apiKey = dataConfig.apiKey || "";
29
- let provider = dataConfig.provider || "openai";
30
- // Environment variables override config file
31
- if (process.env.OPENAI_API_KEY) {
32
- apiKey = process.env.OPENAI_API_KEY;
33
- provider = "openai";
34
- }
35
- else if (process.env.ANTHROPIC_API_KEY) {
36
- apiKey = process.env.ANTHROPIC_API_KEY;
37
- provider = "anthropic";
38
- }
19
+ // ---------------------------------------------------------------------------
20
+ // Read configuration: data/config.json first, env vars override
21
+ // ---------------------------------------------------------------------------
22
+ const dataConfig = configManager.load(rootDir);
23
+ const apiKey = dataConfig.apiKey || "";
24
+ const provider = dataConfig.provider || "openai";
39
25
  const modelId = provider === "anthropic" ? "claude-opus-4-6" : "gpt-5.4";
40
26
  // ---------------------------------------------------------------------------
41
27
  // Create Express app & HTTP server
@@ -47,17 +33,26 @@ const app = express();
47
33
  app.use(express.json());
48
34
  app.use(express.static(webDir));
49
35
  const server = createServer(app);
36
+ const lifecycle = new Lifecycle(server);
50
37
  // ---------------------------------------------------------------------------
51
38
  // Create PackAgent (shared instance)
52
39
  // ---------------------------------------------------------------------------
53
- const agent = new PackAgent({ apiKey, rootDir, provider, modelId });
40
+ const agent = new PackAgent({
41
+ apiKey,
42
+ rootDir,
43
+ provider,
44
+ modelId,
45
+ lifecycleHandler: lifecycle,
46
+ });
54
47
  // ---------------------------------------------------------------------------
55
48
  // Start adapters
56
49
  // ---------------------------------------------------------------------------
57
50
  async function startAdapters() {
51
+ const adapters = [];
58
52
  // Web adapter is always enabled
59
53
  const webAdapter = new WebAdapter();
60
- await webAdapter.start({ agent, server, app, rootDir });
54
+ await webAdapter.start({ agent, server, app, rootDir, lifecycle });
55
+ adapters.push(webAdapter);
61
56
  // Telegram adapter (conditional)
62
57
  if (dataConfig.adapters?.telegram?.token) {
63
58
  try {
@@ -65,12 +60,35 @@ async function startAdapters() {
65
60
  const telegramAdapter = new TelegramAdapter({
66
61
  token: dataConfig.adapters.telegram.token,
67
62
  });
68
- await telegramAdapter.start({ agent, server, app, rootDir });
63
+ await telegramAdapter.start({ agent, server, app, rootDir, lifecycle });
64
+ adapters.push(telegramAdapter);
69
65
  }
70
66
  catch (err) {
71
67
  console.error("[Telegram] Failed to start:", err);
72
68
  }
73
69
  }
70
+ // Slack adapter (conditional)
71
+ const slackConfig = dataConfig.adapters?.slack;
72
+ if (slackConfig?.botToken || slackConfig?.appToken) {
73
+ if (!slackConfig.botToken || !slackConfig.appToken) {
74
+ console.warn("[Slack] Skipped: both adapters.slack.botToken and adapters.slack.appToken are required.");
75
+ }
76
+ else {
77
+ try {
78
+ const { SlackAdapter } = await import("./adapters/slack.js");
79
+ const slackAdapter = new SlackAdapter({
80
+ botToken: slackConfig.botToken,
81
+ appToken: slackConfig.appToken,
82
+ });
83
+ await slackAdapter.start({ agent, server, app, rootDir, lifecycle });
84
+ adapters.push(slackAdapter);
85
+ }
86
+ catch (err) {
87
+ console.error("[Slack] Failed to start:", err);
88
+ }
89
+ }
90
+ }
91
+ lifecycle.registerAdapters(adapters);
74
92
  }
75
93
  // ---------------------------------------------------------------------------
76
94
  // Listen
@@ -104,6 +122,12 @@ function tryListen(port) {
104
122
  }
105
123
  });
106
124
  }
125
+ process.on("SIGINT", () => {
126
+ void lifecycle.requestShutdown("signal");
127
+ });
128
+ process.on("SIGTERM", () => {
129
+ void lifecycle.requestShutdown("signal");
130
+ });
107
131
  // Start adapters, then listen
108
132
  startAdapters()
109
133
  .then(() => {
@@ -114,3 +138,4 @@ startAdapters()
114
138
  console.error("Failed to start adapters:", err);
115
139
  process.exit(1);
116
140
  });
141
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ export const SHUTDOWN_EXIT_CODE = 64;
2
+ export const RESTART_EXIT_CODE = 75;
3
+ const STOP_TIMEOUT_MS = 3_000;
4
+ function detectProcessManager() {
5
+ return process.env.SKILLPACK_PROCESS_MANAGER === "pm2" ? "pm2" : "none";
6
+ }
7
+ export class Lifecycle {
8
+ server;
9
+ exitFn;
10
+ processManager;
11
+ adapters = [];
12
+ stopReason = null;
13
+ constructor(server, exitFn = (code) => process.exit(code)) {
14
+ this.server = server;
15
+ this.exitFn = exitFn;
16
+ this.processManager = detectProcessManager();
17
+ }
18
+ registerAdapters(adapters) {
19
+ this.adapters = adapters;
20
+ }
21
+ getRuntimeControl() {
22
+ return {
23
+ canManagedRestart: this.processManager === "pm2",
24
+ processManager: this.processManager,
25
+ };
26
+ }
27
+ async requestRestart(trigger) {
28
+ return this.requestStop("restart", trigger);
29
+ }
30
+ async requestShutdown(trigger) {
31
+ return this.requestStop("shutdown", trigger);
32
+ }
33
+ async requestStop(reason, trigger) {
34
+ if (this.stopReason) {
35
+ const message = this.stopReason === "restart"
36
+ ? "Restart already in progress."
37
+ : "Shutdown already in progress.";
38
+ return { success: true, message };
39
+ }
40
+ this.stopReason = reason;
41
+ console.log(`[Lifecycle] ${reason} requested via ${trigger}`);
42
+ setTimeout(() => {
43
+ void this.gracefulStopAndExit(reason);
44
+ }, 50);
45
+ return {
46
+ success: true,
47
+ message: reason === "restart" ? "Restarting..." : "Shutting down...",
48
+ };
49
+ }
50
+ async gracefulStopAndExit(reason) {
51
+ try {
52
+ await Promise.race([
53
+ this.gracefulStop(),
54
+ new Promise((resolve) => {
55
+ setTimeout(() => {
56
+ console.warn("[Lifecycle] Graceful stop timed out, forcing exit.");
57
+ resolve();
58
+ }, STOP_TIMEOUT_MS);
59
+ }),
60
+ ]);
61
+ }
62
+ catch (err) {
63
+ console.error("[Lifecycle] Error during graceful stop:", err);
64
+ }
65
+ const exitCode = reason === "restart" ? RESTART_EXIT_CODE : SHUTDOWN_EXIT_CODE;
66
+ this.exitFn(exitCode);
67
+ }
68
+ async gracefulStop() {
69
+ for (const adapter of [...this.adapters].reverse()) {
70
+ try {
71
+ await adapter.stop();
72
+ }
73
+ catch (err) {
74
+ console.error(`[Lifecycle] Failed to stop ${adapter.name}:`, err);
75
+ }
76
+ }
77
+ if (!this.server.listening) {
78
+ return;
79
+ }
80
+ await new Promise((resolve) => {
81
+ this.server.close(() => resolve());
82
+ });
83
+ }
84
+ }
85
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}