@agentplugged/claw 0.1.0 → 0.2.0

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 (87) hide show
  1. package/dist/cli.js +3 -7
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +1 -2
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +5 -5
  6. package/dist/config.js.map +1 -1
  7. package/dist/index.d.ts +0 -9
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +21 -40
  10. package/dist/index.js.map +1 -1
  11. package/dist/router/index.d.ts.map +1 -1
  12. package/dist/router/index.js +363 -77
  13. package/dist/router/index.js.map +1 -1
  14. package/dist/router/logger.d.ts +3 -0
  15. package/dist/router/logger.d.ts.map +1 -1
  16. package/dist/router/logger.js +8 -5
  17. package/dist/router/logger.js.map +1 -1
  18. package/dist/router/types.d.ts +6 -9
  19. package/dist/router/types.d.ts.map +1 -1
  20. package/dist/sidecar/auth.d.ts.map +1 -1
  21. package/dist/sidecar/auth.js +7 -11
  22. package/dist/sidecar/auth.js.map +1 -1
  23. package/dist/sidecar/index.js +104 -21
  24. package/dist/sidecar/index.js.map +1 -1
  25. package/dist/sidecar/routes/addons.d.ts.map +1 -1
  26. package/dist/sidecar/routes/addons.js +3 -13
  27. package/dist/sidecar/routes/addons.js.map +1 -1
  28. package/dist/sidecar/routes/api-keys.d.ts +4 -0
  29. package/dist/sidecar/routes/api-keys.d.ts.map +1 -0
  30. package/dist/sidecar/routes/api-keys.js +221 -0
  31. package/dist/sidecar/routes/api-keys.js.map +1 -0
  32. package/dist/sidecar/routes/bindings.d.ts +5 -0
  33. package/dist/sidecar/routes/bindings.d.ts.map +1 -0
  34. package/dist/sidecar/routes/bindings.js +64 -0
  35. package/dist/sidecar/routes/bindings.js.map +1 -0
  36. package/dist/sidecar/routes/channels.d.ts.map +1 -1
  37. package/dist/sidecar/routes/channels.js +71 -75
  38. package/dist/sidecar/routes/channels.js.map +1 -1
  39. package/dist/sidecar/routes/crons.d.ts +5 -0
  40. package/dist/sidecar/routes/crons.d.ts.map +1 -0
  41. package/dist/sidecar/routes/crons.js +81 -0
  42. package/dist/sidecar/routes/crons.js.map +1 -0
  43. package/dist/sidecar/routes/health.d.ts.map +1 -1
  44. package/dist/sidecar/routes/health.js +1 -5
  45. package/dist/sidecar/routes/health.js.map +1 -1
  46. package/dist/sidecar/routes/kitchen-proxy.d.ts +5 -0
  47. package/dist/sidecar/routes/kitchen-proxy.d.ts.map +1 -0
  48. package/dist/sidecar/routes/kitchen-proxy.js +29 -0
  49. package/dist/sidecar/routes/kitchen-proxy.js.map +1 -0
  50. package/dist/sidecar/routes/memory.d.ts +0 -2
  51. package/dist/sidecar/routes/memory.d.ts.map +1 -1
  52. package/dist/sidecar/routes/memory.js +116 -113
  53. package/dist/sidecar/routes/memory.js.map +1 -1
  54. package/dist/sidecar/routes/metrics.js +5 -5
  55. package/dist/sidecar/routes/restart.d.ts.map +1 -1
  56. package/dist/sidecar/routes/restart.js +11 -2
  57. package/dist/sidecar/routes/restart.js.map +1 -1
  58. package/dist/sidecar/routes/router-config.d.ts +0 -1
  59. package/dist/sidecar/routes/router-config.d.ts.map +1 -1
  60. package/dist/sidecar/routes/router-config.js +2 -139
  61. package/dist/sidecar/routes/router-config.js.map +1 -1
  62. package/dist/sidecar/routes/skills.d.ts.map +1 -1
  63. package/dist/sidecar/routes/skills.js +23 -19
  64. package/dist/sidecar/routes/skills.js.map +1 -1
  65. package/dist/sidecar/routes/soul.d.ts +11 -0
  66. package/dist/sidecar/routes/soul.d.ts.map +1 -1
  67. package/dist/sidecar/routes/soul.js +59 -34
  68. package/dist/sidecar/routes/soul.js.map +1 -1
  69. package/dist/sidecar/routes/system.d.ts +7 -0
  70. package/dist/sidecar/routes/system.d.ts.map +1 -0
  71. package/dist/sidecar/routes/system.js +49 -0
  72. package/dist/sidecar/routes/system.js.map +1 -0
  73. package/dist/sidecar/routes/team.d.ts.map +1 -1
  74. package/dist/sidecar/routes/team.js +121 -74
  75. package/dist/sidecar/routes/team.js.map +1 -1
  76. package/dist/sidecar/routes/update.d.ts.map +1 -1
  77. package/dist/sidecar/routes/update.js +24 -10
  78. package/dist/sidecar/routes/update.js.map +1 -1
  79. package/dist/sidecar/routes/workflow.d.ts +8 -0
  80. package/dist/sidecar/routes/workflow.d.ts.map +1 -0
  81. package/dist/sidecar/routes/workflow.js +232 -0
  82. package/dist/sidecar/routes/workflow.js.map +1 -0
  83. package/dist/sidecar/utils.d.ts +14 -0
  84. package/dist/sidecar/utils.d.ts.map +1 -1
  85. package/dist/sidecar/utils.js +35 -1
  86. package/dist/sidecar/utils.js.map +1 -1
  87. package/package.json +1 -1
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleGetBindings = handleGetBindings;
4
+ exports.handleUpdateBindings = handleUpdateBindings;
5
+ const utils_1 = require("../utils");
6
+ const kitchen_proxy_1 = require("./kitchen-proxy");
7
+ // ---------------------------------------------------------------------------
8
+ // GET /bindings — proxy to ClawKitchen channel bindings endpoint
9
+ // ---------------------------------------------------------------------------
10
+ function handleGetBindings(_config) {
11
+ return async (_req, res) => {
12
+ try {
13
+ const result = await (0, kitchen_proxy_1.proxyToKitchen)("GET", "/api/channels/bindings");
14
+ if (result.status !== 200) {
15
+ (0, utils_1.sendError)(res, result.status, `Kitchen returned ${result.status}: ${JSON.stringify(result.data)}`);
16
+ return;
17
+ }
18
+ const bindings = Array.isArray(result.data)
19
+ ? result.data
20
+ : result.data?.bindings ?? [];
21
+ (0, utils_1.sendJson)(res, 200, {
22
+ bindings,
23
+ count: bindings.length,
24
+ });
25
+ }
26
+ catch (err) {
27
+ (0, utils_1.sendError)(res, 502, `Failed to reach ClawKitchen: ${err.message}`);
28
+ }
29
+ };
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // PUT /bindings — update channel bindings via ClawKitchen
33
+ // ---------------------------------------------------------------------------
34
+ function handleUpdateBindings(_config) {
35
+ return async (req, res) => {
36
+ let body;
37
+ try {
38
+ body = (await (0, utils_1.parseBody)(req));
39
+ }
40
+ catch {
41
+ (0, utils_1.sendError)(res, 400, "Invalid JSON body");
42
+ return;
43
+ }
44
+ const bindings = body.bindings;
45
+ if (!Array.isArray(bindings)) {
46
+ (0, utils_1.sendError)(res, 422, "bindings must be an array");
47
+ return;
48
+ }
49
+ if (bindings.length > 20) {
50
+ (0, utils_1.sendError)(res, 422, "Maximum 20 bindings allowed");
51
+ return;
52
+ }
53
+ try {
54
+ const result = await (0, kitchen_proxy_1.proxyToKitchen)("PUT", "/api/channels/bindings", {
55
+ bindings,
56
+ });
57
+ (0, utils_1.sendJson)(res, result.status, result.data);
58
+ }
59
+ catch (err) {
60
+ (0, utils_1.sendError)(res, 502, `Failed to reach ClawKitchen: ${err.message}`);
61
+ }
62
+ };
63
+ }
64
+ //# sourceMappingURL=bindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../src/sidecar/routes/bindings.ts"],"names":[],"mappings":";;AAUA,8CA8BC;AAMD,oDAmCC;AA/ED,oCAA0D;AAE1D,mDAAiD;AAEjD,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AAE9E,SAAgB,iBAAiB,CAAC,OAAmB;IACnD,OAAO,KAAK,EAAE,IAAqB,EAAE,GAAmB,EAAiB,EAAE;QACzE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;YAErE,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1B,IAAA,iBAAS,EACP,GAAG,EACH,MAAM,CAAC,MAAM,EACb,oBAAoB,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACpE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;gBACzC,CAAC,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAE,MAAM,CAAC,IAAgC,EAAE,QAAQ,IAAI,EAAE,CAAC;YAE7D,IAAA,gBAAQ,EAAC,GAAG,EAAE,GAAG,EAAE;gBACjB,QAAQ;gBACR,KAAK,EAAG,QAAsB,CAAC,MAAM;aACtC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAA,iBAAS,EACP,GAAG,EACH,GAAG,EACH,gCAAiC,GAAa,CAAC,OAAO,EAAE,CACzD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,0DAA0D;AAC1D,8EAA8E;AAE9E,SAAgB,oBAAoB,CAAC,OAAmB;IACtD,OAAO,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAiB,EAAE;QACxE,IAAI,IAA8B,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,IAAA,iBAAS,EAAC,GAAG,CAAC,CAA6B,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,IAAA,iBAAS,EAAC,GAAG,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,IAAA,iBAAS,EAAC,GAAG,EAAE,GAAG,EAAE,2BAA2B,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzB,IAAA,iBAAS,EAAC,GAAG,EAAE,GAAG,EAAE,6BAA6B,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,wBAAwB,EAAE;gBACnE,QAAQ;aACT,CAAC,CAAC;YAEH,IAAA,gBAAQ,EAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAA,iBAAS,EACP,GAAG,EACH,GAAG,EACH,gCAAiC,GAAa,CAAC,OAAO,EAAE,CACzD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../src/sidecar/routes/channels.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA8BxC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CA8FxE"}
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../src/sidecar/routes/channels.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAyDxC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAoFxE"}
@@ -1,54 +1,46 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.handleConfigureChannels = handleConfigureChannels;
37
- const fs = __importStar(require("fs/promises"));
38
4
  const utils_1 = require("../utils");
5
+ /** Allowed channel names — prevents injection via channel key */
6
+ const ALLOWED_CHANNELS = new Set([
7
+ "telegram", "discord", "slack", "webchat", "whatsapp",
8
+ "signal", "matrix", "teams",
9
+ ]);
39
10
  /**
40
- * Minimal JSON5 parser strips single-line comments and trailing commas.
41
- * Handles the common subset used in claw config files.
11
+ * Build `openclaw channels add` CLI flags for a given channel type.
42
12
  */
43
- function parseJson5(raw) {
44
- // Remove single-line comments
45
- const withoutComments = raw.replace(/\/\/[^\n]*/g, "");
46
- // Remove trailing commas before } or ]
47
- const withoutTrailingCommas = withoutComments.replace(/,\s*([\]}])/g, "$1");
48
- return JSON.parse(withoutTrailingCommas);
13
+ function buildAddArgs(channelName, channelConfig) {
14
+ const args = ["--channel", channelName];
15
+ switch (channelName) {
16
+ case "telegram":
17
+ if (channelConfig.token)
18
+ args.push("--token", String(channelConfig.token));
19
+ break;
20
+ case "discord":
21
+ if (channelConfig.token)
22
+ args.push("--token", String(channelConfig.token));
23
+ break;
24
+ case "slack":
25
+ if (channelConfig.botToken)
26
+ args.push("--bot-token", String(channelConfig.botToken));
27
+ if (channelConfig.appToken)
28
+ args.push("--app-token", String(channelConfig.appToken));
29
+ break;
30
+ default:
31
+ if (channelConfig.token)
32
+ args.push("--token", String(channelConfig.token));
33
+ break;
34
+ }
35
+ return args;
49
36
  }
