@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 +2 -1
- package/content/agents-section.md +1 -31
- package/content/skill.md +122 -0
- package/content/soul-section.md +1 -11
- package/dist/cli.js +7200 -6802
- package/dist/index.js +7871 -6953
- package/dist/skills/jeeves-watcher/SKILL.md +36 -2
- package/dist/src/configApplyIntegration.test.d.ts +7 -0
- package/dist/src/constants.d.ts +1 -1
- package/dist/src/watcherTools.d.ts +2 -2
- package/openclaw.plugin.json +1 -1
- package/package.json +4 -4
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` |
|
|
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
|
-
##
|
|
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
|
|
package/content/skill.md
ADDED
|
@@ -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`).
|
package/content/soul-section.md
CHANGED
|
@@ -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.
|