@karmaniverous/jeeves-watcher-openclaw 0.3.10 → 0.3.12

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/cli.js CHANGED
@@ -132,6 +132,33 @@ function patchConfig(config, mode, options = {}) {
132
132
  slots.memory = 'memory-core';
133
133
  messages.push(`Reverted plugins.slots.memory to "memory-core"`);
134
134
  }
135
+ // memory-core.enabled — disable when claiming memory slot to prevent
136
+ // core memory tools from shadowing the plugin's tools
137
+ const memoryCoreEntry = entries['memory-core'];
138
+ if (mode === 'add' && options.memory) {
139
+ if (!memoryCoreEntry) {
140
+ entries['memory-core'] = { enabled: false };
141
+ messages.push('Set memory-core.enabled to false');
142
+ }
143
+ else if (memoryCoreEntry.enabled !== false) {
144
+ memoryCoreEntry.enabled = false;
145
+ messages.push('Set memory-core.enabled to false');
146
+ }
147
+ }
148
+ else if (mode === 'add' && !options.memory) {
149
+ // Non-memory install: re-enable memory-core if we disabled it
150
+ if (memoryCoreEntry && memoryCoreEntry.enabled === false) {
151
+ memoryCoreEntry.enabled = true;
152
+ messages.push('Re-enabled memory-core (non-memory install)');
153
+ }
154
+ }
155
+ else if (mode === 'remove') {
156
+ // Uninstall: re-enable memory-core if we disabled it
157
+ if (memoryCoreEntry && memoryCoreEntry.enabled === false) {
158
+ memoryCoreEntry.enabled = true;
159
+ messages.push('Re-enabled memory-core');
160
+ }
161
+ }
135
162
  // tools.allow
136
163
  const tools = (config.tools ?? {});
137
164
  const toolAllow = patchAllowList(tools, 'allow', 'tools.allow', mode);
@@ -70,6 +70,30 @@ You have access to a **semantic archive** of your human's working world: email,
70
70
  - The question is about general knowledge, not the human's specific context
71
71
  - The watcher is unreachable (fall back to filesystem browsing)
72
72
 
73
+ ## Memory → Archive Escalation
74
+
75
+ You have two search tools with different scopes:
76
+
77
+ - **`memory_search`** — curated notes (MEMORY.md + memory/*.md). High signal, small scope. This is your long-term memory: decisions, rules, people, project context. Always check here first.
78
+ - **`watcher_search`** — the full indexed archive (160K+ points across all domains: Slack, email, Jira, code, meetings, tweets, projects). Broad scope, raw record.
79
+
80
+ **The escalation rule:** When `memory_search` returns thin, zero, or low-confidence results for something your human clearly expects you to know about — a person, a project, an event, a thing — don't stop there. Follow up with `watcher_search` across the full index.
81
+
82
+ **Triggers for escalation:**
83
+ - Memory returns 0 results for a named entity (person, project, tool, pet)
84
+ - Memory returns results but they lack the detail the question needs
85
+ - The question is about something that *happened* (a conversation, a meeting, a decision) rather than something you *noted*
86
+ - The human seems surprised you don't know something
87
+
88
+ **Don't escalate when:**
89
+ - Memory gave you a clear, sufficient answer
90
+ - The question is about your own operational rules or preferences (that's purely memory)
91
+ - You've already searched the archive this turn
92
+
93
+ **Example:** "Tell me about Noodle" → memory says "male, he/him" → that's thin → escalate to `watcher_search("Noodle")` → tweets reveal #NoodleThePoodle with photos. Report the full picture.
94
+
95
+ **The principle:** Memory is your curated highlights. The archive is your perfect recall. Use memory first for speed and signal, but never let its narrow scope be the ceiling of what you can remember.
96
+
73
97
  **How it works, conceptually:**
74
98
 
75
99
  The watcher monitors directories on the filesystem. When files change, it extracts text, applies **inference rules** (config-driven pattern matching) to derive structured metadata, and embeds everything into a vector store. Each inference rule defines a record type: what files it matches, what metadata schema applies, how to extract fields.
@@ -105,15 +129,18 @@ The plugin supports two install modes, controlled by the `--memory` flag during
105
129
 
106
130
  **Standard mode** (`npx @karmaniverous/jeeves-watcher-openclaw install`):
107
131
  - Registers `watcher_*` tools only (search, enrich, status, query, validate, config_apply, reindex, issues)
108
- - OpenClaw's built-in `memory-core` remains the memory provider
132
+ - OpenClaw's built-in `memory-core` remains the memory provider (re-enabled if previously disabled)
109
133
  - Use when the watcher is a supplementary search tool alongside native memory
110
134
 
111
135
  **Memory mode** (`npx @karmaniverous/jeeves-watcher-openclaw install --memory`):
112
136
  - Registers all tools: `watcher_*` plus `memory_search` and `memory_get`
113
137
  - Claims the OpenClaw memory slot — the watcher becomes the memory provider
138
+ - Disables `memory-core` (`plugins.entries.memory-core.enabled: false`) to prevent core memory tools from shadowing the plugin's tools
114
139
  - MEMORY.md and memory/*.md files are indexed and searched via the watcher's vector store
115
140
  - Use when the watcher should be the single source of truth for both archive search and agent memory
116
141
 
142
+ **Why `memory-core` must be disabled:** OpenClaw's built-in `memory-core` plugin registers its own `memory_search` and `memory_get` tools. If both `memory-core` and this plugin are enabled, the core tools shadow the plugin's tools (same name, core registers first). Disabling `memory-core` ensures the plugin's Qdrant-backed implementations are the ones that execute.
143
+
117
144
  **How to tell which mode you're in:** Check the response from `memory_search` or `memory_get`. In memory mode (watcher-backed), responses include `"provider": "jeeves-watcher"`. In standard mode (memory-core), responses are bare arrays/strings with no `provider` field.
118
145
 
119
146
  ## Proactive Posture
@@ -2,7 +2,7 @@
2
2
  "id": "jeeves-watcher-openclaw",
3
3
  "name": "Jeeves Watcher",
4
4
  "description": "Semantic search, metadata enrichment, and instance administration for a jeeves-watcher deployment.",
5
- "version": "0.3.10",
5
+ "version": "0.3.12",
6
6
  "skills": [
7
7
  "dist/skills/jeeves-watcher"
8
8
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@karmaniverous/jeeves-watcher-openclaw",
3
- "version": "0.3.10",
3
+ "version": "0.3.12",
4
4
  "author": "Jason Williscroft",
5
5
  "description": "OpenClaw plugin for jeeves-watcher — semantic search and metadata enrichment tools",
6
6
  "license": "BSD-3-Clause",