pi-vault-mind 0.16.8 → 0.16.9
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/CHANGELOG.md +26 -0
- package/dist/src/server.js +16 -2
- package/dist/test/rest-setup.test.js +37 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.16.9 / 0.6.13 — 2026-07-19
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- **Setup Auto-start persistence.** The setup wizard now forwards its Auto-start choice to `POST /vm/setup`; the runtime persists it on `vaultMind.vaults.default` without overwriting existing vault configuration siblings.
|
|
8
|
+
- **Vault Mind Settings pane utilization.** The plugin-owned Settings view now fills its available Obsidian settings pane rather than remaining constrained to an internal narrow column.
|
|
9
|
+
|
|
10
|
+
### Tests
|
|
11
|
+
|
|
12
|
+
- Added REST coverage for persisting Auto-start and preserving existing default-vault siblings; added adapter coverage for forwarding setup preferences.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## 0.6.12 — 2026-07-19
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **Standardized ToolCard presentation.** Tool cards now use humanized tool labels, readable request summaries, structured result previews for text/object/array payloads, masked credential fields, file-path pills for file requests, and a chevron-backed Details disclosure for exact masked payloads.
|
|
20
|
+
- **Settings section persistence routing.** Editable Settings categories now map to the nested `PATCH /vm/config` shape instead of flat top-level patches, Embedding secret fields route through `PUT /vm/embedding/secrets`, and Automation now explains that tag-based auto-sync remains config-only until a dedicated editor ships.
|
|
21
|
+
- **Port-parity whitespace safety.** Canonical source hashing now treats interior Arrow template whitespace as byte-significant, keeps sandbox/plugin canonicalizers aligned, and guards ToolCard inline template markup against whitespace-text regressions.
|
|
22
|
+
|
|
23
|
+
### Tests
|
|
24
|
+
|
|
25
|
+
- Added ToolCard regressions for text/object/array rendering, malformed JSON fallback, masked credential handling, file-pill request rendering, and raw-details preservation.
|
|
26
|
+
- Added parity regression coverage for interior template whitespace and a shared-corpus agreement check between the sandbox and plugin canonicalizers.
|
|
27
|
+
|
|
28
|
+
|
|
3
29
|
## 0.16.8 / 0.6.11 — 2026-07-19
|
|
4
30
|
|
|
5
31
|
### Added
|
package/dist/src/server.js
CHANGED
|
@@ -1211,8 +1211,22 @@ function handleVmSetup(req, res) {
|
|
|
1211
1211
|
config.vaultMind = config.vaultMind || {};
|
|
1212
1212
|
config.vaultMind.embedding = config.vaultMind.embedding || {};
|
|
1213
1213
|
config.vaultMind.vaults = config.vaultMind.vaults || {};
|
|
1214
|
-
|
|
1215
|
-
config.vaultMind.vaults.default
|
|
1214
|
+
const existingDefaultVault = typeof config.vaultMind.vaults.default === "object" &&
|
|
1215
|
+
config.vaultMind.vaults.default !== null &&
|
|
1216
|
+
!Array.isArray(config.vaultMind.vaults.default)
|
|
1217
|
+
? { ...config.vaultMind.vaults.default }
|
|
1218
|
+
: {};
|
|
1219
|
+
if (parsed.vault || typeof parsed.preferences?.autoStart === "boolean") {
|
|
1220
|
+
const nextDefaultVault = { ...existingDefaultVault };
|
|
1221
|
+
if (parsed.vault) {
|
|
1222
|
+
nextDefaultVault.path = shrinkHome(parsed.vault);
|
|
1223
|
+
nextDefaultVault.autoSync =
|
|
1224
|
+
typeof existingDefaultVault.autoSync === "boolean" ? existingDefaultVault.autoSync : true;
|
|
1225
|
+
}
|
|
1226
|
+
if (typeof parsed.preferences?.autoStart === "boolean") {
|
|
1227
|
+
nextDefaultVault.autoStart = parsed.preferences.autoStart;
|
|
1228
|
+
}
|
|
1229
|
+
config.vaultMind.vaults.default = nextDefaultVault;
|
|
1216
1230
|
}
|
|
1217
1231
|
if (parsed.remoteUrl) {
|
|
1218
1232
|
config.vaultMind.embedding[EMBEDDING_FLAT_KEYS[0]] = parsed.remoteUrl;
|
|
@@ -149,6 +149,43 @@ describe("REST setup routes", () => {
|
|
|
149
149
|
assert.equal(cfg.vaultMind.embedding.localUrl, "http://127.0.0.1:11434/v1");
|
|
150
150
|
assert.equal(cfg.vaultMind.embedding.model, "embeddinggemma");
|
|
151
151
|
});
|
|
152
|
+
it("POST /vm/setup persists preferences.autoStart on the default vault config", async () => {
|
|
153
|
+
const { status, body } = await fetchJson(port, "POST", "/vm/setup", {
|
|
154
|
+
body: { vault: vaultPath, folders: {}, preferences: { autoStart: false } },
|
|
155
|
+
token: TEST_TOKEN,
|
|
156
|
+
});
|
|
157
|
+
assert.equal(status, 200);
|
|
158
|
+
assert.equal(body.ok, true);
|
|
159
|
+
const cfg = JSON.parse(fs.readFileSync(getConfigPath(vaultPath), "utf-8"));
|
|
160
|
+
assert.equal(cfg.vaultMind.vaults.default.autoStart, false);
|
|
161
|
+
});
|
|
162
|
+
it("POST /vm/setup preserves default-vault siblings when toggling autoStart", async () => {
|
|
163
|
+
writeVaultConfig(vaultPath, {
|
|
164
|
+
version: 2,
|
|
165
|
+
collections: {},
|
|
166
|
+
injectors: [],
|
|
167
|
+
vaultMind: {
|
|
168
|
+
vaults: {
|
|
169
|
+
default: {
|
|
170
|
+
path: vaultPath,
|
|
171
|
+
autoStart: false,
|
|
172
|
+
autoSync: false,
|
|
173
|
+
collectionPrefix: "research",
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
const { status, body } = await fetchJson(port, "POST", "/vm/setup", {
|
|
179
|
+
body: { vault: vaultPath, folders: {}, preferences: { autoStart: true } },
|
|
180
|
+
token: TEST_TOKEN,
|
|
181
|
+
});
|
|
182
|
+
assert.equal(status, 200);
|
|
183
|
+
assert.equal(body.ok, true);
|
|
184
|
+
const cfg = JSON.parse(fs.readFileSync(getConfigPath(vaultPath), "utf-8"));
|
|
185
|
+
assert.equal(cfg.vaultMind.vaults.default.autoStart, true);
|
|
186
|
+
assert.equal(cfg.vaultMind.vaults.default.autoSync, false);
|
|
187
|
+
assert.equal(cfg.vaultMind.vaults.default.collectionPrefix, "research");
|
|
188
|
+
});
|
|
152
189
|
it("POST /vm/setup returns 401 without token", async () => {
|
|
153
190
|
const { status } = await fetchJson(port, "POST", "/vm/setup", {
|
|
154
191
|
body: { vault: vaultPath, localUrl: "http://127.0.0.1:11434/v1" },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-vault-mind",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.9",
|
|
4
4
|
"description": "Passive Obsidian vault extension for pi. Watches @agent markers, dispatches forked subagents (Miner, Broadcaster, Heavy-Lifter), stores in LanceDB with vector + FTS + graph. Multi-agent 'Drop & Forget' workflow for the pi agent ecosystem.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|