50
- function serializeJson5(data) {
51
- return JSON.stringify(data, null, 2);
37
+ /**
38
+ * Run an openclaw CLI command safely using execFile (no shell).
39
+ */
40
+ async function runOpenClawCmd(dataDir, subcommand) {
41
+ return (0, utils_1.execSafeCommand)("openclaw", subcommand, {
42
+ env: { ...process.env, HOME: dataDir },
43
+ });
52
44
  }
53
45
  function handleConfigureChannels(config) {
54
46
  return async (req, res) => {
@@ -64,46 +56,51 @@ function handleConfigureChannels(config) {
64
56
  (0, utils_1.sendError)(res, 422, "Body must contain a 'channels' object");
65
57
  return;
66
58
  }
67
- // Validate each channel entry has 'enabled' field
68
59
  for (const [channelName, channelConfig] of Object.entries(body.channels)) {
60
+ if (!ALLOWED_CHANNELS.has(channelName)) {
61
+ (0, utils_1.sendError)(res, 422, `Invalid channel name: ${channelName}`);
62
+ return;
63
+ }
69
64
  if (typeof channelConfig.enabled !== "boolean") {
70
65
  (0, utils_1.sendError)(res, 422, `Channel '${channelName}' must have an 'enabled' boolean field`);
71
66
  return;
72
67
  }
73
68
  }
74
- // Read existing config file
75
- let existingConfig = {};
76
- try {
77
- const raw = await fs.readFile(config.configFile, "utf-8");
78
- existingConfig = parseJson5(raw);
79
- }
80
- catch (err) {
81
- // Config file may not exist yet — start with empty object
82
- const error = err;
83
- if (error.code !== "ENOENT") {
84
- (0, utils_1.sendError)(res, 500, `Failed to read config file: ${error.message}`);
85
- return;
69
+ const results = {};
70
+ for (const [channelName, channelConfig] of Object.entries(body.channels)) {
71
+ if (channelConfig.enabled) {
72
+ // Step 1: Enable the plugin (idempotent)
73
+ try {
74
+ await runOpenClawCmd(config.dataDir, ["plugins", "enable", channelName]);
75
+ }
76
+ catch {
77
+ // May already be enabled — continue
78
+ }
79
+ // Step 2: Add the channel account via CLI (safe — no shell)
80
+ const args = buildAddArgs(channelName, channelConfig);
81
+ try {
82
+ const { stdout, stderr } = await runOpenClawCmd(config.dataDir, ["channels", "add", ...args]);
83
+ results[channelName] = stdout || stderr || "added";
84
+ }
85
+ catch (err) {
86
+ results[channelName] = `add failed: ${err.message}`;
87
+ }
88
+ }
89
+ else {
90
+ // Remove channel via CLI (--delete to skip interactive prompt)
91
+ try {
92
+ const { stdout, stderr } = await runOpenClawCmd(config.dataDir, ["channels", "remove", "--channel", channelName, "--delete"]);
93
+ results[channelName] = stdout || stderr || "removed";
94
+ }
95
+ catch (err) {
96
+ results[channelName] = `remove failed: ${err.message}`;
97
+ }
86
98
  }
87
- }
88
- // Merge channels section
89
- const currentChannels = existingConfig["channels"] ?? {};
90
- existingConfig["channels"] = {
91
- ...currentChannels,
92
- ...body.channels,
93
- };
94
- // Write back to disk
95
- try {
96
- await fs.mkdir(require("path").dirname(config.configFile), { recursive: true });
97
- await fs.writeFile(config.configFile, serializeJson5(existingConfig), "utf-8");
98
- }
99
- catch (err) {
100
- (0, utils_1.sendError)(res, 500, `Failed to write config file: ${err.message}`);
101
- return;
102
99
  }
103
100
  // Restart openclaw to apply new channels
104
101
  let restartResult;
105
102
  try {
106
- const { stdout, stderr } = await (0, utils_1.execCommand)("systemctl restart openclaw");
103
+ const { stdout, stderr } = await (0, utils_1.execSafeCommand)("sudo", ["systemctl", "restart", "openclaw"]);
107
104
  restartResult = stdout || stderr || "restarted";
108
105
  }
109
106
  catch (err) {
@@ -111,8 +108,7 @@ function handleConfigureChannels(config) {
111
108
  }
112
109
  (0, utils_1.sendJson)(res, 200, {
113
110
  updated: true,
114
- channels: existingConfig["channels"],
115
- configFile: config.configFile,
111
+ channels: results,
116
112
  restart: restartResult,
117
113
  });
118
114
  };
@@ -1 +1 @@
1
- {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../src/sidecar/routes/channels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../src/sidecar/routes/channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ClawConfig } from "../../config";
2
+ import { RouteHandler } from "./health";
3
+ export declare function handleGetCrons(_config: ClawConfig): RouteHandler;
4
+ export declare function handleUpdateCrons(_config: ClawConfig): RouteHandler;
5
+ //# sourceMappingURL=crons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crons.d.ts","sourceRoot":"","sources":["../../../src/sidecar/routes/crons.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAOxC,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,YAAY,CA8BhE;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,YAAY,CAyDnE"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleGetCrons = handleGetCrons;
4
+ exports.handleUpdateCrons = handleUpdateCrons;
5
+ const utils_1 = require("../utils");
6
+ const kitchen_proxy_1 = require("./kitchen-proxy");
7
+ // ---------------------------------------------------------------------------
8
+ // GET /crons — proxy to ClawKitchen cron jobs endpoint
9
+ // ---------------------------------------------------------------------------
10
+ function handleGetCrons(_config) {
11
+ return async (_req, res) => {
12
+ try {
13
+ const result = await (0, kitchen_proxy_1.proxyToKitchen)("GET", "/api/cron/jobs");
14
+ if (result.status !== 200) {
15
+ (0, utils_1.sendError)(res, result.status, `Kitchen returned ${result.status}: ${JSON.stringify(result.data)}`);
16
+ return;
17
+ }
18
+ const cronJobs = Array.isArray(result.data)
19
+ ? result.data
20
+ : result.data?.jobs ?? [];
21
+ (0, utils_1.sendJson)(res, 200, {
22
+ cronJobs,
23
+ count: cronJobs.length,
24
+ });
25
+ }
26
+ catch (err) {
27
+ (0, utils_1.sendError)(res, 502, `Failed to reach ClawKitchen: ${err.message}`);
28
+ }
29
+ };
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // PUT /crons — create/update/toggle cron jobs via ClawKitchen
33
+ // ---------------------------------------------------------------------------
34
+ function handleUpdateCrons(_config) {
35
+ return async (req, res) => {
36
+ let body;
37
+ try {
38
+ body = (await (0, utils_1.parseBody)(req));
39
+ }
40
+ catch {
41
+ (0, utils_1.sendError)(res, 400, "Invalid JSON body");
42
+ return;
43
+ }
44
+ // Support both { cronJobs: [...] } and { action, jobId } formats
45
+ // The full array format replaces all jobs; the action format handles individual operations
46
+ if (body.action) {
47
+ // Single job operation: enable, disable, run
48
+ try {
49
+ const result = await (0, kitchen_proxy_1.proxyToKitchen)("POST", "/api/cron/job", {
50
+ action: body.action,
51
+ jobId: body.jobId,
52
+ });
53
+ (0, utils_1.sendJson)(res, result.status, result.data);
54
+ }
55
+ catch (err) {
56
+ (0, utils_1.sendError)(res, 502, `Failed to reach ClawKitchen: ${err.message}`);
57
+ }
58
+ return;
59
+ }
60
+ // Bulk update: replace all cron jobs
61
+ const cronJobs = body.cronJobs;
62
+ if (!Array.isArray(cronJobs)) {
63
+ (0, utils_1.sendError)(res, 422, "cronJobs must be an array (or use action/jobId for single operations)");
64
+ return;
65
+ }
66
+ if (cronJobs.length > 50) {
67
+ (0, utils_1.sendError)(res, 422, "Maximum 50 cron jobs allowed");
68
+ return;
69
+ }
70
+ try {
71
+ const result = await (0, kitchen_proxy_1.proxyToKitchen)("PUT", "/api/cron/jobs", {
72
+ jobs: cronJobs,
73
+ });
74
+ (0, utils_1.sendJson)(res, result.status, result.data);
75
+ }
76
+ catch (err) {
77
+ (0, utils_1.sendError)(res, 502, `Failed to reach ClawKitchen: ${err.message}`);
78
+ }
79
+ };
80
+ }
81
+ //# sourceMappingURL=crons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crons.js","sourceRoot":"","sources":["../../../src/sidecar/routes/crons.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/sidecar/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;AAWnB,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAc7D"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/sidecar/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;AAWnB,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAU7D"}
@@ -14,14 +14,10 @@ async function getOpenclawStatus() {
14
14
  function handleHealth(config) {
15
15
  return async (_req, res) => {
16
16
  const openclawStatus = await getOpenclawStatus();
17
+ // Minimal response — avoid leaking config details on public endpoint
17
18
  (0, utils_1.sendJson)(res, 200, {
18
19
  status: "ok",
19
- uptime: process.uptime(),
20
- version: config.mode ? "0.1.0" : "0.1.0",
21
20
  openclaw: openclawStatus,
22
- mode: config.mode,
23
- routerPort: config.routerPort,
24
- sidecarPort: config.sidecarPort,
25
21
  });
26
22
  };
27
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/sidecar/routes/health.ts"],"names":[],"mappings":";;AAkBA,oCAcC;AA9BD,oCAAiD;AAOjD,KAAK,UAAU,iBAAiB;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,mBAAW,EAAC,8BAA8B,CAAC,CAAC;QACrE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,MAAkB;IAC7C,OAAO,KAAK,EAAE,IAAqB,EAAE,GAAmB,EAAiB,EAAE;QACzE,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEjD,IAAA,gBAAQ,EAAC,GAAG,EAAE,GAAG,EAAE;YACjB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;YACxB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;YACxC,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/sidecar/routes/health.ts"],"names":[],"mappings":";;AAkBA,oCAUC;AA1BD,oCAAiD;AAOjD,KAAK,UAAU,iBAAiB;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,mBAAW,EAAC,8BAA8B,CAAC,CAAC;QACrE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,MAAkB;IAC7C,OAAO,KAAK,EAAE,IAAqB,EAAE,GAAmB,EAAiB,EAAE;QACzE,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEjD,qEAAqE;QACrE,IAAA,gBAAQ,EAAC,GAAG,EAAE,GAAG,EAAE;YACjB,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function proxyToKitchen(method: string, path: string, body?: unknown): Promise<{
2
+ status: number;
3
+ data: unknown;
4
+ }>;
5
+ //# sourceMappingURL=kitchen-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kitchen-proxy.d.ts","sourceRoot":"","sources":["../../../src/sidecar/routes/kitchen-proxy.ts"],"names":[],"mappings":"AASA,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAsB5C"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ // Generic proxy to ClawKitchen (port 7777)
3
+ // All Kitchen endpoints are authenticated via the KITCHEN_AUTH_TOKEN env var
4
+ // The sidecar is a PROXY — it never reimplements features that exist in
5
+ // ClawRecipes, ClawKitchen, or OpenClaw native.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.proxyToKitchen = proxyToKitchen;
8
+ const KITCHEN_PORT = process.env.KITCHEN_PORT || "7777";
9
+ const KITCHEN_HOST = "127.0.0.1";
10
+ const KITCHEN_AUTH_TOKEN = process.env.KITCHEN_AUTH_TOKEN || "";
11
+ async function proxyToKitchen(method, path, body) {
12
+ const url = `http://${KITCHEN_HOST}:${KITCHEN_PORT}${path}`;
13
+ const headers = {
14
+ "Content-Type": "application/json",
15
+ };
16
+ // Kitchen uses HTTP Basic Auth: username "kitchen", password = authToken
17
+ if (KITCHEN_AUTH_TOKEN) {
18
+ const basic = Buffer.from(`kitchen:${KITCHEN_AUTH_TOKEN}`).toString("base64");
19
+ headers["Authorization"] = `Basic ${basic}`;
20
+ }
21
+ const res = await fetch(url, {
22
+ method,
23
+ headers,
24
+ body: body ? JSON.stringify(body) : undefined,
25
+ });
26
+ const data = await res.json().catch(() => null);
27
+ return { status: res.status, data };
28
+ }
29
+ //# sourceMappingURL=kitchen-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kitchen-proxy.js","sourceRoot":"","sources":["../../../src/sidecar/routes/kitchen-proxy.ts"],"names":[],"mappings":";AAAA,2CAA2C;AAC3C,6EAA6E;AAC7E,wEAAwE;AACxE,gDAAgD;;AAMhD,wCA0BC;AA9BD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC;AACxD,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC;AAEzD,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,IAAY,EACZ,IAAc;IAEd,MAAM,GAAG,GAAG,UAAU,YAAY,IAAI,YAAY,GAAG,IAAI,EAAE,CAAC;IAC5D,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,yEAAyE;IACzE,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CACjE,QAAQ,CACT,CAAC;QACF,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM;QACN,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9C,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC"}
@@ -1,7 +1,5 @@
1
1
  import { ClawConfig } from "../../config";
2
2
  import { RouteHandler } from "./health";
3
3
  export declare function handleListMemory(config: ClawConfig): RouteHandler;
4
- export declare function handleCreateMemory(config: ClawConfig): RouteHandler;
5
- export declare function handleDeleteMemory(config: ClawConfig): RouteHandler;
6
4
  export declare function handleListSessions(config: ClawConfig): RouteHandler;
7
5
  //# sourceMappingURL=memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/sidecar/routes/memory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAUxC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CA0DjE;AAWD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CA6CnE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAgCnE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CA8GnE"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/sidecar/routes/memory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAgDxC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAwGjE;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CA+GnE"}