pi-vault-mind 0.8.1 → 0.8.3

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/src/index.js CHANGED
@@ -22,87 +22,90 @@ import { updateActiveCollectionWidget } from "./widget.js";
22
22
  let stopAutoSync = null;
23
23
  let engineState = null;
24
24
  export default function (pi) {
25
- /* expose skills directory */
25
+ /* expose skills directory — event listener only, safe during load */
26
26
  pi.on("resources_discover", async (_event) => {
27
27
  const skillsDir = path.join(EXT_ROOT, "skills");
28
28
  return fs.existsSync(skillsDir) ? { skillPaths: [skillsDir] } : {};
29
29
  });
30
+ /* Defer all action-method calls to session_start.
31
+ * pi 0.79.9+ rejects pi.registerCommand/registerTool/registerShortcut
32
+ * during extension loading — the runtime must be initialized first. */
30
33
  pi.on("session_start", async (_event, ctx) => {
31
34
  updateActiveCollectionWidget(ctx);
32
35
  enableACM(pi);
33
- });
34
- /* register shortcut */
35
- pi.registerShortcut("ctrl+alt+l", {
36
- description: "Select Active Collection",
37
- handler: async (ctx) => {
38
- await selectActiveCollection(ctx);
39
- },
40
- });
41
- /* capture ctx.ui.setStatus from session_start for TUI footer indicators */
42
- registerStatusCapture(pi);
43
- /* register commands */
44
- registerCommands(pi);
45
- /* register tools */
46
- registerTools(pi);
47
- registerVaultTools(pi);
48
- registerIntakeTool(pi);
49
- /* agent bus bus, bridge, vm_* handlers, engine, JOB_COMPLETED watcher */
50
- const bus = new MessageBus();
51
- const taskQueue = new TaskQueue();
52
- createBridge(pi, bus);
53
- registerAllExtensionTools(bus);
54
- subscribeJobCompleted(bus, watcherState);
55
- watcherState.bus = bus;
56
- void startEngine({ bus, taskQueue })
57
- .then((state) => {
58
- engineState = state;
59
- setEngineStatus(state.agents.length);
60
- console.log(`[pi-vault-mind] Agent engine started (${state.agents.length} agent(s) loaded)`);
61
- })
62
- .catch((err) => {
63
- console.error("[pi-vault-mind] Agent engine failed to start:", err);
64
- });
65
- /* identity boundary injector */
66
- registerIdentityInjector(pi);
67
- /* before_agent_start: dynamic injectors */
68
- pi.on("before_agent_start", async (event, ctx) => {
69
- return handleBeforeAgentStart(pi, event, ctx);
70
- });
71
- /* turn_end: capture pi-context events */
72
- pi.on("turn_end", async (event, ctx) => {
73
- return handleTurnEnd(pi, event, ctx);
74
- });
75
- /* watcher: auto-start if vaults configured */
76
- try {
77
- const cfg = loadConfig(process.cwd());
78
- serverState.port = cfg.vaultMind.httpPort || 11435;
79
- startServer(pi, serverState, watcherState);
80
- if (cfg.vaultMind.vaults && Object.keys(cfg.vaultMind.vaults).length > 0) {
81
- setTimeout(() => {
82
- console.log("[pi-vault-mind] Auto-starting watcher for", Object.keys(cfg.vaultMind.vaults).length, "vault(s)");
83
- const vaults = cfg.vaultMind.vaults;
84
- if (vaults)
85
- startWatcher(pi, vaults, watcherState);
86
- }, 2000);
36
+ /* register shortcut */
37
+ pi.registerShortcut("ctrl+alt+l", {
38
+ description: "Select Active Collection",
39
+ handler: async (ctx) => {
40
+ await selectActiveCollection(ctx);
41
+ },
42
+ });
43
+ /* capture ctx.ui.setStatus for TUI footer indicators */
44
+ registerStatusCapture(pi);
45
+ /* register commands */
46
+ registerCommands(pi);
47
+ /* register tools */
48
+ registerTools(pi);
49
+ registerVaultTools(pi);
50
+ registerIntakeTool(pi);
51
+ /* agent bus — bus, bridge, vm_* handlers, engine, JOB_COMPLETED watcher */
52
+ const bus = new MessageBus();
53
+ const taskQueue = new TaskQueue();
54
+ createBridge(pi, bus);
55
+ registerAllExtensionTools(bus);
56
+ subscribeJobCompleted(bus, watcherState);
57
+ watcherState.bus = bus;
58
+ void startEngine({ bus, taskQueue })
59
+ .then((state) => {
60
+ engineState = state;
61
+ setEngineStatus(state.agents.length);
62
+ console.log(`[pi-vault-mind] Agent engine started (${state.agents.length} agent(s) loaded)`);
63
+ })
64
+ .catch((err) => {
65
+ console.error("[pi-vault-mind] Agent engine failed to start:", err);
66
+ });
67
+ /* identity boundary injector */
68
+ registerIdentityInjector(pi);
69
+ /* before_agent_start: dynamic injectors */
70
+ pi.on("before_agent_start", async (event, ctx) => {
71
+ return handleBeforeAgentStart(pi, event, ctx);
72
+ });
73
+ /* turn_end: capture pi-context events */
74
+ pi.on("turn_end", async (event, ctx) => {
75
+ return handleTurnEnd(pi, event, ctx);
76
+ });
77
+ /* watcher: auto-start if vaults configured */
78
+ try {
79
+ const cfg = loadConfig(process.cwd());
80
+ serverState.port = cfg.vaultMind.httpPort || 11435;
81
+ startServer(pi, serverState, watcherState);
82
+ if (cfg.vaultMind.vaults && Object.keys(cfg.vaultMind.vaults).length > 0) {
83
+ setTimeout(() => {
84
+ console.log("[pi-vault-mind] Auto-starting watcher for", Object.keys(cfg.vaultMind.vaults).length, "vault(s)");
85
+ const vaults = cfg.vaultMind.vaults;
86
+ if (vaults)
87
+ startWatcher(pi, vaults, watcherState);
88
+ }, 2000);
89
+ }
90
+ /* auto-sync: off by default; only starts when modal.sync.autoSync is true */
91
+ if (cfg.vaultMind.embedding.remoteUrl && cfg.vaultMind.embedding.modal?.sync?.autoSync) {
92
+ stopAutoSync = startAutoSync(cfg.vaultMind.embedding.modal?.sync?.autoSyncIntervalMs ?? 300000);
93
+ console.log(`[pi-vault-mind] Modal auto-sync enabled (every ${cfg.vaultMind.embedding.modal?.sync?.autoSyncIntervalMs ?? 300000}ms)`);
94
+ }
87
95
  }
88
- /* auto-sync: off by default; only starts when modal.sync.autoSync is true */
89
- if (cfg.vaultMind.embedding.remoteUrl && cfg.vaultMind.embedding.modal?.sync?.autoSync) {
90
- stopAutoSync = startAutoSync(cfg.vaultMind.embedding.modal?.sync?.autoSyncIntervalMs ?? 300000);
91
- console.log(`[pi-vault-mind] Modal auto-sync enabled (every ${cfg.vaultMind.embedding.modal?.sync?.autoSyncIntervalMs ?? 300000}ms)`);
96
+ catch {
97
+ /* config may not exist yet; user can start watcher manually via /vm watcher start */
92
98
  }
93
- }
94
- catch {
95
- /* config may not exist yet; user can start watcher manually via /vm watcher start */
96
- }
97
- /* session_shutdown: stop the watcher, server, and engine */
98
- pi.on("session_shutdown", async () => {
99
- stopWatcher(watcherState);
100
- stopServer(serverState);
101
- if (stopAutoSync)
102
- stopAutoSync();
103
- if (engineState)
104
- stopEngine(engineState);
105
- clearEngineStatus();
106
- clearWatcherStatus();
99
+ /* session_shutdown: stop the watcher, server, and engine */
100
+ pi.on("session_shutdown", async () => {
101
+ stopWatcher(watcherState);
102
+ stopServer(serverState);
103
+ if (stopAutoSync)
104
+ stopAutoSync();
105
+ if (engineState)
106
+ stopEngine(engineState);
107
+ clearEngineStatus();
108
+ clearWatcherStatus();
109
+ });
107
110
  });
108
111
  }
package/package.json CHANGED
@@ -1,99 +1,89 @@
1
1
  {
2
- "name": "pi-vault-mind",
3
- "version": "0.8.1",
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
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "type": "module",
8
- "files": [
9
- "dist",
10
- "agents",
11
- "skills",
12
- "scripts",
13
- "CHANGELOG.md",
14
- "README.md",
15
- "LICENSE"
16
- ],
17
- "keywords": [
18
- "pi-package",
19
- "pi-extension",
20
- "pi-skills",
21
- "vault-mind",
22
- "jsonl",
23
- "lance",
24
- "lancedb",
25
- "search",
26
- "knowledge-base",
27
- "agent-tools",
28
- "hitl",
29
- "semantic-search",
30
- "obsidian",
31
- "obsidian-vault",
32
- "subagent",
33
- "subagents",
34
- "passive",
35
- "file-watcher",
36
- "graph",
37
- "knowledge-graph",
38
- "notebooklm",
39
- "pkm"
40
- ],
41
- "author": "Kyle Brodeur",
42
- "license": "MIT",
43
- "repository": {
44
- "type": "git",
45
- "url": "git+https://github.com/kylebrodeur/pi-vault-mind.git"
46
- },
47
- "bugs": {
48
- "url": "https://github.com/kylebrodeur/pi-vault-mind/issues"
49
- },
50
- "homepage": "https://github.com/kylebrodeur/pi-vault-mind#readme",
51
- "engines": {
52
- "node": ">=20.6.0"
53
- },
54
- "pi": {
55
- "extensions": [
56
- "./dist/index.js"
57
- ],
58
- "skills": [
59
- "./skills"
60
- ]
61
- },
62
- "scripts": {
63
- "prepare": "husky",
64
- "check": "biome check --write . && tsc --noEmit",
65
- "build": "tsc && tsc -p tsconfig.test.json",
66
- "dev": "tsc --watch",
67
- "test": "node --test dist/test/*.test.js",
68
- "e2e:ws": "node scripts/e2e-ws.mjs",
69
- "e2e:modal": "node scripts/modal-e2e-smoke.mjs"
70
- },
71
- "dependencies": {
72
- "@lancedb/lancedb": "latest",
73
- "@xenova/transformers": "latest",
74
- "apache-arrow": "^21.1.0",
75
- "ws": "^8.21.0"
76
- },
77
- "peerDependencies": {
78
- "@earendil-works/pi-coding-agent": ">=0.75.0 <1.0.0"
79
- },
80
- "devDependencies": {
81
- "@biomejs/biome": "^1.9.0",
82
- "@earendil-works/pi-coding-agent": "^0.79.0",
83
- "@earendil-works/pi-tui": "^0.79.0",
84
- "@types/node": "^20.0.0",
85
- "@types/ws": "^8.18.1",
86
- "husky": "^9.1.6",
87
- "typebox": "^1.1.0",
88
- "typescript": "^5.0.0"
89
- },
90
- "pnpm": {
91
- "overrides": {
92
- "fast-xml-parser": ">=5.7.0",
93
- "brace-expansion": ">=5.0.6",
94
- "ws@>=8": ">=8.20.1",
95
- "protobufjs": ">=8.0.0",
96
- "undici": "7.28.0"
97
- }
98
- }
99
- }
2
+ "name": "pi-vault-mind",
3
+ "version": "0.8.3",
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
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "files": [
9
+ "dist",
10
+ "agents",
11
+ "skills",
12
+ "scripts",
13
+ "CHANGELOG.md",
14
+ "README.md",
15
+ "LICENSE"
16
+ ],
17
+ "keywords": [
18
+ "pi-package",
19
+ "pi-extension",
20
+ "pi-skills",
21
+ "vault-mind",
22
+ "jsonl",
23
+ "lance",
24
+ "lancedb",
25
+ "search",
26
+ "knowledge-base",
27
+ "agent-tools",
28
+ "hitl",
29
+ "semantic-search",
30
+ "obsidian",
31
+ "obsidian-vault",
32
+ "subagent",
33
+ "subagents",
34
+ "passive",
35
+ "file-watcher",
36
+ "graph",
37
+ "knowledge-graph",
38
+ "notebooklm",
39
+ "pkm"
40
+ ],
41
+ "author": "Kyle Brodeur",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/kylebrodeur/pi-vault-mind.git"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/kylebrodeur/pi-vault-mind/issues"
49
+ },
50
+ "homepage": "https://github.com/kylebrodeur/pi-vault-mind#readme",
51
+ "engines": {
52
+ "node": ">=20.6.0"
53
+ },
54
+ "pi": {
55
+ "extensions": [
56
+ "./dist/index.js"
57
+ ],
58
+ "skills": [
59
+ "./skills"
60
+ ]
61
+ },
62
+ "dependencies": {
63
+ "@lancedb/lancedb": "latest",
64
+ "@xenova/transformers": "latest",
65
+ "apache-arrow": "^21.1.0",
66
+ "ws": "^8.21.0"
67
+ },
68
+ "peerDependencies": {
69
+ "@earendil-works/pi-coding-agent": ">=0.75.0 <1.0.0"
70
+ },
71
+ "devDependencies": {
72
+ "@biomejs/biome": "^1.9.0",
73
+ "@earendil-works/pi-coding-agent": "^0.79.0",
74
+ "@earendil-works/pi-tui": "^0.79.0",
75
+ "@types/node": "^20.0.0",
76
+ "@types/ws": "^8.18.1",
77
+ "husky": "^9.1.6",
78
+ "typebox": "^1.1.0",
79
+ "typescript": "^5.0.0"
80
+ },
81
+ "scripts": {
82
+ "check": "biome check --write . && tsc --noEmit",
83
+ "build": "tsc && tsc -p tsconfig.test.json",
84
+ "dev": "tsc --watch",
85
+ "test": "node --test dist/test/*.test.js",
86
+ "e2e:ws": "node scripts/e2e-ws.mjs",
87
+ "e2e:modal": "node scripts/modal-e2e-smoke.mjs"
88
+ }
89
+ }
File without changes
File without changes
File without changes