@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.
- package/dist/cli.js +3 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -5
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -40
- package/dist/index.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +363 -77
- package/dist/router/index.js.map +1 -1
- package/dist/router/logger.d.ts +3 -0
- package/dist/router/logger.d.ts.map +1 -1
- package/dist/router/logger.js +8 -5
- package/dist/router/logger.js.map +1 -1
- package/dist/router/types.d.ts +6 -9
- package/dist/router/types.d.ts.map +1 -1
- package/dist/sidecar/auth.d.ts.map +1 -1
- package/dist/sidecar/auth.js +7 -11
- package/dist/sidecar/auth.js.map +1 -1
- package/dist/sidecar/index.js +104 -21
- package/dist/sidecar/index.js.map +1 -1
- package/dist/sidecar/routes/addons.d.ts.map +1 -1
- package/dist/sidecar/routes/addons.js +3 -13
- package/dist/sidecar/routes/addons.js.map +1 -1
- package/dist/sidecar/routes/api-keys.d.ts +4 -0
- package/dist/sidecar/routes/api-keys.d.ts.map +1 -0
- package/dist/sidecar/routes/api-keys.js +221 -0
- package/dist/sidecar/routes/api-keys.js.map +1 -0
- package/dist/sidecar/routes/bindings.d.ts +5 -0
- package/dist/sidecar/routes/bindings.d.ts.map +1 -0
- package/dist/sidecar/routes/bindings.js +64 -0
- package/dist/sidecar/routes/bindings.js.map +1 -0
- package/dist/sidecar/routes/channels.d.ts.map +1 -1
- package/dist/sidecar/routes/channels.js +71 -75
- package/dist/sidecar/routes/channels.js.map +1 -1
- package/dist/sidecar/routes/crons.d.ts +5 -0
- package/dist/sidecar/routes/crons.d.ts.map +1 -0
- package/dist/sidecar/routes/crons.js +81 -0
- package/dist/sidecar/routes/crons.js.map +1 -0
- package/dist/sidecar/routes/health.d.ts.map +1 -1
- package/dist/sidecar/routes/health.js +1 -5
- package/dist/sidecar/routes/health.js.map +1 -1
- package/dist/sidecar/routes/kitchen-proxy.d.ts +5 -0
- package/dist/sidecar/routes/kitchen-proxy.d.ts.map +1 -0
- package/dist/sidecar/routes/kitchen-proxy.js +29 -0
- package/dist/sidecar/routes/kitchen-proxy.js.map +1 -0
- package/dist/sidecar/routes/memory.d.ts +0 -2
- package/dist/sidecar/routes/memory.d.ts.map +1 -1
- package/dist/sidecar/routes/memory.js +116 -113
- package/dist/sidecar/routes/memory.js.map +1 -1
- package/dist/sidecar/routes/metrics.js +5 -5
- package/dist/sidecar/routes/restart.d.ts.map +1 -1
- package/dist/sidecar/routes/restart.js +11 -2
- package/dist/sidecar/routes/restart.js.map +1 -1
- package/dist/sidecar/routes/router-config.d.ts +0 -1
- package/dist/sidecar/routes/router-config.d.ts.map +1 -1
- package/dist/sidecar/routes/router-config.js +2 -139
- package/dist/sidecar/routes/router-config.js.map +1 -1
- package/dist/sidecar/routes/skills.d.ts.map +1 -1
- package/dist/sidecar/routes/skills.js +23 -19
- package/dist/sidecar/routes/skills.js.map +1 -1
- package/dist/sidecar/routes/soul.d.ts +11 -0
- package/dist/sidecar/routes/soul.d.ts.map +1 -1
- package/dist/sidecar/routes/soul.js +59 -34
- package/dist/sidecar/routes/soul.js.map +1 -1
- package/dist/sidecar/routes/system.d.ts +7 -0
- package/dist/sidecar/routes/system.d.ts.map +1 -0
- package/dist/sidecar/routes/system.js +49 -0
- package/dist/sidecar/routes/system.js.map +1 -0
- package/dist/sidecar/routes/team.d.ts.map +1 -1
- package/dist/sidecar/routes/team.js +121 -74
- package/dist/sidecar/routes/team.js.map +1 -1
- package/dist/sidecar/routes/update.d.ts.map +1 -1
- package/dist/sidecar/routes/update.js +24 -10
- package/dist/sidecar/routes/update.js.map +1 -1
- package/dist/sidecar/routes/workflow.d.ts +8 -0
- package/dist/sidecar/routes/workflow.d.ts.map +1 -0
- package/dist/sidecar/routes/workflow.js +232 -0
- package/dist/sidecar/routes/workflow.js.map +1 -0
- package/dist/sidecar/utils.d.ts +14 -0
- package/dist/sidecar/utils.d.ts.map +1 -1
- package/dist/sidecar/utils.js +35 -1
- package/dist/sidecar/utils.js.map +1 -1
- 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":"
|
|
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
|
-
*
|
|
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
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
51
|
-
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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.
|
|
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:
|
|
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":"
|
|
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,
|
|
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,
|
|
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 @@
|
|
|
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":"
|
|
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"}
|