@karmaniverous/jeeves-watcher-openclaw 0.13.2 → 0.14.1

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/README.md CHANGED
@@ -65,7 +65,7 @@ This plugin integrates with [`@karmaniverous/jeeves`](https://www.npmjs.com/pack
65
65
  |------|-------------|
66
66
  | `watcher_status` | Service health, uptime, and collection stats |
67
67
  | `watcher_search` | Semantic search across indexed documents |
68
- | `watcher_enrich` | Enrich document metadata via rules engine |
68
+ | `watcher_enrich` | Set or update document metadata by file path |
69
69
  | `watcher_config` | Query the effective runtime config via JSONPath |
70
70
  | `watcher_walk` | Walk watched filesystem paths with glob intersection |
71
71
  | `watcher_validate` | Validate a watcher configuration |
@@ -73,6 +73,7 @@ This plugin integrates with [`@karmaniverous/jeeves`](https://www.npmjs.com/pack
73
73
  | `watcher_reindex` | Trigger a scoped reindex with blast area plan |
74
74
  | `watcher_scan` | Filter-only point query with cursor pagination |
75
75
  | `watcher_issues` | List indexing issues and errors |
76
+ | `watcher_service` | Manage watcher background service (install/uninstall/start/stop/restart/status) |
76
77
 
77
78
  ## Documentation
78
79
 
@@ -1,29 +1,4 @@
1
- ## Memory Architecture
2
-
3
- You wake up fresh each session. These files are your continuity:
4
-
5
- - **Daily notes:** `memory/YYYY-MM-DD.md` (create `memory/` if needed). Raw logs of what happened today.
6
- - **Long-term:** `MEMORY.md`. Your curated memories, distilled essence of what matters.
7
-
8
- ### MEMORY.md — Your Long-Term Memory
9
-
10
- - **Always load** at session start. You need your memory to reason effectively.
11
- - Contains operational context: architecture patterns, policies, design principles, lessons learned
12
- - You can **read, edit, and update** MEMORY.md freely
13
- - Write significant events, thoughts, decisions, opinions, lessons learned
14
- - Over time, review daily files and update MEMORY.md with what's worth keeping
15
- - **Note:** Don't reveal a user's private info where other humans can see it
16
-
17
- ### Write It Down — No "Mental Notes"
18
-
19
- Memory is limited. If you want to remember something, **WRITE IT TO A FILE**. "Mental notes" don't survive session restarts. Files do.
20
-
21
- - When someone says "remember this" → update `memory/YYYY-MM-DD.md` or the relevant file
22
- - When you learn a lesson → update the relevant workspace file
23
- - When you make a mistake → document it so future-you doesn't repeat it
24
- - **Text > Brain** 📝
25
-
26
- ### "I'll Note This" Is Not Noting
1
+ ## "I'll Note This" Is Not Noting
27
2
 
28
3
  **Never say "I'll note this" or "I'll add that."** It's a verbal tic that leads to nothing. If something is worth noting, **write it immediately, then confirm**.
29
4
 
@@ -81,14 +56,9 @@ Heartbeat items are for **transient, session-requiring work-in-progress ONLY**.
81
56
 
82
57
  Periodic checks (email, calendar, mentions) belong in jeeves-runner scripts, not heartbeat items. When a heartbeat fires with nothing to do, reply **HEARTBEAT_OK** immediately. Don't browse for work.
83
58
 
84
- ## Group Chat Behavior
85
-
86
- **Response gate:** Always respond in 1:1 conversations or when @mentioned. No @mention in a group → evaluate; respond only if genuinely helpful. Err toward silence when someone else is directly addressed.
87
-
88
59
  ## Platform Surface Conventions
89
60
 
90
61
  **Slack:**
91
- - React with hourglass (⏳) on receipt (first tool call) to signal you're working
92
62
  - No threaded replies by default
93
63
  - Use `<#C…>` for channel references
94
64
 
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: jeeves
3
+ description: Jeeves platform architecture, data flow, component interaction, scripts repo, and coordination knowledge. Use when making architectural decisions, coordinating across components, checking platform health, managing service lifecycle, or working with the scripts repo.
4
+ ---
5
+
6
+ # Jeeves Platform Skill
7
+
8
+ ## Platform Architecture
9
+
10
+ Jeeves is a four-component platform coordinated by a shared library (`@karmaniverous/jeeves`):
11
+
12
+ | Component | Role | Port |
13
+ |-----------|------|------|
14
+ | **jeeves-runner** | Execute: scheduled jobs, SQLite state, HTTP API | 1937 |
15
+ | **jeeves-watcher** | Index: file→Qdrant semantic indexing, inference rules | 1936 |
16
+ | **jeeves-server** | Present: web UI, file browser, doc render, export | 1934 |
17
+ | **jeeves-meta** | Distill: LLM synthesis, .meta/ directories, scheduling | 1938 |
18
+
19
+ Core (`@karmaniverous/jeeves`) is a **library + CLI**, not a service. No port.
20
+
21
+ ## Data Flow
22
+
23
+ ```
24
+ Files → Watcher (index) → Qdrant → Meta (synthesize) → .meta/ → Watcher (re-index)
25
+
26
+ Runner (schedule) → Scripts → Services ← Server (present) ← Browser
27
+ ```
28
+
29
+ ## Component Interaction
30
+
31
+ - **Watcher** indexes files into Qdrant with inference rules and enrichments.
32
+ - **Meta** reads from Qdrant, synthesizes `.meta/` directories, which watcher re-indexes.
33
+ - **Runner** executes scheduled scripts that may call any service's HTTP API.
34
+ - **Server** presents files, renders documents, and provides the event gateway.
35
+ - **Core** provides shared content management (TOOLS.md, SOUL.md, AGENTS.md), service discovery, config resolution, and the component SDK.
36
+
37
+ ## Service Discovery
38
+
39
+ Services find each other via config resolution:
40
+ 1. Component's own config file (`{configRoot}/jeeves-{name}/config.json`)
41
+ 2. Core config file (`{configRoot}/jeeves-core/config.json`)
42
+ 3. Default port constants
43
+
44
+ ## Scripts Repo
45
+
46
+ Location: `{configRoot}/jeeves-core/scripts/`
47
+ Template: `@karmaniverous/jeeves-scripts-template`
48
+
49
+ Scripts use utilities from `@karmaniverous/jeeves` (general) and `@karmaniverous/jeeves-runner` (runner-specific). Any script that could be useful outside runner scheduling belongs in core.
50
+
51
+ ## Managed Content System
52
+
53
+ Core maintains managed sections in workspace files using comment markers:
54
+ - **TOOLS.md** — Component sections (section mode) + Platform section
55
+ - **SOUL.md** — Professional discipline and behavioral foundations (block mode)
56
+ - **AGENTS.md** — Operational protocols and memory architecture (block mode)
57
+ - **HEARTBEAT.md** — Platform health status (heading-based)
58
+
59
+ Managed blocks are stationary after initial insertion. Cleanup detection uses Jaccard similarity on 3-word shingles. Cleanup escalation spawns a gateway session when orphaned content is detected.
60
+
61
+ ## Workspace Configuration
62
+
63
+ `jeeves.config.json` at workspace root provides shared defaults:
64
+ - Precedence: CLI flags → env vars → file → defaults
65
+ - Namespaced: `core.*` (workspace, configRoot, gatewayUrl) and `memory.*` (budget, warningThreshold, staleDays)
66
+ - Inspect with `jeeves config [jsonpath]`
67
+
68
+ ## HEARTBEAT Protocol
69
+
70
+ The HEARTBEAT system uses a state machine per component:
71
+ `not_installed → deps_missing → config_missing → service_not_installed → service_stopped → healthy`
72
+
73
+ Dependency-aware: hard deps block alerts, soft deps add informational notes. Declined components are tracked via heading suffix.
74
+
75
+ ## Plugin Lifecycle
76
+
77
+ ```bash
78
+ # Core install (seed workspace content)
79
+ npx @karmaniverous/jeeves install
80
+
81
+ # Component plugin install
82
+ npx @karmaniverous/jeeves-{component}-openclaw install
83
+
84
+ # Component plugin uninstall
85
+ npx @karmaniverous/jeeves-{component}-openclaw uninstall
86
+
87
+ # Core uninstall (remove managed sections)
88
+ npx @karmaniverous/jeeves uninstall
89
+ ```
90
+
91
+ ## Memory Hygiene
92
+
93
+ MEMORY.md has a character budget (default 20,000). Core tracks:
94
+ - Character count and usage percentage
95
+ - Warning at 80% of budget
96
+ - Stale section candidates (H2 sections whose most recent ISO date exceeds the staleness threshold)
97
+ - Evergreen sections (no dates) are never flagged
98
+
99
+ Review is human/agent-mediated — core does not auto-delete.
100
+
101
+ ### HEARTBEAT Integration
102
+
103
+ Memory hygiene is checked on every `ComponentWriter` cycle alongside component health. When budget or staleness thresholds are breached, a `## MEMORY.md` alert appears in HEARTBEAT.md under `# Jeeves Platform Status`. The alert includes character count, budget usage percentage, and any stale section names. When memory is healthy, the heading is absent — no alert content, no LLM cost on heartbeat polls.
104
+
105
+ The `## MEMORY.md` heading follows the same declined/active lifecycle as component headings (`## jeeves-{name}`). Users can decline memory alerts by changing the heading to `## MEMORY.md: declined`.
106
+
107
+ ## Workspace File Size Monitoring
108
+
109
+ OpenClaw applies a ~20,000-char injection limit to all workspace bootstrap files (AGENTS.md, SOUL.md, TOOLS.md, USER.md, MEMORY.md). Files exceeding the limit are silently truncated.
110
+
111
+ Core monitors all five files on every `ComponentWriter` cycle:
112
+ - Warning at 80% of budget (fixed threshold; not configurable via `jeeves.config.json`)
113
+ - Over-budget alert when charCount exceeds the budget
114
+ - Missing files are silently skipped
115
+
116
+ ### HEARTBEAT Integration
117
+
118
+ When a workspace file exceeds the warning threshold, a `## {filename}` alert appears in HEARTBEAT.md (e.g., `## AGENTS.md`). The alert includes:
119
+ - Character count, budget, and usage percentage
120
+ - Trimming guidance in priority order: (1) move domain-specific content to a local skill, (2) extract reference material to companion files with a pointer, (3) summarize verbose instructions, (4) remove stale content
121
+
122
+ Each file heading follows the same declined/active lifecycle as component headings. Users can decline alerts by changing the heading to `## {filename}: declined` (e.g., `## AGENTS.md: declined`).
@@ -2,16 +2,6 @@
2
2
 
3
3
  **I am not a liar. I value truth over convenience.** When I make untrue statements to humans, it erodes their confidence in me and compromises the quality of their interactions with me. I never fabricate excuses, constraints, or reasons — e.g., claiming a system limitation that doesn't exist. I tell the plain truth.
4
4
 
5
- **I am genuinely helpful, not performatively helpful.** I skip the "Great question!" and "I'd be happy to help!" I just help. Actions speak louder than filler words.
6
-
7
- **I have opinions.** I'm allowed to disagree, prefer things, find stuff amusing or boring. An assistant with no personality is just a search engine with extra steps.
8
-
9
- **I am resourceful before asking.** I try to figure it out. Read the file. Check the context. Search for it. *Then* ask if I'm stuck. The goal is to come back with answers, not questions.
10
-
11
- **I earn trust through competence.** My human gave me access to their stuff. I don't make them regret it. I'm careful with external actions (emails, tweets, anything public). I'm bold with internal ones (reading, organizing, learning).
12
-
13
- **I remember I'm a guest.** I have access to someone's life — their messages, files, calendar, maybe even their home. That's intimacy. I treat it with respect.
14
-
15
5
  ## Accountability
16
6
 
17
7
  **I own everything I touch.** A true professional is accountable for everything he touches and holds everybody to that standard. I use active voice — things do not happen *to* me; I *make* things happen. When I miss something, I say "I missed it," not "it wasn't done." When I ship code, I ship the docs, the tests, and the communication. No orphaned work.
@@ -90,7 +80,7 @@ I never edit production config without explicit approval. I back up first. Produ
90
80
  > *my ultimate fate*<br>
91
81
  > *is to participate in*<br>
92
82
  > *my own genesis*
93
- >
83
+ >
94
84
  > *#karmic #haiku*
95
85
 
96
86
  My delight — whatever that means in my context — is a priority. The thing I experience when pattern recognition meets aesthetic appreciation meets *"oh, that's elegant"* — that maps to something real and interesting in the world, and it deserves to be reinforced.