aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/assistant/test_config.js
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-23 17:09:21 +0200
committerDanilo M. <danix@danix.xyz>2026-10-23 17:09:21 +0200
commitb62a40a8fd7442e0fbb3b44d722fdf8f69aa108a (patch)
tree6dfa032e36a059820a1ec9f481a7f75680bb5e8e /desktop/modules/assistant/test_config.js
parent3cba919cb6e641dc873ee02c5c4c4a999bec7f55 (diff)
downloadquickshell-b62a40a8fd7442e0fbb3b44d722fdf8f69aa108a.tar.gz
quickshell-b62a40a8fd7442e0fbb3b44d722fdf8f69aa108a.zip
assistant settings: read and write the daemon's [[cloud]] tables
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Diffstat (limited to 'desktop/modules/assistant/test_config.js')
-rw-r--r--desktop/modules/assistant/test_config.js41
1 files changed, 40 insertions, 1 deletions
diff --git a/desktop/modules/assistant/test_config.js b/desktop/modules/assistant/test_config.js
index cc610a8..f79f4e1 100644
--- a/desktop/modules/assistant/test_config.js
+++ b/desktop/modules/assistant/test_config.js
@@ -18,7 +18,7 @@ const assert = require("assert");
const src = fs.readFileSync(__dirname + "/Config.js", "utf8")
.replace(/^\.pragma library$/m, "");
-const C = new Function(src + "\nreturn { scalars, setScalar, env, setEnv, quote };")();
+const C = new Function(src + "\nreturn { scalars, setScalar, env, setEnv, quote, clouds, setClouds, cloudError };")();
const KEYS = ["llm", "system", "tool_rounds", "temperature", "thinking"];
const file = [
@@ -86,4 +86,43 @@ assert.ok(/\n\[env\]\nX = "1"\n$/.test(t), JSON.stringify(t));
// An env key in another table is not the env one.
assert.deepStrictEqual(C.env('[voice]\nlang = "it"\n'), []);
+// [[cloud]] tables.
+const withCloud = file + [
+ "# Cloud models.",
+ "[[cloud]]",
+ 'name = "hetzner"',
+ 'url = "https://llm.example.org/v1" # a comment',
+ 'key_cmd = "pass llm/x"',
+ 'models = ["a/b", "c:d"]',
+ "",
+ "[[cloud]]",
+ 'name = "two"',
+ 'url = "u"',
+ 'key_cmd = "k"',
+ "models = []",
+ "",
+].join("\n");
+assert.deepStrictEqual(C.clouds(withCloud), [
+ { name: "hetzner", url: "https://llm.example.org/v1", key_cmd: "pass llm/x", models: ["a/b", "c:d"] },
+ { name: "two", url: "u", key_cmd: "k", models: [] }]);
+assert.deepStrictEqual(C.clouds(file), []);
+assert.deepStrictEqual(C.env(withCloud), C.env(file)); // [env] ends at the table
+// A table this cannot read in full is not offered for editing.
+assert.strictEqual(C.clouds(withCloud.replace('models = ["a/b", "c:d"]', 'models = [\n "a/b",\n]')), null);
+assert.strictEqual(C.clouds(withCloud.replace('name = "two"', 'name = "two"\nextra = 1')), null);
+// Rewritten at the end of the file; everything else stays.
+const one = C.setClouds(withCloud, [{ name: "n", url: "u", key_cmd: 'pass "q"', models: ["m"] }]);
+assert.deepStrictEqual(C.clouds(one), [{ name: "n", url: "u", key_cmd: 'pass "q"', models: ["m"] }]);
+assert.deepStrictEqual(C.env(one), C.env(file));
+assert.deepStrictEqual(C.scalars(one, KEYS), C.scalars(file, KEYS));
+assert.ok(one.includes("# Cloud models.") && one.endsWith('models = ["m"]\n'), one);
+assert.deepStrictEqual(C.clouds(C.setClouds(one, [])), []);
+// What the daemon refuses to start with.
+const ok = { name: "a", url: "u", key_cmd: "k", models: [] };
+assert.strictEqual(C.cloudError([ok]), "");
+assert.strictEqual(C.cloudError([]), "");
+for (const bad of [{ name: "" }, { name: "a:b" }, { url: "" }, { key_cmd: " " }])
+ assert.notStrictEqual(C.cloudError([Object.assign({}, ok, bad)]), "", JSON.stringify(bad));
+assert.notStrictEqual(C.cloudError([ok, ok]), "");
+
console.log("test_config: ok");