@susu-eng/gralkor 26.0.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/.env.example +32 -0
- package/README.md +429 -0
- package/config.yaml +16 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +89 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/check.d.ts +2 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +118 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +24 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/install.d.ts +8 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +105 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +68 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/lib/config.d.ts +7 -0
- package/dist/cli/lib/config.d.ts.map +1 -0
- package/dist/cli/lib/config.js +38 -0
- package/dist/cli/lib/config.js.map +1 -0
- package/dist/cli/lib/openclaw.d.ts +21 -0
- package/dist/cli/lib/openclaw.d.ts.map +1 -0
- package/dist/cli/lib/openclaw.js +93 -0
- package/dist/cli/lib/openclaw.js.map +1 -0
- package/dist/cli/lib/output.d.ts +9 -0
- package/dist/cli/lib/output.d.ts.map +1 -0
- package/dist/cli/lib/output.js +36 -0
- package/dist/cli/lib/output.js.map +1 -0
- package/dist/cli/lib/version.d.ts +9 -0
- package/dist/cli/lib/version.d.ts.map +1 -0
- package/dist/cli/lib/version.js +51 -0
- package/dist/cli/lib/version.js.map +1 -0
- package/dist/client.d.ts +72 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +85 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +69 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +163 -0
- package/dist/config.js.map +1 -0
- package/dist/hooks.d.ts +131 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +458 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +184 -0
- package/dist/index.js.map +1 -0
- package/dist/native-memory.d.ts +67 -0
- package/dist/native-memory.d.ts.map +1 -0
- package/dist/native-memory.js +79 -0
- package/dist/native-memory.js.map +1 -0
- package/dist/register.d.ts +10 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +150 -0
- package/dist/register.js.map +1 -0
- package/dist/server-manager.d.ts +19 -0
- package/dist/server-manager.d.ts.map +1 -0
- package/dist/server-manager.js +238 -0
- package/dist/server-manager.js.map +1 -0
- package/dist/tools.d.ts +32 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +56 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +48 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/docker-compose.yml +34 -0
- package/openclaw.plugin.json +99 -0
- package/package.json +65 -0
- package/server/Dockerfile +7 -0
- package/server/main.py +763 -0
- package/server/pyproject.toml +19 -0
- package/server/requirements.txt +5 -0
- package/server/uv.lock +1162 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import * as oc from "../lib/openclaw.js";
|
|
4
|
+
import * as out from "../lib/output.js";
|
|
5
|
+
import { PROVIDER_ENV_KEYS, DEFAULT_LLM_PROVIDER, DEFAULT_EMBEDDER_PROVIDER } from "../../config.js";
|
|
6
|
+
const execFileAsync = promisify(execFile);
|
|
7
|
+
export async function check() {
|
|
8
|
+
const lines = [];
|
|
9
|
+
let hasFailure = false;
|
|
10
|
+
const fail = (label, message) => {
|
|
11
|
+
lines.push(out.fail(label, message));
|
|
12
|
+
hasFailure = true;
|
|
13
|
+
};
|
|
14
|
+
// 1. openclaw
|
|
15
|
+
try {
|
|
16
|
+
const version = await oc.checkOpenclaw();
|
|
17
|
+
lines.push(out.ok("openclaw", `found (${version})`));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
fail("openclaw", "not found on PATH");
|
|
21
|
+
}
|
|
22
|
+
// 2. uv
|
|
23
|
+
try {
|
|
24
|
+
const { stdout } = await execFileAsync("uv", ["--version"]);
|
|
25
|
+
lines.push(out.ok("uv", `found (${stdout.trim()})`));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
fail("uv", "not found — install: curl -LsSf https://astral.sh/uv/install.sh | sh");
|
|
29
|
+
}
|
|
30
|
+
// 3. Plugin installed
|
|
31
|
+
let llmProvider = DEFAULT_LLM_PROVIDER;
|
|
32
|
+
let embedderProvider = DEFAULT_EMBEDDER_PROVIDER;
|
|
33
|
+
try {
|
|
34
|
+
const info = await oc.getPluginInfo("gralkor");
|
|
35
|
+
if (info) {
|
|
36
|
+
lines.push(out.ok("plugin", `installed (${info.version ?? "unknown version"})`));
|
|
37
|
+
if (!info.enabled) {
|
|
38
|
+
lines.push(out.warn("plugin", "installed but not enabled"));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
fail("plugin", "gralkor not installed");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
fail("plugin", "could not check plugin status");
|
|
47
|
+
}
|
|
48
|
+
// 4. Read actual configured providers from OpenClaw config
|
|
49
|
+
try {
|
|
50
|
+
const configuredLlm = await oc.getConfig("plugins.entries.gralkor.config.llm.provider");
|
|
51
|
+
if (configuredLlm)
|
|
52
|
+
llmProvider = configuredLlm;
|
|
53
|
+
}
|
|
54
|
+
catch { /* use default */ }
|
|
55
|
+
try {
|
|
56
|
+
const configuredEmbedder = await oc.getConfig("plugins.entries.gralkor.config.embedder.provider");
|
|
57
|
+
if (configuredEmbedder)
|
|
58
|
+
embedderProvider = configuredEmbedder;
|
|
59
|
+
}
|
|
60
|
+
catch { /* use default */ }
|
|
61
|
+
// 5. Slot
|
|
62
|
+
try {
|
|
63
|
+
const slot = await oc.getConfig("plugins.slots.memory");
|
|
64
|
+
if (slot === "gralkor") {
|
|
65
|
+
lines.push(out.ok("slot", "memory → gralkor"));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
fail("slot", `memory → ${slot ?? "(unset)"}, expected gralkor`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
lines.push(out.skip("slot", "could not read config"));
|
|
73
|
+
}
|
|
74
|
+
// 6. LLM provider key
|
|
75
|
+
const llmEnvKey = PROVIDER_ENV_KEYS[llmProvider];
|
|
76
|
+
if (llmEnvKey) {
|
|
77
|
+
if (process.env[llmEnvKey]) {
|
|
78
|
+
lines.push(out.ok("LLM provider", `${llmProvider} (${llmEnvKey} set)`));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
fail("LLM provider", `${llmProvider} requires ${llmEnvKey}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
lines.push(out.warn("LLM provider", `unknown provider '${llmProvider}'`));
|
|
86
|
+
}
|
|
87
|
+
// 7. Embedder provider key
|
|
88
|
+
const embedderEnvKey = PROVIDER_ENV_KEYS[embedderProvider];
|
|
89
|
+
if (embedderEnvKey) {
|
|
90
|
+
if (embedderEnvKey === llmEnvKey) {
|
|
91
|
+
// Already checked above, skip duplicate
|
|
92
|
+
}
|
|
93
|
+
else if (process.env[embedderEnvKey]) {
|
|
94
|
+
lines.push(out.ok("Embedder provider", `${embedderProvider} (${embedderEnvKey} set)`));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
fail("Embedder provider", `${embedderProvider} requires ${embedderEnvKey}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// 8. Server health
|
|
101
|
+
try {
|
|
102
|
+
const resp = await fetch("http://127.0.0.1:8001/health", { signal: AbortSignal.timeout(3000) });
|
|
103
|
+
if (resp.ok) {
|
|
104
|
+
lines.push(out.ok("server", "healthy"));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
lines.push(out.warn("server", `unhealthy (HTTP ${resp.status})`));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
lines.push(out.skip("server", "not running"));
|
|
112
|
+
}
|
|
113
|
+
for (const line of lines)
|
|
114
|
+
console.log(line);
|
|
115
|
+
if (hasFailure)
|
|
116
|
+
process.exitCode = 1;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAErG,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,EAAE;QAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QACrC,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC,CAAC;IAEF,cAAc;IACd,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,OAAO,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACxC,CAAC;IAED,QAAQ;IACR,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,IAAI,EAAE,sEAAsE,CAAC,CAAC;IACrF,CAAC;IAED,sBAAsB;IACtB,IAAI,WAAW,GAAG,oBAAoB,CAAC;IACvC,IAAI,gBAAgB,GAAG,yBAAyB,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,IAAI,CAAC,OAAO,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC;YACjF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;IAClD,CAAC;IAED,2DAA2D;IAC3D,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACxF,IAAI,aAAa;YAAE,WAAW,GAAG,aAAa,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,kDAAkD,CAAC,CAAC;QAClG,IAAI,kBAAkB;YAAE,gBAAgB,GAAG,kBAAkB,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAE7B,UAAU;IACV,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,EAAE,YAAY,IAAI,IAAI,SAAS,oBAAoB,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,sBAAsB;IACtB,MAAM,SAAS,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,WAAW,KAAK,SAAS,OAAO,CAAC,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,EAAE,GAAG,WAAW,aAAa,SAAS,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,qBAAqB,WAAW,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,2BAA2B;IAC3B,MAAM,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC3D,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,wCAAwC;QAC1C,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,gBAAgB,KAAK,cAAc,OAAO,CAAC,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,mBAAmB,EAAE,GAAG,gBAAgB,aAAa,cAAc,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,UAAU;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExE,wBAAsB,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB7D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as oc from "../lib/openclaw.js";
|
|
2
|
+
import { buildConfigEntries } from "../lib/config.js";
|
|
3
|
+
export async function config(opts) {
|
|
4
|
+
try {
|
|
5
|
+
await oc.checkOpenclaw();
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
console.error("Error: openclaw not found on PATH");
|
|
9
|
+
process.exitCode = 1;
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const entries = buildConfigEntries(opts);
|
|
13
|
+
if (entries.length === 0) {
|
|
14
|
+
console.error("Nothing to set. Use --config '{...}' or --set key=value");
|
|
15
|
+
process.exitCode = 1;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
for (const [key, value] of entries) {
|
|
19
|
+
console.log(` → Set ${key} = ${value}`);
|
|
20
|
+
await oc.setConfig(`plugins.entries.gralkor.config.${key}`, value);
|
|
21
|
+
}
|
|
22
|
+
console.log("\nDone.");
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAiB;IAC5C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,kCAAkC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAOD,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2GjE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import * as oc from "../lib/openclaw.js";
|
|
3
|
+
import { buildConfigEntries } from "../lib/config.js";
|
|
4
|
+
import { extractVersionFromTarball, extractVersionFromNpmRef, compareVersions } from "../lib/version.js";
|
|
5
|
+
export async function install(opts) {
|
|
6
|
+
const { source, dryRun } = opts;
|
|
7
|
+
const actions = [];
|
|
8
|
+
const log = (msg) => console.log(msg);
|
|
9
|
+
// 1. Check openclaw
|
|
10
|
+
try {
|
|
11
|
+
await oc.checkOpenclaw();
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
console.error("Error: openclaw not found on PATH");
|
|
15
|
+
process.exitCode = 1;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
// 2. Validate source
|
|
19
|
+
const isFilePath = source.endsWith(".tgz") || (source.includes("/") && !source.startsWith("@"));
|
|
20
|
+
if (isFilePath && !existsSync(source)) {
|
|
21
|
+
console.error(`Error: file not found: ${source}`);
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const targetVersion = extractVersionFromTarball(source) ?? extractVersionFromNpmRef(source);
|
|
26
|
+
// 3. Check for legacy memory-gralkor
|
|
27
|
+
const plugins = await oc.getInstalledPlugins();
|
|
28
|
+
const legacy = plugins.find((p) => p.id === "memory-gralkor");
|
|
29
|
+
if (legacy) {
|
|
30
|
+
log(`Found legacy plugin 'memory-gralkor' — will migrate to 'gralkor'`);
|
|
31
|
+
actions.push({
|
|
32
|
+
description: "Uninstall legacy memory-gralkor",
|
|
33
|
+
execute: () => oc.uninstallPlugin("memory-gralkor"),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
// 4. Check if gralkor already installed
|
|
37
|
+
const current = plugins.find((p) => p.id === "gralkor");
|
|
38
|
+
let needsInstall = true;
|
|
39
|
+
if (current && targetVersion && current.version) {
|
|
40
|
+
const cmp = compareVersions(current.version, targetVersion);
|
|
41
|
+
if (cmp === 0) {
|
|
42
|
+
log(`gralkor ${targetVersion} already installed`);
|
|
43
|
+
needsInstall = false;
|
|
44
|
+
}
|
|
45
|
+
else if (cmp > 0) {
|
|
46
|
+
log(`Warning: installed ${current.version} is newer than source ${targetVersion}`);
|
|
47
|
+
console.error("Use --force to downgrade (not yet supported)");
|
|
48
|
+
process.exitCode = 1;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
log(`Upgrading gralkor ${current.version} → ${targetVersion}`);
|
|
53
|
+
actions.push({
|
|
54
|
+
description: `Uninstall gralkor ${current.version}`,
|
|
55
|
+
execute: () => oc.uninstallPlugin("gralkor"),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else if (current && !targetVersion) {
|
|
60
|
+
// Can't compare — reinstall
|
|
61
|
+
log(`gralkor installed (${current.version ?? "unknown version"}), reinstalling from source`);
|
|
62
|
+
actions.push({
|
|
63
|
+
description: "Uninstall current gralkor",
|
|
64
|
+
execute: () => oc.uninstallPlugin("gralkor"),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// 5. Install
|
|
68
|
+
if (needsInstall) {
|
|
69
|
+
actions.push({
|
|
70
|
+
description: `Install gralkor from ${source}`,
|
|
71
|
+
execute: () => oc.installPlugin(source),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// 6. Enable + slot
|
|
75
|
+
actions.push({
|
|
76
|
+
description: "Enable gralkor",
|
|
77
|
+
execute: () => oc.enablePlugin("gralkor"),
|
|
78
|
+
});
|
|
79
|
+
actions.push({
|
|
80
|
+
description: "Set memory slot → gralkor",
|
|
81
|
+
execute: () => oc.setConfig("plugins.slots.memory", "gralkor"),
|
|
82
|
+
});
|
|
83
|
+
// 7. Config
|
|
84
|
+
const configEntries = buildConfigEntries(opts);
|
|
85
|
+
for (const [key, value] of configEntries) {
|
|
86
|
+
actions.push({
|
|
87
|
+
description: `Set config ${key} = ${value}`,
|
|
88
|
+
execute: () => oc.setConfig(`plugins.entries.gralkor.config.${key}`, value),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// Execute or dry-run
|
|
92
|
+
if (dryRun) {
|
|
93
|
+
log("\nDry run — would execute:");
|
|
94
|
+
for (const action of actions) {
|
|
95
|
+
log(` → ${action.description}`);
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
for (const action of actions) {
|
|
100
|
+
log(` → ${action.description}`);
|
|
101
|
+
await action.execute();
|
|
102
|
+
}
|
|
103
|
+
log("\nDone.");
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAgE5C"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as oc from "../lib/openclaw.js";
|
|
2
|
+
import * as out from "../lib/output.js";
|
|
3
|
+
export async function status() {
|
|
4
|
+
const lines = [];
|
|
5
|
+
// Plugin info
|
|
6
|
+
let version = "unknown";
|
|
7
|
+
let enabledStr = "unknown";
|
|
8
|
+
try {
|
|
9
|
+
const info = await oc.getPluginInfo("gralkor");
|
|
10
|
+
if (info) {
|
|
11
|
+
version = info.version ?? "unknown";
|
|
12
|
+
enabledStr = info.enabled ? "enabled" : "disabled";
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
console.log("gralkor is not installed");
|
|
16
|
+
process.exitCode = 1;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
console.error("Could not query plugin status (is openclaw on PATH?)");
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
lines.push(out.heading(`Gralkor ${version}`));
|
|
26
|
+
lines.push(out.info("Plugin", `installed, ${enabledStr}`));
|
|
27
|
+
// Slot
|
|
28
|
+
try {
|
|
29
|
+
const slot = await oc.getConfig("plugins.slots.memory");
|
|
30
|
+
lines.push(out.info("Slot", slot === "gralkor" ? "memory → gralkor" : `memory → ${slot ?? "(unset)"}`));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
lines.push(out.info("Slot", "unknown"));
|
|
34
|
+
}
|
|
35
|
+
// Server health
|
|
36
|
+
try {
|
|
37
|
+
const resp = await fetch("http://127.0.0.1:8001/health", { signal: AbortSignal.timeout(3000) });
|
|
38
|
+
if (resp.ok) {
|
|
39
|
+
const data = await resp.json();
|
|
40
|
+
lines.push(out.info("Server", "running (healthy)"));
|
|
41
|
+
// Graph stats — server returns { graph: { connected, node_count, edge_count } }
|
|
42
|
+
if (data.graph && typeof data.graph === "object") {
|
|
43
|
+
const graph = data.graph;
|
|
44
|
+
if (graph.connected) {
|
|
45
|
+
const nodes = graph.node_count ?? "?";
|
|
46
|
+
const edges = graph.edge_count ?? "?";
|
|
47
|
+
lines.push(out.info("Graph", `${nodes} nodes, ${edges} edges`));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
lines.push(out.info("Graph", `disconnected — ${graph.error ?? "unknown error"}`));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Data dir if available
|
|
54
|
+
if (typeof data.data_dir === "string") {
|
|
55
|
+
lines.push(out.info("Data dir", data.data_dir));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
lines.push(out.info("Server", `unhealthy (HTTP ${resp.status})`));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
lines.push(out.info("Server", "not running"));
|
|
64
|
+
}
|
|
65
|
+
for (const line of lines)
|
|
66
|
+
console.log(line);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ConfigInput {
|
|
2
|
+
config?: string;
|
|
3
|
+
set?: string[];
|
|
4
|
+
}
|
|
5
|
+
/** Parse --config JSON and --set key=value pairs into flat [key, value] entries. */
|
|
6
|
+
export declare function buildConfigEntries(opts: ConfigInput): Array<[string, string]>;
|
|
7
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0B7E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Parse --config JSON and --set key=value pairs into flat [key, value] entries. */
|
|
2
|
+
export function buildConfigEntries(opts) {
|
|
3
|
+
const entries = [];
|
|
4
|
+
if (opts.config) {
|
|
5
|
+
try {
|
|
6
|
+
const parsed = JSON.parse(opts.config);
|
|
7
|
+
flattenObject(parsed, "", entries);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
console.error(`Error: invalid --config JSON: ${opts.config}`);
|
|
11
|
+
process.exitCode = 1;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
if (opts.set) {
|
|
15
|
+
for (const pair of opts.set) {
|
|
16
|
+
const eq = pair.indexOf("=");
|
|
17
|
+
if (eq === -1) {
|
|
18
|
+
console.error(`Error: invalid --set format, expected key=value: ${pair}`);
|
|
19
|
+
process.exitCode = 1;
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
entries.push([pair.slice(0, eq), pair.slice(eq + 1)]);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return entries;
|
|
26
|
+
}
|
|
27
|
+
function flattenObject(obj, prefix, out) {
|
|
28
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
29
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
30
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
31
|
+
flattenObject(value, path, out);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
out.push([path, String(value)]);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/lib/config.ts"],"names":[],"mappings":"AAKA,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,MAAM,OAAO,GAA4B,EAAE,CAAC;IAE5C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,oDAAoD,IAAI,EAAE,CAAC,CAAC;gBAC1E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CACpB,GAA4B,EAC5B,MAAc,EACd,GAA4B;IAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzE,aAAa,CAAC,KAAgC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ExecResult {
|
|
2
|
+
stdout: string;
|
|
3
|
+
stderr: string;
|
|
4
|
+
exitCode: number;
|
|
5
|
+
}
|
|
6
|
+
export interface PluginInfo {
|
|
7
|
+
id: string;
|
|
8
|
+
version: string | null;
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function checkOpenclaw(): Promise<string>;
|
|
12
|
+
/** Parse `openclaw plugins list` output into structured plugin info. */
|
|
13
|
+
export declare function parsePluginList(stdout: string): PluginInfo[];
|
|
14
|
+
export declare function getInstalledPlugins(): Promise<PluginInfo[]>;
|
|
15
|
+
export declare function getPluginInfo(pluginId: string): Promise<PluginInfo | null>;
|
|
16
|
+
export declare function installPlugin(source: string): Promise<void>;
|
|
17
|
+
export declare function uninstallPlugin(pluginId: string): Promise<void>;
|
|
18
|
+
export declare function enablePlugin(pluginId: string): Promise<void>;
|
|
19
|
+
export declare function setConfig(key: string, value: string): Promise<void>;
|
|
20
|
+
export declare function getConfig(key: string): Promise<string | null>;
|
|
21
|
+
//# sourceMappingURL=openclaw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/openclaw.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AA4BD,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAMrD;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAiB5D;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAMjE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAGhF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjE;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKrE;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlE;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzE;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKnE"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
async function exec(args) {
|
|
5
|
+
try {
|
|
6
|
+
const { stdout, stderr } = await execFileAsync("openclaw", args, {
|
|
7
|
+
timeout: 30_000,
|
|
8
|
+
});
|
|
9
|
+
return { stdout, stderr, exitCode: 0 };
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
if (isExecError(err)) {
|
|
13
|
+
return {
|
|
14
|
+
stdout: err.stdout ?? "",
|
|
15
|
+
stderr: err.stderr ?? "",
|
|
16
|
+
exitCode: err.code ?? 1,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
throw new Error("openclaw not found on PATH. Install: https://docs.openclaw.ai/install");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function isExecError(err) {
|
|
23
|
+
return err instanceof Error && "code" in err;
|
|
24
|
+
}
|
|
25
|
+
export async function checkOpenclaw() {
|
|
26
|
+
const result = await exec(["--version"]);
|
|
27
|
+
if (result.exitCode !== 0) {
|
|
28
|
+
throw new Error("openclaw returned non-zero exit code");
|
|
29
|
+
}
|
|
30
|
+
return result.stdout.trim();
|
|
31
|
+
}
|
|
32
|
+
/** Parse `openclaw plugins list` output into structured plugin info. */
|
|
33
|
+
export function parsePluginList(stdout) {
|
|
34
|
+
const plugins = [];
|
|
35
|
+
for (const line of stdout.split("\n")) {
|
|
36
|
+
const trimmed = line.trim();
|
|
37
|
+
if (!trimmed || trimmed.startsWith("─") || trimmed.toLowerCase().startsWith("name"))
|
|
38
|
+
continue;
|
|
39
|
+
// Try table format: "name version enabled kind"
|
|
40
|
+
const parts = trimmed.split(/\s{2,}/);
|
|
41
|
+
if (parts.length >= 3) {
|
|
42
|
+
plugins.push({
|
|
43
|
+
id: parts[0],
|
|
44
|
+
version: parts[1] === "-" ? null : parts[1],
|
|
45
|
+
enabled: parts[2].toLowerCase() === "true" || parts[2] === "✓",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return plugins;
|
|
50
|
+
}
|
|
51
|
+
export async function getInstalledPlugins() {
|
|
52
|
+
const result = await exec(["plugins", "list"]);
|
|
53
|
+
if (result.exitCode !== 0) {
|
|
54
|
+
throw new Error(`Failed to list plugins: ${result.stderr}`);
|
|
55
|
+
}
|
|
56
|
+
return parsePluginList(result.stdout);
|
|
57
|
+
}
|
|
58
|
+
export async function getPluginInfo(pluginId) {
|
|
59
|
+
const plugins = await getInstalledPlugins();
|
|
60
|
+
return plugins.find((p) => p.id === pluginId) ?? null;
|
|
61
|
+
}
|
|
62
|
+
export async function installPlugin(source) {
|
|
63
|
+
const result = await exec(["plugins", "install", source]);
|
|
64
|
+
if (result.exitCode !== 0) {
|
|
65
|
+
throw new Error(`Install failed: ${result.stderr || result.stdout}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export async function uninstallPlugin(pluginId) {
|
|
69
|
+
const result = await exec(["plugins", "uninstall", pluginId]);
|
|
70
|
+
if (result.exitCode !== 0) {
|
|
71
|
+
throw new Error(`Uninstall failed: ${result.stderr || result.stdout}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export async function enablePlugin(pluginId) {
|
|
75
|
+
const result = await exec(["plugins", "enable", pluginId]);
|
|
76
|
+
if (result.exitCode !== 0) {
|
|
77
|
+
throw new Error(`Enable failed: ${result.stderr || result.stdout}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export async function setConfig(key, value) {
|
|
81
|
+
const result = await exec(["config", "set", key, value]);
|
|
82
|
+
if (result.exitCode !== 0) {
|
|
83
|
+
throw new Error(`Config set failed: ${result.stderr || result.stdout}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export async function getConfig(key) {
|
|
87
|
+
const result = await exec(["config", "get", key]);
|
|
88
|
+
if (result.exitCode !== 0)
|
|
89
|
+
return null;
|
|
90
|
+
const val = result.stdout.trim();
|
|
91
|
+
return val || null;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=openclaw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../../src/cli/lib/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function ok(label: string, message: string): string;
|
|
2
|
+
export declare function fail(label: string, message: string): string;
|
|
3
|
+
export declare function warn(label: string, message: string): string;
|
|
4
|
+
export declare function skip(label: string, message: string): string;
|
|
5
|
+
export declare function heading(text: string): string;
|
|
6
|
+
export declare function info(label: string, message: string): string;
|
|
7
|
+
export type CheckStatus = "pass" | "fail" | "warn" | "skip";
|
|
8
|
+
export declare function check(status: CheckStatus, label: string, message: string): string;
|
|
9
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/output.ts"],"names":[],"mappings":"AAWA,wBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5D,wBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOjF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const useColor = !process.env["NO_COLOR"];
|
|
2
|
+
const code = (n) => (useColor ? `\x1b[${n}m` : "");
|
|
3
|
+
const reset = code(0);
|
|
4
|
+
const bold = code(1);
|
|
5
|
+
const dim = code(2);
|
|
6
|
+
const green = code(32);
|
|
7
|
+
const yellow = code(33);
|
|
8
|
+
const red = code(31);
|
|
9
|
+
const cyan = code(36);
|
|
10
|
+
export function ok(label, message) {
|
|
11
|
+
return ` ${green}[OK]${reset} ${bold}${label}${reset}: ${message}`;
|
|
12
|
+
}
|
|
13
|
+
export function fail(label, message) {
|
|
14
|
+
return ` ${red}[FAIL]${reset} ${bold}${label}${reset}: ${message}`;
|
|
15
|
+
}
|
|
16
|
+
export function warn(label, message) {
|
|
17
|
+
return ` ${yellow}[WARN]${reset} ${bold}${label}${reset}: ${message}`;
|
|
18
|
+
}
|
|
19
|
+
export function skip(label, message) {
|
|
20
|
+
return ` ${dim}[SKIP]${reset} ${bold}${label}${reset}: ${dim}${message}${reset}`;
|
|
21
|
+
}
|
|
22
|
+
export function heading(text) {
|
|
23
|
+
return `${cyan}${bold}${text}${reset}`;
|
|
24
|
+
}
|
|
25
|
+
export function info(label, message) {
|
|
26
|
+
return ` ${bold}${label}:${reset} ${message}`;
|
|
27
|
+
}
|
|
28
|
+
export function check(status, label, message) {
|
|
29
|
+
switch (status) {
|
|
30
|
+
case "pass": return ok(label, message);
|
|
31
|
+
case "fail": return fail(label, message);
|
|
32
|
+
case "warn": return warn(label, message);
|
|
33
|
+
case "skip": return skip(label, message);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/cli/lib/output.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAE1C,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AAEtB,MAAM,UAAU,EAAE,CAAC,KAAa,EAAE,OAAe;IAC/C,OAAO,KAAK,KAAK,OAAO,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAa,EAAE,OAAe;IACjD,OAAO,KAAK,GAAG,SAAS,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAa,EAAE,OAAe;IACjD,OAAO,KAAK,MAAM,SAAS,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAa,EAAE,OAAe;IACjD,OAAO,KAAK,GAAG,SAAS,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,KAAK,GAAG,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAa,EAAE,OAAe;IACjD,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;AACjD,CAAC;AAID,MAAM,UAAU,KAAK,CAAC,MAAmB,EAAE,KAAa,EAAE,OAAe;IACvE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Read CLI version from package.json (single source of truth). */
|
|
2
|
+
export declare function getCLIVersion(): string;
|
|
3
|
+
/** Extract semver from a tarball filename or path. Returns null if no match. */
|
|
4
|
+
export declare function extractVersionFromTarball(filenameOrPath: string): string | null;
|
|
5
|
+
/** Extract version from an npm package reference like `@susu-eng/gralkor@19.0.4`. */
|
|
6
|
+
export declare function extractVersionFromNpmRef(ref: string): string | null;
|
|
7
|
+
/** Compare two semver strings. Returns -1 (a < b), 0 (equal), or 1 (a > b). */
|
|
8
|
+
export declare function compareVersions(a: string, b: string): -1 | 0 | 1;
|
|
9
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/version.ts"],"names":[],"mappings":"AAIA,mEAAmE;AACnE,wBAAgB,aAAa,IAAI,MAAM,CAQtC;AAYD,gFAAgF;AAChF,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/E;AAED,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAQhE"}
|