@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.
Files changed (83) hide show
  1. package/.env.example +32 -0
  2. package/README.md +429 -0
  3. package/config.yaml +16 -0
  4. package/dist/cli/bin.d.ts +3 -0
  5. package/dist/cli/bin.d.ts.map +1 -0
  6. package/dist/cli/bin.js +89 -0
  7. package/dist/cli/bin.js.map +1 -0
  8. package/dist/cli/commands/check.d.ts +2 -0
  9. package/dist/cli/commands/check.d.ts.map +1 -0
  10. package/dist/cli/commands/check.js +118 -0
  11. package/dist/cli/commands/check.js.map +1 -0
  12. package/dist/cli/commands/config.d.ts +3 -0
  13. package/dist/cli/commands/config.d.ts.map +1 -0
  14. package/dist/cli/commands/config.js +24 -0
  15. package/dist/cli/commands/config.js.map +1 -0
  16. package/dist/cli/commands/install.d.ts +8 -0
  17. package/dist/cli/commands/install.d.ts.map +1 -0
  18. package/dist/cli/commands/install.js +105 -0
  19. package/dist/cli/commands/install.js.map +1 -0
  20. package/dist/cli/commands/status.d.ts +2 -0
  21. package/dist/cli/commands/status.d.ts.map +1 -0
  22. package/dist/cli/commands/status.js +68 -0
  23. package/dist/cli/commands/status.js.map +1 -0
  24. package/dist/cli/lib/config.d.ts +7 -0
  25. package/dist/cli/lib/config.d.ts.map +1 -0
  26. package/dist/cli/lib/config.js +38 -0
  27. package/dist/cli/lib/config.js.map +1 -0
  28. package/dist/cli/lib/openclaw.d.ts +21 -0
  29. package/dist/cli/lib/openclaw.d.ts.map +1 -0
  30. package/dist/cli/lib/openclaw.js +93 -0
  31. package/dist/cli/lib/openclaw.js.map +1 -0
  32. package/dist/cli/lib/output.d.ts +9 -0
  33. package/dist/cli/lib/output.d.ts.map +1 -0
  34. package/dist/cli/lib/output.js +36 -0
  35. package/dist/cli/lib/output.js.map +1 -0
  36. package/dist/cli/lib/version.d.ts +9 -0
  37. package/dist/cli/lib/version.d.ts.map +1 -0
  38. package/dist/cli/lib/version.js +51 -0
  39. package/dist/cli/lib/version.js.map +1 -0
  40. package/dist/client.d.ts +72 -0
  41. package/dist/client.d.ts.map +1 -0
  42. package/dist/client.js +85 -0
  43. package/dist/client.js.map +1 -0
  44. package/dist/config.d.ts +69 -0
  45. package/dist/config.d.ts.map +1 -0
  46. package/dist/config.js +163 -0
  47. package/dist/config.js.map +1 -0
  48. package/dist/hooks.d.ts +131 -0
  49. package/dist/hooks.d.ts.map +1 -0
  50. package/dist/hooks.js +458 -0
  51. package/dist/hooks.js.map +1 -0
  52. package/dist/index.d.ts +88 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +184 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/native-memory.d.ts +67 -0
  57. package/dist/native-memory.d.ts.map +1 -0
  58. package/dist/native-memory.js +79 -0
  59. package/dist/native-memory.js.map +1 -0
  60. package/dist/register.d.ts +10 -0
  61. package/dist/register.d.ts.map +1 -0
  62. package/dist/register.js +150 -0
  63. package/dist/register.js.map +1 -0
  64. package/dist/server-manager.d.ts +19 -0
  65. package/dist/server-manager.d.ts.map +1 -0
  66. package/dist/server-manager.js +238 -0
  67. package/dist/server-manager.js.map +1 -0
  68. package/dist/tools.d.ts +32 -0
  69. package/dist/tools.d.ts.map +1 -0
  70. package/dist/tools.js +56 -0
  71. package/dist/tools.js.map +1 -0
  72. package/dist/types.d.ts +48 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +8 -0
  75. package/dist/types.js.map +1 -0
  76. package/docker-compose.yml +34 -0
  77. package/openclaw.plugin.json +99 -0
  78. package/package.json +65 -0
  79. package/server/Dockerfile +7 -0
  80. package/server/main.py +763 -0
  81. package/server/pyproject.toml +19 -0
  82. package/server/requirements.txt +5 -0
  83. 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":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ConfigInput } from "../lib/config.js";
2
+ export declare function config(opts: ConfigInput): Promise<void>;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -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,8 @@
1
+ export interface InstallOptions {
2
+ source: string;
3
+ config?: string;
4
+ set?: string[];
5
+ dryRun?: boolean;
6
+ }
7
+ export declare function install(opts: InstallOptions): Promise<void>;
8
+ //# sourceMappingURL=install.d.ts.map
@@ -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,2 @@
1
+ export declare function status(): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAc1C,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE;YAC/D,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO;gBACL,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;gBACxB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;gBACxB,QAAQ,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;aACxB,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,GAAY;IAEZ,OAAO,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAE9F,mDAAmD;QACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBACZ,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3C,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;aAC/D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc;IAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,KAAa;IACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACjC,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC"}
@@ -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"}